online-compiler-widget 0.0.3 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/dist/abap-CrvW7_qN.js +1398 -0
  2. package/dist/apex-BAOI8p1v.js +327 -0
  3. package/dist/assets/css.worker-Cb0JI69t.js +93 -0
  4. package/dist/assets/html.worker-BNFZMwEc.js +470 -0
  5. package/dist/assets/json.worker-BCybXpia.js +58 -0
  6. package/dist/assets/ts.worker-DAVh1bw1.js +67731 -0
  7. package/dist/azcli-BlCk_UqW.js +68 -0
  8. package/dist/bat-DPoEelVx.js +100 -0
  9. package/dist/bicep-Cp1F394l.js +102 -0
  10. package/dist/cameligo-CWqtSlQs.js +174 -0
  11. package/dist/clojure-CKBp32Gf.js +761 -0
  12. package/dist/coffee-CDo6vc-J.js +232 -0
  13. package/dist/cpp-DokufPgf.js +389 -0
  14. package/dist/csharp-BQi3szM0.js +326 -0
  15. package/dist/csp-BSGtCCZ-.js +53 -0
  16. package/dist/css-DEPFDJfb.js +187 -0
  17. package/dist/cssMode-nHrB9Mnr.js +141 -0
  18. package/dist/cypher-DAb1vOxS.js +263 -0
  19. package/dist/dart-C8p4jewR.js +281 -0
  20. package/dist/dockerfile-DP0iLFPN.js +130 -0
  21. package/dist/ecl-BDQHA6fi.js +456 -0
  22. package/dist/elixir-D4II6kDM.js +569 -0
  23. package/dist/flow9-StcnL-VB.js +142 -0
  24. package/dist/freemarker2-BoiXdkJM.js +982 -0
  25. package/dist/fsharp-DdUVp3EN.js +217 -0
  26. package/dist/go-D1-I258M.js +218 -0
  27. package/dist/graphql-DWkL3f8U.js +151 -0
  28. package/dist/handlebars-C7PJzkmo.js +412 -0
  29. package/dist/hcl-D_0MNifv.js +183 -0
  30. package/dist/html-D_xe_tUa.js +301 -0
  31. package/dist/htmlMode-Dk_luXu_.js +152 -0
  32. package/dist/index-Ds0EJmOd.js +129200 -0
  33. package/dist/index.js +14 -0
  34. package/dist/ini-C4I2-MT7.js +71 -0
  35. package/dist/java-OBvaP_SS.js +232 -0
  36. package/dist/javascript-CUK67ITD.js +70 -0
  37. package/dist/jsonMode-BIAYTpVF.js +569 -0
  38. package/dist/julia-BmDH8Kkf.js +511 -0
  39. package/dist/kotlin-Dhu5AGOD.js +252 -0
  40. package/dist/less-CzmjXREq.js +162 -0
  41. package/dist/lexon-CV2c4pN9.js +157 -0
  42. package/dist/liquid-Cgsk8EmK.js +233 -0
  43. package/dist/lspLanguageFeatures-HqO1l9Me.js +1458 -0
  44. package/dist/lua-CFY5U8qF.js +162 -0
  45. package/dist/m3-BL_AnZVh.js +210 -0
  46. package/dist/markdown-CWKQPXCv.js +229 -0
  47. package/dist/mdx-QboWmT4M.js +158 -0
  48. package/dist/mips-ButYmJ5E.js +198 -0
  49. package/dist/msdax-C3cnXqDh.js +375 -0
  50. package/dist/mysql-YlSHaf6G.js +878 -0
  51. package/dist/objective-c-Dwnlproe.js +183 -0
  52. package/dist/pascal-UzGbSWEN.js +251 -0
  53. package/dist/pascaligo-CslTgu68.js +164 -0
  54. package/dist/perl-oj6r_mgw.js +626 -0
  55. package/dist/pgsql-DSBO0Mev.js +851 -0
  56. package/dist/php-YzCD--7j.js +500 -0
  57. package/dist/pla-CmylB8vQ.js +137 -0
  58. package/dist/postiats-CLFW5gNY.js +907 -0
  59. package/dist/powerquery-CmOWUvlh.js +890 -0
  60. package/dist/powershell-fHQcmBLK.js +239 -0
  61. package/dist/protobuf-p5BArb-9.js +420 -0
  62. package/dist/pug-gVdUDvqf.js +402 -0
  63. package/dist/python-kIZaMFF7.js +294 -0
  64. package/dist/qsharp-DnrWSUlt.js +301 -0
  65. package/dist/r-Cv309K2z.js +243 -0
  66. package/dist/razor-ms2cCMGp.js +543 -0
  67. package/dist/redis-DTcS4wMj.js +302 -0
  68. package/dist/redshift-hLxZVESM.js +809 -0
  69. package/dist/restructuredtext-C898lK4f.js +174 -0
  70. package/dist/ruby-CgKtnJIQ.js +511 -0
  71. package/dist/rust-bj8oxVnh.js +343 -0
  72. package/dist/sb-DWynz26l.js +115 -0
  73. package/dist/scala-BL5z1UEd.js +370 -0
  74. package/dist/scheme-DUJsH6VU.js +108 -0
  75. package/dist/scss-CxjmhvaL.js +262 -0
  76. package/dist/shell-D14Zs1dF.js +221 -0
  77. package/dist/solidity-WyRm-BGK.js +1367 -0
  78. package/dist/sophia-CKk-_Oa5.js +199 -0
  79. package/dist/sparql-DHtmINMZ.js +201 -0
  80. package/dist/sql-Dqaj5JHC.js +853 -0
  81. package/dist/st-Bj2IIaop.js +416 -0
  82. package/dist/style.css +1 -0
  83. package/dist/swift-DwxP72iM.js +312 -0
  84. package/dist/systemverilog-D7wJfuql.js +576 -0
  85. package/dist/tcl-0ApMt-eC.js +232 -0
  86. package/dist/tsMode-BiXWAJYS.js +946 -0
  87. package/dist/twig-DxwbdmvQ.js +392 -0
  88. package/dist/typescript-ByMmjZ38.js +336 -0
  89. package/dist/typespec-Fd-JwSuS.js +117 -0
  90. package/dist/vb-CxuyYE1I.js +372 -0
  91. package/dist/wgsl-DoEGc31J.js +439 -0
  92. package/dist/xml-iOXTZgNN.js +88 -0
  93. package/dist/yaml-RRlyy-QW.js +199 -0
  94. package/package.json +41 -36
  95. package/FileStorage/obj/FileStorage.csproj.EntityFrameworkCore.targets +0 -28
  96. package/README.md +0 -1
  97. package/eslint.config.js +0 -26
  98. package/index.html +0 -13
  99. package/index.tsx +0 -3
  100. package/openapitools.json +0 -7
  101. package/pnpm-workspace.yaml +0 -2
  102. package/public/vite.svg +0 -1
  103. package/src/App.css +0 -49
  104. package/src/App.tsx +0 -84
  105. package/src/api/.openapi-generator/FILES +0 -25
  106. package/src/api/.openapi-generator/VERSION +0 -1
  107. package/src/api/.openapi-generator-ignore +0 -23
  108. package/src/api/api.ts +0 -1312
  109. package/src/api/base.ts +0 -62
  110. package/src/api/common.ts +0 -113
  111. package/src/api/configuration.ts +0 -121
  112. package/src/api/docs/CompilationError.md +0 -26
  113. package/src/api/docs/CompileRequest.md +0 -22
  114. package/src/api/docs/CompileResult.md +0 -28
  115. package/src/api/docs/CompilerApi.md +0 -263
  116. package/src/api/docs/CreateFileDto.md +0 -22
  117. package/src/api/docs/CreateProjectRequest.md +0 -20
  118. package/src/api/docs/FileApi.md +0 -274
  119. package/src/api/docs/ProcessStatus.md +0 -28
  120. package/src/api/docs/ProjectApi.md +0 -362
  121. package/src/api/docs/ProjectInfo.md +0 -24
  122. package/src/api/docs/ProjectStats.md +0 -28
  123. package/src/api/docs/RenameFileDto.md +0 -20
  124. package/src/api/docs/RenameProjectRequest.md +0 -20
  125. package/src/api/docs/RunRequest.md +0 -24
  126. package/src/api/docs/RunResult.md +0 -30
  127. package/src/api/docs/RunningProjectInfo.md +0 -26
  128. package/src/api/docs/UpdateFileDto.md +0 -20
  129. package/src/api/git_push.sh +0 -57
  130. package/src/api/index.ts +0 -18
  131. package/src/assets/Badge.svg +0 -17
  132. package/src/assets/closeIcon.svg +0 -20
  133. package/src/assets/documentIcon.svg +0 -11
  134. package/src/assets/history.svg +0 -11
  135. package/src/assets/output.svg +0 -12
  136. package/src/assets/plus.svg +0 -20
  137. package/src/assets/react.svg +0 -1
  138. package/src/assets/save-icon.svg +0 -11
  139. package/src/assets/shield.svg +0 -10
  140. package/src/assets/start.svg +0 -11
  141. package/src/assets/stop.svg +0 -11
  142. package/src/components/CompilerWidget.module.scss +0 -169
  143. package/src/components/CompilerWidget.tsx +0 -279
  144. package/src/components/FileExplorer.module.scss +0 -372
  145. package/src/components/FileExplorer.tsx +0 -285
  146. package/src/components/MonacoEditorWrapper.module.scss +0 -29
  147. package/src/components/MonacoEditorWrapper.tsx +0 -74
  148. package/src/components/OutputPanel.module.scss +0 -123
  149. package/src/components/OutputPanel.tsx +0 -53
  150. package/src/components/RunContainer.module.scss +0 -150
  151. package/src/components/RunContainer.tsx +0 -34
  152. package/src/hooks/useCompiler.ts +0 -228
  153. package/src/hooks/useInitialNodes.ts +0 -0
  154. package/src/index.css +0 -78
  155. package/src/main.tsx +0 -8
  156. package/src/types/EditorDocument.ts +0 -8
  157. package/swagger.json +0 -1020
  158. package/tsconfig.app.json +0 -29
  159. package/tsconfig.json +0 -7
  160. package/tsconfig.node.json +0 -26
  161. package/vite.config.ts +0 -8
