Uvozovky v HTML

Po mnoha slibech se dnes konečně dostávám k tomu, jak v HTML knihách pracovat s uvozovkami. Důvod, proč mi to trvalo tak dlouho, je poměrně prozaický: Na rozdíl od minulých témat, kde jsem měl optimální řešení (optimální z mého pohledu, pochopitelně), u uvozovek optimální řešení neznám; existuje několik přístupů, které lze použít, ale všechny mají více či méně vážné nedostatky. Jistě, jeden z přístupů jsem si zvolil a používám ho, ale spokojen s ním nejsem. Pokud by někoho napadlo nějaké řešení, které by nemělo popisované nedostatky, velice ho uvítám.

Uvozovky přímo v textu

Tradiční přístup k uvozovkám je napsat je příslušnými znaky přímo do textu, stejně, jako do textu píšeme třeba interpunkční znaménka:

<p>Krčmář zvedl hlavu od bečky kvašených okurek a změřil si hosta. Cizinec, stále ještě v plášti, stál před šenkýřem bez pohybu a mlčel.</p>
<p>„Přejete si?“</p>
<p>„Pivo,“ odpověděl neznámý. Neměl zrovna nejpříjemnější hlas.</p>
<p>Krčmář otřel ruce o zástěru a naplnil otřískaný hliněný korbel.</p>

(Zdroj: Sapkowski, Andrej: Zaklínač: Stříbrný meč, povídka Zaklínač)

Jde o řešení rychlé, přímočaré a dobře čitelné, což jsou všechno důvody, proč se často používá. Má ale také několik nepříjemných nevýhod:

  • Je fixní. Jakmile v knize použijete určitý způsob zápisu uvozovek, je často obtížné ho předělat na systém jiný. Ještě to jde, pokud pro každý typ uvozovek (otevírací první úrovně, zavírací druhé úrovně atd.) používáte zvláštní znak, který nikde jinde v textu použit není (viz příklad výše) – pak lze někdy*) použít funkci „Nahraď vše“ pro přepsání uvozovek na jiný zápis. Musíte si ovšem dát pozor, abyste nahradili všechny použité symboly.

    Velký problém ovšem nastane v okamžiku, kdy uvedená podmínka splněna není – pokud je jeden symbol použit ve více významech, je nahrazování složité a mnohdy vůbec nemožné. Typický případ je, že uvozovky nejsou řešeny „kulatými“ (typografickými) uvozovkami, ale „rovnými“ (počítačovými), v anglických knihách ještě hůře tak, že jednoduchá zavírací uvozovka používá stejný symbol jako apostrof ve zkráceninách a přivlastňování.

    Obecně je potřeba počítat s tím, že uvozovky jsou jednou provždy dané při vytváření knihy a budoucí změna je velice pracná.

  • Není vynucována konzistence. Je zcela na autorovi knihy, jaký symbol kde použije. Jedna a ta samá vizuální reprezentace se dá zapsat několika různými způsoby: “ “ “ jsou tři různé symboly “ &ldquo; &#8220;, a to jsem ještě upustil od možnosti použít dvakrát po sobě .

  • Velmi špatně se kontroluje správnost. Ověřit, že jsem v HTML kódu nezapomněl ukončit odstavec nebo odkaz, je docela snadné – zvládne to každý validátor. Ověřit, že jsem správně ukončil všechny uvozovky, je podstatně problematičtější – vlastně neznám žádný nástroj, kterým by to šlo uspokojivě udělat. Veškerá kontrola leží na člověku, který knihu čte.

