legal-markdown-js 0.1.0

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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +168 -0
  3. package/dist/browser.d.ts +87 -0
  4. package/dist/browser.d.ts.map +1 -0
  5. package/dist/browser.js +157 -0
  6. package/dist/browser.js.map +1 -0
  7. package/dist/cli/index.d.ts +34 -0
  8. package/dist/cli/index.d.ts.map +1 -0
  9. package/dist/cli/index.js +221 -0
  10. package/dist/cli/index.js.map +1 -0
  11. package/dist/cli/service.d.ts +128 -0
  12. package/dist/cli/service.d.ts.map +1 -0
  13. package/dist/cli/service.js +284 -0
  14. package/dist/cli/service.js.map +1 -0
  15. package/dist/constants/index.d.ts +229 -0
  16. package/dist/constants/index.d.ts.map +1 -0
  17. package/dist/constants/index.js +232 -0
  18. package/dist/constants/index.js.map +1 -0
  19. package/dist/core/exporters/metadata-exporter.d.ts +104 -0
  20. package/dist/core/exporters/metadata-exporter.d.ts.map +1 -0
  21. package/dist/core/exporters/metadata-exporter.js +201 -0
  22. package/dist/core/exporters/metadata-exporter.js.map +1 -0
  23. package/dist/core/index.d.ts +40 -0
  24. package/dist/core/index.d.ts.map +1 -0
  25. package/dist/core/index.js +56 -0
  26. package/dist/core/index.js.map +1 -0
  27. package/dist/core/parsers/yaml-parser.d.ts +149 -0
  28. package/dist/core/parsers/yaml-parser.d.ts.map +1 -0
  29. package/dist/core/parsers/yaml-parser.js +321 -0
  30. package/dist/core/parsers/yaml-parser.js.map +1 -0
  31. package/dist/core/processors/clause-processor.d.ts +74 -0
  32. package/dist/core/processors/clause-processor.d.ts.map +1 -0
  33. package/dist/core/processors/clause-processor.js +213 -0
  34. package/dist/core/processors/clause-processor.js.map +1 -0
  35. package/dist/core/processors/date-processor.d.ts +90 -0
  36. package/dist/core/processors/date-processor.d.ts.map +1 -0
  37. package/dist/core/processors/date-processor.js +336 -0
  38. package/dist/core/processors/date-processor.js.map +1 -0
  39. package/dist/core/processors/header-processor.d.ts +104 -0
  40. package/dist/core/processors/header-processor.d.ts.map +1 -0
  41. package/dist/core/processors/header-processor.js +585 -0
  42. package/dist/core/processors/header-processor.js.map +1 -0
  43. package/dist/core/processors/import-processor.d.ts +116 -0
  44. package/dist/core/processors/import-processor.d.ts.map +1 -0
  45. package/dist/core/processors/import-processor.js +236 -0
  46. package/dist/core/processors/import-processor.js.map +1 -0
  47. package/dist/core/processors/mixin-processor.d.ts +93 -0
  48. package/dist/core/processors/mixin-processor.d.ts.map +1 -0
  49. package/dist/core/processors/mixin-processor.js +378 -0
  50. package/dist/core/processors/mixin-processor.js.map +1 -0
  51. package/dist/core/processors/reference-processor.d.ts +115 -0
  52. package/dist/core/processors/reference-processor.d.ts.map +1 -0
  53. package/dist/core/processors/reference-processor.js +273 -0
  54. package/dist/core/processors/reference-processor.js.map +1 -0
  55. package/dist/errors/index.d.ts +234 -0
  56. package/dist/errors/index.d.ts.map +1 -0
  57. package/dist/errors/index.js +267 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/extensions/batch-processor.d.ts +197 -0
  60. package/dist/extensions/batch-processor.d.ts.map +1 -0
  61. package/dist/extensions/batch-processor.js +392 -0
  62. package/dist/extensions/batch-processor.js.map +1 -0
  63. package/dist/extensions/formatters/index.d.ts +99 -0
  64. package/dist/extensions/formatters/index.d.ts.map +1 -0
  65. package/dist/extensions/formatters/index.js +128 -0
  66. package/dist/extensions/formatters/index.js.map +1 -0
  67. package/dist/extensions/index.d.ts +53 -0
  68. package/dist/extensions/index.d.ts.map +1 -0
  69. package/dist/extensions/index.js +71 -0
  70. package/dist/extensions/index.js.map +1 -0
  71. package/dist/extensions/latex-parser.d.ts +111 -0
  72. package/dist/extensions/latex-parser.d.ts.map +1 -0
  73. package/dist/extensions/latex-parser.js +563 -0
  74. package/dist/extensions/latex-parser.js.map +1 -0
  75. package/dist/extensions/rst-parser.d.ts +112 -0
  76. package/dist/extensions/rst-parser.d.ts.map +1 -0
  77. package/dist/extensions/rst-parser.js +268 -0
  78. package/dist/extensions/rst-parser.js.map +1 -0
  79. package/dist/extensions/template-loops.d.ts +61 -0
  80. package/dist/extensions/template-loops.d.ts.map +1 -0
  81. package/dist/extensions/template-loops.js +418 -0
  82. package/dist/extensions/template-loops.js.map +1 -0
  83. package/dist/extensions/utilities/index.d.ts +114 -0
  84. package/dist/extensions/utilities/index.d.ts.map +1 -0
  85. package/dist/extensions/utilities/index.js +137 -0
  86. package/dist/extensions/utilities/index.js.map +1 -0
  87. package/dist/extensions/validators/index.d.ts +65 -0
  88. package/dist/extensions/validators/index.d.ts.map +1 -0
  89. package/dist/extensions/validators/index.js +88 -0
  90. package/dist/extensions/validators/index.js.map +1 -0
  91. package/dist/generators/html-generator.d.ts +184 -0
  92. package/dist/generators/html-generator.d.ts.map +1 -0
  93. package/dist/generators/html-generator.js +361 -0
  94. package/dist/generators/html-generator.js.map +1 -0
  95. package/dist/generators/pdf-generator.d.ts +165 -0
  96. package/dist/generators/pdf-generator.d.ts.map +1 -0
  97. package/dist/generators/pdf-generator.js +275 -0
  98. package/dist/generators/pdf-generator.js.map +1 -0
  99. package/dist/helpers/date-helpers.d.ts +216 -0
  100. package/dist/helpers/date-helpers.d.ts.map +1 -0
  101. package/dist/helpers/date-helpers.js +402 -0
  102. package/dist/helpers/date-helpers.js.map +1 -0
  103. package/dist/helpers/index.d.ts +87 -0
  104. package/dist/helpers/index.d.ts.map +1 -0
  105. package/dist/helpers/index.js +149 -0
  106. package/dist/helpers/index.js.map +1 -0
  107. package/dist/helpers/number-helpers.d.ts +269 -0
  108. package/dist/helpers/number-helpers.d.ts.map +1 -0
  109. package/dist/helpers/number-helpers.js +406 -0
  110. package/dist/helpers/number-helpers.js.map +1 -0
  111. package/dist/helpers/string-helpers.d.ts +391 -0
  112. package/dist/helpers/string-helpers.d.ts.map +1 -0
  113. package/dist/helpers/string-helpers.js +549 -0
  114. package/dist/helpers/string-helpers.js.map +1 -0
  115. package/dist/index.d.ts +229 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +384 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/legal-markdown.umd.min.js +2 -0
  120. package/dist/legal-markdown.umd.min.js.LICENSE.txt +14 -0
  121. package/dist/legal-markdown.umd.min.js.map +1 -0
  122. package/dist/lib/index.d.ts +150 -0
  123. package/dist/lib/index.d.ts.map +1 -0
  124. package/dist/lib/index.js +265 -0
  125. package/dist/lib/index.js.map +1 -0
  126. package/dist/parsers/content-detector.d.ts +131 -0
  127. package/dist/parsers/content-detector.d.ts.map +1 -0
  128. package/dist/parsers/content-detector.js +220 -0
  129. package/dist/parsers/content-detector.js.map +1 -0
  130. package/dist/parsers/fallback-parsers.d.ts +14 -0
  131. package/dist/parsers/fallback-parsers.d.ts.map +1 -0
  132. package/dist/parsers/fallback-parsers.js +188 -0
  133. package/dist/parsers/fallback-parsers.js.map +1 -0
  134. package/dist/parsers/implementations/pandoc-native.d.ts +13 -0
  135. package/dist/parsers/implementations/pandoc-native.d.ts.map +1 -0
  136. package/dist/parsers/implementations/pandoc-native.js +63 -0
  137. package/dist/parsers/implementations/pandoc-native.js.map +1 -0
  138. package/dist/parsers/implementations/pandoc-wasm.d.ts +14 -0
  139. package/dist/parsers/implementations/pandoc-wasm.d.ts.map +1 -0
  140. package/dist/parsers/implementations/pandoc-wasm.js +64 -0
  141. package/dist/parsers/implementations/pandoc-wasm.js.map +1 -0
  142. package/dist/parsers/pandoc-factory.d.ts +97 -0
  143. package/dist/parsers/pandoc-factory.d.ts.map +1 -0
  144. package/dist/parsers/pandoc-factory.js +146 -0
  145. package/dist/parsers/pandoc-factory.js.map +1 -0
  146. package/dist/parsers/pandoc-loader.d.ts +24 -0
  147. package/dist/parsers/pandoc-loader.d.ts.map +1 -0
  148. package/dist/parsers/pandoc-loader.js +124 -0
  149. package/dist/parsers/pandoc-loader.js.map +1 -0
  150. package/dist/parsers/pandoc-parser.d.ts +27 -0
  151. package/dist/parsers/pandoc-parser.d.ts.map +1 -0
  152. package/dist/parsers/pandoc-parser.js +3 -0
  153. package/dist/parsers/pandoc-parser.js.map +1 -0
  154. package/dist/styles/default.css +125 -0
  155. package/dist/styles/headers.css +146 -0
  156. package/dist/styles/highlight.css +171 -0
  157. package/dist/tracking/field-tracker.d.ts +206 -0
  158. package/dist/tracking/field-tracker.d.ts.map +1 -0
  159. package/dist/tracking/field-tracker.js +247 -0
  160. package/dist/tracking/field-tracker.js.map +1 -0
  161. package/dist/types.d.ts +186 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +33 -0
  164. package/dist/types.js.map +1 -0
  165. package/dist/utils/logger.d.ts +107 -0
  166. package/dist/utils/logger.d.ts.map +1 -0
  167. package/dist/utils/logger.js +122 -0
  168. package/dist/utils/logger.js.map +1 -0
  169. package/dist/web/bundle-standalone.js +28 -0
  170. package/dist/web/bundle.js +17 -0
  171. package/dist/web/index.html +1465 -0
  172. package/dist/web/legal-markdown.umd.min.js +2 -0
  173. package/dist/web/standalone.html +390 -0
  174. package/dist/web/styles.css +874 -0
  175. package/package.json +118 -0