@@ -0,0 +1,174 @@
1
+ const e = {
2
+ brackets: [
3
+ ["{", "}"],
4
+ ["[", "]"],
5
+ ["(", ")"]
6
+ ],
7
+ autoClosingPairs: [
8
+ { open: "{", close: "}" },
9
+ { open: "[", close: "]" },
10
+ { open: "(", close: ")" },
11
+ { open: "<", close: ">", notIn: ["string"] }
12
+ ],
13
+ surroundingPairs: [
14
+ { open: "(", close: ")" },
15
+ { open: "[", close: "]" },
16
+ { open: "`", close: "`" }
17
+ ],
18
+ folding: {
19
+ markers: {
20
+ start: new RegExp("^\\s*<!--\\s*#?region\\b.*-->"),
21
+ end: new RegExp("^\\s*<!--\\s*#?endregion\\b.*-->")
22
+ }
23
+ }
24
+ }, n = {
25
+ defaultToken: "",
26
+ tokenPostfix: ".rst",
27
+ control: /[\\`*_\[\]{}()#+\-\.!]/,
28
+ escapes: /\\(?:@control)/,
29
+ empty: [
30
+ "area",
31
+ "base",
32
+ "basefont",
33
+ "br",
34
+ "col",
35
+ "frame",
36
+ "hr",
37
+ "img",
38
+ "input",
39
+ "isindex",
40
+ "link",
41
+ "meta",
42
+ "param"
43
+ ],
44
+ alphanumerics: /[A-Za-z0-9]/,
45
+ simpleRefNameWithoutBq: /(?:@alphanumerics[-_+:.]*@alphanumerics)+|(?:@alphanumerics+)/,
46
+ simpleRefName: /(?:`@phrase`|@simpleRefNameWithoutBq)/,
47
+ phrase: /@simpleRefNameWithoutBq(?:\s@simpleRefNameWithoutBq)*/,
48
+ citationName: /[A-Za-z][A-Za-z0-9-_.]*/,
49
+ blockLiteralStart: /(?:[!"#$%&'()*+,-./:;<=>?@\[\]^_`{|}~]|[\s])/,
50
+ precedingChars: /(?:[ -:/'"<([{])/,
51
+ followingChars: /(?:[ -.,:;!?/'")\]}>]|$)/,
52
+ punctuation: /(=|-|~|`|#|"|\^|\+|\*|:|\.|'|_|\+)/,
53
+ tokenizer: {
54
+ root: [
55
+ //sections
56
+ [/^(@punctuation{3,}$){1,1}?/, "keyword"],
57
+ //line-blocks
58
+ //No rules on it
59
+ //bullet-lists
60
+ [/^\s*([\*\-+‣•]|[a-zA-Z0-9]+\.|\([a-zA-Z0-9]+\)|[a-zA-Z0-9]+\))\s/, "keyword"],
61
+ //literal-blocks
62
+ [/([ ]::)\s*$/, "keyword", "@blankLineOfLiteralBlocks"],
63
+ [/(::)\s*$/, "keyword", "@blankLineOfLiteralBlocks"],
64
+ { include: "@tables" },
65
+ { include: "@explicitMarkupBlocks" },
66
+ { include: "@inlineMarkup" }
67
+ ],
68
+ explicitMarkupBlocks: [
69
+ //citations
70
+ { include: "@citations" },
71
+ //footnotes
72
+ { include: "@footnotes" },
73
+ //directives
74
+ [
75
+ /^(\.\.\s)(@simpleRefName)(::\s)(.*)$/,
76
+ [{ token: "", next: "subsequentLines" }, "keyword", "", ""]
77
+ ],
78
+ //hyperlink-targets
79
+ [
80
+ /^(\.\.)(\s+)(_)(@simpleRefName)(:)(\s+)(.*)/,
81
+ [{ token: "", next: "hyperlinks" }, "", "", "string.link", "", "", "string.link"]
82
+ ],
83
+ //anonymous-hyperlinks
84
+ [
85
+ /^((?:(?:\.\.)(?:\s+))?)(__)(:)(\s+)(.*)/,
86
+ [{ token: "", next: "subsequentLines" }, "", "", "", "string.link"]
87
+ ],
88
+ [/^(__\s+)(.+)/, ["", "string.link"]],
89
+ //substitution-definitions
90
+ [
91
+ /^(\.\.)( \|)([^| ]+[^|]*[^| ]*)(\| )(@simpleRefName)(:: .*)/,
92
+ [{ token: "", next: "subsequentLines" }, "", "string.link", "", "keyword", ""],
93
+ "@rawBlocks"
94
+ ],
95
+ [/(\|)([^| ]+[^|]*[^| ]*)(\|_{0,2})/, ["", "string.link", ""]],
96
+ //comments
97
+ [/^(\.\.)([ ].*)$/, [{ token: "", next: "@comments" }, "comment"]]
98
+ ],
99
+ inlineMarkup: [
100
+ { include: "@citationsReference" },
101
+ { include: "@footnotesReference" },
102
+ //hyperlink-references
103
+ [/(@simpleRefName)(_{1,2})/, ["string.link", ""]],
104
+ //embedded-uris-and-aliases
105
+ [/(`)([^<`]+\s+)(<)(.*)(>)(`)(_)/, ["", "string.link", "", "string.link", "", "", ""]],
106
+ //emphasis
107
+ [/\*\*([^\\*]|\*(?!\*))+\*\*/, "strong"],
108
+ [/\*[^*]+\*/, "emphasis"],
109
+ //inline-literals
110
+ [/(``)((?:[^`]|\`(?!`))+)(``)/, ["", "keyword", ""]],
111
+ [/(__\s+)(.+)/, ["", "keyword"]],
112
+ //interpreted-text
113
+ [/(:)((?:@simpleRefNameWithoutBq)?)(:`)([^`]+)(`)/, ["", "keyword", "", "", ""]],
114
+ [/(`)([^`]+)(`:)((?:@simpleRefNameWithoutBq)?)(:)/, ["", "", "", "keyword", ""]],
115
+ [/(`)([^`]+)(`)/, ""],
116
+ //inline-internal-targets
117
+ [/(_`)(@phrase)(`)/, ["", "string.link", ""]]
118
+ ],
119
+ citations: [
120
+ [
121
+ /^(\.\.\s+\[)((?:@citationName))(\]\s+)(.*)/,
122
+ [{ token: "", next: "@subsequentLines" }, "string.link", "", ""]
123
+ ]
124
+ ],
125
+ citationsReference: [[/(\[)(@citationName)(\]_)/, ["", "string.link", ""]]],
126
+ footnotes: [
127
+ [
128
+ /^(\.\.\s+\[)((?:[0-9]+))(\]\s+.*)/,
129
+ [{ token: "", next: "@subsequentLines" }, "string.link", ""]
130
+ ],
131
+ [
132
+ /^(\.\.\s+\[)((?:#@simpleRefName?))(\]\s+)(.*)/,
133
+ [{ token: "", next: "@subsequentLines" }, "string.link", "", ""]
134
+ ],
135
+ [
136
+ /^(\.\.\s+\[)((?:\*))(\]\s+)(.*)/,
137
+ [{ token: "", next: "@subsequentLines" }, "string.link", "", ""]
138
+ ]
139
+ ],
140
+ footnotesReference: [
141
+ [/(\[)([0-9]+)(\])(_)/, ["", "string.link", "", ""]],
142
+ [/(\[)(#@simpleRefName?)(\])(_)/, ["", "string.link", "", ""]],
143
+ [/(\[)(\*)(\])(_)/, ["", "string.link", "", ""]]
144
+ ],
145
+ blankLineOfLiteralBlocks: [
146
+ [/^$/, "", "@subsequentLinesOfLiteralBlocks"],
147
+ [/^.*$/, "", "@pop"]
148
+ ],
149
+ subsequentLinesOfLiteralBlocks: [
150
+ [/(@blockLiteralStart+)(.*)/, ["keyword", ""]],
151
+ [/^(?!blockLiteralStart)/, "", "@popall"]
152
+ ],
153
+ subsequentLines: [
154
+ [/^[\s]+.*/, ""],
155
+ [/^(?!\s)/, "", "@pop"]
156
+ ],
157
+ hyperlinks: [
158
+ [/^[\s]+.*/, "string.link"],
159
+ [/^(?!\s)/, "", "@pop"]
160
+ ],
161
+ comments: [
162
+ [/^[\s]+.*/, "comment"],
163
+ [/^(?!\s)/, "", "@pop"]
164
+ ],
165
+ tables: [
166
+ [/\+-[+-]+/, "keyword"],
167
+ [/\+=[+=]+/, "keyword"]
168
+ ]
169
+ }
170
+ };
171
+ export {
172
+ e as conf,
173
+ n as language
174
+ };
@@ -0,0 +1,511 @@
1
+ const e = {
2
+ comments: {
3
+ lineComment: "#",
4
+ blockComment: ["=begin", "=end"]
5
+ },
6
+ brackets: [
7
+ ["(", ")"],
8
+ ["{", "}"],
9
+ ["[", "]"]
10
+ ],
11
+ autoClosingPairs: [
12
+ { open: "{", close: "}" },
13
+ { open: "[", close: "]" },
14
+ { open: "(", close: ")" },
15
+ { open: '"', close: '"' },
16
+ { open: "'", close: "'" }
17
+ ],
18
+ surroundingPairs: [
19
+ { open: "{", close: "}" },
20
+ { open: "[", close: "]" },
21
+ { open: "(", close: ")" },
22
+ { open: '"', close: '"' },
23
+ { open: "'", close: "'" }
24
+ ],
25
+ indentationRules: {
26
+ increaseIndentPattern: new RegExp(
27
+ `^\\s*((begin|class|(private|protected)\\s+def|def|else|elsif|ensure|for|if|module|rescue|unless|until|when|while|case)|([^#]*\\sdo\\b)|([^#]*=\\s*(case|if|unless)))\\b([^#\\{;]|("|'|/).*\\4)*(#.*)?$`
28
+ ),
29
+ decreaseIndentPattern: new RegExp(
30
+ "^\\s*([}\\]]([,)]?\\s*(#|$)|\\.[a-zA-Z_]\\w*\\b)|(end|rescue|ensure|else|elsif|when)\\b)"
31
+ )
32
+ }
33
+ }, t = {
34
+ tokenPostfix: ".ruby",
35
+ keywords: [
36
+ "__LINE__",
37
+ "__ENCODING__",
38
+ "__FILE__",
39
+ "BEGIN",
40
+ "END",
41
+ "alias",
42
+ "and",
43
+ "begin",
44
+ "break",
45
+ "case",
46
+ "class",
47
+ "def",
48
+ "defined?",
49
+ "do",
50
+ "else",
51
+ "elsif",
52
+ "end",
53
+ "ensure",
54
+ "for",
55
+ "false",
56
+ "if",
57
+ "in",
58
+ "module",
59
+ "next",
60
+ "nil",
61
+ "not",
62
+ "or",
63
+ "redo",
64
+ "rescue",
65
+ "retry",
66
+ "return",
67
+ "self",
68
+ "super",
69
+ "then",
70
+ "true",
71
+ "undef",
72
+ "unless",
73
+ "until",
74
+ "when",
75
+ "while",
76
+ "yield"
77
+ ],
78
+ keywordops: ["::", "..", "...", "?", ":", "=>"],
79
+ builtins: [
80
+ "require",
81
+ "public",
82
+ "private",
83
+ "include",
84
+ "extend",
85
+ "attr_reader",
86
+ "protected",
87
+ "private_class_method",
88
+ "protected_class_method",
89
+ "new"
90
+ ],
91
+ // these are closed by 'end' (if, while and until are handled separately)
92
+ declarations: [
93
+ "module",
94
+ "class",
95
+ "def",
96
+ "case",
97
+ "do",
98
+ "begin",
99
+ "for",
100
+ "if",
101
+ "while",
102
+ "until",
103
+ "unless"
104
+ ],
105
+ linedecls: ["def", "case", "do", "begin", "for", "if", "while", "until", "unless"],
106
+ operators: [
107
+ "^",
108
+ "&",
109
+ "|",
110
+ "<=>",
111
+ "==",
112
+ "===",
113
+ "!~",
114
+ "=~",
115
+ ">",
116
+ ">=",
117
+ "<",
118
+ "<=",
119
+ "<<",
120
+ ">>",
121
+ "+",
122
+ "-",
123
+ "*",
124
+ "/",
125
+ "%",
126
+ "**",
127
+ "~",
128
+ "+@",
129
+ "-@",
130
+ "[]",
131
+ "[]=",
132
+ "`",
133
+ "+=",
134
+ "-=",
135
+ "*=",
136
+ "**=",
137
+ "/=",
138
+ "^=",
139
+ "%=",
140
+ "<<=",
141
+ ">>=",
142
+ "&=",
143
+ "&&=",
144
+ "||=",
145
+ "|="
146
+ ],
147
+ brackets: [
148
+ { open: "(", close: ")", token: "delimiter.parenthesis" },
149
+ { open: "{", close: "}", token: "delimiter.curly" },
150
+ { open: "[", close: "]", token: "delimiter.square" }
151
+ ],
152
+ // we include these common regular expressions
153
+ symbols: /[=><!~?:&|+\-*\/\^%\.]+/,
154
+ // escape sequences
155
+ escape: /(?:[abefnrstv\\"'\n\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,
156
+ escapes: /\\(?:C\-(@escape|.)|c(@escape|.)|@escape)/,
157
+ decpart: /\d(_?\d)*/,
158
+ decimal: /0|@decpart/,
159
+ delim: /[^a-zA-Z0-9\s\n\r]/,
160
+ heredelim: /(?:\w+|'[^']*'|"[^"]*"|`[^`]*`)/,
161
+ regexpctl: /[(){}\[\]\$\^|\-*+?\.]/,
162
+ regexpesc: /\\(?:[AzZbBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})?/,
163
+ // The main tokenizer for our languages
164
+ tokenizer: {
165
+ // Main entry.
166
+ // root.<decl> where decl is the current opening declaration (like 'class')
167
+ root: [
168
+ // identifiers and keywords
169
+ // most complexity here is due to matching 'end' correctly with declarations.
170
+ // We distinguish a declaration that comes first on a line, versus declarations further on a line (which are most likey modifiers)
171
+ [
172
+ /^(\s*)([a-z_]\w*[!?=]?)/,
173
+ [
174
+ "white",
175
+ {
176
+ cases: {
177
+ "for|until|while": {
178
+ token: "keyword.$2",
179
+ next: "@dodecl.$2"
180
+ },
181
+ "@declarations": {
182
+ token: "keyword.$2",
183
+ next: "@root.$2"
184
+ },
185
+ end: { token: "keyword.$S2", next: "@pop" },
186
+ "@keywords": "keyword",
187
+ "@builtins": "predefined",
188
+ "@default": "identifier"
189
+ }
190
+ }
191
+ ]
192
+ ],
193
+ [
194
+ /[a-z_]\w*[!?=]?/,
195
+ {
196
+ cases: {
197
+ "if|unless|while|until": {
198
+ token: "keyword.$0x",
199
+ next: "@modifier.$0x"
200
+ },
201
+ for: { token: "keyword.$2", next: "@dodecl.$2" },
202
+ "@linedecls": { token: "keyword.$0", next: "@root.$0" },
203
+ end: { token: "keyword.$S2", next: "@pop" },
204
+ "@keywords": "keyword",
205
+ "@builtins": "predefined",
206
+ "@default": "identifier"
207
+ }
208
+ }
209
+ ],
210
+ [/[A-Z][\w]*[!?=]?/, "constructor.identifier"],
211
+ // constant
212
+ [/\$[\w]*/, "global.constant"],
213
+ // global
214
+ [/@[\w]*/, "namespace.instance.identifier"],
215
+ // instance
216
+ [/@@@[\w]*/, "namespace.class.identifier"],
217
+ // class
218
+ // here document
219
+ [/<<[-~](@heredelim).*/, { token: "string.heredoc.delimiter", next: "@heredoc.$1" }],
220
+ [/[ \t\r\n]+<<(@heredelim).*/, { token: "string.heredoc.delimiter", next: "@heredoc.$1" }],
221
+ [/^<<(@heredelim).*/, { token: "string.heredoc.delimiter", next: "@heredoc.$1" }],
222
+ // whitespace
223
+ { include: "@whitespace" },
224
+ // strings
225
+ [/"/, { token: "string.d.delim", next: '@dstring.d."' }],
226
+ [/'/, { token: "string.sq.delim", next: "@sstring.sq" }],
227
+ // % literals. For efficiency, rematch in the 'pstring' state
228
+ [/%([rsqxwW]|Q?)/, { token: "@rematch", next: "pstring" }],
229
+ // commands and symbols
230
+ [/`/, { token: "string.x.delim", next: "@dstring.x.`" }],
231
+ [/:(\w|[$@])\w*[!?=]?/, "string.s"],
232
+ [/:"/, { token: "string.s.delim", next: '@dstring.s."' }],
233
+ [/:'/, { token: "string.s.delim", next: "@sstring.s" }],
234
+ // regular expressions. Lookahead for a (not escaped) closing forwardslash on the same line
235
+ [/\/(?=(\\\/|[^\/\n])+\/)/, { token: "regexp.delim", next: "@regexp" }],
236
+ // delimiters and operators
237
+ [/[{}()\[\]]/, "@brackets"],
238
+ [
239
+ /@symbols/,
240
+ {
241
+ cases: {
242
+ "@keywordops": "keyword",
243
+ "@operators": "operator",
244
+ "@default": ""
245
+ }
246
+ }
247
+ ],
248
+ [/[;,]/, "delimiter"],
249
+ // numbers
250
+ [/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/, "number.hex"],
251
+ [/0[_oO][0-7](_?[0-7])*/, "number.octal"],
252
+ [/0[bB][01](_?[01])*/, "number.binary"],
253
+ [/0[dD]@decpart/, "number"],
254
+ [
255
+ /@decimal((\.@decpart)?([eE][\-+]?@decpart)?)/,
256
+ {
257
+ cases: {
258
+ $1: "number.float",
259
+ "@default": "number"
260
+ }
261
+ }
262
+ ]
263
+ ],
264
+ // used to not treat a 'do' as a block opener if it occurs on the same
265
+ // line as a 'do' statement: 'while|until|for'
266
+ // dodecl.<decl> where decl is the declarations started, like 'while'
267
+ dodecl: [
268
+ [/^/, { token: "", switchTo: "@root.$S2" }],
269
+ // get out of do-skipping mode on a new line
270
+ [
271
+ /[a-z_]\w*[!?=]?/,
272
+ {
273
+ cases: {
274
+ end: { token: "keyword.$S2", next: "@pop" },
275
+ // end on same line
276
+ do: { token: "keyword", switchTo: "@root.$S2" },
277
+ // do on same line: not an open bracket here
278
+ "@linedecls": {
279
+ token: "@rematch",
280
+ switchTo: "@root.$S2"
281
+ },
282
+ // other declaration on same line: rematch
283
+ "@keywords": "keyword",
284
+ "@builtins": "predefined",
285
+ "@default": "identifier"
286
+ }
287
+ }
288
+ ],
289
+ { include: "@root" }
290
+ ],
291
+ // used to prevent potential modifiers ('if|until|while|unless') to match
292
+ // with 'end' keywords.
293
+ // modifier.<decl>x where decl is the declaration starter, like 'if'
294
+ modifier: [
295
+ [/^/, "", "@pop"],
296
+ // it was a modifier: get out of modifier mode on a new line
297
+ [
298
+ /[a-z_]\w*[!?=]?/,
299
+ {
300
+ cases: {
301
+ end: { token: "keyword.$S2", next: "@pop" },
302
+ // end on same line
303
+ "then|else|elsif|do": {
304
+ token: "keyword",
305
+ switchTo: "@root.$S2"
306
+ },
307
+ // real declaration and not a modifier
308
+ "@linedecls": {
309
+ token: "@rematch",
310
+ switchTo: "@root.$S2"
311
+ },
312
+ // other declaration => not a modifier
313
+ "@keywords": "keyword",
314
+ "@builtins": "predefined",
315
+ "@default": "identifier"
316
+ }
317
+ }
318
+ ],
319
+ { include: "@root" }
320
+ ],
321
+ // single quote strings (also used for symbols)
322
+ // sstring.<kind> where kind is 'sq' (single quote) or 's' (symbol)
323
+ sstring: [
324
+ [/[^\\']+/, "string.$S2"],
325
+ [/\\\\|\\'|\\$/, "string.$S2.escape"],
326
+ [/\\./, "string.$S2.invalid"],
327
+ [/'/, { token: "string.$S2.delim", next: "@pop" }]
328
+ ],
329
+ // double quoted "string".
330
+ // dstring.<kind>.<delim> where kind is 'd' (double quoted), 'x' (command), or 's' (symbol)
331
+ // and delim is the ending delimiter (" or `)
332
+ dstring: [
333
+ [/[^\\`"#]+/, "string.$S2"],
334
+ [/#/, "string.$S2.escape", "@interpolated"],
335
+ [/\\$/, "string.$S2.escape"],
336
+ [/@escapes/, "string.$S2.escape"],
337
+ [/\\./, "string.$S2.escape.invalid"],
338
+ [
339
+ /[`"]/,
340
+ {
341
+ cases: {
342
+ "$#==$S3": { token: "string.$S2.delim", next: "@pop" },
343
+ "@default": "string.$S2"
344
+ }
345
+ }
346
+ ]
347
+ ],
348
+ // literal documents
349
+ // heredoc.<close> where close is the closing delimiter
350
+ heredoc: [
351
+ [
352
+ /^(\s*)(@heredelim)$/,
353
+ {
354
+ cases: {
355
+ "$2==$S2": ["string.heredoc", { token: "string.heredoc.delimiter", next: "@pop" }],
356
+ "@default": ["string.heredoc", "string.heredoc"]
357
+ }
358
+ }
359
+ ],
360
+ [/.*/, "string.heredoc"]
361
+ ],
362
+ // interpolated sequence
363
+ interpolated: [
364
+ [/\$\w*/, "global.constant", "@pop"],
365
+ [/@\w*/, "namespace.class.identifier", "@pop"],
366
+ [/@@@\w*/, "namespace.instance.identifier", "@pop"],
367
+ [
368
+ /[{]/,
369
+ {
370
+ token: "string.escape.curly",
371
+ switchTo: "@interpolated_compound"
372
+ }
373
+ ],
374
+ ["", "", "@pop"]
375
+ // just a # is interpreted as a #
376
+ ],
377
+ // any code
378
+ interpolated_compound: [
379
+ [/[}]/, { token: "string.escape.curly", next: "@pop" }],
380
+ { include: "@root" }
381
+ ],
382
+ // %r quoted regexp
383
+ // pregexp.<open>.<close> where open/close are the open/close delimiter
384
+ pregexp: [
385
+ { include: "@whitespace" },
386
+ // turns out that you can quote using regex control characters, aargh!
387
+ // for example; %r|kgjgaj| is ok (even though | is used for alternation)
388
+ // so, we need to match those first
389
+ [
390
+ /[^\(\{\[\\]/,
391
+ {
392
+ cases: {
393
+ "$#==$S3": { token: "regexp.delim", next: "@pop" },
394
+ "$#==$S2": { token: "regexp.delim", next: "@push" },
395
+ // nested delimiters are allowed..
396
+ "~[)}\\]]": "@brackets.regexp.escape.control",
397
+ "~@regexpctl": "regexp.escape.control",
398
+ "@default": "regexp"
399
+ }
400
+ }
401
+ ],
402
+ { include: "@regexcontrol" }
403
+ ],
404
+ // We match regular expression quite precisely
405
+ regexp: [
406
+ { include: "@regexcontrol" },
407
+ [/[^\\\/]/, "regexp"],
408
+ ["/[ixmp]*", { token: "regexp.delim" }, "@pop"]
409
+ ],
410
+ regexcontrol: [
411
+ [
412
+ /(\{)(\d+(?:,\d*)?)(\})/,
413
+ [
414
+ "@brackets.regexp.escape.control",
415
+ "regexp.escape.control",
416
+ "@brackets.regexp.escape.control"
417
+ ]
418
+ ],
419
+ [
420
+ /(\[)(\^?)/,
421
+ ["@brackets.regexp.escape.control", { token: "regexp.escape.control", next: "@regexrange" }]
422
+ ],
423
+ [/(\()(\?[:=!])/, ["@brackets.regexp.escape.control", "regexp.escape.control"]],
424
+ [/\(\?#/, { token: "regexp.escape.control", next: "@regexpcomment" }],
425
+ [/[()]/, "@brackets.regexp.escape.control"],
426
+ [/@regexpctl/, "regexp.escape.control"],
427
+ [/\\$/, "regexp.escape"],
428
+ [/@regexpesc/, "regexp.escape"],
429
+ [/\\\./, "regexp.invalid"],
430
+ [/#/, "regexp.escape", "@interpolated"]
431
+ ],
432
+ regexrange: [
433
+ [/-/, "regexp.escape.control"],
434
+ [/\^/, "regexp.invalid"],
435
+ [/\\$/, "regexp.escape"],
436
+ [/@regexpesc/, "regexp.escape"],
437
+ [/[^\]]/, "regexp"],
438
+ [/\]/, "@brackets.regexp.escape.control", "@pop"]
439
+ ],
440
+ regexpcomment: [
441
+ [/[^)]+/, "comment"],
442
+ [/\)/, { token: "regexp.escape.control", next: "@pop" }]
443
+ ],
444
+ // % quoted strings
445
+ // A bit repetitive since we need to often special case the kind of ending delimiter
446
+ pstring: [
447
+ [/%([qws])\(/, { token: "string.$1.delim", switchTo: "@qstring.$1.(.)" }],
448
+ [/%([qws])\[/, { token: "string.$1.delim", switchTo: "@qstring.$1.[.]" }],
449
+ [/%([qws])\{/, { token: "string.$1.delim", switchTo: "@qstring.$1.{.}" }],
450
+ [/%([qws])</, { token: "string.$1.delim", switchTo: "@qstring.$1.<.>" }],
451
+ [/%([qws])(@delim)/, { token: "string.$1.delim", switchTo: "@qstring.$1.$2.$2" }],
452
+ [/%r\(/, { token: "regexp.delim", switchTo: "@pregexp.(.)" }],
453
+ [/%r\[/, { token: "regexp.delim", switchTo: "@pregexp.[.]" }],
454
+ [/%r\{/, { token: "regexp.delim", switchTo: "@pregexp.{.}" }],
455
+ [/%r</, { token: "regexp.delim", switchTo: "@pregexp.<.>" }],
456
+ [/%r(@delim)/, { token: "regexp.delim", switchTo: "@pregexp.$1.$1" }],
457
+ [/%(x|W|Q?)\(/, { token: "string.$1.delim", switchTo: "@qqstring.$1.(.)" }],
458
+ [/%(x|W|Q?)\[/, { token: "string.$1.delim", switchTo: "@qqstring.$1.[.]" }],
459
+ [/%(x|W|Q?)\{/, { token: "string.$1.delim", switchTo: "@qqstring.$1.{.}" }],
460
+ [/%(x|W|Q?)</, { token: "string.$1.delim", switchTo: "@qqstring.$1.<.>" }],
461
+ [/%(x|W|Q?)(@delim)/, { token: "string.$1.delim", switchTo: "@qqstring.$1.$2.$2" }],
462
+ [/%([rqwsxW]|Q?)./, { token: "invalid", next: "@pop" }],
463
+ // recover
464
+ [/./, { token: "invalid", next: "@pop" }]
465
+ // recover
466
+ ],
467
+ // non-expanded quoted string.
468
+ // qstring.<kind>.<open>.<close>
469
+ // kind = q|w|s (single quote, array, symbol)
470
+ // open = open delimiter
471
+ // close = close delimiter
472
+ qstring: [
473
+ [/\\$/, "string.$S2.escape"],
474
+ [/\\./, "string.$S2.escape"],
475
+ [
476
+ /./,
477
+ {
478
+ cases: {
479
+ "$#==$S4": { token: "string.$S2.delim", next: "@pop" },
480
+ "$#==$S3": { token: "string.$S2.delim", next: "@push" },
481
+ // nested delimiters are allowed..
482
+ "@default": "string.$S2"
483
+ }
484
+ }
485
+ ]
486
+ ],
487
+ // expanded quoted string.
488
+ // qqstring.<kind>.<open>.<close>
489
+ // kind = Q|W|x (double quote, array, command)
490
+ // open = open delimiter
491
+ // close = close delimiter
492
+ qqstring: [[/#/, "string.$S2.escape", "@interpolated"], { include: "@qstring" }],
493
+ // whitespace & comments
494
+ whitespace: [
495
+ [/[ \t\r\n]+/, ""],
496
+ [/^\s*=begin\b/, "comment", "@comment"],
497
+ [/#.*$/, "comment"]
498
+ ],
499
+ comment: [
500
+ [/[^=]+/, "comment"],
501
+ [/^\s*=begin\b/, "comment.invalid"],
502
+ // nested comment
503
+ [/^\s*=end\b.*/, "comment", "@pop"],
504
+ [/[=]/, "comment"]
505
+ ]
506
+ }
507
+ };
508
+ export {
509
+ e as conf,
510
+ t as language
511
+ };