České pomlčky, mezery a další drobnosti

Tenhle blog má v build pipeline jeden malý, ale prospěšný kousek: knihovnu typopo, která se v remark pluginu projde každý textový uzel a opraví v něm typografické prohřešky. Píšu markdown rovně, prostě jako kdykoliv jindy, a typopo z toho udělá něco, co by typograf nemusel okamžitě smetat ze stolu.

Co se vlastně opravuje

Tři nejčastější věci, na kterých si v české sazbě člověk vyláme zuby:

  1. Pomlčky a spojovníky. V psacím stroji byla jen jedna čárka, ale my máme spojovník (-), pomlčku (-- -> ) a dlouhou pomlčku (--- -> ). Spojovník drží slova v jednom kuse (česko-slovenský), pomlčka odděluje vsuvku – jako tahle.
  2. Pevné mezery. Jednopísmenné předložky nesmí zůstat na konci řádku. Když napíšu „k němu,“ typopo tam vrazí pevnou mezeru a já nemusím přemýšlet.
  3. Uvozovky. České „dolní a horní“ místo anglických „rovných.“ Tohle je úplně zbytečně časté ošklivění textu, protože většina editorů nabízí jen rovné uvozovky a člověk to ani nevnímá.

Jak je to napojené

svelte.config.js je markdown() preprocessor, který si stáhne každý soubor .md, propustí ho přes remark, a v něm visitorem projde AST. Na textových uzlech zavolá fixTypos(value, "cs"). Code bloky a inline kód se přeskakují – v apt install postgresql-17 by pomlčky byly úplně mimo.

function remarkCzechTypography() {
  return (tree) => {
    visit(tree, (node) => {
      if (node.type === "code" || node.type === "inlineCode") return SKIP;
      if (node.type === "text") {
        node.value = fixTypos(node.value, "cs", { removeLines: false });
      }
    });
  };
}

Třicet řádků kódu a zbytek je v knihovně. Příjemné.

Co to nedělá

Typopo není sazečský engine, jen filtr na řetězce. Kerning, dělení slov, řádkové ladění – to dělá prohlížeč. Někdy je výsledek lepší než z Wordu, někdy horší než ze Scribusu. Pro blog to ale úplně stačí: textu se to chytá, čtenář si toho nevšimne, a to je vlastně to nejlepší, co může typografie udělat.