\ifdefined\minimpdfloaded \message{(skipped)} \expandafter\endinput\fi \chardef\minimpdfloaded = \catcode`\: \catcode`\: = 11 % Abbreviations used throughout this document: % se structure element % mci marked content item \newcount \writedocumentstructure \newcount \writehyphensandspaces \newcount \strictstructuretagging \writedocumentstructure = 0 \writehyphensandspaces = 1 \strictstructuretagging = 0 % 1 the attributes \input minim-alloc \input minim-hooks % By three attributes do we determine the document structure. % % One for marking the current structure element: % - is the index of the lua-side se table % - assignments are always local \newattribute \tagging:current:se \tagging:current:se = 1 % % One for ordering children of structure elements: % - assignments are always global % - should generally increase monotously % - should change (increase) at every se boundary \newattribute \tagging:element:order \tagging:element:order = 1 % % One for marking the status: % - assignments are generally local % - if set, disables tagging and content marking \newattribute \tagging:current:status \tagging:current:status = \unset % % A fourth attribute keeps track of the current language % - assignments are local % - sets language of structure elements \newattribute \tagging:current:language \tagging:current:language = \language \directlua { require('minim-pdf') } % 1 artifacts and content items % \stoptagging ... \starttagging % disables marking structure elements \newif\iftagging:enabled \tagging:enabledtrue \protected\def\starttagging{\tagging:enabledtrue \ifnum1=\tagging:current:status \tagging:current:status\unset\fi} \protected\def\stoptagging{\tagging:enabledfalse \ifnum\unset=\tagging:current:status \tagging:current:status1\relax\fi} % \markartifact {Layout} {...} % \startartifact {Pagination /Subtype/Header} ... \stopartifact \long\def\markartifact#1#2{\startartifact{#1}#2\stopartifact} \protected\def\startartifact{\begingroup\stoptagging \tagging:mci:incr\tagging:art:markstart} \protected\def\stopartifact{\tagging:art:markstop\tagging:mci:incr\endgroup} % \startcontentitem ... \stopcontentitem \protected\def\startcontentitem{\iftagging:enabled\tagging:mci:incr\tagging:mci:markstart\fi} \protected\def\stopcontentitem{\iftagging:enabled\tagging:mci:markstop\tagging:mci:incr\fi} % \startsinglecontentitem ... \stopsinglecontentitem \protected\def\startsinglecontentitem{\begingroup \startcontentitem\stoptagging} \protected\def\stopsinglecontentitem{\endgroup\stopcontentitem} % \ensurecontentitem \protected\def\ensurecontentitem{\iftagging:enabled\tagging:mci:content\fi} \protected\def\tagging:mci:incr{\global\advance\tagging:element:order1\relax} % 1 structure elements % \savecurrentelement ... \continueelement % \savecurrentelementto\name ... \continueelementfrom\name \protected\def\savecurrentelementto#1{\global\chardef#1\tagging:current:se} \protected\def\continueelementfrom#1{\tagging:current:se#1\tagging:mci:incr} \def\savecurrentelement{\savecurrentelementto\tagging:saved:se} \def\continueelement{\continueelementfrom\tagging:saved:se} % \markelement {Tag} {...} % \startelement {Tag} ... \stopelement {Tag} % \ensurestopelement {Tag} \long\protected\def\markelement#1#2{\iftagging:enabled \startelement{#1}#2\stopelement{#1}\else#2\fi} \protected\def\startelement{\iftagging:enabled \tagging:mci:incr \expandafter\tagging:startelement\else \expandafter\tagging:ignore\fi} \protected\def\stopelement{\iftagging:enabled \tagging:mci:incr \expandafter\tagging:stopelement\else \expandafter\tagging:ignore\fi} \protected\def\ensurestopelement{\iftagging:enabled \tagging:mci:incr % n.b. this can cause problems if you skip levels \expandafter\tagging:ensurestopelement\else \expandafter\tagging:ignore\fi} \def\tagging:ignore#1#{\ignore} % \addstructuretype [options] Existing Alias \protected\def\addstructuretype{\withoptions[]\addstructure:type} \def\addstructure:type[#1]{\struct:addalias{return {#1}}} % \setalttext {...} and \setactualtext {...} \protected\def\setalttext{\iftagging:enabled \expandafter\tagging:alt\fi} \protected\def\setactualtext{\iftagging:enabled \expandafter\tagging:actual\fi} % 1 auto-marking paragraphs % \nextpartag {H} % \nextpartag {} % no tag inserted for next paragraph % \markparagraphs(true|false) \newif\ifmarkparagraphs \markparagraphstrue \newtoks\nextpartag \nextpartag{P} \toksapp\minim:ateverypar{\iftagging:enabled \ifmarkparagraphs \expandafter\ifx\expandafter\relax\the\nextpartag\relax\else \startelement{\the\nextpartag}\fi \nextpartag{P}\fi \fi} % 1 tagging helper macros % \marktocentry {destination}{label}{title}{filler}{page} \def\marktocentry#1#2#3#4#5{% \ifx\marktocentry#1\marktocentry \def\marktocentry:link##1{##1}\else \def\marktocentry:link##1{\hyperlink dest{#1}##1\endlink}\fi \markelement{TOCI}{\nextpartag{}\quitvmode \ifx\marktocentry#2\marktocentry\else \markelement{Lbl}{\marktocentry:link{#2}}\fi \markelement{Reference}{\marktocentry:link{#3% \ifx\marktocentry#4\marktocentry\else \markartifact{Layout}{#4}\fi#5}}}} % \marktable \halign {\marktablerow#&\marktablecell#\cr % \marktableheader % Header & cells \cr % \marktablebody % ... & ... \cr ... % \marktablefooter % ... & ... \cr ... } % \def\marktable{\startelement{Table}% \def\tagging:cell{TD}} \def\marktableheader{% \noalign{\gdef\tagging:cell{TH}% \startelement{THead}% \savecurrentelementto\tagging:tpart}} \def\marktablebody{% \noalign{\gdef\tagging:cell{TD}% \startelement{TBody}% \savecurrentelementto\tagging:tpart}} \def\marktablefooter{% \noalign{\startelement{TFoot}% \savecurrentelementto\tagging:tpart}} \def\marktablerow{ \unless\ifdefined\tagging:tpart \startelement{TBody}% \savecurrentelementto\tagging:tpart\fi \continueelementfrom\tagging:tpart \startelement{TR}% \savecurrentelementto\tagging:row \startelement{\tagging:cell}} \def\marktablecell{% \continueelementfrom\tagging:row \startelement{\tagging:cell}} % \automarktable \halign ... { ... } \def\automarktable#1#{\marktable \def\tagging:table{\tagging:mktrow{#1}}% \afterassignment\tagging:table \let\tagging:tmp= } \def\tagging:mktrow#1#2\cr{\iftrue \tagging:mktcell{#1\bgroup\marktablerow#2}\fi #3&\tagging:mktrow&\cr} \def\tagging:mktcell#1#2\fi#3&{\fi \ifx\tagging:mktrow#3\tagging:mkthdr{#1}\fi \ifx\tagging:mktrow#3\tagging:mktrow \tagging:mktcell{#1&}\else \tagging:mktcell{#1&\marktablecell#3}\fi} \def\tagging:mkthdr#1#2\cr#3\cr{\fi#1\cr \marktableheader#3\cr\marktablebody} \def\tagging:fi{\fi} % \marktableaslist \halign ... { ... } \def\marktableaslist#1#{\startelement{L}% \def\tagging:table{\tagging:mktlist{#1}}% \afterassignment\tagging:table \let\tagging:tmp= } \def\tagging:mktlist#1#2&{#1\bgroup \startelement{LI}\savecurrentelement \startelement{Lbl}#2&\continueelement \startelement{LBody}} % \autotagformulas % \stopformulatagging ... \startformulatagging % \formulafilename \newif \iftagging:indisplay \newif \iftagging:toplevelmath \tagging:toplevelmathtrue \newif \iftagging:formulaenabled \let\startformulatagging = \tagging:formulaenabledtrue \let\stopformulatagging = \tagging:formulaenabledfalse \newcount \tagging:formulanr \def\formulafilename{unnumbered-equation-\the\tagging:formulanr} \def\autotagformulas{\startformulatagging \everymath\expandafter{\the\everymath \tagging:formula\tagging:startformula}% \everydisplay\expandafter{\the\everydisplay \tagging:indisplaytrue \tagging:formula\tagging:startdisplay}} \def\tagging:formula#1{% \iftagging:enabled \iftagging:formulaenabled \iftagging:toplevelmath \tagging:toplevelmathfalse #1\fi\fi\fi} \def\tagging:startformula\fi\fi\fi#1${\tagging:makeformula{#1}{$}} \def\tagging:startdisplay\fi\fi\fi#1$${\tagging:makeformula{#1}{$$}} \def\tagging:makeformula#1#2{\fi\fi\fi \global\advance\tagging:formulanr1\relax \startelement\iftagging:indisplay block\else inline\fi{Formula}% \setalttext{\tagging:formulasource{#1}}% \setactualtext{\tagging:formulasource{#1}}% \ifnum3=\pdfaconformancelevel \embedfile mimetype text/x-tex relation Source desc {Equation source} name {\formulafilename.tex} string {\tagging:formulasource{#1}}\fi \scantextokens{#1}#2} \def\tagging:formulasource#1{% $\iftagging:indisplay$\fi \unexpanded{#1}% $\iftagging:indisplay$\fi} % 1 hyperlinks % provided by the lua module: % \newdestinationname % \lastdestinationname % \nameddestination {name} \def\nameddestination{\ifhmode\expandafter\linkdest:h\else\expandafter\linkdest:v\fi} \def\linkdest:h#1{\vadjust pre{\linkdest:v{#1}}} \def\linkdest:v#1{\pdfextension dest name {#1} xyz\nobreak} % \hyperlink dest {name} ... \endlink % \hyperlink url {url} ... \endlink \protected\def\endlink{\pdfextension endlink\stopelement{Link}\relax} \protected\def\startlink{\startelement{Link}\pdfextension startlink} \def\hyperlink#1#{\quitvmode\hyperlink:rmspace#1 \hyperlink:rmspace} \def\hyperlink:rmspace#1 #2\hyperlink:rmspace{% \startlink attr {\minim:linkattr}% \csname hyperlink:#1\endcsname} \def\hyperlink:dest#1{user {/Subtype/Link /F 4 /A <>}} \def\hyperlink:url#1{user {/Subtype/Link /F 4 /A <>}} \def\minim:linkattr{/Border [0 0 0]} % 1 languages % provided by the lua module: % \setdocumentlanguage {name or code} % \setlanguagecode {name} {code} % \minim:apply:language:code{name} → index % patch in language codes to \uselanguage \ifcsname uselanguage@hook\endcsname \expandafter\let \expandafter\minim:uselanguagehook \lastnamedcs \fi \expandafter\edef\csname uselanguage@hook\endcsname#1{% % tagging support \noexpand\tagging:current:language \noexpand\minim:apply:language:code{#1}% % previous definitions \ifdefined\minim:uselanguagehook \noexpand\minim:uselanguagehook{#1}\fi} % \newnamedlanguage {name} {lhm} {rhm} \def\newnamedlanguage#1#2#3{% \expandafter\newlanguage\csname lang@#1\endcsname \expandafter\chardef\csname lhm@#1\endcsname=#2\relax \expandafter\chardef\csname rhm@#1\endcsname=#3\relax \csname lu@texhyphen@loaded@\the\csname lang@#1\endcsname\endcsname} % \newnameddialect {language} {dialect} \def\newnameddialect#1#2{% \expandafter\chardef\csname lang@#2\endcsname\csname lang@#1\endcsname \expandafter\chardef\csname lhm@#2\endcsname\csname lhm@#1\endcsname \expandafter\chardef\csname rhm@#2\endcsname\csname rhm@#1\endcsname} % and provide several dummy languages \ifcsname lang@nohyph\endcsname \else \newnamedlanguage {nohyph} 1 1 \fi \ifcsname lang@nolang\endcsname \else \newnameddialect {nohyph} {nolang} \fi \ifcsname lang@uncoded\endcsname \else \newnameddialect {nohyph} {uncoded} \fi \ifcsname lang@undetermined\endcsname \else \newnameddialect {nohyph} {undetermined} \fi % 1 embedded files % provided by the lua module % \embedfile % \setembeddedfilesmodate { yyyy-mm-dd } \newtoks\setembeddedfilesmoddate \setembeddedfilesmoddate{} \newtoks\embeddedfiles:moddate \def\minim:makedefaultmoddate{% \expandafter\edef\expandafter \minim:tmp\expandafter{\the\setembeddedfilesmoddate}% \embeddedfiles:moddate\expandafter{\minim:tmp}} % 1 declarations of pdf/a conformance \newcount \pdfaconformancelevel \pdfaconformancelevel = 0 % \pdfalevel 2b \def\pdfalevel#1#2{% \global\pdfaconformancelevel=#1\relax \ifcsname minim:pdfa:#1#2\endcsname \lastnamedcs\else \errmessage{Unknown pdf/a standard pdf/a-#1}\fi} \def\minim:pdfasettings#1#2#3{% \pdfvariable minorversion #1\relax \minim:default:rgb:profile \if#2A\writedocumentstructure1\fi \input minim-xmp \setmetadata pdfaid:conformance{#2}% \setmetadata pdfaid:part{#3}} \expandafter\def\csname minim:pdfa:1a\endcsname{\minim:pdfasettings 4A1} \expandafter\def\csname minim:pdfa:1b\endcsname{\minim:pdfasettings 4B1} \expandafter\def\csname minim:pdfa:2a\endcsname{\minim:pdfasettings 7A2} \expandafter\def\csname minim:pdfa:2b\endcsname{\minim:pdfasettings 7B2} \expandafter\def\csname minim:pdfa:2u\endcsname{\minim:pdfasettings 7U2} \expandafter\def\csname minim:pdfa:3a\endcsname{\minim:pdfasettings 7A3} \expandafter\def\csname minim:pdfa:3b\endcsname{\minim:pdfasettings 7B3} \expandafter\def\csname minim:pdfa:3u\endcsname{\minim:pdfasettings 7U3} %  \catcode`\: = \minimpdfloaded