// taken from node_modules/monaco-editor/dev/vs/basic-languages/html/html.js // modifications: // 1: replaced 'monaco_editor_core_1.' with '' (added import) // 2: replaced 'exports.' with 'export const ' // 3: replaced 'text/javascript' with 'text/typescript' // 4: added basic moustache keywords import { languages } from 'monaco-editor' var EMPTY_ELEMENTS = [ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr' ] export 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*'), end: new RegExp('^\\s*') } } } export const language = { defaultToken: '', tokenPostfix: '.html', ignoreCase: true, moustkeys: [ '#if', '/if', ':else if', ':else', 'as', '#each', '/each', '#await', ':then', ':catch', '/await', '#key', '/key', '@html', '@debug' ], // The main tokenizer for our languages tokenizer: { root: [ [/)/, ['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' }]], [/]+/, 'metatag.content'], [/>/, 'metatag', '@pop'] ], comment: [ [/-->/, 'comment', '@pop'], [/[^-]+/, 'comment.content'], [/./, 'comment.content'] ], curly: [ [/[ \t\r\n]+/], [/{/, 'delimiter', '@push'], [ /[^}\s]+/, { cases: { '@moustkeys': 'keyword', '@default': 'tag' } } ], [/}/, 'delimiter', '@pop'] ], otherTag: [ [/\/?>/, 'delimiter', '@pop'], [/"([^"]*)"/, 'attribute.value'], [/'([^']*)'/, 'attribute.value'], [/[\w\-]+/, 'attribute.name'], [/=/, 'delimiter'], [/[ \t\r\n]+/] // whitespace ], // -- BEGIN