Files
khosra/examples/demo-site/content/writing/typography.en.md
T
Claude Opus 5andbdeshi 91c733a0e0 spread the demo's features across the pages that would carry them
notes-on-water had become a kitchen sink: every feature from the last eight
loops on one page, which demonstrates the engine and misrepresents the site.

Now each lands where a real site would put it. The text marks, the abbreviation,
authored <kbd> and the margin note go to writing/typography, which is already
the page about what the engine does to words. Icons and the grouped panels go to
pages/colophon, which is the page about the theme — install instructions are
what tabs are actually for. about gets a lone expando, the-flood gets a chapter
note, and notes-on-water keeps what it is really for: the include and its
namespaced footnotes, the gauge table, the glossary and a contents list over its
own headings.

Seven bundles carry features now instead of two, and the demo cases moved with
them, so each still names the page it proves.
2026-08-01 22:22:40 +06:00

1.3 KiB

title, date, tags
title date tags
Typography and Its Limits 2026-03-28
journal

"Quotes become curly," she said -- and dashes become dashes, while an ellipsis... becomes one character. That is the whole of what the engine does to an author's words: a Markdown parser option, nothing more.

Inside a code span none of it happens: "quotes" -- and ellipses... survive byte for byte, because the typographer works on the parsed tree rather than on the text.

Marks the dialect adds

Where prose needs more than CommonMark offers there are four marks: water is H2O, a millimetre is 10^-3^ m, the ==second column== is the one that matters, and this phrase was cut. A subscript holds a formula and never a phrase, so x^2 + y^2 stays exactly as typed.

Text in NFC is what the engine stores, and every use of that term expands.

*[NFC]: Normalization Form C

Where there is no mark for something, HTML does it: this reading is taken with Shift held.

:::aside{title="On line breaking"} Widows are the browser's problem, not the engine's — text-wrap: pretty knows where the lines fall and no Markdown transform does. :::

Line breaking is not the engine's business at all. This paragraph is deliberately long enough to wrap several times on a narrow screen, which is where you would notice a lonely last word.

A code block, indented.
Also untouched.