diff --git a/packages/comark/SPEC/COMARK/attribute-del.md b/packages/comark/SPEC/COMARK/attribute-del.md new file mode 100644 index 00000000..56f66433 --- /dev/null +++ b/packages/comark/SPEC/COMARK/attribute-del.md @@ -0,0 +1,88 @@ +## Input + +```md +Here ~~del~~{bool} ~~del~~{#id1} ~~del~~{.class1} ~~del~~{attr="value"} ~~`x`~~{.gone} ~~*x*~~{.gone} +``` + +## AST + +```json +{ + "frontmatter": {}, + "meta": {}, + "nodes": [ + [ + "p", + {}, + "Here ", + [ + "del", + { + ":bool": "true" + }, + "del" + ], + " ", + [ + "del", + { + "id": "id1" + }, + "del" + ], + " ", + [ + "del", + { + "class": "class1" + }, + "del" + ], + " ", + [ + "del", + { + "attr": "value" + }, + "del" + ], + " ", + [ + "del", + { + "class": "gone" + }, + [ + "code", + {}, + "x" + ] + ], + " ", + [ + "del", + { + "class": "gone" + }, + [ + "em", + {}, + "x" + ] + ] + ] + ] +} +``` + +## HTML + +```html +

Here del del del del x x

+``` + +## Markdown + +```md +Here ~~del~~{bool} ~~del~~{#id1} ~~del~~{.class1} ~~del~~{attr="value"} ~~`x`~~{.gone} ~~*x*~~{.gone} +``` diff --git a/packages/comark/SPEC/common-mark/paragraph-del-code.md b/packages/comark/SPEC/common-mark/paragraph-del-code.md new file mode 100644 index 00000000..48b77ece --- /dev/null +++ b/packages/comark/SPEC/common-mark/paragraph-del-code.md @@ -0,0 +1,58 @@ +## Input + +```md +~~`x`~~ ~~a **b** `c`~~ +``` + +## AST + +```json +{ + "frontmatter": {}, + "meta": {}, + "nodes": [ + [ + "p", + {}, + [ + "del", + {}, + [ + "code", + {}, + "x" + ] + ], + " ", + [ + "del", + {}, + "a ", + [ + "strong", + {}, + "b" + ], + " ", + [ + "code", + {}, + "c" + ] + ] + ] + ] +} +``` + +## HTML + +```html +

x a b c

+``` + +## Markdown + +```md +~~`x`~~ ~~a **b** `c`~~ +``` diff --git a/packages/comark/src/internal/stringify/handlers/del.ts b/packages/comark/src/internal/stringify/handlers/del.ts index 70cb21c6..1cd218c6 100644 --- a/packages/comark/src/internal/stringify/handlers/del.ts +++ b/packages/comark/src/internal/stringify/handlers/del.ts @@ -1,7 +1,17 @@ import type { State } from 'comark/render' import type { ElementNode } from 'comark' -import { textContent } from '../../../utils/index.ts' +import { comarkAttributes } from '../attributes.ts' -export function del(node: ElementNode, _: State) { - return `~~${textContent(node)}~~` +export async function del(node: ElementNode, state: State) { + const [_, attrs, ...children] = node + + let content = '' + for (const child of children) { + content += await state.one(child, state, node) + } + content = content.trim() + + const attrsString = Object.keys(attrs).length > 0 ? comarkAttributes(attrs) : '' + + return `~~${content}~~${attrsString}` } diff --git a/packages/comark/src/internal/stringify/handlers/html.ts b/packages/comark/src/internal/stringify/handlers/html.ts index 28ee6c56..73be781f 100644 --- a/packages/comark/src/internal/stringify/handlers/html.ts +++ b/packages/comark/src/internal/stringify/handlers/html.ts @@ -5,7 +5,7 @@ import { indent } from '../../../utils/index.ts' const textBlocks = new Set(['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'li', 'td', 'th']) const selfCloseTags = new Set(['br', 'hr', 'img', 'input', 'link', 'meta', 'source', 'track', 'wbr']) -const inlineTags = new Set(['strong', 'em', 'code', 'a', 'br', 'span', 'img']) +const inlineTags = new Set(['strong', 'em', 'del', 'code', 'a', 'br', 'span', 'img']) const blockTags = new Set([ 'p', 'h1', diff --git a/test/bundle.test.ts b/test/bundle.test.ts index 9c52a007..864562d2 100644 --- a/test/bundle.test.ts +++ b/test/bundle.test.ts @@ -67,7 +67,7 @@ describe('package bundle size', { timeout: 60_000 }, () => { "@comark/react": "43.6k (74 files)", "@comark/svelte": "43.9k (82 files)", "@comark/vue": "60.5k (78 files)", - "comark": "422k (156 files)", + "comark": "423k (156 files)", } `) })