@lvce-editor/shared-process 0.15.4 → 0.15.6
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.
- package/extensions/builtin.language-basics-dart/src/tokenizeDart.js +5 -5
- package/extensions/builtin.language-basics-java/src/tokenizeJava.js +8 -2
- package/extensions/builtin.language-basics-julia/src/tokenizeJulia.js +5 -10
- package/extensions/builtin.language-basics-kotlin/src/tokenizeKotlin.js +5 -5
- package/extensions/builtin.language-basics-svelte/src/tokenizeSvelte.js +118 -0
- package/extensions/builtin.theme-slime/color-theme.json +4 -0
- package/package.json +4 -4
|
@@ -39,6 +39,8 @@ export const initialLineState = {
|
|
|
39
39
|
state: State.TopLevelContent,
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
+
export const hasArrayReturn = true
|
|
43
|
+
|
|
42
44
|
const RE_KEYWORD =
|
|
43
45
|
/^(?:abstract|as|assert|async|await|break|case|catch|class|const|continue|covariant|default|deferred|do|dynamic|else|enum|export|extends|extension|external|factory|false|final|finally|for|Function|get|hide|if|implements|import|in|interface|is|late|library|mixin|new|null|on|operator|part|required|rethrow|return|set|show|static|super|switch|sync|this|throw|true|try|typedef|var|void|while|with|yield)\b/
|
|
44
46
|
const RE_WHITESPACE = /^\s+/
|
|
@@ -119,11 +121,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
119
121
|
state
|
|
120
122
|
throw new Error('no')
|
|
121
123
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
length: next[0].length,
|
|
126
|
-
})
|
|
124
|
+
const tokenLength = next[0].length
|
|
125
|
+
index += tokenLength
|
|
126
|
+
tokens.push(token, tokenLength)
|
|
127
127
|
}
|
|
128
128
|
return {
|
|
129
129
|
state,
|
|
@@ -29,6 +29,7 @@ export const TokenType = {
|
|
|
29
29
|
KeywordThis: 12,
|
|
30
30
|
Class: 13,
|
|
31
31
|
Comment: 14,
|
|
32
|
+
FunctionName: 885,
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
export const TokenMap = {
|
|
@@ -47,6 +48,7 @@ export const TokenMap = {
|
|
|
47
48
|
[TokenType.KeywordThis]: 'KeywordThis',
|
|
48
49
|
[TokenType.Class]: 'Class',
|
|
49
50
|
[TokenType.Comment]: 'Comment',
|
|
51
|
+
[TokenType.FunctionName]: 'Function',
|
|
50
52
|
}
|
|
51
53
|
|
|
52
54
|
export const initialLineState = {
|
|
@@ -57,8 +59,8 @@ const RE_KEYWORD =
|
|
|
57
59
|
/^(?:_|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|super|switch|synchronized|this|throw|throws|transient|try|void|volatile|while)\b/
|
|
58
60
|
|
|
59
61
|
const RE_WHITESPACE = /^\s+/
|
|
60
|
-
const RE_VARIABLE_NAME = /^[a-zA-Z]+/
|
|
61
|
-
const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)
|
|
62
|
+
const RE_VARIABLE_NAME = /^[a-zA-Z\_\$]+/
|
|
63
|
+
const RE_PUNCTUATION = /^[:,;\{\}\[\]\.=\(\)>\|\-\*\+\:\<\>]/
|
|
62
64
|
const RE_QUOTE_SINGLE = /^'/
|
|
63
65
|
const RE_QUOTE_DOUBLE = /^"/
|
|
64
66
|
const RE_STRING_SINGLE_QUOTE_CONTENT = /^[^']+/
|
|
@@ -74,6 +76,7 @@ const RE_BLOCK_COMMENT_END = /^\*\//
|
|
|
74
76
|
const RE_CURLY_OPEN = /^\{/
|
|
75
77
|
const RE_ANYTHING_UNTIL_END = /^.+/s
|
|
76
78
|
const RE_SLASH = /^\//
|
|
79
|
+
const RE_FUNCTION_CALL_NAME = /^[\w]+(?=\s*(\())/
|
|
77
80
|
|
|
78
81
|
export const hasArrayReturn = true
|
|
79
82
|
|
|
@@ -129,6 +132,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
129
132
|
token = TokenType.Keyword
|
|
130
133
|
break
|
|
131
134
|
}
|
|
135
|
+
} else if ((next = part.match(RE_FUNCTION_CALL_NAME))) {
|
|
136
|
+
token = TokenType.FunctionName
|
|
137
|
+
state = State.TopLevelContent
|
|
132
138
|
} else if ((next = part.match(RE_SLASH))) {
|
|
133
139
|
if ((next = part.match(RE_BLOCK_COMMENT_START))) {
|
|
134
140
|
token = TokenType.Comment
|
|
@@ -52,6 +52,8 @@ export const initialLineState = {
|
|
|
52
52
|
state: State.TopLevelContent,
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
export const hasArrayReturn = true
|
|
56
|
+
|
|
55
57
|
const RE_KEYWORD =
|
|
56
58
|
/^(?:baremodule|begin|break|catch|ccall|const|continue|do|else|elseif|end|export|false|finally|for|function|global|if|import|in|isa|let|local|macro|module|quote|return|true|try|using|where|while)\b/
|
|
57
59
|
const RE_WHITESPACE = /^\s+/
|
|
@@ -168,19 +170,12 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
168
170
|
state
|
|
169
171
|
throw new Error('no')
|
|
170
172
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
length: next[0].length,
|
|
175
|
-
})
|
|
173
|
+
const tokenLength = next[0].length
|
|
174
|
+
index += tokenLength
|
|
175
|
+
tokens.push(token, tokenLength)
|
|
176
176
|
}
|
|
177
177
|
return {
|
|
178
178
|
state,
|
|
179
179
|
tokens,
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
|
-
|
|
183
|
-
tokenizeLine(
|
|
184
|
-
`abs(mandelbrot(complex(x, y))) < 2 ? print("*") : print(" ")`,
|
|
185
|
-
initialLineState
|
|
186
|
-
)
|
|
@@ -60,6 +60,8 @@ export const initialLineState = {
|
|
|
60
60
|
tokens: [],
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
export const hasArrayReturn = true
|
|
64
|
+
|
|
63
65
|
export const isEqualLineState = (lineStateA, lineStateB) => {
|
|
64
66
|
return lineStateA.state === lineStateB.state
|
|
65
67
|
}
|
|
@@ -114,11 +116,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
114
116
|
default:
|
|
115
117
|
throw new Error('no')
|
|
116
118
|
}
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
length: next[0].length,
|
|
121
|
-
})
|
|
119
|
+
const tokenLength = next[0].length
|
|
120
|
+
index += tokenLength
|
|
121
|
+
tokens.push(token, tokenLength)
|
|
122
122
|
}
|
|
123
123
|
return {
|
|
124
124
|
state,
|
|
@@ -15,6 +15,9 @@ const State = {
|
|
|
15
15
|
None: 11,
|
|
16
16
|
InsideDoubleQuoteString: 12,
|
|
17
17
|
InsideSingleQuoteString: 13,
|
|
18
|
+
InsideScriptContent: 14,
|
|
19
|
+
InsideStyleContent: 15,
|
|
20
|
+
InsideStartTagBeforeAngleBracket: 16,
|
|
18
21
|
}
|
|
19
22
|
|
|
20
23
|
export const StateMap = {}
|
|
@@ -36,6 +39,7 @@ export const TokenType = {
|
|
|
36
39
|
Error: 141,
|
|
37
40
|
PunctuationString: 11,
|
|
38
41
|
NewLine: 891,
|
|
42
|
+
Embedded: 999,
|
|
39
43
|
}
|
|
40
44
|
|
|
41
45
|
export const TokenMap = {
|
|
@@ -51,6 +55,7 @@ export const TokenMap = {
|
|
|
51
55
|
[TokenType.Punctuation]: 'Punctuation',
|
|
52
56
|
[TokenType.Error]: 'Error',
|
|
53
57
|
[TokenType.PunctuationString]: 'PunctuationString',
|
|
58
|
+
[TokenType.Embedded]: 'Embedded',
|
|
54
59
|
}
|
|
55
60
|
|
|
56
61
|
const RE_ANGLE_BRACKET_CLOSE = /^>/
|
|
@@ -85,9 +90,20 @@ const RE_TEXT = /^[^<>\n]+/
|
|
|
85
90
|
const RE_WHITESPACE = /^\s+/
|
|
86
91
|
const RE_WORD = /^[^\s]+/
|
|
87
92
|
const RE_ATTRIBUTE_VALUE_UNQUOTED = /^[^<>]+/
|
|
93
|
+
const RE_SCRIPT_CONTENT = /^..*?(?=(?:<\/script)|$)/s
|
|
94
|
+
const RE_SCRIPT_CONTENT_END = /^<\/script/
|
|
95
|
+
const RE_STYLE_CONTENT = /^..*?(?=(?:<\/(?:style|head))|$)/s
|
|
96
|
+
const RE_STYLE_CONTENT_END = /^<\/style/
|
|
97
|
+
const RE_STYLE_CONTENT_END_2 = /^<\/head/
|
|
88
98
|
|
|
89
99
|
export const initialLineState = {
|
|
90
100
|
state: State.TopLevelContent,
|
|
101
|
+
tag: '',
|
|
102
|
+
stack: [],
|
|
103
|
+
embeddedLanguage: '',
|
|
104
|
+
embeddedLanguageStart: 0,
|
|
105
|
+
embeddedLanguageEnd: 0,
|
|
106
|
+
embeddedState: undefined,
|
|
91
107
|
}
|
|
92
108
|
|
|
93
109
|
/**
|
|
@@ -102,6 +118,44 @@ export const isLineStateEqual = (lineStateA, lineStateB) => {
|
|
|
102
118
|
|
|
103
119
|
export const hasArrayReturn = true
|
|
104
120
|
|
|
121
|
+
const getEmbeddedScriptLanguageId = () => {
|
|
122
|
+
return 'javascript'
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
const getEmbeddedStyleLanguageId = () => {
|
|
126
|
+
return 'css'
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* @param {string} tag
|
|
131
|
+
*/
|
|
132
|
+
const getEmbeddedLangageId = (tag) => {
|
|
133
|
+
switch (tag) {
|
|
134
|
+
case 'script':
|
|
135
|
+
return getEmbeddedScriptLanguageId()
|
|
136
|
+
case 'style':
|
|
137
|
+
return getEmbeddedStyleLanguageId()
|
|
138
|
+
default:
|
|
139
|
+
return ''
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
*
|
|
145
|
+
* @param {string} tag
|
|
146
|
+
* @returns
|
|
147
|
+
*/
|
|
148
|
+
const getEmbeddedContentState = (tag) => {
|
|
149
|
+
switch (tag) {
|
|
150
|
+
case 'script':
|
|
151
|
+
return State.InsideScriptContent
|
|
152
|
+
case 'style':
|
|
153
|
+
return State.InsideStyleContent
|
|
154
|
+
default:
|
|
155
|
+
return State.TopLevelContent
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
105
159
|
/**
|
|
106
160
|
*
|
|
107
161
|
* @param {string} line
|
|
@@ -114,6 +168,10 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
114
168
|
let tokens = []
|
|
115
169
|
let token = TokenType.None
|
|
116
170
|
let state = lineState.state
|
|
171
|
+
let tag = lineState.tag
|
|
172
|
+
let embeddedLanguage = lineState.embeddedLanguage
|
|
173
|
+
let embeddedLanguageStart = lineState.embeddedLanguageStart
|
|
174
|
+
let embeddedLanguageEnd = lineState.embeddedLanguageEnd
|
|
117
175
|
while (index < line.length) {
|
|
118
176
|
const part = line.slice(index)
|
|
119
177
|
switch (state) {
|
|
@@ -139,6 +197,7 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
139
197
|
if ((next = part.match(RE_TAGNAME))) {
|
|
140
198
|
token = TokenType.TagName
|
|
141
199
|
state = State.InsideOpeningTag
|
|
200
|
+
tag = next[0]
|
|
142
201
|
} else if ((next = part.match(RE_SLASH))) {
|
|
143
202
|
token = TokenType.PunctuationTag
|
|
144
203
|
state = State.AfterClosingTagAngleBrackets
|
|
@@ -157,6 +216,12 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
157
216
|
if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
|
|
158
217
|
token = TokenType.PunctuationTag
|
|
159
218
|
state = State.TopLevelContent
|
|
219
|
+
const embeddedLanguageId = getEmbeddedLangageId(tag)
|
|
220
|
+
if (embeddedLanguageId) {
|
|
221
|
+
state = getEmbeddedContentState(tag)
|
|
222
|
+
embeddedLanguage = embeddedLanguageId
|
|
223
|
+
embeddedLanguageStart = index + next[0].length
|
|
224
|
+
}
|
|
160
225
|
} else if ((next = part.match(RE_EXCLAMATION_MARK))) {
|
|
161
226
|
token = TokenType.PunctuationTag
|
|
162
227
|
state = State.InsideOpeningTag
|
|
@@ -207,6 +272,12 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
207
272
|
} else if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
|
|
208
273
|
token = TokenType.PunctuationTag
|
|
209
274
|
state = State.TopLevelContent
|
|
275
|
+
const embeddedLanguageId = getEmbeddedLangageId(tag)
|
|
276
|
+
if (embeddedLanguageId) {
|
|
277
|
+
state = getEmbeddedContentState(tag)
|
|
278
|
+
embeddedLanguage = embeddedLanguageId
|
|
279
|
+
embeddedLanguageStart = index + next[0].length
|
|
280
|
+
}
|
|
210
281
|
} else if ((next = part.match(RE_TAG_TEXT))) {
|
|
211
282
|
token = TokenType.Text
|
|
212
283
|
state = State.TopLevelContent
|
|
@@ -219,6 +290,12 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
219
290
|
if ((next = part.match(RE_ANGLE_BRACKET_CLOSE))) {
|
|
220
291
|
token = TokenType.PunctuationTag
|
|
221
292
|
state = State.TopLevelContent
|
|
293
|
+
const embeddedLanguageId = getEmbeddedLangageId(tag)
|
|
294
|
+
if (embeddedLanguageId) {
|
|
295
|
+
state = getEmbeddedContentState(tag)
|
|
296
|
+
embeddedLanguage = embeddedLanguageId
|
|
297
|
+
embeddedLanguageStart = index + next[0].length
|
|
298
|
+
}
|
|
222
299
|
} else if ((next = part.match(RE_EQUAL_SIGN))) {
|
|
223
300
|
token = TokenType.Punctuation
|
|
224
301
|
state = State.AfterAttributeEqualSign
|
|
@@ -295,6 +372,43 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
295
372
|
throw new Error('no')
|
|
296
373
|
}
|
|
297
374
|
break
|
|
375
|
+
case State.InsideScriptContent:
|
|
376
|
+
if ((next = part.match(RE_SCRIPT_CONTENT_END))) {
|
|
377
|
+
token = TokenType.TagName
|
|
378
|
+
state = State.AfterClosingTagName
|
|
379
|
+
tokens.push(TokenType.PunctuationTag, 2, TokenType.TagName, 6)
|
|
380
|
+
index += next[0].length
|
|
381
|
+
embeddedLanguage = ''
|
|
382
|
+
continue
|
|
383
|
+
} else if ((next = part.match(RE_SCRIPT_CONTENT))) {
|
|
384
|
+
token = TokenType.Embedded
|
|
385
|
+
state = State.InsideScriptContent
|
|
386
|
+
embeddedLanguageStart = index
|
|
387
|
+
embeddedLanguageEnd = index + next[0].length
|
|
388
|
+
} else {
|
|
389
|
+
part
|
|
390
|
+
throw new Error('no')
|
|
391
|
+
}
|
|
392
|
+
break
|
|
393
|
+
case State.InsideStyleContent:
|
|
394
|
+
if ((next = part.match(RE_STYLE_CONTENT_END) || part.match(RE_STYLE_CONTENT_END_2))) {
|
|
395
|
+
token = TokenType.TagName
|
|
396
|
+
state = State.AfterClosingTagName
|
|
397
|
+
tokens.push(TokenType.PunctuationTag, 2, TokenType.TagName, next[0].length - 1)
|
|
398
|
+
embeddedLanguageEnd = index
|
|
399
|
+
index += next[0].length
|
|
400
|
+
embeddedLanguage = ''
|
|
401
|
+
continue
|
|
402
|
+
} else if ((next = part.match(RE_STYLE_CONTENT))) {
|
|
403
|
+
token = TokenType.Embedded
|
|
404
|
+
state = State.InsideStyleContent
|
|
405
|
+
embeddedLanguageStart = index
|
|
406
|
+
embeddedLanguageEnd = index + next[0].length
|
|
407
|
+
} else {
|
|
408
|
+
part
|
|
409
|
+
throw new Error('no')
|
|
410
|
+
}
|
|
411
|
+
break
|
|
298
412
|
default:
|
|
299
413
|
state
|
|
300
414
|
throw new Error('no')
|
|
@@ -306,5 +420,9 @@ export const tokenizeLine = (line, lineState) => {
|
|
|
306
420
|
return {
|
|
307
421
|
state,
|
|
308
422
|
tokens,
|
|
423
|
+
tag,
|
|
424
|
+
embeddedLanguage,
|
|
425
|
+
embeddedLanguageStart,
|
|
426
|
+
embeddedLanguageEnd,
|
|
309
427
|
}
|
|
310
428
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lvce-editor/shared-process",
|
|
3
|
-
"version": "0.15.
|
|
3
|
+
"version": "0.15.6",
|
|
4
4
|
"description": "Utility package for @lvce-editor/server",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@babel/code-frame": "^7.21.4",
|
|
20
|
-
"@lvce-editor/extension-host": "0.15.
|
|
21
|
-
"@lvce-editor/extension-host-helper-process": "0.15.
|
|
22
|
-
"@lvce-editor/pty-host": "0.15.
|
|
20
|
+
"@lvce-editor/extension-host": "0.15.6",
|
|
21
|
+
"@lvce-editor/extension-host-helper-process": "0.15.6",
|
|
22
|
+
"@lvce-editor/pty-host": "0.15.6",
|
|
23
23
|
"debug": "^4.3.4",
|
|
24
24
|
"execa": "^7.1.1",
|
|
25
25
|
"exit-hook": "^3.2.0",
|