whl&cUphfZvPnfgwWYZDP7Aa~>+XPZ*(>KN?@ds{izIJ_GREAg@rVg)Y=PdvB
zxU0iGBlF&$n0v4PS)e{7LxK5tC@66Z|1Qw~cU1aOe7@!ST-b4x2HR
z{K{uJnWthOR(=cK9^q*kNly|H^V(<3ps$OXK1xw>R4liQDNDJ1bc1vC4u;~wH2;>z
z@i>?(fetGG!>_mf0ssRpz0aTMk6h^J5*1=YF6M&q>V=
z2yiI0l0L*C-UNooV>q#L5Y*Lhp)GP6=DAnCo051NO%VjYN1$ljVyZ)nOw1
z0E6cN)eMwYL3S^gg83#HhFpY&8;f)*@q_9NQ`qJxKBjbDbaWUs%7mDr^L3p6>bbbm
zAeS?W_;AA+RuN#hwo1$ybuUzW*Q{H$ne~dL4id
zJypo?+r$&yY%$iTKrxg(y<6uAU&QYHsl|dHaP2(q#{l1sJ&<
z{eJGn0Y#OpPblnRHp&a*1sz}Tg2x%<-GCV885yg{vXovIRSVS%
z4;RqU&Ka46@dC=h{_w5Ma(}$uv(Fq+l0t%;$uZRmQXknJ;D<`?>3rJYAh@eWmlqX$
zqe)6)jkDPi0blrz4Lp~3qhW;Mv$ReGDrF^YA=4Q80;;mfVeJkVuRwA<9g;sR_gMZ|w(0MmFZBQJQJuC@J1676SD@Pm~(k*2Sz-)RW&UoC46
zCO;R6M6|qWqJ~y{5F5bvb>bbbZ;=p2K{_V*s7y=0#&B>TXX>H&D0lqhqenJ~{Kdk1
z(Gt+*g}l3B4m0!)P*-1REORiPPAXrIWo=z~<{Kxu*J1aF
zv+cXElajU#rUSl9q6dzn?m19ZWM7=xO2-1z|685F4I@`OAR*5Io^wow|lXMG#U
z1biINvsa0>7(ha+GoOB4v$s&}n2TorDM!H}e>6F+%?_dy&}FtusnjL{I;>tM@@O)aacU*dzacclE9F`&Y=(0lRLUxa?UTIqab=E*
zN7km&Qz)Sm)Di>(_%28uz*=X1R)&?m<>mtefCbvvWl^%w6I>3bA}hN3Z;w^%?F9DO
zxY0rAcP1iL$R0M>1Uge4tq>~*41r$nM&bCGQ%s0XzJ%-(Jpf-Vbfo5(*oZ5KZ5uDu
zY+L!K2#3a7?BO7{Bn*hc1~{1Rj#QH<{%6ae%Q<3VLl=_oU=(@zP^K8!$DV?2NTD1n
z@sycicg_sxJ`>viERsXwn3;QNCewUqxm@?o%~>F1aw{$_IATnCA~WFAtH7qIh76L#
zk%6N0c#}%ZKIG7{2tPpQlOTJZ)`+5Es+C5AZ-AlQz8S-ik*E-8iU2>t!-_fMIE$xr
z+GW7>Rh_6Yci;1$it7S?Yu?%~(%NY3G>JbuXnI)seNRceQd?BiQq4jqveJ0+(gL6J~2x!hzu3
zrv)Pbv7~C%{4H(<%B398Gd#7NYLFeTuNbKJ7}6(I{o~f0=j8#RP`
z-R0t{keAB`el=92E-me724rM^x_w``5ig!G&Pcpz+|t0De8(}8eAT}{rG-8HyUd8*
z6h_3+Kz>x*uVJ(%b&-(bR4u;O?N2Ji@;)>s;g`x{)6FI+rSBJ#yfO^UN?0!g^qOFl
zfp%&+J@OB>d8+Lt;aiDdw+JVc_Ol5zQnE_Jd__i0r#Gn3TemvViZ?)v4PS8YM@%g*
ze1Q?OpqMnaMKJ=`U74qh0An9oOB8A#>8sW>Xj1RW!}-R$UE1-
zUXyn4IB+eIJe}AP|0+4O#x87CkgmCA%9c
zPaSm5b!f^GRw^;HmiVNbpd4&gY*;K&)!RHmS#p+0(av=%;&_2^M|pE<+mU2NPW9@!
zh}V+{DKv*|w6CIYCf(=i1_7Y_{h9FiS1elj#o2kWvx@5wNI08xg3}{fQO25H2uX#K
z0&5TD&YM{S4L@&!6|qH+c*!$+JaO^cF9f7>Nhx?r?gSSzm^8PaO+_1+2Y#$krYAT)
z?WY@AMb5Q~usrm}v94^8ZpVb0jm}A^Qy3k+JT>H4ft;uBzkYWvfw#uxvVJzMPMRDn
zwi5RfX
zar>bylFKhvIq7~mmlRS(%dUDY`K;c2wbNc5J=_AYj_?F#hW8!eH9_8mcOSGc1n_s6
z4ch}4R*F?8&Q5B+^R;WV;+IU8L}MM&bO)k5C8N7#a6gQiT{m4_+}^zM+VE}p%JDNg
zI$=eR^d*jIBEbcQNd?<;)%ejJDxSoB-;T|bJSeQnWXNSb#@tA7I;hEnM|{sO
zR&=s|HT3?Gj?Y@9ZD^9~(=vUTq`|!H&SYIy?Q*@nGSwNQa=j^YuIcbqP|4RPj*peS
zQwfdiRlnrthY!^8HJV7$ZNOdRKBu|Qqm$1L)$7&n5fZ3iup43+i!ZNEnHfl1hs898
z1U=Kwf;Z@NOAdUh&FM507bR0(cu>2jY|(|ii2jpxFk|4PE3z7>OYNV$jYeh^bmZlC
z$w*pRBlXRAVh2ld5dDQ%#af|f<>5%ZtVq07l_b!fdEI2HfX!2N#5EN_t(~uAijqU=`H;ydGOFBU>I3
zUho{*a4dySDuNSJ?Ga*EK?nTu0V1z?oBOCT2-Z
zAjAS*e7ArcpCg|Yc_a4bwaG!i@%wseoP1gD1
zl?=Gu%9P%SUcPGV-2h{lFV(lP({Osa!eE{-7#gm+euT~W#Jr874#XJMRGnSJiWWhs
zB(+_(=m&=6rS#5r|H}3;hdiRSqE^OBl@?ZwAABjbN@#r*@MU&uR#u~tltlz5h;2Zn~ABF?SNljVTR{HsA}pEozbcwv}RGMDdcKva1qK6?O(
zQc%db9JJ9HO#1vL2&f+{#ffbbJTVcK_OR#h^rTul+{zm=bSOenwRP05xk&ZCO|Ec|
zJcG~v&`pcP6o=4TPHRs>uY-k{=|NB1S*iaWCe5Ov2?fMwt!k%asBy{Jf&s7$V-TMc;*v%*CIo#Xjk7B
z@rYodl5_@7{u@m%jn0*E)Sye{W&voYnP5QaLy!A*o1FE^(gBHqJL>ay4IE)qezZ^L
z9-=(oO?CN6^7Q%q6S-f4o_bb`;cFh2Tz{YWpH*xs=T{HdNHgdx
zJTbr+NS&2;D&7e4ls_>z6?S)hzBt+ZR^L?{CbYw@5S=^~T-nlhVzLQ(tIJN@R^j@i
z+t0FqZmW!`cmQ+6;M~fA^T>Hw{FI_G>BZ$(AU^iAqB*|;nz-!E5m)`&P}_OMCuCsO
zR3L?(I2Q(DllFwyS6n(Y8!YAo4DfTKleC`c?5o5vq`La7bu^X(RgoZ{H0>m5WbU%A
z7#p(i)(2R~&$VN#B73Z}`Q8M%R+%b-&(`!uK5Dns&W%zsKq($mNf|HlEenV(giw``
zRx~`Qp(?pjpB*2UA!1%mbbn<=_#&pYec^Ns{}+0~D-}xIlJ9tmlunV4LC#^-z1^&On*G4&8B?U$l9p+;D?<<*q4}s
z1tx16q-Rs+YFfIVt>TBOYr6`?R)!tlwaw47xKC=gKHf%^a4J!#wl5p|Q!Sj;?p;c?
z8gaV!G3hwzbH2UHzNDFJCCIMr#|j&)+YAe`UuX6Q{3Z-IyyL$_@7c5&<{!fFFBJA)
zxyby_T=a5;nR#0MI~QRNs{a?U{0pi~>#0B&g$diP^eR>B>o&p%e<0<74Lhg0$2!NF
z+E}c%kg8->E+rP+t#Dm!RvDAY2or#$R$P=SlOOxJ5_>P>eGOOCgb75cPfCDvQ9v1Mev6Z&KJgoN0b#~!?^SzPROs)O~Hoagp>jA_67$HaSG;2
z?%aQ$+A2F5_e|qv}Zzxc_E4x!E%DnG{Ci(*dF}x@L8D>KFcT8d2(t6zL>LFTRYf
zc4zSQ55%rV+=NB@8*uI0+pR!3Tkjy(PX05C_o5~`(UDO%{JH(aw3{Rfp9K`jG^(fv
z%_HG(I{uZPs1V-JsF^P=iZACEXORrd-1!L6Mgxm#yU3(*fD((TZe!TqdvRV6IkXFH-
zA#s04*19;hw?bci988eI?y?!kuTf0-BN119rLGlFb*SiRnJwwvdz|kHHa^IG5t-`Avx{R1QBiE*dLXK9(b@Dnr7rZlBp~G3?0h$|f{8rWZ9W
zr#b3{)k4o*wEau*=JcC;jEIR9E=fU=eGgGX34a$o09ES2|2(X^ul#>mZQ$?MUzqV9
zqpSbc`0we#zZFnWY6ENTTh0Gxmhea54~G9c>HUr2|5#pN>HW6<+QdJg{C{iwot^$>
z!hb9;&>a2m8vhF+{v-KkkoVuv^^at2pw9hh??2o63&H*o`0dy4^ZoDL_V@Yz$MOQ%
z?<4RZfj?*a|9jg1UGeN*@$aGh-KGCnUSR$GkNcbA|I)KHRnYIZkAi}E|2()4P$}i_
G)&BuGn@C*%
diff --git a/editor/dve/language-configuration.json b/editor/dve/language-configuration.json
deleted file mode 100644
index ae56a0e..0000000
--- a/editor/dve/language-configuration.json
+++ /dev/null
@@ -1,19 +0,0 @@
-{
- "comments": {},
- "brackets": [
- ["{{", "}}"],
- ["{{{", "}}}"]
- ],
- "autoClosingPairs": [
- { "open": "{{", "close": "}}" },
- { "open": "{{{", "close": "}}}" },
- { "open": "\"", "close": "\"", "notIn": ["string"] },
- { "open": "'", "close": "'", "notIn": ["string"] }
- ],
- "surroundingPairs": [
- ["{{", "}}"],
- ["{{{", "}}}"],
- ["\"", "\""],
- ["'", "'"]
- ]
-}
diff --git a/editor/dve/package.json b/editor/dve/package.json
deleted file mode 100644
index 1bcaa23..0000000
--- a/editor/dve/package.json
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "name": "dve-language",
- "displayName": "DVE Template Language",
- "description": "Syntax highlighting for Deserve (.dve) templates",
- "version": "0.1.0",
- "publisher": "neabyte",
- "engines": {
- "vscode": "^1.74.0"
- },
- "categories": [
- "Programming Languages"
- ],
- "contributes": {
- "languages": [
- {
- "id": "dve",
- "aliases": [
- "DVE",
- "dve"
- ],
- "extensions": [
- ".dve"
- ],
- "configuration": "./language-configuration.json"
- }
- ],
- "snippets": [
- {
- "language": "dve",
- "path": "./snippets/dve.code-snippets"
- }
- ],
- "grammars": [
- {
- "language": "dve",
- "scopeName": "text.html.dve",
- "path": "./syntaxes/dve.tmLanguage.json",
- "embeddedLanguages": {
- "meta.embedded.line.dve": "dve",
- "meta.embedded.block.dve": "dve"
- }
- }
- ]
- }
-}
diff --git a/editor/dve/snippets/dve.code-snippets b/editor/dve/snippets/dve.code-snippets
deleted file mode 100644
index 44899f3..0000000
--- a/editor/dve/snippets/dve.code-snippets
+++ /dev/null
@@ -1,61 +0,0 @@
-{
- "DVE: Tag": {
- "prefix": "dve",
- "body": ["{{ ${1:value} }}"],
- "description": "Insert DVE tag: {{ value }}"
- },
- "DVE: Raw Tag": {
- "prefix": "dveraw",
- "body": ["{{{ ${1:html} }}}"],
- "description": "Insert DVE raw tag: {{{ html }}}"
- },
- "DVE: Include": {
- "prefix": "dveinc",
- "body": ["{{> ${1:partials/header.dve} }}"],
- "description": "Insert DVE include: {{> path }}"
- },
- "DVE: If / Else": {
- "prefix": "dveif",
- "body": ["{{#if ${1:condition}}}${2:then}{{else}}${3:else}{{/if}}"],
- "description": "Insert DVE if/else block"
- },
- "DVE: If": {
- "prefix": "dveifn",
- "body": ["{{#if ${1:condition}}}", " ${2:then}", "{{/if}}"],
- "description": "Insert DVE if block (multi-line)"
- },
- "DVE: Each": {
- "prefix": "dveeach",
- "body": ["{{#each ${1:items} as ${2:item}}}", " ${3:{{ item }}}", "{{/each}}"],
- "description": "Insert DVE each block"
- },
- "DVE: Each (With Meta)": {
- "prefix": "dveeachm",
- "body": [
- "{{#each ${1:items} as ${2:item}}}",
- " ({{ @index }}/{{ @length }}) ${3:{{ item }}}",
- "{{/each}}"
- ],
- "description": "Insert DVE each block with @index/@length"
- },
- "DVE: Ternary": {
- "prefix": "dvetern",
- "body": ["{{ ${1:condition} ? ${2:yes} : ${3:no} }}"],
- "description": "Insert DVE ternary: {{ cond ? yes : no }}"
- },
- "DVE: Default (Nullish)": {
- "prefix": "dvedef",
- "body": ["{{ ${1:value} ?? ${2:'fallback'} }}"],
- "description": "Insert DVE nullish default: {{ value ?? 'fallback' }}"
- },
- "DVE: Optional Chain": {
- "prefix": "dveopt",
- "body": ["{{ ${1:user}?.${2:name} ?? ${3:'Guest'} }}"],
- "description": "Insert DVE optional chain: {{ user?.name ?? 'Guest' }}"
- },
- "DVE: Comment (HTML)": {
- "prefix": "dvecmt",
- "body": [""],
- "description": "Insert HTML comment inside template"
- }
-}
diff --git a/editor/dve/syntaxes/dve.tmLanguage.json b/editor/dve/syntaxes/dve.tmLanguage.json
deleted file mode 100644
index ac7e8db..0000000
--- a/editor/dve/syntaxes/dve.tmLanguage.json
+++ /dev/null
@@ -1,141 +0,0 @@
-{
- "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
- "name": "DVE",
- "scopeName": "text.html.dve",
- "fileTypes": ["dve"],
- "patterns": [{ "include": "#dve-tags" }, { "include": "text.html.basic" }],
- "repository": {
- "dve-tags": {
- "patterns": [
- { "include": "#dve-raw-tag" },
- { "include": "#dve-include-tag" },
- { "include": "#dve-block-tag" },
- { "include": "#dve-output-tag" }
- ]
- },
- "dve-raw-tag": {
- "begin": "\\{\\{\\{",
- "beginCaptures": {
- "0": { "name": "punctuation.section.embedded.begin.dve" }
- },
- "end": "\\}\\}\\}",
- "endCaptures": {
- "0": { "name": "punctuation.section.embedded.end.dve" }
- },
- "name": "meta.embedded.line.dve meta.tag.raw.dve",
- "contentName": "meta.expression.dve",
- "patterns": [{ "include": "#expression" }]
- },
- "dve-include-tag": {
- "begin": "\\{\\{\\s*(>)",
- "beginCaptures": {
- "0": { "name": "punctuation.section.embedded.begin.dve" },
- "1": { "name": "keyword.control.include.dve" }
- },
- "end": "\\}\\}",
- "endCaptures": {
- "0": { "name": "punctuation.section.embedded.end.dve" }
- },
- "name": "meta.embedded.line.dve meta.tag.include.dve",
- "patterns": [{ "include": "#path" }]
- },
- "dve-block-tag": {
- "begin": "\\{\\{\\s*(#if|#each|else|/if|/each)\\b",
- "beginCaptures": {
- "0": { "name": "punctuation.section.embedded.begin.dve" },
- "1": { "name": "keyword.control.dve" }
- },
- "end": "\\}\\}",
- "endCaptures": {
- "0": { "name": "punctuation.section.embedded.end.dve" }
- },
- "name": "meta.embedded.block.dve meta.tag.block.dve",
- "patterns": [
- {
- "match": "\\b(as)\\s+([a-zA-Z_$][a-zA-Z0-9_$]*)",
- "captures": {
- "1": { "name": "keyword.operator.as.dve" },
- "2": { "name": "variable.parameter.dve" }
- }
- },
- { "include": "#expression" }
- ]
- },
- "dve-output-tag": {
- "begin": "\\{\\{",
- "beginCaptures": {
- "0": { "name": "punctuation.section.embedded.begin.dve" }
- },
- "end": "\\}\\}",
- "endCaptures": {
- "0": { "name": "punctuation.section.embedded.end.dve" }
- },
- "name": "meta.embedded.line.dve meta.tag.output.dve",
- "contentName": "meta.expression.dve",
- "patterns": [{ "include": "#expression" }]
- },
- "expression": {
- "patterns": [
- { "include": "#string-double" },
- { "include": "#string-single" },
- { "include": "#number" },
- { "include": "#literal" },
- { "include": "#operator" },
- { "include": "#identifier" }
- ]
- },
- "path": {
- "match": "[@a-zA-Z0-9_$./\\\\-]+\\.dve|[@a-zA-Z_$][a-zA-Z0-9_$.]*",
- "name": "string.unquoted.path.dve"
- },
- "string-double": {
- "begin": "\"",
- "end": "\"",
- "name": "string.quoted.double.dve",
- "patterns": [
- {
- "match": "\\\\.",
- "name": "constant.character.escape.dve"
- }
- ]
- },
- "string-single": {
- "begin": "'",
- "end": "'",
- "name": "string.quoted.single.dve",
- "patterns": [
- {
- "match": "\\\\.",
- "name": "constant.character.escape.dve"
- }
- ]
- },
- "number": {
- "match": "\\b[0-9]+(\\.[0-9]+)?([eE][+-]?[0-9]+)?\\b",
- "name": "constant.numeric.dve"
- },
- "literal": {
- "match": "\\b(true|false|null|undefined)\\b",
- "name": "constant.language.dve"
- },
- "operator": {
- "match": "\\?\\.|===|!==|==|!=|&&|\\|\\||\\?\\?|>=|<=|[?.!:()+\\-*/%<>]",
- "name": "keyword.operator.dve"
- },
- "identifier": {
- "match": "\\b([a-zA-Z_$@][a-zA-Z0-9_$]*)\\b",
- "name": "variable.other.dve"
- }
- },
- "injections": {
- "L:text.html.dve - (meta.embedded.line.dve | meta.embedded.block.dve)": {
- "patterns": [{ "include": "#dve-tags" }]
- },
- "L:text.html.basic": {
- "patterns": [{ "include": "#dve-tags" }]
- },
- "L:string.quoted.double.html, L:string.quoted.single.html": {
- "patterns": [{ "include": "#dve-tags" }]
- }
- }
-}