highlight.min.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854
  1. function deepFreeze(t) {
  2. return t instanceof Map ? t.clear = t.delete = t.set = function () {
  3. throw new Error("map is read-only");
  4. } : t instanceof Set && (t.add = t.clear = t.delete = function () {
  5. throw new Error("set is read-only");
  6. }), Object.freeze(t), Object.getOwnPropertyNames(t).forEach(e => {
  7. var e = t[e],
  8. n = typeof e;
  9. "object" != n && "function" != n || Object.isFrozen(e) || deepFreeze(e);
  10. }), t;
  11. }
  12. class Response {
  13. constructor(e) {
  14. void 0 === e.data && (e.data = {}), this.setData(e.data), this.isMatchIgnored = !1;
  15. }
  16. ignoreMatch() {
  17. this.isMatchIgnored = !0;
  18. }
  19. }
  20. function escapeHTML(e) {
  21. return e.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&#x27;");
  22. }
  23. function inherit$1(e, ...n) {
  24. let t = Object.create(null);
  25. for (var i in e) t[i] = e[i];
  26. return n.forEach(function (e) {
  27. for (var n in e) t[n] = e[n];
  28. }), t;
  29. }
  30. let SPAN_CLOSE = "</span>",
  31. emitsWrappingTags = e => !!e.scope,
  32. scopeToCSSClass = (e, {
  33. prefix: n
  34. }) => {
  35. var t;
  36. return e.startsWith("language:") ? e.replace("language:", "language-") : e.includes(".") ? ["" + n + (t = e.split(".")).shift(), ...t.map((e, n) => "" + e + "_".repeat(n + 1))].join(" ") : "" + n + e;
  37. };
  38. class HTMLRenderer {
  39. constructor(e, n) {
  40. this.buffer = "", this.classPrefix = n.classPrefix, e.walk(this);
  41. }
  42. addText(e) {
  43. this.buffer += escapeHTML(e);
  44. }
  45. openNode(e) {
  46. emitsWrappingTags(e) && (e = scopeToCSSClass(e.scope, {
  47. prefix: this.classPrefix
  48. }), this.span(e));
  49. }
  50. closeNode(e) {
  51. emitsWrappingTags(e) && (this.buffer += SPAN_CLOSE);
  52. }
  53. value() {
  54. return this.buffer;
  55. }
  56. span(e) {
  57. this.buffer += `<span class="${e}">`;
  58. }
  59. }
  60. let newNode = (e = {}) => {
  61. var n = {
  62. children: []
  63. };
  64. return Object.assign(n, e), n;
  65. };
  66. class TokenTree {
  67. constructor() {
  68. this.rootNode = newNode(), this.stack = [this.rootNode];
  69. }
  70. get top() {
  71. return this.stack[this.stack.length - 1];
  72. }
  73. get root() {
  74. return this.rootNode;
  75. }
  76. add(e) {
  77. this.top.children.push(e);
  78. }
  79. openNode(e) {
  80. e = newNode({
  81. scope: e
  82. });
  83. this.add(e), this.stack.push(e);
  84. }
  85. closeNode() {
  86. if (1 < this.stack.length) return this.stack.pop();
  87. }
  88. closeAllNodes() {
  89. for (; this.closeNode(););
  90. }
  91. toJSON() {
  92. return JSON.stringify(this.rootNode, null, 4);
  93. }
  94. walk(e) {
  95. return this.constructor._walk(e, this.rootNode);
  96. }
  97. static _walk(n, e) {
  98. return "string" == typeof e ? n.addText(e) : e.children && (n.openNode(e), e.children.forEach(e => this._walk(n, e)), n.closeNode(e)), n;
  99. }
  100. static _collapse(e) {
  101. "string" != typeof e && e.children && (e.children.every(e => "string" == typeof e) ? e.children = [e.children.join("")] : e.children.forEach(e => {
  102. TokenTree._collapse(e);
  103. }));
  104. }
  105. }
  106. class TokenTreeEmitter extends TokenTree {
  107. constructor(e) {
  108. super(), this.options = e;
  109. }
  110. addText(e) {
  111. "" !== e && this.add(e);
  112. }
  113. startScope(e) {
  114. this.openNode(e);
  115. }
  116. endScope() {
  117. this.closeNode();
  118. }
  119. __addSublanguage(e, n) {
  120. e = e.root;
  121. n && (e.scope = "language:" + n), this.add(e);
  122. }
  123. toHTML() {
  124. return new HTMLRenderer(this, this.options).value();
  125. }
  126. finalize() {
  127. return this.closeAllNodes(), !0;
  128. }
  129. }
  130. function source(e) {
  131. return e ? "string" == typeof e ? e : e.source : null;
  132. }
  133. function lookahead(e) {
  134. return concat("(?=", e, ")");
  135. }
  136. function anyNumberOfTimes(e) {
  137. return concat("(?:", e, ")*");
  138. }
  139. function optional(e) {
  140. return concat("(?:", e, ")?");
  141. }
  142. function concat(...e) {
  143. return e.map(e => source(e)).join("");
  144. }
  145. function stripOptionsFromArgs(e) {
  146. var n = e[e.length - 1];
  147. return "object" == typeof n && n.constructor === Object ? (e.splice(e.length - 1, 1), n) : {};
  148. }
  149. function either(...e) {
  150. return "(" + (stripOptionsFromArgs(e).capture ? "" : "?:") + e.map(e => source(e)).join("|") + ")";
  151. }
  152. function countMatchGroups(e) {
  153. return new RegExp(e.toString() + "|").exec("").length - 1;
  154. }
  155. function startsWith(e, n) {
  156. e = e && e.exec(n);
  157. return e && 0 === e.index;
  158. }
  159. let BACKREF_RE = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./;
  160. function _rewriteBackreferences(e, {
  161. joinWith: n
  162. }) {
  163. let o = 0;
  164. return e.map(e => {
  165. var n = o += 1;
  166. let t = source(e),
  167. i = "";
  168. for (; 0 < t.length;) {
  169. var r = BACKREF_RE.exec(t);
  170. if (!r) {
  171. i += t;
  172. break;
  173. }
  174. i += t.substring(0, r.index), t = t.substring(r.index + r[0].length), "\\" === r[0][0] && r[1] ? i += "\\" + String(Number(r[1]) + n) : (i += r[0], "(" === r[0] && o++);
  175. }
  176. return i;
  177. }).map(e => `(${e})`).join(n);
  178. }
  179. let MATCH_NOTHING_RE = /\b\B/,
  180. IDENT_RE = "[a-zA-Z]\\w*",
  181. UNDERSCORE_IDENT_RE = "[a-zA-Z_]\\w*",
  182. NUMBER_RE = "\\b\\d+(\\.\\d+)?",
  183. C_NUMBER_RE = "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",
  184. BINARY_NUMBER_RE = "\\b(0b[01]+)",
  185. RE_STARTERS_RE = "!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",
  186. SHEBANG = (e = {}) => {
  187. var n = /^#![ ]*\//;
  188. return e.binary && (e.begin = concat(n, /.*\b/, e.binary, /\b.*/)), inherit$1({
  189. scope: "meta",
  190. begin: n,
  191. end: /$/,
  192. relevance: 0,
  193. "on:begin": (e, n) => {
  194. 0 !== e.index && n.ignoreMatch();
  195. }
  196. }, e);
  197. },
  198. BACKSLASH_ESCAPE = {
  199. begin: "\\\\[\\s\\S]",
  200. relevance: 0
  201. },
  202. APOS_STRING_MODE = {
  203. scope: "string",
  204. begin: "'",
  205. end: "'",
  206. illegal: "\\n",
  207. contains: [BACKSLASH_ESCAPE]
  208. },
  209. QUOTE_STRING_MODE = {
  210. scope: "string",
  211. begin: '"',
  212. end: '"',
  213. illegal: "\\n",
  214. contains: [BACKSLASH_ESCAPE]
  215. },
  216. PHRASAL_WORDS_MODE = {
  217. begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/
  218. },
  219. COMMENT = function (e, n, t = {}) {
  220. e = inherit$1({
  221. scope: "comment",
  222. begin: e,
  223. end: n,
  224. contains: []
  225. }, t), e.contains.push({
  226. scope: "doctag",
  227. begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)",
  228. end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,
  229. excludeBegin: !0,
  230. relevance: 0
  231. }), n = either("I", "a", "is", "so", "us", "to", "at", "if", "in", "it", "on", /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, /[A-Za-z]+[-][a-z]+/, /[A-Za-z][a-z]{2,}/);
  232. return e.contains.push({
  233. begin: concat(/[ ]+/, "(", n, /[.]?[:]?([.][ ]|[ ])/, "){3}")
  234. }), e;
  235. },
  236. C_LINE_COMMENT_MODE = COMMENT("//", "$"),
  237. C_BLOCK_COMMENT_MODE = COMMENT("/\\*", "\\*/"),
  238. HASH_COMMENT_MODE = COMMENT("#", "$"),
  239. NUMBER_MODE = {
  240. scope: "number",
  241. begin: NUMBER_RE,
  242. relevance: 0
  243. },
  244. C_NUMBER_MODE = {
  245. scope: "number",
  246. begin: C_NUMBER_RE,
  247. relevance: 0
  248. },
  249. BINARY_NUMBER_MODE = {
  250. scope: "number",
  251. begin: BINARY_NUMBER_RE,
  252. relevance: 0
  253. },
  254. REGEXP_MODE = {
  255. scope: "regexp",
  256. begin: /\/(?=[^/\n]*\/)/,
  257. end: /\/[gimuy]*/,
  258. contains: [BACKSLASH_ESCAPE, {
  259. begin: /\[/,
  260. end: /\]/,
  261. relevance: 0,
  262. contains: [BACKSLASH_ESCAPE]
  263. }]
  264. },
  265. TITLE_MODE = {
  266. scope: "title",
  267. begin: IDENT_RE,
  268. relevance: 0
  269. },
  270. UNDERSCORE_TITLE_MODE = {
  271. scope: "title",
  272. begin: UNDERSCORE_IDENT_RE,
  273. relevance: 0
  274. },
  275. METHOD_GUARD = {
  276. begin: "\\.\\s*" + UNDERSCORE_IDENT_RE,
  277. relevance: 0
  278. },
  279. END_SAME_AS_BEGIN = function (e) {
  280. return Object.assign(e, {
  281. "on:begin": (e, n) => {
  282. n.data._beginMatch = e[1];
  283. },
  284. "on:end": (e, n) => {
  285. n.data._beginMatch !== e[1] && n.ignoreMatch();
  286. }
  287. });
  288. };
  289. var MODES = Object.freeze({
  290. __proto__: null,
  291. APOS_STRING_MODE: APOS_STRING_MODE,
  292. BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,
  293. BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,
  294. BINARY_NUMBER_RE: BINARY_NUMBER_RE,
  295. COMMENT: COMMENT,
  296. C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,
  297. C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,
  298. C_NUMBER_MODE: C_NUMBER_MODE,
  299. C_NUMBER_RE: C_NUMBER_RE,
  300. END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,
  301. HASH_COMMENT_MODE: HASH_COMMENT_MODE,
  302. IDENT_RE: IDENT_RE,
  303. MATCH_NOTHING_RE: MATCH_NOTHING_RE,
  304. METHOD_GUARD: METHOD_GUARD,
  305. NUMBER_MODE: NUMBER_MODE,
  306. NUMBER_RE: NUMBER_RE,
  307. PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,
  308. QUOTE_STRING_MODE: QUOTE_STRING_MODE,
  309. REGEXP_MODE: REGEXP_MODE,
  310. RE_STARTERS_RE: RE_STARTERS_RE,
  311. SHEBANG: SHEBANG,
  312. TITLE_MODE: TITLE_MODE,
  313. UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,
  314. UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE
  315. });
  316. function skipIfHasPrecedingDot(e, n) {
  317. "." === e.input[e.index - 1] && n.ignoreMatch();
  318. }
  319. function scopeClassName(e, n) {
  320. void 0 !== e.className && (e.scope = e.className, delete e.className);
  321. }
  322. function beginKeywords(e, n) {
  323. n && e.beginKeywords && (e.begin = "\\b(" + e.beginKeywords.split(" ").join("|") + ")(?!\\.)(?=\\b|\\s)", e.__beforeBegin = skipIfHasPrecedingDot, e.keywords = e.keywords || e.beginKeywords, delete e.beginKeywords, void 0 === e.relevance) && (e.relevance = 0);
  324. }
  325. function compileIllegal(e, n) {
  326. Array.isArray(e.illegal) && (e.illegal = either(...e.illegal));
  327. }
  328. function compileMatch(e, n) {
  329. if (e.match) {
  330. if (e.begin || e.end) throw new Error("begin & end are not supported with match");
  331. e.begin = e.match, delete e.match;
  332. }
  333. }
  334. function compileRelevance(e, n) {
  335. void 0 === e.relevance && (e.relevance = 1);
  336. }
  337. let beforeMatchExt = (n, e) => {
  338. if (n.beforeMatch) {
  339. if (n.starts) throw new Error("beforeMatch cannot be used with starts");
  340. var t = Object.assign({}, n);
  341. Object.keys(n).forEach(e => {
  342. delete n[e];
  343. }), n.keywords = t.keywords, n.begin = concat(t.beforeMatch, lookahead(t.begin)), n.starts = {
  344. relevance: 0,
  345. contains: [Object.assign(t, {
  346. endsParent: !0
  347. })]
  348. }, n.relevance = 0, delete t.beforeMatch;
  349. }
  350. },
  351. COMMON_KEYWORDS = ["of", "and", "for", "in", "not", "or", "if", "then", "parent", "list", "value"],
  352. DEFAULT_KEYWORD_SCOPE = "keyword";
  353. function compileKeywords(n, t, e = DEFAULT_KEYWORD_SCOPE) {
  354. let i = Object.create(null);
  355. return "string" == typeof n ? r(e, n.split(" ")) : Array.isArray(n) ? r(e, n) : Object.keys(n).forEach(function (e) {
  356. Object.assign(i, compileKeywords(n[e], t, e));
  357. }), i;
  358. function r(n, e) {
  359. (e = t ? e.map(e => e.toLowerCase()) : e).forEach(function (e) {
  360. e = e.split("|");
  361. i[e[0]] = [n, scoreForKeyword(e[0], e[1])];
  362. });
  363. }
  364. }
  365. function scoreForKeyword(e, n) {
  366. return n ? Number(n) : commonKeyword(e) ? 0 : 1;
  367. }
  368. function commonKeyword(e) {
  369. return COMMON_KEYWORDS.includes(e.toLowerCase());
  370. }
  371. let seenDeprecations = {},
  372. error = e => {
  373. console.error(e);
  374. },
  375. warn = (e, ...n) => {
  376. console.log("WARN: " + e, ...n);
  377. },
  378. deprecated = (e, n) => {
  379. seenDeprecations[e + "/" + n] || (console.log(`Deprecated as of ${e}. ` + n), seenDeprecations[e + "/" + n] = !0);
  380. },
  381. MultiClassError = new Error();
  382. function remapScopeNames(e, n, {
  383. key: t
  384. }) {
  385. let i = 0;
  386. var r = e[t],
  387. o = {},
  388. a = {};
  389. for (let e = 1; e <= n.length; e++) a[e + i] = r[e], o[e + i] = !0, i += countMatchGroups(n[e - 1]);
  390. e[t] = a, e[t]._emit = o, e[t]._multi = !0;
  391. }
  392. function beginMultiClass(e) {
  393. if (Array.isArray(e.begin)) {
  394. if (e.skip || e.excludeBegin || e.returnBegin) throw (error("skip, excludeBegin, returnBegin not compatible with beginScope: {}"), MultiClassError);
  395. if ("object" != typeof e.beginScope || null === e.beginScope) throw (error("beginScope must be object"), MultiClassError);
  396. remapScopeNames(e, e.begin, {
  397. key: "beginScope"
  398. }), e.begin = _rewriteBackreferences(e.begin, {
  399. joinWith: ""
  400. });
  401. }
  402. }
  403. function endMultiClass(e) {
  404. if (Array.isArray(e.end)) {
  405. if (e.skip || e.excludeEnd || e.returnEnd) throw (error("skip, excludeEnd, returnEnd not compatible with endScope: {}"), MultiClassError);
  406. if ("object" != typeof e.endScope || null === e.endScope) throw (error("endScope must be object"), MultiClassError);
  407. remapScopeNames(e, e.end, {
  408. key: "endScope"
  409. }), e.end = _rewriteBackreferences(e.end, {
  410. joinWith: ""
  411. });
  412. }
  413. }
  414. function scopeSugar(e) {
  415. e.scope && "object" == typeof e.scope && null !== e.scope && (e.beginScope = e.scope, delete e.scope);
  416. }
  417. function MultiClass(e) {
  418. scopeSugar(e), "string" == typeof e.beginScope && (e.beginScope = {
  419. _wrap: e.beginScope
  420. }), "string" == typeof e.endScope && (e.endScope = {
  421. _wrap: e.endScope
  422. }), beginMultiClass(e), endMultiClass(e);
  423. }
  424. function compileLanguage(o) {
  425. function a(e, n) {
  426. return new RegExp(source(e), "m" + (o.case_insensitive ? "i" : "") + (o.unicodeRegex ? "u" : "") + (n ? "g" : ""));
  427. }
  428. class n {
  429. constructor() {
  430. this.matchIndexes = {}, this.regexes = [], this.matchAt = 1, this.position = 0;
  431. }
  432. addRule(e, n) {
  433. n.position = this.position++, this.matchIndexes[this.matchAt] = n, this.regexes.push([n, e]), this.matchAt += countMatchGroups(e) + 1;
  434. }
  435. compile() {
  436. 0 === this.regexes.length && (this.exec = () => null);
  437. var e = this.regexes.map(e => e[1]);
  438. this.matcherRe = a(_rewriteBackreferences(e, {
  439. joinWith: "|"
  440. }), !0), this.lastIndex = 0;
  441. }
  442. exec(e) {
  443. this.matcherRe.lastIndex = this.lastIndex;
  444. var n,
  445. t,
  446. e = this.matcherRe.exec(e);
  447. return e ? (n = e.findIndex((e, n) => 0 < n && void 0 !== e), t = this.matchIndexes[n], e.splice(0, n), Object.assign(e, t)) : null;
  448. }
  449. }
  450. class s {
  451. constructor() {
  452. this.rules = [], this.multiRegexes = [], this.count = 0, this.lastIndex = 0, this.regexIndex = 0;
  453. }
  454. getMatcher(e) {
  455. if (this.multiRegexes[e]) return this.multiRegexes[e];
  456. let t = new n();
  457. return this.rules.slice(e).forEach(([e, n]) => t.addRule(e, n)), t.compile(), this.multiRegexes[e] = t;
  458. }
  459. resumingScanAtSamePosition() {
  460. return 0 !== this.regexIndex;
  461. }
  462. considerAll() {
  463. this.regexIndex = 0;
  464. }
  465. addRule(e, n) {
  466. this.rules.push([e, n]), "begin" === n.type && this.count++;
  467. }
  468. exec(e) {
  469. var n = this.getMatcher(this.regexIndex);
  470. n.lastIndex = this.lastIndex;
  471. let t = n.exec(e);
  472. return !this.resumingScanAtSamePosition() || t && t.index === this.lastIndex || ((n = this.getMatcher(0)).lastIndex = this.lastIndex + 1, t = n.exec(e)), t && (this.regexIndex += t.position + 1, this.regexIndex === this.count) && this.considerAll(), t;
  473. }
  474. }
  475. if (o.compilerExtensions || (o.compilerExtensions = []), o.contains && o.contains.includes("self")) throw new Error("ERR: contains `self` is not supported at the top-level of a language. See documentation.");
  476. return o.classNameAliases = inherit$1(o.classNameAliases || {}), function n(t, i) {
  477. let r = t;
  478. if (!t.isCompiled) {
  479. [scopeClassName, compileMatch, MultiClass, beforeMatchExt].forEach(e => e(t, i)), o.compilerExtensions.forEach(e => e(t, i)), t.__beforeBegin = null, [beginKeywords, compileIllegal, compileRelevance].forEach(e => e(t, i)), t.isCompiled = !0;
  480. let e = null;
  481. "object" == typeof t.keywords && t.keywords.$pattern && (t.keywords = Object.assign({}, t.keywords), e = t.keywords.$pattern, delete t.keywords.$pattern), e = e || /\w+/, t.keywords && (t.keywords = compileKeywords(t.keywords, o.case_insensitive)), r.keywordPatternRe = a(e, !0), i && (t.begin || (t.begin = /\B|\b/), r.beginRe = a(r.begin), t.end || t.endsWithParent || (t.end = /\B|\b/), t.end && (r.endRe = a(r.end)), r.terminatorEnd = source(r.end) || "", t.endsWithParent) && i.terminatorEnd && (r.terminatorEnd += (t.end ? "|" : "") + i.terminatorEnd), t.illegal && (r.illegalRe = a(t.illegal)), t.contains || (t.contains = []), t.contains = [].concat(...t.contains.map(function (e) {
  482. return expandOrCloneMode("self" === e ? t : e);
  483. })), t.contains.forEach(function (e) {
  484. n(e, r);
  485. }), t.starts && n(t.starts, i), r.matcher = function (e) {
  486. let n = new s();
  487. return e.contains.forEach(e => n.addRule(e.begin, {
  488. rule: e,
  489. type: "begin"
  490. })), e.terminatorEnd && n.addRule(e.terminatorEnd, {
  491. type: "end"
  492. }), e.illegal && n.addRule(e.illegal, {
  493. type: "illegal"
  494. }), n;
  495. }(r);
  496. }
  497. return r;
  498. }(o);
  499. }
  500. function dependencyOnParent(e) {
  501. return !!e && (e.endsWithParent || dependencyOnParent(e.starts));
  502. }
  503. function expandOrCloneMode(n) {
  504. return n.variants && !n.cachedVariants && (n.cachedVariants = n.variants.map(function (e) {
  505. return inherit$1(n, {
  506. variants: null
  507. }, e);
  508. })), n.cachedVariants || (dependencyOnParent(n) ? inherit$1(n, {
  509. starts: n.starts ? inherit$1(n.starts) : null
  510. }) : Object.isFrozen(n) ? inherit$1(n) : n);
  511. }
  512. var version = "11.9.0";
  513. class HTMLInjectionError extends Error {
  514. constructor(e, n) {
  515. super(e), this.name = "HTMLInjectionError", this.html = n;
  516. }
  517. }
  518. let escape = escapeHTML,
  519. inherit = inherit$1,
  520. NO_MATCH = Symbol("nomatch"),
  521. MAX_KEYWORD_HITS = 7,
  522. HLJS = function (i) {
  523. let y = Object.create(null),
  524. a = Object.create(null),
  525. r = [],
  526. A = !0,
  527. v = "Could not find the language '{}', did you forget to load/include a language module?",
  528. o = {
  529. disableAutodetect: !0,
  530. name: "Plain text",
  531. contains: []
  532. },
  533. C = {
  534. ignoreUnescapedHTML: !1,
  535. throwUnescapedHTML: !1,
  536. noHighlightRe: /^(no-?highlight)$/i,
  537. languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i,
  538. classPrefix: "hljs-",
  539. cssSelector: "pre code",
  540. languages: null,
  541. __emitter: TokenTreeEmitter
  542. };
  543. function s(e) {
  544. return C.noHighlightRe.test(e);
  545. }
  546. function l(e, n, t) {
  547. let i = "",
  548. r = "";
  549. "object" == typeof n ? (i = e, t = n.ignoreIllegals, r = n.language) : (deprecated("10.7.0", "highlight(lang, code, ...args) has been deprecated."), deprecated("10.7.0", "Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), r = e, i = n), void 0 === t && (t = !0);
  550. e = {
  551. code: i,
  552. language: r
  553. }, u("before:highlight", e), n = e.result || D(e.language, e.code, t);
  554. return n.code = e.code, u("after:highlight", n), n;
  555. }
  556. function D(i, r, o, e) {
  557. let a = Object.create(null);
  558. function s() {
  559. if (_.keywords) {
  560. let e = 0,
  561. n = (_.keywordPatternRe.lastIndex = 0, _.keywordPatternRe.exec(O)),
  562. t = "";
  563. for (; n;) {
  564. t += O.substring(e, n.index);
  565. var i,
  566. r = E.case_insensitive ? n[0].toLowerCase() : n[0],
  567. o = _.keywords[r];
  568. !o || ([o, i] = o, m.addText(t), t = "", a[r] = (a[r] || 0) + 1, a[r] <= MAX_KEYWORD_HITS && (R += i), o.startsWith("_")) ? t += n[0] : (r = E.classNameAliases[o] || o, c(n[0], r)), e = _.keywordPatternRe.lastIndex, n = _.keywordPatternRe.exec(O);
  569. }
  570. t += O.substring(e), m.addText(t);
  571. } else m.addText(O);
  572. }
  573. function l() {
  574. (null != _.subLanguage ? function () {
  575. if ("" !== O) {
  576. let e = null;
  577. if ("string" == typeof _.subLanguage) {
  578. if (!y[_.subLanguage]) return m.addText(O);
  579. e = D(_.subLanguage, O, !0, b[_.subLanguage]), b[_.subLanguage] = e._top;
  580. } else e = I(O, _.subLanguage.length ? _.subLanguage : null);
  581. 0 < _.relevance && (R += e.relevance), m.__addSublanguage(e._emitter, e.language);
  582. }
  583. } : s)(), O = "";
  584. }
  585. function c(e, n) {
  586. "" !== e && (m.startScope(n), m.addText(e), m.endScope());
  587. }
  588. function g(e, n) {
  589. let t = 1;
  590. for (var i, r, o = n.length - 1; t <= o;) e._emit[t] && (i = E.classNameAliases[e[t]] || e[t], r = n[t], i ? c(r, i) : (O = r, s(), O = "")), t++;
  591. }
  592. function u(e, n) {
  593. e.scope && "string" == typeof e.scope && m.openNode(E.classNameAliases[e.scope] || e.scope), e.beginScope && (e.beginScope._wrap ? (c(O, E.classNameAliases[e.beginScope._wrap] || e.beginScope._wrap), O = "") : e.beginScope._multi && (g(e.beginScope, n), O = "")), _ = Object.create(e, {
  594. parent: {
  595. value: _
  596. }
  597. });
  598. }
  599. function d(e) {
  600. var n,
  601. t,
  602. i = e[0],
  603. r = e.rule,
  604. o = new Response(r);
  605. for (n of [r.__beforeBegin, r["on:begin"]]) if (n && (n(e, o), o.isMatchIgnored)) return t = i, 0 === _.matcher.regexIndex ? (O += t[0], 1) : (w = !0, 0);
  606. return r.skip ? O += i : (r.excludeBegin && (O += i), l(), r.returnBegin || r.excludeBegin || (O = i)), u(r, e), r.returnBegin ? 0 : i.length;
  607. }
  608. function h(e) {
  609. var n = e[0],
  610. t = r.substring(e.index),
  611. i = function e(n, t, i) {
  612. let r = startsWith(n.endRe, i);
  613. var o;
  614. if (r = r && (!n["on:end"] || (o = new Response(n), n["on:end"](t, o), !o.isMatchIgnored)) && r) {
  615. for (; n.endsParent && n.parent;) n = n.parent;
  616. return n;
  617. }
  618. if (n.endsWithParent) return e(n.parent, t, i);
  619. }(_, e, t);
  620. if (!i) return NO_MATCH;
  621. t = _;
  622. for (_.endScope && _.endScope._wrap ? (l(), c(n, _.endScope._wrap)) : _.endScope && _.endScope._multi ? (l(), g(_.endScope, e)) : t.skip ? O += n : (t.returnEnd || t.excludeEnd || (O += n), l(), t.excludeEnd && (O = n)); _.scope && m.closeNode(), _.skip || _.subLanguage || (R += _.relevance), (_ = _.parent) !== i.parent;);
  623. return i.starts && u(i.starts, e), t.returnEnd ? 0 : n.length;
  624. }
  625. let p = {};
  626. function n(e, n) {
  627. var t = n && n[0];
  628. if (O += e, null == t) return l(), 0;
  629. if ("begin" === p.type && "end" === n.type && p.index === n.index && "" === t) {
  630. if (O += r.slice(n.index, n.index + 1), A) return 1;
  631. throw ((e = new Error(`0 width match regex (${i})`)).languageName = i, e.badRule = p.rule, e);
  632. }
  633. if ("begin" === (p = n).type) return d(n);
  634. if ("illegal" === n.type && !o) throw ((e = new Error('Illegal lexeme "' + t + '" for mode "' + (_.scope || "<unnamed>") + '"')).mode = _, e);
  635. if ("end" === n.type) {
  636. e = h(n);
  637. if (e !== NO_MATCH) return e;
  638. }
  639. if ("illegal" === n.type && "" === t) return 1;
  640. if (1e5 < S && S > 3 * n.index) throw new Error("potential infinite loop, way more iterations than matches");
  641. return O += t, t.length;
  642. }
  643. let E = k(i);
  644. if (!E) throw (error(v.replace("{}", i)), new Error('Unknown language: "' + i + '"'));
  645. var t = compileLanguage(E);
  646. let f = "",
  647. _ = e || t,
  648. b = {},
  649. m = new C.__emitter(C);
  650. var M = [];
  651. for (let e = _; e !== E; e = e.parent) e.scope && M.unshift(e.scope);
  652. M.forEach(e => m.openNode(e));
  653. let O = "",
  654. R = 0,
  655. N = 0,
  656. S = 0,
  657. w = !1;
  658. try {
  659. if (E.__emitTokens) E.__emitTokens(r, m);else {
  660. for (_.matcher.considerAll();;) {
  661. S++, w ? w = !1 : _.matcher.considerAll(), _.matcher.lastIndex = N;
  662. var T = _.matcher.exec(r);
  663. if (!T) break;
  664. var x = n(r.substring(N, T.index), T);
  665. N = T.index + x;
  666. }
  667. n(r.substring(N));
  668. }
  669. return m.finalize(), f = m.toHTML(), {
  670. language: i,
  671. value: f,
  672. relevance: R,
  673. illegal: !1,
  674. _emitter: m,
  675. _top: _
  676. };
  677. } catch (e) {
  678. if (e.message && e.message.includes("Illegal")) return {
  679. language: i,
  680. value: escape(r),
  681. illegal: !0,
  682. relevance: 0,
  683. _illegalBy: {
  684. message: e.message,
  685. index: N,
  686. context: r.slice(N - 100, N + 100),
  687. mode: e.mode,
  688. resultSoFar: f
  689. },
  690. _emitter: m
  691. };
  692. if (A) return {
  693. language: i,
  694. value: escape(r),
  695. illegal: !1,
  696. relevance: 0,
  697. errorRaised: e,
  698. _emitter: m,
  699. _top: _
  700. };
  701. throw e;
  702. }
  703. }
  704. function I(n, e) {
  705. e = e || C.languages || Object.keys(y);
  706. t = n, (i = {
  707. value: escape(t),
  708. illegal: !1,
  709. relevance: 0,
  710. _top: o,
  711. _emitter: new C.__emitter(C)
  712. })._emitter.addText(t);
  713. var t = i,
  714. i = e.filter(k).filter(g).map(e => D(e, n, !1)),
  715. e = (i.unshift(t), i.sort((e, n) => {
  716. if (e.relevance !== n.relevance) return n.relevance - e.relevance;
  717. if (e.language && n.language) {
  718. if (k(e.language).supersetOf === n.language) return 1;
  719. if (k(n.language).supersetOf === e.language) return -1;
  720. }
  721. return 0;
  722. })),
  723. [t, i] = e,
  724. e = t;
  725. return e.secondBest = i, e;
  726. }
  727. function n(e) {
  728. t = (n = e).className + " ", t += n.parentNode ? n.parentNode.className : "";
  729. var n = (o = C.languageDetectRe.exec(t)) ? ((r = k(o[1])) || (warn(v.replace("{}", o[1])), warn("Falling back to no-highlight mode for this block.", n)), r ? o[1] : "no-highlight") : t.split(/\s+/).find(e => s(e) || k(e));
  730. if (!s(n)) if (u("before:highlightElement", {
  731. el: e,
  732. language: n
  733. }), e.dataset.highlighted) console.log("Element previously highlighted. To highlight again, first unset `dataset.highlighted`.", e);else {
  734. if (0 < e.children.length) if (C.ignoreUnescapedHTML || (console.warn("One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), console.warn("The element with unescaped HTML:"), console.warn(e)), C.throwUnescapedHTML) throw new HTMLInjectionError("One of your code blocks includes unescaped HTML.", e.innerHTML);
  735. var t,
  736. i,
  737. r = e.textContent,
  738. o = n ? l(r, {
  739. language: n,
  740. ignoreIllegals: !0
  741. }) : I(r);
  742. e.innerHTML = o.value, e.dataset.highlighted = "yes", t = e, i = o.language, n = (n = n) && a[n] || i, t.classList.add("hljs"), t.classList.add("language-" + n), e.result = {
  743. language: o.language,
  744. re: o.relevance,
  745. relevance: o.relevance
  746. }, o.secondBest && (e.secondBest = {
  747. language: o.secondBest.language,
  748. relevance: o.secondBest.relevance
  749. }), u("after:highlightElement", {
  750. el: e,
  751. result: o,
  752. text: r
  753. });
  754. }
  755. }
  756. let e = !1;
  757. function t() {
  758. "loading" === document.readyState ? e = !0 : document.querySelectorAll(C.cssSelector).forEach(n);
  759. }
  760. function k(e) {
  761. return e = (e || "").toLowerCase(), y[e] || y[a[e]];
  762. }
  763. function c(e, {
  764. languageName: n
  765. }) {
  766. (e = "string" == typeof e ? [e] : e).forEach(e => {
  767. a[e.toLowerCase()] = n;
  768. });
  769. }
  770. function g(e) {
  771. e = k(e);
  772. return e && !e.disableAutodetect;
  773. }
  774. function u(e, n) {
  775. let t = e;
  776. r.forEach(function (e) {
  777. e[t] && e[t](n);
  778. });
  779. }
  780. for (var d in ("undefined" != typeof window && window.addEventListener && window.addEventListener("DOMContentLoaded", function () {
  781. e && t();
  782. }, !1), Object.assign(i, {
  783. highlight: l,
  784. highlightAuto: I,
  785. highlightAll: t,
  786. highlightElement: n,
  787. highlightBlock: function (e) {
  788. return deprecated("10.7.0", "highlightBlock will be removed entirely in v12.0"), deprecated("10.7.0", "Please use highlightElement now."), n(e);
  789. },
  790. configure: function (e) {
  791. C = inherit(C, e);
  792. },
  793. initHighlighting: () => {
  794. t(), deprecated("10.6.0", "initHighlighting() deprecated. Use highlightAll() now.");
  795. },
  796. initHighlightingOnLoad: function () {
  797. t(), deprecated("10.6.0", "initHighlightingOnLoad() deprecated. Use highlightAll() now.");
  798. },
  799. registerLanguage: function (n, e) {
  800. let t = null;
  801. try {
  802. t = e(i);
  803. } catch (e) {
  804. if (error("Language definition for '{}' could not be registered.".replace("{}", n)), !A) throw e;
  805. error(e), t = o;
  806. }
  807. t.name || (t.name = n), (y[n] = t).rawDefinition = e.bind(null, i), t.aliases && c(t.aliases, {
  808. languageName: n
  809. });
  810. },
  811. unregisterLanguage: function (e) {
  812. delete y[e];
  813. for (var n of Object.keys(a)) a[n] === e && delete a[n];
  814. },
  815. listLanguages: function () {
  816. return Object.keys(y);
  817. },
  818. getLanguage: k,
  819. registerAliases: c,
  820. autoDetection: g,
  821. inherit: inherit,
  822. addPlugin: function (e) {
  823. var n;
  824. (n = e)["before:highlightBlock"] && !n["before:highlightElement"] && (n["before:highlightElement"] = e => {
  825. n["before:highlightBlock"](Object.assign({
  826. block: e.el
  827. }, e));
  828. }), n["after:highlightBlock"] && !n["after:highlightElement"] && (n["after:highlightElement"] = e => {
  829. n["after:highlightBlock"](Object.assign({
  830. block: e.el
  831. }, e));
  832. }), r.push(e);
  833. },
  834. removePlugin: function (e) {
  835. -1 !== (e = r.indexOf(e)) && r.splice(e, 1);
  836. }
  837. }), i.debugMode = function () {
  838. A = !1;
  839. }, i.safeMode = function () {
  840. A = !0;
  841. }, i.versionString = version, i.regex = {
  842. concat: concat,
  843. lookahead: lookahead,
  844. either: either,
  845. optional: optional,
  846. anyNumberOfTimes: anyNumberOfTimes
  847. }, MODES)) "object" == typeof MODES[d] && deepFreeze(MODES[d]);
  848. return Object.assign(i, MODES), i;
  849. },
  850. highlight = HLJS({});
  851. highlight.newInstance = () => HLJS({}), (highlight.HighlightJS = highlight).default = highlight;
  852. export default function () {
  853. return highlight;
  854. }