summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/regulatory/tex/regulatory.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/regulatory/tex/regulatory.sty')
-rw-r--r--macros/latex/contrib/regulatory/tex/regulatory.sty699
1 files changed, 699 insertions, 0 deletions
diff --git a/macros/latex/contrib/regulatory/tex/regulatory.sty b/macros/latex/contrib/regulatory/tex/regulatory.sty
new file mode 100644
index 0000000000..f6b3be5e88
--- /dev/null
+++ b/macros/latex/contrib/regulatory/tex/regulatory.sty
@@ -0,0 +1,699 @@
+%% regulatory.sty
+%% Copyright 2024 E. Nijenhuis
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% 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.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status ‘maintained’.
+%
+% The Current Maintainer of this work is E. Nijenhuis.
+%
+% This work consists of the files regulatory.tex,
+% regulatory-preamble.tex, regulatory-nl.tex, regulatory-en.tex,
+% example1.bib, example2.bib,
+% example1-nl.tex, example2-nl.tex,
+% example1-en.tex, example2-en.tex,
+% md-example.tex, example.md,
+% fc-dutch.def and regulatory.sty
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{regulatory}[2024/01/16 Xerdi's Regulatory Package]
+
+\RequirePackage{pgfopts}
+\RequirePackage{xifthen}
+\RequirePackage{keyval}
+\RequirePackage{xstring}
+\RequirePackage{xspace}
+
+\newif\ifregulatory@markdown
+\newif\ifregulatory@bibtogls
+\newif\ifregulatory@legacy
+\newif\ifregulatory@alldefs
+\pgfkeys{
+ /regulatory/.is family,
+ /regulatory,
+ md/.is if=regulatory@markdown,
+ md=false,
+ bib2gls/.is if=regulatory@bibtogls,
+ bib2gls=true,
+ legacy/.is if=regulatory@legacy,
+ legacy=false,
+ alldefs/.is if=regulatory@alldefs,
+ alldefs=false
+}
+
+\InputIfFileExists{regulatory.cfg}{%
+ \PackageInfo{regulatory}{Using local configuration file}%
+}{%
+ \PackageInfo{regulatory}{No local configuration file}%
+}
+
+\newboolean{regulatory@nameinlink}
+\setboolean{regulatory@nameinlink}{true}
+
+\ProcessPgfPackageOptions{/regulatory}
+
+% Markdown support
+\ifregulatory@markdown
+\RequirePackage[hashEnumerators,definitionLists,hybrid,headerAttributes=true]{markdown}
+\setkeys{markdownRenderers}{
+headingOne={\article{#1}},
+olItemWithNumber={\item{}},
+olBeginTight={\begin{paras}},
+olEndTight={\end{paras}},
+olBegin={\begin{paras}},
+olEnd={\end{paras}},
+dlBeginTight={\begin{labeling}{\@glswidestname}},
+dlEndTight={\end{labeling}},
+dlBegin={\begin{labeling}{\@glswidestname}},
+dlEnd={\end{labeling}}%
+\renewcommand\markdownRendererOlItemWithNumber[1]{\item{}\label{ml:##1}}
+}
+\fi
+
+% Pakketten ná markdown (anders gaat enumitem kapot)
+\RequirePackage{xcolor}
+\RequirePackage{xassoccnt}
+\RequirePackage{xpatch}
+\RequirePackage{titlesec}
+\RequirePackage{enumitem}
+\RequirePackage{fmtcount}
+\RequirePackage{scrextend}
+\RequirePackage{xr-hyper}
+\RequirePackage[user,counter,hyperref,xr]{zref}
+\RequirePackage{zref-xr,zref-user,zref-clever,zref-hyperref}
+\RequirePackage{hyperref}
+\RequirePackage{pgf}
+\RequirePackage[sanitize=none,nopostdot]{glossaries}
+\ifregulatory@bibtogls
+\RequirePackage[record,style=alttree]{glossaries-extra}
+\else
+\PackageWarning{regulatory}{Using glossaries for definitions without bib2gls. This is mostly untested.}
+\fi
+
+\RequirePackage{attachfile2}
+\RequirePackage{translations}
+
+\newboolean{regulatory@defslisted}
+\setboolean{regulatory@defslisted}{false}
+
+% Kleuren
+\providecolor{artlabel}{rgb}{0,0,0}
+\providecolor{arttitle}{rgb}{0,0,0}
+\providecolor{paralabel}{rgb}{0,0,0}
+\providecolor{paratitle}{rgb}{0,0,0}
+\providecolor{sublabel}{rgb}{0,0,0}
+\providecolor{subtitle}{rgb}{0,0,0}
+
+
+
+% Artikelen
+\newcounter{article}
+\titleclass{\article}[0]{straight}
+\titleformat{\article}{\normalfont\color{arttitle}}{\bfseries\color{artlabel}Artikel \thearticle.\quad}{1em}{}
+\titlespacing*{\article}{0pt}{3.5ex plus 1ex minus .2ex}{5pt}
+
+\newcounter{para}
+\titleclass{\para}{straight}[\article]
+\titleformat{\para}{\normalfont\color{paratitle}}{\normalfont\color{paralabel}\thearticle.\thepara.\quad}{1em}{}
+\titlespacing*{\para}{0pt}{3.5ex plus 1ex minus .2ex}{5pt}
+\counterwithin{para}{article}
+
+\renewcommand{\thearticle}{\arabic{article}}
+\renewcommand{\thepara}{\arabic{para}}
+\makeatletter
+\newcommand{\l@article}{\@dottedtocline{1}{1.5em}{2.3em}}
+\def\toclevel@article{2}
+\newcommand{\l@para}{\@dottedtocline{1}{3.8em}{2.3em}}
+\def\toclevel@para{3}
+
+\newcounter{provisions}
+\newlist{provisions}{enumerate}{1}
+\setlist[provisions,1]{label=\arabic*.,align=left,itemsep=0pt}
+\counterwithin{provisions}{section}
+
+\newlist{paras}{enumerate}{2}
+\setlist[paras,1]{label=\thearticle.\arabic*.,ref=\arabic*,align=left,itemsep=0pt}
+\setlist[paras,2]{label=\abalphnum{\arabic*}),ref=\arabic*,itemsep=0pt}
+\counterwithin{parasi}{article}
+\counterwithin{parasii}{parasi}
+
+\zref@newprop{article}[-1]{\number\value{article}}
+\zref@newprop{para}[-1]{\ifnum\value{para}>0\number\value{para}\else\number\value{parasi}\fi}
+\zref@newprop{sub}[-1]{\number\value{parasii}}
+\zref@addprops{main}{article,para,sub}
+
+\DeclareTranslation{dutch}{article}{artikel}
+\DeclareTranslation{dutch}{paragraph}{lid}
+\DeclareTranslation{dutch}{subparagraph}{onderdeel}
+\DeclareTranslation{dutch}{Article}{Artikel}
+\DeclareTranslation{dutch}{Paragraph}{Lid}
+\DeclareTranslation{dutch}{Subparagraph}{Onderdeel}
+\DeclareTranslation{dutch}{to}{tot}
+\DeclareTranslation{dutch}{Definitions}{Definities}
+\DeclareTranslation{dutch}{of the}{van de}
+
+\zcRefTypeSetup{article}{%
+ Name-sg = \GetTranslation{Article},
+ name-sg = \GetTranslation{article},
+ Name-pl = Artikelen,
+ name-pl = artikelen
+}
+\zcRefTypeSetup{para}{%
+ Name-sg = \GetTranslation{Paragraph},
+ name-sg = \GetTranslation{paragraph},
+ Name-pl = Leden,
+ name-pl = leden
+}
+\zcRefTypeSetup{parasi}{%
+ Name-sg = \GetTranslation{Paragraph},
+ name-sg = \GetTranslation{paragraph},
+ Name-pl = Leden,
+ name-pl = leden
+}
+\zcRefTypeSetup{parasii}{%
+ Name-sg = \GetTranslation{Subparagraph},
+ name-sg = \GetTranslation{subparagraph},
+ Name-pl = Onderdelen,
+ name-pl = onderdelen
+}
+
+\makeatother
+{\catcode`\#=12 \gdef\hashchar{#}}
+\makeatletter
+\def\rref@linkpr{\href{\rref@current@fullurl}}
+
+\newboolean{rref@cap}
+\def\@ifrrefcap#1#2{%
+ \ifthenelse{\boolean{rref@cap}}{%
+ #1%
+ \ifthenelse{\equal{#1}{}}{}{%
+ \setboolean{rref@cap}{false}%
+ }%
+ }{%
+ #2%
+ }%
+}
+\def\@ifnameinlink#1#2{%
+ \ifthenelse{\boolean{regulatory@nameinlink}}{#1}{#2}%
+}
+
+\newcommand\rref@middleconjunction{, }
+\newcommand\rref@lastconjunction{ \GetTranslation{and} }
+\newcommand\rref@rangeconjunction{ \GetTranslation{to} }
+
+\newcommand\setmiddleconjunction[1]{\renewcommand\rref@middleconjunction{#1}}
+\newcommand\setlastconjunction[1]{\renewcommand\rref@lastconjunction{#1}}
+\newcommand\setrangeconjunction[1]{\renewcommand\rref@rangeconjunction{#1}}
+
+\newcommand\setconjunction[3]{%
+ \setmiddleconjunction{#1}%
+ \setlastconjunction{#1}%
+ \setrangeconjunction{#1}%
+}
+
+\newcommand\setjuncto{%
+\setlastconjunction{ jo.\ }%
+}
+
+\newcommand\unsetjuncto{%
+\setlastconjunction{ \GetTranslation{and} }%
+}
+
+\ifregulatory@legacy
+\setjuncto
+\fi
+
+\newcommand\rref@refformat@noop[1]{#1}
+\newcommand\rref@refformat@parenthesis[1]{(#1)}
+\newcommand\rref@refformat@ordinal[1]{\@ifrrefcap{\Ordinalstringnum{#1}}{\ordinalstringnum{#1}}}
+\newcommand\rref@refformat@alpha[1]{\@ifrrefcap{\ABAlphnum{#1}}{\abalphnum{#1}}}
+\newcommand\rref@label@prefix[2]{#1 #2}
+\newcommand\rref@label@postfix[2]{#2 #1}
+\newcommand\rref@label@refonly[2]{\@gobble{#1}#2}
+\newcommand\rref@group@braced[1]{{[}#1{]~}}
+
+\newcommand\rref@init@lang@article[1]{%
+ \pgfkeys{/rref/#1/article/.is family,
+ /rref/#1/article,
+ name/.initial=\GetTranslation{article},
+ Name/.initial=\GetTranslation{Article},
+ ref format/.initial=\rref@refformat@noop,
+ label format/.initial=\rref@label@prefix,
+ group conjunction/.initial={},
+ group format/.initial=\rref@refformat@noop
+ }
+}
+\newcommand\rref@init@lang@para[1]{%
+ \pgfkeys{/rref/#1/para/.is family,
+ /rref/#1/para,
+ name/.initial=\GetTranslation{paragraph},
+ Name/.initial=\GetTranslation{Paragraph},
+ ref format/.initial=\rref@refformat@parenthesis,
+ label format/.initial=\rref@label@refonly,
+ group conjunction/.initial={,},
+ group format/.initial=\rref@refformat@noop
+ }
+}
+\newcommand\rref@init@lang@sub[1]{%
+ \pgfkeys{/rref/#1/sub/.is family,
+ /rref/#1/sub,
+ name/.initial=\GetTranslation{subparagraph},
+ Name/.initial=\GetTranslation{Subparagraph},
+ ref format/.initial=\rref@refformat@ordinal,
+ label format/.initial=\rref@label@postfix,
+ group conjunction/.initial={,},
+ group format/.initial=\rref@group@braced
+ }
+}
+
+\newcommand\rref@setup@lang[3]{%
+ \pgfkeys{/rref/#1/#2,#3}
+}
+
+\newcommand\rref@setup[4]{%
+ \rref@init@lang@article{#1}
+ \rref@init@lang@para{#1}
+ \rref@init@lang@sub{#1}
+ \rref@setup@lang{#1}{article}{#2}
+ \rref@setup@lang{#1}{para}{#3}
+ \rref@setup@lang{#1}{sub}{#4}
+}
+
+% The defaults are already based on English, so no arguments are given.
+\rref@setup{english}{}{}{}
+
+\rref@setup{dutch}{
+ group conjunction={,~}
+}{
+ ref format=\rref@refformat@ordinal,
+ label format=\rref@label@postfix,
+ group conjunction={,~},
+ group format=\rref@refformat@noop
+}{
+ ref format=\rref@refformat@alpha,
+ label format=\rref@label@prefix,
+ group conjunction={,~},
+ group format=\rref@refformat@noop
+}%
+
+\newcommand\rref@set[4][\languagename]{%
+ \pgfkeysgetvalue{/rref/#1/#2/#3}{#4}%
+}
+
+\newcommand\rref@get[3][\languagename]{%
+ \pgfkeysvalueof{/rref/#1/#2/#3}%
+}
+
+\newcommand\rref@name[2][\languagename]{\@ifrrefcap{\rref@get[#1]{#2}{Name}}{\rref@get[#1]{#2}{name}}}
+\def\rref@article@name{\rref@name{article}}
+\def\rref@para@name{\rref@name{para}}
+\def\rref@sub@name{\rref@name{sub}}
+
+\newcommand\rref@refformat[2][\rref@current@type]{\rref@set{#1}{ref format}{\@@rrefformat}\@@rrefformat{#2}}
+\newcommand\rref@labelformat[2][\rref@current@type]{\rref@set{#1}{label format}{\@@labelformat}\@@labelformat{\rref@name{#1}}{#2}}
+\newcommand\rref@linkformat[2][\rref@current@type]{%
+ \@ifnameinlink{%
+ \rref@linkpr{\rref@labelformat[#1]{\rref@refformat[#1]{#2}}}%
+ }{%
+ \rref@labelformat[#1]{\rref@linkpr{\rref@refformat[#1]{#2}}}%
+ }%
+}
+\newcommand\rref@reflink[2][\rref@current@type]{%
+ \rref@linkpr{\rref@refformat[#1]{#2}}%
+}
+\newcommand\rref@groupformat[2][\rref@current@type]{%
+ \rref@set{#1}{group format}{\@@groupformat}\@@groupformat{#2}%
+}
+
+\def\rref{\@ifstar\rref@star\rref@nostar}
+\def\rref@star#1{%
+ \rref@setcurrent{#1}%
+ \ifnum\rref@current@value>0%
+ \rref@refformat{\rref@current@value}%
+ \else%
+ \zref{#1}%
+ \fi%
+}
+\def\rref@nostar#1{%
+ \rref@setcurrent{#1}%
+ \ifnum\rref@current@value>0%
+ \rref@linkpr{\rref@refformat{\rref@current@value}}%
+ \else%
+ \zcref[noname]{#1}%
+ \fi%
+}
+\def\Rref{\@ifstar\Rref@star\Rref@nostar}
+\def\Rref@star#1{%
+ \setboolean{rref@cap}{true}%
+ \rref*{#1}%
+}
+\def\Rref@nostar#1{%
+ \setboolean{rref@cap}{true}%
+ \rref{#1}%
+}
+
+\def\nref{\@ifstar\nref@star\nref@nostar}
+\def\nref@star#1{%
+ \rref@setcurrent{#1}%
+ \ifnum\rref@current@value>0%
+ \rref@labelformat{\rref@refformat{\rref@current@value}}%
+ \else%
+ \zcref*{#1}%
+ \fi%
+}
+\def\nref@nostar#1{%
+ \rref@setcurrent{#1}%
+ \ifnum\rref@current@value>0%
+ \rref@linkformat{\rref@current@value}%
+ \else%
+ \zcref{#1}%
+ \fi%
+}
+\def\Nref{\@ifstar\Nref@star\Nref@nostar}
+\def\Nref@star#1{%
+ \setboolean{rref@cap}{true}%
+ \nref*{#1}%
+}
+\def\Nref@nostar#1{%
+ \setboolean{rref@cap}{true}%
+ \nref{#1}%
+}
+
+\def\rref@setcurrent#1{%
+ \def\rref@current{#1}%
+ \def\rref@current@counter{\zref@extract{#1}{counter}}%
+ \def\rref@current@article{\zref@extract{#1}{article}}%
+ \def\rref@current@para{\zref@extract{#1}{para}}%
+ \def\rref@current@sub{\zref@extract{#1}{sub}}%
+ \rref@settype%
+ \rref@setlink%
+}
+\def\rref@settype{%
+ \ifthenelse{\equal{article}{\rref@current@counter}}{%
+ \def\rref@current@type{article}%
+ \def\rref@current@value{\rref@current@article}%
+ \def\rref@current@fullformat{}%
+ }{%
+ \ifthenelse{\equal{para}{\rref@current@counter}\or\equal{parasi}{\rref@current@counter}}{%
+ \def\rref@current@type{para}%
+ \def\rref@current@value{\rref@current@para}%
+ }{%
+ \ifthenelse{\equal{parasii}{\rref@current@counter}}{%
+ \def\rref@current@type{sub}%
+ \def\rref@current@value{\rref@current@sub}%
+ }{%
+ \def\rref@current@type{}%
+ \def\rref@current@value{-1}%
+ }%
+ }%
+ }%
+}
+\def\rref@setlink{%
+ \def\rref@current@anchor{\zref@extract{\rref@current}{anchor}}%
+ \def\rref@current@url{\zref@extractdefault{\rref@current}{url}{}}%
+ \def\rref@current@fullurl{\rref@current@url\hashchar\rref@current@anchor}%
+}
+\newcommand\rref@number[1]{%
+ \zref@extractdefault{#1}{\rref@current@type}{-1}%
+}
+
+\newcommand\aref@setcurrent[1]{%
+ \def\aref@current@reflink{\rref@reflink[\rref@current@type]{\rref@current@value}}%
+ \zref@ifrefcontainsprop{#1}{externaldocument}{%
+ \filename@parse{\expanded{\zref@extract{#1}{externaldocument}}}%
+ \edef\@aref@filelabel{\expanded{\filename@base}}%
+ \def\@aref@postlink{%
+ , \documentlabel{\@aref@filelabel}%
+ \ifthenelse{\equal{\artifactfootnote{\@aref@filelabel}}{true}\and\equal{\artifactreferred{\@aref@filelabel}}{false}}{%
+ \documentfootnote{\@aref@filelabel}%
+ }{}%
+ }%
+ }{%
+ \def\@aref@postlink{}%
+ }%
+ \ifthenelse{\equal{\rref@current@type}{article}}{%
+ \def\@aref@prefix{}%
+ \def\@aref@postfix{}%
+ }{%
+ \ifthenelse{\equal{\rref@current@type}{para}}{%
+ \def\@aref@prefix{%
+ \rref@labelformat[article]{\rref@current@article}\rref@get{article}{group conjunction}%
+ }%
+ \def\@aref@postfix{}%
+ }{%
+ \ifthenelse{\equal{\rref@current@type}{sub}}{%
+ \def\@aref@prefix{%
+ \rref@labelformat[article]{\rref@refformat[article]{\rref@current@article}}\rref@get{article}{group conjunction}%
+ \rref@labelformat[para]{\rref@refformat[para]{\rref@current@para}}\rref@get{para}{group conjunction}%
+ }%
+ \def\@aref@postfix{}%
+ }{%
+ \def\@aref@prefix{}%
+ \def\@aref@postfix{}%
+ }%
+ }%
+ }%
+}
+
+\newcommand{\aref}[1]{%
+ \def\@@arefsetup##1##2{%
+ \rref@setcurrent{##1}%
+ \aref@setcurrent{##1}%
+ \rref@groupformat{\@aref@prefix}%
+ ##2%
+ \@aref@postfix\@aref@postlink%
+ }%
+ \IfSubStr{#1}{,}{%
+ \StrBefore[1]{#1}{,}[\firstarg]%
+ \@@arefsetup{\firstarg}{\rref@labelformat{\aref@group{#1}}}%
+ }{%
+ \@@arefsetup{#1}{\nref{#1}}%
+ }%
+}
+
+\newcommand{\Aref}[1]{%
+ \setboolean{rref@cap}{true}%
+ \aref{#1}%
+}
+
+\def\listterminator{-1}
+
+\newcommand\aref@group[1]{%
+ \bubblesort{#1}%
+ \expandafter\begincompaction\sortedlist,\listterminator,\relax%
+}
+\def\begincompaction#1,#2\relax{%
+ \def\startlist{#1}%
+ \def\currentendlist{#1}%
+ \findendlist#2\relax%
+}
+\def\findendlist#1,#2\relax{%
+ \ifnum\numexpr\rref@number{\currentendlist}+1\relax=\rref@number{#1}\relax%
+ \def\currentendlist{#1}%
+ \findendlist#2\relax%
+ \else%
+ \ifnum\rref@number{\startlist}=\rref@number{\currentendlist}\relax%
+ \ignorespaces\rref{\startlist}\unskip%
+ \else%
+ \ifnum\numexpr\rref@number{\startlist}+1\relax=\rref@number{\currentendlist}\relax%
+ \ignorespaces\rref{\startlist}\unskip%
+ \ifnum\rref@number{#1}=\listterminator\relax%
+ \rref@lastconjunction%
+ \else%
+ \rref@middleconjunction%
+ \fi\ignorespaces%
+ \rref{\currentendlist}\unskip%
+ \else%
+ \ignorespaces\rref{\startlist}\unskip\rref@rangeconjunction\ignorespaces%
+ \rref{\currentendlist}\unskip%
+ \fi%
+ \fi%
+ \ifnum\rref@number{#1}=\listterminator\else%
+ \IfStrEq{#2}{\listterminator,}{\rref@lastconjunction}{\rref@middleconjunction}\begincompaction#1,#2\relax%
+ \fi%
+ \fi%
+}
+\newcommand\bubblesort[1]{\def\sortedlist{}\sortlist#1,\listterminator,\relax}
+\def\sortlist#1,#2,#3\relax{%
+ \rref@setcurrent{#1}%
+ \aref@setcurrent{#1}%
+ \ifnum\rref@number{#2}=\listterminator\relax%
+ \edef\sortedlist{\sortedlist#1}%
+ \else%
+ \ifnum\rref@number{#1}<\rref@number{#2}\relax%
+ \edef\sortedlist{\sortedlist#1,}%
+ \sortlist#2,#3\relax%
+ \else%
+ \let\tmp\sortedlist%
+ \def\sortedlist{}%
+ \expandafter\sortlist\tmp#2,#1,#3\relax%
+ \fi%
+ \fi%
+}
+
+\GetAllResetLists
+\RegisterPostLabelHook{\zlabel}
+
+\newglossary*{definitions}{Definitions}
+\newglossary*{externals}{Externals}
+
+\newcommand\artifact@footnote@noop[1]{#1}
+\newcommand\artifact@def@label@default[1]{~(\GetTranslation{see} #1)}
+
+\newcommand\newartifact[2]{%
+ \pgfkeys{
+ /artifact/#1/.is family,
+ /artifact/#1,
+ name/.initial = #1,
+ filename/.initial = #1.pdf,
+ path/.initial = ./,
+ ref label/.initial=,
+ def label/.initial=\artifact@def@label@default,
+ footnote/.initial = true,
+ footnote label/.initial=\artifact@footnote@noop,
+ url/.initial=,
+ referred/.initial = false,
+ defs/.initial=,
+ author/.initial=<author>,
+ subject/.initial=<subject>,
+ description/.initial=<description>
+ }
+ \pgfkeys{/artifact/#1,#2}
+}
+\newcommand\@aget[2]{\pgfkeysvalueof{/artifact/#1/#2}}
+\newcommand\artifact@setfootnotelabel[1]{\pgfkeysgetvalue{/artifact/#1/footnote label}{\artifactfootnotelabel}}
+\newcommand\artifactname[1]{\@aget{#1}{name}}
+\newcommand\artifactfullname[1]{\@aget{#1}{path}\@aget{#1}{name}}
+\newcommand\artifactfilename[1]{\@aget{#1}{filename}}
+\newcommand\artifactfullfilename[1]{\@aget{#1}{path}\@aget{#1}{filename}}
+\newcommand\artifactfootnote[1]{\@aget{#1}{footnote}}
+\newcommand\artifacturl[1]{\@aget{#1}{url}}
+\newcommand\artifactreferred[1]{\@aget{#1}{referred}}
+\newcommand\artifactdefs[1]{\@aget{#1}{defs}}
+\newcommand\artifactauthor[1]{\@aget{#1}{author}}
+\newcommand\artifactsubject[1]{\@aget{#1}{subject}}
+\newcommand\artifactdescription[1]{\@aget{#1}{description}}
+
+\renewcommand{\glossarysection}[2][]{\@gobble{#1}\@gobble{#2}}%
+\setglossarypreamble[definitions]{%
+ \ifnum\value{article}=0%
+ \article{\GetTranslation{Definitions}}\label{art:definitions}%
+ \vspace*{-\baselineskip}%
+ \else%
+ \ifnum\value{parasi}=0%
+ \vspace*{-\baselineskip}%
+ \fi%
+ \fi%
+}
+
+\newcommand\describe[1]{\setboolean{regulatory@defslisted}{true}\glstarget{#1}{\glsentrydesc{#1}}}
+\newcommand\printdefs[1]{%
+ \renewcommand*{\glsnamefont}[1]{\textmd{##1}}%
+ \setboolean{regulatory@defslisted}{true}%
+ \glssetwidest{#1}%
+ \ifnum\value{parasi}>0%
+ \def\@@wrapper##1{\begin{minipage}{\linewidth}##1\end{minipage}}%
+ \else%
+ \def\@@wrapper##1{##1}%
+ \fi%
+ \@@wrapper{%
+ \ifregulatory@bibtogls%
+ \printunsrtglossary[type=definitions,style=alttree,title={},nonumberlist=true]%
+ \else%
+ \printglossary[type=definitions,style=alttree,title={},nonumberlist=true]%
+ \fi%
+ }%
+}
+
+\attachfilesetup{color=black}
+
+\newcommand\documentattachment[2]{%
+ \def\@tmpfile{\artifactfullfilename{#1}}%
+ \IfFileExists{\@tmpfile}{%
+ \textattachfile[description={\artifactdescription{#1}},subject={\artifactsubject{#1}},author={\artifactauthor{#1}}]{\@tmpfile}{#2}}%
+ {\texttt{#2}}%
+}
+
+\newcommand\documentlabel[1]{%
+ \def\@@label{\@aget{#1}{ref label}}%
+ \ifthenelse{\equal{\@@label}{}}{%
+ \GetTranslation{of the} \artifactsubject{#1}%
+ }{\@@label}%
+}
+
+\newcommand\documentfootnote[2][]{%
+ \pgfkeysifdefined{/artifact/#2/referred}{%
+ \pgfkeys{/artifact/#2,referred=true}%
+ \artifact@setfootnotelabel{#2}%
+ \ifthenelse{\equal{#1}{}}{%
+ \def\artifact@description{\artifactsubject{#2}}%
+ }{%
+ \def\artifact@description{#1}%
+ }%
+ \footnote{\artifactfootnotelabel{\documentattachment{#2}{\artifact@description}}}%
+ }{\PackageWarning{regulatory}{Artifact does not exists '#2'}\footnote{DOCUMENT NOT FOUND '#2'}}
+}
+
+\edef\@regulatory@bib@selection{}
+\ifregulatory@alldefs
+\edef\@regulatory@bib@selection{,selection=all}
+\fi
+
+\newcommand\loadglsdefs[1]{%
+ \setboolean{regulatory@defslisted}{true}%
+ \ifregulatory@bibtogls%
+ \GlsXtrLoadResources[type=definitions,src={#1},sort={nl-NL},category={defs}\@regulatory@bib@selection]%
+ \else%
+ \loadglsentries[definitions]{#1}%
+ \fi%
+}
+
+\newcommand\loadextdefs[2][externals]{%
+ \ifregulatory@bibtogls%
+ \GlsXtrLoadResources[type=externals,src={#2},sort={nl-NL},category={#1}]%
+ \else%}{%
+ \loadglsentries[externals]{#2}%
+ \fi%}%
+ \glsdefpostlink{#1}{%
+ \ifthenelse{\equal{\artifactreferred{#1}}{true}}{}{%
+ \@aget{#1}{def label}{%
+ \artifactsubject{#1}%
+ \documentfootnote{#1}%
+ }%
+ }%
+ }%
+}
+
+\newcommand\refdocument[3][ext-]{%
+ \newartifact{#2}{footnote=false,#3}%
+ \zexternaldocument[#1]{\artifactfullname{#2}}[#2]%
+}
+
+\newcommand\masterdocument[3][ext-]{%
+ \newartifact{#2}{#3}%
+ \zexternaldocument[#1]{\artifactfullname{#2}}[#2]%
+ \ifthenelse{\equal{\string\artifactdefs{#2}}{}}{%
+ \PackageWarning{regulatory}{No definitions given to the master document. \the\gls commands will therefore not work.}%
+ }{%
+ \PackageWarning{regulatory}{Agreement file loads #1, #2, #3.}
+ \loadextdefs[#2]{\artifactdefs{#2}}%
+ \ifregulatory@bibtogls%
+ \glssetcategoryattribute{#2}{targeturl}{\artifactfilename{#2}}%
+ \glssetcategoryattribute{#2}{targetname}{\glolinkprefix\glslabel}%
+ \fi%
+ }%
+}
+
+\AtEndPreamble{%
+\ifregulatory@bibtogls\else%
+\ifthenelse{\boolean{regulatory@defslisted}}{\makeglossaries}{}%
+\fi%
+}
+\AtEndDocument{%
+\ifregulatory@alldefs\glsaddallunused\fi%
+}