summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty')
-rw-r--r--macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty270
1 files changed, 270 insertions, 0 deletions
diff --git a/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
new file mode 100644
index 0000000000..d810bef9f1
--- /dev/null
+++ b/macros/latex/contrib/tagpdf/tagpdfdocu-patches.sty
@@ -0,0 +1,270 @@
+\RequirePackage{expl3}[2018/06/14]
+%\RequirePackage[enable-debug]{expl3}[2018/06/14]
+\RequirePackage{xpatch}
+\ProvidesExplPackage {tagpdfdocu-patches} {2019/07/02} {0.61}
+ {patches/commands for the tagpdf documentation}
+
+% to do : marginnote, perhaps the description macros ...
+% to do: footnotes!
+% printbibliography?
+
+\newbibmacro*{begentry}{\tagstructbegin{tag=BibEntry}\tagmcbegin{tag=BibEntry}}
+\newbibmacro*{finentry}{\finentry\tagmcend\tagstructend}
+
+% hyperref
+\@ifpackageloaded{hyperref}{%
+\pdfstringdefDisableCommands{
+ \let\tagstructbegin\@gobble
+ \let\tagmcbegin\@gobble
+ \let\tagmcend\relax
+ \let\tagstructend\relax
+}}{}
+
+%%%%%
+% Paragraphs
+%%%%%
+
+% we need a command which simply starts a paragraph \TagP^,
+% a "continuation" variant which closes the previous paragraph (\TagP),
+% and a final end.
+
+\NewDocumentCommand\TagP{t{^}}
+ {
+ \uftag_mc_if_in:T { \uftag_mc_end: }
+ \IfBooleanF{#1}
+ {
+ \uftag_struct_end:
+ }
+ \uftag_struct_begin:n{tag=P}
+ \uftag_mc_begin:n{tag=P}
+ }
+% close a mc and one structure
+
+\NewDocumentCommand\TagPend{}
+ {
+ \uftag_mc_if_in:T { \uftag_mc_end: }
+ \uftag_struct_end:
+ }
+
+
+%%%%%
+% maketitle
+%%%%%
+\tagpdfsetup{ add-new-tag=Title/H1 }
+
+%%%%%
+% tableofcontents
+%%%%%
+
+%Marking the toc entries
+%around the whole entry so only structure:
+\newcommand\tagscrtocentry[1]{\uftag_struct_begin:n{tag=TOCI}#1\uftag_struct_end:}
+
+%leaf so structure and mc:
+\newcommand\tagscrtocpagenumber[1]{%
+ \uftag_struct_begin:n{tag=Reference}%
+ \uftag_mc_begin:n{tag=Reference}%
+ #1%
+ \uftag_mc_end:
+ \uftag_struct_end:}
+
+
+\DeclareTOCStyleEntry[
+ entryformat=\tagscrtocentry,
+ pagenumberformat=\tagscrtocpagenumber]{tocline}{section}
+\DeclareTOCStyleEntry[
+ entryformat=\tagscrtocentry,
+ pagenumberformat=\tagscrtocpagenumber]{tocline}{subsection}
+\DeclareTOCStyleEntry[
+ entryformat=\tagscrtocentry,
+ pagenumberformat=\tagscrtocpagenumber]{tocline}{subsubsection}
+\DeclareTOCStyleEntry[
+ entryformat=\tagscrtocentry,
+ pagenumberformat=\tagscrtocpagenumber]{tocline}{paragraph}
+
+
+
+\renewcommand{\addtocentrydefault}[3]{%
+ \ifstr{#3}{}{}
+ {%\
+ \ifstr{#2}{}
+ {%
+ \addcontentsline{toc}{#1}
+ {%
+ \protect\nonumberline
+ \tagstructbegin{tag=P}%
+ \tagmcbegin{tag=P}%
+ #3%
+ \tagmcend
+ \tagstructend
+ }%
+ }%
+ {%
+ \addcontentsline{toc}{#1}{%
+ \tagstructbegin{tag=Lbl}%
+ \tagmcbegin{tag=Lbl}%
+ \protect\numberline{#2}%
+ \tagmcend\tagstructend
+ \tagstructbegin{tag=P}%
+ \tagmcbegin{tag=P}%
+ #3%
+ \tagmcend
+ \tagstructend
+ }%
+ }%
+ }}%
+
+% the dots must be marked too
+
+\renewcommand*{\TOCLineLeaderFill}[1][.]{
+ \leaders\hbox{$\m@th
+ \mkern \@dotsep mu\hbox{\uftag_mc_begin:n{artifact}#1\uftag_mc_end:}\mkern \@dotsep
+ mu$}\hfill
+}
+
+%%%%%%%%%
+% Sectioning commands
+%%%%%%%%
+
+\prop_new:N \g_tag_section_level_prop
+\prop_gput:Nnn \g_tag_section_level_prop {section}{H1}
+\prop_gput:Nnn \g_tag_section_level_prop {subsection}{H2}
+\prop_gput:Nnn \g_tag_section_level_prop {subsubsection}{H3}
+\prop_gput:Nnn \g_tag_section_level_prop {paragraph}{H4}
+
+
+
+%unnumbered sections level give an empty mc, need to think about it.
+\renewcommand{\sectionlinesformat}[4]
+ {
+ \@hangfrom
+ {\hskip #2
+ \tagstructbegin{tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
+ \tl_if_empty:nF{#3}
+ {
+ \uftag_mc_begin:n {tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
+ #3
+ \uftag_mc_end:
+ }
+ }
+ {\uftag_mc_begin:n {tag=\prop_item:Nn\g_tag_section_level_prop{#1}}
+ #4
+ \uftag_mc_end:\tagstructend}%
+ }
+
+%minisec is simply P, H6 doesn't work ....
+\cs_new:Nn \__uftag_docu_tag_minisec:n
+{
+ \uftag_struct_begin:n {tag=P}
+ \uftag_mc_begin:n{tag=P}
+ #1
+ \uftag_mc_end:
+ \uftag_struct_end:
+}
+
+\addtokomafont{minisec}{\__uftag_docu_tag_minisec:n}
+
+\AfterTOCHead{\uftag_struct_begin:n{tag=TOC}}
+\AfterStartingTOC{\uftag_struct_end:} %end TOC
+
+%% list
+
+\newcommand\uftag@enit@format@preset[1]{%
+ \tagstructbegin{tag=LI}%
+ \tagstructbegin{tag=Lbl}%
+ \tagmcbegin{tag=Lbl}%
+ #1%
+ \tagmcend
+ \tagstructend %end Lbl
+ \tagstructbegin{tag=LBody}}
+
+\newcommand\meti{% end of \item
+ \tagstructend %end of LBody
+ \tagstructend %end of LI
+}
+
+\newcommand\Pmeti{% end of \item
+ \TagPend %end of P
+ \tagstructend %end of LBody
+ \tagstructend %end of LI
+}
+
+\ExplSyntaxOff
+\xpatchcmd\enit@preset{\@firstofone}{\uftag@enit@format@preset}{}{\fail}
+\ExplSyntaxOn
+\setlist{
+ before*=\tagstructbegin{tag=L},
+ after*={\tagstructend}}
+
+% keys that overwrite \enit@format must be patched, eg like the follow
+% the font key should be patched in a similar way
+\enitkv@key{}{format}{% new enumitem don't use first argument
+ \def\enit@format{%
+ \tagstructbegin{tag=LI}%
+ \tagstructbegin{tag=Lbl}%
+ \tagmcbegin{tag=Lbl}%
+ #1\tagmcend}}
+
+ %%% hooks for links
+ %%% attention, to get the order right, it is necessary currently to start a new
+ %%% mc after a link! I'm not sure if this can/group be included in the hooks
+ %%% grouping is a bit tricky ...
+\cs_if_exist:NT\hook_put_left:nnn
+{
+ \hook_put_left:nnn
+ { pdf }
+ { link_begin_url }
+ {
+ \uftag_struct_begin:n{tag=Link}
+ \uftag_mc_begin:n{tag=Link}
+ }
+\hook_put:nnnn
+ { pdf }
+ { link_begin_url_attr }
+ { /StructParent }
+ { \int_use:N\c@g__uftag_parenttree_obj_int }
+
+\hook_put_right:nnn
+ { pdf }
+ { link_end_url }
+ {
+ \__uftag_struct_finish_link:
+ \uftag_mc_end:
+ \uftag_struct_end:
+ }
+
+\hook_put_left:nnn
+ { pdf }
+ { link_begin_link }
+ {
+ \uftag_struct_begin:n{tag=Link}
+ \uftag_mc_begin:n{tag=Link}
+ }
+\hook_put:nnnn
+ { pdf }
+ { link_begin_link_attr }
+ { /StructParent }
+ { \int_use:N\c@g__uftag_parenttree_obj_int }
+\hook_put_right:nnn
+ { pdf }
+ { link_end_link }
+ {
+ \__uftag_struct_finish_link:
+ \uftag_mc_end:
+ \uftag_struct_end:
+ }
+
+% "alternative descriptions " for PAX3. How to get better text here??
+\hook_put:nnnn
+ { pdf }
+ { link_begin_url_attr }
+ { /Contents }
+ { (url) }
+
+\hook_put:nnnn
+ { pdf }
+ { link_begin_link_attr }
+ { /Contents }
+ { (ref) }
+ }
+\endinput