UNPKG

monaco-editor

Version:
617 lines (614 loc) • 18.5 kB
import '../../editor/browser/coreCommands.js'; import '../../editor/browser/widget/codeEditor/codeEditorWidget.js'; import '../../editor/browser/widget/diffEditor/diffEditor.contribution.js'; import '../../editor/contrib/anchorSelect/browser/anchorSelect.js'; import '../../editor/contrib/bracketMatching/browser/bracketMatching.js'; import '../../editor/contrib/caretOperations/browser/caretOperations.js'; import '../../editor/contrib/caretOperations/browser/transpose.js'; import '../../editor/contrib/clipboard/browser/clipboard.js'; import '../../editor/contrib/codeAction/browser/codeActionContributions.js'; import '../../editor/contrib/codelens/browser/codelensController.js'; import '../../editor/contrib/colorPicker/browser/colorPickerContribution.js'; import '../../editor/contrib/comment/browser/comment.js'; import '../../editor/contrib/contextmenu/browser/contextmenu.js'; import '../../editor/contrib/cursorUndo/browser/cursorUndo.js'; import '../../editor/contrib/dnd/browser/dnd.js'; import '../../editor/contrib/dropOrPasteInto/browser/copyPasteContribution.js'; import '../../editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution.js'; import '../../editor/contrib/find/browser/findController.js'; import '../../editor/contrib/folding/browser/folding.js'; import '../../editor/contrib/fontZoom/browser/fontZoom.js'; import '../../editor/contrib/format/browser/formatActions.js'; import '../../editor/contrib/documentSymbols/browser/documentSymbols.js'; import '../../editor/contrib/inlineCompletions/browser/inlineCompletions.contribution.js'; import '../../editor/contrib/inlineProgress/browser/inlineProgress.js'; import '../../editor/contrib/gotoSymbol/browser/goToCommands.js'; import '../../editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition.js'; import '../../editor/contrib/gotoError/browser/gotoError.js'; import '../../editor/contrib/gpu/browser/gpuActions.js'; import '../../editor/contrib/hover/browser/hoverContribution.js'; import '../../editor/contrib/indentation/browser/indentation.js'; import '../../editor/contrib/inlayHints/browser/inlayHintsContribution.js'; import '../../editor/contrib/inPlaceReplace/browser/inPlaceReplace.js'; import '../../editor/contrib/insertFinalNewLine/browser/insertFinalNewLine.js'; import '../../editor/contrib/lineSelection/browser/lineSelection.js'; import '../../editor/contrib/linesOperations/browser/linesOperations.js'; import '../../editor/contrib/linkedEditing/browser/linkedEditing.js'; import '../../editor/contrib/links/browser/links.js'; import '../../editor/contrib/longLinesHelper/browser/longLinesHelper.js'; import '../../editor/contrib/middleScroll/browser/middleScroll.contribution.js'; import '../../editor/contrib/multicursor/browser/multicursor.js'; import '../../editor/contrib/parameterHints/browser/parameterHints.js'; import '../../editor/contrib/placeholderText/browser/placeholderText.contribution.js'; import '../../editor/contrib/rename/browser/rename.js'; import '../../editor/contrib/sectionHeaders/browser/sectionHeaders.js'; import '../../editor/contrib/semanticTokens/browser/documentSemanticTokens.js'; import '../../editor/contrib/semanticTokens/browser/viewportSemanticTokens.js'; import '../../editor/contrib/smartSelect/browser/smartSelect.js'; import '../../editor/contrib/snippet/browser/snippetController2.js'; import '../../editor/contrib/stickyScroll/browser/stickyScrollContribution.js'; import '../../editor/contrib/suggest/browser/suggestController.js'; import '../../editor/contrib/suggest/browser/suggestInlineCompletions.js'; import '../../editor/contrib/tokenization/browser/tokenization.js'; import '../../editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode.js'; import '../../editor/contrib/unicodeHighlighter/browser/unicodeHighlighter.js'; import '../../editor/contrib/unusualLineTerminators/browser/unusualLineTerminators.js'; import '../../editor/contrib/wordHighlighter/browser/wordHighlighter.js'; import '../../editor/contrib/wordOperations/browser/wordOperations.js'; import '../../editor/contrib/wordPartOperations/browser/wordPartOperations.js'; import '../../editor/contrib/readOnlyMessage/browser/contribution.js'; import '../../editor/contrib/diffEditorBreadcrumbs/browser/contribution.js'; import '../../editor/contrib/floatingMenu/browser/floatingMenu.contribution.js'; import '../../editor/common/standaloneStrings.js'; import '../../base/browser/ui/codicons/codicon/codicon.css'; import '../../base/browser/ui/codicons/codicon/codicon-modifiers.css'; import '../../editor/standalone/browser/iPadShowKeyboard/iPadShowKeyboard.js'; import '../../editor/standalone/browser/inspectTokens/inspectTokens.js'; import '../../editor/standalone/browser/quickAccess/standaloneHelpQuickAccess.js'; import '../../editor/standalone/browser/quickAccess/standaloneGotoLineQuickAccess.js'; import '../../editor/standalone/browser/quickAccess/standaloneGotoSymbolQuickAccess.js'; import '../../editor/standalone/browser/quickAccess/standaloneCommandsQuickAccess.js'; import '../../editor/standalone/browser/referenceSearch/standaloneReferenceSearch.js'; import '../../editor/standalone/browser/toggleHighContrast/toggleHighContrast.js'; import { languages } from '../../editor/editor.api2.js'; const EMPTY_ELEMENTS = [ "area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "menuitem", "meta", "param", "source", "track", "wbr" ]; const conf = { wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\$\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\s]+)/g, comments: { blockComment: ["<!--", "-->"] }, brackets: [ ["<!--", "-->"], ["<", ">"], ["{", "}"], ["(", ")"] ], autoClosingPairs: [ { open: "{", close: "}" }, { open: "[", close: "]" }, { open: "(", close: ")" }, { open: '"', close: '"' }, { open: "'", close: "'" } ], surroundingPairs: [ { open: '"', close: '"' }, { open: "'", close: "'" }, { open: "<", close: ">" } ], onEnterRules: [ { beforeText: new RegExp( `<(?!(?:${EMPTY_ELEMENTS.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, "i" ), afterText: /^<\/(\w[\w\d]*)\s*>$/i, action: { indentAction: languages.IndentAction.IndentOutdent } }, { beforeText: new RegExp( `<(?!(?:${EMPTY_ELEMENTS.join("|")}))(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, "i" ), action: { indentAction: languages.IndentAction.Indent } } ] }; const language = { defaultToken: "", tokenPostfix: "", // ignoreCase: true, // The main tokenizer for our languages tokenizer: { root: [ [/@@@@/], // text [/@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.root" }], [/<!DOCTYPE/, "metatag.html", "@doctype"], [/<!--/, "comment.html", "@comment"], [/(<)([\w\-]+)(\/>)/, ["delimiter.html", "tag.html", "delimiter.html"]], [/(<)(script)/, ["delimiter.html", { token: "tag.html", next: "@script" }]], [/(<)(style)/, ["delimiter.html", { token: "tag.html", next: "@style" }]], [/(<)([:\w\-]+)/, ["delimiter.html", { token: "tag.html", next: "@otherTag" }]], [/(<\/)([\w\-]+)/, ["delimiter.html", { token: "tag.html", next: "@otherTag" }]], [/</, "delimiter.html"], [/[ \t\r\n]+/], // whitespace [/[^<@]+/] // text ], doctype: [ [/@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.comment" }], [/[^>]+/, "metatag.content.html"], [/>/, "metatag.html", "@pop"] ], comment: [ [/@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.comment" }], [/-->/, "comment.html", "@pop"], [/[^-]+/, "comment.content.html"], [/./, "comment.content.html"] ], otherTag: [ [/@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.otherTag" }], [/\/?>/, "delimiter.html", "@pop"], [/"([^"]*)"/, "attribute.value"], [/'([^']*)'/, "attribute.value"], [/[\w\-]+/, "attribute.name"], [/=/, "delimiter"], [/[ \t\r\n]+/] // whitespace ], // -- BEGIN <script> tags handling // After <script script: [ [/@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.script" }], [/type/, "attribute.name", "@scriptAfterType"], [/"([^"]*)"/, "attribute.value"], [/'([^']*)'/, "attribute.value"], [/[\w\-]+/, "attribute.name"], [/=/, "delimiter"], [ />/, { token: "delimiter.html", next: "@scriptEmbedded.text/javascript", nextEmbedded: "text/javascript" } ], [/[ \t\r\n]+/], // whitespace [ /(<\/)(script\s*)(>)/, ["delimiter.html", "tag.html", { token: "delimiter.html", next: "@pop" }] ] ], // After <script ... type scriptAfterType: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.scriptAfterType" } ], [/=/, "delimiter", "@scriptAfterTypeEquals"], [ />/, { token: "delimiter.html", next: "@scriptEmbedded.text/javascript", nextEmbedded: "text/javascript" } ], // cover invalid e.g. <script type> [/[ \t\r\n]+/], // whitespace [/<\/script\s*>/, { token: "@rematch", next: "@pop" }] ], // After <script ... type = scriptAfterTypeEquals: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.scriptAfterTypeEquals" } ], [ /"([^"]*)"/, { token: "attribute.value", switchTo: "@scriptWithCustomType.$1" } ], [ /'([^']*)'/, { token: "attribute.value", switchTo: "@scriptWithCustomType.$1" } ], [ />/, { token: "delimiter.html", next: "@scriptEmbedded.text/javascript", nextEmbedded: "text/javascript" } ], // cover invalid e.g. <script type=> [/[ \t\r\n]+/], // whitespace [/<\/script\s*>/, { token: "@rematch", next: "@pop" }] ], // After <script ... type = $S2 scriptWithCustomType: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.scriptWithCustomType.$S2" } ], [ />/, { token: "delimiter.html", next: "@scriptEmbedded.$S2", nextEmbedded: "$S2" } ], [/"([^"]*)"/, "attribute.value"], [/'([^']*)'/, "attribute.value"], [/[\w\-]+/, "attribute.name"], [/=/, "delimiter"], [/[ \t\r\n]+/], // whitespace [/<\/script\s*>/, { token: "@rematch", next: "@pop" }] ], scriptEmbedded: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInEmbeddedState.scriptEmbedded.$S2", nextEmbedded: "@pop" } ], [/<\/script/, { token: "@rematch", next: "@pop", nextEmbedded: "@pop" }] ], // -- END <script> tags handling // -- BEGIN <style> tags handling // After <style style: [ [/@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.style" }], [/type/, "attribute.name", "@styleAfterType"], [/"([^"]*)"/, "attribute.value"], [/'([^']*)'/, "attribute.value"], [/[\w\-]+/, "attribute.name"], [/=/, "delimiter"], [ />/, { token: "delimiter.html", next: "@styleEmbedded.text/css", nextEmbedded: "text/css" } ], [/[ \t\r\n]+/], // whitespace [ /(<\/)(style\s*)(>)/, ["delimiter.html", "tag.html", { token: "delimiter.html", next: "@pop" }] ] ], // After <style ... type styleAfterType: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.styleAfterType" } ], [/=/, "delimiter", "@styleAfterTypeEquals"], [ />/, { token: "delimiter.html", next: "@styleEmbedded.text/css", nextEmbedded: "text/css" } ], // cover invalid e.g. <style type> [/[ \t\r\n]+/], // whitespace [/<\/style\s*>/, { token: "@rematch", next: "@pop" }] ], // After <style ... type = styleAfterTypeEquals: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.styleAfterTypeEquals" } ], [ /"([^"]*)"/, { token: "attribute.value", switchTo: "@styleWithCustomType.$1" } ], [ /'([^']*)'/, { token: "attribute.value", switchTo: "@styleWithCustomType.$1" } ], [ />/, { token: "delimiter.html", next: "@styleEmbedded.text/css", nextEmbedded: "text/css" } ], // cover invalid e.g. <style type=> [/[ \t\r\n]+/], // whitespace [/<\/style\s*>/, { token: "@rematch", next: "@pop" }] ], // After <style ... type = $S2 styleWithCustomType: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInSimpleState.styleWithCustomType.$S2" } ], [ />/, { token: "delimiter.html", next: "@styleEmbedded.$S2", nextEmbedded: "$S2" } ], [/"([^"]*)"/, "attribute.value"], [/'([^']*)'/, "attribute.value"], [/[\w\-]+/, "attribute.name"], [/=/, "delimiter"], [/[ \t\r\n]+/], // whitespace [/<\/style\s*>/, { token: "@rematch", next: "@pop" }] ], styleEmbedded: [ [ /@[^@]/, { token: "@rematch", switchTo: "@razorInEmbeddedState.styleEmbedded.$S2", nextEmbedded: "@pop" } ], [/<\/style/, { token: "@rematch", next: "@pop", nextEmbedded: "@pop" }] ], // -- END <style> tags handling razorInSimpleState: [ [/@\*/, "comment.cs", "@razorBlockCommentTopLevel"], [/@[{(]/, "metatag.cs", "@razorRootTopLevel"], [/(@)(\s*[\w]+)/, ["metatag.cs", { token: "identifier.cs", switchTo: "@$S2.$S3" }]], [/[})]/, { token: "metatag.cs", switchTo: "@$S2.$S3" }], [/\*@/, { token: "comment.cs", switchTo: "@$S2.$S3" }] ], razorInEmbeddedState: [ [/@\*/, "comment.cs", "@razorBlockCommentTopLevel"], [/@[{(]/, "metatag.cs", "@razorRootTopLevel"], [ /(@)(\s*[\w]+)/, [ "metatag.cs", { token: "identifier.cs", switchTo: "@$S2.$S3", nextEmbedded: "$S3" } ] ], [ /[})]/, { token: "metatag.cs", switchTo: "@$S2.$S3", nextEmbedded: "$S3" } ], [ /\*@/, { token: "comment.cs", switchTo: "@$S2.$S3", nextEmbedded: "$S3" } ] ], razorBlockCommentTopLevel: [ [/\*@/, "@rematch", "@pop"], [/[^*]+/, "comment.cs"], [/./, "comment.cs"] ], razorBlockComment: [ [/\*@/, "comment.cs", "@pop"], [/[^*]+/, "comment.cs"], [/./, "comment.cs"] ], razorRootTopLevel: [ [/\{/, "delimiter.bracket.cs", "@razorRoot"], [/\(/, "delimiter.parenthesis.cs", "@razorRoot"], [/[})]/, "@rematch", "@pop"], { include: "razorCommon" } ], razorRoot: [ [/\{/, "delimiter.bracket.cs", "@razorRoot"], [/\(/, "delimiter.parenthesis.cs", "@razorRoot"], [/\}/, "delimiter.bracket.cs", "@pop"], [/\)/, "delimiter.parenthesis.cs", "@pop"], { include: "razorCommon" } ], razorCommon: [ [ /[a-zA-Z_]\w*/, { cases: { "@razorKeywords": { token: "keyword.cs" }, "@default": "identifier.cs" } } ], // brackets [/[\[\]]/, "delimiter.array.cs"], // whitespace [/[ \t\r\n]+/], // comments [/\/\/.*$/, "comment.cs"], [/@\*/, "comment.cs", "@razorBlockComment"], // strings [/"([^"]*)"/, "string.cs"], [/'([^']*)'/, "string.cs"], // simple html [/(<)([\w\-]+)(\/>)/, ["delimiter.html", "tag.html", "delimiter.html"]], [/(<)([\w\-]+)(>)/, ["delimiter.html", "tag.html", "delimiter.html"]], [/(<\/)([\w\-]+)(>)/, ["delimiter.html", "tag.html", "delimiter.html"]], // delimiters [/[\+\-\*\%\&\|\^\~\!\=\<\>\/\?\;\:\.\,]/, "delimiter.cs"], // numbers [/\d*\d+[eE]([\-+]?\d+)?/, "number.float.cs"], [/\d*\.\d+([eE][\-+]?\d+)?/, "number.float.cs"], [/0[xX][0-9a-fA-F']*[0-9a-fA-F]/, "number.hex.cs"], [/0[0-7']*[0-7]/, "number.octal.cs"], [/0[bB][0-1']*[0-1]/, "number.binary.cs"], [/\d[\d']*/, "number.cs"], [/\d/, "number.cs"] ] }, razorKeywords: [ "abstract", "as", "async", "await", "base", "bool", "break", "by", "byte", "case", "catch", "char", "checked", "class", "const", "continue", "decimal", "default", "delegate", "do", "double", "descending", "explicit", "event", "extern", "else", "enum", "false", "finally", "fixed", "float", "for", "foreach", "from", "goto", "group", "if", "implicit", "in", "int", "interface", "internal", "into", "is", "lock", "long", "nameof", "new", "null", "namespace", "object", "operator", "out", "override", "orderby", "params", "private", "protected", "public", "readonly", "ref", "return", "switch", "struct", "sbyte", "sealed", "short", "sizeof", "stackalloc", "static", "string", "select", "this", "throw", "true", "try", "typeof", "uint", "ulong", "unchecked", "unsafe", "ushort", "using", "var", "virtual", "volatile", "void", "when", "while", "where", "yield", "model", "inject" // Razor specific ], escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/ }; export { conf, language };