-
Notifications
You must be signed in to change notification settings - Fork 756
Description
Status quo
Currently, hyphenate-character's values are defined as (cf. https://www.w3.org/TR/css-text-4/#hyphenate-character [2025-05-31])
hyphenate-character = auto | <string>
with the semantics that when a ­ word-break opportunity is taken, the ­ character is rendered as the given string (which has an auto default). When a ­ word-break opportunity isn't taken, the ­ character isn't rendered.
Proposal
I propose adding a second, optional argument to hyphenate-character with default value "" that specifies the rendering of a ­ character whose word-break opportunity isn't taken:
hyphenate-character = auto | <string> | <string> <string>
Motivation
Hyphenation rules in modern English (e.g. en-GB) and German after the spelling reform (e.g. de-DE) fit hyphenate-character's model well: when you can break, break and add a hyphen, else don't break and leave the word alone.
However, when typesetting German preceding the spelling reform (language code de-DE-1901), hyphenation may add and remove letters:
((de-DE-1901))
Nach Tagen der Suche konnte sie eine Pampelmuse entdecken, und begann, ein Stilleben anzufertigen.
^^ "ck" -> "k-k" ^^ "ll" -> "ll-l"
Nach Tagen der Suche konnte
sie eine Pampelmuse entdek-
ken, und begann, ein Still-
leben anzufertigen.
Adding letters "ll" -> "ll-l" when breaking can be achieved with contemporary CSS:
<p lang="de-DE-1901">Nach Tagen der Suche konnte sie eine Pampelmuse entdecken, und begann, ein
<span style="hyphenate-character: 'l-';">Stil­le</span>­ben
anzufertigen.</p>But changing letters "ck" -> "k-k" when breaking, to my knowledge, cannot be achieved in pure CSS (I have written an ECMAScript resize observer which changes letters' display: none styling, though it possibly falls into a never-ending loop when the font rendering gives different characters too dissimilar widths).
With an unused-­ text parameter to hyphenate-character, the break opportunity could be aptly described:
<p lang="de-DE-1901">Nach Tagen der Suche konnte sie eine Pampelmuse
ent­<span style="hyphenate-character: 'k-' 'c';">de<span
style="font-size: 0px; float: inline-end;">c</span>­ken</span>,
und begann, ein Stilleben anzufertigen.</p>Raison d'être
I think adding an as-described non-taken ­ rendering argument to hyphenate-character opens up the possibility for correctly breaking justified de-DE-1901 text, a feature CSS is currently lacking, through a generic feature without introducing de-DE-1901-specific styling rules.
Pre-orthography-reform German has its place on the Web: when citing older texts in a justified layout, incorrectly breaking invalidates the citation and not breaking aesthetically hurts the text. Furthermore, active publications exist that choose to write in de-DE-1901 (e.g. Lettre International (cf. https://www.lettre.de/ [2025-05-31]).