145 lines
5.7 KiB
JavaScript
145 lines
5.7 KiB
JavaScript
|
/*---------------------------------------------------------------------------------------------
|
||
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||
|
*--------------------------------------------------------------------------------------------*/
|
||
|
'use strict';
|
||
|
export var conf = {
|
||
|
wordPattern: /(#?-?\d*\.\d\w*%?)|([@#!.:]?[\w-?]+%?)|[@#!.]/g,
|
||
|
comments: {
|
||
|
blockComment: ['/*', '*/'],
|
||
|
lineComment: '//'
|
||
|
},
|
||
|
brackets: [
|
||
|
['{', '}'],
|
||
|
['[', ']'],
|
||
|
['(', ')'],
|
||
|
],
|
||
|
autoClosingPairs: [
|
||
|
{ open: '{', close: '}', notIn: ['string', 'comment'] },
|
||
|
{ open: '[', close: ']', notIn: ['string', 'comment'] },
|
||
|
{ open: '(', close: ')', notIn: ['string', 'comment'] },
|
||
|
{ open: '"', close: '"', notIn: ['string', 'comment'] },
|
||
|
{ open: '\'', close: '\'', notIn: ['string', 'comment'] },
|
||
|
],
|
||
|
surroundingPairs: [
|
||
|
{ open: '{', close: '}' },
|
||
|
{ open: '[', close: ']' },
|
||
|
{ open: '(', close: ')' },
|
||
|
{ open: '"', close: '"' },
|
||
|
{ open: '\'', close: '\'' },
|
||
|
],
|
||
|
folding: {
|
||
|
markers: {
|
||
|
start: new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),
|
||
|
end: new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
export var language = {
|
||
|
defaultToken: '',
|
||
|
tokenPostfix: '.less',
|
||
|
identifier: '-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*',
|
||
|
identifierPlus: '-?-?([a-zA-Z:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-:.]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*',
|
||
|
brackets: [
|
||
|
{ open: '{', close: '}', token: 'delimiter.curly' },
|
||
|
{ open: '[', close: ']', token: 'delimiter.bracket' },
|
||
|
{ open: '(', close: ')', token: 'delimiter.parenthesis' },
|
||
|
{ open: '<', close: '>', token: 'delimiter.angle' }
|
||
|
],
|
||
|
tokenizer: {
|
||
|
root: [
|
||
|
{ include: '@nestedJSBegin' },
|
||
|
['[ \\t\\r\\n]+', ''],
|
||
|
{ include: '@comments' },
|
||
|
{ include: '@keyword' },
|
||
|
{ include: '@strings' },
|
||
|
{ include: '@numbers' },
|
||
|
['[*_]?[a-zA-Z\\-\\s]+(?=:.*(;|(\\\\$)))', 'attribute.name', '@attribute'],
|
||
|
['url(\\-prefix)?\\(', { token: 'tag', next: '@urldeclaration' }],
|
||
|
['[{}()\\[\\]]', '@brackets'],
|
||
|
['[,:;]', 'delimiter'],
|
||
|
['#@identifierPlus', 'tag.id'],
|
||
|
['&', 'tag'],
|
||
|
['\\.@identifierPlus(?=\\()', 'tag.class', '@attribute'],
|
||
|
['\\.@identifierPlus', 'tag.class'],
|
||
|
['@identifierPlus', 'tag'],
|
||
|
{ include: '@operators' },
|
||
|
['@(@identifier(?=[:,\\)]))', 'variable', '@attribute'],
|
||
|
['@(@identifier)', 'variable'],
|
||
|
['@', 'key', '@atRules']
|
||
|
],
|
||
|
nestedJSBegin: [
|
||
|
['``', 'delimiter.backtick'],
|
||
|
['`', { token: 'delimiter.backtick', next: '@nestedJSEnd', nextEmbedded: 'text/javascript' }],
|
||
|
],
|
||
|
nestedJSEnd: [
|
||
|
['`', { token: 'delimiter.backtick', next: '@pop', nextEmbedded: '@pop' }],
|
||
|
],
|
||
|
operators: [
|
||
|
['[<>=\\+\\-\\*\\/\\^\\|\\~]', 'operator']
|
||
|
],
|
||
|
keyword: [
|
||
|
['(@[\\s]*import|![\\s]*important|true|false|when|iscolor|isnumber|isstring|iskeyword|isurl|ispixel|ispercentage|isem|hue|saturation|lightness|alpha|lighten|darken|saturate|desaturate|fadein|fadeout|fade|spin|mix|round|ceil|floor|percentage)\\b', 'keyword']
|
||
|
],
|
||
|
urldeclaration: [
|
||
|
{ include: '@strings' },
|
||
|
['[^)\r\n]+', 'string'],
|
||
|
['\\)', { token: 'tag', next: '@pop' }],
|
||
|
],
|
||
|
attribute: [
|
||
|
{ include: '@nestedJSBegin' },
|
||
|
{ include: '@comments' },
|
||
|
{ include: '@strings' },
|
||
|
{ include: '@numbers' },
|
||
|
{ include: '@keyword' },
|
||
|
['[a-zA-Z\\-]+(?=\\()', 'attribute.value', '@attribute'],
|
||
|
['>', 'operator', '@pop'],
|
||
|
['@identifier', 'attribute.value'],
|
||
|
{ include: '@operators' },
|
||
|
['@(@identifier)', 'variable'],
|
||
|
['[)\\}]', '@brackets', '@pop'],
|
||
|
['[{}()\\[\\]>]', '@brackets'],
|
||
|
['[;]', 'delimiter', '@pop'],
|
||
|
['[,=:]', 'delimiter'],
|
||
|
['\\s', ''],
|
||
|
['.', 'attribute.value']
|
||
|
],
|
||
|
comments: [
|
||
|
['\\/\\*', 'comment', '@comment'],
|
||
|
['\\/\\/+.*', 'comment'],
|
||
|
],
|
||
|
comment: [
|
||
|
['\\*\\/', 'comment', '@pop'],
|
||
|
['.', 'comment'],
|
||
|
],
|
||
|
numbers: [
|
||
|
['(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?', { token: 'attribute.value.number', next: '@units' }],
|
||
|
['#[0-9a-fA-F_]+(?!\\w)', 'attribute.value.hex']
|
||
|
],
|
||
|
units: [
|
||
|
['(em|ex|ch|rem|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?', 'attribute.value.unit', '@pop']
|
||
|
],
|
||
|
strings: [
|
||
|
['~?"', { token: 'string.delimiter', next: '@stringsEndDoubleQuote' }],
|
||
|
['~?\'', { token: 'string.delimiter', next: '@stringsEndQuote' }]
|
||
|
],
|
||
|
stringsEndDoubleQuote: [
|
||
|
['\\\\"', 'string'],
|
||
|
['"', { token: 'string.delimiter', next: '@popall' }],
|
||
|
['.', 'string']
|
||
|
],
|
||
|
stringsEndQuote: [
|
||
|
['\\\\\'', 'string'],
|
||
|
['\'', { token: 'string.delimiter', next: '@popall' }],
|
||
|
['.', 'string']
|
||
|
],
|
||
|
atRules: [
|
||
|
{ include: '@comments' },
|
||
|
{ include: '@strings' },
|
||
|
['[()]', 'delimiter'],
|
||
|
['[\\{;]', 'delimiter', '@pop'],
|
||
|
['.', 'key']
|
||
|
]
|
||
|
}
|
||
|
};
|