mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-22 12:45:39 +01:00
112 lines
2.9 KiB
TypeScript
112 lines
2.9 KiB
TypeScript
/*---------------------------------------------------------------------------------------------
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
import { languages } from '../fillers/monaco-editor-core';
|
|
|
|
export const conf: languages.LanguageConfiguration = {
|
|
comments: {
|
|
blockComment: ['<!--', '-->']
|
|
},
|
|
brackets: [['<', '>']],
|
|
autoClosingPairs: [
|
|
{ open: '<', close: '>' },
|
|
{ open: "'", close: "'" },
|
|
{ open: '"', close: '"' }
|
|
],
|
|
surroundingPairs: [
|
|
{ open: '<', close: '>' },
|
|
{ open: "'", close: "'" },
|
|
{ open: '"', close: '"' }
|
|
],
|
|
onEnterRules: [
|
|
{
|
|
beforeText: new RegExp(`<([_:\\w][_:\\w-.\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
|
afterText: /^<\/([_:\w][_:\w-.\d]*)\s*>$/i,
|
|
action: {
|
|
indentAction: languages.IndentAction.IndentOutdent
|
|
}
|
|
},
|
|
{
|
|
beforeText: new RegExp(`<(\\w[\\w\\d]*)([^/>]*(?!/)>)[^<]*$`, 'i'),
|
|
action: { indentAction: languages.IndentAction.Indent }
|
|
}
|
|
]
|
|
};
|
|
|
|
export const language = <languages.IMonarchLanguage>{
|
|
defaultToken: '',
|
|
tokenPostfix: '.xml',
|
|
|
|
ignoreCase: true,
|
|
|
|
// Useful regular expressions
|
|
qualifiedName: /(?:[\w\.\-]+:)?[\w\.\-]+/,
|
|
|
|
tokenizer: {
|
|
root: [
|
|
[/[^<&]+/, ''],
|
|
|
|
{ include: '@whitespace' },
|
|
|
|
// Standard opening tag
|
|
[/(<)(@qualifiedName)/, [{ token: 'delimiter' }, { token: 'tag', next: '@tag' }]],
|
|
|
|
// Standard closing tag
|
|
[
|
|
/(<\/)(@qualifiedName)(\s*)(>)/,
|
|
[{ token: 'delimiter' }, { token: 'tag' }, '', { token: 'delimiter' }]
|
|
],
|
|
|
|
// Meta tags - instruction
|
|
[/(<\?)(@qualifiedName)/, [{ token: 'delimiter' }, { token: 'metatag', next: '@tag' }]],
|
|
|
|
// Meta tags - declaration
|
|
[/(<\!)(@qualifiedName)/, [{ token: 'delimiter' }, { token: 'metatag', next: '@tag' }]],
|
|
|
|
// CDATA
|
|
[/<\!\[CDATA\[/, { token: 'delimiter.cdata', next: '@cdata' }],
|
|
|
|
[/&\w+;/, 'string.escape']
|
|
],
|
|
|
|
cdata: [
|
|
[/[^\]]+/, ''],
|
|
[/\]\]>/, { token: 'delimiter.cdata', next: '@pop' }],
|
|
[/\]/, '']
|
|
],
|
|
|
|
tag: [
|
|
[/[ \t\r\n]+/, ''],
|
|
[
|
|
/(@qualifiedName)(\s*=\s*)("[^"]*"|'[^']*')/,
|
|
['attribute.name', '', 'attribute.value']
|
|
],
|
|
[
|
|
/(@qualifiedName)(\s*=\s*)("[^">?\/]*|'[^'>?\/]*)(?=[\?\/]\>)/,
|
|
['attribute.name', '', 'attribute.value']
|
|
],
|
|
[
|
|
/(@qualifiedName)(\s*=\s*)("[^">]*|'[^'>]*)/,
|
|
['attribute.name', '', 'attribute.value']
|
|
],
|
|
[/@qualifiedName/, 'attribute.name'],
|
|
[/\?>/, { token: 'delimiter', next: '@pop' }],
|
|
[/(\/)(>)/, [{ token: 'tag' }, { token: 'delimiter', next: '@pop' }]],
|
|
[/>/, { token: 'delimiter', next: '@pop' }]
|
|
],
|
|
|
|
whitespace: [
|
|
[/[ \t\r\n]+/, ''],
|
|
[/<!--/, { token: 'comment', next: '@comment' }]
|
|
],
|
|
|
|
comment: [
|
|
[/[^<\-]+/, 'comment.content'],
|
|
[/-->/, { token: 'comment', next: '@pop' }],
|
|
[/<!--/, 'comment.content.invalid'],
|
|
[/[<\-]/, 'comment.content']
|
|
]
|
|
}
|
|
};
|