liquid.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  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/liquid/liquid.ts
  25. var EMPTY_ELEMENTS = [
  26. "area",
  27. "base",
  28. "br",
  29. "col",
  30. "embed",
  31. "hr",
  32. "img",
  33. "input",
  34. "keygen",
  35. "link",
  36. "menuitem",
  37. "meta",
  38. "param",
  39. "source",
  40. "track",
  41. "wbr"
  42. ];
  43. var conf = {
  44. wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g,
  45. brackets: [
  46. ["<!--", "-->"],
  47. ["<", ">"],
  48. ["{{", "}}"],
  49. ["{%", "%}"],
  50. ["{", "}"],
  51. ["(", ")"]
  52. ],
  53. autoClosingPairs: [
  54. { open: "{", close: "}" },
  55. { open: "%", close: "%" },
  56. { open: "[", close: "]" },
  57. { open: "(", close: ")" },
  58. { open: '"', close: '"' },
  59. { open: "'", close: "'" }
  60. ],
  61. surroundingPairs: [
  62. { open: "<", close: ">" },
  63. { open: '"', close: '"' },
  64. { open: "'", close: "'" }
  65. ],
  66. onEnterRules: [
  67. {
  68. beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, "i"),
  69. afterText: /^<\/(\w[\w\d]*)\s*>$/i,
  70. action: {
  71. indentAction: monaco_editor_core_exports.languages.IndentAction.IndentOutdent
  72. }
  73. },
  74. {
  75. beforeText: new RegExp(`<(?!(?:${EMPTY_ELEMENTS.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, "i"),
  76. action: { indentAction: monaco_editor_core_exports.languages.IndentAction.Indent }
  77. }
  78. ]
  79. };
  80. var language = {
  81. defaultToken: "",
  82. tokenPostfix: "",
  83. builtinTags: [
  84. "if",
  85. "else",
  86. "elseif",
  87. "endif",
  88. "render",
  89. "assign",
  90. "capture",
  91. "endcapture",
  92. "case",
  93. "endcase",
  94. "comment",
  95. "endcomment",
  96. "cycle",
  97. "decrement",
  98. "for",
  99. "endfor",
  100. "include",
  101. "increment",
  102. "layout",
  103. "raw",
  104. "endraw",
  105. "render",
  106. "tablerow",
  107. "endtablerow",
  108. "unless",
  109. "endunless"
  110. ],
  111. builtinFilters: [
  112. "abs",
  113. "append",
  114. "at_least",
  115. "at_most",
  116. "capitalize",
  117. "ceil",
  118. "compact",
  119. "date",
  120. "default",
  121. "divided_by",
  122. "downcase",
  123. "escape",
  124. "escape_once",
  125. "first",
  126. "floor",
  127. "join",
  128. "json",
  129. "last",
  130. "lstrip",
  131. "map",
  132. "minus",
  133. "modulo",
  134. "newline_to_br",
  135. "plus",
  136. "prepend",
  137. "remove",
  138. "remove_first",
  139. "replace",
  140. "replace_first",
  141. "reverse",
  142. "round",
  143. "rstrip",
  144. "size",
  145. "slice",
  146. "sort",
  147. "sort_natural",
  148. "split",
  149. "strip",
  150. "strip_html",
  151. "strip_newlines",
  152. "times",
  153. "truncate",
  154. "truncatewords",
  155. "uniq",
  156. "upcase",
  157. "url_decode",
  158. "url_encode",
  159. "where"
  160. ],
  161. constants: ["true", "false"],
  162. operators: ["==", "!=", ">", "<", ">=", "<="],
  163. symbol: /[=><!]+/,
  164. identifier: /[a-zA-Z_][\w]*/,
  165. tokenizer: {
  166. root: [
  167. [/\{\%\s*comment\s*\%\}/, "comment.start.liquid", "@comment"],
  168. [/\{\{/, { token: "@rematch", switchTo: "@liquidState.root" }],
  169. [/\{\%/, { token: "@rematch", switchTo: "@liquidState.root" }],
  170. [/(<)([\w\-]+)(\/>)/, ["delimiter.html", "tag.html", "delimiter.html"]],
  171. [/(<)([:\w]+)/, ["delimiter.html", { token: "tag.html", next: "@otherTag" }]],
  172. [/(<\/)([\w\-]+)/, ["delimiter.html", { token: "tag.html", next: "@otherTag" }]],
  173. [/</, "delimiter.html"],
  174. [/\{/, "delimiter.html"],
  175. [/[^<{]+/]
  176. ],
  177. comment: [
  178. [/\{\%\s*endcomment\s*\%\}/, "comment.end.liquid", "@pop"],
  179. [/./, "comment.content.liquid"]
  180. ],
  181. otherTag: [
  182. [
  183. /\{\{/,
  184. {
  185. token: "@rematch",
  186. switchTo: "@liquidState.otherTag"
  187. }
  188. ],
  189. [
  190. /\{\%/,
  191. {
  192. token: "@rematch",
  193. switchTo: "@liquidState.otherTag"
  194. }
  195. ],
  196. [/\/?>/, "delimiter.html", "@pop"],
  197. [/"([^"]*)"/, "attribute.value"],
  198. [/'([^']*)'/, "attribute.value"],
  199. [/[\w\-]+/, "attribute.name"],
  200. [/=/, "delimiter"],
  201. [/[ \t\r\n]+/]
  202. ],
  203. liquidState: [
  204. [/\{\{/, "delimiter.output.liquid"],
  205. [/\}\}/, { token: "delimiter.output.liquid", switchTo: "@$S2.$S3" }],
  206. [/\{\%/, "delimiter.tag.liquid"],
  207. [/raw\s*\%\}/, "delimiter.tag.liquid", "@liquidRaw"],
  208. [/\%\}/, { token: "delimiter.tag.liquid", switchTo: "@$S2.$S3" }],
  209. { include: "liquidRoot" }
  210. ],
  211. liquidRaw: [
  212. [/^(?!\{\%\s*endraw\s*\%\}).+/],
  213. [/\{\%/, "delimiter.tag.liquid"],
  214. [/@identifier/],
  215. [/\%\}/, { token: "delimiter.tag.liquid", next: "@root" }]
  216. ],
  217. liquidRoot: [
  218. [/\d+(\.\d+)?/, "number.liquid"],
  219. [/"[^"]*"/, "string.liquid"],
  220. [/'[^']*'/, "string.liquid"],
  221. [/\s+/],
  222. [
  223. /@symbol/,
  224. {
  225. cases: {
  226. "@operators": "operator.liquid",
  227. "@default": ""
  228. }
  229. }
  230. ],
  231. [/\./],
  232. [
  233. /@identifier/,
  234. {
  235. cases: {
  236. "@constants": "keyword.liquid",
  237. "@builtinFilters": "predefined.liquid",
  238. "@builtinTags": "predefined.liquid",
  239. "@default": "variable.liquid"
  240. }
  241. }
  242. ],
  243. [/[^}|%]/, "variable.liquid"]
  244. ]
  245. }
  246. };
  247. export {
  248. conf,
  249. language
  250. };