From 0d3865a45a55e9ae2516917e3b20f34ffbd534a9 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Sun, 28 Jun 2026 13:36:28 +0530 Subject: [PATCH 1/7] feat: ejs - wip --- package-lock.json | 8 +--- package.json | 9 +++- src/languages/ejs/ejs.grammar | 46 +++++++++++++++++++ src/languages/ejs/index.js | 74 +++++++++++++++++++++++++++++++ src/languages/ejs/parser.js | 16 +++++++ src/languages/ejs/parser.terms.js | 15 +++++++ src/languages/index.js | 3 ++ 7 files changed, 163 insertions(+), 8 deletions(-) create mode 100644 src/languages/ejs/ejs.grammar create mode 100644 src/languages/ejs/index.js create mode 100644 src/languages/ejs/parser.js create mode 100644 src/languages/ejs/parser.terms.js diff --git a/package-lock.json b/package-lock.json index 0c7fb81..6e324ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,8 +11,10 @@ "dependencies": { "@citedrive/codemirror-lang-bibtex": "^6.4.1", "@codemirror/autocomplete": "^6.20.3", + "@codemirror/lang-html": "^6.4.11", "@codemirror/language": "^6.12.3", "@iizukak/codemirror-lang-wgsl": "^0.3.0", + "@lezer/common": "^1.5.2", "@lezer/highlight": "^1.2.3", "@lezer/lr": "^1.4.10", "@replit/codemirror-lang-svelte": "^6.0.0", @@ -78,7 +80,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/lang-css/-/lang-css-6.3.1.tgz", "integrity": "sha512-kr5fwBGiGtmz6l0LSJIbno9QrifNMUusivHbnA1H6Dmqy4HZFte3UAICix1VuKo0lMPKQr2rqB+0BkKi/S3Ejg==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.0.0", @@ -92,7 +93,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/lang-html/-/lang-html-6.4.11.tgz", "integrity": "sha512-9NsXp7Nwp891pQchI7gPdTwBuSuT3K65NGTHWHNJ55HjYcHLllr0rbIZNdOzas9ztc1EUVBlHou85FFZS4BNnw==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/lang-css": "^6.0.0", @@ -110,7 +110,6 @@ "resolved": "https://registry.npmjs.org/@codemirror/lang-javascript/-/lang-javascript-6.2.5.tgz", "integrity": "sha512-zD4e5mS+50htS7F+TYjBPsiIFGanfVqg4HyUz6WNFikgOPf2BgKlx+TQedI1w6n/IqRBVBbBWmGFdLB/7uxO4A==", "license": "MIT", - "peer": true, "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/language": "^6.6.0", @@ -643,7 +642,6 @@ "resolved": "https://registry.npmjs.org/@lezer/css/-/css-1.3.3.tgz", "integrity": "sha512-RzBo8r+/6QJeow7aPHIpGVIH59xTcJXp399820gZoMo9noQDRVpJLheIBUicYwKcsbOYoBRoLZlf2720dG/4Tg==", "license": "MIT", - "peer": true, "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", @@ -689,7 +687,6 @@ "resolved": "https://registry.npmjs.org/@lezer/html/-/html-1.3.13.tgz", "integrity": "sha512-oI7n6NJml729m7pjm9lvLvmXbdoMoi2f+1pwSDJkl9d68zGr7a9Btz8NdHTGQZtW2DA25ybeuv/SyDb9D5tseg==", "license": "MIT", - "peer": true, "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.0.0", @@ -701,7 +698,6 @@ "resolved": "https://registry.npmjs.org/@lezer/javascript/-/javascript-1.5.4.tgz", "integrity": "sha512-vvYx3MhWqeZtGPwDStM2dwgljd5smolYD2lR2UyFcHfxbBQebqx8yjmFmxtJ/E6nN6u1D9srOiVWm3Rb4tmcUA==", "license": "MIT", - "peer": true, "dependencies": { "@lezer/common": "^1.2.0", "@lezer/highlight": "^1.1.3", diff --git a/package.json b/package.json index 5274511..e15f650 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,10 @@ "dependencies": { "@citedrive/codemirror-lang-bibtex": "^6.4.1", "@codemirror/autocomplete": "^6.20.3", + "@codemirror/lang-html": "^6.4.11", "@codemirror/language": "^6.12.3", "@iizukak/codemirror-lang-wgsl": "^0.3.0", + "@lezer/common": "^1.5.2", "@lezer/highlight": "^1.2.3", "@lezer/lr": "^1.4.10", "@replit/codemirror-lang-svelte": "^6.0.0", @@ -33,10 +35,13 @@ }, "scripts": { "dev": "node esbuild.config.mjs --serve", - "generate": "lezer-generator src/languages/autohotkey/autohotkey.grammar -o src/languages/autohotkey/parser.js && lezer-generator src/languages/zig/zig.grammar -o src/languages/zig/parser.js", + "generate": "lezer-generator src/languages/autohotkey/autohotkey.grammar -o src/languages/autohotkey/parser.js && lezer-generator src/languages/zig/zig.grammar -o src/languages/zig/parser.js && lezer-generator src/languages/ejs/ejs.grammar -o src/languages/ejs/parser.js", "build": "npm run generate && node esbuild.config.mjs", "test": "npm run generate && node scripts/test-parser.mjs", "check": "npm run generate && tsc --noEmit && node scripts/test-parser.mjs && npm run build && node scripts/test-plugin-runtime.cjs" }, - "browserslist": "cover 100%,not android < 5" + "browserslist": "cover 100%,not android < 5", + "allowScripts": { + "esbuild@0.25.8": true + } } diff --git a/src/languages/ejs/ejs.grammar b/src/languages/ejs/ejs.grammar new file mode 100644 index 0000000..ba071a9 --- /dev/null +++ b/src/languages/ejs/ejs.grammar @@ -0,0 +1,46 @@ +@top Template { (Text | EjsTag | EscapedTag)* } + +EjsTag { + EjsComment | + EjsExpression | + EjsBlock +} + +EjsComment { + CommentStart Content? TagEnd +} + +EjsExpression { + ExprStart Content? TagEnd +} + +EjsBlock { + BlockStart Content? TagEnd +} + +EscapedTag { + LiteralStart +} + +@tokens { + CommentStart { "<%#" } + ExprStart { "<%" ("=" | "-") } + BlockStart { "<%" "_"? } + LiteralStart { "<%%" } + + // Keep trim markers available to TagEnd while allowing them in JS content. + Content { (![%\-_] | "%" ![>] | "-" ![>%] | "_" ![>%])+ } + + TagEnd { ("-" | "_")? "%>" } + + Text { (![<] | "<" ![%])+ } + + @precedence { + LiteralStart, + CommentStart, + ExprStart, + BlockStart + } +} + +@detectDelim diff --git a/src/languages/ejs/index.js b/src/languages/ejs/index.js new file mode 100644 index 0000000..45e0801 --- /dev/null +++ b/src/languages/ejs/index.js @@ -0,0 +1,74 @@ +import { completeFromList } from "@codemirror/autocomplete"; +import { html, htmlLanguage } from "@codemirror/lang-html"; +import { LRLanguage, LanguageSupport } from "@codemirror/language"; +import { parseMixed } from "@lezer/common"; +import { styleTags, tags as t } from "@lezer/highlight"; +import { parser } from "./parser"; + +/** + * EJS Language Definition for Lezer + * + * Patterns: + * - <%# ... %> : Comments + * - <%= ... %> : Output (escaped) + * - <%- ... %>: Output (unescaped) + * - <% ... %> : Code blocks + * - <%% : Literal <% + */ + +export const ejsLanguage = LRLanguage.define({ + name: "ejs", + parser: parser.configure({ + wrap: parseMixed((node) => { + if (node.name !== "Template") return null; + return { + parser: htmlLanguage.parser, + overlay: (overlayNode) => overlayNode.name === "Text", + }; + }), + props: [ + styleTags({ + "EjsComment CommentStart EjsComment/Content EjsComment/TagEnd": t.comment, + "ExprStart BlockStart EjsExpression/TagEnd EjsBlock/TagEnd": t.keyword, + LiteralStart: t.string, + EscapedTag: t.string, + "EjsExpression/Content EjsBlock/Content": t.string, + }) + ] + }), + languageData: { + commentTokens: { + block: { open: "<%#", close: "%>" } + }, + indentOnInput: /^\s*(?:else|catch|finally)\b/, + } +}); + +/** + * EJS Language Support for CodeMirror + */ +export function ejs() { + const htmlSupport = html({ matchClosingTags: false }); + + return new LanguageSupport(ejsLanguage, [ + htmlSupport.support, + ejsLanguage.data.of({ autocomplete: completeFromList(ejsAutocomplete) }) + ]); +} + +/** + * Autocomplete suggestions for EJS tags + */ +const ejsAutocomplete = [ + { label: "<% %>", type: "keyword", boost: 99 }, + { label: "<%= %>", type: "keyword", boost: 98 }, + { label: "<%- %>", type: "keyword", boost: 97 }, + { label: "<%# %>", type: "comment", boost: 96 }, +]; + +export const ejsMode = { + name: "ejs", + caption: "EJS", + extensions: ["ejs"], + load: ejs, +}; diff --git a/src/languages/ejs/parser.js b/src/languages/ejs/parser.js new file mode 100644 index 0000000..f9e0f80 --- /dev/null +++ b/src/languages/ejs/parser.js @@ -0,0 +1,16 @@ +// This file was generated by lezer-generator. You probably shouldn't edit it. +import {LRParser} from "@lezer/lr" +export const parser = LRParser.deserialize({ + version: 14, + states: "#`QQOPOOOcOQO'#C`OkOQO'#CdOsOQO'#CfOOOO'#C_'#C_OOOO'#Ch'#ChOOOO'#Cj'#CjQQOPOOOOOO,58z,58zO{OQO,58zOOOO,59O,59OO!QOQO,59OOOOO,59Q,59QO!VOQO,59QOOOO-E6h-E6hOOOO1G.f1G.fOOOO1G.j1G.jOOOO1G.l1G.l", + stateData: "!b~OQUOTPOXQOZRO]TO~OUXOVWO~OUZOVYO~OU]OV[O~OV_O~OV`O~OVaO~O]TXZX~", + goto: "n_PPP`dPPPdPdP`PhTUOVTSOVQVOR^V", + nodeNames: "⚠ Template Text EjsTag EjsComment CommentStart Content TagEnd EjsExpression ExprStart EjsBlock BlockStart EscapedTag LiteralStart", + maxTerm: 15, + skippedNodes: [0], + repeatNodeCount: 1, + tokenData: ".SRRZOutuv'Wv}t}!O(Y!O!^t!^!_)f!_#Rt#R#S(Y#S;'St;'S;=`'Q<%lOtR{ZUQQPOutuv!nv}t}!O%e!O!^t!^!_#Y!_#Rt#R#S%e#S;'St;'S;=`'Q<%lOtR!sVQPO!^t!^!_#Y!_!`t!`!a&V!a;'St;'S;=`'Q<%lOtR#_XUQOutuv#zv}t}!O%e!O#Rt#R#S%e#S;'St;'S;=`'Q<%lOtQ#}SO!`$Z!a;'S$Z;'S;=`%_<%lO$ZQ$`XUQOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZQ%OTOu$Zv!`$Z!a;'S$Z;'S;=`%_<%lO$ZQ%bP;=`<%l$ZR%jXQPOutuv&Vv!^t!^!_#Y!_!`t!`!a&V!a;'St;'S;=`'Q<%lOtP&[TQPO!^&V!^!_&k!_;'S&V;'S;=`&z<%lO&VP&nSOu&Vv;'S&V;'S;=`&z<%lO&VP&}P;=`<%l&VR'TP;=`<%ltR']VQPO!^t!^!_#Y!_!`t!`!a'r!a;'St;'S;=`'Q<%lOtR'yTVQQPO!^&V!^!_&k!_;'S&V;'S;=`&z<%lO&VR(_XQPOutuv(zv!^t!^!_#Y!_!`t!`!a&V!a;'St;'S;=`'Q<%lOtR)PVQPO!^&V!^!_&k!_!`&V!`!a'r!a;'S&V;'S;=`&z<%lO&VR)kXUQOutuv*Wv}t}!O%e!O#Rt#R#S%e#S;'St;'S;=`'Q<%lOtR*]]ZPOs$Zst+Utu$Zuv+xv}$Z}!O,l!O!_$Z!_!`,l!a#R$Z#R#S-`#S;'S$Z;'S;=`%_<%lO$ZR+]XUQTPOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZR,PXUQ]POu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZR,sXUQXPOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZR-gXUQZPOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$Z", + tokenizers: [0, 1], + topRules: {"Template":[0,1]}, + tokenPrec: 58 +}) diff --git a/src/languages/ejs/parser.terms.js b/src/languages/ejs/parser.terms.js new file mode 100644 index 0000000..882a4a8 --- /dev/null +++ b/src/languages/ejs/parser.terms.js @@ -0,0 +1,15 @@ +// This file was generated by lezer-generator. You probably shouldn't edit it. +export const + Template = 1, + Text = 2, + EjsTag = 3, + EjsComment = 4, + CommentStart = 5, + Content = 6, + TagEnd = 7, + EjsExpression = 8, + ExprStart = 9, + EjsBlock = 10, + BlockStart = 11, + EscapedTag = 12, + LiteralStart = 13 diff --git a/src/languages/index.js b/src/languages/index.js index 6e1e27b..272f308 100644 --- a/src/languages/index.js +++ b/src/languages/index.js @@ -3,6 +3,8 @@ import { communityLanguageModes } from "./community"; import { gitignoreMode } from "./gitignore"; import { zigMode } from "./zig"; +import { ejsMode } from "./ejs" + /** * Add future language descriptors here. Each descriptor owns its metadata and * lazy CodeMirror loader, so adding a mode doesn't require changing plugin @@ -13,4 +15,5 @@ export const languageModes = [ zigMode, gitignoreMode, ...communityLanguageModes, + ejsMode, ]; From 31576567f5cdcd6b050ea2556926f74d9534e396 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Sun, 28 Jun 2026 13:41:01 +0530 Subject: [PATCH 2/7] remove allow scripts from package.json --- package.json | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/package.json b/package.json index e15f650..eca5c2f 100644 --- a/package.json +++ b/package.json @@ -40,8 +40,5 @@ "test": "npm run generate && node scripts/test-parser.mjs", "check": "npm run generate && tsc --noEmit && node scripts/test-parser.mjs && npm run build && node scripts/test-plugin-runtime.cjs" }, - "browserslist": "cover 100%,not android < 5", - "allowScripts": { - "esbuild@0.25.8": true - } + "browserslist": "cover 100%,not android < 5" } From 738c364a22f6a1db41f14908ffb1475023490e19 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 29 Jun 2026 13:39:16 +0530 Subject: [PATCH 3/7] Add HTML comment and JS embedding to EJS mode Add external tokenizer for nested EJS comments and include @codemirror/lang-javascript as a dependency. Update grammar and parser to recognize HTML comments and to embed JavaScript ranges inside EJS content; add language data to enable HTML block comment tokens. --- package-lock.json | 5 +- package.json | 1 + plugin.zip | Bin 654632 -> 663140 bytes src/languages/ejs/ejs.grammar | 16 ++--- src/languages/ejs/index.js | 97 +++++++++++++++++++++++++----- src/languages/ejs/parser.js | 17 +++--- src/languages/ejs/parser.terms.js | 18 +++--- src/languages/ejs/tokens.js | 43 +++++++++++++ 8 files changed, 156 insertions(+), 41 deletions(-) create mode 100644 src/languages/ejs/tokens.js diff --git a/package-lock.json b/package-lock.json index 6e324ba..3c7642f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,18 @@ { "name": "acode-additional-langmodes", - "version": "1.1.0", + "version": "1.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "acode-additional-langmodes", - "version": "1.1.0", + "version": "1.0.1", "license": "MIT", "dependencies": { "@citedrive/codemirror-lang-bibtex": "^6.4.1", "@codemirror/autocomplete": "^6.20.3", "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-javascript": "^6.2.5", "@codemirror/language": "^6.12.3", "@iizukak/codemirror-lang-wgsl": "^0.3.0", "@lezer/common": "^1.5.2", diff --git a/package.json b/package.json index eca5c2f..e028d8c 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "@citedrive/codemirror-lang-bibtex": "^6.4.1", "@codemirror/autocomplete": "^6.20.3", "@codemirror/lang-html": "^6.4.11", + "@codemirror/lang-javascript": "^6.2.5", "@codemirror/language": "^6.12.3", "@iizukak/codemirror-lang-wgsl": "^0.3.0", "@lezer/common": "^1.5.2", diff --git a/plugin.zip b/plugin.zip index 486a16407e58d17018223025dd7d32ffc3419532..fd2f910eb91de443aa6b77009755e68135237479 100644 GIT binary patch delta 45177 zcmcG%2Y4IDoi}{Dz^1VCUxilTUQ z-uIGR$|bqOIg{#=*lF%o61v+dzEnHTn_Tkd635Bi#dkg@af{<_f4`Ys6jE~Tp6~fS zJ&&-vGyiG-nfdn_e(Cjn|Nek=b6=Oqyy34h{_3y(s`tc`cWqudWy16FcTU|e@|X9X zaY_8;7w&0+y~Nu*l{rmO#W`_a^=NiaM0IOw-JCm8JRJY9r%-5%KjF!ZKjO(08t_(9 z(2)e4RJFcHNDFBTVb$p)&GC)iGNCtK<8=t#@fmNvFdTosw?t@-f7#nv)DX3*Hd{$^ z)b4Qy0#+w++sew^C5obzl?}(Ys(aATLA7jePgFssN;I2t+^Q+g5+xW51nQfj){dyv zX|p*Nmq=@TS{YOsgoeXo*GD;;0t!do)X(FBbG@{!p;EDgKG(%|Heu-Uy}pM8u`5c? zebQVQzjkW(KxdSALNnojs;RA!&`h^KsyUoa;`em~9qmy(dqWytPpTvu^oPSLas!Fi zCcPl~=V)3|x}qHEYCx}ik3U-+oQgaAyY|kL0S&V<)9nsU#@v&tW5i7+B5u#Ls`a=v z&y+tn>FA0t`SXtUxzU@T<`2eHZ%5Fp1~o@F(T9>K-0JqA6O(S@3k3iZ^?Oyv>G)&* zovoctf*I9|xf#|R1MXDHP|&YACfvl&t3`)ct1YVW-5c_9WI6id_VarRE@HR~LCt+( zFruoC-X%p1@WE*T`ihZ1B0PyHR!*nMjRug zJA@U(6WSu7SlFRDNq2vrI}%0i^pfHZq^7yuNk8<<^@Z`n)5Yc{RcVi(p1#ZM#LMN( zz?&InmA}RA-(YTIZ;vm3RKlE|eeVqd*7iH^v)G3McAx+YwZ7h}s`e>2TeS7n4rlVc z#!*piTVlIo!A;$}*6+C-dH=)N)eS0Jw6 z6nH`Ql5K3sMh4x=eEjn_TEvq9y6sW9H2&<37YkYf%BbCLZ&C?7#Ml>Mhgi!h9&=wK&@1w|&kcT?{CLZW_GJoLl2`T3Z4(^fUyO)$UeYP6{2|BZSgAp&^_1M4- z@n3zuY{QUK@dVt_Xz}UzrkmWt>3Hy_y&KNE%gQvnJ2DxKZ+mvT;EmsP)2Pr9cl}p( zy!ek&eBaHTNQ>OuBA$2C*;m$YkMI8D`uIQJd={w(zc8`Qk2$g}Vy70X3hVz+{EJ@* zWS@6iHJih&D2ip#Qm+{~)-Rqz%^&#UZAC*)tHl$G1QskHNjltU3U1&_pEP-`{`hlW z%BQ)4Y4iFBYh=l5?TPRDa*+^;AN%qN{4RaDKsXiu#FyU-;7GjqD@FJ^{*`@M5!Gft zAMyvS7K?4^9EzQa&wpk2w#F-a`jrbpW4!p5mK|Peqe?8kfLqhlV7Gfv9kJNr?|Hs} zw(b;b;*Z{PQ1H@^>=ZBV>{6|6`G8lov` zyy~_+@fUBsMd*oNcUwMs+ZDg>wnAYj{`1?4g_H4DZ!6sGwGO$_fly?|tu^{5H1&cd zZIPUeAGrN>p(Sp=Bd^G7J(+}L1R@=-CGNQ+By`4qa>q%u(h{$@vjAW1clw2{_}zC_ z<$JB2Y?!>2VKxX9X1lIAzU}$KcX z;#dA!3x2!5b_~BC_*w^kfAY0M_+9_?%fMp9Ni2cTWW&IqQS)5dJDfVJ^VfVKKMvAexG}!Qq11=S%r0UWo_ME-^-6yXVgjrPG4cJ?rVwL~% zQ$ND*&A<7LQTnsL#eDG5J^kAqY))8}S^u7EB#!+1|7NW{_=qL`_V0@DR`~Sy#a@n{ z%WpqjBnlVfh0pAU%yR6RS9W==7qNhYY!L=Pbe&g$sL`StLf0S7ILm^FH z<4a4#O~bFO-w}WCzb11N`Ga5!$^3qUKJ`9(9zD40rtPLB(#Yx9rax?tzw&H9mcL#t zL8rZ&P(Hp<DOT0OS< zV7cOP=ty;g_7M-yteb#@IKAX?M^y_*vSx8Cdg8agXc7A3KYlSc-;0NFVU^W-}}ev5!ixDA_|mz=5Ph~q-bp5+2PZAYNIC-;NgqK~ zHod2H94O4h-id&k0PDI6SbXoxSsNOY8S#dfb8_0*r^l#jX=zCfKq>IVXI?&7^A|_8 zbdDp_=17he$d3Qyu2`ZNwZ!NTfzA2B7GeLmt24??HXWsHOCuX*#Z4%_?5nlNhh|VhGlvCD+j83-B>|34yB+W0JEiNEBENFYg3WX zJeTc~rLtZowF^aEij*74M1k(3y5`+_01CxysF50PvWz$?u>u`)h+rb!Ds$5 zlepMGjTMy|Z?mfRDd?V2fjIVHD_mdf81WS7L^KSXLyGqKFR;91Eq30Ms68BuP63BR zFRozbIX2VAvo3*#rPqq|dARPigUbvVSB#nXp_|rW1-OGvAomc#xd5V+R1-ctE+&F1 zK^$b?`z-q)HiE3+TT?*!*viva9NSg0!a)!9jIYX1Wl*)N)yp?T6>y$X#cQJbuF)#b#bn^_%%#`&vnWsBmq+pa?zJeoWYbGOgEs zQLy9dXTl+&k!})%0-=fS6NG)p>!B_|*o)+OJn-E}uNQ<}LKl5V5XvA}|4tAVk=#W+ zqF@s`>EDS$DU$CNg&Luq{!SDsk=sdgO@bBQCrrW-2*K@OdH$%u$jq1f!TBIQxM2^yW$||kIOaJX9;diD0@z5XqNytZyzx$I=yxBvrSwWW|us8xV>t&$_ zje6-NveK}h;bZ|T7@$$L7tl;?PoHiV{qf7fCxo_@^M4lJFC6n)UFeJ# zm3lM=KEMqo=>@`A5DCdA#@-V=)I}>^6{xul#tHhdSA}f)P`6H|(1L3d~5QX%^uV9fp z`I@kihF=%VC=h#HIAG-kqA{Nio+#-yN?L=E??7SlkZD4u%}1 zDk0u!3CQesgzMLH$ZplzLLYobm`QzJdq5mS-=X-mtJaIKoLn0hyYy`S^&jFPjJQY; zpUc!6;O5Oyt$v2?6vg);?{lJ9Bh1i$7R9mxuXP41BN&?*40Wqe^CQOif*zV}5_?Nh z%8?;og2z;)F|tznH&FT5_ArT13fLo;_L#+qb?qv&lTv?t@vTCn|HLd>g(>=`S)AYJ z^|L7ta`Q)zJ6wlNV&&p(amZI}tU`~X(mS)o{Ebm-zy|rX7o3|uB#9N+C%>1(J=?Hv z#sD7F7wwGVp~bS8SLsQJ!Qq4$>{C3W;jua}juM|OVX>@Z?M)eNz^3c7k(e@5k5;CL zn}o}&ZH_=)tgI|#kHSXhgQ&Qa;3Xj}vnk+gQVl|<(9|w_Cz~%Z4~o`7COCAJb>>OdgDfM2Rg|a z!ebl75+sh$7dB#=`)I)?aUZq-nl-k@6z$z44gsW(eqocipKi<&H_=~h60@;1!07hU z+|6PcvM1?@&EkGxfKG1~_a*Y~*(~0UyaDRpg1ia(k6W+|IF;W)f3`*JLf!-|%@nIZ zAcrzVg98-N&t!_Hk+(o!%M>fb2`7EeRxyVj-zx6gi4qvDI}o07_r_+@r*Dw6Ao_`| z;wI?igP3TnnK>BdoBF%Kj8gM_fqrwV_>ZXR0${ip%~YW@fN56KUl)0;(*TGCuLd$l zH)V;3(9Rq{{LwVMIn~ZQ9nTV@8=?C_s>OBzzj!iBJXqi(Q)~nH^)(bDeF=)~qvhMh zQel?%Z5MZLi76p&XP(6hukWJ^+eJswED0y{6|VYtLw-ouY)i~46ZDDgVtM{-YOBN) z-BNATuw#cU{F42gBfvMv+6p~>rrv{CCTgX3WQ)5tfPzB5vXNnheeb3Z><}}= zF8;Ag1r3_ue8F?}psEXq%79;AU+g0>hA zO*!I$Bgr~ucpbwjlrDj8OqG?vBI@>nBiYC-BoGn2~&Q1o_G=)Ofxo^ zUzw-3=84CIIr>bVcnFZN_UB`>jMMIX(UAH|XgnX=wA($(u)mZ3pL}rukmJ-^fIV}X zLFUo(1!AVYw~8n&5N82!nr_@FmJ8?Uk)7f&@|eYUU5^Ueu+>j93q@wSJx|LE(cCE- z+=WVlg(A#!bh%LcYvi5!c#%kiVLhv*NX$#@-8*)P&GhR<;(GuzOdY$#1Hur4B544h zK;97T+$~lz*2ftQ4@W)pU-pQDkmxH*Mc+D|+_llql!`l1NfW)V6liT@yElivUMl|G(E#Ib z8uqIl)-N~)Px`eftEIw%4p{@(WKk>x)mm+{aqi?v?B@V|crR$1hd#eowBWJ5Oq|XK zQw)P)MLl-rB)j1BS!Zl;7u9(vEfaT}JW2z-w@j?V3+JN+M}l^4iXrf`=u8d9Cg}a> z5!5S-VIisa*tJl1XkLvp!MJ0EVn^HeiI$>(;ng&E?7oa{c6IP z8t~93tm2XE1}^d%8e%}_j?VZ;{*)sz@w$N?v0>+Qu*uEM)OCLg;hqf#R|ax(n%TaF z2WFMSql4aQ0}pJbzp#l9U>!8mPwW?W3B7b>Kj%!p-7mJ90?IVqUoI+m3DEQ9V)3#^ zIaj*qg!xKcS}a`*EG?Zg1R2Oa0nD){5c8^0>$wdZ&hbfrC);yeyL4$rC;wr#d_YJv z9Rlce+9PTh?saR84zI&aDOz1v3EOAfVQWk|e!*{zk*NxweLy!J8Xlr^8<;8W9DF$e zMSm|{4C_P{9nkZZ@N~kD6w-Ao1zlc^h+cYzh}OdHG{s^RK1$BU22>4ZPA|QIh=b;U zay&p^CE{^ltDDwVfWWoVp$c*LnN~MUk;G~D!ZqFy2sF9F(XujCx4=04dR|g3OlA2K zSy7KWtR_nYd9qPFK%b}pP3@z9sK9Iu&>XwCSDpX_S)dJg2aTPyBd3LajC~E$uiM2k zkkcpaV(zZfMgtLbCN!rqH>#Ry{XEU81i3s#k5}@7-b%3~XUHhQR%5b5P4v^1VlkH3 z1C?UcmXqn-yGUQJ6kCN!+E69#v~+Sj7(MTT)z}Un!DJA)G18*+ud7f~FTK7>%w7+a zt859k(g&-=Jze8&n3GcSL=PqeTF2s&z9KZ`q8s3tjzKn4usp*o?N5m3%>mF$5X)99 zbtrPQyjr|w+c_yO{e$(k5;YXGT_#`I8#4bY#W!H)1_8H!`-^dZ$<|dORx&cZzla zv-+jG#D_(%XT^WF_+v?Q8TF6fBQ`XMs*~RM8bog|z5ci&v`nGk)TDI%G@Q6ZhGl$aoQa7ps{D)77N9&hio-#69r5qGyD+t@ zz1cCC?HCX7d6en{he#*0`OmQT!=#iwju2-AZow(`ew2)Olmn#CqZ}k^gl;)+iu6x< zltV|!0FtVR7Ex*skqM7dTTOzha_|sYK>A@ah*F2h1^gZ%)A&6~<^WSe=22-CnFUNu zYE?8{`)gCJ=+tPwU@FOMPbZB?><~bSVgat1-K43Er$81lb@jaJ-7Ky&xQJY<($8fZLvf^m)OwlUbqXJY{8m zdstPc!4XT8d5;ZPxB7wqId>3j(ni{8wP-4a?WyqVDdF)B=;uMWoUfXZgfX=ihY z)-lmNW>emJ6aq1~ky9%{v*{Nm5Wn^e(`CqJZ)TX71;?@8v>${~U2me0vEEv5DiHk< zeV-oNV7jAJIJNS7yXjL~3Ql{_Ti_qKCDo*c93Tg=Lg$OI&#qTY|4=mS8Fh|bx>QlU zL>8f@&N$d&M^KCdxE-Rs$4&W1Pp$>2NkX)&&0@R9D1DLb;9`hoj~q9ZH-}WhoO37P zwSofWh^oxS7FB!v7ZBVMbS^1P9^EMj?t}oa)UMDpY+T^8MAc|zz3Fuk&+-$d#?2~N z@8}rc!jZ_z#S^A~6~$m= z5TZ9vm=59b%L!BUF)m|9BOvi1dk|xW@y8bAihlqK(}WtpJX?dDiX{>VWIN{52+($q zsRR|B_n6$^B|r3-+9B3udrg*RUQAbLAbDb6vI2{|LWeF$IxL`Pem8TVEkSU=^6@Wm z{ItRksT_wXfM#xz@=)(TdQHE`WSAwe%KE*np@>7HmsHcC&A~`|(nG4Lt~`>SUt2 zF~Ti^NhmZ1oC_u3Rz$!TieuznA%T#+`@x4YJFrK5h+fm{%jHH^;XM9VzN%hdzl zp3e0e!Hud9lP>l+LIM#mKe#Dt2)xk;h||mXoEKR~iH1i_6>+miHSv3uLnPu=4wIl4 z{&7FueBKo8@}PLlAreAnEs1E#!6PJ!Dr!gozXym1zlVqyrK*Sv?*~a3?*~W>?}v%c z%edx@mv6gH`h)YPV!PkVDR4x8Xx@6K1Nd}%mk866Jes4V8mqfhFEc{(r%gMdl^vQk zm5QpD-j%h!cw)-P_v3Az;ehIkL7noun&@&r7QVrb0NC7+gkQqR-O- zQ_=bW28dQYUi$X|Q_G=1#8$VO;rQzV5l1KEI=Y8bQNmuvl#JdfO3X_)&X^j&f_r96 zyG6G~gEOYyjLAeZ?t9HU^1NuKM74YUP|`e5#Tbe3T7zEt{ER6tKLYw>*f*JxM}us^ z%)xbjS`swbSe4yDQwe*9f+mZgCvQlM&*i0$22JoqY4ndllY67nODZ%de`LVBayn!> zpCL|oSN>_<^hr@%@KX0h(@nbuy~^VFI2O1T8XxDIhggnT9M!c4mWW5yxmfF>>7V~a zobj#{4Vy!vh{`@PVjexdamq_Zyrj=dCcX4eA2%1TFZCMyY^9KzHwsLEw0^?;WbK4^ z4P!fim1wZ0g|&GQ-i)k4Xhg?NJ2qDzs;R;n<2>mC9si`crP>=I@JV|dpy*umZ1MSk zO~Mma>tx^Nx9(V#b7o3q`8Q`_(}8jg0K_u$_r5W9InWcGOq*7M3m7cy8BaR zH@M_`K4p&J@uyFj&*3rjX>&Us*XfV{__TQfU!9*ZH{tP-&zMi)@t>bDhwvErta%iV zui}w8>s4kr5rHwwimG>AXC6V`{B`CYJRZHy+_y2DWN)Rk_T9?_6&# zFppzu;w9H@M}#N>Arl65(5@yHo|#64;BD%^!CZsl@4dl{U~c;58_c`$_}&fX!$SYZ zZ!|kIrx*)V6Dm%ap1l$90lLL&%AsGp(Y&+J!_6O#04xOwC$Sx|mr&5){QLEd=HrC{ zW!yUoE(%)7-3N>=TSFv>omfhbe$HH5$C)i}31DEhHk-j20|{CWQi0VNj&Mr}LVFlj zWO9Fu-ugN7eqm(g=btn06E>fQn?>)ds`S#0H7zHBkHXvh z_RZ#3gzl9;f599U7_tAORK45so+K4fli!qT+i7PHkH)bO@+ zi#d<>-eO)~c2VU*2Iolr=wK*ZKiU@=bIgVO-r_1AP8>1{lve$BuuutMs)~9d{xB@; z1Wn&!E{4+n;w|P|GA1LCiM`4Iz4=yi%T|1)ncxSV^z~cK#e*Tu0Zq+mPgPUj;B+*= z8nG&E)|jm9Ej;_IMQC8G_Tsck)}T1O%T0nDIdm}#DxSLns7(|$gB zp?=8g7#%~@a$+?XpQ7Kp&HN>}CL_0-{~ed^YHwMC=YMYd(7Son|Zg@yk2Sh1ovX{f@&x&4gXB8_RJ3`RL}`&AT!d zBdlpy0#DqHx$V5myd8zk-eun16H|PK1cmUcnDNS5?JFyb*?l;o0FF^n!ohP0@GmlZxQLICQspk9C%Lb`t?hdf)V| z5>rmWSIeziu()HR+-+{&oz@VyxEsu6)ga_^$0}JX!e#T0%^qyf#N-C(-#sAhq9-n! zH-T34TsAAqCm~iGA}wBsC>Qa1m^67IsI=kr2x)*=g2NFIS32-bTpA>k{)lpfj7OBC z4}3PJiywiE}JoEuDmd?T4b}Dw|$_v6D0?r8o`z z7GIzrT`?D;@@+ZNp^eCL5`bys0(Ip`xgAj#7h?jhdYu61QY-7j$q1LsRON6D3G33E zi^*pJ3oMYT8A9BL?=kNYy)Js!J?8D^ z`3Qn1o_t8!C!UJX7w$3FX1O3yAp~D_)w8|K^IZ>1MHyke{0L=I3$)zvJgE#i)@ScE zm*$7HIt(~nduGB4vta(qz2;h}$LnbIQXyaJ$ZYoV1qlmT&^78Fqa_7WPEk}N6}lPr z3OUH_qOJld7i!V{_nBM8ZZEw*Un&Pjti0dM?2TIrBwNO5&>!GELhJFBc^+S=e=vgj z@t_aiZ_YW$nt;=KwE*XWECkhht)(ND80q>4%(WE@s7{Z!LlX(X%Hy)B<>kpZ!9=o) zh8{2%!Oi-2511=NpNl^5fVn4QCQ;wE2hBT{!yHpd8PSzw!dHyl@51KyxuD4zJzOh* zYV{pn$3%qG7%^_iZosI!dZYltQ5i=0GmKMM;II#x_u66gft@B1VGzXD2;qOqgoQDK zslxtotO`_xzVo1Y|Mrv2Xr(CCI5WnxK*i{>hs>=K9}9i|L*|np4^KU0u5BrGDKX7z zF<28h=>@3(=`~Wd1!%*d8z34sGNLCkn-jE7w*^E56a+3o*UH$#=7$Bb#jv3?e8c?c zdcj41(=F{;+5ZExM-Tz?(I1*0$lF%xLglE6%(zI{MPe>`=6B|^80o+-hnax5$3_PjiqP%1NhKQ@&xB3{MM0yTw@FRy zv#UfaC-d#-B^t5z4K}IOtKdp*cqlm^Kt!JwvNq^CgOmtf}h4p97=-$2i80KxLL|s_JLq2@G+?P(MPPYPe1!{v!5V-)<&CH z19r_l$y{K%cmd;KGKJ4yy+4_doV$9rBM6rix0>kQx{#tS8y=hbRi_)RjKbPDy<6S1 zYO{t$1G;z#9+-SbA8o0+6Jm$cYDL6L!nMYHLdLu>!T>(o>9s8zumO#M!ti5cwR;mp z+Q@+=LNDZWt;sExF

e1_Z&pd5DCUmU);%W0I1vuBD|7ree=9Gprs1clR(WXLPM=3r0jJX^z6VI3> zlQ^T%4?bt!nGIJWL$3qC2|$g|W6ziiGC;DKj^43y|L@I5P48Bn{dx1#qA;_P{gU~; zCOkj=XY+^5=)%4?%oRfG%Fr9oor_zEJEny^p$OD@&0&1G!-$w+=YAZmE04cvegQ$n z^pUsC4VzoxT!vY-!ZW3Mrs+08s)S3)d<5CCcg+8|Es;It_u>Su#nF0gfpkkjB6SAm zjQvrS*=7_B$0&9kD z8RxnyKhLv+cAKOu5%@l5k_s`%C6nYXioscHoNs2*Rm_=^-7Yw3<~`C;dcZ983)A#{ zX6bBEFJ~nnReaO=5onHm5gon20_dlyAW3$n2TM{x8h+4X>n zW@bpGkp2#4NXGy&n<0Jl=!A<2-Z)6X4hL||1lcg*fDI`@FxDiFc$b2U5y+I&W1pzK#P z<}(^Y5W!TvPQ?-Iq`!>Lj4?tQ*1PPZFKm!@BgPVE77$yB-@3}Pqx&plm3Ex5Kuo2r z9tReDv}&VNv^>R5GsU2c^AMQk5KQ;PjUY@|Fj=UV#o}O3sJp&okPPu7z!UyHRC@MI z^w@Exv($uT^_k65pE%*7f7~o- zB4*ONMe;5WxL8mM%Ao*v4I~HBgO#7O&bLOaslCdASdw6aSbcmPi;z?!?m=uwhssWx zN8D|J(1bhC0N(ANh+!5Tx;0yYMx}CXD&{PQZ3Kr?QgtUJLWtpLldWiO0K4FVwJ0M~ zf|nkKNczi65Vr5%A#L1j(Na!{2D+RnxuC%QI8$ncZiz?H$M2Lj(E6oP4 zY$e;aN&kD<1r3#phG11)sMBzAM0FwDkOz`L>83F)6n0n!7+e&aerYVR>zgB-KEQ-! zcubrLZ%IRCazd)Nng*w%@ z6j1K4RE%4=ol{jhSB;g$ygDG3H%2fex_)M;XYE*w$ru!sZGR2k2ORVEOtJnTD1(z3o84h;R%#sF%VqCe6LVihHPl1>n zrctg+GH528;YLnswKHfOEo0!R#Dt8D)-?qqy|NMJC{8kxMi?uTAgNkb!2nYrCAxt@ zt6z=KW{y#f7~T|zx@2>x^-$12#S+fD^t`Z|*nhg=(oaUiDz{uN^L@_kluRB;EP`kW zLwWtQ3ua3)=(O7G(O8&WV?vm3FYy6`CX)mjbbCIcxvY>}76oi9Z#n>9-rq)>|n?tinSWcJw5@y$ypqFh^ zoi8x)T$fZBJnoTEpt%hvgcq!JMz0alhd13ymN1shq}T~qq5&4Z0xYb12TBzBo%^ND z%d?P!44Z4B5u9Uy^Pr?b_a@95dRCVbE7t*6AtOd&oCPy$FzzKmoDM>;x#@Iv>G(Ng zT_p^w#52Xr#8HQ?UxB&qh1P%@TcA;B4zH7GSqUSqfvHN^nEUARW@%^7)$pV12yim$ z7GxhVm1L?ZEFfTX4YGVNh)LP~>7)PuVA!RLv&<^JvpZJqO&qo6bAQFSuNbzj*d!43 zm(9&{u-n32JQvpmQ6r4vK2u^u5O8Eh44VUGjkqD$FS4Yzy~`#eh8 zbn9^gw;qdXaAp5?=_#gA!F)U4s?%^o>iviR>RaB z4B{9HH#HBrbW^hrv0N}UH|eHkp1&baI-1d#Fqkq^vp5x`=klbzaIA4#^GNXOw&n?L zYc>zN9KMg|OP!hLU0jieDB6&;G^36%tk4KPy)R!PVmL^v?l z(iXO&KD|@gBQ?7~4OSUhyIjgbnvr$Rh5Z4s%ShGbyIB`D3St8F#H67P8wZ;PB14$R zO)mFg(yO4|D+jB|WRS&vl&VVY0WyFs0+-7aHV2$7YM8}|Xkq4~afg|M#UEA+xnpy4G;~|y}PB|q9;gOcSGYGq|>`48%AzatJkO1b3un!8DKG>skjlPnLe^x%3W@D zu1R(pEwAd&TBrc}r?LJqC^*;|TlW|kWf4%!);1AL#mwsiOBj+ljZu}spw)>!vm=+s zEz*)WpwR~{Qj2{GTQ-S_ne>lRSfdwLdmRR7Pl;3{_62F6M9T9arpj%#SP{CcpO0W? ztBNOs4kIYQGP*jal!LEH97usLt_Gjt;ENWzyHv{E=3P5rnq`sptY^bYjSA5N4_Ktu zV}EH-X~R{S19L&>lnbmr|_ zr2L|pwJ?Wk6UEU#7T!bKZwGo?~$zg^lO z_JyhAcIjtOg16lv?Zp|G`h+XQ8(ea*$my7RMbb%E{iFsPN)R?K4%3oMfO5_XT}&n< z>;$?lu!(nO2_KJlaISK_4 zK+3gb%1N41zC{3t-)38lQ*B9Da|GdHfzFv*69uq#wU&!rpk8Zp@Yj#nYe~kZ1?z z3`ut0c+RepXfM2*L6%@Jp)HgKlTIZdtwWx*wrf^{-NaCw&7Hm42MxWIZ5Aq zQmS3Ph-oBEY~I`0yf?6U?_l%Z4Ec=ohLuGlT=!y_Ou`N|bj%W1+v)C-!|0K(mUv27m2Ac+Vh;0Z)uB>MyIp8 zrJb8}0b2VQVpZ|MOCQbtDa7ps&BBL9g5$BOSfn9lb5% ziQ>FXe~i$lCgehT%}bJGn#I=*9(gCd=0!=u0hrDgq@vtGR#I;~#9v$bTN|2MXvyZ{jtR7cnY(=80~&hDl|=? zw zOKorIX&7IO~!VDfJA+$Z$h{M?+(`j=W&%d+m5S!$!1qPgt>VZcZBUmN2|qNEiL%OH!VxGptaz zPu{+4A??T?;I37i&VdEgLYy(h!sDiTV$$)EUmT@461d%bEICDcnyr?$J?=J;$Lz97!JMkUBw{GJ! z06a)&4B-T)J7}bMk0Q7Z?@c<`AQC%ZfYyhSo^yfc;2@e02YT1mJ{_Z#f0l9! z<^aU-vNnG{M$aMNJd1pq`EfbF&_eq0otTlaNP21;QWNVnJ-q?x$zi2ubkLu?0xQHRIP7xee0u3ML=-H%Ds5YL3ib#q zlAp|y_okA!&p~>z&S}gKq#t$|4$|YVNdL`G z>)?&7ol^QLiokci{dELvj!?(zQm4&j5AiGJjf+2V60EGuWsmuBMf*|MY3EC={&8Ve@#8BKbc|0MXTPB3ha%><@Vg;Nz|a%kxU7a zkc}T?YeZBIj)j$#HPQ=jNT2SwTBkXTTfZ=ZL9!xlJL(vA$)9!sG0Z-bt)rVhO=Rb&mZxgH9p1~E_X zGGX2^1)J%0Z%eIRS8LT}*YAqp4WjoE)k|<2C~JC6&Lr-J4<_H_7WJ{Mh zjolv5S+>;DH|454K5!Z~$vZ027AWg&a`0IDO>E&br7fIUws5>HsnM{l--ifRHb?BL z5XL%?lvby47f%AEsCAYtidl`GE0YVTW|phzcgy5G^t)zxH?6elXx>QAHON^FYq6nI z2xC_L_9YE%qgt+j)7w<0}Jpyr36i1Dq**UN?5=bWf^ zj)!LGJa*p67HA>O-yq*Ruy(PBSiuBJLvSF>Gg^T}zFb1aa?weZ8_R#5)jpqA`vB)v zh4dY}ypeWqlrR0ysU+^2lj||i>P>R(_5p^Cfi!IRI5zV69xY6E(Vw;zeXK74o3hG# zB~CEu$2LG}S+`lvM0kJhX1NFt=LXqI$2QAb@E+JK2lnW6nGGE6F{%=>yMw`ye&1OK zJErTSZ)^sg_>)!M21Op!sEqb+kx#6djA44?7Wr^iKch7LY3yfQXM7wXTer(H&CQg* ziDCX~yIe&Jv*aCY$XRl;{@6~>WXW47&60OxAK$h^-kmkhY8+3i@pO`v$`UhV1nApa zoe|>-tQwILVi&(K%1=`r2DW&f*(SIB zcRf4JdUiUkXXjUs^#}Se+0aUMB&yp^FYS=oRi12c^rkwQ@HvGSTAqQ#lhLOJbujf_#eg>6Av_uwt4n9g%UuVvXp?#>bblKS}-C=*}Fu1_uy( zbL5Y!J|G@_N;jSF{C{|vQ^D#7~x(h*zy2>#aFzmkKzXZn7dt4Gih5C{Cc&(&WQ-0FF%)1(i`?CuJh$05SzsrwwF=gJ5^|{u1wyz z@{~`m6zET@u?Ht;uvji%H^E56gi3!|4VXS`PWtg0*+Hcex#K|E#H^uVZuk*d2n*Uz z$bBk2s&LVa9FW-^vDcNzRqIZ&v7OZD`2(o?xe^$B_8x?k5I!OoNq)uzX{Uu#<)}rj zrS`*m-WIz2nk3`$IdEU+5iFVOPk;(m?SbsR_bAY}z=>l4{o6hA#HmylIX7C3EnU4y z?uEp>q$4fy_gPYE!vaGH+8{?E-b0qzwp>zz&aRyaw*G-zM(X&HV`!;b6n$9W)NfVN zDn^&eAsm!385{@V5=7Fgap@Ars-8?=ErqoIouk+l*D*{S+bbWWkJsX}*oIwo!(LEi z7ky~2T!P1M_G0p`bpVr??_KLcAq*xIq7NR!VBTAXsd3TImC0r6qAVjCq8IDsf|X~= z?~yBuheR&V8f3FSn8q<@sQU<3FV|VD74n5ED9RlbazW)Jn{_smZhI&gSV)`5 zRgAEu8xU&9*Ob@ZG*UntA37IpZSaI~+aDuHt*cH#I9LU5879Ky?nxQCFg^|)=0Ili#n zwt8IFq6aK0Zb!(jdi@&i?+s9QC02}!2~OGc!Ady??+g#{+CEo_hl_5gl6!IO=BX+^ z3Gc0v$*EI1pW&78RS!W+4`$U_>>7zs&m}FaRDv}zyp%G$l&0ZjiVqxAOQN=FE+RHm z%Z*1?)9VD4GL{E3UL+-Lrlj(qOl;pd`k7;LLDm#&WGbx@oPWhKKqI|ad#f2in)w9h zNd|CQ1q;DNwHn!yHNxr{Nvo$XHA`Ftrccz!4ZBxYc|~7o)d4xDGHn;=28DF2^s$Ee z(i)mfba)dTJ1S?;&mWL$uBxLB(f>Li*JVwz3MSJk7+5)SP<}tVy=nK5|5+Sqm(CAuW4wRgW6Bt{JAzA+rWqvB9)r7p{V_47$EnK6zyg z;aaZI$7?a53#_6GX%$VcYCnT+ame-C)^q|a>8wLOk~Pf=Pp1{0OBH_1A-Ald0z=l8WUT9wvh;ts4e)QTsQCXGH{3H!xG zx}wN?(cvc*IZxseKfQjvocC^hw;t!4fABbHor`|pxV$H8o?&P{4MS}@CVp{T?gPyJ zdU@Z$v~JDuzn#Wu;(-3Q8@Xk#jbWfI4Fj_b13MYF>d2a9P0Xe>(a$oAbfIF`2|0Ir zKZEE`gBTCd$B4W?Yn)|_r)8Yh>xBSf%{t98Pp4&`PiAhU@0^eiWu0db=hGlgF$ly` zt`Xvx=rCspam=!q#^C%qgVVVH7sOeer_$;iW_1?qHcVN`gDWhKy+N}kl6Bj~)<${9 zu@r4tqn7GTucCw@geD|qSI}d6u2IfwN;5_Q0DQkG6vOpktlP{#4^Nu(Rs^0W&hJj)U?&%Zpb+3rTi#ZMkM3^5;+vwiO%QZ^ zw7yBsS$0gpRm_h2>QNBM<4s}QUZyAE(%Y(@M&;@HGqL#C`EQ?_!1gy;%>ISeDQ2_q{8F1f8)KDc2jagh$R z=4SaAvn3f_tgN|I1uO)O!&?ZCWMfKv;<6n4sUXN+#BH6ygT?3+hjB{ZhyPQF3!%a| zDWwk>H>5|FS(!0Cl{doYuAHbSTHlHl@kuEv+Xx}k~-KTO)nZ@o*Gq5XZ7bAMC zS80=#ZmXz4p!&h12M!-Rny4q4a)fPn-36m~QZW`Y?^fBmD!mGNs$1TBwb6X6Ti(Bn z6`LGM3{p0Wk-#l!y6gu`S#({=g2q>AO^Pqog(-%SWG&oM2Wd>V*u_8qVs>V`T(I^r zxiw|YQ?NU8tOz%^x^w|M8OAeCojovt&(UCyd>BC#H}}XIZnP=r1&f%Z&R%&qvl(gD3p$1yD)}EX)_uUXF_Q2{J4OLoio@9mMbR&X#C4+9w68IeUX+6?tY*EYF_P|D z=edZ6C0pmLDW5y<)j##iUvEOiEUb|I@nn{$_YsM+xZBn5^RquH!1|hSW#S%if{KzJ zOqNR@9+2~wS6B4k6iMp}bN^%T$p(0b5eLkgNhIP6J+r05IY!Z-J8_!QViSSpQ-kvE z?Eu7`$tZz*KJl1|4(%%ou_u=uylX5X0-^GJrN+Rl{V6c<)@e#RX8822#2{z3bNyZ&GMw?>{O3vyvt(0pe$1wO9i}6@B`YVyoh$m8cIEWs}ff=PA zJ0q8uq6QUg{4Z57PMTaKsD#llDUPE8_!qbxm{4=6_;ai*aJ7S0l*zc` zpBeDCbpU4_DU^98>Fy~^Ob0zQg<0sJr>5Ze>YxkyJjy!kt;R)mh`jYq z;ywVb<2wwoiZE-cqvPX#^reID@ncPO&`$kp#xL*O+hGS^$LM5cE%jlgngXU|FprFqlSN`d4$It2Y6CDi20b~p#C@P zy*{d(mmd>dK0Oe+a$5d5`(r!rc|9XLqo(#~E!4nnTKY}dD~5gagLv9vKE+}!wiPcH zFBLnAM~lbsS5*~ahe_aC-mr}kg!`Z;>Cpa1O0o@>O)Wio2(h1Qhl_Rl;TkfWsN{`TVlpRFu1zrx3ZeRnt zG&+kz4LHV#lfG_tm~j^G2Z;yiM@W~ZU|i!)jHQaG7)(_)X~kfxaK4d!9U?vK>nLet z56mPWF>DWeRFf_wR@V%WPWC)VLMQ>WwzDt%g^C$GYKe*mu&J>}4e?@D*+EK_uQ^EE zD1h^nJ?!f+anE2EYN2U0=op~y`JudnZvH+5%~pEd_u;RZOiSw4lNQpFT50hQ05y@8 z)U78CCX=>OH-ov5Ovn`7ZhHOq<(;_wC)uFrG}7i$Y503R9Be)*-pG_ zz(0eF5hC5(7UHM|rSrqC!p>%--#m_6wcRszL=NK*t>ORx`(wicQ+`}lfvc3*Y=D|Y zX6Q>llx-rOyB?Dp#aNV1Jcc3m&pDf+p}#7Wd+iZ*lUQm^mI^lsm!OOdO<2cvZH zNAljrCieH82yT~MJ<=YWH|5t(;v!5qIM}t4iGj8=i=f^-EGLLQ-1UT9Sd3KMo{@rb zGRIaDDxgDEA$1j$x(dpVGe2lI`DZmq4}H&1<-8(5!E1p-v1@w?jNvc+K7l3KNbi3F zC_YV}dP2@Uei{|wW_N{E$e!)Er=bUTKCvF9{}qrP1dk>zQb_fc*AWaDWt;!!Rk3SZ zTv4TR^h|iMqj{X)5xg`$R*B1VQ>oyD{8GB56D%W;m{@kU=>KW#+GE=|(z~^mX^tJg zZCR3SnUtuPwGt)U@_@Ts+A4^h{Oi`vKntH5ct|)3rS(dFZ7qoXpUzZ}d8=!~c z+H0Hsb0~7XB1&5Xclo108(iBo$;EbT_v$MO6uq=ff;Mh!U)|p~yIig)`5}PX*UWq~ z-+cS+eBaFcKFK%E|KT4UrE4cB-XysX13Le$4;-%b#tkFN$dt}qA2_ydo{ZVHn?`8* zh`Zi*lsAUaqg0c4A-CWP8~_eh)b}jKuU}j|zw?2kZ1ZC}XpMgq{R5K28sGDw@@qaCFdqlhIfMsZJSF|Yp!D-*)}M<2oCYaBL*3q=V5 zK0b1|otee__86JsbSN*OP)k<{Cc!3y?Z-I#slz3uWBkXE#m$~&3oi3$V1eMlXknWz z!8$2Q0Kk7y@ycBukH`Su?PJsHI{);i@T3far1>@yikB~*zursNr=T;e_jMn=t`^B- zz>|DZR$I~gsHl_q^!w@h46d_g0j+dn1QYA#^#QuJ6>yNQZFM_D*Nf_Qcv0Pw`JzO# zMl`EvqgiHMe27{kDrciDDrciD>Sm)Y>LzIO=dU|-G z#Zy#_ssWJ>Bnozi<5@0~EyuA%grUlk0%*ys2(G8WMOtZMQ*4dEsYO1#kT#zz5vB0R z^p!C?aD*B%!|&dP88S1%KfmKBEuKM01fIBq+4v;)-h_3KpAZ~?lcQlZjwMT(Au#j^Z(?XXEjvTaJ=-_2!5=pQGrqXjxMdrlOsGqTu?(;;blbn{>t?;>@*# zi@T~(h4lqFsCp)`y_c~N#7^vth3TE=i1EcS>uWR~BPQa>hUDVpM7BgcaWAGRxV~ID zDbeQY6kt(B|Jdu2LPss-QpD*0q{-HNKMSsd5mYhMkC>k42T6zoe$ZV^vXO{%sJR{~ zkO?7XIZhhS3T5IX|Ll&VjGcrcv-)%!6r~`Fk9Yp26gG*51h};Eoo`e`T(K<`0%~)&kpzL^y7H)1j2@VViaOc z;TVd7SKM@zm0&2AV-8fO2~1>At2}9ZfQf!S6{%yo15Fav_^;k|)Mk&-2q|YqE6`&x zARyB*t>=lNgvX>Y(hkzwiag`7e4dP6kZHL@;VjgtRkRphLj!mCCUs%R`;E^GW-{sq zbR8Bd%vM;duqEmL$+UbDCaHV^h8?Uq*rl*}VROR%g~bOm4^}9QPZ+9bdIcbWi)wI!)OJgaC}E$ zF<|V9F(!;8c@jWy8vnnqoTFQNv_im-=4QSl#VR%;0Oa0%=FU(}M_iRR?mH_mGvD$# z+ln{#ll#t&Vm*eSrR5KtClD)O@PV^>C2sKD51nQF_a8VZpvs>=UsfPgo{hhW_|Aw>%K3(YsHA!H+oFNQeoOB%up8> zpwsBH7$)kwMsN@C9;$iPh|p^pGj{9{kn<>ttU3>0?vR|qVusP_Vjxy$zIB7`KAys` z-^7kH!MV+P038}A=gAy~T&BTKK+)zajKGmCvWcmd;B7@LB+Y94wIcRLsYeGx5DSv# zf%B5&(fL`4Dbgj4e^+8I3D@sR?Ca-e$SHwoi8gGRgegt?Z71788a#fM5UM)dU&Jh+ z%MXtvEyY!I5Hu%%n7d5>qB(Qff>6c|m@Sv0s#gsZu#+2+D&RwkglA0X#-z;oEE2 z*5djE+%IxG24~wayj5}_M!<0~_|-D-CCU8?+-h^=FzVtTu4jGNrM+hZo0a?~zVq7~ z*sHkLzL8bb_8aQKuLwAM8E~Bd*p&N>yWMqwTEH@vwtoJ~Mpn8t5zA?KVhQpnpz!^T zZ0FYD<({l7W!ukCc_eL!wC0;yCRJ0Y>x}<2_QVfb&T4y>eta8@iFu4KyZG~)*e-`j zIKGKBt!}H#h43oh@wpYBUHhK^^~WJKKqU z|NWc6tOS2^Gjlu7*%Ja{`E!JSLz2x~STC+blCDKb=Jgd1VI`M`F(3Ul>FamVe&VR4Gt2IM@CE767*?MX_|K~JD~r`t%A)pw8E;nMUV)h+QrVf1WAmpw*!$qyJ3HCVk~kI< z#XGRv%2+!T2ZA(2jyO`WGCdII8+Wm~{d1O0L$5qV3K1xT7PhlF4#27< zO43&J_t$o@U6=##p^|6mtvHM0Q0-hlPCD93KqfC2Nc2gYotEy^>6-m=|W8x zJ5pTItI6jyc}|m$Yx0Yld{mQP((u;Iy~Kv36G9_wYepzU7=)*n(Ftd1x8`IH05*rQ z#NFMH!pOqqZg#dvifFuf4Xfv$onj3;{7baQY0c1DFBobna+>|g=51$|q4mN-$spTU zR5G@th%=;sI)+$jc@Ny>&GJQfpbyB$H1b%V%Ju0ao^R`ccg)aT?RmSOe`knQ!@>LR z5bMU_xft_ci%m-ma^Jns6JxJP7+wn<`oD4ZU(W#q=-;MTyVPyy%VtD>1$PwBQjK|X zdG3s-*q>KM8pnbjh9$Q@;L$&x{y~lQxq&>@Z)xxLmvEN&}BeaA_%p@|) z|L9}Z1)t%+f6RI%Rp&>qv!ha2=f85D1>lMP_&PfdWnF#)2S2}XgSEh+{@M-Jj#;{& z++eL(gD>4=N8krPdXpWJPmP;XTH_w_{duEad794lbe+Df~<&%@$qamA6=A zz3!RMe`ztZb&Gk6XLR4_!aKLvY*F#V2r%Lg-(l|+U#6R@|B2NXOS-zS_vh?W$*Un2 zy7d**Ra$e28=akX6ZlNWXjlx)D7b^g5I1EE6c?ucmA$qWQ6-8#XIpk@u|>c<`w!*f zE+$l8Y5@biAFjlg8!u8hfArt%^ofXk%nE}M!2k|hIMV8fjWqPcQD z7io2Fe9S@vPpHHm5C7r+u(PY;sxPPuJmz(XAvb_kKlGc?Uw`F$rTo~J7-mkqp8Z}K zpZbz*g2Ddkm#ob-tQN8~sLKO!)dXc8^DDL@j zBSt^-T*bL+o=@O>!pw`5a_gaM^iyV#U7U!UhXZo!;ec{g+{6iPHg+9Q=||@+*%zDC z7W~A;i%kif15X~Ktn|oF#@3@rRUPNa+bFeSRepP@+A`%gVWPO1O`X{Yp5D zV|al6Me#4%7wLN$i$W0iw5@V-&`*Cu!}vGsAM&fAkkT6pD!qYTB^c?g9wq&~| zbYR@ksv=j&1QKC8-R zY-T<^??&)>x8lB#c3*H0)+gPARl#&su&SpnUe(iH+mptx-8WPl>8MU9>EPAKxj>I! zWOq***{d&E*{k}k?A4d7>{(lWx88^BCN)a#9!k51+_9RdJGPWs)gZ_zsdQ@E6PTtd zd#3X=&3f7h<>>@GePQIxcml|iMJ7)G4XqBlm8zg8K+UTTi~4y2M*FIR)ILuj;K}qT z?jcV=RARvyHASqH-17Q&aW*(b5SUnXcUS(17n&`|kHriivF(g<7mY_#!Qtm-i zu_kKvLx}2G6ZO}mLrSV9I-Nnu%RR3>XV$bPnhn-oFfY=<+R^1Zp!Vu=9Z=U33R8c( zFFdg}!8%p66b%IuU|~bEkL%w0exok=vfV>Chd7wEDQtDHKAjVYJ!3*3_D(!qAhJSo z_ayQXkrRl9rwc@|VW3ZRvmrtaDG2-H#3R@+BWN_FGBa{~X1*Z>p=%z>lGHV%Nb0;( zLh2e)MsIp2s5cu@L3y-KF_Ozyi2%re3r&5ZPnM)^3@jzns6CcS)*{n5g|<-bn))EN z1`+SzvPAq%{UK$(sShn^8h0zGZ&ROH>0zpLQy*|DtrV#Aaw)t@2#v|29cYb7Xh|{N zVI}DId&f)>ZR!hpHS-*t@#&ljSbWRYjz0f@*Y1wDgJ;A-nNW{#z@1m)*_V zwUZBIpH1}z_eYTxAH{slpS9wxe&ozmopkgfb(?*Hz6H!1eVQ;3L_m~*ex1OEqPRB| z%pk5z8xSuIB<{9>W_fRP-bgJ%dhb7Ejy=xlK7>WNS{MYyh&P{6eW5Jkao7gSD*3D_ zc$P7o@**}%=fKg%NUU)#I&l7STVr%jU1!^Q{Tl8cslV3YZfwLqV8qgDS}zuVAeIRR zU?NTr2ueu5~Rhr(Xh9Z?TL2UePm+iVqgcyUijj&3l$It`{_ozP8g-4Aap0@UZ(U^iTQ6P_DX!Sr$ukaVNMGBN#Q^nFow}T^2A#!hbZK;iLL=yQwWus3#Felcs+SCpioXAy;;pG5C|i*gmIQ0zv{w;SsaB_=suWk+iLV z*))1*RE3<|W1b42w>%wlG;F}}1AWMpa#0Lyt4a)y&B3)9GbZhWbd6wUPPpa?el~0I zH0Q{&;Jer3j^4r%IK|Jw4#h^o%R|Ab`}PAur`rx6MhInd?Qlo6?+FPH*%LOp3Q}fi-$SmSWKr0(|L1hyz-&w&)XU^c zx(w&Std0V0vm0Y7_uXTA;kKN*$G#zrsS97-V}D;HsWG0qhe@{EU$I+w`1XBxt>^fS z`|M(=8f%Xcb`}u5(*8tdY<%)1ppw@0^56qZbO1f^0dwv6=8yjJ;Cp|;R?yFXsz}

O;0)oc!5Cc5po&ozLgz_a3qa$KhRTko*4u DWm=2I delta 37841 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 diff --git a/src/languages/ejs/ejs.grammar b/src/languages/ejs/ejs.grammar index ba071a9..1ea4d00 100644 --- a/src/languages/ejs/ejs.grammar +++ b/src/languages/ejs/ejs.grammar @@ -1,14 +1,10 @@ -@top Template { (Text | EjsTag | EscapedTag)* } +@top Template { (EjsComment | HtmlComment | Text | EjsTag | EscapedTag)* } EjsTag { - EjsComment | EjsExpression | EjsBlock } -EjsComment { - CommentStart Content? TagEnd -} EjsExpression { ExprStart Content? TagEnd @@ -22,8 +18,11 @@ EscapedTag { LiteralStart } +@external tokens ejsComment from "./tokens.js" { + EjsComment +} + @tokens { - CommentStart { "<%#" } ExprStart { "<%" ("=" | "-") } BlockStart { "<%" "_"? } LiteralStart { "<%%" } @@ -33,11 +32,12 @@ EscapedTag { TagEnd { ("-" | "_")? "%>" } - Text { (![<] | "<" ![%])+ } + HtmlComment { "" } + + Text { (![<] | "<" ![%!])+ } @precedence { LiteralStart, - CommentStart, ExprStart, BlockStart } diff --git a/src/languages/ejs/index.js b/src/languages/ejs/index.js index 45e0801..f5d1c4e 100644 --- a/src/languages/ejs/index.js +++ b/src/languages/ejs/index.js @@ -1,10 +1,69 @@ import { completeFromList } from "@codemirror/autocomplete"; -import { html, htmlLanguage } from "@codemirror/lang-html"; -import { LRLanguage, LanguageSupport } from "@codemirror/language"; +import { html } from "@codemirror/lang-html"; +import { javascript, javascriptLanguage } from "@codemirror/lang-javascript"; +import { Prec, EditorState } from "@codemirror/state"; +import { LRLanguage, LanguageSupport, syntaxTree } from "@codemirror/language"; import { parseMixed } from "@lezer/common"; import { styleTags, tags as t } from "@lezer/highlight"; import { parser } from "./parser"; +const htmlSupport = html({ matchClosingTags: false }); +const javascriptSupport = javascript(); + +function containsHtmlMarkup(input, from, to) { + return /<\/?[A-Za-z][\w:-]*(?:\s|\/?>)|" } } }] + : []; +})); + +function ejsContentScriptRanges(input, from, to) { + const source = input.read(from, to); + const openBraces = []; + const excluded = new Set(); + + for (let index = 0; index < source.length; index++) { + const char = source[index]; + if (char === "{") { + openBraces.push(index); + } else if (char === "}") { + if (openBraces.length) openBraces.pop(); + else excluded.add(index); + } + } + + for (const index of openBraces) excluded.add(index); + if (!excluded.size) return [{ from, to }]; + + const ranges = []; + let start = 0; + for (let index = 0; index < source.length; index++) { + if (!excluded.has(index)) continue; + if (start < index) ranges.push({ from: from + start, to: from + index }); + start = index + 1; + } + if (start < source.length) ranges.push({ from: from + start, to }); + return ranges.filter((range) => /\S/.test(input.read(range.from, range.to))); +} + /** * EJS Language Definition for Lezer * @@ -19,20 +78,30 @@ import { parser } from "./parser"; export const ejsLanguage = LRLanguage.define({ name: "ejs", parser: parser.configure({ - wrap: parseMixed((node) => { - if (node.name !== "Template") return null; - return { - parser: htmlLanguage.parser, - overlay: (overlayNode) => overlayNode.name === "Text", - }; + wrap: parseMixed((node, input) => { + if (node.name === "Template") { + return { + parser: htmlSupport.language.parser, + overlay: (overlayNode) => { + return overlayNode.name === "Text" && + containsHtmlMarkup(input, overlayNode.from, overlayNode.to); + }, + }; + } + + if (node.name === "Content" && node.node.parent.name !== "EjsComment") { + const overlay = ejsContentScriptRanges(input, node.from, node.to); + return overlay.length ? { parser: javascriptLanguage.parser, overlay } : null; + } + + return null; }), props: [ styleTags({ - "EjsComment CommentStart EjsComment/Content EjsComment/TagEnd": t.comment, - "ExprStart BlockStart EjsExpression/TagEnd EjsBlock/TagEnd": t.keyword, + "EjsComment HtmlComment": t.comment, + "ExprStart BlockStart TagEnd": t.keyword, LiteralStart: t.string, EscapedTag: t.string, - "EjsExpression/Content EjsBlock/Content": t.string, }) ] }), @@ -48,10 +117,10 @@ export const ejsLanguage = LRLanguage.define({ * EJS Language Support for CodeMirror */ export function ejs() { - const htmlSupport = html({ matchClosingTags: false }); - return new LanguageSupport(ejsLanguage, [ + htmlCommentTokens, htmlSupport.support, + javascriptSupport.support, ejsLanguage.data.of({ autocomplete: completeFromList(ejsAutocomplete) }) ]); } @@ -71,4 +140,4 @@ export const ejsMode = { caption: "EJS", extensions: ["ejs"], load: ejs, -}; +}; \ No newline at end of file diff --git a/src/languages/ejs/parser.js b/src/languages/ejs/parser.js index f9e0f80..685ae93 100644 --- a/src/languages/ejs/parser.js +++ b/src/languages/ejs/parser.js @@ -1,16 +1,17 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. import {LRParser} from "@lezer/lr" +import {ejsComment} from "./tokens.js" export const parser = LRParser.deserialize({ version: 14, - states: "#`QQOPOOOcOQO'#C`OkOQO'#CdOsOQO'#CfOOOO'#C_'#C_OOOO'#Ch'#ChOOOO'#Cj'#CjQQOPOOOOOO,58z,58zO{OQO,58zOOOO,59O,59OO!QOQO,59OOOOO,59Q,59QO!VOQO,59QOOOO-E6h-E6hOOOO1G.f1G.fOOOO1G.j1G.jOOOO1G.l1G.l", - stateData: "!b~OQUOTPOXQOZRO]TO~OUXOVWO~OUZOVYO~OU]OV[O~OV_O~OV`O~OVaO~O]TXZX~", - goto: "n_PPP`dPPPdPdP`PhTUOVTSOVQVOR^V", - nodeNames: "⚠ Template Text EjsTag EjsComment CommentStart Content TagEnd EjsExpression ExprStart EjsBlock BlockStart EscapedTag LiteralStart", + states: "!vQQOROOOfOSO'#CbOnOSO'#CfOOOP'#Ca'#CaOOOP'#Ch'#ChOOOP'#Cj'#CjQQOROOOOOP,58|,58|OvOSO,58|OOOP,59Q,59QO{OSO,59QOOOP-E6h-E6hOOOP1G.h1G.hOOOP1G.l1G.l", + stateData: "!V~OPTORTOSTOVPOZQO]SO~OWWOXVO~OWYOXXO~OX[O~OX]O~O]VZV~", + goto: "n_PPPPP`dPPPdP`PhTTOUTROUQUORZU", + nodeNames: "⚠ EjsComment Template HtmlComment Text EjsTag EjsExpression ExprStart Content TagEnd EjsBlock BlockStart EscapedTag LiteralStart", maxTerm: 15, skippedNodes: [0], repeatNodeCount: 1, - tokenData: ".SRRZOutuv'Wv}t}!O(Y!O!^t!^!_)f!_#Rt#R#S(Y#S;'St;'S;=`'Q<%lOtR{ZUQQPOutuv!nv}t}!O%e!O!^t!^!_#Y!_#Rt#R#S%e#S;'St;'S;=`'Q<%lOtR!sVQPO!^t!^!_#Y!_!`t!`!a&V!a;'St;'S;=`'Q<%lOtR#_XUQOutuv#zv}t}!O%e!O#Rt#R#S%e#S;'St;'S;=`'Q<%lOtQ#}SO!`$Z!a;'S$Z;'S;=`%_<%lO$ZQ$`XUQOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZQ%OTOu$Zv!`$Z!a;'S$Z;'S;=`%_<%lO$ZQ%bP;=`<%l$ZR%jXQPOutuv&Vv!^t!^!_#Y!_!`t!`!a&V!a;'St;'S;=`'Q<%lOtP&[TQPO!^&V!^!_&k!_;'S&V;'S;=`&z<%lO&VP&nSOu&Vv;'S&V;'S;=`&z<%lO&VP&}P;=`<%l&VR'TP;=`<%ltR']VQPO!^t!^!_#Y!_!`t!`!a'r!a;'St;'S;=`'Q<%lOtR'yTVQQPO!^&V!^!_&k!_;'S&V;'S;=`&z<%lO&VR(_XQPOutuv(zv!^t!^!_#Y!_!`t!`!a&V!a;'St;'S;=`'Q<%lOtR)PVQPO!^&V!^!_&k!_!`&V!`!a'r!a;'S&V;'S;=`&z<%lO&VR)kXUQOutuv*Wv}t}!O%e!O#Rt#R#S%e#S;'St;'S;=`'Q<%lOtR*]]ZPOs$Zst+Utu$Zuv+xv}$Z}!O,l!O!_$Z!_!`,l!a#R$Z#R#S-`#S;'S$Z;'S;=`%_<%lO$ZR+]XUQTPOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZR,PXUQ]POu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZR,sXUQXPOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$ZR-gXUQZPOu$Zuv#zv}$Z}!O${!O#R$Z#R#S${#S;'S$Z;'S;=`%_<%lO$Z", - tokenizers: [0, 1], - topRules: {"Template":[0,1]}, - tokenPrec: 58 + tokenData: "5lRRZOutuv'av}t}!O(c!O!^t!^!_)o!_#Rt#R#S(c#S;'St;'S;=`'Z<%lOtR{ZWQSPOutuv!nv}t}!O%k!O!^t!^!_#Y!_#Rt#R#S%k#S;'St;'S;=`'Z<%lOtR!sVSPO!^t!^!_#Y!_!`t!`!a&]!a;'St;'S;=`'Z<%lOtR#_ZWQOqtqr$Qrutuv$rv}t}!O%k!O#Rt#R#S%k#S;'St;'S;=`'Z<%lOtQ$VXWQOu$Quv$rv}$Q}!O%X!O#R$Q#R#S%X#S;'S$Q;'S;=`%R<%lO$QQ$uSO!`$Q!a;'S$Q;'S;=`%R<%lO$QQ%UP;=`<%l$QQ%[TOu$Qv!`$Q!a;'S$Q;'S;=`%R<%lO$QR%pXSPOutuv&]v!^t!^!_#Y!_!`t!`!a&]!a;'St;'S;=`'Z<%lOtP&bTSPO!^&]!^!_&q!_;'S&];'S;=`'T<%lO&]P&tTOq&]ru&]v;'S&];'S;=`'T<%lO&]P'WP;=`<%l&]R'^P;=`<%ltR'fVSPO!^t!^!_#Y!_!`t!`!a'{!a;'St;'S;=`'Z<%lOtR(STXQSPO!^&]!^!_&q!_;'S&];'S;=`'T<%lO&]R(hXSPOutuv)Tv!^t!^!_#Y!_!`t!`!a&]!a;'St;'S;=`'Z<%lOtR)YVSPO!^&]!^!_&q!_!`&]!`!a'{!a;'S&];'S;=`'T<%lO&]R)tZWQOqtqr*grutuv2jv}t}!O%k!O#Rt#R#S%k#S;'St;'S;=`'Z<%lOtR*lXWQOu$Quv$rv}$Q}!O+X!O#R$Q#R#S%X#S;'S$Q;'S;=`%R<%lO$QR+[VOu$Qv}$Q}!O+q!O!`$Q!a;'S$Q;'S;=`%R<%lO$QR+vXWQOu+quv,cv}+q}!O0`!O#R+q#R#S/p#S;'S+q;'S;=`/j<%lO+qR,fVO}+q}!O,{!O!`+q!`!a.V!a;'S+q;'S;=`/j<%lO+qR-QXWQOu+quv,cv}+q}!O-m!O#R+q#R#S/p#S;'S+q;'S;=`/j<%lO+qR-pVOu+quv.Vv!`+q!`!a/_!a;'S+q;'S;=`/j<%lO+qP.YTO}.V}!O.i!O;'S.V;'S;=`/d<%lO.VP.lTO}.V}!O.{!O;'S.V;'S;=`/d<%lO.VP/OTO!`.V!`!a/_!a;'S.V;'S;=`/d<%lO.VP/dORPP/gP;=`<%l.VR/mP;=`<%l+qR/sXOu+quv.Vv}+q}!O,{!O!`+q!`!a.V!a;'S+q;'S;=`/j<%lO+qR0cXOu+quv.Vv}+q}!O1O!O!`+q!`!a.V!a;'S+q;'S;=`/j<%lO+qR1TZWQOu+quv,cv}+q}!O/p!O!`+q!`!a1v!a#R+q#R#S/p#S;'S+q;'S;=`/j<%lO+qR1}XWQRPOu$Quv$rv}$Q}!O%X!O#R$Q#R#S%X#S;'S$Q;'S;=`%R<%lO$QR2oZZPOu$Quv3bv}$Q}!O4U!O!_$Q!_!`4U!a#R$Q#R#S4x#S;'S$Q;'S;=`%R<%lO$QR3iXWQ]POu$Quv$rv}$Q}!O%X!O#R$Q#R#S%X#S;'S$Q;'S;=`%R<%lO$QR4]XWQVPOu$Quv$rv}$Q}!O%X!O#R$Q#R#S%X#S;'S$Q;'S;=`%R<%lO$QR5PXWQZPOu$Quv$rv}$Q}!O%X!O#R$Q#R#S%X#S;'S$Q;'S;=`%R<%lO$Q", + tokenizers: [ejsComment, 0, 1], + topRules: {"Template":[0,2]}, + tokenPrec: 48 }) diff --git a/src/languages/ejs/parser.terms.js b/src/languages/ejs/parser.terms.js index 882a4a8..4fb2e05 100644 --- a/src/languages/ejs/parser.terms.js +++ b/src/languages/ejs/parser.terms.js @@ -1,14 +1,14 @@ // This file was generated by lezer-generator. You probably shouldn't edit it. export const - Template = 1, - Text = 2, - EjsTag = 3, - EjsComment = 4, - CommentStart = 5, - Content = 6, - TagEnd = 7, - EjsExpression = 8, - ExprStart = 9, + EjsComment = 1, + Template = 2, + HtmlComment = 3, + Text = 4, + EjsTag = 5, + EjsExpression = 6, + ExprStart = 7, + Content = 8, + TagEnd = 9, EjsBlock = 10, BlockStart = 11, EscapedTag = 12, diff --git a/src/languages/ejs/tokens.js b/src/languages/ejs/tokens.js new file mode 100644 index 0000000..106f5ff --- /dev/null +++ b/src/languages/ejs/tokens.js @@ -0,0 +1,43 @@ +import { ExternalTokenizer } from "@lezer/lr"; +import { EjsComment } from "./parser.terms.js"; + +const lessThan = 60; +const percent = 37; +const hash = 35; +const greaterThan = 62; + +export const ejsComment = new ExternalTokenizer((input) => { + if (input.next !== lessThan || input.peek(1) !== percent || input.peek(2) !== hash) return; + + input.advance(); + input.advance(); + input.advance(); + + let depth = 0; + for (;;) { + if (input.next < 0) { + input.acceptToken(EjsComment); + return; + } + + if (input.next === lessThan && input.peek(1) === percent) { + depth++; + input.advance(); + input.advance(); + continue; + } + + if (input.next === percent && input.peek(1) === greaterThan) { + input.advance(); + input.advance(); + if (depth === 0) { + input.acceptToken(EjsComment); + return; + } + depth--; + continue; + } + + input.advance(); + } +}); \ No newline at end of file From 2200f7f5dd3f0212966db0115353ac27e35f00b1 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Mon, 29 Jun 2026 22:04:21 +0530 Subject: [PATCH 4/7] Add EJS behavior, folding, indent, and tests --- plugin.zip | Bin 663140 -> 667039 bytes scripts/test-parser.mjs | 208 +++++++++++++++++++-- scripts/test-plugin-runtime.cjs | 2 + src/languages/ejs/index.js | 290 ++++++++++++++++++++++++++++- src/languages/ejs/test.txt | 41 ++++ src/runtime/codemirror-language.js | 2 + 6 files changed, 517 insertions(+), 26 deletions(-) create mode 100644 src/languages/ejs/test.txt diff --git a/plugin.zip b/plugin.zip index fd2f910eb91de443aa6b77009755e68135237479..0f7e23e0a6ebb002ce4969f55c9963f1706ea45d 100644 GIT binary patch delta 32365 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

1#g~a^kURi<8cqntFv?JMrb*%YT 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 diff --git a/scripts/test-parser.mjs b/scripts/test-parser.mjs index 94f6f12..aad3eb7 100644 --- a/scripts/test-parser.mjs +++ b/scripts/test-parser.mjs @@ -1,24 +1,34 @@ import assert from "node:assert/strict"; +import { CompletionContext } from "@codemirror/autocomplete"; +import fs from "node:fs"; import { createRequire } from "node:module"; import os from "node:os"; import path from "node:path"; +import { pathToFileURL } from "node:url"; import { build } from "esbuild"; +import { fileTests } from "@lezer/generator/test"; -const outfile = path.join(os.tmpdir(), "acode-autohotkey-parser-test.cjs"); +const require = createRequire(import.meta.url); -await build({ - entryPoints: ["src/languages/autohotkey/parser.js"], - bundle: true, - format: "cjs", - platform: "node", - outfile, - logLevel: "silent", -}); +async function bundledRequire(entryPoint, outfileName) { + const outfile = path.join(os.tmpdir(), outfileName); + await build({ + entryPoints: [entryPoint], + bundle: true, + format: "cjs", + platform: "node", + outfile, + logLevel: "silent", + }); + return require(outfile); +} -const require = createRequire(import.meta.url); -const { parser } = require(outfile); +const { parser: autoHotkeyParser } = await bundledRequire( + "src/languages/autohotkey/parser.js", + "acode-autohotkey-parser-test.cjs", +); -const samples = [ +const autoHotkeySamples = [ { name: "AutoHotkey v2", source: `#Requires AutoHotkey v2.0 @@ -87,17 +97,15 @@ comment */ }, ]; -for (const sample of samples) { - const tree = parser.parse(sample.source); +for (const sample of autoHotkeySamples) { + const tree = autoHotkeyParser.parse(sample.source); const names = new Set(); const errors = []; tree.iterate({ enter(node) { names.add(node.name); - if (node.type.isError) { - errors.push([node.from, node.to]); - } + if (node.type.isError) errors.push([node.from, node.to]); }, }); @@ -108,4 +116,168 @@ for (const sample of samples) { } } -console.log(`Validated ${samples.length} AutoHotkey parser fixtures.`); +console.log(`Validated ${autoHotkeySamples.length} AutoHotkey parser fixtures.`); + +const { parser: ejsParser } = await bundledRequire( + "src/languages/ejs/parser.js", + "acode-ejs-parser-test.cjs", +); + +const ejsFixturePath = "src/languages/ejs/test.txt"; +const ejsFixtures = fileTests(fs.readFileSync(ejsFixturePath, "utf8"), ejsFixturePath); +for (const test of ejsFixtures) test.run(ejsParser); +console.log(`Validated ${ejsFixtures.length} EJS Lezer parser fixtures.`); + +const ejsBehaviorBundle = path.join(os.tmpdir(), "acode-ejs-behavior-test-bundle.mjs"); +const ejsBehaviorSource = String.raw` +import assert from "node:assert/strict"; +import { CompletionContext } from "@codemirror/autocomplete"; +import { EditorSelection, EditorState } from "@codemirror/state"; +import { insertNewlineAndIndent, toggleComment } from "@codemirror/commands"; +import { foldable, getIndentation, indentUnit, matchBrackets, syntaxTree } from "@codemirror/language"; +import { classHighlighter, highlightTree } from "@lezer/highlight"; +import { ejs, ejsLanguage } from "./src/languages/ejs/index.js"; + +function spansFor(doc) { + const state = EditorState.create({ doc, extensions: [ejsLanguage] }); + syntaxTree(state); + const spans = []; + highlightTree(syntaxTree(state), classHighlighter, (from, to, cls) => { + spans.push({ from, to, cls, text: state.doc.sliceString(from, to) }); + }); + return { state, tree: syntaxTree(state), spans }; +} + +{ + const source = "<%# <% if (user) { %>\n

<%= user.name %>

\n<% } %> %>"; + const result = spansFor(source); + assert.equal(result.tree.toString(), "Template(EjsComment)"); + assert.equal(result.spans.length, 1); + assert.equal(result.spans[0].cls, "tok-comment"); + assert.equal(result.spans[0].text, source); +} + +{ + const result = spansFor("<% if (user) { %>\n \n<% } %>"); + assert(result.spans.some((span) => span.cls === "tok-comment" && span.text.includes("<%= user.name %>"))); + assert(!result.spans.some((span) => /user|name|<%=/.test(span.text) && span.cls !== "tok-comment" && span.from >= 20 && span.to <= 54)); +} + +{ + const source = "<% if (user) { %>\n

<%= user.name %>

\n<% } %>"; + const result = spansFor(source); + assert(result.spans.some((span) => span.text === "h2" && span.cls.includes("typeName"))); + assert(result.spans.some((span) => span.text === "user" && span.cls.includes("variableName"))); + const open = result.state.doc.toString().indexOf("{"); + const close = result.state.doc.toString().lastIndexOf("}"); + assert.notEqual(matchBrackets(result.state, open + 1, 1)?.matched, false); + assert.notEqual(matchBrackets(result.state, close + 1, -1)?.matched, false); +} + +{ + assert.equal(spansFor("my title").spans.length, 0); +} + +function enter(doc, extensions = []) { + const cursor = doc.indexOf("%>\n <% }") + 2; + const state = EditorState.create({ + doc, + selection: EditorSelection.cursor(cursor), + extensions: [ejs(), ...extensions], + }); + syntaxTree(state); + let transaction = null; + insertNewlineAndIndent({ state, dispatch(tr) { transaction = tr; } }); + const line = transaction.newDoc.lineAt(transaction.newSelection.main.head); + return line.text; +} + +{ + const source = "<% if (user) { %>\n

<%= user.name %>

\n <% if('id' in user) { %>\n <% } %>\n<% } %>"; + assert.equal(enter(source), " "); + assert.equal(enter(source, [indentUnit.of(" "), EditorState.tabSize.of(4)]), " "); + assert.equal(enter(source, [indentUnit.of(" "), EditorState.tabSize.of(2)]), " "); +} + +{ + const source = "<% if (user) { %>\n

<%= user.name %>

\n <% if('id' in user) { %>\n\n <% } %>\n<% } %>"; + const state = EditorState.create({ doc: source, extensions: [ejs()] }); + syntaxTree(state); + assert.equal(getIndentation(state, state.doc.line(4).from), 4); + assert.equal(getIndentation(state, state.doc.line(5).from), 2); + assert.deepEqual(foldable(state, state.doc.line(1).from, state.doc.line(1).to), { + from: state.doc.line(1).to, + to: state.doc.line(6).from, + }); +} + + +{ + const state = EditorState.create({ doc: "

", extensions: [ejs()] }); + syntaxTree(state); + assert.equal(state.update({ changes: { from: 3, insert: "2" } }).newDoc.toString(), ""); +} + +{ + const state = EditorState.create({ doc: "", extensions: [ejs()] }); + syntaxTree(state); + assert.equal(state.update({ changes: { from: 3, to: 4 } }).newDoc.toString(), "

"); +} + +{ + const state = EditorState.create({ doc: "

", extensions: [ejs()] }); + syntaxTree(state); + const transaction = state.update({ changes: [{ from: 3, insert: "2" }, { from: 8, insert: "2" }] }); + assert.equal(transaction.newDoc.toString(), ""); +} + +{ + const state = EditorState.create({ doc: "fo", extensions: [ejs()] }); + const source = state.languageDataAt("autocomplete", 2)[0]; + const result = source(new CompletionContext(state, 2, true)); + const completion = result.options.find((option) => option.label === "for"); + assert(completion?.apply, "EJS for completion should be a snippet"); + + let next = state; + const fakeView = { + state: next, + dispatch(transaction) { + next = transaction.state; + this.state = next; + }, + }; + completion.apply(fakeView, completion, result.from, 2); + assert.equal(next.doc.toString(), "<% for (const item of items) { %>\n \n<% } %>"); + assert.equal(next.selection.main.from, 14); + assert.equal(next.selection.main.to, 18); +} +{ + let updated = ""; + const source = " "; + const state = EditorState.create({ doc: source, selection: { anchor: 2, head: source.length }, extensions: [ejs()] }); + assert(toggleComment({ state, dispatch(tr) { updated = tr.newDoc.toString(); } })); + assert.equal(updated.trim(), "

<%= user.name %>

"); +} + +console.log("Validated EJS CodeMirror behavior fixtures."); +`; + +await build({ + stdin: { + contents: ejsBehaviorSource, + resolveDir: process.cwd(), + sourcefile: "ejs-behavior-test.mjs", + loader: "js", + }, + bundle: true, + format: "esm", + platform: "node", + outfile: ejsBehaviorBundle, + logLevel: "silent", +}); + +try { + await import(pathToFileURL(ejsBehaviorBundle).href + `?t=${Date.now()}`); +} finally { + fs.rmSync(ejsBehaviorBundle, { force: true }); +} diff --git a/scripts/test-plugin-runtime.cjs b/scripts/test-plugin-runtime.cjs index da417c6..c41acaf 100644 --- a/scripts/test-plugin-runtime.cjs +++ b/scripts/test-plugin-runtime.cjs @@ -63,6 +63,7 @@ async function test() { "pkl", "svelte", "wgsl", + "ejs", ]; assert.deepEqual([...modes.keys()], expectedNames); @@ -85,6 +86,7 @@ async function test() { pkl: 'name = "example"', svelte: "

{x}

", wgsl: "@vertex fn main() -> @builtin(position) vec4f { return vec4f(); }", + ejs: "<% if (user) { %>\n

<%= user.name %>

\n<% } %>", }; for (const [name, source] of Object.entries(samples)) { diff --git a/src/languages/ejs/index.js b/src/languages/ejs/index.js index f5d1c4e..1b9a29e 100644 --- a/src/languages/ejs/index.js +++ b/src/languages/ejs/index.js @@ -1,8 +1,17 @@ -import { completeFromList } from "@codemirror/autocomplete"; +import { completeFromList, snippetCompletion } from "@codemirror/autocomplete"; import { html } from "@codemirror/lang-html"; import { javascript, javascriptLanguage } from "@codemirror/lang-javascript"; import { Prec, EditorState } from "@codemirror/state"; -import { LRLanguage, LanguageSupport, syntaxTree } from "@codemirror/language"; +import { + foldInside, + foldNodeProp, + foldService, + indentNodeProp, + indentService, + LRLanguage, + LanguageSupport, + syntaxTree, +} from "@codemirror/language"; import { parseMixed } from "@lezer/common"; import { styleTags, tags as t } from "@lezer/highlight"; import { parser } from "./parser"; @@ -10,6 +19,133 @@ import { parser } from "./parser"; const htmlSupport = html({ matchClosingTags: false }); const javascriptSupport = javascript(); +function tagIndent(context) { + return /^\s*%>/.test(context.textAfter) + ? context.baseIndent + : context.baseIndent + context.unit; +} + +function foldDelimitedToken(openLength, closeLength) { + return (node, state) => { + const from = node.from + openLength; + const to = node.to - closeLength; + return state.doc.lineAt(from).number < state.doc.lineAt(to).number + ? { from, to } + : null; + }; +} + +const foldEjsComment = foldDelimitedToken(3, 2); +const foldHtmlComment = foldDelimitedToken(4, 3); + +function ejsBlockContent(state, node) { + const content = node.getChild("Content"); + return content ? state.sliceDoc(content.from, content.to).trim() : ""; +} + +function braceStats(source) { + let opens = 0; + let closes = 0; + for (let index = 0; index < source.length; index++) { + const char = source[index]; + if (char === "{") opens++; + else if (char === "}") closes++; + } + return { opens, closes, delta: opens - closes }; +} + +function isClosingBlock(source) { + return /^(?:}|else\b|catch\b|finally\b)/.test(source); +} + +function ejsBlocks(state) { + const blocks = []; + const cursor = syntaxTree(state).cursor(); + + do { + if (cursor.name !== "EjsBlock") continue; + const node = cursor.node; + const content = ejsBlockContent(state, node); + const stats = braceStats(content); + blocks.push({ + from: node.from, + to: node.to, + lineFrom: state.doc.lineAt(node.from).from, + lineTo: state.doc.lineAt(node.to).to, + content, + opens: stats.opens, + closesCount: stats.closes, + delta: stats.delta, + closes: isClosingBlock(content), + }); + } while (cursor.next()); + + return blocks; +} + +function columnAt(state, pos) { + const line = state.doc.lineAt(pos); + let column = 0; + for (const char of line.text.slice(0, pos - line.from)) { + column += char === "\t" ? state.tabSize - (column % state.tabSize) : 1; + } + return column; +} + +function pushOpenBlocks(stack, block) { + for (let count = 0; count < block.opens; count++) stack.push(block); +} + +function applyBlockToStack(stack, block) { + for (let count = 0; count < block.closesCount; count++) stack.pop(); + pushOpenBlocks(stack, block); +} + +function ejsIndentAt(state, pos, simulatedBreak) { + const line = state.doc.lineAt(pos); + const before = simulatedBreak ?? line.from; + const blocks = ejsBlocks(state); + const stack = []; + + for (const block of blocks) { + if (block.from >= before) break; + applyBlockToStack(stack, block); + } + + const firstBlock = blocks.find((block) => block.lineFrom === line.from); + if (firstBlock?.closes) { + const opener = stack[stack.length - 1]; + return opener ? columnAt(state, opener.from) : 0; + } + + const opener = stack[stack.length - 1]; + return opener ? columnAt(state, opener.from + 2) : 0; +} + +function ejsFold(state, lineStart, lineEnd) { + const blocks = ejsBlocks(state); + const startIndex = blocks.findIndex((block) => { + return block.lineFrom === lineStart && block.delta > 0; + }); + if (startIndex < 0) return null; + + let depth = 0; + for (let index = startIndex; index < blocks.length; index++) { + const block = blocks[index]; + depth += block.delta; + if (depth <= 0 && index > startIndex) { + return block.lineFrom > lineEnd ? { from: lineEnd, to: block.lineFrom } : null; + } + } + + return null; +} + +const ejsIndentService = indentService.of((context, pos) => { + return ejsIndentAt(context.state, pos, context.simulatedBreak); +}); +const ejsFoldService = foldService.of(ejsFold); + function containsHtmlMarkup(input, from, to) { return /<\/?[A-Za-z][\w:-]*(?:\s|\/?>)|" } } }] @@ -102,6 +301,16 @@ export const ejsLanguage = LRLanguage.define({ "ExprStart BlockStart TagEnd": t.keyword, LiteralStart: t.string, EscapedTag: t.string, + }), + indentNodeProp.add({ + EjsExpression: tagIndent, + EjsBlock: tagIndent, + }), + foldNodeProp.add({ + EjsExpression: foldInside, + EjsBlock: foldInside, + EjsComment: foldEjsComment, + HtmlComment: foldHtmlComment, }) ] }), @@ -118,10 +327,13 @@ export const ejsLanguage = LRLanguage.define({ */ export function ejs() { return new LanguageSupport(ejsLanguage, [ + ejsIndentService, + ejsFoldService, + htmlTagNameSync, htmlCommentTokens, htmlSupport.support, javascriptSupport.support, - ejsLanguage.data.of({ autocomplete: completeFromList(ejsAutocomplete) }) + ejsLanguage.data.of({ autocomplete: ejsCompletionSource }) ]); } @@ -129,15 +341,77 @@ export function ejs() { * Autocomplete suggestions for EJS tags */ const ejsAutocomplete = [ - { label: "<% %>", type: "keyword", boost: 99 }, - { label: "<%= %>", type: "keyword", boost: 98 }, - { label: "<%- %>", type: "keyword", boost: 97 }, - { label: "<%# %>", type: "comment", boost: 96 }, + snippetCompletion("<% ${} %>", { label: "<% %>", type: "keyword", boost: 99 }), + snippetCompletion("<%= ${} %>", { label: "<%= %>", type: "keyword", boost: 98 }), + snippetCompletion("<%- ${} %>", { label: "<%- %>", type: "keyword", boost: 97 }), + snippetCompletion("<%# ${} %>", { label: "<%# %>", type: "comment", boost: 96 }), + snippetCompletion("<% for (const ${item} of ${items}) { %>\n\t${}\n<% } %>", { + label: "for", + type: "keyword", + detail: "EJS loop", + boost: 95, + }), + snippetCompletion("<% if (${condition}) { %>\n\t${}\n<% } %>", { + label: "if", + type: "keyword", + detail: "EJS if statement", + boost: 94, + }), + snippetCompletion("<% if (${condition}) { %>\n\t${}\n<% } else { %>\n\t${}\n<% } %>", { + label: "ifelse", + type: "keyword", + detail: "EJS if-else statement", + boost: 93, + }), + snippetCompletion("<% } else { %>", { + label: "else", + type: "keyword", + detail: "EJS else block", + boost: 92, + }), + snippetCompletion("<% } else if (${condition}) { %>", { + label: "elseif", + type: "keyword", + detail: "EJS else-if block", + boost: 91, + }), + snippetCompletion("<% ${items}.forEach((${item}) => { %>\n\t${}\n<% }) %>", { + label: "foreach", + type: "keyword", + detail: "EJS forEach loop", + boost: 90, + }), + snippetCompletion("<% while (${condition}) { %>\n\t${}\n<% } %>", { + label: "while", + type: "keyword", + detail: "EJS while loop", + boost: 89, + }), + snippetCompletion("<%- include('${path}') %>", { + label: "include", + type: "keyword", + detail: "EJS include", + boost: 88, + }), ]; +const ejsSnippetCompletions = completeFromList(ejsAutocomplete); + +function insideEjsTag(state, pos) { + for (let node = syntaxTree(state).resolveInner(pos, -1); node; node = node.parent) { + if (node.name === "EjsExpression" || node.name === "EjsBlock" || node.name === "EjsComment") return true; + if (node.name === "Template") break; + } + return false; +} + +function ejsCompletionSource(context) { + return insideEjsTag(context.state, context.pos) ? null : ejsSnippetCompletions(context); +} + export const ejsMode = { name: "ejs", caption: "EJS", extensions: ["ejs"], load: ejs, -}; \ No newline at end of file +}; diff --git a/src/languages/ejs/test.txt b/src/languages/ejs/test.txt new file mode 100644 index 0000000..62fa239 --- /dev/null +++ b/src/languages/ejs/test.txt @@ -0,0 +1,41 @@ +# basic EJS block with expression +<% if (user) { %> +

<%= user.name %>

+<% } %> +==> +Template(EjsTag(EjsBlock(BlockStart,Content,TagEnd)),Text,EjsTag(EjsExpression(ExprStart,Content,TagEnd)),Text,EjsTag(EjsBlock(BlockStart,Content,TagEnd))) + +# HTML comment containing EJS stays inert +<% if (user) { %> + +<% } %> +==> +Template(EjsTag(EjsBlock(BlockStart,Content,TagEnd)),Text,HtmlComment,Text,EjsTag(EjsBlock(BlockStart,Content,TagEnd))) + +# EJS comment wrapping EJS source +<%# <% if (user) { %> +

<%= user.name %>

+<% } %> %> +==> +Template(EjsComment) + +# nested EJS blocks around HTML +<% if (user) { %> +

