mathpix-markdown-it 2.0.27 → 2.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +14 -0
  2. package/doc/images/latex-lstlisting-env/latex-lstlisting-env-01.png +0 -0
  3. package/doc/images/latex-lstlisting-env/latex-lstlisting-env-02.png +0 -0
  4. package/doc/images/latex-lstlisting-env/latex-lstlisting-env-03.png +0 -0
  5. package/doc/images/latex-lstlisting-env/latex-lstlisting-env-04.png +0 -0
  6. package/doc/latex-lstlisting-env.md +75 -0
  7. package/es5/bundle.js +4 -4
  8. package/es5/index.js +4 -4
  9. package/lib/copy-to-clipboard/clipboard-copy-styles.js +1 -1
  10. package/lib/copy-to-clipboard/clipboard-copy-styles.js.map +1 -1
  11. package/lib/index.d.ts +2 -2
  12. package/lib/index.js +2 -1
  13. package/lib/index.js.map +1 -1
  14. package/lib/markdown/common/consts.d.ts +18 -0
  15. package/lib/markdown/common/consts.js +27 -2
  16. package/lib/markdown/common/consts.js.map +1 -1
  17. package/lib/markdown/common/csv.js +8 -3
  18. package/lib/markdown/common/csv.js.map +1 -1
  19. package/lib/markdown/common/mmdRules.js +10 -0
  20. package/lib/markdown/common/mmdRules.js.map +1 -1
  21. package/lib/markdown/common/parse-attribures.d.ts +12 -0
  22. package/lib/markdown/common/parse-attribures.js +45 -0
  23. package/lib/markdown/common/parse-attribures.js.map +1 -0
  24. package/lib/markdown/common/render-table-cell-content.js +18 -0
  25. package/lib/markdown/common/render-table-cell-content.js.map +1 -1
  26. package/lib/markdown/common/tsv.js +4 -1
  27. package/lib/markdown/common/tsv.js.map +1 -1
  28. package/lib/markdown/common.d.ts +1 -0
  29. package/lib/markdown/common.js +3 -1
  30. package/lib/markdown/common.js.map +1 -1
  31. package/lib/markdown/mathpix-markdown-plugins.js +1 -0
  32. package/lib/markdown/mathpix-markdown-plugins.js.map +1 -1
  33. package/lib/markdown/md-block-rule/begin-tabular/index.js +18 -4
  34. package/lib/markdown/md-block-rule/begin-tabular/index.js.map +1 -1
  35. package/lib/markdown/md-block-rule/begin-tabular/multi-column-row.js +3 -1
  36. package/lib/markdown/md-block-rule/begin-tabular/multi-column-row.js.map +1 -1
  37. package/lib/markdown/md-block-rule/begin-tabular/sub-code.d.ts +41 -1
  38. package/lib/markdown/md-block-rule/begin-tabular/sub-code.js +139 -40
  39. package/lib/markdown/md-block-rule/begin-tabular/sub-code.js.map +1 -1
  40. package/lib/markdown/md-block-rule/begin-tabular/sub-math.js +10 -2
  41. package/lib/markdown/md-block-rule/begin-tabular/sub-math.js.map +1 -1
  42. package/lib/markdown/md-block-rule/begin-tabular/sub-tabular.js +2 -0
  43. package/lib/markdown/md-block-rule/begin-tabular/sub-tabular.js.map +1 -1
  44. package/lib/markdown/md-block-rule/begin-tabular/tabular-td.js +2 -0
  45. package/lib/markdown/md-block-rule/begin-tabular/tabular-td.js.map +1 -1
  46. package/lib/markdown/md-block-rule/helper.js +8 -3
  47. package/lib/markdown/md-block-rule/helper.js.map +1 -1
  48. package/lib/markdown/md-block-rule/lists/index.js +123 -1
  49. package/lib/markdown/md-block-rule/lists/index.js.map +1 -1
  50. package/lib/markdown/md-inline-rule/diagbox-inline.js +4 -15
  51. package/lib/markdown/md-inline-rule/diagbox-inline.js.map +1 -1
  52. package/lib/markdown/md-inline-rule/image.js +14 -7
  53. package/lib/markdown/md-inline-rule/image.js.map +1 -1
  54. package/lib/markdown/md-inline-rule/includegraphics.js +99 -25
  55. package/lib/markdown/md-inline-rule/includegraphics.js.map +1 -1
  56. package/lib/markdown/md-inline-rule/utils.js +2 -2
  57. package/lib/markdown/md-inline-rule/utils.js.map +1 -1
  58. package/lib/markdown/md-latex-lstlisting-env/index.d.ts +9 -0
  59. package/lib/markdown/md-latex-lstlisting-env/index.js +23 -0
  60. package/lib/markdown/md-latex-lstlisting-env/index.js.map +1 -0
  61. package/lib/markdown/md-latex-lstlisting-env/latex-lstlisting-env-block.d.ts +6 -0
  62. package/lib/markdown/md-latex-lstlisting-env/latex-lstlisting-env-block.js +71 -0
  63. package/lib/markdown/md-latex-lstlisting-env/latex-lstlisting-env-block.js.map +1 -0
  64. package/lib/markdown/md-latex-lstlisting-env/latex-lstlisting-env-inline.d.ts +7 -0
  65. package/lib/markdown/md-latex-lstlisting-env/latex-lstlisting-env-inline.js +76 -0
  66. package/lib/markdown/md-latex-lstlisting-env/latex-lstlisting-env-inline.js.map +1 -0
  67. package/lib/markdown/md-latex-lstlisting-env/lstlisting-options.d.ts +21 -0
  68. package/lib/markdown/md-latex-lstlisting-env/lstlisting-options.js +96 -0
  69. package/lib/markdown/md-latex-lstlisting-env/lstlisting-options.js.map +1 -0
  70. package/lib/markdown/md-latex-lstlisting-env/parse-math-escape-inline.d.ts +21 -0
  71. package/lib/markdown/md-latex-lstlisting-env/parse-math-escape-inline.js +55 -0
  72. package/lib/markdown/md-latex-lstlisting-env/parse-math-escape-inline.js.map +1 -0
  73. package/lib/markdown/md-latex-lstlisting-env/render-latex-lstlisting-env.d.ts +16 -0
  74. package/lib/markdown/md-latex-lstlisting-env/render-latex-lstlisting-env.js +165 -0
  75. package/lib/markdown/md-latex-lstlisting-env/render-latex-lstlisting-env.js.map +1 -0
  76. package/lib/markdown/md-renderer-rules/index.js +23 -3
  77. package/lib/markdown/md-renderer-rules/index.js.map +1 -1
  78. package/lib/markdown/mdHighlightCodePlugin.js +85 -5
  79. package/lib/markdown/mdHighlightCodePlugin.js.map +1 -1
  80. package/lib/markdown/mdPluginConfigured.d.ts +2 -0
  81. package/lib/markdown/mdPluginConfigured.js +3 -1
  82. package/lib/markdown/mdPluginConfigured.js.map +1 -1
  83. package/lib/markdown/mdPluginRaw.d.ts +3 -0
  84. package/lib/markdown/mdPluginRaw.js +6 -4
  85. package/lib/markdown/mdPluginRaw.js.map +1 -1
  86. package/lib/markdown/mdPluginTableTabular.js +2 -0
  87. package/lib/markdown/mdPluginTableTabular.js.map +1 -1
  88. package/package.json +2 -2
