@univerjs/uniscript 0.3.0 → 0.4.0-alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. package/lib/abap-BZS-1p12.js +6 -0
  2. package/lib/abap-D8H3nII2.mjs +1404 -0
  3. package/lib/apex-B2xdRF0k.js +6 -0
  4. package/lib/apex-BVHYDV51.mjs +334 -0
  5. package/lib/azcli-BwJ4gbR1.mjs +74 -0
  6. package/lib/azcli-CKk2q0zF.js +6 -0
  7. package/lib/bat-BDmMqWXx.mjs +106 -0
  8. package/lib/bat-Ehz5Z_mk.js +6 -0
  9. package/lib/bicep-B5L2IbSj.mjs +110 -0
  10. package/lib/bicep-WbLMPUMj.js +7 -0
  11. package/lib/cameligo-B_ldnAvM.js +6 -0
  12. package/lib/cameligo-CmyOPZUd.mjs +180 -0
  13. package/lib/cjs/index.js +1 -9
  14. package/lib/clojure-Dg-qgg-1.js +6 -0
  15. package/lib/clojure-iSXHsTlR.mjs +767 -0
  16. package/lib/coffee-BCg0pb49.js +6 -0
  17. package/lib/coffee-BUCk2FHC.mjs +238 -0
  18. package/lib/cpp-CJWZ7Zo7.js +6 -0
  19. package/lib/cpp-MUyeqRt5.mjs +395 -0
  20. package/lib/csharp-B9vyMfVU.mjs +332 -0
  21. package/lib/csharp-BZypj8XG.js +6 -0
  22. package/lib/csp-BfXxGnNN.js +6 -0
  23. package/lib/csp-CbylPXe5.mjs +59 -0
  24. package/lib/css-BPDnvT2s.js +8 -0
  25. package/lib/css-BQSMT8k7.mjs +193 -0
  26. package/lib/cssMode-B_of5tVd.js +9 -0
  27. package/lib/cssMode-BuX-eUHc.mjs +1604 -0
  28. package/lib/cypher-3bNWMNCJ.js +6 -0
  29. package/lib/cypher-D7IWy_82.mjs +269 -0
  30. package/lib/dart-BCVbUKaH.mjs +287 -0
  31. package/lib/dart-C9Glm5m-.js +6 -0
  32. package/lib/dockerfile-CjnlcV5o.js +6 -0
  33. package/lib/dockerfile-D2-hSnDX.mjs +136 -0
  34. package/lib/ecl-DRJlPmOb.mjs +462 -0
  35. package/lib/ecl-UyoSfv7F.js +6 -0
  36. package/lib/elixir-Bol0p0Ia.js +6 -0
  37. package/lib/elixir-D8NBXKCb.mjs +575 -0
  38. package/lib/es/index.js +5 -262
  39. package/lib/flow9-Be1OUdJl.js +6 -0
  40. package/lib/flow9-Dp7h8rKW.mjs +148 -0
  41. package/lib/freemarker2-D8-fH4uC.mjs +1001 -0
  42. package/lib/freemarker2-S5ay_GEf.js +8 -0
  43. package/lib/fsharp-CJxdVP7r.mjs +223 -0
  44. package/lib/fsharp-CKIYWNYJ.js +6 -0
  45. package/lib/go-DWj6zslQ.js +6 -0
  46. package/lib/go-IPaMO3Uz.mjs +224 -0
  47. package/lib/graphql-BzJpwfxN.js +6 -0
  48. package/lib/graphql-CMoDK5uf.mjs +157 -0
  49. package/lib/handlebars-CEMNnGaU.mjs +427 -0
  50. package/lib/handlebars-CM3PRDRO.js +6 -0
  51. package/lib/hcl-BCY6T0iq.js +6 -0
  52. package/lib/hcl-BTAYK4pT.mjs +189 -0
  53. package/lib/html-BSUn7oJR.mjs +316 -0
  54. package/lib/html-Df-Osxjs.js +6 -0
  55. package/lib/htmlMode-Bj4CfAzA.js +9 -0
  56. package/lib/htmlMode-xJPwX0cD.mjs +1615 -0
  57. package/lib/index-D6nY5NdF.mjs +116821 -0
  58. package/lib/index-rYV4VmC2.js +1163 -0
  59. package/lib/index.css +1 -1
  60. package/lib/ini-CC3_THb4.js +6 -0
  61. package/lib/ini-CiaphB6F.mjs +77 -0
  62. package/lib/java-CwRV8Dsg.js +6 -0
  63. package/lib/java-DxksziCw.mjs +238 -0
  64. package/lib/javascript-D1eKEotE.js +6 -0
  65. package/lib/javascript-c8D1_K05.mjs +76 -0
  66. package/lib/jsonMode-8-L3-E9k.mjs +2042 -0
  67. package/lib/jsonMode-BdBVsN9_.js +15 -0
  68. package/lib/julia-7Z1jwT4W.js +6 -0
  69. package/lib/julia-TTty8och.mjs +517 -0
  70. package/lib/kotlin-BAXgl2QX.js +6 -0
  71. package/lib/kotlin-Dzand-bM.mjs +259 -0
  72. package/lib/less-CSG9Zdoy.js +7 -0
  73. package/lib/less-CWDFQI_i.mjs +168 -0
  74. package/lib/lexon-BiTtMD9F.js +6 -0
  75. package/lib/lexon-bZpjZioh.mjs +163 -0
  76. package/lib/liquid-BmlJOXgY.js +6 -0
  77. package/lib/liquid-Bs7DM5cg.mjs +248 -0
  78. package/lib/locale/fa-IR.json +17 -0
  79. package/lib/lua-CoWYKXUu.mjs +168 -0
  80. package/lib/lua-o7UTFJ05.js +6 -0
  81. package/lib/m3-DIJY3uEe.mjs +216 -0
  82. package/lib/m3-DOYTRLxi.js +6 -0
  83. package/lib/markdown-CDlkMTMZ.mjs +235 -0
  84. package/lib/markdown-Di5faXtP.js +6 -0
  85. package/lib/mdx-BEI71kqO.mjs +173 -0
  86. package/lib/mdx-DJV2KJ98.js +6 -0
  87. package/lib/mips-CIiuS33B.mjs +204 -0
  88. package/lib/mips-CjGjcf9D.js +6 -0
  89. package/lib/msdax-4_jBeazN.mjs +381 -0
  90. package/lib/msdax-DZFpIwAH.js +6 -0
  91. package/lib/mysql-6Y0DL_eO.js +6 -0
  92. package/lib/mysql-D_KZRjSR.mjs +884 -0
  93. package/lib/objective-c-7nsY1fc1.mjs +189 -0
  94. package/lib/objective-c-BtrzMwBz.js +6 -0
  95. package/lib/pascal-BF06Dt9I.js +6 -0
  96. package/lib/pascal-BHpF9PW1.mjs +257 -0
  97. package/lib/pascaligo-BDrxVOcH.js +6 -0
  98. package/lib/pascaligo-C3mRbxmU.mjs +170 -0
  99. package/lib/perl-BMlqAyyD.js +6 -0
  100. package/lib/perl-F3tWDMLI.mjs +632 -0
  101. package/lib/pgsql-D62t1RD_.mjs +857 -0
  102. package/lib/pgsql-DXYBcnYD.js +6 -0
  103. package/lib/php-C8GGPjjI.mjs +506 -0
  104. package/lib/php-DmDmMNs3.js +6 -0
  105. package/lib/pla-2A6q3K8_.js +6 -0
  106. package/lib/pla-C_W_x2fV.mjs +143 -0
  107. package/lib/postiats-CMS8WwLg.mjs +913 -0
  108. package/lib/postiats-DQ-6iLGI.js +6 -0
  109. package/lib/powerquery-CuZPk7NC.js +6 -0
  110. package/lib/powerquery-Dcs0XplE.mjs +896 -0
  111. package/lib/powershell-Brx1N_3T.mjs +245 -0
  112. package/lib/powershell-D7BqJxnS.js +6 -0
  113. package/lib/protobuf-CkqkhuUG.js +7 -0
  114. package/lib/protobuf-UEJDuX6l.mjs +426 -0
  115. package/lib/pug-65DF18O8.js +6 -0
  116. package/lib/pug-LDwDmrMc.mjs +408 -0
  117. package/lib/python-BOeTitp9.mjs +309 -0
  118. package/lib/python-DRyE-VQQ.js +6 -0
  119. package/lib/qsharp-Cb7hPwnM.mjs +307 -0
  120. package/lib/qsharp-Dw07PXbd.js +6 -0
  121. package/lib/r-BHuY0po5.js +6 -0
  122. package/lib/r-BiFgSgcs.mjs +249 -0
  123. package/lib/razor-D0RPXCAO.mjs +558 -0
  124. package/lib/razor-DtDOotKq.js +6 -0
  125. package/lib/redis-BdzqoKC2.mjs +308 -0
  126. package/lib/redis-_Q4kv9ug.js +6 -0
  127. package/lib/redshift-DNNCHCLR.js +6 -0
  128. package/lib/redshift-Df6PoiEL.mjs +815 -0
  129. package/lib/restructuredtext-C9FM3r80.js +6 -0
  130. package/lib/restructuredtext-CW0ZtQ2l.mjs +180 -0
  131. package/lib/ruby-DyIFepcy.mjs +517 -0
  132. package/lib/ruby-DyJmXCYh.js +6 -0
  133. package/lib/rust-BiRHKB0S.mjs +349 -0
  134. package/lib/rust-DVvzZ_uH.js +6 -0
  135. package/lib/sb-CFwmZh3c.js +6 -0
  136. package/lib/sb-CahkGwPC.mjs +121 -0
  137. package/lib/scala-Cg9Wfw6B.mjs +376 -0
  138. package/lib/scala-DjaRe0PR.js +6 -0
  139. package/lib/scheme-Bqb0wlMX.mjs +114 -0
  140. package/lib/scheme-ZdeLzG0d.js +6 -0
  141. package/lib/scss-3qd2syug.mjs +268 -0
  142. package/lib/scss-Dqv1RljX.js +8 -0
  143. package/lib/shell-B5iW6U-v.mjs +227 -0
  144. package/lib/shell-BJ5zD_-e.js +6 -0
  145. package/lib/solidity-8Ys0iSgd.mjs +1373 -0
  146. package/lib/solidity-CagYWQAe.js +6 -0
  147. package/lib/sophia-PnZfErC3.mjs +205 -0
  148. package/lib/sophia-szuux90p.js +6 -0
  149. package/lib/sparql-CXz1-gkd.js +6 -0
  150. package/lib/sparql-CgWX-KRM.mjs +207 -0
  151. package/lib/sql-CN3Vg4Sm.mjs +859 -0
  152. package/lib/sql-CWZ5x4mg.js +6 -0
  153. package/lib/st-CcWMPoh3.js +6 -0
  154. package/lib/st-DKDuarOh.mjs +422 -0
  155. package/lib/swift-DUBoAkDR.js +8 -0
  156. package/lib/swift-DnXH6Con.mjs +318 -0
  157. package/lib/systemverilog-5hQzl-99.js +6 -0
  158. package/lib/systemverilog-pJOgZU46.mjs +582 -0
  159. package/lib/tcl-Bls9iNXn.mjs +238 -0
  160. package/lib/tcl-CiK0GhJi.js +6 -0
  161. package/lib/tsMode-BB2mDc5d.mjs +906 -0
  162. package/lib/tsMode-N-LS5RKx.js +16 -0
  163. package/lib/twig-B14HEeE0.mjs +398 -0
  164. package/lib/twig-Cbq-Ua-E.js +6 -0
  165. package/lib/types/locale/fa-IR.d.ts +3 -0
  166. package/lib/types/plugin.d.ts +2 -1
  167. package/lib/typescript-CZplv8KD.js +6 -0
  168. package/lib/typescript-f9PHTVoW.mjs +351 -0
  169. package/lib/typespec-Br_LC070.js +6 -0
  170. package/lib/typespec-dAaIdBal.mjs +125 -0
  171. package/lib/umd/index.js +1914 -2
  172. package/lib/vb-B1HzwoGL.js +6 -0
  173. package/lib/vb-CPBujGrP.mjs +378 -0
  174. package/lib/wgsl-BNAUPMiJ.js +303 -0
  175. package/lib/wgsl-CqCqdnZC.mjs +448 -0
  176. package/lib/xml-BSe-ETnG.js +6 -0
  177. package/lib/xml-Dv0cmUxw.mjs +103 -0
  178. package/lib/yaml-O_DoXtBP.js +6 -0
  179. package/lib/yaml-eXS7QSgG.mjs +214 -0
  180. package/package.json +13 -21
