1 /*! `latex` grammar compiled for Highlight.js 11.11.1 */
2 var hljsGrammar
= (function () {
7 Author: Benedikt Wilde <bwilde@posteo.de>
8 Website: https://www.latex-project.org
12 /** @type LanguageFn */
13 function latex(hljs
) {
14 const regex
= hljs
.regex
;
15 const KNOWN_CONTROL_WORDS
= regex
.either(...[
16 '(?:NeedsTeXFormat|RequirePackage|GetIdInfo)',
17 'Provides(?:Expl)?(?:Package|Class|File)',
18 '(?:DeclareOption|ProcessOptions)',
19 '(?:documentclass|usepackage|input|include)',
20 'makeat(?:letter|other)',
21 'ExplSyntax(?:On|Off)',
22 '(?:new|renew|provide)?command',
23 '(?:re)newenvironment',
24 '(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand',
25 '(?:New|Renew|Provide|Declare)DocumentEnvironment',
26 '(?:(?:e|g|x)?def|let)',
28 '(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)',
30 '(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)',
31 '(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)',
32 '(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)',
33 '(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)',
34 '(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)',
35 '(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)'
36 ].map(word
=> word
+ '(?![a-zA-Z@:_])'));
37 const L3_REGEX
= new RegExp([
38 // A function \module_function_name:signature or \__module_function_name:signature,
39 // where both module and function_name need at least two characters and
40 // function_name may contain single underscores.
41 '(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*',
42 // A variable \scope_module_and_name_type or \scope__module_ane_name_type,
43 // where scope is one of l, g or c, type needs at least two characters
44 // and module_and_name may contain single underscores.
45 '[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}',
46 // A quark \q_the_name or \q__the_name or
47 // scan mark \s_the_name or \s__vthe_name,
48 // where variable_name needs at least two characters and
49 // may contain single underscores.
50 '[qs]__?[a-zA-Z](?:_?[a-zA-Z])+',
51 // Other LaTeX3 macro names that are not covered by the three rules above.
52 'use(?:_i)?:[a-zA-Z]*',
56 '::[a-zA-Z]_unbraced',
58 ].map(pattern
=> pattern
+ '(?![a-zA-Z:_])').join('|'));
60 { begin: /[a-zA-Z@]+/ }, // control word
61 { begin: /[^a-zA-Z@]?/ } // control symbol
63 const DOUBLE_CARET_VARIANTS
= [
64 { begin: /\^{6}[0-9a-f]{6}/ },
65 { begin: /\^{5}[0-9a-f]{5}/ },
66 { begin: /\^{4}[0-9a-f]{4}/ },
67 { begin: /\^{3}[0-9a-f]{3}/ },
68 { begin: /\^{2}[0-9a-f]{2}/ },
69 { begin: /\^{2}[\u0000-\u007f]/ }
71 const CONTROL_SEQUENCE
= {
78 begin: KNOWN_CONTROL_WORDS
86 variants: DOUBLE_CARET_VARIANTS
100 const DOUBLE_CARET_CHAR
= {
102 variants: DOUBLE_CARET_VARIANTS
};
103 const SPECIAL_CATCODE
= {
104 className: 'built_in',
108 const MAGIC_COMMENT
= {
110 begin: /% ?!(T
[eE
]X
|tex
|BIB
|bib
)/,
114 const COMMENT
= hljs
.COMMENT(
119 const EVERYTHING_BUT_VERBATIM
= [
127 const BRACE_GROUP_NO_VERBATIM
= {
133 ...EVERYTHING_BUT_VERBATIM
136 const ARGUMENT_BRACES
= hljs
.inherit(
137 BRACE_GROUP_NO_VERBATIM
,
142 BRACE_GROUP_NO_VERBATIM
,
143 ...EVERYTHING_BUT_VERBATIM
147 const ARGUMENT_BRACKETS
= {
153 BRACE_GROUP_NO_VERBATIM
,
154 ...EVERYTHING_BUT_VERBATIM
157 const SPACE_GOBBLER
= {
161 const ARGUMENT_M
= [ ARGUMENT_BRACES
];
162 const ARGUMENT_O
= [ ARGUMENT_BRACKETS
];
163 const ARGUMENT_AND_THEN = function(arg
, starts_mode
) {
165 contains: [ SPACE_GOBBLER
],
173 const CSNAME = function(csname
, starts_mode
) {
175 begin: '\\\\' + csname
+ '(?![a-zA-Z@:_])',
177 $pattern: /\\[a-zA-Z]+/,
178 keyword: '\\' + csname
181 contains: [ SPACE_GOBBLER
],
185 const BEGIN_ENV = function(envname
, starts_mode
) {
188 begin: '\\\\begin(?=[ \t]*(\\r?\\n[ \t]*)?\\{' + envname
+ '\\})',
190 $pattern: /\\[a-zA-Z]+/,
195 ARGUMENT_AND_THEN(ARGUMENT_M
, starts_mode
)
198 const VERBATIM_DELIMITED_EQUAL
= (innerName
= "string") => {
199 return hljs
.END_SAME_AS_BEGIN({
200 className: innerName
,
208 const VERBATIM_DELIMITED_ENV = function(envname
) {
211 end: '(?=\\\\end\\{' + envname
+ '\\})'
215 const VERBATIM_DELIMITED_BRACES
= (innerName
= "string") => {
223 className: innerName
,
243 ].map(csname
=> CSNAME(csname
, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),
244 CSNAME('mint', ARGUMENT_AND_THEN(ARGUMENT_M
, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),
245 CSNAME('mintinline', ARGUMENT_AND_THEN(ARGUMENT_M
, { contains: [
246 VERBATIM_DELIMITED_BRACES(),
247 VERBATIM_DELIMITED_EQUAL()
249 CSNAME('url', { contains: [
250 VERBATIM_DELIMITED_BRACES("link"),
251 VERBATIM_DELIMITED_BRACES("link")
253 CSNAME('hyperref', { contains: [ VERBATIM_DELIMITED_BRACES("link") ] }),
254 CSNAME('href', ARGUMENT_AND_THEN(ARGUMENT_O
, { contains: [ VERBATIM_DELIMITED_BRACES("link") ] })),
259 BEGIN_ENV('verbatim' + suffix
, VERBATIM_DELIMITED_ENV('verbatim' + suffix
)),
260 BEGIN_ENV('filecontents' + suffix
, ARGUMENT_AND_THEN(ARGUMENT_M
, VERBATIM_DELIMITED_ENV('filecontents' + suffix
))),
266 BEGIN_ENV(prefix
+ 'Verbatim' + suffix
, ARGUMENT_AND_THEN(ARGUMENT_O
, VERBATIM_DELIMITED_ENV(prefix
+ 'Verbatim' + suffix
)))
269 BEGIN_ENV('minted', ARGUMENT_AND_THEN(ARGUMENT_O
, ARGUMENT_AND_THEN(ARGUMENT_M
, VERBATIM_DELIMITED_ENV('minted')))),
277 ...EVERYTHING_BUT_VERBATIM
286 export default hljsGrammar
;