window.receiptLanguage = { _registered: false, register: function () { if (this._registered) return; this._registered = true; monaco.languages.register({ id: 'receipt-xml' }); monaco.languages.setLanguageConfiguration('receipt-xml', { comments: { blockComment: [''] }, brackets: [ ['<', '>'], ['{{', '}}'] ], autoClosingPairs: [ { open: '<', close: '>' }, { open: '{{', close: '}}' }, { open: '"', close: '"' }, { open: "'", close: "'" } ], surroundingPairs: [ { open: '<', close: '>' }, { open: '"', close: '"' }, { open: "'", close: "'" } ] }); var knownElements = [ 'receipt', 'line', 'columns', 'row', 'col', 'separator', 'cut', 'feed', 'table', 'foreach', 'if', 'else' ]; monaco.languages.setMonarchTokensProvider('receipt-xml', { knownElements: knownElements, tokenizer: { root: [ // Expression open [/\{\{/, { token: 'delimiter.expression', next: '@expression' }], // XML comment [//, { token: 'comment', next: '@pop' }], [/./, 'comment'] ] } }); }, defineTheme: function () { monaco.editor.defineTheme('receipt-dark', { base: 'vs-dark', inherit: true, rules: [ { token: 'tag.element', foreground: '569CD6', fontStyle: 'bold' }, { token: 'tag.unknown', foreground: 'F44747' }, { token: 'attribute.name', foreground: '9CDCFE' }, { token: 'attribute.value', foreground: 'CE9178' }, { token: 'attribute.value.delimiter', foreground: 'CE9178' }, { token: 'delimiter.tag', foreground: '808080' }, { token: 'delimiter', foreground: '808080' }, { token: 'delimiter.expression', foreground: 'DCDCAA', fontStyle: 'bold' }, { token: 'variable.property', foreground: '4EC9B0' }, { token: 'variable.special', foreground: 'C586C0', fontStyle: 'italic' }, { token: 'string.format', foreground: 'D7BA7D' }, { token: 'comment', foreground: '6A9955', fontStyle: 'italic' }, { token: 'text', foreground: 'D4D4D4' } ], colors: {} }); }, getEditorContent: function (editorId) { var editor = blazorMonaco.editor.getEditorById(editorId); if (editor) { return editor.getValue(); } return ''; } };