@lvce-editor/shared-process 0.11.12 → 0.12.1

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 (115) hide show
  1. package/config/defaultKeyBindings.json +5 -0
  2. package/config/defaultSettings.json +4 -0
  3. package/config/fileMap.json +1 -2
  4. package/extensions/builtin.language-basics-css/README.md +2 -0
  5. package/extensions/builtin.language-basics-css/src/tokenizeCss.js +7 -0
  6. package/extensions/builtin.language-basics-dotenv/extension.json +7 -1
  7. package/extensions/builtin.language-basics-graphql/extension.json +1 -1
  8. package/extensions/builtin.language-basics-graphql/src/tokenizeGraphql.js +408 -4
  9. package/extensions/builtin.language-basics-html/src/tokenizeHtml.js +99 -4
  10. package/extensions/builtin.language-basics-javascript/src/tokenizeJavaScript.js +61 -2
  11. package/extensions/builtin.language-basics-json/extension.json +6 -1
  12. package/extensions/builtin.language-basics-json/src/tokenizeJson.js +27 -0
  13. package/extensions/builtin.language-basics-jsx/README.md +14 -0
  14. package/extensions/builtin.language-basics-jsx/extension.json +13 -0
  15. package/extensions/builtin.language-basics-jsx/src/tokenizeJsx.js +648 -0
  16. package/extensions/builtin.language-basics-julia/src/tokenizeJulia.js +52 -1
  17. package/extensions/builtin.language-basics-markdown/src/tokenizeMarkdown.js +105 -2
  18. package/extensions/builtin.language-basics-mdx/README.md +14 -0
  19. package/extensions/builtin.language-basics-mdx/extension.json +12 -0
  20. package/extensions/builtin.language-basics-mdx/src/tokenizeMdx.js +395 -0
  21. package/extensions/builtin.language-basics-shellscript/src/tokenizeShellScript.js +38 -15
  22. package/extensions/builtin.language-basics-toml/src/tokenizeToml.js +29 -1
  23. package/extensions/builtin.language-basics-typescript/extension.json +1 -1
  24. package/extensions/builtin.language-basics-typescript/src/tokenizeTypeScript.js +177 -11
  25. package/extensions/builtin.language-basics-vue/README.md +14 -0
  26. package/extensions/builtin.language-basics-vue/extension.json +13 -0
  27. package/extensions/builtin.language-basics-vue/src/tokenizeVue.js +327 -0
  28. package/extensions/builtin.language-basics-xml/extension.json +3 -2
  29. package/extensions/builtin.language-basics-xml/src/tokenizeXml.js +26 -3
  30. package/extensions/builtin.language-basics-yaml/src/tokenizeYaml.js +9 -2
  31. package/extensions/builtin.theme-atom-one-dark/color-theme.json +20 -0
  32. package/extensions/builtin.theme-ayu/color-theme.json +10 -1
  33. package/extensions/builtin.theme-cobalt2/color-theme.json +20 -0
  34. package/extensions/builtin.theme-gruvbox/color-theme.json +20 -0
  35. package/extensions/builtin.theme-noctis-uva/color-theme.json +20 -0
  36. package/extensions/builtin.theme-palenight/color-theme.json +8 -0
  37. package/extensions/builtin.theme-slime/color-theme.json +16 -0
  38. package/extensions/builtin.vscode-icons/icon-theme.json +40 -2
  39. package/extensions/builtin.vscode-icons/icons/file_type_bazel_ignore.svg +1 -0
  40. package/extensions/builtin.vscode-icons/icons/file_type_bazel_version.svg +1 -0
  41. package/extensions/builtin.vscode-icons/icons/file_type_eleventy.svg +1 -0
  42. package/extensions/builtin.vscode-icons/icons/file_type_eleventy2.svg +1 -0
  43. package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy.svg +1 -0
  44. package/extensions/builtin.vscode-icons/icons/file_type_light_eleventy2.svg +1 -0
  45. package/extensions/builtin.vscode-icons/icons/file_type_light_rome.svg +1 -0
  46. package/extensions/builtin.vscode-icons/icons/file_type_light_tree.svg +1 -0
  47. package/extensions/builtin.vscode-icons/icons/file_type_mondoo.svg +1 -0
  48. package/extensions/builtin.vscode-icons/icons/file_type_nuxt.svg +1 -1
  49. package/extensions/builtin.vscode-icons/icons/file_type_rome.svg +1 -0
  50. package/extensions/builtin.vscode-icons/icons/file_type_sapphire_framework_cli.svg +1 -0
  51. package/extensions/builtin.vscode-icons/icons/file_type_shellcheck.svg +91 -0
  52. package/extensions/builtin.vscode-icons/icons/file_type_shuttle.svg +1 -0
  53. package/extensions/builtin.vscode-icons/icons/file_type_tree.svg +1 -0
  54. package/extensions/builtin.vscode-icons/icons/folder_type_nuxt.svg +1 -1
  55. package/extensions/builtin.vscode-icons/icons/folder_type_nuxt_opened.svg +1 -1
  56. package/package.json +9 -8
  57. package/src/parts/CleanStack/CleanStack.js +5 -0
  58. package/src/parts/Cli/Cli.js +5 -4
  59. package/src/parts/CliCommandType/CliCommandType.js +10 -0
  60. package/src/parts/CliInstall/CliInstall.js +3 -2
  61. package/src/parts/CliLink/CliLink.js +3 -2
  62. package/src/parts/CliList/CliList.js +3 -1
  63. package/src/parts/ClipBoard/ClipBoard.js +3 -2
  64. package/src/parts/ClipBoard/ClipBoardGnome.js +15 -31
  65. package/src/parts/CommandNotFoundError/CommandNotFoundError.js +9 -0
  66. package/src/parts/DesktopType/DesktopType.js +3 -0
  67. package/src/parts/Download/Download.js +1 -1
  68. package/src/parts/DownloadAndExtract/DownloadAndExtract.js +2 -2
  69. package/src/parts/Error/FileSystemError.js +1 -1
  70. package/src/parts/ErrorCodes/ErrorCodes.js +2 -0
  71. package/src/parts/ErrorHandling/ErrorHandling.js +4 -3
  72. package/src/parts/ExecCommand/ExecCommand.js +25 -0
  73. package/src/parts/ExecPromise/ExecPromise.js +4 -0
  74. package/src/parts/ExitCode/ExitCode.js +5 -0
  75. package/src/parts/ExportStatic/ExportStatic.js +2 -2
  76. package/src/parts/ExtensionHost/ExtensionHost.ipc.js +0 -1
  77. package/src/parts/ExtensionHost/ExtensionHost.js +1 -1
  78. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithChildProcess.js +3 -8
  79. package/src/parts/ExtensionHostIpc/ExtensionHostIpcWithWorker.js +3 -7
  80. package/src/parts/ExtensionInstallFromFile/ExtensionInstallFromFile.js +2 -5
  81. package/src/parts/ExtensionInstallFromGitHub/ExtensionInstallFromGitHub.js +1 -1
  82. package/src/parts/ExtensionInstallFromUrl/ExtensionInstallFromUrl.js +3 -3
  83. package/src/parts/ExtensionLink/ExtensionLink.js +19 -0
  84. package/src/parts/ExtensionManagement/ExtensionManagement.ipc.js +1 -1
  85. package/src/parts/ExtensionManagement/ExtensionManagementColorTheme.js +3 -2
  86. package/src/parts/ExtensionManagement/ExtensionManagementLanguages.js +7 -14
  87. package/src/parts/ExtensionManifest/ExtensionManifest.js +14 -4
  88. package/src/parts/ExtractZip/ExtractZip.js +1 -1
  89. package/src/parts/FileSystem/FileSystem.js +0 -1
  90. package/src/parts/GetResponse/GetResponse.js +2 -1
  91. package/src/parts/GitLsFiles/GitLsFiles.ipc.js +2 -0
  92. package/src/parts/GitLsFiles/GitLsFiles.js +21 -5
  93. package/src/parts/Hash/Hash.js +7 -0
  94. package/src/parts/IpcChild/IpcChild.js +6 -0
  95. package/src/parts/IpcChildModule/IpcChildModule.js +12 -0
  96. package/src/parts/IpcChildType/IpcChildType.js +13 -0
  97. package/src/parts/IpcChildWithNodeForkedProcess/IpcChildWithNodeForkedProcess.js +19 -0
  98. package/src/parts/IpcChildWithNodeWorker/IpcChildWithNodeWorker.js +27 -0
  99. package/src/parts/MergeStacks/MergeStacks.js +19 -0
  100. package/src/parts/ModuleMap/ModuleMap.js +4 -1
  101. package/src/parts/NormalizeErrorLine/NormalizeErrorLine.js +9 -0
  102. package/src/parts/OutputChannel/OutputChannel.ipc.js +1 -1
  103. package/src/parts/ParentIpc/ParentIpc.js +6 -10
  104. package/src/parts/ParseInt/ParseInt.js +3 -0
  105. package/src/parts/Platform/Platform.js +16 -21
  106. package/src/parts/Preferences/Preferences.js +2 -1
  107. package/src/parts/PrettyError/PrettyError.js +12 -23
  108. package/src/parts/PrintPrettyError/PrintPrettyError.js +3 -0
  109. package/src/parts/Process/Process.js +2 -2
  110. package/src/parts/ProtocolType/ProtocolType.js +3 -0
  111. package/src/parts/RecentlyOpened/RecentlyOpened.js +1 -1
  112. package/src/parts/Stats/Stats.js +8 -11
  113. package/src/parts/SymLink/SymLink.js +2 -14
  114. package/src/parts/TextDocument/TextDocument.js +3 -1
  115. package/src/parts/VError/VError.js +5 -22