@@ -5,6 +5,6 @@ var endTag = function (arg) {
5
5
  return new RegExp('\\\\end\s{0,}\{(' + arg + ')\}');
6
6
  };
7
7
  exports.endTag = endTag;
8
- exports.includegraphicsTag = /\\includegraphics\s{0,}\[?([^}]*)\]?\s{0,}\{([^}]*)\}/;
9
- exports.includegraphicsTagB = /^\\includegraphics\s{0,}\[?([^}]*)\]?\s{0,}\{([^}]*)\}/;
8
+ exports.includegraphicsTag = /\\includegraphics\s*(?:\[(.*?)\]\s*)?\{([^}]*)\}/s;
9
+ exports.includegraphicsTagB = /^\\includegraphics\s*(?:\[(.*?)\]\s*)?\{([^}]*)\}/s;
10
10
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/markdown/md-inline-rule/utils.ts"],"names":[],"mappings":";;;AAAO,IAAM,MAAM,GAAG,UAAC,GAAW;IAChC,OAAO,IAAI,MAAM,CAAC,kBAAkB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAA;AACrD,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEW,QAAA,kBAAkB,GAAW,uDAAuD,CAAC;AACrF,QAAA,mBAAmB,GAAW,wDAAwD,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/markdown/md-inline-rule/utils.ts"],"names":[],"mappings":";;;AAAO,IAAM,MAAM,GAAG,UAAC,GAAW;IAChC,OAAO,IAAI,MAAM,CAAC,kBAAkB,GAAG,GAAG,GAAG,KAAK,CAAC,CAAA;AACrD,CAAC,CAAC;AAFW,QAAA,MAAM,UAEjB;AAEW,QAAA,kBAAkB,GAAW,mDAAmD,CAAC;AACjF,QAAA,mBAAmB,GAAW,oDAAoD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import MarkdownIt from 'markdown-it';
2
+ /**
3
+ * Markdown-It plugin that adds support for LaTeX `lstlisting`-like code environments.
4
+ *
5
+ * - Registers a block rule for `\begin{lstlisting}...\end{lstlisting}`.
6
+ * - Registers an inline rule for inline `lstlisting` environments.
7
+ * - Installs a custom renderer for `latex_lstlisting_env` tokens.
8
+ */
9
+ export default function pluginLatexCodeEnvs(md: MarkdownIt): void;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var latex_lstlisting_env_block_1 = require("./latex-lstlisting-env-block");
4
+ var latex_lstlisting_env_inline_1 = require("./latex-lstlisting-env-inline");
5
+ var render_latex_lstlisting_env_1 = require("./render-latex-lstlisting-env");
6
+ /**
7
+ * Markdown-It plugin that adds support for LaTeX `lstlisting`-like code environments.
8
+ *
9
+ * - Registers a block rule for `\begin{lstlisting}...\end{lstlisting}`.
10
+ * - Registers an inline rule for inline `lstlisting` environments.
11
+ * - Installs a custom renderer for `latex_lstlisting_env` tokens.
12
+ */
13
+ function pluginLatexCodeEnvs(md) {
14
+ var blockRuler = md.block.ruler;
15
+ blockRuler.before('fence', 'latex_lstlisting_env_block', latex_lstlisting_env_block_1.latexLstlistingEnvBlockRule, {
16
+ alt: ['paragraph', 'reference', 'blockquote', 'list']
17
+ });
18
+ var inlineRuler = md.inline.ruler;
19
+ inlineRuler.before('escape', 'latex_lstlisting_env_inline', latex_lstlisting_env_inline_1.latexLstlistingEnvInlineRule);
20
+ md.renderer.rules.latex_lstlisting_env = (0, render_latex_lstlisting_env_1.makeLatexLstlistingEnvRendererWithMd)(md);
21
+ }
22
+ exports.default = pluginLatexCodeEnvs;
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/markdown/md-latex-lstlisting-env/index.ts"],"names":[],"mappings":";;AAEA,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAAqF;AAErF;;;;;;GAMG;AACH,SAAwB,mBAAmB,CAAC,EAAc;IACxD,IAAM,UAAU,GAAU,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC;IACzC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,4BAA4B,EAAE,wDAA2B,EAAE;QACpF,GAAG,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC;KACtD,CAAC,CAAC;IACH,IAAM,WAAW,GAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;IAC3C,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,6BAA6B,EAAE,0DAA4B,CAAC,CAAC;IAC1F,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAA,kEAAoC,EAAC,EAAE,CAAC,CAAC;AACpF,CAAC;AARD,sCAQC"}
@@ -0,0 +1,6 @@
1
+ import type { RuleBlock } from 'markdown-it/lib/parser_block';
2
+ /**
3
+ * Block rule: parse LaTeX \begin{lstlisting}[...]\end{lstlisting} as a code block token.
4
+ * - Supports optional [mathescape] in options: math is parsed into children (text + math tokens).
5
+ */
6
+ export declare const latexLstlistingEnvBlockRule: RuleBlock;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.latexLstlistingEnvBlockRule = void 0;
4
+ var lstlisting_options_1 = require("./lstlisting-options");
5
+ var consts_1 = require("../common/consts");
6
+ /**
7
+ * Try to read a whole lstlisting block starting at `startLine`.
8
+ * Returns { opts, content, endLine } or null if not matched/closed.
9
+ */
10
+ var readLstlistingBlock = function (state, startLine) {
11
+ var start = state.bMarks[startLine] + state.tShift[startLine];
12
+ var max = state.eMarks[startLine];
13
+ var firstLine = state.src.slice(start, max);
14
+ if (!consts_1.BEGIN_LST_FAST_RE.test(firstLine))
15
+ return null;
16
+ var match = firstLine.match(consts_1.BEGIN_LST_RE);
17
+ if (!match)
18
+ return null;
19
+ var optsRaw = (match[1] || '').trim();
20
+ // Collect lines until \end{lstlisting}
21
+ var lines = [];
22
+ var nextLine = startLine + 1;
23
+ for (; nextLine < state.lineMax; nextLine++) {
24
+ var s = state.bMarks[nextLine] + state.tShift[nextLine];
25
+ var e = state.eMarks[nextLine];
26
+ var line = state.src.slice(s, e);
27
+ if (consts_1.END_LST_RE.test(line)) {
28
+ // stop BEFORE end-line; `nextLine` now points to end
29
+ break;
30
+ }
31
+ // keep original slice (without trimming), preserve exact content
32
+ lines.push(state.src.slice(state.bMarks[nextLine], state.eMarks[nextLine]));
33
+ }
34
+ if (nextLine >= state.lineMax) {
35
+ // no closing \end{lstlisting}
36
+ return null;
37
+ }
38
+ return {
39
+ opts: optsRaw,
40
+ content: lines.join('\n'),
41
+ endLine: nextLine + 1, // move parser AFTER the end line
42
+ };
43
+ };
44
+ /**
45
+ * Block rule: parse LaTeX \begin{lstlisting}[...]\end{lstlisting} as a code block token.
46
+ * - Supports optional [mathescape] in options: math is parsed into children (text + math tokens).
47
+ */
48
+ var latexLstlistingEnvBlockRule = function (state, startLine, _endLine, silent) {
49
+ // don't start mid-paragraph
50
+ if (state.tShift[startLine] < 0)
51
+ return false;
52
+ var res = readLstlistingBlock(state, startLine);
53
+ if (!res)
54
+ return false;
55
+ if (silent)
56
+ return true;
57
+ var opts = res.opts, content = res.content, endLine = res.endLine;
58
+ var token = state.push('latex_lstlisting_env', 'pre', 0);
59
+ token.block = true;
60
+ token.map = [startLine, endLine];
61
+ token.markup = 'lstlisting';
62
+ token.content = content; // raw text
63
+ token.info = opts; // raw options
64
+ if (opts) {
65
+ (0, lstlisting_options_1.applyLstListingOptionsToToken)(token, content, opts, state);
66
+ }
67
+ state.line = endLine;
68
+ return true;
69
+ };
70
+ exports.latexLstlistingEnvBlockRule = latexLstlistingEnvBlockRule;
71
+ //# sourceMappingURL=latex-lstlisting-env-block.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"latex-lstlisting-env-block.js","sourceRoot":"","sources":["../../../src/markdown/md-latex-lstlisting-env/latex-lstlisting-env-block.ts"],"names":[],"mappings":";;;AAGA,2DAAqE;AACrE,2CAI0B;AAE1B;;;GAGG;AACH,IAAM,mBAAmB,GAAG,UAAC,KAAiB,EAAE,SAAiB;IAC/D,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChE,IAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACpC,IAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC,0BAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC;IACpD,IAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAY,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAM,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,uCAAuC;IACvC,IAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,GAAW,SAAS,GAAG,CAAC,CAAC;IACrC,OAAO,QAAQ,GAAG,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;QAC3C,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,IAAI,mBAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACzB,qDAAqD;YACrD,MAAM;SACP;QACD,iEAAiE;QACjE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KAC7E;IACD,IAAI,QAAQ,IAAI,KAAK,CAAC,OAAO,EAAE;QAC7B,8BAA8B;QAC9B,OAAO,IAAI,CAAC;KACb;IACD,OAAO;QACL,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QACzB,OAAO,EAAE,QAAQ,GAAG,CAAC,EAAE,iCAAiC;KACzD,CAAC;AACJ,CAAC,CAAA;AAED;;;GAGG;AACI,IAAM,2BAA2B,GAAc,UACpD,KAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,MAAe;IAEf,4BAA4B;IAC5B,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9C,IAAM,GAAG,GAAG,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,MAAM;QAAE,OAAO,IAAI,CAAC;IAChB,IAAA,IAAI,GAAuB,GAAG,KAA1B,EAAE,OAAO,GAAc,GAAG,QAAjB,EAAE,OAAO,GAAK,GAAG,QAAR,CAAS;IACvC,IAAM,KAAK,GAAU,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAClE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;IACnB,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC;IAC5B,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,CAAI,WAAW;IACvC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAU,cAAc;IAC1C,IAAI,IAAI,EAAE;QACR,IAAA,kDAA6B,EAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;KAC5D;IACD,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,2BAA2B,+BAuBtC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Inline rule: parse \begin{lstlisting}[...]\end{lstlisting} in inline stream.
3
+ * - Emits 'latex_lstlisting_env' token (block=false), so renderer can output <pre><code>...</code></pre>.
4
+ * - If [mathescape] present, children are math-only tokens (text + inline/display math),
5
+ * everything else stays plain text.
6
+ */
7
+ export declare const latexLstlistingEnvInlineRule: (state: StateInline, silent: boolean) => boolean;
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.latexLstlistingEnvInlineRule = void 0;
4
+ var lstlisting_options_1 = require("./lstlisting-options");
5
+ var consts_1 = require("../common/consts");
6
+ /** Does the \end{...} start at the very beginning of its line (only spaces/tabs before)? */
7
+ var endStartsAtLineStart = function (src, endPos) {
8
+ var prevNL = src.lastIndexOf('\n', endPos - 1);
9
+ var lineStart = prevNL === -1 ? 0 : prevNL + 1;
10
+ for (var i = lineStart; i < endPos; i++) {
11
+ var ch = src.charCodeAt(i);
12
+ if (ch !== 0x20 /* space */ && ch !== 0x09 /* tab */)
13
+ return false;
14
+ }
15
+ return true;
16
+ };
17
+ /** Normalize tail: remove exactly one trailing \n iff \end{...} is on a fresh line with no text to the left */
18
+ var normalizeContentByEndPosition = function (raw, src, endPos) {
19
+ var s = raw.replace(/\r\n?/g, '\n');
20
+ return endStartsAtLineStart(src, endPos) && s.endsWith('\n') ? s.slice(0, -1) : s;
21
+ };
22
+ /** Find matching \end{lstlisting} (no cross-env nesting needed here) */
23
+ var findEndOfLstlisting = function (src, from) {
24
+ return src.indexOf('\\end{lstlisting}', from);
25
+ };
26
+ /** Parse \begin{lstlisting}[opts] at given pos; return { opts, after } or null */
27
+ var parseBeginLstlistingAt = function (src, pos) {
28
+ var tail = src.slice(pos);
29
+ if (!consts_1.BEGIN_LST_FAST_RE.test(tail))
30
+ return null;
31
+ var match = tail.match(consts_1.BEGIN_LST_WITH_TRAIL_WS_NL_RE);
32
+ if (!match)
33
+ return null;
34
+ var opts = (match[1] || '').trim();
35
+ return { opts: opts, after: pos + match[0].length };
36
+ };
37
+ /**
38
+ * Inline rule: parse \begin{lstlisting}[...]\end{lstlisting} in inline stream.
39
+ * - Emits 'latex_lstlisting_env' token (block=false), so renderer can output <pre><code>...</code></pre>.
40
+ * - If [mathescape] present, children are math-only tokens (text + inline/display math),
41
+ * everything else stays plain text.
42
+ */
43
+ var latexLstlistingEnvInlineRule = function (state, silent) {
44
+ var src = state.src;
45
+ var pos = state.pos;
46
+ // must start with '\' and literally '\begin{...}' here
47
+ if (src.charCodeAt(pos) !== 0x5c /* \ */)
48
+ return false;
49
+ if (!src.startsWith('\\begin{', pos))
50
+ return false;
51
+ var begin = parseBeginLstlistingAt(src, pos);
52
+ if (!begin)
53
+ return false;
54
+ // find \end{lstlisting}
55
+ var endBegin = begin.after;
56
+ var endPos = findEndOfLstlisting(src, endBegin);
57
+ if (endPos === -1)
58
+ return false;
59
+ var endTagLen = '\\end{lstlisting}'.length;
60
+ var endTagEnd = endPos + endTagLen;
61
+ if (!silent) {
62
+ var raw = src.slice(endBegin, endPos);
63
+ var content = normalizeContentByEndPosition(raw, src, endPos);
64
+ var token = state.push('latex_lstlisting_env', 'pre', 0);
65
+ token.block = false; // remain in the inline flow
66
+ token.content = content;
67
+ token.info = begin.opts; // raw options
68
+ if (begin.opts) {
69
+ (0, lstlisting_options_1.applyLstListingOptionsToToken)(token, content, begin.opts, state);
70
+ }
71
+ }
72
+ state.pos = endTagEnd; // advance cursor past the end tag
73
+ return true;
74
+ };
75
+ exports.latexLstlistingEnvInlineRule = latexLstlistingEnvInlineRule;
76
+ //# sourceMappingURL=latex-lstlisting-env-inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"latex-lstlisting-env-inline.js","sourceRoot":"","sources":["../../../src/markdown/md-latex-lstlisting-env/latex-lstlisting-env-inline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type StateBlock from 'markdown-it/lib/rules_block/state_block';
2
+ import type StateInline from 'markdown-it/lib/rules_inline/state_inline';
3
+ export type ParsedLstLanguage = {
4
+ /** Base language name, e.g. "Ada" or "Assembler". */
5
+ name: string;
6
+ /** Optional dialect name, e.g. "2005" or "riscv". */
7
+ dialect: string | null;
8
+ hlName: string;
9
+ };
10
+ /**
11
+ * Apply LaTeX lstlisting-like options to a Markdown-It token.
12
+ *
13
+ * - Parses raw lst options into a structured attributes object.
14
+ * - Parses `language` into `{ name, dialect }` via `parseLstLanguage`.
15
+ * - Stores all attributes under `token.meta.attributes`.
16
+ * - If `mathescape` is enabled, replaces `token.children` with a math-aware
17
+ * inline parse of the code content (no links/emphasis).
18
+ *
19
+ * This function mutates the given token in-place.
20
+ */
21
+ export declare const applyLstListingOptionsToToken: (token: Token, content: string, opts: string | null | undefined, state: StateInline | StateBlock) => void;
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyLstListingOptionsToToken = void 0;
4
+ var parse_attribures_1 = require("../common/parse-attribures");
5
+ var parse_math_escape_inline_1 = require("./parse-math-escape-inline");
6
+ var consts_1 = require("../common/consts");
7
+ /**
8
+ * Parse a LaTeX listings `language` value into `{ name, dialect }`.
9
+ *
10
+ * Supported forms:
11
+ * - "Ada"
12
+ * - "{Ada}"
13
+ * - "\"Ada\""
14
+ * - "[2005]Ada"
15
+ * - "{[riscv]Assembler}"
16
+ *
17
+ * The function:
18
+ * - Strips surrounding quotes (single/double) if present.
19
+ * - Strips a single pair of outer curly braces `{ ... }` if present.
20
+ * - If the remaining string starts with `[... ]`, the part inside the brackets
21
+ * is treated as the dialect and the rest as the language name.
22
+ *
23
+ * On empty or falsy input returns `{ name: '', dialect: null }`.
24
+ */
25
+ var parseLstLanguage = function (raw) {
26
+ var _a;
27
+ if (!raw) {
28
+ return { name: '', dialect: null, hlName: '' };
29
+ }
30
+ // 1. Trim whitespace
31
+ var s = raw.trim();
32
+ if (!s) {
33
+ return { name: '', dialect: null, hlName: '' };
34
+ }
35
+ // 2. Strip surrounding quotes, if present
36
+ var firstChar = s[0];
37
+ var lastChar = s[s.length - 1];
38
+ if ((firstChar === '"' && lastChar === '"') ||
39
+ (firstChar === "'" && lastChar === "'")) {
40
+ s = s.slice(1, -1).trim();
41
+ }
42
+ // 3. Strip single outer curly braces { ... }, if present
43
+ if (s.startsWith('{') && s.endsWith('}')) {
44
+ s = s.slice(1, -1).trim();
45
+ }
46
+ var dialect = null;
47
+ var name;
48
+ if (s.startsWith('[')) {
49
+ var closing = s.indexOf(']');
50
+ if (closing > 0) {
51
+ dialect = s.slice(1, closing).trim(); // e.g. "2005"
52
+ name = s.slice(closing + 1).trim(); // e.g. "Ada"
53
+ }
54
+ else {
55
+ // Malformed: "[" without closing "]" → treat whole string as language name
56
+ name = s;
57
+ }
58
+ }
59
+ else {
60
+ name = s;
61
+ }
62
+ var hlName = name ? ((_a = consts_1.LST_HLJS_LANGUAGES[name.toLowerCase()]) !== null && _a !== void 0 ? _a : name) : '';
63
+ return { name: name, dialect: dialect, hlName: hlName };
64
+ };
65
+ /**
66
+ * Apply LaTeX lstlisting-like options to a Markdown-It token.
67
+ *
68
+ * - Parses raw lst options into a structured attributes object.
69
+ * - Parses `language` into `{ name, dialect }` via `parseLstLanguage`.
70
+ * - Stores all attributes under `token.meta.attributes`.
71
+ * - If `mathescape` is enabled, replaces `token.children` with a math-aware
72
+ * inline parse of the code content (no links/emphasis).
73
+ *
74
+ * This function mutates the given token in-place.
75
+ */
76
+ var applyLstListingOptionsToToken = function (token, content, opts, state) {
77
+ var _a, _b;
78
+ if (!opts)
79
+ return;
80
+ var attributes = (_a = (0, parse_attribures_1.parseAttributes)(opts)) !== null && _a !== void 0 ? _a : {};
81
+ var languageValue = typeof attributes.language === 'string'
82
+ ? attributes.language
83
+ : null;
84
+ var parsedLanguage = languageValue
85
+ ? parseLstLanguage(languageValue)
86
+ : null;
87
+ var meta = (_b = token.meta) !== null && _b !== void 0 ? _b : (token.meta = {});
88
+ meta.language = parsedLanguage;
89
+ if (attributes.mathescape) {
90
+ // parse only math inside the code (no links/emphasis)
91
+ token.children = (0, parse_math_escape_inline_1.parseMathEscapeInline)(state.md, content, state.env);
92
+ meta.hasMathescape = true;
93
+ }
94
+ };
95
+ exports.applyLstListingOptionsToToken = applyLstListingOptionsToToken;
96
+ //# sourceMappingURL=lstlisting-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lstlisting-options.js","sourceRoot":"","sources":["../../../src/markdown/md-latex-lstlisting-env/lstlisting-options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type Token from 'markdown-it/lib/token';
2
+ /**
3
+ * Create (or retrieve from cache) a Markdown-It instance configured to parse ONLY
4
+ * inline math and plain text. This keeps the behavior consistent with `baseMd` options
5
+ * (html, breaks, typographer, etc.), but strips all other inline rules.
6
+ *
7
+ * Order matters:
8
+ * 1) multiMath (handles \[, \(, \begin{...})
9
+ * 2) simpleMath (handles $...$ / $$...$$)
10
+ * 3) text fallback
11
+ */
12
+ export declare const createMathOnlyInlineParser: (baseMd: MarkdownIt) => MarkdownIt;
13
+ /**
14
+ * Parse a string with ONLY math inline rules enabled.
15
+ *
16
+ * @param baseMd Original Markdown-It instance (its options are reused).
17
+ * @param src Raw source to parse (e.g., the inside of lstlisting with mathescape).
18
+ * @param env Environment object; it will be shallow-cloned and augmented with `mathescape_ctx: true`.
19
+ * @returns Array of tokens containing only text + inline/display math tokens.
20
+ */
21
+ export declare const parseMathEscapeInline: (baseMd: MarkdownIt, src: string, env?: {}) => Token[];
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseMathEscapeInline = exports.createMathOnlyInlineParser = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var mdPluginRaw_1 = require("../mdPluginRaw");
6
+ /**
7
+ * Cache for math-only inline parsers keyed by the base MarkdownIt instance.
8
+ * Avoids re-allocating a new parser on every call.
9
+ */
10
+ var MATH_INLINE_CACHE = new WeakMap();
11
+ /**
12
+ * Create (or retrieve from cache) a Markdown-It instance configured to parse ONLY
13
+ * inline math and plain text. This keeps the behavior consistent with `baseMd` options
14
+ * (html, breaks, typographer, etc.), but strips all other inline rules.
15
+ *
16
+ * Order matters:
17
+ * 1) multiMath (handles \[, \(, \begin{...})
18
+ * 2) simpleMath (handles $...$ / $$...$$)
19
+ * 3) text fallback
20
+ */
21
+ var createMathOnlyInlineParser = function (baseMd) {
22
+ var cached = MATH_INLINE_CACHE.get(baseMd);
23
+ if (cached)
24
+ return cached;
25
+ // Reuse base options, but do not copy plugins/rules — we install only math rules below.
26
+ // This is cleaner than `new (baseMd as any).constructor(...)` and keeps typing intact.
27
+ var BaseMdCtor = baseMd.constructor;
28
+ var mathMd = new BaseMdCtor(baseMd.options);
29
+ // Register math rules right before "text" to ensure correct precedence.
30
+ mathMd.inline.ruler.before('text', 'multiMath', mdPluginRaw_1.multiMath);
31
+ mathMd.inline.ruler.before('text', 'simpleMath', mdPluginRaw_1.simpleMath);
32
+ // Enable only our two math rules + the default "text" rule.
33
+ mathMd.inline.ruler.enableOnly(['multiMath', 'simpleMath', 'text']);
34
+ MATH_INLINE_CACHE.set(baseMd, mathMd);
35
+ return mathMd;
36
+ };
37
+ exports.createMathOnlyInlineParser = createMathOnlyInlineParser;
38
+ /**
39
+ * Parse a string with ONLY math inline rules enabled.
40
+ *
41
+ * @param baseMd Original Markdown-It instance (its options are reused).
42
+ * @param src Raw source to parse (e.g., the inside of lstlisting with mathescape).
43
+ * @param env Environment object; it will be shallow-cloned and augmented with `mathescape_ctx: true`.
44
+ * @returns Array of tokens containing only text + inline/display math tokens.
45
+ */
46
+ var parseMathEscapeInline = function (baseMd, src, env) {
47
+ if (env === void 0) { env = {}; }
48
+ var mathMd = (0, exports.createMathOnlyInlineParser)(baseMd);
49
+ var tokens = [];
50
+ var envClone = tslib_1.__assign(tslib_1.__assign({}, env), { mathescape_ctx: true });
51
+ mathMd.inline.parse(src, mathMd, envClone, tokens);
52
+ return tokens;
53
+ };
54
+ exports.parseMathEscapeInline = parseMathEscapeInline;
55
+ //# sourceMappingURL=parse-math-escape-inline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-math-escape-inline.js","sourceRoot":"","sources":["../../../src/markdown/md-latex-lstlisting-env/parse-math-escape-inline.ts"],"names":[],"mappings":";;;;AAEA,8CAAuD;AAEvD;;;GAGG;AACH,IAAM,iBAAiB,GAAG,IAAI,OAAO,EAA0B,CAAC;AAIhE;;;;;;;;;GASG;AACI,IAAM,0BAA0B,GAAG,UAAC,MAAkB;IAC3D,IAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC7C,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAC1B,wFAAwF;IACxF,uFAAuF;IACvF,IAAM,UAAU,GAA2B,MAAc,CAAC,WAAoC,CAAC;IAC/F,IAAM,MAAM,GAAe,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1D,wEAAwE;IACxE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,uBAAS,CAAC,CAAC;IAC3D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,wBAAU,CAAC,CAAC;IAC7D,4DAA4D;IAC5D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IACpE,iBAAiB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA;AAdY,QAAA,0BAA0B,8BActC;AAED;;;;;;;GAOG;AACI,IAAM,qBAAqB,GAAG,UACnC,MAAkB,EAClB,GAAW,EACX,GAAQ;IAAR,oBAAA,EAAA,QAAQ;IAER,IAAM,MAAM,GAAe,IAAA,kCAA0B,EAAC,MAAM,CAAC,CAAC;IAC9D,IAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAM,QAAQ,yCAAQ,GAAG,KAAE,cAAc,EAAE,IAAI,GAAE,CAAC;IAClD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAA;AAVY,QAAA,qBAAqB,yBAUjC"}
@@ -0,0 +1,16 @@
1
+ import { Token } from "markdown-it";
2
+ /**
3
+ * Create a Markdown-It renderer for LaTeX `lstlisting` environments.
4
+ *
5
+ * Behavior:
6
+ * - Always delegates rendering of the token content to `renderCodeWithMathHighlighted`
7
+ * (handles both plain code and tokens with math-aware children; also builds TSV/CSV).
8
+ * - If the returned HTML starts with a full `<pre...>` block (e.g. provided by an external highlighter),
9
+ * it is returned as-is with a trailing newline.
10
+ * - Otherwise, the result is wrapped into `<pre><code ...>` and a language class
11
+ * `options.langPrefix + langName` is gently injected by cloning token attrs (the original token is not mutated).
12
+ *
13
+ * @param md Markdown-It instance (used for highlighting and rendering).
14
+ * @returns A renderer function `(tokens, idx, options, env, slf) => string` for `latex_lstlisting_env`.
15
+ */
16
+ export declare const makeLatexLstlistingEnvRendererWithMd: (md: MarkdownIt) => (tokens: Token[], idx: number, options: Record<string, any>, env: Record<string, any>, slf: Renderer) => string;
@@ -0,0 +1,165 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.makeLatexLstlistingEnvRendererWithMd = void 0;
4
+ var tslib_1 = require("tslib");
5
+ var escapeHtml = require('markdown-it/lib/common/utils').escapeHtml;
6
+ var NEWLINE_RE = /\r?\n/g;
7
+ /**
8
+ * Render a code token (block or inline) with optional syntax highlighting and math-aware children.
9
+ *
10
+ * Behavior:
11
+ * - If the token has `children`, iterates through them:
12
+ * - `text` children are highlighted with `md.options.highlight(langName)` when available,
13
+ * otherwise HTML-escaped.
14
+ * - non-`text` children are rendered via `md.renderer.renderInline` (e.g., math spans),
15
+ * while their plain-text projections are taken from `child.ascii*` fields.
16
+ * - If the token has no `children`, highlights/escapes `token.content` as a single chunk.
17
+ * - Builds plain-text TSV/CSV strings from the rendered pieces (newlines are replaced with spaces)
18
+ * and stores them into `token.tsv` / `token.csv` (arrays with a single string).
19
+ *
20
+ * Notes:
21
+ * - The function mutates `token.tsv` and `token.csv`.
22
+ * - If the highlighter throws or returns a falsy value, the raw text is HTML-escaped.
23
+ *
24
+ * @param token Markdown-It token representing the code fragment.
25
+ * @param md Markdown-It instance (used for highlighting and rendering).
26
+ * @param langName Language name passed to the highlighter (may be empty).
27
+ * @param options Renderer options forwarded to `renderInline` for non-text children.
28
+ * @param env Rendering environment forwarded to `renderInline`.
29
+ * @returns HTML string produced from the token content (children-aware).
30
+ */
31
+ var renderCodeWithMathHighlighted = function (token, md, langName, options, env) {
32
+ var e_1, _a;
33
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k;
34
+ if (options === void 0) { options = {}; }
35
+ if (env === void 0) { env = {}; }
36
+ var children = (_b = token.children) !== null && _b !== void 0 ? _b : [];
37
+ var partsHtml = [];
38
+ var partsTsv = [];
39
+ var partsCsv = [];
40
+ if (children.length > 0) {
41
+ try {
42
+ for (var children_1 = tslib_1.__values(children), children_1_1 = children_1.next(); !children_1_1.done; children_1_1 = children_1.next()) {
43
+ var child = children_1_1.value;
44
+ if (child.type === 'text') {
45
+ var raw = (_c = child.content) !== null && _c !== void 0 ? _c : '';
46
+ try {
47
+ var highlighted = (((_d = md.options) === null || _d === void 0 ? void 0 : _d.highlight) && typeof md.options.highlight === 'function')
48
+ ? (md.options.highlight(raw, langName) || escapeHtml(raw)) // <-- raw code в highlight
49
+ : escapeHtml(raw);
50
+ partsHtml.push(highlighted);
51
+ }
52
+ catch (_l) {
53
+ partsHtml.push(escapeHtml(raw));
54
+ }
55
+ partsTsv.push(raw);
56
+ partsCsv.push(raw);
57
+ }
58
+ else {
59
+ var mathHtml = md.renderer.renderInline([child], options, env);
60
+ if ((options === null || options === void 0 ? void 0 : options.forDocx) && mathHtml) {
61
+ mathHtml = mathHtml
62
+ .split(/\r?\n/)
63
+ .map(function (line) { return line.trim(); })
64
+ .join('');
65
+ }
66
+ partsHtml.push(mathHtml);
67
+ partsTsv.push((_f = (_e = child.ascii_tsv) !== null && _e !== void 0 ? _e : child.ascii) !== null && _f !== void 0 ? _f : '');
68
+ partsCsv.push((_h = (_g = child.ascii_csv) !== null && _g !== void 0 ? _g : child.ascii) !== null && _h !== void 0 ? _h : '');
69
+ }
70
+ }
71
+ }
72
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
73
+ finally {
74
+ try {
75
+ if (children_1_1 && !children_1_1.done && (_a = children_1.return)) _a.call(children_1);
76
+ }
77
+ finally { if (e_1) throw e_1.error; }
78
+ }
79
+ }
80
+ else {
81
+ var raw = (_j = token.content) !== null && _j !== void 0 ? _j : '';
82
+ var highlighted = (((_k = md.options) === null || _k === void 0 ? void 0 : _k.highlight) && typeof md.options.highlight === 'function')
83
+ ? (md.options.highlight(raw, langName) || escapeHtml(raw)) // <-- raw code в highlight
84
+ : escapeHtml(raw);
85
+ partsHtml.push(highlighted);
86
+ partsTsv.push(raw);
87
+ partsCsv.push(raw);
88
+ }
89
+ var tsv = partsTsv.join('').replace(NEWLINE_RE, ' ');
90
+ var csv = partsCsv.join('').replace(NEWLINE_RE, ' ');
91
+ token.tsv = [tsv];
92
+ token.csv = [csv];
93
+ var html = partsHtml.join('');
94
+ if (options.forPptx) {
95
+ return html.replace(NEWLINE_RE, '<br><span class="br-break"></span>');
96
+ }
97
+ return html;
98
+ };
99
+ /**
100
+ * Create a Markdown-It renderer for LaTeX `lstlisting` environments.
101
+ *
102
+ * Behavior:
103
+ * - Always delegates rendering of the token content to `renderCodeWithMathHighlighted`
104
+ * (handles both plain code and tokens with math-aware children; also builds TSV/CSV).
105
+ * - If the returned HTML starts with a full `<pre...>` block (e.g. provided by an external highlighter),
106
+ * it is returned as-is with a trailing newline.
107
+ * - Otherwise, the result is wrapped into `<pre><code ...>` and a language class
108
+ * `options.langPrefix + langName` is gently injected by cloning token attrs (the original token is not mutated).
109
+ *
110
+ * @param md Markdown-It instance (used for highlighting and rendering).
111
+ * @returns A renderer function `(tokens, idx, options, env, slf) => string` for `latex_lstlisting_env`.
112
+ */
113
+ var makeLatexLstlistingEnvRendererWithMd = function (md) {
114
+ return function (tokens, idx, options, env, slf) {
115
+ var _a, _b, _c;
116
+ if (options === void 0) { options = {}; }
117
+ if (env === void 0) { env = {}; }
118
+ var token = tokens[idx];
119
+ var langName = (_c = (_b = (_a = token.meta) === null || _a === void 0 ? void 0 : _a.language) === null || _b === void 0 ? void 0 : _b.hlName) !== null && _c !== void 0 ? _c : '';
120
+ var highlighted = renderCodeWithMathHighlighted(token, md, langName, options, env);
121
+ if (highlighted.indexOf('<pre') === 0) {
122
+ return highlighted + '\n';
123
+ }
124
+ var styleValue = 'text-align: left;';
125
+ // If language exists, inject class gently, without modifying original token.
126
+ // May be, one day we will add .clone() for token and simplify this part, but
127
+ // now we prefer to keep things local.
128
+ var classes = ['lstlisting-code'];
129
+ if (langName) {
130
+ classes.push(options.langPrefix + langName);
131
+ }
132
+ var attrs = token.attrs ? token.attrs.map(function (_a) {
133
+ var _b = tslib_1.__read(_a, 2), k = _b[0], v = _b[1];
134
+ return [k, v];
135
+ }) : [];
136
+ // handle `class` attribute
137
+ var classIndex = token.attrIndex('class');
138
+ var className = classes.join(' ');
139
+ if (classIndex < 0) {
140
+ attrs.push(['class', className]);
141
+ }
142
+ else {
143
+ attrs[classIndex][1] += ' ' + className;
144
+ }
145
+ // handle `style` attribute (if provided as value)
146
+ if (styleValue) {
147
+ var styleIndex = token.attrIndex('style');
148
+ if (styleIndex < 0) {
149
+ attrs.push(['style', styleValue]);
150
+ }
151
+ else {
152
+ attrs[styleIndex][1] += '; ' + styleValue;
153
+ }
154
+ }
155
+ // Fake token just to render attributes
156
+ var fakeToken = { attrs: attrs };
157
+ return '<pre class="lstlisting"><code'
158
+ + slf.renderAttrs(fakeToken)
159
+ + '>'
160
+ + highlighted
161
+ + '</code></pre>\n';
162
+ };
163
+ };
164
+ exports.makeLatexLstlistingEnvRendererWithMd = makeLatexLstlistingEnvRendererWithMd;
165
+ //# sourceMappingURL=render-latex-lstlisting-env.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-latex-lstlisting-env.js","sourceRoot":"","sources":["../../../src/markdown/md-latex-lstlisting-env/render-latex-lstlisting-env.ts"],"names":[],"mappings":"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"}