375 lines
12 KiB
JavaScript
375 lines
12 KiB
JavaScript
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: "}" },
|
|
{ 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 }
|
|
}
|
|
],
|
|
folding: {
|
|
markers: {
|
|
start: new RegExp("^\\s*<!--\\s*#region\\b.*-->"),
|
|
end: new RegExp("^\\s*<!--\\s*#endregion\\b.*-->")
|
|
}
|
|
}
|
|
};
|
|
const language = {
|
|
defaultToken: "",
|
|
tokenPostfix: ".html",
|
|
ignoreCase: true,
|
|
// The main tokenizer for our languages
|
|
tokenizer: {
|
|
root: [
|
|
[/<!DOCTYPE/, "metatag", "@doctype"],
|
|
[/<!--/, "comment", "@comment"],
|
|
[/(<)((?:[\w\-]+:)?[\w\-]+)(\s*)(\/>)/, ["delimiter", "tag", "", "delimiter"]],
|
|
[/(<)(script)/, ["delimiter", { token: "tag", next: "@script" }]],
|
|
[/(<)(style)/, ["delimiter", { token: "tag", next: "@style" }]],
|
|
[/(<)((?:[\w\-]+:)?[\w\-]+)/, ["delimiter", { token: "tag", next: "@otherTag" }]],
|
|
[/(<\/)((?:[\w\-]+:)?[\w\-]+)/, ["delimiter", { token: "tag", next: "@otherTag" }]],
|
|
[/</, "delimiter"],
|
|
[/[^<]+/]
|
|
// text
|
|
],
|
|
doctype: [
|
|
[/[^>]+/, "metatag.content"],
|
|
[/>/, "metatag", "@pop"]
|
|
],
|
|
comment: [
|
|
[/-->/, "comment", "@pop"],
|
|
[/[^-]+/, "comment.content"],
|
|
[/./, "comment.content"]
|
|
],
|
|
otherTag: [
|
|
[/\/?>/, "delimiter", "@pop"],
|
|
[/"([^"]*)"/, "attribute.value"],
|
|
[/'([^']*)'/, "attribute.value"],
|
|
[/[\w\-]+/, "attribute.name"],
|
|
[/=/, "delimiter"],
|
|
[/[ \t\r\n]+/]
|
|
// whitespace
|
|
],
|
|
// -- BEGIN <script> tags handling
|
|
// After <script
|
|
script: [
|
|
[/type/, "attribute.name", "@scriptAfterType"],
|
|
[/"([^"]*)"/, "attribute.value"],
|
|
[/'([^']*)'/, "attribute.value"],
|
|
[/[\w\-]+/, "attribute.name"],
|
|
[/=/, "delimiter"],
|
|
[
|
|
/>/,
|
|
{
|
|
token: "delimiter",
|
|
next: "@scriptEmbedded",
|
|
nextEmbedded: "text/javascript"
|
|
}
|
|
],
|
|
[/[ \t\r\n]+/],
|
|
// whitespace
|
|
[/(<\/)(script\s*)(>)/, ["delimiter", "tag", { token: "delimiter", next: "@pop" }]]
|
|
],
|
|
// After <script ... type
|
|
scriptAfterType: [
|
|
[/=/, "delimiter", "@scriptAfterTypeEquals"],
|
|
[
|
|
/>/,
|
|
{
|
|
token: "delimiter",
|
|
next: "@scriptEmbedded",
|
|
nextEmbedded: "text/javascript"
|
|
}
|
|
],
|
|
// cover invalid e.g. <script type>
|
|
[/[ \t\r\n]+/],
|
|
// whitespace
|
|
[/<\/script\s*>/, { token: "@rematch", next: "@pop" }]
|
|
],
|
|
// After <script ... type =
|
|
scriptAfterTypeEquals: [
|
|
[
|
|
/"module"/,
|
|
{
|
|
token: "attribute.value",
|
|
switchTo: "@scriptWithCustomType.text/javascript"
|
|
}
|
|
],
|
|
[
|
|
/'module'/,
|
|
{
|
|
token: "attribute.value",
|
|
switchTo: "@scriptWithCustomType.text/javascript"
|
|
}
|
|
],
|
|
[
|
|
/"([^"]*)"/,
|
|
{
|
|
token: "attribute.value",
|
|
switchTo: "@scriptWithCustomType.$1"
|
|
}
|
|
],
|
|
[
|
|
/'([^']*)'/,
|
|
{
|
|
token: "attribute.value",
|
|
switchTo: "@scriptWithCustomType.$1"
|
|
}
|
|
],
|
|
[
|
|
/>/,
|
|
{
|
|
token: "delimiter",
|
|
next: "@scriptEmbedded",
|
|
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: "delimiter",
|
|
next: "@scriptEmbedded.$S2",
|
|
nextEmbedded: "$S2"
|
|
}
|
|
],
|
|
[/"([^"]*)"/, "attribute.value"],
|
|
[/'([^']*)'/, "attribute.value"],
|
|
[/[\w\-]+/, "attribute.name"],
|
|
[/=/, "delimiter"],
|
|
[/[ \t\r\n]+/],
|
|
// whitespace
|
|
[/<\/script\s*>/, { token: "@rematch", next: "@pop" }]
|
|
],
|
|
scriptEmbedded: [
|
|
[/<\/script/, { token: "@rematch", next: "@pop", nextEmbedded: "@pop" }],
|
|
[/[^<]+/, ""]
|
|
],
|
|
// -- END <script> tags handling
|
|
// -- BEGIN <style> tags handling
|
|
// After <style
|
|
style: [
|
|
[/type/, "attribute.name", "@styleAfterType"],
|
|
[/"([^"]*)"/, "attribute.value"],
|
|
[/'([^']*)'/, "attribute.value"],
|
|
[/[\w\-]+/, "attribute.name"],
|
|
[/=/, "delimiter"],
|
|
[
|
|
/>/,
|
|
{
|
|
token: "delimiter",
|
|
next: "@styleEmbedded",
|
|
nextEmbedded: "text/css"
|
|
}
|
|
],
|
|
[/[ \t\r\n]+/],
|
|
// whitespace
|
|
[/(<\/)(style\s*)(>)/, ["delimiter", "tag", { token: "delimiter", next: "@pop" }]]
|
|
],
|
|
// After <style ... type
|
|
styleAfterType: [
|
|
[/=/, "delimiter", "@styleAfterTypeEquals"],
|
|
[
|
|
/>/,
|
|
{
|
|
token: "delimiter",
|
|
next: "@styleEmbedded",
|
|
nextEmbedded: "text/css"
|
|
}
|
|
],
|
|
// cover invalid e.g. <style type>
|
|
[/[ \t\r\n]+/],
|
|
// whitespace
|
|
[/<\/style\s*>/, { token: "@rematch", next: "@pop" }]
|
|
],
|
|
// After <style ... type =
|
|
styleAfterTypeEquals: [
|
|
[
|
|
/"([^"]*)"/,
|
|
{
|
|
token: "attribute.value",
|
|
switchTo: "@styleWithCustomType.$1"
|
|
}
|
|
],
|
|
[
|
|
/'([^']*)'/,
|
|
{
|
|
token: "attribute.value",
|
|
switchTo: "@styleWithCustomType.$1"
|
|
}
|
|
],
|
|
[
|
|
/>/,
|
|
{
|
|
token: "delimiter",
|
|
next: "@styleEmbedded",
|
|
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: "delimiter",
|
|
next: "@styleEmbedded.$S2",
|
|
nextEmbedded: "$S2"
|
|
}
|
|
],
|
|
[/"([^"]*)"/, "attribute.value"],
|
|
[/'([^']*)'/, "attribute.value"],
|
|
[/[\w\-]+/, "attribute.name"],
|
|
[/=/, "delimiter"],
|
|
[/[ \t\r\n]+/],
|
|
// whitespace
|
|
[/<\/style\s*>/, { token: "@rematch", next: "@pop" }]
|
|
],
|
|
styleEmbedded: [
|
|
[/<\/style/, { token: "@rematch", next: "@pop", nextEmbedded: "@pop" }],
|
|
[/[^<]+/, ""]
|
|
]
|
|
// -- END <style> tags handling
|
|
}
|
|
};
|
|
|
|
export { conf, language };
|