From 4617806cafd709361827ebcf579db5c0691d0941 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Thu, 12 May 2022 12:28:22 +0200 Subject: [PATCH] chore: add latest version Signed-off-by: Matej Focko --- Makefile | 6 + backup.tex | 685 ---- bibliography.bib | 245 ++ example.bib | 123 - fi-pdflatex.tex | 627 ++- 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 15158 -> 0 bytes fithesis/logo/mu/fithesis-base.pdf | Bin 15988 -> 0 bytes fithesis/logo/mu/fithesis-fi-color.pdf | Bin 11804 -> 0 bytes fithesis/logo/mu/fithesis-fi.pdf | Bin 11626 -> 0 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 --- markdown.lua | 4063 -------------------- markdown.sty | 829 ---- markdown.tex | 631 --- t-markdown.tex | 227 -- 29 files changed, 802 insertions(+), 9788 deletions(-) create mode 100644 Makefile delete mode 100644 backup.tex create mode 100644 bibliography.bib delete mode 100644 example.bib delete mode 100644 fithesis/locale/fithesis-czech.def delete mode 100644 fithesis/locale/fithesis-english.def delete mode 100644 fithesis/locale/fithesis-slovak.def delete mode 100644 fithesis/locale/mu/fi/fithesis-czech.def delete mode 100644 fithesis/locale/mu/fi/fithesis-english.def delete mode 100644 fithesis/locale/mu/fi/fithesis-slovak.def delete mode 100644 fithesis/locale/mu/fithesis-czech.def delete mode 100644 fithesis/locale/mu/fithesis-english.def delete mode 100644 fithesis/locale/mu/fithesis-slovak.def delete mode 100644 fithesis/logo/mu/fithesis-base-color.pdf delete mode 100644 fithesis/logo/mu/fithesis-base.pdf delete mode 100644 fithesis/logo/mu/fithesis-fi-color.pdf delete mode 100644 fithesis/logo/mu/fithesis-fi.pdf delete mode 100644 fithesis/style/fithesis-base.sty delete mode 100644 fithesis/style/mu/fithesis-10.clo delete mode 100644 fithesis/style/mu/fithesis-11.clo delete mode 100644 fithesis/style/mu/fithesis-12.clo delete mode 100644 fithesis/style/mu/fithesis-base.sty delete mode 100644 fithesis/style/mu/fithesis-fi.sty delete mode 100644 fithesis3.cls delete mode 100644 markdown.lua delete mode 100644 markdown.sty delete mode 100644 markdown.tex delete mode 100644 t-markdown.tex diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..75f23a6 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +COUNT:=$(shell texcount fi-pdflatex.tex -char -inc | grep "Letters in text:" | tail -n1 | cut -f2- -d:) + +count: + @echo Does not count spaces! The number is therefore lower than actual number of standard pages. + @echo Letters: $(COUNT) + @echo Pages: $(shell echo "scale=2; $(COUNT)/1800.0" | bc -l )/30 diff --git a/backup.tex b/backup.tex deleted file mode 100644 index ad557ae..0000000 --- a/backup.tex +++ /dev/null @@ -1,685 +0,0 @@ -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% 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/bibliography.bib b/bibliography.bib new file mode 100644 index 0000000..e0fc810 --- /dev/null +++ b/bibliography.bib @@ -0,0 +1,245 @@ +% The example bibliographical entries below were borrowed from the +% package documentation. + +@article{wavl, + author = {Haeupler, Bernhard and Sen, Siddhartha and Tarjan, Robert E.}, + title = {Rank-Balanced Trees}, + year = {2015}, + issue_date = {June 2015}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + volume = {11}, + number = {4}, + issn = {1549-6325}, + url = {https://doi.org/10.1145/2689412}, + doi = {10.1145/2689412}, + abstract = {Since the invention of AVL trees in 1962, many kinds of binary search trees have been proposed. Notable are red-black trees, in which bottom-up rebalancing after an insertion or deletion takes O(1) amortized time and O(1) rotations worst-case. But the design space of balanced trees has not been fully explored. We continue the exploration. Our contributions are three: We systematically study the use of ranks and rank differences to define height-based balance in binary trees. Different invariants on rank differences yield AVL trees, red-black trees, and other kinds of balanced trees. By relaxing AVL trees, we obtain a new kind of balanced binary tree, the weak AVL tree (wavl tree), whose properties we develop. Bottom-up rebalancing after an insertion or deletion takes O(1) amortized time and at most two rotations, improving the three or more rotations per deletion needed in all other kinds of balanced trees of which we are aware. The height bound of a wavl tree degrades gracefully from that of an AVL tree as the number of deletions increases and is never worse than that of a red-black tree. Wavl trees also support top-down, fixed look-ahead rebalancing in O(1) amortized time. Finally, we use exponential potential functions to prove that in wavl trees rebalancing steps occur exponentially infrequently in rank. Thus, most of the rebalancing is at the bottom of the tree, which is crucial in concurrent applications and in those in which rotations take time that depends on the subtree size.}, + journal = {ACM Trans. Algorithms}, + month = {6}, + articleno = {30}, + numpages = {26}, + keywords = {data structures, exponential potential function, red-black trees, AVL trees, search trees, Balanced binary trees, amortized complexity} +} + +@article{ravl, + author = {Sen, Siddhartha and Tarjan, Robert E. and Kim, David Hong Kyun}, + title = {Deletion Without Rebalancing in Binary Search Trees}, + year = {2016}, + issue_date = {September 2016}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + volume = {12}, + number = {4}, + issn = {1549-6325}, + url = {https://doi.org/10.1145/2903142}, + doi = {10.1145/2903142}, + abstract = {We address the vexing issue of deletions in balanced trees. Rebalancing after a deletion is generally more complicated than rebalancing after an insertion. Textbooks neglect deletion rebalancing, and many B-tree--based database systems do not do it. We describe a relaxation of AVL trees in which rebalancing is done after insertions but not after deletions, yet worst-case access time remains logarithmic in the number of insertions. For any application of balanced trees in which the number of updates is polynomial in the tree size, our structure offers performance competitive with that of classical balanced trees. With the addition of periodic rebuilding, the performance of our structure is theoretically superior to that of many, if not all, classic balanced tree structures. Our structure needs lg lg m+ 1 bits of balance information per node, where m is the number of insertions and lg is the base-two logarithm, or lg lg n+ O(1) with periodic rebuilding, where n is the number of nodes. An insertion takes up to two rotations and O(1) amortized time, not counting the time to find the insertion position. This is the same as in standard AVL trees. Using an analysis that relies on an exponential potential function, we show that rebalancing steps occur with a frequency that is exponentially small in the height of the affected node. Our techniques apply to other types of balanced trees, notably B-trees, as we show in a companion article, and particularly red-black trees, which can be viewed as a special case of B-trees.}, + journal = {ACM Trans. Algorithms}, + month = {sep}, + articleno = {57}, + numpages = {31}, + keywords = {Balanced trees, exponential potential function, amortized complexity, algorithm, data structure, database access methods} +} + +@INPROCEEDINGS{rbtree, + author={Guibas, Leo J. and Sedgewick, Robert}, + booktitle={19th Annual Symposium on Foundations of Computer Science (sfcs 1978)}, + title={A dichromatic framework for balanced trees}, + year={1978}, + volume={}, + number={}, + pages={8-21}, + doi={10.1109/SFCS.1978.3} +} + +@inproceedings{btree, + author = {Bayer, R. and McCreight, E.}, + title = {Organization and Maintenance of Large Ordered Indices}, + year = {1970}, + isbn = {9781450379410}, + publisher = {Association for Computing Machinery}, + address = {New York, NY, USA}, + url = {https://doi.org/10.1145/1734663.1734671}, + doi = {10.1145/1734663.1734671}, + abstract = {Organization and maintenance of an index for a dynamic random access file is considered. It is assumed that the index must be kept on some pseudo random access backup store like a disc or a drum. The index organization described allows retrieval, insertion, and deletion of keys in time proportional to logk I where I is the size of the index and k is a device dependent natural number such that the performance of the scheme becomes near optimal. Storage utilization is at least 50\% but generally much higher. The pages of the index are organized in a special data-structure, so-called B-trees. The scheme is analyzed, performance bounds are obtained, and a near optimal k is computed. Experiments have been performed with indices up to 100,000 keys. An index of size 15,000 (100,000) can be maintained with an average of 9 (at least 4) transactions per second on an IBM 360/44 with a 2311 disc.}, + booktitle = {Proceedings of the 1970 ACM SIGFIDET (Now SIGMOD) Workshop on Data Description, Access and Control}, + pages = {107–141}, + numpages = {35}, + keywords = {key deletion, paging, information retrieval, data structures, key insertion, random access files, dynamic index maintenance, key retrieval}, + location = {Houston, Texas}, + series = {SIGFIDET '70} +} + +@book{knuth1998art, + title={The Art of Computer Programming: Volume 3: Sorting and Searching}, + author={Knuth, D.E.}, + isbn={9780321635785}, + url={https://books.google.cz/books?id=cYULBAAAQBAJ}, + year={1998}, + publisher={Pearson Education} +} + +@Book{cormen2009introduction, + author = {Cormen, Thomas}, + title = {Introduction to algorithms}, + publisher = {MIT Press}, + year = {2009}, + address = {Cambridge, Mass}, + isbn = {9780262033848} + } + +@Book{labyrint, + author = {Mareš, Martin and Valla, Tomáš}, + title = {Průvodce labyrintem algoritmů}, + publisher = {CZ.NIC, z.s.p.o.}, + year = {2017}, + isbn = {9788088168225}, + url = {http://pruvodce.ucw.cz} +} + +@article{hypothesis, + author = {MacIver, David R. and Hatfield-Dodds, Zac and {many other contributors}}, + doi = {10.21105/joss.01891}, + month = {11}, + title = {{Hypothesis: A new approach to property-based testing}}, + year = {2019} +} + +@ONLINE{ib002, + title = {Algoritmy a datové struktury I}, + url = {https://is.muni.cz/predmet/fi/jaro2022/IB002}, + urldate = {2022-05-01}, + location = {Brno}, + langid = {czech} +} + +@ONLINE{ib111, + title = {Základy programování}, + url = {https://is.muni.cz/predmet/fi/podzim2021/IB111}, + urldate = {2022-05-01}, + location = {Brno}, + langid = {czech} +} + +%% EXAMPLES FOLLOW %% + +% 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/example.bib b/example.bib deleted file mode 100644 index 60b8b9e..0000000 --- a/example.bib +++ /dev/null @@ -1,123 +0,0 @@ -% 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 index 8819b27..4449881 100644 --- a/fi-pdflatex.tex +++ b/fi-pdflatex.tex @@ -36,7 +36,7 @@ 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 + english, czech, slovak %% The additional keys allow ]{babel} %% foreign texts to be typeset as follows: %% %% \begin{otherlanguage}{german} ... \end{otherlanguage} @@ -63,18 +63,18 @@ 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 + In the thesis we demonstrate usage of a 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 + of the thesis consists of description of the rank-balanced tree followed by a 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. + to the weak AVL tree. We also present an implementation of the weak AVL tree in Python, tested with a + property-based testing. The final part of the thesis is a web-page that allows performing operations + on the weak AVL tree with animations and step-by-step walk-through of a pseudo-code. }, thanks = {% \textit{TBD} }, - bib = example.bib, + bib = bibliography.bib, %% Uncomment the following line (by removing the %% at the %% beginning) and replace `assignment.pdf` with the filename %% of your scanned thesis assignment. @@ -88,7 +88,6 @@ \usepackage{amsthm} \usepackage{amsfonts} \usepackage{url} %% Hyperlinks -\usepackage{markdown} %% Lightweight markup \usepackage{tabularx} %% Tables \usepackage{tabu} \usepackage{booktabs} @@ -106,57 +105,395 @@ } \usepackage{floatrow} %% Putting captions above tables \floatsetup[table]{capposition=top} +\usepackage{hyperref} + +\usepackage[x11names, svgnames, rgb]{xcolor} +\usepackage{tikz} +\usetikzlibrary{decorations,arrows,shapes} \SetKwProg{Fn}{function}{ is}{end} \SetKwProg{Proc}{procedure}{ is}{end} \begin{document} + \chapter*{Introduction} \addcontentsline{toc}{chapter}{Introduction} -\textit{TBD} +Data structures have become a regular part of the essential toolbox for problem-solving. In many cases, they also help to improve the existing algorithm's performance, e.g. using a priority queue in Dijkstra's algorithm for the shortest path. This thesis will mainly discuss the implementation of a set (which can also be adjusted to represent a dictionary or map, if you wish). + +Currently, the most commonly used implementations of sets use hash tables, but we will talk about another common alternative, implementation via self-balancing search trees. Compared to a hash table, they provide us with \textbf{consistent} time complexity, but at the cost of a requirement for ordering on the elements. The most implemented self-balancing binary tree is a \textit{red-black tree}, as described by Guibas and Sedgewick~\cite{rbtree}. Among other alternatives, we can find (non-binary) \textit{B-tree}~\cite{btree} and \textit{AVL tree}~\cite{knuth1998art}. + +This thesis analyses and visualizes the \textit{Weak AVL (WAVL)}\cite{wavl} tree that has more relaxed conditions than the AVL tree but still provides better balancing than a red-black tree. + +We start by reiterating through commonly used search trees, explaining basic ideas behind their self-balancing and bounding the height in the worst-case scenario. Then we state used terminology and explain the rank-balanced tree. Given a rank-balanced tree, we can delve into the details behind the representation of previously shown self-balancing binary search trees using rank and the WAVL rule gives us a new self-balancing binary search tree. For the WAVL, we provide pseudocode and explain operations used for rebalancing, including diagrams. Later on, we will discuss different heuristics that can be used for rebalancing and implementing the visualization of the operations on the WAVL tree. + +\chapter{Self-balancing search trees}\label{chap:sb-bst} + +This chapter will briefly discuss the properties and fundamental ideas behind the most used self-balancing search trees in standard libraries to give an idea about current options and how WAVL fits among them. + +\section{Red-black trees} + +As mentioned previously, red-black trees are among the most popular implementations in standard libraries. As always, we have a binary search tree, and then each node is given \textit{red} or \textit{black} colour. A red-black tree is kept balanced by enforcing the following set of rules: + +\begin{enumerate} + \item External nodes are black; internal nodes may be red or black + \item For each internal node, all paths from it to external nodes contain the same number of black nodes + \item No path from an internal node to an external node contains two red nodes in a row +\end{enumerate}~\cite{rbtree} + +Given this knowledge, we can safely deduce the following relation between the height of the red-black tree and nodes stored in it: + +\[ +\log_2{(n + 1)} \leq h \leq 2 \cdot \log_2{(n + 2)} - 2 +\]\label{rb-height}~\cite{cormen2009introduction} + +where the lower bound is given by a perfect binary tree and upper bound by the minimal red-black tree. + +There are also other variants of the red-black tree that are considered to be simpler for implementation, e.g. left-leaning red-black tree, as described by Sedgewick. + +Red-black trees are used to implement sets in C++, Java and C\#. + +\section{AVL tree} + +AVL tree is considered to be the eldest self-balancing binary search tree. For clarity, we define the following function: + +\[ +BalanceFactor(n) := height(right(n)) - height(left(n)) +\] + +Then we have an AVL tree, if for every node $n$ in the tree the following holds: + +\[ +BalanceFactor(n) \in \{ -1, 0, 1 \} +\] + +In other words, the heights of left and right subtrees of each node differ at most in 1. + +Similarly, we will deduce the height of the AVL tree from original paper, by Adelson-Velsky and Landis, we get: + +\[ +\left( \log_2{(n + 1)} \leq \right) h < \log_{\varphi}{(n + 1)} < \frac{3}{2} \cdot \log_2{(n + 1)} +\]\label{avl-height} + +If we compare the upper bounds for the height of the red-black trees and AVL trees, we can see that AVL rules are more strict than red-black rules, but at the cost of rebalancing. However, in both cases, the rebalancing still takes $\log_2{n}$. + +Regarding the implementation of AVL trees, we can see them implemented in the standard library of Agda or Coq. + +\section {B-tree} + +\textit{To keep or not to keep…} + +Used in Rust. \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. +In comparison to nodes in binary search trees, nodes in rank-balanced trees contain one more piece of 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 a 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: +In the text and pseudocode we 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 function $r(x)$ or property $x.rank$ that returns rank of a node; in case of $r(x)$ there is a special case: $r(nil) = -1$ + \item function $parent(x)$ or property $x.parent$ returns parent of a node; analogically for the left and right children of a node + \item \textit{rank-difference} of \textit{x} is defined as $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 + \item $x$ is an $(i, j)$ node if its left and right children have $i$ and $j$ rank-differences respectively; + ordering of the children does not matter +\end{itemize}~\cite{wavl} + +\section{Rules for the other trees} + +As we have mentioned above, it is possible to implement different kinds of self-balancing binary search trees via different rules for ranks. + +\subsection{AVL tree}\label{chap:avl-rule} + +\textbf{AVL Rule}: Every node is (1, 1) or (1, 2). + +In case of the AVL trees rank represents height. Here we can notice a very smart way of using the \textit{(i, j) node} definition. If we go back to the definition and want to be explicit about the nodes that are allowed with the \textit{AVL Rule}, then we get (1, 1), (1, 2) \textbf{or} (2, 1) nodes. However it is possible to find implementations of the AVL tree that allow leaning \textbf{to only one side} as opposed to the original requirements given by Adelson-Velsky and Landis. Forbidding interchangeability of (i, j) with (j, i) nodes would still yield AVL trees that lean to one side. + +Meaning of the \textit{AVL Rule} is quite simple, since rank represents height in that case. We can draw analogies using the notation used for the AVL trees, where we mark nodes with a trit (or a sign) or use a balance-factor. We have two cases to discuss: + +\begin{itemize} + \item \textbf{(1, 1) node} represents a tree where both of its subtrees have the same height. In this case we are talking about the nodes with balance-factor $0$ (respectively being signed with a $0$). + \item \textbf{(1, 2) node} represents a tree where one of its subtrees has a bigger height. In this case we are talking about the nodes with balance-factor $-1$ or $1$ (respectively being signed with a $-$ or a $+$). \end{itemize} -\section{Weak AVL trees} +Example of the AVL tree that uses ranks instead of signs or balance-factors can be seen in \autoref{fig:ranked:avl}. -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. +\begin{figure} + \centering +\begin{tikzpicture}[>=latex',line join=bevel,scale=0.75,] +%% +\node (Node{value=3+ rank=3}) at (140.6bp,279.0bp) [draw,ellipse] {3, 3}; + \node (Node{value=1+ rank=1}) at (103.6bp,192.0bp) [draw,ellipse] {1, 1}; + \node (Node{value=7+ rank=2}) at (178.6bp,192.0bp) [draw,ellipse] {7, 2}; + \node (Node{value=0+ rank=0}) at (28.597bp,105.0bp) [draw,ellipse] {0, 0}; + \node (Node{value=2+ rank=0}) at (103.6bp,105.0bp) [draw,ellipse] {2, 0}; + \node (Node{value=5+ rank=1}) at (178.6bp,105.0bp) [draw,ellipse] {5, 1}; + \node (Node{value=8+ rank=1}) at (253.6bp,105.0bp) [draw,ellipse] {8, 1}; + \node (Node{value=4+ rank=0}) at (103.6bp,18.0bp) [draw,ellipse] {4, 0}; + \node (Node{value=6+ rank=0}) at (178.6bp,18.0bp) [draw,ellipse] {6, 0}; + \node (Node{value=9+ rank=0}) at (253.6bp,18.0bp) [draw,ellipse] {9, 0}; + \draw [->] (Node{value=3+ rank=3}) ..controls (128.03bp,249.14bp) and (120.85bp,232.64bp) .. (Node{value=1+ rank=1}); + \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; + \pgfsetstrokecolor{strokecol} + \draw (128.6bp,235.5bp) node {2}; + \draw [->] (Node{value=3+ rank=3}) ..controls (153.5bp,249.14bp) and (160.88bp,232.64bp) .. (Node{value=7+ rank=2}); + \draw (166.6bp,235.5bp) node {1}; + \draw [->] (Node{value=1+ rank=1}) ..controls (78.671bp,162.75bp) and (61.893bp,143.74bp) .. (Node{value=0+ rank=0}); + \draw (75.597bp,148.5bp) node {1}; + \draw [->] (Node{value=1+ rank=1}) ..controls (103.6bp,162.16bp) and (103.6bp,146.55bp) .. (Node{value=2+ rank=0}); + \draw (108.6bp,148.5bp) node {1}; + \draw [->] (Node{value=7+ rank=2}) ..controls (178.6bp,162.16bp) and (178.6bp,146.55bp) .. (Node{value=5+ rank=1}); + \draw (183.6bp,148.5bp) node {1}; + \draw [->] (Node{value=7+ rank=2}) ..controls (203.52bp,162.75bp) and (220.3bp,143.74bp) .. (Node{value=8+ rank=1}); + \draw (224.6bp,148.5bp) node {1}; + \draw [->] (Node{value=5+ rank=1}) ..controls (153.67bp,75.75bp) and (136.89bp,56.735bp) .. (Node{value=4+ rank=0}); + \draw (149.6bp,61.5bp) node {1}; + \draw [->] (Node{value=5+ rank=1}) ..controls (178.6bp,75.163bp) and (178.6bp,59.548bp) .. (Node{value=6+ rank=0}); + \draw (183.6bp,61.5bp) node {1}; + \draw [->] (Node{value=8+ rank=1}) ..controls (253.6bp,75.163bp) and (253.6bp,59.548bp) .. (Node{value=9+ rank=0}); + \draw (258.6bp,61.5bp) node {1}; +% +\end{tikzpicture} + \caption{Example of the AVL tree using ranks} + \label{fig:ranked:avl} +\end{figure} -\chapter{Operations on weak AVL trees} +\subsection{Red-black tree}\label{chap:rb-rule} -\section{Using bottom-up rebalancing} +\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} inductively enforces monotonically increasing (at most by 1) count of black nodes from the leaves. \\ + In detail: + \begin{enumerate} + \item In case the \textbf{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. + \item In case the \textbf{current node is red}, the rank difference must be 0, since from the parent the count of black nodes on the path to leaves has not changed. + \item 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. + \end{enumerate} + \item \textit{No parent of a 0-child is a 0-child} ensures that there are no two consecutive red nodes, since 0-child node is equivalent to the red node. +\end{enumerate} -\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. +Example of the red-black tree that uses ranks instead of colors can be seen in \autoref{fig:ranked:rbt}, red nodes are also colored for convenience. -Rebalancing of the tree is equivalent to rebalancing of AVL tree and is executed in a following way: +Majority of the red-black tree implementations color nodes of the tree, following that notation and \textbf{precise} definition of the red-black tree it is quite common to ask the following questions: -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.) +\begin{enumerate} + \item \textit{Do we count the node itself if it is black?} \\ + If we do not count nodes themselves, we decrease the count of black nodes on every path to the external nodes by $1$. + \item \textit{Do we count the external nodes (leaves that do not hold any value)?} \\ + If we do not count external nodes themselves, we decrease the count of black nodes on every path to the external nodes by $1$. +\end{enumerate} -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. +Overall they do not really matter as long as they are used consistently, since they affect the counts globally. + +However it is also possible to color edges instead of the nodes as is presented in \textit{Průvodce labyrintem algoritmů} by \textit{Mareš and Valla}.~\cite{labyrint} In this representation color of the edge represents color of the child node. This representation is much more „natural“ for the representation using rank as it can be seen in \autoref{fig:ranked:rbt}, where edges connecting nodes with rank-difference $1$ represent \textit{black edges} and edges connecting nodes with rank-difference $0$ represent \textit{red edges}. It is also apparent that using this representation root of the tree does not hold any color anymore. + +\begin{figure} + \centering +\begin{tikzpicture}[>=latex',line join=bevel,scale=0.75,] +%% +\node (Node{value=3+ rank=2}) at (140.6bp,366.0bp) [draw,ellipse] {3, 2}; +%% +\node (Node{value=3+ rank=2}) at (140.6bp,366.0bp) [draw,ellipse] {3, 2}; + \node (Node{value=1+ rank=1}) at (103.6bp,279.0bp) [draw,ellipse] {1, 1}; + \node (Node{value=5+ rank=1}) at (178.6bp,279.0bp) [draw,ellipse] {5, 1}; + \node (Node{value=0+ rank=0}) at (28.597bp,192.0bp) [draw,ellipse] {0, 0}; + \node (Node{value=2+ rank=0}) at (103.6bp,192.0bp) [draw,ellipse] {2, 0}; + \node (Node{value=4+ rank=0}) at (178.6bp,192.0bp) [draw,ellipse] {4, 0}; + \node (Node{value=7+ rank=1}) at (253.6bp,192.0bp) [draw=red,ellipse] {7, 1}; + \node (Node{value=6+ rank=0}) at (226.6bp,105.0bp) [draw,ellipse] {6, 0}; + \node (Node{value=8+ rank=0}) at (301.6bp,105.0bp) [draw,ellipse] {8, 0}; + \node (Node{value=9+ rank=0}) at (301.6bp,18.0bp) [draw=red,ellipse] {9, 0}; + \draw [->] (Node{value=3+ rank=2}) ..controls (128.03bp,336.14bp) and (120.85bp,319.64bp) .. (Node{value=1+ rank=1}); + \definecolor{strokecol}{rgb}{0.0,0.0,0.0}; + \pgfsetstrokecolor{strokecol} + \draw (129.6bp,322.5bp) node {1}; + \draw [->] (Node{value=3+ rank=2}) ..controls (153.5bp,336.14bp) and (160.88bp,319.64bp) .. (Node{value=5+ rank=1}); + \draw (167.6bp,322.5bp) node {1}; + \draw [->] (Node{value=1+ rank=1}) ..controls (78.671bp,249.75bp) and (61.893bp,230.74bp) .. (Node{value=0+ rank=0}); + \draw (75.597bp,235.5bp) node {1}; + \draw [->] (Node{value=1+ rank=1}) ..controls (103.6bp,249.16bp) and (103.6bp,233.55bp) .. (Node{value=2+ rank=0}); + \draw (108.6bp,235.5bp) node {1}; + \draw [->] (Node{value=7+ rank=1}) ..controls (244.49bp,162.33bp) and (239.36bp,146.17bp) .. (Node{value=6+ rank=0}); + \draw (246.6bp,148.5bp) node {1}; + \draw [->] (Node{value=7+ rank=1}) ..controls (269.82bp,162.26bp) and (279.51bp,145.12bp) .. (Node{value=8+ rank=0}); + \draw (284.6bp,148.5bp) node {1}; + \draw [->] (Node{value=5+ rank=1}) ..controls (178.6bp,249.16bp) and (178.6bp,233.55bp) .. (Node{value=4+ rank=0}); + \draw (183.6bp,235.5bp) node {1}; + \draw [red,->] (Node{value=5+ rank=1}) ..controls (203.52bp,249.75bp) and (220.3bp,230.74bp) .. (Node{value=7+ rank=1}); + \draw (225.6bp,235.5bp) node {0}; + \draw [red,->] (Node{value=8+ rank=0}) ..controls (301.6bp,75.163bp) and (301.6bp,59.548bp) .. (Node{value=9+ rank=0}); + \draw (306.6bp,61.5bp) node {0}; +% +\end{tikzpicture} + \caption{Example of the red-black tree using ranks} + \label{fig:ranked:rbt} +\end{figure} + +\section{Implementation of other balanced trees using rank} + +To show that using rank is mostly an implementation detail, we will describe an implementation of the AVL tree using rank. + +Implementation of the insertion is trivial, since it is described by \textit{Haeupler et al.} and is used in the WAVL tree. All we need to implement is the deletion from the AVL tree. We will start by short description of the deletion rebalance as given by \textit{Mareš and Valla} in \textit{Průvodce labyrintem algoritmů}. + +When propagating the error, we can encounter 3 cases (we explain them with respect to propagating deletion from the left subtree, propagation from right is mirrored and role of trits $+$ and $-$ swaps): + +\begin{enumerate} + \item \textit{Node was marked with $-$.} In this case, heights of left and right subtrees are equal now and node is marked with $0$, but propagation must be continued, since the height of the whole subtree has changed. + \item \textit{Node was marked with $0$.} In this case, node is marked with $+$ and the height of the subrtree has not changed, therefore we can stop the propagation. + \item \textit{Node was marked with $+$.} In this case, node would acquire balance-factor of $+2$, which is not allowed. In this situation we decide based on the mark of the node from which we are propagating the insertion in the following way (let $x$ the current node marked with $+$ and $y$ be the right child of $x$): + \begin{enumerate} + \item $y$ is marked with $+$, then we rotate by $x$ to the left. After that both $x$ and $y$ can be marked with $0$. Height from the point of the parent has changed, so we continue the propagation. + \item $y$ is marked with $0$, then we rotate by $x$ to the left. After the rotation, $x$ can be marked with $+$ and $y$ with $-$. Height of the subtree has not changed, so propagation can be stopped. + \item $y$ is marked with $-$. Let $z$ be the left son of $y$. We double rotate: first by $z$ to the right and then by $x$ to the left. After the double-rotation $x$ can be marked by either $0$ or $-$, $y$ by $0$ or $+$ and $z$ gets $0$. Height of the subtree has changed, therefore we must propagate further. + \end{enumerate} +\end{enumerate}\label{avl:rules:delete}~\cite{labyrint} + +We have implemented the deletion rebalance by implementing following functions: + +\begin{enumerate} + \item \texttt{deleteRebalance} that handles updating the current node and its parent and iteratively calls subroutine handling previously described \textit{one step of a rebalancing} + \item \texttt{deleteFixNode} that handles one adjustment of rebalancing as described above + \item \texttt{deleteRotate} that handles rotation and updating of ranks, if necessary +\end{enumerate} \begin{algorithm} -\Proc{$\texttt{insert}(tree, key)$}{ +\Proc{$\texttt{deleteRebalance}(T, y, parent)$}{ + \If{$y = nil \land parent = nil$}{ + \Return; + } + \BlankLine + \If{$y = nil$}{ + $(y, parent) \gets (parent, parent.parent)$\; + } + \BlankLine + \While{$y \neq nil \land \texttt{deleteFixNode}(T, y, parent)$}{ + $y \gets parent$\; + \eIf{$parent \neq nil$}{ + $parent \gets parent.parent$\; + }{ + $parent \gets nil$\; + } + } +} +\caption{\texttt{deleteRebalance} algorithm for the AVL tree}\label{algorithm:avl:deleteRebalance} +\end{algorithm} + +\texttt{deleteRebalance}, as can be seen in \autoref{algorithm:avl:deleteRebalance}, is quite straightforward. At the beginning we early return in case there is nothing to be rebalanced, which happens when deleting the last node from the tree. Then we handle case when we are given only parent by correctly setting $y$ and $parent$. Following up on that, as long as we have a node to be checked, we call \autoref{algorithm:avl:deleteFixNode} to fix balancing of the current node. Algorithm for fixing node returns $true$ or $false$ depending on the need to propagate the height change further, which is utilized in the condition of the \texttt{while} loop. + +\begin{algorithm} +\Proc{$\texttt{deleteFixNode}(T, x, parent)$}{ + \uIf(\tcp*[h]{Handles rule 1}){balance-factor of $x$ is $0$}{ + update rank of $x$\; + \Return{$true$}\; + } + \ElseIf(\tcp*[h]{Handles rule 2}){balance-factor of $x$ is $-1$ or $1$}{ + \Return{$false$}\; + } + \BlankLine + $(l, r) \gets (x.left, x.right)$\; + $(rotateL, rotateR) \gets (\texttt{rotateLeft}, \texttt{rotateRight})$\; + \BlankLine + \tcp{Handles rule 3} + \eIf{balance-factor of $x$ is $2$}{ + \Return{$\texttt{deleteRotate}(T, x, r, 1, rotateL, rotateR)$}\; + }{ + \Return{$\texttt{deleteRotate}(T, x, l, -1, rotateR, rotateL)$}\; + } +} +\caption{\texttt{deleteFixNode} algorithm for the AVL tree}\label{algorithm:avl:deleteFixNode} +\end{algorithm} + +\texttt{deleteFixNode} implements the algorithm as described in \hyperref[avl:rules:delete]{the list} with all possible cases above. We start by checking the balance-factor of the given node, in case there is no need to rotate, the rank gets updated if necessary and then we return the information whether there is a need to propagate further or not. In case the node has acquired balance-factor of $2$ we call \autoref{algorithm:avl:deleteRotate} to fix the balancing locally. + +There are two operations that are not described using helper functions and they are done in a following way: + +\begin{itemize} + \item Balance-factor of a node $x$ is calculated as \[ rank(x.right) - rank(x.left) \] + \item Updating rank of a node $x$ is done by setting node's rank to \[ 1 + \max \{ rank(x.left), rank(x.right) \} \] +\end{itemize} + +\begin{algorithm} +\Proc{$\texttt{deleteRotate}(T, x, y, leaning, rotateL, rotateR)$}{ + $factor \gets $ balance-factor of $y$\; + \BlankLine + \uIf(\tcp*[h]{Handles rule 3ab}){$factor = 0 \lor factor = leaning$}{ + $rotateL(T, x)$\; + } + \Else(\tcp*[h]{Handles rule 3c}){ + $rotateR(T, y)$\; + $rotateL(T, x)$\; + } + \BlankLine + update ranks of $x$, $y$ and new root of the subtree\; + \BlankLine + \Return{$factor \neq 0$}\; +} +\caption{\texttt{deleteRotate} algorithm for the AVL tree}\label{algorithm:avl:deleteRotate} +\end{algorithm} + +\newpage + +\texttt{deleteRotate} is handling only fixes where the rotations are required. Both \autoref{algorithm:avl:deleteFixNode} and \autoref{algorithm:avl:deleteRotate} include comments to highlight which rules are handled. This function is also done generically regardless of the subtree from which the height change is being propagated. This is done passing in functions used for rotations (since it is mirrored) and also by passing in the balance-factor required for just one rotation. + +In both \autoref{algorithm:avl:deleteFixNode} and \autoref{algorithm:avl:deleteRotate} there is a key difference compared to the AVL tree implementations without ranks. Comparing the \hyperref[avl:rules:delete]{rules for deletion} with algorithms for rank-balanced implementation, it is apparent that during propagation of height change, the balance-factors of immediate nodes are already adjusted, since the information comes from either of its subtrees and it is calculated using ranks of its children that are already adjusted. This fact needs to be reflected in the implementation accordingly, since it shifts the meaning of rules as they are described above and written for the implementations that store the trit in the nodes directly, which is updated manually during rebalancing. + +\chapter{Weak AVL trees} + +\section{Rank rule} + +Based on the rank rules for implementing red-black tree (as described in \ref{chap:rb-rule}) and AVL tree (as described in \ref{chap:avl-rule}), \textit{Haeupler et al.} present a new rank rule: + +\textbf{Weak AVL Rule}: All rank differences are 1 or 2, and every leaf has rank 0.~\cite{wavl} + +Comparing the \textit{Weak AVL Rule} to the \textit{AVL Rule}, we can come to these conclusions: + +\begin{itemize} + \item \textit{Every leaf has rank 0} holds with the AVL Rule, since every node is (1, 1) or (1, 2) and rank of a node represents height of its tree. Rank of \textit{nil} is defined as $-1$ and height of tree rooted at leaf is $0$, therefore leaves are (1, 1)-nodes + \item \textit{All rank differences are 1 or 2} does not hold in one specific case, and that is (2, 2)-node, which is allowed in the WAVL tree, but not in the AVL tree. This difference will be explained more thoroughly later on. +\end{itemize} + +\section{Height boundaries} + +We have described in \autoref{chap:sb-bst} other common self-balanced binary search trees to be able to draw analogies and explain differences between them. Given the boundaries of height for red-black and AVL tree, we can safely assume that the AVL is more strict with regards to the self-balancing than the red-black tree. Let us show how does WAVL fit among them. \textit{Haeupler et al.} present following bounds: + +\[ h \leq k \leq 2h \text{ and } k \leq 2 \log_2{n} \]~\cite{wavl} + +In those equations we can see $h$ and $n$ in the same context as we used it to lay boundaries for the AVL and red-black trees, but we can also see new variable $k$, which represents the rank of the tree. + +One of the core differences between AVL and WAVL lies in the rebalancing after deletion. Insertion into the WAVL tree is realized in the same way as it would in the AVL tree and the benefit of (2, 2)-node is used during deletion rebalancing. + +From the previous 2 statements we can come to 2 conclusions and those are: + +\begin{itemize} + \item If we commit only insertions to the WAVL tree, it will always yield a valid AVL tree. In that case it means that the height boundaries are same as of the AVL tree (described in \autoref{avl-height}). + \item If we commit deletions too, we can assume the worst-case scenario where \[ h < 2 \log_2{n} \] which also holds for the red-black trees. +\end{itemize} + +From the two conclusions we can safely deduce that the WAVL tree is in the worst-case scenario as efficient as the red-black tree and in the best-case scenario as efficient as the AVL tree. + +\newpage + +\section{Operations on weak AVL trees} + +\subsection{\texttt{insert}} +Inserting values into WAVL tree is equivalent to inserting values into regular binary-search tree followed up by rebalancing that ensures rank rules hold. This part can be clearly seen in \autoref{algorithm:wavl:insert}. We can also see there two early returns, one of them happens during insertion into the empty tree and other during insertion of duplicate key, which we do not allow. + +\begin{algorithm} +\Proc{$\texttt{insert}(T, key)$}{ $insertedNode \gets Node(key)$\; - \If{$tree.root = nil$}{ - $tree.root \gets insertedNode$\; + \If{$T.root = nil$}{ + $T.root \gets insertedNode$\; \Return\; } \BlankLine - $parent \gets \texttt{findParentNode}(key, tree.root)$\; + $parent \gets \texttt{findParentNode}(key, T.root)$\; + \If{$parent = nil$}{ + \Return\; + } + $insertedNode.parent \gets parent$\; \BlankLine \eIf{$key < parent.key$}{ @@ -165,115 +502,253 @@ Once the node does not have a parent (is root node) or is not (0, 1) or (1, 0) n $parent.right \gets insertedNode$\; } \BlankLine - $\texttt{bottomUpInsertRebalance}(tree, insertedNode)$\; + $\texttt{bottomUpInsertRebalance}(T, insertedNode)$\; } -\caption{Insert operation on binary search tree} +\caption{Insert operation on binary search tree}\label{algorithm:wavl:insert} \end{algorithm} +In the \autoref{algorithm:wavl:insert} we have also utilized a helper function that is used to find parent of the newly inserted node and also prevents insertion of duplicate keys within the tree. Pseudocode of that function can be seen in \autoref{algorithm:findParentNode}. + \begin{algorithm} \Fn{$\texttt{findParentNode}(key, node)$}{ $childNode \gets node$\; \BlankLine \While{$childNode \neq nil$}{ $node \gets childNode$\; - \eIf{$key < node.key$}{ + \uIf{$key < node.key$}{ $childNode \gets node.left$\; - }{ + } + \ElseIf{$node.key < key$}{ $childNode \gets node.right$\; } + \Else{ + \Return{nil}\; + } } \BlankLine \Return{node}\; } -\caption{Helper function that returns parent for newly inserted node} +\caption{Helper function that returns parent for newly inserted node}\label{algorithm:findParentNode} \end{algorithm} +Rebalancing after insertion in the WAVL tree is equivalent to rebalancing after insertion in the AVL tree. We will start with a short description of the rebalancing within AVL to lay a foundation for analogies and differences compared to the implementation using ranks. + +When propagating the error, we can encounter 3 cases (we explain them with respect to propagating insertion from the left subtree, propagation from right is mirrored and role of trits $+$ and $-$ swaps): + +\begin{enumerate} + \item \textit{Node was marked with $+$.} In this case, heights of left and right subtrees are equal now and node is marked with $0$ and propagation can be stopped. + \item \textit{Node was marked with $0$.} In this case, node is marked with $-$, but the height of the tree rooted at the node has changes, which means that we need to propagate the changes further. + \item \textit{Node was marked with $-$.} In this case, node would acquire balance-factor of $-2$, which is not allowed. In this situation we decide based on the mark of the node from which we are propagating the insertion in the following way (let $y$ be the node from which the information is being propagated and $x$ the current node marked with $-$): + \begin{enumerate} + \item $y$ is marked with $-$, then we rotate by $x$ to the right. After that both $x$ and $y$ can be marked with $0$. Height from the point of the parent has not changed, so we can stop the propagation. + \item $y$ is marked with $+$, then we double rotate: first by $y$ to the left and then by $x$ to the right. Here we need to recalculate the balance-factors for $x$ and $y$, where $x$ gets $-$ or $0$ and $y$ gets $0$ or $+$. Node that was a right child to the $y$ before the double-rotation is now marked with $0$ and propagation can be stopped. + \item $y$ is marked with $0$. This case is trivial, since it cannot happen, because we never propagate the height change from a node that acquired sign $0$. + \end{enumerate} +\end{enumerate}~\cite{labyrint} + +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. + Bottom-up rebalancing after the insertion into WAVL tree is identical to AVL tree insertion: \begin{algorithm} -\Proc{$\texttt{bottomUpInsertRebalance}(tree, node)$}{ +\Proc{$\texttt{bottomUpInsertRebalance}(T, 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} + \lIf{$node.parent = nil \lor node\, is\, not\, \text{0-child}$}{\Return} \BlankLine \eIf{$node = node.parent.left$}{ - $newRoot \gets \texttt{fix0Child}(node, node.right, \texttt{rotateLeft}, \texttt{rotateRight})$\; + $\texttt{fix0Child}(T, node, node.right, \texttt{rotateLeft}, \texttt{rotateRight})$\; }{ - $newRoot \gets \texttt{fix0Child}(node, node.left, \texttt{rotateRight}, \texttt{rotateLeft})$\; + $\texttt{fix0Child}(T, node, node.left, \texttt{rotateRight}, \texttt{rotateLeft})$\; } \BlankLine - \lIf{$rotatingAroundRoot$}{$tree.root \gets newRoot$} } -\caption{Algorithm containing bottom-up rebalancing after insertion} +\caption{Algorithm containing bottom-up rebalancing after insertion}\label{algorithm:wavl:bottomUpInsertRebalance} \end{algorithm} \begin{algorithm} -\Proc{$\texttt{fix0Child}(x, y, rotateToLeft, rotateToRight)$}{ +\Proc{$\texttt{fix0Child}(T, 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)$\; + $newRoot \gets rotateToRight(T, z)$\; \BlankLine $\texttt{demote}(z)$\; } \ElseIf{$y\, is\, \text{1-child}$}{ - $rotateToLeft(x)$\; - $newRoot \gets rotateToRight(z)$\; + $rotateToLeft(T, x)$\; + $rotateToRight(T, z)$\; \BlankLine $\texttt{promote}(y)$\; $\texttt{demote}(x)$\; $\texttt{demote}(z)$\; } - \BlankLine - \Return{$newRoot$}\; } -\caption{Generic algorithm for fixing 0-child after insertion} +\caption{Generic algorithm for fixing 0-child after insertion}\label{algorithm:wavl:fix0Child} \end{algorithm} +\section{\texttt{delete}} -\subsection{\texttt{delete}} +\begin{algorithm} +\Proc{$\texttt{bottomUpDeleteRebalance}(T, y, parent)$}{ + \uIf{$y \text{ is (2, 2)}$}{ + $\texttt{demote}(y)$\; + $parent \gets y.parent$\; + } + \ElseIf{$parent \text{ is (2, 2)}$}{ + $\texttt{demote}(parent)$\; + $parent \gets parent.parent$\; + } + \BlankLine + \If{$parent = nil$}{ + \Return\; + } + + $z \gets \text{3-child of } parent$\; + \If{$z \neq nil$}{ + $\texttt{bottomUpDelete}(T, z, parent)$\; + } +} +\caption{Initial phase of algorithm for the rebalance after deletion from the WAVL tree}\label{algorithm:wavl:bottomUpDeleteRebalance} +\end{algorithm} -\section{Using top-down rebalancing} -\subsection{\texttt{insert}} -\subsection{\texttt{delete}} +\begin{algorithm} +\Proc{$\texttt{bottomUpDelete}(T, x, parent)$}{ + \If{$x \text{ is not 3-child} \lor parent = nil$}{ + \Return\; + } + \BlankLine + $y \gets nil$\; + \eIf{$parent.left = x$}{ + $y \gets parent.right$\; + }{ + $y \gets parent.left$\; + } + \BlankLine + \While{$parent \neq nil \land x \text{ is 3-child} \land (y \text{ is 2-child or (2, 2)})$}{ + \If{$y \text{ is not 2-child}$}{ + $\texttt{demote}(y)$\; + } + $\texttt{demote}(parent)$\; + \BlankLine + $x \gets parent$\; + $parent \gets x.parent$\; + \If{$parent = nil$}{ + \Return; + } + \BlankLine + \eIf{$parent.left = x$}{ + $y \gets parent.right$\; + }{ + $y \gets parent.left$\; + } + } + \BlankLine + \If{$parent \text{ is not (1, 3)}$}{ + \Return\; + } + $p \gets parent$\; + \eIf{$parent.left = x$}{ + $\texttt{fixDelete}(T, x, p.right, p, false, \texttt{rotateLeft}, \texttt{rotateRight})$\; + }{ + $\texttt{fixDelete}(T, x, p.left, p, true, \texttt{rotateRight}, \texttt{rotateLeft})$\; + } +} +\caption{Propagation of the broken rank rule after deletion from the WAVL tree}\label{algorithm:wavl:bottomUpDelete} +\end{algorithm} -\section{Using rebalancing with promotion} -\subsection{\texttt{insert}} -\subsection{\texttt{delete}} +\begin{algorithm} +\Proc{$\texttt{fixDelete}(T, x, y, z, reversed, rotateLeft, rotateRight)$}{ + $v \gets y.left$\; + $w \gets y.right$\; + \If{$reversed$}{ + $(v, w) \gets (w, v)$\; + } + \BlankLine + \uIf{$w \text{ is 1-child} \land y.parent \neq nil$}{ + $rotateLeft(T, y.parent)$\; + \BlankLine + $\texttt{promote}(y)$\; + $\texttt{demote}(z)$\; + \BlankLine + \If{$z$ is a leaf}{ + $\texttt{demote}(z)$\; + } + } + \ElseIf{$w \text{ is 2-child} \land v.parent \neq nil$}{ + $rotateRight(T, v.parent)$\; + $rotateLeft(T, v.parent)$\; + \BlankLine + $\texttt{promote}(v)$\; + $\texttt{promote}(v)$\; + $\texttt{demote}(y)$\; + $\texttt{demote}(z)$\; + $\texttt{demote}(z)$\; + } +} +\caption{Final phase of the deletion rebalance after deletion from the WAVL tree}\label{algorithm:wavl:fixDelete} +\end{algorithm} -\section{Implementation of other balanced trees using rank} +\chapter{Implementation} -To show that using rank is mostly an implementation detail, I will describe AVL and red-black tree implementation using rank. +For the implementation of rank-balanced trees we have used two programming languages: C\# and Python. C\# implementation has not been finished and therefore is not part of the submitted attachments. However it has given a valuable insight into the role of preconditions and invariants in algorithms while \texttt{null}-checking is enforced, since, for example, static type control cannot be aware of a node \textbf{not} being a \texttt{null} after checking specific set of conditions that forbid such scenario. -\subsection{AVL tree} +Python has been chosen as the \textit{go-to} language, since it is used for teaching foundations of programming~\cite{ib111} and also introductory course of algorithms and data structures~\cite{ib002} at our faculty. -\textbf{AVL Rule}: Every node is (1, 1) or (1, 2). \\ -In case of AVL trees rank represents height. +We have started by implementing a general idea of a rank-balanced tree. Rank-balanced tree is an abstract class that \textbf{does not} implement methods specific to different kinds of trees such as -\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) + \item \texttt{is\_correct\_node} is used to check whether node and its subtrees satisfy rank rules + \item \texttt{\_insert\_rebalance} rebalances the tree from the given node after insertion + \item \texttt{\_delete\_rebalance} rebalances the tree from the given nodes (deleted node and parent) after deletion \end{enumerate} +Apart from the abstract methods there is provided following interface that is either shared by the specific trees or used by them: + +\begin{enumerate} + \item \texttt{\_get\_unwrapped\_graph} that is used to generate DOT format of the tree for purpose of either debugging or sharing + \item \texttt{rank} returns rank of the root of the tree + \item \texttt{is\_correct} calls \texttt{is\_correct\_node} on the root of the tree + \item \texttt{search} is used to look up keys in the tree + \item \texttt{insert} implements generic insertion into the tree followed by a call to tree-specific rebalance function + \item \texttt{delete} is identical to \texttt{insert}, but for the deletion from the tree +\end{enumerate} + +Apart from that we have also implemented class for representation of nodes that provides quite rich interface that is utilized during rebalancing and also in generic methods on generic tree. + +\section{Testing and validation} + +From the beginning we have employed the techniques of property-based testing (done manually during C\# implementation and uses Hypothesis~\cite{hypothesis} for Python implementation). The elementary requirement for testing and validation of implemented algorithms was a \textbf{correct} \texttt{is\_correct\_node} method that validates properties of a specific rank-balanced tree and a good set of invariants. List of set invariants follows: + +\begin{enumerate} + \item for insertion we have set following invariants + \begin{itemize} + \item Rank rules have not been broken after the insertion. + \item Inserted value can be found in the tree after the insertion. + \item All previously inserted values can still be found in the tree. + \end{itemize} + \item for deletion we have set following invariants + \begin{itemize} + \item Rank rules have not been broken after the deletion. + \item Deleted node can no longer be found in the tree after the deletion. + \item All other values can still be found in the tree. + \end{itemize} +\end{enumerate} + +We also admit abuse of property-based testing to find a \textit{minimal} sequence of operations when WAVL tree relaxation manifests. For that purpose we have implemented a \textit{comparator} class that takes two different instances of rank-balanced trees and provides rudimentary \texttt{insert} and \texttt{delete} interface enriched with \texttt{are\_same} (evaluates isomorphism and ranks) and \texttt{are\_similar} (evaluates just isomorphism) methods. While trying to find minimal counter-example, we have also discovered a bug in rebalance after deletion of WAVL tree that caused enforcement of the AVL rank rules. + +\chapter{Visualization} + +\chapter*{Summary} +\addcontentsline{toc}{chapter}{Summary} + \appendix %% Start the appendices. \chapter{An appendix} Here you can insert the appendices of your thesis. diff --git a/fithesis/locale/fithesis-czech.def b/fithesis/locale/fithesis-czech.def deleted file mode 100644 index a3c08d5..0000000 --- a/fithesis/locale/fithesis-czech.def +++ /dev/null @@ -1,159 +0,0 @@ -%% -%% 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 deleted file mode 100644 index fd5e63d..0000000 --- a/fithesis/locale/fithesis-english.def +++ /dev/null @@ -1,133 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 18fc009..0000000 --- a/fithesis/locale/fithesis-slovak.def +++ /dev/null @@ -1,160 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 068b901..0000000 --- a/fithesis/locale/mu/fi/fithesis-czech.def +++ /dev/null @@ -1,77 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 8c94a29..0000000 --- a/fithesis/locale/mu/fi/fithesis-english.def +++ /dev/null @@ -1,73 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 7ce5cd2..0000000 --- a/fithesis/locale/mu/fi/fithesis-slovak.def +++ /dev/null @@ -1,78 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 1985cdc..0000000 --- a/fithesis/locale/mu/fithesis-czech.def +++ /dev/null @@ -1,83 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 22bc922..0000000 --- a/fithesis/locale/mu/fithesis-english.def +++ /dev/null @@ -1,87 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 9a2023f..0000000 --- a/fithesis/locale/mu/fithesis-slovak.def +++ /dev/null @@ -1,84 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 55219b58f630a09794faead56d8d50b831cc53a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15158 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 TE1*CQ9##%SDk@23Da8K^gM^0) diff --git a/fithesis/logo/mu/fithesis-base.pdf b/fithesis/logo/mu/fithesis-base.pdf deleted file mode 100644 index 7a4b8558ff13c12143b232879db92faf8fb8342c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15988 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 V_rDAZce*g(|;lcm_ diff --git a/fithesis/logo/mu/fithesis-fi-color.pdf b/fithesis/logo/mu/fithesis-fi-color.pdf deleted file mode 100644 index da97bdfe2a1e585c01efa5dc0b6bde244f7f442f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11804 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 diff --git a/fithesis/style/fithesis-base.sty b/fithesis/style/fithesis-base.sty deleted file mode 100644 index 0964860..0000000 --- a/fithesis/style/fithesis-base.sty +++ /dev/null @@ -1,59 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 1b60f2e..0000000 --- a/fithesis/style/mu/fithesis-10.clo +++ /dev/null @@ -1,281 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 8e9a7ba..0000000 --- a/fithesis/style/mu/fithesis-11.clo +++ /dev/null @@ -1,280 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 06c4530..0000000 --- a/fithesis/style/mu/fithesis-12.clo +++ /dev/null @@ -1,257 +0,0 @@ -%% -%% 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 deleted file mode 100644 index b2002e7..0000000 --- a/fithesis/style/mu/fithesis-base.sty +++ /dev/null @@ -1,624 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 3bfe687..0000000 --- a/fithesis/style/mu/fithesis-fi.sty +++ /dev/null @@ -1,131 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 7b75c0b..0000000 --- a/fithesis3.cls +++ /dev/null @@ -1,588 +0,0 @@ -%% -%% 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/markdown.lua b/markdown.lua deleted file mode 100644 index e6127c8..0000000 --- a/markdown.lua +++ /dev/null @@ -1,4063 +0,0 @@ --- --- 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 deleted file mode 100644 index 816c56a..0000000 --- a/markdown.sty +++ /dev/null @@ -1,829 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 61327f9..0000000 --- a/markdown.tex +++ /dev/null @@ -1,631 +0,0 @@ -%% -%% 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 deleted file mode 100644 index 92027c9..0000000 --- a/t-markdown.tex +++ /dev/null @@ -1,227 +0,0 @@ -%% -%% 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'.