Skip to content

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. ![a<br>b](x.png) 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