@@ -0,0 +1,327 @@
1
+ /**
2
+ * @enum number
3
+ */
4
+ const State = {
5
+ TopLevelContent: 1,
6
+ AfterOpeningAngleBracket: 2,
7
+ InsideOpeningTag: 3,
8
+ InsideOpeningTagAndHasSeenWhitespace: 4,
9
+ AfterClosingTagAngleBrackets: 5,
10
+ AfterClosingTagName: 6,
11
+ AfterAttributeName: 7,
12
+ AfterAttributeEqualSign: 8,
13
+ InsideAttributeDoubleQuote: 9,
14
+ InsideBlockComment: 10,
15
+ None: 11,
16
+ InsideDoubleQuoteString: 12,
17
+ InsideSingleQuoteString: 13,
18
+ }
19
+
20
+ export const StateMap = {}
21
+
22
+ /**
23
+ * @enum number
24
+ */
25
+ export const TokenType = {
26
+ None: 99999999,
27
+ Numeric: 30,
28
+ String: 50,
29
+ Whitespace: 0,
30
+ Comment: 60,
31
+ Text: 117,
32
+ PunctuationTag: 228,
33
+ TagName: 118,
34
+ AttributeName: 119,
35
+ Punctuation: 10,
36
+ Error: 141,
37
+ PunctuationString: 11,
38
+ NewLine: 891,
39
+ }
40
+
41
+ export const TokenMap = {
42
+ [TokenType.None]: 'None',
43
+ [TokenType.Numeric]: 'Numeric',
44
+ [TokenType.String]: 'String',
45
+ [TokenType.Whitespace]: 'Whitespace',
46
+ [TokenType.Comment]: 'Comment',
47
+ [TokenType.Text]: 'Text',
48
+ [TokenType.PunctuationTag]: 'PunctuationTag',
49
+ [TokenType.TagName]: 'TagName',
50
+ [TokenType.AttributeName]: 'AttributeName',
51
+ [TokenType.Punctuation]: 'Punctuation',
52
+ [TokenType.Error]: 'Error',
53
+ [TokenType.PunctuationString]: 'PunctuationString',
54
+ }
55
+
56
+ const RE_ANGLE_BRACKET_CLOSE = /^>/
57
+ const RE_ANGLE_BRACKET_ONLY = /^</
58
+ const RE_ANGLE_BRACKET_OPEN = /^</
59
+ const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?![\s!])/
60
+ const RE_ANY_TEXT = /^[^\n]+/
61
+ const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-\:]+/
62
+ const RE_BLOCK_COMMENT_CONTENT_1 = /^.+?(?=-->)/s
63
+ const RE_BLOCK_COMMENT_CONTENT_2 = /^.+$/s
64
+ const RE_BLOCK_COMMENT_END = /^-->/
65
+ const RE_BLOCK_COMMENT_START = /^<!--/
66
+ const RE_DOCTYPE = /^<!(?=\w)/
67
+ const RE_DASH_DASH = /^\-\-/
68
+ const RE_DOUBLE_QUOTE = /^"/
69
+ const RE_EQUAL_SIGN = /^=/
70
+ const RE_EXCLAMATION_MARK = /^!/
71
+ const RE_INVALID_INSIDE_ClOSING_TAG = /^[^a-zA-Z>]/
72
+ const RE_INVALID_INSIDE_OPENING_TAG = /^[^a-zA-Z>]/
73
+ const RE_NEWLINE = /^\n/
74
+ const RE_NEWLINE_WHITESPACE = /^\n\s*/
75
+ const RE_NOT_TAGNAME = /^[^a-zA-Z\d]+/
76
+ const RE_PUNCTUATION = /^[<;'".,]/
77
+ const RE_PUNCTUATION_SELF_CLOSING = /^\/>/
78
+ const RE_SELF_CLOSING = /^\/>/
79
+ const RE_SINGLE_QUOTE = /^'/
80
+ const RE_SLASH = /^\//
81
+ const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
82
+ const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
83
+ const RE_TAG_TEXT = /^[^\s>]+/
84
+ const RE_TAGNAME = /^[!\w]+/
85
+ const RE_TEXT = /^[^<>\n]+/
86
+ const RE_WHITESPACE = /^\s+/
87
+ const RE_WORD = /^[^\s]+/
88
+ const RE_ATTRIBUTE_VALUE_UNQUOTED = /^[^<>]+/
89
+
90
+ export const initialLineState = {
91
+ state: State.TopLevelContent,
92
+ }
93
+
94
+ /**
95
+ *
96
+ * @param {any} lineStateA
97
+ * @param {any} lineStateB
98
+ * @returns
99
+ */
100
+ export const isLineStateEqual = (lineStateA, lineStateB) => {
101
+ return lineStateA.state === lineStateB.state
102
+ }
103
+
104
+ export const hasArrayReturn = true
105
+
106
+ /**
107
+ *
108
+ * @param {string} line
109
+ * @param {any} lineState
110
+ * @returns
111
+ */
112
+ export const tokenizeLine = (line, lineState) => {
113
+ let next = null
114
+ let index = 0
115
+ let tokens = []
116
+ let token = TokenType.None
117
+ let state = lineState.state
118
+ while (index < line.length) {
119
+ const part = line.slice(index)
120
+ switch (state) {
121
+ case State.TopLevelContent:
122
+ if ((next = part.match(RE_ANGLE_BRACKET_OPEN_TAG))) {
123
+ token = TokenType.PunctuationTag
124
+ state = State.AfterOpeningAngleBracket
125
+ } else if ((next = part.match(RE_TEXT))) {
126
+ token = TokenType.Text
127
+ state = State.TopLevelContent
128
+ } else if ((next = part.match(RE_BLOCK_COMMENT_START))) {
129
+ token = TokenType.Comment
130
+ state = State.InsideBlockComment
131
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
132
+ token = TokenType.Text
133
+ state = State.TopLevelContent
134
+ } else if ((next = part.match(RE_DOCTYPE))) {
135
+ token = TokenType.PunctuationTag
136
+ state = State.AfterOpeningAngleBracket
137
+ } else if ((next = part.match(RE_ANGLE_BRACKET_OPEN))) {
138
+ token = TokenType.Text
139
+ state = State.TopLevelContent
140
+ } else {
141
+ part //?
142
+ throw new Error('no')
143
+ }
144
+ break
145
+ case State.AfterOpeningAngleBracket:
146
+ if ((next = part.match(RE_TAGNAME))) {
147
+ token = TokenType.TagName
148
+ state = State.InsideOpeningTag
149
+ } else if ((next = part.match(RE_SLASH))) {
150
+ token = TokenType.PunctuationTag
151
+ state = State.AfterClosingTagAngleBrackets
152
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
153
+ token = TokenType.PunctuationTag
154
+ state = State.TopLevelContent
155
+ } else if ((next = part.match(RE_ANGLE_BRACKET_OPEN))) {
156
+ token = TokenType.PunctuationTag
157
+ state = State.AfterOpeningAngleBracket
158
+ } else if ((next = part.match(RE_ANY_TEXT))) {
159
+ token = TokenType.Text
160
+ state = State.TopLevelContent
161
+ } else {
162
+ part //?
163
+ throw new Error('no')
164
+ }
165
+ break
166
+ case State.InsideOpeningTag:
167
+ if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
168
+ token = TokenType.PunctuationTag
169
+ state = State.TopLevelContent
170
+ } else if ((next = part.match(RE_EXCLAMATION_MARK))) {
171
+ token = TokenType.PunctuationTag
172
+ state = State.InsideOpeningTag
173
+ } else if ((next = part.match(RE_WHITESPACE))) {
174
+ token = TokenType.Whitespace
175
+ state = State.InsideOpeningTagAndHasSeenWhitespace
176
+ } else if ((next = part.match(RE_DASH_DASH))) {
177
+ token = TokenType.Comment
178
+ state = State.InsideBlockComment
179
+ } else if ((next = part.match(RE_TAG_TEXT))) {
180
+ token = TokenType.Text
181
+ state = State.InsideOpeningTag
182
+ } else {
183
+ part //?
184
+ throw new Error('no')
185
+ }
186
+ break
187
+ case State.AfterClosingTagAngleBrackets:
188
+ if ((next = part.match(RE_TAGNAME))) {
189
+ token = TokenType.TagName
190
+ state = State.AfterClosingTagName
191
+ } else if ((next = part.match(RE_WHITESPACE))) {
192
+ token = TokenType.Whitespace
193
+ state = State.TopLevelContent
194
+ } else if ((next = part.match(RE_ANY_TEXT))) {
195
+ token = TokenType.Text
196
+ state = State.TopLevelContent
197
+ } else {
198
+ part //?
199
+ throw new Error('no')
200
+ }
201
+ break
202
+ case State.AfterClosingTagName:
203
+ if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
204
+ token = TokenType.PunctuationTag
205
+ state = State.TopLevelContent
206
+ } else if ((next = part.match(RE_TEXT))) {
207
+ token = TokenType.Text
208
+ state = State.TopLevelContent
209
+ } else {
210
+ throw new Error('no')
211
+ }
212
+ break
213
+ case State.InsideOpeningTagAndHasSeenWhitespace:
214
+ if ((next = part.match(RE_ATTRIBUTE_NAME))) {
215
+ token = TokenType.AttributeName
216
+ state = State.AfterAttributeName
217
+ } else if ((next = part.match(RE_SELF_CLOSING))) {
218
+ token = TokenType.PunctuationTag
219
+ state = State.TopLevelContent
220
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
221
+ token = TokenType.PunctuationTag
222
+ state = State.TopLevelContent
223
+ } else if ((next = part.match(RE_TAG_TEXT))) {
224
+ token = TokenType.Text
225
+ state = State.TopLevelContent
226
+ } else {
227
+ part //?
228
+ throw new Error('no')
229
+ }
230
+ break
231
+ case State.AfterAttributeName:
232
+ if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
233
+ token = TokenType.PunctuationTag
234
+ state = State.TopLevelContent
235
+ } else if ((next = part.match(RE_EQUAL_SIGN))) {
236
+ token = TokenType.Punctuation
237
+ state = State.AfterAttributeEqualSign
238
+ } else if ((next = part.match(RE_DOUBLE_QUOTE))) {
239
+ token = TokenType.PunctuationString
240
+ state = State.InsideDoubleQuoteString
241
+ } else if ((next = part.match(RE_SINGLE_QUOTE))) {
242
+ token = TokenType.PunctuationString
243
+ state = State.InsideSingleQuoteString
244
+ } else if ((next = part.match(RE_TAG_TEXT))) {
245
+ token = TokenType.Text
246
+ state = State.InsideOpeningTag
247
+ } else if ((next = part.match(RE_WHITESPACE))) {
248
+ token = TokenType.Whitespace
249
+ state = State.InsideOpeningTagAndHasSeenWhitespace
250
+ } else {
251
+ // TODO check quotation mark
252
+ part //?
253
+ throw new Error('no')
254
+ }
255
+ break
256
+ case State.AfterAttributeEqualSign:
257
+ if ((next = part.match(RE_DOUBLE_QUOTE))) {
258
+ token = TokenType.PunctuationString
259
+ state = State.InsideDoubleQuoteString
260
+ } else if ((next = part.match(RE_SINGLE_QUOTE))) {
261
+ token = TokenType.PunctuationString
262
+ state = State.InsideSingleQuoteString
263
+ } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
264
+ token = TokenType.PunctuationTag
265
+ state = State.TopLevelContent
266
+ } else if ((next = part.match(RE_ATTRIBUTE_VALUE_UNQUOTED))) {
267
+ token = TokenType.String
268
+ state = State.InsideOpeningTag
269
+ } else {
270
+ part
271
+ throw new Error('no')
272
+ }
273
+ break
274
+ case State.InsideDoubleQuoteString:
275
+ if ((next = part.match(RE_DOUBLE_QUOTE))) {
276
+ token = TokenType.PunctuationString
277
+ state = State.InsideOpeningTag
278
+ } else if ((next = part.match(RE_STRING_DOUBLE_QUOTE_CONTENT))) {
279
+ token = TokenType.String
280
+ state = State.InsideDoubleQuoteString
281
+ } else {
282
+ throw new Error('no')
283
+ }
284
+ break
285
+ case State.InsideSingleQuoteString:
286
+ if ((next = part.match(RE_SINGLE_QUOTE))) {
287
+ token = TokenType.PunctuationString
288
+ state = State.InsideOpeningTag
289
+ } else if ((next = part.match(RE_STRING_SINGLE_QUOTE_CONTENT))) {
290
+ token = TokenType.String
291
+ state = State.InsideSingleQuoteString
292
+ } else {
293
+ throw new Error('no')
294
+ }
295
+ break
296
+ case State.InsideBlockComment:
297
+ part
298
+ if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_1))) {
299
+ token = TokenType.Comment
300
+ state = State.InsideBlockComment
301
+ } else if ((next = part.match(RE_BLOCK_COMMENT_END))) {
302
+ token = TokenType.Comment
303
+ state = State.TopLevelContent
304
+ } else if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_2))) {
305
+ token = TokenType.Comment
306
+ state = State.InsideBlockComment
307
+ } else {
308
+ throw new Error('no')
309
+ }
310
+ break
311
+ default:
312
+ state
313
+ throw new Error('no')
314
+ }
315
+
316
+ const tokenLength = next[0].length
317
+ index += tokenLength
318
+ tokens.push(token, tokenLength)
319
+ }
320
+ if (state === State.AfterClosingTagAngleBrackets) {
321
+ state = State.TopLevelContent
322
+ }
323
+ return {
324
+ state,
325
+ tokens,
326
+ }
327
+ }
@@ -69,9 +69,10 @@
69
69
  ".xpdl",
