123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339 |
- /*---------------------------------------------------------------------------------------------
- * Copyright (c) Microsoft Corporation. All rights reserved.
- * Licensed under the MIT License. See License.txt in the project root for license information.
- *--------------------------------------------------------------------------------------------*/
- "use strict";
- import LanguageConfiguration = monaco.languages.LanguageConfiguration;
- import IMonarchLanguage = monaco.languages.IMonarchLanguage;
- export const conf: LanguageConfiguration = {
- comments: {
- lineComment: "//",
- blockComment: ["/*", "*/"]
- },
- brackets: [
- ["{", "}"],
- ["[", "]"],
- ["(", ")"]
- ],
- autoClosingPairs: [
- { open: "{", close: "}" },
- { open: "[", close: "]" },
- { open: "(", close: ")" },
- { open: "'", close: "'", notIn: ["string", "comment"] },
- { open: '"', close: '"', notIn: ["string"] },
- { open: "`", close: "`", notIn: ["string", "comment"] },
- { open: "/**", close: " */", notIn: ["string"] }
- ],
- surroundingPairs: [
- { open: "{", close: "}" },
- { open: "[", close: "]" },
- { open: "(", close: ")" },
- { open: "<", close: ">" },
- { open: "'", close: "'" },
- { open: "(", close: ")" },
- { open: '"', close: '"' },
- { open: "`", close: "`" }
- ],
- folding: {
- markers: {
- start: /^\s*\s*#?region\b/,
- end: /^\s*\s*#?endregion\b/
- }
- }
- };
- export const language = <IMonarchLanguage>{
- defaultToken: "invalid",
- tokenPostfix: ".dart",
- keywords: [
- "abstract",
- "dynamic",
- "implements",
- "show",
- "as",
- "else",
- "import",
- "static",
- "assert",
- "enum",
- "in",
- "super",
- "async",
- "export",
- "interface",
- "switch",
- "await",
- "extends",
- "is",
- "sync",
- "break",
- "external",
- "library",
- "this",
- "case",
- "factory",
- "mixin",
- "throw",
- "catch",
- "false",
- "new",
- "true",
- "class",
- "final",
- "null",
- "try",
- "const",
- "finally",
- "on",
- "typedef",
- "continue",
- "for",
- "operator",
- "var",
- "covariant",
- "Function",
- "part",
- "void",
- "default",
- "get",
- "rethrow",
- "while",
- "deferred",
- "hide",
- "return",
- "with",
- "do",
- "if",
- "set",
- "yield"
- ],
- typeKeywords: ["int", "double", "String", "bool"],
- operators: [
- "+",
- "-",
- "*",
- "/",
- "~/",
- "%",
- "++",
- "--",
- "==",
- "!=",
- ">",
- "<",
- ">=",
- "<=",
- "=",
- "-=",
- "/=",
- "%=",
- ">>=",
- "^=",
- "+=",
- "*=",
- "~/=",
- "<<=",
- "&=",
- "!=",
- "||",
- "&&",
- "&",
- "|",
- "^",
- "~",
- "<<",
- ">>",
- "!",
- ">>>",
- "??",
- "?",
- ":",
- "|="
- ],
- // we include these common regular expressions
- symbols: /[=><!~?:&|+\-*\/\^%]+/,
- escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
- digits: /\d+(_+\d+)*/,
- octaldigits: /[0-7]+(_+[0-7]+)*/,
- binarydigits: /[0-1]+(_+[0-1]+)*/,
- hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,
- regexpctl: /[(){}\[\]\$\^|\-*+?\.]/,
- regexpesc: /\\(?:[bBdDfnrstvwWn0\\\/]|@regexpctl|c[A-Z]|x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4})/,
- // The main tokenizer for our languages
- tokenizer: {
- root: [[/[{}]/, "delimiter.bracket"], { include: "common" }],
- common: [
- // identifiers and keywords
- [
- /[a-z_$][\w$]*/,
- {
- cases: {
- "@typeKeywords": "keyword",
- "@keywords": "keyword",
- "@default": "identifier"
- }
- }
- ],
- [
- /(?<![a-zA-Z0-9_$])([_$]*[A-Z][a-zA-Z0-9_$]*|bool\\b|num\\b|int\\b|double\\b|dynamic\\b)/,
- "type.identifier"
- ], // to show class names nicely
- // [/[A-Z][\w\$]*/, 'identifier'],
- // whitespace
- { include: "@whitespace" },
- // regular expression: ensure it is terminated before beginning (otherwise it is an opeator)
- [
- /\/(?=([^\\\/]|\\.)+\/([gimsuy]*)(\s*)(\.|;|,|\)|\]|\}|$))/,
- { token: "regexp", bracket: "@open", next: "@regexp" }
- ],
- // @ annotations.
- [/@[a-zA-Z]+/, "annotation"],
- // variable
- // delimiters and operators
- [/[()\[\]]/, "@brackets"],
- [/[<>](?!@symbols)/, "@brackets"],
- [/!(?=([^=]|$))/, "delimiter"],
- [
- /@symbols/,
- {
- cases: {
- "@operators": "delimiter",
- "@default": ""
- }
- }
- ],
- // numbers
- [/(@digits)[eE]([\-+]?(@digits))?/, "number.float"],
- [/(@digits)\.(@digits)([eE][\-+]?(@digits))?/, "number.float"],
- [/0[xX](@hexdigits)n?/, "number.hex"],
- [/0[oO]?(@octaldigits)n?/, "number.octal"],
- [/0[bB](@binarydigits)n?/, "number.binary"],
- [/(@digits)n?/, "number"],
- // delimiter: after number because of .\d floats
- [/[;,.]/, "delimiter"],
- // strings
- [/"([^"\\]|\\.)*$/, "string.invalid"], // non-teminated string
- [/'([^'\\]|\\.)*$/, "string.invalid"], // non-teminated string
- [/"/, "string", "@string_double"],
- [/'/, "string", "@string_single"],
- [/`/, "string", "@string_backtick"]
- // [/[a-zA-Z]+/, "variable"]
- ],
- whitespace: [
- [/[ \t\r\n]+/, ""],
- [/\/\*\*(?!\/)/, "comment.doc", "@jsdoc"],
- [/\/\*/, "comment", "@comment"],
- [/\/\/.*$/, "comment"]
- ],
- comment: [
- [/[^\/*]+/, "comment"],
- [/\*\//, "comment", "@pop"],
- [/[\/*]/, "comment"]
- ],
- jsdoc: [
- [/[^\/*]+/, "comment.doc"],
- [/\*\//, "comment.doc", "@pop"],
- [/[\/*]/, "comment.doc"]
- ],
- // We match regular expression quite precisely
- regexp: [
- [
- /(\{)(\d+(?:,\d*)?)(\})/,
- [
- "regexp.escape.control",
- "regexp.escape.control",
- "regexp.escape.control"
- ]
- ],
- [
- /(\[)(\^?)(?=(?:[^\]\\\/]|\\.)+)/,
- [
- "regexp.escape.control",
- { token: "regexp.escape.control", next: "@regexrange" }
- ]
- ],
- [
- /(\()(\?:|\?=|\?!)/,
- ["regexp.escape.control", "regexp.escape.control"]
- ],
- [/[()]/, "regexp.escape.control"],
- [/@regexpctl/, "regexp.escape.control"],
- [/[^\\\/]/, "regexp"],
- [/@regexpesc/, "regexp.escape"],
- [/\\\./, "regexp.invalid"],
- [
- /(\/)([gimsuy]*)/,
- [
- { token: "regexp", bracket: "@close", next: "@pop" },
- "keyword.other"
- ]
- ]
- ],
- regexrange: [
- [/-/, "regexp.escape.control"],
- [/\^/, "regexp.invalid"],
- [/@regexpesc/, "regexp.escape"],
- [/[^\]]/, "regexp"],
- [
- /\]/,
- {
- token: "regexp.escape.control",
- next: "@pop",
- bracket: "@close"
- }
- ]
- ],
- string_double: [
- [/\$\{/, { token: "delimiter.bracket", next: "@bracketCounting" }],
- [/[^\\"]+/, "string"],
- [/@escapes/, "string.escape"],
- [/\\./, "string.escape.invalid"],
- [/"/, "string", "@pop"]
- ],
- string_single: [
- [/[^\\']+/, "string"],
- [/@escapes/, "string.escape"],
- [/\\./, "string.escape.invalid"],
- [/'/, "string", "@pop"]
- ],
- string_backtick: [
- [/\$\{/, { token: "delimiter.bracket", next: "@bracketCounting" }],
- [/[^\\`$]+/, "string"],
- [/@escapes/, "string.escape"],
- [/\\./, "string.escape.invalid"],
- [/`/, "string", "@pop"]
- ],
- bracketCounting: [
- [/\{/, "delimiter.bracket", "@bracketCounting"],
- [/\}/, "delimiter.bracket", "@pop"],
- { include: "common" }
- ]
- }
- };
|