@@ -0,0 +1,1001 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: !0 });
3
+ import { m as monaco_editor_core_star } from "./index-D6nY5NdF.mjs";
4
+ /*!-----------------------------------------------------------------------------
5
+ * Copyright (c) Microsoft Corporation. All rights reserved.
6
+ * Version: 0.52.0(f6dc0eb8fce67e57f6036f4769d92c1666cdf546)
7
+ * Released under the MIT license
8
+ * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
9
+ *-----------------------------------------------------------------------------*/
10
+ var __defProp2 = Object.defineProperty, __getOwnPropDesc = Object.getOwnPropertyDescriptor, __getOwnPropNames = Object.getOwnPropertyNames, __hasOwnProp = Object.prototype.hasOwnProperty, __copyProps = /* @__PURE__ */ __name((to, from, except, desc) => {
11
+ if (from && typeof from == "object" || typeof from == "function")
12
+ for (let key of __getOwnPropNames(from))
13
+ !__hasOwnProp.call(to, key) && key !== except && __defProp2(to, key, { get: /* @__PURE__ */ __name(() => from[key], "get"), enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ return to;
15
+ }, "__copyProps"), __reExport = /* @__PURE__ */ __name((target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget), "__reExport"), monaco_editor_core_exports = {};
16
+ __reExport(monaco_editor_core_exports, monaco_editor_core_star);
17
+ var EMPTY_ELEMENTS = [
18
+ "assign",
19
+ "flush",
20
+ "ftl",
21
+ "return",
22
+ "global",
23
+ "import",
24
+ "include",
25
+ "break",
26
+ "continue",
27
+ "local",
28
+ "nested",
29
+ "nt",
30
+ "setting",
31
+ "stop",
32
+ "t",
33
+ "lt",
34
+ "rt",
35
+ "fallback"
36
+ ], BLOCK_ELEMENTS = [
37
+ "attempt",
38
+ "autoesc",
39
+ "autoEsc",
40
+ "compress",
41
+ "comment",
42
+ "escape",
43
+ "noescape",
44
+ "function",
45
+ "if",
46
+ "list",
47
+ "items",
48
+ "sep",
49
+ "macro",
50
+ "noparse",
51
+ "noParse",
52
+ "noautoesc",
53
+ "noAutoEsc",
54
+ "outputformat",
55
+ "switch",
56
+ "visit",
57
+ "recurse"
58
+ ], TagSyntaxAngle = {
59
+ close: ">",
60
+ id: "angle",
61
+ open: "<"
62
+ }, TagSyntaxBracket = {
63
+ close: "\\]",
64
+ id: "bracket",
65
+ open: "\\["
66
+ }, TagSyntaxAuto = {
67
+ close: "[>\\]]",
68
+ id: "auto",
69
+ open: "[<\\[]"
70
+ }, InterpolationSyntaxDollar = {
71
+ close: "\\}",
72
+ id: "dollar",
73
+ open1: "\\$",
74
+ open2: "\\{"
75
+ }, InterpolationSyntaxBracket = {
76
+ close: "\\]",
77
+ id: "bracket",
78
+ open1: "\\[",
79
+ open2: "="
80
+ };
81
+ function createLangConfiguration(ts) {
82
+ return {
83
+ brackets: [
84
+ ["<", ">"],
85
+ ["[", "]"],
86
+ ["(", ")"],
87
+ ["{", "}"]
88
+ ],
89
+ comments: {
90
+ blockComment: [`${ts.open}--`, `--${ts.close}`]
91
+ },
92
+ autoCloseBefore: `
93
+ \r }]),.:;=`,
94
+ autoClosingPairs: [
95
+ { open: "{", close: "}" },
96
+ { open: "[", close: "]" },
97
+ { open: "(", close: ")" },
98
+ { open: '"', close: '"', notIn: ["string"] },
99
+ { open: "'", close: "'", notIn: ["string"] }
100
+ ],
101
+ surroundingPairs: [
102
+ { open: '"', close: '"' },
103
+ { open: "'", close: "'" },
104
+ { open: "{", close: "}" },
105
+ { open: "[", close: "]" },
106
+ { open: "(", close: ")" },
107
+ { open: "<", close: ">" }
108
+ ],
109
+ folding: {
110
+ markers: {
111
+ start: new RegExp(
112
+ `${ts.open}#(?:${BLOCK_ELEMENTS.join("|")})([^/${ts.close}]*(?!/)${ts.close})[^${ts.open}]*$`
113
+ ),
114
+ end: new RegExp(`${ts.open}/#(?:${BLOCK_ELEMENTS.join("|")})[\\r\\n\\t ]*>`)
115
+ }
116
+ },
117
+ onEnterRules: [
118
+ {
119
+ beforeText: new RegExp(
120
+ `${ts.open}#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/${ts.close}]*(?!/)${ts.close})[^${ts.open}]*$`
121
+ ),
122
+ afterText: new RegExp(`^${ts.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${ts.close}$`),
123
+ action: {
124
+ indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent
125
+ }
126
+ },
127
+ {
128
+ beforeText: new RegExp(
129
+ `${ts.open}#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/${ts.close}]*(?!/)${ts.close})[^${ts.open}]*$`
130
+ ),
131
+ action: { indentAction: monaco_editor_core_exports.languages.IndentAction.Indent }
132
+ }
133
+ ]
134
+ };
135
+ }
136
+ __name(createLangConfiguration, "createLangConfiguration");
137
+ function createLangConfigurationAuto() {
138
+ return {
139
+ // Cannot set block comment delimiter in auto mode...
140
+ // It depends on the content and the cursor position of the file...
141
+ brackets: [
142
+ ["<", ">"],
143
+ ["[", "]"],
144
+ ["(", ")"],
145
+ ["{", "}"]
146
+ ],
147
+ autoCloseBefore: `
148
+ \r }]),.:;=`,
149
+ autoClosingPairs: [
150
+ { open: "{", close: "}" },
151
+ { open: "[", close: "]" },
152
+ { open: "(", close: ")" },
153
+ { open: '"', close: '"', notIn: ["string"] },
154
+ { open: "'", close: "'", notIn: ["string"] }
155
+ ],
156
+ surroundingPairs: [
157
+ { open: '"', close: '"' },
158
+ { open: "'", close: "'" },
159
+ { open: "{", close: "}" },
160
+ { open: "[", close: "]" },
161
+ { open: "(", close: ")" },
162
+ { open: "<", close: ">" }
163
+ ],
164
+ folding: {
165
+ markers: {
166
+ start: new RegExp(`[<\\[]#(?:${BLOCK_ELEMENTS.join("|")})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),
167
+ end: new RegExp(`[<\\[]/#(?:${BLOCK_ELEMENTS.join("|")})[\\r\\n\\t ]*>`)
168
+ }
169
+ },
170
+ onEnterRules: [
171
+ {
172
+ beforeText: new RegExp(
173
+ `[<\\[]#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`
174
+ ),
175
+ afterText: new RegExp("^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$"),
176
+ action: {
177
+ indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent
178
+ }
179
+ },
180
+ {
181
+ beforeText: new RegExp(
182
+ `[<\\[]#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`
183
+ ),
184
+ action: { indentAction: monaco_editor_core_exports.languages.IndentAction.Indent }
185
+ }
186
+ ]
187
+ };
188
+ }
189
+ __name(createLangConfigurationAuto, "createLangConfigurationAuto");
190
+ function createMonarchLanguage(ts, is) {
191
+ const id = `_${ts.id}_${is.id}`, s = /* @__PURE__ */ __name((name) => name.replace(/__id__/g, id), "s"), r = /* @__PURE__ */ __name((regexp) => {
192
+ const source = regexp.source.replace(/__id__/g, id);
193
+ return new RegExp(source, regexp.flags);
194
+ }, "r");
195
+ return {
196
+ // Settings
197
+ unicode: !0,
198
+ includeLF: !1,
199
+ start: s("default__id__"),
200
+ ignoreCase: !1,
201
+ defaultToken: "invalid",
202
+ tokenPostfix: ".freemarker2",
203
+ brackets: [
204
+ { open: "{", close: "}", token: "delimiter.curly" },
205
+ { open: "[", close: "]", token: "delimiter.square" },
206
+ { open: "(", close: ")", token: "delimiter.parenthesis" },
207
+ { open: "<", close: ">", token: "delimiter.angle" }
208
+ ],
209
+ // Dynamic RegExp
210
+ [s("open__id__")]: new RegExp(ts.open),
211
+ [s("close__id__")]: new RegExp(ts.close),
212
+ [s("iOpen1__id__")]: new RegExp(is.open1),
213
+ [s("iOpen2__id__")]: new RegExp(is.open2),
214
+ [s("iClose__id__")]: new RegExp(is.close),
215
+ // <#START_TAG : "<" | "<#" | "[#">
216
+ // <#END_TAG : "</" | "</#" | "[/#">
217
+ [s("startTag__id__")]: r(/(@open__id__)(#)/),
218
+ [s("endTag__id__")]: r(/(@open__id__)(\/#)/),
219
+ [s("startOrEndTag__id__")]: r(/(@open__id__)(\/?#)/),
220
+ // <#CLOSE_TAG1 : (<BLANK>)* (">" | "]")>
221
+ [s("closeTag1__id__")]: r(/((?:@blank)*)(@close__id__)/),
222
+ // <#CLOSE_TAG2 : (<BLANK>)* ("/")? (">" | "]")>
223
+ [s("closeTag2__id__")]: r(/((?:@blank)*\/?)(@close__id__)/),
224
+ // Static RegExp
225
+ // <#BLANK : " " | "\t" | "\n" | "\r">
226
+ blank: /[ \t\n\r]/,
227
+ // <FALSE : "false">
228
+ // <TRUE : "true">
229
+ // <IN : "in">
230
+ // <AS : "as">
231
+ // <USING : "using">
232
+ keywords: ["false", "true", "in", "as", "using"],
233
+ // Directive names that cannot have an expression parameters and cannot be self-closing
234
+ // E.g. <#if id==2> ... </#if>
235
+ directiveStartCloseTag1: /attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,
236
+ // Directive names that cannot have an expression parameter and can be self-closing
237
+ // E.g. <#if> ... <#else> ... </#if>
238
+ // E.g. <#if> ... <#else /></#if>
239
+ directiveStartCloseTag2: /else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,
240
+ // Directive names that can have an expression parameter and cannot be self-closing
241
+ // E.g. <#if id==2> ... </#if>
242
+ directiveStartBlank: /if|else[iI]f|list|for[eE]ach|switch|case|assign|global|local|include|import|function|macro|transform|visit|stop|return|call|setting|output[fF]ormat|nested|recurse|escape|ftl|items/,
243
+ // Directive names that can have an end tag
244
+ // E.g. </#if>
245
+ directiveEndCloseTag1: /if|list|items|sep|recover|attempt|for[eE]ach|local|global|assign|function|macro|output[fF]ormat|auto[eE]sc|no(?:autoe|AutoE)sc|compress|transform|switch|escape|no[eE]scape/,
246
+ // <#ESCAPED_CHAR :
247
+ // "\\"
248
+ // (
249
+ // ("n" | "t" | "r" | "f" | "b" | "g" | "l" | "a" | "\\" | "'" | "\"" | "{" | "=")
250
+ // |
251
+ // ("x" ["0"-"9", "A"-"F", "a"-"f"])
252
+ // )
253
+ // >
254
+ // Note: While the JavaCC tokenizer rule only specifies one hex digit,
255
+ // FreeMarker actually interprets up to 4 hex digits.
256
+ escapedChar: /\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,
257
+ // <#ASCII_DIGIT: ["0" - "9"]>
258
+ asciiDigit: /[0-9]/,
259
+ // <INTEGER : (["0"-"9"])+>
260
+ integer: /[0-9]+/,
261
+ // <#NON_ESCAPED_ID_START_CHAR:
262
+ // [
263
+ // // This was generated on JDK 1.8.0_20 Win64 with src/main/misc/identifierChars/IdentifierCharGenerator.java
264
+ // ...
265
+ // ]
266
+ nonEscapedIdStartChar: /[\$@-Z_a-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u1FFF\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183-\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3006\u3031-\u3035\u303B-\u303C\u3040-\u318F\u31A0-\u31BA\u31F0-\u31FF\u3300-\u337F\u3400-\u4DB5\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5-\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uABC0-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40-\uFB41\uFB43-\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]/,
267
+ // <#ESCAPED_ID_CHAR: "\\" ("-" | "." | ":" | "#")>
268
+ escapedIdChar: /\\[\-\.:#]/,
269
+ // <#ID_START_CHAR: <NON_ESCAPED_ID_START_CHAR>|<ESCAPED_ID_CHAR>>
270
+ idStartChar: /(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,
271
+ // <ID: <ID_START_CHAR> (<ID_START_CHAR>|<ASCII_DIGIT>)*>
272
+ id: /(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,
273
+ // Certain keywords / operators are allowed to index hashes
274
+ //
275
+ // Expression DotVariable(Expression exp) :
276
+ // {
277
+ // Token t;
278
+ // }
279
+ // {
280
+ // <DOT>
281
+ // (
282
+ // t = <ID> | t = <TIMES> | t = <DOUBLE_STAR>
283
+ // |
284
+ // (
285
+ // t = <LESS_THAN>
286
+ // |
287
+ // t = <LESS_THAN_EQUALS>
288
+ // |
289
+ // t = <ESCAPED_GT>
290
+ // |
291
+ // t = <ESCAPED_GTE>
292
+ // |
293
+ // t = <FALSE>
294
+ // |
295
+ // t = <TRUE>
296
+ // |
297
+ // t = <IN>
298
+ // |
299
+ // t = <AS>
300
+ // |
301
+ // t = <USING>
302
+ // )
303
+ // {
304
+ // if (!Character.isLetter(t.image.charAt(0))) {
305
+ // throw new ParseException(t.image + " is not a valid identifier.", template, t);
306
+ // }
307
+ // }
308
+ // )
309
+ // {
310
+ // notListLiteral(exp, "hash");
311
+ // notStringLiteral(exp, "hash");
312
+ // notBooleanLiteral(exp, "hash");
313
+ // Dot dot = new Dot(exp, t.image);
314
+ // dot.setLocation(template, exp, t);
315
+ // return dot;
316
+ // }
317
+ // }
318
+ specialHashKeys: /\*\*|\*|false|true|in|as|using/,
319
+ // <DOUBLE_EQUALS : "==">
320
+ // <EQUALS : "=">
321
+ // <NOT_EQUALS : "!=">
322
+ // <PLUS_EQUALS : "+=">
323
+ // <MINUS_EQUALS : "-=">
324
+ // <TIMES_EQUALS : "*=">
325
+ // <DIV_EQUALS : "/=">
326
+ // <MOD_EQUALS : "%=">
327
+ // <PLUS_PLUS : "++">
328
+ // <MINUS_MINUS : "--">
329
+ // <LESS_THAN_EQUALS : "lte" | "\\lte" | "<=" | "&lt;=">
330
+ // <LESS_THAN : "lt" | "\\lt" | "<" | "&lt;">
331
+ // <ESCAPED_GTE : "gte" | "\\gte" | "&gt;=">
332
+ // <ESCAPED_GT: "gt" | "\\gt" | "&gt;">
333
+ // <DOUBLE_STAR : "**">
334
+ // <PLUS : "+">
335
+ // <MINUS : "-">
336
+ // <TIMES : "*">
337
+ // <PERCENT : "%">
338
+ // <AND : "&" | "&&" | "&amp;&amp;" | "\\and" >
339
+ // <OR : "|" | "||">
340
+ // <EXCLAM : "!">
341
+ // <COMMA : ",">
342
+ // <SEMICOLON : ";">
343
+ // <COLON : ":">
344
+ // <ELLIPSIS : "...">
345
+ // <DOT_DOT_ASTERISK : "..*" >
346
+ // <DOT_DOT_LESS : "..<" | "..!" >
347
+ // <DOT_DOT : "..">
348
+ // <EXISTS : "??">
349
+ // <BUILT_IN : "?">
350
+ // <LAMBDA_ARROW : "->" | "-&gt;">
351
+ namedSymbols: /&lt;=|&gt;=|\\lte|\\lt|&lt;|\\gte|\\gt|&gt;|&amp;&amp;|\\and|-&gt;|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,
352
+ arrows: ["->", "-&gt;"],
353
+ delimiters: [";", ":", ",", "."],
354
+ stringOperators: ["lte", "lt", "gte", "gt"],
355
+ noParseTags: ["noparse", "noParse", "comment"],
356
+ tokenizer: {
357
+ // Parser states
358
+ // Plain text
359
+ [s("default__id__")]: [
360
+ { include: s("@directive_token__id__") },
361
+ { include: s("@interpolation_and_text_token__id__") }
362
+ ],
363
+ // A FreeMarker expression inside a directive, e.g. <#if 2<3>
364
+ [s("fmExpression__id__.directive")]: [
365
+ { include: s("@blank_and_expression_comment_token__id__") },
366
+ { include: s("@directive_end_token__id__") },
367
+ { include: s("@expression_token__id__") }
368
+ ],
369
+ // A FreeMarker expression inside an interpolation, e.g. ${2+3}
370
+ [s("fmExpression__id__.interpolation")]: [
371
+ { include: s("@blank_and_expression_comment_token__id__") },
372
+ { include: s("@expression_token__id__") },
373
+ { include: s("@greater_operators_token__id__") }
374
+ ],
375
+ // In an expression and inside a not-yet closed parenthesis / bracket
376
+ [s("inParen__id__.plain")]: [
377
+ { include: s("@blank_and_expression_comment_token__id__") },
378
+ { include: s("@directive_end_token__id__") },
379
+ { include: s("@expression_token__id__") }
380
+ ],
381
+ [s("inParen__id__.gt")]: [
382
+ { include: s("@blank_and_expression_comment_token__id__") },
383
+ { include: s("@expression_token__id__") },
384
+ { include: s("@greater_operators_token__id__") }
385
+ ],
386
+ // Expression for the unified call, e.g. <@createMacro() ... >
387
+ [s("noSpaceExpression__id__")]: [
388
+ { include: s("@no_space_expression_end_token__id__") },
389
+ { include: s("@directive_end_token__id__") },
390
+ { include: s("@expression_token__id__") }
391
+ ],
392
+ // For the function of a unified call. Special case for when the
393
+ // expression is a simple identifier.
394
+ // <@join [1,2] ",">
395
+ // <@null!join [1,2] ",">
396
+ [s("unifiedCall__id__")]: [{ include: s("@unified_call_token__id__") }],
397
+ // For singly and doubly quoted string (that may contain interpolations)
398
+ [s("singleString__id__")]: [{ include: s("@string_single_token__id__") }],
399
+ [s("doubleString__id__")]: [{ include: s("@string_double_token__id__") }],
400
+ // For singly and doubly quoted string (that may not contain interpolations)
401
+ [s("rawSingleString__id__")]: [{ include: s("@string_single_raw_token__id__") }],
402
+ [s("rawDoubleString__id__")]: [{ include: s("@string_double_raw_token__id__") }],
403
+ // For a comment in an expression
404
+ // ${ 1 + <#-- comment --> 2}
405
+ [s("expressionComment__id__")]: [{ include: s("@expression_comment_token__id__") }],
406
+ // For <#noparse> ... </#noparse>
407
+ // For <#noParse> ... </#noParse>
408
+ // For <#comment> ... </#comment>
409
+ [s("noParse__id__")]: [{ include: s("@no_parse_token__id__") }],
410
+ // For <#-- ... -->
411
+ [s("terseComment__id__")]: [{ include: s("@terse_comment_token__id__") }],
412
+ // Common rules
413
+ [s("directive_token__id__")]: [
414
+ // <ATTEMPT : <START_TAG> "attempt" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
415
+ // <RECOVER : <START_TAG> "recover" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
416
+ // <SEP : <START_TAG> "sep" <CLOSE_TAG1>>
417
+ // <AUTOESC : <START_TAG> "auto" ("e"|"E") "sc" <CLOSE_TAG1>> {
418
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 4), DEFAULT);
419
+ // }
420
+ // <NOAUTOESC : <START_TAG> "no" ("autoe"|"AutoE") "sc" <CLOSE_TAG1>> {
421
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 2), DEFAULT);
422
+ // }
423
+ // <COMPRESS : <START_TAG> "compress" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
424
+ // <DEFAUL : <START_TAG> "default" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
425
+ // <NOESCAPE : <START_TAG> "no" ("e" | "E") "scape" <CLOSE_TAG1>> {
426
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 2), DEFAULT);
427
+ // }
428
+ //
429
+ // <COMMENT : <START_TAG> "comment" <CLOSE_TAG1>> {
430
+ // handleTagSyntaxAndSwitch(matchedToken, NO_PARSE); noparseTag = "comment";
431
+ // }
432
+ // <NOPARSE: <START_TAG> "no" ("p" | "P") "arse" <CLOSE_TAG1>> {
433
+ // int tagNamingConvention = getTagNamingConvention(matchedToken, 2);
434
+ // handleTagSyntaxAndSwitch(matchedToken, tagNamingConvention, NO_PARSE);
435
+ // noparseTag = tagNamingConvention == Configuration.CAMEL_CASE_NAMING_CONVENTION ? "noParse" : "noparse";
436
+ // }
437
+ [
438
+ r(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),
439
+ ts.id === "auto" ? {
440
+ cases: {
441
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
442
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
443
+ }
444
+ } : [
445
+ { token: "@brackets.directive" },
446
+ { token: "delimiter.directive" },
447
+ {
448
+ cases: {
449
+ "@noParseTags": { token: "tag", next: s("@noParse__id__.$3") },
450
+ "@default": { token: "tag" }
451
+ }
452
+ },
453
+ { token: "delimiter.directive" },
454
+ { token: "@brackets.directive" }
455
+ ]
456
+ ],
457
+ // <ELSE : <START_TAG> "else" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
458
+ // <BREAK : <START_TAG> "break" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
459
+ // <CONTINUE : <START_TAG> "continue" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
460
+ // <SIMPLE_RETURN : <START_TAG> "return" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
461
+ // <HALT : <START_TAG> "stop" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
462
+ // <FLUSH : <START_TAG> "flush" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
463
+ // <TRIM : <START_TAG> "t" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
464
+ // <LTRIM : <START_TAG> "lt" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
465
+ // <RTRIM : <START_TAG> "rt" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
466
+ // <NOTRIM : <START_TAG> "nt" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
467
+ // <SIMPLE_NESTED : <START_TAG> "nested" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
468
+ // <SIMPLE_RECURSE : <START_TAG> "recurse" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
469
+ // <FALLBACK : <START_TAG> "fallback" <CLOSE_TAG2>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
470
+ // <TRIVIAL_FTL_HEADER : ("<#ftl" | "[#ftl") ("/")? (">" | "]")> { ftlHeader(matchedToken); }
471
+ [
472
+ r(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),
473
+ ts.id === "auto" ? {
474
+ cases: {
475
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
476
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
477
+ }
478
+ } : [
479
+ { token: "@brackets.directive" },
480
+ { token: "delimiter.directive" },
481
+ { token: "tag" },
482
+ { token: "delimiter.directive" },
483
+ { token: "@brackets.directive" }
484
+ ]
485
+ ],
486
+ // <IF : <START_TAG> "if" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
487
+ // <ELSE_IF : <START_TAG> "else" ("i" | "I") "f" <BLANK>> {
488
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 4), FM_EXPRESSION);
489
+ // }
490
+ // <LIST : <START_TAG> "list" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
491
+ // <FOREACH : <START_TAG> "for" ("e" | "E") "ach" <BLANK>> {
492
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 3), FM_EXPRESSION);
493
+ // }
494
+ // <SWITCH : <START_TAG> "switch" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
495
+ // <CASE : <START_TAG> "case" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
496
+ // <ASSIGN : <START_TAG> "assign" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
497
+ // <GLOBALASSIGN : <START_TAG> "global" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
498
+ // <LOCALASSIGN : <START_TAG> "local" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
499
+ // <_INCLUDE : <START_TAG> "include" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
500
+ // <IMPORT : <START_TAG> "import" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
501
+ // <FUNCTION : <START_TAG> "function" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
502
+ // <MACRO : <START_TAG> "macro" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
503
+ // <TRANSFORM : <START_TAG> "transform" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
504
+ // <VISIT : <START_TAG> "visit" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
505
+ // <STOP : <START_TAG> "stop" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
506
+ // <RETURN : <START_TAG> "return" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
507
+ // <CALL : <START_TAG> "call" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
508
+ // <SETTING : <START_TAG> "setting" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
509
+ // <OUTPUTFORMAT : <START_TAG> "output" ("f"|"F") "ormat" <BLANK>> {
510
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 6), FM_EXPRESSION);
511
+ // }
512
+ // <NESTED : <START_TAG> "nested" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
513
+ // <RECURSE : <START_TAG> "recurse" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
514
+ // <ESCAPE : <START_TAG> "escape" <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
515
+ //
516
+ // Note: FreeMarker grammar appears to treat the FTL header as a special case,
517
+ // in order to remove new lines after the header (?), but since we only need
518
+ // to tokenize for highlighting, we can include this directive here.
519
+ // <FTL_HEADER : ("<#ftl" | "[#ftl") <BLANK>> { ftlHeader(matchedToken); }
520
+ //
521
+ // Note: FreeMarker grammar appears to treat the items directive as a special case for
522
+ // the AST parsing process, but since we only need to tokenize, we can include this
523
+ // directive here.
524
+ // <ITEMS : <START_TAG> "items" (<BLANK>)+ <AS> <BLANK>> { handleTagSyntaxAndSwitch(matchedToken, FM_EXPRESSION); }
525
+ [
526
+ r(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),
527
+ ts.id === "auto" ? {
528
+ cases: {
529
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
530
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
531
+ }
532
+ } : [
533
+ { token: "@brackets.directive" },
534
+ { token: "delimiter.directive" },
535
+ { token: "tag" },
536
+ { token: "", next: s("@fmExpression__id__.directive") }
537
+ ]
538
+ ],
539
+ // <END_IF : <END_TAG> "if" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
540
+ // <END_LIST : <END_TAG> "list" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
541
+ // <END_SEP : <END_TAG> "sep" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
542
+ // <END_RECOVER : <END_TAG> "recover" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
543
+ // <END_ATTEMPT : <END_TAG> "attempt" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
544
+ // <END_FOREACH : <END_TAG> "for" ("e" | "E") "ach" <CLOSE_TAG1>> {
545
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 3), DEFAULT);
546
+ // }
547
+ // <END_LOCAL : <END_TAG> "local" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
548
+ // <END_GLOBAL : <END_TAG> "global" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
549
+ // <END_ASSIGN : <END_TAG> "assign" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
550
+ // <END_FUNCTION : <END_TAG> "function" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
551
+ // <END_MACRO : <END_TAG> "macro" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
552
+ // <END_OUTPUTFORMAT : <END_TAG> "output" ("f" | "F") "ormat" <CLOSE_TAG1>> {
553
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 6), DEFAULT);
554
+ // }
555
+ // <END_AUTOESC : <END_TAG> "auto" ("e" | "E") "sc" <CLOSE_TAG1>> {
556
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 4), DEFAULT);
557
+ // }
558
+ // <END_NOAUTOESC : <END_TAG> "no" ("autoe"|"AutoE") "sc" <CLOSE_TAG1>> {
559
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 2), DEFAULT);
560
+ // }
561
+ // <END_COMPRESS : <END_TAG> "compress" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
562
+ // <END_TRANSFORM : <END_TAG> "transform" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
563
+ // <END_SWITCH : <END_TAG> "switch" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
564
+ // <END_ESCAPE : <END_TAG> "escape" <CLOSE_TAG1>> { handleTagSyntaxAndSwitch(matchedToken, DEFAULT); }
565
+ // <END_NOESCAPE : <END_TAG> "no" ("e" | "E") "scape" <CLOSE_TAG1>> {
566
+ // handleTagSyntaxAndSwitch(matchedToken, getTagNamingConvention(matchedToken, 2), DEFAULT);
567
+ // }
568
+ [
569
+ r(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),
570
+ ts.id === "auto" ? {
571
+ cases: {
572
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
573
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
574
+ }
575
+ } : [
576
+ { token: "@brackets.directive" },
577
+ { token: "delimiter.directive" },
578
+ { token: "tag" },
579
+ { token: "delimiter.directive" },
580
+ { token: "@brackets.directive" }
581
+ ]
582
+ ],
583
+ // <UNIFIED_CALL : "<@" | "[@" > { unifiedCall(matchedToken); }
584
+ [
585
+ r(/(@open__id__)(@)/),
586
+ ts.id === "auto" ? {
587
+ cases: {
588
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
589
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
590
+ }
591
+ } : [
592
+ { token: "@brackets.directive" },
593
+ { token: "delimiter.directive", next: s("@unifiedCall__id__") }
594
+ ]
595
+ ],
596
+ // <UNIFIED_CALL_END : ("<" | "[") "/@" ((<ID>) ("."<ID>)*)? <CLOSE_TAG1>> { unifiedCallEnd(matchedToken); }
597
+ [
598
+ r(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),
599
+ [
600
+ { token: "@brackets.directive" },
601
+ { token: "delimiter.directive" },
602
+ { token: "tag" },
603
+ { token: "delimiter.directive" },
604
+ { token: "@brackets.directive" }
605
+ ]
606
+ ],
607
+ // <TERSE_COMMENT : ("<" | "[") "#--" > { noparseTag = "-->"; handleTagSyntaxAndSwitch(matchedToken, NO_PARSE); }
608
+ [
609
+ r(/(@open__id__)#--/),
610
+ ts.id === "auto" ? {
611
+ cases: {
612
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
613
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
614
+ }
615
+ } : { token: "comment", next: s("@terseComment__id__") }
616
+ ],
617
+ // <UNKNOWN_DIRECTIVE : ("[#" | "[/#" | "<#" | "</#") (["a"-"z", "A"-"Z", "_"])+>
618
+ [
619
+ r(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),
620
+ ts.id === "auto" ? {
621
+ cases: {
622
+ "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
623
+ "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
624
+ }
625
+ } : [
626
+ { token: "@brackets.directive" },
627
+ { token: "delimiter.directive" },
628
+ { token: "tag.invalid", next: s("@fmExpression__id__.directive") }
629
+ ]
630
+ ]
631
+ ],
632
+ // <DEFAULT, NO_DIRECTIVE> TOKEN :
633
+ [s("interpolation_and_text_token__id__")]: [
634
+ // <DOLLAR_INTERPOLATION_OPENING : "${"> { startInterpolation(matchedToken); }
635
+ // <SQUARE_BRACKET_INTERPOLATION_OPENING : "[="> { startInterpolation(matchedToken); }
636
+ [
637
+ r(/(@iOpen1__id__)(@iOpen2__id__)/),
638
+ [
639
+ { token: is.id === "bracket" ? "@brackets.interpolation" : "delimiter.interpolation" },
640
+ {
641
+ token: is.id === "bracket" ? "delimiter.interpolation" : "@brackets.interpolation",
642
+ next: s("@fmExpression__id__.interpolation")
643
+ }
644
+ ]
645
+ ],
646
+ // <STATIC_TEXT_FALSE_ALARM : "$" | "#" | "<" | "[" | "{"> // to handle a lone dollar sign or "<" or "# or <@ with whitespace after"
647
+ // <STATIC_TEXT_WS : ("\n" | "\r" | "\t" | " ")+>
648
+ // <STATIC_TEXT_NON_WS : (~["$", "<", "#", "[", "{", "\n", "\r", "\t", " "])+>
649
+ [/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/, { token: "source" }]
650
+ ],
651
+ // <STRING_LITERAL :
652
+ // (
653
+ // "\""
654
+ // ((~["\"", "\\"]) | <ESCAPED_CHAR>)*
655
+ // "\""
656
+ // )
657
+ // |
658
+ // (
659
+ // "'"
660
+ // ((~["'", "\\"]) | <ESCAPED_CHAR>)*
661
+ // "'"
662
+ // )
663
+ // >
664
+ [s("string_single_token__id__")]: [
665
+ [/[^'\\]/, { token: "string" }],
666
+ [/@escapedChar/, { token: "string.escape" }],
667
+ [/'/, { token: "string", next: "@pop" }]
668
+ ],
669
+ [s("string_double_token__id__")]: [
670
+ [/[^"\\]/, { token: "string" }],
671
+ [/@escapedChar/, { token: "string.escape" }],
672
+ [/"/, { token: "string", next: "@pop" }]
673
+ ],
674
+ // <RAW_STRING : "r" (("\"" (~["\""])* "\"") | ("'" (~["'"])* "'"))>
675
+ [s("string_single_raw_token__id__")]: [
676
+ [/[^']+/, { token: "string.raw" }],
677
+ [/'/, { token: "string.raw", next: "@pop" }]
678
+ ],
679
+ [s("string_double_raw_token__id__")]: [
680
+ [/[^"]+/, { token: "string.raw" }],
681
+ [/"/, { token: "string.raw", next: "@pop" }]
682
+ ],
683
+ // <FM_EXPRESSION, IN_PAREN, NO_SPACE_EXPRESSION, NAMED_PARAMETER_EXPRESSION> TOKEN :
684
+ [s("expression_token__id__")]: [
685
+ // Strings
686
+ [
687
+ /(r?)(['"])/,
688
+ {
689
+ cases: {
690
+ "r'": [
691
+ { token: "keyword" },
692
+ { token: "string.raw", next: s("@rawSingleString__id__") }
693
+ ],
694
+ 'r"': [
695
+ { token: "keyword" },
696
+ { token: "string.raw", next: s("@rawDoubleString__id__") }
697
+ ],
698
+ "'": [{ token: "source" }, { token: "string", next: s("@singleString__id__") }],
699
+ '"': [{ token: "source" }, { token: "string", next: s("@doubleString__id__") }]
700
+ }
701
+ }
702
+ ],
703
+ // Numbers
704
+ // <INTEGER : (["0"-"9"])+>
705
+ // <DECIMAL : <INTEGER> "." <INTEGER>>
706
+ [
707
+ /(?:@integer)(?:\.(?:@integer))?/,
708
+ {
709
+ cases: {
710
+ "(?:@integer)": { token: "number" },
711
+ "@default": { token: "number.float" }
712
+ }
713
+ }
714
+ ],
715
+ // Special hash keys that must not be treated as identifiers
716
+ // after a period, e.g. a.** is accessing the key "**" of a
717
+ [
718
+ /(\.)(@blank*)(@specialHashKeys)/,
719
+ [{ token: "delimiter" }, { token: "" }, { token: "identifier" }]
720
+ ],
721
+ // Symbols / operators
722
+ [
723
+ /(?:@namedSymbols)/,
724
+ {
725
+ cases: {
726
+ "@arrows": { token: "meta.arrow" },
727
+ "@delimiters": { token: "delimiter" },
728
+ "@default": { token: "operators" }
729
+ }
730
+ }
731
+ ],
732
+ // Identifiers
733
+ [
734
+ /@id/,
735
+ {
736
+ cases: {
737
+ "@keywords": { token: "keyword.$0" },
738
+ "@stringOperators": { token: "operators" },
739
+ "@default": { token: "identifier" }
740
+ }
741
+ }
742
+ ],
743
+ // <OPEN_BRACKET : "[">
744
+ // <CLOSE_BRACKET : "]">
745
+ // <OPEN_PAREN : "(">
746
+ // <CLOSE_PAREN : ")">
747
+ // <OPENING_CURLY_BRACKET : "{">
748
+ // <CLOSING_CURLY_BRACKET : "}">
749
+ [
750
+ /[\[\]\(\)\{\}]/,
751
+ {
752
+ cases: {
753
+ "\\[": {
754
+ cases: {
755
+ "$S2==gt": { token: "@brackets", next: s("@inParen__id__.gt") },
756
+ "@default": { token: "@brackets", next: s("@inParen__id__.plain") }
757
+ }
758
+ },
759
+ "\\]": {
760
+ cases: {
761
+ ...is.id === "bracket" ? {
762
+ "$S2==interpolation": { token: "@brackets.interpolation", next: "@popall" }
763
+ } : {},
764
+ // This cannot happen while in auto mode, since this applies only to an
765
+ // fmExpression inside a directive. But once we encounter the start of a
766
+ // directive, we can establish the tag syntax mode.
767
+ ...ts.id === "bracket" ? {
768
+ "$S2==directive": { token: "@brackets.directive", next: "@popall" }
769
+ } : {},
770
+ // Ignore mismatched paren
771
+ [s("$S1==inParen__id__")]: { token: "@brackets", next: "@pop" },
772
+ "@default": { token: "@brackets" }
773
+ }
774
+ },
775
+ "\\(": { token: "@brackets", next: s("@inParen__id__.gt") },
776
+ "\\)": {
777
+ cases: {
778
+ [s("$S1==inParen__id__")]: { token: "@brackets", next: "@pop" },
779
+ "@default": { token: "@brackets" }
780
+ }
781
+ },
782
+ "\\{": {
783
+ cases: {
784
+ "$S2==gt": { token: "@brackets", next: s("@inParen__id__.gt") },
785
+ "@default": { token: "@brackets", next: s("@inParen__id__.plain") }
786
+ }
787
+ },
788
+ "\\}": {
789
+ cases: {
790
+ ...is.id === "bracket" ? {} : {
791
+ "$S2==interpolation": { token: "@brackets.interpolation", next: "@popall" }
792
+ },
793
+ // Ignore mismatched paren
794
+ [s("$S1==inParen__id__")]: { token: "@brackets", next: "@pop" },
795
+ "@default": { token: "@brackets" }
796
+ }
797
+ }
798
+ }
799
+ }
800
+ ],
801
+ // <OPEN_MISPLACED_INTERPOLATION : "${" | "#{" | "[=">
802
+ [/\$\{/, { token: "delimiter.invalid" }]
803
+ ],
804
+ // <FM_EXPRESSION, IN_PAREN, NAMED_PARAMETER_EXPRESSION> SKIP :
805
+ [s("blank_and_expression_comment_token__id__")]: [
806
+ // < ( " " | "\t" | "\n" | "\r" )+ >
807
+ [/(?:@blank)+/, { token: "" }],
808
+ // < ("<" | "[") ("#" | "!") "--"> : EXPRESSION_COMMENT
809
+ [/[<\[][#!]--/, { token: "comment", next: s("@expressionComment__id__") }]
810
+ ],
811
+ // <FM_EXPRESSION, NO_SPACE_EXPRESSION, NAMED_PARAMETER_EXPRESSION> TOKEN :
812
+ [s("directive_end_token__id__")]: [
813
+ // <DIRECTIVE_END : ">">
814
+ // {
815
+ // if (inFTLHeader) {
816
+ // eatNewline();
817
+ // inFTLHeader = false;
818
+ // }
819
+ // if (squBracTagSyntax || postInterpolationLexState != -1 /* We are in an interpolation */) {
820
+ // matchedToken.kind = NATURAL_GT;
821
+ // } else {
822
+ // SwitchTo(DEFAULT);
823
+ // }
824
+ // }
825
+ // This cannot happen while in auto mode, since this applies only to an
826
+ // fmExpression inside a directive. But once we encounter the start of a
827
+ // directive, we can establish the tag syntax mode.
828
+ [
829
+ />/,
830
+ ts.id === "bracket" ? { token: "operators" } : { token: "@brackets.directive", next: "@popall" }
831
+ ],
832
+ // <EMPTY_DIRECTIVE_END : "/>" | "/]">
833
+ // It is a syntax error to end a tag with the wrong close token
834
+ // Let's indicate that to the user by not closing the tag
835
+ [
836
+ r(/(\/)(@close__id__)/),
837
+ [{ token: "delimiter.directive" }, { token: "@brackets.directive", next: "@popall" }]
838
+ ]
839
+ ],
840
+ // <IN_PAREN> TOKEN :
841
+ [s("greater_operators_token__id__")]: [
842
+ // <NATURAL_GT : ">">
843
+ [/>/, { token: "operators" }],
844
+ // <NATURAL_GTE : ">=">
845
+ [/>=/, { token: "operators" }]
846
+ ],
847
+ // <NO_SPACE_EXPRESSION> TOKEN :
848
+ [s("no_space_expression_end_token__id__")]: [
849
+ // <TERMINATING_WHITESPACE : (["\n", "\r", "\t", " "])+> : FM_EXPRESSION
850
+ [/(?:@blank)+/, { token: "", switchTo: s("@fmExpression__id__.directive") }]
851
+ ],
852
+ [s("unified_call_token__id__")]: [
853
+ // Special case for a call where the expression is just an ID
854
+ // <UNIFIED_CALL> <ID> <BLANK>+
855
+ [
856
+ /(@id)((?:@blank)+)/,
857
+ [{ token: "tag" }, { token: "", next: s("@fmExpression__id__.directive") }]
858
+ ],
859
+ [
860
+ r(/(@id)(\/?)(@close__id__)/),
861
+ [
862
+ { token: "tag" },
863
+ { token: "delimiter.directive" },
864
+ { token: "@brackets.directive", next: "@popall" }
865
+ ]
866
+ ],
867
+ [/./, { token: "@rematch", next: s("@noSpaceExpression__id__") }]
868
+ ],
869
+ // <NO_PARSE> TOKEN :
870
+ [s("no_parse_token__id__")]: [
871
+ // <MAYBE_END :
872
+ // ("<" | "[")
873
+ // "/"
874
+ // ("#")?
875
+ // (["a"-"z", "A"-"Z"])+
876
+ // ( " " | "\t" | "\n" | "\r" )*
877
+ // (">" | "]")
878
+ // >
879
+ [
880
+ r(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),
881
+ {
882
+ cases: {
883
+ "$S2==$3": [
884
+ { token: "@brackets.directive" },
885
+ { token: "delimiter.directive" },
886
+ { token: "tag" },
887
+ { token: "" },
888
+ { token: "@brackets.directive", next: "@popall" }
889
+ ],
890
+ "$S2==comment": [
891
+ { token: "comment" },
892
+ { token: "comment" },
893
+ { token: "comment" },
894
+ { token: "comment" },
895
+ { token: "comment" }
896
+ ],
897
+ "@default": [
898
+ { token: "source" },
899
+ { token: "source" },
900
+ { token: "source" },
901
+ { token: "source" },
902
+ { token: "source" }
903
+ ]
904
+ }
905
+ }
906
+ ],
907
+ // <KEEP_GOING : (~["<", "[", "-"])+>
908
+ // <LONE_LESS_THAN_OR_DASH : ["<", "[", "-"]>
909
+ [
910
+ /[^<\[\-]+|[<\[\-]/,
911
+ {
912
+ cases: {
913
+ "$S2==comment": { token: "comment" },
914
+ "@default": { token: "source" }
915
+ }
916
+ }
917
+ ]
918
+ ],
919
+ // <EXPRESSION_COMMENT> SKIP:
920
+ [s("expression_comment_token__id__")]: [
921
+ // < "-->" | "--]">
922
+ [
923
+ /--[>\]]/,
924
+ {
925
+ token: "comment",
926
+ next: "@pop"
927
+ }
928
+ ],
929
+ // < (~["-", ">", "]"])+ >
930
+ // < ">">
931
+ // < "]">
932
+ // < "-">
933
+ [/[^\->\]]+|[>\]\-]/, { token: "comment" }]
934
+ ],
935
+ [s("terse_comment_token__id__")]: [
936
+ // <TERSE_COMMENT_END : "-->" | "--]">
937
+ [r(/--(?:@close__id__)/), { token: "comment", next: "@popall" }],
938
+ // <KEEP_GOING : (~["<", "[", "-"])+>
939
+ // <LONE_LESS_THAN_OR_DASH : ["<", "[", "-"]>
940
+ [/[^<\[\-]+|[<\[\-]/, { token: "comment" }]
941
+ ]
942
+ }
943
+ };
944
+ }
945
+ __name(createMonarchLanguage, "createMonarchLanguage");
946
+ function createMonarchLanguageAuto(is) {
947
+ const angle = createMonarchLanguage(TagSyntaxAngle, is), bracket = createMonarchLanguage(TagSyntaxBracket, is), auto = createMonarchLanguage(TagSyntaxAuto, is);
948
+ return {
949
+ // Angle and bracket syntax mode
950
+ // We switch to one of these once we have determined the mode
951
+ ...angle,
952
+ ...bracket,
953
+ ...auto,
954
+ // Settings
955
+ unicode: !0,
956
+ includeLF: !1,
957
+ start: `default_auto_${is.id}`,
958
+ ignoreCase: !1,
959
+ defaultToken: "invalid",
960
+ tokenPostfix: ".freemarker2",
961
+ brackets: [
962
+ { open: "{", close: "}", token: "delimiter.curly" },
963
+ { open: "[", close: "]", token: "delimiter.square" },
964
+ { open: "(", close: ")", token: "delimiter.parenthesis" },
965
+ { open: "<", close: ">", token: "delimiter.angle" }
966
+ ],
967
+ tokenizer: {
968
+ ...angle.tokenizer,
969
+ ...bracket.tokenizer,
970
+ ...auto.tokenizer
971
+ }
972
+ };
973
+ }
974
+ __name(createMonarchLanguageAuto, "createMonarchLanguageAuto");
975
+ var TagAngleInterpolationDollar = {
976
+ conf: createLangConfiguration(TagSyntaxAngle),
977
+ language: createMonarchLanguage(TagSyntaxAngle, InterpolationSyntaxDollar)
978
+ }, TagBracketInterpolationDollar = {
979
+ conf: createLangConfiguration(TagSyntaxBracket),
980
+ language: createMonarchLanguage(TagSyntaxBracket, InterpolationSyntaxDollar)
981
+ }, TagAngleInterpolationBracket = {
982
+ conf: createLangConfiguration(TagSyntaxAngle),
983
+ language: createMonarchLanguage(TagSyntaxAngle, InterpolationSyntaxBracket)
984
+ }, TagBracketInterpolationBracket = {
985
+ conf: createLangConfiguration(TagSyntaxBracket),
986
+ language: createMonarchLanguage(TagSyntaxBracket, InterpolationSyntaxBracket)
987
+ }, TagAutoInterpolationDollar = {
988
+ conf: createLangConfigurationAuto(),
989
+ language: createMonarchLanguageAuto(InterpolationSyntaxDollar)
990
+ }, TagAutoInterpolationBracket = {
991
+ conf: createLangConfigurationAuto(),
992
+ language: createMonarchLanguageAuto(InterpolationSyntaxBracket)
993
+ };
994
+ export {
995
+ TagAngleInterpolationBracket,
996
+ TagAngleInterpolationDollar,
997
+ TagAutoInterpolationBracket,
998
+ TagAutoInterpolationDollar,
999
+ TagBracketInterpolationBracket,
1000
+ TagBracketInterpolationDollar
1001
+ };