reprism
Version:
Modular Syntax highlighting for the web
67 lines (65 loc) • 1.97 kB
JavaScript
export default {
language: 'latex',
init: Prism => {
(function (Prism) {
let funcPattern = /\\(?:[^a-z()[\]]|[a-z*]+)/i,
insideEqu = {
'equation-command': {
pattern: funcPattern,
alias: 'regex',
},
}
Prism.languages.latex = {
comment: /%.*/m,
// the verbatim environment prints whitespace to the document
cdata: {
pattern: /(\\begin\{((?:verbatim|lstlisting)\*?)\})[\s\S]*?(?=\\end\{\2\})/,
lookbehind: true,
},
/*
* equations can be between $ $ or \( \) or \[ \]
* (all are multiline)
*/
equation: [
{
pattern: /\$(?:\\[\s\S]|[^\\$])*\$|\\\([\s\S]*?\\\)|\\\[[\s\S]*?\\\]/,
inside: insideEqu,
alias: 'string',
},
{
pattern: /(\\begin\{((?:equation|math|eqnarray|align|multline|gather)\*?)\})[\s\S]*?(?=\\end\{\2\})/,
lookbehind: true,
inside: insideEqu,
alias: 'string',
},
],
/*
* arguments which are keywords or references are highlighted
* as keywords
*/
keyword: {
pattern: /(\\(?:begin|end|ref|cite|label|usepackage|documentclass)(?:\[[^\]]+\])?\{)[^}]+(?=\})/,
lookbehind: true,
},
url: {
pattern: /(\\url\{)[^}]+(?=\})/,
lookbehind: true,
},
/*
* section or chapter headlines are highlighted as bold so that
* they stand out more
*/
headline: {
pattern: /(\\(?:part|chapter|section|subsection|frametitle|subsubsection|paragraph|subparagraph|subsubparagraph|subsubsubparagraph)\*?(?:\[[^\]]+\])?\{)[^}]+(?=\}(?:\[[^\]]+\])?)/,
lookbehind: true,
alias: 'class-name',
},
function: {
pattern: funcPattern,
alias: 'selector',
},
punctuation: /[[\]{}&]/,
}
}(Prism))
},
}