From 20992442cc18fe823c25286b4db8aa078d3740f5 Mon Sep 17 00:00:00 2001 From: Reidar Johansen Date: Tue, 7 May 2024 14:48:12 +0200 Subject: [PATCH] Remove designdoc template --- .github/workflows/build-manual.yaml | 14 +- .prettierignore | 2 - alpine/Dockerfile | 5 - templates/designdoc-cover.png | Bin 23659 -> 0 bytes templates/designdoc-logo.png | Bin 6888 -> 0 bytes templates/designdoc-metadata.json | 38 - templates/designdoc.tex | 1313 --------------------------- test/Makefile | 70 +- test/designdoc-history.txt | 2 - test/designdoc-replace.json | 4 - test/designdoc.1.md | 383 -------- test/designdoc.2.md | 218 ----- test/designdoc.order | 5 - tools/convert.sh | 477 ---------- 14 files changed, 28 insertions(+), 2503 deletions(-) delete mode 100644 .prettierignore delete mode 100644 templates/designdoc-cover.png delete mode 100644 templates/designdoc-logo.png delete mode 100644 templates/designdoc-metadata.json delete mode 100644 templates/designdoc.tex delete mode 100644 test/designdoc-history.txt delete mode 100644 test/designdoc-replace.json delete mode 100644 test/designdoc.1.md delete mode 100644 test/designdoc.2.md delete mode 100644 test/designdoc.order delete mode 100644 tools/convert.sh diff --git a/.github/workflows/build-manual.yaml b/.github/workflows/build-manual.yaml index 9ae6fba6..cda62608 100644 --- a/.github/workflows/build-manual.yaml +++ b/.github/workflows/build-manual.yaml @@ -79,17 +79,9 @@ jobs: retention-days: 3 path: ${{ github.workspace }}/alpine/freeze/pandoc-3.1.13.project.freeze - #- name: Test extra image - # if: ${{ matrix.stack != 'static' }} - # run: make test-extra - - #- name: Publish test output - # uses: actions/upload-artifact@ef09cdac3e2d3e60d8ccadda691f4f1cec5035cb #v4.3.1 + 3 commits - # with: - # if-no-files-found: error - # name: tests - # retention-days: 3 - # path: ${{ github.workspace }}/alpine/freeze/pandoc-3.1.13.project.freeze + - name: Test extra image + if: ${{ matrix.stack != 'static' }} + run: make test-extra - name: Log into ghcr.io if: > diff --git a/.prettierignore b/.prettierignore deleted file mode 100644 index 33dab010..00000000 --- a/.prettierignore +++ /dev/null @@ -1,2 +0,0 @@ -designdoc.1.md -designdoc.2.md diff --git a/alpine/Dockerfile b/alpine/Dockerfile index d657dd43..5196fa80 100644 --- a/alpine/Dockerfile +++ b/alpine/Dockerfile @@ -192,17 +192,12 @@ RUN sed -e 's/ *#.*$//' -e '/^ *$/d' /root/extra_packages.txt | xargs tlmgr inst RUN python3 -m pip install --break-system-packages --no-cache-dir \ pandoc-latex-environment - #python-dotenv \ - #Office365-REST-Python-Client ARG TEMPLATES_DIR=/.pandoc/templates -ARG TOOLS_DIR=/.pandoc/tools RUN mkdir -p ${TEMPLATES_DIR} && \ ln -s /.pandoc /root/.pandoc COPY templates/ ${TEMPLATES_DIR}/ -COPY --chmod=555 tools/convert.sh ${TOOLS_DIR}/ - CMD [ "node" ] diff --git a/templates/designdoc-cover.png b/templates/designdoc-cover.png deleted file mode 100644 index 4d070ea4ccf026b6dae2162bae271aef576e5334..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23659 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 Q`%YnLsDPC#6yJsaAFw=f7ytkO diff --git a/templates/designdoc-metadata.json b/templates/designdoc-metadata.json deleted file mode 100644 index 3f1e1457..00000000 --- a/templates/designdoc-metadata.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "author": [], - "block-headings": true, - "colorlinks": true, - "date": "April 08, 2024", - "disable-header-and-footer": false, - "disclaimer": "This document contains business and trade secrets (essential information about Innofactor's business) and is therefore totally confidential. Confidentiality does not apply to pricing information", - "page-numbers": true, - "geometry": "a4paper,left=2.54cm,right=2.54cm,top=1.91cm,bottom=2.54cm", - "links-as-notes": true, - "listings-disable-line-numbers": false, - "listings-no-page-break": false, - "lof": false, - "logo": "/.pandoc/templates/designdoc-logo.png", - "lot": false, - "mainfont": "Carlito", - "pandoc-latex-environment": { - "warningblock": ["warning"], - "importantblock": ["important"], - "noteblock": ["note"], - "cautionblock": ["caution"], - "tipblock": ["tip"] - }, - "project": "", - "subtitle": "", - "table-use-row-colors": false, - "tables": true, - "tables-left-aligned": true, - "title": "", - "titlepage": true, - "titlepage-color": "FFFFFF", - "titlepage-text-color": "5F5F5F", - "titlepage-top-cover-image": "/.pandoc/templates/designdoc-cover.png", - "toc": true, - "toc-own-page": true, - "toc-title": "Table of Contents", - "version-history": [] -} diff --git a/templates/designdoc.tex b/templates/designdoc.tex deleted file mode 100644 index cf086b2c..00000000 --- a/templates/designdoc.tex +++ /dev/null @@ -1,1313 +0,0 @@ -%% -% Copyright (c) 2017 - 2023, Pascal Wagler; -% Copyright (c) 2014 - 2023, John MacFarlane -% -% All rights reserved. -% -% Redistribution and use in source and binary forms, with or without -% modification, are permitted provided that the following conditions -% are met: -% -% - Redistributions of source code must retain the above copyright -% notice, this list of conditions and the following disclaimer. -% -% - Redistributions in binary form must reproduce the above copyright -% notice, this list of conditions and the following disclaimer in the -% documentation and/or other materials provided with the distribution. -% -% - Neither the name of John MacFarlane nor the names of other -% contributors may be used to endorse or promote products derived -% from this software without specific prior written permission. -% -% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -% COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -% POSSIBILITY OF SUCH DAMAGE. -%% - -%% -% This is a modified version of the Eisvogel pandoc LaTeX template v2.4.2: -% https://github.com/Wandmalfarbe/pandoc-latex-template/blob/13fa67d7db669ca8f84826fc5e58ca0ed15a14be/eisvogel.tex -% -% For usage information and examples visit the official GitHub page: -% https://github.com/Wandmalfarbe/pandoc-latex-template -%% - -% Options for packages loaded elsewhere -\PassOptionsToPackage{unicode$for(hyperrefoptions)$,$hyperrefoptions$$endfor$}{hyperref} -\PassOptionsToPackage{hyphens}{url} -\PassOptionsToPackage{dvipsnames,svgnames,x11names,table}{xcolor} -$if(CJKmainfont)$ -\PassOptionsToPackage{space}{xeCJK} -$endif$ -% -\documentclass[ -$if(fontsize)$ - $fontsize$, -$endif$ -$if(papersize)$ - $papersize$paper, -$else$ - paper=a4, -$endif$ -$if(beamer)$ - ignorenonframetext, -$if(handout)$ - handout, -$endif$ -$if(aspectratio)$ - aspectratio=$aspectratio$, -$endif$ -$endif$ -$for(classoption)$ - $classoption$$sep$, -$endfor$ - ,captions=tableheading -]{$if(beamer)$$documentclass$$else$$if(book)$scrbook$else$scrartcl$endif$$endif$} -$if(beamer)$ -$if(background-image)$ -\usebackgroundtemplate{% - \includegraphics[width=\paperwidth]{$background-image$}% -} -% In beamer background-image does not work well when other images are used, so this is the workaround -\pgfdeclareimage[width=\paperwidth,height=\paperheight]{background}{$background-image$} -\usebackgroundtemplate{\pgfuseimage{background}} -$endif$ -\usepackage{pgfpages} -\setbeamertemplate{caption}[numbered] -\setbeamertemplate{caption label separator}{: } -\setbeamercolor{caption name}{fg=normal text.fg} -\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ -$for(beameroption)$ -\setbeameroption{$beameroption$} -$endfor$ -% Prevent slide breaks in the middle of a paragraph -\widowpenalties 1 10000 -\raggedbottom -$if(section-titles)$ -\setbeamertemplate{part page}{ - \centering - \begin{beamercolorbox}[sep=16pt,center]{part title} - \usebeamerfont{part title}\insertpart\par - \end{beamercolorbox} -} -\setbeamertemplate{section page}{ - \centering - \begin{beamercolorbox}[sep=12pt,center]{part title} - \usebeamerfont{section title}\insertsection\par - \end{beamercolorbox} -} -\setbeamertemplate{subsection page}{ - \centering - \begin{beamercolorbox}[sep=8pt,center]{part title} - \usebeamerfont{subsection title}\insertsubsection\par - \end{beamercolorbox} -} -\AtBeginPart{ - \frame{\partpage} -} -\AtBeginSection{ - \ifbibliography - \else - \frame{\sectionpage} - \fi -} -\AtBeginSubsection{ - \frame{\subsectionpage} -} -$endif$ -$endif$ -$if(beamerarticle)$ -\usepackage{beamerarticle} % needs to be loaded first -$endif$ -\usepackage{amsmath,amssymb} -$if(linestretch)$ -\usepackage{setspace} -$else$ -% Use setspace anyway because we change the default line spacing. -% The spacing is changed early to affect the titlepage and the TOC. -\usepackage{setspace} -\setstretch{1.2} -$endif$ -\usepackage{iftex} -\ifPDFTeX - \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} - \usepackage[utf8]{inputenc} - \usepackage{textcomp} % provide euro and other symbols -\else % if luatex or xetex -$if(mathspec)$ - \ifXeTeX - \usepackage{mathspec} % this also loads fontspec - \else - \usepackage{unicode-math} % this also loads fontspec - \fi -$else$ - \usepackage{unicode-math} % this also loads fontspec -$endif$ - \defaultfontfeatures{Scale=MatchLowercase}$-- must come before Beamer theme - \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1} -\fi -$if(fontfamily)$ -$else$ -$-- Set default font before Beamer theme so the theme can override it -\usepackage{lmodern} -$endif$ -$-- Set Beamer theme before user font settings so they can override theme -$if(beamer)$ -$if(theme)$ -\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} -$endif$ -$if(colortheme)$ -\usecolortheme{$colortheme$} -$endif$ -$if(fonttheme)$ -\usefonttheme{$fonttheme$} -$endif$ -$if(mainfont)$ -\usefonttheme{serif} % use mainfont rather than sansfont for slide text -$endif$ -$if(innertheme)$ -\useinnertheme{$innertheme$} -$endif$ -$if(outertheme)$ -\useoutertheme{$outertheme$} -$endif$ -$endif$ -$-- User font settings (must come after default font and Beamer theme) -$if(fontfamily)$ -\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} -$endif$ -\ifPDFTeX\else - % xetex/luatex font selection -$if(mainfont)$ - \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} -$endif$ -$if(sansfont)$ - \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} -$endif$ -$if(monofont)$ - \setmonofont[$for(monofontoptions)$$monofontoptions$$sep$,$endfor$]{$monofont$} -$endif$ -$for(fontfamilies)$ - \newfontfamily{$fontfamilies.name$}[$for(fontfamilies.options)$$fontfamilies.options$$sep$,$endfor$]{$fontfamilies.font$} -$endfor$ -$if(mathfont)$ -$if(mathspec)$ - \ifXeTeX - \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} - \else - \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} - \fi -$else$ - \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} -$endif$ -$endif$ -$if(CJKmainfont)$ - \ifXeTeX - \usepackage{xeCJK} - \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} - $if(CJKsansfont)$ - \setCJKsansfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKsansfont$} - $endif$ - $if(CJKmonofont)$ - \setCJKmonofont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmonofont$} - $endif$ - \fi -$endif$ -$if(luatexjapresetoptions)$ - \ifLuaTeX - \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} - \fi -$endif$ -$if(CJKmainfont)$ - \ifLuaTeX - \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} - \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} - \fi -$endif$ -\fi -$if(zero-width-non-joiner)$ -%% Support for zero-width non-joiner characters. -\makeatletter -\def\zerowidthnonjoiner{% - % Prevent ligatures and adjust kerning, but still support hyphenating. - \texorpdfstring{% - \TextOrMath{\nobreak\discretionary{-}{}{\kern.03em}% - \ifvmode\else\nobreak\hskip\z@skip\fi}{}% - }{}% -} -\makeatother -\ifPDFTeX - \DeclareUnicodeCharacter{200C}{\zerowidthnonjoiner} -\else - \catcode`^^^^200c=\active - \protected\def ^^^^200c{\zerowidthnonjoiner} -\fi -%% End of ZWNJ support -$endif$ -% Use upquote if available, for straight quotes in verbatim environments -\IfFileExists{upquote.sty}{\usepackage{upquote}}{} -\IfFileExists{microtype.sty}{% use microtype if available - \usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} - \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts -}{} -$if(indent)$ -$else$ -\makeatletter -\@ifundefined{KOMAClassName}{% if non-KOMA class - \IfFileExists{parskip.sty}{% - \usepackage{parskip} - }{% else - \setlength{\parindent}{0pt} - \setlength{\parskip}{6pt plus 2pt minus 1pt}} -}{% if KOMA class - \KOMAoptions{parskip=half}} -\makeatother -$endif$ -$if(verbatim-in-note)$ -\usepackage{fancyvrb} -$endif$ -\usepackage{xcolor} -\definecolor{default-linkcolor}{HTML}{0563C1} -\definecolor{default-filecolor}{HTML}{0563C1} -\definecolor{default-citecolor}{HTML}{0563C1} -\definecolor{default-urlcolor}{HTML}{0563C1} -\definecolor{titlecolor}{HTML}{7030A0} -\definecolor{subtitlecolor}{HTML}{1F4E79} -\definecolor{authorcolor}{HTML}{5B9BD5} -\definecolor{disclaimercolor}{HTML}{949494} -$if(footnotes-pretty)$ -% load footmisc in order to customize footnotes (footmisc has to be loaded before hyperref, cf. https://tex.stackexchange.com/a/169124/144087) -\usepackage[hang,flushmargin,bottom,multiple]{footmisc} -\setlength{\footnotemargin}{0.8em} % set space between footnote nr and text -\setlength{\footnotesep}{\baselineskip} % set space between multiple footnotes -\setlength{\skip\footins}{0.3cm} % set space between page content and footnote -\setlength{\footskip}{0.9cm} % set space between footnote and page bottom -$endif$ -$if(geometry)$ -$if(beamer)$ -\geometry{$for(geometry)$$geometry$$sep$,$endfor$} -$else$ -\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} -$endif$ -$else$ -$if(beamer)$ -$else$ -\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering,$for(geometry)$$geometry$$sep$,$endfor$]{geometry} -$endif$ -$endif$ -$if(logo)$ -\usepackage[export]{adjustbox} -\usepackage{graphicx} -$elseif(titlepage-top-cover-image)$ -\usepackage[export]{adjustbox} -\usepackage{graphicx} -$endif$ -$if(beamer)$ -\newif\ifbibliography -$endif$ -$if(listings)$ -\usepackage{listings} -\newcommand{\passthrough}[1]{#1} -\lstset{defaultdialect=[5.3]Lua} -\lstset{defaultdialect=[x86masm]Assembler} -$endif$ -$if(listings-no-page-break)$ -\usepackage{etoolbox} -\BeforeBeginEnvironment{lstlisting}{\par\noindent\begin{minipage}{\linewidth}} -\AfterEndEnvironment{lstlisting}{\end{minipage}\par\addvspace{\topskip}} -$endif$ -$if(lhs)$ -\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} -$endif$ -$if(highlighting-macros)$ -$highlighting-macros$ - -% Workaround/bugfix from jannick0. -% See https://github.com/jgm/pandoc/issues/4302#issuecomment-360669013) -% or https://github.com/Wandmalfarbe/pandoc-latex-template/issues/2 -% -% Redefine the verbatim environment 'Highlighting' to break long lines (with -% the help of fvextra). Redefinition is necessary because it is unlikely that -% pandoc includes fvextra in the default template. -\usepackage{fvextra} -\DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,fontsize=$if(code-block-font-size)$$code-block-font-size$$else$\small$endif$,commandchars=\\\{\}} - -$endif$ -$if(tables)$ -\usepackage{longtable,booktabs,array} -$if(multirow)$ -\usepackage{multirow} -$endif$ -\usepackage{calc} % for calculating minipage widths -$if(beamer)$ -\usepackage{caption} -% Make caption package work with longtable -\makeatletter -\def\fnum@table{\tablename~\thetable} -\makeatother -$else$ -% Correct order of tables after \paragraph or \subparagraph -\usepackage{etoolbox} -\makeatletter -\patchcmd\longtable{\par}{\if@noskipsec\mbox{}\fi\par}{}{} -\makeatother -% Allow footnotes in longtable head/foot -\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}} -\makesavenoteenv{longtable} -$endif$ -$endif$ -% add backlinks to footnote references, cf. https://tex.stackexchange.com/questions/302266/make-footnote-clickable-both-ways -$if(footnotes-disable-backlinks)$ -$else$ -\usepackage{footnotebackref} -$endif$ -$if(graphics)$ -\usepackage{graphicx} -\makeatletter -\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} -\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} -\makeatother -% Scale images if necessary, so that they will not overflow the page -% margins by default, and it is still possible to overwrite the defaults -% using explicit options in \includegraphics[width, height, ...]{} -\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} -% Set default figure placement to htbp -\makeatletter -% Make use of float-package and set default placement for figures to H. -% The option H means 'PUT IT HERE' (as opposed to the standard h option which means 'You may put it here if you like'). -\usepackage{float} -\floatplacement{figure}{$if(float-placement-figure)$$float-placement-figure$$else$H$endif$} -\makeatother -$endif$ -$if(svg)$ -\usepackage{svg} -$endif$ -$if(strikeout)$ -$-- also used for underline -\ifLuaTeX - \usepackage{luacolor} - \usepackage[soul]{lua-ul} -\else -\usepackage{soul} -$if(CJKmainfont)$ - \ifXeTeX - % soul's \st doesn't work for CJK: - \usepackage{xeCJKfntef} - \renewcommand{\st}[1]{\sout{#1}} - \fi -$endif$ -\fi -$endif$ -\setlength{\emergencystretch}{3em} % prevent overfull lines -\providecommand{\tightlist}{% - \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} -$if(numbersections)$ -\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} -$else$ -\setcounter{secnumdepth}{-\maxdimen} % remove section numbering -$endif$ -$if(subfigure)$ -\usepackage{subcaption} -$endif$ -$if(beamer)$ -$else$ -$if(block-headings)$ -% Make \paragraph and \subparagraph free-standing -\ifx\paragraph\undefined\else - \let\oldparagraph\paragraph - \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} -\fi -\ifx\subparagraph\undefined\else - \let\oldsubparagraph\subparagraph - \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} -\fi -$endif$ -$endif$ -$if(pagestyle)$ -\pagestyle{$pagestyle$} -$endif$ -$if(csl-refs)$ -% definitions for citeproc citations -\NewDocumentCommand\citeproctext{}{} -\NewDocumentCommand\citeproc{mm}{% - \begingroup\def\citeproctext{#2}\cite{#1}\endgroup} -\makeatletter - % allow citations to break across lines - \let\@cite@ofmt\@firstofone - % avoid brackets around text for \cite: - \def\@biblabel#1{} - \def\@cite#1#2{{#1\if@tempswa , #2\fi}} -\makeatother -\newlength{\cslhangindent} -\setlength{\cslhangindent}{1.5em} -\newlength{\csllabelwidth} -\setlength{\csllabelwidth}{3em} -\newenvironment{CSLReferences}[2] % #1 hanging-indent, #2 entry-spacing - {\begin{list}{}{% - \setlength{\itemindent}{0pt} - \setlength{\leftmargin}{0pt} - \setlength{\parsep}{0pt} - % turn on hanging indent if param 1 is 1 - \ifodd #1 - \setlength{\leftmargin}{\cslhangindent} - \setlength{\itemindent}{-1\cslhangindent} - \fi - % set entry spacing - \setlength{\itemsep}{#2\baselineskip}}} - {\end{list}} -\usepackage{calc} -\newcommand{\CSLBlock}[1]{\hfill\break\parbox[t]{\linewidth}{\strut\ignorespaces#1\strut}} -\newcommand{\CSLLeftMargin}[1]{\parbox[t]{\csllabelwidth}{\strut#1\strut}} -\newcommand{\CSLRightInline}[1]{\parbox[t]{\linewidth - \csllabelwidth}{\strut#1\strut}} -\newcommand{\CSLIndent}[1]{\hspace{\cslhangindent}#1} -$endif$ -$if(lang)$ -\ifLuaTeX -\usepackage[bidi=basic]{babel} -\else -\usepackage[bidi=default]{babel} -\fi -$if(babel-lang)$ -\babelprovide[main,import]{$babel-lang$} -$if(mainfont)$ -\ifPDFTeX -\else -\babelfont{rm}[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} -\fi -$endif$ -$endif$ -$for(babel-otherlangs)$ -\babelprovide[import]{$babel-otherlangs$} -$endfor$ -$for(babelfonts/pairs)$ -\babelfont[$babelfonts.key$]{rm}{$babelfonts.value$} -$endfor$ -% get rid of language-specific shorthands (see #6817): -\let\LanguageShortHands\languageshorthands -\def\languageshorthands#1{} -$endif$ -$for(header-includes)$ -$header-includes$ -$endfor$ -\ifLuaTeX - \usepackage{selnolig} % disable illegal ligatures -\fi -$if(dir)$ -\ifPDFTeX - \TeXXeTstate=1 - \newcommand{\RL}[1]{\beginR #1\endR} - \newcommand{\LR}[1]{\beginL #1\endL} - \newenvironment{RTL}{\beginR}{\endR} - \newenvironment{LTR}{\beginL}{\endL} -\fi -$endif$ -$if(natbib)$ -\usepackage[$natbiboptions$]{natbib} -\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} -$endif$ -$if(biblatex)$ -\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} -$for(bibliography)$ -\addbibresource{$bibliography$} -$endfor$ -$endif$ -$if(nocite-ids)$ -\nocite{$for(nocite-ids)$$it$$sep$, $endfor$} -$endif$ -$if(csquotes)$ -\usepackage{csquotes} -$endif$ -\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}} -\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available -\urlstyle{$if(urlstyle)$$urlstyle$$else$same$endif$} -$if(links-as-notes)$ -% Make links footnotes instead of hotlinks: -\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} -$endif$ -$if(verbatim-in-note)$ -\VerbatimFootnotes % allow verbatim text in footnotes -$endif$ -\hypersetup{ -$if(title-meta)$ - pdftitle={$title-meta$}, -$endif$ -$if(author-meta)$ - pdfauthor={$author-meta$}, -$endif$ -$if(lang)$ - pdflang={$lang$}, -$endif$ -$if(subject)$ - pdfsubject={$subject$}, -$endif$ -$if(keywords)$ - pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, -$endif$ -$if(colorlinks)$ - colorlinks=true, - linkcolor={$if(linkcolor)$$linkcolor$$else$default-linkcolor$endif$}, - filecolor={$if(filecolor)$$filecolor$$else$default-filecolor$endif$}, - citecolor={$if(citecolor)$$citecolor$$else$default-citecolor$endif$}, - urlcolor={$if(urlcolor)$$urlcolor$$else$default-urlcolor$endif$}, -$else$ - hidelinks, -$endif$ - breaklinks=true, - pdfcreator={LaTeX via pandoc with the Eisvogel template}} -$if(title)$ -\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} -$endif$ -$if(subtitle)$ -$if(beamer)$ -$else$ -\usepackage{etoolbox} -\makeatletter -\providecommand{\subtitle}[1]{% add subtitle to \maketitle - \apptocmd{\@title}{\par {\large #1 \par}}{}{} -} -\makeatother -$endif$ -\subtitle{$subtitle$} -$endif$ -\author{$for(author)$$author$$sep$ \and $endfor$} -\date{$date$} -$if(beamer)$ -$if(institute)$ -\institute{$for(institute)$$institute$$sep$ \and $endfor$} -$endif$ -$if(titlegraphic)$ -\titlegraphic{\includegraphics{$titlegraphic$}} -$endif$ -$if(logo)$ -\logo{\includegraphics{$logo$}} -$endif$ -$endif$ - - - -%% -%% added -%% - -$if(page-background)$ -\usepackage[pages=all]{background} -$endif$ - -% -% for the background color of the title page -% -$if(titlepage)$ -\usepackage{pagecolor} -\usepackage{afterpage} -$if(titlepage-background)$ -\usepackage{tikz} -$endif$ -$if(geometry)$ -$else$ -\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering]{geometry} -$endif$ -$endif$ - -% -% break urls -% -\PassOptionsToPackage{hyphens}{url} - -% -% When using babel or polyglossia with biblatex, loading csquotes is recommended -% to ensure that quoted texts are typeset according to the rules of your main language. -% -\usepackage{csquotes} - -% -% captions -% -\definecolor{caption-color}{HTML}{7030A0} -$if(beamer)$ -$else$ -\usepackage[font={stretch=1.2}, textfont={color=caption-color}, position=top, skip=4mm, labelfont=bf, singlelinecheck=false, justification=$if(caption-justification)$$caption-justification$$else$raggedright$endif$]{caption} -\setcapindent{0em} -$endif$ - -% -% blockquote -% -\definecolor{blockquote-border}{RGB}{221,221,221} -\definecolor{blockquote-text}{RGB}{119,119,119} -\usepackage{mdframed} -\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=blockquote-border,skipabove=\parskip]{customblockquote} -\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}% -\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}} - -% -% Source Sans Pro as the default font family -% Source Code Pro for monospace text -% -% 'default' option sets the default -% font family to Source Sans Pro, not \sfdefault. -% -\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex - $if(fontfamily)$ - $else$ - \usepackage[default]{sourcesanspro} - \usepackage{sourcecodepro} - $endif$ -\else % if not pdftex - $if(mainfont)$ - $else$ - \usepackage[default]{sourcesanspro} - \usepackage{sourcecodepro} - - % XeLaTeX specific adjustments for straight quotes: https://tex.stackexchange.com/a/354887 - % This issue is already fixed (see https://github.com/silkeh/latex-sourcecodepro/pull/5) but the - % fix is still unreleased. - % TODO: Remove this workaround when the new version of sourcecodepro is released on CTAN. - \ifxetex - \makeatletter - \defaultfontfeatures[\ttfamily] - { Numbers = \sourcecodepro@figurestyle, - Scale = \SourceCodePro@scale, - Extension = .otf } - \setmonofont - [ UprightFont = *-\sourcecodepro@regstyle, - ItalicFont = *-\sourcecodepro@regstyle It, - BoldFont = *-\sourcecodepro@boldstyle, - BoldItalicFont = *-\sourcecodepro@boldstyle It ] - {SourceCodePro} - \makeatother - \fi - $endif$ -\fi - -% -% heading color -% -\definecolor{heading-color}{HTML}{7030A0} -$if(beamer)$ -$else$ -\addtokomafont{section}{\color{heading-color} \fontsize{16pt}{19pt}\selectfont} -\addtokomafont{subsection}{\color{heading-color} \fontsize{14pt}{17pt}\selectfont} -\addtokomafont{subsubsection}{\color{heading-color} \fontsize{12pt}{14pt}\selectfont} -\addtokomafont{paragraph}{\color{heading-color} \fontsize{12pt}{14pt}\selectfont \itshape} -\addtokomafont{subparagraph}{\color{heading-color} \fontsize{12pt}{14pt}\selectfont \itshape} -$endif$ -% When using the classes report, scrreprt, book, -% scrbook or memoir, uncomment the following line. -%\addtokomafont{chapter}{\color{heading-color}} - -% -% variables for title, author and date -% -$if(beamer)$ -$else$ -\usepackage{titling} -\title{$title$} -\author{$for(author)$$author$$sep$, $endfor$} -\date{$date$} -$endif$ - -% -% tables -% -$if(tables)$ - -\definecolor{table-row-color}{HTML}{F5F5F5} -\definecolor{table-rule-color}{HTML}{999999} - -%\arrayrulecolor{black!40} -\arrayrulecolor{table-rule-color} % color of \toprule, \midrule, \bottomrule -\setlength\heavyrulewidth{0.3ex} % thickness of \toprule, \bottomrule -$if(tables-left-aligned)$ -\setlength{\LTleft}{0pt} % left align tables -$endif$ -\renewcommand{\arraystretch}{1.3} % spacing (padding) - -$if(table-use-row-colors)$ -% Unfortunately the colored cells extend beyond the edge of the -% table because pandoc uses @-expressions (@{}) like so: -% -% \begin{longtable}[]{@{}ll@{}} -% \end{longtable} -% -% https://en.wikibooks.org/wiki/LaTeX/Tables#.40-expressions -\usepackage{etoolbox} -\AtBeginEnvironment{longtable}{\rowcolors{2}{}{table-row-color!100}} -\preto{\toprule}{\hiderowcolors}{}{} -\appto{\endhead}{\showrowcolors}{}{} -\appto{\endfirsthead}{\showrowcolors}{}{} -$endif$ -$endif$ - -% -% remove paragraph indentation -% -\setlength{\parindent}{0pt} -\setlength{\parskip}{6pt plus 2pt minus 1pt} -\setlength{\emergencystretch}{3em} % prevent overfull lines - -% -% -% Listings -% -% - -$if(listings)$ - -% -% general listing colors -% -\definecolor{listing-background}{HTML}{F7F7F7} -\definecolor{listing-rule}{HTML}{B3B2B3} -\definecolor{listing-numbers}{HTML}{B3B2B3} -\definecolor{listing-text-color}{HTML}{000000} -\definecolor{listing-keyword}{HTML}{435489} -\definecolor{listing-keyword-2}{HTML}{1284CA} % additional keywords -\definecolor{listing-keyword-3}{HTML}{9137CB} % additional keywords -\definecolor{listing-identifier}{HTML}{435489} -\definecolor{listing-string}{HTML}{00999A} -\definecolor{listing-comment}{HTML}{8E8E8E} -\colorlet{punct}{red!60!black} -\definecolor{delim}{RGB}{20,105,176} -\colorlet{numb}{magenta!60!black} - -\lstdefinestyle{eisvogel_listing_style}{ -$if(listings-disable-line-numbers)$ - xleftmargin = 0.6em, - framexleftmargin = 0.4em, -$else$ - numbers = left, - xleftmargin = 2.7em, - framexleftmargin = 2.5em, -$endif$ - backgroundcolor = \color{listing-background}, - basicstyle = \color{listing-text-color}\linespread{1.2}$if(code-block-font-size)$$code-block-font-size$$else$\footnotesize$endif$\ttfamily{}, - breaklines = true, - breakatwhitespace = true, - breakautoindent = true, - linewidth = \textwidth, - frame = single, - framesep = 0.19em, - rulecolor = \color{listing-rule}, - frameround = ffff, - tabsize = 2, - numberstyle = \color{listing-numbers}, - numbersep = 5pt, - aboveskip = 1.0em, - belowskip = 0.1em, - abovecaptionskip = 0em, - belowcaptionskip = 1.0em, - keywordstyle = {\color{listing-keyword}\bfseries}, - keywordstyle = {[2]\color{listing-keyword-2}\bfseries}, - keywordstyle = {[3]\color{listing-keyword-3}\bfseries\itshape}, - sensitive = true, - showspaces = false, - showstringspaces = false, - showtabs = false, - captionpos = b, - identifierstyle = \color{listing-identifier}, - commentstyle = \color{listing-comment}, - stringstyle = \color{listing-string}, - showstringspaces = false, - escapeinside = {/*@}{@*/}, % Allow LaTeX inside these special comments - literate = - {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 - {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 - {à}{{\`a}}1 {è}{{\`e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 - {À}{{\`A}}1 {È}{{\`E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 - {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 - {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 - {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 - {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 - {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 - {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 - {€}{{\EUR}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1 - {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1 - {…}{{\ldots}}1 {≥}{{>=}}1 {≤}{{<=}}1 {„}{{\glqq}}1 {“}{{\grqq}}1 - {”}{{''}}1 -} -\lstset{style=eisvogel_listing_style} - -% -% Java (Java SE 12, 2019-06-22) -% -\lstdefinelanguage{Java}{ - morekeywords={ - % normal keywords (without data types) - abstract,assert,break,case,catch,class,continue,default, - do,else,enum,exports,extends,final,finally,for,if,implements, - import,instanceof,interface,module,native,new,package,private, - protected,public,requires,return,static,strictfp,super,switch, - synchronized,this,throw,throws,transient,try,volatile,while, - % var is an identifier - var - }, - morekeywords={[2] % data types - % primitive data types - boolean,byte,char,double,float,int,long,short, - % String - String, - % primitive wrapper types - Boolean,Byte,Character,Double,Float,Integer,Long,Short - % number types - Number,AtomicInteger,AtomicLong,BigDecimal,BigInteger,DoubleAccumulator,DoubleAdder,LongAccumulator,LongAdder,Short, - % other - Object,Void,void - }, - morekeywords={[3] % literals - % reserved words for literal values - null,true,false, - }, - sensitive, - morecomment = [l]//, - morecomment = [s]{/*}{*/}, - morecomment = [s]{/**}{*/}, - morestring = [b]", - morestring = [b]', -} - -\lstdefinelanguage{XML}{ - morestring = [b]", - moredelim = [s][\bfseries\color{listing-keyword}]{<}{\ }, - moredelim = [s][\bfseries\color{listing-keyword}]{}, - moredelim = [l][\bfseries\color{listing-keyword}]{/>}, - moredelim = [l][\bfseries\color{listing-keyword}]{>}, - morecomment = [s]{}, - morecomment = [s]{}, - commentstyle = \color{listing-comment}, - stringstyle = \color{listing-string}, - identifierstyle = \color{listing-identifier} -} - -\lstdefinelanguage{JSON}{ - basicstyle=\footnotesize\sffamily, - numberstyle=\scriptsize, - showstringspaces=false, - breaklines=true, - frame=single, - literate= - *{0}{{{\color{numb}0}}}{1} - {1}{{{\color{numb}1}}}{1} - {2}{{{\color{numb}2}}}{1} - {3}{{{\color{numb}3}}}{1} - {4}{{{\color{numb}4}}}{1} - {5}{{{\color{numb}5}}}{1} - {6}{{{\color{numb}6}}}{1} - {7}{{{\color{numb}7}}}{1} - {8}{{{\color{numb}8}}}{1} - {9}{{{\color{numb}9}}}{1} - {:}{{{\color{punct}{:}}}}{1} - {,}{{{\color{punct}{,}}}}{1} - {\{}{{{\color{delim}{\{}}}}{1} - {\}}{{{\color{delim}{\}}}}}{1} - {[}{{{\color{delim}{[}}}}{1} - {]}{{{\color{delim}{]}}}}{1} -} - -\lstdefinelanguage{HCL}{ - keywords={true, false, return, OUTPUT}, - keywordstyle=\color{ForestGreen}\bfseries, - ndkeywords={none, var, txt, num, bool, tuple, list, func, value}, - ndkeywordstyle=\color{BurntOrange}\bfseries, - emph={map, where, reduce, print, add, where, do, equals, then, else, thenElse, +, -, /, *, not, addNumbers, is, modifyNumber, modifyFunction, times2, isAwesome, onEach, forEach, mapFunction, SetLEDPower, delay, LedSetup}, %add all included functions here - emphstyle={\color{RoyalBlue}}, - identifierstyle=\color{Aquamarine}, - sensitive=true, - commentstyle=\color{Gray}\ttfamily, - comment=[l]{\#}, - stringstyle=\color{black}\ttfamily, - morestring=[b]" -} - -\lstdefinelanguage{CSharp}{ - sensitive=true, - morekeywords=[1]{abstract,as,base,break,case,catch,checked,% - class,const,continue,default,delegate,do,else,enum,event,% - explicit,extern,false,finally,fixed,for,foreach,goto,if,% - implicit,in,interface,internal,is,lock,namespace,new,null,% - operator,out,override,params,private,protected,public,% - readonly,ref,return,sealed,sizeof,stackalloc,static,% - struct,switch,this,throw,true,try,typeof,unchecked,unsafe,% - using,virtual,volatile,while,bool,byte,char,decimal,% - double,float,int,lock,object,sbyte,short,string,uint,% - ulong,ushort,void% - }, - morekeywords=[2]{}, - morekeywords=[3]{dictionary,Dictionary,StopWordTool,Math,math,% - List,list,KeyValuePair% - }, - morekeywords=[4]{}, - morecomment=[l]{//}, - morecomment=[s]{/*}{*/}, - morecomment=[l][keywordstyle4]{\#}, - morestring=[b]", - morestring=[b]' -} - -\lstdefinelanguage{powershell}{ - morekeywords={Add-Content,Add-PSSnapin,Clear-Content,% - Clear-History,Clear-Host,Clear-Item,% - Clear-ItemProperty,Clear-Variable,% - Compare-Object,Connect-PSSession,ConvertFrom-String,% - Convert-Path,Copy-Item,Copy-ItemProperty,% - Disable-PSBreakpoint,Disconnect-PSSession,% - Enable-PSBreakpoint,Enter-PSSession,Exit-PSSession,% - Export-Alias,Export-Csv,Export-PSSession,ForEach-Object,% - Format-Custom,Format-Hex,Format-List,Format-Table,% - Format-Wide,Get-Alias,Get-ChildItem,Get-Clipboard,% - Get-Command,Get-ComputerInfo,Get-Content,Get-History,% - Get-Item,Get-ItemProperty,Get-ItemPropertyValue,Get-Job,% - Get-Location,Get-Member,Get-Module,Get-Process,% - Get-PSBreakpoint,Get-PSCallStack,Get-PSDrive,Get-PSSession,% - Get-PSSnapin,Get-Service,Get-TimeZone,Get-Unique,Get-Variable,% - Get-WmiObject,Group-Object,help,Import-Alias,Import-Csv,% - Import-Module,Import-PSSession,Invoke-Command,Invoke-Expression,% - Invoke-History,Invoke-Item,Invoke-RestMethod,Invoke-WebRequest,% - Invoke-WmiMethod,Measure-Object,mkdir,Move-Item,Move-ItemProperty,% - New-object,New-Alias,New-Item,New-Module,New-PSDrive,New-PSSession,% - New-PSSessionConfigurationFile,New-Variable,Out-GridView,% - Out-Host,Out-Printer,Pop-Location,powershell_ise.exe,% - Push-Location,Receive-Job,Receive-PSSession,Remove-Item,% - Remove-ItemProperty,Remove-Job,Remove-Module,Remove-PSBreakpoint,% - Remove-PSDrive,Remove-PSSession,Remove-PSSnapin,Remove-Variable,% - Remove-WmiObject,Rename-Item,Rename-ItemProperty,Resolve-Path,% - Resume-Job,Select-Object,Select-String,Set-Alias,Set-Clipboard,% - Set-Content,Set-Item,Set-ItemProperty,Set-Location,% - Set-PSBreakpoint,Set-TimeZone,Set-Variable,Set-WmiInstance,% - Show-Command,Sort-Object,Start-Job,Start-Process,Start-Service,% - Start-Sleep,Stop-Job,Stop-Process,Stop-Service,Suspend-Job,% - Tee-Object,Trace-Command,Wait-Job,Where-Object,Write-Output% - }, - morekeywords={do,else,elseif,for,foreach,function,if,in,until,while,% - ForEach-Object,Install-Module,Find-Module,Connect-AzAccount,% - Get-AzAdServicePrincipal,Get-AzAccessToken,Read-Host,% - ShouldProcess,throw,replace,ConvertTo-Json,ConvertFrom-Json,% - pscustomobject,bool,string,Write-Host,Write-Warning,New-Guid% - }, - alsodigit={-}, - sensitive=false, - morecomment=[l]{\#}, - morecomment=[n]{<\#}{\#>}, - morestring=[b]{"}, - morestring=[b]{'}, - morestring=[s]{@'}{'@}, - morestring=[s]{@"}{"@} -} -$endif$ - -% -% header and footer -% -$if(beamer)$ -$else$ -$if(disable-header-and-footer)$ -$else$ -\usepackage{fancyhdr} -\usepackage{lastpage} -\setlength{\headheight}{36pt} -\setlength{\footskip}{20pt} -\fancypagestyle{eisvogel-header-footer}{ - \fancyhf{} - $if(logo)$ - \fancyhf[LH]{\raisebox{0.5cm}{\includegraphics[width=3cm]{$logo$}}} - $endif$ - $if(date)$ - \fancyhf[RH]{\fontsize{8pt}{10pt}\selectfont $date$\\ } - $endif$ - \fancyhf[CH]{\fontsize{8pt}{10pt}\selectfont $if(project)$Project $project$$endif$$if(author)$\\$for(author)$$author$$sep$, $endfor$$endif$} - $if(footer-left)$ - \fancyhf[LF]{\fontsize{8pt}{10pt}\selectfont $footer-left$} - $endif$ - $if(page-numbers)$ - \fancyhf[CF]{\fontsize{8pt}{10pt}\selectfont Page (\thepage) of \pageref{LastPage}} - $endif$ - $if(footer-right)$ - \fancyhf[RF]{\fontsize{8pt}{10pt}\selectfont $footer-right$} - $endif$ - \renewcommand{\headrulewidth}{0pt} - \renewcommand{\footrulewidth}{0pt} -} -\pagestyle{eisvogel-header-footer} - -$if(book)$ -\deftripstyle{ChapterStyle}{}{}{}{}{\pagemark}{} -\renewcommand*{\chapterpagestyle}{ChapterStyle} -$endif$ - -$if(page-background)$ -\backgroundsetup{ -scale=1, -color=black, -opacity=$if(page-background-opacity)$$page-background-opacity$$else$0.2$endif$, -angle=0, -contents={% - \includegraphics[width=\paperwidth,height=\paperheight]{$page-background$} - }% -} -$endif$ -$endif$ -$endif$ - -%% -%% end header and footer -%% - -%% -%% begin set bullet style -%% -\usepackage{enumitem} -\setlistdepth{9} -\setlist[itemize,1]{label=$$\bullet$$,font=\fontsize{10pt}{12pt}\selectfont} -\setlist[itemize,2]{label=$$\circ$$,font=\fontsize{14pt}{17pt}\selectfont} -\setlist[itemize,3]{label=$$\blacksquare$$,font=\fontsize{4pt}{6pt}\selectfont} -\setlist[itemize,4]{label=$$\star$$} -\setlist[itemize,5]{label=$$\diamond$$} -\setlist[itemize,6]{label=$$\ast$$} -\setlist[itemize,7]{label=$$\star$$} -\setlist[itemize,8]{label=$$\ast$$} -\setlist[itemize,9]{label=$$\star$$} -\renewlist{itemize}{itemize}{9} -%% -%% end set bullet style -%% -\usepackage{awesomebox} - -\begin{document} - -%% -%% begin titlepage -%% -$if(beamer)$ -$else$ -$if(titlepage)$ -\begin{titlepage} -$if(titlepage-background)$ -\newgeometry{top=2cm, right=4cm, bottom=3cm, left=4cm} -$else$ -\newgeometry{left=3cm, right=2cm, bottom=1.5cm} -$endif$ -$if(titlepage-color)$ -\definecolor{titlepage-color}{HTML}{$titlepage-color$} -\newpagecolor{titlepage-color}\afterpage{\restorepagecolor} -$endif$ -$if(titlepage-background)$ -\tikz[remember picture,overlay] \node[inner sep=0pt] at (current page.center){\includegraphics[width=\paperwidth,height=\paperheight]{$titlepage-background$}}; -$endif$ -\newcommand{\colorRule}[3][black]{\textcolor[HTML]{#1}{\rule{#2}{#3}}} -\begin{flushleft} -\noindent -\\[-1em] -\color[HTML]{$if(titlepage-text-color)$$titlepage-text-color$$else$5F5F5F$endif$} -\par -\noindent - -$if(titlepage-top-cover-image)$ -\noindent -\vskip -3em -\includegraphics{$titlepage-top-cover-image$} -$endif$ - -$if(titlepage-background)$ -% The titlepage with a background image has other text spacing and text size -{ - \setstretch{2} - \vfill - \vskip -8em - \textcolor{titlecolor}{\noindent {\fontsize{36pt}{42pt}\selectfont $title$}} - $if(subtitle)$ - \vskip 2em - \textcolor{subtitlecolor}{{\fontsize{14pt}{17pt}\selectfont $subtitle$}} - $endif$ - \vskip 0em - \textcolor{authorcolor}{\noindent {\fontsize{12pt}{14pt}\selectfont $for(author)$$author$$sep$, $endfor$ \vskip 0.6em $date$}} - \vfill -} -$else$ -{ - \setstretch{1.4} - \vfill - \vskip 14em - \textcolor{titlecolor}{\noindent {\fontsize{36pt}{42pt}\selectfont $title$}} - $if(subtitle)$ - \vskip 2em - \textcolor{subtitlecolor}{{\fontsize{14pt}{17pt}\selectfont $subtitle$}} - $endif$ - \vskip -1em - \textcolor{authorcolor}{\noindent {\fontsize{12pt}{14pt}\selectfont $for(author)$$author$$sep$, $endfor$}} - \vfill -} -$endif$ - -$if(disclaimer)$ -\vskip 21em -\setstretch{1.0} -\textcolor{disclaimercolor}{\noindent {\fontsize{8pt}{10pt}\selectfont $disclaimer$}} -$endif$ - -\end{flushleft} -\end{titlepage} -\restoregeometry -\pagenumbering{arabic} -$endif$ -$endif$ - -%% -%% end titlepage -%% - -$if(has-frontmatter)$ -\frontmatter -$endif$ -$if(title)$ -$if(beamer)$ -\frame{\titlepage} -% don't generate the default title -% $else$ -% \maketitle -$endif$ -$if(abstract)$ -\begin{abstract} -$abstract$ -\end{abstract} -$endif$ -$endif$ - -$if(first-chapter)$ -\setcounter{chapter}{$first-chapter$} -\addtocounter{chapter}{-1} -$endif$ - -%% -%% begin version history -%% -$if(version-history)$ -\hypertarget{version-history}{% -\section{Version history}\label{version-history}} - -\begin{longtable}[]{@{} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.1200}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2000}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.2500}} - >{\raggedright\arraybackslash}p{(\columnwidth - 8\tabcolsep) * \real{0.4300}}@{}} -\toprule() -\begin{minipage}[b]{\linewidth}\raggedright -\textbf{Version} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{Date} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{Author} -\end{minipage} & \begin{minipage}[b]{\linewidth}\raggedright -\textbf{Description} -\end{minipage} \\ -\midrule() -\endhead -$for(version-history)$ -$if(version-history.version)$ -$version-history.version$ & $if(version-history.date)$$version-history.date$$endif$ & $if(version-history.author)$$version-history.author$$endif$ & $if(version-history.description)$$version-history.description$$endif$ \\ -$else$ -1.0.0 & $date$ & $for(author)$$author$$sep$ \and $endfor$ & Initial draft \\ -$endif$ -$endfor$ -\bottomrule() -\end{longtable} -$endif$ - -%% -%% end versionhistory -%% - -$for(include-before)$ -$include-before$ - -$endfor$ -$if(toc)$ -$if(toc-own-page)$ -\newpage -$endif$ -$if(toc-title)$ -\renewcommand*\contentsname{$toc-title$} -$endif$ -$if(beamer)$ -\begin{frame}[allowframebreaks] -$if(toc-title)$ - \frametitle{$toc-title$} -$endif$ - \tableofcontents[hideallsubsections] -\end{frame} -$if(toc-own-page)$ -\newpage -$endif$ -$else$ -{ -$if(colorlinks)$ -\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} -$endif$ -\setcounter{tocdepth}{$toc-depth$} -\tableofcontents -$if(toc-own-page)$ -\newpage -$endif$ -} -$endif$ -$endif$ -$if(lof)$ -\listoffigures -$endif$ -$if(lot)$ -\listoftables -$endif$ -$if(linestretch)$ -\setstretch{$linestretch$} -$endif$ -$if(has-frontmatter)$ -\mainmatter -$endif$ -$body$ - -$if(has-frontmatter)$ -\backmatter -$endif$ -$if(natbib)$ -$if(bibliography)$ -$if(biblio-title)$ -$if(has-chapters)$ -\renewcommand\bibname{$biblio-title$} -$else$ -\renewcommand\refname{$biblio-title$} -$endif$ -$endif$ -$if(beamer)$ -\begin{frame}[allowframebreaks]{$biblio-title$} - \bibliographytrue -$endif$ - \bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} -$if(beamer)$ -\end{frame} -$endif$ - -$endif$ -$endif$ -$if(biblatex)$ -$if(beamer)$ -\begin{frame}[allowframebreaks]{$biblio-title$} - \bibliographytrue - \printbibliography[heading=none] -\end{frame} -$else$ -\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ -$endif$ - -$endif$ -$for(include-after)$ -$include-after$ - -$endfor$ -\end{document} diff --git a/test/Makefile b/test/Makefile index b7638f96..84fd5048 100644 --- a/test/Makefile +++ b/test/Makefile @@ -1,14 +1,15 @@ -# Two primary targets are defined by this Makefile: +# Three primary targets are defined by this Makefile: # # 1. test-minimal: test a minimal base image # 2. test-latex: test a latex image +# 3. test-extra: test an extra image # # The IMAGE variable is required to be defined in order to `docker run` the # various tests. The parent Makefile test targets define this, or alternatively # -# 1. IMAGE=ghcr.io/innofactororg/image:tag make test-minimal -# 2. IMAGE=ghcr.io/innofactororg/image:tag make test-latex -# 3. IMAGE=ghcr.io/innofactororg/image:tag make test-extra +# 1. IMAGE=pandoc/image:tag make test-minimal +# 2. IMAGE=pandoc/image:tag make test-latex +# 3. IMAGE=pandoc/image:tag make test-extra ifndef IMAGE $(error IMAGE variable must be set to docker image to test) endif @@ -82,8 +83,7 @@ test-crossref-filter: $(test_files_path)/crossref-test.md \ LATEX_CMD = docker run --rm \ -v $(test_files_path):/data \ --entrypoint /usr/local/bin/pandoc \ - $(IMAGE) \ - --fail-if-warnings + $(IMAGE) # Generate list of targets to test all highlighting options available in pandoc. # See: https://pandoc.org/MANUAL.html#option--highlight-style @@ -112,17 +112,18 @@ test-latex: output/testsuite.pdf output/french.pdf output/german.pdf \ output/testsuite.pdf: testsuite.native $(LATEX_CMD) $< \ --output=$@ \ - --pdf-engine=xelatex + --pdf-engine=latexmk output/french.pdf: french.md $(LATEX_CMD) $< \ --output=$@ \ + --variable=csquotes \ --pdf-engine=xelatex output/german.pdf: german.md $(LATEX_CMD) $< \ --output=$@ \ - --pdf-engine=xelatex + --pdf-engine=lualatex output/lorem-geometry.pdf: lorem.md geometry.yaml $(LATEX_CMD) $< \ @@ -185,18 +186,12 @@ $(code_targets): output/code-highlight-%.pdf: code-highlight.md # EXTRA_CMD = docker run --rm \ -v $(test_files_path):/data \ - --entrypoint /.pandoc/tools/convert.sh \ - $(IMAGE) \ - --fail-if-warnings - -CONVERT_CMD = docker run --rm \ - -v $(test_files_path):/data \ - --entrypoint /.pandoc/tools/convert.sh \ + --entrypoint /usr/local/bin/pandoc \ $(IMAGE) \ --fail-if-warnings .PHONY: test-extra -test-extra: output/eisvogel.pdf output/designdoc.pdf #output/beamertheme-metropolis.pdf +test-extra: output/eisvogel.pdf output/eisvogel_with_environment.pdf output/beamertheme-metropolis.pdf output/eisvogel.pdf: eisvogel.md $(EXTRA_CMD) $< \ @@ -204,34 +199,19 @@ output/eisvogel.pdf: eisvogel.md --template=eisvogel \ --pdf-engine=xelatex -output/designdoc.pdf: designdoc.md - $(CONVERT_CMD) $< \ - --author="Innofactor" \ - --columns="72" \ - --description="Initial draft" \ - --dpi=300 \ - --filter pandoc-latex-environment \ - --from="markdown+backtick_code_blocks+escaped_line_breaks+footnotes-implicit_figures+implicit_header_references+inline_notes+line_blocks+link_attributes+space_in_atx_header+table_captions+multiline_tables+pipe_tables+task_lists+yaml_metadata_block" \ - --git-log-limit="15" \ - --history-file="designdoc-history.txt" \ - --input-files="designdoc.order" \ - --listings \ - --output=$@ \ - --pdf-engine="xelatex" \ - --project="1234567" \ - --replace-file="designdoc-replace.json" \ - --skip-git-history="true" \ - --standalone \ - --subtitle="Test document for pandoc-dockerfiles" \ - --template="designdoc" \ - --title="Designdoc template" - -#output/beamertheme-metropolis.pdf: beamertheme-metropolis.md -# $(EXTRA_CMD) $< \ -# --output=$@ \ -# --to=beamer \ -# --variable=theme:metropolis \ -# --variable=themeoptions:numbering=none +output/eisvogel_with_environment.pdf: eisvogel.md + $(EXTRA_CMD) $< \ + --output=$@ \ + --template=eisvogel \ + --pdf-engine=xelatex \ + --filter=pandoc-latex-environment + +output/beamertheme-metropolis.pdf: beamertheme-metropolis.md + $(EXTRA_CMD) $< \ + --output=$@ \ + --to=beamer \ + --variable=theme:metropolis \ + --variable=themeoptions:numbering=none # ____ _ # / ___| | ___ __ _ _ __ @@ -241,4 +221,4 @@ output/designdoc.pdf: designdoc.md # .PHONY: clean clean: - rm -rf output/eisvogel.pdf + rm -rf output/* \ No newline at end of file diff --git a/test/designdoc-history.txt b/test/designdoc-history.txt deleted file mode 100644 index 334089c4..00000000 --- a/test/designdoc-history.txt +++ /dev/null @@ -1,2 +0,0 @@ -1|Oct 26, 2023|Jane Doe|Initial draft -2|Oct 28, 2023|John Doe|Added detailed design \ No newline at end of file diff --git a/test/designdoc-replace.json b/test/designdoc-replace.json deleted file mode 100644 index 5aeac5ff..00000000 --- a/test/designdoc-replace.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "{contact name}": "Jane Doe", - "{organization name}": "Contoso" -} diff --git a/test/designdoc.1.md b/test/designdoc.1.md deleted file mode 100644 index 0653cd94..00000000 --- a/test/designdoc.1.md +++ /dev/null @@ -1,383 +0,0 @@ -# Markdown tips - -Created for {organization name} by {contact name}. - -## Blocks - -### Admonition blocks - -The markdown can include admonition blocks for text that need special attention. - -The following blocks are supported: **warning**, **important**, **note**, **caution**, **tip**. - -For example: - -```markdown -# A title - -This is some regular text. - -::: tip -This text is in a tip admonition block. -::: -``` - -### Code blocks - -Code blocks begin with a row of three or more backticks (`) and end with a row of backticks that must be at least as long as the starting row. - -Everything between these lines is treated as code. No indentation is necessary: - -````markdown -``` -if (a > 3) { - moveShip(5 * gravity, DOWN); -} -``` -```` - -Code blocks must be separated from surrounding text by blank lines. - -If the code itself contains a row of backticks, use a longer row of tildes or backticks at the start and end: - -`````markdown -```` -``` -code including tildes -``` -```` -````` - -A shortcut form can be used for specifying the language of the code block: - -````markdown -```json -{ - "author": [], - "block-headings": true, - "colorlinks": true, - "date": "April 08, 2024", - "disable-header-and-footer": false, - "disclaimer": "This document contains business and trade secrets (essential information about Innofactor's business) and is therefore totally confidential. Confidentiality does not apply to pricing information", - "page-numbers": true, - "geometry": "a4paper,left=2.54cm,right=2.54cm,top=1.91cm,bottom=2.54cm", - "links-as-notes": true, - "listings-disable-line-numbers": false, - "listings-no-page-break": false, - "lof": false, - "logo": "/.pandoc/templates/designdoc-logo.png", - "lot": false, - "mainfont": "Carlito", - "pandoc-latex-environment": { - "warningblock": ["warning"], - "importantblock": ["important"], - "noteblock": ["note"], - "cautionblock": ["caution"], - "tipblock": ["tip"] - }, - "project": "", - "subtitle": "", - "table-use-row-colors": false, - "tables": true, - "title": "", - "titlepage": true, - "titlepage-color": "FFFFFF", - "titlepage-text-color": "5F5F5F", - "titlepage-top-cover-image": "/.pandoc/templates/designdoc-cover.png", - "toc": true, - "toc-own-page": true, - "toc-title": "Table of Contents", - "version-history": [] -} -``` -```` - -The following languages are supported: - -- abc -- actionscript -- ada -- agda -- apache -- asn1 -- asp -- ats -- awk -- bash -- bibtex -- boo -- c -- changelog -- clojure -- cmake -- coffee -- coldfusion -- comments -- commonlisp -- cpp -- cs -- css -- curry -- d -- dart -- debiancontrol -- default -- diff -- djangotemplate -- dockerfile -- dosbat -- dot -- doxygen -- doxygenlua -- dtd -- eiffel -- elixir -- elm -- email -- erlang -- fasm -- fortranfixed -- fortranfree -- fsharp -- gap -- gcc -- glsl -- gnuassembler -- go -- gpr -- graphql -- groovy -- hamlet -- haskell -- haxe -- html -- idris -- ini -- isocpp -- j -- java -- javadoc -- javascript -- javascriptreact -- json -- jsp -- julia -- kotlin -- latex -- lex -- lilypond -- literatecurry -- literatehaskell -- llvm -- lua -- m4 -- makefile -- mandoc -- markdown -- mathematica -- matlab -- maxima -- mediawiki -- metafont -- mips -- modelines -- modula2 -- modula3 -- monobasic -- mustache -- nasm -- nim -- nix -- noweb -- objectivec -- objectivecpp -- ocaml -- octave -- opencl -- orgmode -- pascal -- perl -- php -- pike -- postscript -- povray -- powershell -- prolog -- protobuf -- pure -- purebasic -- purescript -- python -- qml -- r -- raku -- relaxng -- relaxngcompact -- rest -- rhtml -- roff -- ruby -- rust -- sass -- scala -- scheme -- sci -- scss -- sed -- sgml -- sml -- spdxcomments -- sql -- sqlmysql -- sqlpostgresql -- stan -- stata -- swift -- systemverilog -- tcl -- tcsh -- texinfo -- toml -- typescript -- verilog -- vhdl -- xml -- xorg -- xslt -- xul -- yacc -- yaml -- zsh - -### Line blocks - -A line block is a sequence of lines beginning with a vertical bar (|) followed by a space. The division into lines will be preserved in the output, as will any leading spaces; otherwise, the lines will be formatted as Markdown. This is useful for verse and addresses: - -```markdown -| The limerick packs laughs anatomical -| In space that is quite economical. -| But the good ones I've seen -| So seldom are clean -| And the clean ones so seldom are comical -``` - -## Footnotes - -Footnotes use the following syntax: - -```markdown -Here is a footnote reference,[^1] and another.[^longnote] - -[^1]: Here is the footnote. -[^longnote]: Here's one with multiple blocks. - - Subsequent paragraphs are indented to show that they - belong to the previous footnote. - -This paragraph won't be part of the note, because it -isn't indented. -``` - -The identifiers in footnote references may not contain spaces, tabs, newlines, or the characters ^, [, or ]. These identifiers are used only to correlate the footnote reference with the note itself; in the output, footnotes will be numbered sequentially. - -The footnotes themselves need not be placed at the end of the document. They may appear anywhere except inside other block elements (lists, block quotes, tables, etc.). Each footnote should be separated from surrounding content (including other footnotes) by blank lines. - -Inline footnotes, unlike regular notes, cannot contain multiple paragraphs. The syntax is as follows: - -```markdown -Here is an inline note.^[Inline notes are easier to write, since -you don't have to pick an identifier and move down to type the -note.] -``` - -## Heading identifiers - -To link to a heading `# Heading identifiers in HTML` you can simply write `[Heading identifiers in HTML]`. - -## Lists - -### Task lists - -Task lists can be used with the syntax of GitHub-Flavored Markdown: - -```markdown -- [ ] an unchecked task list item -- [x] checked item -``` - -## Paragraphs - -A backslash followed by a newline is a hard line break. - -Note: in multiline table cells, this is the only way to create a hard line break, since trailing spaces in the cells are ignored. - -## Tables - -A caption may optionally be provided with tables. A caption is a paragraph beginning with the string Table: (or table: or just :), which will be stripped off. It may appear either before or after the table. - -### Multiline tables - -Multiline tables allow header and table rows to span multiple lines of text (but cells that span multiple columns or rows of the table are not supported). Here is an example: - -```markdown ------------------------------------------------------------------------------------------------------------------------------------ - Centered Default Right Left - Header Aligned Aligned Aligned ------------ ------- --------------- ----------------------------------------------------------------------------------------------- - First row 12.0 Example of a row that spans multiple lines and is really wide you know. Lets see how this goes. - This is the second line. Hooray. - - Second row 5.0 Here's another one. Note - the blank line between - rows. ------------------------------------------------------------------------------------------------------------------------------------ - -Table: Here's the caption. It, too, may span -multiple lines. -``` - -The header and table rows must each fit on one line. Column alignments are determined by the position of the header text relative to the dashed line below it: - -- The table must begin with a row of dashes, before the header text (unless the header row is omitted). -- The table must end with a row of dashes, then a blank line. -- The rows must be separated by blank lines. -- If the dashed line is flush with the header text on the right side but extends beyond it on the left, the column is right-aligned. -- If the dashed line is flush with the header text on the left side but extends beyond it on the right, the column is left-aligned. -- If the dashed line extends beyond the header text on both sides, the column is centered. -- If the dashed line is flush with the header text on both sides, the default alignment is used (in most cases, this will be left). - -In multiline tables, the table parser pays attention to the widths of the columns, and the writers try to reproduce these relative widths in the output. So, if you find that one of the columns is too narrow in the output, try widening it in the Markdown source. - -The column header row may be omitted, provided a dashed line is used to end the table. For example: - -```markdown -------- ------ ---------- ------- - 12 12 12 12 - 123 123 123 123 - 1 1 1 1 -------- ------ ---------- ------- - -: Here's a multiline table without a header. -``` - -When the header row is omitted, column alignments are determined on the basis of the first line of the table body. So, in the tables above, the columns would be right, left, center, and right aligned, respectively. - -It is possible for a multiline table to have just one row, but the row should be followed by a blank line (and then the row of dashes that ends the table). - -### Pipe tables - -Pipe tables look like this: - -```markdown -| Right | Left | Default | Center | -| ----: | :--- | -------------------------------------------------------------------------------------------------------------------------- | :----: | -| 12 | 12 | Lots of text in this cell. It will wrap but if all cells have lots of text we could be better off using a multiline table. | 12 | -| 123 | 123 | 123 | 123 | -| 1 | 1 | 1 | 1 | -``` - -The beginning and ending pipe characters are optional, but pipes are required between all columns. The colons indicate column alignment as shown. The header cannot be omitted. To simulate a headerless table, include a header with blank cells. - -Since the pipes indicate column boundaries, columns need not be vertically aligned, as they are in the above example. - -The cells of pipe tables cannot contain block elements like paragraphs and lists, and cannot span multiple lines. If any line of the Markdown source is longer than 100 characters, then the table will take up the full text width and the cell contents will wrap, with the relative cell widths determined by the number of dashes in the line separating the table header from the table body. (For example ---|- would make the first column 3/4 and the second column 1/4 of the full text width.) On the other hand, if no lines are wider than column width, then cell contents will not be wrapped, and the cells will be sized to their contents. diff --git a/test/designdoc.2.md b/test/designdoc.2.md deleted file mode 100644 index b98c95f1..00000000 --- a/test/designdoc.2.md +++ /dev/null @@ -1,218 +0,0 @@ -# Markdown tips - -## Blocks - -### Admonition blocks - -The markdown can include admonition blocks for text that need special attention. - -The following blocks are supported: **warning**, **important**, **note**, **caution**, **tip**. - -For example: - -::: warning -This text is in a warning admonition block. -::: - -::: important -This text is in a important admonition block. -::: - -::: note -This text is in a note admonition block. -::: - -::: caution -This text is in a caution admonition block. -::: - -::: tip -This text is in a tip admonition block. -::: - -### Code blocks - -Code blocks begin with a row of three or more backticks (`) and end with a row of backticks that must be at least as long as the starting row. - -Everything between these lines is treated as code. No indentation is necessary: - -``` -if (a > 3) { - moveShip(5 * gravity, DOWN); -} -``` - -Code blocks must be separated from surrounding text by blank lines. - -If the code itself contains a row of backticks, use a longer row of tildes or backticks at the start and end: - -```` -``` -code including tildes -``` -```` - -A shortcut form can be used for specifying the language of the code block: - -```json -{ - "author": [], - "block-headings": true, - "colorlinks": true, - "date": "April 08, 2024", - "disable-header-and-footer": false, - "disclaimer": "This document contains business and trade secrets (essential information about Innofactor's business) and is therefore totally confidential. Confidentiality does not apply to pricing information", - "page-numbers": true, - "geometry": "a4paper,left=2.54cm,right=2.54cm,top=1.91cm,bottom=2.54cm", - "links-as-notes": true, - "listings-disable-line-numbers": false, - "listings-no-page-break": false, - "lof": false, - "logo": "/.pandoc/templates/designdoc-logo.png", - "lot": false, - "mainfont": "Carlito", - "pandoc-latex-environment": { - "warningblock": ["warning"], - "importantblock": ["important"], - "noteblock": ["note"], - "cautionblock": ["caution"], - "tipblock": ["tip"] - }, - "project": "", - "subtitle": "", - "table-use-row-colors": false, - "tables": true, - "title": "", - "titlepage": true, - "titlepage-color": "FFFFFF", - "titlepage-text-color": "5F5F5F", - "titlepage-top-cover-image": "/.pandoc/templates/designdoc-cover.png", - "toc": true, - "toc-own-page": true, - "toc-title": "Table of Contents", - "version-history": [] -} -``` - -### Line blocks - -A line block is a sequence of lines beginning with a vertical bar (|) followed by a space. The division into lines will be preserved in the output, as will any leading spaces; otherwise, the lines will be formatted as Markdown. This is useful for verse and addresses: - -| The limerick packs laughs anatomical -| In space that is quite economical. -| But the good ones I've seen -| So seldom are clean -| And the clean ones so seldom are comical - -## Footnotes - -Footnotes use the following syntax: - -Here is a footnote reference,[^1] and another.[^longnote] - -[^1]: Here is the footnote. -[^longnote]: Here's one with multiple blocks. - - Subsequent paragraphs are indented to show that they - belong to the previous footnote. - -This paragraph won't be part of the note, because it -isn't indented. - -The identifiers in footnote references may not contain spaces, tabs, newlines, or the characters ^, [, or ]. These identifiers are used only to correlate the footnote reference with the note itself; in the output, footnotes will be numbered sequentially. - -The footnotes themselves need not be placed at the end of the document. They may appear anywhere except inside other block elements (lists, block quotes, tables, etc.). Each footnote should be separated from surrounding content (including other footnotes) by blank lines. - -Inline footnotes, unlike regular notes, cannot contain multiple paragraphs. The syntax is as follows: - -Here is an inline note.^[Inline notes are easier to write, since -you don't have to pick an identifier and move down to type the -note.] - -## Heading identifiers - -To link to a heading `# Footnotes` you can simply write [Footnotes]. - -## Images - -![Image text](/.pandoc/templates/designdoc-logo.png){ width=50% } - -## Lists - -### Task lists - -Task lists can be used with the syntax of GitHub-Flavored Markdown: - -- [ ] an unchecked task list item -- [x] checked item - -## Paragraphs - -A backslash followed by a newline is a hard line break. - -Note: in multiline table cells, this is the only way to create a hard line break, since trailing spaces in the cells are ignored. - -## Tables - -A caption may optionally be provided with tables. A caption is a paragraph beginning with the string Table: (or table: or just :), which will be stripped off. It may appear either before or after the table. - -### Multiline tables - -Multiline tables allow header and table rows to span multiple lines of text (but cells that span multiple columns or rows of the table are not supported). Here is an example: - ------------------------------------------------------------------------------------------------------------------------------------ - Centered Default Right Left - Header Aligned Aligned Aligned ------------ ------- --------------- ----------------------------------------------------------------------------------------------- - First row 12.0 Example of a row that spans multiple lines and is really wide you know. Lets see how this goes. - This is the second line. Hooray. - - Second row 5.0 Here's another one. Note - the blank line between - rows. ------------------------------------------------------------------------------------------------------------------------------------ - -Table: Here's the caption. It, too, may span -multiple lines. - -The header and table rows must each fit on one line. Column alignments are determined by the position of the header text relative to the dashed line below it: - -- The table must begin with a row of dashes, before the header text (unless the header row is omitted). -- The table must end with a row of dashes, then a blank line. -- The rows must be separated by blank lines. -- If the dashed line is flush with the header text on the right side but extends beyond it on the left, the column is right-aligned. -- If the dashed line is flush with the header text on the left side but extends beyond it on the right, the column is left-aligned. -- If the dashed line extends beyond the header text on both sides, the column is centered. -- If the dashed line is flush with the header text on both sides, the default alignment is used (in most cases, this will be left). - -In multiline tables, the table parser pays attention to the widths of the columns, and the writers try to reproduce these relative widths in the output. So, if you find that one of the columns is too narrow in the output, try widening it in the Markdown source. - -The column header row may be omitted, provided a dashed line is used to end the table. For example: - -------- ------ ---------- ------- - 12 12 12 12 - 123 123 123 123 - 1 1 1 1 -------- ------ ---------- ------- - -: Here's a multiline table without a header. - -When the header row is omitted, column alignments are determined on the basis of the first line of the table body. So, in the tables above, the columns would be right, left, center, and right aligned, respectively. - -It is possible for a multiline table to have just one row, but the row should be followed by a blank line (and then the row of dashes that ends the table). - -### Pipe tables - -Pipe tables look like this: - -| Right | Left | Default | Center | -| ----: | :--- | -------------------------------------------------------------------------------------------------------------------------- | :----: | -| 12 | 12 | Lots of text in this cell. It will wrap but if all cells have lots of text we could be better off using a multiline table. | 12 | -| 123 | 123 | 123 | 123 | -| 1 | 1 | 1 | 1 | - -The beginning and ending pipe characters are optional, but pipes are required between all columns. The colons indicate column alignment as shown. The header cannot be omitted. To simulate a headerless table, include a header with blank cells. - -Since the pipes indicate column boundaries, columns need not be vertically aligned, as they are in the above example. - -The cells of pipe tables cannot contain block elements like paragraphs and lists, and cannot span multiple lines. If any line of the Markdown source is longer than 100 characters, then the table will take up the full text width and the cell contents will wrap, with the relative cell widths determined by the number of dashes in the line separating the table header from the table body. (For example ---|- would make the first column 3/4 and the second column 1/4 of the full text width.) On the other hand, if no lines are wider than column width, then cell contents will not be wrapped, and the cells will be sized to their contents. diff --git a/test/designdoc.order b/test/designdoc.order deleted file mode 100644 index c97b95ad..00000000 --- a/test/designdoc.order +++ /dev/null @@ -1,5 +0,0 @@ -# demo file 1 -designdoc.1.md - -# demo file 2 -designdoc.2.md diff --git a/tools/convert.sh b/tools/convert.sh deleted file mode 100644 index a110bf28..00000000 --- a/tools/convert.sh +++ /dev/null @@ -1,477 +0,0 @@ -#!/usr/bin/env sh -# shellcheck disable=SC3043 -set -e -error() { - local line="${1}" - local message="${2}" - if [ $# -gt 2 ]; then - local code="${3}" - else - local code=-1 - fi - local line_message="" - if [ "$line" != '' ]; then - line_message=" on or near line ${line}" - fi - if test -n "${message}"; then - message="${message} (exit code ${code})" - else - message="Unspecified (exit code ${code})" - fi - command printf '\033[1;31mError%s\033[0m: %s\n' "${line_message}" "${message}" 1>&2 - exit "${code}" -} -warning() { - command printf '\033[1;33mWarning\033[0m: %s\n' "$1" 1>&2 -} -info() { - currentTime=$(date "+%Y-%m-%d %T") - if [ $# -gt 1 ]; then - command printf '\033[36m%14s\033[0m %s\n' "${currentTime} ${1}" "${2}" 1>&2 - else - command printf '\033[36m%s\033[0m\n' "${currentTime} ${1}" 1>&2 - fi -} -get_param_shifts() { - if [ "${1%%=*}" = "$1" ]; then - printf 2 - else - printf 1 - fi -} -set_param_value() { - ARG="${1%%=*}" - if [ "${ARG}" = "$1" ]; then - shift - if [ -z "$1" ]; then - >&2 echo "You must specify a value for property ${ARG}" - return 1 - fi - VALUE="$1" - else - VALUE="${1#*=}" - fi - shift -} -set_InputContent() { - local FILE NAME FOLDER CONTENT ITEMS="$#" - while [ "$#" -gt 0 ]; do - case "${1}" in - *) - FILE="${1}" - shift - if [ "$(printf '%s' "${FILE}" | tail -c 3)" = '.md' ]; then - FOLDER=$(dirname "$FILE") - NAME=$(basename "$FILE") - # Get content from file and replace relative links with full links - CONTENT=$( - printf '%s' "$(sed \ - -e "s|\(\[.*\](\)\(\../\)\(.*)\)|\1${FOLDER}/\2\3|g" \ - -e "s|\(\[.*\](\)\(\./\)\(.*)\)|\1${FOLDER}/\3|g" \ - -e "s|\(\[.*\](\)\(asset\)\(.*)\)|\1${FOLDER}/\2\3|g" \ - -e "s|\(\[.*\](\)\(attach\)\(.*)\)|\1${FOLDER}/\2\3|g" \ - -e "s|\(\[.*\](\)\(image\)\(.*)\)|\1${FOLDER}/\2\3|g" \ - -e "s|\(\[.*\](\)\(\.\)\(.*)\)|\1${FOLDER}/\2\3|g" \ - "${FILE}")" - ) - if test -n "${CONTENT}"; then - if [ "${ITEMS}" -gt 1 ]; then - info "${NAME} has ${#CONTENT} characters" - fi - if test -z "${InputContent}"; then - InputContent=$(printf '%s\n' "${CONTENT}") - else - InputContent=$(printf '%s\n\n%s\n' "${InputContent}" "${CONTENT}") - fi - fi - fi - ;; - esac - done -} -set_InputList() { - local FILE - while [ "$#" -gt 0 ]; do - case "${1}" in - *) - FILE="${1}" - shift - if ! test -f "${FILE}"; then - error '' "Unable to find ${FILE}" 1 - fi - if [ "$(printf '%s' "${FILE}" | tail -c 6)" = '.order' ]; then - OrderList="${OrderList}$(printf '%s\n' "$(sed \ - -e '/^#/d' \ - -e '/^[[:space:]]*$/d' \ - "${FILE}")" | tr '\n' ' ' | tr -d '\r') " - else - case "${InputList}" in - *${FILE}*) ;; # skip file if already in list - *) InputList="${InputList}$(readlink -f "${FILE}") " ;; - esac - fi - # If InputPath is not set - if test -z "${InputPath}"; then - # Set InputPath to the path of first file - InputPath=$(dirname "$(readlink -f "${FILE}")") - fi - ;; - esac - done -} -set_metadataChangeHistory() { - local historyFilePath lineCount historyJson mergeLogs tmp - local author authors date description line version versionHistory - # If metadata file has version-history key - if [ "$(jq 'has("version-history")' "${MetadataFile}")" = 'true' ]; then - info 'Get version history' - # If a history file is specified - if test -n "${HistoryFile}"; then - # Get full path to history file - historyFilePath=$(readlink -f "${HistoryFile}") - if ! test -f "${historyFilePath}"; then - error '' "Unable to find history file ${HistoryFile}" 1 - fi - # Get mergeLogs from history file - mergeLogs=$(cat "${historyFilePath}") - elif [ "${SkipGitHistory}" != 'true' ]; then - # If GitLogLimit is not specified - if [ "${GitLogLimit}" = '' ]; then - # Default to 15 entries - GitLogLimit=15 - fi - # Get mergeLogs from git log - mergeLogs=$( - git --no-pager log "-${GitLogLimit}" --date-order --date=format:'%b %e, %Y' \ - --no-merges --oneline --pretty=format:'%D|%ad|%an|%s' "${InputPath}" - ) - fi - # If mergeLogs is not empty - if test -n "${mergeLogs}"; then - # Count the log lines - lineCount=$(echo "${mergeLogs}" | wc -l) - historyJson='[]' - tmp=$(mktemp) - # Read log lines - printf '%s\n' "${mergeLogs}" | while read -r line; do - # Reduse line count by 1 - lineCount=$((lineCount-1)) - # Get version from log line - version=$(echo "${line}" | cut -d'|' -f1 | rev | cut -d'/' -f1 | rev) - # If version is empty or not a version - if test -z "${version}" || ! echo "${version}" | grep -Eq '^[0-9].*'; then - # Use version 1.0. + line count - version="1.0.${lineCount}" - fi - # Get date from log line - date=$(echo "${line}" | cut -d'|' -f2) - # Get author from log line - author=$(echo "${line}" | cut -d'|' -f3) - # Get description from log line - description=$(echo "${line}" | cut -d'|' -f4) - # If temp file has content - if test -s "${tmp}"; then - # Put that content into variable - historyJson=$(jq '.' "${tmp}") - fi - # Add data from log line to temp file - printf '%s\n' "${historyJson}" | jq \ - --arg version "${version}" \ - --arg date "${date}" \ - --arg author "${author}" \ - --arg description "${description}" \ - '. +=[{ version: $version, date: $date, author: $author, description: $description }]' > "${tmp}" - done - elif test -n "${MainAuthor}" && test -n "${FirstChangeDescription}"; then - # Add default values to temp file - printf '%s\n' '[]' | jq \ - --arg version '1.0.0' \ - --arg date "$(date "+%B %d, %Y")" \ - --arg author "${MainAuthor}" \ - --arg description "${FirstChangeDescription}" \ - '. +=[{ version: $version, date: $date, author: $author, description: $description }]' > "${tmp}" - fi - # If temp file has content - if test -s "${tmp}"; then - versionHistory=$(jq -c '.' "${tmp}") - set_metadataField version-history "${versionHistory}" - if [ "$(jq 'has("author")' "${MetadataFile}")" = 'true' ]; then - authors="[$(echo "${versionHistory}" | jq '.[].author' | uniq | sed ':a; N; $!ba; s/\n/,/g')]" - set_metadataField author "${authors}" - fi - fi - rm -f "${tmp}" - fi -} -set_metadataField() { - local tmp - # If metadata file has key - if [ "$(jq --arg k "${1}" 'has($k)' "${MetadataFile}")" = 'true' ]; then - # Create a tmp file - tmp=$(mktemp) - # Set the key value and write to tmp file - if [ "$(echo "${2}" | cut -c1)" = '[' ]; then - jq --arg k "${1}" --argjson v "${2}" '.[$k] = $v' "${MetadataFile}" > "${tmp}" - else - jq --arg k "${1}" --arg v "${2}" '.[$k] = $v' "${MetadataFile}" > "${tmp}" - fi - # Replace metadata file with tmp file - mv -f "${tmp}" "${MetadataFile}" - fi -} -set_metadataImage() { - local newPath tmp - if test -n "${InputPath}" && test -f "${InputPath}/${Template}-${1}.png"; then - # Image file exist in input files folder and is prefixed with template name - newPath="${InputPath}/${Template}-${1}.png" - elif test -n "${InputPath}" && test -f "${InputPath}/${1}.png"; then - # Image file exist in input files folder - newPath="${InputPath}/${1}.png" - elif test -f "${TemplatePath}/${Template}-${1}.png"; then - # Image file exist in template folder and is prefixed with template name - newPath="${TemplatePath}/${Template}-${1}.png" - elif test -f "${TemplatePath}/${1}.png"; then - # Image file exist in template folder - newPath="${TemplatePath}/${1}.png" - fi - if test -n "${newPath}" && [ "${newPath}" != "/.pandoc/templates/designdoc-${1}.png" ]; then - # Create a tmp file - tmp=$(mktemp) - # Set the image key value - jq --arg k "${2}" --arg l "${newPath}" '.[$k] = $l' "${MetadataFile}" > "${tmp}" - # Replace metadata file with tmp file - mv -f "${tmp}" "${MetadataFile}" - fi -} -process_params() { - local VALUE ARG POSITIONAL_SHIFTS=0 - while [ "$#" -gt "$POSITIONAL_SHIFTS" ]; do - case "${1%%=*}" in - --author) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - MainAuthor="$VALUE" - ;; - --description) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - FirstChangeDescription="$VALUE" - ;; - --git-log-limit) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - GitLogLimit="$VALUE" - ;; - --history-file) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - HistoryFile="$VALUE" - ;; - --input-files) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - InputFiles="$VALUE" - ;; - -o|--output) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - OutputFile="$VALUE" - ;; - --project) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - Project="$VALUE" - ;; - --replace-file) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - ReplaceFile="$VALUE" - ;; - --skip-git-history) - shift - SkipGitHistory='true' - ;; - --subtitle) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - Subtitle="$VALUE" - ;; - --template) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - Template="$VALUE" - ;; - --title) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - Title="$VALUE" - ;; - --ascii|--bash-completion|--biblatex|-C|--citeproc|--dump-args| \ - --embed-resources|--epub-title-page|--fail-if-warnings|--file-scope| \ - --gladtex|-h|--help|--html-q-tags|-i|--ignore-args|--incremental| \ - --katex|--list-extensions|--list-highlight-languages| \ - --list-highlight-styles|--list-input-formats|--list-output-formats| \ - --list-tables|--listings|--mathml|-N|--natbib|--no-check-certificate| \ - --no-highlight|--number-sections|-p|--preserve-tabs|--reference-links| \ - -s|--sandbox|--section-divs--self-contained|--standalone| \ - --strip-comments|--table-of-contents|--toc|--trace|-v|--verbose| \ - --version|--webtex|--quiet) - ARG="${1}" - shift - PandocOptions="${PandocOptions}${ARG} " - ;; - -*) - set_param_value "$@" - shift "$(get_param_shifts "$@")" - PandocOptions="${PandocOptions}${ARG}=${VALUE} " - ;; - *) - VALUE="$1" - shift - set -- "$@" "$VALUE" - POSITIONAL_SHIFTS="$((POSITIONAL_SHIFTS+1))" - PositionalInput="${PositionalInput}${VALUE} " - ;; - esac - done -} -# Process script arguments and options -process_params "$@" -PandocOptions=$(echo "${PandocOptions}" | xargs) -# If InputFiles was not set with option --input-files -if test -z "${InputFiles}"; then - # Get InputFiles from positional script arguments - InputFiles=$(echo "${PositionalInput}" | xargs) -fi -if test -z "${InputFiles}"; then - error '' 'Missing input files. Value not set for option --input-files' 1 -fi -# Process input files (can be more than one and be in .order file) -# Disable SC2086 because word splitting is intended -# shellcheck disable=SC2086 -set_InputList $InputFiles -# If using .order file(s) -if test -n "${OrderList}"; then - # Process input files in the .order files - # Note: if mixing both .order files and other files, the other files - # will be added to the final input before the files in the .order files - # Disable SC2086 because word splitting is intended - # shellcheck disable=SC2086 - set_InputList $OrderList -fi -if test -z "${InputList}"; then - error '' "Unable to find input: ${InputFiles}" 1 -fi -# Merge markdown files into one InputContent variable -# Disable SC2086 because word splitting is intended -# shellcheck disable=SC2086 -set_InputContent $InputList -# If the output file is a markdown file -if [ "$(printf '%s' "${OutputFile}" | tail -c 3)" = '.md' ]; then - # Set input file the same as output file - PandocInput="${OutputFile}" -elif test -n "${InputContent}"; then - # Ensure PandocInput ends with .md and strip away existing file extension - PandocInput="$(echo "$OutputFile" | sed 's|\(.*\)\..*|\1|')_input.md" - # Write markdown content to file - printf '%s\n' "${InputContent}" > "${PandocInput}" -else - # Use the input list as it is - PandocInput=$InputList -fi -# If the input is markdown content -if test -n "${InputContent}"; then - # If a replace file is specified - if test -n "${ReplaceFile}"; then - ReplaceFilePath=$(readlink -f "${ReplaceFile}") - if ! test -f "${ReplaceFilePath}"; then - error '' "Unable to find replace file ${ReplaceFile}" 1 - fi - # Read content of replace json file into tab separated key value list - tab_values=$(jq -r 'to_entries[] | [.key, .value] | @tsv' "${ReplaceFilePath}") - # Read each line in the tab separated key value list into key and value variable - printf '%s\n' "${tab_values}" | while IFS="$(printf '\t')" read -r key value; do - # If pandoc input contains key - if [ "${InputContent#*"${key}"}" != "${InputContent}" ]; then - info "input: replace '${key}' with '${value}'" - # Replace key with value in InputContent (inline) - sed -i -e "s/${key}/${value}/g" "${PandocInput}" - fi - done - # Update InputContent from file - InputContent=$(cat "${PandocInput}") - fi - if ! test -s "${PandocInput}"; then - error '' "No content found in ${PandocInput}!" 1 - fi - info "Found ${#InputContent} characters in pandoc input" -fi -# If template is specified -if test -n "${Template}"; then - # Get template path - case "${Template}" in - designdoc) - TemplateFile='/.pandoc/templates/designdoc.tex' - TemplatePath='/.pandoc/templates' - ;; - eisvogel) - TemplateFile='/.pandoc/templates/eisvogel.latex' - TemplatePath='/.pandoc/templates' - ;; - *) - TemplateFile=$(readlink -f "${Template}") - TemplatePath=$(dirname "${TemplateFile}") - ;; - esac - # If template is not found - if ! test -f "${TemplateFile}"; then - error '' "Unable to find template ${Template}" 1 - fi -fi -# Get metadata file path -if test -n "${InputPath}" && test -f "${InputPath}/${Template}-metadata.json"; then - # Metadata file exist in input files folder and is prefixed with template name - MetadataFile="${InputPath}/${Template}-metadata.json" -elif test -n "${InputPath}" && test -f "${InputPath}/metadata.json"; then - # Metadata file exist in input files folder - MetadataFile="${InputPath}/metadata.json" -elif test -f "${TemplatePath}/${Template}-metadata.json"; then - # Metadata file exist in template folder and is prefixed with template name - MetadataFile="${TemplatePath}/${Template}-metadata.json" -elif test -f "${TemplatePath}/metadata.json"; then - # Metadata file exist in template folder - MetadataFile="${TemplatePath}/metadata.json" -elif [ "${Template}" = 'designdoc' ]; then - # Use default metadata file for designdoc template - MetadataFile='/.pandoc/templates/designdoc-metadata.json' -fi -# If a metadata file is specified -if test -n "${MetadataFile}"; then - # Update metadata file - set_metadataField date "$(date "+%B %d, %Y")" - set_metadataField project "${Project}" - set_metadataField subtitle "${Subtitle}" - set_metadataField title "${Title}" - # If using default metadata file for designdoc template - if [ "${MetadataFile}" = '/.pandoc/templates/designdoc-metadata.json' ]; then - # Update path to images - set_metadataImage logo logo - set_metadataImage cover titlepage-top-cover-image - fi - # Update change history - set_metadataChangeHistory - PandocOptions="${PandocOptions} --metadata-file=${MetadataFile}" -fi -PandocOptions="${PandocOptions} --template=${TemplateFile}" -PandocOptions="${PandocOptions} --output=${OutputFile}" -info "Running: pandoc ${PandocOptions} ${PandocInput}" -# Disable SC2086 because word splitting is intended -# shellcheck disable=SC2086 -/usr/local/bin/pandoc ${PandocOptions} ${PandocInput} -if ! test -f "${OutputFile}"; then - error '' "Failed to create ${OutputFile}" 1 -else - # Calculate output file size - size=$(($(stat -c '%s' "${OutputFile}") / 1000)) - info "Created ${OutputFile} (${size} KB)" -fi