<%= user.name %>

+ <% if('id' in user) { %> + <% } %> +<% } %> +==> +Template(EjsTag(EjsBlock(BlockStart,Content,TagEnd)),Text,EjsTag(EjsExpression(ExprStart,Content,TagEnd)),Text,EjsTag(EjsBlock(BlockStart,Content,TagEnd)),Text,EjsTag(EjsBlock(BlockStart,Content,TagEnd)),Text,EjsTag(EjsBlock(BlockStart,Content,TagEnd))) + +# plain text +my title +==> +Template(Text) + +# multiline expression +<%= +user.name +%> +==> +Template(EjsTag(EjsExpression(ExprStart,Content,TagEnd))) \ No newline at end of file diff --git a/src/runtime/codemirror-language.js b/src/runtime/codemirror-language.js index f9943b1..21928a7 100644 --- a/src/runtime/codemirror-language.js +++ b/src/runtime/codemirror-language.js @@ -11,11 +11,13 @@ export const { defineLanguageFacet, foldInside, foldNodeProp, + foldService, flatIndent, getIndentation, getIndentUnit, indentString, indentNodeProp, + indentService, delimitedIndent, sublanguageProp, syntaxTree, From 0a843c6f8f136b2e35b5fca89157062dd075fa97 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Tue, 30 Jun 2026 12:49:47 +0530 Subject: [PATCH 5/7] add: some explanation & grammar sources. --- src/languages/ejs/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/languages/ejs/index.js b/src/languages/ejs/index.js index 1b9a29e..456af69 100644 --- a/src/languages/ejs/index.js +++ b/src/languages/ejs/index.js @@ -16,6 +16,15 @@ import { parseMixed } from "@lezer/common"; import { styleTags, tags as t } from "@lezer/highlight"; import { parser } from "./parser"; +// Follows the Codemirror Language Pattern. +// Uses the following grammars (with certain modifications to support other things): +// 1. https://github.com/dannyhw/ejs-language-tools/blob/main/syntaxes/js-ejs-injection.tmLanguage.json +// 2. https://github.com/Digitalbrainstem/ejs-grammar/blob/master/syntaxes/ejs.json +// other things such as html comments inside ejs block, ejs comments special cases, and ... +// Eyes on Javascript Highlighting, html autocompletion inside ejs blocks. +// Written by [UnschooledGamer](https://github.com/UnschooledGamer) & Handled by Acode-Foundation. +// Under the Same License as Project's License File at https://github.com/Acode-Foundation/acode-additional-langmodes. + const htmlSupport = html({ matchClosingTags: false }); const javascriptSupport = javascript(); From 2676af7e60e4f6b18f25972e997fe64adf22aae7 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Tue, 30 Jun 2026 13:06:12 +0530 Subject: [PATCH 6/7] chore: add EJS Entry to readme --- readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/readme.md b/readme.md index b96d5a7..672c84a 100644 --- a/readme.md +++ b/readme.md @@ -12,6 +12,7 @@ Adds CodeMirror language support for languages that are not bundled with Acode. - JSONC (`.jsonc`) - BibTeX (`.bib`) - Elixir (`.ex`, `.exs`, `.eex`, `.heex`, `.leex`) +- EJS (`.ejs`) - GolfScript (`.gs`) - GraphQL (`.graphql`, `.graphqls`, `.gql`) - Graphviz DOT (`.dot`, `.gv`) From 0098053bc3485d0b582271d896a48bad91e68092 Mon Sep 17 00:00:00 2001 From: UnschooledGamer <76094069+UnschooledGamer@users.noreply.github.com> Date: Tue, 30 Jun 2026 13:24:07 +0530 Subject: [PATCH 7/7] fix: double `indentService` due to merge --- plugin.zip | Bin 667039 -> 733851 bytes src/runtime/codemirror-language.js | 1 - 2 files changed, 1 deletion(-) diff --git a/plugin.zip b/plugin.zip index 341741a44aaf47c5baca3e235624bcb60b9d0bdf..520b16848fc7b663ee407568ccf5c370c3331b9f 100644 GIT binary patch delta 124409 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%0D%QjmKgsuWe$Ruf?D9jsa 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 A;{X5v delta 58781 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 diff --git a/src/runtime/codemirror-language.js b/src/runtime/codemirror-language.js index 59da2fa..21928a7 100644 --- a/src/runtime/codemirror-language.js +++ b/src/runtime/codemirror-language.js @@ -15,7 +15,6 @@ export const { flatIndent, getIndentation, getIndentUnit, - indentService, indentString, indentNodeProp, indentService,