basant307/AI_Governance_Project
048
1/*2Language: LaTeX3Author: Benedikt Wilde <bwilde@posteo.de>4Website: https://www.latex-project.org5Category: markup6*/7 8/** @type LanguageFn */9function latex(hljs) {10 const regex = hljs.regex;11 const KNOWN_CONTROL_WORDS = regex.either(...[12 '(?:NeedsTeXFormat|RequirePackage|GetIdInfo)',13 'Provides(?:Expl)?(?:Package|Class|File)',14 '(?:DeclareOption|ProcessOptions)',15 '(?:documentclass|usepackage|input|include)',16 'makeat(?:letter|other)',17 'ExplSyntax(?:On|Off)',18 '(?:new|renew|provide)?command',19 '(?:re)newenvironment',20 '(?:New|Renew|Provide|Declare)(?:Expandable)?DocumentCommand',21 '(?:New|Renew|Provide|Declare)DocumentEnvironment',22 '(?:(?:e|g|x)?def|let)',23 '(?:begin|end)',24 '(?:part|chapter|(?:sub){0,2}section|(?:sub)?paragraph)',25 'caption',26 '(?:label|(?:eq|page|name)?ref|(?:paren|foot|super)?cite)',27 '(?:alpha|beta|[Gg]amma|[Dd]elta|(?:var)?epsilon|zeta|eta|[Tt]heta|vartheta)',28 '(?:iota|(?:var)?kappa|[Ll]ambda|mu|nu|[Xx]i|[Pp]i|varpi|(?:var)rho)',29 '(?:[Ss]igma|varsigma|tau|[Uu]psilon|[Pp]hi|varphi|chi|[Pp]si|[Oo]mega)',30 '(?:frac|sum|prod|lim|infty|times|sqrt|leq|geq|left|right|middle|[bB]igg?)',31 '(?:[lr]angle|q?quad|[lcvdi]?dots|d?dot|hat|tilde|bar)'32 ].map(word => word + '(?![a-zA-Z@:_])'));33 const L3_REGEX = new RegExp([34 // A function \module_function_name:signature or \__module_function_name:signature,35 // where both module and function_name need at least two characters and36 // function_name may contain single underscores.37 '(?:__)?[a-zA-Z]{2,}_[a-zA-Z](?:_?[a-zA-Z])+:[a-zA-Z]*',38 // A variable \scope_module_and_name_type or \scope__module_ane_name_type,39 // where scope is one of l, g or c, type needs at least two characters40 // and module_and_name may contain single underscores.41 '[lgc]__?[a-zA-Z](?:_?[a-zA-Z])*_[a-zA-Z]{2,}',42 // A quark \q_the_name or \q__the_name or43 // scan mark \s_the_name or \s__vthe_name,44 // where variable_name needs at least two characters and45 // may contain single underscores.46 '[qs]__?[a-zA-Z](?:_?[a-zA-Z])+',47 // Other LaTeX3 macro names that are not covered by the three rules above.48 'use(?:_i)?:[a-zA-Z]*',49 '(?:else|fi|or):',50 '(?:if|cs|exp):w',51 '(?:hbox|vbox):n',52 '::[a-zA-Z]_unbraced',53 '::[a-zA-Z:]'54 ].map(pattern => pattern + '(?![a-zA-Z:_])').join('|'));55 const L2_VARIANTS = [56 { begin: /[a-zA-Z@]+/ }, // control word57 { begin: /[^a-zA-Z@]?/ } // control symbol58 ];59 const DOUBLE_CARET_VARIANTS = [60 { begin: /\^{6}[0-9a-f]{6}/ },61 { begin: /\^{5}[0-9a-f]{5}/ },62 { begin: /\^{4}[0-9a-f]{4}/ },63 { begin: /\^{3}[0-9a-f]{3}/ },64 { begin: /\^{2}[0-9a-f]{2}/ },65 { begin: /\^{2}[\u0000-\u007f]/ }66 ];67 const CONTROL_SEQUENCE = {68 className: 'keyword',69 begin: /\\/,70 relevance: 0,71 contains: [72 {73 endsParent: true,74 begin: KNOWN_CONTROL_WORDS75 },76 {77 endsParent: true,78 begin: L3_REGEX79 },80 {81 endsParent: true,82 variants: DOUBLE_CARET_VARIANTS83 },84 {85 endsParent: true,86 relevance: 0,87 variants: L2_VARIANTS88 }89 ]90 };91 const MACRO_PARAM = {92 className: 'params',93 relevance: 0,94 begin: /#+\d?/95 };96 const DOUBLE_CARET_CHAR = {97 // relevance: 198 variants: DOUBLE_CARET_VARIANTS };99 const SPECIAL_CATCODE = {100 className: 'built_in',101 relevance: 0,102 begin: /[$&^_]/103 };104 const MAGIC_COMMENT = {105 className: 'meta',106 begin: /% ?!(T[eE]X|tex|BIB|bib)/,107 end: '$',108 relevance: 10109 };110 const COMMENT = hljs.COMMENT(111 '%',112 '$',113 { relevance: 0 }114 );115 const EVERYTHING_BUT_VERBATIM = [116 CONTROL_SEQUENCE,117 MACRO_PARAM,118 DOUBLE_CARET_CHAR,119 SPECIAL_CATCODE,120 MAGIC_COMMENT,121 COMMENT122 ];123 const BRACE_GROUP_NO_VERBATIM = {124 begin: /\{/,125 end: /\}/,126 relevance: 0,127 contains: [128 'self',129 ...EVERYTHING_BUT_VERBATIM130 ]131 };132 const ARGUMENT_BRACES = hljs.inherit(133 BRACE_GROUP_NO_VERBATIM,134 {135 relevance: 0,136 endsParent: true,137 contains: [138 BRACE_GROUP_NO_VERBATIM,139 ...EVERYTHING_BUT_VERBATIM140 ]141 }142 );143 const ARGUMENT_BRACKETS = {144 begin: /\[/,145 end: /\]/,146 endsParent: true,147 relevance: 0,148 contains: [149 BRACE_GROUP_NO_VERBATIM,150 ...EVERYTHING_BUT_VERBATIM151 ]152 };153 const SPACE_GOBBLER = {154 begin: /\s+/,155 relevance: 0156 };157 const ARGUMENT_M = [ ARGUMENT_BRACES ];158 const ARGUMENT_O = [ ARGUMENT_BRACKETS ];159 const ARGUMENT_AND_THEN = function(arg, starts_mode) {160 return {161 contains: [ SPACE_GOBBLER ],162 starts: {163 relevance: 0,164 contains: arg,165 starts: starts_mode166 }167 };168 };169 const CSNAME = function(csname, starts_mode) {170 return {171 begin: '\\\\' + csname + '(?![a-zA-Z@:_])',172 keywords: {173 $pattern: /\\[a-zA-Z]+/,174 keyword: '\\' + csname175 },176 relevance: 0,177 contains: [ SPACE_GOBBLER ],178 starts: starts_mode179 };180 };181 const BEGIN_ENV = function(envname, starts_mode) {182 return hljs.inherit(183 {184 begin: '\\\\begin(?=[ \t]*(\\r?\\n[ \t]*)?\\{' + envname + '\\})',185 keywords: {186 $pattern: /\\[a-zA-Z]+/,187 keyword: '\\begin'188 },189 relevance: 0,190 },191 ARGUMENT_AND_THEN(ARGUMENT_M, starts_mode)192 );193 };194 const VERBATIM_DELIMITED_EQUAL = (innerName = "string") => {195 return hljs.END_SAME_AS_BEGIN({196 className: innerName,197 begin: /(.|\r?\n)/,198 end: /(.|\r?\n)/,199 excludeBegin: true,200 excludeEnd: true,201 endsParent: true202 });203 };204 const VERBATIM_DELIMITED_ENV = function(envname) {205 return {206 className: 'string',207 end: '(?=\\\\end\\{' + envname + '\\})'208 };209 };210 211 const VERBATIM_DELIMITED_BRACES = (innerName = "string") => {212 return {213 relevance: 0,214 begin: /\{/,215 starts: {216 endsParent: true,217 contains: [218 {219 className: innerName,220 end: /(?=\})/,221 endsParent: true,222 contains: [223 {224 begin: /\{/,225 end: /\}/,226 relevance: 0,227 contains: [ "self" ]228 }229 ],230 }231 ]232 }233 };234 };235 const VERBATIM = [236 ...[237 'verb',238 'lstinline'239 ].map(csname => CSNAME(csname, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),240 CSNAME('mint', ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [ VERBATIM_DELIMITED_EQUAL() ] })),241 CSNAME('mintinline', ARGUMENT_AND_THEN(ARGUMENT_M, { contains: [242 VERBATIM_DELIMITED_BRACES(),243 VERBATIM_DELIMITED_EQUAL()244 ] })),245 CSNAME('url', { contains: [246 VERBATIM_DELIMITED_BRACES("link"),247 VERBATIM_DELIMITED_BRACES("link")248 ] }),249 CSNAME('hyperref', { contains: [ VERBATIM_DELIMITED_BRACES("link") ] }),250 CSNAME('href', ARGUMENT_AND_THEN(ARGUMENT_O, { contains: [ VERBATIM_DELIMITED_BRACES("link") ] })),251 ...[].concat(...[252 '',253 '\\*'254 ].map(suffix => [255 BEGIN_ENV('verbatim' + suffix, VERBATIM_DELIMITED_ENV('verbatim' + suffix)),256 BEGIN_ENV('filecontents' + suffix, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('filecontents' + suffix))),257 ...[258 '',259 'B',260 'L'261 ].map(prefix =>262 BEGIN_ENV(prefix + 'Verbatim' + suffix, ARGUMENT_AND_THEN(ARGUMENT_O, VERBATIM_DELIMITED_ENV(prefix + 'Verbatim' + suffix)))263 )264 ])),265 BEGIN_ENV('minted', ARGUMENT_AND_THEN(ARGUMENT_O, ARGUMENT_AND_THEN(ARGUMENT_M, VERBATIM_DELIMITED_ENV('minted')))),266 ];267 268 return {269 name: 'LaTeX',270 aliases: [ 'tex' ],271 contains: [272 ...VERBATIM,273 ...EVERYTHING_BUT_VERBATIM274 ]275 };276}277 278export { latex as default };279 