highlight.js 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987
  1. 'use strict';
  2. function deepFreeze(e) {
  3. Object.freeze(e);
  4. var n = 'function' == typeof e;
  5. Object.getOwnPropertyNames(e).forEach(function (t) {
  6. !e.hasOwnProperty(t) ||
  7. null === e[t] ||
  8. ('object' != typeof e[t] && 'function' != typeof e[t]) ||
  9. (n && ('caller' === t || 'callee' === t || 'arguments' === t)) ||
  10. Object.isFrozen(e[t]) ||
  11. deepFreeze(e[t]);
  12. });
  13. return e;
  14. }
  15. function escapeHTML(e) {
  16. return e.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
  17. }
  18. function inherit(e) {
  19. var n;
  20. var t = {};
  21. var r = Array.prototype.slice.call(arguments, 1);
  22. for (n in e) {
  23. t[n] = e[n];
  24. }
  25. r.forEach(function (e) {
  26. for (n in e) {
  27. t[n] = e[n];
  28. }
  29. });
  30. return t;
  31. }
  32. function tag(e) {
  33. return e.nodeName.toLowerCase();
  34. }
  35. function nodeStream(e) {
  36. var n = [];
  37. (function e(t, r) {
  38. for (var a = t.firstChild; a; a = a.nextSibling) {
  39. if (3 === a.nodeType) {
  40. r += a.nodeValue.length;
  41. } else {
  42. if (1 === a.nodeType) {
  43. n.push({
  44. event: 'start',
  45. offset: r,
  46. node: a
  47. });
  48. r = e(a, r);
  49. tag(a).match(/br|hr|img|input/) ||
  50. n.push({
  51. event: 'stop',
  52. offset: r,
  53. node: a
  54. });
  55. }
  56. }
  57. }
  58. return r;
  59. })(e, 0);
  60. return n;
  61. }
  62. function mergeStreams(e, n, t) {
  63. var r = 0;
  64. var a = '';
  65. var i = [];
  66. function s() {
  67. return e.length && n.length ? (e[0].offset !== n[0].offset ? (e[0].offset < n[0].offset ? e : n) : 'start' === n[0].event ? e : n) : e.length ? e : n;
  68. }
  69. function o(e) {
  70. a +=
  71. '<' +
  72. tag(e) +
  73. [].map
  74. .call(e.attributes, function (e) {
  75. return ' ' + e.nodeName + '="' + escapeHTML(e.value).replace(/"/g, '&quot;') + '"';
  76. })
  77. .join('') +
  78. '>';
  79. }
  80. function l(e) {
  81. a += '</' + tag(e) + '>';
  82. }
  83. function c(e) {
  84. ('start' === e.event ? o : l)(e.node);
  85. }
  86. for (; e.length || n.length; ) {
  87. var u = s();
  88. a += escapeHTML(t.substring(r, u[0].offset));
  89. r = u[0].offset;
  90. if (u === e) {
  91. i.reverse().forEach(l);
  92. do {
  93. c(u.splice(0, 1)[0]);
  94. u = s();
  95. } while (u === e && u.length && u[0].offset === r);
  96. i.reverse().forEach(o);
  97. } else {
  98. 'start' === u[0].event ? i.push(u[0].node) : i.pop();
  99. c(u.splice(0, 1)[0]);
  100. }
  101. }
  102. return a + escapeHTML(t.substr(r));
  103. }
  104. var utils = Object.freeze({
  105. __proto__: null,
  106. escapeHTML: escapeHTML,
  107. inherit: inherit,
  108. nodeStream: nodeStream,
  109. mergeStreams: mergeStreams
  110. });
  111. const SPAN_CLOSE = '</span>';
  112. const emitsWrappingTags = (e) => !!e.kind;
  113. class HTMLRenderer {
  114. constructor(e, n) {
  115. this.buffer = '';
  116. this.classPrefix = n.classPrefix;
  117. e.walk(this);
  118. }
  119. addText(e) {
  120. this.buffer += escapeHTML(e);
  121. }
  122. openNode(e) {
  123. if (!emitsWrappingTags(e)) {
  124. return;
  125. }
  126. let n = e.kind;
  127. e.sublanguage || (n = `${this.classPrefix}${n}`);
  128. this.span(n);
  129. }
  130. closeNode(e) {
  131. if (emitsWrappingTags(e)) {
  132. this.buffer += SPAN_CLOSE;
  133. }
  134. }
  135. span(e) {
  136. this.buffer += `<span class="${e}">`;
  137. }
  138. value() {
  139. return this.buffer;
  140. }
  141. }
  142. class TokenTree {
  143. constructor() {
  144. this.rootNode = {
  145. children: []
  146. };
  147. this.stack = [this.rootNode];
  148. }
  149. get top() {
  150. return this.stack[this.stack.length - 1];
  151. }
  152. get root() {
  153. return this.rootNode;
  154. }
  155. add(e) {
  156. this.top.children.push(e);
  157. }
  158. openNode(e) {
  159. let n = {
  160. kind: e,
  161. children: []
  162. };
  163. this.add(n);
  164. this.stack.push(n);
  165. }
  166. closeNode() {
  167. if (this.stack.length > 1) {
  168. return this.stack.pop();
  169. }
  170. }
  171. closeAllNodes() {
  172. for (; this.closeNode(); ) {}
  173. }
  174. toJSON() {
  175. return JSON.stringify(this.rootNode, null, 4);
  176. }
  177. walk(e) {
  178. return this.constructor._walk(e, this.rootNode);
  179. }
  180. static _walk(e, n) {
  181. 'string' == typeof n ? e.addText(n) : n.children && (e.openNode(n), n.children.forEach((n) => this._walk(e, n)), e.closeNode(n));
  182. return e;
  183. }
  184. static _collapse(e) {
  185. if (e.children) {
  186. e.children.every((e) => 'string' == typeof e)
  187. ? ((e.text = e.children.join('')), delete e.children)
  188. : e.children.forEach((e) => {
  189. if ('string' != typeof e) {
  190. TokenTree._collapse(e);
  191. }
  192. });
  193. }
  194. }
  195. }
  196. class TokenTreeEmitter extends TokenTree {
  197. constructor(e) {
  198. super();
  199. this.options = e;
  200. }
  201. addKeyword(e, n) {
  202. if ('' !== e) {
  203. this.openNode(n);
  204. this.addText(e);
  205. this.closeNode();
  206. }
  207. }
  208. addText(e) {
  209. if ('' !== e) {
  210. this.add(e);
  211. }
  212. }
  213. addSublanguage(e, n) {
  214. let t = e.root;
  215. t.kind = n;
  216. t.sublanguage = true;
  217. this.add(t);
  218. }
  219. toHTML() {
  220. return new HTMLRenderer(this, this.options).value();
  221. }
  222. finalize() {}
  223. }
  224. function escape(e) {
  225. return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'm');
  226. }
  227. function source(e) {
  228. return (e && e.source) || e;
  229. }
  230. function countMatchGroups(e) {
  231. return new RegExp(e.toString() + '|').exec('').length - 1;
  232. }
  233. function startsWith(e, n) {
  234. var t = e && e.exec(n);
  235. return t && 0 === t.index;
  236. }
  237. function join(e, n) {
  238. for (var t = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./, r = 0, a = '', i = 0; i < e.length; i++) {
  239. var s = (r += 1);
  240. var o = source(e[i]);
  241. for (i > 0 && (a += n), a += '('; o.length > 0; ) {
  242. var l = t.exec(o);
  243. if (null == l) {
  244. a += o;
  245. break;
  246. }
  247. a += o.substring(0, l.index);
  248. o = o.substring(l.index + l[0].length);
  249. '\\' == l[0][0] && l[1] ? (a += '\\' + String(Number(l[1]) + s)) : ((a += l[0]), '(' == l[0] && r++);
  250. }
  251. a += ')';
  252. }
  253. return a;
  254. }
  255. const IDENT_RE = '[a-zA-Z]\\w*';
  256. const NUMBER_RE = '\\b\\d+(\\.\\d+)?';
  257. const C_NUMBER_RE = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)';
  258. const RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';
  259. const BACKSLASH_ESCAPE = {
  260. begin: '\\\\[\\s\\S]',
  261. relevance: 0
  262. };
  263. const APOS_STRING_MODE = {
  264. className: 'string',
  265. begin: "'",
  266. end: "'",
  267. illegal: '\\n',
  268. contains: [BACKSLASH_ESCAPE]
  269. };
  270. const QUOTE_STRING_MODE = {
  271. className: 'string',
  272. begin: '"',
  273. end: '"',
  274. illegal: '\\n',
  275. contains: [BACKSLASH_ESCAPE]
  276. };
  277. const PHRASAL_WORDS_MODE = {
  278. 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/
  279. };
  280. const COMMENT = function (e, n, t) {
  281. var r = inherit(
  282. {
  283. className: 'comment',
  284. begin: e,
  285. end: n,
  286. contains: []
  287. },
  288. t || {}
  289. );
  290. r.contains.push(PHRASAL_WORDS_MODE);
  291. r.contains.push({
  292. className: 'doctag',
  293. begin: '(?:TODO|FIXME|NOTE|BUG|XXX):',
  294. relevance: 0
  295. });
  296. return r;
  297. };
  298. const C_LINE_COMMENT_MODE = COMMENT('//', '$');
  299. const C_BLOCK_COMMENT_MODE = COMMENT('/\\*', '\\*/');
  300. const HASH_COMMENT_MODE = COMMENT('#', '$');
  301. const NUMBER_MODE = {
  302. className: 'number',
  303. begin: NUMBER_RE,
  304. relevance: 0
  305. };
  306. const C_NUMBER_MODE = {
  307. className: 'number',
  308. begin: C_NUMBER_RE,
  309. relevance: 0
  310. };
  311. const BINARY_NUMBER_MODE = {
  312. className: 'number',
  313. begin: '\\b(0b[01]+)',
  314. relevance: 0
  315. };
  316. const CSS_NUMBER_MODE = {
  317. className: 'number',
  318. begin: NUMBER_RE + '(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?',
  319. relevance: 0
  320. };
  321. const REGEXP_MODE = {
  322. begin: /(?=\/[^\/\n]*\/)/,
  323. contains: [
  324. {
  325. className: 'regexp',
  326. begin: /\//,
  327. end: /\/[gimuy]*/,
  328. illegal: /\n/,
  329. contains: [
  330. BACKSLASH_ESCAPE,
  331. {
  332. begin: /\[/,
  333. end: /\]/,
  334. relevance: 0,
  335. contains: [BACKSLASH_ESCAPE]
  336. }
  337. ]
  338. }
  339. ]
  340. };
  341. const TITLE_MODE = {
  342. className: 'title',
  343. begin: IDENT_RE,
  344. relevance: 0
  345. };
  346. const UNDERSCORE_TITLE_MODE = {
  347. className: 'title',
  348. begin: '[a-zA-Z_]\\w*',
  349. relevance: 0
  350. };
  351. const METHOD_GUARD = {
  352. begin: '\\.\\s*[a-zA-Z_]\\w*',
  353. relevance: 0
  354. };
  355. var MODES = Object.freeze({
  356. __proto__: null,
  357. IDENT_RE: IDENT_RE,
  358. UNDERSCORE_IDENT_RE: '[a-zA-Z_]\\w*',
  359. NUMBER_RE: NUMBER_RE,
  360. C_NUMBER_RE: C_NUMBER_RE,
  361. BINARY_NUMBER_RE: '\\b(0b[01]+)',
  362. RE_STARTERS_RE: RE_STARTERS_RE,
  363. BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,
  364. APOS_STRING_MODE: APOS_STRING_MODE,
  365. QUOTE_STRING_MODE: QUOTE_STRING_MODE,
  366. PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,
  367. COMMENT: COMMENT,
  368. C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,
  369. C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,
  370. HASH_COMMENT_MODE: HASH_COMMENT_MODE,
  371. NUMBER_MODE: NUMBER_MODE,
  372. C_NUMBER_MODE: C_NUMBER_MODE,
  373. BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,
  374. CSS_NUMBER_MODE: CSS_NUMBER_MODE,
  375. REGEXP_MODE: REGEXP_MODE,
  376. TITLE_MODE: TITLE_MODE,
  377. UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE,
  378. METHOD_GUARD: METHOD_GUARD
  379. });
  380. var COMMON_KEYWORDS = 'of and for in not or if then'.split(' ');
  381. function compileLanguage(e) {
  382. function n(n, t) {
  383. return new RegExp(source(n), 'm' + (e.case_insensitive ? 'i' : '') + (t ? 'g' : ''));
  384. }
  385. class t {
  386. constructor() {
  387. this.matchIndexes = {};
  388. this.regexes = [];
  389. this.matchAt = 1;
  390. this.position = 0;
  391. }
  392. addRule(e, n) {
  393. n.position = this.position++;
  394. this.matchIndexes[this.matchAt] = n;
  395. this.regexes.push([n, e]);
  396. this.matchAt += countMatchGroups(e) + 1;
  397. }
  398. compile() {
  399. if (0 === this.regexes.length) {
  400. this.exec = () => null;
  401. }
  402. let e = this.regexes.map((e) => e[1]);
  403. this.matcherRe = n(join(e, '|'), true);
  404. this.lastIndex = 0;
  405. }
  406. exec(e) {
  407. this.matcherRe.lastIndex = this.lastIndex;
  408. let n = this.matcherRe.exec(e);
  409. if (!n) {
  410. return null;
  411. }
  412. let t = n.findIndex((e, n) => n > 0 && void 0 != e);
  413. let r = this.matchIndexes[t];
  414. return Object.assign(n, r);
  415. }
  416. }
  417. class r {
  418. constructor() {
  419. this.rules = [];
  420. this.multiRegexes = [];
  421. this.count = 0;
  422. this.lastIndex = 0;
  423. this.regexIndex = 0;
  424. }
  425. getMatcher(e) {
  426. if (this.multiRegexes[e]) {
  427. return this.multiRegexes[e];
  428. }
  429. let n = new t();
  430. this.rules.slice(e).forEach(([e, t]) => n.addRule(e, t));
  431. n.compile();
  432. this.multiRegexes[e] = n;
  433. return n;
  434. }
  435. considerAll() {
  436. this.regexIndex = 0;
  437. }
  438. addRule(e, n) {
  439. this.rules.push([e, n]);
  440. if ('begin' === n.type) {
  441. this.count++;
  442. }
  443. }
  444. exec(e) {
  445. let n = this.getMatcher(this.regexIndex);
  446. n.lastIndex = this.lastIndex;
  447. let t = n.exec(e);
  448. if (t) {
  449. this.regexIndex += t.position + 1;
  450. if (this.regexIndex === this.count) {
  451. this.regexIndex = 0;
  452. }
  453. }
  454. return t;
  455. }
  456. }
  457. function a(e) {
  458. let n = e.input[e.index - 1];
  459. let t = e.input[e.index + e[0].length];
  460. if ('.' === n || '.' === t) {
  461. return {
  462. ignoreMatch: true
  463. };
  464. }
  465. }
  466. if (e.contains && e.contains.includes('self')) {
  467. throw new Error('ERR: contains `self` is not supported at the top-level of a language. See documentation.');
  468. }
  469. !(function t(i, s) {
  470. i.compiled ||
  471. ((i.compiled = true),
  472. (i.__onBegin = null),
  473. (i.keywords = i.keywords || i.beginKeywords),
  474. i.keywords && (i.keywords = compileKeywords(i.keywords, e.case_insensitive)),
  475. (i.lexemesRe = n(i.lexemes || /\w+/, true)),
  476. s &&
  477. (i.beginKeywords && ((i.begin = '\\b(' + i.beginKeywords.split(' ').join('|') + ')(?=\\b|\\s)'), (i.__onBegin = a)),
  478. i.begin || (i.begin = /\B|\b/),
  479. (i.beginRe = n(i.begin)),
  480. i.endSameAsBegin && (i.end = i.begin),
  481. i.end || i.endsWithParent || (i.end = /\B|\b/),
  482. i.end && (i.endRe = n(i.end)),
  483. (i.terminator_end = source(i.end) || ''),
  484. i.endsWithParent && s.terminator_end && (i.terminator_end += (i.end ? '|' : '') + s.terminator_end)),
  485. i.illegal && (i.illegalRe = n(i.illegal)),
  486. null == i.relevance && (i.relevance = 1),
  487. i.contains || (i.contains = []),
  488. (i.contains = [].concat(
  489. ...i.contains.map(function (e) {
  490. return expand_or_clone_mode('self' === e ? i : e);
  491. })
  492. )),
  493. i.contains.forEach(function (e) {
  494. t(e, i);
  495. }),
  496. i.starts && t(i.starts, s),
  497. (i.matcher = (function (e) {
  498. let n = new r();
  499. e.contains.forEach((e) =>
  500. n.addRule(e.begin, {
  501. rule: e,
  502. type: 'begin'
  503. })
  504. );
  505. if (e.terminator_end) {
  506. n.addRule(e.terminator_end, {
  507. type: 'end'
  508. });
  509. }
  510. if (e.illegal) {
  511. n.addRule(e.illegal, {
  512. type: 'illegal'
  513. });
  514. }
  515. return n;
  516. })(i)));
  517. })(e);
  518. }
  519. function dependencyOnParent(e) {
  520. return !!e && (e.endsWithParent || dependencyOnParent(e.starts));
  521. }
  522. function expand_or_clone_mode(e) {
  523. if (e.variants && !e.cached_variants) {
  524. e.cached_variants = e.variants.map(function (n) {
  525. return inherit(
  526. e,
  527. {
  528. variants: null
  529. },
  530. n
  531. );
  532. });
  533. }
  534. return e.cached_variants
  535. ? e.cached_variants
  536. : dependencyOnParent(e)
  537. ? inherit(e, {
  538. starts: e.starts ? inherit(e.starts) : null
  539. })
  540. : Object.isFrozen(e)
  541. ? inherit(e)
  542. : e;
  543. }
  544. function compileKeywords(e, n) {
  545. var t = {};
  546. 'string' == typeof e
  547. ? r('keyword', e)
  548. : Object.keys(e).forEach(function (n) {
  549. r(n, e[n]);
  550. });
  551. return t;
  552. function r(e, r) {
  553. if (n) {
  554. r = r.toLowerCase();
  555. }
  556. r.split(' ').forEach(function (n) {
  557. var r = n.split('|');
  558. t[r[0]] = [e, scoreForKeyword(r[0], r[1])];
  559. });
  560. }
  561. }
  562. function scoreForKeyword(e, n) {
  563. return n ? Number(n) : commonKeyword(e) ? 0 : 1;
  564. }
  565. function commonKeyword(e) {
  566. return COMMON_KEYWORDS.includes(e.toLowerCase());
  567. }
  568. var version = '10.0.0-beta.0';
  569. const escape$1 = escapeHTML;
  570. const inherit$1 = inherit;
  571. const { nodeStream: nodeStream$1, mergeStreams: mergeStreams$1 } = utils;
  572. const HLJS = function (e) {
  573. var n = [];
  574. var t = {};
  575. var r = {};
  576. var a = [];
  577. var i = true;
  578. var s = /((^(<[^>]+>|\t|)+|(?:\n)))/gm;
  579. var o = "Could not find the language '{}', did you forget to load/include a language module?";
  580. var l = {
  581. noHighlightRe: /^(no-?highlight)$/i,
  582. languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i,
  583. classPrefix: 'hljs-',
  584. tabReplace: null,
  585. useBR: false,
  586. languages: void 0,
  587. __emitter: TokenTreeEmitter
  588. };
  589. function c(e) {
  590. return l.noHighlightRe.test(e);
  591. }
  592. function u(e, n, t, r) {
  593. var a = {
  594. code: n,
  595. language: e
  596. };
  597. R('before:highlight', a);
  598. var i = a.result ? a.result : d(a.language, a.code, t, r);
  599. i.code = a.code;
  600. R('after:highlight', i);
  601. return i;
  602. }
  603. function d(e, n, r, a) {
  604. var s = n;
  605. function c(e, n) {
  606. var t = R.case_insensitive ? n[0].toLowerCase() : n[0];
  607. return e.keywords.hasOwnProperty(t) && e.keywords[t];
  608. }
  609. function u() {
  610. null != b.subLanguage
  611. ? (function () {
  612. if ('' !== S) {
  613. var e = 'string' == typeof b.subLanguage;
  614. if (!e || t[b.subLanguage]) {
  615. var n = e ? d(b.subLanguage, S, true, v[b.subLanguage]) : g(S, b.subLanguage.length ? b.subLanguage : void 0);
  616. if (b.relevance > 0) {
  617. T += n.relevance;
  618. }
  619. if (e) {
  620. v[b.subLanguage] = n.top;
  621. }
  622. N.addSublanguage(n.emitter, n.language);
  623. } else {
  624. N.addText(S);
  625. }
  626. }
  627. })()
  628. : (function () {
  629. var e;
  630. var n;
  631. var t;
  632. var r;
  633. if (b.keywords) {
  634. for (n = 0, b.lexemesRe.lastIndex = 0, t = b.lexemesRe.exec(S), r = ''; t; ) {
  635. r += S.substring(n, t.index);
  636. var a = null;
  637. (e = c(b, t)) ? (N.addText(r), (r = ''), (T += e[1]), (a = e[0]), N.addKeyword(t[0], a)) : (r += t[0]);
  638. n = b.lexemesRe.lastIndex;
  639. t = b.lexemesRe.exec(S);
  640. }
  641. r += S.substr(n);
  642. N.addText(r);
  643. } else {
  644. N.addText(S);
  645. }
  646. })();
  647. S = '';
  648. }
  649. function h(e) {
  650. if (e.className) {
  651. N.openNode(e.className);
  652. }
  653. b = Object.create(e, {
  654. parent: {
  655. value: b
  656. }
  657. });
  658. }
  659. function f(e) {
  660. var n = e[0];
  661. var t = e.rule;
  662. if (t.__onBegin) {
  663. if ((t.__onBegin(e) || {}).ignoreMatch) {
  664. return (function (e) {
  665. return 0 === b.matcher.regexIndex ? ((S += e[0]), 1) : ((w = true), 0);
  666. })(n);
  667. }
  668. }
  669. if (t && t.endSameAsBegin) {
  670. t.endRe = escape(n);
  671. }
  672. t.skip ? (S += n) : (t.excludeBegin && (S += n), u(), t.returnBegin || t.excludeBegin || (S = n));
  673. h(t);
  674. return t.returnBegin ? 0 : n.length;
  675. }
  676. function E(e) {
  677. var n = e[0];
  678. var t = s.substr(e.index);
  679. var r = (function e(n, t) {
  680. if (startsWith(n.endRe, t)) {
  681. for (; n.endsParent && n.parent; ) {
  682. n = n.parent;
  683. }
  684. return n;
  685. }
  686. if (n.endsWithParent) {
  687. return e(n.parent, t);
  688. }
  689. })(b, t);
  690. if (r) {
  691. var a = b;
  692. a.skip ? (S += n) : (a.returnEnd || a.excludeEnd || (S += n), u(), a.excludeEnd && (S = n));
  693. do {
  694. if (b.className) {
  695. N.closeNode();
  696. }
  697. b.skip || b.subLanguage || (T += b.relevance);
  698. b = b.parent;
  699. } while (b !== r.parent);
  700. if (r.starts) {
  701. if (r.endSameAsBegin) {
  702. r.starts.endRe = r.endRe;
  703. }
  704. h(r.starts);
  705. }
  706. return a.returnEnd ? 0 : n.length;
  707. }
  708. }
  709. var _ = {};
  710. function m(n, t) {
  711. var a;
  712. var o = t && t[0];
  713. S += n;
  714. if (null == o) {
  715. u();
  716. return 0;
  717. }
  718. if ('begin' == _.type && 'end' == t.type && _.index == t.index && '' === o) {
  719. S += s.slice(t.index, t.index + 1);
  720. if (!i) {
  721. throw (((a = new Error('0 width match regex')).languageName = e), (a.badRule = _.rule), a);
  722. }
  723. return 1;
  724. }
  725. _ = t;
  726. if ('begin' === t.type) {
  727. return f(t);
  728. }
  729. if ('illegal' === t.type && !r) {
  730. throw (((a = new Error('Illegal lexeme "' + o + '" for mode "' + (b.className || '<unnamed>') + '"')).mode = b), a);
  731. }
  732. if ('end' === t.type) {
  733. var l = E(t);
  734. if (void 0 != l) {
  735. return l;
  736. }
  737. }
  738. S += o;
  739. return o.length;
  740. }
  741. var R = p(e);
  742. if (!R) {
  743. throw (console.error(o.replace('{}', e)), new Error('Unknown language: "' + e + '"'));
  744. }
  745. compileLanguage(R);
  746. var M;
  747. var b = a || R;
  748. var v = {};
  749. var N = new l.__emitter(l);
  750. !(function () {
  751. for (var e = [], n = b; n !== R; n = n.parent) {
  752. if (n.className) {
  753. e.unshift(n.className);
  754. }
  755. }
  756. e.forEach((e) => N.openNode(e));
  757. })();
  758. var O;
  759. var x;
  760. var S = '';
  761. var T = 0;
  762. var D = 0;
  763. try {
  764. var w = false;
  765. for (b.matcher.considerAll(); w ? (w = false) : ((b.matcher.lastIndex = D), b.matcher.considerAll()), (O = b.matcher.exec(s)); ) {
  766. x = m(s.substring(D, O.index), O);
  767. D = O.index + x;
  768. }
  769. m(s.substr(D));
  770. N.closeAllNodes();
  771. N.finalize();
  772. M = N.toHTML();
  773. return {
  774. relevance: T,
  775. value: M,
  776. language: e,
  777. illegal: false,
  778. emitter: N,
  779. top: b
  780. };
  781. } catch (n) {
  782. console.log('CatchClause', n);
  783. console.log('CatchClause', n);
  784. if (n.message && n.message.includes('Illegal')) {
  785. return {
  786. illegal: true,
  787. illegalBy: {
  788. msg: n.message,
  789. context: s.slice(D - 100, D + 100),
  790. mode: n.mode
  791. },
  792. sofar: M,
  793. relevance: 0,
  794. value: escape$1(s),
  795. emitter: N
  796. };
  797. }
  798. if (i) {
  799. return {
  800. relevance: 0,
  801. value: escape$1(s),
  802. emitter: N,
  803. language: e,
  804. top: b,
  805. errorRaised: n
  806. };
  807. }
  808. throw n;
  809. }
  810. }
  811. function g(e, n) {
  812. n = n || l.languages || Object.keys(t);
  813. var r = {
  814. relevance: 0,
  815. emitter: new l.__emitter(l),
  816. value: escape$1(e)
  817. };
  818. var a = r;
  819. n.filter(p)
  820. .filter(m)
  821. .forEach(function (n) {
  822. var t = d(n, e, false);
  823. t.language = n;
  824. if (t.relevance > a.relevance) {
  825. a = t;
  826. }
  827. if (t.relevance > r.relevance) {
  828. a = r;
  829. r = t;
  830. }
  831. });
  832. if (a.language) {
  833. r.second_best = a;
  834. }
  835. return r;
  836. }
  837. function h(e) {
  838. return l.tabReplace || l.useBR
  839. ? e.replace(s, function (e, n) {
  840. return l.useBR && '\n' === e ? '<br>' : l.tabReplace ? n.replace(/\t/g, l.tabReplace) : '';
  841. })
  842. : e;
  843. }
  844. function f(e) {
  845. var n;
  846. var t;
  847. var a;
  848. var i;
  849. var s;
  850. var d = (function (e) {
  851. var n;
  852. var t = e.className + ' ';
  853. t += e.parentNode ? e.parentNode.className : '';
  854. if ((n = l.languageDetectRe.exec(t))) {
  855. var r = p(n[1]);
  856. r || (console.warn(o.replace('{}', n[1])), console.warn('Falling back to no-highlight mode for this block.', e));
  857. return r ? n[1] : 'no-highlight';
  858. }
  859. return t.split(/\s+/).find((e) => c(e) || p(e));
  860. })(e);
  861. c(d) ||
  862. (R('before:highlightBlock', {
  863. block: e,
  864. language: d
  865. }),
  866. l.useBR ? ((n = document.createElement('div')).innerHTML = e.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n')) : (n = e),
  867. (s = n.textContent),
  868. (a = d ? u(d, s, true) : g(s)),
  869. (t = nodeStream$1(n)).length && (((i = document.createElement('div')).innerHTML = a.value), (a.value = mergeStreams$1(t, nodeStream$1(i), s))),
  870. (a.value = h(a.value)),
  871. R('after:highlightBlock', {
  872. block: e,
  873. result: a
  874. }),
  875. (e.innerHTML = a.value),
  876. (e.className = (function (e, n, t) {
  877. var a = n ? r[n] : t;
  878. var i = [e.trim()];
  879. e.match(/\bhljs\b/) || i.push('hljs');
  880. e.includes(a) || i.push(a);
  881. return i.join(' ').trim();
  882. })(e.className, d, a.language)),
  883. (e.result = {
  884. language: a.language,
  885. re: a.relevance
  886. }),
  887. a.second_best &&
  888. (e.second_best = {
  889. language: a.second_best.language,
  890. re: a.second_best.relevance
  891. }));
  892. }
  893. function E() {
  894. if (!E.called) {
  895. E.called = true;
  896. var e = document.querySelectorAll('pre code');
  897. n.forEach.call(e, f);
  898. }
  899. }
  900. var _ = {
  901. disableAutodetect: true
  902. };
  903. function p(e) {
  904. e = (e || '').toLowerCase();
  905. return t[e] || t[r[e]];
  906. }
  907. function m(e) {
  908. var n = p(e);
  909. return n && !n.disableAutodetect;
  910. }
  911. function R(e, n) {
  912. var t = e;
  913. a.forEach(function (e) {
  914. if (e[t]) {
  915. e[t](n);
  916. }
  917. });
  918. }
  919. Object.assign(e, {
  920. highlight: u,
  921. highlightAuto: g,
  922. fixMarkup: h,
  923. highlightBlock: f,
  924. configure: function (e) {
  925. l = inherit$1(l, e);
  926. },
  927. initHighlighting: E,
  928. initHighlightingOnLoad: function () {
  929. window.addEventListener('DOMContentLoaded', E, false);
  930. },
  931. registerLanguage: function (n, a) {
  932. var s;
  933. try {
  934. s = a(e);
  935. } catch (e) {
  936. console.log('CatchClause', e);
  937. console.log('CatchClause', e);
  938. console.error("Language definition for '{}' could not be registered.".replace('{}', n));
  939. if (!i) {
  940. throw e;
  941. }
  942. console.error(e);
  943. s = _;
  944. }
  945. s.name || (s.name = n);
  946. t[n] = s;
  947. s.rawDefinition = a.bind(null, e);
  948. if (s.aliases) {
  949. s.aliases.forEach(function (e) {
  950. r[e] = n;
  951. });
  952. }
  953. },
  954. listLanguages: function () {
  955. return Object.keys(t);
  956. },
  957. getLanguage: p,
  958. requireLanguage: function (e) {
  959. var n = p(e);
  960. if (n) {
  961. return n;
  962. }
  963. throw new Error("The '{}' language is required, but not loaded.".replace('{}', e));
  964. },
  965. autoDetection: m,
  966. inherit: inherit$1,
  967. addPlugin: function (e, n) {
  968. a.push(e);
  969. }
  970. });
  971. e.debugMode = function () {
  972. i = false;
  973. };
  974. e.safeMode = function () {
  975. i = true;
  976. };
  977. e.versionString = version;
  978. for (const e in MODES) {
  979. if ('object' == typeof MODES[e]) {
  980. deepFreeze(MODES[e]);
  981. }
  982. }
  983. Object.assign(e, MODES);
  984. return e;
  985. };
  986. var highlight = HLJS({});
  987. module.exports = highlight;