70
70
  ".xsd",
71
71
  ".xul",
72
- ".tmtheme"
72
+ ".tmtheme",
73
+ ".mm"
73
74
  ],
74
- "fileNames": [".project"],
75
+ "fileNames": [".project", "resources.grd"],
75
76
  "tokenize": "src/tokenizeXml.js"
76
77
  }
77
78
  ]
@@ -56,9 +56,10 @@ export const TokenMap = {
56
56
  const RE_ANGLE_BRACKET_CLOSE = /^>/
57
57
  const RE_ANGLE_BRACKET_ONLY = /^</
58
58
  const RE_ANGLE_BRACKET_OPEN = /^</
59
- const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?!\s)/
59
+ const RE_ANGLE_BRACKET_OPEN_TAG = /^<(?![\s!\?])/
60
+ const RE_ANGLE_BRACKET_QUESTION_MARK = /^<\?/
60
61
  const RE_ANY_TEXT = /^[^\n]+/
61
- const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-\:]+/
62
+ const RE_ATTRIBUTE_NAME = /^[a-zA-Z\d\-\:\_]+/
62
63
  const RE_BLOCK_COMMENT_CONTENT = /^.(?:.*?)(?=-->|$)/s
63
64
  const RE_BLOCK_COMMENT_END = /^-->/
