From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- .../contrib/genealogytree/gtrcore.node.code.tex | 1305 ++++++++++++++++++++ 1 file changed, 1305 insertions(+) create mode 100644 macros/latex/contrib/genealogytree/gtrcore.node.code.tex (limited to 'macros/latex/contrib/genealogytree/gtrcore.node.code.tex') diff --git a/macros/latex/contrib/genealogytree/gtrcore.node.code.tex b/macros/latex/contrib/genealogytree/gtrcore.node.code.tex new file mode 100644 index 0000000000..e7af7f9fe9 --- /dev/null +++ b/macros/latex/contrib/genealogytree/gtrcore.node.code.tex @@ -0,0 +1,1305 @@ +%% The LaTeX package genealogytree - version 1.32 (2019/04/08) +%% gtrcore.node.code.tex: Node Boxes +%% +%% ------------------------------------------------------------------------------------------- +%% Copyright (c) 2013-2019 by Prof. Dr. Dr. Thomas F. Sturm +%% ------------------------------------------------------------------------------------------- +%% +%% 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 `author-maintained'. +%% +%% This work consists of all files listed in README +%% +\gtr@set@library@version{1.32} + +%%%%%%%%%%%%%% +% Processors % + +\gtrset{% + setNodeDimensionsFit/.code={\tcbset{% + gtrNodeDimensions/.style={% + width=\gtrNodeMinWidth, + fit width plus=\dimexpr\gtrNodeMaxWidth-\gtrNodeMinWidth\relax, + height=\gtrNodeMinHeight, + fit height plus=\dimexpr\gtrNodeMaxHeight-\gtrNodeMinHeight\relax},% + gtrNodeDimensionsLandscape/.style={% + height=\gtrNodeMinWidth, + fit height plus=\dimexpr\gtrNodeMaxWidth-\gtrNodeMinWidth\relax, + width=\gtrNodeMinHeight, + fit width plus=\dimexpr\gtrNodeMaxHeight-\gtrNodeMinHeight\relax}}% + },% + setNodeDimensionsTColorBox/.code={\tcbset{% + gtrNodeDimensions/.style={% + width=\gtrNodeMinWidth, + height=\gtrNodeMinHeight, + height plus=\dimexpr\gtrNodeMaxHeight-\gtrNodeMinHeight\relax},% + gtrNodeDimensionsLandscape/.style={% + height=\gtrNodeMinWidth, + height plus=\dimexpr\gtrNodeMaxWidth-\gtrNodeMinWidth\relax, + width=\gtrNodeMinHeight}}% + },% + setNodeDimensionsTCBox/.code={\tcbset{% + gtrNodeDimensions/.style={% + height=\gtrNodeMinHeight, + height plus=\dimexpr\gtrNodeMaxHeight-\gtrNodeMinHeight\relax},% + gtrNodeDimensionsLandscape/.style={% + height=\gtrNodeMinWidth, + height plus=\dimexpr\gtrNodeMaxWidth-\gtrNodeMinWidth\relax}}% + },% + setNodeDimensionsTikz/.code={\tikzset{% + gtrNodeDimensions/.style={% + minimum width=\gtrNodeMinWidth, + minimum height=\gtrNodeMinHeight},% + gtrNodeDimensionsLandscape/.style={% + minimum width=\gtrNodeMinHeight, + minimum height=\gtrNodeMinWidth}}% + }, +} + + +\gtrset{processing/fit/.style={% + no content interpreter, + node processor=\gtr@boxcontent@fit, + setNodeDimensionsFit +}} +\newcommand{\gtr@boxcontent@fit}{% + \edef\gtr@current@fontsize{\f@size pt}% + \tcboxfit[% + gtrNodeDimensions, + enhanced,clip upper, + hyphenationfix,nobeforeafter,boxsep=1pt, + fit basedim=\gtr@current@fontsize,fit skip=1.05, + top=0.2\tcbfitdim,bottom=0.2\tcbfitdim, + left=0.2\tcbfitdim,right=0.2\tcbfitdim, + middle=0.2\tcbfitdim, + fit fontsize macros,fonttitle=\normalsize, + code={\pgfkeysalsofrom{\gtrNodeBoxOptions}} + ]{\gtrBoxContent}% +} + + +\gtrset{processing/tcolorbox/.style={% + no content interpreter, + node processor=\gtr@boxcontent@tcolorbox, + setNodeDimensionsTColorBox +}} +\newcommand{\gtr@boxcontent@tcolorbox}{% + \begin{tcolorbox}[% + gtrNodeDimensions,enhanced,hyphenationfix,nobeforeafter, + code={\pgfkeysalsofrom{\gtrNodeBoxOptions}} + ]% + \gtrBoxContent% + \end{tcolorbox}% +} + + +\gtrset{processing/tcbox/.style={% + no content interpreter, + node processor=\gtr@boxcontent@tcbox, + setNodeDimensionsTCBox +}} +\newcommand{\gtr@boxcontent@tcbox}{% + \tcbox[% + enhanced,clip upper,hyphenationfix,nobeforeafter, + code={\pgfkeysalsofrom{\gtrNodeBoxOptions}} + ]{\gtrBoxContent}% +} + +\gtrset{processing/tcbox*/.style={% + no content interpreter, + node processor=\gtr@boxcontent@tcboxstar, + setNodeDimensionsTColorBox +}} +\newcommand{\gtr@boxcontent@tcboxstar}{% + \tcbox[% + gtrNodeDimensions,enhanced,clip upper,hyphenationfix,nobeforeafter, + valign=center,tcbox width=minimum center, + code={\pgfkeysalsofrom{\gtrNodeBoxOptions}} + ]{\gtrBoxContent}% +} + +\tikzset{gtr@set@boxoptions/.code={\pgfkeysalsofrom{\gtrNodeBoxOptions}}} +\gtrset{processing/tikznode/.style={% + no content interpreter, + node processor=\gtr@boxcontent@tikznode, + setNodeDimensionsTikz +}} +\newcommand{\gtr@boxcontent@tikznode}{% + \tikz\node[outer sep=0pt,gtr@set@boxoptions]{\gtrBoxContent};% +} + + +\gtrset{processing/database/.style={% + database content interpreter, + node processor=\gtr@boxcontent@fit, + setNodeDimensionsFit, +}} + + +\gtrset{ + content interpreter/.store in=\gtr@box@content@interpreter, + content interpreter code/.code={\long\def\gtr@box@content@interpreter##1{#1}}, + content interpreter content/.style={content interpreter code={\long\def\gtrBoxContent{#1}}}, + no content interpreter/.style={content interpreter content={##1}}, + deletion content interpreter/.style={content interpreter content=}, + database content interpreter/.style={content interpreter code={% + \gtrset{database/.cd,db@reset,##1}% + \gtrOptionsDatabase% + \let\gtrBoxContent\gtrPrintDatabase% + }}, + id content interpreter/.style={content interpreter code={% + \gtrset{id=##1,code={\gtr@key@keysalsofrom{/gtr/nopt/\gtr@gkv@id}}}% + \long\def\gtrBoxContent{##1}% + }}, + content interpreter id and content/.style 2 args={% + content interpreter code={% + \long\def\gtrBoxContent{#2}% + \begingroup\edef\x{\endgroup\noexpand\gtrset{id=#1}}\x% + \gtrset{code={\gtr@key@keysalsofrom{/gtr/nopt/\gtr@gkv@id}}}% + }% + }, +} + + +%%%%%%%%%%%%%%%%% +% Database Keys % + +\gtrset{% + database unknown key/.is choice, + database unknown key/ignore/.style={database/.unknown/.code=}, + database unknown key/save/.style={database/.unknown/.style={% + save/\pgfkeyscurrentname/.initial={##1}% + }}, + database unknown key/warn/.style={database/.unknown/.code={% + \gtr@warning{The database key '\pgfkeyscurrentname' is unknown}% + }}, + database unknown key/error/.style={database/.unknown/.code={% + \gtr@error{The database key '\pgfkeyscurrentname' is unknown}{% + Perhaps you misspelled it or forgot to define a code for it.}% + }}, + database unknown key=warn, + image prefix/.store in=\gtr@image@prefix, + image prefix=, + database/image/.code={% + \begingroup\edef\x{\endgroup\noexpand\def\noexpand\gtrDBimage{\expandonce{\gtr@image@prefix}\unexpanded{#1}}}% + \x% + \ifundef{\gtrDBimageopt}{\let\gtrDBimageopt\@empty}{}% + }, +} + +\def\gtr@db@new@store#1{% + \begingroup\edef\x{\endgroup\noexpand\gtrset{database/#1/.store in=\expandonce{\csname gtrDB#1\endcsname}}}% + \x% +} + +\gtr@db@new@store{name} +\gtr@db@new@store{shortname} +\gtr@db@new@store{comment} +\gtr@db@new@store{profession} +\gtr@db@new@store{sex} +\gtr@db@new@store{uuid} +\gtr@db@new@store{kekule} +\gtr@db@new@store{relationship} +\gtr@db@new@store{imageopt} + +\def\gtr@db@new@event@store#1{% + \begingroup\edef\x{\endgroup\noexpand\gtrset{% + database/#1+/.code n args={3}{% + \noexpand\gtrParseDate{#1}{\unexpanded{##1}}% + \noexpand\def\expandonce{\csname gtrDB#1place\endcsname}{\unexpanded{##2}}% + \noexpand\def\expandonce{\csname gtrDB#1mod\endcsname}{\unexpanded{##3}}},% + database/#1/.style 2 args={#1+={\unexpanded{##1}}{\unexpanded{##2}}{}},% + database/#1-/.style={#1+={\unexpanded{##1}}{}{}},% + }}% + \x% +} + +\gtr@db@new@event@store{birth}% +\gtr@db@new@event@store{baptism}% +\gtr@db@new@event@store{engagement}% +\gtr@db@new@event@store{marriage}% +\gtr@db@new@event@store{divorce}% +\gtr@db@new@event@store{floruit}% +\gtr@db@new@event@store{death}% +\gtr@db@new@event@store{burial}% + +\gtrset{% + database/.cd, + male/.style={sex=male}, + female/.style={sex=female}, + neuter/.style={sex=neuter}, + viewport/.style={imageopt={viewport=#1,clip}}, + db@reset/.style={name=,shortname=,sex=neuter}, +} + +\tcbset{% + male/.style={colframe=blue}, + female/.style={colframe=red}, + neuter/.style={}, + if image defined/.code 2 args={\gtrifimagedefined{\tcbset{#1}}{\tcbset{#2}}}, +} + +\gtrset{ + event prefix/.cd, + birth/.initial=\gtrsymBorn, + birth/out of wedlock/.initial=\gtrsymBornoutofwedlock, + birth/stillborn/.initial=\gtrsymStillborn, + birth/died/.initial=\gtrsymDiedonbirthday, + baptism/.initial=\gtrsymBaptized, + engagement/.initial=\gtrsymEngaged, + marriage/.initial=\gtrsymMarried, + marriage/other/.initial=\gtrsymPartnership, + divorce/.initial=\gtrsymDivorced, + floruit/.initial=\gtrsymFloruit, + death/.initial=\gtrsymDied, + death/killed/.initial=\gtrsymKilled, + burial/.initial=\gtrsymBuried, + burial/cremated/.initial=\gtrsymFuneralurn, +} + +\gtrset{ + sex@/female/.code=\gtrsymFemale, + sex@/f/.code=\gtrsymFemale, + sex@/male/.code=\gtrsymMale, + sex@/m/.code=\gtrsymMale, + sex@/neuter/.code=\gtrsymNeuter, + sex@/n/.code=\gtrsymNeuter, + sex@/.unknown/.code=\gtrsymNeuter, +} + +\def\gtrPrintEventPrefix#1{% + \letcs\gtr@temp{gtrDB#1mod}% + \ifdefvoid{\gtr@temp}{% + \pgfkeysvalueof{/gtr/event prefix/#1}% + }{% + \pgfkeysvalueof{/gtr/event prefix/#1/\gtr@temp}% + }% +} + +\def\gtrDBsex{neuter} + +\def\gtriffemale#1#2{% + \ifdefstring{\gtrDBsex}{female}{#1}{#2}% +} + +\def\gtrifmale#1#2{% + \ifdefstring{\gtrDBsex}{male}{#1}{#2}% +} + +\def\gtrPrintSex{\gtrset{sex@/\gtrDBsex}} + + +%%%%%%%%% +% Names % + +\let\pref=\textit +\let\surn=\textsc +\def\nick#1{``#1''} + +\def\gtrPrintName@full{{% + \hspace{0pt}% + \ifdefvoid{\gtrDBname}{% + \ifdefvoid{\gtrDBshortname}{% + \gtrkv@namefont\gtr@emptynametext% + }{% + \gtrkv@namefont\gtrDBshortname% + }% + }{% + \gtrkv@namefont\gtrDBname% + }% +}} + + +\def\gtrPrintName@short{{% + \hspace{0pt}% + \ifdefvoid{\gtrDBshortname}{% + \ifdefvoid{\gtrDBname}{% + \gtrkv@namefont\gtr@emptynametext% + }{% + \gtrkv@namefont\gtrDBname% + }% + }{% + \gtrkv@namefont\gtrDBshortname% + }% +}} + +\gtrset{% + name/.is choice, + name/full/.code={\let\gtrPrintName\gtrPrintName@full}, + name/short/.code={\let\gtrPrintName\gtrPrintName@short}, + name font/.store in=\gtrkv@namefont, + name code/.code={\def\gtrPrintName{#1}}, + pref code/.code={\def\pref##1{#1}}, + surn code/.code={\def\surn##1{#1}}, + nick code/.code={\def\nick##1{#1}}, + empty name text/.store in=\gtr@emptynametext, +} + +\gtrset{% + name=full, + name font=, + empty name text=??, +} + + +%%%%%%%%%% +% Events % + +\def\gtrlistseparator{} + +\newenvironment{gtrprintlist}[4]{% + \def\gtrlistseparatorfinal{#4}% + \def\gtrlistseparator{#1\def\gtrlistseparator{#2}\def\gtrlistseparatorfinal{#3}}% +}{\gtrlistseparatorfinal} + +\newenvironment{gtreventlist}{}{} +\newenvironment{gtrinfolist}{}{} + +\gtrset{% + database format/.is choice, + list separators/.code n args={4}{\renewenvironment{gtreventlist}{\begin{gtrprintlist}{#1}{#2}{#3}{#4}}{\end{gtrprintlist}}}, + list separators hang/.style={list separators={\par\hangindent=#1\hangafter=1}% + {\par\hangindent=#1\hangafter=1}{\par}{\par}}, + list separators hang/.default=\tcbfitdim, + list separators={\par}{\par}{\par}{\par}, + info separators/.code n args={4}{\renewenvironment{gtrinfolist}{\begin{gtrprintlist}{#1}{#2}{#3}{#4}}{\end{gtrprintlist}}}, + info separators={\par}{. }{.}{}, +} + +\newcommand{\gtrDeclareDatabaseFormat}[3]{% + \csdef{gtrOptionsDatabase@#1}{#2}% + \csdef{gtrPrintDatabase@#1}{#3}% + \begingroup\edef\x{\endgroup\noexpand\gtrset{database format/#1/.code={% + \noexpand\letcs{\noexpand\gtrOptionsDatabase}{gtrOptionsDatabase@#1}% + \noexpand\letcs{\noexpand\gtrPrintDatabase}{gtrPrintDatabase@#1}% + }}}% + \x% +} + +\def\gtr@list@event#1{\gtrifeventdefined{#1}{\gtrlistseparator\hspace{0pt}\gtrPrintEvent{#1}}{}} + +\def\gtr@print@infolist{% + \begin{gtrinfolist}% + \gtrifprofessiondefined{\gtrlistseparator\gtrPrintProfession}{}% + \gtrifcommentdefined{\gtrlistseparator\gtrPrintComment}{}% + \end{gtrinfolist}% +} + +\gtrDeclareDatabaseFormat{full}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event{birth}% + \gtr@list@event{baptism}% + \gtr@list@event{engagement}% + \gtr@list@event{marriage}% + \gtr@list@event{divorce}% + \gtr@list@event{floruit}% + \gtr@list@event{death}% + \gtr@list@event{burial}% + \end{gtreventlist}% + \gtr@print@infolist% +} + +\def\gtr@ifmarriagedefined#1#2{% + \gtrifeventdefined{marriage}{#1}{% + \gtrifeventdefined{engagement}{#1}{% + \gtrifeventdefined{divorce}{#1}{#2}% + }% + }% +} + +\gtrDeclareDatabaseFormat{full marriage above}{}{% + \gtr@ifmarriagedefined{% + \begin{gtreventlist}% + \gtr@list@event{engagement}% + \gtr@list@event{marriage}% + \gtr@list@event{divorce}% + \end{gtreventlist}\tcbline% + }{}% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event{birth}% + \gtr@list@event{baptism}% + \gtr@list@event{floruit}% + \gtr@list@event{death}% + \gtr@list@event{burial}% + \end{gtreventlist}% + \gtr@print@infolist% +} + +\gtrDeclareDatabaseFormat{full marriage below}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event{birth}% + \gtr@list@event{baptism}% + \gtr@list@event{floruit}% + \gtr@list@event{death}% + \gtr@list@event{burial}% + \end{gtreventlist}% + \gtr@print@infolist% + \gtr@ifmarriagedefined{% + \tcbline\begin{gtreventlist}% + \gtr@list@event{engagement}% + \gtr@list@event{marriage}% + \gtr@list@event{divorce}% + \end{gtreventlist}% + }{}% +} + +\gtrDeclareDatabaseFormat{full no marriage}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event{birth}% + \gtr@list@event{baptism}% + \gtr@list@event{floruit}% + \gtr@list@event{death}% + \gtr@list@event{burial}% + \end{gtreventlist}% + \gtr@print@infolist% +} + +\def\gtr@list@event@birth{% + \gtrifeventdefined{birth}{\gtrlistseparator\hspace{0pt}\gtrPrintEvent{birth}}{% + \gtr@list@event{baptism}% + }% +} + +\def\gtr@list@event@marriage{% + \gtrifeventdefined{marriage}{\gtrlistseparator\hspace{0pt}\gtrPrintEvent{marriage}}{% + \gtrifeventdefined{engagement}{\gtrlistseparator\hspace{0pt}\gtrPrintEvent{engagement}}{% + \gtr@list@event{divorce}% + }% + }% +} + +\def\gtr@list@event@floruit{% + \gtrifeventdefined{floruit}{% + \gtrifeventdefined{birth}{}{% + \gtrifeventdefined{baptism}{}{% + \gtrifeventdefined{death}{}{% + \gtrifeventdefined{burial}{}{% + \gtrlistseparator\hspace{0pt}\gtrPrintEvent{floruit}}{% + }}}}}{}% +} + +\def\gtr@list@event@death{% + \gtrifeventdefined{death}{\gtrlistseparator\hspace{0pt}\gtrPrintEvent{death}}{% + \gtr@list@event{burial}% + }% +} + +\gtrDeclareDatabaseFormat{medium}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@marriage% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% + \gtr@print@infolist% +} + +\gtrDeclareDatabaseFormat{medium marriage above}{}{% + \gtr@ifmarriagedefined{\begin{gtreventlist}\gtr@list@event@marriage\end{gtreventlist}\tcbline}{}% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% + \gtr@print@infolist% +} + +\gtrDeclareDatabaseFormat{medium marriage below}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% + \gtr@print@infolist% + \gtr@ifmarriagedefined{\tcbline\begin{gtreventlist}\gtr@list@event@marriage\end{gtreventlist}}{}% +} + +\gtrDeclareDatabaseFormat{medium no marriage}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% + \gtr@print@infolist% +} + +\gtrDeclareDatabaseFormat{short}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@marriage% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% +} + +\gtrDeclareDatabaseFormat{short marriage above}{}{% + \gtr@ifmarriagedefined{\begin{gtreventlist}\gtr@list@event@marriage\end{gtreventlist}\tcbline}{}% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% +} + +\gtrDeclareDatabaseFormat{short marriage below}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% + \gtr@ifmarriagedefined{\tcbline\begin{gtreventlist}\gtr@list@event@marriage\end{gtreventlist}}{}% +} + +\gtrDeclareDatabaseFormat{short no marriage}{}{% + \gtrPrintName% + \begin{gtreventlist}% + \gtr@list@event@birth% + \gtr@list@event@floruit% + \gtr@list@event@death% + \end{gtreventlist}% +} + +\gtrDeclareDatabaseFormat{marriage}{}{% + \begin{gtreventlist}% + \gtr@list@event@marriage% + \end{gtreventlist}% +} + +\gtrDeclareDatabaseFormat{name}{}{\gtrPrintName} + +\gtrDeclareDatabaseFormat{symbol}{}{\gtrPrintSex} + +\gtrDeclareDatabaseFormat{empty}{}{} + +\gtrset{% + database format=medium +} + +\def\gtrPrintEvent@prefixdateplace#1{% + \gtrkv@event@pre\gtrPrintEventPrefix{#1}% + \gtrkv@event@sepdate\gtrPrintDate{#1}% + \gtrifplacedefined{#1}{\gtrkv@event@sepplace\gtrPrintPlace{#1}}{}% + \gtrkv@event@app% +} + +\def\gtrPrintEvent@prefixdate#1{% + \gtrkv@event@pre\gtrPrintEventPrefix{#1}% + \gtrkv@event@sepdate\gtrPrintDate{#1}% + \gtrkv@event@app% +} + +\def\gtrPrintEvent@date#1{% + \gtrkv@event@pre\gtrPrintDate{#1}% + \gtrkv@event@app% +} + + +%%%%%%%%%%%%%%%%%%%%%% +% Comment, Profession and Places % + +\def\gtrifcommentdefined#1#2{% + \ifdefvoid{\gtrDBcomment}{#2}{#1}% +} + +\def\gtrifprofessiondefined#1#2{% + \ifdefvoid{\gtrDBprofession}{#2}{#1}% +} + +\def\gtrifplacedefined#1#2#3{% + \ifcsvoid{gtrDB#1place}{#3}{#2}% +} + +\def\gtrPrintPlace#1{% + \gtrkv@place@pre\csuse{gtrDB#1place}\gtrkv@place@app% +} + +%%%%%%%%% +% Dates % + +\def\gtr@parse@date@md#1#2#3\@nil{% + \ifblank{#3}{\csdef{#1}{0#2}}{\csdef{#1}{#2#3}}% +} + +\def\gtr@parse@date@@cymd(#1)#2-#3-#4-#5\@nil{% + \csdef{\gtr@db@date@prefix@ cal}{#1}% + \csdef{\gtr@db@date@prefix@ year}{#2}% + \notblank{#3}{\gtr@parse@date@md{\gtr@db@date@prefix@ month}#3\@nil}{}% + \notblank{#4}{\gtr@parse@date@md{\gtr@db@date@prefix@ day}#4\@nil}{}% +} + +\def\gtr@parse@date@cymd{% + \@ifnextchar({\gtr@parse@date@@cymd}{\gtr@parse@date@@cymd(AD)}% +} + +\def\gtr@parse@date@begin#1{% + \let\gtr@db@date@prefix@\gtr@db@date@prefix% + \gtr@parse@date@cymd#1---\@nil% +} + +\def\gtr@parse@date@end#1/{% + \edef\gtr@db@date@prefix@{\gtr@db@date@prefix end}% + \gtr@parse@date@cymd#1---\@nil% +} + +\def\gtr@parse@date@range#1/#2\@nil{% + \ifblank{#2}{% + \ifblank{#1}{}{\gtr@parse@date@begin{#1}}% + }{% + \ifstrequal{#2}{/}{% + \ifblank{#1}{}{% + \csdef{\gtr@db@date@prefix endyear}{}% + \gtr@parse@date@begin{#1}% + }% + }{% + \ifblank{#1}{% + \csdef{\gtr@db@date@prefix year}{}% + \gtr@parse@date@end#2% + }{% + \gtr@parse@date@begin{#1}% + \gtr@parse@date@end#2% + }% + }% + }% +} + +\def\gtr@parse@date#1#2{% + \csundef{#1cal}% + \csundef{#1day}% + \csundef{#1month}% + \csundef{#1year}% + \csundef{#1endcal}% + \csundef{#1endday}% + \csundef{#1endmonth}% + \csundef{#1endyear}% + \notblank{#2}{% + \gtr@parse@date@range#2/\@nil% + }{}% +} + +\def\gtrParseDate#1{% + \edef\gtr@db@date@prefix{gtrDB#1}% + \gtr@parse@date{gtrDB#1}% +} + +\def\gtr@strip@zero@0#1\@nil{#1} + +\def\gtr@strip@zero{% + \@ifnextchar0{\gtr@strip@zero@}{\gtr@strip@zero@0}% +} + +\def\gtr@cs@strip@zero#1{% + \letcs\gtr@temp{#1}% + \expandafter\gtr@strip@zero\gtr@temp\@nil% +} + +\def\gtr@cs@Roman#1{% + \letcs\gtr@temp{#1}% + \@Roman{\numexpr\gtr@temp}% +} + +\def\gtr@cs@monthlong#1{% + \pgfkeysvalueof{/gtr/month long/\csuse{#1}}% +} + +\def\gtr@cs@monthshort#1{{% + \def\dot{}% + \pgfkeysvalueof{/gtr/month short/\csuse{#1}}% +}} + +\def\gtr@cs@monthshortdot#1{{% + \def\dot{.}% + \pgfkeysvalueof{/gtr/month short/\csuse{#1}}% +}} + +\def\gtrifdatedefined#1#2#3{% + \ifcsdef{gtrDB#1year}{#2}{% + \ifcsdef{gtrDB#1endyear}{#2}{#3}% + }% +} +\let\gtrifeventdefined=\gtrifdatedefined + +\def\gtr@dateformat@factory#1#2{% + \csdef{gtrPrintDateCore@#1}##1{#2}% + \gtrset{date format/{#1}/.code={\letcs\gtrPrintDateCore{gtrPrintDateCore@#1}}}% +} + +\gtr@dateformat@factory{dd.mm.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}.}{}% + \csuse{#1month}.% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d.m.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}.}{}% + \gtr@cs@strip@zero{#1month}.% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d.M.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}.}{}% + \gtr@cs@Roman{#1month}.% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d.month yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}.~}{}% + \gtr@cs@monthlong{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd.mon.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}.~}{}% + \gtr@cs@monthshortdot{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d.mon.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}.~}{}% + \gtr@cs@monthshortdot{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd mon.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}~}{}% + \gtr@cs@monthshortdot{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d mon.yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}~}{}% + \gtr@cs@monthshortdot{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd/mm/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}/}{}% + \csuse{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd/mm yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}/}{}% + \csuse{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d/m/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + \gtr@cs@strip@zero{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d/m yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + \gtr@cs@strip@zero{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d/M/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + \gtr@cs@Roman{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd/month/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}/}{}% + \gtr@cs@monthlong{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d/month/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + \gtr@cs@monthlong{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd/mon/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}/}{}% + \gtr@cs@monthshort{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d/mon/yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + \gtr@cs@monthshort{#1month}/% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd mm yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}~}{}% + \csuse{#1month}~% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d M yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}~}{}% + \gtr@cs@Roman{#1month}~% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d month yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}~}{}% + \gtr@cs@monthlong{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd mon yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}~}{}% + \gtr@cs@monthshort{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d mon yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}~}{}% + \gtr@cs@monthshort{#1month}\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd-mm-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}-}{}% + \csuse{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d-m-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}-}{}% + \gtr@cs@strip@zero{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d-M-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}-}{}% + \gtr@cs@Roman{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd-month-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}-}{}% + \gtr@cs@monthlong{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d-month-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}-}{}% + \gtr@cs@monthlong{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{dd-mon-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}-}{}% + \gtr@cs@monthshort{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{d-mon-yyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}-}{}% + \gtr@cs@monthshort{#1month}-% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{ddmonyyyy}{% + \ifcsdef{#1month}{% + \ifcsdef{#1day}{\csuse{#1day}}{}% + \gtr@cs@monthshort{#1month}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{yyyy.mm.dd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + .\csuse{#1month}% + \ifcsdef{#1day}{.\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy.m.d}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + .\gtr@cs@strip@zero{#1month}% + \ifcsdef{#1day}{.\gtr@cs@strip@zero{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy.m.d.}{% + \csuse{#1year}.% + \ifcsdef{#1month}{% + ~\gtr@cs@strip@zero{#1month}.% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}.}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy.M.d.}{% + \csuse{#1year}.% + \ifcsdef{#1month}{% + ~\gtr@cs@Roman{#1month}.% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}.}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy.month d.}{% + \csuse{#1year}.% + \ifcsdef{#1month}{% + ~\gtr@cs@monthlong{#1month}% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}.}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy.mon.d.}{% + \csuse{#1year}.% + \ifcsdef{#1month}{% + ~\gtr@cs@monthshortdot{#1month}% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}.}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy/mm/dd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + /\csuse{#1month}% + \ifcsdef{#1day}{/\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy/m/d}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + /\gtr@cs@strip@zero{#1month}% + \ifcsdef{#1day}{/\gtr@cs@strip@zero{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy d/m}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + \ \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + \gtr@cs@strip@zero{#1month}% + }{}% +} + +\gtr@dateformat@factory{yyyy mm dd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + ~\csuse{#1month}% + \ifcsdef{#1day}{~\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy month d}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + ~\gtr@cs@monthlong{#1month}% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy mon dd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + ~\gtr@cs@monthshort{#1month}% + \ifcsdef{#1day}{~\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy-mm-dd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + -\csuse{#1month}% + \ifcsdef{#1day}{-\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy-mon-dd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + -\gtr@cs@monthshort{#1month}% + \ifcsdef{#1day}{-\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyy-mon-d}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + -\gtr@cs@monthshort{#1month}% + \ifcsdef{#1day}{-\gtr@cs@strip@zero{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyymondd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + \gtr@cs@monthshort{#1month}% + \ifcsdef{#1day}{\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{yyyymmdd}{% + \csuse{#1year}% + \ifcsdef{#1month}{% + \csuse{#1month}% + \ifcsdef{#1day}{\csuse{#1day}}{}% + }{}% +} + +\gtr@dateformat@factory{mm.dd.yyyy}{% + \ifcsdef{#1month}{% + \csuse{#1month}.% + \ifcsdef{#1day}{\csuse{#1day}.}{}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{m.d.yyyy}{% + \ifcsdef{#1month}{% + \gtr@cs@strip@zero{#1month}.% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}.}{}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{mm/dd/yyyy}{% + \ifcsdef{#1month}{% + \csuse{#1month}/% + \ifcsdef{#1day}{\csuse{#1day}/}{}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{m/d/yyyy}{% + \ifcsdef{#1month}{% + \gtr@cs@strip@zero{#1month}/% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}/}{}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{mm-dd-yyyy}{% + \ifcsdef{#1month}{% + \csuse{#1month}-% + \ifcsdef{#1day}{\csuse{#1day}-}{}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{m-d-yyyy}{% + \ifcsdef{#1month}{% + \gtr@cs@strip@zero{#1month}-% + \ifcsdef{#1day}{\gtr@cs@strip@zero{#1day}-}{}% + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{month d yyyy}{% + \ifcsdef{#1month}{% + \gtr@cs@monthlong{#1month}% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}}{},\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{mon.d yyyy}{% + \ifcsdef{#1month}{% + \gtr@cs@monthshortdot{#1month}% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}}{},\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{mon d yyyy}{% + \ifcsdef{#1month}{% + \gtr@cs@monthshort{#1month}% + \ifcsdef{#1day}{~\gtr@cs@strip@zero{#1day}}{},\ % + }{}% + \csuse{#1year}% +} + +\gtr@dateformat@factory{yyyy}{% + \csuse{#1year}% +} + + +\def\gtr@print@date@single@calendar@all#1{% + \ifcsempty{#1year}{}{% + \letcs\gtr@temp{#1cal}% + \gtrset{calendar/\gtr@temp}% + \gtr@db@cal@pre% + \gtrPrintDateCore{#1}% + \gtr@db@cal@app% + }% +} + +\def\gtr@print@date@single@calendar@AD#1{% + \ifcsempty{#1year}{}{% + \letcs\gtr@temp{#1cal}% + \ifdefstring{\gtr@temp}{AD}{% + \gtrPrintDateCore{#1}% + }{% + \ifdefstring{\gtr@temp}{caAD}{% + \gtrset{calendar/ca}% + }{% + \gtrset{calendar/\gtr@temp}% + }% + \gtr@db@cal@pre% + \gtrPrintDateCore{#1}% + \gtr@db@cal@app% + }% + }% +} + +\def\gtr@print@date@single@calendar@none#1{% + \ifcsempty{#1year}{}{% + \gtrPrintDateCore{#1}% + }% +} + +\def\gtrPrintDate#1{% + \ifcsdef{gtrDB#1year}{% + \ifcsdef{gtrDB#1endyear}{% + \ifcsempty{gtrDB#1endyear}{% + \gtrkv@range@after@A% + \gtr@print@date@single@calendar{gtrDB#1}% + \gtrkv@range@after@B% + }{% + \ifcsempty{gtrDB#1year}{% + \gtrkv@range@before@A% + \gtr@print@date@single@calendar{gtrDB#1end}% + \gtrkv@range@before@B% + }{% + \gtrkv@range@full@A% + \gtr@print@date@single@calendar{gtrDB#1}% + \gtrkv@range@full@B% + \gtr@print@date@single@calendar{gtrDB#1end}% + \gtrkv@range@full@C% + }% + }% + }{% + \gtr@print@date@single@calendar{gtrDB#1}% + }% + }{??}% +} + +\def\gtrifimagedefined#1#2{% + \ifdefvoid{\gtrDBimage}{#2}{#1}% +} + +\def\gtrincludeDBimage#1{% + \begingroup\edef\x{\endgroup\noexpand\includegraphics[\gtrDBimageopt,#1]}\x{\gtrDBimage}% +} + +\tikzset{% + fill overzoom DBimage/.style={fill image options=\gtrDBimageopt,fill overzoom image=\gtrDBimage},% + fill zoom DBimage/.style={fill image options=\gtrDBimageopt,fill zoom image=\gtrDBimage},% +} + +\gtrset{% + date format/typical/.code={\letcs\gtrPrintDateCore{gtrPrintDateCore@\gtr@typical@date@format}}, + set@typical@date@format/.code={\edef\gtr@typical@date@format{#1}\gtrset{date format=typical}}, + calendar text for/.style args={#1 is #2#3}{calendar/#1/.code={\def\gtr@db@cal@pre{#2}\def\gtr@db@cal@app{#3}}}, + calendar/.unknown/.code={\def\gtr@db@cal@pre{}\def\gtr@db@cal@app{ (\pgfkeyscurrentname)}}, + date code/.code={\def\gtrPrintDateCore##1{#1}}, + event code/.code={\def\gtrPrintEvent##1{#1}}, + comment code/.code={\def\gtrPrintComment{#1}}, + profession code/.code={\def\gtrPrintProfession{#1}}, + date format/.is choice, + calendar print/.is choice, + calendar print/all/.code={\let\gtr@print@date@single@calendar\gtr@print@date@single@calendar@all}, + calendar print/none/.code={\let\gtr@print@date@single@calendar\gtr@print@date@single@calendar@none}, + calendar print/all but AD/.code={\let\gtr@print@date@single@calendar\gtr@print@date@single@calendar@AD}, + date range full/.code n args={3}{\def\gtrkv@range@full@A{#1}\def\gtrkv@range@full@B{#2}\def\gtrkv@range@full@C{#3}}, + date range before/.code 2 args={\def\gtrkv@range@before@A{#1}\def\gtrkv@range@before@B{#2}}, + date range after/.code 2 args={\def\gtrkv@range@after@A{#1}\def\gtrkv@range@after@B{#2}}, + date range separator/.style={date range full={}{#1}{},date range before={#1}{},date range after={}{#1}}, + date range separator/.default={--}, + place text/.code 2 args={\def\gtrkv@place@pre{#1}\def\gtrkv@place@app{#2}}, + event text/.code n args={4}{\def\gtrkv@event@pre{#1}\def\gtrkv@event@sepdate{#2}\def\gtrkv@event@sepplace{#3}\def\gtrkv@event@app{#4}}, + event format/.is choice, + event format/prefix date place/.code={\let\gtrPrintEvent=\gtrPrintEvent@prefixdateplace}, + event format/prefix date/.code={\let\gtrPrintEvent=\gtrPrintEvent@prefixdate}, + event format/date/.code={\let\gtrPrintEvent=\gtrPrintEvent@date}, +} + +\gtrset{% + set@typical@date@format=d.M.yyyy, + date range separator, + calendar print=all but AD, + event text={}{~}{ }{}, + event format=prefix date place, + comment code={\hspace{0pt}{\itshape\gtrDBcomment}}, + profession code={\hspace{0pt}{\itshape\gtrDBprofession}}, +} -- cgit v1.2.3