3
0
mirror of https://github.com/larvit/adf-codec.git synced 2026-11-12 11:48:29 +01:00

Group a line's runs in one home, part a line as its first fallback, and trim each portable line by its own runs

This commit is contained in:
2026-11-03 23:36:47 +01:00
committed by Lillem4n
parent d15d063c43
commit bab2ffcfb8
13 changed files with 222 additions and 189 deletions
+7 -6
View File
@@ -564,12 +564,13 @@ marks array in order, outermost first: `_!adf:underline[x]_` gives marks `[em, u
the array, not a set — and opens each spelling once over the longest run of adjacent inline nodes
carrying an identical mark, attributes included, at that depth: `attrs: {}` differs from no `attrs`,
and a directive spells it `{attrs=empty}`. A run breaks at every node the emitter carries, so no
emitted carry sits inside a mark spelling. An `em`, `strike`, `strong` or `link` run also spans a
node between two of its nodes when that node cannot hold the run's mark. It does so only where the
spanned line reads back to the same nodes; otherwise the run breaks there. So `_One\` then `Two_`
is one `em` run over two texts, the hard break between them unmarked, and
``**Run `npm ci` first**`` is one `strong` run around unmarked code. `adfToPortableMarkdown` spans
hard breaks and code spans the same way.
emitted carry sits inside a mark spelling. An `em`, `strike`, `strong` or `link` run also crosses a
node between two of its nodes when that node cannot hold the run's mark, unless the node holds an
empty `marks`, which no spelling inside a mark holds. So `_One\` then `Two_` is one `em` run over two
texts, the hard break between them unmarked, and ``**Run `npm ci` first**`` is one `strong` run
around unmarked code. A line that needs any fallback, a carry or a dropped mark, breaks every run on
it at those nodes instead. `adfToPortableMarkdown` crosses hard breaks and code spans the same way,
and drops whitespace beside a hard break a run crosses, where CommonMark strips it.
An inline node whose marks no nesting spells — a node holding a mark Atlassian's schema withholds
from it, a mark type the first list above does not hold, an attrs key its spelling does not list, a value that is not the