Skip to content

Commit 00cef52

Browse files
committed
feat: new markdown lexer/parse
1 parent 16d2c30 commit 00cef52

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

68 files changed

+5680
-9070
lines changed

frontend/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
"format-ffi": "prettier --write src/lib/api/types.ts",
1414
"lint": "prettier --check .",
1515
"codegen-shiki": "node scripts/shiki-codegen.js",
16-
"generate-licenses": "node scripts/generate-licenses.js"
16+
"generate-licenses": "node scripts/generate-licenses.js",
17+
"gen-test": "node src/lib/components/markdown/tests/generate/codegen.mjs"
1718
},
1819
"dependencies": {
1920
"@codemirror/autocomplete": "^6.20.0",

frontend/src/lib/components/markdown/Del.svelte

Lines changed: 0 additions & 10 deletions
This file was deleted.

frontend/src/lib/components/markdown/Example.svelte

Lines changed: 0 additions & 139 deletions
This file was deleted.

frontend/src/lib/components/markdown/Latex.svelte

Lines changed: 0 additions & 14 deletions
This file was deleted.
Lines changed: 80 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,108 +1,109 @@
11
<script lang="ts">
2-
import type {
3-
Token,
4-
TextToken,
5-
ImageToken,
6-
LinkToken,
7-
TableCellToken,
8-
LatexBlockToken,
9-
LatexInlineToken,
10-
InlineCodeToken,
11-
CodeBlockToken
12-
} from './lexer';
13-
import { TokenType } from './lexer';
2+
import {
3+
AstNodeType,
4+
type AstNode,
5+
type HeadingNode,
6+
type CodeBlockNode,
7+
type OrderedListNode,
8+
type UnorderedListNode,
9+
type TableCellNode,
10+
type LatexBlockNode,
11+
type LatexInlineNode,
12+
type InlineCodeNode,
13+
type LinkNode,
14+
type ImageNode,
15+
type TextNode
16+
} from './parser/types';
1417
15-
import Blockquote from './Blockquote.svelte';
16-
import Br from './Br.svelte';
17-
import Code from './Code.svelte';
18-
import Codespan from './Codespan.svelte';
19-
import Del from './Del.svelte';
20-
import Heading from './Heading.svelte';
21-
import Hr from './Hr.svelte';
22-
import Image from './Image.svelte';
23-
import Italic from './Italic.svelte';
24-
import Latex from './Latex.svelte';
25-
import LatexSpan from './LatexSpan.svelte';
26-
import Link from './Link.svelte';
27-
import List from './List.svelte';
28-
import ListItem from './ListItem.svelte';
29-
import Paragraph from './Paragraph.svelte';
30-
import Strong from './Strong.svelte';
31-
import Table from './Table.svelte';
32-
import TableRow from './TableRow.svelte';
33-
import TableCell from './TableCell.svelte';
34-
import Text from './Text.svelte';
18+
import Blockquote from './component/Blockquote.svelte';
19+
import Br from './component/Br.svelte';
20+
import Code from './component/Code.svelte';
21+
import Codespan from './component/Codespan.svelte';
22+
import Del from './component/Del.svelte';
23+
import Heading from './component/Heading.svelte';
24+
import Hr from './component/Hr.svelte';
25+
import Image from './component/Image.svelte';
26+
import Italic from './component/Italic.svelte';
27+
import Latex from './component/Latex.svelte';
28+
import LatexSpan from './component/LatexSpan.svelte';
29+
import Link from './component/Link.svelte';
30+
import List from './component/List.svelte';
31+
import ListItem from './component/ListItem.svelte';
32+
import Paragraph from './component/Paragraph.svelte';
33+
import Strong from './component/Strong.svelte';
34+
import Table from './component/Table.svelte';
35+
import TableRow from './component/TableRow.svelte';
36+
import TableCell from './component/TableCell.svelte';
37+
import Text from './component/Text.svelte';
3538
import Parser from './Parser.svelte';
3639
37-
let { tokens, source }: { tokens: Token[]; source: string } = $props();
40+
let { nodes }: { nodes: AstNode[] } = $props();
3841
</script>
3942

40-
{#each tokens as token}
41-
{#if token.type === TokenType.Heading}
42-
<Heading {token}>
43-
<Parser tokens={token.children || []} {source} />
43+
{#each nodes as node}
44+
{#if node.type === AstNodeType.Heading}
45+
<Heading node={node as HeadingNode}>
46+
<Parser nodes={node.children || []} />
4447
</Heading>
45-
{:else if token.type === TokenType.Paragraph}
48+
{:else if node.type === AstNodeType.Paragraph}
4649
<Paragraph>
47-
<Parser tokens={token.children || []} {source} />
50+
<Parser nodes={node.children || []} />
4851
</Paragraph>
49-
{:else if token.type === TokenType.CodeBlock}
50-
<Code token={token as CodeBlockToken} />
51-
{:else if token.type === TokenType.Blockquote}
52+
{:else if node.type === AstNodeType.CodeBlock}
53+
<Code node={node as CodeBlockNode} />
54+
{:else if node.type === AstNodeType.Blockquote}
5255
<Blockquote>
53-
<Parser tokens={token.children || []} {source} />
56+
<Parser nodes={node.children || []} />
5457
</Blockquote>
55-
{:else if token.type === TokenType.OrderedList || token.type === TokenType.UnorderedList}
56-
<List {token} {source}>
57-
<Parser tokens={token.children || []} {source} />
58+
{:else if node.type === AstNodeType.OrderedList || node.type === AstNodeType.UnorderedList}
59+
<List node={node as OrderedListNode | UnorderedListNode}>
60+
<Parser nodes={node.children || []} />
5861
</List>
59-
{:else if token.type === TokenType.ListItem}
62+
{:else if node.type === AstNodeType.ListItem}
6063
<ListItem>
61-
<Parser tokens={token.children || []} {source} />
64+
<Parser nodes={node.children || []} />
6265
</ListItem>
63-
{:else if token.type === TokenType.Table}
66+
{:else if node.type === AstNodeType.Table}
6467
<Table>
65-
<Parser tokens={token.children || []} {source} />
68+
<Parser nodes={node.children || []} />
6669
</Table>
67-
{:else if token.type === TokenType.TableRow}
70+
{:else if node.type === AstNodeType.TableRow}
6871
<TableRow>
69-
<Parser tokens={token.children || []} {source} />
72+
<Parser nodes={node.children || []} />
7073
</TableRow>
71-
{:else if token.type === TokenType.TableCell || token.type === TokenType.TableHeader}
72-
<TableCell token={token as TableCellToken}>
73-
<Parser tokens={token.children || []} {source} />
74+
{:else if node.type === AstNodeType.TableCell}
75+
<TableCell node={node as TableCellNode}>
76+
<Parser nodes={node.children || []} />
7477
</TableCell>
75-
{:else if token.type === TokenType.HorizontalRule}
78+
{:else if node.type === AstNodeType.HorizontalRule}
7679
<Hr />
77-
{:else if token.type === TokenType.LatexBlock}
78-
<Latex token={token as LatexBlockToken} />
79-
{:else if token.type === TokenType.LatexInline}
80-
<LatexSpan token={token as LatexInlineToken} />
81-
{:else if token.type === TokenType.Bold}
80+
{:else if node.type === AstNodeType.LatexBlock}
81+
<Latex node={node as LatexBlockNode} />
82+
{:else if node.type === AstNodeType.LatexInline}
83+
<LatexSpan node={node as LatexInlineNode} />
84+
{:else if node.type === AstNodeType.Bold}
8285
<Strong>
83-
<Parser tokens={token.children || []} {source} />
86+
<Parser nodes={node.children || []} />
8487
</Strong>
85-
{:else if token.type === TokenType.Italic}
88+
{:else if node.type === AstNodeType.Italic}
8689
<Italic>
87-
<Parser tokens={token.children || []} {source} />
90+
<Parser nodes={node.children || []} />
8891
</Italic>
89-
{:else if token.type === TokenType.Strikethrough}
90-
<Del {token} {source}>
91-
<Parser tokens={token.children || []} {source} />
92+
{:else if node.type === AstNodeType.Strikethrough}
93+
<Del>
94+
<Parser nodes={node.children || []} />
9295
</Del>
93-
{:else if token.type === TokenType.InlineCode}
94-
<Codespan token={token as InlineCodeToken} />
95-
{:else if token.type === TokenType.Link}
96-
<Link token={token as LinkToken}>
97-
<Parser tokens={token.children || []} {source} />
96+
{:else if node.type === AstNodeType.InlineCode}
97+
<Codespan node={node as InlineCodeNode} />
98+
{:else if node.type === AstNodeType.Link}
99+
<Link node={node as LinkNode}>
100+
<Parser nodes={node.children || []} />
98101
</Link>
99-
{:else if token.type === TokenType.Image}
100-
<Image token={token as ImageToken} />
101-
{:else if token.type === TokenType.LineBreak}
102+
{:else if node.type === AstNodeType.Image}
103+
<Image node={node as ImageNode} />
104+
{:else if node.type === AstNodeType.LineBreak}
102105
<Br />
103-
{:else if token.type === TokenType.Text}
104-
<Text token={token as TextToken} />
105-
{:else}
106-
<span>Unknown token type: {token.type}</span>
106+
{:else if node.type === AstNodeType.Text}
107+
<Text node={node as TextNode} />
107108
{/if}
108109
{/each}

0 commit comments

Comments
 (0)