64
65
  const RE_BLOCK_COMMENT_START = /^<!--/
@@ -74,6 +75,7 @@ const RE_NOT_TAGNAME = /^[^a-zA-Z\d]+/
74
75
  const RE_PUNCTUATION = /^[<;'".,]/
75
76
  const RE_PUNCTUATION_SELF_CLOSING = /^\/>/
76
77
  const RE_SELF_CLOSING = /^\/>/
78
+ const RE_QUESTION_MARK_CLOSING = /^\?>/
77
79
  const RE_SINGLE_QUOTE = /^'/
78
80
  const RE_SLASH = /^\//
79
81
  const RE_STRING_DOUBLE_QUOTE_CONTENT = /^[^"]+/
@@ -84,6 +86,9 @@ const RE_TEXT = /^[^<>\n]+/
84
86
  const RE_WHITESPACE = /^\s+/
85
87
  const RE_WORD = /^[^\s]+/
86
88
  const RE_QUESTION_MARK_TAG_NAME = /^\?\w+/
89
+ const RE_BLOCK_COMMENT_CONTENT_1 = /^.+?(?=-->)/s
90
+ const RE_BLOCK_COMMENT_CONTENT_2 = /^.+$/s
91
+ const RE_SPECIAL_TAG = /^<!(?=\w)/
87
92
 
88
93
  export const initialLineState = {
89
94
  state: State.TopLevelContent,
@@ -123,9 +128,18 @@ export const tokenizeLine = (line, lineState) => {
123
128
  } else if ((next = part.match(RE_TEXT))) {
124
129
  token = TokenType.Text
125
130
  state = State.TopLevelContent
131
+ } else if ((next = part.match(RE_BLOCK_COMMENT_START))) {
132
+ token = TokenType.Comment
133
+ state = State.InsideBlockComment
126
134
  } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
127
135
  token = TokenType.Text
128
136
  state = State.TopLevelContent
137
+ } else if ((next = part.match(RE_SPECIAL_TAG))) {
138
+ token = TokenType.PunctuationTag
139
+ state = State.AfterOpeningAngleBracket
140
+ } else if ((next = part.match(RE_ANGLE_BRACKET_QUESTION_MARK))) {
141
+ token = TokenType.PunctuationTag
142
+ state = State.AfterOpeningAngleBracket
129
143
  } else if ((next = part.match(RE_ANGLE_BRACKET_OPEN))) {
130
144
  token = TokenType.Text
131
145
  state = State.TopLevelContent
@@ -159,6 +173,9 @@ export const tokenizeLine = (line, lineState) => {
159
173
  if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
160
174
  token = TokenType.PunctuationTag
161
175
  state = State.TopLevelContent
176
+ } else if ((next = part.match(RE_QUESTION_MARK_CLOSING))) {
177
+ token = TokenType.PunctuationTag
178
+ state = State.TopLevelContent
162
179
  } else if ((next = part.match(RE_EXCLAMATION_MARK))) {
163
180
  token = TokenType.PunctuationTag
164
181
  state = State.InsideOpeningTag
@@ -206,6 +223,9 @@ export const tokenizeLine = (line, lineState) => {
206
223
  } else if ((next = part.match(RE_SELF_CLOSING))) {
207
224
  token = TokenType.PunctuationTag
208
225
  state = State.TopLevelContent
226
+ } else if ((next = part.match(RE_QUESTION_MARK_CLOSING))) {
227
+ token = TokenType.PunctuationTag
228
+ state = State.TopLevelContent
209
229
  } else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
210
230
  token = TokenType.PunctuationTag
211
231
  state = State.TopLevelContent
@@ -280,12 +300,15 @@ export const tokenizeLine = (line, lineState) => {
280
300
  }
281
301
  break
282
302
  case State.InsideBlockComment:
283
- if ((next = part.match(RE_BLOCK_COMMENT_CONTENT))) {
303
+ if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_1))) {
284
304
  token = TokenType.Comment
285
305
  state = State.InsideBlockComment
286
306
  } else if ((next = part.match(RE_BLOCK_COMMENT_END))) {
287
307
  token = TokenType.Comment
288
308
  state = State.TopLevelContent
309
+ } else if ((next = part.match(RE_BLOCK_COMMENT_CONTENT_2))) {
310
+ token = TokenType.Comment
311
+ state = State.InsideBlockComment
289
312
  } else {
290
313
  throw new Error('no')
291
314
  }
@@ -74,7 +74,8 @@ const RE_SEMICOLON = /^;/
74
74
  const RE_COMMA = /^,/
75
75
  const RE_ANYTHING = /^.+/s
76
76
  const RE_ANYTHING_BUT_COMMENT = /^[^#]+/
77
- const RE_NUMERIC = /^(([0-9]+\.?[0-9]*)|(\.[0-9]+))(?=\s*$|\s+#|\s*[\[\]\{\}])/
77
+ const RE_NUMERIC =
78
+ /^\-?(([0-9]+\.?[0-9]*)|(\.[0-9]+))(?=\s*$|\s+#|\s*[\[\]\{\}])/
78
79
  const RE_ANYTHING_UNTIL_CLOSE_BRACE = /^[^\}]+/
79
80
  const RE_BLOCK_COMMENT_START = /^\/\*/
80
81
  const RE_BLOCK_COMMENT_END = /^\*\//
@@ -93,7 +94,7 @@ const RE_COMBINATOR = /^[\+\>\~]/
93
94
  const RE_LANGUAGE_CONSTANT = /^(?:true|false|null)(?!#)/
94
95
  const RE_COLON = /^:/
95
96
  const RE_DASH = /^\-/
96
- const RE_WORDS = /^[\w\s]*\w/
97
+ const RE_WORDS = /^[\w\s\-\.]*\w/
97
98
  const RE_MULTI_LINE_STRING_START = /^(?:\||>\-|>)/
98
99
  const RE_KEY_PRE = /^\s*(\-\s*)?/
99
100
  const RE_SINGLE_QUOTE = /^'/
@@ -251,6 +252,12 @@ export const tokenizeLine = (line, lineState) => {
251
252
  token = TokenType.Comment
252
253
  state = State.InsideLineComment
253
254
  stack.push(State.AfterPipe)
255
+ } else if ((next = part.match(RE_DASH))) {
256
+ token = TokenType.Punctuation
257
+ state = State.AfterPipe
258
+ } else if ((next = part.match(RE_ANYTHING))) {
259
+ token = TokenType.Text
260
+ state = State.AfterPipe
254
261
  } else {
255
262
  throw new Error('no')
256
263
  }
@@ -172,6 +172,26 @@
172
172
  {
173
173
  "name": "KeywordThis",
174
174
  "foreground": "#E06C75"
175
+ },
176
+ {
177
+ "name": "KeywordFunction",
178
+ "foreground": "#C678DD"
179
+ },
180
+ {
181
+ "name": "MarkdownLinkName",
182
+ "foreground": "#61AFEF"
183
+ },
184
+ {
185
+ "name": "MarkdownLinkUrl",
186
+ "foreground": "#C678DD"
187
+ },
188
+ {
189
+ "name": "MarkdownString",
190
+ "foreground": "#ABB2BF"
191
+ },
192
+ {
193
+ "name": "KeywordModifier",
194
+ "foreground": "#C678DD"
175
195
  }
176
196
  ]
177
197
  }
@@ -65,7 +65,8 @@
65
65
  "TitleBarColorInactive": "",
66
66
  "TitleBarItemHoverForeground": "rgba(0, 0, 0, 0.1)",
67
67
 
68
- "TreeItemForeground": "#8a9199"
68
+ "TreeItemForeground": "#8a9199",
69
+ "TreeItemActiveBackground": "rgba(86, 114, 143, 0.12)"
69
70
  },
70
71
  "tokenColors": [
71
72
  {
@@ -183,6 +184,14 @@
183
184
  {
184
185
  "name": "KeywordThis",
185
186
  "foreground": "#55B4D4"
187
+ },
188
+ {
189
+ "name": "MarkdownLinkName",
190
+ "foreground": "#55B4D4"
191
+ },
192
+ {
193
+ "name": "MarkdownLinkUrl",
194
+ "foreground": "#55B4D4"
186
195
  }
187
196
  ]
188
197
  }
@@ -155,6 +155,26 @@
155
155
  {
156
156
  "name": "KeywordOperator",
157
157
  "foreground": "#FF9D00"
158
+ },
159
+ {
160
+ "name": "KeywordFunction",
161
+ "foreground": "#FB94FF"
162
+ },
163
+ {
164
+ "name": "MarkdownLinkName",
165
+ "foreground": "#A5FF90"
166
+ },
167
+ {
168
+ "name": "MarkdownLinkUrl",
169
+ "foreground": "#9EFFFF"
170
+ },
171
+ {
172
+ "name": "Heading",
173
+ "foreground": "#FFC600"
174
+ },
175
+ {
176
+ "name": "KeywordNew",
177
+ "foreground": "#FF9D00"
158
178
  }
159
179
  ]
160
180
  }
