Unicode má přeci dva typy diakritických znamének: samostatná, kdyby někde chtěl použít znaménko jako znak, a kombinační, která se mají zobrazit nad předchozím znakem.
Příklad:
ř (0159), písmeno vcelku
rˇ(0072 02c7), špatně
ř (0072 030c), písmeno a kombinační háček
Umístění háčku sice není ideální, ale furt lepší než čtvereček, nebo písmeno z jiného systémového fontu. Takže bych čekal, že pokud ve fontu není ř, že ho ta vykreslovací knihovna nahradí kombinací. A vono ne.
Určitě jste si všiml na plakátech, letácích, v inzerátech, na webech, prostě kdekoliv, kde je použit nějaký ozdobný font, že v textu místy jako péro z gauče trčí arialové ě, š a podobně. A pokud nevšiml, teď si všímat budete. :-)
0072 030c se právě má správně vykreslit pomocí znaku 0159.
Použití písma bez českých znaků si samozřejmě všímám, některé autory webů jsem na to dokonce upozorňoval. Ale to je chyba toho, kdo to písmo použil. Není úkolem vykreslovací knihovny, aby se to nějak snažila zachránit. Navíc když chybí znaky se diakritickými znaménky, nikde není zaručeno, že tam budou ty znaky, ze kterých by se to mohlo poskládat. Prohlížeče dokonce v DevTools ukazují, kolik znaků z daného písma bylo použito a kolik jich bylo nahrazeno.
Tak či onak, nahrazovat by to nemělo - to je právě mechanismus, jak řešit problém chybějících znaků, ale musí se to udělat výhradně ručně.
Tedy: když chybí písmeno s háčkem, zkusím to složit, když to nejde (nebo to blbě vypadá), zvolím jiné. U nadpisů na letácích a podobně to je (v nouzi) možné.
Ostatně, pokud nemá písmo podporu potřebné abecedy, je lepší se mu vyhnout a najít si jiné, podporované.
Filipovy Jirsákovi se zřejmě nedaří pochopit, co chcete říct. Tak to zkusím já.
Při úvaze, zda by se neexistující glif měl nahradit kombinací se možná uvažovalo tak, že když by se to povedlo, bylo by to horší. Protože by si toho necvičené oko nemuselo všimnout. A tak je lepší, když to více "křičí", alespoň to motivuje aby se ten glif doplnil.
Druhý důvod, který mě čistě spekulativně napadá je ten, že by se někam musela zavést tabulka vztahů, že ř (0159) je ř (0072 030c). Neznám tak dobře unicode formát, zda je tam nějaký prostor pro takováto kouzla.
Podobný problém spočívá v tom, že tu teď uvažujeme nad diakritikou. Ale co třeba asijská písma, která mají spoustu zajímavých věcí. Vymyslí se i ta nějaké podobné fallbacky? A šlo by to vlastně? Ligatura pro lám+alif, by se nahradila za lám a alif, což by bylo pravopisně chybné... (a to jsme ještě u obyčejných ligatur).
Možná nebyla poptávka :-)
Já to chápu.
Spousta znaků se skládá z nějakého základního znaku a jednoho či více modifikátorů. Unicode s tím počítá, takže třeba „r s háčkem“ jde vyjádřit přesně takhle, jako znak „r“ doplněný „háčkem“ (což je modifikátor, není to v pravém smyslu samostatný znak, nemá třeba žádnou šířku). Ten princip se používá v Unicode pro spoustu různých věcí – třeba máte základní smajlík, ten můžete modifikátorem doplnit o to, zda jde o muže či ženu, a jinými modifikátory můžete určit barvu pleti. Ale zpět k latince – ve starších znakových sadách se tohle řešilo tak, že to „r s háčkem“ mělo samostatný znak. No a Unicode to z historických důvodů převzalo, takže v Unicode můžeme „ř“ napsat jako jeden znak nebo jako dva znaky „r s háčkem“.
Pak máme nějaké písmo, které jednotlivým znakům přiřazuje tvary – glyfy. Takže v tom písmu máme třeba glyf pro ř nebo-li r s háčkem – a pozor, je to pořád ten stejný glyf. V žádném případě se to nedělá tak, že by se zobrazil glyf pro „r“ a přes něj glyf pro „háček“ – takhle gylfy pro písmena s diakritikou nejde vytvořit, diakritiku musí usadit autor písma pro každý znak zvlášť. To písmo třeba ani nemusí mít glyf pro samotný háček – a pokud ho má, není to proto, aby se někam sám přilepoval, ale pro případy, kdy potřebujete ten háček zobrazit samostatně.
Nebo-li ve fontu je zabudován způsob, jak kombinaci „r s háčkem“ zobrazit jako glyf pro „ř“. No a P_V by chtěl opačný proces – když se při vykreslování písma narazí na znak, který nemá ve fontu odpovídající glyf, měla by ho vykreslovací knihovna zkusit vykreslit z jednotlivých částí. K tomu by byla nutná ta tabulka pro zpětný převod, o které píšete. Třeba pro „ř“ by to bylo poměrně jednoduché, protože ten vztah, že „r s háčkem“ se normalizuje jako „ř“, je definován přímo v Unicode. Jenže třeba pro „í“ by to už použitelné nebylo, protože „í“ je sice „i s čárkou“, ale pro vykreslení by bylo potřeba použít glyfy „i bez tečky“ a „čárka“. Trochu jiný problém by byl z českých písmen s „ď“, jak jsem psal výše.
No a jak píšete dál, tohle by řešilo problém jenom pro pár jazyků, které mají oproti západoevropské latince pár znaků s diakritikou navíc. Nebo-li bylo by to dost složité na implementaci, a přitom by to prakticky nikomu nepomohlo. A navíc – ty znaky s automaticky přilepeným diakritickým znaménkem by prostě vypadaly ošklivě, nebylo by to o moc lepší, než když se to nahradí znakem jiného podobného písma. Pokud jde o nějaká ozdobná písma, kde použití náhradního písma vidí každý, tam by to automatické doplnění vypadalo hrozně a stejně by to každý viděl. Takže nemá smysl to řešit. Prostě je to na tom, kdo dané písmo použije, aby si ověřil, že má všechny znaky, které potřebuje. Pokud někdo vyrobí plakát s nějakým ozdobným písmem a nechá to tak i s tím, že některé znaky jsou nahrazené úplně jiným písmem – pak by se dotyčný měl od jakékoli práce s grafikou držet hodně daleko a dobře mu tak, že to každý na první pohled uvidí, že je to špatně.
Takhle jsem pochopil, že to myslíte už ve svém minulém příspěvku. (Uff, nedošlo k nedorozumění.) Co ale nechápu, je, k čemu je to užitečné. Jinými slovy: kdyby Unicode vůbec nic neuměl o nějaké kombinaci "r" a "háček", jak by se to prakticky projevilo oproti dnešnímu stavu?
Jestli to totiž dobře chápu, tak vůbec nijak. Pokud font obsahuje glyph pro "ř", použije se. A pokud ho neobsahuje, žádná informace o té kombinaci se nepoužije - dá se tam prázdný čtvereček, znak z jiného písma apod. Takže ta informace o kombinaci se nepoužije ani v jednom případě, k čemu pak je?
Něco jsem přehlédl?
Unicode není kódování písma, ale znaků. A Unicode opravdu nemá nic společného s rozložením kláves, uváděl jsem to jen jako příklad, kdy se to dá použít. Také třeba při různých převodech (odstranění diakritiky, převod na velká či malá písmena).
Každopádně zařídit v OpenType písmu zobrazení „r s háčkem“ jako „ř“ je snadné – je to úplně stejný princip, jako když se „ff“ zobrazuje jako slitek. A je to věc, která je definovaná přímo ve fontu. Opačný způsob (když není k dispozici glyf pro „ř“, zobrazit „r s háčkem“, by musela implementovat vykreslovací knihovna. A jak už jsem psal – uplatnilo by se to v minimu případů, a to vykreslení by stejně bylo více či méně špatně.
Ano, funguje to podobně jako ligatury. Ale podle mě by to měla implementovat, i když tam ta "ligatura" (ř) není, vždyť ta implementace zní: "hele, knihovno, nedělej vůbec nic (navíc)". Prostě zobrazí základní znak (r) a následně znak háčku (ten má nulovou šířku a kresbu vlevo od referenčního bodu). A pokud nebude dobře sedět? Vždyť je to náhradní řešení, tak si tam sazeč přidá ruční kerning.
Ohledně těch využití, co píšete v prvním odstavci, mi to přijde všechno jen teoretické. Nic z toho není nijak napojeno na Unicode. Vemte si třeba konfiguraci XKB, tam je vlastní databáze názvu znaků a nemá žádné napojení na Unicode.
hele, knihovno, nedělej vůbec nic (navíc)
Nikoli. Ta knihovna by nejprve musela zjistit, že „ř“ se dá zobrazit jako „r s háčkem“. Pro „í“ by musela mít informaci, že se dá zobrazit jako „i bez tečky s čárkou“ a pak zjišťovat, zda má font glyf pro „i bez tečky“ (a také tu čárku). Přičemž výsledek by vypadal prakticky vždy ošklivě. A to celé by se dělalo jenom kvůli pár jazykům a situaci, kdy nějaký hlupák použije pro text písmo, které neobsahuje potřebné znaky, a je mu to jedno. Přičemž jazyků, kde by to vyřešilo problémy všech chybějících znaků, je ještě méně – asi budou i jiné, než čeština a slovenština, ale není jich moc. Protože takové ß, ł nebo i ą už takhle nevyrobíte.
A pokud nebude dobře sedět? Vždyť je to náhradní řešení, tak si tam sazeč přidá ruční kerning.
Nejde zdaleka jen o kerning. A pokud to řeší sazeč a to písmo opravdu potřebuje použít, tak si potřebné znaky dodělá. Pokud se k něčemu ta samotná diakritická znaménka mají použít, tak právě k tomu, aby z nich potřebný znak vytvořil grafik, ne aby je někam „náhodně“ umístila vykreslovací knihovna.
Ohledně těch využití, co píšete v prvním odstavci, mi to přijde všechno jen teoretické. Nic z toho není nijak napojeno na Unicode.
Stejně tak nejsou na Unicode napojeny fonty. Unicode je prostě obecná znaková sada, která nepředepisuje, jakým způsobem ji můžete použít. Akorát se její autoři snažili dát ostatním do rukou nástroje, které by jim mohly být užitečné. A jedním z nástrojů, které se zdály být užitečné, je i to umět napsat třeba „r s háčkem“ tímto způsobem (tedy jako spojení dvou znaků), protože se tak s tímto znakem ve spoustě případů pracovalo dávno před vznikem Unicode (a dávno před vznikem počítačů). No a OpenType fonty to díky podpoře ligatur pak umí i dobře zobrazit a aplikace nemusí před zobrazením Unicode textu dělat jeho normalizaci.
Pardon, ale tady nesouhlasím.
S tou klávesnicí apod. mluvím o tom, že můžeme teoretizovat nad přesným významem Unicode apod., ale nezměníme tím ten základní fakt, že se na definici klávesových map nepoužívá - viz XKB apod. Ani si to neumím představit, protože by jinak ta klávesnice fungovala jen s jedněmi locales.
Ohledně zobrazení mluvím o něčem jiném. Já mluvil o případu, kdy sazeč zjistí, že ve fontu nemá ř - objeví se mu tam prázdný obdélníček. A on na to zareaguje tím, že on, RUČNĚ, nahradí "ř" dvěma znaky: "r" a "háček" a stejně tak ručně přidá případně kerning. Od zobrazovací knihovny pak nechce vůbec nic jiného než aby nedělala nic zvláštního, jen vysázela znaky.
A zdůrazňuji to slovo "sazeč", ať si je jakkoli nepřesné. Zdůrazňuji ho proto, aby bylo jasné, že to není typograf. Nechce a nebude si kreslit vlastní znaky, řešit v jakém editoru otevírat nějaké OTF, a hlavně jak ho exportovat tak, aby tam jen přibyl jeden znak a jinak se žádným způsobem ten font nezměnil, včetně milionu novodobých vlastností fontů, o jejichž existenci ten sazeč nemá ani ponětí, a tak je nemůže zkontrolovat.
Jediné, co by mohlo být navíc, ale nikoliv pro zobrazovací knihovnu, by byla např. chytrá schránka, která to převede podle Unicode na "ř" při akci "copy to clipboard", aby text takto zkopírovaný v jiném okně byl už normálně. Ale to je až třešnička na dortu, vůbec není životně důležitá a hlavně se vůbec netýká zobrazovací knihovny.
XKB není jediný způsob, jak zacházet s klávesnicí.
A on na to zareaguje tím, že on, RUČNĚ, nahradí "ř" dvěma znaky: "r" a "háček" a stejně tak ručně přidá případně kerning.
Tohle ale sazeč dělat nebude. Např. proto, že by mu jenom kerning nepomohl, musel by řešit i vertikální umístění háčku. A musel by to dělat pro každý výskyt ř v textu. Pokud už bude potřebovat použít dané písmo, tak si do fontu to ř doplní.
Navíc kdyby to udělal tak, jak popisujete, přestalo by mu tam fungovat třeba dělení slov, v elektronickém výstupu (PDF) by nefungovalo vyhledávání slov obsahujících ř. Zkrátka by to celé přineslo akorát spoustu problémů.
Nechce a nebude si kreslit vlastní znaky, řešit v jakém editoru otevírat nějaké OTF
Už vůbec ale nebude nebude řešit nějakou náhradu jednoho znaku jinými a jejich pozicování.
To už je úplně mimo jakoukoliv praxi, kam se ta debata zvrhla.
Pořád jsem se nedozvěděl, na co konkrétně a prakticky se teď používá ta Unicode vlastnost, že umí nadefinovat znaky i jako kompozity (ne teoreticky možná v budoucnu, ale teď a prakticky).
Naopak jste začal tvrdit věci naprosto proti mojí mnohaleté zkušenosti a chytáte se za jakási slovíčka a formulace a sám neřeknete příklad žádný. Není XKB jediná možnost konfigurace klávesnice? Ano, není - a co má být z hlediska argumentu o Unicode? Máte teda příklad jiného popisu, kde se ten Unicode používá? Pokud ano, proč jste ho nenapsal? A pokud ne, tak co má ten výkřik (užitečného) znamenat??
Další věc proti praxi je s tím kompozitem a kerningem. Přeci nikdo netvrdí, že tak chci sázet sázet knihu v kvalitě TeXu. Ale různé tiskoviny se tak běžně tvoří, protože sazeč/grafik potřebuje mnoho různých zdobných a jiných fontů a často se mu stane, že v nich není čeština nebo není kompletní apod. A tvrdit, co má raději dělat a nedělat je dost... No, řekněme to tak: zkuste ne na internetu, ale do očí říct nějakému grafikovi, že to dělá celé špatně a kvůli těm dvěma znakům v nějakém ozdobném nadpise (nebo třeba dvaceti v několika nadpisech) si má zaplatit kurs tvorby fontů a na dva týdny se vrhnout do učení. A pak pokaždé si každý takový potřebný font přetvořit.
To je celé... Jak píšu na začátku: úplně mimo praxi. Až bych se nebál to nazvat hraběcími radami.
Jelikož jsem se nic praktického ani na pátý nebo šestý pokus nedozvěděl, počkám raději, co bude v dalších dílech seriálu.
Z toho, jak se to dnes používá, neplyne nic o tom, jak to v minulosti bylo plánováno.
Samotný znak diakritického znaménka se může hodit třeba při psaní na klávesnici, kdy nejprve napíšete diakritické znaménko a to se zobrazí; nebo se to hodí třeba v textech o jazyku nebo typografii. Když chcete jiné příklady. Ale klíčové podle mne bylo to, že se to v minulosti jako samostatný znak vyskytovalo, takže dávalo smysl takové znaky zařadit i do nově vytvářené univerzální znakové sady.
Ale různé tiskoviny se tak běžně tvoří, protože sazeč/grafik potřebuje mnoho různých zdobných a jiných fontů a často se mu stane, že v nich není čeština nebo není kompletní apod.
Opravdu se to běžně dělá? Každopádně současná implementace umožňuje to, co chcete – a když se místo chybějícího znaku zobrazí čtvereček, je mnohem snazší takový znak najít, než kdyby se místo něj zobrazovala nějaká uměla generovaná náhrada.
Každopádně v debatě o standardních vykreslovacích knihovnách je to úplně jedno, protože sázecí programy nemohou používat standardní vykreslovací knihovny pro výpis celého textu, protože pak by nemohly řešit právě takové věci jako ruční kerning, měnit velikost mezislovních mezer apod.
si má zaplatit kurs tvorby fontů a na dva týdny se vrhnout do učení
Na to fakt nepotřebuje žádný dvoutýdenní kurz.
Jak píšu na začátku: úplně mimo praxi.
Gratuluj k objevu. V době, kdy vznikalo Unicode, vskutku s Unicode ještě žádná praxe nebyla. Celé to byla jenom teorie, jak by se to asi mohlo používat. A vytvořit samostatné znaky pro diakritická znaménka se tenkrát zkrátka jevilo jako dobrý nápad (a řekl bych, že se zpětně ukázalo, že to opravdu smysl dává).
IMHO je to pozůstatek po psacích strojích - tam opravdu napíšete háček (bez posunu válce/vozíku) a teprve poté písmeno. Čímž vznikají tři možnosti: samotný háček (dopsaná mezera), r s háčkem
a ř
(napsané klávesou s pětkou).
A každé to vypadá jinak.
Unicode vznikalo v dobách, kdy byly psací stroje (a dálnopisy...) ještě poměrně běžnou součástí života.
Dneska mládeži těžko vysvětlíte i CR+LF/LF+CR/CR/LF, protože vůbec nechápou, proč tolik možností pro prosté ukončení odstavce (řádky se přeci zalamují samy).