forked from em/bakalarka
Obecné úpravy
parent
3e17167471
commit
79817712b9
@ -1,67 +1,67 @@
|
||||
\chapter{Značkovací jazyky}
|
||||
\chapter{Značkovací jazyky}\label{kap:znackovaci-jazyky}
|
||||
|
||||
Tato kapitola se zabývá analýzou nejběžnějších jazyků pro popis obsahu používaných ve statických generátorech z~předchozí kapitoly, dalším důležitým jazykům ze světa sázení a jejich pricipům.
|
||||
|
||||
\section{Principy značkovacích jazyků}
|
||||
|
||||
Definici konceptu značkovacích jazyků neboli \uv{markup jazyků}, můžeme najít například v~RFC 7764\footnote{Jako \textit{RFC} se označují standardy vydané organizací IETF (Internet Engineering Task Force).}, tedy že v~počítačových systémech jsou kontextuální data ukládána a zpracována několika technikami. Informaci lze kódovat jako čistý text bez speciálních formátovacích znaků. Tento přístup je jednoduchý pro implementaci i použití, ovšem neumožňuje složitější formátování textu.
|
||||
Definici konceptu značkovacích jazyků neboli \uv{markup jazyků}, můžeme najít napří\-klad v~RFC 7764\footnote{Jako \textit{RFC} se označují standardy vydané organizací IETF (Internet Engineering Task Force).}, tedy že v~počítačových systémech jsou kontextuální data ukládána a zpracována několika technikami. Informaci lze kódovat jako čistý text bez speciálních formátovacích znaků. Tento přístup je jednoduchý pro implementaci i použití, ovšem neumožňuje složitější formátování textu.
|
||||
|
||||
Kódovat můžeme i do binárních formátů určených ke zpracování a interpretaci specializovaným programem. Zřejmou nevýhodou je to, že zdroj není čitelný bez programu určeného pro jeho interpretaci.
|
||||
Kódovat můžeme i do binárních formátů určených ke zpracování a interpretaci specia\-lizovaným programem, jimiž mohou být například LibreOffice Writer, či proprietární software\footnote{Software nerespektující základní svobody uživatele, které jsou popsány na adrese \url{https://www.gnu.org/philosophy/free-sw.html}} Microsoft Word. Zřejmou nevýhodou je to, že zdroj není čitelný bez programu určeného pro jeho interpretaci.
|
||||
|
||||
Markup jazyky se snaží o~spojení nejlepšího z~obou světů, tedy o~obsah s~možností formátování, který je jednoduše čitelný jak pro člověka, tak pro stroj. Toho je dosaženo tím, že v~je v~běžných textových souborech přiřazen vybraným znakům speciální význam. Uživatel je schopen tyto znaky psát bez potřeby speciálních nástrojů, a tím jednoduše vyjádřit speciální význam. Například v~rámci jazyka Markdown se znak \texttt{\#} změní z~běžného křížku na definování nadpisu první úrovně nebo kombinace znaků \texttt{<p>} v~HTML značí začátek odstavce. \citep{rfc7764}
|
||||
Markup jazyky se snaží o~spojení nejlepšího z~obou světů, tedy o~obsah s~možností formátování, který je jednoduše čitelný jak pro člověka, tak pro stroj. Toho je dosaženo tím, že v~je v~běžných textových souborech přiřazen vybraným znakům speciální význam. Uživatel je schopen tyto znaky psát bez potřeby speciálních nástrojů, a tím jednoduše tento speciální význam vyjádřit. Například v~rámci jazyka Markdown, jenž je popsán v~následujích sekcích, se význam znaku \texttt{\#} na začátku řádku mění z~běžného křížku na definování nadpisu první úrovně. \citep{rfc7764}
|
||||
|
||||
\section{Nejběžnější jazyky}
|
||||
|
||||
V~současnosti existuje nespočet značkovacích jazyků. Nejpoužívanějším z~nich je jednoznačně HTML, ovšem tato práce se věnuje těm nejpoužívanějším jazykům, které mají uživateli usnadnit psaní a sázení obsahu. Uživatel se tedy nemusí při tvorbě nutně zabývat typografií a formátováním obsahu, což jsou aspekty, o~které se později postará generátor pomocí šablon. U~HTML je tomu naopak, uživatel řeší samotný obsah i formátování v~jednu chvíli skrze různé druhy formátovacích tagů. O~vyplňování obsahu do HTML se v~případě staticky generovaných webů stará právě samotný generátor.
|
||||
V~současnosti existuje nespočet značkovacích jazyků, z~nichž nejčastěji používaným je nepochybně HTML, ovšem tato práce se věnuje těm nejpoužívanějším jazykům, jenž mají uživateli usnadnit psaní a sázení obsahu. Uživatel se tedy nemusí při jeho tvorbě nutně zabývat typografií a formátováním obsahu, což jsou aspekty, o~které se později stará generátor pomocí šablon. U~HTML je tomu naopak, uživatel řeší samotný obsah i formátování v~jednu chvíli skrze různé druhy formátovacích tagů. O~vyplňování obsahu do HTML se v~případě staticky generovaných webových stránek stará právě samotný generátor.
|
||||
|
||||
Vybrané jazyky jsou zároveň cílené na čitelnost samotného zdrojového obsahu v~čistém textu bez nutnosti jeho interpretace speciálním prostředím či zpracováním do jiného formátu, například do PDF, DjVu, PostScript apod. Například podtržení textu je v~nějakém pseudo-jazyce reprezentováno opravdovým podtržením pomocí spojovníků, nikoliv obalením nadpisu ve speciální deklaraci, jako je tomu například u~HTML. Podtržení je poté pro čtenáře mnohem jasnější, jelikož nemusí přemýšlet, co v~kontextu HTML daný tag znamená, kdežto podtržení vyplývá z~kontextu.
|
||||
Vybrané jazyky jsou zároveň cílené na čitelnost samotného zdrojového obsahu v~čistém textu bez nutnosti jeho interpretace speciálním prostředím či zpracováním do jiných formátů, jimiž mohou být PDF, DjVu, PostScript apod. Například podtržení textu je v~nějakém pseudo-jazyce reprezentováno opravdovým podtržením pomocí spojovníků, nikoliv obalením nadpisu ve speciální deklaraci, jako je tomu právě u~jazyka HTML. Podtržení je poté pro čtenáře mnohem jasnější, jelikož nemusí přemýšlet, co v~kontextu HTML daný tag znamená, kdežto podtržení z~kontextu souboru vyplývá.
|
||||
|
||||
Seznam nejoblíbenějších jazyků je sestaven podle aktuálních statistik ze serveru Slant, který se věnuje obecnému určení oblíbenosti na základě hodnocení ze strany uživatelů. \citep{slant}
|
||||
Následující jazyky byly vybrány základě jejich výskytu u~generátorů vybraných v~předchozí kapitole a také podle aktuálních statistik ze serveru \cite{slant}, který se věnuje obecnému určení oblíbenosti na základě hodnocení ze strany uživatelů.
|
||||
|
||||
\subsection{Markdown}\label{kap:markdown}
|
||||
\subsection{\TeX}\label{kap:tex}
|
||||
|
||||
Jazyka Markdown vznikl 19. března roku 2004, když John Gruber vydal první popis syntaxe a referenční implementaci.
|
||||
Tento jazyk se vzdaluje od původního konceptu čitelnosti zdroje, ovšem ve statických generátorech ho lze stále efektivně využít. Je jedním z~nejrozšířenějších sázecích jazyků se spoustou možností a funkcionalit, z~nichž velmi zajímavým rozšířením je prostředí pro psaní matematických formulí, díky němuž se jazyk stal velmi populárním v~oblasti technických publikací. Tyto funkcionality se často objevují i v~jiných jazycích a jsou efektivně využívány pro jejich rozšíření.
|
||||
|
||||
Hlavním z~cílů syntaxe jazyka je vytvářet co možná nejčitelnější obsah v~syrové podobě. Dokument psaný v~Markdownu by měl být publikovatelný sám o~sobě jako čistý text bez dalších úprav a zpracování. Jazyk byl ovlivněn několika již existujícími specifikacemi jiných jazyků, ovšem největším zdrojem inspirace pro jeho vznik jsou čisté emailové korespondence. \citep{daringfireball}
|
||||
Většina uživatelů se setkala spíše s~jazykem \LaTeX, tedy s~nadstavbou původního \TeX{}u, která má uživateli zjednodušit práci svými makry a rozšířeními. Realita je ovšem taková, že \LaTeX{} dělá celou práci složitější, jak popisuje doktor Olšák:
|
||||
|
||||
První specifikaci Gruber vydal společně s~referenční implementací v~jazyce Perl, která prováděla konverzi Markdownu do HTML. Tento program je také pojmenován jako \uv{Markdown}, ovšem mluvíme-li o~\uv{Markdownu}, máme nejčastěji na mysli samotnou syntaxi. Ta má dnes mnoho implementací v~různých programovacích jazycích. Gruberova specifikace ovšem není formálním standardem, kvůli čemuž vznikl veliký počet alternativních a více či méně pozměněných implementací, které nemusí být navzájem kompatibilní. Nejčastějšími z~nich jsou například Github Markdown, CommonMark, R Markdown a mnoho dalších. \citep{commonmark}
|
||||
\begin{quote}
|
||||
Představte si, že si nějaký uživatel přečte \LaTeX{}ovou příručku a nabude doj\-mu, že mu bude stačit rozumět problematice sazby na úrovni této příručky. Pak se jednou překlepne třeba při sestavování tabulky a na terminálu na něj \TeX{} křičí: {\tt Extra alignment tab has been changed to "\verb|\cr|".} Uživatel začne znovu listovat ve své příručce a zjistí, že tam o~žádném "\verb|\cr|"{} není jediná zmínka. Má pak tři možnosti: (1)~Zmáčkne Enter a podobně se zachová i u~dalších chyb. Pomyslí si, že ten \LaTeX{} je něco tajemného a mys\-tického. (2)~Propadne zoufalství a jde od toho. Dojde k~závěru, ľe je lepší zůstat u~Wordu. Vždyť stačí vzít tabulku v~Excelu a jednoduše ji přemístit do Wordu a jaképak smolení se s~nějakým podezřelým "\verb|\cr|". (3)~Pořídí si \TeX{}book a po intenzivním studiu nakonec řekne: \uv{aha}. V~tuto chvíli ale už nepotřebuje, aby mu \LaTeX{} zakrýval složitost \TeX{}u. \citep{nolatex}
|
||||
\end{quote}
|
||||
|
||||
Nevyužívanější formální specifikací je právě CommonMark\footnote{\url{https://commonmark.org/}}, který slouží jako pevný základ většiny rozšíření. \citep{github_formal_markdown_spec}
|
||||
Ve výsledku je tedy lepší, z~různých důvodů popsaných doktorem Olšákem v~jeho publikaci, použít samotný plain \TeX{} na úkor vyšší vstupní úrovně pro používání jazyka.
|
||||
|
||||
Podobně jako je tomu u~specifikací, existuje velké množství programů, které tyto různé specifikace překládají. Švýcarským nožem mezi nimi je program Pandoc\footnote{\url{https://pandoc.org/}}, který umí překládat Markdown do enormního výběru jiných formátů, nebo z~jiných formátů zpět. Tato funkcionalita se nevztahuje pouze na jazyk Markdown, Pandoc dokáže operovat mezi všemi podporovanými formáty, například dokáže konvertovat obsah z~HTML do \TeX{}u. Na druhou stranu existují i velmi jednoduché překladače, například program smu\footnote{\url{https://github.com/Gottox/smu}}, který umí překládat Markdown do HTML nebo čistého textu a neobsahuje více než 600 SLOC\footnote{Source lines of code}, tedy řádků kódu hlavního programu.
|
||||
\subsection{Troff}
|
||||
|
||||
Užitečným rozšířením je, mimo jiné, také integrace matematického prostředí z~jazyka \TeX, viz sekce \ref{kap:tex}.
|
||||
Troff je jedním z~nejstarších jazyků a předchůdcem jazyka \TeX. Autorem původní verze je Joe Ossanna, po jehož smrti převzal vývoj Brian Kernighan. Samotný Troff je reimplementací a rozšířením původního programu RUNOFF z~operačního systému CTSS. Vznikl za účelem sazby dokumentů na novém operačním systému Unix. \citep{ossanna1977troff}
|
||||
|
||||
\subsection{Org-mode}
|
||||
Dnes existuje celá řada různých implementací a modernizovaných rozšíření, například Groff\footnote{\url{https://www.gnu.org/software/groff/}}, Heirloom troff\footnote{\url{http://heirloom.sourceforge.net/doctools.html}}, nebo moderní Neatroff\footnote{\url{https://repo.or.cz/neatroff.git}}, který se snaží o~spojení toho nejlepšího ze všech předchozích implementací. Sám Brian Kernighan v~soukromé emailové konverzaci doporučuje použití některé alternativní implementace, jež jsou podle Keringhana lepší ve všech směrech.
|
||||
|
||||
Org-mode vznikl jako jeden z~módů pro editor Emacs\footnote{\url{https://www.gnu.org/software/emacs/}}. Funguje podobně jako ostatní markup jazyky, tedy jako jeden centrální systém pro správu obsahu, ze kterého lze vytvářet jiné formáty, například HTML, \LaTeX, Open Document, Markdown, PDF a podobně s~možností přidání libovolného nového backendu. Cílem Org-mode je možnost ho používat i s~minimální úrovní jeho znalosti, ovšem jeho funkcionalita je vždy přístupná. Vše je realizováno pouze na čistých textových souborech, nejlépe přenositelným typem souboru. Editor Emacs je zároveň velmi často portován na různé druhy systémů a je tedy možné ho využívat v~podstatě kdekoliv. \citep{orgmanual}
|
||||
I~přes vznik mnoha alternativních jazyků, například dříve zmíněného \TeX{}u a \LaTeX{}u, je Troff (Groff) stále hojně využíván v~praxi, zejména u~softwarové dokumentace v~Unixových operačních systémech.
|
||||
|
||||
Podporuje také \uv{literate programming} a \uv{reproducible research}, tedy že Org soubory mohou obsahovat plně funkční bloky s~kódem, které lze hodnotit v~rámci systému, a výstup bloků lze automaticky vkládat přímo do dokumentu. \citep{environment_for_literate_programming}
|
||||
\subsection{Markdown}\label{kap:markdown}
|
||||
|
||||
Jak popisuje \cite{carsten_dominik} ve svém krátkém technickém popisu, Org-mode umí navrhování, psaní poznámek, hypertextové odkazy, tabulky, seznamy, plánování projektů, GTD, HTML a \LaTeX{}, a to všechno v~čistých textových souborech v~editoru Emacs.
|
||||
Jazyk Markdown vznikl 19. března roku 2004, když John Gruber vydal první popis syntaxe a referenční implementaci.
|
||||
|
||||
\subsection{reStructuredText}
|
||||
Hlavním z~cílů syntaxe jazyka je vytvářet co možná nejčitelnější obsah podobě čistého textu. Dokument psaný v~Markdownu by měl být publikovatelný jako textový soubor bez dalších úprav a zpracování. Jazyk byl ovlivněn několika již existujícími specifikacemi jiných jazyků, ovšem největším zdrojem inspirace pro jeho vznik jsou čisté e-mailové korespondence\footnote{E-mail, který není formátován pomocí HTML.}. \citep{daringfireball}
|
||||
|
||||
Tento jazyk, známý také jako ReST, je, stejně jako Markdown, zároveň syntaxí i parsovacím systémem syntaxe pro tvorbu dokumentů a webových stránek. Svou oblibu získal hlavně v~komunitě jazyka Python. Ve své dokumentaci\footnote{\url{https://docutils.sourceforge.io/rst.html}} je popisován jako syntaxe pro využití ke psaní \textit{Python docstrings} a dalších druhů dokumentace, která je spolehlivá a jednoduchá. ReST vznikl v~návaznosti na jazyk StructuredText, který trpěl mnoha nedostatky. Cílem jazyka reStructuredText je tyto nedostatky opravit a doplnit. \citep{problems_with_structuredtext}
|
||||
První specifikaci Gruber vydal společně s~referenční implementací v~jazyce Perl, která prováděla konverzi zdrojového souboru popsaného v~jazyce Markdown do HTML. Tento program je také pojmenován jako \uv{Markdown}, ovšem mluvíme-li o~\uv{Markdownu}, máme nejčastěji na mysli samotnou syntaxi. Ta má dnes mnoho implementací v~různých programovacích jazycích. Gruberova specifikace ovšem není formálním standardem, kvůli čemuž vznikl veliký počet alternativních a více či méně pozměněných implementací, jenž nemusí být navzájem kompatibilní. Nejčastějšími z~nich jsou například Github Markdown, CommonMark, RMarkdown a mnoho dalších. \citep{commonmark}
|
||||
|
||||
S~jazykem se lze setkat u~značné části existujících generátorů statických webových stránek, z~nichž některé jsou zmíněny v~kapitole \ref{kap:paradigmata}.
|
||||
Nevyužívanější formální specifikací je právě CommonMark\footnote{\url{https://commonmark.org/}}, jenž slouží jako pevný základ většiny rozšíření. \citep{github_formal_markdown_spec}
|
||||
|
||||
\subsection{\TeX}\label{kap:tex}
|
||||
Podobně jako je tomu u~specifikací, existuje velké množství programů, které tyto různé specifikace překládají. Švýcarským nožem mezi nimi je program Pandoc\footnote{\url{https://pandoc.org/}}, jenž umí překládat Markdown do enormního výběru jiných formátů, nebo z~jiných formátů zpět. Tato funkcionalita se nevztahuje pouze na jazyk Markdown, Pandoc dokáže operovat mezi všemi podporovanými formáty, například dokáže konvertovat obsah z~HTML do \TeX{}u. Na druhou stranu existují i velmi jednoduché překladače, například program smu\footnote{\url{https://github.com/Gottox/smu}}, který umí překládat Markdown do HTML nebo čistého textu a neobsahuje více než šest set řádků kódu hlavního programu.
|
||||
|
||||
Tento jazyk se již vzdaluje od původního konceptu čitelnosti zdroje, ovšem ve statických generátorech ho lze stále efektivně využít. Je jedním z~nejrozšířenějších sázecích jazyků se spoustou možností a funkcionalit, z~nichž velmi zajímavým rozšířením je prostředí pro psaní matematických formulí, díky kterému jazyk stal velmi populárním v~oblasti technických publikací. Tyto funkcionality se často objevují i v~jiných jazycích, které jsou efektivně využívány pro jejich rozšíření.
|
||||
Užitečným rozšířením je, mimo jiné, také integrace matematického prostředí z~jazyka \TeX, viz sekce \ref{kap:tex}.
|
||||
|
||||
Většina uživatelů se setkala spíše s~jazykem \LaTeX, tedy s~nadstavbou původního \TeX{}u, která má uživateli zjednodušit práci svými makry a rozšířeními. Realita je ovšem taková, že \LaTeX{} dělá celou práci složitější, jak popisuje doktor Olšák:
|
||||
\subsection{Org-mode}
|
||||
|
||||
\begin{quote}
|
||||
Představte si, že si nějaký uživatel přečte \LaTeX{}ovou příručku a nabude dojmu, že mu bude stačit rozumět problematice sazby na úrovni této příručky. Pak se jednou překlepne třeba při sestavování tabulky a na terminálu na něj \TeX{} křičí: {\tt Extra alignment tab has been changed to "\verb|\cr|".} Uživatel začne znovu listovat ve své příručce a zjistí, že tam o~žádném "\verb|\cr|"{} není jediná zmínka. Má pak tři možnosti: (1)~Zmáčkne Enter a podobně se zachová i u~dalších chyb. Pomyslí si, že ten \LaTeX{} je něco tajemného a mystického. (2)~Propadne zoufalství a jde od toho. Dojde k~závěru, ľe je lepší zůstat u~Wordu. Vždyť stačí vzít tabulku v~Excelu a jednoduše ji přemístit do Wordu a jaképak smolení se s~nějakým podezřelým "\verb|\cr|". (3)~Pořídí si \TeX{}book a po intenzivním studiu nakonec řekne: \uv{aha}. V~tuto chvíli ale už nepotřebuje, aby mu \LaTeX{} zakrýval složitost \TeX{}u. \citep{nolatex}
|
||||
\end{quote}
|
||||
Org-mode vznikl jako jeden z~módů pro editor Emacs\footnote{\url{https://www.gnu.org/software/emacs/}}. Funguje podobně jako ostatní markup jazyky, tedy jako jeden centrální systém pro správu obsahu, ze kterého lze vytvářet jiné formáty, například HTML, \LaTeX, Open Document, Markdown, PDF a podobně s~možností přidání libovolného nového backendu. Cílem Org-mode je možnost ho používat i s~minimální úrovní jeho znalosti, ovšem jeho funkcionalita je vždy přístupná. Vše je realizováno pouze na čistých textových souborech, nejlépe přenositelným typem souboru. Editor Emacs je zároveň velmi často portován na různé druhy systémů a je tedy možné ho využívat v~podstatě kdekoliv. \citep{orgmanual}
|
||||
|
||||
Ve výsledku je tedy lepší, z~různých důvodů popsaných doktorem Olšákem v~jeho publikaci, použít samotný plain \TeX{} na úkor vyšší vstupní úrovně pro používání jazyka.
|
||||
Podporuje také \uv{literate programming} a \uv{reproducible research}, tedy že Org soubory mohou obsahovat plně funkční bloky s~kódem, které lze hodnotit v~rámci systému, a výstup bloků lze automaticky vkládat přímo do dokumentu. \citep{environment_for_literate_programming}
|
||||
|
||||
\subsection{Troff}
|
||||
Jak popisuje \cite{carsten_dominik} ve svém krátkém technickém popisu, Org-mode umí navrhování, psaní poznámek, hypertextové odkazy, tabulky, seznamy, plánování projektů, GTD, HTML a \LaTeX{}, a to všechno v~čistých textových souborech v~editoru Emacs.
|
||||
|
||||
Troff je jedním z~nejstarších jazyků a předchůdcem jazyka \TeX. Autorem původní verze je Joe Ossanna, po jehož smrti převzal vývoj Brian Kernighan. Samotný Troff je reimplementací a rozšířením původního programu RUNOFF z~operačního systému CTSS. Vznikl za účelem sazby dokumentů na novém operačním systému Unix. \citep{ossanna1977troff}
|
||||
\subsection{reStructuredText}
|
||||
|
||||
Dnes existuje celá řada různých implementací a modernizovaných rozšíření, například Groff\footnote{\url{https://www.gnu.org/software/groff/}}, Heirloom troff\footnote{\url{http://heirloom.sourceforge.net/doctools.html}}, nebo moderní Neatroff\footnote{\url{https://repo.or.cz/neatroff.git}}, který se snaží o~spojení toho nejlepšího ze všech předchozích implementací. Sám Brian Kernighan doporučuje v~soukromé emailové konverzaci použití některé alternativní implementace, které jsou podle Keringhana lepší ve všech směrech.
|
||||
Tento jazyk, známý také jako ReST, je, stejně jako Markdown, zároveň syntaxí i parsovacím systémem syntaxe pro tvorbu dokumentů a webových stránek. Svou oblibu získal hlavně v~komunitě jazyka Python. Ve své dokumentaci\footnote{\url{https://docutils.sourceforge.io/rst.html}} je popisován jako syntaxe pro využití ke psaní \textit{Python docstrings} a dalších druhů dokumentace, která je spolehlivá a jednoduchá. ReST vznikl v~návaznosti na jazyk StructuredText, jenž trpěl mnoha nedostatky. Cílem jazyka reStructuredText je tyto nedostatky opravit a doplnit. \citep{problems_with_structuredtext}
|
||||
|
||||
I~přes vznik mnoha alternativních jazyků, například dříve zmíněného \TeX{}u a \LaTeX{}u, je Troff (Groff) stále hojně využíván v~praxi, zejména u~softwarové dokumentace v~Unixových operačních systémech.
|
||||
S~jazykem se lze setkat u~značné části existujících generátorů statických webových stránek, z~nichž některé jsou zmíněny v~kapitole \ref{kap:paradigmata}.
|
||||
|
Loading…
Reference in New Issue