summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tagpdf/tagpdf-mc.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/tagpdf/tagpdf-mc.dtx')
-rw-r--r--macros/latex/contrib/tagpdf/tagpdf-mc.dtx818
1 files changed, 0 insertions, 818 deletions
diff --git a/macros/latex/contrib/tagpdf/tagpdf-mc.dtx b/macros/latex/contrib/tagpdf/tagpdf-mc.dtx
deleted file mode 100644
index 4842c8b993..0000000000
--- a/macros/latex/contrib/tagpdf/tagpdf-mc.dtx
+++ /dev/null
@@ -1,818 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: tagpdf-mc.dtx
-%
-% Copyright (C) 2019-2020 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>
-%<*shared>
-\ProvidesExplPackage {tagpdf-mc-code-shared} {2021-06-14} {0.82}
- {part of tagpdf - code related to marking chunks -
- code shared by generic and luamode }
-% I use a latex counter for the absolute count, so that it is added to
-% \cl@@ckpt and restored e.g. in tabulars and align
-% \int_new:N \c@g_@@_MCID_int and
-% \tl_put_right:Nn\cl@@ckpt{\@elt{g_uf_test_int}}
-% would work too, but as the name is not expl3 then too, why bother?
-% the absolute counter can be used to label and to check if the page
-% counter needs a reset.
-
-\newcounter { g_@@_MCID_abs_int }
-\cs_new:Nn \_@@_get_mc_abs_cnt: { \int_use:N \c@g_@@_MCID_abs_int }
-
-% tagmcabs is the label name of the absolute count which is used
-% to identify the chunk
-% the ref code is now in tagpdf.dtx
-
-%stores labels of mcid.
-\cs_new:Nn \_@@_mc_handle_mc_label:n
- {
- \@@_ref_label:en{tagpdf-#1}{mc}
- }
-
-% will hold the structure numbers for the parenttree
-% key: absolute number of the mc (tagmcabs)
-% value: the structure number the mc is in
-\_@@_prop_new:N \g_@@_mc_parenttree_prop
-
-% some commands (e.g. links) want to close a previous mc and reopen it after
-% there work. For this we create a stack:
-\seq_new:N \g_@@_mc_stack_seq
-% shared keys
-% the rest are in the splitted code
-\tl_new:N \l_@@_mc_artifact_type_tl
-
-\keys_define:nn { @@ / mc }
- {
- stash .bool_set:N = \l_@@_mc_key_stash_bool,
- artifact-bool .bool_set:N = \l_@@_mc_artifact_bool,
- artifact-type .choice:,
- artifact-type / pagination .code:n =
- {
- \tl_set:Nn \l_@@_mc_artifact_type_tl { Pagination }
- },
- artifact-type / layout .code:n =
- {
- \tl_set:Nn \l_@@_mc_artifact_type_tl { Layout }
- },
- artifact-type / page .code:n =
- {
- \tl_set:Nn \l_@@_mc_artifact_type_tl { Page }
- },
- artifact-type / background .code:n =
- {
- \tl_set:Nn \l_@@_mc_artifact_type_tl { Background }
- },
- artifact-type / notype .code:n =
- {
- \tl_set:Nn \l_@@_mc_artifact_type_tl {}
- },
- artifact-type / .code:n =
- {
- \tl_set:Nn \l_@@_mc_artifact_type_tl {}
- },
- }
-% \end{macrocode}
-% \begin{function}[added = 2019-11-20]
-% {
-% \tag_mc_artifact_group_begin:n, \tag_mc_artifact_group_end:
-% }
-% \begin{syntax}
-% \cs{tag_mc_artifact_group_begin:n} \Arg{name}
-% \end{syntax}
-% This command pair create a group with an artifact marker at the begin
-% and the end. Inside the group the tagging commands are disabled.
-% \end{function}
-% \begin{macrocode}
-
-
-\cs_new_protected:Npn \tag_mc_artifact_group_begin:n #1
- {
- \tag_mc_begin:n {artifact=#1}
- \tag_stop_group_begin:
- }
-
-\cs_new_protected:Npn \tag_mc_artifact_group_end:
- {
- \tag_stop_group_end:
- \tag_mc_end:
- }
-
-% we need to define it for both modes to avoid a problem with the label
-\int_new:N \g_@@_MCID_tmp_bypage_int
-
-% \end{macrocode}
-
-% \begin{function}[added = 2021-04-22]
-% {
-% \tag_mc_end_push:, \tag_mc_begin_pop:n
-% }
-% \begin{syntax}
-% \cs{tag_mc_end_push:} \\
-% \cs{tag_mc_begin_pop:n}\Arg{key-values}
-% \end{syntax}
-% If there is an open mc chunk,
-% \cs{tag_mc_end_push:} ends it and pushes its tag of the stack. If there is no
-% open chunk, it puts -1 on the stack (for debugging)
-% \cs{tag_mc_begin_pop:n} removes a value from the stack. If it is different from
-% -1 it opens a tag with it.
-% The reopened mc chunk looses info like the alttext for now.
-%
-% \begin{macrocode}
-\cs_new_protected:Npn \tag_mc_end_push:
- {
- \@@_mc_if_in:TF
- {
- \seq_gpush:Nx \g_@@_mc_stack_seq { \tag_get:n {mc_tag} }
- \@@_check_mc_pushed_popped:nn {pushed}{\tag_get:n {mc_tag}}
- \tag_mc_end:
- }
- {
- \@@_check_mc_pushed_popped:nn {pushed}{-1}
- \seq_gpush:Nn \g_@@_mc_stack_seq{ -1 }
- }
- }
-\cs_new_protected:Npn \tag_mc_begin_pop:n #1
- {
- \seq_gpop:NNTF \g_@@_mc_stack_seq \l_@@_tmpa_tl
- {
- \tl_if_eq:NnTF \l_@@_tmpa_tl {-1}
- {
- \@@_check_mc_pushed_popped:nn {popped}{-1}
- }
- {
- \@@_check_mc_pushed_popped:nn {popped}{\l_@@_tmpa_tl}
- \tag_mc_begin:n {tag=\l_@@_tmpa_tl,#1}
- }
- }
- { \@@_check_mc_pushed_popped:nn {popped}{empty~stack,~nothing} } %message?
- }
-
-%</shared>
-% \end{macrocode}
-% \begin{macrocode}
-%<*generic>
-\ProvidesExplPackage {tagpdf-mc-code-generic} {2021-06-14} {0.82}
- {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
-
-% ref code is in tagpdf.dtx now
-%
-% will hold the current maximum on a page
-% it will contain key-value of type "abspagenum=max mcid on this page"
-\@@_prop_new:N \g_@@_MCID_byabspage_prop
-
-%to test nesting mc:
-\bool_new:N \g_@@_in_mc_bool
-
-\prg_new_conditional:Nnn \@@_mc_if_in: {p,T,F,TF}
- {
- \bool_if:NTF \g_@@_in_mc_bool
- { \prg_return_true: }
- { \prg_return_false: }
- }
-
-\prg_new_eq_conditional:NNn \tag_mc_if_in: \@@_mc_if_in: {p,T,F,TF}
-
-
-
-% 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_protected:Nn \@@_mc_bmc:n
- {
- \pdf_bmc:n {#1}
-% \@@_pdfliteral_page:n
-% {
-% /#1\c_space_tl BMC
-% }
- }
-
-\cs_new_protected:Nn \@@_mc_emc:
- {
- \pdf_emc:
- %\@@_pdfliteral_page:n
-% {
-% EMC
-% }
- }
-
-% #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_protected:Nn \@@_mc_bdc:nn
- {
- \pdf_bdc:nn { #1 } { #2 }
- }
-
-\cs_generate_variant:Nn \@@_mc_bdc:nn {nx}
-% bdc with /MCID + more properties
-% we need a ref-label system to ensure that the cnt restarts at 0 on a new page
-
-\tl_new:N \l_@@_mc_ref_abspage_tl %will store the abspage value of label
-\tl_new:N \l_@@_mc_tmp_tl
-
-\cs_new:Nn \@@_mc_bdc_mcid:nn
- {
- \int_gincr:N \c@g_@@_MCID_abs_int
- \tl_set:Nx \l_@@_mc_ref_abspage_tl
- {
- \@@_ref_value:enn %3 args
- {
- mcid-\int_use:N \c@g_@@_MCID_abs_int
- }
- { tagabspage }
- {-1}
- }
- \prop_get:NoNTF
- \g_@@_MCID_byabspage_prop
- {
- \l_@@_mc_ref_abspage_tl
- }
- \l_@@_mc_tmp_tl
- {
- %key already present, use value for MCID and add 1 for the next
- \int_gset:Nn \g_@@_MCID_tmp_bypage_int { \l_@@_mc_tmp_tl }
- \@@_prop_gput:Nxx
- \g_@@_MCID_byabspage_prop
- { \l_@@_mc_ref_abspage_tl }
- { \int_eval:n {\l_@@_mc_tmp_tl +1} }
- }
- {
- %key not present, set MCID to 0 and insert 1
- \int_gzero:N \g_@@_MCID_tmp_bypage_int
- \@@_prop_gput:Nxx
- \g_@@_MCID_byabspage_prop
- { \l_@@_mc_ref_abspage_tl }
- {1}
- }
- \@@_ref_label:en
- {
- mcid-\int_use:N \c@g_@@_MCID_abs_int
- }
- { mc }
- %\exp_args:Nnx
- \@@_mc_bdc:nx
- {#1}
- { /MCID~\int_eval:n { \g_@@_MCID_tmp_bypage_int }~ \exp_not:n { #2 } }
- }
-
-% only /MCID
-\cs_new:Nn \@@_mc_bdc_mcid:n
- {
- \@@_mc_bdc_mcid:nn {#1} {}
- }
-
-%artifact without type
-\cs_new:Nn \@@_mc_bmc_artifact:
- {
- \@@_mc_bmc:n {Artifact}
- }
-
-%artifact with a type:
-\cs_new:Nn \@@_mc_bmc_artifact:n
- {
- \@@_mc_bdc:nn {Artifact}{/Type/#1}
- }
-
-% perhaps later: more properties for artifacts
-
-
-% keyval definitions for the user commands:
-
-\tl_new:N \l_@@_mc_key_tag_tl
-\tl_new:N \g_@@_mc_key_tag_tl %for "outside" queries
-\tl_new:N \l_@@_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 { @@ / mc }
- {
- tag .code:n = % the name (H,P,Spa) etc
- {
- %%????????? \pdfescapename??
- \tl_set:Nx \l_@@_mc_key_tag_tl { #1 }
- \tl_gset:Nx \g_@@_mc_key_tag_tl { #1 }
- },
- raw .code:n =
- {
- \tl_put_right:Nx \l_@@_mc_key_properties_tl { #1 }
- },
- alttext .code:n = % Alt property
- {
- \str_set_convert:Nnon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /Alt~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- },
- alttext-o .code:n = % Alt property
- {
- \str_set_convert:Noon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /Alt~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- },
- actualtext .code:n = % ActualText property
- {
- \str_set_convert:Nnon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /ActualText~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- },
- actualtext-o .code:n = % ActualText property
- {
- \str_set_convert:Noon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /ActualText~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- },
- label .tl_set:N = \l_@@_mc_key_label_tl,
- artifact .code:n =
- {
- \exp_args:Nnx
- \keys_set:nn
- { @@ / mc }
- { artifact-bool, artifact-type=#1 }
- },
- artifact .default:n = {notype}
- }
-
-\cs_new:Nn \@@_mc_handle_artifact:N %#1 contains the artifact type
- {
- \tl_if_empty:NTF #1
- { \@@_mc_bmc_artifact: }
- { \exp_args:No\@@_mc_bmc_artifact:n {#1} }
- }
-
-\cs_new:Nn \@@_mc_handle_mcid:nn %#1 tag, #2 properties
- {
- \@@_mc_bdc_mcid:nn {#1} {#2}
- }
-
-\cs_generate_variant:Nn \@@_mc_handle_mcid:nn {VV}
-
-% puts the absolute number of an mcid in the current structure
-\cs_new:Nn \@@_mc_handle_stash:n %1 mcidnum
- {
- \@@_check_mc_used:n {#1}
- \@@_struct_kid_mc_gput_right:nn
- { \g_@@_struct_stack_current_tl }
- {#1}
- \prop_gput:Nxx \g_@@_mc_parenttree_prop
- {#1}
- { \g_@@_struct_stack_current_tl }
- }
-
-\cs_new_protected:Nn \tag_mc_begin:n
- {
- \group_begin: %hm
- \@@_check_mc_if_nested:
- \bool_gset_true:N \g_@@_in_mc_bool
- \keys_set:nn { @@ / mc } {#1}
- \bool_if:NTF \l_@@_mc_artifact_bool
- { %handle artifact
- \@@_mc_handle_artifact:N \l_@@_mc_artifact_type_tl
- }
- { %handle mcid type
- \@@_check_mc_tag:N \l_@@_mc_key_tag_tl
- \@@_mc_handle_mcid:VV
- \l_@@_mc_key_tag_tl
- \l_@@_mc_key_properties_tl
- \tl_if_empty:NF {\l_@@_mc_key_label_tl}
- {
- \@@_mc_handle_mc_label:n { \l_@@_mc_key_label_tl }
- }
- \bool_if:NF \l_@@_mc_key_stash_bool
- {
- \@@_mc_handle_stash:n { \int_use:N \c@g_@@_MCID_abs_int }
- }
- }
- \group_end:
- }
-
-
-\cs_new_protected:Nn \tag_mc_end:
- {
- \@@_check_mc_if_open:
- \bool_gset_false:N \g_@@_in_mc_bool
- \tl_gset:Nn \g_@@_mc_key_tag_tl { }
- \@@_mc_emc:
- }
-
-
-
-\cs_new_protected:Nn \tag_mc_use:n %#1: label name
- {
- \tl_set:Nx \l_tmpa_tl { \@@_ref_value:enn{tagpdf-#1}{tagmcabs}{} }
- \tl_if_empty:NTF\l_tmpa_tl
- {
- \msg_warning:nnn {tag} {mc-label-unknown} {#1}
- }
- {
- \prop_gput:Nxx
- \g_@@_mc_parenttree_prop
- {
- \@@_ref_value:enn {tagpdf-#1} {tagmcabs} {}
- }
- {
- \g_@@_struct_stack_current_tl
- }
- \@@_struct_kid_mc_gput_right:nn
- {
- \g_@@_struct_stack_current_tl
- }
- {
- \@@_ref_value:enn {tagpdf-#1} {tagmcabs} {}
- }
- }
- }
-
-
-\cs_new:Nn \@@_get_data_mc_tag: { \g_@@_mc_key_tag_tl }
-%</generic>
-% \end{macrocode}
-% \begin{macrocode}
-%<*luamode>
-\ProvidesExplPackage {tagpdf-mc-code-lua} {2021-06-14} {0.82}
- {tagpdf - mc code only for the luamode }
-
-% the two attibutes are defined in the driver file.
-% it also load the lua (as it can also contain functions needed by generic mode.
-% (new) attributes for mc are local:
-% \newattribute \l_@@_mc_type_attr %the value represent the type
-% \newattribute \l_@@_mc_cnt_attr %will hold the \c@g_@@_MCID_abs_int value
-
-
-% An attribute for the current structure probably doesn't make sense as mc chunks can be used later.
-% \newattribute \g_@@_struct_type_attr %represent the current structure type. Not sure if needed
-% \newattribute \g_@@_struct_cnt_attr %will hold \c@g_@@_struct_abs_int a cnt
-
-% handling attribute needs a different system to number the page wise mcid's:
-% a tagmcbegin ... tagmcend pair no longer surrounds exactly one mc chunk: it can be split
-% at page breaks. We know the included mcid(s) only after the ship out. So for the struct-> mcid mapping we
-% need to record struct -> mc-cnt (in \g_@@_mc_parenttree_prop and/or a lua table
-% and at shipout mc-cnt-> {mcid, mcid, ...} (in a table?)
-% and when building the trees connect both
-
-% key definitions are overwritten for luatex to store that data in tables
-% the data for the mc are in ltx.@@.mc[absnum]
-% the fields of the table are
-% tag : the type (a string)
-% raw : more properties (string)
-% label: a string. Do we need a way to retrieve the num from the label from lua??
-% artifact: the presence indicates an artifact, the value (string) is the type.
-% kids: a array of tables {1={kid=num2,page=pagenum1}, 2={kid=num2,page=pagenum2},...},
-% this describes the chunks the mc has been split to by the traversing code
-% parent: the number of the structure it is in. Needed to build the parent tree.
-
-% The main function which wanders through the shipout box to inject the literals.
-% if the new callback is there, it is used.
-\hook_gput_code:nnn{begindocument}{tagpdf/mc}
- {
- \bool_if:NT\g__tag_active_mc_bool
- {
- \directlua
- {
- if~luatexbase.callbacktypes.pre_shipout_filter~then~
- luatexbase.add_to_callback("pre_shipout_filter", function(TAGBOX)~
- ltx.__tag.func.mark_shipout(TAGBOX)~return~true~
- end, "tagpdf")~
- end
- }
- \directlua
- {
- if~luatexbase.callbacktypes.pre_shipout_filter~then~
- token.get_next()~
- end
- }\@secondoftwo\@gobble
- {
- \hook_gput_code:nnn{shipout/before}{tagpdf/lua}
- {
- \directlua
- { ltx.__tag.func.mark_shipout (tex.box["ShipoutBox"]) }
- }
- }
- }
- }
-
-\prg_new_conditional:Nnn \@@_mc_if_in: {p,T,F,TF}
- {
- \int_compare:nNnTF { -2147483647 }={ \l_@@_mc_type_attr }
- { \prg_return_false: }
- { \prg_return_true: }
- }
-
-\prg_new_eq_conditional:NNn \tag_mc_if_in: \@@_mc_if_in: {p,T,F,TF}
-
-
-% the keys
-\tl_new:N \l_@@_mc_key_tag_tl
-\tl_new:N \l_@@_mc_key_label_tl
-\tl_new:N \l_@@_mc_key_properties_tl
-
-\keys_define:nn { @@ / mc }
- {
- tag .code:n = %
- {%%????????? \pdfescapename??
- \tl_set:Nx \l_@@_mc_key_tag_tl { #1 }
- \directlua
- {
- ltx.@@.func.store_mc_data(\@@_get_mc_abs_cnt:,"tag","#1")
- }
- },
- raw .code:n =
- {
- \tl_put_right:Nx \l_@@_mc_key_properties_tl { #1 }
- \directlua
- {
- ltx.@@.func.store_mc_data(\@@_get_mc_abs_cnt:,"raw","#1")
- }
- },
- alttext .code:n = % Alt property
- {
- \str_set_convert:Nnon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /Alt~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- \directlua
- {
- ltx.@@.func.store_mc_data
- (
- \@@_get_mc_abs_cnt:,"alt","/Alt~<\str_use:N \l_@@_tmpa_str>"
- )
- }
- },
- alttext-o .code:n = % Alt property
- {
- \str_set_convert:Noon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /Alt~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- \directlua
- {
- ltx.@@.func.store_mc_data
- (
- \@@_get_mc_abs_cnt:,"alt","/Alt~<\str_use:N \l_@@_tmpa_str>"
- )
- }
- },
- actualtext .code:n = % Alt property
- {
- \str_set_convert:Nnon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /Alt~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- \directlua
- {
- ltx.@@.func.store_mc_data
- (
- \@@_get_mc_abs_cnt:,"actualtext","/ActualText~<\str_use:N \l_@@_tmpa_str>"
- )
- }
- },
- actualtext-o .code:n = % Alt property
- {
- \str_set_convert:Noon
- \l_@@_tmpa_str
- { #1 }
- { default }
- { utf16/hex }
- \tl_put_right:Nn \l_@@_mc_key_properties_tl { /Alt~< }
- \tl_put_right:No \l_@@_mc_key_properties_tl { \l_@@_tmpa_str>~ }
- \directlua
- {
- ltx.@@.func.store_mc_data
- (
- \@@_get_mc_abs_cnt:,
- "actualtext",
- "/ActualText~<\str_use:N \l_@@_tmpa_str>"
- )
- }
- },
- label .code:n =
- {
- \tl_set:Nn\l_@@_mc_key_label_tl { #1 }
- \directlua
- {
- ltx.@@.func.store_mc_data
- (
- \@@_get_mc_abs_cnt:,"label","#1"
- )
- }
- },
- __artifact-store .code:n =
- {
- \directlua
- {
- ltx.@@.func.store_mc_data
- (
- \@@_get_mc_abs_cnt:,"artifact","#1"
- )
- }
- },
- artifact .code:n =
- {
- \exp_args:Nnx
- \keys_set:nn
- { @@ / mc}
- { artifact-bool, artifact-type=#1, tag=Artifact }
- \exp_args:Nnx
- \keys_set:nn
- { @@ / mc }
- { __artifact-store=\l_@@_mc_artifact_type_tl }
- },
- artifact .default:n = { notype }
- }
-
-
-% attributes
-% set the mc from a tag name
-
-\cs_set_protected:Npn \@@_attribute_gset:Nn #1 #2
- {
- \tex_global:D \setattribute #1 #2
- }
-
-\cs_set_protected:Npn \@@_attribute_set:Nn #1 #2
- {
- \setattribute #1 #2
- }
-
-\cs_set_protected:Npn \@@_attribute_gunset:N #1
- {
- \tex_global:D \unsetattribute #1
- }
-
-\cs_set_protected:Npn \@@_attribute_unset:N #1
- {
- \unsetattribute #1
- }
-
-
-\cs_new:Nn \@@_mc_lua_set_mc_type_attr:n % #1 is a tag name
- {
- \@@_attribute_set:Nn \l_@@_mc_type_attr
- {
- \directlua { ltx.@@.func.output_num_from ("#1") }
- }
- \@@_attribute_set:Nn \l_@@_mc_cnt_attr { \@@_get_mc_abs_cnt: }
- }
-
-\cs_generate_variant:Nn\@@_mc_lua_set_mc_type_attr:n { o }
-
-\cs_new:Nn \@@_mc_lua_unset_mc_type_attr:
- {
- \@@_attribute_unset:N \l_@@_mc_type_attr
- \@@_attribute_unset:N \l_@@_mc_cnt_attr
- }
-
-
-
-%This command will in the finish code replace the dummy for a mc by the real mcid kids
-%we need a variant for the case that it is the only kid, to get the array right
-\cs_new:Nn \@@_mc_insert_mcid_kids:n
- {
- \directlua { ltx.@@.func.mc_insert_kids (#1,0) }
- }
-
-\cs_new:Nn \@@_mc_insert_mcid_single_kids:n
- {
- \directlua {ltx.@@.func.mc_insert_kids (#1,1) }
- }
-
-
-% we need to pass the info if the kids are alone or already in an array
-% so we add a second argument, which should == 1 if the kids are single
-
-
-% puts an mcid absolute number in the current structure
-\cs_new:Nn \@@_mc_handle_stash:n %1 mcidnum
- {
- \@@_check_mc_used:n { #1 }
- \seq_gput_right:cn % Don't fill a lua table due to the command in the item,
- % so use the kernel command
- { g_@@_struct_kids_\g_@@_struct_stack_current_tl _seq }
- {
- \@@_mc_insert_mcid_kids:n {#1}%
- }
- \directlua
- {
- ltx.@@.func.store_struct_mcabs
- (
- \g_@@_struct_stack_current_tl,#1
- )
- }
- \prop_gput:Nxx
- \g_@@_mc_parenttree_prop
- { #1 }
- { \g_@@_struct_stack_current_tl }
- }
-
-\cs_generate_variant:Nn \@@_mc_handle_stash:n { o }
-
-\cs_new_protected:Nn \tag_mc_begin:n
- {
- %\group_begin:
- %\@@_check_mc_if_nested:
- %\bool_gset_true:N \g_@@_in_mc_bool
- \bool_set_false:N\l_@@_mc_artifact_bool
- \int_gincr:N \c@g_@@_MCID_abs_int
- \tl_clear:N \l_@@_mc_key_properties_tl
- \keys_set:nn { @@ / mc }{ label={}, #1 }
- %check that a tag or artifact has been used
- \@@_check_mc_tag:N \l_@@_mc_key_tag_tl
- %set the attributes:
- \@@_mc_lua_set_mc_type_attr:o { \l_@@_mc_key_tag_tl }
- \bool_if:NF \l_@@_mc_artifact_bool
- { % store the absolute num name in a label:
- \tl_if_empty:NF {\l_@@_mc_key_label_tl}
- {
- \@@_mc_handle_mc_label:n { \l_@@_mc_key_label_tl }
- }
- % if not stashed record the absolute number
- \bool_if:NF \l_@@_mc_key_stash_bool
- {
- \exp_args:Nx \@@_mc_handle_stash:n { \@@_get_mc_abs_cnt: }
- }
- }
- %\bool_set_false:N\l_@@_mc_artifact_bool
- %\group_end:
- }
-
-
-\cs_new_protected:Nn \tag_mc_end:
- {
- %\@@_check_mc_if_open:
- %\bool_gset_false:N \g_@@_in_mc_bool
- \bool_set_false:N\l_@@_mc_artifact_bool
- \@@_mc_lua_unset_mc_type_attr:
- \tl_set:Nn \l_@@_mc_key_tag_tl { }
- }
-
-
-
-\cs_new_protected:Nn \tag_mc_use:n %#1: label name
- {
- \tl_set:Nx \l_tmpa_tl { \@@_ref_value:enn{tagpdf-#1}{tagmcabs}{} }
- \tl_if_empty:NTF\l_tmpa_tl
- {
- \msg_warning:nnn {tag} {mc-label-unknown} { #1 }
- }
- {
- \@@_mc_handle_stash:o { \l_tmpa_tl }
- }
- }
-
-
-
-\cs_new:Nn \@@_get_data_mc_tag: { \l_@@_mc_key_tag_tl }
-%</luamode>
-% \end{macrocode}