1 /*! `latex` grammar compiled for Highlight.js 11.11.1 */
3 var hljsGrammar
= (function () {
8 Author: Benedikt Wilde <bwilde@posteo.de>
9 Website: https://www.latex-project.org
13 /** @type LanguageFn */
14 function latex(hljs
) {
15 const regex
= hljs
.regex
;
16 const KNOWN_CONTROL_WORDS
= regex
.either(...[
17 '(?:NeedsTeXFormat|RequirePackage|GetIdInfo)',
18 'Provides(?:Expl)?(?:Package|Class|File)',
19 '(?:DeclareOption|ProcessOptions)',
20 '(?:documentclass|usepackage|input|include)',
21 'makeat(?:letter|other)',
22 'ExplSyntax(?:On|Off)',
23 '(?:new|renew|provide)?command',
24 '(?:re)newenvironment',
25 '(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand',
26 '(?:New|Renew|Provide|Declare)DocumentEnvironment',
27 '(?:(?:e|g|x)?def|let)',
29 '(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)',
31 '(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)',
32 '(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)',
33 '(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)',
34 '(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)',
35 '(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)',
36 '(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)'
37 ].map(word
=> word
+ '(?![a-zA-Z@:_])'));
38 const L3_REGEX
= new RegExp([
39 // A function \module_function_name:signature or \__module_function_name:signature,
40 // where both module and function_name need at least two characters and
41 // function_name may contain single underscores.
42 '(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*',
43 // A variable \scope_module_and_name_type or \scope__module_ane_name_type,
44 // where scope is one of l, g or c, type needs at least two characters
45 // and module_and_name may contain single underscores.
46 '[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}',
47 // A quark \q_the_name or \q__the_name or
48 // scan mark \s_the_name or \s__vthe_name,
49 // where variable_name needs at least two characters and
50 // may contain single underscores.
51 '[qs]__?[a-zA-Z](?:_?[a-zA-Z])+',
52 // Other LaTeX3 macro names that are not covered by the three rules above.
53 'use(?:_i)?:[a-zA-Z]*',
57 '::[a-zA-Z]_unbraced',
59 ].map(pattern
=> pattern
+ '(?![a-zA-Z:_])').join('|'));
61 { begin: /[a-zA-Z@]+/ }, // control word
62 { begin: /[^a-zA-Z@]?/ } // control symbol
64 const DOUBLE_CARET_VARIANTS
= [
65 { begin: /\^{6}[0-9a-f]{6}/ },
66 { begin: /\^{5}[0-9a-f]{5}/ },
67 { begin: /\^{4}[0-9a-f]{4}/ },
68 { begin: /\^{3}[0-9a-f]{3}/ },
69 { begin: /\^{2}[0-9a-f]{2}/ },
70 { begin: /\^{2}[\u0000-\u007f]/ }
72 const CONTROL_SEQUENCE
= {
79 begin: KNOWN_CONTROL_WORDS
87 variants: DOUBLE_CARET_VARIANTS
101 const DOUBLE_CARET_CHAR
= {
103 variants: DOUBLE_CARET_VARIANTS
};
104 const SPECIAL_CATCODE
= {
105 className: 'built_in',
109 const MAGIC_COMMENT
= {
111 begin: /% ?!(T
[eE
]X
|tex
|BIB
|bib
)/,
115 const COMMENT
= hljs
.COMMENT(
120 const EVERYTHING_BUT_VERBATIM
= [
128 const BRACE_GROUP_NO_VERBATIM
= {
134 ...EVERYTHING_BUT_VERBATIM
137 const ARGUMENT_BRACES
= hljs
.inherit(
138 BRACE_GROUP_NO_VERBATIM
,
143 BRACE_GROUP_NO_VERBATIM
,
144 ...EVERYTHING_BUT_VERBATIM
148 const ARGUMENT_BRACKETS
= {
154 BRACE_GROUP_NO_VERBATIM
,
155 ...EVERYTHING_BUT_VERBATIM
158 const SPACE_GOBBLER
= {
162 const ARGUMENT_M
= [ ARGUMENT_BRACES
];
163 const ARGUMENT_O
= [ ARGUMENT_BRACKETS
];
164 const ARGUMENT_AND_THEN = function(arg
, starts_mode
) {
166 contains: [ SPACE_GOBBLER
],
174 const CSNAME = function(csname
, starts_mode
) {
176 begin: '\\\\' + csname
+ '(?![a-zA-Z@:_])',
178 $pattern: /\\[a-zA-Z]+/,
179 keyword: '\\' + csname
182 contains: [ SPACE_GOBBLER
],
186 const BEGIN_ENV = function(envname
, starts_mode
) {
189 begin: '\\\\begin(?=[ \t]*(\\r?\\n[ \t]*)?\\{' + envname
+ '\\})',
191 $pattern: /\\[a-zA-Z]+/,
196 ARGUMENT_AND_THEN(ARGUMENT_M
, starts_mode
)
199 const VERBATIM_DELIMITED_EQUAL
= (innerName
= "string") => {
200 return hljs
.END_SAME_AS_BEGIN({
201 className: innerName
,
209 const VERBATIM_DELIMITED_ENV = function(envname
) {
212 end: '(?=\\\\end\\{' + envname
+ '\\})'
216 const VERBATIM_DELIMITED_BRACES
= (innerName
= "string") => {
224 className: innerName
,
244 ].map(csname
=> CSNAME(csname
, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),
245 CSNAME('mint', ARGUMENT_AND_THEN(ARGUMENT_M
, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),
246 CSNAME('mintinline', ARGUMENT_AND_THEN(ARGUMENT_M
, { contains: [
247 VERBATIM_DELIMITED_BRACES(),
248 VERBATIM_DELIMITED_EQUAL()
250 CSNAME('url', { contains: [
251 VERBATIM_DELIMITED_BRACES("link"),
252 VERBATIM_DELIMITED_BRACES("link")
254 CSNAME('hyperref', { contains: [ VERBATIM_DELIMITED_BRACES("link") ] }),
255 CSNAME('href', ARGUMENT_AND_THEN(ARGUMENT_O
, { contains: [ VERBATIM_DELIMITED_BRACES("link") ] })),
260 BEGIN_ENV('verbatim' + suffix
, VERBATIM_DELIMITED_ENV('verbatim' + suffix
)),
261 BEGIN_ENV('filecontents' + suffix
, ARGUMENT_AND_THEN(ARGUMENT_M
, VERBATIM_DELIMITED_ENV('filecontents' + suffix
))),
267 BEGIN_ENV(prefix
+ 'Verbatim' + suffix
, ARGUMENT_AND_THEN(ARGUMENT_O
, VERBATIM_DELIMITED_ENV(prefix
+ 'Verbatim' + suffix
)))
270 BEGIN_ENV('minted', ARGUMENT_AND_THEN(ARGUMENT_O
, ARGUMENT_AND_THEN(ARGUMENT_M
, VERBATIM_DELIMITED_ENV('minted')))),
278 ...EVERYTHING_BUT_VERBATIM
287 hljs
.registerLanguage('latex', hljsGrammar
);