123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- /*!-----------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Version: 0.31.1(337587859b1c171314b40503171188b6cea6a32a)
- * Released under the MIT license
- * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt
- *-----------------------------------------------------------------------------*/
- // src/basic-languages/scss/scss.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: ".scss",
- ws: "[ \n\r\f]*",
- 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])))*",
- brackets: [
- { open: "{", close: "}", token: "delimiter.curly" },
- { open: "[", close: "]", token: "delimiter.bracket" },
- { open: "(", close: ")", token: "delimiter.parenthesis" },
- { open: "<", close: ">", token: "delimiter.angle" }
- ],
- tokenizer: {
- root: [{ include: "@selector" }],
- selector: [
- { include: "@comments" },
- { include: "@import" },
- { include: "@variabledeclaration" },
- { include: "@warndebug" },
- ["[@](include)", { token: "keyword", next: "@includedeclaration" }],
- [
- "[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",
- { token: "keyword", next: "@keyframedeclaration" }
- ],
- ["[@](page|content|font-face|-moz-document)", { token: "keyword" }],
- ["[@](charset|namespace)", { token: "keyword", next: "@declarationbody" }],
- ["[@](function)", { token: "keyword", next: "@functiondeclaration" }],
- ["[@](mixin)", { token: "keyword", next: "@mixindeclaration" }],
- ["url(\\-prefix)?\\(", { token: "meta", next: "@urldeclaration" }],
- { include: "@controlstatement" },
- { include: "@selectorname" },
- ["[&\\*]", "tag"],
- ["[>\\+,]", "delimiter"],
- ["\\[", { token: "delimiter.bracket", next: "@selectorattribute" }],
- ["{", { token: "delimiter.curly", next: "@selectorbody" }]
- ],
- selectorbody: [
- ["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))", "attribute.name", "@rulevalue"],
- { include: "@selector" },
- ["[@](extend)", { token: "keyword", next: "@extendbody" }],
- ["[@](return)", { token: "keyword", next: "@declarationbody" }],
- ["}", { token: "delimiter.curly", next: "@pop" }]
- ],
- selectorname: [
- ["#{", { token: "meta", next: "@variableinterpolation" }],
- ["(\\.|#(?=[^{])|%|(@identifier)|:)+", "tag"]
- ],
- selectorattribute: [{ include: "@term" }, ["]", { token: "delimiter.bracket", next: "@pop" }]],
- term: [
- { include: "@comments" },
- ["url(\\-prefix)?\\(", { token: "meta", next: "@urldeclaration" }],
- { include: "@functioninvocation" },
- { include: "@numbers" },
- { include: "@strings" },
- { include: "@variablereference" },
- ["(and\\b|or\\b|not\\b)", "operator"],
- { include: "@name" },
- ["([<>=\\+\\-\\*\\/\\^\\|\\~,])", "operator"],
- [",", "delimiter"],
- ["!default", "literal"],
- ["\\(", { token: "delimiter.parenthesis", next: "@parenthizedterm" }]
- ],
- rulevalue: [
- { include: "@term" },
- ["!important", "literal"],
- [";", "delimiter", "@pop"],
- ["{", { token: "delimiter.curly", switchTo: "@nestedproperty" }],
- ["(?=})", { token: "", next: "@pop" }]
- ],
- nestedproperty: [
- ["[*_]?@identifier@ws:", "attribute.name", "@rulevalue"],
- { include: "@comments" },
- ["}", { token: "delimiter.curly", next: "@pop" }]
- ],
- warndebug: [["[@](warn|debug)", { token: "keyword", next: "@declarationbody" }]],
- import: [["[@](import)", { token: "keyword", next: "@declarationbody" }]],
- variabledeclaration: [
- ["\\$@identifier@ws:", "variable.decl", "@declarationbody"]
- ],
- urldeclaration: [
- { include: "@strings" },
- ["[^)\r\n]+", "string"],
- ["\\)", { token: "meta", next: "@pop" }]
- ],
- parenthizedterm: [
- { include: "@term" },
- ["\\)", { token: "delimiter.parenthesis", next: "@pop" }]
- ],
- declarationbody: [
- { include: "@term" },
- [";", "delimiter", "@pop"],
- ["(?=})", { token: "", next: "@pop" }]
- ],
- extendbody: [
- { include: "@selectorname" },
- ["!optional", "literal"],
- [";", "delimiter", "@pop"],
- ["(?=})", { token: "", next: "@pop" }]
- ],
- variablereference: [
- ["\\$@identifier", "variable.ref"],
- ["\\.\\.\\.", "operator"],
- ["#{", { token: "meta", next: "@variableinterpolation" }]
- ],
- variableinterpolation: [
- { include: "@variablereference" },
- ["}", { token: "meta", next: "@pop" }]
- ],
- comments: [
- ["\\/\\*", "comment", "@comment"],
- ["\\/\\/+.*", "comment"]
- ],
- comment: [
- ["\\*\\/", "comment", "@pop"],
- [".", "comment"]
- ],
- name: [["@identifier", "attribute.value"]],
- numbers: [
- ["(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?", { token: "number", next: "@units" }],
- ["#[0-9a-fA-F_]+(?!\\w)", "number.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|%)?",
- "number",
- "@pop"
- ]
- ],
- functiondeclaration: [
- ["@identifier@ws\\(", { token: "meta", next: "@parameterdeclaration" }],
- ["{", { token: "delimiter.curly", switchTo: "@functionbody" }]
- ],
- mixindeclaration: [
- ["@identifier@ws\\(", { token: "meta", next: "@parameterdeclaration" }],
- ["@identifier", "meta"],
- ["{", { token: "delimiter.curly", switchTo: "@selectorbody" }]
- ],
- parameterdeclaration: [
- ["\\$@identifier@ws:", "variable.decl"],
- ["\\.\\.\\.", "operator"],
- [",", "delimiter"],
- { include: "@term" },
- ["\\)", { token: "meta", next: "@pop" }]
- ],
- includedeclaration: [
- { include: "@functioninvocation" },
- ["@identifier", "meta"],
- [";", "delimiter", "@pop"],
- ["(?=})", { token: "", next: "@pop" }],
- ["{", { token: "delimiter.curly", switchTo: "@selectorbody" }]
- ],
- keyframedeclaration: [
- ["@identifier", "meta"],
- ["{", { token: "delimiter.curly", switchTo: "@keyframebody" }]
- ],
- keyframebody: [
- { include: "@term" },
- ["{", { token: "delimiter.curly", next: "@selectorbody" }],
- ["}", { token: "delimiter.curly", next: "@pop" }]
- ],
- controlstatement: [
- [
- "[@](if|else|for|while|each|media)",
- { token: "keyword.flow", next: "@controlstatementdeclaration" }
- ]
- ],
- controlstatementdeclaration: [
- ["(in|from|through|if|to)\\b", { token: "keyword.flow" }],
- { include: "@term" },
- ["{", { token: "delimiter.curly", switchTo: "@selectorbody" }]
- ],
- functionbody: [
- ["[@](return)", { token: "keyword" }],
- { include: "@variabledeclaration" },
- { include: "@term" },
- { include: "@controlstatement" },
- [";", "delimiter"],
- ["}", { token: "delimiter.curly", next: "@pop" }]
- ],
- functioninvocation: [["@identifier\\(", { token: "meta", next: "@functionarguments" }]],
- functionarguments: [
- ["\\$@identifier@ws:", "attribute.name"],
- ["[,]", "delimiter"],
- { include: "@term" },
- ["\\)", { token: "meta", next: "@pop" }]
- ],
- strings: [
- ['~?"', { token: "string.delimiter", next: "@stringenddoublequote" }],
- ["~?'", { token: "string.delimiter", next: "@stringendquote" }]
- ],
- stringenddoublequote: [
- ["\\\\.", "string"],
- ['"', { token: "string.delimiter", next: "@pop" }],
- [".", "string"]
- ],
- stringendquote: [
- ["\\\\.", "string"],
- ["'", { token: "string.delimiter", next: "@pop" }],
- [".", "string"]
- ]
- }
- };
- export {
- conf,
- language
- };
|