diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty | 240 |
1 files changed, 187 insertions, 53 deletions
diff --git a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty index 963ed1e9b38..16c927d19c9 100644 --- a/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty +++ b/Master/texmf-dist/tex/latex-dev/latex-lab/latex-lab-testphase-table.sty @@ -33,8 +33,8 @@ %% %% %% File: latex-lab-table.dtx (C) Copyright 2023-2024 LaTeX Project -\def\ltlabtbldate{2024-02-07} -\def\ltlabtblversion{0.85k} +\def\ltlabtbldate{2024-08-10} +\def\ltlabtblversion{0.85m} \ProvidesExplPackage {latex-lab-testphase-table} {\ltlabtbldate} {\ltlabtblversion} {Code related to the tagging of tables} \RequirePackage{array} @@ -50,47 +50,97 @@ \tl_set:Nn \l__tbl_cellattribute_tl {} \tl_new:N \l__tbl_rowattribute_tl \tl_set:Nn \l__tbl_rowattribute_tl {} +\prop_new:N\g__tbl_untagged_cells_prop +\prop_new:N\l__tbl_saved_untagged_cells_prop \clist_new:N \l__tbl_tmpa_clist \tl_new:N \l__tbl_tmpa_tl +\str_new:N \l__tbl_tmpa_str +\str_if_exist:cF { l__socket_tagsupport/tbl/init/celldata_plug_str } + { + \NewSocket{tagsupport/tbl/init/celldata}{0} + \NewSocket{tagsupport/tbl/restore/celldata}{0} + } +\NewSocketPlug{tagsupport/tbl/init/celldata}{default} + { + \prop_set_eq:NN\l__tbl_saved_untagged_cells_prop \g__tbl_untagged_cells_prop + \prop_gclear:N \g__tbl_untagged_cells_prop + } +\AssignSocketPlug{tagsupport/tbl/init/celldata}{default} + +\NewSocketPlug{tagsupport/tbl/restore/celldata}{default} + { + \prop_gset_eq:NN\g__tbl_untagged_cells_prop \l__tbl_saved_untagged_cells_prop + } +\AssignSocketPlug{tagsupport/tbl/restore/celldata}{default} \NewSocketPlug{tagsupport/tbl/cell/begin}{TD} { \__tbl_show_curr_cell_data: - \tag_struct_begin:n + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } { - tag =\l__tbl_celltag_tl, - attribute-class =\l__tbl_cellattribute_tl - } - \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } - \int_step_inline:nn { \g__tbl_span_tl - 1 } - { - \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } + \clist_if_in:NVT \l__tbl_header_columns_clist\g__tbl_col_int + { + \tl_set:Nn \l__tbl_celltag_tl {TH} + \tl_set:Ne \l__tbl_cellattribute_tl {\l__tbl_cellattribute_tl,TH-row} + } + \tl_set:Ne \l__tbl_tmpa_tl {\int_eval:n { \g__tbl_col_int - 1 - \g__tbl_table_cols_tl }} + \clist_if_in:NoT \l__tbl_header_columns_clist { \l__tbl_tmpa_tl } + { + \tl_set:Nn \l__tbl_celltag_tl {TH} + \tl_set:Ne \l__tbl_cellattribute_tl {\l__tbl_cellattribute_tl,TH-row} + } + \tag_struct_begin:n + { + tag =\l__tbl_celltag_tl, + attribute-class ={\l__tbl_cellattribute_tl} + } + \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } + \int_step_inline:nn { \g__tbl_span_tl - 1 } + { + \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } + } + \tag_mc_begin:n{} } - \tag_mc_begin:n{} } \NewSocketPlug{tagsupport/tbl/cell/end}{TD} { - \tag_mc_end: - \tag_struct_end: + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } + { + \tag_mc_end: + \tag_struct_end: + } } \NewSocketPlug{tagsupport/tbl/pcell/begin}{TDpbox} { \__tbl_show_curr_cell_data: - \tag_struct_begin:n - { - tag =\l__tbl_pcelltag_tl, - attribute-class =\l__tbl_cellattribute_tl - } - \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } - \int_step_inline:nn { \g__tbl_span_tl - 1 } + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } { - \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } - } - \tagpdfparaOn - \tl_set:Nn \l__tag_para_main_tag_tl {Div} + \clist_if_in:NVT \l__tbl_header_columns_clist\g__tbl_col_int + { + \tl_set:Nn \l__tbl_celltag_tl {TH} + \tl_set:Ne \l__tbl_cellattribute_tl {\l__tbl_cellattribute_tl,TH-row} + } + \tag_struct_begin:n + { + tag =\l__tbl_pcelltag_tl, + attribute-class ={\l__tbl_cellattribute_tl} + } + \seq_gput_right:Ne \g__tbl_struct_cur_seq { \tag_get:n {struct_num} } + \int_step_inline:nn { \g__tbl_span_tl - 1 } + { + \seq_gput_right:Ne \g__tbl_struct_cur_seq { -\tag_get:n {struct_num} } + } + \tagpdfparaOn + \tl_set:Nn \l__tag_para_main_tag_tl {Div} + } } \NewSocketPlug{tagsupport/tbl/pcell/end}{TDpbox} { - \tag_struct_end: + \__tbl_if_tag_cell:nnT {\g__tbl_row_int } { \g__tbl_col_int } + { + \tag_struct_end: + \legacy_if:nT {@endpe}{\par} + \mode_if_vertical:T{ \tagpdfparaOff } + } } \NewSocketPlug{tagsupport/tbl/row/begin}{TR} { @@ -116,7 +166,7 @@ { \__tbl_trace:n {==>~ - stucture~stored~for~row~\int_use:N\g__tbl_row_int :~ + structure~stored~for~row~\int_use:N\g__tbl_row_int :~ \seq_use:Nn \g__tbl_struct_cur_seq {,} } } @@ -124,13 +174,23 @@ \tag_struct_end: } } +\int_if_exist:NF \l__tag_block_flattened_level_int + { + \int_new:N \l__tag_block_flattened_level_int + } +\NewSocketPlug{tagsupport/para/restore}{Table} + { + \tl_set:Nn \l__tag_para_main_tag_tl {Div} + \tl_set_eq:NN \l__tag_para_tag_tl\l__tag_para_tag_default_tl + \bool_set_true:N \l__tag_para_bool + \bool_set_false:N \l__tag_para_flattened_bool + \int_zero:N \l__tag_block_flattened_level_int + } \NewSocketPlug{tagsupport/tbl/init}{Table} { - \tag_if_active:T - { - \bool_set_false:N \l__tag_para_bool - \__tbl_init_struct_data: - } + \bool_set_false:N \l__tag_para_bool + \AssignSocketPlug{tagsupport/para/restore}{Table} + \__tbl_init_struct_data: } \NewSocketPlug{tagsupport/tbl/finalize}{Table} { @@ -190,7 +250,7 @@ \prop_if_exist:cT { g__tag_struct_ \l__tbl_tmpa_tl _prop } { - \__tbl_struct_prop_gput:Vnn \l__tbl_tmpa_tl {S}{/Artifact} + \__tag_struct_prop_gput:onn { \l__tbl_tmpa_tl } {S}{/Artifact} } } } @@ -261,7 +321,7 @@ \prop_if_exist:cT { g__tag_struct_ \l__tbl_tmpa_tl _prop } { - \__tbl_struct_prop_gput:Vnn \l__tbl_tmpa_tl {S}{/Artifact} + \__tag_struct_prop_gput:onn {\l__tbl_tmpa_tl} {S}{/Artifact} } } } @@ -320,14 +380,21 @@ {/O /Table /ColSpan~\int_eval:n{#1}} } \tl_set:Ne \l__tbl_cellattribute_tl - {colspan-\int_eval:n{#1}} + {\l__tbl_cellattribute_tl,colspan-\int_eval:n{#1}} } } -\tag_if_active:T - { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} } - +\str_if_exist:cF { l__socket_tagsupport/tbl/leaders/end_plug_str } + { + \NewSocket{tagsupport/tbl/leaders/begin}{0} + \NewSocket{tagsupport/tbl/leaders/end}{0} + } +\NewSocketPlug{tagsupport/tbl/leaders/begin}{code} + { \tag_mc_begin:n{artifact} } +\NewSocketPlug{tagsupport/tbl/leaders/end}{code} + { \tag_mc_end: } \AddToHook{cmd/array/before}{\__tag_tbl_disable:} + \cs_new_protected:Npn \__tag_tbl_disable: { \AssignSocketPlug{tagsupport/tbl/cell/begin}{noop} @@ -347,6 +414,8 @@ \AssignSocketPlug{tagsupport/tbl/vmode/begin}{noop} \AssignSocketPlug{tagsupport/tbl/vmode/end}{noop} \AssignSocketPlug{tagsupport/tbl/colspan}{noop} + \AssignSocketPlug{tagsupport/tbl/leaders/begin}{noop} + \AssignSocketPlug{tagsupport/tbl/leaders/end}{noop} } \cs_new_protected:Npn \__tag_tbl_enable: @@ -368,6 +437,8 @@ \AssignSocketPlug{tagsupport/tbl/vmode/begin}{Table} \AssignSocketPlug{tagsupport/tbl/vmode/end}{Table} \AssignSocketPlug{tagsupport/tbl/colspan}{code} + \AssignSocketPlug{tagsupport/tbl/leaders/begin}{code} + \AssignSocketPlug{tagsupport/tbl/leaders/end}{code} } \keys_define:nn { __tag / setup } @@ -384,6 +455,8 @@ \tl_set:Nn\l__tbl_pcelltag_tl {NonStruct} \tl_set:Nn\l__tbl_celltag_tl {text} \tl_set:Nn\l__tbl_tabletag_tl {Div} + \clist_clear:N \l__tbl_header_rows_clist + \clist_clear:N \l__tbl_header_columns_clist }, table/tagging .default:n = true, table/tagging .initial:n = true @@ -415,15 +488,7 @@ } \clist_new:N \l__tbl_header_rows_clist -\cs_if_free:NTF \__tag_struct_prop_gput:nnn - { - \cs_new_protected:Npn \__tbl_struct_prop_gput:nnn #1#2#3 - { \prop_gput:cnn { g__tag_struct_#1_prop }{#2}{#3} } - } - { \cs_new_protected:Npn \__tbl_struct_prop_gput:nnn #1#2#3 - { \__tag_struct_prop_gput:nnn {#1}{#2}{#3} } - } -\cs_generate_variant:Nn \__tbl_struct_prop_gput:nnn {nne,Vnn} +\clist_new:N \l__tbl_header_columns_clist \cs_new_protected:Npn \__tbl_set_header_rows: { \clist_map_inline:Nn \l__tbl_header_rows_clist @@ -436,13 +501,25 @@ { \prop_if_exist:cT { g__tag_struct_####1_prop } { - \__tbl_struct_prop_gput:nnn{ ####1 }{S}{/TH} + \__tag_struct_prop_gput:nnn{ ####1 }{S}{/TH} \prop_get:cnNTF { g__tag_struct_####1_prop } { C } \l__tbl_tmpa_tl - {\__tbl_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l__tbl_tmpa_tl]} } - {\__tbl_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}} + { + \str_set:Ne \l__tbl_tmpa_str {\l__tbl_tmpa_tl} + \str_remove_once:Nn \l__tbl_tmpa_str {[} + \str_remove_once:Nn \l__tbl_tmpa_str {]} + \str_if_in:NnTF\l__tbl_tmpa_str{/TH-row} + { + \str_replace_once:Nnn \l__tbl_tmpa_str {/TH-row}{/TH-both} + \__tag_struct_prop_gput:nne{ ####1 }{C}{[\l__tbl_tmpa_str]} + } + { + \__tag_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l__tbl_tmpa_str]} + } + } + {\__tag_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}} } } } @@ -450,8 +527,68 @@ \keys_define:nn { __tag / setup } { table/header-rows .clist_set:N = \l__tbl_header_rows_clist, + table/header-columns .clist_set:N = \l__tbl_header_columns_clist, table-header-rows .meta:n = {table/header-rows={#1}} } +\cs_if_exist:NT \__tag_struct_prop_gput:nnn + { + \cs_generate_variant:Nn \__tag_struct_prop_gput:nnn {one} + } +\cs_new_protected:Npn \__tbl_multirow:n #1 + { + \prop_get:NeNF \g__tag_attr_entries_prop + {rowspan-\int_eval:n{#1}} + \l__tbl_tmpa_tl + { + \__tag_attr_new_entry:ee + {rowspan-\int_eval:n{#1}} + {/O /Table /RowSpan~\int_eval:n{#1}} + } + \seq_gput_left:Ne\g__tag_attr_class_used_seq + {\pdf_name_from_unicode_e:n{rowspan-\int_eval:n{#1}}} + \seq_get_right:NN\g__tbl_struct_cur_seq \l__tbl_tmpb_tl + \tl_set:Ne \l__tbl_tmpb_tl { \int_abs:n{\l__tbl_tmpb_tl} } + \prop_get:cnNTF + { g__tag_struct_\l__tbl_tmpb_tl _prop } + { C } + \l__tbl_tmpa_tl + { + \tl_remove_once:Nn \l__tbl_tmpa_tl {[} + \tl_remove_once:Nn \l__tbl_tmpa_tl {]} + \__tag_struct_prop_gput:one{ \l__tbl_tmpb_tl } + {C} + {[/rowspan-\int_eval:n{#1}~\l__tbl_tmpa_tl]} + } + { + \__tag_struct_prop_gput:one{ \l__tbl_tmpb_tl } + {C} + {[/rowspan-\int_eval:n{#1}]} + } + \__tbl_gset_untagged_row_cells:nn {#1-1}{\g__tbl_span_tl} + } +\keys_define:nn{ __tag / setup } + { table/multirow .code:n = {\__tbl_multirow:n {#1} } + ,table/multirow .default:n = 1 + } +\cs_new_protected:Npn \__tbl_gset_untagged_row_cells:nn #1 #2 % #1 number of rows, #2 number of columns + { + \int_step_inline:nn {#1} + { + \int_step_inline:nn {#2} + { + \prop_gput:Nee \g__tbl_untagged_cells_prop + { \int_eval:n {\g__tbl_row_int + ##1},\int_eval:n{\g__tbl_col_int + ####1 -1 } }{} + } + } + } +\prg_new_protected_conditional:Npnn\__tbl_if_tag_cell:nn #1 #2 %#1 row, #2 col + { T,TF } + { + \prop_get:NeNTF \g__tbl_untagged_cells_prop + {\int_eval:n{#1},\int_eval:n{#2}}\l__tbl_tmpa_tl + { \prg_return_false:} + { \prg_return_true: } + } \cs_new_protected:Npn \__tbl_show_curr_cell_data: { \__tbl_trace:n { ==>~ current~cell~data:~ \int_use:N \g__tbl_row_int , @@ -459,10 +596,6 @@ \g__tbl_span_tl } } -\NewSocket{tbl/celldata/missingcount}{1} -\NewSocketPlug{tbl/celldata/missingcount}{code}{\tbl_count_missing_cells:n{#1}} -\AssignSocketPlug{tbl/celldata/missingcount}{code} - \cs_new:Npn \__tbl_add_missing_cells: { \int_compare:nNnT \g__tbl_missing_cells_int > 0 @@ -472,6 +605,7 @@ additional~cell(s)~into~previous~row:} \int_step_inline:nn { \g__tbl_missing_cells_int } { + \int_gincr:N\g__tbl_col_int \UseTaggingSocket{tbl/cell/begin} \UseTaggingSocket{tbl/cell/end} } |