2201df48e8b2ad513c3811d42e5a8f7070501cbd4f8563b18b24da969d09943b2e7c61828d7892ddf9417144691022ed1e8a55e9aa071d2c455a69838476a2 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669
  1. /*!-----------------------------------------------------------------------------
  2. * Copyright (c) Microsoft Corporation. All rights reserved.
  3. * Version: 0.34.1(547870b6881302c5b4ff32173c16d06009e3588f)
  4. * Released under the MIT license
  5. * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
  6. *-----------------------------------------------------------------------------*/
  7. var __defProp = Object.defineProperty;
  8. var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
  9. var __getOwnPropNames = Object.getOwnPropertyNames;
  10. var __hasOwnProp = Object.prototype.hasOwnProperty;
  11. var __copyProps = (to, from, except, desc) => {
  12. if (from && typeof from === "object" || typeof from === "function") {
  13. for (let key of __getOwnPropNames(from))
  14. if (!__hasOwnProp.call(to, key) && key !== except)
  15. __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  16. }
  17. return to;
  18. };
  19. var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
  20. // src/fillers/monaco-editor-core.ts
  21. var monaco_editor_core_exports = {};
  22. __reExport(monaco_editor_core_exports, monaco_editor_core_star);
  23. import * as monaco_editor_core_star from "../../editor/editor.api.js";
  24. // src/basic-languages/freemarker2/freemarker2.ts
  25. var EMPTY_ELEMENTS = [
  26. "assign",
  27. "flush",
  28. "ftl",
  29. "return",
  30. "global",
  31. "import",
  32. "include",
  33. "break",
  34. "continue",
  35. "local",
  36. "nested",
  37. "nt",
  38. "setting",
  39. "stop",
  40. "t",
  41. "lt",
  42. "rt",
  43. "fallback"
  44. ];
  45. var BLOCK_ELEMENTS = [
  46. "attempt",
  47. "autoesc",
  48. "autoEsc",
  49. "compress",
  50. "comment",
  51. "escape",
  52. "noescape",
  53. "function",
  54. "if",
  55. "list",
  56. "items",
  57. "sep",
  58. "macro",
  59. "noparse",
  60. "noParse",
  61. "noautoesc",
  62. "noAutoEsc",
  63. "outputformat",
  64. "switch",
  65. "visit",
  66. "recurse"
  67. ];
  68. var TagSyntaxAngle = {
  69. close: ">",
  70. id: "angle",
  71. open: "<"
  72. };
  73. var TagSyntaxBracket = {
  74. close: "\\]",
  75. id: "bracket",
  76. open: "\\["
  77. };
  78. var TagSyntaxAuto = {
  79. close: "[>\\]]",
  80. id: "auto",
  81. open: "[<\\[]"
  82. };
  83. var InterpolationSyntaxDollar = {
  84. close: "\\}",
  85. id: "dollar",
  86. open1: "\\$",
  87. open2: "\\{"
  88. };
  89. var InterpolationSyntaxBracket = {
  90. close: "\\]",
  91. id: "bracket",
  92. open1: "\\[",
  93. open2: "="
  94. };
  95. function createLangConfiguration(ts) {
  96. return {
  97. brackets: [
  98. ["<", ">"],
  99. ["[", "]"],
  100. ["(", ")"],
  101. ["{", "}"]
  102. ],
  103. comments: {
  104. blockComment: [`${ts.open}--`, `--${ts.close}`]
  105. },
  106. autoCloseBefore: "\n\r }]),.:;=",
  107. autoClosingPairs: [
  108. { open: "{", close: "}" },
  109. { open: "[", close: "]" },
  110. { open: "(", close: ")" },
  111. { open: '"', close: '"', notIn: ["string"] },
  112. { open: "'", close: "'", notIn: ["string"] }
  113. ],
  114. surroundingPairs: [
  115. { open: '"', close: '"' },
  116. { open: "'", close: "'" },
  117. { open: "{", close: "}" },
  118. { open: "[", close: "]" },
  119. { open: "(", close: ")" },
  120. { open: "<", close: ">" }
  121. ],
  122. folding: {
  123. markers: {
  124. start: new RegExp(`${ts.open}#(?:${BLOCK_ELEMENTS.join("|")})([^/${ts.close}]*(?!/)${ts.close})[^${ts.open}]*$`),
  125. end: new RegExp(`${ts.open}/#(?:${BLOCK_ELEMENTS.join("|")})[\\r\\n\\t ]*>`)
  126. }
  127. },
  128. onEnterRules: [
  129. {
  130. beforeText: new RegExp(`${ts.open}#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/${ts.close}]*(?!/)${ts.close})[^${ts.open}]*$`),
  131. afterText: new RegExp(`^${ts.open}/#([a-zA-Z_]+)[\\r\\n\\t ]*${ts.close}$`),
  132. action: {
  133. indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent
  134. }
  135. },
  136. {
  137. beforeText: new RegExp(`${ts.open}#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/${ts.close}]*(?!/)${ts.close})[^${ts.open}]*$`),
  138. action: { indentAction: monaco_editor_core_exports.languages.IndentAction.Indent }
  139. }
  140. ]
  141. };
  142. }
  143. function createLangConfigurationAuto() {
  144. return {
  145. brackets: [
  146. ["<", ">"],
  147. ["[", "]"],
  148. ["(", ")"],
  149. ["{", "}"]
  150. ],
  151. autoCloseBefore: "\n\r }]),.:;=",
  152. autoClosingPairs: [
  153. { open: "{", close: "}" },
  154. { open: "[", close: "]" },
  155. { open: "(", close: ")" },
  156. { open: '"', close: '"', notIn: ["string"] },
  157. { open: "'", close: "'", notIn: ["string"] }
  158. ],
  159. surroundingPairs: [
  160. { open: '"', close: '"' },
  161. { open: "'", close: "'" },
  162. { open: "{", close: "}" },
  163. { open: "[", close: "]" },
  164. { open: "(", close: ")" },
  165. { open: "<", close: ">" }
  166. ],
  167. folding: {
  168. markers: {
  169. start: new RegExp(`[<\\[]#(?:${BLOCK_ELEMENTS.join("|")})([^/>\\]]*(?!/)[>\\]])[^<\\[]*$`),
  170. end: new RegExp(`[<\\[]/#(?:${BLOCK_ELEMENTS.join("|")})[\\r\\n\\t ]*>`)
  171. }
  172. },
  173. onEnterRules: [
  174. {
  175. beforeText: new RegExp(`[<\\[]#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),
  176. afterText: new RegExp(`^[<\\[]/#([a-zA-Z_]+)[\\r\\n\\t ]*[>\\]]$`),
  177. action: {
  178. indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent
  179. }
  180. },
  181. {
  182. beforeText: new RegExp(`[<\\[]#(?!(?:${EMPTY_ELEMENTS.join("|")}))([a-zA-Z_]+)([^/>\\]]*(?!/)[>\\]])[^[<\\[]]*$`),
  183. action: { indentAction: monaco_editor_core_exports.languages.IndentAction.Indent }
  184. }
  185. ]
  186. };
  187. }
  188. function createMonarchLanguage(ts, is) {
  189. const id = `_${ts.id}_${is.id}`;
  190. const s = (name) => name.replace(/__id__/g, id);
  191. const r = (regexp) => {
  192. const source = regexp.source.replace(/__id__/g, id);
  193. return new RegExp(source, regexp.flags);
  194. };
  195. return {
  196. unicode: true,
  197. includeLF: false,
  198. start: s("default__id__"),
  199. ignoreCase: false,
  200. defaultToken: "invalid",
  201. tokenPostfix: `.freemarker2`,
  202. brackets: [
  203. { open: "{", close: "}", token: "delimiter.curly" },
  204. { open: "[", close: "]", token: "delimiter.square" },
  205. { open: "(", close: ")", token: "delimiter.parenthesis" },
  206. { open: "<", close: ">", token: "delimiter.angle" }
  207. ],
  208. [s("open__id__")]: new RegExp(ts.open),
  209. [s("close__id__")]: new RegExp(ts.close),
  210. [s("iOpen1__id__")]: new RegExp(is.open1),
  211. [s("iOpen2__id__")]: new RegExp(is.open2),
  212. [s("iClose__id__")]: new RegExp(is.close),
  213. [s("startTag__id__")]: r(/(@open__id__)(#)/),
  214. [s("endTag__id__")]: r(/(@open__id__)(\/#)/),
  215. [s("startOrEndTag__id__")]: r(/(@open__id__)(\/?#)/),
  216. [s("closeTag1__id__")]: r(/((?:@blank)*)(@close__id__)/),
  217. [s("closeTag2__id__")]: r(/((?:@blank)*\/?)(@close__id__)/),
  218. blank: /[ \t\n\r]/,
  219. keywords: ["false", "true", "in", "as", "using"],
  220. directiveStartCloseTag1: /attempt|recover|sep|auto[eE]sc|no(?:autoe|AutoE)sc|compress|default|no[eE]scape|comment|no[pP]arse/,
  221. directiveStartCloseTag2: /else|break|continue|return|stop|flush|t|lt|rt|nt|nested|recurse|fallback|ftl/,
  222. 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/,
  223. 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/,
  224. escapedChar: /\\(?:[ntrfbgla\\'"\{=]|(?:x[0-9A-Fa-f]{1,4}))/,
  225. asciiDigit: /[0-9]/,
  226. integer: /[0-9]+/,
  227. 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]/,
  228. escapedIdChar: /\\[\-\.:#]/,
  229. idStartChar: /(?:@nonEscapedIdStartChar)|(?:@escapedIdChar)/,
  230. id: /(?:@idStartChar)(?:(?:@idStartChar)|(?:@asciiDigit))*/,
  231. specialHashKeys: /\*\*|\*|false|true|in|as|using/,
  232. namedSymbols: /&lt;=|&gt;=|\\lte|\\lt|&lt;|\\gte|\\gt|&gt;|&amp;&amp;|\\and|-&gt;|->|==|!=|\+=|-=|\*=|\/=|%=|\+\+|--|<=|&&|\|\||:|\.\.\.|\.\.\*|\.\.<|\.\.!|\?\?|=|<|\+|-|\*|\/|%|\||\.\.|\?|!|&|\.|,|;/,
  233. arrows: ["->", "-&gt;"],
  234. delimiters: [";", ":", ",", "."],
  235. stringOperators: ["lte", "lt", "gte", "gt"],
  236. noParseTags: ["noparse", "noParse", "comment"],
  237. tokenizer: {
  238. [s("default__id__")]: [
  239. { include: s("@directive_token__id__") },
  240. { include: s("@interpolation_and_text_token__id__") }
  241. ],
  242. [s("fmExpression__id__.directive")]: [
  243. { include: s("@blank_and_expression_comment_token__id__") },
  244. { include: s("@directive_end_token__id__") },
  245. { include: s("@expression_token__id__") }
  246. ],
  247. [s("fmExpression__id__.interpolation")]: [
  248. { include: s("@blank_and_expression_comment_token__id__") },
  249. { include: s("@expression_token__id__") },
  250. { include: s("@greater_operators_token__id__") }
  251. ],
  252. [s("inParen__id__.plain")]: [
  253. { include: s("@blank_and_expression_comment_token__id__") },
  254. { include: s("@directive_end_token__id__") },
  255. { include: s("@expression_token__id__") }
  256. ],
  257. [s("inParen__id__.gt")]: [
  258. { include: s("@blank_and_expression_comment_token__id__") },
  259. { include: s("@expression_token__id__") },
  260. { include: s("@greater_operators_token__id__") }
  261. ],
  262. [s("noSpaceExpression__id__")]: [
  263. { include: s("@no_space_expression_end_token__id__") },
  264. { include: s("@directive_end_token__id__") },
  265. { include: s("@expression_token__id__") }
  266. ],
  267. [s("unifiedCall__id__")]: [{ include: s("@unified_call_token__id__") }],
  268. [s("singleString__id__")]: [{ include: s("@string_single_token__id__") }],
  269. [s("doubleString__id__")]: [{ include: s("@string_double_token__id__") }],
  270. [s("rawSingleString__id__")]: [{ include: s("@string_single_raw_token__id__") }],
  271. [s("rawDoubleString__id__")]: [{ include: s("@string_double_raw_token__id__") }],
  272. [s("expressionComment__id__")]: [{ include: s("@expression_comment_token__id__") }],
  273. [s("noParse__id__")]: [{ include: s("@no_parse_token__id__") }],
  274. [s("terseComment__id__")]: [{ include: s("@terse_comment_token__id__") }],
  275. [s("directive_token__id__")]: [
  276. [
  277. r(/(?:@startTag__id__)(@directiveStartCloseTag1)(?:@closeTag1__id__)/),
  278. ts.id === "auto" ? {
  279. cases: {
  280. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  281. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  282. }
  283. } : [
  284. { token: "@brackets.directive" },
  285. { token: "delimiter.directive" },
  286. {
  287. cases: {
  288. "@noParseTags": { token: "tag", next: s("@noParse__id__.$3") },
  289. "@default": { token: "tag" }
  290. }
  291. },
  292. { token: "delimiter.directive" },
  293. { token: "@brackets.directive" }
  294. ]
  295. ],
  296. [
  297. r(/(?:@startTag__id__)(@directiveStartCloseTag2)(?:@closeTag2__id__)/),
  298. ts.id === "auto" ? {
  299. cases: {
  300. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  301. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  302. }
  303. } : [
  304. { token: "@brackets.directive" },
  305. { token: "delimiter.directive" },
  306. { token: "tag" },
  307. { token: "delimiter.directive" },
  308. { token: "@brackets.directive" }
  309. ]
  310. ],
  311. [
  312. r(/(?:@startTag__id__)(@directiveStartBlank)(@blank)/),
  313. ts.id === "auto" ? {
  314. cases: {
  315. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  316. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  317. }
  318. } : [
  319. { token: "@brackets.directive" },
  320. { token: "delimiter.directive" },
  321. { token: "tag" },
  322. { token: "", next: s("@fmExpression__id__.directive") }
  323. ]
  324. ],
  325. [
  326. r(/(?:@endTag__id__)(@directiveEndCloseTag1)(?:@closeTag1__id__)/),
  327. ts.id === "auto" ? {
  328. cases: {
  329. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  330. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  331. }
  332. } : [
  333. { token: "@brackets.directive" },
  334. { token: "delimiter.directive" },
  335. { token: "tag" },
  336. { token: "delimiter.directive" },
  337. { token: "@brackets.directive" }
  338. ]
  339. ],
  340. [
  341. r(/(@open__id__)(@)/),
  342. ts.id === "auto" ? {
  343. cases: {
  344. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  345. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  346. }
  347. } : [
  348. { token: "@brackets.directive" },
  349. { token: "delimiter.directive", next: s("@unifiedCall__id__") }
  350. ]
  351. ],
  352. [
  353. r(/(@open__id__)(\/@)((?:(?:@id)(?:\.(?:@id))*)?)(?:@closeTag1__id__)/),
  354. [
  355. { token: "@brackets.directive" },
  356. { token: "delimiter.directive" },
  357. { token: "tag" },
  358. { token: "delimiter.directive" },
  359. { token: "@brackets.directive" }
  360. ]
  361. ],
  362. [
  363. r(/(@open__id__)#--/),
  364. ts.id === "auto" ? {
  365. cases: {
  366. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  367. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  368. }
  369. } : { token: "comment", next: s("@terseComment__id__") }
  370. ],
  371. [
  372. r(/(?:@startOrEndTag__id__)([a-zA-Z_]+)/),
  373. ts.id === "auto" ? {
  374. cases: {
  375. "$1==<": { token: "@rematch", switchTo: `@default_angle_${is.id}` },
  376. "$1==[": { token: "@rematch", switchTo: `@default_bracket_${is.id}` }
  377. }
  378. } : [
  379. { token: "@brackets.directive" },
  380. { token: "delimiter.directive" },
  381. { token: "tag.invalid", next: s("@fmExpression__id__.directive") }
  382. ]
  383. ]
  384. ],
  385. [s("interpolation_and_text_token__id__")]: [
  386. [
  387. r(/(@iOpen1__id__)(@iOpen2__id__)/),
  388. [
  389. { token: is.id === "bracket" ? "@brackets.interpolation" : "delimiter.interpolation" },
  390. {
  391. token: is.id === "bracket" ? "delimiter.interpolation" : "@brackets.interpolation",
  392. next: s("@fmExpression__id__.interpolation")
  393. }
  394. ]
  395. ],
  396. [/[\$#<\[\{]|(?:@blank)+|[^\$<#\[\{\n\r\t ]+/, { token: "source" }]
  397. ],
  398. [s("string_single_token__id__")]: [
  399. [/[^'\\]/, { token: "string" }],
  400. [/@escapedChar/, { token: "string.escape" }],
  401. [/'/, { token: "string", next: "@pop" }]
  402. ],
  403. [s("string_double_token__id__")]: [
  404. [/[^"\\]/, { token: "string" }],
  405. [/@escapedChar/, { token: "string.escape" }],
  406. [/"/, { token: "string", next: "@pop" }]
  407. ],
  408. [s("string_single_raw_token__id__")]: [
  409. [/[^']+/, { token: "string.raw" }],
  410. [/'/, { token: "string.raw", next: "@pop" }]
  411. ],
  412. [s("string_double_raw_token__id__")]: [
  413. [/[^"]+/, { token: "string.raw" }],
  414. [/"/, { token: "string.raw", next: "@pop" }]
  415. ],
  416. [s("expression_token__id__")]: [
  417. [
  418. /(r?)(['"])/,
  419. {
  420. cases: {
  421. "r'": [
  422. { token: "keyword" },
  423. { token: "string.raw", next: s("@rawSingleString__id__") }
  424. ],
  425. 'r"': [
  426. { token: "keyword" },
  427. { token: "string.raw", next: s("@rawDoubleString__id__") }
  428. ],
  429. "'": [{ token: "source" }, { token: "string", next: s("@singleString__id__") }],
  430. '"': [{ token: "source" }, { token: "string", next: s("@doubleString__id__") }]
  431. }
  432. }
  433. ],
  434. [
  435. /(?:@integer)(?:\.(?:@integer))?/,
  436. {
  437. cases: {
  438. "(?:@integer)": { token: "number" },
  439. "@default": { token: "number.float" }
  440. }
  441. }
  442. ],
  443. [
  444. /(\.)(@blank*)(@specialHashKeys)/,
  445. [{ token: "delimiter" }, { token: "" }, { token: "identifier" }]
  446. ],
  447. [
  448. /(?:@namedSymbols)/,
  449. {
  450. cases: {
  451. "@arrows": { token: "meta.arrow" },
  452. "@delimiters": { token: "delimiter" },
  453. "@default": { token: "operators" }
  454. }
  455. }
  456. ],
  457. [
  458. /@id/,
  459. {
  460. cases: {
  461. "@keywords": { token: "keyword.$0" },
  462. "@stringOperators": { token: "operators" },
  463. "@default": { token: "identifier" }
  464. }
  465. }
  466. ],
  467. [
  468. /[\[\]\(\)\{\}]/,
  469. {
  470. cases: {
  471. "\\[": {
  472. cases: {
  473. "$S2==gt": { token: "@brackets", next: s("@inParen__id__.gt") },
  474. "@default": { token: "@brackets", next: s("@inParen__id__.plain") }
  475. }
  476. },
  477. "\\]": {
  478. cases: {
  479. ...is.id === "bracket" ? {
  480. "$S2==interpolation": { token: "@brackets.interpolation", next: "@popall" }
  481. } : {},
  482. ...ts.id === "bracket" ? {
  483. "$S2==directive": { token: "@brackets.directive", next: "@popall" }
  484. } : {},
  485. [s("$S1==inParen__id__")]: { token: "@brackets", next: "@pop" },
  486. "@default": { token: "@brackets" }
  487. }
  488. },
  489. "\\(": { token: "@brackets", next: s("@inParen__id__.gt") },
  490. "\\)": {
  491. cases: {
  492. [s("$S1==inParen__id__")]: { token: "@brackets", next: "@pop" },
  493. "@default": { token: "@brackets" }
  494. }
  495. },
  496. "\\{": {
  497. cases: {
  498. "$S2==gt": { token: "@brackets", next: s("@inParen__id__.gt") },
  499. "@default": { token: "@brackets", next: s("@inParen__id__.plain") }
  500. }
  501. },
  502. "\\}": {
  503. cases: {
  504. ...is.id === "bracket" ? {} : {
  505. "$S2==interpolation": { token: "@brackets.interpolation", next: "@popall" }
  506. },
  507. [s("$S1==inParen__id__")]: { token: "@brackets", next: "@pop" },
  508. "@default": { token: "@brackets" }
  509. }
  510. }
  511. }
  512. }
  513. ],
  514. [/\$\{/, { token: "delimiter.invalid" }]
  515. ],
  516. [s("blank_and_expression_comment_token__id__")]: [
  517. [/(?:@blank)+/, { token: "" }],
  518. [/[<\[][#!]--/, { token: "comment", next: s("@expressionComment__id__") }]
  519. ],
  520. [s("directive_end_token__id__")]: [
  521. [
  522. />/,
  523. ts.id === "bracket" ? { token: "operators" } : { token: "@brackets.directive", next: "@popall" }
  524. ],
  525. [
  526. r(/(\/)(@close__id__)/),
  527. [{ token: "delimiter.directive" }, { token: "@brackets.directive", next: "@popall" }]
  528. ]
  529. ],
  530. [s("greater_operators_token__id__")]: [
  531. [/>/, { token: "operators" }],
  532. [/>=/, { token: "operators" }]
  533. ],
  534. [s("no_space_expression_end_token__id__")]: [
  535. [/(?:@blank)+/, { token: "", switchTo: s("@fmExpression__id__.directive") }]
  536. ],
  537. [s("unified_call_token__id__")]: [
  538. [
  539. /(@id)((?:@blank)+)/,
  540. [{ token: "tag" }, { token: "", next: s("@fmExpression__id__.directive") }]
  541. ],
  542. [
  543. r(/(@id)(\/?)(@close__id__)/),
  544. [
  545. { token: "tag" },
  546. { token: "delimiter.directive" },
  547. { token: "@brackets.directive", next: "@popall" }
  548. ]
  549. ],
  550. [/./, { token: "@rematch", next: s("@noSpaceExpression__id__") }]
  551. ],
  552. [s("no_parse_token__id__")]: [
  553. [
  554. r(/(@open__id__)(\/#?)([a-zA-Z]+)((?:@blank)*)(@close__id__)/),
  555. {
  556. cases: {
  557. "$S2==$3": [
  558. { token: "@brackets.directive" },
  559. { token: "delimiter.directive" },
  560. { token: "tag" },
  561. { token: "" },
  562. { token: "@brackets.directive", next: "@popall" }
  563. ],
  564. "$S2==comment": [
  565. { token: "comment" },
  566. { token: "comment" },
  567. { token: "comment" },
  568. { token: "comment" },
  569. { token: "comment" }
  570. ],
  571. "@default": [
  572. { token: "source" },
  573. { token: "source" },
  574. { token: "source" },
  575. { token: "source" },
  576. { token: "source" }
  577. ]
  578. }
  579. }
  580. ],
  581. [
  582. /[^<\[\-]+|[<\[\-]/,
  583. {
  584. cases: {
  585. "$S2==comment": { token: "comment" },
  586. "@default": { token: "source" }
  587. }
  588. }
  589. ]
  590. ],
  591. [s("expression_comment_token__id__")]: [
  592. [
  593. /--[>\]]/,
  594. {
  595. token: "comment",
  596. next: "@pop"
  597. }
  598. ],
  599. [/[^\->\]]+|[>\]\-]/, { token: "comment" }]
  600. ],
  601. [s("terse_comment_token__id__")]: [
  602. [r(/--(?:@close__id__)/), { token: "comment", next: "@popall" }],
  603. [/[^<\[\-]+|[<\[\-]/, { token: "comment" }]
  604. ]
  605. }
  606. };
  607. }
  608. function createMonarchLanguageAuto(is) {
  609. const angle = createMonarchLanguage(TagSyntaxAngle, is);
  610. const bracket = createMonarchLanguage(TagSyntaxBracket, is);
  611. const auto = createMonarchLanguage(TagSyntaxAuto, is);
  612. return {
  613. ...angle,
  614. ...bracket,
  615. ...auto,
  616. unicode: true,
  617. includeLF: false,
  618. start: `default_auto_${is.id}`,
  619. ignoreCase: false,
  620. defaultToken: "invalid",
  621. tokenPostfix: `.freemarker2`,
  622. brackets: [
  623. { open: "{", close: "}", token: "delimiter.curly" },
  624. { open: "[", close: "]", token: "delimiter.square" },
  625. { open: "(", close: ")", token: "delimiter.parenthesis" },
  626. { open: "<", close: ">", token: "delimiter.angle" }
  627. ],
  628. tokenizer: {
  629. ...angle.tokenizer,
  630. ...bracket.tokenizer,
  631. ...auto.tokenizer
  632. }
  633. };
  634. }
  635. var TagAngleInterpolationDollar = {
  636. conf: createLangConfiguration(TagSyntaxAngle),
  637. language: createMonarchLanguage(TagSyntaxAngle, InterpolationSyntaxDollar)
  638. };
  639. var TagBracketInterpolationDollar = {
  640. conf: createLangConfiguration(TagSyntaxBracket),
  641. language: createMonarchLanguage(TagSyntaxBracket, InterpolationSyntaxDollar)
  642. };
  643. var TagAngleInterpolationBracket = {
  644. conf: createLangConfiguration(TagSyntaxAngle),
  645. language: createMonarchLanguage(TagSyntaxAngle, InterpolationSyntaxBracket)
  646. };
  647. var TagBracketInterpolationBracket = {
  648. conf: createLangConfiguration(TagSyntaxBracket),
  649. language: createMonarchLanguage(TagSyntaxBracket, InterpolationSyntaxBracket)
  650. };
  651. var TagAutoInterpolationDollar = {
  652. conf: createLangConfigurationAuto(),
  653. language: createMonarchLanguageAuto(InterpolationSyntaxDollar)
  654. };
  655. var TagAutoInterpolationBracket = {
  656. conf: createLangConfigurationAuto(),
  657. language: createMonarchLanguageAuto(InterpolationSyntaxBracket)
  658. };
  659. export {
  660. TagAngleInterpolationBracket,
  661. TagAngleInterpolationDollar,
  662. TagAutoInterpolationBracket,
  663. TagAutoInterpolationDollar,
  664. TagBracketInterpolationBracket,
  665. TagBracketInterpolationDollar
  666. };