Zvláštní otázkou je, jaký zápis uvozovky vůbec použít. Obecně jsou k dispozici nejméně čtyři velmi odlišné zápisy, které všechny vedou na stejnou vizuální reprezentaci, ale mají různé dopady na dokument jako celek: Uvozovku můžu napsat přímo příslušným symbolem (), pomocí HTML entity (&ldquo;), pomocí dekadické reprezentace (&#8220;) nebo pomocí hexadekadické reprezentace (&#x201c;). David A. Wheeler v článku Curling Quotes in HTML, SGML and XML doporučuje použití dekadické reprezentace, protože je na rozdíl od ostatních je univerzálně podporovaná a všude stejná (reprezentace pomocí entit například není k dispozici v XML, pokud si ji tam sami nedodefinujete; některé prohlížeče neumí přímý zápis dotyčných symbolů – psáno v roce 2002).

Osobně se přikláním pro používání HTML entit, jakkoliv jsou dostupné jenom v HTML a ne v ostatních jazycích založených na SGML. Důvod k tomu je primárně ten, že:

  • na rozdíl od přímého zápisu symbolů se HTML entity snadno zapisují v libovolném editoru na libovolné klávesnici. Pro zápis znaku bych si buď musel pamatovat Unicode kód znaku, pokaždé otvírat Mapu znaků, použít speciální editor, který umí přepsat „počítačové“ uvozovky na „kulaté“ (např. Word), nebo (jako to dělám v tomto článku) si v prohlížeči otevřít dokument s tímto znakem a využít Clipboard. Dodatečná nevýhoda přímého zápisu je v tom, že v konzoli Windows nejsou tyto znaky vůbec k dispozici a zobrazují se jako ksichtíky; vzhledem k tomu, že masivně používám konzolový FAR Manager, je to pro mě velká nevýhoda.

  • na rozdíl od zápisu pomocí kódů si nemusím nic složitého pamatovat. Když chci otvírací (levou) dvojitou uvozovku, rovnou z hlavy píšu & l d quo ; – entita vždy začíná znakem &, následuje l=left=levá, d=double=dvojitá, quo=quote=uvozovka a končí ;, protože středníkem se ukončují všechny entity. Obdobně když budu chtít jednoduchou uzavírací uvozovku, napíšu hned &rsquo; (protože „right“ a „single“); jediný problém by nastal, kdybych měl zájem o jednoduchou uvozovku dole, protože z mě nepochopitelných důvodů nebyla nadefinována jako &bsquo;, ale „naruby“ jako &sbquo;. Pořád je to ale lepší než u číselné reprezentace, protože mezi číselným kódem a vizuálním provedením není vztah vůbec žádný.

Je ovšem třeba počítat s tím, že i zápis entitou má své nevýhody, zejména nekompatibilitu s čímkoliv jiným než HTML a v případě češtiny i to, že zavírací uvozovkou je symbol , což je v angličtině (a tudíž i v entitách) levá uvozovka.

Nejběžnější typy uvozovek a jejich zápis:

Symbol Entita Kód Poznámka
" &quot; &#34; Počítačové uvozovky
' &apos; &#39; Apostrof – zkráceniny, v angličtině přivlastňování
&bdquo; &#8222; Dvojité uvozovky dole (čeština)
&sbquo; &#8218; Jednoduché uvozovky dole (čeština) – neplést s čárkou!
&ldquo; &#8220; Dvojité uvozovky vlevo (angličtina) / vpravo (čeština)
&lsquo; &#8216; Jednoduché uvozovky vlevo (angličtina) / vpravo (čeština)
&rdquo; &#8221; Dvojité uvozovky vpravo (angličtina)
&rsquo; &#8217; Jednoduché uvozovky vpravo (angličtina)
« &laquo; &#171; Dvojité uvozovky vlevo (francouzština?)
&lsaquo; &#8249; Jednoduché uvozovky vlevo (francouzština?)
» &raquo; &#187; Dvojité uvozovky vpravo (francouzština?)
&rsaquo; &#8250; Jednoduché uvozovky vpravo (francouzština?)

*) Proč někdy: Jsou případy, kdy jenom nahrazení symbolů nestačí. Typicky to nastává tehdy, kdy kniha nesmyslně používá uvozovkování podle pravidel jiného jazyka, než ve kterém je napsána. Čeština například přímou řeč přes několik odstavců píše tak, že uvede uvozovky jen na začátku přímé řeči a na jejím konci; angličtina ovšem navíc na začátku každého nového odstavce uvnitř přímé řeči znovu otevírá všechny aktuálně otevřené uvozovky:

<p>“Listen,” he said, and read aloud:</p>
<p>“ ‘To the magicians Kulgan and Pug, greetings. I have anticipated some of your questions and have endeavored to answer them as best I can. I fear there are others that must go begging, as much about myself must remain known only to me. I am not what the Tsurani would call a Great One, though I have visited that world, as Pug knows, upon a number of occasions. My magic is peculiar to myself and defies description in your terms of Greater and Lesser Paths Suffice it to say I am a walker of many paths.</p>
<p>“ ‘I see myself as a servant of the gods, though that may be only my vanity speaking. Whatever the truth is, I have traveled to many lands and worked for many causes.</p>
<p>“ ‘Of my early life I will say little. I am not of this world, having been born in a land distant both in space and time. It is not unlike this world, but there are ample reasons to count it strange by your standards.</p>
<p>“ ‘I am older than I care to remember, old even by the elves' reckoning. For reasons I do not understand, I have lived for ages, though my own people are as mortal as yours. It may be that when I entered into the magic arts, I unwittingly gave this near-immortality to myself, or it may be the gift—or curse—of the gods.</p>
<p>“ ‘Since becoming a sorcerer, I have been fated to know my own future, as others know their pasts. I have never retreated from what I knew to be before me, though often I wished to. I have served great kings and simple peasants both. I have lived in the greatest cities and the rudest huts. Often I have understood the meaning of my participation, sometimes not, but always I have followed the foreordained path that was set for me.’ ”</p>