@@ -0,0 +1,563 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview LaTeX Parser Extension for Legal Markdown
4
+ *
5
+ * This module provides functionality to parse LaTeX (.tex) documents and convert
6
+ * them to Legal Markdown format. It uses Pandoc for robust parsing with intelligent
7
+ * fallback to basic regex-based parsing when Pandoc is not available or fails.
8
+ *
9
+ * Features:
10
+ * - AST-based LaTeX parsing using Pandoc
11
+ * - Fallback regex-based parsing for simple documents
12
+ * - Content type detection and validation
13
+ * - Section command conversion to Legal Markdown headers
14
+ * - Text formatting preservation (textbf, textit, emph)
15
+ * - Environment handling (enumerate, itemize, verbatim)
16
+ * - Macro expansion and command processing
17
+ * - Mathematical notation preservation
18
+ * - Reference and label handling
19
+ *
20
+ * @example
21
+ * ```typescript
22
+ * import { convertLatexToLegalMarkdown, convertLatexToLegalMarkdownSync } from './latex-parser';
23
+ *
24
+ * const latexContent = `
25
+ * \\documentclass{article}
26
+ * \\begin{document}
27
+ *
28
+ * \\section{Introduction}
29
+ * This is a sample LaTeX document with \\textbf{bold} and \\textit{italic} text.
30
+ *
31
+ * \\subsection{Terms}
32
+ * Some content here.
33
+ *
34
+ * \\end{document}
35
+ * `;
36
+ *
37
+ * // Async conversion (preferred)
38
+ * const legalMarkdown = await convertLatexToLegalMarkdown(latexContent);
39
+ *
40
+ * // Sync conversion (fallback)
41
+ * const legalMarkdownSync = convertLatexToLegalMarkdownSync(latexContent);
42
+ * ```
43
+ */
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.parseLatex = parseLatex;
46
+ exports.parseLatexSync = parseLatexSync;
47
+ exports.isLatex = isLatex;
48
+ exports.convertLatexToLegalMarkdown = convertLatexToLegalMarkdown;
49
+ exports.convertLatexToLegalMarkdownSync = convertLatexToLegalMarkdownSync;
50
+ const content_detector_1 = require("../parsers/content-detector");
51
+ const pandoc_factory_1 = require("../parsers/pandoc-factory");
52
+ const fallback_parsers_1 = require("../parsers/fallback-parsers");
53
+ /**
54
+ * Convert LaTeX AST node to markdown
55
+ */
56
+ function astToMarkdown(node, sectionLevel = 0) {
57
+ // Handle string nodes
58
+ if (typeof node === 'string') {
59
+ return node;
60
+ }
61
+ // Handle nodes with content property
62
+ if ('content' in node && Array.isArray(node.content)) {
63
+ return node.content.map((child) => astToMarkdown(child, sectionLevel)).join('');
64
+ }
65
+ // Handle specific node types
66
+ if ('type' in node) {
67
+ switch (node.type) {
68
+ case 'root':
69
+ return node.content
70
+ .map((child, index) => {
71
+ const result = astToMarkdown(child, sectionLevel);
72
+ // Check if next node is a group that should be an argument
73
+ if (child.type === 'macro' && index + 1 < node.content.length) {
74
+ const nextNode = node.content[index + 1];
75
+ if (nextNode.type === 'group') {
76
+ // This group is likely the argument for the macro
77
+ return handleMacroWithGroup(child, nextNode, sectionLevel);
78
+ }
79
+ }
80
+ return result;
81
+ })
82
+ .filter((_, index) => {
83
+ // Filter out groups that were processed as arguments
84
+ if (index > 0 && node.content[index].type === 'group') {
85
+ const prevNode = node.content[index - 1];
86
+ if (prevNode.type === 'macro') {
87
+ return false;
88
+ }
89
+ }
90
+ return true;
91
+ })
92
+ .join('');
93
+ case 'macro':
94
+ return handleMacro(node, sectionLevel);
95
+ case 'environment':
96
+ return handleEnvironment(node, sectionLevel);
97
+ case 'parbreak':
98
+ return '\n\n';
99
+ case 'comment':
100
+ return ''; // Skip comments
101
+ case 'group':
102
+ return astToMarkdown(node.content, sectionLevel);
103
+ case 'inlinemath':
104
+ return `$${astToMarkdown(node.content, sectionLevel)}$`;
105
+ case 'displaymath':
106
+ return `$$${astToMarkdown(node.content, sectionLevel)}$$`;
107
+ case 'verb':
108
+ case 'verbatim':
109
+ return `\`${node.content}\``;
110
+ case 'string':
111
+ return node.content || '';
112
+ case 'whitespace':
113
+ return ' ';
114
+ default:
115
+ // For unknown types, try to extract content
116
+ if ('content' in node) {
117
+ return astToMarkdown(node.content, sectionLevel);
118
+ }
119
+ return '';
120
+ }
121
+ }
122
+ return '';
123
+ }
124
+ /**
125
+ * Handle macro with a group as argument
126
+ */
127
+ function handleMacroWithGroup(macro, group, sectionLevel) {
128
+ const command = macro.content;
129
+ const content = extractContent(group);
130
+ switch (command) {
131
+ case 'textbf':
132
+ case 'bf':
133
+ return `**${content}**`;
134
+ case 'textit':
135
+ case 'emph':
136
+ case 'it':
137
+ return `*${content}*`;
138
+ case 'texttt':
139
+ return `\`${content}\``;
140
+ case 'underline':
141
+ return `__${content}__`;
142
+ default:
143
+ return content;
144
+ }
145
+ }
146
+ /**
147
+ * Handle LaTeX macros (commands)
148
+ */
149
+ function handleMacro(node, sectionLevel) {
150
+ const command = node.content;
151
+ const args = node.args || [];
152
+ switch (command) {
153
+ // Document structure
154
+ case 'documentclass':
155
+ case 'usepackage':
156
+ case 'maketitle':
157
+ return ''; // Skip these
158
+ case 'title': {
159
+ const titleArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
160
+ if (titleArg) {
161
+ const title = extractContent(titleArg);
162
+ return `---\ntitle: "${title}"\n---\n`;
163
+ }
164
+ return '';
165
+ }
166
+ case 'author': {
167
+ const authorArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
168
+ if (authorArg) {
169
+ const author = extractContent(authorArg);
170
+ return `author: "${author}"\n`;
171
+ }
172
+ return '';
173
+ }
174
+ case 'date': {
175
+ const dateArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
176
+ if (dateArg) {
177
+ const date = extractContent(dateArg);
178
+ return `date: "${date}"\n`;
179
+ }
180
+ return '';
181
+ }
182
+ // Sections
183
+ case 'part':
184
+ case 'chapter':
185
+ case 'section':
186
+ case 'subsection':
187
+ case 'subsubsection':
188
+ case 'paragraph':
189
+ case 'subparagraph':
190
+ return handleSection(command, args, sectionLevel);
191
+ // Text formatting
192
+ case 'textbf':
193
+ case 'bf': {
194
+ // Find the first non-empty argument
195
+ const bfArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
196
+ if (bfArg) {
197
+ return `**${extractContent(bfArg)}**`;
198
+ }
199
+ return '';
200
+ }
201
+ case 'textit':
202
+ case 'emph':
203
+ case 'it': {
204
+ const itArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
205
+ if (itArg) {
206
+ return `*${extractContent(itArg)}*`;
207
+ }
208
+ return '';
209
+ }
210
+ case 'texttt': {
211
+ const ttArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
212
+ if (ttArg) {
213
+ return `\`${extractContent(ttArg)}\``;
214
+ }
215
+ return '';
216
+ }
217
+ case 'underline': {
218
+ const ulArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
219
+ if (ulArg) {
220
+ return `__${extractContent(ulArg)}__`;
221
+ }
222
+ return '';
223
+ }
224
+ // Links
225
+ case 'href':
226
+ if (args[0] && args[1]) {
227
+ const url = extractContent(args[0]);
228
+ const text = extractContent(args[1]);
229
+ return `[${text}](${url})`;
230
+ }
231
+ return '';
232
+ case 'url':
233
+ if (args[0]) {
234
+ const url = extractContent(args[0]);
235
+ return `<${url}>`;
236
+ }
237
+ return '';
238
+ case 'cite':
239
+ if (args[0]) {
240
+ const cite = extractContent(args[0]);
241
+ return `[${cite}]`;
242
+ }
243
+ return '';
244
+ case 'ref':
245
+ if (args[0]) {
246
+ const ref = extractContent(args[0]);
247
+ return `[${ref}]`;
248
+ }
249
+ return '';
250
+ case 'label':
251
+ if (args[0]) {
252
+ const label = extractContent(args[0]);
253
+ return `<a name="${label}"></a>`;
254
+ }
255
+ return '';
256
+ case 'footnote':
257
+ if (args[0]) {
258
+ const footnote = extractContent(args[0]);
259
+ return `[^${footnoteCounter++}]`;
260
+ }
261
+ return '';
262
+ // Quotes
263
+ case '`':
264
+ return "'";
265
+ case "'":
266
+ return "'";
267
+ case '``':
268
+ return '"';
269
+ case "''":
270
+ return '"';
271
+ // Line breaks and spacing
272
+ case '\\\\':
273
+ case 'newline':
274
+ case 'linebreak':
275
+ return '\n';
276
+ case 'par':
277
+ return '\n\n';
278
+ // Skip these commands
279
+ case 'newpage':
280
+ case 'clearpage':
281
+ case 'pagebreak':
282
+ case 'noindent':
283
+ case 'bigskip':
284
+ case 'medskip':
285
+ case 'smallskip':
286
+ case 'vspace':
287
+ case 'hspace':
288
+ case 'indent':
289
+ case 'centering':
290
+ case 'raggedright':
291
+ case 'raggedleft':
292
+ case 'today':
293
+ return '';
294
+ default:
295
+ // For unknown macros, try to extract content from args
296
+ if (args[0]) {
297
+ return extractContent(args[0]);
298
+ }
299
+ return '';
300
+ }
301
+ }
302
+ /**
303
+ * Handle LaTeX environments
304
+ */
305
+ function handleEnvironment(node, sectionLevel) {
306
+ const envName = node.env;
307
+ const content = node.content;
308
+ switch (envName) {
309
+ case 'document':
310
+ return astToMarkdown(content, sectionLevel);
311
+ case 'itemize':
312
+ return handleItemize(content, sectionLevel);
313
+ case 'enumerate':
314
+ return handleEnumerate(content, sectionLevel);
315
+ case 'description':
316
+ return handleDescription(content, sectionLevel);
317
+ case 'verbatim':
318
+ case 'lstlisting':
319
+ return '```\n' + extractRawContent(content) + '\n```';
320
+ case 'minted': {
321
+ const lang = node.args?.[0] ? extractContent(node.args[0]) : '';
322
+ return '```' + lang + '\n' + extractRawContent(content) + '\n```';
323
+ }
324
+ case 'quote':
325
+ case 'quotation': {
326
+ const quoteContent = astToMarkdown(content, sectionLevel);
327
+ return quoteContent
328
+ .split('\n')
329
+ .map(line => line.trim())
330
+ .filter(line => line)
331
+ .map(line => `> ${line}`)
332
+ .join('\n');
333
+ }
334
+ default:
335
+ // For unknown environments, just process content
336
+ return astToMarkdown(content, sectionLevel);
337
+ }
338
+ }
339
+ /**
340
+ * Handle section commands
341
+ */
342
+ function handleSection(command, args, currentLevel) {
343
+ const sectionArg = args.find((arg) => arg && arg.content && arg.content.length > 0);
344
+ if (!sectionArg)
345
+ return '';
346
+ const title = extractContent(sectionArg);
347
+ const levelMap = {
348
+ part: 1,
349
+ chapter: 1,
350
+ section: 2,
351
+ subsection: 3,
352
+ subsubsection: 4,
353
+ paragraph: 5,
354
+ subparagraph: 5,
355
+ };
356
+ const level = levelMap[command] || 2;
357
+ const prefix = 'l'.repeat(level);
358
+ return `\n${prefix}. ${title}\n`;
359
+ }
360
+ /**
361
+ * Handle itemize (bullet list) environment
362
+ */
363
+ function handleItemize(content, sectionLevel) {
364
+ const items = extractListItems(content);
365
+ return items.map(item => `- ${astToMarkdown(item, sectionLevel)}`).join('\n');
366
+ }
367
+ /**
368
+ * Handle enumerate (numbered list) environment
369
+ */
370
+ function handleEnumerate(content, sectionLevel) {
371
+ const items = extractListItems(content);
372
+ return items
373
+ .map((item, index) => `${index + 1}. ${astToMarkdown(item, sectionLevel)}`)
374
+ .join('\n');
375
+ }
376
+ /**
377
+ * Handle description list environment
378
+ */
379
+ function handleDescription(content, sectionLevel) {
380
+ const items = extractListItems(content);
381
+ return items
382
+ .map(item => {
383
+ // Look for optional argument in item macro
384
+ if (item.type === 'macro' && item.content === 'item' && item.args?.[0]) {
385
+ const term = extractContent(item.args[0]);
386
+ const desc = item.args[1] ? extractContent(item.args[1]) : '';
387
+ return `**${term}**\n ${desc}`;
388
+ }
389
+ return astToMarkdown(item, sectionLevel);
390
+ })
391
+ .join('\n\n');
392
+ }
393
+ /**
394
+ * Extract list items from content
395
+ */
396
+ function extractListItems(content) {
397
+ if (!Array.isArray(content)) {
398
+ content = content.content || [];
399
+ }
400
+ const items = [];
401
+ let currentItem = [];
402
+ for (const node of content) {
403
+ if (node.type === 'macro' && node.content === 'item') {
404
+ if (currentItem.length > 0) {
405
+ items.push(currentItem);
406
+ }
407
+ currentItem = [];
408
+ }
409
+ else {
410
+ currentItem.push(node);
411
+ }
412
+ }
413
+ if (currentItem.length > 0) {
414
+ items.push(currentItem);
415
+ }
416
+ return items;
417
+ }
418
+ /**
419
+ * Extract text content from AST node
420
+ */
421
+ function extractContent(node) {
422
+ if (typeof node === 'string')
423
+ return node;
424
+ if (Array.isArray(node))
425
+ return node.map(extractContent).join('');
426
+ // Handle argument nodes
427
+ if (node.type === 'argument' && node.content) {
428
+ return extractContent(node.content);
429
+ }
430
+ // Handle string nodes
431
+ if (node.type === 'string' && node.content) {
432
+ return node.content;
433
+ }
434
+ // Handle whitespace nodes
435
+ if (node.type === 'whitespace') {
436
+ return ' ';
437
+ }
438
+ // Handle group nodes
439
+ if (node.type === 'group' && node.content) {
440
+ return extractContent(node.content);
441
+ }
442
+ // Default case
443
+ if (node.content)
444
+ return extractContent(node.content);
445
+ return '';
446
+ }
447
+ /**
448
+ * Extract raw content without processing
449
+ */
450
+ function extractRawContent(node) {
451
+ if (typeof node === 'string')
452
+ return node;
453
+ if (Array.isArray(node))
454
+ return node.join('');
455
+ if (node.content)
456
+ return extractRawContent(node.content);
457
+ return '';
458
+ }
459
+ let footnoteCounter = 1;
460
+ /**
461
+ * Converts LaTeX content to legal markdown format using pandoc
462
+ */
463
+ async function parseLatex(content) {
464
+ try {
465
+ const parser = await pandoc_factory_1.PandocFactory.createForContent(content);
466
+ if (parser) {
467
+ const markdown = await parser.convert(content, 'latex', 'markdown');
468
+ return markdown.replace(/\n{3,}/g, '\n\n').trim();
469
+ }
470
+ else {
471
+ // Use fallback parser
472
+ return fallback_parsers_1.FallbackParsers.convertLatexBasic(content);
473
+ }
474
+ }
475
+ catch (error) {
476
+ if (process.env.NODE_ENV !== 'test') {
477
+ console.error('Error parsing LaTeX:', error);
478
+ }
479
+ // Use fallback parser on error
480
+ return fallback_parsers_1.FallbackParsers.convertLatexBasic(content);
481
+ }
482
+ }
483
+ /**
484
+ * Synchronous version using fallback parser
485
+ */
486
+ function parseLatexSync(content) {
487
+ return fallback_parsers_1.FallbackParsers.convertLatexBasic(content);
488
+ }
489
+ /**
490
+ * Checks if content appears to be LaTeX
491
+ */
492
+ function isLatex(content) {
493
+ return content_detector_1.ContentDetector.needsLatexParser(content);
494
+ }
495
+ /**
496
+ * Converts LaTeX content to Legal Markdown format (async version)
497
+ *
498
+ * This function provides robust conversion of LaTeX documents to Legal Markdown
499
+ * format using Pandoc when available. It automatically detects LaTeX content
500
+ * and only performs conversion when necessary, preserving non-LaTeX content unchanged.
501
+ *
502
+ * @async
503
+ * @param {string} content - The input content that may contain LaTeX
504
+ * @returns {Promise<string>} A promise that resolves to Legal Markdown formatted content
505
+ * @example
506
+ * ```typescript
507
+ * const latexContent = `
508
+ * \\section{Introduction}
509
+ * This is a sample LaTeX document with \\textbf{bold} text.
510
+ *
511
+ * \\subsection{Terms}
512
+ * Some content with \\textit{italic} formatting.
513
+ * `;
514
+ *
515
+ * const legalMarkdown = await convertLatexToLegalMarkdown(latexContent);
516
+ * console.log(legalMarkdown);
517
+ * // Output:
518
+ * // l. Introduction
519
+ * // This is a sample LaTeX document with **bold** text.
520
+ * //
521
+ * // ll. Terms
522
+ * // Some content with *italic* formatting.
523
+ * ```
524
+ */
525
+ async function convertLatexToLegalMarkdown(content) {
526
+ // Only convert if it looks like LaTeX
527
+ if (!isLatex(content)) {
528
+ return content;
529
+ }
530
+ return await parseLatex(content);
531
+ }
532
+ /**
533
+ * Converts LaTeX content to Legal Markdown format (sync version)
534
+ *
535
+ * This synchronous function provides fallback conversion of LaTeX documents
536
+ * using regex-based parsing when Pandoc is not available. It's designed for
537
+ * environments where async operations are not suitable or when simple
538
+ * conversion is sufficient.
539
+ *
540
+ * @param {string} content - The input content that may contain LaTeX
541
+ * @returns {string} Legal Markdown formatted content
542
+ * @example
543
+ * ```typescript
544
+ * const latexContent = `
545
+ * \\section{Terms}
546
+ * This agreement contains \\textbf{important} terms.
547
+ * `;
548
+ *
549
+ * const legalMarkdown = convertLatexToLegalMarkdownSync(latexContent);
550
+ * console.log(legalMarkdown);
551
+ * // Output:
552
+ * // l. Terms
553
+ * // This agreement contains **important** terms.
554
+ * ```
555
+ */
556
+ function convertLatexToLegalMarkdownSync(content) {
557
+ // Only convert if it looks like LaTeX
558
+ if (!isLatex(content)) {
559
+ return content;
560
+ }
561
+ return parseLatexSync(content);
562
+ }
563
+ //# sourceMappingURL=latex-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"latex-parser.js","sourceRoot":"","sources":["../../src/extensions/latex-parser.ts"],"names":[],"mappings":"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"}