diff --git a/packages/presentation/src/components/markup/MarkdownNode.svelte b/packages/presentation/src/components/markup/MarkdownNode.svelte
new file mode 100644
index 0000000000..e478c77e87
--- /dev/null
+++ b/packages/presentation/src/components/markup/MarkdownNode.svelte
@@ -0,0 +1,38 @@
+
+
+
+{#if node}
+
+{/if}
diff --git a/packages/presentation/src/components/markup/NodeContent.svelte b/packages/presentation/src/components/markup/NodeContent.svelte
index 7aede5b461..debe0469f7 100644
--- a/packages/presentation/src/components/markup/NodeContent.svelte
+++ b/packages/presentation/src/components/markup/NodeContent.svelte
@@ -18,6 +18,7 @@
import CodeBlockNode from './CodeBlockNode.svelte'
import ObjectNode from './ObjectNode.svelte'
+ import MarkdownNode from './MarkdownNode.svelte'
import Node from './Node.svelte'
export let node: MarkupNode
@@ -198,6 +199,8 @@
{/each}
{/if}
+ {:else if node.type === MarkupNodeType.markdown}
+
{:else if node.type === MarkupNodeType.mermaid}
{:else if node.type === MarkupNodeType.comment}
diff --git a/packages/text-core/src/markup/model.ts b/packages/text-core/src/markup/model.ts
index a851787dcb..ef5878cd22 100644
--- a/packages/text-core/src/markup/model.ts
+++ b/packages/text-core/src/markup/model.ts
@@ -39,7 +39,8 @@ export enum MarkupNodeType {
table_cell = 'tableCell',
table_header = 'tableHeader',
mermaid = 'mermaid',
- comment = 'comment'
+ comment = 'comment',
+ markdown = 'markdown'
}
/** @public */
diff --git a/packages/text-markdown/src/__tests__/markdown.test.ts b/packages/text-markdown/src/__tests__/markdown.test.ts
index 4176a81a6c..6c080398ac 100644
--- a/packages/text-markdown/src/__tests__/markdown.test.ts
+++ b/packages/text-markdown/src/__tests__/markdown.test.ts
@@ -74,7 +74,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -107,7 +107,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -168,7 +168,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -233,7 +233,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -336,7 +336,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -453,7 +453,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -528,7 +528,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
@@ -692,7 +692,7 @@ Lorem ipsum dolor sit amet.
content: [
{
type: 'heading',
- attrs: { level: 1 },
+ attrs: { level: 1, marker: '#' },
content: [
{
type: 'text',
diff --git a/packages/text-markdown/src/parser.ts b/packages/text-markdown/src/parser.ts
index cf6ba219df..9658712bb2 100644
--- a/packages/text-markdown/src/parser.ts
+++ b/packages/text-markdown/src/parser.ts
@@ -445,7 +445,7 @@ const tokensBlock: Record = {
},
heading: {
block: MarkupNodeType.heading,
- getAttrs: (tok: Token) => ({ level: Number(tok.tag.slice(1)) })
+ getAttrs: (tok: Token) => ({ level: Number(tok.tag.slice(1)), marker: tok.markup })
},
code_block: {
block: MarkupNodeType.code_block,
diff --git a/packages/text-markdown/src/serializer.ts b/packages/text-markdown/src/serializer.ts
index 69410f9f2d..af7d95cbb6 100644
--- a/packages/text-markdown/src/serializer.ts
+++ b/packages/text-markdown/src/serializer.ts
@@ -104,8 +104,18 @@ export const storeNodes: Record = {
},
heading: (state, node) => {
const attrs = nodeAttrs(node)
- state.write(state.repeat('#', attrs.level !== undefined ? Number(attrs.level) : 1) + ' ')
- state.renderInline(node)
+ if (attrs.marker === '=' && attrs.level === 1) {
+ state.renderInline(node)
+ state.ensureNewLine()
+ state.write('===\n')
+ } else if (attrs.marker === '-' && attrs.level === 2) {
+ state.renderInline(node)
+ state.ensureNewLine()
+ state.write('---\n')
+ } else {
+ state.write(state.repeat('#', attrs.level !== undefined ? Number(attrs.level) : 1) + ' ')
+ state.renderInline(node)
+ }
state.closeBlock(node)
},
horizontalRule: (state, node) => {
@@ -228,6 +238,10 @@ export const storeNodes: Record = {
')'
)
},
+ markdown: (state, node) => {
+ state.renderInline(node)
+ state.closeBlock(node)
+ },
comment: (state, node) => {
state.write('