16 - no link wraps a link #104

Merged
lilleman merged 8 commits from link-wrapping-a-link into main 2026-09-19 02:34:21 +02:00
3 changed files with 13 additions and 12 deletions
Showing only changes of commit 20cd21789b - Show all commits
+3 -2
View File
@@ -55,8 +55,9 @@ Round-trip equality is a property tested over a corpus, not a claim made in pros
spells the mark; `!adf:link[text]{attrs}` where it does not — an attribute CommonMark cannot spells the mark; `!adf:link[text]{attrs}` where it does not — an attribute CommonMark cannot
hold, an `href` or `title` no canonical escape spells, a paragraph opening whose CommonMark hold, an `href` or `title` no canonical escape spells, a paragraph opening whose CommonMark
spelling would read as a link reference definition — and a directive link CommonMark could spell spelling would read as a link reference definition — and a directive link CommonMark could spell
is refused (the maintainer, 2026-09-13). No link wraps a link, which is CommonMark's prose where is refused (the maintainer, 2026-09-13). No link wraps a link — the bracket form goes literal,
its reference implementation nests one `<a>` in another (the maintainer, 2026-09-17). the directive form refused — which is CommonMark's prose where its reference implementation
nests one `<a>` in another (the maintainer, 2026-09-17).
- Identity-bearing nodes carry their ids in attributes; a document is only portable within its - Identity-bearing nodes carry their ids in attributes; a document is only portable within its
site — accepted. site — accepted.
- The HTML dialect mirrors this: semantic elements, stable `adf-*` classes, `data-*` for what HTML - The HTML dialect mirrors this: semantic elements, stable `adf-*` classes, `data-*` for what HTML
+2 -2
View File
@@ -49,11 +49,11 @@ holding an unescaped `!adf:` and a `carry` fence are claimed instead.
### Readings ### Readings
Markdown the spelling table leaves alone, reading to a different document. Markdown the spelling table leaves alone, which `0.2.0` reads as a different document.
| Input | `0.1.0` | `0.2.0` | | Input | `0.1.0` | `0.2.0` |
| --- | --- | --- | | --- | --- | --- |
| a link whose text already holds one (`[a<https://example.com/>b](/v)`) | marks every node the inner link does not, splitting the outer link around it | leaves the outer brackets literal text | | a link whose text already holds one (`[a<https://example.com/>b](/v)`) | marks every node the inner link does not, splitting the outer link around it | leaves the outer brackets literal text; write the pieces as separate links to keep them |
### Error codes ### Error codes
+8 -8
View File
@@ -111,17 +111,17 @@ emit refuses:
- Plain CommonMark is valid input to `markdownToAdf` apart from the raw HTML below, with three - Plain CommonMark is valid input to `markdownToAdf` apart from the raw HTML below, with three
carve-outs — literal text matching directive, pipe-table or strikethrough syntax is claimed carve-outs — literal text matching directive, pipe-table or strikethrough syntax is claimed
(escapable — `spec/flavour.md`) — and one gap: a CommonMark image fits only as its own (escapable — `spec/flavour.md`) — and one gap: a CommonMark image fits only as its own
title-less paragraph; mid-text and titled images are error results. Converting back yields the title-less paragraph; mid-text and titled images are error results, save an image inside
another's description, which flattens into the alt text. Converting back yields the
library's canonical spelling, which round-trips byte-identically — where it converts back at library's canonical spelling, which round-trips byte-identically — where it converts back at
all: a parse succeeding is no promise of that, so keep the source until the way back succeeds. all: a parse succeeding is no promise of that, so keep the source until the way back succeeds.
``` ` `` ` ``` reads cleanly and then refuses. ``` ` `` ` ``` reads cleanly and then refuses.
- Four CommonMark spellings parse without an error and build a document the reference renders - Four CommonMark spellings parse without an error and build a document the reference
differently: `[](/url)` and `[]()` stay literal text against CommonMark's empty link, a list implementation renders differently: `[](/url)` and `[]()` stay literal text against CommonMark's
continuing past a marker change stays one list against CommonMark's two, a shortcut empty link, a list continuing past a marker change stays one list against CommonMark's two, a
reference matching its definition only under Unicode case folding stays unresolved, and a link shortcut reference matching its definition only under Unicode case folding stays unresolved, and
whose text holds an autolink keeps the inner link and leaves the outer brackets literal text, a link whose text holds an autolink keeps the inner link and leaves the outer brackets literal
which the spec requires and the reference implementation itself breaks, nesting one `<a>` in the text, which the spec requires and the reference itself breaks, nesting one `<a>` in the other. The first three are pinned `pending` in `corpus/commonmark-spec/exceptions.json`; the
other. The first three are pinned `pending` in `corpus/commonmark-spec/exceptions.json`; the
suite holds no example of the fourth. suite holds no example of the fourth.
- Raw HTML in markdown input is an error result, never a silent drop — a tag, a comment and a - Raw HTML in markdown input is an error result, never a silent drop — a tag, a comment and a
processing instruction alike. ADF holds no raw-HTML node; the element mapping ships at `0.2.0`. processing instruction alike. ADF holds no raw-HTML node; the element mapping ships at `0.2.0`.