171 lines
5.3 KiB
JavaScript
171 lines
5.3 KiB
JavaScript
/*!-----------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Version: 0.36.1(6c56744c3419458f0dd48864520b759d1a3a1ca8)
|
|
* Released under the MIT license
|
|
* https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
|
|
*-----------------------------------------------------------------------------*/
|
|
|
|
// src/basic-languages/less/less.ts
|
|
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.*\\*\\/")
|
|
}
|
|
}
|
|
};
|
|
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|fr|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"]
|
|
]
|
|
}
|
|
};
|
|
export {
|
|
conf,
|
|
language
|
|
};
|