|
1 | 1 | <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'; |
14 | 17 |
|
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'; |
35 | 38 | import Parser from './Parser.svelte'; |
36 | 39 |
|
37 | | - let { tokens, source }: { tokens: Token[]; source: string } = $props(); |
| 40 | + let { nodes }: { nodes: AstNode[] } = $props(); |
38 | 41 | </script> |
39 | 42 |
|
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 || []} /> |
44 | 47 | </Heading> |
45 | | - {:else if token.type === TokenType.Paragraph} |
| 48 | + {:else if node.type === AstNodeType.Paragraph} |
46 | 49 | <Paragraph> |
47 | | - <Parser tokens={token.children || []} {source} /> |
| 50 | + <Parser nodes={node.children || []} /> |
48 | 51 | </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} |
52 | 55 | <Blockquote> |
53 | | - <Parser tokens={token.children || []} {source} /> |
| 56 | + <Parser nodes={node.children || []} /> |
54 | 57 | </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 || []} /> |
58 | 61 | </List> |
59 | | - {:else if token.type === TokenType.ListItem} |
| 62 | + {:else if node.type === AstNodeType.ListItem} |
60 | 63 | <ListItem> |
61 | | - <Parser tokens={token.children || []} {source} /> |
| 64 | + <Parser nodes={node.children || []} /> |
62 | 65 | </ListItem> |
63 | | - {:else if token.type === TokenType.Table} |
| 66 | + {:else if node.type === AstNodeType.Table} |
64 | 67 | <Table> |
65 | | - <Parser tokens={token.children || []} {source} /> |
| 68 | + <Parser nodes={node.children || []} /> |
66 | 69 | </Table> |
67 | | - {:else if token.type === TokenType.TableRow} |
| 70 | + {:else if node.type === AstNodeType.TableRow} |
68 | 71 | <TableRow> |
69 | | - <Parser tokens={token.children || []} {source} /> |
| 72 | + <Parser nodes={node.children || []} /> |
70 | 73 | </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 || []} /> |
74 | 77 | </TableCell> |
75 | | - {:else if token.type === TokenType.HorizontalRule} |
| 78 | + {:else if node.type === AstNodeType.HorizontalRule} |
76 | 79 | <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} |
82 | 85 | <Strong> |
83 | | - <Parser tokens={token.children || []} {source} /> |
| 86 | + <Parser nodes={node.children || []} /> |
84 | 87 | </Strong> |
85 | | - {:else if token.type === TokenType.Italic} |
| 88 | + {:else if node.type === AstNodeType.Italic} |
86 | 89 | <Italic> |
87 | | - <Parser tokens={token.children || []} {source} /> |
| 90 | + <Parser nodes={node.children || []} /> |
88 | 91 | </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 || []} /> |
92 | 95 | </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 || []} /> |
98 | 101 | </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} |
102 | 105 | <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} /> |
107 | 108 | {/if} |
108 | 109 | {/each} |
0 commit comments