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.
- package/LICENSE +21 -0
- package/README.md +168 -0
- package/dist/browser.d.ts +87 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +157 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli/index.d.ts +34 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +221 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/service.d.ts +128 -0
- package/dist/cli/service.d.ts.map +1 -0
- package/dist/cli/service.js +284 -0
- package/dist/cli/service.js.map +1 -0
- package/dist/constants/index.d.ts +229 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/constants/index.js +232 -0
- package/dist/constants/index.js.map +1 -0
- package/dist/core/exporters/metadata-exporter.d.ts +104 -0
- package/dist/core/exporters/metadata-exporter.d.ts.map +1 -0
- package/dist/core/exporters/metadata-exporter.js +201 -0
- package/dist/core/exporters/metadata-exporter.js.map +1 -0
- package/dist/core/index.d.ts +40 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +56 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/parsers/yaml-parser.d.ts +149 -0
- package/dist/core/parsers/yaml-parser.d.ts.map +1 -0
- package/dist/core/parsers/yaml-parser.js +321 -0
- package/dist/core/parsers/yaml-parser.js.map +1 -0
- package/dist/core/processors/clause-processor.d.ts +74 -0
- package/dist/core/processors/clause-processor.d.ts.map +1 -0
- package/dist/core/processors/clause-processor.js +213 -0
- package/dist/core/processors/clause-processor.js.map +1 -0
- package/dist/core/processors/date-processor.d.ts +90 -0
- package/dist/core/processors/date-processor.d.ts.map +1 -0
- package/dist/core/processors/date-processor.js +336 -0
- package/dist/core/processors/date-processor.js.map +1 -0
- package/dist/core/processors/header-processor.d.ts +104 -0
- package/dist/core/processors/header-processor.d.ts.map +1 -0
- package/dist/core/processors/header-processor.js +585 -0
- package/dist/core/processors/header-processor.js.map +1 -0
- package/dist/core/processors/import-processor.d.ts +116 -0
- package/dist/core/processors/import-processor.d.ts.map +1 -0
- package/dist/core/processors/import-processor.js +236 -0
- package/dist/core/processors/import-processor.js.map +1 -0
- package/dist/core/processors/mixin-processor.d.ts +93 -0
- package/dist/core/processors/mixin-processor.d.ts.map +1 -0
- package/dist/core/processors/mixin-processor.js +378 -0
- package/dist/core/processors/mixin-processor.js.map +1 -0
- package/dist/core/processors/reference-processor.d.ts +115 -0
- package/dist/core/processors/reference-processor.d.ts.map +1 -0
- package/dist/core/processors/reference-processor.js +273 -0
- package/dist/core/processors/reference-processor.js.map +1 -0
- package/dist/errors/index.d.ts +234 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +267 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/extensions/batch-processor.d.ts +197 -0
- package/dist/extensions/batch-processor.d.ts.map +1 -0
- package/dist/extensions/batch-processor.js +392 -0
- package/dist/extensions/batch-processor.js.map +1 -0
- package/dist/extensions/formatters/index.d.ts +99 -0
- package/dist/extensions/formatters/index.d.ts.map +1 -0
- package/dist/extensions/formatters/index.js +128 -0
- package/dist/extensions/formatters/index.js.map +1 -0
- package/dist/extensions/index.d.ts +53 -0
- package/dist/extensions/index.d.ts.map +1 -0
- package/dist/extensions/index.js +71 -0
- package/dist/extensions/index.js.map +1 -0
- package/dist/extensions/latex-parser.d.ts +111 -0
- package/dist/extensions/latex-parser.d.ts.map +1 -0
- package/dist/extensions/latex-parser.js +563 -0
- package/dist/extensions/latex-parser.js.map +1 -0
- package/dist/extensions/rst-parser.d.ts +112 -0
- package/dist/extensions/rst-parser.d.ts.map +1 -0
- package/dist/extensions/rst-parser.js +268 -0
- package/dist/extensions/rst-parser.js.map +1 -0
- package/dist/extensions/template-loops.d.ts +61 -0
- package/dist/extensions/template-loops.d.ts.map +1 -0
- package/dist/extensions/template-loops.js +418 -0
- package/dist/extensions/template-loops.js.map +1 -0
- package/dist/extensions/utilities/index.d.ts +114 -0
- package/dist/extensions/utilities/index.d.ts.map +1 -0
- package/dist/extensions/utilities/index.js +137 -0
- package/dist/extensions/utilities/index.js.map +1 -0
- package/dist/extensions/validators/index.d.ts +65 -0
- package/dist/extensions/validators/index.d.ts.map +1 -0
- package/dist/extensions/validators/index.js +88 -0
- package/dist/extensions/validators/index.js.map +1 -0
- package/dist/generators/html-generator.d.ts +184 -0
- package/dist/generators/html-generator.d.ts.map +1 -0
- package/dist/generators/html-generator.js +361 -0
- package/dist/generators/html-generator.js.map +1 -0
- package/dist/generators/pdf-generator.d.ts +165 -0
- package/dist/generators/pdf-generator.d.ts.map +1 -0
- package/dist/generators/pdf-generator.js +275 -0
- package/dist/generators/pdf-generator.js.map +1 -0
- package/dist/helpers/date-helpers.d.ts +216 -0
- package/dist/helpers/date-helpers.d.ts.map +1 -0
- package/dist/helpers/date-helpers.js +402 -0
- package/dist/helpers/date-helpers.js.map +1 -0
- package/dist/helpers/index.d.ts +87 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/index.js +149 -0
- package/dist/helpers/index.js.map +1 -0
- package/dist/helpers/number-helpers.d.ts +269 -0
- package/dist/helpers/number-helpers.d.ts.map +1 -0
- package/dist/helpers/number-helpers.js +406 -0
- package/dist/helpers/number-helpers.js.map +1 -0
- package/dist/helpers/string-helpers.d.ts +391 -0
- package/dist/helpers/string-helpers.d.ts.map +1 -0
- package/dist/helpers/string-helpers.js +549 -0
- package/dist/helpers/string-helpers.js.map +1 -0
- package/dist/index.d.ts +229 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +384 -0
- package/dist/index.js.map +1 -0
- package/dist/legal-markdown.umd.min.js +2 -0
- package/dist/legal-markdown.umd.min.js.LICENSE.txt +14 -0
- package/dist/legal-markdown.umd.min.js.map +1 -0
- package/dist/lib/index.d.ts +150 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +265 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/parsers/content-detector.d.ts +131 -0
- package/dist/parsers/content-detector.d.ts.map +1 -0
- package/dist/parsers/content-detector.js +220 -0
- package/dist/parsers/content-detector.js.map +1 -0
- package/dist/parsers/fallback-parsers.d.ts +14 -0
- package/dist/parsers/fallback-parsers.d.ts.map +1 -0
- package/dist/parsers/fallback-parsers.js +188 -0
- package/dist/parsers/fallback-parsers.js.map +1 -0
- package/dist/parsers/implementations/pandoc-native.d.ts +13 -0
- package/dist/parsers/implementations/pandoc-native.d.ts.map +1 -0
- package/dist/parsers/implementations/pandoc-native.js +63 -0
- package/dist/parsers/implementations/pandoc-native.js.map +1 -0
- package/dist/parsers/implementations/pandoc-wasm.d.ts +14 -0
- package/dist/parsers/implementations/pandoc-wasm.d.ts.map +1 -0
- package/dist/parsers/implementations/pandoc-wasm.js +64 -0
- package/dist/parsers/implementations/pandoc-wasm.js.map +1 -0
- package/dist/parsers/pandoc-factory.d.ts +97 -0
- package/dist/parsers/pandoc-factory.d.ts.map +1 -0
- package/dist/parsers/pandoc-factory.js +146 -0
- package/dist/parsers/pandoc-factory.js.map +1 -0
- package/dist/parsers/pandoc-loader.d.ts +24 -0
- package/dist/parsers/pandoc-loader.d.ts.map +1 -0
- package/dist/parsers/pandoc-loader.js +124 -0
- package/dist/parsers/pandoc-loader.js.map +1 -0
- package/dist/parsers/pandoc-parser.d.ts +27 -0
- package/dist/parsers/pandoc-parser.d.ts.map +1 -0
- package/dist/parsers/pandoc-parser.js +3 -0
- package/dist/parsers/pandoc-parser.js.map +1 -0
- package/dist/styles/default.css +125 -0
- package/dist/styles/headers.css +146 -0
- package/dist/styles/highlight.css +171 -0
- package/dist/tracking/field-tracker.d.ts +206 -0
- package/dist/tracking/field-tracker.d.ts.map +1 -0
- package/dist/tracking/field-tracker.js +247 -0
- package/dist/tracking/field-tracker.js.map +1 -0
- package/dist/types.d.ts +186 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/logger.d.ts +107 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +122 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/web/bundle-standalone.js +28 -0
- package/dist/web/bundle.js +17 -0
- package/dist/web/index.html +1465 -0
- package/dist/web/legal-markdown.umd.min.js +2 -0
- package/dist/web/standalone.html +390 -0
- package/dist/web/styles.css +874 -0
- 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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"}
|