{#snippet renderText(text: string, marks: ArticleMark[], index = 0)}
{#if index >= marks.length}{text}{:else}
{@const mark = marks[index]}
{#if mark.type === 'bold'}{@render renderText(text, marks, index + 1)}
{:else if mark.type === 'italic'}{@render renderText(text, marks, index + 1)}
{:else if mark.type === 'code'}{@render renderText(text, marks, index + 1)}
{:else}{@render renderText(text, marks, index + 1)}{/if}
{/if}
{/snippet}
{#snippet children(node: ArticleNode)}
{#each node.content ?? [] as child}{@render renderNode(child)}{/each}
{/snippet}
{#snippet renderNode(node: ArticleNode)}
{#if node.type === 'text'}{@render renderText(node.text ?? '', node.marks ?? [])}
{:else if node.type === 'paragraph'}
{@render children(node)}
{:else if node.type === 'heading' && Number(node.attrs?.level) === 2}{@render children(node)}{:else if node.type === 'horizontalRule'}