Skip to content

Commit 68d032c

Browse files
committed
add convertTree()
1 parent df8eac9 commit 68d032c

File tree

5 files changed

+291
-189
lines changed

5 files changed

+291
-189
lines changed

src/index.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { parseTex } from "./parser";
22
import { Tex2TypstOptions } from "./types";
3-
import { TypstWriter } from "./writer";
3+
import { convertTree, TypstWriter } from "./writer";
44
import { symbolMap } from "./map";
55

66

@@ -21,9 +21,10 @@ export function tex2typst(tex: string, options?: Tex2TypstOptions): string {
2121
opt.customTexMacros = options.customTexMacros;
2222
}
2323
}
24-
const t = parseTex(tex, opt.customTexMacros!);
24+
const texTree = parseTex(tex, opt.customTexMacros!);
25+
const typstTree = convertTree(texTree);
2526
const writer = new TypstWriter(opt.nonStrict!, opt.preferTypstIntrinsic!);
26-
writer.append(t);
27+
writer.append(typstTree);
2728
return writer.finalize();
2829
}
2930

src/parser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -439,7 +439,7 @@ export class LatexParser {
439439
if (num_prime > 0) {
440440
res.sup = { type: 'ordgroup', content: '', args: [] };
441441
for (let i = 0; i < num_prime; i++) {
442-
res.sup.args!.push({ type: 'symbol', content: '\\prime' });
442+
res.sup.args!.push({ type: 'element', content: "'" });
443443
}
444444
if (sup) {
445445
res.sup.args!.push(sup);

src/types.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,20 @@ export interface TexNode {
3737
data?: TexSqrtData | TexSupsubData | TexArrayData;
3838
}
3939

40+
export interface TypstSupsubData {
41+
base: TypstNode;
42+
sup?: TypstNode;
43+
sub?: TypstNode;
44+
}
45+
46+
export type TypstArrayData = TypstNode[][];
47+
4048
export interface TypstNode {
41-
type: 'atom' | 'symbol' | 'text' | 'softSpace' | 'comment' | 'newline';
49+
type: 'atom' | 'symbol' | 'text' | 'softSpace' | 'comment' | 'newline'
50+
| 'empty' | 'group' | 'supsub' | 'unaryFunc' | 'binaryFunc' | 'align' | 'matrix' | 'unknown';
4251
content: string;
4352
args?: TypstNode[];
53+
data?: TypstSupsubData | TypstArrayData;
4454
}
4555

4656
export interface Tex2TypstOptions {

0 commit comments

Comments
 (0)