diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty | 506 |
1 files changed, 254 insertions, 252 deletions
diff --git a/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty b/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty index 3f6ce228834..984df8a986a 100644 --- a/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty +++ b/Master/texmf-dist/tex/latex/tagpdf/tagpdf-mc-code-generic.sty @@ -1,285 +1,287 @@ -\ProvidesExplPackage {tagpdf-mc-code-generic} {2019/07/02} {0.61} +%% +%% This is file `tagpdf-mc-code-generic.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% tagpdf-mc.dtx (with options: `generic') +%% +%% 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-mc.dtx +\ProvidesExplPackage {tagpdf-mc-code-generic} {2021/02/23} {0.80} {part of tagpdf - code related to marking chunks - generic mode} -% for the label system -% tagmcid is the id which should be also in the pdf -% it will be (hopefully) reset by page -\int_new:N \g__uftag_MCID_tmp_bypage_int -\zref@newprop {tagmcid} [0] { \int_use:N \g__uftag_MCID_tmp_bypage_int } -\zref@addprop {uftagzrl} {tagmcid} +\__tag_prop_new:N \g__tag_MCID_byabspage_prop -% will hold the current maximum on a page -% it will contain key-value of type "abspagenum=max mcid on this page" -\__uftag_prop_new:N \g__uftag_MCID_byabspage_prop +\bool_new:N \g__tag_in_mc_bool -%to test nesting mc: -\bool_new:N \g__uftag_in_mc_bool +\prg_new_conditional:Nnn \__tag_mc_if_in: {p,T,F,TF} + { + \bool_if:NTF \g__tag_in_mc_bool + { \prg_return_true: } + { \prg_return_false: } + } -\prg_new_conditional:Nnn \__uftag_mc_if_in: {p,T,F,TF} - { - \bool_if:NTF \g__uftag_in_mc_bool - { \prg_return_true: } - { \prg_return_false: } - } +\prg_new_eq_conditional:NNn \tag_mc_if_in: \__tag_mc_if_in: {p,T,F,TF} -\prg_new_eq_conditional:NNn \uftag_mc_if_in: \__uftag_mc_if_in: {p,T,F,TF} +\prg_new_eq_conditional:NNn \uftag_mc_if_in: \__tag_mc_if_in: {p,T,F,TF} +\cs_new_protected:Nn \__tag_mc_bmc:n + { + \pdf_bmc:n {#1} + } -% this are the low level mc command. -% they insert literals and so a are specific to generic mode -% checking if the type is defined will done somewhere else -% #1 is the type/tag -% change 04.08.2018: I don't try to escape the name, but assume that it is valid. -% Checks/conversions should perhaps be done on a higher level -\cs_new:Nn \__uftag_mc_bmc:n - { - \__uftag_pdfliteral_page:n - { - /#1\c_space_tl BMC - } - } +\cs_new_protected:Nn \__tag_mc_emc: + { + \pdf_emc: + %\__tag_pdfliteral_page:n + } -\cs_new:Nn \__uftag_mc_emc: - { - \__uftag_pdfliteral_page:n - { - EMC - } - } +\cs_new_protected:Nn \__tag_mc_bdc:nn + { + \pdf_bdc:nn { #1 } { #2 } + } + +\cs_generate_variant:Nn \__tag_mc_bdc:nn {nx} + +\tl_new:N \l__tag_mc_ref_abspage_tl %will store the abspage value of label +\tl_new:N \l__tag_mc_tmp_tl -% #1 tag, #2 properties -% change 04.08.2018: I don't escape the name. Also the dictionary content -% must imho be done at a higher level -\cs_new:Nn \__uftag_mc_bdc:nn - { - \__uftag_pdfliteral_page:n - { - /#1\c_space_tl<<#2>>~BDC - } +\cs_new:Nn \__tag_mc_bdc_mcid:nn + { + \int_gincr:N \c@g__tag_MCID_abs_int + \tl_set:Nx \l__tag_mc_ref_abspage_tl + { + \__tag_ref_value:enn %3 args + { + mcid-\int_use:N \c@g__tag_MCID_abs_int + } + { tagabspage } + {-1} + } + \prop_get:NoNTF + \g__tag_MCID_byabspage_prop + { + \l__tag_mc_ref_abspage_tl + } + \l__tag_mc_tmp_tl + { + %key already present, use value for MCID and add 1 for the next + \int_gset:Nn \g__tag_MCID_tmp_bypage_int { \l__tag_mc_tmp_tl } + \__tag_prop_gput:Nxx + \g__tag_MCID_byabspage_prop + { \l__tag_mc_ref_abspage_tl } + { \int_eval:n {\l__tag_mc_tmp_tl +1} } + } + { + %key not present, set MCID to 0 and insert 1 + \int_gzero:N \g__tag_MCID_tmp_bypage_int + \__tag_prop_gput:Nxx + \g__tag_MCID_byabspage_prop + { \l__tag_mc_ref_abspage_tl } + {1} + } + \__tag_ref_label:en + { + mcid-\int_use:N \c@g__tag_MCID_abs_int + } + { mc } + %\exp_args:Nnx + \__tag_mc_bdc:nx + {#1} + { /MCID~\int_eval:n { \g__tag_MCID_tmp_bypage_int }~ \exp_not:n { #2 } } } +\cs_new:Nn \__tag_mc_bdc_mcid:n + { + \__tag_mc_bdc_mcid:nn {#1} {} + } -% bdc with /MCID + more properties -% we need a ref-label system to ensure that the cnt restarts at 0 on a new page +\cs_new:Nn \__tag_mc_bmc_artifact: + { + \__tag_mc_bmc:n {Artifact} + } -\tl_new:N \l__uftag_mc_ref_abspage_tl %will store the abspage value of label -\tl_new:N \l__uftag_mc_tmp_tl +\cs_new:Nn \__tag_mc_bmc_artifact:n + { + \__tag_mc_bdc:nn {Artifact}{/Type/#1} + } -\cs_new:Nn \__uftag_mc_bdc_mcid:nn - { - \int_gincr:N \c@g__uftag_MCID_abs_int - \tl_set:Nx \l__uftag_mc_ref_abspage_tl - { - \zref@extractdefault %3 args - { - mcid-\int_use:N \c@g__uftag_MCID_abs_int - } - {tagabspage} - {-1} - } - \prop_get:NoNTF - \g__uftag_MCID_byabspage_prop - { - \l__uftag_mc_ref_abspage_tl - } - \l__uftag_mc_tmp_tl - { - %key already present, use value for MCID and add 1 for the next - \int_gset:Nn \g__uftag_MCID_tmp_bypage_int { \l__uftag_mc_tmp_tl } - \__uftag_prop_gput:Nxx - \g__uftag_MCID_byabspage_prop - { \l__uftag_mc_ref_abspage_tl } - { \int_eval:n {\l__uftag_mc_tmp_tl +1} } - } - { - %key not present, set MCID to 0 and insert 1 - \int_gzero:N \g__uftag_MCID_tmp_bypage_int - \__uftag_prop_gput:Nxx - \g__uftag_MCID_byabspage_prop - { \l__uftag_mc_ref_abspage_tl } - {1} - } - \zref@labelbylist - { - mcid-\int_use:N \c@g__uftag_MCID_abs_int - } - {uftagzrl} - \__uftag_mc_bdc:nn - {#1} - { /MCID~\int_eval:n { \g__uftag_MCID_tmp_bypage_int }~#2 } - } -% only /MCID -\cs_new:Nn \__uftag_mc_bdc_mcid:n - { - \__uftag_mc_bdc_mcid:nn {#1} {} - } -%artifact without type -\cs_new:Nn \__uftag_mc_bmc_artifact: - { - \__uftag_mc_bmc:n {Artifact} - } +\tl_new:N \l__tag_mc_key_tag_tl +\tl_new:N \g__tag_mc_key_tag_tl %for "outside" queries +\tl_new:N \l__tag_mc_key_properties_tl -%artifact with a type: -\cs_new:Nn \__uftag_mc_bmc_artifact:n - { - \__uftag_mc_bdc:nn {Artifact}{/Type\c_space_tl/#1} - } +\keys_define:nn { __tag / mc } + { + tag .code:n = % the name (H,P,Spa) etc + { + %%????????? \pdfescapename?? + \tl_set:Nx \l__tag_mc_key_tag_tl { #1 } + \tl_gset:Nx \g__tag_mc_key_tag_tl { #1 } + }, + raw .code:n = + { + \tl_put_right:Nx \l__tag_mc_key_properties_tl { #1 } + }, + alttext .code:n = % Alt property + { + \str_set_convert:Nnon + \l__tag_tmpa_str + { #1 } + { default } + { utf16/hex } + \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< } + \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ } + }, + alttext-o .code:n = % Alt property + { + \str_set_convert:Noon + \l__tag_tmpa_str + { #1 } + { default } + { utf16/hex } + \tl_put_right:Nn \l__tag_mc_key_properties_tl { /Alt~< } + \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ } + }, + actualtext .code:n = % ActualText property + { + \str_set_convert:Nnon + \l__tag_tmpa_str + { #1 } + { default } + { utf16/hex } + \tl_put_right:Nn \l__tag_mc_key_properties_tl { /ActualText~< } + \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ } + }, + actualtext-o .code:n = % ActualText property + { + \str_set_convert:Noon + \l__tag_tmpa_str + { #1 } + { default } + { utf16/hex } + \tl_put_right:Nn \l__tag_mc_key_properties_tl { /ActualText~< } + \tl_put_right:No \l__tag_mc_key_properties_tl { \l__tag_tmpa_str>~ } + }, + label .tl_set:N = \l__tag_mc_key_label_tl, + artifact .code:n = + { + \exp_args:Nnx + \keys_set:nn + { __tag / mc } + { artifact-bool, artifact-type=#1 } + }, + artifact .default:n = {notype} + } -% perhaps later: more properties for artifacts +\cs_new:Nn \__tag_mc_handle_artifact:N %#1 contains the artifact type + { + \tl_if_empty:NTF #1 + { \__tag_mc_bmc_artifact: } + { \exp_args:No\__tag_mc_bmc_artifact:n {#1} } + } +\cs_new:Nn \__tag_mc_handle_mcid:nn %#1 tag, #2 properties + { + \__tag_mc_bdc_mcid:nn {#1} {#2} + } -% keyval definitions for the user commands: +\cs_generate_variant:Nn \__tag_mc_handle_mcid:nn {VV} -\tl_new:N \l__uftag_mc_key_tag_tl -\tl_new:N \g__uftag_mc_key_tag_tl %for "outside" queries -\tl_new:N \l__uftag_mc_key_properties_tl -%Attention! definitions are different in luamode. -% tag and raw are expanded as \directlua in lua does it too. -\keys_define:nn { uftag / mc } - { - tag .code:n = % the name (H,P,Span etc - { - %%????????? \pdfescapename?? - \tl_set:Nx \l__uftag_mc_key_tag_tl { #1 } - \tl_gset:Nx \g__uftag_mc_key_tag_tl { #1 } - }, - raw .code:n = - { - \tl_put_right:Nx \l__uftag_mc_key_properties_tl { #1 } - } - , - alttext .code:n = % Alt property - { - \str_set_convert:Nnon - \l__uftag_tmpa_str - { #1 } - { \g__uftag_inputencoding_tl } - { utf16/hex } - \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< } - \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ } - }, - alttext-o .code:n = % Alt property - { - \str_set_convert:Noon - \l__uftag_tmpa_str - { #1 } - { \g__uftag_inputencoding_tl } - { utf16/hex } - \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /Alt~< } - \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ } - }, - actualtext .code:n = % ActualText property - { - \str_set_convert:Nnon - \l__uftag_tmpa_str - { #1 } - { \g__uftag_inputencoding_tl } - { utf16/hex } - \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /ActualText~< } - \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ } - }, - actualtext-o .code:n = % ActualText property - { - \str_set_convert:Noon - \l__uftag_tmpa_str - { #1 } - { \g__uftag_inputencoding_tl } - { utf16/hex } - \tl_put_right:Nn \l__uftag_mc_key_properties_tl { /ActualText~< } - \tl_put_right:No \l__uftag_mc_key_properties_tl { \l__uftag_tmpa_str>~ } - }, - label .tl_set:N = \l__uftag_mc_key_label_tl, - artifact .code:n = { \exp_args:Nnx \keys_set:nn { uftag / mc } { artifact-bool, artifact-type=#1 } }, - artifact .default:n = {notype} - } +\cs_new:Nn \__tag_mc_handle_stash:n %1 mcidnum + { + \__tag_check_mc_used:n {#1} + \__tag_struct_kid_mc_gput_right:nn + { \g__tag_struct_stack_current_tl } + {#1} + \prop_gput:Nxx \g__tag_mc_parenttree_prop + {#1} + { \g__tag_struct_stack_current_tl } + } -\cs_new:Nn \__uftag_mc_handle_artifact:N %#1 contains the artifact type - { - \tl_if_empty:NTF #1 - { \__uftag_mc_bmc_artifact: } - { \exp_args:No\__uftag_mc_bmc_artifact:n {#1} } - } +\cs_new_protected:Nn \tag_mc_begin:n + { + \group_begin: %hm + \__tag_check_mc_if_nested: + \bool_gset_true:N \g__tag_in_mc_bool + \keys_set:nn { __tag / mc } {#1} + \bool_if:NTF \l__tag_mc_artifact_bool + { %handle artifact + \__tag_mc_handle_artifact:N \l__tag_mc_artifact_type_tl + } + { %handle mcid type + \__tag_check_mc_tag:N \l__tag_mc_key_tag_tl + \__tag_mc_handle_mcid:VV + \l__tag_mc_key_tag_tl + \l__tag_mc_key_properties_tl + \tl_if_empty:NF {\l__tag_mc_key_label_tl} + { + \__tag_mc_handle_mc_label:n { \l__tag_mc_key_label_tl } + } + \bool_if:NF \l__tag_mc_key_stash_bool + { + \__tag_mc_handle_stash:n { \int_use:N \c@g__tag_MCID_abs_int } + } + } + \group_end: + } -\cs_new:Nn \__uftag_mc_handle_mcid:nn %#1 tag, #2 properties - { - \__uftag_mc_bdc_mcid:nn {#1} {#2} - } +\cs_set_eq:NN \uftag_mc_begin:n \tag_mc_begin:n +\cs_new_protected:Nn \tag_mc_end: + { + \__tag_check_mc_if_open: + \bool_gset_false:N \g__tag_in_mc_bool + \tl_gset:Nn \g__tag_mc_key_tag_tl { } + \__tag_mc_emc: + } -% puts the absolute number of an mcid in the current structure -\cs_new:Nn \__uftag_mc_handle_stash:n %1 mcidnum - { - \__uftag_check_mc_used:n {#1} - \__uftag_struct_kid_mc_gput_right:nn - { \g__uftag_struct_stack_current_tl } - {#1} - \prop_gput:Nxx \g__uftag_mc_parenttree_prop - {#1} - { \g__uftag_struct_stack_current_tl } - } +\cs_set_eq:NN \uftag_mc_end: \tag_mc_end: -\cs_new_protected:Nn \uftag_mc_begin:n - { - \group_begin: - \__uftag_check_mc_if_nested: - \bool_gset_true:N \g__uftag_in_mc_bool - \keys_set:nn { uftag / mc } {#1} - \bool_if:NTF \l__uftag_mc_artifact_bool - { %handle artifact - \__uftag_mc_handle_artifact:N \l__uftag_mc_artifact_type_tl - } - { %handle mcid type - \__uftag_check_mc_tag:N \l__uftag_mc_key_tag_tl - \__uftag_mc_handle_mcid:nn { \l__uftag_mc_key_tag_tl }{\l__uftag_mc_key_properties_tl} - \tl_if_empty:NF {\l__uftag_mc_key_label_tl} +\cs_new_protected:Nn \tag_mc_use:n %#1: label name + { + \tl_set:Nx \l_tmpa_tl { \__tag_ref_value:enn{tagpdf-#1}{tagmcabs}{} } + \tl_if_empty:NTF\l_tmpa_tl { - \__uftag_mc_handle_mc_label:n { \l__uftag_mc_key_label_tl } + \msg_warning:nnn {tag} {mc-label-unknown} {#1} } - \bool_if:NF \l__uftag_mc_key_stash_bool - { - \__uftag_mc_handle_stash:n { \int_use:N \c@g__uftag_MCID_abs_int } - } - } - \group_end: - } - -\cs_new_protected:Nn \uftag_mc_end: - { - \__uftag_check_mc_if_open: - \bool_gset_false:N \g__uftag_in_mc_bool - \tl_gset:Nn \g__uftag_mc_key_tag_tl { } - \__uftag_mc_emc: - } + { + \prop_gput:Nxx + \g__tag_mc_parenttree_prop + { + \__tag_ref_value:enn {tagpdf-#1} {tagmcabs} {} + } + { + \g__tag_struct_stack_current_tl + } + \__tag_struct_kid_mc_gput_right:nn + { + \g__tag_struct_stack_current_tl + } + { + \__tag_ref_value:enn {tagpdf-#1} {tagmcabs} {} + } + } + } -\cs_new_protected:Nn \uftag_mc_use:n %#1: label name - { - \tl_set:Nx \l_tmpa_tl { \zref@extractdefault{tagpdf-#1}{tagmcabs}{} } - \tl_if_empty:NTF\l_tmpa_tl - { - \msg_warning:nnn {uftag} {mc-label-unknown} {#1} - } - { - \prop_gput:Nxx - \g__uftag_mc_parenttree_prop - { - \zref@extractdefault {tagpdf-#1} {tagmcabs} {} - } - { - \g__uftag_struct_stack_current_tl - } - \__uftag_struct_kid_mc_gput_right:nn - { - \g__uftag_struct_stack_current_tl - } - { - \zref@extractdefault {tagpdf-#1} {tagmcabs} {} - } - } - } +\cs_set_eq:NN \uftag_mc_use:n \tag_mc_use:n -\cs_new:Nn \__uftag_get_data_mc_tag: { \g__uftag_mc_key_tag_tl } +\cs_new:Nn \__tag_get_data_mc_tag: { \g__tag_mc_key_tag_tl } -\endinput +%% +%% +%% End of file `tagpdf-mc-code-generic.sty'. |