@@ -192,6 +192,26 @@
192
192
  {
193
193
  "name": "KeywordThis",
194
194
  "foreground": "#D3869B"
195
+ },
196
+ {
197
+ "name": "KeywordFunction",
198
+ "foreground": "#EA6962"
199
+ },
200
+ {
201
+ "name": "MarkdownLinkName",
202
+ "foreground": "#D3869B"
203
+ },
204
+ {
205
+ "name": "MarkdownLinkUrl",
206
+ "foreground": "#A9B665"
207
+ },
208
+ {
209
+ "name": "MarkdownString",
210
+ "foreground": "#A9B665"
211
+ },
212
+ {
213
+ "name": "KeywordModifier",
214
+ "foreground": "#E78A4E"
195
215
  }
196
216
  ]
197
217
  }
@@ -179,6 +179,26 @@
179
179
  {
180
180
  "name": "KeywordThis",
181
181
  "foreground": "#E66533"
182
+ },
183
+ {
184
+ "name": "KeywordFunction",
185
+ "foreground": "#E66533"
186
+ },
187
+ {
188
+ "name": "MarkdownLinkName",
189
+ "foreground": "#16A3B6"
190
+ },
191
+ {
192
+ "name": "MarkdownLinkUrl",
193
+ "foreground": "#49D6E9"
194
+ },
195
+ {
196
+ "name": "Heading",
197
+ "foreground": "#DF769B"
198
+ },
199
+ {
200
+ "name": "KeywordImport",
201
+ "foreground": "#DF769B"
182
202
  }
183
203
  ]
184
204
  }
@@ -196,6 +196,14 @@
196
196
  {
197
197
  "name": "KeywordOperator",
198
198
  "foreground": "#89DDFF"
199
+ },
200
+ {
201
+ "name": "KeywordFunction",
202
+ "foreground": "#C792EA"
203
+ },
204
+ {
205
+ "name": "Regex",
206
+ "foreground": "#80CBC4"
199
207
  }
200
208
  ]
201
209
  }
@@ -238,6 +238,22 @@
238
238
  {
239
239
  "name": "KeywordOperator",
240
240
  "foreground": "#B4B4B4"
241
+ },
242
+ {
243
+ "name": "MarkdownString",
244
+ "foreground": "#C6DD88"
245
+ },
246
+ {
247
+ "name": "KeywordFunction",
248
+ "foreground": "#D88F56"
249
+ },
250
+ {
251
+ "name": "MarkdownLinkName",
252
+ "foreground": "#BF616A"
253
+ },
254
+ {
255
+ "name": "MarkdownLinkUrl",
256
+ "foreground": "#B2885F"
241
257
  }
242
258
  ]
243
259
  }