0.123.0 → 0.123.1 — an inline <br> is a line break, in prose and in a table cell, and a cell's \n is a line break¶
The first break: a richtext(inline) value holding an inline <br> fails
inline validation, where it passed. 0.123.0 dropped every <br>, so a<br>b
imported as the one line ab. It now imports as two lines joined by a hard
break, and an inline field holds one line. A document carrying one fails
quill.validate(doc) and the render as validation::not_inline, a strict
write as edit::field_not_inline, and a quill whose default: carries one
fails to load as validation::not_inline.
subject: "Re: line one<br>line two" # richtext(inline): 0.123.0 rendered "Re: line oneline two"; 0.123.1 fails validation::not_inline
Drop the <br>, or change the field's type: to richtext.
The second break nothing reports: an inline <br> in markdown renders as a
line break, where it rendered nothing. <br>, <br/>, <br />, any case and
with attributes, is a hard break in a paragraph, a space in a heading, and a
\n in a table cell's text, where 0.123.0 glued the words either side of it:
line one<br>line two rendered line oneline two. In a paragraph, a <br>
with no text before it on its line still renders nothing, as does one alone on
a line. A <br> inside backticks, or escaped as \<br>, is literal text, as
before. Export writes a prose break as a trailing \ plus newline, and a
cell's as <br>. To find one, search markdown bodies and richtext values for
<br.
The third break nothing reports: a \n in a table cell's text is a line
break, where normalization rewrote it to a space. A cell written through the
JSON lanes, install or an island op, keeps its \n; the Typst
backend renders #linebreak() and to_markdown writes <br>. A \r, VT,
FF, NEL, U+2028 or U+2029 in a cell is still a space, so a cell written as
a\r\nb stores a \nb. A reader of TableCell.text that assumed one line
meets a \n. A formatting mark's edge on a cell's \n moves off it, as it does
in prose. A stored row holds no cell \n, normalization having spaced it on
write, so its bytes do not move.
The fourth break nothing reports: an image's alt text reads a <br> in it as
a space.  carries the alt a b, where it carried ab; in
a table cell, where the image lands as its alt text, the cell reads a b.
| Break | Surface | Action |
|---|---|---|
A richtext(inline) value holding an inline <br> fails as validation::not_inline, a strict write as edit::field_not_inline, and a quill default: fails to load, where it passed as one glued line |
document YAML, Quill.yaml, diagnostics |
Drop the <br>, or type the field richtext |
An inline <br> is a hard break in a paragraph, a space in a heading and a \n in a cell, where it rendered nothing |
rendered output, imported content, to_markdown output |
Delete a <br> that meant nothing |
A \n in a table cell's text is a line break, where it was a space; a mark's edge on it moves off it |
island props written through JSON, rendered output, TableCell.text readers |
Write a space where a \n meant one |
A <br> in an image's alt is a space, where it was dropped |
image island alt, a cell holding an image |
None |