monaco-latex
Version:
LaTeX language support for Monaco Editor
297 lines (296 loc) • 5.66 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.monarchTokenizer = void 0;
// Built-in LaTeX commands for syntax highlighting
const builtin = [
'addcontentsline',
'addtocontents',
'addtocounter',
'address',
'addtolength',
'addvspace',
'alph',
'appendix',
'arabic',
'author',
'backslash',
'baselineskip',
'baselinestretch',
'bf',
'bibitem',
'bigskipamount',
'bigskip',
'boldmath',
'boldsymbol',
'cal',
'caption',
'cdots',
'centering',
'chapter',
'circle',
'cite',
'cleardoublepage',
'clearpage',
'cline',
'closing',
'color',
'copyright',
'dashbox',
'date',
'ddots',
'documentclass',
'domlinecolor',
'dotfill',
'em',
'emph',
'ensuremath',
'epigraph',
'euro',
'fbox',
'flushbottom',
'fnsymbol',
'footnote',
'footnotemark',
'footnotesize',
'footnotetext',
'frac',
'frame',
'framebox',
'frenchspacing',
'hfill',
'hline',
'href',
'hrulefill',
'hspace',
'huge',
'Huge',
'hyphenation',
'include',
'includegraphics',
'includeonly',
'indent',
'input',
'it',
'item',
'kill',
'label',
'large',
'Large',
'LARGE',
'LaTeX',
'LaTeXe',
'ldots',
'left',
'lefteqn',
'line',
'linebreak',
'linethickness',
'linewidth',
'listoffigures',
'listoftables',
'location',
'makebox',
'maketitle',
'markboth',
'mathcal',
'mathop',
'mbox',
'medskip',
'multicolumn',
'multiput',
'newcommand',
'newcolumntype',
'newcounter',
'newenvironment',
'newfont',
'newlength',
'newline',
'newpage',
'newsavebox',
'newtheorem',
'nocite',
'noindent',
'nolinebreak',
'nonfrenchspacing',
'normalsize',
'nopagebreak',
'not',
'onecolumn',
'opening',
'oval',
'overbrace',
'overline',
'pagebreak',
'pagenumbering',
'pageref',
'pagestyle',
'par',
'paragraph',
'parbox',
'parindent',
'parskip',
'part',
'protect',
'providecommand',
'put',
'raggedbottom',
'raggedleft',
'raggedright',
'raisebox',
'ref',
'renewcommand',
'right',
'rm',
'roman',
'rule',
'savebox',
'sbox',
'sc',
'scriptsize',
'section',
'setcounter',
'setlength',
'settowidth',
'sf',
'shortstack',
'signature',
'sl',
'slash',
'small',
'smallskip',
'sout',
'space',
'sqrt',
'stackrel',
'stepcounter',
'subparagraph',
'subsection',
'subsubsection',
'tableofcontents',
'telephone',
'TeX',
'textbf',
'textcolor',
'textit',
'textmd',
'textnormal',
'textrm',
'textsc',
'textsf',
'textsl',
'texttt',
'textup',
'textwidth',
'textheight',
'thanks',
'thispagestyle',
'tiny',
'title',
'today',
'tt',
'twocolumn',
'typeout',
'typein',
'uline',
'underbrace',
'underline',
'unitlength',
'usebox',
'usecounter',
'uwave',
'value',
'vbox',
'vcenter',
'vdots',
'vector',
'verb',
'vfill',
'vline',
'vphantom',
'vspace',
'RequirePackage',
'NeedsTeXFormat',
'usepackage',
'documentstyle',
'def',
'edef',
'defcommand',
'if',
'ifdim',
'ifnum',
'ifx',
'fi',
'else',
'begingroup',
'endgroup',
'definecolor',
'eifstrequal',
'eeifstrequal',
];
exports.monarchTokenizer = {
defaultToken: '',
tokenPostfix: '.latex',
displayName: 'LaTeX',
name: 'latex',
mimeTypes: ['text/latex', 'text/tex'],
fileExtensions: ['tex', 'sty', 'cls'],
lineComment: '% ',
builtin,
tokenizer: {
root: [
// Environment begin/end
[
'(\\\\begin)(\\s*)(\\{)([\\w\\-\\*\\@]+)(\\})',
[
'keyword.predefined',
'white',
'@brackets',
{
token: 'tag.env-$4',
bracket: '@open',
},
'@brackets',
],
],
[
'(\\\\end)(\\s*)(\\{)([\\w\\-\\*\\@]+)(\\})',
[
'keyword.predefined',
'white',
'@brackets',
{
token: 'tag.env-$4',
bracket: '@close',
},
'@brackets',
],
],
// Escaped characters
['\\\\[^a-zA-Z@]', 'keyword'],
// @ commands
['\\@[a-zA-Z@]+', 'keyword.at'],
// Commands
[
'\\\\([a-zA-Z@]+)',
{
cases: {
'$1@builtin': 'keyword.predefined',
'@default': 'keyword',
},
},
],
{ include: '@whitespace' },
// Brackets
['[{}()\\[\\]]', '@brackets'],
// Arguments
['#+\\d', 'number.arg'],
// Dimensions
['\\-?(?:\\d+(?:\\.\\d+)?|\\.\\d+)\\s*(?:em|ex|pt|pc|sp|cm|mm|in)', 'number.len'],
],
whitespace: [
['[ \\t\\r\\n]+', 'white'],
['%.*$', 'comment'],
],
},
};
exports.default = exports.monarchTokenizer;