%%
%% This is file `tagpdf-roles-code.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% tagpdf-roles.dtx  (with options: `roles')
%% 
%% 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.
%% 
%% File: tagpdf-roles.dtx
\ProvidesExplPackage {tagpdf-roles-code} {2021/02/23} {0.80}
 {part of tagpdf - code related to roles and structure names}

\__tag_seq_new:N     \g__tag_role_tags_seq  %to get names from numbers
\__tag_prop_new:N    \g__tag_role_tags_prop %to get numbers from names

\clist_const:Nn \c__tag_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
  }


\clist_map_inline:Nn \c__tag_role_sttags_clist
  {
    \__tag_seq_gput_right:Nn \g__tag_role_tags_seq { #1 }
  }

\int_step_inline:nnnn { 1 }{ 1 }{ \seq_count:N \g__tag_role_tags_seq }
  {
    \__tag_prop_gput:Nxn \g__tag_role_tags_prop
      {
        \seq_item:Nn \g__tag_role_tags_seq  { #1 }
      }
      { #1 }
  }

\cs_new:Nn \__tag_role_get_tag_from_index:nn
  {
    \__tag_seq_item:cn { #1_seq } { #2 }
  }

\cs_new:Nn \__tag_role_get_index_from_tag:nn
  {
    \__tag_prop_item:cn { #1_prop } { #2 }
  }


\__tag_prop_new:N \g__tag_role_rolemap_prop

\cs_new_protected:Nn \__tag_role_add_tag:nn %new name, reference to old
  {
    \__tag_seq_gput_right:Nn \g__tag_role_tags_seq { #1 }
    \__tag_prop_gput:Nnx \g__tag_role_tags_prop    { #1 }
      {
        \seq_count:N \g__tag_role_tags_seq
      }
    \__tag_check_add_tag_role:nn {#1}{#2}
    \tl_if_empty:nF { #2 }
      {
        \__tag_prop_gput:Nnn \g__tag_role_rolemap_prop
          { #1 } { #2 }
      }
  }

\cs_generate_variant:Nn \__tag_role_add_tag:nn {xx}

\keys_define:nn { __tag / setup }
  {
    add-new-tag .code:n =
     {
       \seq_set_split:Nnn \l_tmpa_seq { / } {#1/}
       \__tag_role_add_tag:xx
         {
           \seq_item:Nn \l_tmpa_seq {1}
         }
         {
           \seq_item:Nn \l_tmpa_seq {2}
         }
     }
  }

%% 
%%
%% End of file `tagpdf-roles-code.sty'.
