@lvce-editor/shared-process 0.15.5 → 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.
@@ -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
- index += next[0].length
123
- tokens.push({
124
- type: token,
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
- index += next[0].length
172
- tokens.push({
173
- type: token,
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
- index += next[0].length
118
- tokens.push({
119
- type: token,
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
  }
@@ -94,6 +94,10 @@
94
94
  "name": "CssSelector",
95
95
  "foreground": "#BEB558"
96
96
  },
97
+ {
98
+ "name": "CssSelectorClass",
99
+ "foreground": "#B8CA9C"
100
+ },
97
101
  {
98
102
  "name": "CssSelectorId",
99
103
  "foreground": "#BE7C81"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lvce-editor/shared-process",
3
- "version": "0.15.5",
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.5",
21
- "@lvce-editor/extension-host-helper-process": "0.15.5",
22
- "@lvce-editor/pty-host": "0.15.5",
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",