(Zdroj: Feist, Raymond Elias: Magician: Master)

Pokud chcete knihu převést do správného uvozovkování jejího jazyka, pouhým nahrazením symbolů to nedokážete, protože může být potřeba některé symboly přidat nebo naopak bez náhrady odebrat.

Uvozovky pomocí HTML+CSS

Všechny výše uvedené nevýhody beze zbytku řeší zápis pomocí HTML tagů, ostylovaný pomocí CSS:

  • V dokumentu se vůbec nezabývám vzhledem uvozovek. Pomocí tagu <q> vyznačuji začátek a konec uvozovek, vzhled samotný už si vyřeší CSS. Ten můžu mít uvedený úplně samostatně, společný pro všechny dokumenty, mimo jiné i proto, že lze specifikovat různé symboly pro uvozovkování pro různé jazyky dokumentu. Uvedu minimální příklad, který sice není úplně správně (nezabývám se validitou dokumentu) a navíc je CSS i HTML na jedné hromadě, ale zato je přehledný:

    <html>
    <head>
    <style>
    q:lang(en) { quotes: "“" "”" "‘" "’"; }
    q:lang(cs) { quotes: "„" "“" "‚" "‘"; }
    </style>
    </head>
    <body lang="en">
    <p>Krčmář zvedl hlavu od bečky kvašených okurek a změřil si hosta. Cizinec, stále ještě v plášti, stál před šenkýřem bez pohybu a mlčel.</p>
    <p><q>Přejete si?</q></p>
    <p><q>Pivo,</q> odpověděl neznámý. Neměl zrovna nejpříjemnější hlas.</p>
    <p>Krčmář otřel ruce o zástěru a naplnil otřískaný hliněný korbel.</p></body>
    </html>

    Používat lze i vnořené uvozovky, které jsou opět ostylovány podle uživatelových specifikací.

  • Konzistence je zajištěna tím, že všechny možné uvozovky jsou řešeny jediným symbolem, který navíc nemůže být použit nikde jinde v dokumentu.

  • Kontrolu správnosti řeší libovolný validátor HTML.

Vypadá to skvěle, že? Ovšem, jak už jsem uvedl v úvodu, dokonalé řešení neznám, a i uvozovky pomocí HTML mají několik „drobných nevýhod“:

  • Vlastnost quotes byla zavedena až v CSS verze 2.1, takže její podpora v softwaru je poměrně nízká. Prohlížeče webu ji vesměs podporují (i když Internet Explorer až od verze 8). Horší už je to s podporou mimo prohlížeče. Pro účely knih je podstatné, že vlastnost quotes nepodporuje Calibrovský ebook-convert (takže zapomeňte na konverze do jakéhokoliv formátu) a spadne na nich Adobe Digital Editions (takže zapomeňte na použití v EPUBu, nehledě na to, že EPUB specifikuje jen podporu části CSS 2.0, 2.1 ani umět nemusí, takže ani majitelé jiných čteček než od Sony na tom nebudou významně lépe). Z dalších programů to nepodporuje například OpenOffice.

  • I kdyby quotes podporovány byly, pro použití v knihách se principiálně nehodí. Problém je v tom, že v HTML se tagy nesmí křížit, zatímco v knihách se „kříží“ běžně. Typický příklad jsou právě výše zmíněné uvozovky přes několik odstavců: v knize je naprosto přijatelné, že přímá řeč začne uprostřed odstavce, pokračuje přes tři další odstavce a skončí uprostřed odstavce následujícího. V HTML by se ještě tak dalo rozumně zařídit, aby přímá řeč šla přes několik celých odstavců, ale „z půlky do půlky“ se rozumně řešit nedá.

    Lze to ovšem řešit „nerozumně“ pomocí CSS tříd, jak dokumentuje následující příklad:

    <html>
    <head>
    <style>
    <!--
    q:lang(en) { quotes: "“" "”" "‘" "’"; }
    q.continue-left:lang(en) { quotes: "“" "”" "‘" "’"; }
    q.continue-right:lang(en) { quotes: "“" "" "‘" ""; }
    q.continue-left-right:lang(en) { quotes: "“" "" "‘" ""; }
    q:lang(cs) { quotes: "„" "“" "‚" "‘"; }
    q.continue-left:lang(cs) { quotes: "" "“" "" "‘"; }
    q.continue-right:lang(cs) { quotes: "„" "" "‚" ""; }
    q.continue-left-right:lang(cs) { quotes: none; }
    -->
    </style>
    </head>
    <body lang="en">
    <p><q>Listen,</q> he said, and read aloud:</p>
    <p><q class="continue-right"> <q class="continue-right">To the magicians Kulgan and Pug, greetings. I have anticipated some of your questions and have endeavored to answer them as best I can. I fear there are others that must go begging, as much about myself must remain known only to me. I am not what the Tsurani would call a Great One, though I have visited that world, as Pug knows, upon a number of occasions. My magic is peculiar to myself and defies description in your terms of Greater and Lesser Paths Suffice it to say I am a walker of many paths.</q> </q></p>
    <p><q class="continue-left-right"> <q class="continue-left-right">I see myself as a servant of the gods, though that may be only my vanity speaking. Whatever the truth is, I have traveled to many lands and worked for many causes.</q> </q></p>
    <p><q class="continue-left-right"> <q class="continue-left-right">Of my early life I will say little. I am not of this world, having been born in a land distant both in space and time. It is not unlike this world, but there are ample reasons to count it strange by your standards.</q> </q></p>
    <p><q class="continue-left-right"> <q class="continue-left-right">I am older than I care to remember, old even by the elves' reckoning. For reasons I do not understand, I have lived for ages, though my own people are as mortal as yours. It may be that when I entered into the magic arts, I unwittingly gave this near-immortality to myself, or it may be the gift—or curse—of the gods.</q> </q></p>
    <p><q class="continue-left"> <q class="continue-left">Since becoming a sorcerer, I have been fated to know my own future, as others know their pasts. I have never retreated from what I knew to be before me, though often I wished to. I have served great kings and simple peasants both. I have lived in the greatest cities and the rudest huts. Often I have understood the meaning of my participation, sometimes not, but always I have followed the foreordained path that was set for me.</q> </q></p></body>
    </html>

    Nemohu říci, že by mi to přišlo zrovna pěkné na pohled, natož na psaní. Ale ano, funguje to.

