@@ -143,50 +143,74 @@ export const monarchLanguageDefYAML = {
143143 // the main tokenizer for our languages
144144 tokenizer : {
145145 root : [
146+ [ / ^ # .* $ / , 'value' ] ,
147+
146148 // specification extensions
147- [ / x - [ ^ : \s ] + (? = : ) / , 'keyword' ] ,
149+ [ / ^ ( x - [ ^ : \s ] + ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
150+ [ / ^ ( x - [ ^ : \s ] + ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
148151
149152 // keywords
150- [ / ^ [ a - z A - Z _ $ ] [ \w $ ] * / , 'keyword' ] ,
153+ [ / ^ ( [ a - z A - Z _ $ ] [ \w $ ] * ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
154+ [ / ^ ( [ a - z A - Z _ $ ] [ \w $ ] * ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
151155
152156 // single-quoted keywords
153- [ / ^ \s * ' ( [ ^ ' ] * ) ' (? = : ) / , 'keyword' ] ,
157+ [
158+ / ^ ( \s * ' ) ( [ ^ ' ] * ) ( ' ) ( : ) / ,
159+ [ 'keyword' , 'keyword' , 'keyword' , { token : 'value' , next : '@values' } ] ,
160+ ] ,
161+ [ / ^ ( \s * ' ) ( [ ^ ' ] * ) ( ' ) ( : ) $ / , [ 'keyword' , 'keyword' , 'keyword' , 'value' ] ] ,
154162
155163 // double-quoted keywords
156- [ / ^ \s * " ( [ ^ " ] * ) " (? = : ) / , 'keyword' ] ,
157-
158- // keywords catch-all
159- [ / ^ \s * ( [ ^ \s : ] + ) (? = : ) / , 'keyword' ] ,
164+ [
165+ / ^ ( \s * " ) ( [ ^ " ] * ) ( " ) ( : ) / ,
166+ [ 'keyword' , 'keyword' , 'keyword' , { token : 'value' , next : '@values' } ] ,
167+ ] ,
168+ [ / ^ ( \s * " ) ( [ ^ " ] * ) ( " ) ( : ) $ / , [ 'keyword' , 'keyword' , 'keyword' , 'value' ] ] ,
160169
161170 // arrays
162171 [ / ^ \s * - \s / , 'value' , '@arrays' ] ,
163172
164173 // nested keywords
165174 [ / ^ \s { 1 , } / , '' , '@nestedKeywords' ] ,
166175
176+ // keywords catch-all
177+ [ / ^ ( \s * [ ^ \s ] + ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
178+ [ / ^ ( \s * [ ^ \s ] + ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
179+
180+ // whitespace
181+ { include : '@whitespace' } ,
182+
183+ // strings for todos
184+ [ / " ( [ ^ " \\ ] | \\ .) * $ / , 'string.invalid' ] , // non-terminated string
185+ [ / " / , 'value.string' , '@stringDoubleQuoted' ] ,
186+ [ / ' / , 'value.string' , '@stringSingleQuoted' ] ,
187+ ] ,
188+
189+ values : [
167190 // numbers
168- [ / ( : ) ( ) ( [ 0 - 9 ] + ) \b $ / , [ 'value' , '' , 'value .number'] ] ,
169- [ / ( : ) ( ) ( [ 0 - 9 ] + \. [ 0 - 9 ] + ) \s * $ / , [ 'value' , '' , 'value .number'] ] ,
191+ [ / \s * [ 0 - 9 ] + \s * $ / , 'value.number' ] ,
192+ [ / \s * [ 0 - 9 ] + ( \. [ 0 - 9 ] + ) ? \s * $ / , 'value.number' ] ,
170193
171194 // booleans
172- [ / ( : ) ( ) ( t r u e | f a l s e ) \b $ / , [ 'value' , '' , 'value .boolean'] ] ,
195+ [ / \s * ( t r u e | f a l s e ) \s * $ / , 'value.boolean' ] ,
173196
174- // unquoted values - catch-all
175- [ / ( : ) ( ) ( [ ^ \n ' " ] + ) \s * $ / , [ 'value ', '' , 'value' ] ] ,
197+ // pop state when getting to a new line
198+ [ / ^ / , ' ', '@pop' ] ,
176199
177200 // quoted values
178- [ / ( : ) ( ) ( " ) / , [ 'value' , '' , { token : 'value.string' , next : '@stringDoubleQuoted' } ] ] ,
179- [ / ( : ) ( ) ( ' ) / , [ 'value' , '' , { token : 'value.string' , next : '@stringSingleQuoted' } ] ] ,
201+ [ / \s * " / , { token : 'value.string' , next : '@stringDoubleQuoted' } ] ,
202+ [ / \s * ' / , { token : 'value.string' , next : '@stringSingleQuoted' } ] ,
180203
181- [ / : / , 'value' ] ,
204+ // unquoted values - catch-all
205+ [ / [ ^ \n ] + $ / , 'value' ] ,
182206
183- // whitespace
184- { include : '@whitespace' } ,
207+ // pop state when getting to a new line
208+ [ / ^ / , '' , '@pop' ] ,
185209
186- // strings for todos
187- [ / " ( [ ^ " \\ ] | \\ . ) * $ / , 'string.invalid' ] , // non-terminated string
188- [ / " / , 'value.string ' , '@stringDoubleQuoted ' ] ,
189- [ / ' / , 'value.string ' , '@stringSingleQuoted ' ] ,
210+ [ / : / , 'value' , '@pop' ] ,
211+
212+ [ / . + $ / , '' , '@pop ' ] ,
213+ [ / . * $ / , '' , '@pop ' ] ,
190214 ] ,
191215
192216 whitespace : [ [ / [ \t \r \n ] + / , '' ] ] ,
@@ -211,75 +235,81 @@ export const monarchLanguageDefYAML = {
211235
212236 nestedKeywords : [
213237 // specification extensions
214- [ / ( x - [ ^ : \s ] + ) (? = : ) / , 'keyword' ] ,
238+ [ / ( x - [ ^ : \s ] + ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
239+ [ / ( x - [ ^ : \s ] + ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
215240
216241 // keywords
217- [ / ( [ a - z A - Z _ $ ] [ \w $ ] * ) \s * (? = : ) / , 'keyword' ] ,
242+ [ / ( [ a - z A - Z _ $ ] [ \w $ ] * ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
243+ [ / ( [ a - z A - Z _ $ ] [ \w $ ] * ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
218244
219245 // single-quoted keywords
220- [ / ^ \s * ' ( [ ^ ' ] * ) ' (? = : ) / , 'keyword' ] ,
246+ [
247+ / ( \s * ' ) ( [ ^ ' ] * ) ( ' ) ( : ) / ,
248+ [ 'keyword' , 'keyword' , 'keyword' , { token : 'value' , next : '@values' } ] ,
249+ ] ,
250+ [ / ( \s * ' ) ( [ ^ ' ] * ) ( ' ) ( : ) $ / , [ 'keyword' , 'keyword' , 'keyword' , 'value' ] ] ,
221251
222252 // double-quoted keywords
223- [ / ^ \s * " ( [ ^ " ] * ) " (? = : ) / , 'keyword' ] ,
224-
225- // numbers
226- [ / ( : ) ( ) ( [ 0 - 9 ] + ) \b $ / , [ 'value' , '' , 'value.number' ] , '@pop' ] ,
227- [ / ( : ) ( ) ( [ 0 - 9 ] + \. [ 0 - 9 ] + ) \s * \b $ / , [ 'value' , '' , 'value.number' ] , '@pop' ] ,
228-
229- // booleans
230- [ / ( : ) ( ) ( t r u e | f a l s e ) \b $ / , [ 'value' , '' , 'value.boolean' ] , '@pop' ] ,
231-
232- // unquoted values - catch-all
233- [ / ( : ) ( ) ( [ ^ \n ' " ] + ) \s * $ / , [ 'value' , '' , 'value' ] , '@pop' ] ,
253+ [
254+ / ( \s * " ) ( [ ^ " ] * ) ( " ) ( : ) / ,
255+ [ 'keyword' , 'keyword' , 'keyword' , { token : 'value' , next : '@values' } ] ,
256+ ] ,
257+ [ / ( \s * " ) ( [ ^ " ] * ) ( " ) ( : ) $ / , [ 'keyword' , 'keyword' , 'keyword' , 'value' ] ] ,
234258
235- // quoted values
236- [ / " / , ' value.string ', '@stringDoubleQuoted' ] ,
237- [ / ' / , 'value.string ', '@stringSingleQuoted' ] ,
259+ // keywords catch-all
260+ [ / ( \s * [ ^ \s ] + ) ( : ) / , [ 'keyword' , { token : ' value', next : '@values' } ] ] ,
261+ [ / ( \s * [ ^ \s ] + ) ( : ) $ / , [ 'keyword ', 'value' ] ] ,
238262
239263 // pop state when getting to a new line
240264 [ / ^ / , '' , '@pop' ] ,
241-
242- [ / : / , 'value' , '@pop' ] ,
243-
244265 [ / .+ $ / , 'value' , '@pop' ] ,
245266 ] ,
246267
247268 arrays : [
248- /**
249- * TODO: handle cases where element of an array is a string with colon, e.g. - write:pets
250- * currently `write:` will be tokenized as keyword, which is not correct
251- * note that we still need to handle objects in arrays,
252- * so we cannot change (?=:) to (?=: ), e.g.
253- * - some_keyword:
254- * another_keyword: value
255- */
256-
257269 // specification extensions
258- [ / x - [ ^ : \s ] + (? = : ) / , 'keyword' ] ,
270+ [ / ( x - [ ^ : \s ] + ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
271+ [ / ( x - [ ^ : \s ] + ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
259272
260273 // keywords
261- [ / ( [ a - z A - Z _ $ ] [ \w $ ] * ) \s * (? = : ) / , 'keyword' ] ,
274+ [ / ( [ a - z A - Z _ $ ] [ \w $ ] * ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
275+ [ / ( [ a - z A - Z _ $ ] [ \w $ ] * ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
276+
277+ // single-quoted keywords
278+ [
279+ / ( \s * ' ) ( [ ^ ' ] * ) ( ' ) ( : ) / ,
280+ [ 'keyword' , 'keyword' , 'keyword' , { token : 'value' , next : '@values' } ] ,
281+ ] ,
282+ [ / ( \s * ' ) ( [ ^ ' ] * ) ( ' ) ( : ) $ / , [ 'keyword' , 'keyword' , 'keyword' , 'value' ] ] ,
283+
284+ // double-quoted keywords
285+ [
286+ / ( \s * " ) ( [ ^ " ] * ) ( " ) ( : ) / ,
287+ [ 'keyword' , 'keyword' , 'keyword' , { token : 'value' , next : '@values' } ] ,
288+ ] ,
289+ [ / ( \s * " ) ( [ ^ " ] * ) ( " ) ( : ) $ / , [ 'keyword' , 'keyword' , 'keyword' , 'value' ] ] ,
290+
291+ // keywords catch-all
292+ [ / ( \s * [ ^ \s ] + ) ( : ) / , [ 'keyword' , { token : 'value' , next : '@values' } ] ] ,
293+ [ / ( \s * [ ^ \s ] + ) ( : ) $ / , [ 'keyword' , 'value' ] ] ,
294+
295+ [ / ^ / , '' , '@pop' ] ,
262296
263297 // numbers
264- [ / ( : ) ( ) ( [ 0 - 9 ] + ) \b $ / , [ 'value' , '' , 'value.number' ] ] ,
265- [ / ( : ) ( ) ( [ 0 - 9 ] + \. [ 0 - 9 ] + ) \s * \b $ / , [ 'value' , '' , 'value.number' ] ] ,
266- [ / ( [ 0 - 9 ] + ) \b $ / , 'value.number' ] ,
267- [ / ( [ 0 - 9 ] + \. [ 0 - 9 ] + ) \s * \b $ / , 'value.number' ] ,
298+ [ / \s * ( [ 0 - 9 ] + ) \s * $ / , 'value.number' ] ,
299+ [ / \s * ( [ 0 - 9 ] + \. [ 0 - 9 ] + ) \s * $ / , 'value.number' ] ,
268300
269301 // booleans
270- [ / ( : ) ( ) ( t r u e | f a l s e ) \b $ / , [ 'value' , '' , 'value.boolean' ] ] ,
271- [ / ( t r u e | f a l s e ) \b $ / , 'value.boolean' ] ,
302+ [ / \s * ( t r u e | f a l s e ) \s * $ / , 'value.boolean' ] ,
272303
273304 // pop state when getting to a new line
274305 [ / ^ / , '' , '@pop' ] ,
275306
276307 // unquoted values - catch-all
277- [ / ( : ) ( ) ( [ ^ \n ' " ] + ) \s * \b $ / , [ 'value' , '' , 'value' ] ] ,
278308 [ / ( [ ^ \n ' " ] + ) \s * $ / , 'value' ] ,
279309
280310 // quoted values
281- [ / " / , 'value.string' , '@stringDoubleQuoted' ] ,
282- [ / ' / , 'value.string' , '@stringSingleQuoted' ] ,
311+ [ / \s * " / , 'value.string' , '@stringDoubleQuoted' ] ,
312+ [ / \s * ' / , 'value.string' , '@stringSingleQuoted' ] ,
283313
284314 // pop state when getting to a new line
285315 [ / ^ / , '' , '@pop' ] ,
0 commit comments