% \iffalse meta-comment % %% File: tagpdf-roles.dtx % % Copyright (C) 2019 Ulrike Fischer % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this % license or (at your option) any later version. The latest version % of this license is in the file % % https://www.latex-project.org/lppl.txt % % This file is part of the "tagpdf bundle" (The Work in LPPL) % and all files in that bundle must be distributed together. % % ----------------------------------------------------------------------- % % The development version of the bundle can be found at % % https://github.com/u-fischer/tagpdf % % for those people who are interested. % % \fi % % \begin{macrocode} %<@@=tag> %<*roles> \ProvidesExplPackage {tagpdf-roles-code} {2021/02/23} {0.80} {part of tagpdf - code related to roles and structure names} \@@_seq_new:N \g_@@_role_tags_seq %to get names from numbers \@@_prop_new:N \g_@@_role_tags_prop %to get numbers from names %The list of standard adobe tags. \clist_const:Nn \c_@@_role_sttags_clist {%possible root elements Document, %A complete document. This is the root element of any structure tree containing %multiple parts or multiple articles. Part, %A large-scale division of a document. Art, %A relatively self-contained body of text constituting a single narrative or exposition %subelements Sect, %A container for grouping related content elements. Div, %A generic block-level element or group of elements BlockQuote, %A portion of text consisting of one or more paragraphs attributed to someone other %than the author of the surrounding text. Caption, %A brief portion of text describing a table or figure. TOC, %A list made up of table of contents item entries (structure tag TOCI; see below) %and/or other nested table of contents entries TOCI, %An individual member of a table of contents. This entry's children can be any of %the following structure tags: %Lbl,Reference,NonStruct,P,TOC Index, NonStruct, %probably not needed H, H1, H2, H3, H4, H5, H6, P, L, %list LI, %list item (around label and list item body) Lbl, %list label LBody, %list item body Table, TR, %table row TH, %table header cell TD, %table data cell THead, %table header (n rows) TBody, %table rows TFoot, %table footer Span, %generic inline marker Quote, %inline quote Note, % footnote, endnote. Lbl can be child Reference, % A citation to content elsewhere in the document. BibEntry, %bibentry Code, % Link, % Annot, Figure, Formula, Form, Artifact } % get tag name from number: \seq_item:Nn \g_@@_role_tags_seq { n } %\seq_gset_from_clist:NN \g_@@_role_tags_seq \c_@@_role_tags_clist \clist_map_inline:Nn \c_@@_role_sttags_clist { \@@_seq_gput_right:Nn \g_@@_role_tags_seq { #1 } } % get tag number from name: \prop_item:Nn \g_@@_role_tags_prop { name } \int_step_inline:nnnn { 1 }{ 1 }{ \seq_count:N \g_@@_role_tags_seq } { \@@_prop_gput:Nxn \g_@@_role_tags_prop { \seq_item:Nn \g_@@_role_tags_seq { #1 } } { #1 } } \cs_new:Nn \@@_role_get_tag_from_index:nn { \@@_seq_item:cn { #1_seq } { #2 } } \cs_new:Nn \@@_role_get_index_from_tag:nn { \@@_prop_item:cn { #1_prop } { #2 } } % new tags and the rolemap \@@_prop_new:N \g_@@_role_rolemap_prop \cs_new_protected:Nn \@@_role_add_tag:nn %new name, reference to old { \@@_seq_gput_right:Nn \g_@@_role_tags_seq { #1 } \@@_prop_gput:Nnx \g_@@_role_tags_prop { #1 } { \seq_count:N \g_@@_role_tags_seq } \@@_check_add_tag_role:nn {#1}{#2} \tl_if_empty:nF { #2 } { \@@_prop_gput:Nnn \g_@@_role_rolemap_prop { #1 } { #2 } } } \cs_generate_variant:Nn \@@_role_add_tag:nn {xx} \keys_define:nn { @@ / setup } { add-new-tag .code:n = { \seq_set_split:Nnn \l_tmpa_seq { / } {#1/} \@@_role_add_tag:xx { \seq_item:Nn \l_tmpa_seq {1} } { \seq_item:Nn \l_tmpa_seq {2} } } } % % \end{macrocode}