Závěr

Pokud navzory úvodu očekáváte nějaké rozřešení, tak vás zklamu: žádné nemám. Momentálně používám zápis přímo v textu (protože nepodpora quotes v čemkoliv kolem Sony Readeru je pro mě zásadní problém, který přebíjí všechny ostatní), a to pomocí entit (důvody byly uvedeny výše), ale nadšen tím nejsem. Nevýhody se snažím omezovat tím, že mám rozepsaný prográmek pro kontrolu uvozovek (který vcelku uspokojivě funguje, ale není zatím uzpůsobený pro vypuštění mezi lidi). Výhledově bych se rád podíval na možnost napsat nějaký preprocesor, který by vzal vlastnost quotes a tagy <q> a nahradil je příslušnými symboly, ale jestli k tomu vůbec dojde je otázka – zdá se to dost pracné, možná až příliš.

Podobné příspěvky:

2 Responses to “Uvozovky v HTML”

  1. avatar pepak napsal:

    Nevýhody, které jsem popisoval a na které se ptáš, se týkají pojmenovaných entit jako &ldquo;, ne tebou použitých číselných entit typu &#8220; – jde právě o nevýhody pojmenovaných entit proti číselným.

    – Nekompatibilita s čímkoliv mimo HTML: Jde o to, že tyto entity jsou definovány v HTML, ale ne v jiných obdobných jazycích. Tam by si je uživatel musel sám dodefinovat, což skoro nikdo nedělá, protože to neví (a protože to je nepohodlné).

    – Levá vs. pravá uvozovka: Jde o to, že to, co je „významově“ pravá uvozovka (&rdquo;) nedá v češtině to správné grafické vyjádření. Je to jen kosmetický problém (píšu „levá uvozovka“, když uvozovky ukončuju), ne funkční.

  2. avatar Mr.Lilek napsal:

    Díky za článek, netušil jsem že je nějaký rozdíl v českém zápisu úvozovek oproti zbytku světa.
    Osobně ve svých konverzích používám ‚anglickou‘ kombinaci &#8220; a &#8221; a nevidím na tom nic špatného.

    Můžeš trochu rozvést tebou uvedené nevýhody tohoto řešení?

    ‚…zejména nekompatibilitu s čímkoliv jiným než HTML‘
    – s čím jiným by to mělo být kompatibilní ?

    ‚…v případě češtiny i to, že zavírací uvozovkou je symbol “, což je v angličtině levá uvozovka‘
    – to vidím jako problém pravopisných pravidel, s použitím html entit to nemá nic společného (a pokud to budu brát podle sebe, tak většina lidí vůbec netuší že čeština má nejaká specifika 🙂

Leave a Reply

Themocracy iconWordPress Themes

css.php