From 585b609c4efaae01445e53c318f68b14751c3938 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Sun, 23 Jan 2022 17:02:17 +0100 Subject: [PATCH] feat: add latest version of the thesis Signed-off-by: Matej Focko --- backup.tex | 685 ++++ example.bib | 123 + fi-pdflatex.tex | 281 ++ fithesis/locale/fithesis-czech.def | 159 + fithesis/locale/fithesis-english.def | 133 + fithesis/locale/fithesis-slovak.def | 160 + fithesis/locale/mu/fi/fithesis-czech.def | 77 + fithesis/locale/mu/fi/fithesis-english.def | 73 + fithesis/locale/mu/fi/fithesis-slovak.def | 78 + fithesis/locale/mu/fithesis-czech.def | 83 + fithesis/locale/mu/fithesis-english.def | 87 + fithesis/locale/mu/fithesis-slovak.def | 84 + fithesis/logo/mu/fithesis-base-color.pdf | Bin 0 -> 15158 bytes fithesis/logo/mu/fithesis-base.pdf | Bin 0 -> 15988 bytes fithesis/logo/mu/fithesis-fi-color.pdf | Bin 0 -> 11804 bytes fithesis/logo/mu/fithesis-fi.pdf | Bin 0 -> 11626 bytes fithesis/style/fithesis-base.sty | 59 + fithesis/style/mu/fithesis-10.clo | 281 ++ fithesis/style/mu/fithesis-11.clo | 280 ++ fithesis/style/mu/fithesis-12.clo | 257 ++ fithesis/style/mu/fithesis-base.sty | 624 +++ fithesis/style/mu/fithesis-fi.sty | 131 + fithesis3.cls | 588 +++ latexmkrc | 2 + markdown.lua | 4063 ++++++++++++++++++++ markdown.sty | 829 ++++ markdown.tex | 631 +++ t-markdown.tex | 227 ++ 28 files changed, 9995 insertions(+) create mode 100644 backup.tex create mode 100644 example.bib create mode 100644 fi-pdflatex.tex create mode 100644 fithesis/locale/fithesis-czech.def create mode 100644 fithesis/locale/fithesis-english.def create mode 100644 fithesis/locale/fithesis-slovak.def create mode 100644 fithesis/locale/mu/fi/fithesis-czech.def create mode 100644 fithesis/locale/mu/fi/fithesis-english.def create mode 100644 fithesis/locale/mu/fi/fithesis-slovak.def create mode 100644 fithesis/locale/mu/fithesis-czech.def create mode 100644 fithesis/locale/mu/fithesis-english.def create mode 100644 fithesis/locale/mu/fithesis-slovak.def create mode 100644 fithesis/logo/mu/fithesis-base-color.pdf create mode 100644 fithesis/logo/mu/fithesis-base.pdf create mode 100644 fithesis/logo/mu/fithesis-fi-color.pdf create mode 100644 fithesis/logo/mu/fithesis-fi.pdf create mode 100644 fithesis/style/fithesis-base.sty create mode 100644 fithesis/style/mu/fithesis-10.clo create mode 100644 fithesis/style/mu/fithesis-11.clo create mode 100644 fithesis/style/mu/fithesis-12.clo create mode 100644 fithesis/style/mu/fithesis-base.sty create mode 100644 fithesis/style/mu/fithesis-fi.sty create mode 100644 fithesis3.cls create mode 100644 latexmkrc create mode 100644 markdown.lua create mode 100644 markdown.sty create mode 100644 markdown.tex create mode 100644 t-markdown.tex diff --git a/backup.tex b/backup.tex new file mode 100644 index 0000000..ad557ae --- /dev/null +++ b/backup.tex @@ -0,0 +1,685 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% I, the copyright holder of this work, release this work into the +%% public domain. This applies worldwide. In some countries this may +%% not be legally possible; if so: I grant anyone the right to use +%% this work for any purpose, without any conditions, unless such +%% conditions are required by law. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[ + digital, %% The `digital` option enables the default options for the + %% digital version of a document. Replace with `printed` + %% to enable the default options for the printed version + %% of a document. +%% color, %% Uncomment these lines (by removing the %% at the +%% %% beginning) to use color in the digital version of your +%% %% document + table, %% The `table` option causes the coloring of tables. + %% Replace with `notable` to restore plain LaTeX tables. + twoside, %% The `twoside` option enables double-sided typesetting. + %% Use at least 120 g/m² paper to prevent show-through. + %% Replace with `oneside` to use one-sided typesetting; + %% use only if you don’t have access to a double-sided + %% printer, or if one-sided typesetting is a formal + %% requirement at your faculty. + lof, %% The `lof` option prints the List of Figures. Replace + %% with `nolof` to hide the List of Figures. + lot, %% The `lot` option prints the List of Tables. Replace + %% with `nolot` to hide the List of Tables. + %% More options are listed in the user guide at + %% . +]{fithesis3} +%% The following section sets up the locales used in the thesis. +\usepackage[resetfonts]{cmap} %% We need to load the T2A font encoding +\usepackage[T1,T2A]{fontenc} %% to use the Cyrillic fonts with Russian texts. +\usepackage[ + main=english, %% By using `czech` or `slovak` as the main locale + %% instead of `english`, you can typeset the thesis + %% in either Czech or Slovak, respectively. + english, german, russian, czech, slovak %% The additional keys allow +]{babel} %% foreign texts to be typeset as follows: +%% +%% \begin{otherlanguage}{german} ... \end{otherlanguage} +%% \begin{otherlanguage}{russian} ... \end{otherlanguage} +%% \begin{otherlanguage}{czech} ... \end{otherlanguage} +%% \begin{otherlanguage}{slovak} ... \end{otherlanguage} +%% +%% For non-Latin scripts, it may be necessary to load additional +%% fonts: +\usepackage{paratype} +\def\textrussian#1{{\usefont{T2A}{PTSerif-TLF}{m}{rm}#1}} +%% +%% The following section sets up the metadata of the thesis. +\thesissetup{ + date = \the\year/\the\month/\the\day, + university = mu, + faculty = fi, + type = bc, + author = Matej Focko, + gender = m, + advisor = {prof. RNDr. Ivana Černá, CSc.}, + title = {Rank-Balanced Trees}, + TeXtitle = {Rank-Balanced Trees}, + keywords = {algorithms, trees, rank, balanced trees, ...}, + TeXkeywords = {algorithms, trees, rank, balanced trees, \ldots}, + abstract = {% + This is the abstract of my thesis, which can + + span multiple paragraphs. + }, + thanks = {% + These are the acknowledgements for my thesis, which can + + span multiple paragraphs. + }, + bib = example.bib, + %% Uncomment the following line (by removing the %% at the + %% beginning) and replace `assignment.pdf` with the filename + %% of your scanned thesis assignment. +%% assignment = assignment.pdf, +} +\usepackage{makeidx} %% The `makeidx` package contains +\makeindex %% helper commands for index typesetting. +%% These additional packages are used within the document: +\usepackage{paralist} %% Compact list environments +\usepackage{amsmath} %% Mathematics +\usepackage{amsthm} +\usepackage{amsfonts} +\usepackage{url} %% Hyperlinks +\usepackage{markdown} %% Lightweight markup +\usepackage{tabularx} %% Tables +\usepackage{tabu} +\usepackage{booktabs} +\usepackage{listings} %% Source code highlighting +\lstset{ + basicstyle = \ttfamily, + identifierstyle = \color{black}, + keywordstyle = \color{blue}, + keywordstyle = {[2]\color{cyan}}, + keywordstyle = {[3]\color{olive}}, + stringstyle = \color{teal}, + commentstyle = \itshape\color{magenta}, + breaklines = true, +} +\usepackage{floatrow} %% Putting captions above tables +\floatsetup[table]{capposition=top} +\begin{document} +\chapter*{Introduction} +\addcontentsline{toc}{chapter}{Introduction} + +Theses are rumoured to be the capstones of education, so I decided +to write one of my own. If all goes well, I will soon have a +diploma under my belt. Wish me luck! + +\begin{otherlanguage}{czech} +Říká se, že závěrečné práce jsou vyvrcholením studia a tak jsem se +rozhodl jednu také napsat. Pokud vše půjde podle plánu, odnesu si +na konci semestru diplom. Držte mi palce! +\end{otherlanguage} + +\begin{otherlanguage}{slovak} +Hovorí sa, že záverečné práce sú vyvrcholením štúdia a tak som sa +rozhodol jednu tiež napísať. Ak všetko pôjde podľa plánu, odnesiem +si na konci semestra diplom. Držte mi palce! +\end{otherlanguage} + +\begin{otherlanguage}{german} +Man munkelt, dass die Dissertation die Krönung der Ausbildung ist. +Deshalb habe ich mich beschlossen meine eigene zu schreiben. Wenn +alles gut geht, bekomme ich bald ein Diplom. Wünsch mir Glück! +\end{otherlanguage} + +\begin{otherlanguage}{russian}\textrussian{% +Говорят, что тезис -- это кульминация обучения. Поэтому я и решил +написать собственный тезис. Если всё сработает по плану, я скоро +получу диплом. Желайте мне удачи! +}\end{otherlanguage} + +\chapter{Using lightweight markup} +\shorthandoff{-} +\begin{markdown*}{% + hybrid, + definitionLists, + footnotes, + inlineFootnotes, + hashEnumerators, + fencedCode, + citations, + citationNbsps, + pipeTables, + tableCaptions, +} + +If you decide that \LaTeX{} is too wordy for some parts of your +document, there are [packages](https://www.ctan.org/pkg/markdown +"Markdown") that allow you to use more lightweight markup next +to it. + + ![logo](fithesis/logo/mu/fithesis-base.pdf "The logo of the + Masaryk University") + +| Right | Left | Default | Center | +|------:|:-----|---------|:------:| +| 12 | 12 | 12 | 12 | +| 123 | 123 | 123 | 123 | +| 1 | 1 | 1 | 1 | + +: This is a table with different types of alignment. + +This is a bullet list. Unlike numbered lists, bulleted lists +contain an **unordered** set of bullet points. When a bullet point +contains multiple paragraphs, the list is typeset as follows: + + * The first item of a bullet list + + that spans several paragraphs, + * the second item of a bullet list, + * the third item of a bullet list. + +When none of the bullet points contains multiple paragraphs, the +list has a more compact form: + + * The first item of a bullet list, + * the second item of a bullet list, + * the third item of a bullet list. + +Unlike a bulleted list, a numbered list implies chronology or +ordering of the bullet points. When a bullet point +contains multiple paragraphs, the list is typeset as follows: + + 1. The first item of an ordered list + + that spans several paragraphs, + 2. the second item of an ordered list, + 3. the third item of an ordered list. + #. If you are feeling lazy, + #. you can use hash enumerators as well. + +When none of the bullet points contains multiple paragraphs, the +list has a more compact form: + + 6. The first item of an ordered list, + 7. the second item of an ordered list, + 8. the third item of an ordered list. + +Definition lists are used to provide definitions of terms. When +a definition contains multiple paragraphs, the list is typeset +as follows: + +Term 1 + +: Definition 1 + +*Term 2* + +: Definition 2 + + Some code, part of Definition 2 + + Third paragraph of Definition 2. + +When none of the bullet points contains multiple paragraphs, the +list has a more compact form: + +Term 1 +: Definition 1 +*Term 2* +: Definition 2 + +Block quotations are used to include an excerpt from an external +document in way that visually clearly separates the excerpt from +the rest of the work: + +> This is the first level of quoting. +> +> > This is nested blockquote. +> +> Back to the first level. + +Footnotes are used to include additional information to the +document that are not necessary for the understanding of the main +text. Here is a footnote reference^[Here is the footnote.] and +another.[^longnote] + +[^longnote]: Here's one with multiple blocks. + + Subsequent paragraphs are indented to show that they +belong to the previous footnote. + + Some code + + The whole paragraph can be indented, or just the first + line. In this way, multi-paragraph footnotes work like + multi-paragraph list items. + +Citations are used to provide bibliographical references to other +documents. This is a regular citation~[@borgman03, p. 123]. This is +an in-text citation: @borgman03\. You can also cite several authors +at once using both regular~[see @borgman03, p. 123; @greenberg98, +sec. 3.2; and @thanh01] and in-text citations: @borgman03 [p.123; +@greenberg98, sec. 3.2; @thanh01]. + +Code blocks are used to include source code listings into the +document: + + #include + #include + #include + #include + // This is a comment + int main(int argc, char **argv) + { + while (--c > 1 && !fork()); + sleep(c = atoi(v[c])); + printf("%d\n", c); + wait(0); + return 0; + } + +There is an alternative syntax for code blocks that allows you to +specify additional information, +such as the language of the source +code. This information can be used for syntax highlighting: + +``` sh +#!/bin/sh +fac() { + if [ "$1" -leq 1 ]; then + echo 1 + else + echo $(("$1" * fac $(("$1" - 1)))) + fi +} +``` + +~~~~~~ Ruby +# Here's a way to empty an array. +joe = [ 'eggs.', 'some', 'break', 'to', 'Have' ] +print(joe.pop, " ") while joe.size > 0 +print "\n" +~~~~~~ + +\end{markdown*} +\shorthandon{-} + +\chapter{These are} +\section{the available} +\subsection{sectioning} +\subsubsection{commands.} +\paragraph{Paragraphs and} +\subparagraph{subparagraphs are available as well.} +Inside the text, you can also use unnumbered lists, +\begin{itemize} + \item such as + \item this one + \begin{itemize} + \item and they can be nested as well. + \item[>>] You can even turn the bullets into something fancier, + \item[\S] if you so desire. + \end{itemize} +\end{itemize} +Numbered lists are +\begin{enumerate} + \item very + \begin{enumerate} + \item similar + \end{enumerate} +\end{enumerate} +and so are description lists: +\begin{description} + \item[Description list] + A list of terms with a description of each term +\end{description} +The spacing of these lists is geared towards paragraphs of text. +For lists of words and phrases, the \textsf{paralist} package +offers commands +\begin{compactitem} + \item that + \begin{compactitem} + \item are + \begin{compactitem} + \item better + \begin{compactitem} + \item suited + \end{compactitem} + \end{compactitem} + \end{compactitem} +\end{compactitem} +\begin{compactenum} + \item to + \begin{compactenum} + \item this + \begin{compactenum} + \item kind of + \begin{compactenum} + \item content. + \end{compactenum} + \end{compactenum} + \end{compactenum} +\end{compactenum} +The \textsf{amsthm} package provides the commands necessary for the +typesetting of mathematical definitions, theorems, lemmas and +proofs. + +%% We will define several mathematical sectioning commands. +\newtheorem{theorem}{Theorem}[section] %% The numbering of theorems + %% will be reset after each section. +\newtheorem{lemma}[theorem]{Lemma} %% The numbering of lemmas +\newtheorem{corollary}[theorem]{Corollary} %% and corollaries will + %% share the counter with theorems. +\theoremstyle{definition} +\newtheorem{definition}{Definition} +\theoremstyle{remark} +\newtheorem*{remark}{Remark} + +\begin{theorem} + This is a theorem that offers a profound insight into the + mathematical sectioning commands. +\end{theorem} +\begin{theorem}[Another theorem] + This is another theorem. Unlike the first one, this theorem has + been endowed with a name. +\end{theorem} +\begin{lemma} + Let us suppose that $x^2+y^2=z^2$. Then + \begin{equation} + \biggl\langle u\biggm|\sum_{i=1}^nF(e_i,v)e_i\biggr\rangle + =F\biggl(\sum_{i=1}^n\langle e_i|u\rangle e_i,v\biggr). + \end{equation} +\end{lemma} +\begin{proof} + $\nabla^2 f(x,y)=\frac{\partial^2f}{\partial x^2}+ + \frac{\partial^2f}{\partial y^2}$. +\end{proof} +\begin{corollary} + This is a corollary. +\end{corollary} +\begin{remark} + This is a remark. +\end{remark} + +\chapter{Floats and references} +\begin{figure} + \begin{center} + %% PNG and JPG images can be inserted into the document as well, + %% but their resolution needs to be adequate. The minimum is + %% about 100 pixels per 1 centimeter or 300 pixels per 1 inch. + %% That means that a JPG or PNG image typeset at 4 × 4 cm should + %% be 400 × 400 px large at the bare minimum. + %% + %% The optimum is about 250 pixels per 1 centimeter or 600 + %% pixels per 1 inch. That means that a JPG or PNG image typeset + %% at 4 × 4 cm should be 1000 × 1000 px large or larger. + \includegraphics[width=4cm]{fithesis/logo/mu/fithesis-base.pdf} + \end{center} + \caption{The logo of the Masaryk University at 40\,mm} + \label{fig:mulogo1} +\end{figure} + +\begin{figure} + \begin{center} + \begin{minipage}{.66\textwidth} + \includegraphics[width=\textwidth]{fithesis/logo/mu/fithesis-base.pdf} + \end{minipage} + \begin{minipage}{.33\textwidth} + \includegraphics[width=\textwidth]{fithesis/logo/mu/fithesis-base.pdf} \\ + \includegraphics[width=\textwidth]{fithesis/logo/mu/fithesis-base.pdf} + \end{minipage} + \end{center} + \caption{The logo of the Masaryk University at $\frac23$ and + $\frac13$ of text width} + \label{fig:mulogo2} +\end{figure} + +\begin{table} + \begin{tabularx}{\textwidth}{lllX} + \toprule + Day & Min Temp & Max Temp & Summary \\ + \midrule + Monday & $13^{\circ}\mathrm{C}$ & $21^\circ\mathrm{C}$ & A + clear day with low wind and no adverse current advisories. \\ + Tuesday & $11^{\circ}\mathrm{C}$ & $17^\circ\mathrm{C}$ & A + trough of low pressure will come from the northwest. \\ + Wednesday & $10^{\circ}\mathrm{C}$ & + $21^\circ\mathrm{C}$ & Rain will spread to all parts during the + morning. \\ + \bottomrule + \end{tabularx} + \caption{A weather forecast} + \label{tab:weather} +\end{table} + +The logo of the Masaryk University is shown in Figure +\ref{fig:mulogo1} and Figure \ref{fig:mulogo2} at pages +\pageref{fig:mulogo1} and \pageref{fig:mulogo2}. The weather +forecast is shown in Table \ref{tab:weather} at page +\pageref{tab:weather}. The following chapter is Chapter +\ref{chap:matheq} and starts at page \pageref{chap:matheq}. +Items \ref{item:star1}, \ref{item:star2}, and +\ref{item:star3} are starred in the following list: +\begin{compactenum} + \item some text + \item some other text + \item $\star$ \label{item:star1} + \begin{compactenum} + \item some text + \item $\star$ \label{item:star2} + \item some other text + \begin{compactenum} + \item some text + \item some other text + \item yet another piece of text + \item $\star$ \label{item:star3} + \end{compactenum} + \item yet another piece of text + \end{compactenum} + \item yet another piece of text +\end{compactenum} +If your reference points to a place that has not yet been typeset, +the \verb"\ref" command will expand to \textbf{??} during the first +run of +\texttt{pdflatex \jobname.tex} +and a second run is going to be needed for the references to +resolve. With online services -- such as Overleaf -- this is +performed automatically. + +\chapter{Mathematical equations} +\label{chap:matheq} +\TeX{} comes pre-packed with the ability to typeset inline +equations, such as $\mathrm{e}^{ix}=\cos x+i\sin x$, and display +equations, such as \[ + \mathbf{A}^{-1} = \begin{bmatrix} + a & b \\ c & d \\ + \end{bmatrix}^{-1} = + \frac{1}{\det(\mathbf{A})} \begin{bmatrix} + \,\,\,d & \!\!-b \\ -c & \,a \\ + \end{bmatrix} = + \frac{1}{ad - bc} \begin{bmatrix} + \,\,\,d & \!\!-b \\ -c & \,a \\ + \end{bmatrix}. +\] \LaTeX{} defines the automatically numbered \texttt{equation} +environment: +\begin{equation} + \gamma Px = PAx = PAP^{-1}Px. +\end{equation} +The package \textsf{amsmath} provides several additional +environments that can be used to typeset complex equations: +\begin{enumerate} + \item An equation can be spread over multiple lines using the + \texttt{multline} environment: + \begin{multline} + a + b + c + d + e + f + b + c + d + e + f + b + c + d + e + +f \\ + + f + g + h + i + j + k + l + m + n + o + p + q + \end{multline} + + \item Several aligned equations can be typeset using the + \texttt{align} environment: + \begin{align} + a + b &= c + d \\ + u &= v + w + x \\[1ex] + i + j + k + l &= m + \end{align} + + \item The \texttt{alignat} environment is similar to + \texttt{align}, but it doesn't insert horizontal spaces between + the individual columns: + \begin{alignat}{2} + a + b + c &+ d & &= 0 \\ + e &+ f + g & &= 5 + \end{alignat} + + \item Much like chapter, sections, tables, figures, or list + items, equations -- such as \eqref{eq:first} and + \eqref{eq:mine} -- can also be labeled and referenced: + \begin{alignat}{4} + b_{11}x_1 &+ b_{12}x_2 & &+ b_{13}x_3 & & & + &= y_1, \label{eq:first} \\ + b_{21}x_1 &+ b_{22}x_2 & & & &+ b_{24}x_4 & + &= y_2. \tag{My equation} \label{eq:mine} + \end{alignat} + + \item The \texttt{gather} environment makes it possible to + typeset several equations without any alignment: + \begin{gather} + \psi = \psi\psi, \\ + \eta = \eta\eta\eta\eta\eta\eta, \\ + \theta = \theta. + \end{gather} + + \item Several cases can be typeset using the \texttt{cases} + environment: + \begin{equation} + |y| = \begin{cases} + \phantom-y & \text{if }z\geq0, \\ + -y & \text{otherwise}. + \end{cases} + \end{equation} +\end{enumerate} +For the complete list of environments and commands, consult the +\textsf{amsmath} package manual\footnote{ + See \url{http://mirrors.ctan.org/macros/latex/required/amslatex/math/amsldoc.pdf}. + The \texttt{\textbackslash url} command is provided by the + package \textsf{url}. +}. + +\chapter{\textnormal{We \textsf{have} \texttt{several} \textsc{fonts} + \textit{at} \textbf{disposal}}} +The serified roman font is used for the main body of the text. +\textit{Italics are typically used to denote emphasis or +quotations.} \texttt{The teletype font is typically used for source +code listings.} The \textbf{bold}, \textsc{small-caps} and +\textsf{sans-serif} variants of the base roman font can be used to +denote specific types of information. + +\tiny We \scriptsize can \footnotesize also \small change \normalsize +the \large font \Large size, \LARGE although \huge it \Huge +is \huge usually \LARGE not \Large necessary.\normalsize + +A wide variety of mathematical fonts is also available, such as: \[ + \mathrm{ABC}, \mathcal{ABC}, \mathbf{ABC}, \mathsf{ABC}, + \mathit{ABC}, \mathtt{ABC} +\] By loading the \textsf{amsfonts} packages, several additional +fonts will become available: \[ + \mathfrak{ABC}, \mathbb{ABC} +\] Many other mathematical fonts are available\footnote{ + See \url{http://tex.stackexchange.com/a/58124/70941}. +}. + +\chapter{Inserting the bibliography} +After linking a bibliography data\-base files to the document using +the \verb"\"\texttt{thesis\discretionary{-}{}{}setup\{bib\discretionary{=}{=}{=}% +\{\textit{file1},\textit{file2},\,\ldots\,\}\}} command, you can +start citing the entries. This is just dummy text +\parencite{borgman03} lightly sprinkled with citations +\parencite[p.~123]{greenberg98}. Several sources can be cited at +once: \cite{borgman03,greenberg98,thanh01}. +\citetitle{greenberg98} was written by \citeauthor{greenberg98} in +\citeyear{greenberg98}. We can also produce \textcite{greenberg98}% +\ or %% Let us define a compound command: +\def\citeauthoryear#1{(\textcite{#1},~\citeyear{#1})}% +\citeauthoryear{greenberg98}% +. The full bibliographic citation is: +\emph{\fullcite{greenberg98}}. We can easily insert a bibliographic +citation into the footnote\footfullcite{greenberg98}. + +The \verb"\nocite" command will not generate any +output\nocite{muni}, but it will insert its arguments into +the bibliography. The \verb"\nocite{*}" command will insert all the +records in the bibliography database file into the bibliography. +Try uncommenting the command +%% \nocite{*} +and watch the bibliography section come apart at the seams. + +When typesetting the document for the first time, citing a +\texttt{work} will expand to [\textbf{work}] and the +\verb"\printbibliography" command will produce no output. It is now +necessary to generate the bibliography by running \texttt{biber +\jobname.bcf} from the command line and then by typesetting the +document again twice. During the first run, the bibliography +section and the citations will be typeset, and in the second run, +the bibliography section will appear in the table of contents. + +The \texttt{biber} command needs to be executed from within the +directory, where the \LaTeX\ source file is located. In Windows, +the command line can be opened in a directory by holding down the +\textsf{Shift} key and by clicking the right mouse button while +hovering the cursor over a directory. Select the \textsf{Open +Command Window Here} option in the context menu that opens shortly +afterwards. + +With online services -- such as Overleaf -- or when using an +automatic tool -- such as \LaTeX MK -- all commands are executed +automatically. When you omit the \verb"\printbibliography" command, +its location will be decided by the template. + + \printbibliography[heading=bibintoc] %% Print the bibliography. + +\chapter{Inserting the index} +After using the \verb"\makeindex" macro and loading the +\texttt{makeidx} package that provides additional indexing +commands, index entries can be created by issuing the \verb"\index" +command. \index{dummy text|(}It is possible to create ranged index +entries, which will encompass a span of text.\index{dummy text|)} +To insert complex typographic material -- such as $\alpha$ +\index{alpha@$\alpha$} or \TeX{} \index{TeX@\TeX} -- +into the index, you need to specify a text string, which will +determine how the entry will be sorted. It is also possible to +create hierarchal entries. \index{vehicles!trucks} +\index{vehicles!speed cars} + +After typesetting the document, it is necessary to generate the +index by running +\begin{center}% + \texttt{texindy -I latex -C utf8 -L }$\langle$\textit{locale}% + $\rangle$\texttt{ \jobname.idx} +\end{center} +from the command line, where $\langle$\textit{locale}$\rangle$ +corresponds to the main locale of your thesis -- such as +\texttt{english}, and then typesetting the document again. + +The \texttt{texindy} command needs to be executed from within the +directory, where the \LaTeX\ source file is located. In Windows, +the command line can be opened in a directory by holding down the +\textsf{Shift} key and by clicking the right mouse button while +hovering the cursor over a directory. Select the \textsf{Open Command +Window Here} option in the context menu that opens shortly +afterwards. + +With online services -- such as Overleaf -- the commands are +executed automatically, although the locale may be erroneously +detected, or the \texttt{makeindex} tool (which is only able to +sort entries that contain digits and letters of the English +alphabet) may be used instead of \texttt{texindy}. In either case, +the index will be ill-sorted. + + \makeatletter\thesis@blocks@clear\makeatother + \phantomsection %% Print the index and insert it into the + \addcontentsline{toc}{chapter}{\indexname} %% table of contents. + \printindex + +\appendix %% Start the appendices. +\chapter{An appendix} +Here you can insert the appendices of your thesis. + +\end{document} diff --git a/example.bib b/example.bib new file mode 100644 index 0000000..60b8b9e --- /dev/null +++ b/example.bib @@ -0,0 +1,123 @@ +% The example bibliographical entries below were borrowed from the +% package documentation. + +% BORGMAN, Christine L., 2003. From Gutenberg to the global information +% infrastructure: access to information in the networked world. First. Cambridge +% (Mass): The MIT Press. ISBN 0-262-52345-0 [xviii, 324] + +@BOOK{borgman03, + author = {Borgman, Christine L.}, + date = {2003}, + title = {From Gutenberg to the global information infrastructure}, + subtitle = {access to information in the networked world}, + edition = {1}, % should not be stated + location = {Cambridge (Mass)}, + publisher = {The MIT Press}, + pagetotal = {xviii, 324}, + isbn = {0-262-52345-0}, + langid = {english} +} + +% GREENBERG, David, 1998. Camel drivers and gatecrashers: quality control in +% the digital research library. In: HAWKINS, B.L et al. (eds.). The mirage of +% continuity: reconfiguring academic information resources for the 21st +% century. Washington (D.C.): Council on Library and Information Resources; +% Association of American Universities, pp. 105–116 + +@INCOLLECTION{greenberg98, + crossref = {mirage98}, + author = {Greenberg, David}, + title = {Camel drivers and gatecrashers}, + subtitle = {quality control in the digital research library}, + pages = {105-116}, +} + +@COLLECTION{mirage98, + title = {The mirage of continuity}, + subtitle = {reconfiguring academic information + resources for the 21st century}, + editor = {Hawkins, B.L and Battin, P}, + date = {1998}, + location = {Washington (D.C.)}, + publisher = {Council on Library and Information Resources; + Association of American Universities}, + langid = {english} +} + +% LYNCH, C., 2005. Where do we go from here?: the next decade for digital +% libraries. DLib Magazine [online]. Vol. 11, no. 7/8 [visited on 2005-08-15]. +% ISSN 1082-9873. Available from: +% http://www.dlib.org/dlib/july05/lynch/07lynch.html + +@ARTICLE{lynch05, + crossref = {dlib}, + author = {Lynch, C.}, + title = {Where do we go from here?}, + subtitle = {the next decade for digital libraries}, + url = {http://www.dlib.org/dlib/july05/lynch/07lynch.html}, + urldate = {2005-08-15} +} + +@PERIODICAL{dlib, + journaltitle = {DLib Magazine}, + date = {2005}, + volume = {11}, + number = {7/8}, + issn = {1082-9873}, + langid = {english}, +} + +% HÀN, Thé Thành, 2001. Micro-typographic extensions to the TEX type- setting +% system [online]. Brno [visited on 2016-12-09]. Available from: +% http://www.pragma-ade.nl/pdftex/thesis.pdf. PhD thesis. The Faculty of +% Informatics, Masaryk University. + +@PHDTHESIS{thanh01, + author = {Hàn Thé, Thành}, + title = {Micro-typographic extensions to the \TeX{} typesetting system}, + date = {2001}, + institution = {The Faculty of Informatics, Masaryk University}, + location = {Brno}, + url = {http://www.pragma-ade.nl/pdftex/thesis.pdf}, + urldate = {2016-12-09}, + langid = {english} +} + +% SHANNON, Claude Elwood, 1940. A symbolic analysis of relay and switching +% circuits. Available from DOI: 1721.1/11173. Master’s thesis. Massachusetts +% Institute of Technology. + +@MASTERSTHESIS{shannon40, + author = {Shannon, Claude Elwood}, + title = {A symbolic analysis of relay and switching circuits}, + date = {1940}, + institution = {Massachusetts Institute of Technology}, + langid = {english}, + doi = {1721.1/11173}, +} + +% EHLINGER JR., Philip Charles. Device for the treatment of hiccups. US. +% US Patent, 7062320. + +@PATENT{ehlinger06, + author = {Ehlinger Jr., Philip Charles}, + title = {Device for the treatment of hiccups}, + type = {US Patent}, + location = {US}, + date = {2006}, + number = {7062320}, + langid = {english} +} + +% Masaryk University, 1996–2009 [online]. Brno: Masaryk University +% [visited on 2016-12-09]. Available from: https://www.muni.cz/en. + +@ONLINE{muni, + publisher = {Masaryk University}, + title = {Masaryk University}, + date = {1996/2009}, + url = {https://www.muni.cz/en}, + urldate = {2016-12-09}, + location = {Brno}, + langid = {english} +} diff --git a/fi-pdflatex.tex b/fi-pdflatex.tex new file mode 100644 index 0000000..8819b27 --- /dev/null +++ b/fi-pdflatex.tex @@ -0,0 +1,281 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% I, the copyright holder of this work, release this work into the +%% public domain. This applies worldwide. In some countries this may +%% not be legally possible; if so: I grant anyone the right to use +%% this work for any purpose, without any conditions, unless such +%% conditions are required by law. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\documentclass[ + printed, %% The `digital` option enables the default options for the + %% digital version of a document. Replace with `printed` + %% to enable the default options for the printed version + %% of a document. + color, %% Uncomment these lines (by removing the %% at the + %% beginning) to use color in the digital version of your + %% document + table, %% The `table` option causes the coloring of tables. + %% Replace with `notable` to restore plain LaTeX tables. + oneside, %% The `twoside` option enables double-sided typesetting. + %% Use at least 120 g/m² paper to prevent show-through. + %% Replace with `oneside` to use one-sided typesetting; + %% use only if you don’t have access to a double-sided + %% printer, or if one-sided typesetting is a formal + %% requirement at your faculty. + nolof, %% The `lof` option prints the List of Figures. Replace + %% with `nolof` to hide the List of Figures. + nolot, %% The `lot` option prints the List of Tables. Replace + %% with `nolot` to hide the List of Tables. + %% More options are listed in the user guide at + %% . +]{fithesis3} +%% The following section sets up the locales used in the thesis. +\usepackage[resetfonts]{cmap} %% We need to load the T2A font encoding +\usepackage[T1,T2A]{fontenc} %% to use the Cyrillic fonts with Russian texts. +\usepackage[ + main=english, %% By using `czech` or `slovak` as the main locale + %% instead of `english`, you can typeset the thesis + %% in either Czech or Slovak, respectively. + english, german, russian, czech, slovak %% The additional keys allow +]{babel} %% foreign texts to be typeset as follows: +%% +%% \begin{otherlanguage}{german} ... \end{otherlanguage} +%% \begin{otherlanguage}{russian} ... \end{otherlanguage} +%% \begin{otherlanguage}{czech} ... \end{otherlanguage} +%% \begin{otherlanguage}{slovak} ... \end{otherlanguage} +%% +%% For non-Latin scripts, it may be necessary to load additional +%% fonts: +\usepackage{paratype} +\def\textrussian#1{{\usefont{T2A}{PTSerif-TLF}{m}{rm}#1}} +%% +%% The following section sets up the metadata of the thesis. +\thesissetup{ + date = \the\year/\the\month/\the\day, + university = mu, + faculty = fi, + type = bc, + author = Matej Focko, + gender = m, + advisor = {prof. RNDr. Ivana Černá, CSc.}, + title = {Rank-Balanced Trees}, + TeXtitle = {Rank-Balanced Trees}, + keywords = {algorithms, data structures, rank, trees, balanced trees, study material, visualization, ...}, + TeXkeywords = {algorithms, data structures, rank, trees, balanced trees, study material, visualization, \ldots}, + abstract = {% + In the thesis I demonstrate usage of rank for implementing balanced binary-search trees + and algorithms related to a specific rank-balanced tree, the weak AVL tree. First part + of the thesis consists of description of the rank-balanced tree followed by comparison + to other balanced trees that can be implemented using rank, diagrams and pseudo-codes related + to weak AVL tree. I also present an implementation of weak AVL tree in Python, tested with + property-based testing. The final part of the thesis is web-page that allows performing operations + on the weak AVL tree with animations and step-by-step walk-through of pseudo-code. + }, + thanks = {% + \textit{TBD} + }, + bib = example.bib, + %% Uncomment the following line (by removing the %% at the + %% beginning) and replace `assignment.pdf` with the filename + %% of your scanned thesis assignment. +%% assignment = assignment.pdf, +} +\usepackage{makeidx} %% The `makeidx` package contains +\makeindex %% helper commands for index typesetting. +%% These additional packages are used within the document: +\usepackage{paralist} %% Compact list environments +\usepackage{amsmath} %% Mathematics +\usepackage{amsthm} +\usepackage{amsfonts} +\usepackage{url} %% Hyperlinks +\usepackage{markdown} %% Lightweight markup +\usepackage{tabularx} %% Tables +\usepackage{tabu} +\usepackage{booktabs} +\usepackage[vlined,longend,linesnumbered]{algorithm2e} +\usepackage{listings} %% Source code highlighting +\lstset{ + basicstyle = \ttfamily, + identifierstyle = \color{black}, + keywordstyle = \color{blue}, + keywordstyle = {[2]\color{cyan}}, + keywordstyle = {[3]\color{olive}}, + stringstyle = \color{teal}, + commentstyle = \itshape\color{magenta}, + breaklines = true, +} +\usepackage{floatrow} %% Putting captions above tables +\floatsetup[table]{capposition=top} + +\SetKwProg{Fn}{function}{ is}{end} +\SetKwProg{Proc}{procedure}{ is}{end} + +\begin{document} +\chapter*{Introduction} +\addcontentsline{toc}{chapter}{Introduction} + +\textit{TBD} + +\chapter{Rank-balanced trees} + +In comparison to nodes in binary search trees, nodes in rank-balanced trees contain one more information and that is \textit{rank}. Each type of tree that can be implemented using this representation, e.g. red-black, 2-3-4, AVL or WAVL, has specific set of rules that ensure the resulting tree is balanced. + +\section{Terminology related to rank-balanced trees} + +In the text and pseudo-codes I adopt these functions or properties: +\begin{itemize} + \item $r(x)$ or $x.rank$ returns rank of a node; in case of $r(x)$ there is a special case: $r(nil) = -1$ + \item $parent(x)$ or $x.parent$ returns parent of a node; analogically for left and right children of a node + \item \textit{rank-difference} of \textit{x} is $r(parent(x)) - r(x)$ + \item $x$ is an \textit{i-child} if its rank-difference is $i$ + \item $x$ is an $(i, j)$ node if its left and right children have $i$ and $j$ rank-differences respectively +\end{itemize} + +\section{Weak AVL trees} + +Based on rank rules for implementing red-black tree and AVL tree, \textit{Haeupler et al.} present new rank rule: \\ \textbf{Weak AVL Rule}: All rank differences are 1 or 2, and every leaf has rank 0. + +\chapter{Operations on weak AVL trees} + +\section{Using bottom-up rebalancing} + +\subsection{\texttt{insert}} +Inserting values into WAVL tree is equivalent to inserting values into regular binary-search tree, which is followed up by rebalancing that ensures rank rules hold. + +Rebalancing of the tree is equivalent to rebalancing of AVL tree and is executed in a following way: + +As a first step it is checked whether parent of a current (inserted) node is (0, 1) or (1, 0)-node, i.e. parent node was leaf node before. In that case parent node's rank is promoted and the process continues by parent node becoming the current node. (After the initial check we can encounter such nodes as a result of promoting the parent.) + +Once the node does not have a parent (is root node) or is not (0, 1) or (1, 0) node, we might end up in a situation where the rank rule does not hold \textbf{and} we cannot fix it with promotion. + +\begin{algorithm} +\Proc{$\texttt{insert}(tree, key)$}{ + $insertedNode \gets Node(key)$\; + \If{$tree.root = nil$}{ + $tree.root \gets insertedNode$\; + \Return\; + } + \BlankLine + $parent \gets \texttt{findParentNode}(key, tree.root)$\; + $insertedNode.parent \gets parent$\; + \BlankLine + \eIf{$key < parent.key$}{ + $parent.left \gets insertedNode$\; + }{ + $parent.right \gets insertedNode$\; + } + \BlankLine + $\texttt{bottomUpInsertRebalance}(tree, insertedNode)$\; +} +\caption{Insert operation on binary search tree} +\end{algorithm} + +\begin{algorithm} +\Fn{$\texttt{findParentNode}(key, node)$}{ + $childNode \gets node$\; + \BlankLine + \While{$childNode \neq nil$}{ + $node \gets childNode$\; + \eIf{$key < node.key$}{ + $childNode \gets node.left$\; + }{ + $childNode \gets node.right$\; + } + } + \BlankLine + \Return{node}\; +} +\caption{Helper function that returns parent for newly inserted node} +\end{algorithm} + +Bottom-up rebalancing after the insertion into WAVL tree is identical to AVL tree insertion: + +\begin{algorithm} +\Proc{$\texttt{bottomUpInsertRebalance}(tree, node)$}{ + \While{$node.parent \neq nil \land (node.parent\, is\, (0, 1)\, or\, (1, 0))$}{ + $\texttt{promote}(node.parent)$\; + $node \gets node.parent$\; + } + \BlankLine + \lIf{$node.parent = nil$}{\Return} + \BlankLine + $rotatingAroundRoot \gets node.parent.parent = nil$\; + $newRoot \gets node.parent$\; + \BlankLine + \lIf{$node\, is\, not\, \text{0-child}$}{\Return} + \BlankLine + \eIf{$node = node.parent.left$}{ + $newRoot \gets \texttt{fix0Child}(node, node.right, \texttt{rotateLeft}, \texttt{rotateRight})$\; + }{ + $newRoot \gets \texttt{fix0Child}(node, node.left, \texttt{rotateRight}, \texttt{rotateLeft})$\; + } + \BlankLine + \lIf{$rotatingAroundRoot$}{$tree.root \gets newRoot$} +} +\caption{Algorithm containing bottom-up rebalancing after insertion} +\end{algorithm} + +\begin{algorithm} +\Proc{$\texttt{fix0Child}(x, y, rotateToLeft, rotateToRight)$}{ + $z \gets x.parent$\; + $newRoot \gets x.parent$\; + \BlankLine + \uIf{$y = nil \lor y\, is\, \text{2-child}$}{ + $newRoot \gets rotateToRight(z)$\; + \BlankLine + $\texttt{demote}(z)$\; + } + \ElseIf{$y\, is\, \text{1-child}$}{ + $rotateToLeft(x)$\; + $newRoot \gets rotateToRight(z)$\; + \BlankLine + $\texttt{promote}(y)$\; + $\texttt{demote}(x)$\; + $\texttt{demote}(z)$\; + } + \BlankLine + \Return{$newRoot$}\; +} +\caption{Generic algorithm for fixing 0-child after insertion} +\end{algorithm} + + +\subsection{\texttt{delete}} + +\section{Using top-down rebalancing} +\subsection{\texttt{insert}} +\subsection{\texttt{delete}} + +\section{Using rebalancing with promotion} +\subsection{\texttt{insert}} +\subsection{\texttt{delete}} + +\section{Implementation of other balanced trees using rank} + +To show that using rank is mostly an implementation detail, I will describe AVL and red-black tree implementation using rank. + +\subsection{AVL tree} + +\textbf{AVL Rule}: Every node is (1, 1) or (1, 2). \\ +In case of AVL trees rank represents height. + +\textit{TBD} + +\subsection{Red-black tree} + +\textbf{Red-Black Rule}: All rank differences are 0 or 1, and no parent of a 0-child is a 0-child. \\ +In case of red-black trees rank represents number of black nodes on a path from the node to a leaf (excluding the node itself). Based on that we can discuss the \textit{Red-Black Rule} in detail: +\begin{enumerate} + \item \textit{All rank differences are 0 or 1} \\ + in case the current node is black the rank difference must be 1, since we have one more black node on the path from the parent to the leaves than from the current node \\ + in case the current node is red the rank difference must be 0, since from parent the count of black nodes on the path to leaves has not changed \\ + and finally all other differences are invalid, since by adding a node to the beginning of a path to the leaf we can either add red node (0-child) or black node (1-child), i.e. there is one more black node on the path or not which implies the change can be only 0 or 1 + \item \textit{no parent of a 0-child is a 0-child} \\ + this part of the rule ensures there are no two consecutive red nodes (0-child node is equivalent to red node) +\end{enumerate} + +\appendix %% Start the appendices. +\chapter{An appendix} +Here you can insert the appendices of your thesis. + +\end{document} diff --git a/fithesis/locale/fithesis-czech.def b/fithesis/locale/fithesis-czech.def new file mode 100644 index 0000000..a3c08d5 --- /dev/null +++ b/fithesis/locale/fithesis-czech.def @@ -0,0 +1,159 @@ +%% +%% This is file `fithesis-czech.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% czech.dtx (with options: `base') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/fithesis-czech.def}[2017/07/09] + +\gdef\thesis@czech@gender@koncovka{% + \ifthesis@woman a\fi} + +\gdef\thesis@czech@csquotesStyle{german} + +\gdef\thesis@czech@universityName{Název univerzity} +\gdef\thesis@czech@facultyName{Název fakulty} +\gdef\thesis@czech@assignment{% + Na tomto místě se v~tištěné práci nachází oficiální podepsané + zadání práce.} +\gdef\thesis@czech@declaration{Text prohlášení ...} + +\gdef\thesis@czech@spring{jaro} +\gdef\thesis@czech@fall{podzim} +\gdef\thesis@czech@semester{% + \thesis@{czech@\thesis@season} \thesis@seasonYear} +\gdef\thesis@czech@formattedDate{{% + \thesis@day. + \newcount\@month\expandafter\@month\thesis@month\relax + \ifnum\@month=1% + ledna + \else\ifnum\@month=2% + února + \else\ifnum\@month=3% + března + \else\ifnum\@month=4% + dubna + \else\ifnum\@month=5% + května + \else\ifnum\@month=6% + června + \else\ifnum\@month=7% + července + \else\ifnum\@month=8% + srpna + \else\ifnum\@month=9% + září + \else\ifnum\@month=10% + října + \else\ifnum\@month=11% + listopadu + \else\ifnum\@month=12% + prosince + \else + <> + \fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi + \thesis@year}} + +\gdef\thesis@czech@authorSignature{% + Podpis autor\ifthesis@woman ky\else a\fi} +\gdef\thesis@czech@fieldTitle{Obor} +\gdef\thesis@czech@advisorTitle{Vedoucí práce} +\gdef\thesis@czech@authorTitle{Autor} +\gdef\thesis@czech@abstractTitle{Shrnutí} +\gdef\thesis@czech@keywordsTitle{Klíčová slova} +\gdef\thesis@czech@thanksTitle{Poděkování} +\gdef\thesis@czech@declarationTitle{Prohlášení} +\gdef\thesis@czech@idTitle{ID} +\gdef\thesis@czech@typeName@sempaper{Seminární práce} +\gdef\thesis@czech@typeName@bachelors{Bakalářská práce} +\gdef\thesis@czech@typeName@masters{Diplomová práce} +\gdef\thesis@czech@typeName@proposal{Teze závěrečné práce} +\gdef\thesis@czech@typeName@doctoral{Disertační práce} +\gdef\thesis@czech@typeName@rigorous{Rigorózní práce} +\gdef\thesis@czech@typeName{% + \ifx\thesis@type\thesis@sempaper + \thesis@czech@typeName@sempaper + \else\ifx\thesis@type\thesis@bachelors + \thesis@czech@typeName@bachelors + \else\ifx\thesis@type\thesis@masters + \thesis@czech@typeName@masters + \else\ifx\thesis@type\thesis@proposal + \thesis@czech@typeName@proposal + \else\ifx\thesis@type\thesis@doctoral + \thesis@czech@typeName@doctoral + \else\ifx\thesis@type\thesis@rigorous + \thesis@czech@typeName@rigorous + \else + <>% + \fi\fi\fi\fi\fi\fi} +\gdef\thesis@czech@typeName@akuzativ@sempaper{Seminární práci} +\gdef\thesis@czech@typeName@akuzativ@bachelors{Bakalářskou práci} +\gdef\thesis@czech@typeName@akuzativ@masters{Diplomovou práci} +\gdef\thesis@czech@typeName@akuzativ@proposal{Tezi závěrečné práce} +\gdef\thesis@czech@typeName@akuzativ@doctoral{Disertační práci} +\gdef\thesis@czech@typeName@akuzativ@rigorous{Rigorózní práci} +\gdef\thesis@czech@typeName@akuzativ{% + \ifx\thesis@type\thesis@sempaper + \thesis@czech@typeName@akuzativ@sempaper + \else\ifx\thesis@type\thesis@bachelors + \thesis@czech@typeName@akuzativ@bachelors + \else\ifx\thesis@type\thesis@masters + \thesis@czech@typeName@akuzativ@masters + \else\ifx\thesis@type\thesis@proposal + \thesis@czech@typeName@akuzativ@proposal + \else\ifx\thesis@type\thesis@doctoral + \thesis@czech@typeName@akuzativ@doctoral + \else\ifx\thesis@type\thesis@rigorous + \thesis@czech@typeName@akuzativ@rigorous + \else + <>% + \fi\fi\fi\fi\fi\fi} +\endinput +%% +%% End of file `fithesis-czech.def'. diff --git a/fithesis/locale/fithesis-english.def b/fithesis/locale/fithesis-english.def new file mode 100644 index 0000000..fd5e63d --- /dev/null +++ b/fithesis/locale/fithesis-english.def @@ -0,0 +1,133 @@ +%% +%% This is file `fithesis-english.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% english.dtx (with options: `base') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/fithesis-english.def}[2017/09/08] + +\gdef\thesis@english@universityName{University name} +\gdef\thesis@english@facultyName{Faculty name} +\gdef\thesis@english@assignment{% + This is where a copy of the official signed thesis assignment + is located in the printed version of the document.} +\gdef\thesis@english@declaration{Declaration text ...} + +\gdef\thesis@english@csquotesStyle{english} + +\gdef\thesis@english@spring{Spring} +\gdef\thesis@english@fall{Fall} +\gdef\thesis@english@semester{% + \thesis@{english@\thesis@season} \thesis@seasonYear} +\gdef\thesis@english@formattedDate{{% + \thesis@day. + \newcount\@month\expandafter\@month\thesis@month\relax + \ifnum\@month=1% + January + \else\ifnum\@month=2% + February + \else\ifnum\@month=3% + March + \else\ifnum\@month=4% + April + \else\ifnum\@month=5% + May + \else\ifnum\@month=6% + June + \else\ifnum\@month=7% + July + \else\ifnum\@month=8% + August + \else\ifnum\@month=9% + September + \else\ifnum\@month=10% + October + \else\ifnum\@month=11% + November + \else\ifnum\@month=12% + December + \else + <> + \fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi + \thesis@year}} + +\gdef\thesis@english@authorSignature{Author's signature} +\gdef\thesis@english@fieldTitle{Field of study} +\gdef\thesis@english@advisorTitle{Advisor} +\gdef\thesis@english@authorTitle{Author} +\gdef\thesis@english@abstractTitle{Abstract} +\gdef\thesis@english@keywordsTitle{Keywords} +\gdef\thesis@english@thanksTitle{Acknowledgements} +\gdef\thesis@english@declarationTitle{Declaration} +\gdef\thesis@english@idTitle{ID} +\gdef\thesis@english@typeName@sempaper{Seminar Paper} +\gdef\thesis@english@typeName@bachelors{Bachelor's Thesis} +\gdef\thesis@english@typeName@masters{Master's Thesis} +\gdef\thesis@english@typeName@proposal{Thesis Proposal} +\gdef\thesis@english@typeName@doctoral{Doctoral Thesis} +\gdef\thesis@english@typeName@rigorous{Rigorous Thesis} +\gdef\thesis@english@typeName{% + \ifx\thesis@type\thesis@sempaper + \thesis@english@typeName@sempaper + \else\ifx\thesis@type\thesis@bachelors + \thesis@english@typeName@bachelors + \else\ifx\thesis@type\thesis@masters + \thesis@english@typeName@masters + \else\ifx\thesis@type\thesis@proposal + \thesis@english@typeName@proposal + \else\ifx\thesis@type\thesis@doctoral + \thesis@english@typeName@doctoral + \else\ifx\thesis@type\thesis@rigorous + \thesis@english@typeName@rigorous + \else + <>% + \fi\fi\fi\fi\fi\fi} +\endinput +%% +%% End of file `fithesis-english.def'. diff --git a/fithesis/locale/fithesis-slovak.def b/fithesis/locale/fithesis-slovak.def new file mode 100644 index 0000000..18fc009 --- /dev/null +++ b/fithesis/locale/fithesis-slovak.def @@ -0,0 +1,160 @@ +%% +%% This is file `fithesis-slovak.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% slovak.dtx (with options: `base') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/fithesis-slovak.def}[2017/07/09] + +\gdef\thesis@slovak@gender@koncovka{% + \ifthesis@woman a\fi} + +\gdef\thesis@slovak@csquotesStyle{german} + +\gdef\thesis@slovak@universityName{Názov univerzity} +\gdef\thesis@slovak@facultyName{Názov fakulty} +\gdef\thesis@slovak@assignment{% + Na tomto mieste sa v~tlačenej práci nachádza oficiálne + podpísané zadanie práce.} +\gdef\thesis@slovak@declaration{Text vyhlásenie ...} + +\gdef\thesis@slovak@spring{jar} +\gdef\thesis@slovak@fall{jeseň} +\gdef\thesis@slovak@semester{% + \thesis@{slovak@\thesis@season} \thesis@seasonYear} +\gdef\thesis@slovak@formattedDate{{% + \thesis@day. + \newcount\@month\expandafter\@month\thesis@month\relax + \ifnum\@month=1% + januára + \else\ifnum\@month=2% + februára + \else\ifnum\@month=3% + marca + \else\ifnum\@month=4% + apríla + \else\ifnum\@month=5% + mája + \else\ifnum\@month=6% + júna + \else\ifnum\@month=7% + júla + \else\ifnum\@month=8% + augusta + \else\ifnum\@month=9% + septembra + \else\ifnum\@month=10% + októbra + \else\ifnum\@month=11% + novembra + \else\ifnum\@month=12% + decembra + \else + <> + \fi\fi\fi\fi\fi\fi + \fi\fi\fi\fi\fi\fi + \thesis@year}} + +\gdef\thesis@slovak@authorSignature{% + Podpis autor\ifthesis@woman ky\else a\fi} +\gdef\thesis@slovak@fieldTitle{Odbor} +\gdef\thesis@slovak@advisorTitle{Vedúci práce} +\gdef\thesis@slovak@authorTitle{Autor} +\gdef\thesis@slovak@abstractTitle{Zhrnutie} +\gdef\thesis@slovak@keywordsTitle{Kľúčové slová} +\gdef\thesis@slovak@thanksTitle{Poďakovanie} +\gdef\thesis@slovak@declarationTitle{Vyhlásenie} +\gdef\thesis@slovak@idTitle{ID} +\gdef\thesis@slovak@typeName@sempaper{Seminárna práca} +\gdef\thesis@slovak@typeName@bachelors{Bakalárska práca} +\gdef\thesis@slovak@typeName@masters{Diplomová práca} +\gdef\thesis@slovak@typeName@proposal{Tézy záverečnej práce} +\gdef\thesis@slovak@typeName@doctoral{Dizertačná práca} +\gdef\thesis@slovak@typeName@rigorous{Rigorózna práca} +\gdef\thesis@slovak@typeName{% + \ifx\thesis@type\thesis@sempaper + \thesis@slovak@typeName@sempaper + \else\ifx\thesis@type\thesis@bachelors + \thesis@slovak@typeName@bachelors + \else\ifx\thesis@type\thesis@masters + \thesis@slovak@typeName@masters + \else\ifx\thesis@type\thesis@proposal + \thesis@slovak@typeName@proposal + \else\ifx\thesis@type\thesis@doctoral + \thesis@slovak@typeName@doctoral + \else\ifx\thesis@type\thesis@rigorous + \thesis@slovak@typeName@rigorous + \else + <>% + \fi\fi\fi\fi\fi\fi} +\gdef\thesis@slovak@typeName@akuzativ@sempaper{Seminárnu prácu} +\gdef\thesis@slovak@typeName@akuzativ@bachelors{Bakalársku prácu} +\gdef\thesis@slovak@typeName@akuzativ@masters{Diplomovú prácu} +\gdef\thesis@slovak@typeName@akuzativ@proposal{Tézy záverečnej práce} +\gdef\thesis@slovak@typeName@akuzativ@doctoral{Dizertačnú prácu} +\gdef\thesis@slovak@typeName@akuzativ@rigorous{Rigoróznu prácu} +\gdef\thesis@slovak@typeName@akuzativ{% + \ifx\thesis@type\thesis@sempaper + \thesis@slovak@typeName@akuzativ@sempaper + \else\ifx\thesis@type\thesis@bachelors + \thesis@slovak@typeName@akuzativ@bachelors + \else\ifx\thesis@type\thesis@masters + \thesis@slovak@typeName@akuzativ@masters + \else\ifx\thesis@type\thesis@proposal + \thesis@slovak@typeName@akuzativ@proposal + \else\ifx\thesis@type\thesis@doctoral + \thesis@slovak@typeName@akuzativ@doctoral + \else\ifx\thesis@type\thesis@rigorous + \thesis@slovak@typeName@akuzativ@rigorous + \else + <>% + \fi\fi\fi\fi\fi\fi} + +\endinput +%% +%% End of file `fithesis-slovak.def'. diff --git a/fithesis/locale/mu/fi/fithesis-czech.def b/fithesis/locale/mu/fi/fithesis-czech.def new file mode 100644 index 0000000..068b901 --- /dev/null +++ b/fithesis/locale/mu/fi/fithesis-czech.def @@ -0,0 +1,77 @@ +%% +%% This is file `mu/fi/fithesis-czech.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% czech.dtx (with options: `mu/fi') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/mu/fi/fithesis-czech.def}[2016/05/25] + +\gdef\thesis@czech@facultyName{Fakulta informatiky} +\gdef\thesis@czech@assignment{% + \ifthesis@digital@ + Na tomto místě se v~tištěné práci nachází oficiální podepsané + zadání práce a~prohlášení autora školního díla. + \else + Místo tohoto listu vložte kopie oficiálního podepsaného zadání + práce a~prohlášení autora školního díla. + \fi} +\gdef\thesis@czech@declaration{% + Prohlašuji, že tato \thesis@lower{czech@typeName} je mým + původním autorským dílem, které jsem vypracoval% + \thesis@czech@gender@koncovka\ samostatně. Všechny zdroje, + prameny a~literaturu, které jsem při vypracování + používal\thesis@czech@gender@koncovka\ nebo z~nich + čerpal\thesis@czech@gender@koncovka, v~práci řádně cituji + s~uvedením úplného odkazu na příslušný zdroj.} + +\gdef\thesis@czech@advisorSignature{Podpis vedoucího} +\gdef\thesis@czech@typeName@proposal{Teze disertační práce} +\gdef\thesis@czech@typeName@akuzativ@proposal{Tezi disertační práce} +\endinput +%% +%% End of file `mu/fi/fithesis-czech.def'. diff --git a/fithesis/locale/mu/fi/fithesis-english.def b/fithesis/locale/mu/fi/fithesis-english.def new file mode 100644 index 0000000..8c94a29 --- /dev/null +++ b/fithesis/locale/mu/fi/fithesis-english.def @@ -0,0 +1,73 @@ +%% +%% This is file `mu/fi/fithesis-english.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% english.dtx (with options: `mu/fi') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/mu/fi/fithesis-english.def}[2016/05/25] + +\gdef\thesis@english@facultyName{Faculty of Informatics} +\gdef\thesis@english@assignment{Replace this page with a copy + of the official signed thesis assignment and a copy of the + Statement of an Author.} +\gdef\thesis@english@assignment{% + \ifthesis@digital@ + This is where a copy of the official signed thesis assignment + and a copy of the Statement of an Author is located in the + printed version of the document. + \else + Replace this page with a copy of the official signed thesis + assignment and a copy of the Statement of an Author. + \fi} + +\gdef\thesis@english@advisorSignature{Signature of Thesis + \thesis@english@advisorTitle} +\gdef\thesis@english@typeName@proposal{Ph.D. Thesis Proposal} +\endinput +%% +%% End of file `mu/fi/fithesis-english.def'. diff --git a/fithesis/locale/mu/fi/fithesis-slovak.def b/fithesis/locale/mu/fi/fithesis-slovak.def new file mode 100644 index 0000000..7ce5cd2 --- /dev/null +++ b/fithesis/locale/mu/fi/fithesis-slovak.def @@ -0,0 +1,78 @@ +%% +%% This is file `mu/fi/fithesis-slovak.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% slovak.dtx (with options: `mu/fi') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% + +\ProvidesFile{fithesis/locale/mu/fi/fithesis-slovak.def}[2016/05/25] + +\gdef\thesis@slovak@facultyName{Fakulta informatiky} +\gdef\thesis@slovak@assignment{% + \ifthesis@digital@ + Na tomto mieste sa v~tlačenej práci nachádza oficiálne + podpísané zadanie práce a vyhlásenie autora školského diela. + \else + Namiesto tejto stránky vložte kópiu oficiálneho podpísaného + zadania práce a vyhlásenie autora školského diela. + \fi} +\gdef\thesis@slovak@declaration{% + Vyhlasujem, že táto \thesis@lower{slovak@typeName} je mojím + pôvodným autorským dielom, ktoré som vypracoval% + \thesis@slovak@gender@koncovka\ samostatne. Všetky zdroje, + pramene a literatúru, ktoré som pri vypracovaní + používal\thesis@slovak@gender@koncovka\ alebo z~nich + čerpal\thesis@slovak@gender@koncovka, v~práci riadne citujem + s~uvedením úplného odkazu na príslušný zdroj.} + +\gdef\thesis@slovak@advisorSignature{Podpis vedúceho} +\gdef\thesis@slovak@typeName@proposal{Tézy dizertačnej práce} +\gdef\thesis@slovak@typeName@akuzativ@proposal{Tézy dizertačnej práce} +\endinput +%% +%% End of file `mu/fi/fithesis-slovak.def'. diff --git a/fithesis/locale/mu/fithesis-czech.def b/fithesis/locale/mu/fithesis-czech.def new file mode 100644 index 0000000..1985cdc --- /dev/null +++ b/fithesis/locale/mu/fithesis-czech.def @@ -0,0 +1,83 @@ +%% +%% This is file `mu/fithesis-czech.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% czech.dtx (with options: `mu') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/mu/fithesis-czech.def}[2017/07/09] + +\gdef\thesis@czech@universityName{Masarykova univerzita} +\gdef\thesis@czech@declaration{Prohlašuji, že jsem + \thesis@lower{czech@typeName@akuzativ} zpracoval% + \thesis@czech@gender@koncovka\ samostatně a~% + použil\thesis@czech@gender@koncovka\ jen prameny + uvedené v~seznamu literatury.} +\gdef\thesis@czech@assignment{% + \ifthesis@blocks@assignment@hideIfDigital@ + \ifthesis@digital@ + Na tomto místě se v~tištěné práci nachází oficiální podepsané + zadání práce. + \else + Místo tohoto listu vložte kopii oficiálního podepsaného zadání + práce. + \fi + \else + Nastavte pomocí klíče <> název PDF souboru + s~oficiálním podepsaným zadáním práce. + \fi} + +\gdef\thesis@czech@bib@title{Bibliografický záznam} +\gdef\thesis@czech@bib@pages{str} +\global\let\thesis@czech@bib@author\thesis@czech@authorTitle +\gdef\thesis@czech@bib@thesisTitle{Název práce} +\global\let\thesis@czech@bib@advisor\thesis@czech@advisorTitle + +\gdef\thesis@czech@idTitle{UČO} +\endinput +%% +%% End of file `mu/fithesis-czech.def'. diff --git a/fithesis/locale/mu/fithesis-english.def b/fithesis/locale/mu/fithesis-english.def new file mode 100644 index 0000000..22bc922 --- /dev/null +++ b/fithesis/locale/mu/fithesis-english.def @@ -0,0 +1,87 @@ +%% +%% This is file `mu/fithesis-english.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% english.dtx (with options: `mu') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/mu/fithesis-english.def}[2017/07/09] +\gdef\thesis@english@universityName{Masaryk University} +\gdef\thesis@english@declaration{% + Hereby I declare that this paper is my original authorial work, + which I have worked out on my own. All sources, references, and + literature used or excerpted during elaboration of this work are + properly cited and listed in complete reference to the due source.} + +\gdef\thesis@english@assignment{% + \ifthesis@digital@ + \else + \fi} +\gdef\thesis@english@assignment{% + \ifthesis@blocks@assignment@hideIfDigital@ + \ifthesis@digital@ + This is where a copy of the official signed thesis assignment + is located in the printed version of the document. + \else + Replace this page with a copy of the official signed thesis + assignment. + \fi + \else + Set the PDF document containing the official signed thesis + assignment using the <> key. + \fi} + +\gdef\thesis@english@bib@title{Bibliographic record} +\gdef\thesis@english@bib@pages{p} +\global\let\thesis@english@bib@author\thesis@english@authorTitle +\gdef\thesis@english@bib@thesisTitle{Title of Thesis} +\gdef\thesis@english@bib@advisor{Supervisor} + +\gdef\thesis@english@idTitle{UČO} +\endinput +%% +%% End of file `mu/fithesis-english.def'. diff --git a/fithesis/locale/mu/fithesis-slovak.def b/fithesis/locale/mu/fithesis-slovak.def new file mode 100644 index 0000000..9a2023f --- /dev/null +++ b/fithesis/locale/mu/fithesis-slovak.def @@ -0,0 +1,84 @@ +%% +%% This is file `mu/fithesis-slovak.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% slovak.dtx (with options: `mu') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/locale/mu/fithesis-slovak.def}[2018/02/11] + +\gdef\thesis@slovak@universityName{Masarykova univerzita} +\gdef\thesis@slovak@declaration{% + Vyhlasujem, že som predloženú \thesis@lower{% + slovak@typeName@akuzativ} vypracoval% + \thesis@slovak@gender@koncovka\ samostatne len s~použitím + uvedenej literatúry a prameňov.} +\gdef\thesis@slovak@assignment{% + \ifthesis@blocks@assignment@hideIfDigital@ + \ifthesis@digital@ + Na tomto mieste sa v~tlačenej práci nachádza oficiálne + podpísané zadanie práce. + \else + Namiesto tejto stránky vložte kópiu oficiálneho podpísaného + zadania práce. + \fi + \else + Nastavte pomocou kľúča <> názov súboru PDF + s~oficiálnym podpísaným zadaním práce. + \fi} + +\gdef\thesis@slovak@bib@title{Bibliografický záznam} +\gdef\thesis@slovak@bib@pages{str} +\global\let\thesis@slovak@bib@author\thesis@slovak@authorTitle +\gdef\thesis@slovak@bib@thesisTitle{Názov práce} +\global\let\thesis@slovak@bib@advisor\thesis@slovak@advisorTitle + +\gdef\thesis@slovak@idTitle{UČO} + +\endinput +%% +%% End of file `mu/fithesis-slovak.def'. diff --git a/fithesis/logo/mu/fithesis-base-color.pdf b/fithesis/logo/mu/fithesis-base-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..55219b58f630a09794faead56d8d50b831cc53a8 GIT binary patch literal 15158 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 TE1*CQ9##%SDk@23Da8K^gM^0) literal 0 HcmV?d00001 diff --git a/fithesis/logo/mu/fithesis-base.pdf b/fithesis/logo/mu/fithesis-base.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7a4b8558ff13c12143b232879db92faf8fb8342c GIT binary patch literal 15988 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 V_rDAZce*g(|;lcm_ literal 0 HcmV?d00001 diff --git a/fithesis/logo/mu/fithesis-fi-color.pdf b/fithesis/logo/mu/fithesis-fi-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..da97bdfe2a1e585c01efa5dc0b6bde244f7f442f GIT binary patch literal 11804 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 literal 0 HcmV?d00001 diff --git a/fithesis/style/fithesis-base.sty b/fithesis/style/fithesis-base.sty new file mode 100644 index 0000000..0964860 --- /dev/null +++ b/fithesis/style/fithesis-base.sty @@ -0,0 +1,59 @@ +%% +%% This is file `fithesis-base.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% base.dtx +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{fithesis/style/fithesis-base}[2018/02/11] +\DeclareRobustCommand\em + {\@nomath\em \ifdim \fontdimen\@ne\font >\z@ + \eminnershape \else \itshape \fi}% +\endinput +%% +%% End of file `fithesis-base.sty'. diff --git a/fithesis/style/mu/fithesis-10.clo b/fithesis/style/mu/fithesis-10.clo new file mode 100644 index 0000000..1b60f2e --- /dev/null +++ b/fithesis/style/mu/fithesis-10.clo @@ -0,0 +1,281 @@ +%% +%% This is file `fithesis-10.clo', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% base.dtx (with options: `opt,10pt') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/style/mu/fithesis-10.clo}[2016/05/15] + +\renewcommand{\normalsize}{\fontsize\@xpt{12}\selectfont +\abovedisplayskip 10\p@ plus2\p@ minus5\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ +\let\@listi\@listI} + +\renewcommand{\small}{\fontsize\@ixpt{11}\selectfont +\abovedisplayskip 8.5\p@ plus3\p@ minus4\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus2\p@ +\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@ +\def\@listi{\leftmargin\leftmargini +\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@ +\itemsep \parsep}} + +\renewcommand{\footnotesize}{\fontsize\@viiipt{9.5}\selectfont +\abovedisplayskip 6\p@ plus2\p@ minus4\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus\p@ +\belowdisplayshortskip 3\p@ plus\p@ minus2\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 3\p@ plus\p@ minus\p@\parsep 2\p@ plus\p@ minus\p@ +\itemsep \parsep}} + +\renewcommand{\scriptsize}{\fontsize\@viipt{8pt}\selectfont} +\renewcommand{\tiny}{\fontsize\@vpt{6pt}\selectfont} +\renewcommand{\large}{\fontsize\@xiipt{14pt}\selectfont} +\renewcommand{\Large}{\fontsize\@xivpt{18pt}\selectfont} +\renewcommand{\LARGE}{\fontsize\@xviipt{22pt}\selectfont} +\renewcommand{\huge}{\fontsize\@xxpt{25pt}\selectfont} +\renewcommand{\Huge}{\fontsize\@xxvpt{30pt}\selectfont} + + +\def\thesis@titlePage@normalsize{\fontsize\@xiipt{14.5}% +\selectfont\abovedisplayskip 12\p@ plus3\p@ minus7\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\let\@listi\@listI} + +\def\thesis@titlePage@small{\fontsize\@xipt{13.6}\selectfont +\abovedisplayskip 11\p@ plus3\p@ minus6\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\parsep 4.5\p@ plus2\p@ minus\p@ + \itemsep \parsep + \topsep 9\p@ plus3\p@ minus5\p@}} + +\def\thesis@titlePage@footnotesize{\fontsize\@xpt{12}\selectfont +\abovedisplayskip 10\p@ plus2\p@ minus5\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@ +\itemsep \parsep}} + +\def\thesis@titlePage@scriptsize{\fontsize\@viiipt{9.5pt}\selectfont} +\def\thesis@titlePage@tiny{\fontsize\@vipt{7pt}\selectfont} +\def\thesis@titlePage@large{\fontsize\@xivpt{18pt}\selectfont} +\def\thesis@titlePage@Large{\fontsize\@xviipt{22pt}\selectfont} +\def\thesis@titlePage@LARGE{\fontsize\@xxpt{25pt}\selectfont} +\def\thesis@titlePage@huge{\fontsize\@xxvpt{30pt}\selectfont} +\def\thesis@titlePage@Huge{\fontsize\@xxvpt{30pt}\selectfont} + +\let\@normalsize\normalsize +\normalsize + +\if@twoside + \oddsidemargin 0.75in + \evensidemargin 0.4in + \marginparwidth 0pt +\else + \oddsidemargin 0.75in + \evensidemargin 0.75in + \marginparwidth 0pt +\fi +\marginparsep 10pt + +\topmargin 0.4in + +\headheight 20pt +\headsep 10pt +\topskip 10pt +\footskip 30pt + +\textheight = 43\baselineskip +\advance\textheight by \topskip +\textwidth 5.0truein +\columnsep 10pt +\columnseprule 0pt + +\footnotesep 6.65pt +\skip\footins 9pt plus 4pt minus 2pt +\floatsep 12pt plus 2pt minus 2pt +\textfloatsep 20pt plus 2pt minus 4pt +\intextsep 12pt plus 2pt minus 2pt +\dblfloatsep 12pt plus 2pt minus 2pt +\dbltextfloatsep 20pt plus 2pt minus 4pt + +\@fptop 0pt plus 1fil +\@fpsep 8pt plus 2fil +\@fpbot 0pt plus 1fil +\@dblfptop 0pt plus 1fil +\@dblfpsep 8pt plus 2fil +\@dblfpbot 0pt plus 1fil +\marginparpush 5pt + +\parskip 0pt plus 1pt +\partopsep 2pt plus 1pt minus 1pt + +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty + +\def\@makechapterhead#1{{% + \setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \Large \ChapFont + \ifnum + \c@secnumdepth >\m@ne + \par\nobreak + \vskip 10\p@ + \thechapter{} \space + \fi #1\par + \nobreak + \vskip 20\p@}} + +\def\@makeschapterhead#1{{% + \setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \Large \ChapFont #1\par + \nobreak + \vskip 20\p@}} + +\def\chapter{% + \clearpage + \thispagestyle{plain} + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth + >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}{\protect + \numberline{\thechapter}\bfseries #1} + \else + \addcontentsline{toc}{chapter}{\bfseries #1} + \fi + \chaptermark{#1}% + \addtocontents{lof}% + {\protect\addvspace{4\p@}} + \addtocontents{lot}% + {\protect\addvspace{4\p@}} + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +} + +\def\section{\@startsection{section}{1}{\z@}{% + -3.5ex plus-1ex minus-.2ex}{2.3ex plus.2ex}{% + \reset@font\large\bfseries}} +\def\subsection{\@startsection{subsection}{2}{\z@}{% + -3.25ex plus-1ex minus-.2ex}{1.5ex plus.2ex}{% + \reset@font\normalsize\bfseries}} +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{% + -3.25ex plus-1ex minus-.2ex}{1.5ex plus.2ex}{% + \reset@font\normalsize}} +\def\paragraph{\@startsection{paragraph}{4}{\z@}{% + 3.25ex plus1ex minus.2ex}{-1em}{% + \reset@font\normalsize\bfseries}} +\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}{% + 3.25ex plus1ex minus.2ex}{-1em}{% + \reset@font\normalsize\bfseries}} + +\leftmargini 2.5em +\leftmarginii 2.2em % > \labelsep + width of '(m)' +\leftmarginiii 1.87em % > \labelsep + width of 'vii.' +\leftmarginiv 1.7em % > \labelsep + width of 'M.' +\leftmarginv 1em +\leftmarginvi 1em + +\leftmargin\leftmargini +\labelsep .5em +\labelwidth\leftmargini\advance\labelwidth-\labelsep + +\def\@listI{\leftmargin\leftmargini \parsep 4\p@ plus2\p@ minus\p@ +\topsep 8\p@ plus2\p@ minus4\p@ +\itemsep 4\p@ plus2\p@ minus\p@} + +\let\@listi\@listI +\@listi + +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii\advance\labelwidth-\labelsep + \topsep 4\p@ plus2\p@ minus\p@ + \parsep 2\p@ plus\p@ minus\p@ + \itemsep \parsep} + +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii\advance\labelwidth-\labelsep + \topsep 2\p@ plus\p@ minus\p@ + \parsep \z@ \partopsep\p@ plus\z@ minus\p@ + \itemsep \topsep} + +\def\@listiv{\leftmargin\leftmarginiv + \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} + +\def\@listv{\leftmargin\leftmarginv + \labelwidth\leftmarginv\advance\labelwidth-\labelsep} + +\def\@listvi{\leftmargin\leftmarginvi + \labelwidth\leftmarginvi\advance\labelwidth-\labelsep} +\endinput +%% +%% End of file `fithesis-10.clo'. diff --git a/fithesis/style/mu/fithesis-11.clo b/fithesis/style/mu/fithesis-11.clo new file mode 100644 index 0000000..8e9a7ba --- /dev/null +++ b/fithesis/style/mu/fithesis-11.clo @@ -0,0 +1,280 @@ +%% +%% This is file `fithesis-11.clo', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% base.dtx (with options: `opt,11pt') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/style/mu/fithesis-11.clo}[2016/05/15] + +\renewcommand{\normalsize}{\fontsize\@xipt{14}\selectfont +\abovedisplayskip 11\p@ plus3\p@ minus6\p@ +\belowdisplayskip \abovedisplayskip +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\let\@listi\@listI} + +\renewcommand{\small}{\fontsize\@xpt{12}\selectfont +\abovedisplayskip 10\p@ plus2\p@ minus5\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini +\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@ +\itemsep \parsep}} + +\renewcommand{\footnotesize}{\fontsize\@ixpt{11}\selectfont +\abovedisplayskip 8\p@ plus2\p@ minus4\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus\p@ +\belowdisplayshortskip 4\p@ plus2\p@ minus2\p@ +\def\@listi{\leftmargin\leftmargini +\topsep 4\p@ plus2\p@ minus2\p@\parsep 2\p@ plus\p@ minus\p@ +\itemsep \parsep}} + +\renewcommand{\scriptsize}{\fontsize\@viiipt{9.5pt}\selectfont} +\renewcommand{\tiny}{\fontsize\@vipt{7pt}\selectfont} +\renewcommand{\large}{\fontsize\@xiipt{14pt}\selectfont} +\renewcommand{\Large}{\fontsize\@xivpt{18pt}\selectfont} +\renewcommand{\LARGE}{\fontsize\@xviipt{22pt}\selectfont} +\renewcommand{\huge}{\fontsize\@xxpt{25pt}\selectfont} +\renewcommand{\Huge}{\fontsize\@xxvpt{30pt}\selectfont} + + +\def\thesis@titlePage@normalsize{\fontsize\@xiipt{14.5}% +\selectfont\abovedisplayskip 12\p@ plus3\p@ minus7\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\let\@listi\@listI} + +\def\thesis@titlePage@small{\fontsize\@xipt{13.6}\selectfont +\abovedisplayskip 11\p@ plus3\p@ minus6\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\parsep 4.5\p@ plus2\p@ minus\p@ + \itemsep \parsep + \topsep 9\p@ plus3\p@ minus5\p@}} + +\def\thesis@titlePage@footnotesize{\fontsize\@xpt{12}\selectfont +\abovedisplayskip 10\p@ plus2\p@ minus5\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@ +\itemsep \parsep}} + +\def\thesis@titlePage@scriptsize{\fontsize\@viiipt{9.5pt}\selectfont} +\def\thesis@titlePage@tiny{\fontsize\@vipt{7pt}\selectfont} +\def\thesis@titlePage@large{\fontsize\@xivpt{18pt}\selectfont} +\def\thesis@titlePage@Large{\fontsize\@xviipt{22pt}\selectfont} +\def\thesis@titlePage@LARGE{\fontsize\@xxpt{25pt}\selectfont} +\def\thesis@titlePage@huge{\fontsize\@xxvpt{30pt}\selectfont} +\def\thesis@titlePage@Huge{\fontsize\@xxvpt{30pt}\selectfont} + +\let\@normalsize\normalsize +\normalsize + +\if@twoside + \oddsidemargin 0.75in + \evensidemargin 0.4in + \marginparwidth 0pt +\else + \oddsidemargin 0.75in + \evensidemargin 0.75in + \marginparwidth 0pt +\fi +\marginparsep 10pt + +\topmargin 0.4in + +\headheight 20pt +\headsep 10pt +\topskip 10pt +\footskip 30pt + +\textheight = 39\baselineskip +\advance\textheight by \topskip +\textwidth 5.0truein +\columnsep 10pt +\columnseprule 0pt + +\footnotesep 7.7pt +\skip\footins 10pt plus 4pt minus 2pt +\floatsep 12pt plus 2pt minus 2pt +\textfloatsep 20pt plus 2pt minus 4pt +\intextsep 12pt plus 2pt minus 2pt +\dblfloatsep 12pt plus 2pt minus 2pt +\dbltextfloatsep 20pt plus 2pt minus 4pt + +\@fptop 0pt plus 1fil +\@fpsep 8pt plus 2fil +\@fpbot 0pt plus 1fil +\@dblfptop 0pt plus 1fil +\@dblfpsep 8pt plus 2fil +\@dblfpbot 0pt plus 1fil +\marginparpush 5pt + +\parskip 0pt plus 0pt +\partopsep 3pt plus 1pt minus 2pt + +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty + +\def\@makechapterhead#1{{% + \setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \Large \ChapFont + \ifnum + \c@secnumdepth >\m@ne + \par\nobreak + \vskip 10\p@ + \thechapter{} \space + \fi #1\par + \nobreak + \vskip 20\p@}} + +\def\@makeschapterhead#1{{% + \setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \Large \ChapFont #1\par + \nobreak + \vskip 20\p@}} + +\def\chapter{% + \clearpage + \thispagestyle{plain} + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth + >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}{\protect + \numberline{\thechapter}\bfseries #1} + \else + \addcontentsline{toc}{chapter}{\bfseries #1} + \fi + \chaptermark{#1}% + \addtocontents{lof}% + {\protect\addvspace{4\p@}} + \addtocontents{lot}% + {\protect\addvspace{4\p@}} + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +} + +\def\section{\@startsection{section}{1}{\z@}{% + -3.5ex plus-1ex minus-.2ex}{2.3ex plus.2ex}{% + \reset@font\large\bfseries}} +\def\subsection{\@startsection{subsection}{2}{\z@}{% + -3.25ex plus-1ex minus-.2ex}{1.5ex plus.2ex}{% + \reset@font\normalsize\bfseries}} +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{% + -3.25ex plus-1ex minus-.2ex}{1.5ex plus.2ex}{% + \reset@font\normalsize}} +\def\paragraph{\@startsection{paragraph}{4}{\z@}{% + 3.25ex plus1ex minus.2ex}{-1em}{% + \reset@font\normalsize\bfseries}} +\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}{% + 3.25ex plus1ex minus.2ex}{-1em}{% + \reset@font\normalsize\bfseries}} + +\leftmargini 2.5em +\leftmarginii 2.2em % > \labelsep + width of '(m)' +\leftmarginiii 1.87em % > \labelsep + width of 'vii.' +\leftmarginiv 1.7em % > \labelsep + width of 'M.' +\leftmarginv 1em +\leftmarginvi 1em + +\leftmargin\leftmargini +\labelsep .5em +\labelwidth\leftmargini\advance\labelwidth-\labelsep + +\def\@listI{\leftmargin\leftmargini \parsep 4.5\p@ plus2\p@ minus\p@ +\topsep 9\p@ plus3\p@ minus5\p@ +\itemsep 4.5\p@ plus2\p@ minus\p@} + +\let\@listi\@listI +\@listi + +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii\advance\labelwidth-\labelsep + \topsep 4.5\p@ plus2\p@ minus\p@ + \parsep 2\p@ plus\p@ minus\p@ + \itemsep \parsep} + +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii\advance\labelwidth-\labelsep + \topsep 2\p@ plus\p@ minus\p@ + \parsep \z@ \partopsep \p@ plus\z@ minus\p@ + \itemsep \topsep} + +\def\@listiv{\leftmargin\leftmarginiv + \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} + +\def\@listv{\leftmargin\leftmarginv + \labelwidth\leftmarginv\advance\labelwidth-\labelsep} + +\def\@listvi{\leftmargin\leftmarginvi + \labelwidth\leftmarginvi\advance\labelwidth-\labelsep} +\endinput +%% +%% End of file `fithesis-11.clo'. diff --git a/fithesis/style/mu/fithesis-12.clo b/fithesis/style/mu/fithesis-12.clo new file mode 100644 index 0000000..06c4530 --- /dev/null +++ b/fithesis/style/mu/fithesis-12.clo @@ -0,0 +1,257 @@ +%% +%% This is file `fithesis-12.clo', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% base.dtx (with options: `opt,12pt') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesFile{fithesis/style/mu/fithesis-12.clo}[2016/05/15] + +\def\thesis@titlePage@normalsize{\fontsize\@xiipt{14.5}% +\selectfont\abovedisplayskip 12\p@ plus3\p@ minus7\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\let\@listi\@listI} + +\def\thesis@titlePage@small{\fontsize\@xipt{13.6}\selectfont +\abovedisplayskip 11\p@ plus3\p@ minus6\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6.5\p@ plus3.5\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\parsep 4.5\p@ plus2\p@ minus\p@ + \itemsep \parsep + \topsep 9\p@ plus3\p@ minus5\p@}} + +\def\thesis@titlePage@footnotesize{\fontsize\@xpt{12}\selectfont +\abovedisplayskip 10\p@ plus2\p@ minus5\p@ +\belowdisplayskip \abovedisplayskip +\abovedisplayshortskip \z@ plus3\p@ +\belowdisplayshortskip 6\p@ plus3\p@ minus3\p@ +\def\@listi{\leftmargin\leftmargini %% Added 22 Dec 87 +\topsep 6\p@ plus2\p@ minus2\p@\parsep 3\p@ plus2\p@ minus\p@ +\itemsep \parsep}} + +\def\thesis@titlePage@scriptsize{\fontsize\@viiipt{9.5pt}\selectfont} +\def\thesis@titlePage@tiny{\fontsize\@vipt{7pt}\selectfont} +\def\thesis@titlePage@large{\fontsize\@xivpt{18pt}\selectfont} +\def\thesis@titlePage@Large{\fontsize\@xviipt{22pt}\selectfont} +\def\thesis@titlePage@LARGE{\fontsize\@xxpt{25pt}\selectfont} +\def\thesis@titlePage@huge{\fontsize\@xxvpt{30pt}\selectfont} +\def\thesis@titlePage@Huge{\fontsize\@xxvpt{30pt}\selectfont} + +\renewcommand{\normalsize}{\thesis@titlePage@normalsize} +\renewcommand{\small}{\thesis@titlePage@small} +\renewcommand{\footnotesize}{\thesis@titlePage@footnotesize} +\renewcommand{\scriptsize}{\thesis@titlePage@scriptsize} +\renewcommand{\tiny}{\thesis@titlePage@tiny} +\renewcommand{\large}{\thesis@titlePage@large} +\renewcommand{\Large}{\thesis@titlePage@Large} +\renewcommand{\LARGE}{\thesis@titlePage@LARGE} +\renewcommand{\huge}{\thesis@titlePage@huge} +\renewcommand{\Huge}{\thesis@titlePage@Huge} +\let\@normalsize\normalsize +\normalsize + +\if@twoside + \oddsidemargin 0.75in + \evensidemargin 0.4in + \marginparwidth 0pt +\else + \oddsidemargin 0.75in + \evensidemargin 0.75in + \marginparwidth 0pt +\fi +\marginparsep 10pt + +\topmargin 0.4in + +\headheight 20pt +\headsep 10pt +\topskip 10pt +\footskip 30pt + +\textheight = 37\baselineskip +\advance\textheight by \topskip +\textwidth 5.0truein +\columnsep 10pt +\columnseprule 0pt + +\footnotesep 8.4pt +\skip\footins 10.8pt plus 4pt minus 2pt +\floatsep 14pt plus 2pt minus 4pt +\textfloatsep 20pt plus 2pt minus 4pt +\intextsep 14pt plus 4pt minus 4pt +\dblfloatsep 14pt plus 2pt minus 4pt +\dbltextfloatsep 20pt plus 2pt minus 4pt + +\@fptop 0pt plus 1fil +\@fpsep 10pt plus 2fil +\@fpbot 0pt plus 1fil +\@dblfptop 0pt plus 1fil +\@dblfpsep 10pt plus 2fil +\@dblfpbot 0pt plus 1fil +\marginparpush 7pt + +\parskip 0pt plus 0pt +\partopsep 3pt plus 2pt minus 2pt + +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\@beginparpenalty -\@lowpenalty +\@endparpenalty -\@lowpenalty +\@itempenalty -\@lowpenalty + +\def\@makechapterhead#1{{% + \setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \Large \ChapFont + \ifnum + \c@secnumdepth >\m@ne + \par\nobreak + \vskip 10\p@ + \thechapter{} \space + \fi #1\par + \nobreak + \vskip 20\p@}} + +\def\@makeschapterhead#1{{% + \setlength\parindent{\z@}% + \setlength\parskip {\z@}% + \Large \ChapFont #1\par + \nobreak + \vskip 20\p@}} + +\def\chapter{% + \clearpage + \thispagestyle{plain} + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + +\def\@chapter[#1]#2{% + \ifnum \c@secnumdepth + >\m@ne + \refstepcounter{chapter}% + \typeout{\@chapapp\space\thechapter.}% + \addcontentsline{toc}{chapter}{\protect + \numberline{\thechapter}\bfseries #1} + \else + \addcontentsline{toc}{chapter}{\bfseries #1} + \fi + \chaptermark{#1}% + \addtocontents{lof}% + {\protect\addvspace{4\p@}} + \addtocontents{lot}% + {\protect\addvspace{4\p@}} + \if@twocolumn + \@topnewpage[\@makechapterhead{#2}]% + \else + \@makechapterhead{#2}% + \@afterheading + \fi +} + +\def\section{\@startsection{section}{1}{\z@}{% + -3.5ex plus-1ex minus-.2ex}{2.3ex plus.2ex}{% + \reset@font\large\bfseries}} +\def\subsection{\@startsection{subsection}{2}{\z@}{% + -3.25ex plus-1ex minus-.2ex}{1.5ex plus.2ex}{% + \reset@font\normalsize\bfseries}} +\def\subsubsection{\@startsection{subsubsection}{3}{\z@}{% + -3.25ex plus-1ex minus-.2ex}{1.5ex plus.2ex}{% + \reset@font\normalsize}} +\def\paragraph{\@startsection{paragraph}{4}{\z@}{% + 3.25ex plus1ex minus.2ex}{-1em}{% + \reset@font\normalsize\bfseries}} +\def\subparagraph{\@startsection{subparagraph}{4}{\parindent}{% + 3.25ex plus1ex minus.2ex}{-1em}{% + \reset@font\normalsize\bfseries}} + +\leftmargini 2.5em +\leftmarginii 2.2em % > \labelsep + width of '(m)' +\leftmarginiii 1.87em % > \labelsep + width of 'vii.' +\leftmarginiv 1.7em % > \labelsep + width of 'M.' +\leftmarginv 1em +\leftmarginvi 1em + +\leftmargin\leftmargini +\labelsep .5em +\labelwidth\leftmargini\advance\labelwidth-\labelsep + +\def\@listI{\leftmargin\leftmargini \parsep 5\p@ plus2.5\p@ minus\p@ +\topsep 10\p@ plus4\p@ minus6\p@ +\itemsep 5\p@ plus2.5\p@ minus\p@} + +\let\@listi\@listI +\@listi + +\def\@listii{\leftmargin\leftmarginii + \labelwidth\leftmarginii\advance\labelwidth-\labelsep + \topsep 5\p@ plus2.5\p@ minus\p@ + \parsep 2.5\p@ plus\p@ minus\p@ + \itemsep \parsep} + +\def\@listiii{\leftmargin\leftmarginiii + \labelwidth\leftmarginiii\advance\labelwidth-\labelsep + \topsep 2.5\p@ plus\p@ minus\p@ + \parsep \z@ \partopsep \p@ plus\z@ minus\p@ + \itemsep \topsep} + +\def\@listiv{\leftmargin\leftmarginiv + \labelwidth\leftmarginiv\advance\labelwidth-\labelsep} + +\def\@listv{\leftmargin\leftmarginv + \labelwidth\leftmarginv\advance\labelwidth-\labelsep} + +\def\@listvi{\leftmargin\leftmarginvi + \labelwidth\leftmarginvi\advance\labelwidth-\labelsep} +\endinput +%% +%% End of file `fithesis-12.clo'. diff --git a/fithesis/style/mu/fithesis-base.sty b/fithesis/style/mu/fithesis-base.sty new file mode 100644 index 0000000..b2002e7 --- /dev/null +++ b/fithesis/style/mu/fithesis-base.sty @@ -0,0 +1,624 @@ +%% +%% This is file `fithesis-base.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% base.dtx (with options: `base') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\ProvidesPackage{fithesis/style/mu/fithesis-base}[2018/12/25] +\NeedsTeXFormat{LaTeX2e} +\DeclareOption{10pt}{\def\thesis@ptsize{0}} +\DeclareOption{11pt}{\def\thesis@ptsize{1}} +\DeclareOption{12pt}{\def\thesis@ptsize{2}} +\newif\ifthesis@twoside@ +\DeclareOption{oneside}{% + \thesis@twoside@false\@twosidefalse\@mparswitchfalse} +\DeclareOption{twoside}{% + \thesis@twoside@true \@twosidetrue \@mparswitchtrue} +\DeclareOption{onecolumn}{\@twocolumnfalse} +\DeclareOption{twocolumn}{\@twocolumntrue} +\DeclareOption{draft}{\setlength\overfullrule{5pt}} +\DeclareOption{final}{\setlength\overfullrule{0pt}} +\newif\ifthesis@palatino@ +\DeclareOption{palatino}{\thesis@palatino@true} +\DeclareOption{nopalatino}{\thesis@palatino@false} +\newif\ifthesis@color@ +\DeclareOption{monochrome}{\thesis@color@false} +\DeclareOption{color}{\thesis@color@true} +\newif\ifthesis@microtype@ +\DeclareOption{microtype}{\thesis@microtype@true} +\DeclareOption{nomicrotype}{\thesis@microtype@false} +\newif\ifthesis@newtable@ +\DeclareOption{table}{\thesis@newtable@true} +\DeclareOption{oldtable}{\thesis@newtable@false} +\DeclareOption{nolot}{\let\thesis@blocks@lot\relax} +\DeclareOption{lot}{\let\thesis@blocks@lot\listoftables} +\DeclareOption{nolof}{\let\thesis@blocks@lof\relax} +\DeclareOption{lof}{\let\thesis@blocks@lof\listoffigures} +\newif\ifthesis@cover@ +\DeclareOption{nocover}{\thesis@cover@false} +\DeclareOption{cover}{\thesis@cover@true} +\newif\ifthesis@digital@ +\DeclareOption{digital}{% + \ExecuteOptions{color,cover}% + \thesis@digital@true} +\DeclareOption{printed}{% + \ExecuteOptions{monochrome,nocover}% + \thesis@digital@false} +\ExecuteOptions{% + printed,12pt,twoside,final,microtype,palatino,oldtable,lot,lof} +\ProcessOptions* +\thesis@requireLocale{english} +\thesis@require{xcolor} +\thesis@require{graphicx} +\thesis@require{pdfpages} +\thesis@require{keyval} +\thesis@require{ifxetex} +\thesis@require{ifluatex} +\ifthesis@microtype@ + \thesis@require[final,babel]{microtype} +\fi +{\let\x\expandafter +\x\global\x\let\x\ifthesis@xeluatex\csname if% + \ifxetex true\else + \ifluatex\x\x\x t\x\x\x r\x\x\x u\x\x\x e% + \else f\x\x\x a\x\x\x l\x\x\x s\x\x\x e% + \fi + \fi\endcsname} +\ifthesis@xeluatex + \ifthesis@palatino@ + \thesis@require{fontspec} + \thesis@require{unicode-math} + \setmainfont[Ligatures=TeX]{TeX Gyre Pagella} + \setmathfont[math-style=ISO,bold-style=ISO]{texgyrepagella-math.otf} + \fi +\else + \ifthesis@palatino@ + \RequirePackage[resetfonts]{cmap} + \thesis@require{lmodern} + \thesis@require{mathpazo} + \thesis@require{tgpagella} + \RequirePackage[T1]{fontenc} + \fi +\fi +\let\thesis@newtable@old\tabular +\let\endthesis@newtable@old\endtabular +\ifthesis@newtable@ + % Load the packages. + \thesis@require{tabularx} + \thesis@require{tabu} + \thesis@require{booktabs} + % Adjust the measurements. + \setlength{\aboverulesep}{0pt} + \setlength{\belowrulesep}{0pt} + \setlength{\extrarowheight}{.75ex} + \ifthesis@color@ + % The redefinition of `tabular` + \renewenvironment{tabular}% + {\rowcolors{1}{thesis@color@tableOdd}% + {thesis@color@tableEven}% + \thesis@newtable@old}% + {\endthesis@newtable@old} + % The redefinition of `tabularx` + \let\thesis@newtable@oldx\tabularx + \let\endthesis@newtable@oldx\endtabularx + \renewenvironment{tabularx}% + {\rowcolors{1}{thesis@color@tableEven}% + {thesis@color@tableOdd}% + \thesis@newtable@oldx}% + {\endthesis@newtable@oldx} + % The redefinition of `tabu` + \let\thesis@newtable@oldtabu\tabu + \let\endthesis@newtable@oldtabu\endtabu + \renewenvironment{tabu}% + {\rowcolors{1}{thesis@color@tableEven}% + {thesis@color@tableOdd}% + \thesis@newtable@oldtabu}% + {\endthesis@newtable@oldtabu} + \fi +\fi +\newif\ifthesis@bibliography@ +\thesis@bibliography@false +\ifx\thesis@bibFiles\undefined\else + {\edef\@bibList{\thesis@bibFiles}% + \ifx\@bibList\empty\else + \global\thesis@bibliography@true + \fi} +\fi +\def\thesis@bibliography@setup#1{% + \setkeys{thesis@bibliography}{#1}} +\define@key{thesis@bibliography}{style}{% + \ifx\thesis@bibliography@style\undefined + \def\thesis@bibliography@style{#1}% + \fi} +\define@key{thesis@bibliography}{sorting}{% + \ifx\thesis@bibliography@sorting\undefined + \def\thesis@bibliography@sorting{#1}% + \fi} +\thesis@def@extra[]{bibliography} +\ifx\thesis@extra@bibliography + \thesis@placeholder@extra@bibliography\else + \expandafter\thesis@bibliography@setup\expandafter{% + \thesis@extra@bibliography}% +\fi +\newif\ifthesis@bibliography@loaded@ + \thesis@bibliography@loaded@false +\newif\ifthesis@bibliography@included@ + \thesis@bibliography@included@false +\def\thesis@bibliography@load{% + \ifthesis@bibliography@ + \ifthesis@bibliography@loaded@\else + \thesis@bibliography@loaded@true + % Load csquotes and BibLaTeX. + \thesis@require{csquotes} + \thesis@bibliography@setup{ + style = iso-numeric, + sorting = none} + \thesis@require[ + backend=biber, + style=\thesis@bibliography@style, + sorting=\thesis@bibliography@sorting, + autolang=other, + sortlocale=auto]{biblatex} + % Load the bibliography databases. + {\edef\@bibList{\thesis@bibFiles}% + \def\@inject##1,{% + \def\@args{##1}\def\@relax{\relax}% + \ifx\@args\@relax\else + % Trim leading spaces. + \edef\@trimmed{\romannumeral-`\.##1}% + \addbibresource\@trimmed + \expandafter\@inject\fi}% + \expandafter\@inject\@bibList,\relax,}% + \let\thesis@printbibliography@old\printbibliography + \def\printbibliography{% + \global\thesis@bibliography@included@true + \thesis@printbibliography@old} + \fi + \fi} +\thesis@require{hyperref} +\ifthesis@digital@ + \hypersetup{pdfborderstyle={/S/U/W 1}} +\else + \hypersetup{hidelinks} +\fi +\widowpenalty 10000 +\clubpenalty 10000 +\def\thesis@color@setup#1{% + \setkeys{thesis@color}{#1}} +\define@key{thesis@color}{links}{% + \definecolor{thesis@color@links}#1 + \hypersetup{linkbordercolor=thesis@color@links}} +\define@key{thesis@color}{tableOdd}{% + \definecolor{thesis@color@tableOdd}#1} +\define@key{thesis@color}{tableEven}{% + \definecolor{thesis@color@tableEven}#1} +\define@key{thesis@color}{tableEmph}{% + \definecolor{thesis@color@tableEmph}#1} +\def\thesis@blocks@coverMatter{% + \pagenumbering{gobble}} +\def\thesis@blocks@frontMatter{% + \thesis@blocks@clear + \pagestyle{plain} + \parindent 1.5em + \setcounter{page}{1} + \pagenumbering{roman}} +\def\thesis@blocks@clear{% + \ifthesis@twoside@ + \clearpage + \ifodd\value{page}\else% + \thispagestyle{empty}% + \hbox{}% + \newpage + \fi + \else + \newpage + \fi} +\def\thesis@blocks@clearRight{% + \ifthesis@twoside@ + \clearpage + \ifodd\value{page}% + \thispagestyle{empty}% + \hbox{}% + \newpage + \fi + \else + \newpage + \fi} +\newcommand{\thesis@blocks@facultyLogo@monochrome}[1]% + [width=40mm]{{% + \edef\@path{\thesis@logopath\thesis@facultyLogo}% + \includegraphics[#1]{\@path}}} +\newcommand{\thesis@blocks@facultyLogo@color}[1]% + [width=40mm]{{% + \edef\@path{\thesis@logopath\thesis@facultyLogo + \ifthesis@color@-color\fi}% + \includegraphics[#1]{\@path}}} +\newcommand{\thesis@blocks@universityLogo@monochrome}[1]% + [width=40mm]{{% + \edef\@path{\thesis@logopath\thesis@universityLogo}% + \includegraphics[#1]{\@path}}} +\newcommand{\thesis@blocks@universityLogo@color}[1]% + [width=40mm]{{% + \edef\@path{\thesis@logopath\thesis@universityLogo + \ifthesis@color@-color\fi}% + \includegraphics[#1]{\@path}}} +\let\thesis@department@name\thesis@department +\let\thesis@departmentEn@name\thesis@departmentEn +\let\thesis@field@name\thesis@field +\let\thesis@fieldEn@name\thesis@fieldEn +\def\thesis@blocks@cover{% + \ifthesis@cover@ + \thesis@blocks@clear + \begin{alwayssingle}% + \thispagestyle{empty}% + \begin{center}% + \thesis@blocks@cover@header + \thesis@blocks@facultyLogo@monochrome\\[0.4in]% + \let\footnotesize\small + \let\footnoterule\relax{}% + \thesis@blocks@cover@content + \par\vfill + \thesis@blocks@cover@footer + \end{center}% + \end{alwayssingle}% + \fi} +\newif\ifthesis@blocks@cover@university@ +\thesis@blocks@cover@university@true +\newif\ifthesis@blocks@cover@faculty@ +\thesis@blocks@cover@faculty@true +\newif\ifthesis@blocks@cover@department@ +\thesis@blocks@cover@department@false +\newif\ifthesis@blocks@cover@field@ +\thesis@blocks@cover@field@false + +\def\thesis@blocks@cover@header{% + {\sc\ifthesis@blocks@cover@university@ + \thesis@titlePage@LARGE\thesis@@{universityName}\\% + \fi\ifthesis@blocks@cover@faculty@ + \thesis@titlePage@Large\thesis@@{facultyName}\\% + \fi\ifthesis@blocks@cover@department@ + \thesis@titlePage@large\thesis@department@name\\% + \fi} + \ifthesis@blocks@cover@field@ + {\thesis@titlePage@large\vskip 1em% + {\bf\thesis@@{fieldTitle}:} \thesis@field@name}% + \fi\vskip 2em} +\def\thesis@blocks@cover@content{% + {\thesis@titlePage@Huge\bf\thesis@TeXtitle\par\vfil}% + \vskip 0.8in% + {\thesis@titlePage@large\sc\thesis@@{typeName}}\\[0.3in]% + {\thesis@titlePage@Large\bf\thesis@author}} +\def\thesis@blocks@cover@footer{% + {\thesis@titlePage@large\thesis@place, \thesis@@{semester}}} +\def\thesis@blocks@titlePage{% + \thesis@blocks@clear + \begin{alwayssingle}% + \thispagestyle{empty}% + \begin{center}% + \thesis@blocks@titlePage@header + \thesis@blocks@facultyLogo@color\\[0.4in]% + \let\footnotesize\small + \let\footnoterule\relax{}% + \thesis@blocks@titlePage@content + \par\vfill + \thesis@blocks@titlePage@footer + \end{center}% + \end{alwayssingle}} +\newif\ifthesis@blocks@titlePage@university@ +\thesis@blocks@titlePage@university@true +\newif\ifthesis@blocks@titlePage@faculty@ +\thesis@blocks@titlePage@faculty@true +\newif\ifthesis@blocks@titlePage@department@ +\thesis@blocks@titlePage@department@false +\newif\ifthesis@blocks@titlePage@field@ +\thesis@blocks@titlePage@field@false + +\def\thesis@blocks@titlePage@header{% + {\sc\ifthesis@blocks@titlePage@university@ + \thesis@titlePage@LARGE\thesis@@{universityName}\\% + \fi\ifthesis@blocks@titlePage@faculty@ + \thesis@titlePage@Large\thesis@@{facultyName}\\% + \fi\ifthesis@blocks@titlePage@department@ + \thesis@titlePage@large\thesis@department@name\\% + \fi} + \ifthesis@blocks@titlePage@field@ + {\thesis@titlePage@large\vskip 1em% + {\bf\thesis@@{fieldTitle}:} \thesis@field@name}% + \fi\vskip 2em} +\let\thesis@blocks@titlePage@content=\thesis@blocks@cover@content +\let\thesis@blocks@titlePage@footer=\thesis@blocks@cover@footer +\def\thesis@blocks@toc{% + \thesis@blocks@clear + \tableofcontents} +\def\thesis@blocks@tables{% + \thesis@blocks@toc + \thesis@blocks@lot + \thesis@blocks@lof} +\def\thesis@blocks@declaration{% + \thesis@blocks@clear + \begin{alwayssingle}% + \chapter*{\thesis@@{declarationTitle}}% + \thesis@declaration + \vskip 2cm% + \hfill\thesis@author + \end{alwayssingle}} +\def\thesis@blocks@thanks{% + \ifx\thesis@thanks\undefined\else + \thesis@blocks@clear + \begin{alwayssingle}% + \chapter*{\vspace*{\fill}\thesis@@{thanksTitle}}% + \leavevmode\thesis@thanks + \end{alwayssingle}% + \fi} +\def\thesis@blocks@abstract{% + \begin{alwayssingle}% + % Start the new chapter without clearing the left page. + \clearpage + {\let\thesis@blocks@clear\relax + \chapter*{\thesis@@{abstractTitle}}}% + \noindent\thesis@abstract + \par\vfil\null + \end{alwayssingle}} +\def\thesis@blocks@abstractEn{% + \ifthesis@english\else + {\thesis@selectLocale{english}% + \begin{alwayssingle}% + % Start the new chapter without clearing the left page. + \clearpage + {\let\thesis@blocks@clear\relax + \chapter*{\thesis@english@abstractTitle}}% + \noindent\thesis@abstractEn + \par\vfil\null + \end{alwayssingle}}% + \fi} +\def\thesis@blocks@keywords{% + \begin{alwayssingle}% + % Start the new chapter without clearing the left page. + \clearpage + {\let\thesis@blocks@clear\relax + \chapter*{\thesis@@{keywordsTitle}}% + \noindent\thesis@TeXkeywords}% + \par\vfil\null + \end{alwayssingle}} +\def\thesis@blocks@keywordsEn{% + \ifthesis@english\else + {\thesis@selectLocale{english}% + \begin{alwayssingle}% + % Start the new chapter without clearing the left page. + \clearpage + {\let\thesis@blocks@clear\relax% + \chapter*{\thesis@english@keywordsTitle}}% + \noindent\thesis@TeXkeywordsEn + \par\vfil\null + \end{alwayssingle}}% + \fi} +\def\thesis@rewind{% + \addtocounter{page}{-\ifthesis@twoside@2\else1\fi}} +\newif\ifthesis@blocks@assignment@ +\thesis@blocks@assignment@true +\newif\ifthesis@blocks@assignment@hideIfDigital@ +\thesis@blocks@assignment@hideIfDigital@true +\def\thesis@blocks@assignment{% + \ifthesis@blocks@assignment@ + \ifx\thesis@assignmentFiles\undefined + % Rewind the pages and typeset a placeholder page. + \thesis@blocks@clear + \begin{alwayssingle}% + \thispagestyle{empty}\thesis@rewind + \noindent\textit{\thesis@@{assignment}}% + \end{alwayssingle}% + \else + {\edef\@pdfList{\thesis@assignmentFiles}% + \let\ea\expandafter + % Injects the specified PDF documents. + \def\@inject##1,{\thesis@blocks@clear + \def\@args{##1}\def\@relax{\relax}% + \ifx\@args\@relax\else + % Trim leading spaces. + \edef\@trimmed{\romannumeral-`\.##1}% + % Rewind the pages and include the PDF. + \thesis@rewind\includepdf[pages=-]\@trimmed + \ea\@inject\fi}% + \ifx\@pdfList\empty\else + \ifthesis@digital@ + \ifthesis@blocks@assignment@hideIfDigital@ + \thesis@blocks@clear + \begin{alwayssingle}% + \thispagestyle{empty}\thesis@rewind + \noindent\textit{\thesis@@{assignment}}% + \end{alwayssingle}% + \else + \ea\@inject\@pdfList,\relax,% + \fi + \else + \ea\@inject\@pdfList,\relax,% + \fi + \fi}% + \fi + \fi} +\def\thesis@blocks@mainMatter{% + \thesis@blocks@clear + \setcounter{page}{1} + \pagenumbering{arabic} + \pagestyle{thesisheadings} + \parindent 1.5em\relax} +\def\thesis@blocks@bibEntry{% + \chapter*{\thesis@@{bib@title}} + \noindent\thesis@upper{author@tail}, \thesis@author@head. + \emph{\thesis@title}. \thesis@place: \thesis@@{universityName}, + \thesis@@{facultyName}, \thesis@department@name, \thesis@year. + \thesis@pages\ \thesis@@{bib@pages}. + \thesis@@{advisorTitle}: \thesis@advisor + \thesis@blocks@clearRight} +\def\thesis@blocks@bibliography{% + \ifthesis@bibliography@loaded@ + \ifthesis@bibliography@included@\else + \thesis@blocks@clear + {\emergencystretch=3em% + \printbibliography[heading=bibintoc]}% + \fi + \fi} +\setcounter{tocdepth}{2} + +\setcounter{secnumdepth}{2} + +\input\thesis@stylepath mu/fithesis-1\thesis@ptsize.clo\relax + +\def\ps@thesisheadings{% + \def\chaptermark##1{% + \markright{% + \ifnum\c@secnumdepth >\m@ne + \thechapter.\ % + \fi ##1}} + \let\@oddfoot\@empty + \let\@oddhead\@empty + \def\@oddhead{% + \vbox{% + \hbox to \textwidth{% + \hfil{\sc\rightmark}}% + \vskip 4pt\hrule}} + \if@twoside + \def\@evenhead{% + \vbox{% + \hbox to \textwidth{% + {\sc\rightmark}% + \hfil} + \vskip 4pt\hrule}} + \else + \let\@evenhead\@oddhead + \fi + \def\@oddfoot{\hfil\PageFont\thepage} + \if@twoside + \def\@evenfoot{\PageFont\thepage\hfil}% + \else + \let\@evenfoot\@oddfoot + \fi + \let\@mkboth\markboth} + +\renewcommand*\chapter{% + \thesis@blocks@clear + \thispagestyle{plain}% + \global\@topnum\z@ + \@afterindentfalse + \secdef\@chapter\@schapter} + +\renewcommand*\part{% + \thesis@blocks@clear + \if@twocolumn + \onecolumn + \@tempswatrue + \else + \@tempswafalse + \fi + \hbox{}\vfil + \secdef\@part\@spart} + +\newif\if@restonecol +\def\alwayssingle{% + \@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn\fi} +\def\endalwayssingle{\if@restonecol\twocolumn\fi} + +\pdfstringdefDisableCommands{% + \let\MakeUppercase\relax} + +\renewcommand*\toc@font[1]{% + \ifcase #1\relax + \bfseries % \chapter (0) + \or + \slshape % \section (1) + \else + \rmfamily % \subsection (2), \subsubsection (3) + % \paragraph, \subparagraph (4) + \fi} + +\renewcommand*\l@part[2]{% + \ifnum \c@tocdepth >-2\relax + \addpenalty{-\@highpenalty}% + \ifnum \c@tocdepth >0\relax + \addvspace{2.25em \@plus\p@}% + \else + \addvspace{1.0em \@plus\p@}% + \fi + \begingroup + \setlength\@tempdima{3em}% + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + {\leavevmode + \normalfont \bfseries #1\hfil \hb@xt@\@pnumwidth{\hss #2}}\par + \nobreak + \global\@nobreaktrue + \everypar{\global\@nobreakfalse\everypar{}}% + \endgroup + \fi} + +\renewcommand*\l@chapter[2]{% + \ifnum \c@tocdepth >0\relax + \addpenalty{-\@highpenalty}% + \addvspace{1.0em \@plus\p@}% + \setlength\@tempdima{1.5em}% + \begingroup + \parindent \z@ \rightskip \@pnumwidth + \parfillskip -\@pnumwidth + \leavevmode \bfseries + \advance\leftskip\@tempdima + \hskip -\leftskip + #1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par + \penalty\@highpenalty + \endgroup + \else + \@dottedtocline{0}{0em}{1.5em}{#1}{#2} + \fi} + +\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}} +\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}} +\renewcommand*\l@subsubsection{\@dottedtocline{3}{7.0em}{4.1em}} +\renewcommand*\l@paragraph{\@dottedtocline{4}{10.0em}{5.0em}} +\renewcommand*\l@subparagraph{\@dottedtocline{4}{12.0em}{6.0em}} +\endinput +%% +%% End of file `fithesis-base.sty'. diff --git a/fithesis/style/mu/fithesis-fi.sty b/fithesis/style/mu/fithesis-fi.sty new file mode 100644 index 0000000..3bfe687 --- /dev/null +++ b/fithesis/style/mu/fithesis-fi.sty @@ -0,0 +1,131 @@ +%% +%% This is file `fithesis-fi.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fi.dtx +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{fithesis/style/mu/fithesis-fi}[2016/04/18] +\thesis@color@setup{ + links={HTML}{FFD451}, + tableEmph={HTML}{FFD451}, + tableOdd={HTML}{FFF9E5}, + tableEven={HTML}{FFECB3}} +\thesis@bibliography@setup{ + style=iso-numeric, + sorting=none} +\thesis@bibliography@load +\ifx\thesis@type\thesis@rigorous + \thesis@blocks@assignment@false +\else\ifx\thesis@type\thesis@doctoral + \thesis@blocks@assignment@false +\fi\fi +\def\thesis@blocks@advisor{% + {\thesis@titlePage@large\\[0.3in] + {\bf\thesis@@{advisorTitle}:} \thesis@advisor}} +\def\thesis@blocks@titlePage@content{% + {\thesis@titlePage@Huge\bf\thesis@TeXtitle\par\vfil}\vskip 0.8in + {\thesis@titlePage@large\sc\thesis@@{typeName}\\[0.3in]} + {\thesis@titlePage@Large\bf\thesis@author} + % If this is a rigorous thesis or a PhD thesis proposal, + % typeset the name of the thesis advisor. + \ifx\thesis@type\thesis@rigorous + \thesis@blocks@advisor + \else\ifx\thesis@type\thesis@proposal + \thesis@blocks@advisor + \fi\fi}% +\def\thesis@blocks@advisorSignature{% + \let\@A\relax\newlength{\@A} + \settowidth{\@A}{\thesis@@{advisorSignature}} + \setlength{\@A}{\@A+1cm} + \hfill\raisebox{-0.5em}{\parbox{\@A}{ + \centering + \rule{\@A}{1pt}\\ + \thesis@@{advisorSignature} + }}}% +\def\thesis@blocks@titlePage@footer{% + {\thesis@titlePage@large\thesis@place, \thesis@@{semester} + % If this is a rigorous thesis or a PhD thesis proposal, + % create space for the advisor's signature. + \ifx\thesis@type\thesis@rigorous + \thesis@blocks@advisorSignature + \else\ifx\thesis@type\thesis@proposal + \thesis@blocks@advisorSignature + \fi\fi}} +\def\thesis@blocks@declaration{% + \thesis@blocks@clear + \begin{alwayssingle}% + \chapter*{\thesis@@{declarationTitle}}% + \thesis@declaration + \vskip 2cm% + \hfill\thesis@author + \par\vfill\noindent + \textbf{\thesis@@{advisorTitle}:} \thesis@advisor + \par\vfil + \end{alwayssingle}} +\def\thesis@blocks@preamble{% + \thesis@blocks@coverMatter + \thesis@blocks@cover + \thesis@blocks@titlePage + \thesis@blocks@frontMatter + \ifx\thesis@type\thesis@proposal + \thesis@blocks@toc + \else + \thesis@blocks@assignment + \thesis@blocks@declaration + \thesis@blocks@thanks + \thesis@blocks@clearRight + \thesis@blocks@abstract + \thesis@blocks@keywords + \thesis@blocks@tables + \fi} +\def\thesis@blocks@postamble{% + \thesis@blocks@bibliography} +\endinput +%% +%% End of file `fithesis-fi.sty'. diff --git a/fithesis3.cls b/fithesis3.cls new file mode 100644 index 0000000..7b75c0b --- /dev/null +++ b/fithesis3.cls @@ -0,0 +1,588 @@ +%% +%% This is file `fithesis3.cls', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% fithesis.dtx (with options: `class') +%% +%% Copyright 1998--2020 Daniel Marek (DM), Jan Pavlovič (JP), +%% Vít Novotný (VN), Petr Sojka (PS) +%% http://www.fi.muni.cz/tech/unix/tex/fithesis.xhtml +%% Faculty of Informatics, Masaryk University (Brno, Czech Republic) +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version +%% 1.3 of this license or (at your option) any later version. +%% The latest version of this license is available at +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Vít Novotný (VN). +%% Send bug reports, requests for additions and questions +%% either to the fithesis discussion forum at +%% +%% http://is.muni.cz/auth/df/fithesis-sazba/ +%% +%% or to the e-mail address . +%% +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\NeedsTeXFormat{LaTeX2e} +{\def\thesis@versiondef#1#2{ + \gdef\thesis@version@number{#1} + \gdef\thesis@version@date{#2} + \gdef\thesis@version{#2 #1 fithesis3 MU thesis class}} +\thesis@versiondef{v0.3.51}{2020/03/09}} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\ProvidesClass{fithesis3}[\thesis@version] +\ifx\thesis@backend\undefined + \def\thesis@backend{[a4paper]{rapport3}} +\fi\expandafter\LoadClass\thesis@backend +\RequirePackage{keyval} +\RequirePackage{etoolbox} +\RequirePackage{ltxcmds} +\RequirePackage{ifxetex} +\RequirePackage{ifluatex} +\ifxetex\else\ifluatex\else + \RequirePackage[utf8]{inputenc} +\fi\fi +\long\def\thesissetup#1{% + \setkeys{thesis}{#1}} +\def\thesis@basepath{fithesis/} +\define@key{thesis}{basePath}{% + \ifx\thesis@empty#1\thesis@empty + \def\thesis@basepath{}% + \else + \def\thesis@basepath{#1/}% + \fi} +\def\thesis@logopath{\thesis@basepath logo/\thesis@university/} +\define@key{thesis}{logoPath}{% + \def\thesis@logopath{\thesis@subdir#1% + \empty\empty\empty\empty}} +\def\thesis@stylepath{\thesis@basepath style/} +\define@key{thesis}{stylePath}{% + \def\thesis@stylepath{\thesis@subdir#1% + \empty\empty\empty\empty}} +\def\thesis@localepath{\thesis@basepath locale/} +\define@key{thesis}{localePath}{% + \def\thesis@localepath{\thesis@subdir#1% + \empty\empty\empty\empty}} +\def\thesis@subdir#1#2#3#4\empty{% + \ifx#1\empty% -> + \thesis@basepath + \else + \if#1/% + \ifx#2\empty% / -> / + /% + \else% / -> // + #1#2#3#4/% + \fi + \else + \if#1.% + \ifx#2\empty% . -> ./ + ./% + \else + \if#2.% + \ifx#3\empty% .. -> ../ + ../% + \else + \if#3/% ../ -> ..// + ../#4/% + \else + \thesis@basepath#1#2#3#4/% + \fi + \fi + \else + \if#2/% ./ -> .// + ./#3#4/% + \else + \thesis@basepath#1#2#3#4/% + \fi + \fi + \fi + \else + \thesis@basepath#1#2#3#4/% + \fi + \fi + \fi} +\newcommand{\thesis@def}[2][]{% + \expandafter\def\csname thesis@#2\endcsname{% + <<\ifx\thesis@empty#1\thesis@empty#2\else#1\fi>>}} +\def\thesis@declaration{\thesis@@{declaration}} +\long\def\KV@thesis@declaration#1{% + \long\def\thesis@declaration{#1}} +\newif\ifthesis@woman\thesis@womanfalse +\define@key{thesis}{gender}{% + \def\thesis@male{m}% + \def\thesis@arg{#1}% + \ifx\thesis@male\thesis@arg + \thesis@womanfalse + \else + \thesis@womantrue + \fi} +\def\thesis@parseAuthor#1{% + \def\thesis@author{#1}% + \def\thesis@author@head{\expandafter\expandafter\expandafter + \@gobble\thesis@head#1 \relax}% + \def\thesis@author@tail{\thesis@tail#1 \relax}} +\thesis@def{author}% +\thesis@def[author]{author@head}% +\thesis@def[author]{author@tail}% +\define@key{thesis}{author}{% + \thesis@parseAuthor{#1}} +\let\author\thesis@parseAuthor +\thesis@def{id} +\define@key{thesis}{id}{% + \def\thesis@id{#1}} +\def\thesis@sempaper{sem} +\def\thesis@bachelors{bc} +\def\thesis@masters{mgr} +\def\thesis@proposal{prop} +\def\thesis@doctoral{d} +\def\thesis@rigorous{r} +\let\thesis@type\thesis@bachelors +\define@key{thesis}{type}{% + \def\thesis@type{#1}} +\def\thesis@university{mu} +\define@key{thesis}{university}{% + \def\thesis@university{#1}} +\def\thesis@faculty{fi} +\define@key{thesis}{faculty}{% + \def\thesis@faculty{#1}} +\thesis@def{department} +\define@key{thesis}{department}{% + \def\thesis@department{#1}} +\thesis@def{departmentEn} +\define@key{thesis}{departmentEn}{% + \def\thesis@departmentEn{#1}} +\thesis@def{programme} +\define@key{thesis}{programme}{% + \def\thesis@programme{#1}} +\thesis@def{programmeEn} +\define@key{thesis}{programmeEn}{% + \def\thesis@programmeEn{#1}} +\thesis@def{field} +\define@key{thesis}{field}{% + \def\thesis@field{#1}} +\thesis@def{fieldEn} +\define@key{thesis}{fieldEn}{% + \def\thesis@fieldEn{#1}} +\def\thesis@universityLogo{fithesis-base} +\define@key{thesis}{universityLogo}{% + \def\thesis@universityLogo{#1}} +\def\thesis@facultyLogo{fithesis-\thesis@faculty} +\define@key{thesis}{facultyLogo}{% + \def\thesis@facultyLogo{#1}} +\def\thesis@style{\thesis@university/fithesis-\thesis@faculty} +\define@key{thesis}{style}{% + \def\thesis@style{#1}} +\newif\ifthesis@style@inheritance\thesis@style@inheritancetrue +\define@key{thesis}{styleInheritance}[true]{% + \begingroup + \def\@true{true}% + \def\@arg{#1}% + \ifx\@true\@arg + \endgroup\thesis@style@inheritancetrue + \else + \endgroup\thesis@style@inheritancefalse + \fi} +\def\thesis@locale{% + % Babel / polyglossia detection + \ifx\languagename\undefined + english\else\languagename\fi} +\define@key{thesis}{locale}{% + \def\thesis@locale{#1}} +\def\ifthesis@english{ + \expandafter\def\expandafter\@english\expandafter{\string + \english}% + \expandafter\expandafter\expandafter\def\expandafter + \expandafter\expandafter\@locale\expandafter\expandafter + \expandafter{\expandafter\string\csname\thesis@locale\endcsname}% + \expandafter\csname\expandafter i\expandafter f\ifx\@locale + \@english + true% + \else + false% + \fi\endcsname} +\newif\ifthesis@locale@inheritance\thesis@locale@inheritancetrue +\define@key{thesis}{localeInheritance}[true]{% + \begingroup + \def\@true{true}% + \def\@arg{#1}% + \ifx\@true\@arg + \endgroup\thesis@locale@inheritancetrue + \else + \endgroup\thesis@locale@inheritancefalse + \fi} +\def\thesis@parseDate#1/#2/#3|{{ + % Set the basic macros + \gdef\thesis@date{#1/#2/#3}% + \gdef\thesis@year{#1}% + \gdef\thesis@month{#2}% + \gdef\thesis@day{#3}% + + % Set the season + \newcount\@month\expandafter\@month\thesis@month\relax + \ifnum\@month>8\gdef\thesis@season{fall} + \else\ifnum\@month<3\gdef\thesis@season{fall} + \else \gdef\thesis@season{spring} + \fi\fi + + % Set the academic year + \newcount\@year\expandafter\@year\thesis@year\relax + \ifnum\@month>8% + \edef\@yearA{\the\@year}% + \advance\@year 1\edef\@yearB{\the\@year}% + \advance\@year-1 + \else + \advance\@year-1\edef\@yearA{\the\@year}% + \advance\@year 1\edef\@yearB{\the\@year}% + \fi + \global\edef\thesis@academicYear{\@yearA/\@yearB} + + % Set the season year + \ifnum\@month>2\else + \advance\@year-1 + \fi + \global\edef\thesis@seasonYear{\the\@year}}} + +\edef\thesis@date{\the\year/\the\month/\the\day}% +\expandafter\thesis@parseDate\thesis@date|% + +\define@key{thesis}{date}{{% + \edef\@date{#1}% + \expandafter\thesis@parseDate\@date|}} +\def\thesis@place{Brno} +\define@key{thesis}{place}{% + \def\thesis@place{#1}} +\thesis@def{title} +\define@key{thesis}{title}{% + \def\thesis@title{#1}} +\def\title#1{\def\thesis@title{#1}} +\let\maketitle\relax +\def\thesis@TeXtitle{\thesis@title} +\define@key{thesis}{TeXtitle}{% + \def\thesis@TeXtitle{#1}} +\thesis@def{titleEn} +\define@key{thesis}{titleEn}{% + \def\thesis@titleEn{#1}} +\def\thesis@TeXtitleEn{\thesis@titleEn} +\define@key{thesis}{TeXtitleEn}{% + \def\thesis@TeXtitleEn{#1}} +\thesis@def{keywords} +\define@key{thesis}{keywords}{% + \def\thesis@keywords{#1}} +\def\thesis@TeXkeywords{\thesis@keywords} +\define@key{thesis}{TeXkeywords}{% + \def\thesis@TeXkeywords{#1}} +\thesis@def{keywordsEn} +\define@key{thesis}{keywordsEn}{% + \def\thesis@keywordsEn{#1}} +\def\thesis@TeXkeywordsEn{\thesis@keywordsEn} +\define@key{thesis}{TeXkeywordsEn}{% + \def\thesis@TeXkeywordsEn{#1}} +\thesis@def{abstract} +\long\def\KV@thesis@abstract#1{% + \long\def\thesis@abstract{#1}} +\thesis@def{abstractEn} +\long\def\KV@thesis@abstractEn#1{% + \long\def\thesis@abstractEn{#1}} +\thesis@def{advisor} +\define@key{thesis}{advisor}{\def\thesis@advisor{#1}} +\long\def\KV@thesis@thanks#1{% + \long\def\thesis@thanks{#1}} +\define@key{thesis}{assignment}{% + \def\thesis@assignmentFiles{#1}} +\define@key{thesis}{bib}{% + \def\thesis@bibFiles{#1}} +\newif\ifthesis@auto\thesis@autotrue +\define@key{thesis}{autoLayout}[true]{% + \def\@true{true}% + \def\@arg{#1}% + \ifx\@true\@arg + \thesis@autotrue + \else + \thesis@autofalse + \fi} +\ifx\thesis@pages@preamble\undefined + \def\thesis@pages@preamble{??}\fi +\ifx\thesis@pages@postamble\undefined + \def\thesis@pages@postamble{??}\fi +\def\thesis@preamble{% + {\thesis@selectLocale{\thesis@locale}% + \thesis@blocks@preamble + \gdef\thesis@pages@preamble{\thepage} + \write\@auxout{\noexpand\gdef\noexpand + \thesis@pages@preamble{\thepage}} + \clearpage} + \thesis@blocks@mainMatter} + +\let\thesis@blocks@preamble\relax +\let\thesis@blocks@mainMatter\relax +\def\thesis@postamble{% + \gdef\thesis@pages@postamble{\thepage} + \immediate\write\@auxout{\noexpand\gdef\noexpand + \thesis@pages@postamble{\thepage}} + {\thesis@selectLocale{\thesis@locale}% + \thesis@blocks@postamble}} + +\let\thesis@blocks@postamble\relax +\def\thesis@extra@KV@prefix{KV@thesis@extra@} +\def\thesis@extra@XKV@fams{thesis@extra} +\long\def\KV@thesis@extra#1{% + \long\def\XKV@s@tk@ys##1=##2=##3\@nil{% + \XKV@g@tkeyname##1=\@nil\XKV@tkey + \expandafter\KV@@sp@def\expandafter\XKV@tkey\expandafter{\XKV@tkey}% + \ifx\XKV@tkey\@empty + \XKV@toks{##2}% + \ifcat$\the\XKV@toks$\else + \XKV@err{no key specified for value `\the\XKV@toks'}% + \fi + \else + \@expandtwoargs\in@{,\XKV@tkey,}{,\XKV@na,}% + \ifin@\else + \XKV@knftrue + \KV@@sp@def\XKV@tempa{##2}% + \ifXKV@preset\XKV@s@tk@ys@{##3}\else + \ifXKV@pl + \XKV@for@eo\XKV@fams\XKV@tfam{% + \XKV@makehd\XKV@tfam + \XKV@s@tk@ys@{##3}% + }% + \else + \XKV@whilist\XKV@fams\XKV@tfam\ifXKV@knf\fi{% + \XKV@makehd\XKV@tfam + \XKV@s@tk@ys@{##3}% + }% + \fi + \fi + \ifXKV@knf + \ifXKV@inpox + \ifx\XKV@doxs\relax + \ifx\@currext\@clsextension\else + \let\CurrentOption\XKV@tkey\@unknownoptionerror + \fi + \else\XKV@doxs\fi + \else + \ifXKV@st + \XKV@addtolist@o\XKV@rm\CurrentOption + \else + \ifx\XKV@fams\thesis@extra@XKV@fams + \expandafter\long\expandafter\def\csname% + thesis@extra@\XKV@tkey\endcsname{##2}% + \else + \XKV@err{`\XKV@tkey' undefined in families + `\XKV@fams'}% + \fi + \fi + \fi + \else + \ifXKV@inpox\ifx\XKV@testclass\XKV@documentclass + \expandafter\XKV@useoption\expandafter{\CurrentOption}% + \fi\fi + \fi + \fi + \fi + }% + \setkeys{thesis@extra}{#1}% + \def\KV@prefix{KV@thesis@}} +\long\def\KV@split#1=#2=#3\relax{% + \KV@@sp@def\@tempa{#1}% + \ifx\@tempa\@empty\else + \expandafter\let\expandafter\@tempc + \csname\KV@prefix\@tempa\endcsname + \ifx\@tempc\relax + \ifx\KV@prefix\thesis@extra@KV@prefix + \KV@@sp@def\@tempb{#2}% + \expandafter\let\csname thesis@extra@\@tempa\endcsname + \@tempb% + \else + \KV@errx + {\@tempa\space undefined}% + \fi + \else + \ifx\@empty#3\@empty + \KV@default + \else + \KV@@sp@def\@tempb{#2}% + \expandafter\@tempc\expandafter{\@tempb}\relax + \fi + \fi + \fi} +\newcommand{\thesis@def@extra}[2][]{% + \expandafter\ifx\csname thesis@extra@#2\endcsname\relax + \def\thesis@placeholder@extra{<>}% + \expandafter\let\csname thesis@placeholder@extra@#2\endcsname + \thesis@placeholder@extra + \def\thesis@arg{#1}% + \ifx\empty\thesis@arg + \expandafter\let\csname thesis@extra@#2\endcsname + \thesis@placeholder@extra + \else + \expandafter\def\csname thesis@extra@#2\endcsname{#1}% + \fi + \fi} +\long\def\thesislong#1#2{% + \csname KV@thesis@#1\endcsname{#2}} +\newif\ifthesis@loaded\thesis@loadedfalse +\BeforeBeginEnvironment{document}{\thesisload} +\def\thesis@load{\thesisload} +\def\thesisload{% + \ifthesis@loaded\else + \thesis@loadedtrue + \makeatletter + \ifx\thesis@locale\empty\else + \edef\thesis@locale{\thesis@locale} + \thesis@requireLocale{\thesis@locale} + \fi + \ifluatex + \ltx@ifpackageloaded{babel}{}{ + % See + \RequirePackage[base]{babel}} + \fi +\ifthesis@english + \expandafter\expandafter\expandafter\let\expandafter\expandafter + \csname ifthesis@english\endcsname\csname iftrue\endcsname +\else + \expandafter\expandafter\expandafter\let\expandafter\expandafter + \csname ifthesis@english\endcsname\csname iffalse\endcsname +\fi + \ifx\thesis@style\empty\else + \thesis@requireStyle{\thesis@style} + \fi + \ifx\languagename\empty\else + \begingroup + \edef\@doclocale{\languagename}% + \ifx\@doclocale\thesis@locale + \endgroup + \AtBeginDocument{% + \thesis@selectLocale{\thesis@locale}}% + \else + \endgroup + \fi + \fi + \thesis@require{hyperref} + \hypersetup{ + unicode=true, + pdfencoding=auto, + pdftitle=\thesis@title, + pdfauthor=\thesis@author, + pdfkeywords=\thesis@keywords, + pdfcreator=\thesis@version} + \ifthesis@auto + \AtBeginDocument{\thesis@preamble} + \AtEndDocument{% + \thesis@postamble + \immediate\write\@auxout{% + \noexpand\gdef\noexpand\thesis@pages{\thepage}}} + \else + \AtEndDocument{% + \immediate\write\@auxout{% + \noexpand\gdef\noexpand\thesis@pages{\thepage}}} + \fi + \makeatother + \fi} +\def\thesis@exists#1#2{% + \IfFileExists{#1}{#2}{% + \ClassWarning{fithesis3}{File #1 doesn't exist}}} +\def\thesis@input#1{% + \thesis@exists{#1}{\input{#1}}} +\newcommand\thesis@require[2][]{% + \@ifpackageloaded{#2}{}{\RequirePackage[#1]{#2}}} +\newcommand\thesis@requireIfExists[2][]{% + \thesis@exists{#2.sty}{\thesis@require[#1]{#2}}} +\def\thesis@requireStyle#1{% + \ifthesis@style@inheritance + \thesis@requireIfExists{\thesis@stylepath fithesis-base}% + \thesis@requireIfExists{\thesis@stylepath\thesis@university + /fithesis-base} + \fi + \thesis@requireIfExists{\thesis@stylepath#1}} +\def\thesis@requireLocale#1{% + % Ignore redundant requests + \expandafter\ifx\csname thesis@#1@required\endcsname\relax + \expandafter\def\csname thesis@#1@required\endcsname{}% + \@ifpackageloaded{polyglossia}{\setotherlanguage{#1}}{} + \thesis@input{\thesis@localepath fithesis-#1.def}% + \ifthesis@locale@inheritance + \thesis@input{\thesis@localepath\thesis@university/% + fithesis-#1.def}% + \thesis@input{\thesis@localepath\thesis@university/% + \thesis@faculty/fithesis-#1.def}% + \fi + \fi} +\def\thesis@#1{\csname thesis@#1\endcsname} +\def\thesis@@#1{\thesis@{\thesis@locale @#1}} +\def\thesis@lower#1{{% + \let\ea\expandafter + \ea\MakeLowercase\ea{\csname thesis@#1\endcsname}}} +\def\thesis@upper#1{{% + \let\ea\expandafter + \ea\MakeUppercase\ea{\csname thesis@#1\endcsname}}} +\def\thesis@@lower#1{\thesis@lower{\thesis@locale @#1}} +\def\thesis@@upper#1{\thesis@upper{\thesis@locale @#1}} +\def\thesis@head#1 #2{% + \ifx\relax#2% + \expandafter\@gobbletwo + \else + \ #1% + \fi + \thesis@head#2}% +\def\thesis@tail#1 #2{% + \ifx\relax#2% + #1% + \expandafter\@gobbletwo + \fi + \thesis@tail#2}% +\ifx\thesis@pages\undefined\def\thesis@pages{??}\fi +\def\thesis@selectLocale#1{% + \edef\thesis@locale{#1}% + \ltx@ifpackageloaded{csquotes}{% + \csq@setstyle{\thesis@@{csquotesStyle}}% + }{}% + \ltx@ifpackageloaded{polyglossia}{% + \selectlanguage{\thesis@locale} + }{% + \language\csname l@\thesis@locale\endcsname + }} +\def\thesis@patch#1#2{% + \def\thesis@patch@versions{#1}% + \def\thesis@patch@action{#2}% + \def\thesis@patch@next##1,{% + \def\thesis@patch@arg{##1}% + \def\thesis@patch@relax{\relax}% + \ifx\thesis@patch@arg\thesis@version@number + \def\thesis@patch@next####1\relax,{}% + \expandafter\thesis@patch@action + \expandafter\thesis@patch@next + \else\ifx\thesis@patch@arg\thesis@patch@relax\else + \expandafter\expandafter\expandafter\thesis@patch@next + \fi\fi}% + \expandafter\expandafter\expandafter\thesis@patch@next + \expandafter\thesis@patch@versions\expandafter,\relax,} +\endinput +%% +%% End of file `fithesis3.cls'. diff --git a/latexmkrc b/latexmkrc new file mode 100644 index 0000000..4316c84 --- /dev/null +++ b/latexmkrc @@ -0,0 +1,2 @@ +$makeindex = "texindy %O -I latex -C utf8 -L english -o %D %S"; +$pdflatex = "pdflatex --shell-escape %O %S" diff --git a/markdown.lua b/markdown.lua new file mode 100644 index 0000000..e6127c8 --- /dev/null +++ b/markdown.lua @@ -0,0 +1,4063 @@ +-- +-- Copyright (C) 2009-2016 John MacFarlane, Hans Hagen +-- +-- Permission is hereby granted, free of charge, to any person obtaining +-- a copy of this software and associated documentation files (the +-- "Software"), to deal in the Software without restriction, including +-- without limitation the rights to use, copy, modify, merge, publish, +-- distribute, sublicense, and/or sell copies of the Software, and to +-- permit persons to whom the Software is furnished to do so, subject to +-- the following conditions: +-- +-- The above copyright notice and this permission notice shall be included +-- in all copies or substantial portions of the Software. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +-- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +-- CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +-- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +-- SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +-- +-- Copyright (C) 2016-2020 Vít Novotný +-- +-- This work may be distributed and/or modified under the +-- conditions of the LaTeX Project Public License, either version 1.3 +-- of this license or (at your option) any later version. +-- The latest version of this license is in +-- +-- http://www.latex-project.org/lppl.txt +-- +-- and version 1.3 or later is part of all distributions of LaTeX +-- version 2005/12/01 or later. +-- +-- This work has the LPPL maintenance status `maintained'. +-- The Current Maintainer of this work is Vít Novotný. +-- +-- Send bug reports, requests for additions and questions +-- either to the GitHub issue tracker at +-- +-- https://github.com/witiko/markdown/issues +-- +-- or to the e-mail address . +-- +-- MODIFICATION ADVICE: +-- +-- If you want to customize this file, it is best to make a copy of +-- the source file(s) from which it was produced. Use a different +-- name for your copy(ies) and modify the copy(ies); this will ensure +-- that your modifications do not get overwritten when you install a +-- new release of the standard system. You should also ensure that +-- your modified source file does not generate any modified file with +-- the same name as a standard file. +-- +-- You will also need to produce your own, suitably named, .ins file to +-- control the generation of files from your source file; this file +-- should contain your own preambles for the files it generates, not +-- those in the standard .ins files. +-- +local metadata = { + version = "2.9.0", + comment = "A module for the conversion from markdown to plain TeX", + author = "John MacFarlane, Hans Hagen, Vít Novotný", + copyright = {"2009-2016 John MacFarlane, Hans Hagen", + "2016-2020 Vít Novotný"}, + license = "LPPL 1.3" +} + +if not modules then modules = { } end +modules['markdown'] = metadata +local lpeg = require("lpeg") +local unicode = require("unicode") +local md5 = require("md5") +local M = {metadata = metadata} +local defaultOptions = {} +defaultOptions.cacheDir = "." +defaultOptions.frozenCacheFileName = "frozenCache.tex" +defaultOptions.blankBeforeBlockquote = false +defaultOptions.blankBeforeCodeFence = false +defaultOptions.blankBeforeHeading = false +defaultOptions.breakableBlockquotes = false +defaultOptions.citationNbsps = true +defaultOptions.citations = false +defaultOptions.codeSpans = true +defaultOptions.contentBlocks = false +defaultOptions.contentBlocksLanguageMap = "markdown-languages.json" +defaultOptions.definitionLists = false +defaultOptions.fencedCode = false +defaultOptions.finalizeCache = false +defaultOptions.footnotes = false +defaultOptions.frozenCacheCounter = 0 +defaultOptions.hashEnumerators = false +defaultOptions.headerAttributes = false +defaultOptions.html = false +defaultOptions.hybrid = false +defaultOptions.inlineFootnotes = false +defaultOptions.pipeTables = false +defaultOptions.preserveTabs = false +defaultOptions.shiftHeadings = 0 +defaultOptions.slice = "^ $" +defaultOptions.smartEllipses = false +defaultOptions.startNumber = true +defaultOptions.tableCaptions = false +defaultOptions.tightLists = true +defaultOptions.underscores = true +local upper, gsub, format, length = + string.upper, string.gsub, string.format, string.len +local concat = table.concat +local P, R, S, V, C, Cg, Cb, Cmt, Cc, Ct, B, Cs, any = + lpeg.P, lpeg.R, lpeg.S, lpeg.V, lpeg.C, lpeg.Cg, lpeg.Cb, + lpeg.Cmt, lpeg.Cc, lpeg.Ct, lpeg.B, lpeg.Cs, lpeg.P(1) +local util = {} +function util.err(msg, exit_code) + io.stderr:write("markdown.lua: " .. msg .. "\n") + os.exit(exit_code or 1) +end +function util.cache(dir, string, salt, transform, suffix) + local digest = md5.sumhexa(string .. (salt or "")) + local name = util.pathname(dir, digest .. suffix) + local file = io.open(name, "r") + if file == nil then -- If no cache entry exists, then create a new one. + local file = assert(io.open(name, "w")) + local result = string + if transform ~= nil then + result = transform(result) + end + assert(file:write(result)) + assert(file:close()) + end + return name +end +function util.table_copy(t) + local u = { } + for k, v in pairs(t) do u[k] = v end + return setmetatable(u, getmetatable(t)) +end +function util.expand_tabs_in_line(s, tabstop) + local tab = tabstop or 4 + local corr = 0 + return (s:gsub("()\t", function(p) + local sp = tab - (p - 1 + corr) % tab + corr = corr - 1 + sp + return string.rep(" ", sp) + end)) +end +function util.walk(t, f) + local typ = type(t) + if typ == "string" then + f(t) + elseif typ == "table" then + local i = 1 + local n + n = t[i] + while n do + util.walk(n, f) + i = i + 1 + n = t[i] + end + elseif typ == "function" then + local ok, val = pcall(t) + if ok then + util.walk(val,f) + end + else + f(tostring(t)) + end +end +function util.flatten(ary) + local new = {} + for _,v in ipairs(ary) do + if type(v) == "table" then + for _,w in ipairs(util.flatten(v)) do + new[#new + 1] = w + end + else + new[#new + 1] = v + end + end + return new +end +function util.rope_to_string(rope) + local buffer = {} + util.walk(rope, function(x) buffer[#buffer + 1] = x end) + return table.concat(buffer) +end +function util.rope_last(rope) + if #rope == 0 then + return nil + else + local l = rope[#rope] + if type(l) == "table" then + return util.rope_last(l) + else + return l + end + end +end +function util.intersperse(ary, x) + local new = {} + local l = #ary + for i,v in ipairs(ary) do + local n = #new + new[n + 1] = v + if i ~= l then + new[n + 2] = x + end + end + return new +end +function util.map(ary, f) + local new = {} + for i,v in ipairs(ary) do + new[i] = f(v) + end + return new +end +function util.escaper(char_escapes, string_escapes) + local char_escapes_list = "" + for i,_ in pairs(char_escapes) do + char_escapes_list = char_escapes_list .. i + end + local escapable = S(char_escapes_list) / char_escapes + if string_escapes then + for k,v in pairs(string_escapes) do + escapable = P(k) / v + escapable + end + end + local escape_string = Cs((escapable + any)^0) + return function(s) + return lpeg.match(escape_string, s) + end +end +function util.pathname(dir, file) + if #dir == 0 then + return file + else + return dir .. "/" .. file + end +end +local entities = {} + +local character_entities = { + ["Tab"] = 9, + ["NewLine"] = 10, + ["excl"] = 33, + ["quot"] = 34, + ["QUOT"] = 34, + ["num"] = 35, + ["dollar"] = 36, + ["percnt"] = 37, + ["amp"] = 38, + ["AMP"] = 38, + ["apos"] = 39, + ["lpar"] = 40, + ["rpar"] = 41, + ["ast"] = 42, + ["midast"] = 42, + ["plus"] = 43, + ["comma"] = 44, + ["period"] = 46, + ["sol"] = 47, + ["colon"] = 58, + ["semi"] = 59, + ["lt"] = 60, + ["LT"] = 60, + ["equals"] = 61, + ["gt"] = 62, + ["GT"] = 62, + ["quest"] = 63, + ["commat"] = 64, + ["lsqb"] = 91, + ["lbrack"] = 91, + ["bsol"] = 92, + ["rsqb"] = 93, + ["rbrack"] = 93, + ["Hat"] = 94, + ["lowbar"] = 95, + ["grave"] = 96, + ["DiacriticalGrave"] = 96, + ["lcub"] = 123, + ["lbrace"] = 123, + ["verbar"] = 124, + ["vert"] = 124, + ["VerticalLine"] = 124, + ["rcub"] = 125, + ["rbrace"] = 125, + ["nbsp"] = 160, + ["NonBreakingSpace"] = 160, + ["iexcl"] = 161, + ["cent"] = 162, + ["pound"] = 163, + ["curren"] = 164, + ["yen"] = 165, + ["brvbar"] = 166, + ["sect"] = 167, + ["Dot"] = 168, + ["die"] = 168, + ["DoubleDot"] = 168, + ["uml"] = 168, + ["copy"] = 169, + ["COPY"] = 169, + ["ordf"] = 170, + ["laquo"] = 171, + ["not"] = 172, + ["shy"] = 173, + ["reg"] = 174, + ["circledR"] = 174, + ["REG"] = 174, + ["macr"] = 175, + ["OverBar"] = 175, + ["strns"] = 175, + ["deg"] = 176, + ["plusmn"] = 177, + ["pm"] = 177, + ["PlusMinus"] = 177, + ["sup2"] = 178, + ["sup3"] = 179, + ["acute"] = 180, + ["DiacriticalAcute"] = 180, + ["micro"] = 181, + ["para"] = 182, + ["middot"] = 183, + ["centerdot"] = 183, + ["CenterDot"] = 183, + ["cedil"] = 184, + ["Cedilla"] = 184, + ["sup1"] = 185, + ["ordm"] = 186, + ["raquo"] = 187, + ["frac14"] = 188, + ["frac12"] = 189, + ["half"] = 189, + ["frac34"] = 190, + ["iquest"] = 191, + ["Agrave"] = 192, + ["Aacute"] = 193, + ["Acirc"] = 194, + ["Atilde"] = 195, + ["Auml"] = 196, + ["Aring"] = 197, + ["AElig"] = 198, + ["Ccedil"] = 199, + ["Egrave"] = 200, + ["Eacute"] = 201, + ["Ecirc"] = 202, + ["Euml"] = 203, + ["Igrave"] = 204, + ["Iacute"] = 205, + ["Icirc"] = 206, + ["Iuml"] = 207, + ["ETH"] = 208, + ["Ntilde"] = 209, + ["Ograve"] = 210, + ["Oacute"] = 211, + ["Ocirc"] = 212, + ["Otilde"] = 213, + ["Ouml"] = 214, + ["times"] = 215, + ["Oslash"] = 216, + ["Ugrave"] = 217, + ["Uacute"] = 218, + ["Ucirc"] = 219, + ["Uuml"] = 220, + ["Yacute"] = 221, + ["THORN"] = 222, + ["szlig"] = 223, + ["agrave"] = 224, + ["aacute"] = 225, + ["acirc"] = 226, + ["atilde"] = 227, + ["auml"] = 228, + ["aring"] = 229, + ["aelig"] = 230, + ["ccedil"] = 231, + ["egrave"] = 232, + ["eacute"] = 233, + ["ecirc"] = 234, + ["euml"] = 235, + ["igrave"] = 236, + ["iacute"] = 237, + ["icirc"] = 238, + ["iuml"] = 239, + ["eth"] = 240, + ["ntilde"] = 241, + ["ograve"] = 242, + ["oacute"] = 243, + ["ocirc"] = 244, + ["otilde"] = 245, + ["ouml"] = 246, + ["divide"] = 247, + ["div"] = 247, + ["oslash"] = 248, + ["ugrave"] = 249, + ["uacute"] = 250, + ["ucirc"] = 251, + ["uuml"] = 252, + ["yacute"] = 253, + ["thorn"] = 254, + ["yuml"] = 255, + ["Amacr"] = 256, + ["amacr"] = 257, + ["Abreve"] = 258, + ["abreve"] = 259, + ["Aogon"] = 260, + ["aogon"] = 261, + ["Cacute"] = 262, + ["cacute"] = 263, + ["Ccirc"] = 264, + ["ccirc"] = 265, + ["Cdot"] = 266, + ["cdot"] = 267, + ["Ccaron"] = 268, + ["ccaron"] = 269, + ["Dcaron"] = 270, + ["dcaron"] = 271, + ["Dstrok"] = 272, + ["dstrok"] = 273, + ["Emacr"] = 274, + ["emacr"] = 275, + ["Edot"] = 278, + ["edot"] = 279, + ["Eogon"] = 280, + ["eogon"] = 281, + ["Ecaron"] = 282, + ["ecaron"] = 283, + ["Gcirc"] = 284, + ["gcirc"] = 285, + ["Gbreve"] = 286, + ["gbreve"] = 287, + ["Gdot"] = 288, + ["gdot"] = 289, + ["Gcedil"] = 290, + ["Hcirc"] = 292, + ["hcirc"] = 293, + ["Hstrok"] = 294, + ["hstrok"] = 295, + ["Itilde"] = 296, + ["itilde"] = 297, + ["Imacr"] = 298, + ["imacr"] = 299, + ["Iogon"] = 302, + ["iogon"] = 303, + ["Idot"] = 304, + ["imath"] = 305, + ["inodot"] = 305, + ["IJlig"] = 306, + ["ijlig"] = 307, + ["Jcirc"] = 308, + ["jcirc"] = 309, + ["Kcedil"] = 310, + ["kcedil"] = 311, + ["kgreen"] = 312, + ["Lacute"] = 313, + ["lacute"] = 314, + ["Lcedil"] = 315, + ["lcedil"] = 316, + ["Lcaron"] = 317, + ["lcaron"] = 318, + ["Lmidot"] = 319, + ["lmidot"] = 320, + ["Lstrok"] = 321, + ["lstrok"] = 322, + ["Nacute"] = 323, + ["nacute"] = 324, + ["Ncedil"] = 325, + ["ncedil"] = 326, + ["Ncaron"] = 327, + ["ncaron"] = 328, + ["napos"] = 329, + ["ENG"] = 330, + ["eng"] = 331, + ["Omacr"] = 332, + ["omacr"] = 333, + ["Odblac"] = 336, + ["odblac"] = 337, + ["OElig"] = 338, + ["oelig"] = 339, + ["Racute"] = 340, + ["racute"] = 341, + ["Rcedil"] = 342, + ["rcedil"] = 343, + ["Rcaron"] = 344, + ["rcaron"] = 345, + ["Sacute"] = 346, + ["sacute"] = 347, + ["Scirc"] = 348, + ["scirc"] = 349, + ["Scedil"] = 350, + ["scedil"] = 351, + ["Scaron"] = 352, + ["scaron"] = 353, + ["Tcedil"] = 354, + ["tcedil"] = 355, + ["Tcaron"] = 356, + ["tcaron"] = 357, + ["Tstrok"] = 358, + ["tstrok"] = 359, + ["Utilde"] = 360, + ["utilde"] = 361, + ["Umacr"] = 362, + ["umacr"] = 363, + ["Ubreve"] = 364, + ["ubreve"] = 365, + ["Uring"] = 366, + ["uring"] = 367, + ["Udblac"] = 368, + ["udblac"] = 369, + ["Uogon"] = 370, + ["uogon"] = 371, + ["Wcirc"] = 372, + ["wcirc"] = 373, + ["Ycirc"] = 374, + ["ycirc"] = 375, + ["Yuml"] = 376, + ["Zacute"] = 377, + ["zacute"] = 378, + ["Zdot"] = 379, + ["zdot"] = 380, + ["Zcaron"] = 381, + ["zcaron"] = 382, + ["fnof"] = 402, + ["imped"] = 437, + ["gacute"] = 501, + ["jmath"] = 567, + ["circ"] = 710, + ["caron"] = 711, + ["Hacek"] = 711, + ["breve"] = 728, + ["Breve"] = 728, + ["dot"] = 729, + ["DiacriticalDot"] = 729, + ["ring"] = 730, + ["ogon"] = 731, + ["tilde"] = 732, + ["DiacriticalTilde"] = 732, + ["dblac"] = 733, + ["DiacriticalDoubleAcute"] = 733, + ["DownBreve"] = 785, + ["UnderBar"] = 818, + ["Alpha"] = 913, + ["Beta"] = 914, + ["Gamma"] = 915, + ["Delta"] = 916, + ["Epsilon"] = 917, + ["Zeta"] = 918, + ["Eta"] = 919, + ["Theta"] = 920, + ["Iota"] = 921, + ["Kappa"] = 922, + ["Lambda"] = 923, + ["Mu"] = 924, + ["Nu"] = 925, + ["Xi"] = 926, + ["Omicron"] = 927, + ["Pi"] = 928, + ["Rho"] = 929, + ["Sigma"] = 931, + ["Tau"] = 932, + ["Upsilon"] = 933, + ["Phi"] = 934, + ["Chi"] = 935, + ["Psi"] = 936, + ["Omega"] = 937, + ["alpha"] = 945, + ["beta"] = 946, + ["gamma"] = 947, + ["delta"] = 948, + ["epsiv"] = 949, + ["varepsilon"] = 949, + ["epsilon"] = 949, + ["zeta"] = 950, + ["eta"] = 951, + ["theta"] = 952, + ["iota"] = 953, + ["kappa"] = 954, + ["lambda"] = 955, + ["mu"] = 956, + ["nu"] = 957, + ["xi"] = 958, + ["omicron"] = 959, + ["pi"] = 960, + ["rho"] = 961, + ["sigmav"] = 962, + ["varsigma"] = 962, + ["sigmaf"] = 962, + ["sigma"] = 963, + ["tau"] = 964, + ["upsi"] = 965, + ["upsilon"] = 965, + ["phi"] = 966, + ["phiv"] = 966, + ["varphi"] = 966, + ["chi"] = 967, + ["psi"] = 968, + ["omega"] = 969, + ["thetav"] = 977, + ["vartheta"] = 977, + ["thetasym"] = 977, + ["Upsi"] = 978, + ["upsih"] = 978, + ["straightphi"] = 981, + ["piv"] = 982, + ["varpi"] = 982, + ["Gammad"] = 988, + ["gammad"] = 989, + ["digamma"] = 989, + ["kappav"] = 1008, + ["varkappa"] = 1008, + ["rhov"] = 1009, + ["varrho"] = 1009, + ["epsi"] = 1013, + ["straightepsilon"] = 1013, + ["bepsi"] = 1014, + ["backepsilon"] = 1014, + ["IOcy"] = 1025, + ["DJcy"] = 1026, + ["GJcy"] = 1027, + ["Jukcy"] = 1028, + ["DScy"] = 1029, + ["Iukcy"] = 1030, + ["YIcy"] = 1031, + ["Jsercy"] = 1032, + ["LJcy"] = 1033, + ["NJcy"] = 1034, + ["TSHcy"] = 1035, + ["KJcy"] = 1036, + ["Ubrcy"] = 1038, + ["DZcy"] = 1039, + ["Acy"] = 1040, + ["Bcy"] = 1041, + ["Vcy"] = 1042, + ["Gcy"] = 1043, + ["Dcy"] = 1044, + ["IEcy"] = 1045, + ["ZHcy"] = 1046, + ["Zcy"] = 1047, + ["Icy"] = 1048, + ["Jcy"] = 1049, + ["Kcy"] = 1050, + ["Lcy"] = 1051, + ["Mcy"] = 1052, + ["Ncy"] = 1053, + ["Ocy"] = 1054, + ["Pcy"] = 1055, + ["Rcy"] = 1056, + ["Scy"] = 1057, + ["Tcy"] = 1058, + ["Ucy"] = 1059, + ["Fcy"] = 1060, + ["KHcy"] = 1061, + ["TScy"] = 1062, + ["CHcy"] = 1063, + ["SHcy"] = 1064, + ["SHCHcy"] = 1065, + ["HARDcy"] = 1066, + ["Ycy"] = 1067, + ["SOFTcy"] = 1068, + ["Ecy"] = 1069, + ["YUcy"] = 1070, + ["YAcy"] = 1071, + ["acy"] = 1072, + ["bcy"] = 1073, + ["vcy"] = 1074, + ["gcy"] = 1075, + ["dcy"] = 1076, + ["iecy"] = 1077, + ["zhcy"] = 1078, + ["zcy"] = 1079, + ["icy"] = 1080, + ["jcy"] = 1081, + ["kcy"] = 1082, + ["lcy"] = 1083, + ["mcy"] = 1084, + ["ncy"] = 1085, + ["ocy"] = 1086, + ["pcy"] = 1087, + ["rcy"] = 1088, + ["scy"] = 1089, + ["tcy"] = 1090, + ["ucy"] = 1091, + ["fcy"] = 1092, + ["khcy"] = 1093, + ["tscy"] = 1094, + ["chcy"] = 1095, + ["shcy"] = 1096, + ["shchcy"] = 1097, + ["hardcy"] = 1098, + ["ycy"] = 1099, + ["softcy"] = 1100, + ["ecy"] = 1101, + ["yucy"] = 1102, + ["yacy"] = 1103, + ["iocy"] = 1105, + ["djcy"] = 1106, + ["gjcy"] = 1107, + ["jukcy"] = 1108, + ["dscy"] = 1109, + ["iukcy"] = 1110, + ["yicy"] = 1111, + ["jsercy"] = 1112, + ["ljcy"] = 1113, + ["njcy"] = 1114, + ["tshcy"] = 1115, + ["kjcy"] = 1116, + ["ubrcy"] = 1118, + ["dzcy"] = 1119, + ["ensp"] = 8194, + ["emsp"] = 8195, + ["emsp13"] = 8196, + ["emsp14"] = 8197, + ["numsp"] = 8199, + ["puncsp"] = 8200, + ["thinsp"] = 8201, + ["ThinSpace"] = 8201, + ["hairsp"] = 8202, + ["VeryThinSpace"] = 8202, + ["ZeroWidthSpace"] = 8203, + ["NegativeVeryThinSpace"] = 8203, + ["NegativeThinSpace"] = 8203, + ["NegativeMediumSpace"] = 8203, + ["NegativeThickSpace"] = 8203, + ["zwnj"] = 8204, + ["zwj"] = 8205, + ["lrm"] = 8206, + ["rlm"] = 8207, + ["hyphen"] = 8208, + ["dash"] = 8208, + ["ndash"] = 8211, + ["mdash"] = 8212, + ["horbar"] = 8213, + ["Verbar"] = 8214, + ["Vert"] = 8214, + ["lsquo"] = 8216, + ["OpenCurlyQuote"] = 8216, + ["rsquo"] = 8217, + ["rsquor"] = 8217, + ["CloseCurlyQuote"] = 8217, + ["lsquor"] = 8218, + ["sbquo"] = 8218, + ["ldquo"] = 8220, + ["OpenCurlyDoubleQuote"] = 8220, + ["rdquo"] = 8221, + ["rdquor"] = 8221, + ["CloseCurlyDoubleQuote"] = 8221, + ["ldquor"] = 8222, + ["bdquo"] = 8222, + ["dagger"] = 8224, + ["Dagger"] = 8225, + ["ddagger"] = 8225, + ["bull"] = 8226, + ["bullet"] = 8226, + ["nldr"] = 8229, + ["hellip"] = 8230, + ["mldr"] = 8230, + ["permil"] = 8240, + ["pertenk"] = 8241, + ["prime"] = 8242, + ["Prime"] = 8243, + ["tprime"] = 8244, + ["bprime"] = 8245, + ["backprime"] = 8245, + ["lsaquo"] = 8249, + ["rsaquo"] = 8250, + ["oline"] = 8254, + ["caret"] = 8257, + ["hybull"] = 8259, + ["frasl"] = 8260, + ["bsemi"] = 8271, + ["qprime"] = 8279, + ["MediumSpace"] = 8287, + ["NoBreak"] = 8288, + ["ApplyFunction"] = 8289, + ["af"] = 8289, + ["InvisibleTimes"] = 8290, + ["it"] = 8290, + ["InvisibleComma"] = 8291, + ["ic"] = 8291, + ["euro"] = 8364, + ["tdot"] = 8411, + ["TripleDot"] = 8411, + ["DotDot"] = 8412, + ["Copf"] = 8450, + ["complexes"] = 8450, + ["incare"] = 8453, + ["gscr"] = 8458, + ["hamilt"] = 8459, + ["HilbertSpace"] = 8459, + ["Hscr"] = 8459, + ["Hfr"] = 8460, + ["Poincareplane"] = 8460, + ["quaternions"] = 8461, + ["Hopf"] = 8461, + ["planckh"] = 8462, + ["planck"] = 8463, + ["hbar"] = 8463, + ["plankv"] = 8463, + ["hslash"] = 8463, + ["Iscr"] = 8464, + ["imagline"] = 8464, + ["image"] = 8465, + ["Im"] = 8465, + ["imagpart"] = 8465, + ["Ifr"] = 8465, + ["Lscr"] = 8466, + ["lagran"] = 8466, + ["Laplacetrf"] = 8466, + ["ell"] = 8467, + ["Nopf"] = 8469, + ["naturals"] = 8469, + ["numero"] = 8470, + ["copysr"] = 8471, + ["weierp"] = 8472, + ["wp"] = 8472, + ["Popf"] = 8473, + ["primes"] = 8473, + ["rationals"] = 8474, + ["Qopf"] = 8474, + ["Rscr"] = 8475, + ["realine"] = 8475, + ["real"] = 8476, + ["Re"] = 8476, + ["realpart"] = 8476, + ["Rfr"] = 8476, + ["reals"] = 8477, + ["Ropf"] = 8477, + ["rx"] = 8478, + ["trade"] = 8482, + ["TRADE"] = 8482, + ["integers"] = 8484, + ["Zopf"] = 8484, + ["ohm"] = 8486, + ["mho"] = 8487, + ["Zfr"] = 8488, + ["zeetrf"] = 8488, + ["iiota"] = 8489, + ["angst"] = 8491, + ["bernou"] = 8492, + ["Bernoullis"] = 8492, + ["Bscr"] = 8492, + ["Cfr"] = 8493, + ["Cayleys"] = 8493, + ["escr"] = 8495, + ["Escr"] = 8496, + ["expectation"] = 8496, + ["Fscr"] = 8497, + ["Fouriertrf"] = 8497, + ["phmmat"] = 8499, + ["Mellintrf"] = 8499, + ["Mscr"] = 8499, + ["order"] = 8500, + ["orderof"] = 8500, + ["oscr"] = 8500, + ["alefsym"] = 8501, + ["aleph"] = 8501, + ["beth"] = 8502, + ["gimel"] = 8503, + ["daleth"] = 8504, + ["CapitalDifferentialD"] = 8517, + ["DD"] = 8517, + ["DifferentialD"] = 8518, + ["dd"] = 8518, + ["ExponentialE"] = 8519, + ["exponentiale"] = 8519, + ["ee"] = 8519, + ["ImaginaryI"] = 8520, + ["ii"] = 8520, + ["frac13"] = 8531, + ["frac23"] = 8532, + ["frac15"] = 8533, + ["frac25"] = 8534, + ["frac35"] = 8535, + ["frac45"] = 8536, + ["frac16"] = 8537, + ["frac56"] = 8538, + ["frac18"] = 8539, + ["frac38"] = 8540, + ["frac58"] = 8541, + ["frac78"] = 8542, + ["larr"] = 8592, + ["leftarrow"] = 8592, + ["LeftArrow"] = 8592, + ["slarr"] = 8592, + ["ShortLeftArrow"] = 8592, + ["uarr"] = 8593, + ["uparrow"] = 8593, + ["UpArrow"] = 8593, + ["ShortUpArrow"] = 8593, + ["rarr"] = 8594, + ["rightarrow"] = 8594, + ["RightArrow"] = 8594, + ["srarr"] = 8594, + ["ShortRightArrow"] = 8594, + ["darr"] = 8595, + ["downarrow"] = 8595, + ["DownArrow"] = 8595, + ["ShortDownArrow"] = 8595, + ["harr"] = 8596, + ["leftrightarrow"] = 8596, + ["LeftRightArrow"] = 8596, + ["varr"] = 8597, + ["updownarrow"] = 8597, + ["UpDownArrow"] = 8597, + ["nwarr"] = 8598, + ["UpperLeftArrow"] = 8598, + ["nwarrow"] = 8598, + ["nearr"] = 8599, + ["UpperRightArrow"] = 8599, + ["nearrow"] = 8599, + ["searr"] = 8600, + ["searrow"] = 8600, + ["LowerRightArrow"] = 8600, + ["swarr"] = 8601, + ["swarrow"] = 8601, + ["LowerLeftArrow"] = 8601, + ["nlarr"] = 8602, + ["nleftarrow"] = 8602, + ["nrarr"] = 8603, + ["nrightarrow"] = 8603, + ["rarrw"] = 8605, + ["rightsquigarrow"] = 8605, + ["Larr"] = 8606, + ["twoheadleftarrow"] = 8606, + ["Uarr"] = 8607, + ["Rarr"] = 8608, + ["twoheadrightarrow"] = 8608, + ["Darr"] = 8609, + ["larrtl"] = 8610, + ["leftarrowtail"] = 8610, + ["rarrtl"] = 8611, + ["rightarrowtail"] = 8611, + ["LeftTeeArrow"] = 8612, + ["mapstoleft"] = 8612, + ["UpTeeArrow"] = 8613, + ["mapstoup"] = 8613, + ["map"] = 8614, + ["RightTeeArrow"] = 8614, + ["mapsto"] = 8614, + ["DownTeeArrow"] = 8615, + ["mapstodown"] = 8615, + ["larrhk"] = 8617, + ["hookleftarrow"] = 8617, + ["rarrhk"] = 8618, + ["hookrightarrow"] = 8618, + ["larrlp"] = 8619, + ["looparrowleft"] = 8619, + ["rarrlp"] = 8620, + ["looparrowright"] = 8620, + ["harrw"] = 8621, + ["leftrightsquigarrow"] = 8621, + ["nharr"] = 8622, + ["nleftrightarrow"] = 8622, + ["lsh"] = 8624, + ["Lsh"] = 8624, + ["rsh"] = 8625, + ["Rsh"] = 8625, + ["ldsh"] = 8626, + ["rdsh"] = 8627, + ["crarr"] = 8629, + ["cularr"] = 8630, + ["curvearrowleft"] = 8630, + ["curarr"] = 8631, + ["curvearrowright"] = 8631, + ["olarr"] = 8634, + ["circlearrowleft"] = 8634, + ["orarr"] = 8635, + ["circlearrowright"] = 8635, + ["lharu"] = 8636, + ["LeftVector"] = 8636, + ["leftharpoonup"] = 8636, + ["lhard"] = 8637, + ["leftharpoondown"] = 8637, + ["DownLeftVector"] = 8637, + ["uharr"] = 8638, + ["upharpoonright"] = 8638, + ["RightUpVector"] = 8638, + ["uharl"] = 8639, + ["upharpoonleft"] = 8639, + ["LeftUpVector"] = 8639, + ["rharu"] = 8640, + ["RightVector"] = 8640, + ["rightharpoonup"] = 8640, + ["rhard"] = 8641, + ["rightharpoondown"] = 8641, + ["DownRightVector"] = 8641, + ["dharr"] = 8642, + ["RightDownVector"] = 8642, + ["downharpoonright"] = 8642, + ["dharl"] = 8643, + ["LeftDownVector"] = 8643, + ["downharpoonleft"] = 8643, + ["rlarr"] = 8644, + ["rightleftarrows"] = 8644, + ["RightArrowLeftArrow"] = 8644, + ["udarr"] = 8645, + ["UpArrowDownArrow"] = 8645, + ["lrarr"] = 8646, + ["leftrightarrows"] = 8646, + ["LeftArrowRightArrow"] = 8646, + ["llarr"] = 8647, + ["leftleftarrows"] = 8647, + ["uuarr"] = 8648, + ["upuparrows"] = 8648, + ["rrarr"] = 8649, + ["rightrightarrows"] = 8649, + ["ddarr"] = 8650, + ["downdownarrows"] = 8650, + ["lrhar"] = 8651, + ["ReverseEquilibrium"] = 8651, + ["leftrightharpoons"] = 8651, + ["rlhar"] = 8652, + ["rightleftharpoons"] = 8652, + ["Equilibrium"] = 8652, + ["nlArr"] = 8653, + ["nLeftarrow"] = 8653, + ["nhArr"] = 8654, + ["nLeftrightarrow"] = 8654, + ["nrArr"] = 8655, + ["nRightarrow"] = 8655, + ["lArr"] = 8656, + ["Leftarrow"] = 8656, + ["DoubleLeftArrow"] = 8656, + ["uArr"] = 8657, + ["Uparrow"] = 8657, + ["DoubleUpArrow"] = 8657, + ["rArr"] = 8658, + ["Rightarrow"] = 8658, + ["Implies"] = 8658, + ["DoubleRightArrow"] = 8658, + ["dArr"] = 8659, + ["Downarrow"] = 8659, + ["DoubleDownArrow"] = 8659, + ["hArr"] = 8660, + ["Leftrightarrow"] = 8660, + ["DoubleLeftRightArrow"] = 8660, + ["iff"] = 8660, + ["vArr"] = 8661, + ["Updownarrow"] = 8661, + ["DoubleUpDownArrow"] = 8661, + ["nwArr"] = 8662, + ["neArr"] = 8663, + ["seArr"] = 8664, + ["swArr"] = 8665, + ["lAarr"] = 8666, + ["Lleftarrow"] = 8666, + ["rAarr"] = 8667, + ["Rrightarrow"] = 8667, + ["zigrarr"] = 8669, + ["larrb"] = 8676, + ["LeftArrowBar"] = 8676, + ["rarrb"] = 8677, + ["RightArrowBar"] = 8677, + ["duarr"] = 8693, + ["DownArrowUpArrow"] = 8693, + ["loarr"] = 8701, + ["roarr"] = 8702, + ["hoarr"] = 8703, + ["forall"] = 8704, + ["ForAll"] = 8704, + ["comp"] = 8705, + ["complement"] = 8705, + ["part"] = 8706, + ["PartialD"] = 8706, + ["exist"] = 8707, + ["Exists"] = 8707, + ["nexist"] = 8708, + ["NotExists"] = 8708, + ["nexists"] = 8708, + ["empty"] = 8709, + ["emptyset"] = 8709, + ["emptyv"] = 8709, + ["varnothing"] = 8709, + ["nabla"] = 8711, + ["Del"] = 8711, + ["isin"] = 8712, + ["isinv"] = 8712, + ["Element"] = 8712, + ["in"] = 8712, + ["notin"] = 8713, + ["NotElement"] = 8713, + ["notinva"] = 8713, + ["niv"] = 8715, + ["ReverseElement"] = 8715, + ["ni"] = 8715, + ["SuchThat"] = 8715, + ["notni"] = 8716, + ["notniva"] = 8716, + ["NotReverseElement"] = 8716, + ["prod"] = 8719, + ["Product"] = 8719, + ["coprod"] = 8720, + ["Coproduct"] = 8720, + ["sum"] = 8721, + ["Sum"] = 8721, + ["minus"] = 8722, + ["mnplus"] = 8723, + ["mp"] = 8723, + ["MinusPlus"] = 8723, + ["plusdo"] = 8724, + ["dotplus"] = 8724, + ["setmn"] = 8726, + ["setminus"] = 8726, + ["Backslash"] = 8726, + ["ssetmn"] = 8726, + ["smallsetminus"] = 8726, + ["lowast"] = 8727, + ["compfn"] = 8728, + ["SmallCircle"] = 8728, + ["radic"] = 8730, + ["Sqrt"] = 8730, + ["prop"] = 8733, + ["propto"] = 8733, + ["Proportional"] = 8733, + ["vprop"] = 8733, + ["varpropto"] = 8733, + ["infin"] = 8734, + ["angrt"] = 8735, + ["ang"] = 8736, + ["angle"] = 8736, + ["angmsd"] = 8737, + ["measuredangle"] = 8737, + ["angsph"] = 8738, + ["mid"] = 8739, + ["VerticalBar"] = 8739, + ["smid"] = 8739, + ["shortmid"] = 8739, + ["nmid"] = 8740, + ["NotVerticalBar"] = 8740, + ["nsmid"] = 8740, + ["nshortmid"] = 8740, + ["par"] = 8741, + ["parallel"] = 8741, + ["DoubleVerticalBar"] = 8741, + ["spar"] = 8741, + ["shortparallel"] = 8741, + ["npar"] = 8742, + ["nparallel"] = 8742, + ["NotDoubleVerticalBar"] = 8742, + ["nspar"] = 8742, + ["nshortparallel"] = 8742, + ["and"] = 8743, + ["wedge"] = 8743, + ["or"] = 8744, + ["vee"] = 8744, + ["cap"] = 8745, + ["cup"] = 8746, + ["int"] = 8747, + ["Integral"] = 8747, + ["Int"] = 8748, + ["tint"] = 8749, + ["iiint"] = 8749, + ["conint"] = 8750, + ["oint"] = 8750, + ["ContourIntegral"] = 8750, + ["Conint"] = 8751, + ["DoubleContourIntegral"] = 8751, + ["Cconint"] = 8752, + ["cwint"] = 8753, + ["cwconint"] = 8754, + ["ClockwiseContourIntegral"] = 8754, + ["awconint"] = 8755, + ["CounterClockwiseContourIntegral"] = 8755, + ["there4"] = 8756, + ["therefore"] = 8756, + ["Therefore"] = 8756, + ["becaus"] = 8757, + ["because"] = 8757, + ["Because"] = 8757, + ["ratio"] = 8758, + ["Colon"] = 8759, + ["Proportion"] = 8759, + ["minusd"] = 8760, + ["dotminus"] = 8760, + ["mDDot"] = 8762, + ["homtht"] = 8763, + ["sim"] = 8764, + ["Tilde"] = 8764, + ["thksim"] = 8764, + ["thicksim"] = 8764, + ["bsim"] = 8765, + ["backsim"] = 8765, + ["ac"] = 8766, + ["mstpos"] = 8766, + ["acd"] = 8767, + ["wreath"] = 8768, + ["VerticalTilde"] = 8768, + ["wr"] = 8768, + ["nsim"] = 8769, + ["NotTilde"] = 8769, + ["esim"] = 8770, + ["EqualTilde"] = 8770, + ["eqsim"] = 8770, + ["sime"] = 8771, + ["TildeEqual"] = 8771, + ["simeq"] = 8771, + ["nsime"] = 8772, + ["nsimeq"] = 8772, + ["NotTildeEqual"] = 8772, + ["cong"] = 8773, + ["TildeFullEqual"] = 8773, + ["simne"] = 8774, + ["ncong"] = 8775, + ["NotTildeFullEqual"] = 8775, + ["asymp"] = 8776, + ["ap"] = 8776, + ["TildeTilde"] = 8776, + ["approx"] = 8776, + ["thkap"] = 8776, + ["thickapprox"] = 8776, + ["nap"] = 8777, + ["NotTildeTilde"] = 8777, + ["napprox"] = 8777, + ["ape"] = 8778, + ["approxeq"] = 8778, + ["apid"] = 8779, + ["bcong"] = 8780, + ["backcong"] = 8780, + ["asympeq"] = 8781, + ["CupCap"] = 8781, + ["bump"] = 8782, + ["HumpDownHump"] = 8782, + ["Bumpeq"] = 8782, + ["bumpe"] = 8783, + ["HumpEqual"] = 8783, + ["bumpeq"] = 8783, + ["esdot"] = 8784, + ["DotEqual"] = 8784, + ["doteq"] = 8784, + ["eDot"] = 8785, + ["doteqdot"] = 8785, + ["efDot"] = 8786, + ["fallingdotseq"] = 8786, + ["erDot"] = 8787, + ["risingdotseq"] = 8787, + ["colone"] = 8788, + ["coloneq"] = 8788, + ["Assign"] = 8788, + ["ecolon"] = 8789, + ["eqcolon"] = 8789, + ["ecir"] = 8790, + ["eqcirc"] = 8790, + ["cire"] = 8791, + ["circeq"] = 8791, + ["wedgeq"] = 8793, + ["veeeq"] = 8794, + ["trie"] = 8796, + ["triangleq"] = 8796, + ["equest"] = 8799, + ["questeq"] = 8799, + ["ne"] = 8800, + ["NotEqual"] = 8800, + ["equiv"] = 8801, + ["Congruent"] = 8801, + ["nequiv"] = 8802, + ["NotCongruent"] = 8802, + ["le"] = 8804, + ["leq"] = 8804, + ["ge"] = 8805, + ["GreaterEqual"] = 8805, + ["geq"] = 8805, + ["lE"] = 8806, + ["LessFullEqual"] = 8806, + ["leqq"] = 8806, + ["gE"] = 8807, + ["GreaterFullEqual"] = 8807, + ["geqq"] = 8807, + ["lnE"] = 8808, + ["lneqq"] = 8808, + ["gnE"] = 8809, + ["gneqq"] = 8809, + ["Lt"] = 8810, + ["NestedLessLess"] = 8810, + ["ll"] = 8810, + ["Gt"] = 8811, + ["NestedGreaterGreater"] = 8811, + ["gg"] = 8811, + ["twixt"] = 8812, + ["between"] = 8812, + ["NotCupCap"] = 8813, + ["nlt"] = 8814, + ["NotLess"] = 8814, + ["nless"] = 8814, + ["ngt"] = 8815, + ["NotGreater"] = 8815, + ["ngtr"] = 8815, + ["nle"] = 8816, + ["NotLessEqual"] = 8816, + ["nleq"] = 8816, + ["nge"] = 8817, + ["NotGreaterEqual"] = 8817, + ["ngeq"] = 8817, + ["lsim"] = 8818, + ["LessTilde"] = 8818, + ["lesssim"] = 8818, + ["gsim"] = 8819, + ["gtrsim"] = 8819, + ["GreaterTilde"] = 8819, + ["nlsim"] = 8820, + ["NotLessTilde"] = 8820, + ["ngsim"] = 8821, + ["NotGreaterTilde"] = 8821, + ["lg"] = 8822, + ["lessgtr"] = 8822, + ["LessGreater"] = 8822, + ["gl"] = 8823, + ["gtrless"] = 8823, + ["GreaterLess"] = 8823, + ["ntlg"] = 8824, + ["NotLessGreater"] = 8824, + ["ntgl"] = 8825, + ["NotGreaterLess"] = 8825, + ["pr"] = 8826, + ["Precedes"] = 8826, + ["prec"] = 8826, + ["sc"] = 8827, + ["Succeeds"] = 8827, + ["succ"] = 8827, + ["prcue"] = 8828, + ["PrecedesSlantEqual"] = 8828, + ["preccurlyeq"] = 8828, + ["sccue"] = 8829, + ["SucceedsSlantEqual"] = 8829, + ["succcurlyeq"] = 8829, + ["prsim"] = 8830, + ["precsim"] = 8830, + ["PrecedesTilde"] = 8830, + ["scsim"] = 8831, + ["succsim"] = 8831, + ["SucceedsTilde"] = 8831, + ["npr"] = 8832, + ["nprec"] = 8832, + ["NotPrecedes"] = 8832, + ["nsc"] = 8833, + ["nsucc"] = 8833, + ["NotSucceeds"] = 8833, + ["sub"] = 8834, + ["subset"] = 8834, + ["sup"] = 8835, + ["supset"] = 8835, + ["Superset"] = 8835, + ["nsub"] = 8836, + ["nsup"] = 8837, + ["sube"] = 8838, + ["SubsetEqual"] = 8838, + ["subseteq"] = 8838, + ["supe"] = 8839, + ["supseteq"] = 8839, + ["SupersetEqual"] = 8839, + ["nsube"] = 8840, + ["nsubseteq"] = 8840, + ["NotSubsetEqual"] = 8840, + ["nsupe"] = 8841, + ["nsupseteq"] = 8841, + ["NotSupersetEqual"] = 8841, + ["subne"] = 8842, + ["subsetneq"] = 8842, + ["supne"] = 8843, + ["supsetneq"] = 8843, + ["cupdot"] = 8845, + ["uplus"] = 8846, + ["UnionPlus"] = 8846, + ["sqsub"] = 8847, + ["SquareSubset"] = 8847, + ["sqsubset"] = 8847, + ["sqsup"] = 8848, + ["SquareSuperset"] = 8848, + ["sqsupset"] = 8848, + ["sqsube"] = 8849, + ["SquareSubsetEqual"] = 8849, + ["sqsubseteq"] = 8849, + ["sqsupe"] = 8850, + ["SquareSupersetEqual"] = 8850, + ["sqsupseteq"] = 8850, + ["sqcap"] = 8851, + ["SquareIntersection"] = 8851, + ["sqcup"] = 8852, + ["SquareUnion"] = 8852, + ["oplus"] = 8853, + ["CirclePlus"] = 8853, + ["ominus"] = 8854, + ["CircleMinus"] = 8854, + ["otimes"] = 8855, + ["CircleTimes"] = 8855, + ["osol"] = 8856, + ["odot"] = 8857, + ["CircleDot"] = 8857, + ["ocir"] = 8858, + ["circledcirc"] = 8858, + ["oast"] = 8859, + ["circledast"] = 8859, + ["odash"] = 8861, + ["circleddash"] = 8861, + ["plusb"] = 8862, + ["boxplus"] = 8862, + ["minusb"] = 8863, + ["boxminus"] = 8863, + ["timesb"] = 8864, + ["boxtimes"] = 8864, + ["sdotb"] = 8865, + ["dotsquare"] = 8865, + ["vdash"] = 8866, + ["RightTee"] = 8866, + ["dashv"] = 8867, + ["LeftTee"] = 8867, + ["top"] = 8868, + ["DownTee"] = 8868, + ["bottom"] = 8869, + ["bot"] = 8869, + ["perp"] = 8869, + ["UpTee"] = 8869, + ["models"] = 8871, + ["vDash"] = 8872, + ["DoubleRightTee"] = 8872, + ["Vdash"] = 8873, + ["Vvdash"] = 8874, + ["VDash"] = 8875, + ["nvdash"] = 8876, + ["nvDash"] = 8877, + ["nVdash"] = 8878, + ["nVDash"] = 8879, + ["prurel"] = 8880, + ["vltri"] = 8882, + ["vartriangleleft"] = 8882, + ["LeftTriangle"] = 8882, + ["vrtri"] = 8883, + ["vartriangleright"] = 8883, + ["RightTriangle"] = 8883, + ["ltrie"] = 8884, + ["trianglelefteq"] = 8884, + ["LeftTriangleEqual"] = 8884, + ["rtrie"] = 8885, + ["trianglerighteq"] = 8885, + ["RightTriangleEqual"] = 8885, + ["origof"] = 8886, + ["imof"] = 8887, + ["mumap"] = 8888, + ["multimap"] = 8888, + ["hercon"] = 8889, + ["intcal"] = 8890, + ["intercal"] = 8890, + ["veebar"] = 8891, + ["barvee"] = 8893, + ["angrtvb"] = 8894, + ["lrtri"] = 8895, + ["xwedge"] = 8896, + ["Wedge"] = 8896, + ["bigwedge"] = 8896, + ["xvee"] = 8897, + ["Vee"] = 8897, + ["bigvee"] = 8897, + ["xcap"] = 8898, + ["Intersection"] = 8898, + ["bigcap"] = 8898, + ["xcup"] = 8899, + ["Union"] = 8899, + ["bigcup"] = 8899, + ["diam"] = 8900, + ["diamond"] = 8900, + ["Diamond"] = 8900, + ["sdot"] = 8901, + ["sstarf"] = 8902, + ["Star"] = 8902, + ["divonx"] = 8903, + ["divideontimes"] = 8903, + ["bowtie"] = 8904, + ["ltimes"] = 8905, + ["rtimes"] = 8906, + ["lthree"] = 8907, + ["leftthreetimes"] = 8907, + ["rthree"] = 8908, + ["rightthreetimes"] = 8908, + ["bsime"] = 8909, + ["backsimeq"] = 8909, + ["cuvee"] = 8910, + ["curlyvee"] = 8910, + ["cuwed"] = 8911, + ["curlywedge"] = 8911, + ["Sub"] = 8912, + ["Subset"] = 8912, + ["Sup"] = 8913, + ["Supset"] = 8913, + ["Cap"] = 8914, + ["Cup"] = 8915, + ["fork"] = 8916, + ["pitchfork"] = 8916, + ["epar"] = 8917, + ["ltdot"] = 8918, + ["lessdot"] = 8918, + ["gtdot"] = 8919, + ["gtrdot"] = 8919, + ["Ll"] = 8920, + ["Gg"] = 8921, + ["ggg"] = 8921, + ["leg"] = 8922, + ["LessEqualGreater"] = 8922, + ["lesseqgtr"] = 8922, + ["gel"] = 8923, + ["gtreqless"] = 8923, + ["GreaterEqualLess"] = 8923, + ["cuepr"] = 8926, + ["curlyeqprec"] = 8926, + ["cuesc"] = 8927, + ["curlyeqsucc"] = 8927, + ["nprcue"] = 8928, + ["NotPrecedesSlantEqual"] = 8928, + ["nsccue"] = 8929, + ["NotSucceedsSlantEqual"] = 8929, + ["nsqsube"] = 8930, + ["NotSquareSubsetEqual"] = 8930, + ["nsqsupe"] = 8931, + ["NotSquareSupersetEqual"] = 8931, + ["lnsim"] = 8934, + ["gnsim"] = 8935, + ["prnsim"] = 8936, + ["precnsim"] = 8936, + ["scnsim"] = 8937, + ["succnsim"] = 8937, + ["nltri"] = 8938, + ["ntriangleleft"] = 8938, + ["NotLeftTriangle"] = 8938, + ["nrtri"] = 8939, + ["ntriangleright"] = 8939, + ["NotRightTriangle"] = 8939, + ["nltrie"] = 8940, + ["ntrianglelefteq"] = 8940, + ["NotLeftTriangleEqual"] = 8940, + ["nrtrie"] = 8941, + ["ntrianglerighteq"] = 8941, + ["NotRightTriangleEqual"] = 8941, + ["vellip"] = 8942, + ["ctdot"] = 8943, + ["utdot"] = 8944, + ["dtdot"] = 8945, + ["disin"] = 8946, + ["isinsv"] = 8947, + ["isins"] = 8948, + ["isindot"] = 8949, + ["notinvc"] = 8950, + ["notinvb"] = 8951, + ["isinE"] = 8953, + ["nisd"] = 8954, + ["xnis"] = 8955, + ["nis"] = 8956, + ["notnivc"] = 8957, + ["notnivb"] = 8958, + ["barwed"] = 8965, + ["barwedge"] = 8965, + ["Barwed"] = 8966, + ["doublebarwedge"] = 8966, + ["lceil"] = 8968, + ["LeftCeiling"] = 8968, + ["rceil"] = 8969, + ["RightCeiling"] = 8969, + ["lfloor"] = 8970, + ["LeftFloor"] = 8970, + ["rfloor"] = 8971, + ["RightFloor"] = 8971, + ["drcrop"] = 8972, + ["dlcrop"] = 8973, + ["urcrop"] = 8974, + ["ulcrop"] = 8975, + ["bnot"] = 8976, + ["profline"] = 8978, + ["profsurf"] = 8979, + ["telrec"] = 8981, + ["target"] = 8982, + ["ulcorn"] = 8988, + ["ulcorner"] = 8988, + ["urcorn"] = 8989, + ["urcorner"] = 8989, + ["dlcorn"] = 8990, + ["llcorner"] = 8990, + ["drcorn"] = 8991, + ["lrcorner"] = 8991, + ["frown"] = 8994, + ["sfrown"] = 8994, + ["smile"] = 8995, + ["ssmile"] = 8995, + ["cylcty"] = 9005, + ["profalar"] = 9006, + ["topbot"] = 9014, + ["ovbar"] = 9021, + ["solbar"] = 9023, + ["angzarr"] = 9084, + ["lmoust"] = 9136, + ["lmoustache"] = 9136, + ["rmoust"] = 9137, + ["rmoustache"] = 9137, + ["tbrk"] = 9140, + ["OverBracket"] = 9140, + ["bbrk"] = 9141, + ["UnderBracket"] = 9141, + ["bbrktbrk"] = 9142, + ["OverParenthesis"] = 9180, + ["UnderParenthesis"] = 9181, + ["OverBrace"] = 9182, + ["UnderBrace"] = 9183, + ["trpezium"] = 9186, + ["elinters"] = 9191, + ["blank"] = 9251, + ["oS"] = 9416, + ["circledS"] = 9416, + ["boxh"] = 9472, + ["HorizontalLine"] = 9472, + ["boxv"] = 9474, + ["boxdr"] = 9484, + ["boxdl"] = 9488, + ["boxur"] = 9492, + ["boxul"] = 9496, + ["boxvr"] = 9500, + ["boxvl"] = 9508, + ["boxhd"] = 9516, + ["boxhu"] = 9524, + ["boxvh"] = 9532, + ["boxH"] = 9552, + ["boxV"] = 9553, + ["boxdR"] = 9554, + ["boxDr"] = 9555, + ["boxDR"] = 9556, + ["boxdL"] = 9557, + ["boxDl"] = 9558, + ["boxDL"] = 9559, + ["boxuR"] = 9560, + ["boxUr"] = 9561, + ["boxUR"] = 9562, + ["boxuL"] = 9563, + ["boxUl"] = 9564, + ["boxUL"] = 9565, + ["boxvR"] = 9566, + ["boxVr"] = 9567, + ["boxVR"] = 9568, + ["boxvL"] = 9569, + ["boxVl"] = 9570, + ["boxVL"] = 9571, + ["boxHd"] = 9572, + ["boxhD"] = 9573, + ["boxHD"] = 9574, + ["boxHu"] = 9575, + ["boxhU"] = 9576, + ["boxHU"] = 9577, + ["boxvH"] = 9578, + ["boxVh"] = 9579, + ["boxVH"] = 9580, + ["uhblk"] = 9600, + ["lhblk"] = 9604, + ["block"] = 9608, + ["blk14"] = 9617, + ["blk12"] = 9618, + ["blk34"] = 9619, + ["squ"] = 9633, + ["square"] = 9633, + ["Square"] = 9633, + ["squf"] = 9642, + ["squarf"] = 9642, + ["blacksquare"] = 9642, + ["FilledVerySmallSquare"] = 9642, + ["EmptyVerySmallSquare"] = 9643, + ["rect"] = 9645, + ["marker"] = 9646, + ["fltns"] = 9649, + ["xutri"] = 9651, + ["bigtriangleup"] = 9651, + ["utrif"] = 9652, + ["blacktriangle"] = 9652, + ["utri"] = 9653, + ["triangle"] = 9653, + ["rtrif"] = 9656, + ["blacktriangleright"] = 9656, + ["rtri"] = 9657, + ["triangleright"] = 9657, + ["xdtri"] = 9661, + ["bigtriangledown"] = 9661, + ["dtrif"] = 9662, + ["blacktriangledown"] = 9662, + ["dtri"] = 9663, + ["triangledown"] = 9663, + ["ltrif"] = 9666, + ["blacktriangleleft"] = 9666, + ["ltri"] = 9667, + ["triangleleft"] = 9667, + ["loz"] = 9674, + ["lozenge"] = 9674, + ["cir"] = 9675, + ["tridot"] = 9708, + ["xcirc"] = 9711, + ["bigcirc"] = 9711, + ["ultri"] = 9720, + ["urtri"] = 9721, + ["lltri"] = 9722, + ["EmptySmallSquare"] = 9723, + ["FilledSmallSquare"] = 9724, + ["starf"] = 9733, + ["bigstar"] = 9733, + ["star"] = 9734, + ["phone"] = 9742, + ["female"] = 9792, + ["male"] = 9794, + ["spades"] = 9824, + ["spadesuit"] = 9824, + ["clubs"] = 9827, + ["clubsuit"] = 9827, + ["hearts"] = 9829, + ["heartsuit"] = 9829, + ["diams"] = 9830, + ["diamondsuit"] = 9830, + ["sung"] = 9834, + ["flat"] = 9837, + ["natur"] = 9838, + ["natural"] = 9838, + ["sharp"] = 9839, + ["check"] = 10003, + ["checkmark"] = 10003, + ["cross"] = 10007, + ["malt"] = 10016, + ["maltese"] = 10016, + ["sext"] = 10038, + ["VerticalSeparator"] = 10072, + ["lbbrk"] = 10098, + ["rbbrk"] = 10099, + ["lobrk"] = 10214, + ["LeftDoubleBracket"] = 10214, + ["robrk"] = 10215, + ["RightDoubleBracket"] = 10215, + ["lang"] = 10216, + ["LeftAngleBracket"] = 10216, + ["langle"] = 10216, + ["rang"] = 10217, + ["RightAngleBracket"] = 10217, + ["rangle"] = 10217, + ["Lang"] = 10218, + ["Rang"] = 10219, + ["loang"] = 10220, + ["roang"] = 10221, + ["xlarr"] = 10229, + ["longleftarrow"] = 10229, + ["LongLeftArrow"] = 10229, + ["xrarr"] = 10230, + ["longrightarrow"] = 10230, + ["LongRightArrow"] = 10230, + ["xharr"] = 10231, + ["longleftrightarrow"] = 10231, + ["LongLeftRightArrow"] = 10231, + ["xlArr"] = 10232, + ["Longleftarrow"] = 10232, + ["DoubleLongLeftArrow"] = 10232, + ["xrArr"] = 10233, + ["Longrightarrow"] = 10233, + ["DoubleLongRightArrow"] = 10233, + ["xhArr"] = 10234, + ["Longleftrightarrow"] = 10234, + ["DoubleLongLeftRightArrow"] = 10234, + ["xmap"] = 10236, + ["longmapsto"] = 10236, + ["dzigrarr"] = 10239, + ["nvlArr"] = 10498, + ["nvrArr"] = 10499, + ["nvHarr"] = 10500, + ["Map"] = 10501, + ["lbarr"] = 10508, + ["rbarr"] = 10509, + ["bkarow"] = 10509, + ["lBarr"] = 10510, + ["rBarr"] = 10511, + ["dbkarow"] = 10511, + ["RBarr"] = 10512, + ["drbkarow"] = 10512, + ["DDotrahd"] = 10513, + ["UpArrowBar"] = 10514, + ["DownArrowBar"] = 10515, + ["Rarrtl"] = 10518, + ["latail"] = 10521, + ["ratail"] = 10522, + ["lAtail"] = 10523, + ["rAtail"] = 10524, + ["larrfs"] = 10525, + ["rarrfs"] = 10526, + ["larrbfs"] = 10527, + ["rarrbfs"] = 10528, + ["nwarhk"] = 10531, + ["nearhk"] = 10532, + ["searhk"] = 10533, + ["hksearow"] = 10533, + ["swarhk"] = 10534, + ["hkswarow"] = 10534, + ["nwnear"] = 10535, + ["nesear"] = 10536, + ["toea"] = 10536, + ["seswar"] = 10537, + ["tosa"] = 10537, + ["swnwar"] = 10538, + ["rarrc"] = 10547, + ["cudarrr"] = 10549, + ["ldca"] = 10550, + ["rdca"] = 10551, + ["cudarrl"] = 10552, + ["larrpl"] = 10553, + ["curarrm"] = 10556, + ["cularrp"] = 10557, + ["rarrpl"] = 10565, + ["harrcir"] = 10568, + ["Uarrocir"] = 10569, + ["lurdshar"] = 10570, + ["ldrushar"] = 10571, + ["LeftRightVector"] = 10574, + ["RightUpDownVector"] = 10575, + ["DownLeftRightVector"] = 10576, + ["LeftUpDownVector"] = 10577, + ["LeftVectorBar"] = 10578, + ["RightVectorBar"] = 10579, + ["RightUpVectorBar"] = 10580, + ["RightDownVectorBar"] = 10581, + ["DownLeftVectorBar"] = 10582, + ["DownRightVectorBar"] = 10583, + ["LeftUpVectorBar"] = 10584, + ["LeftDownVectorBar"] = 10585, + ["LeftTeeVector"] = 10586, + ["RightTeeVector"] = 10587, + ["RightUpTeeVector"] = 10588, + ["RightDownTeeVector"] = 10589, + ["DownLeftTeeVector"] = 10590, + ["DownRightTeeVector"] = 10591, + ["LeftUpTeeVector"] = 10592, + ["LeftDownTeeVector"] = 10593, + ["lHar"] = 10594, + ["uHar"] = 10595, + ["rHar"] = 10596, + ["dHar"] = 10597, + ["luruhar"] = 10598, + ["ldrdhar"] = 10599, + ["ruluhar"] = 10600, + ["rdldhar"] = 10601, + ["lharul"] = 10602, + ["llhard"] = 10603, + ["rharul"] = 10604, + ["lrhard"] = 10605, + ["udhar"] = 10606, + ["UpEquilibrium"] = 10606, + ["duhar"] = 10607, + ["ReverseUpEquilibrium"] = 10607, + ["RoundImplies"] = 10608, + ["erarr"] = 10609, + ["simrarr"] = 10610, + ["larrsim"] = 10611, + ["rarrsim"] = 10612, + ["rarrap"] = 10613, + ["ltlarr"] = 10614, + ["gtrarr"] = 10616, + ["subrarr"] = 10617, + ["suplarr"] = 10619, + ["lfisht"] = 10620, + ["rfisht"] = 10621, + ["ufisht"] = 10622, + ["dfisht"] = 10623, + ["lopar"] = 10629, + ["ropar"] = 10630, + ["lbrke"] = 10635, + ["rbrke"] = 10636, + ["lbrkslu"] = 10637, + ["rbrksld"] = 10638, + ["lbrksld"] = 10639, + ["rbrkslu"] = 10640, + ["langd"] = 10641, + ["rangd"] = 10642, + ["lparlt"] = 10643, + ["rpargt"] = 10644, + ["gtlPar"] = 10645, + ["ltrPar"] = 10646, + ["vzigzag"] = 10650, + ["vangrt"] = 10652, + ["angrtvbd"] = 10653, + ["ange"] = 10660, + ["range"] = 10661, + ["dwangle"] = 10662, + ["uwangle"] = 10663, + ["angmsdaa"] = 10664, + ["angmsdab"] = 10665, + ["angmsdac"] = 10666, + ["angmsdad"] = 10667, + ["angmsdae"] = 10668, + ["angmsdaf"] = 10669, + ["angmsdag"] = 10670, + ["angmsdah"] = 10671, + ["bemptyv"] = 10672, + ["demptyv"] = 10673, + ["cemptyv"] = 10674, + ["raemptyv"] = 10675, + ["laemptyv"] = 10676, + ["ohbar"] = 10677, + ["omid"] = 10678, + ["opar"] = 10679, + ["operp"] = 10681, + ["olcross"] = 10683, + ["odsold"] = 10684, + ["olcir"] = 10686, + ["ofcir"] = 10687, + ["olt"] = 10688, + ["ogt"] = 10689, + ["cirscir"] = 10690, + ["cirE"] = 10691, + ["solb"] = 10692, + ["bsolb"] = 10693, + ["boxbox"] = 10697, + ["trisb"] = 10701, + ["rtriltri"] = 10702, + ["LeftTriangleBar"] = 10703, + ["RightTriangleBar"] = 10704, + ["race"] = 10714, + ["iinfin"] = 10716, + ["infintie"] = 10717, + ["nvinfin"] = 10718, + ["eparsl"] = 10723, + ["smeparsl"] = 10724, + ["eqvparsl"] = 10725, + ["lozf"] = 10731, + ["blacklozenge"] = 10731, + ["RuleDelayed"] = 10740, + ["dsol"] = 10742, + ["xodot"] = 10752, + ["bigodot"] = 10752, + ["xoplus"] = 10753, + ["bigoplus"] = 10753, + ["xotime"] = 10754, + ["bigotimes"] = 10754, + ["xuplus"] = 10756, + ["biguplus"] = 10756, + ["xsqcup"] = 10758, + ["bigsqcup"] = 10758, + ["qint"] = 10764, + ["iiiint"] = 10764, + ["fpartint"] = 10765, + ["cirfnint"] = 10768, + ["awint"] = 10769, + ["rppolint"] = 10770, + ["scpolint"] = 10771, + ["npolint"] = 10772, + ["pointint"] = 10773, + ["quatint"] = 10774, + ["intlarhk"] = 10775, + ["pluscir"] = 10786, + ["plusacir"] = 10787, + ["simplus"] = 10788, + ["plusdu"] = 10789, + ["plussim"] = 10790, + ["plustwo"] = 10791, + ["mcomma"] = 10793, + ["minusdu"] = 10794, + ["loplus"] = 10797, + ["roplus"] = 10798, + ["Cross"] = 10799, + ["timesd"] = 10800, + ["timesbar"] = 10801, + ["smashp"] = 10803, + ["lotimes"] = 10804, + ["rotimes"] = 10805, + ["otimesas"] = 10806, + ["Otimes"] = 10807, + ["odiv"] = 10808, + ["triplus"] = 10809, + ["triminus"] = 10810, + ["tritime"] = 10811, + ["iprod"] = 10812, + ["intprod"] = 10812, + ["amalg"] = 10815, + ["capdot"] = 10816, + ["ncup"] = 10818, + ["ncap"] = 10819, + ["capand"] = 10820, + ["cupor"] = 10821, + ["cupcap"] = 10822, + ["capcup"] = 10823, + ["cupbrcap"] = 10824, + ["capbrcup"] = 10825, + ["cupcup"] = 10826, + ["capcap"] = 10827, + ["ccups"] = 10828, + ["ccaps"] = 10829, + ["ccupssm"] = 10832, + ["And"] = 10835, + ["Or"] = 10836, + ["andand"] = 10837, + ["oror"] = 10838, + ["orslope"] = 10839, + ["andslope"] = 10840, + ["andv"] = 10842, + ["orv"] = 10843, + ["andd"] = 10844, + ["ord"] = 10845, + ["wedbar"] = 10847, + ["sdote"] = 10854, + ["simdot"] = 10858, + ["congdot"] = 10861, + ["easter"] = 10862, + ["apacir"] = 10863, + ["apE"] = 10864, + ["eplus"] = 10865, + ["pluse"] = 10866, + ["Esim"] = 10867, + ["Colone"] = 10868, + ["Equal"] = 10869, + ["eDDot"] = 10871, + ["ddotseq"] = 10871, + ["equivDD"] = 10872, + ["ltcir"] = 10873, + ["gtcir"] = 10874, + ["ltquest"] = 10875, + ["gtquest"] = 10876, + ["les"] = 10877, + ["LessSlantEqual"] = 10877, + ["leqslant"] = 10877, + ["ges"] = 10878, + ["GreaterSlantEqual"] = 10878, + ["geqslant"] = 10878, + ["lesdot"] = 10879, + ["gesdot"] = 10880, + ["lesdoto"] = 10881, + ["gesdoto"] = 10882, + ["lesdotor"] = 10883, + ["gesdotol"] = 10884, + ["lap"] = 10885, + ["lessapprox"] = 10885, + ["gap"] = 10886, + ["gtrapprox"] = 10886, + ["lne"] = 10887, + ["lneq"] = 10887, + ["gne"] = 10888, + ["gneq"] = 10888, + ["lnap"] = 10889, + ["lnapprox"] = 10889, + ["gnap"] = 10890, + ["gnapprox"] = 10890, + ["lEg"] = 10891, + ["lesseqqgtr"] = 10891, + ["gEl"] = 10892, + ["gtreqqless"] = 10892, + ["lsime"] = 10893, + ["gsime"] = 10894, + ["lsimg"] = 10895, + ["gsiml"] = 10896, + ["lgE"] = 10897, + ["glE"] = 10898, + ["lesges"] = 10899, + ["gesles"] = 10900, + ["els"] = 10901, + ["eqslantless"] = 10901, + ["egs"] = 10902, + ["eqslantgtr"] = 10902, + ["elsdot"] = 10903, + ["egsdot"] = 10904, + ["el"] = 10905, + ["eg"] = 10906, + ["siml"] = 10909, + ["simg"] = 10910, + ["simlE"] = 10911, + ["simgE"] = 10912, + ["LessLess"] = 10913, + ["GreaterGreater"] = 10914, + ["glj"] = 10916, + ["gla"] = 10917, + ["ltcc"] = 10918, + ["gtcc"] = 10919, + ["lescc"] = 10920, + ["gescc"] = 10921, + ["smt"] = 10922, + ["lat"] = 10923, + ["smte"] = 10924, + ["late"] = 10925, + ["bumpE"] = 10926, + ["pre"] = 10927, + ["preceq"] = 10927, + ["PrecedesEqual"] = 10927, + ["sce"] = 10928, + ["succeq"] = 10928, + ["SucceedsEqual"] = 10928, + ["prE"] = 10931, + ["scE"] = 10932, + ["prnE"] = 10933, + ["precneqq"] = 10933, + ["scnE"] = 10934, + ["succneqq"] = 10934, + ["prap"] = 10935, + ["precapprox"] = 10935, + ["scap"] = 10936, + ["succapprox"] = 10936, + ["prnap"] = 10937, + ["precnapprox"] = 10937, + ["scnap"] = 10938, + ["succnapprox"] = 10938, + ["Pr"] = 10939, + ["Sc"] = 10940, + ["subdot"] = 10941, + ["supdot"] = 10942, + ["subplus"] = 10943, + ["supplus"] = 10944, + ["submult"] = 10945, + ["supmult"] = 10946, + ["subedot"] = 10947, + ["supedot"] = 10948, + ["subE"] = 10949, + ["subseteqq"] = 10949, + ["supE"] = 10950, + ["supseteqq"] = 10950, + ["subsim"] = 10951, + ["supsim"] = 10952, + ["subnE"] = 10955, + ["subsetneqq"] = 10955, + ["supnE"] = 10956, + ["supsetneqq"] = 10956, + ["csub"] = 10959, + ["csup"] = 10960, + ["csube"] = 10961, + ["csupe"] = 10962, + ["subsup"] = 10963, + ["supsub"] = 10964, + ["subsub"] = 10965, + ["supsup"] = 10966, + ["suphsub"] = 10967, + ["supdsub"] = 10968, + ["forkv"] = 10969, + ["topfork"] = 10970, + ["mlcp"] = 10971, + ["Dashv"] = 10980, + ["DoubleLeftTee"] = 10980, + ["Vdashl"] = 10982, + ["Barv"] = 10983, + ["vBar"] = 10984, + ["vBarv"] = 10985, + ["Vbar"] = 10987, + ["Not"] = 10988, + ["bNot"] = 10989, + ["rnmid"] = 10990, + ["cirmid"] = 10991, + ["midcir"] = 10992, + ["topcir"] = 10993, + ["nhpar"] = 10994, + ["parsim"] = 10995, + ["parsl"] = 11005, + ["fflig"] = 64256, + ["filig"] = 64257, + ["fllig"] = 64258, + ["ffilig"] = 64259, + ["ffllig"] = 64260, + ["Ascr"] = 119964, + ["Cscr"] = 119966, + ["Dscr"] = 119967, + ["Gscr"] = 119970, + ["Jscr"] = 119973, + ["Kscr"] = 119974, + ["Nscr"] = 119977, + ["Oscr"] = 119978, + ["Pscr"] = 119979, + ["Qscr"] = 119980, + ["Sscr"] = 119982, + ["Tscr"] = 119983, + ["Uscr"] = 119984, + ["Vscr"] = 119985, + ["Wscr"] = 119986, + ["Xscr"] = 119987, + ["Yscr"] = 119988, + ["Zscr"] = 119989, + ["ascr"] = 119990, + ["bscr"] = 119991, + ["cscr"] = 119992, + ["dscr"] = 119993, + ["fscr"] = 119995, + ["hscr"] = 119997, + ["iscr"] = 119998, + ["jscr"] = 119999, + ["kscr"] = 120000, + ["lscr"] = 120001, + ["mscr"] = 120002, + ["nscr"] = 120003, + ["pscr"] = 120005, + ["qscr"] = 120006, + ["rscr"] = 120007, + ["sscr"] = 120008, + ["tscr"] = 120009, + ["uscr"] = 120010, + ["vscr"] = 120011, + ["wscr"] = 120012, + ["xscr"] = 120013, + ["yscr"] = 120014, + ["zscr"] = 120015, + ["Afr"] = 120068, + ["Bfr"] = 120069, + ["Dfr"] = 120071, + ["Efr"] = 120072, + ["Ffr"] = 120073, + ["Gfr"] = 120074, + ["Jfr"] = 120077, + ["Kfr"] = 120078, + ["Lfr"] = 120079, + ["Mfr"] = 120080, + ["Nfr"] = 120081, + ["Ofr"] = 120082, + ["Pfr"] = 120083, + ["Qfr"] = 120084, + ["Sfr"] = 120086, + ["Tfr"] = 120087, + ["Ufr"] = 120088, + ["Vfr"] = 120089, + ["Wfr"] = 120090, + ["Xfr"] = 120091, + ["Yfr"] = 120092, + ["afr"] = 120094, + ["bfr"] = 120095, + ["cfr"] = 120096, + ["dfr"] = 120097, + ["efr"] = 120098, + ["ffr"] = 120099, + ["gfr"] = 120100, + ["hfr"] = 120101, + ["ifr"] = 120102, + ["jfr"] = 120103, + ["kfr"] = 120104, + ["lfr"] = 120105, + ["mfr"] = 120106, + ["nfr"] = 120107, + ["ofr"] = 120108, + ["pfr"] = 120109, + ["qfr"] = 120110, + ["rfr"] = 120111, + ["sfr"] = 120112, + ["tfr"] = 120113, + ["ufr"] = 120114, + ["vfr"] = 120115, + ["wfr"] = 120116, + ["xfr"] = 120117, + ["yfr"] = 120118, + ["zfr"] = 120119, + ["Aopf"] = 120120, + ["Bopf"] = 120121, + ["Dopf"] = 120123, + ["Eopf"] = 120124, + ["Fopf"] = 120125, + ["Gopf"] = 120126, + ["Iopf"] = 120128, + ["Jopf"] = 120129, + ["Kopf"] = 120130, + ["Lopf"] = 120131, + ["Mopf"] = 120132, + ["Oopf"] = 120134, + ["Sopf"] = 120138, + ["Topf"] = 120139, + ["Uopf"] = 120140, + ["Vopf"] = 120141, + ["Wopf"] = 120142, + ["Xopf"] = 120143, + ["Yopf"] = 120144, + ["aopf"] = 120146, + ["bopf"] = 120147, + ["copf"] = 120148, + ["dopf"] = 120149, + ["eopf"] = 120150, + ["fopf"] = 120151, + ["gopf"] = 120152, + ["hopf"] = 120153, + ["iopf"] = 120154, + ["jopf"] = 120155, + ["kopf"] = 120156, + ["lopf"] = 120157, + ["mopf"] = 120158, + ["nopf"] = 120159, + ["oopf"] = 120160, + ["popf"] = 120161, + ["qopf"] = 120162, + ["ropf"] = 120163, + ["sopf"] = 120164, + ["topf"] = 120165, + ["uopf"] = 120166, + ["vopf"] = 120167, + ["wopf"] = 120168, + ["xopf"] = 120169, + ["yopf"] = 120170, + ["zopf"] = 120171, +} +function entities.dec_entity(s) + return unicode.utf8.char(tonumber(s)) +end +function entities.hex_entity(s) + return unicode.utf8.char(tonumber("0x"..s)) +end +function entities.char_entity(s) + local n = character_entities[s] + if n == nil then + return "&" .. s .. ";" + end + return unicode.utf8.char(n) +end +M.writer = {} +function M.writer.new(options) + local self = {} + options = options or {} + setmetatable(options, { __index = function (_, key) + return defaultOptions[key] end }) + local slice_specifiers = {} + for specifier in options.slice:gmatch("[^%s]+") do + table.insert(slice_specifiers, specifier) + end + + if #slice_specifiers == 2 then + self.slice_begin, self.slice_end = table.unpack(slice_specifiers) + local slice_begin_type = self.slice_begin:sub(1, 1) + if slice_begin_type ~= "^" and slice_begin_type ~= "$" then + self.slice_begin = "^" .. self.slice_begin + end + local slice_end_type = self.slice_end:sub(1, 1) + if slice_end_type ~= "^" and slice_end_type ~= "$" then + self.slice_end = "$" .. self.slice_end + end + elseif #slice_specifiers == 1 then + self.slice_begin = "^" .. slice_specifiers[1] + self.slice_end = "$" .. slice_specifiers[1] + end + + if self.slice_begin == "^" and self.slice_end ~= "^" then + self.is_writing = true + else + self.is_writing = false + end + self.suffix = ".tex" + self.space = " " + self.nbsp = "\\markdownRendererNbsp{}" + function self.plain(s) + return s + end + function self.paragraph(s) + if not self.is_writing then return "" end + return s + end + function self.pack(name) + return [[\input ]] .. name .. [[\relax{}]] + end + function self.interblocksep() + if not self.is_writing then return "" end + return "\\markdownRendererInterblockSeparator\n{}" + end + self.eof = [[\relax]] + self.linebreak = "\\markdownRendererLineBreak\n{}" + self.ellipsis = "\\markdownRendererEllipsis{}" + function self.hrule() + if not self.is_writing then return "" end + return "\\markdownRendererHorizontalRule{}" + end + local escaped_chars = { + ["{"] = "\\markdownRendererLeftBrace{}", + ["}"] = "\\markdownRendererRightBrace{}", + ["$"] = "\\markdownRendererDollarSign{}", + ["%"] = "\\markdownRendererPercentSign{}", + ["&"] = "\\markdownRendererAmpersand{}", + ["_"] = "\\markdownRendererUnderscore{}", + ["#"] = "\\markdownRendererHash{}", + ["^"] = "\\markdownRendererCircumflex{}", + ["\\"] = "\\markdownRendererBackslash{}", + ["~"] = "\\markdownRendererTilde{}", + ["|"] = "\\markdownRendererPipe{}", + } + local escaped_uri_chars = { + ["{"] = "\\markdownRendererLeftBrace{}", + ["}"] = "\\markdownRendererRightBrace{}", + ["%"] = "\\markdownRendererPercentSign{}", + ["\\"] = "\\markdownRendererBackslash{}", + } + local escaped_citation_chars = { + ["{"] = "\\markdownRendererLeftBrace{}", + ["}"] = "\\markdownRendererRightBrace{}", + ["%"] = "\\markdownRendererPercentSign{}", + ["#"] = "\\markdownRendererHash{}", + ["\\"] = "\\markdownRendererBackslash{}", + } + local escaped_minimal_strings = { + ["^^"] = "\\markdownRendererCircumflex\\markdownRendererCircumflex ", + } + local escape = util.escaper(escaped_chars) + local escape_citation = util.escaper(escaped_citation_chars, + escaped_minimal_strings) + local escape_uri = util.escaper(escaped_uri_chars, escaped_minimal_strings) + if options.hybrid then + self.string = function(s) return s end + self.citation = function(c) return c end + self.uri = function(u) return u end + else + self.string = escape + self.citation = escape_citation + self.uri = escape_uri + end + function self.code(s) + return {"\\markdownRendererCodeSpan{",escape(s),"}"} + end + function self.link(lab,src,tit) + return {"\\markdownRendererLink{",lab,"}", + "{",self.string(src),"}", + "{",self.uri(src),"}", + "{",self.string(tit or ""),"}"} + end + function self.table(rows, caption) + local buffer = {"\\markdownRendererTable{", + caption or "", "}{", #rows - 1, "}{", #rows[1], "}"} + local temp = rows[2] -- put alignments on the first row + rows[2] = rows[1] + rows[1] = temp + for i, row in ipairs(rows) do + table.insert(buffer, "{") + for _, column in ipairs(row) do + if i > 1 then -- do not use braces for alignments + table.insert(buffer, "{") + end + table.insert(buffer, column) + if i > 1 then + table.insert(buffer, "}%\n") + end + end + table.insert(buffer, "}%\n") + end + return buffer + end + function self.image(lab,src,tit) + return {"\\markdownRendererImage{",lab,"}", + "{",self.string(src),"}", + "{",self.uri(src),"}", + "{",self.string(tit or ""),"}"} + end + local languages_json = (function() + local kpse = require("kpse") + kpse.set_program_name("luatex") + local base, prev, curr + for _, file in ipairs{kpse.lookup(options.contentBlocksLanguageMap, + { all=true })} do + json = io.open(file, "r"):read("*all") + :gsub('("[^\n]-"):','[%1]=') + curr = (function() + local _ENV={ json=json, load=load } -- run in sandbox + return load("return "..json)() + end)() + if type(curr) == "table" then + if base == nil then + base = curr + else + setmetatable(prev, { __index = curr }) + end + prev = curr + end + end + return base or {} + end)() + function self.contentblock(src,suf,type,tit) + if not self.is_writing then return "" end + src = src.."."..suf + suf = suf:lower() + if type == "onlineimage" then + return {"\\markdownRendererContentBlockOnlineImage{",suf,"}", + "{",self.string(src),"}", + "{",self.uri(src),"}", + "{",self.string(tit or ""),"}"} + elseif languages_json[suf] then + return {"\\markdownRendererContentBlockCode{",suf,"}", + "{",self.string(languages_json[suf]),"}", + "{",self.string(src),"}", + "{",self.uri(src),"}", + "{",self.string(tit or ""),"}"} + else + return {"\\markdownRendererContentBlock{",suf,"}", + "{",self.string(src),"}", + "{",self.uri(src),"}", + "{",self.string(tit or ""),"}"} + end + end + local function ulitem(s) + return {"\\markdownRendererUlItem ",s, + "\\markdownRendererUlItemEnd "} + end + + function self.bulletlist(items,tight) + if not self.is_writing then return "" end + local buffer = {} + for _,item in ipairs(items) do + buffer[#buffer + 1] = ulitem(item) + end + local contents = util.intersperse(buffer,"\n") + if tight and options.tightLists then + return {"\\markdownRendererUlBeginTight\n",contents, + "\n\\markdownRendererUlEndTight "} + else + return {"\\markdownRendererUlBegin\n",contents, + "\n\\markdownRendererUlEnd "} + end + end + local function olitem(s,num) + if num ~= nil then + return {"\\markdownRendererOlItemWithNumber{",num,"}",s, + "\\markdownRendererOlItemEnd "} + else + return {"\\markdownRendererOlItem ",s, + "\\markdownRendererOlItemEnd "} + end + end + + function self.orderedlist(items,tight,startnum) + if not self.is_writing then return "" end + local buffer = {} + local num = startnum + for _,item in ipairs(items) do + buffer[#buffer + 1] = olitem(item,num) + if num ~= nil then + num = num + 1 + end + end + local contents = util.intersperse(buffer,"\n") + if tight and options.tightLists then + return {"\\markdownRendererOlBeginTight\n",contents, + "\n\\markdownRendererOlEndTight "} + else + return {"\\markdownRendererOlBegin\n",contents, + "\n\\markdownRendererOlEnd "} + end + end + function self.inline_html(html) return "" end + function self.display_html(html) return "" end + local function dlitem(term, defs) + local retVal = {"\\markdownRendererDlItem{",term,"}"} + for _, def in ipairs(defs) do + retVal[#retVal+1] = {"\\markdownRendererDlDefinitionBegin ",def, + "\\markdownRendererDlDefinitionEnd "} + end + retVal[#retVal+1] = "\\markdownRendererDlItemEnd " + return retVal + end + + function self.definitionlist(items,tight) + if not self.is_writing then return "" end + local buffer = {} + for _,item in ipairs(items) do + buffer[#buffer + 1] = dlitem(item.term, item.definitions) + end + if tight and options.tightLists then + return {"\\markdownRendererDlBeginTight\n", buffer, + "\n\\markdownRendererDlEndTight"} + else + return {"\\markdownRendererDlBegin\n", buffer, + "\n\\markdownRendererDlEnd"} + end + end + function self.emphasis(s) + return {"\\markdownRendererEmphasis{",s,"}"} + end + function self.strong(s) + return {"\\markdownRendererStrongEmphasis{",s,"}"} + end + function self.blockquote(s) + if #util.rope_to_string(s) == 0 then return "" end + return {"\\markdownRendererBlockQuoteBegin\n",s, + "\n\\markdownRendererBlockQuoteEnd "} + end + function self.verbatim(s) + if not self.is_writing then return "" end + s = string.gsub(s, '[\r\n%s]*$', '') + local name = util.cache(options.cacheDir, s, nil, nil, ".verbatim") + return {"\\markdownRendererInputVerbatim{",name,"}"} + end + function self.fencedCode(i, s) + if not self.is_writing then return "" end + s = string.gsub(s, '[\r\n%s]*$', '') + local name = util.cache(options.cacheDir, s, nil, nil, ".verbatim") + return {"\\markdownRendererInputFencedCode{",name,"}{",i,"}"} + end + self.active_headings = {} + function self.heading(s,level,attributes) + local active_headings = self.active_headings + local slice_begin_type = self.slice_begin:sub(1, 1) + local slice_begin_identifier = self.slice_begin:sub(2) or "" + local slice_end_type = self.slice_end:sub(1, 1) + local slice_end_identifier = self.slice_end:sub(2) or "" + + while #active_headings < level do + -- push empty identifiers for implied sections + table.insert(active_headings, {}) + end + + while #active_headings >= level do + -- pop identifiers for sections that have ended + local active_identifiers = active_headings[#active_headings] + if active_identifiers[slice_begin_identifier] ~= nil + and slice_begin_type == "$" then + self.is_writing = true + end + if active_identifiers[slice_end_identifier] ~= nil + and slice_end_type == "$" then + self.is_writing = false + end + table.remove(active_headings, #active_headings) + end + + -- push identifiers for the new section + attributes = attributes or {} + local identifiers = {} + for index = 1, #attributes do + attribute = attributes[index] + identifiers[attribute:sub(2)] = true + end + if identifiers[slice_begin_identifier] ~= nil + and slice_begin_type == "^" then + self.is_writing = true + end + if identifiers[slice_end_identifier] ~= nil + and slice_end_type == "^" then + self.is_writing = false + end + table.insert(active_headings, identifiers) + + if not self.is_writing then return "" end + + local cmd + level = level + options.shiftHeadings + if level <= 1 then + cmd = "\\markdownRendererHeadingOne" + elseif level == 2 then + cmd = "\\markdownRendererHeadingTwo" + elseif level == 3 then + cmd = "\\markdownRendererHeadingThree" + elseif level == 4 then + cmd = "\\markdownRendererHeadingFour" + elseif level == 5 then + cmd = "\\markdownRendererHeadingFive" + elseif level >= 6 then + cmd = "\\markdownRendererHeadingSix" + else + cmd = "" + end + return {cmd,"{",s,"}"} + end + function self.note(s) + return {"\\markdownRendererFootnote{",s,"}"} + end + function self.citations(text_cites, cites) + local buffer = {"\\markdownRenderer", text_cites and "TextCite" or "Cite", + "{", #cites, "}"} + for _,cite in ipairs(cites) do + buffer[#buffer+1] = {cite.suppress_author and "-" or "+", "{", + cite.prenote or "", "}{", cite.postnote or "", "}{", cite.name, "}"} + end + return buffer + end + + return self +end +local parsers = {} +parsers.percent = P("%") +parsers.at = P("@") +parsers.comma = P(",") +parsers.asterisk = P("*") +parsers.dash = P("-") +parsers.plus = P("+") +parsers.underscore = P("_") +parsers.period = P(".") +parsers.hash = P("#") +parsers.ampersand = P("&") +parsers.backtick = P("`") +parsers.less = P("<") +parsers.more = P(">") +parsers.space = P(" ") +parsers.squote = P("'") +parsers.dquote = P('"') +parsers.lparent = P("(") +parsers.rparent = P(")") +parsers.lbracket = P("[") +parsers.rbracket = P("]") +parsers.lbrace = P("{") +parsers.rbrace = P("}") +parsers.circumflex = P("^") +parsers.slash = P("/") +parsers.equal = P("=") +parsers.colon = P(":") +parsers.semicolon = P(";") +parsers.exclamation = P("!") +parsers.pipe = P("|") +parsers.tilde = P("~") +parsers.tab = P("\t") +parsers.newline = P("\n") +parsers.tightblocksep = P("\001") + +parsers.digit = R("09") +parsers.hexdigit = R("09","af","AF") +parsers.letter = R("AZ","az") +parsers.alphanumeric = R("AZ","az","09") +parsers.keyword = parsers.letter + * parsers.alphanumeric^0 +parsers.citation_chars = parsers.alphanumeric + + S("#$%&-+<>~/_") +parsers.internal_punctuation = S(":;,.?") + +parsers.doubleasterisks = P("**") +parsers.doubleunderscores = P("__") +parsers.fourspaces = P(" ") + +parsers.any = P(1) +parsers.fail = parsers.any - 1 + +parsers.escapable = S("\\`*_{}[]()+_.!<>#-~:^@;") +parsers.anyescaped = P("\\") / "" * parsers.escapable + + parsers.any + +parsers.spacechar = S("\t ") +parsers.spacing = S(" \n\r\t") +parsers.nonspacechar = parsers.any - parsers.spacing +parsers.optionalspace = parsers.spacechar^0 + +parsers.specialchar = S("*_`&[]= #b and i +end + +parsers.infostring = (parsers.linechar - (parsers.backtick + + parsers.space^1 * (parsers.newline + parsers.eof)))^0 + +local fenceindent +parsers.fencehead = function(char) + return C(parsers.nonindentspace) / function(s) fenceindent = #s end + * Cg(char^3, "fencelength") + * parsers.optionalspace * C(parsers.infostring) + * parsers.optionalspace * (parsers.newline + parsers.eof) +end + +parsers.fencetail = function(char) + return parsers.nonindentspace + * Cmt(C(char^3) * Cb("fencelength"), captures_geq_length) + * parsers.optionalspace * (parsers.newline + parsers.eof) + + parsers.eof +end + +parsers.fencedline = function(char) + return C(parsers.line - parsers.fencetail(char)) + / function(s) + i = 1 + remaining = fenceindent + while true do + c = s:sub(i, i) + if c == " " and remaining > 0 then + remaining = remaining - 1 + i = i + 1 + elseif c == "\t" and remaining > 3 then + remaining = remaining - 4 + i = i + 1 + else + break + end + end + return s:sub(i) + end +end +parsers.leader = parsers.space^-3 + +-- content in balanced brackets, parentheses, or quotes: +parsers.bracketed = P{ parsers.lbracket + * ((parsers.anyescaped - (parsers.lbracket + + parsers.rbracket + + parsers.blankline^2) + ) + V(1))^0 + * parsers.rbracket } + +parsers.inparens = P{ parsers.lparent + * ((parsers.anyescaped - (parsers.lparent + + parsers.rparent + + parsers.blankline^2) + ) + V(1))^0 + * parsers.rparent } + +parsers.squoted = P{ parsers.squote * parsers.alphanumeric + * ((parsers.anyescaped - (parsers.squote + + parsers.blankline^2) + ) + V(1))^0 + * parsers.squote } + +parsers.dquoted = P{ parsers.dquote * parsers.alphanumeric + * ((parsers.anyescaped - (parsers.dquote + + parsers.blankline^2) + ) + V(1))^0 + * parsers.dquote } + +-- bracketed tag for markdown links, allowing nested brackets: +parsers.tag = parsers.lbracket + * Cs((parsers.alphanumeric^1 + + parsers.bracketed + + parsers.inticks + + (parsers.anyescaped + - (parsers.rbracket + parsers.blankline^2)))^0) + * parsers.rbracket + +-- url for markdown links, allowing nested brackets: +parsers.url = parsers.less * Cs((parsers.anyescaped + - parsers.more)^0) + * parsers.more + + Cs((parsers.inparens + (parsers.anyescaped + - parsers.spacing + - parsers.rparent))^1) + +-- quoted text, possibly with nested quotes: +parsers.title_s = parsers.squote * Cs(((parsers.anyescaped-parsers.squote) + + parsers.squoted)^0) + * parsers.squote + +parsers.title_d = parsers.dquote * Cs(((parsers.anyescaped-parsers.dquote) + + parsers.dquoted)^0) + * parsers.dquote + +parsers.title_p = parsers.lparent + * Cs((parsers.inparens + (parsers.anyescaped-parsers.rparent))^0) + * parsers.rparent + +parsers.title = parsers.title_d + parsers.title_s + parsers.title_p + +parsers.optionaltitle + = parsers.spnl * parsers.title * parsers.spacechar^0 + + Cc("") +parsers.contentblock_tail + = parsers.optionaltitle + * (parsers.newline + parsers.eof) + +-- case insensitive online image suffix: +parsers.onlineimagesuffix + = (function(...) + local parser = nil + for _,suffix in ipairs({...}) do + local pattern=nil + for i=1,#suffix do + local char=suffix:sub(i,i) + char = S(char:lower()..char:upper()) + if pattern == nil then + pattern = char + else + pattern = pattern * char + end + end + if parser == nil then + parser = pattern + else + parser = parser + pattern + end + end + return parser + end)("png", "jpg", "jpeg", "gif", "tif", "tiff") + +-- online image url for iA Writer content blocks with mandatory suffix, +-- allowing nested brackets: +parsers.onlineimageurl + = (parsers.less + * Cs((parsers.anyescaped + - parsers.more + - #(parsers.period + * parsers.onlineimagesuffix + * parsers.more + * parsers.contentblock_tail))^0) + * parsers.period + * Cs(parsers.onlineimagesuffix) + * parsers.more + + (Cs((parsers.inparens + + (parsers.anyescaped + - parsers.spacing + - parsers.rparent + - #(parsers.period + * parsers.onlineimagesuffix + * parsers.contentblock_tail)))^0) + * parsers.period + * Cs(parsers.onlineimagesuffix)) + ) * Cc("onlineimage") + +-- filename for iA Writer content blocks with mandatory suffix: +parsers.localfilepath + = parsers.slash + * Cs((parsers.anyescaped + - parsers.tab + - parsers.newline + - #(parsers.period + * parsers.alphanumeric^1 + * parsers.contentblock_tail))^1) + * parsers.period + * Cs(parsers.alphanumeric^1) + * Cc("localfile") +parsers.citation_name = Cs(parsers.dash^-1) * parsers.at + * Cs(parsers.citation_chars + * (((parsers.citation_chars + parsers.internal_punctuation + - parsers.comma - parsers.semicolon) + * -#((parsers.internal_punctuation - parsers.comma + - parsers.semicolon)^0 + * -(parsers.citation_chars + parsers.internal_punctuation + - parsers.comma - parsers.semicolon)))^0 + * parsers.citation_chars)^-1) + +parsers.citation_body_prenote + = Cs((parsers.alphanumeric^1 + + parsers.bracketed + + parsers.inticks + + (parsers.anyescaped + - (parsers.rbracket + parsers.blankline^2)) + - (parsers.spnl * parsers.dash^-1 * parsers.at))^0) + +parsers.citation_body_postnote + = Cs((parsers.alphanumeric^1 + + parsers.bracketed + + parsers.inticks + + (parsers.anyescaped + - (parsers.rbracket + parsers.semicolon + + parsers.blankline^2)) + - (parsers.spnl * parsers.rbracket))^0) + +parsers.citation_body_chunk + = parsers.citation_body_prenote + * parsers.spnl * parsers.citation_name + * (parsers.internal_punctuation - parsers.semicolon)^-1 + * parsers.spnl * parsers.citation_body_postnote + +parsers.citation_body + = parsers.citation_body_chunk + * (parsers.semicolon * parsers.spnl + * parsers.citation_body_chunk)^0 + +parsers.citation_headless_body_postnote + = Cs((parsers.alphanumeric^1 + + parsers.bracketed + + parsers.inticks + + (parsers.anyescaped + - (parsers.rbracket + parsers.at + + parsers.semicolon + parsers.blankline^2)) + - (parsers.spnl * parsers.rbracket))^0) + +parsers.citation_headless_body + = parsers.citation_headless_body_postnote + * (parsers.sp * parsers.semicolon * parsers.spnl + * parsers.citation_body_chunk)^0 +local function strip_first_char(s) + return s:sub(2) +end + +parsers.RawNoteRef = #(parsers.lbracket * parsers.circumflex) + * parsers.tag / strip_first_char +local function make_pipe_table_rectangular(rows) + local num_columns = #rows[2] + local rectangular_rows = {} + for i = 1, #rows do + local row = rows[i] + local rectangular_row = {} + for j = 1, num_columns do + rectangular_row[j] = row[j] or "" + end + table.insert(rectangular_rows, rectangular_row) + end + return rectangular_rows +end + +local function pipe_table_row(allow_empty_first_column + , nonempty_column + , column_separator + , column) + local row_beginning + if allow_empty_first_column then + row_beginning = -- empty first column + #(parsers.spacechar^4 + * column_separator) + * parsers.optionalspace + * column + * parsers.optionalspace + -- non-empty first column + + parsers.nonindentspace + * nonempty_column^-1 + * parsers.optionalspace + else + row_beginning = parsers.nonindentspace + * nonempty_column^-1 + * parsers.optionalspace + end + + return Ct(row_beginning + * (-- single column with no leading pipes + #(column_separator + * parsers.optionalspace + * parsers.newline) + * column_separator + * parsers.optionalspace + -- single column with leading pipes or + -- more than a single column + + (column_separator + * parsers.optionalspace + * column + * parsers.optionalspace)^1 + * (column_separator + * parsers.optionalspace)^-1)) +end + +parsers.table_hline_separator = parsers.pipe + parsers.plus +parsers.table_hline_column = (parsers.dash + - #(parsers.dash + * (parsers.spacechar + + parsers.table_hline_separator + + parsers.newline)))^1 + * (parsers.colon * Cc("r") + + parsers.dash * Cc("d")) + + parsers.colon + * (parsers.dash + - #(parsers.dash + * (parsers.spacechar + + parsers.table_hline_separator + + parsers.newline)))^1 + * (parsers.colon * Cc("c") + + parsers.dash * Cc("l")) +parsers.table_hline = pipe_table_row(false + , parsers.table_hline_column + , parsers.table_hline_separator + , parsers.table_hline_column) +parsers.table_caption_beginning = parsers.skipblanklines + * parsers.nonindentspace + * (P("Table")^-1 * parsers.colon) + * parsers.optionalspace +-- case-insensitive match (we assume s is lowercase). must be single byte encoding +parsers.keyword_exact = function(s) + local parser = P(0) + for i=1,#s do + local c = s:sub(i,i) + local m = c .. upper(c) + parser = parser * S(m) + end + return parser +end + +parsers.block_keyword = + parsers.keyword_exact("address") + parsers.keyword_exact("blockquote") + + parsers.keyword_exact("center") + parsers.keyword_exact("del") + + parsers.keyword_exact("dir") + parsers.keyword_exact("div") + + parsers.keyword_exact("p") + parsers.keyword_exact("pre") + + parsers.keyword_exact("li") + parsers.keyword_exact("ol") + + parsers.keyword_exact("ul") + parsers.keyword_exact("dl") + + parsers.keyword_exact("dd") + parsers.keyword_exact("form") + + parsers.keyword_exact("fieldset") + parsers.keyword_exact("isindex") + + parsers.keyword_exact("ins") + parsers.keyword_exact("menu") + + parsers.keyword_exact("noframes") + parsers.keyword_exact("frameset") + + parsers.keyword_exact("h1") + parsers.keyword_exact("h2") + + parsers.keyword_exact("h3") + parsers.keyword_exact("h4") + + parsers.keyword_exact("h5") + parsers.keyword_exact("h6") + + parsers.keyword_exact("hr") + parsers.keyword_exact("script") + + parsers.keyword_exact("noscript") + parsers.keyword_exact("table") + + parsers.keyword_exact("tbody") + parsers.keyword_exact("tfoot") + + parsers.keyword_exact("thead") + parsers.keyword_exact("th") + + parsers.keyword_exact("td") + parsers.keyword_exact("tr") + +-- There is no reason to support bad html, so we expect quoted attributes +parsers.htmlattributevalue + = parsers.squote * (parsers.any - (parsers.blankline + + parsers.squote))^0 + * parsers.squote + + parsers.dquote * (parsers.any - (parsers.blankline + + parsers.dquote))^0 + * parsers.dquote + +parsers.htmlattribute = parsers.spacing^1 + * (parsers.alphanumeric + S("_-"))^1 + * parsers.sp * parsers.equal * parsers.sp + * parsers.htmlattributevalue + +parsers.htmlcomment = P(""))^0 * P("-->") + +parsers.htmlinstruction = P("" ))^0 * P("?>" ) + +parsers.openelt_any = parsers.less * parsers.keyword * parsers.htmlattribute^0 + * parsers.sp * parsers.more + +parsers.openelt_exact = function(s) + return parsers.less * parsers.sp * parsers.keyword_exact(s) + * parsers.htmlattribute^0 * parsers.sp * parsers.more +end + +parsers.openelt_block = parsers.sp * parsers.block_keyword + * parsers.htmlattribute^0 * parsers.sp * parsers.more + +parsers.closeelt_any = parsers.less * parsers.sp * parsers.slash + * parsers.keyword * parsers.sp * parsers.more + +parsers.closeelt_exact = function(s) + return parsers.less * parsers.sp * parsers.slash * parsers.keyword_exact(s) + * parsers.sp * parsers.more +end + +parsers.emptyelt_any = parsers.less * parsers.sp * parsers.keyword + * parsers.htmlattribute^0 * parsers.sp * parsers.slash + * parsers.more + +parsers.emptyelt_block = parsers.less * parsers.sp * parsers.block_keyword + * parsers.htmlattribute^0 * parsers.sp * parsers.slash + * parsers.more + +parsers.displaytext = (parsers.any - parsers.less)^1 + +-- return content between two matched HTML tags +parsers.in_matched = function(s) + return { parsers.openelt_exact(s) + * (V(1) + parsers.displaytext + + (parsers.less - parsers.closeelt_exact(s)))^0 + * parsers.closeelt_exact(s) } +end + +local function parse_matched_tags(s,pos) + local t = string.lower(lpeg.match(C(parsers.keyword),s,pos)) + return lpeg.match(parsers.in_matched(t),s,pos-1) +end + +parsers.in_matched_block_tags = parsers.less + * Cmt(#parsers.openelt_block, parse_matched_tags) + +parsers.displayhtml = parsers.htmlcomment + + parsers.emptyelt_block + + parsers.openelt_exact("hr") + + parsers.in_matched_block_tags + + parsers.htmlinstruction + +parsers.inlinehtml = parsers.emptyelt_any + + parsers.htmlcomment + + parsers.htmlinstruction + + parsers.openelt_any + + parsers.closeelt_any +parsers.hexentity = parsers.ampersand * parsers.hash * S("Xx") + * C(parsers.hexdigit^1) * parsers.semicolon +parsers.decentity = parsers.ampersand * parsers.hash + * C(parsers.digit^1) * parsers.semicolon +parsers.tagentity = parsers.ampersand * C(parsers.alphanumeric^1) + * parsers.semicolon +-- parse a reference definition: [foo]: /bar "title" +parsers.define_reference_parser = parsers.leader * parsers.tag * parsers.colon + * parsers.spacechar^0 * parsers.url + * parsers.optionaltitle * parsers.blankline^1 +parsers.Inline = V("Inline") +parsers.IndentedInline = V("IndentedInline") + +-- parse many p between starter and ender +parsers.between = function(p, starter, ender) + local ender2 = B(parsers.nonspacechar) * ender + return (starter * #parsers.nonspacechar * Ct(p * (p - ender2)^0) * ender2) +end + +parsers.urlchar = parsers.anyescaped - parsers.newline - parsers.more +parsers.Block = V("Block") + +parsers.OnlineImageURL + = parsers.leader + * parsers.onlineimageurl + * parsers.optionaltitle + +parsers.LocalFilePath + = parsers.leader + * parsers.localfilepath + * parsers.optionaltitle + +parsers.TildeFencedCode + = parsers.fencehead(parsers.tilde) + * Cs(parsers.fencedline(parsers.tilde)^0) + * parsers.fencetail(parsers.tilde) + +parsers.BacktickFencedCode + = parsers.fencehead(parsers.backtick) + * Cs(parsers.fencedline(parsers.backtick)^0) + * parsers.fencetail(parsers.backtick) + +parsers.lineof = function(c) + return (parsers.leader * (P(c) * parsers.optionalspace)^3 + * (parsers.newline * parsers.blankline^1 + + parsers.newline^-1 * parsers.eof)) +end +parsers.defstartchar = S("~:") +parsers.defstart = ( parsers.defstartchar * #parsers.spacing + * (parsers.tab + parsers.space^-3) + + parsers.space * parsers.defstartchar * #parsers.spacing + * (parsers.tab + parsers.space^-2) + + parsers.space * parsers.space * parsers.defstartchar + * #parsers.spacing + * (parsers.tab + parsers.space^-1) + + parsers.space * parsers.space * parsers.space + * parsers.defstartchar * #parsers.spacing + ) + +parsers.dlchunk = Cs(parsers.line * (parsers.indentedline - parsers.blankline)^0) +parsers.heading_attribute = C(parsers.css_identifier) + + C((parsers.attribute_name_char + - parsers.rbrace)^1 + * parsers.equal + * (parsers.attribute_value_char + - parsers.rbrace)^1) +parsers.HeadingAttributes = parsers.lbrace + * parsers.heading_attribute + * (parsers.spacechar^1 + * parsers.heading_attribute)^0 + * parsers.rbrace + +-- parse Atx heading start and return level +parsers.HeadingStart = #parsers.hash * C(parsers.hash^-6) + * -parsers.hash / length + +-- parse setext header ending and return level +parsers.HeadingLevel = parsers.equal^1 * Cc(1) + parsers.dash^1 * Cc(2) + +local function strip_atx_end(s) + return s:gsub("[#%s]*\n$","") +end +M.reader = {} +function M.reader.new(writer, options) + local self = {} + options = options or {} + setmetatable(options, { __index = function (_, key) + return defaultOptions[key] end }) + local function normalize_tag(tag) + return unicode.utf8.lower( + gsub(util.rope_to_string(tag), "[ \n\r\t]+", " ")) + end + local expandtabs + if options.preserveTabs then + expandtabs = function(s) return s end + else + expandtabs = function(s) + if s:find("\t") then + return s:gsub("[^\n]*", util.expand_tabs_in_line) + else + return s + end + end + end + local larsers = {} + local function create_parser(name, grammar) + return function(str) + local res = lpeg.match(grammar(), str) + if res == nil then + error(format("%s failed on:\n%s", name, str:sub(1,20))) + else + return res + end + end + end + + local parse_blocks + = create_parser("parse_blocks", + function() + return larsers.blocks + end) + + local parse_blocks_toplevel + = create_parser("parse_blocks_toplevel", + function() + return larsers.blocks_toplevel + end) + + local parse_inlines + = create_parser("parse_inlines", + function() + return larsers.inlines + end) + + local parse_inlines_no_link + = create_parser("parse_inlines_no_link", + function() + return larsers.inlines_no_link + end) + + local parse_inlines_no_inline_note + = create_parser("parse_inlines_no_inline_note", + function() + return larsers.inlines_no_inline_note + end) + + local parse_inlines_nbsp + = create_parser("parse_inlines_nbsp", + function() + return larsers.inlines_nbsp + end) + if options.hashEnumerators then + larsers.dig = parsers.digit + parsers.hash + else + larsers.dig = parsers.digit + end + + larsers.enumerator = C(larsers.dig^3 * parsers.period) * #parsers.spacing + + C(larsers.dig^2 * parsers.period) * #parsers.spacing + * (parsers.tab + parsers.space^1) + + C(larsers.dig * parsers.period) * #parsers.spacing + * (parsers.tab + parsers.space^-2) + + parsers.space * C(larsers.dig^2 * parsers.period) + * #parsers.spacing + + parsers.space * C(larsers.dig * parsers.period) + * #parsers.spacing + * (parsers.tab + parsers.space^-1) + + parsers.space * parsers.space * C(larsers.dig^1 + * parsers.period) * #parsers.spacing + -- strip off leading > and indents, and run through blocks + larsers.blockquote_body = ((parsers.leader * parsers.more * parsers.space^-1)/"" + * parsers.linechar^0 * parsers.newline)^1 + * (-(parsers.leader * parsers.more + + parsers.blankline) * parsers.linechar^1 + * parsers.newline)^0 + + if not options.breakableBlockquotes then + larsers.blockquote_body = larsers.blockquote_body + * (parsers.blankline^0 / "") + end + larsers.citations = function(text_cites, raw_cites) + local function normalize(str) + if str == "" then + str = nil + else + str = (options.citationNbsps and parse_inlines_nbsp or + parse_inlines)(str) + end + return str + end + + local cites = {} + for i = 1,#raw_cites,4 do + cites[#cites+1] = { + prenote = normalize(raw_cites[i]), + suppress_author = raw_cites[i+1] == "-", + name = writer.citation(raw_cites[i+2]), + postnote = normalize(raw_cites[i+3]), + } + end + return writer.citations(text_cites, cites) + end + local rawnotes = {} + + -- like indirect_link + local function lookup_note(ref) + return function() + local found = rawnotes[normalize_tag(ref)] + if found then + return writer.note(parse_blocks_toplevel(found)) + else + return {"[", parse_inlines("^" .. ref), "]"} + end + end + end + + local function register_note(ref,rawnote) + rawnotes[normalize_tag(ref)] = rawnote + return "" + end + + larsers.NoteRef = parsers.RawNoteRef / lookup_note + + larsers.NoteBlock = parsers.leader * parsers.RawNoteRef * parsers.colon + * parsers.spnl * parsers.indented_blocks(parsers.chunk) + / register_note + + larsers.InlineNote = parsers.circumflex + * (parsers.tag / parse_inlines_no_inline_note) -- no notes inside notes + / writer.note +larsers.table_row = pipe_table_row(true + , (C((parsers.linechar - parsers.pipe)^1) + / parse_inlines) + , parsers.pipe + , (C((parsers.linechar - parsers.pipe)^0) + / parse_inlines)) + +if options.tableCaptions then + larsers.table_caption = #parsers.table_caption_beginning + * parsers.table_caption_beginning + * Ct(parsers.IndentedInline^1) + * parsers.newline +else + larsers.table_caption = parsers.fail +end + +larsers.PipeTable = Ct(larsers.table_row * parsers.newline + * parsers.table_hline + * (parsers.newline * larsers.table_row)^0) + / make_pipe_table_rectangular + * larsers.table_caption^-1 + / writer.table + -- List of references defined in the document + local references + + -- add a reference to the list + local function register_link(tag,url,title) + references[normalize_tag(tag)] = { url = url, title = title } + return "" + end + + -- lookup link reference and return either + -- the link or nil and fallback text. + local function lookup_reference(label,sps,tag) + local tagpart + if not tag then + tag = label + tagpart = "" + elseif tag == "" then + tag = label + tagpart = "[]" + else + tagpart = {"[", parse_inlines(tag), "]"} + end + if sps then + tagpart = {sps, tagpart} + end + local r = references[normalize_tag(tag)] + if r then + return r + else + return nil, {"[", parse_inlines(label), "]", tagpart} + end + end + + -- lookup link reference and return a link, if the reference is found, + -- or a bracketed label otherwise. + local function indirect_link(label,sps,tag) + return function() + local r,fallback = lookup_reference(label,sps,tag) + if r then + return writer.link(parse_inlines_no_link(label), r.url, r.title) + else + return fallback + end + end + end + + -- lookup image reference and return an image, if the reference is found, + -- or a bracketed label otherwise. + local function indirect_image(label,sps,tag) + return function() + local r,fallback = lookup_reference(label,sps,tag) + if r then + return writer.image(writer.string(label), r.url, r.title) + else + return {"!", fallback} + end + end + end + larsers.Str = (parsers.normalchar * (parsers.normalchar + parsers.at)^0) + / writer.string + + larsers.Symbol = (parsers.specialchar - parsers.tightblocksep) + / writer.string + + larsers.Ellipsis = P("...") / writer.ellipsis + + larsers.Smart = larsers.Ellipsis + + larsers.Code = parsers.inticks / writer.code + + if options.blankBeforeBlockquote then + larsers.bqstart = parsers.fail + else + larsers.bqstart = parsers.more + end + + if options.blankBeforeHeading then + larsers.headerstart = parsers.fail + else + larsers.headerstart = parsers.hash + + (parsers.line * (parsers.equal^1 + parsers.dash^1) + * parsers.optionalspace * parsers.newline) + end + + if not options.fencedCode or options.blankBeforeCodeFence then + larsers.fencestart = parsers.fail + else + larsers.fencestart = parsers.fencehead(parsers.backtick) + + parsers.fencehead(parsers.tilde) + end + + larsers.Endline = parsers.newline * -( -- newline, but not before... + parsers.blankline -- paragraph break + + parsers.tightblocksep -- nested list + + parsers.eof -- end of document + + larsers.bqstart + + larsers.headerstart + + larsers.fencestart + ) * parsers.spacechar^0 / writer.space + + larsers.OptionalIndent + = parsers.spacechar^1 / writer.space + + larsers.Space = parsers.spacechar^2 * larsers.Endline / writer.linebreak + + parsers.spacechar^1 * larsers.Endline^-1 * parsers.eof / "" + + parsers.spacechar^1 * larsers.Endline^-1 + * parsers.optionalspace / writer.space + + larsers.NonbreakingEndline + = parsers.newline * -( -- newline, but not before... + parsers.blankline -- paragraph break + + parsers.tightblocksep -- nested list + + parsers.eof -- end of document + + larsers.bqstart + + larsers.headerstart + + larsers.fencestart + ) * parsers.spacechar^0 / writer.nbsp + + larsers.NonbreakingSpace + = parsers.spacechar^2 * larsers.Endline / writer.linebreak + + parsers.spacechar^1 * larsers.Endline^-1 * parsers.eof / "" + + parsers.spacechar^1 * larsers.Endline^-1 + * parsers.optionalspace / writer.nbsp + + if options.underscores then + larsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, + parsers.doubleasterisks) + + parsers.between(parsers.Inline, parsers.doubleunderscores, + parsers.doubleunderscores) + ) / writer.strong + + larsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk, + parsers.asterisk) + + parsers.between(parsers.Inline, parsers.underscore, + parsers.underscore) + ) / writer.emphasis + else + larsers.Strong = ( parsers.between(parsers.Inline, parsers.doubleasterisks, + parsers.doubleasterisks) + ) / writer.strong + + larsers.Emph = ( parsers.between(parsers.Inline, parsers.asterisk, + parsers.asterisk) + ) / writer.emphasis + end + + larsers.AutoLinkUrl = parsers.less + * C(parsers.alphanumeric^1 * P("://") * parsers.urlchar^1) + * parsers.more + / function(url) + return writer.link(writer.string(url), url) + end + + larsers.AutoLinkEmail = parsers.less + * C((parsers.alphanumeric + S("-._+"))^1 + * P("@") * parsers.urlchar^1) + * parsers.more + / function(email) + return writer.link(writer.string(email), + "mailto:"..email) + end + + larsers.DirectLink = (parsers.tag / parse_inlines_no_link) -- no links inside links + * parsers.spnl + * parsers.lparent + * (parsers.url + Cc("")) -- link can be empty [foo]() + * parsers.optionaltitle + * parsers.rparent + / writer.link + + larsers.IndirectLink = parsers.tag * (C(parsers.spnl) * parsers.tag)^-1 + / indirect_link + + -- parse a link or image (direct or indirect) + larsers.Link = larsers.DirectLink + larsers.IndirectLink + + larsers.DirectImage = parsers.exclamation + * (parsers.tag / parse_inlines) + * parsers.spnl + * parsers.lparent + * (parsers.url + Cc("")) -- link can be empty [foo]() + * parsers.optionaltitle + * parsers.rparent + / writer.image + + larsers.IndirectImage = parsers.exclamation * parsers.tag + * (C(parsers.spnl) * parsers.tag)^-1 / indirect_image + + larsers.Image = larsers.DirectImage + larsers.IndirectImage + + larsers.TextCitations = Ct(Cc("") + * parsers.citation_name + * ((parsers.spnl + * parsers.lbracket + * parsers.citation_headless_body + * parsers.rbracket) + Cc(""))) + / function(raw_cites) + return larsers.citations(true, raw_cites) + end + + larsers.ParenthesizedCitations + = Ct(parsers.lbracket + * parsers.citation_body + * parsers.rbracket) + / function(raw_cites) + return larsers.citations(false, raw_cites) + end + + larsers.Citations = larsers.TextCitations + larsers.ParenthesizedCitations + + -- avoid parsing long strings of * or _ as emph/strong + larsers.UlOrStarLine = parsers.asterisk^4 + parsers.underscore^4 + / writer.string + + larsers.EscapedChar = S("\\") * C(parsers.escapable) / writer.string + + larsers.InlineHtml = C(parsers.inlinehtml) / writer.inline_html + + larsers.HtmlEntity = parsers.hexentity / entities.hex_entity / writer.string + + parsers.decentity / entities.dec_entity / writer.string + + parsers.tagentity / entities.char_entity / writer.string + larsers.ContentBlock = parsers.leader + * (parsers.localfilepath + parsers.onlineimageurl) + * parsers.contentblock_tail + / writer.contentblock + + larsers.DisplayHtml = C(parsers.displayhtml) + / expandtabs / writer.display_html + + larsers.Verbatim = Cs( (parsers.blanklines + * ((parsers.indentedline - parsers.blankline))^1)^1 + ) / expandtabs / writer.verbatim + + larsers.FencedCode = (parsers.TildeFencedCode + + parsers.BacktickFencedCode) + / function(infostring, code) + return writer.fencedCode(writer.string(infostring), + expandtabs(code)) + end + + larsers.Blockquote = Cs(larsers.blockquote_body^1) + / parse_blocks_toplevel / writer.blockquote + + larsers.HorizontalRule = ( parsers.lineof(parsers.asterisk) + + parsers.lineof(parsers.dash) + + parsers.lineof(parsers.underscore) + ) / writer.hrule + + larsers.Reference = parsers.define_reference_parser / register_link + + larsers.Paragraph = parsers.nonindentspace * Ct(parsers.Inline^1) + * parsers.newline + * ( parsers.blankline^1 + + #parsers.hash + + #(parsers.leader * parsers.more * parsers.space^-1) + ) + / writer.paragraph + + larsers.ToplevelParagraph + = parsers.nonindentspace * Ct(parsers.Inline^1) + * ( parsers.newline + * ( parsers.blankline^1 + + #parsers.hash + + #(parsers.leader * parsers.more * parsers.space^-1) + + parsers.eof + ) + + parsers.eof ) + / writer.paragraph + + larsers.Plain = parsers.nonindentspace * Ct(parsers.Inline^1) + / writer.plain + larsers.starter = parsers.bullet + larsers.enumerator + + -- we use \001 as a separator between a tight list item and a + -- nested list under it. + larsers.NestedList = Cs((parsers.optionallyindentedline + - larsers.starter)^1) + / function(a) return "\001"..a end + + larsers.ListBlockLine = parsers.optionallyindentedline + - parsers.blankline - (parsers.indent^-1 + * larsers.starter) + + larsers.ListBlock = parsers.line * larsers.ListBlockLine^0 + + larsers.ListContinuationBlock = parsers.blanklines * (parsers.indent / "") + * larsers.ListBlock + + larsers.TightListItem = function(starter) + return -larsers.HorizontalRule + * (Cs(starter / "" * larsers.ListBlock * larsers.NestedList^-1) + / parse_blocks) + * -(parsers.blanklines * parsers.indent) + end + + larsers.LooseListItem = function(starter) + return -larsers.HorizontalRule + * Cs( starter / "" * larsers.ListBlock * Cc("\n") + * (larsers.NestedList + larsers.ListContinuationBlock^0) + * (parsers.blanklines / "\n\n") + ) / parse_blocks + end + + larsers.BulletList = ( Ct(larsers.TightListItem(parsers.bullet)^1) * Cc(true) + * parsers.skipblanklines * -parsers.bullet + + Ct(larsers.LooseListItem(parsers.bullet)^1) * Cc(false) + * parsers.skipblanklines ) + / writer.bulletlist + + local function ordered_list(items,tight,startNumber) + if options.startNumber then + startNumber = tonumber(startNumber) or 1 -- fallback for '#' + if startNumber ~= nil then + startNumber = math.floor(startNumber) + end + else + startNumber = nil + end + return writer.orderedlist(items,tight,startNumber) + end + + larsers.OrderedList = Cg(larsers.enumerator, "listtype") * + ( Ct(larsers.TightListItem(Cb("listtype")) + * larsers.TightListItem(larsers.enumerator)^0) + * Cc(true) * parsers.skipblanklines * -larsers.enumerator + + Ct(larsers.LooseListItem(Cb("listtype")) + * larsers.LooseListItem(larsers.enumerator)^0) + * Cc(false) * parsers.skipblanklines + ) * Cb("listtype") / ordered_list + + local function definition_list_item(term, defs, tight) + return { term = parse_inlines(term), definitions = defs } + end + + larsers.DefinitionListItemLoose = C(parsers.line) * parsers.skipblanklines + * Ct((parsers.defstart + * parsers.indented_blocks(parsers.dlchunk) + / parse_blocks_toplevel)^1) + * Cc(false) / definition_list_item + + larsers.DefinitionListItemTight = C(parsers.line) + * Ct((parsers.defstart * parsers.dlchunk + / parse_blocks)^1) + * Cc(true) / definition_list_item + + larsers.DefinitionList = ( Ct(larsers.DefinitionListItemLoose^1) * Cc(false) + + Ct(larsers.DefinitionListItemTight^1) + * (parsers.skipblanklines + * -larsers.DefinitionListItemLoose * Cc(true)) + ) / writer.definitionlist + larsers.Blank = parsers.blankline / "" + + larsers.NoteBlock + + larsers.Reference + + (parsers.tightblocksep / "\n") + -- parse atx header + if options.headerAttributes then + larsers.AtxHeading = Cg(parsers.HeadingStart,"level") + * parsers.optionalspace + * (C(((parsers.linechar + - ((parsers.hash^1 + * parsers.optionalspace + * parsers.HeadingAttributes^-1 + + parsers.HeadingAttributes) + * parsers.optionalspace + * parsers.newline)) + * (parsers.linechar + - parsers.hash + - parsers.lbrace)^0)^1) + / parse_inlines) + * Cg(Ct(parsers.newline + + (parsers.hash^1 + * parsers.optionalspace + * parsers.HeadingAttributes^-1 + + parsers.HeadingAttributes) + * parsers.optionalspace + * parsers.newline), "attributes") + * Cb("level") + * Cb("attributes") + / writer.heading + + larsers.SetextHeading = #(parsers.line * S("=-")) + * (C(((parsers.linechar + - (parsers.HeadingAttributes + * parsers.optionalspace + * parsers.newline)) + * (parsers.linechar + - parsers.lbrace)^0)^1) + / parse_inlines) + * Cg(Ct(parsers.newline + + (parsers.HeadingAttributes + * parsers.optionalspace + * parsers.newline)), "attributes") + * parsers.HeadingLevel + * Cb("attributes") + * parsers.optionalspace + * parsers.newline + / writer.heading + else + larsers.AtxHeading = Cg(parsers.HeadingStart,"level") + * parsers.optionalspace + * (C(parsers.line) / strip_atx_end / parse_inlines) + * Cb("level") + / writer.heading + + larsers.SetextHeading = #(parsers.line * S("=-")) + * Ct(parsers.linechar^1 / parse_inlines) + * parsers.newline + * parsers.HeadingLevel + * parsers.optionalspace + * parsers.newline + / writer.heading + end + + larsers.Heading = larsers.AtxHeading + larsers.SetextHeading + local syntax = + { "Blocks", + + Blocks = larsers.Blank^0 * parsers.Block^-1 + * (larsers.Blank^0 / writer.interblocksep + * parsers.Block)^0 + * larsers.Blank^0 * parsers.eof, + + Blank = larsers.Blank, + + Block = V("ContentBlock") + + V("Blockquote") + + V("PipeTable") + + V("Verbatim") + + V("FencedCode") + + V("HorizontalRule") + + V("BulletList") + + V("OrderedList") + + V("Heading") + + V("DefinitionList") + + V("DisplayHtml") + + V("Paragraph") + + V("Plain"), + + ContentBlock = larsers.ContentBlock, + Blockquote = larsers.Blockquote, + Verbatim = larsers.Verbatim, + FencedCode = larsers.FencedCode, + HorizontalRule = larsers.HorizontalRule, + BulletList = larsers.BulletList, + OrderedList = larsers.OrderedList, + Heading = larsers.Heading, + DefinitionList = larsers.DefinitionList, + DisplayHtml = larsers.DisplayHtml, + Paragraph = larsers.Paragraph, + PipeTable = larsers.PipeTable, + Plain = larsers.Plain, + + Inline = V("Str") + + V("Space") + + V("Endline") + + V("UlOrStarLine") + + V("Strong") + + V("Emph") + + V("InlineNote") + + V("NoteRef") + + V("Citations") + + V("Link") + + V("Image") + + V("Code") + + V("AutoLinkUrl") + + V("AutoLinkEmail") + + V("InlineHtml") + + V("HtmlEntity") + + V("EscapedChar") + + V("Smart") + + V("Symbol"), + + IndentedInline = V("Str") + + V("OptionalIndent") + + V("Endline") + + V("UlOrStarLine") + + V("Strong") + + V("Emph") + + V("InlineNote") + + V("NoteRef") + + V("Citations") + + V("Link") + + V("Image") + + V("Code") + + V("AutoLinkUrl") + + V("AutoLinkEmail") + + V("InlineHtml") + + V("HtmlEntity") + + V("EscapedChar") + + V("Smart") + + V("Symbol"), + + Str = larsers.Str, + Space = larsers.Space, + OptionalIndent = larsers.OptionalIndent, + Endline = larsers.Endline, + UlOrStarLine = larsers.UlOrStarLine, + Strong = larsers.Strong, + Emph = larsers.Emph, + InlineNote = larsers.InlineNote, + NoteRef = larsers.NoteRef, + Citations = larsers.Citations, + Link = larsers.Link, + Image = larsers.Image, + Code = larsers.Code, + AutoLinkUrl = larsers.AutoLinkUrl, + AutoLinkEmail = larsers.AutoLinkEmail, + InlineHtml = larsers.InlineHtml, + HtmlEntity = larsers.HtmlEntity, + EscapedChar = larsers.EscapedChar, + Smart = larsers.Smart, + Symbol = larsers.Symbol, + } + + if not options.citations then + syntax.Citations = parsers.fail + end + + if not options.contentBlocks then + syntax.ContentBlock = parsers.fail + end + + if not options.codeSpans then + syntax.Code = parsers.fail + end + + if not options.definitionLists then + syntax.DefinitionList = parsers.fail + end + + if not options.fencedCode then + syntax.FencedCode = parsers.fail + end + + if not options.footnotes then + syntax.NoteRef = parsers.fail + end + + if not options.html then + syntax.DisplayHtml = parsers.fail + syntax.InlineHtml = parsers.fail + syntax.HtmlEntity = parsers.fail + end + + if not options.inlineFootnotes then + syntax.InlineNote = parsers.fail + end + + if not options.smartEllipses then + syntax.Smart = parsers.fail + end + + if not options.pipeTables then + syntax.PipeTable = parsers.fail + end + + local blocks_toplevel_t = util.table_copy(syntax) + blocks_toplevel_t.Paragraph = larsers.ToplevelParagraph + larsers.blocks_toplevel = Ct(blocks_toplevel_t) + + larsers.blocks = Ct(syntax) + + local inlines_t = util.table_copy(syntax) + inlines_t[1] = "Inlines" + inlines_t.Inlines = parsers.Inline^0 * (parsers.spacing^0 * parsers.eof / "") + larsers.inlines = Ct(inlines_t) + + local inlines_no_link_t = util.table_copy(inlines_t) + inlines_no_link_t.Link = parsers.fail + larsers.inlines_no_link = Ct(inlines_no_link_t) + + local inlines_no_inline_note_t = util.table_copy(inlines_t) + inlines_no_inline_note_t.InlineNote = parsers.fail + larsers.inlines_no_inline_note = Ct(inlines_no_inline_note_t) + + local inlines_nbsp_t = util.table_copy(inlines_t) + inlines_nbsp_t.Endline = larsers.NonbreakingEndline + inlines_nbsp_t.Space = larsers.NonbreakingSpace + larsers.inlines_nbsp = Ct(inlines_nbsp_t) + function self.convert(input) + references = {} + local opt_string = {} + for k,_ in pairs(defaultOptions) do + local v = options[k] + if k ~= "cacheDir" then + opt_string[#opt_string+1] = k .. "=" .. tostring(v) + end + end + table.sort(opt_string) + local salt = table.concat(opt_string, ",") .. "," .. metadata.version + local name = util.cache(options.cacheDir, input, salt, function(input) + return util.rope_to_string(parse_blocks_toplevel(input)) .. writer.eof + end, ".md" .. writer.suffix) + local output = writer.pack(name) + if options.finalizeCache then + local file, mode + if options.frozenCacheCounter > 0 then + mode = "a" + else + mode = "w" + end + file = assert(io.open(options.frozenCacheFileName, mode)) + assert(file:write([[\expandafter\def\csname markdownFrozenCache]] .. + options.frozenCacheCounter .. [[\endcsname{]] .. output .. [[}]] .. + "\n")) + assert(file:close()) + end + return output + end + return self +end +function M.new(options) + local writer = M.writer.new(options) + local reader = M.reader.new(writer, options) + return reader.convert +end + +return M diff --git a/markdown.sty b/markdown.sty new file mode 100644 index 0000000..816c56a --- /dev/null +++ b/markdown.sty @@ -0,0 +1,829 @@ +%% +%% This is file `markdown.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% markdown.dtx (with options: `latex') +%% +%% Copyright (C) 2016-2020 Vít Novotný +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% The Current Maintainer of this work is Vít Novotný. +%% +%% Send bug reports, requests for additions and questions +%% either to the GitHub issue tracker at +%% +%% https://github.com/Witiko/markdown/issues +%% +%% or to the e-mail address . +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\NeedsTeXFormat{LaTeX2e}% +\RequirePackage{keyval} +\RequirePackage{url} +\RequirePackage{graphicx} +\RequirePackage{ifthen} +\RequirePackage{fancyvrb} +\RequirePackage{csvsimple} +\RequirePackage{gobble} +\newenvironment{markdown}\relax\relax +\newenvironment{markdown*}[1]\relax\relax +\newcommand\markdownSetup[1]{% + \setkeys{markdownOptions}{#1}}% +\define@key{markdownOptions}{helperScriptFileName}{% + \def\markdownOptionHelperScriptFileName{#1}}% +\define@key{markdownOptions}{inputTempFileName}{% + \def\markdownOptionInputTempFileName{#1}}% +\define@key{markdownOptions}{outputTempFileName}{% + \def\markdownOptionOutputTempFileName{#1}}% +\define@key{markdownOptions}{errorTempFileName}{% + \def\markdownOptionErrorTempFileName{#1}}% +\define@key{markdownOptions}{cacheDir}{% + \def\markdownOptionCacheDir{#1}}% +\define@key{markdownOptions}{outputDir}{% + \def\markdownOptionOutputDir{#1}}% +\define@key{markdownOptions}{blankBeforeBlockquote}[true]{% + \def\markdownOptionBlankBeforeBlockquote{#1}}% +\define@key{markdownOptions}{blankBeforeCodeFence}[true]{% + \def\markdownOptionBlankBeforeCodeFence{#1}}% +\define@key{markdownOptions}{blankBeforeHeading}[true]{% + \def\markdownOptionBlankBeforeHeading{#1}}% +\define@key{markdownOptions}{breakableBlockquotes}[true]{% + \def\markdownOptionBreakableBlockquotes{#1}}% +\define@key{markdownOptions}{citations}[true]{% + \def\markdownOptionCitations{#1}}% +\define@key{markdownOptions}{citationNbsps}[true]{% + \def\markdownOptionCitationNbsps{#1}}% +\define@key{markdownOptions}{contentBlocks}[true]{% + \def\markdownOptionContentBlocks{#1}}% +\define@key{markdownOptions}{codeSpans}[true]{% + \def\markdownOptionCodeSpans{#1}}% +\define@key{markdownOptions}{contentBlocksLanguageMap}{% + \def\markdownOptionContentBlocksLanguageMap{#1}}% +\define@key{markdownOptions}{definitionLists}[true]{% + \def\markdownOptionDefinitionLists{#1}}% +\define@key{markdownOptions}{footnotes}[true]{% + \def\markdownOptionFootnotes{#1}}% +\define@key{markdownOptions}{fencedCode}[true]{% + \def\markdownOptionFencedCode{#1}}% +\define@key{markdownOptions}{hashEnumerators}[true]{% + \def\markdownOptionHashEnumerators{#1}}% +\define@key{markdownOptions}{headerAttributes}[true]{% + \def\markdownOptionHeaderAttributes{#1}}% +\define@key{markdownOptions}{html}[true]{% + \def\markdownOptionHtml{#1}}% +\define@key{markdownOptions}{hybrid}[true]{% + \def\markdownOptionHybrid{#1}}% +\define@key{markdownOptions}{inlineFootnotes}[true]{% + \def\markdownOptionInlineFootnotes{#1}}% +\define@key{markdownOptions}{pipeTables}[true]{% + \def\markdownOptionPipeTables{#1}}% +\define@key{markdownOptions}{preserveTabs}[true]{% + \def\markdownOptionPreserveTabs{#1}}% +\define@key{markdownOptions}{smartEllipses}[true]{% + \def\markdownOptionSmartEllipses{#1}}% +\define@key{markdownOptions}{shiftHeadings}{% + \def\markdownOptionShiftHeadings{#1}}% +\define@key{markdownOptions}{slice}{% + \def\markdownOptionSlice{#1}}% +\define@key{markdownOptions}{startNumber}[true]{% + \def\markdownOptionStartNumber{#1}}% +\define@key{markdownOptions}{tableCaptions}[true]{% + \def\markdownOptionTableCaptions{#1}}% +\define@key{markdownOptions}{tightLists}[true]{% + \def\markdownOptionTightLists{#1}}% +\define@key{markdownOptions}{underscores}[true]{% + \def\markdownOptionUnderscores{#1}}% +\define@key{markdownOptions}{stripPercentSigns}[true]{% + \def\markdownOptionStripPercentSigns{#1}}% +\define@key{markdownOptions}{finalizeCache}[true]{% + \def\markdownOptionFinalizeCache{#1}}% +\DeclareOption{finalizecache}{\markdownSetup{finalizeCache}} +\define@key{markdownOptions}{frozenCache}[true]{% + \def\markdownOptionFrozenCache{#1}}% +\DeclareOption{frozencache}{\markdownSetup{frozenCache}} +\define@key{markdownOptions}{frozenCacheFileName}{% + \def\markdownOptionFrozenCacheFileName{#1}}% +\define@key{markdownRenderers}{interblockSeparator}{% + \renewcommand\markdownRendererInterblockSeparator{#1}}% +\define@key{markdownRenderers}{lineBreak}{% + \renewcommand\markdownRendererLineBreak{#1}}% +\define@key{markdownRenderers}{ellipsis}{% + \renewcommand\markdownRendererEllipsis{#1}}% +\define@key{markdownRenderers}{nbsp}{% + \renewcommand\markdownRendererNbsp{#1}}% +\define@key{markdownRenderers}{leftBrace}{% + \renewcommand\markdownRendererLeftBrace{#1}}% +\define@key{markdownRenderers}{rightBrace}{% + \renewcommand\markdownRendererRightBrace{#1}}% +\define@key{markdownRenderers}{dollarSign}{% + \renewcommand\markdownRendererDollarSign{#1}}% +\define@key{markdownRenderers}{percentSign}{% + \renewcommand\markdownRendererPercentSign{#1}}% +\define@key{markdownRenderers}{ampersand}{% + \renewcommand\markdownRendererAmpersand{#1}}% +\define@key{markdownRenderers}{underscore}{% + \renewcommand\markdownRendererUnderscore{#1}}% +\define@key{markdownRenderers}{hash}{% + \renewcommand\markdownRendererHash{#1}}% +\define@key{markdownRenderers}{circumflex}{% + \renewcommand\markdownRendererCircumflex{#1}}% +\define@key{markdownRenderers}{backslash}{% + \renewcommand\markdownRendererBackslash{#1}}% +\define@key{markdownRenderers}{tilde}{% + \renewcommand\markdownRendererTilde{#1}}% +\define@key{markdownRenderers}{pipe}{% + \renewcommand\markdownRendererPipe{#1}}% +\define@key{markdownRenderers}{codeSpan}{% + \renewcommand\markdownRendererCodeSpan[1]{#1}}% +\define@key{markdownRenderers}{link}{% + \renewcommand\markdownRendererLink[4]{#1}}% +\define@key{markdownRenderers}{contentBlock}{% + \renewcommand\markdownRendererContentBlock[4]{#1}}% +\define@key{markdownRenderers}{contentBlockOnlineImage}{% + \renewcommand\markdownRendererContentBlockOnlineImage[4]{#1}}% +\define@key{markdownRenderers}{contentBlockCode}{% + \renewcommand\markdownRendererContentBlockCode[5]{#1}}% +\define@key{markdownRenderers}{image}{% + \renewcommand\markdownRendererImage[4]{#1}}% +\define@key{markdownRenderers}{ulBegin}{% + \renewcommand\markdownRendererUlBegin{#1}}% +\define@key{markdownRenderers}{ulBeginTight}{% + \renewcommand\markdownRendererUlBeginTight{#1}}% +\define@key{markdownRenderers}{ulItem}{% + \renewcommand\markdownRendererUlItem{#1}}% +\define@key{markdownRenderers}{ulItemEnd}{% + \renewcommand\markdownRendererUlItemEnd{#1}}% +\define@key{markdownRenderers}{ulEnd}{% + \renewcommand\markdownRendererUlEnd{#1}}% +\define@key{markdownRenderers}{ulEndTight}{% + \renewcommand\markdownRendererUlEndTight{#1}}% +\define@key{markdownRenderers}{olBegin}{% + \renewcommand\markdownRendererOlBegin{#1}}% +\define@key{markdownRenderers}{olBeginTight}{% + \renewcommand\markdownRendererOlBeginTight{#1}}% +\define@key{markdownRenderers}{olItem}{% + \renewcommand\markdownRendererOlItem{#1}}% +\define@key{markdownRenderers}{olItemWithNumber}{% + \renewcommand\markdownRendererOlItemWithNumber[1]{#1}}% +\define@key{markdownRenderers}{olItemEnd}{% + \renewcommand\markdownRendererOlItemEnd{#1}}% +\define@key{markdownRenderers}{olEnd}{% + \renewcommand\markdownRendererOlEnd{#1}}% +\define@key{markdownRenderers}{olEndTight}{% + \renewcommand\markdownRendererOlEndTight{#1}}% +\define@key{markdownRenderers}{dlBegin}{% + \renewcommand\markdownRendererDlBegin{#1}}% +\define@key{markdownRenderers}{dlBeginTight}{% + \renewcommand\markdownRendererDlBeginTight{#1}}% +\define@key{markdownRenderers}{dlItem}{% + \renewcommand\markdownRendererDlItem[1]{#1}}% +\define@key{markdownRenderers}{dlItemEnd}{% + \renewcommand\markdownRendererDlItemEnd{#1}}% +\define@key{markdownRenderers}{dlDefinitionBegin}{% + \renewcommand\markdownRendererDlDefinitionBegin{#1}}% +\define@key{markdownRenderers}{dlDefinitionEnd}{% + \renewcommand\markdownRendererDlDefinitionEnd{#1}}% +\define@key{markdownRenderers}{dlEnd}{% + \renewcommand\markdownRendererDlEnd{#1}}% +\define@key{markdownRenderers}{dlEndTight}{% + \renewcommand\markdownRendererDlEndTight{#1}}% +\define@key{markdownRenderers}{emphasis}{% + \renewcommand\markdownRendererEmphasis[1]{#1}}% +\define@key{markdownRenderers}{strongEmphasis}{% + \renewcommand\markdownRendererStrongEmphasis[1]{#1}}% +\define@key{markdownRenderers}{blockQuoteBegin}{% + \renewcommand\markdownRendererBlockQuoteBegin{#1}}% +\define@key{markdownRenderers}{blockQuoteEnd}{% + \renewcommand\markdownRendererBlockQuoteEnd{#1}}% +\define@key{markdownRenderers}{inputVerbatim}{% + \renewcommand\markdownRendererInputVerbatim[1]{#1}}% +\define@key{markdownRenderers}{inputFencedCode}{% + \renewcommand\markdownRendererInputFencedCode[2]{#1}}% +\define@key{markdownRenderers}{headingOne}{% + \renewcommand\markdownRendererHeadingOne[1]{#1}}% +\define@key{markdownRenderers}{headingTwo}{% + \renewcommand\markdownRendererHeadingTwo[1]{#1}}% +\define@key{markdownRenderers}{headingThree}{% + \renewcommand\markdownRendererHeadingThree[1]{#1}}% +\define@key{markdownRenderers}{headingFour}{% + \renewcommand\markdownRendererHeadingFour[1]{#1}}% +\define@key{markdownRenderers}{headingFive}{% + \renewcommand\markdownRendererHeadingFive[1]{#1}}% +\define@key{markdownRenderers}{headingSix}{% + \renewcommand\markdownRendererHeadingSix[1]{#1}}% +\define@key{markdownRenderers}{horizontalRule}{% + \renewcommand\markdownRendererHorizontalRule{#1}}% +\define@key{markdownRenderers}{footnote}{% + \renewcommand\markdownRendererFootnote[1]{#1}}% +\define@key{markdownRenderers}{cite}{% + \renewcommand\markdownRendererCite[1]{#1}}% +\define@key{markdownRenderers}{textCite}{% + \renewcommand\markdownRendererTextCite[1]{#1}}% +\define@key{markdownRenderers}{table}{% + \renewcommand\markdownRendererTable[3]{#1}}% +\define@key{markdownRendererPrototypes}{interblockSeparator}{% + \renewcommand\markdownRendererInterblockSeparatorPrototype{#1}}% +\define@key{markdownRendererPrototypes}{lineBreak}{% + \renewcommand\markdownRendererLineBreakPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ellipsis}{% + \renewcommand\markdownRendererEllipsisPrototype{#1}}% +\define@key{markdownRendererPrototypes}{nbsp}{% + \renewcommand\markdownRendererNbspPrototype{#1}}% +\define@key{markdownRendererPrototypes}{leftBrace}{% + \renewcommand\markdownRendererLeftBracePrototype{#1}}% +\define@key{markdownRendererPrototypes}{rightBrace}{% + \renewcommand\markdownRendererRightBracePrototype{#1}}% +\define@key{markdownRendererPrototypes}{dollarSign}{% + \renewcommand\markdownRendererDollarSignPrototype{#1}}% +\define@key{markdownRendererPrototypes}{percentSign}{% + \renewcommand\markdownRendererPercentSignPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ampersand}{% + \renewcommand\markdownRendererAmpersandPrototype{#1}}% +\define@key{markdownRendererPrototypes}{underscore}{% + \renewcommand\markdownRendererUnderscorePrototype{#1}}% +\define@key{markdownRendererPrototypes}{hash}{% + \renewcommand\markdownRendererHashPrototype{#1}}% +\define@key{markdownRendererPrototypes}{circumflex}{% + \renewcommand\markdownRendererCircumflexPrototype{#1}}% +\define@key{markdownRendererPrototypes}{backslash}{% + \renewcommand\markdownRendererBackslashPrototype{#1}}% +\define@key{markdownRendererPrototypes}{tilde}{% + \renewcommand\markdownRendererTildePrototype{#1}}% +\define@key{markdownRendererPrototypes}{pipe}{% + \renewcommand\markdownRendererPipePrototype{#1}}% +\define@key{markdownRendererPrototypes}{codeSpan}{% + \renewcommand\markdownRendererCodeSpanPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{link}{% + \renewcommand\markdownRendererLinkPrototype[4]{#1}}% +\define@key{markdownRendererPrototypes}{contentBlock}{% + \renewcommand\markdownRendererContentBlockPrototype[4]{#1}}% +\define@key{markdownRendererPrototypes}{contentBlockOnlineImage}{% + \renewcommand\markdownRendererContentBlockOnlineImagePrototype[4]{#1}}% +\define@key{markdownRendererPrototypes}{contentBlockCode}{% + \renewcommand\markdownRendererContentBlockCodePrototype[5]{#1}}% +\define@key{markdownRendererPrototypes}{image}{% + \renewcommand\markdownRendererImagePrototype[4]{#1}}% +\define@key{markdownRendererPrototypes}{ulBegin}{% + \renewcommand\markdownRendererUlBeginPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ulBeginTight}{% + \renewcommand\markdownRendererUlBeginTightPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ulItem}{% + \renewcommand\markdownRendererUlItemPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ulItemEnd}{% + \renewcommand\markdownRendererUlItemEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ulEnd}{% + \renewcommand\markdownRendererUlEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{ulEndTight}{% + \renewcommand\markdownRendererUlEndTightPrototype{#1}}% +\define@key{markdownRendererPrototypes}{olBegin}{% + \renewcommand\markdownRendererOlBeginPrototype{#1}}% +\define@key{markdownRendererPrototypes}{olBeginTight}{% + \renewcommand\markdownRendererOlBeginTightPrototype{#1}}% +\define@key{markdownRendererPrototypes}{olItem}{% + \renewcommand\markdownRendererOlItemPrototype{#1}}% +\define@key{markdownRendererPrototypes}{olItemWithNumber}{% + \renewcommand\markdownRendererOlItemWithNumberPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{olItemEnd}{% + \renewcommand\markdownRendererOlItemEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{olEnd}{% + \renewcommand\markdownRendererOlEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{olEndTight}{% + \renewcommand\markdownRendererOlEndTightPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlBegin}{% + \renewcommand\markdownRendererDlBeginPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlBeginTight}{% + \renewcommand\markdownRendererDlBeginTightPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlItem}{% + \renewcommand\markdownRendererDlItemPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{dlItemEnd}{% + \renewcommand\markdownRendererDlItemEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlDefinitionBegin}{% + \renewcommand\markdownRendererDlDefinitionBeginPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlDefinitionEnd}{% + \renewcommand\markdownRendererDlDefinitionEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlEnd}{% + \renewcommand\markdownRendererDlEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{dlEndTight}{% + \renewcommand\markdownRendererDlEndTightPrototype{#1}}% +\define@key{markdownRendererPrototypes}{emphasis}{% + \renewcommand\markdownRendererEmphasisPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{strongEmphasis}{% + \renewcommand\markdownRendererStrongEmphasisPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{blockQuoteBegin}{% + \renewcommand\markdownRendererBlockQuoteBeginPrototype{#1}}% +\define@key{markdownRendererPrototypes}{blockQuoteEnd}{% + \renewcommand\markdownRendererBlockQuoteEndPrototype{#1}}% +\define@key{markdownRendererPrototypes}{inputVerbatim}{% + \renewcommand\markdownRendererInputVerbatimPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{inputFencedCode}{% + \renewcommand\markdownRendererInputFencedCodePrototype[2]{#1}}% +\define@key{markdownRendererPrototypes}{headingOne}{% + \renewcommand\markdownRendererHeadingOnePrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{headingTwo}{% + \renewcommand\markdownRendererHeadingTwoPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{headingThree}{% + \renewcommand\markdownRendererHeadingThreePrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{headingFour}{% + \renewcommand\markdownRendererHeadingFourPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{headingFive}{% + \renewcommand\markdownRendererHeadingFivePrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{headingSix}{% + \renewcommand\markdownRendererHeadingSixPrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{horizontalRule}{% + \renewcommand\markdownRendererHorizontalRulePrototype{#1}}% +\define@key{markdownRendererPrototypes}{footnote}{% + \renewcommand\markdownRendererFootnotePrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{cite}{% + \renewcommand\markdownRendererCitePrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{textCite}{% + \renewcommand\markdownRendererTextCitePrototype[1]{#1}}% +\define@key{markdownRendererPrototypes}{table}{% + \renewcommand\markdownRendererTablePrototype[3]{#1}}% +\input markdown +\def\markdownVersionSpace{ }% +\ProvidesPackage{markdown}[\markdownLastModified\markdownVersionSpace v% + \markdownVersion\markdownVersionSpace markdown renderer]% +\renewcommand\markdownInfo[1]{\PackageInfo{markdown}{#1}}% +\renewcommand\markdownWarning[1]{\PackageWarning{markdown}{#1}}% +\renewcommand\markdownError[2]{\PackageError{markdown}{#1}{#2.}}% +\let\markdownInputPlainTeX\markdownInput +\renewcommand\markdownInput[2][]{% + \begingroup + \markdownSetup{#1}% + \markdownInputPlainTeX{#2}% + \endgroup}% +\renewenvironment{markdown}{% + \markdownReadAndConvert@markdown{}}{% + \markdownEnd}% +\renewenvironment{markdown*}[1]{% + \markdownSetup{#1}% + \markdownReadAndConvert@markdown*}{% + \markdownEnd}% +\begingroup + \catcode`\|=0\catcode`\<=1\catcode`\>=2% + \catcode`\\=12|catcode`|{=12|catcode`|}=12% + |gdef|markdownReadAndConvert@markdown#1<% + |markdownReadAndConvert<\end{markdown#1}>% + <|end>>% +|endgroup +\DeclareOption*{% + \expandafter\markdownSetup\expandafter{\CurrentOption}}% +\ProcessOptions\relax +\define@key{markdownOptions}{renderers}{% + \setkeys{markdownRenderers}{#1}% + \def\KV@prefix{KV@markdownOptions@}}% +\define@key{markdownOptions}{rendererPrototypes}{% + \setkeys{markdownRendererPrototypes}{#1}% + \def\KV@prefix{KV@markdownOptions@}}% +\ifx\markdownOptionTightLists\undefined + \@ifclassloaded{beamer}{}{ + \RequirePackage{paralist}} +\else + \ifthenelse{\equal{\markdownOptionTightLists}{false}}{}{ + \RequirePackage{paralist}} +\fi +\@ifpackageloaded{paralist}{ + \markdownSetup{rendererPrototypes={ + ulBeginTight = {\begin{compactitem}}, + ulEndTight = {\end{compactitem}}, + olBeginTight = {\begin{compactenum}}, + olEndTight = {\end{compactenum}}, + dlBeginTight = {\begin{compactdesc}}, + dlEndTight = {\end{compactdesc}}}} +}{ + \markdownSetup{rendererPrototypes={ + ulBeginTight = {\markdownRendererUlBegin}, + ulEndTight = {\markdownRendererUlEnd}, + olBeginTight = {\markdownRendererOlBegin}, + olEndTight = {\markdownRendererOlEnd}, + dlBeginTight = {\markdownRendererDlBegin}, + dlEndTight = {\markdownRendererDlEnd}}}} +\markdownSetup{rendererPrototypes={ + lineBreak = {\\}, + leftBrace = {\textbraceleft}, + rightBrace = {\textbraceright}, + dollarSign = {\textdollar}, + underscore = {\textunderscore}, + circumflex = {\textasciicircum}, + backslash = {\textbackslash}, + tilde = {\textasciitilde}, + pipe = {\textbar}, + codeSpan = {\texttt{#1}}, + contentBlock = {% + \ifthenelse{\equal{#1}{csv}}{% + \begin{table}% + \begin{center}% + \csvautotabular{#3}% + \end{center} + \ifx\empty#4\empty\else + \caption{#4}% + \fi + \end{table}}{% + \markdownInput{#3}}}, + image = {% + \begin{figure}% + \begin{center}% + \includegraphics{#3}% + \end{center}% + \ifx\empty#4\empty\else + \caption{#4}% + \fi + \label{fig:#1}% + \end{figure}}, + ulBegin = {\begin{itemize}}, + ulItem = {\item}, + ulEnd = {\end{itemize}}, + olBegin = {\begin{enumerate}}, + olItem = {\item}, + olItemWithNumber = {\item[#1.]}, + olEnd = {\end{enumerate}}, + dlBegin = {\begin{description}}, + dlItem = {\item[#1]}, + dlEnd = {\end{description}}, + emphasis = {\emph{#1}}, + blockQuoteBegin = {\begin{quotation}}, + blockQuoteEnd = {\end{quotation}}, + inputVerbatim = {\VerbatimInput{#1}}, + inputFencedCode = {% + \ifx\relax#2\relax + \VerbatimInput{#1}% + \else + \ifx\minted@code\undefined + \ifx\lst@version\undefined + \markdownRendererInputFencedCode{#1}{}% + \else + \lstinputlisting[language=#2]{#1}% + \fi + \else + \inputminted{#2}{#1}% + \fi + \fi}, + horizontalRule = {\noindent\rule[0.5ex]{\linewidth}{1pt}}, + footnote = {\footnote{#1}}}} +\newif\ifmarkdownLATEXStrongEmphasisNested +\markdownLATEXStrongEmphasisNestedfalse +\markdownSetup{rendererPrototypes={ + strongEmphasis = {% + \ifmarkdownLATEXStrongEmphasisNested + \markdownLATEXStrongEmphasisNestedfalse + \textmd{#1}% + \markdownLATEXStrongEmphasisNestedtrue + \else + \markdownLATEXStrongEmphasisNestedtrue + \textbf{#1}% + \markdownLATEXStrongEmphasisNestedfalse + \fi}}} +\ifx\chapter\undefined + \markdownSetup{rendererPrototypes = { + headingOne = {\section{#1}}, + headingTwo = {\subsection{#1}}, + headingThree = {\subsubsection{#1}}, + headingFour = {\paragraph{#1}\leavevmode}, + headingFive = {\subparagraph{#1}\leavevmode}}} +\else + \markdownSetup{rendererPrototypes = { + headingOne = {\chapter{#1}}, + headingTwo = {\section{#1}}, + headingThree = {\subsection{#1}}, + headingFour = {\subsubsection{#1}}, + headingFive = {\paragraph{#1}\leavevmode}, + headingSix = {\subparagraph{#1}\leavevmode}}} +\fi +\newcount\markdownLaTeXCitationsCounter + +\def\markdownLaTeXBasicCitations#1#2#3#4#5#6{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifx\relax#4\relax + \ifx\relax#5\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \cite{#1#2#6}% Without prenotes and postnotes, just accumulate cites + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \@gobblethree + \fi + \else% Before a postnote (#5), dump the accumulator + \ifx\relax#1\relax\else + \cite{#1}% + \fi + \cite[#5]{#6}% + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXBasicCitations + \fi + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \@gobblethree + \fi + \else% Before a prenote (#4), dump the accumulator + \ifx\relax#1\relax\else + \cite{#1}% + \fi + \ifnum\markdownLaTeXCitationsCounter>1\relax + \space % Insert a space before the prenote in later citations + \fi + #4~\expandafter\cite\ifx\relax#5\relax{#6}\else[#5]{#6}\fi + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXBasicCitations + \fi + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter + \@gobblethree + \fi\markdownLaTeXBasicCitations{#1#2#6},} +\let\markdownLaTeXBasicTextCitations\markdownLaTeXBasicCitations + +\def\markdownLaTeXNatbibCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifx\relax#3\relax + \ifx\relax#4\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \citep{#1,#5}% Without prenotes and postnotes, just accumulate cites + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% Before a postnote (#4), dump the accumulator + \ifx\relax#1\relax\else + \citep{#1}% + \fi + \citep[][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXNatbibCitations + \fi + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% Before a prenote (#3), dump the accumulator + \ifx\relax#1\relax\relax\else + \citep{#1}% + \fi + \citep[#3][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \else + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXNatbibCitations + \fi + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter + \@gobbletwo + \fi\markdownLaTeXNatbibCitations{#1,#5}} +\def\markdownLaTeXNatbibTextCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifx\relax#3\relax + \ifx\relax#4\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \citet{#1,#5}% Without prenotes and postnotes, just accumulate cites + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% After a prenote or a postnote, dump the accumulator + \ifx\relax#1\relax\else + \citet{#1}% + \fi + , \citet[#3][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax + , + \else + \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax + , + \fi + \fi + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter + \markdownLaTeXNatbibTextCitations + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter + \expandafter\expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter + \@gobbletwo + \fi + \else% After a prenote or a postnote, dump the accumulator + \ifx\relax#1\relax\relax\else + \citet{#1}% + \fi + , \citet[#3][#4]{#5}% + \ifnum\markdownLaTeXCitationsCounter<\markdownLaTeXCitationsTotal\relax + , + \else + \ifnum\markdownLaTeXCitationsCounter=\markdownLaTeXCitationsTotal\relax + , + \fi + \fi + \expandafter\expandafter\expandafter + \markdownLaTeXNatbibTextCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter + \@gobbletwo + \fi\markdownLaTeXNatbibTextCitations{#1,#5}} + +\def\markdownLaTeXBibLaTeXCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \autocites#1[#3][#4]{#5}% + \expandafter\@gobbletwo + \fi\markdownLaTeXBibLaTeXCitations{#1[#3][#4]{#5}}} +\def\markdownLaTeXBibLaTeXTextCitations#1#2#3#4#5{% + \advance\markdownLaTeXCitationsCounter by 1\relax + \ifnum\markdownLaTeXCitationsCounter>\markdownLaTeXCitationsTotal\relax + \textcites#1[#3][#4]{#5}% + \expandafter\@gobbletwo + \fi\markdownLaTeXBibLaTeXTextCitations{#1[#3][#4]{#5}}} + +\markdownSetup{rendererPrototypes = { + cite = {% + \markdownLaTeXCitationsCounter=1% + \def\markdownLaTeXCitationsTotal{#1}% + \ifx\autocites\undefined + \ifx\citep\undefined + \expandafter\expandafter\expandafter + \markdownLaTeXBasicCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \else + \expandafter\expandafter\expandafter + \markdownLaTeXNatbibCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \fi + \else + \expandafter\expandafter\expandafter + \markdownLaTeXBibLaTeXCitations + \expandafter{\expandafter}% + \fi}, + textCite = {% + \markdownLaTeXCitationsCounter=1% + \def\markdownLaTeXCitationsTotal{#1}% + \ifx\autocites\undefined + \ifx\citep\undefined + \expandafter\expandafter\expandafter + \markdownLaTeXBasicTextCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \else + \expandafter\expandafter\expandafter + \markdownLaTeXNatbibTextCitations + \expandafter\expandafter\expandafter{% + \expandafter\expandafter\expandafter}% + \fi + \else + \expandafter\expandafter\expandafter + \markdownLaTeXBibLaTeXTextCitations + \expandafter{\expandafter}% + \fi}}} +\def\markdownRendererLinkPrototype{% + \begingroup + \catcode`\#=12 + \def\next##1##2##3##4{% + ##1\footnote{% + \ifx\empty##4\empty\else##4: \fi\texttt<\url{##3}\texttt>}% + \endgroup}% + \next} +\newcount\markdownLaTeXRowCounter +\newcount\markdownLaTeXRowTotal +\newcount\markdownLaTeXColumnCounter +\newcount\markdownLaTeXColumnTotal +\newtoks\markdownLaTeXTable +\newtoks\markdownLaTeXTableAlignment +\newtoks\markdownLaTeXTableEnd +\@ifpackageloaded{booktabs}{ + \let\markdownLaTeXTopRule\toprule + \let\markdownLaTeXMidRule\midrule + \let\markdownLaTeXBottomRule\bottomrule +}{ + \let\markdownLaTeXTopRule\hline + \let\markdownLaTeXMidRule\hline + \let\markdownLaTeXBottomRule\hline +} +\markdownSetup{rendererPrototypes={ + table = {% + \markdownLaTeXTable={}% + \markdownLaTeXTableAlignment={}% + \markdownLaTeXTableEnd={% + \markdownLaTeXBottomRule + \end{tabular}}% + \ifx\empty#1\empty\else + \addto@hook\markdownLaTeXTable{% + \begin{table} + \centering}% + \addto@hook\markdownLaTeXTableEnd{% + \caption{#1} + \end{table}}% + \fi + \addto@hook\markdownLaTeXTable{\begin{tabular}}% + \markdownLaTeXRowCounter=0% + \markdownLaTeXRowTotal=#2% + \markdownLaTeXColumnTotal=#3% + \markdownLaTeXRenderTableRow + } +}} +\def\markdownLaTeXRenderTableRow#1{% + \markdownLaTeXColumnCounter=0% + \ifnum\markdownLaTeXRowCounter=0\relax + \markdownLaTeXReadAlignments#1% + \markdownLaTeXTable=\expandafter\expandafter\expandafter{% + \expandafter\the\expandafter\markdownLaTeXTable\expandafter{% + \the\markdownLaTeXTableAlignment}}% + \addto@hook\markdownLaTeXTable{\markdownLaTeXTopRule}% + \else + \markdownLaTeXRenderTableCell#1% + \fi + \ifnum\markdownLaTeXRowCounter=1\relax + \addto@hook\markdownLaTeXTable\markdownLaTeXMidRule + \fi + \advance\markdownLaTeXRowCounter by 1\relax + \ifnum\markdownLaTeXRowCounter>\markdownLaTeXRowTotal\relax + \markdownInfo{\the\markdownLaTeXTable} + \markdownInfo{\the\markdownLaTeXTableEnd} + \the\markdownLaTeXTable + \the\markdownLaTeXTableEnd + \expandafter\@gobble + \fi\markdownLaTeXRenderTableRow} +\def\markdownLaTeXReadAlignments#1{% + \advance\markdownLaTeXColumnCounter by 1\relax + \if#1d% + \addto@hook\markdownLaTeXTableAlignment{l}% + \else + \addto@hook\markdownLaTeXTableAlignment{#1}% + \fi + \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax\else + \expandafter\@gobble + \fi\markdownLaTeXReadAlignments} +\def\markdownLaTeXRenderTableCell#1{% + \advance\markdownLaTeXColumnCounter by 1\relax + \ifnum\markdownLaTeXColumnCounter<\markdownLaTeXColumnTotal\relax + \addto@hook\markdownLaTeXTable{#1&}% + \else + \addto@hook\markdownLaTeXTable{#1\\}% + \expandafter\@gobble + \fi\markdownLaTeXRenderTableCell} +\newcommand\markdownMakeOther{% + \count0=128\relax + \loop + \catcode\count0=11\relax + \advance\count0 by 1\relax + \ifnum\count0<256\repeat}% +\endinput +%% +%% End of file `markdown.sty'. diff --git a/markdown.tex b/markdown.tex new file mode 100644 index 0000000..61327f9 --- /dev/null +++ b/markdown.tex @@ -0,0 +1,631 @@ +%% +%% This is file `markdown.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% markdown.dtx (with options: `tex') +%% +%% Copyright (C) 2016-2020 Vít Novotný +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% The Current Maintainer of this work is Vít Novotný. +%% +%% Send bug reports, requests for additions and questions +%% either to the GitHub issue tracker at +%% +%% https://github.com/Witiko/markdown/issues +%% +%% or to the e-mail address . +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\def\markdownLastModified{2020/09/14}% +\def\markdownVersion{2.9.0}% +\let\markdownBegin\relax +\let\markdownEnd\relax +\let\markdownInput\relax +\let\markdownOptionFinalizeCache\undefined +\def\markdownOptionHelperScriptFileName{\jobname.markdown.lua}% +\def\markdownOptionInputTempFileName{\jobname.markdown.in}% +\def\markdownOptionOutputTempFileName{\jobname.markdown.out}% +\def\markdownOptionErrorTempFileName{\jobname.markdown.err}% +\def\markdownOptionOutputDir{.}% +\def\markdownOptionCacheDir{\markdownOptionOutputDir/_markdown_\jobname}% +\def\markdownOptionFrozenCacheFileName{\markdownOptionCacheDir/frozenCache.tex} +\let\markdownOptionBlankBeforeBlockquote\undefined +\let\markdownOptionBlankBeforeCodeFence\undefined +\let\markdownOptionBlankBeforeHeading\undefined +\let\markdownOptionBreakableBlockquotes\undefined +\let\markdownOptionCitations\undefined +\let\markdownOptionCitationNbsps\undefined +\let\markdownOptionContentBlocks\undefined +\let\markdownOptionContentBlocksLanguageMap\undefined +\let\markdownOptionDefinitionLists\undefined +\let\markdownOptionFootnotes\undefined +\let\markdownOptionFencedCode\undefined +\let\markdownOptionHashEnumerators\undefined +\let\markdownOptionHeaderAttributes\undefined +\let\markdownOptionHtml\undefined +\let\markdownOptionHybrid\undefined +\let\markdownOptionInlineFootnotes\undefined +\let\markdownOptionPipeTables\undefined +\let\markdownOptionPreserveTabs\undefined +\let\markdownOptionShiftHeadings\undefined +\let\markdownOptionSlice\undefined +\let\markdownOptionSmartEllipses\undefined +\let\markdownOptionStartNumber\undefined +\let\markdownOptionTableCaptions\undefined +\let\markdownOptionTightLists\undefined +\def\markdownOptionStripPercentSigns{false}% +\def\markdownRendererInterblockSeparator{% + \markdownRendererInterblockSeparatorPrototype}% +\def\markdownRendererLineBreak{% + \markdownRendererLineBreakPrototype}% +\def\markdownRendererEllipsis{% + \markdownRendererEllipsisPrototype}% +\def\markdownRendererNbsp{% + \markdownRendererNbspPrototype}% +\def\markdownRendererLeftBrace{% + \markdownRendererLeftBracePrototype}% +\def\markdownRendererRightBrace{% + \markdownRendererRightBracePrototype}% +\def\markdownRendererDollarSign{% + \markdownRendererDollarSignPrototype}% +\def\markdownRendererPercentSign{% + \markdownRendererPercentSignPrototype}% +\def\markdownRendererAmpersand{% + \markdownRendererAmpersandPrototype}% +\def\markdownRendererUnderscore{% + \markdownRendererUnderscorePrototype}% +\def\markdownRendererHash{% + \markdownRendererHashPrototype}% +\def\markdownRendererCircumflex{% + \markdownRendererCircumflexPrototype}% +\def\markdownRendererBackslash{% + \markdownRendererBackslashPrototype}% +\def\markdownRendererTilde{% + \markdownRendererTildePrototype}% +\def\markdownRendererPipe{% + \markdownRendererPipePrototype}% +\def\markdownRendererCodeSpan{% + \markdownRendererCodeSpanPrototype}% +\def\markdownRendererLink{% + \markdownRendererLinkPrototype}% +\def\markdownRendererImage{% + \markdownRendererImagePrototype}% +\def\markdownRendererContentBlock{% + \markdownRendererContentBlockPrototype}% +\def\markdownRendererContentBlockOnlineImage{% + \markdownRendererContentBlockOnlineImagePrototype}% +\def\markdownRendererContentBlockCode{% + \markdownRendererContentBlockCodePrototype}% +\def\markdownRendererUlBegin{% + \markdownRendererUlBeginPrototype}% +\def\markdownRendererUlBeginTight{% + \markdownRendererUlBeginTightPrototype}% +\def\markdownRendererUlItem{% + \markdownRendererUlItemPrototype}% +\def\markdownRendererUlItemEnd{% + \markdownRendererUlItemEndPrototype}% +\def\markdownRendererUlEnd{% + \markdownRendererUlEndPrototype}% +\def\markdownRendererUlEndTight{% + \markdownRendererUlEndTightPrototype}% +\def\markdownRendererOlBegin{% + \markdownRendererOlBeginPrototype}% +\def\markdownRendererOlBeginTight{% + \markdownRendererOlBeginTightPrototype}% +\def\markdownRendererOlItem{% + \markdownRendererOlItemPrototype}% +\def\markdownRendererOlItemEnd{% + \markdownRendererOlItemEndPrototype}% +\def\markdownRendererOlItemWithNumber{% + \markdownRendererOlItemWithNumberPrototype}% +\def\markdownRendererOlEnd{% + \markdownRendererOlEndPrototype}% +\def\markdownRendererOlEndTight{% + \markdownRendererOlEndTightPrototype}% +\def\markdownRendererDlBegin{% + \markdownRendererDlBeginPrototype}% +\def\markdownRendererDlBeginTight{% + \markdownRendererDlBeginTightPrototype}% +\def\markdownRendererDlItem{% + \markdownRendererDlItemPrototype}% +\def\markdownRendererDlItemEnd{% + \markdownRendererDlItemEndPrototype}% +\def\markdownRendererDlDefinitionBegin{% + \markdownRendererDlDefinitionBeginPrototype}% +\def\markdownRendererDlDefinitionEnd{% + \markdownRendererDlDefinitionEndPrototype}% +\def\markdownRendererDlEnd{% + \markdownRendererDlEndPrototype}% +\def\markdownRendererDlEndTight{% + \markdownRendererDlEndTightPrototype}% +\def\markdownRendererEmphasis{% + \markdownRendererEmphasisPrototype}% +\def\markdownRendererStrongEmphasis{% + \markdownRendererStrongEmphasisPrototype}% +\def\markdownRendererBlockQuoteBegin{% + \markdownRendererBlockQuoteBeginPrototype}% +\def\markdownRendererBlockQuoteEnd{% + \markdownRendererBlockQuoteEndPrototype}% +\def\markdownRendererInputVerbatim{% + \markdownRendererInputVerbatimPrototype}% +\def\markdownRendererInputFencedCode{% + \markdownRendererInputFencedCodePrototype}% +\def\markdownRendererHeadingOne{% + \markdownRendererHeadingOnePrototype}% +\def\markdownRendererHeadingTwo{% + \markdownRendererHeadingTwoPrototype}% +\def\markdownRendererHeadingThree{% + \markdownRendererHeadingThreePrototype}% +\def\markdownRendererHeadingFour{% + \markdownRendererHeadingFourPrototype}% +\def\markdownRendererHeadingFive{% + \markdownRendererHeadingFivePrototype}% +\def\markdownRendererHeadingSix{% + \markdownRendererHeadingSixPrototype}% +\def\markdownRendererHorizontalRule{% + \markdownRendererHorizontalRulePrototype}% +\def\markdownRendererFootnote{% + \markdownRendererFootnotePrototype}% +\def\markdownRendererCite{% + \markdownRendererCitePrototype}% +\def\markdownRendererTextCite{% + \markdownRendererTextCitePrototype}% +\def\markdownRendererTable{% + \markdownRendererTablePrototype}% +\def\markdownRendererInterblockSeparatorPrototype{}% +\def\markdownRendererLineBreakPrototype{}% +\def\markdownRendererEllipsisPrototype{}% +\def\markdownRendererNbspPrototype{}% +\def\markdownRendererLeftBracePrototype{}% +\def\markdownRendererRightBracePrototype{}% +\def\markdownRendererDollarSignPrototype{}% +\def\markdownRendererPercentSignPrototype{}% +\def\markdownRendererAmpersandPrototype{}% +\def\markdownRendererUnderscorePrototype{}% +\def\markdownRendererHashPrototype{}% +\def\markdownRendererCircumflexPrototype{}% +\def\markdownRendererBackslashPrototype{}% +\def\markdownRendererTildePrototype{}% +\def\markdownRendererPipePrototype{}% +\def\markdownRendererCodeSpanPrototype#1{}% +\def\markdownRendererLinkPrototype#1#2#3#4{}% +\def\markdownRendererImagePrototype#1#2#3#4{}% +\def\markdownRendererContentBlockPrototype#1#2#3#4{}% +\def\markdownRendererContentBlockOnlineImagePrototype#1#2#3#4{}% +\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{}% +\def\markdownRendererUlBeginPrototype{}% +\def\markdownRendererUlBeginTightPrototype{}% +\def\markdownRendererUlItemPrototype{}% +\def\markdownRendererUlItemEndPrototype{}% +\def\markdownRendererUlEndPrototype{}% +\def\markdownRendererUlEndTightPrototype{}% +\def\markdownRendererOlBeginPrototype{}% +\def\markdownRendererOlBeginTightPrototype{}% +\def\markdownRendererOlItemPrototype{}% +\def\markdownRendererOlItemWithNumberPrototype#1{}% +\def\markdownRendererOlItemEndPrototype{}% +\def\markdownRendererOlEndPrototype{}% +\def\markdownRendererOlEndTightPrototype{}% +\def\markdownRendererDlBeginPrototype{}% +\def\markdownRendererDlBeginTightPrototype{}% +\def\markdownRendererDlItemPrototype#1{}% +\def\markdownRendererDlItemEndPrototype{}% +\def\markdownRendererDlDefinitionBeginPrototype{}% +\def\markdownRendererDlDefinitionEndPrototype{}% +\def\markdownRendererDlEndPrototype{}% +\def\markdownRendererDlEndTightPrototype{}% +\def\markdownRendererEmphasisPrototype#1{}% +\def\markdownRendererStrongEmphasisPrototype#1{}% +\def\markdownRendererBlockQuoteBeginPrototype{}% +\def\markdownRendererBlockQuoteEndPrototype{}% +\def\markdownRendererInputVerbatimPrototype#1{}% +\def\markdownRendererInputFencedCodePrototype#1#2{}% +\def\markdownRendererHeadingOnePrototype#1{}% +\def\markdownRendererHeadingTwoPrototype#1{}% +\def\markdownRendererHeadingThreePrototype#1{}% +\def\markdownRendererHeadingFourPrototype#1{}% +\def\markdownRendererHeadingFivePrototype#1{}% +\def\markdownRendererHeadingSixPrototype#1{}% +\def\markdownRendererHorizontalRulePrototype{}% +\def\markdownRendererFootnotePrototype#1{}% +\def\markdownRendererCitePrototype#1{}% +\def\markdownRendererTextCitePrototype#1{}% +\def\markdownRendererTablePrototype#1#2#3{}% +\def\markdownInfo#1{}% +\def\markdownWarning#1{}% +\def\markdownError#1#2{}% +\let\markdownMakeOther\relax +\let\markdownReadAndConvert\relax +\begingroup + \catcode`\|=0\catcode`\\=12% + |gdef|markdownBegin{% + |markdownReadAndConvert{\markdownEnd}% + {|markdownEnd}}% +|endgroup +\ifx\markdownMode\undefined + \ifx\directlua\undefined + \def\markdownMode{0}% + \else + \def\markdownMode{2}% + \fi +\fi +\def\markdownLuaRegisterIBCallback#1{\relax}% +\def\markdownLuaUnregisterIBCallback#1{\relax}% +\def\markdownInfo#1{% + \immediate\write-1{(l.\the\inputlineno) markdown.tex info: #1.}}% +\def\markdownWarning#1{% + \immediate\write16{(l.\the\inputlineno) markdown.tex warning: #1}}% +\def\markdownError#1#2{% + \errhelp{#2.}% + \errmessage{(l.\the\inputlineno) markdown.tex error: #1}}% +\newcount\markdownFrozenCacheCounter +\def\markdownRendererInterblockSeparatorPrototype{\par}% +\def\markdownRendererLineBreakPrototype{\hfil\break}% +\let\markdownRendererEllipsisPrototype\dots +\def\markdownRendererNbspPrototype{~}% +\def\markdownRendererLeftBracePrototype{\char`\{}% +\def\markdownRendererRightBracePrototype{\char`\}}% +\def\markdownRendererDollarSignPrototype{\char`$}% +\def\markdownRendererPercentSignPrototype{\char`\%}% +\def\markdownRendererAmpersandPrototype{\&}% +\def\markdownRendererUnderscorePrototype{\char`_}% +\def\markdownRendererHashPrototype{\char`\#}% +\def\markdownRendererCircumflexPrototype{\char`^}% +\def\markdownRendererBackslashPrototype{\char`\\}% +\def\markdownRendererTildePrototype{\char`~}% +\def\markdownRendererPipePrototype{|}% +\def\markdownRendererCodeSpanPrototype#1{{\tt#1}}% +\def\markdownRendererLinkPrototype#1#2#3#4{#2}% +\def\markdownRendererContentBlockPrototype#1#2#3#4{% + \markdownInput{#3}}% +\def\markdownRendererContentBlockOnlineImagePrototype{% + \markdownRendererImage}% +\def\markdownRendererContentBlockCodePrototype#1#2#3#4#5{% + \markdownRendererInputFencedCode{#3}{#2}}% +\def\markdownRendererImagePrototype#1#2#3#4{#2}% +\def\markdownRendererUlBeginPrototype{}% +\def\markdownRendererUlBeginTightPrototype{}% +\def\markdownRendererUlItemPrototype{}% +\def\markdownRendererUlItemEndPrototype{}% +\def\markdownRendererUlEndPrototype{}% +\def\markdownRendererUlEndTightPrototype{}% +\def\markdownRendererOlBeginPrototype{}% +\def\markdownRendererOlBeginTightPrototype{}% +\def\markdownRendererOlItemPrototype{}% +\def\markdownRendererOlItemWithNumberPrototype#1{}% +\def\markdownRendererOlItemEndPrototype{}% +\def\markdownRendererOlEndPrototype{}% +\def\markdownRendererOlEndTightPrototype{}% +\def\markdownRendererDlBeginPrototype{}% +\def\markdownRendererDlBeginTightPrototype{}% +\def\markdownRendererDlItemPrototype#1{#1}% +\def\markdownRendererDlItemEndPrototype{}% +\def\markdownRendererDlDefinitionBeginPrototype{}% +\def\markdownRendererDlDefinitionEndPrototype{\par}% +\def\markdownRendererDlEndPrototype{}% +\def\markdownRendererDlEndTightPrototype{}% +\def\markdownRendererEmphasisPrototype#1{{\it#1}}% +\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}% +\def\markdownRendererBlockQuoteBeginPrototype{\par\begingroup\it}% +\def\markdownRendererBlockQuoteEndPrototype{\endgroup\par}% +\def\markdownRendererInputVerbatimPrototype#1{% + \par{\tt\input#1\relax{}}\par}% +\def\markdownRendererInputFencedCodePrototype#1#2{% + \markdownRendererInputVerbatimPrototype{#1}}% +\def\markdownRendererHeadingOnePrototype#1{#1}% +\def\markdownRendererHeadingTwoPrototype#1{#1}% +\def\markdownRendererHeadingThreePrototype#1{#1}% +\def\markdownRendererHeadingFourPrototype#1{#1}% +\def\markdownRendererHeadingFivePrototype#1{#1}% +\def\markdownRendererHeadingSixPrototype#1{#1}% +\def\markdownRendererHorizontalRulePrototype{}% +\def\markdownRendererFootnotePrototype#1{#1}% +\def\markdownRendererCitePrototype#1{}% +\def\markdownRendererTextCitePrototype#1{}% +\def\markdownLuaOptions{{% +\ifx\markdownOptionBlankBeforeBlockquote\undefined\else + blankBeforeBlockquote = \markdownOptionBlankBeforeBlockquote, +\fi +\ifx\markdownOptionBlankBeforeCodeFence\undefined\else + blankBeforeCodeFence = \markdownOptionBlankBeforeCodeFence, +\fi +\ifx\markdownOptionBlankBeforeHeading\undefined\else + blankBeforeHeading = \markdownOptionBlankBeforeHeading, +\fi +\ifx\markdownOptionBreakableBlockquotes\undefined\else + breakableBlockquotes = \markdownOptionBreakableBlockquotes, +\fi + cacheDir = "\markdownOptionCacheDir", +\ifx\markdownOptionCitations\undefined\else + citations = \markdownOptionCitations, +\fi +\ifx\markdownOptionCitationNbsps\undefined\else + citationNbsps = \markdownOptionCitationNbsps, +\fi +\ifx\markdownOptionCodeSpans\undefined\else + codeSpans = \markdownOptionCodeSpans, +\fi +\ifx\markdownOptionContentBlocks\undefined\else + contentBlocks = \markdownOptionContentBlocks, +\fi +\ifx\markdownOptionContentBlocksLanguageMap\undefined\else + contentBlocksLanguageMap = + "\markdownOptionContentBlocksLanguageMap", +\fi +\ifx\markdownOptionDefinitionLists\undefined\else + definitionLists = \markdownOptionDefinitionLists, +\fi +\ifx\markdownOptionFinalizeCache\undefined\else + finalizeCache = \markdownOptionFinalizeCache, +\fi + frozenCacheFileName = "\markdownOptionFrozenCacheFileName", + frozenCacheCounter = \the\markdownFrozenCacheCounter, +\ifx\markdownOptionFootnotes\undefined\else + footnotes = \markdownOptionFootnotes, +\fi +\ifx\markdownOptionFencedCode\undefined\else + fencedCode = \markdownOptionFencedCode, +\fi +\ifx\markdownOptionHashEnumerators\undefined\else + hashEnumerators = \markdownOptionHashEnumerators, +\fi +\ifx\markdownOptionHeaderAttributes\undefined\else + headerAttributes = \markdownOptionHeaderAttributes, +\fi +\ifx\markdownOptionHtml\undefined\else + html = \markdownOptionHtml, +\fi +\ifx\markdownOptionHybrid\undefined\else + hybrid = \markdownOptionHybrid, +\fi +\ifx\markdownOptionInlineFootnotes\undefined\else + inlineFootnotes = \markdownOptionInlineFootnotes, +\fi +\ifx\markdownOptionPipeTables\undefined\else + pipeTables = \markdownOptionPipeTables, +\fi +\ifx\markdownOptionPreserveTabs\undefined\else + preserveTabs = \markdownOptionPreserveTabs, +\fi +\ifx\markdownOptionShiftHeadings\undefined\else + shiftHeadings = "\markdownOptionShiftHeadings", +\fi +\ifx\markdownOptionSlice\undefined\else + slice = "\markdownOptionSlice", +\fi +\ifx\markdownOptionSmartEllipses\undefined\else + smartEllipses = \markdownOptionSmartEllipses, +\fi +\ifx\markdownOptionStartNumber\undefined\else + startNumber = \markdownOptionStartNumber, +\fi +\ifx\markdownOptionTableCaptions\undefined\else + tableCaptions = \markdownOptionTableCaptions, +\fi +\ifx\markdownOptionTightLists\undefined\else + tightLists = \markdownOptionTightLists, +\fi +\ifx\markdownOptionUnderscores\undefined\else + underscores = \markdownOptionUnderscores, +\fi} +}% +\def\markdownPrepare{% + local lfs = require("lfs") + local cacheDir = "\markdownOptionCacheDir" + if not lfs.isdir(cacheDir) then + assert(lfs.mkdir(cacheDir)) + end + local md = require("markdown") + local convert = md.new(\markdownLuaOptions) +}% +\def\markdownIfOption#1#2#3{% + \begingroup + \def\next{true}% + \expandafter\ifx\csname markdownOption#1\endcsname\next + \endgroup#2\else\endgroup#3\fi}% +\csname newread\endcsname\markdownInputFileStream +\csname newwrite\endcsname\markdownOutputFileStream +\begingroup + \catcode`\^^I=12% + \gdef\markdownReadAndConvertTab{^^I}% +\endgroup +\begingroup + \catcode`\^^M=13% + \catcode`\^^I=13% + \catcode`|=0% + \catcode`\\=12% + |catcode`@=14% + |catcode`|%=12@ + |gdef|markdownReadAndConvert#1#2{@ + |begingroup@ + |markdownIfOption{FrozenCache}{}{@ + |immediate|openout|markdownOutputFileStream@ + |markdownOptionInputTempFileName|relax@ + |markdownInfo{Buffering markdown input into the temporary @ + input file "|markdownOptionInputTempFileName" and scanning @ + for the closing token sequence "#1"}@ + }@ + |def|do##1{|catcode`##1=12}|dospecials@ + |catcode`| =12@ + |markdownMakeOther@ + |def|markdownReadAndConvertStripPercentSign##1{@ + |markdownIfOption{StripPercentSigns}{@ + |if##1%@ + |expandafter|expandafter|expandafter@ + |markdownReadAndConvertProcessLine@ + |else@ + |expandafter|expandafter|expandafter@ + |markdownReadAndConvertProcessLine@ + |expandafter|expandafter|expandafter##1@ + |fi@ + }{@ + |expandafter@ + |markdownReadAndConvertProcessLine@ + |expandafter##1@ + }@ + }@ + |def|markdownReadAndConvertProcessLine##1#1##2#1##3|relax{@ + |ifx|relax##3|relax@ + |markdownIfOption{FrozenCache}{}{@ + |immediate|write|markdownOutputFileStream{##1}@ + }@ + |else@ + |def^^M{@ + |markdownInfo{The ending token sequence was found}@ + |markdownIfOption{FrozenCache}{}{@ + |immediate|closeout|markdownOutputFileStream@ + }@ + |endgroup@ + |markdownInput{@ + |markdownOptionOutputDir@ + /|markdownOptionInputTempFileName@ + }@ + #2}@ + |fi@ + ^^M}@ + |catcode`|^^I=13@ + |def^^I{|markdownReadAndConvertTab}@ + |catcode`|^^M=13@ + |def^^M##1^^M{@ + |def^^M####1^^M{@ + |markdownReadAndConvertStripPercentSign####1#1#1|relax}@ + ^^M}@ + ^^M}@ +|endgroup +\ifnum\markdownMode<2\relax +\ifnum\markdownMode=0\relax + \markdownInfo{Using mode 0: Shell escape via write18}% +\else + \markdownInfo{Using mode 1: Shell escape via os.execute}% +\fi +\ifx\pdfshellescape\undefined + \ifx\shellescape\undefined + \ifnum\markdownMode=0\relax + \def\markdownExecuteShellEscape{1}% + \else + \def\markdownExecuteShellEscape{% + \directlua{tex.sprint(status.shell_escape or "1")}}% + \fi + \else + \let\markdownExecuteShellEscape\shellescape + \fi +\else + \let\markdownExecuteShellEscape\pdfshellescape +\fi +\ifnum\markdownMode=0\relax + \def\markdownExecuteDirect#1{\immediate\write18{#1}}% +\else + \def\markdownExecuteDirect#1{% + \directlua{os.execute("\luaescapestring{#1}")}}% +\fi +\def\markdownExecute#1{% + \ifnum\markdownExecuteShellEscape=1\relax + \markdownExecuteDirect{#1}% + \else + \markdownError{I can not access the shell}{Either run the TeX + compiler with the --shell-escape or the --enable-write18 flag, + or set shell_escape=t in the texmf.cnf file}% + \fi}% +\begingroup + \catcode`|=0% + \catcode`\\=12% + |gdef|markdownLuaExecute#1{% + |immediate|openout|markdownOutputFileStream=% + |markdownOptionHelperScriptFileName + |markdownInfo{Writing a helper Lua script to the file + "|markdownOptionHelperScriptFileName"}% + |immediate|write|markdownOutputFileStream{% + local ran_ok, error = pcall(function() + local kpse = require("kpse") + kpse.set_program_name("luatex") + #1 + end) + if not ran_ok then + local file = io.open("% + |markdownOptionOutputDir + /|markdownOptionErrorTempFileName", "w") + if file then + file:write(error .. "\n") + file:close() + end + print('\\markdownError{An error was encountered while executing + Lua code}{For further clues, examine the file + "|markdownOptionOutputDir + /|markdownOptionErrorTempFileName"}') + end}% + |immediate|closeout|markdownOutputFileStream + |markdownInfo{Executing a helper Lua script from the file + "|markdownOptionHelperScriptFileName" and storing the result in the + file "|markdownOptionOutputTempFileName"}% + |markdownExecute{texlua "|markdownOptionOutputDir + /|markdownOptionHelperScriptFileName" > % + "|markdownOptionOutputDir + /|markdownOptionOutputTempFileName"}% + |input|markdownOptionOutputTempFileName|relax}% +|endgroup +\else +\markdownInfo{Using mode 2: Direct Lua access}% +\def\markdownLuaExecute#1{\directlua{local print = tex.print #1}}% +\fi +\begingroup + \catcode`|=0% + \catcode`\\=12% + |gdef|markdownInput#1{% + |markdownIfOption{FrozenCache}{% + |ifnum|markdownFrozenCacheCounter=0|relax + |markdownInfo{Reading frozen cache from + "|markdownOptionFrozenCacheFileName"}% + |input|markdownOptionFrozenCacheFileName|relax + |fi + |markdownInfo{Including markdown document number + "|the|markdownFrozenCacheCounter" from frozen cache}% + |csname markdownFrozenCache|the|markdownFrozenCacheCounter|endcsname + |advance|markdownFrozenCacheCounter by 1|relax + }{% + |markdownInfo{Including markdown document "#1"}% + |openin|markdownInputFileStream#1 + |closein|markdownInputFileStream + |markdownLuaExecute{% + |markdownPrepare + local file = assert(io.open("#1", "r")) + local input = assert(file:read("*a")) + assert(file:close()) + print(convert(input:gsub("\r\n?", "\n") .. "\n"))}% + |markdownIfOption{FinalizeCache}{% + |advance|markdownFrozenCacheCounter by 1|relax + }% + }% + }% +|endgroup +\endinput +%% +%% End of file `markdown.tex'. diff --git a/t-markdown.tex b/t-markdown.tex new file mode 100644 index 0000000..92027c9 --- /dev/null +++ b/t-markdown.tex @@ -0,0 +1,227 @@ +%% +%% This is file `t-markdown.tex', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% markdown.dtx (with options: `context') +%% +%% Copyright (C) 2016-2020 Vít Novotný +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license or (at your option) any later version. +%% The latest version of this license is in +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% The Current Maintainer of this work is Vít Novotný. +%% +%% Send bug reports, requests for additions and questions +%% either to the GitHub issue tracker at +%% +%% https://github.com/Witiko/markdown/issues +%% +%% or to the e-mail address . +%% +%% MODIFICATION ADVICE: +%% +%% If you want to customize this file, it is best to make a copy of +%% the source file(s) from which it was produced. Use a different +%% name for your copy(ies) and modify the copy(ies); this will ensure +%% that your modifications do not get overwritten when you install a +%% new release of the standard system. You should also ensure that +%% your modified source file does not generate any modified file with +%% the same name as a standard file. +%% +%% You will also need to produce your own, suitably named, .ins file to +%% control the generation of files from your source file; this file +%% should contain your own preambles for the files it generates, not +%% those in the standard .ins files. +%% +%% The names of the source files used are shown above. +%% +\writestatus{loading}{ConTeXt User Module / markdown}% +\unprotect +\let\startmarkdown\relax +\let\stopmarkdown\relax +\def\dospecials{\do\ \do\\\do\{\do\}\do\$\do\&% + \do\#\do\^\do\_\do\%\do\~}% +\input markdown +\def\markdownMakeOther{% + \count0=128\relax + \loop + \catcode\count0=11\relax + \advance\count0 by 1\relax + \ifnum\count0<256\repeat + \catcode`|=12}% +\def\markdownInfo#1{\writestatus{markdown}{#1.}}% +\def\markdownWarning#1{\writestatus{markdown\space warn}{#1.}}% +\begingroup + \catcode`\|=0% + \catcode`\\=12% + |gdef|startmarkdown{% + |markdownReadAndConvert{\stopmarkdown}% + {|stopmarkdown}}% + |gdef|stopmarkdown{|markdownEnd}% +|endgroup +\def\markdownRendererLineBreakPrototype{\blank}% +\def\markdownRendererLeftBracePrototype{\textbraceleft}% +\def\markdownRendererRightBracePrototype{\textbraceright}% +\def\markdownRendererDollarSignPrototype{\textdollar}% +\def\markdownRendererPercentSignPrototype{\percent}% +\def\markdownRendererUnderscorePrototype{\textunderscore}% +\def\markdownRendererCircumflexPrototype{\textcircumflex}% +\def\markdownRendererBackslashPrototype{\textbackslash}% +\def\markdownRendererTildePrototype{\textasciitilde}% +\def\markdownRendererPipePrototype{\char`|}% +\def\markdownRendererLinkPrototype#1#2#3#4{% + \useURL[#1][#3][][#4]#1\footnote[#1]{\ifx\empty#4\empty\else#4: + \fi\tt<\hyphenatedurl{#3}>}}% +\usemodule[database] +\defineseparatedlist + [MarkdownConTeXtCSV] + [separator={,}, + before=\bTABLE,after=\eTABLE, + first=\bTR,last=\eTR, + left=\bTD,right=\eTD] +\def\markdownConTeXtCSV{csv} +\def\markdownRendererContentBlockPrototype#1#2#3#4{% + \def\markdownConTeXtCSV@arg{#1}% +\ifx\markdownConTeXtCSV@arg\markdownConTeXtCSV + \placetable[][tab:#1]{#4}{% + \processseparatedfile[MarkdownConTeXtCSV][#3]}% +\else +\markdownInput{#3}% +\fi}% +\def\markdownRendererImagePrototype#1#2#3#4{% + \placefigure[][fig:#1]{#4}{\externalfigure[#3]}}% +\def\markdownRendererUlBeginPrototype{\startitemize}% +\def\markdownRendererUlBeginTightPrototype{\startitemize[packed]}% +\def\markdownRendererUlItemPrototype{\item}% +\def\markdownRendererUlEndPrototype{\stopitemize}% +\def\markdownRendererUlEndTightPrototype{\stopitemize}% +\def\markdownRendererOlBeginPrototype{\startitemize[n]}% +\def\markdownRendererOlBeginTightPrototype{\startitemize[packed,n]}% +\def\markdownRendererOlItemPrototype{\item}% +\def\markdownRendererOlItemWithNumberPrototype#1{\sym{#1.}}% +\def\markdownRendererOlEndPrototype{\stopitemize}% +\def\markdownRendererOlEndTightPrototype{\stopitemize}% +\definedescription + [MarkdownConTeXtDlItemPrototype] + [location=hanging, + margin=standard, + headstyle=bold]% +\definestartstop + [MarkdownConTeXtDlPrototype] + [before=\blank, + after=\blank]% +\definestartstop + [MarkdownConTeXtDlTightPrototype] + [before=\blank\startpacked, + after=\stoppacked\blank]% +\def\markdownRendererDlBeginPrototype{% + \startMarkdownConTeXtDlPrototype}% +\def\markdownRendererDlBeginTightPrototype{% + \startMarkdownConTeXtDlTightPrototype}% +\def\markdownRendererDlItemPrototype#1{% + \startMarkdownConTeXtDlItemPrototype{#1}}% +\def\markdownRendererDlItemEndPrototype{% + \stopMarkdownConTeXtDlItemPrototype}% +\def\markdownRendererDlEndPrototype{% + \stopMarkdownConTeXtDlPrototype}% +\def\markdownRendererDlEndTightPrototype{% + \stopMarkdownConTeXtDlTightPrototype}% +\def\markdownRendererEmphasisPrototype#1{{\em#1}}% +\def\markdownRendererStrongEmphasisPrototype#1{{\bf#1}}% +\def\markdownRendererBlockQuoteBeginPrototype{\startquotation}% +\def\markdownRendererBlockQuoteEndPrototype{\stopquotation}% +\def\markdownRendererInputVerbatimPrototype#1{\typefile{#1}}% +\def\markdownRendererInputFencedCodePrototype#1#2{% + \ifx\relax#2\relax + \typefile{#1}% + \else + \typefile[#2][]{#1}% + \fi}% +\def\markdownRendererHeadingOnePrototype#1{\chapter{#1}}% +\def\markdownRendererHeadingTwoPrototype#1{\section{#1}}% +\def\markdownRendererHeadingThreePrototype#1{\subsection{#1}}% +\def\markdownRendererHeadingFourPrototype#1{\subsubsection{#1}}% +\def\markdownRendererHeadingFivePrototype#1{\subsubsubsection{#1}}% +\def\markdownRendererHeadingSixPrototype#1{\subsubsubsubsection{#1}}% +\def\markdownRendererHorizontalRulePrototype{% + \blackrule[height=1pt, width=\hsize]}% +\def\markdownRendererFootnotePrototype#1{\footnote{#1}}% +\stopmodule\protect +\newcount\markdownConTeXtRowCounter +\newcount\markdownConTeXtRowTotal +\newcount\markdownConTeXtColumnCounter +\newcount\markdownConTeXtColumnTotal +\newtoks\markdownConTeXtTable +\newtoks\markdownConTeXtTableFloat +\def\markdownRendererTablePrototype#1#2#3{% + \markdownConTeXtTable={}% + \ifx\empty#1\empty + \markdownConTeXtTableFloat={% + \the\markdownConTeXtTable}% + \else + \markdownConTeXtTableFloat={% + \placetable{#1}{\the\markdownConTeXtTable}}% + \fi + \begingroup + \setupTABLE[r][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off] + \setupTABLE[c][each][topframe=off, bottomframe=off, leftframe=off, rightframe=off] + \setupTABLE[r][1][topframe=on, bottomframe=on] + \setupTABLE[r][#1][bottomframe=on] + \markdownConTeXtRowCounter=0% + \markdownConTeXtRowTotal=#2% + \markdownConTeXtColumnTotal=#3% + \markdownConTeXtRenderTableRow} +\def\markdownConTeXtRenderTableRow#1{% + \markdownConTeXtColumnCounter=0% + \ifnum\markdownConTeXtRowCounter=0\relax + \markdownConTeXtReadAlignments#1% + \markdownConTeXtTable={\bTABLE}% + \else + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\bTR}% + \markdownConTeXtRenderTableCell#1% + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\eTR}% + \fi + \advance\markdownConTeXtRowCounter by 1\relax + \ifnum\markdownConTeXtRowCounter>\markdownConTeXtRowTotal\relax + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\eTABLE}% + \the\markdownConTeXtTableFloat + \endgroup + \expandafter\gobbleoneargument + \fi\markdownConTeXtRenderTableRow} +\def\markdownConTeXtReadAlignments#1{% + \advance\markdownConTeXtColumnCounter by 1\relax + \if#1d% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right] + \fi\if#1l% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=right] + \fi\if#1c% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=middle] + \fi\if#1r% + \setupTABLE[c][\the\markdownConTeXtColumnCounter][align=left] + \fi + \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else + \expandafter\gobbleoneargument + \fi\markdownConTeXtReadAlignments} +\def\markdownConTeXtRenderTableCell#1{% + \advance\markdownConTeXtColumnCounter by 1\relax + \markdownConTeXtTable=\expandafter{% + \the\markdownConTeXtTable\bTD#1\eTD}% + \ifnum\markdownConTeXtColumnCounter<\markdownConTeXtColumnTotal\relax\else + \expandafter\gobbleoneargument + \fi\markdownConTeXtRenderTableCell} +\endinput +%% +%% End of file `t-markdown.tex'.