summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty')
-rw-r--r--Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty769
1 files changed, 159 insertions, 610 deletions
diff --git a/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty b/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty
index e6c89d16715..4af648e77c4 100644
--- a/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty
+++ b/Master/texmf-dist/tex/latex/latex-lab/latex-lab-testphase-table.sty
@@ -32,37 +32,29 @@
%% where one can also log issues in case there are any.
%%
%%
-%% File: latex-lab-table.dtx (C) Copyright 2023 LaTeX Project
-\def\ltlabtbldate{2023-10-30}
-\def\ltlabtblversion{0.85d}
+%% File: latex-lab-table.dtx (C) Copyright 2023-2024 LaTeX Project
+\def\ltlabtbldate{2024-05-25}
+\def\ltlabtblversion{0.85i}
\ProvidesExplPackage {latex-lab-testphase-table} {\ltlabtbldate} {\ltlabtblversion}
{Code related to the tagging of tables}
\RequirePackage{array}
\tl_new:N \l__tbl_celltag_tl
\tl_set:Nn \l__tbl_celltag_tl {TD}
+\tl_new:N \l__tbl_pcelltag_tl
+\tl_set:Nn \l__tbl_pcelltag_tl {TD}
\tl_new:N \l__tbl_rowtag_tl
\tl_set:Nn \l__tbl_rowtag_tl {TR}
+\tl_new:N \l__tbl_tabletag_tl
+\tl_set:Nn \l__tbl_tabletag_tl {Table}
\tl_new:N \l__tbl_cellattribute_tl
\tl_set:Nn \l__tbl_cellattribute_tl {}
\tl_new:N \l__tbl_rowattribute_tl
\tl_set:Nn \l__tbl_rowattribute_tl {}
-\int_new:N \g__tbl_missing_cells_int
\clist_new:N \l__tbl_tmpa_clist
-\seq_new:N \l__tbl_tmpa_seq
\tl_new:N \l__tbl_tmpa_tl
-\NewSocket{tagsupport/tblcell/begin}{0}
-\NewSocket{tagsupport/tblcell/end}{0}
-\NewSocket{tagsupport/tblrow/begin}{0}
-\NewSocket{tagsupport/tblrow/end}{0}
-\NewSocket{tagsupport/tbl/init}{0}
-\NewSocket{tagsupport/tbl/finalize}{0}
-\NewSocket{tagsupport/tbl/finalize/longtable}{0}
-\NewSocket{tagsupport/tblhmode/begin}{0}
-\NewSocket{tagsupport/tblhmode/end}{0}
-\NewSocket{tagsupport/tblvmode/begin}{0}
-\NewSocket{tagsupport/tblvmode/end}{0}
-\NewSocketPlug{tagsupport/tblcell/begin}{TD}
+\NewSocketPlug{tagsupport/tbl/cell/begin}{TD}
{
+ \__tbl_show_curr_cell_data:
\tag_struct_begin:n
{
tag =\l__tbl_celltag_tl,
@@ -75,16 +67,17 @@
}
\tag_mc_begin:n{}
}
-\NewSocketPlug{tagsupport/tblcell/end}{TD}
+\NewSocketPlug{tagsupport/tbl/cell/end}{TD}
{
\tag_mc_end:
\tag_struct_end:
}
-\NewSocketPlug{tagsupport/tblcell/begin}{TDpbox}
+\NewSocketPlug{tagsupport/tbl/pcell/begin}{TDpbox}
{
+ \__tbl_show_curr_cell_data:
\tag_struct_begin:n
{
- tag =\l__tbl_celltag_tl,
+ 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} }
@@ -95,11 +88,11 @@
\tagpdfparaOn
\tl_set:Nn \l__tag_para_main_tag_tl {Div}
}
-\NewSocketPlug{tagsupport/tblcell/end}{TDpbox}
+\NewSocketPlug{tagsupport/tbl/pcell/end}{TDpbox}
{
\tag_struct_end:
}
-\NewSocketPlug{tagsupport/tblrow/begin}{TR}
+\NewSocketPlug{tagsupport/tbl/row/begin}{TR}
{
\seq_gclear:N \g__tbl_struct_cur_seq
\tag_struct_begin:n
@@ -109,36 +102,53 @@
}
\seq_gput_right:Ne \g__tbl_struct_rows_seq { \tag_get:n {struct_num} }
}
-\NewSocketPlug{tagsupport/tblrow/end}{TR}
+\NewSocketPlug{tagsupport/tbl/row/end}{TR}
{
- \__tag_tbl_add_missing_cells:n { \g__tbl_missing_cells_int }
+ \tag_if_active:T
+ {
+ \__tbl_add_missing_cells:
\seq_gput_right:Ne \g__tbl_struct_cells_seq
{
\seq_use:Nn \g__tbl_struct_cur_seq {,}
}
- \int_compare:nNnTF { \g__tbl_row_int } = { \seq_count:N\g__tbl_struct_cells_seq }
+ \int_compare:nNnTF { \g__tbl_row_int } =
+ { \seq_count:N \g__tbl_struct_cells_seq }
{
- \typeout
+ \__tbl_trace:n
{==>~
stucture~stored~for~row~\int_use:N\g__tbl_row_int :~
\seq_use:Nn \g__tbl_struct_cur_seq {,}
}
}
- { \ERROR } % should not happen ...
+ { \ERRORtbl/row } % should not happen ...
\tag_struct_end:
}
+ }
\NewSocketPlug{tagsupport/tbl/init}{Table}
{
\tag_if_active:T
{
\bool_set_false:N \l__tag_para_bool
+ \__tbl_init_struct_data:
}
}
\NewSocketPlug{tagsupport/tbl/finalize}{Table}
{
\__tbl_set_header_rows:
+ \__tbl_restore_struct_data:
}
-\NewSocketPlug{tagsupport/tbl/finalize/longtable}{Table}
+\NewSocketPlug{tagsupport/tbl/longtable/init}{Table}
+ {
+ \seq_gclear:N\g__tbl_struct_rows_seq
+ \seq_gclear:N\g__tbl_struct_cells_seq
+ \seq_gclear:N\g__tbl_struct_cur_seq
+ \seq_gclear:N\g__tbl_LT@firsthead_rows_seq
+ \seq_gclear:N\g__tbl_LT@head_rows_seq
+ \seq_gclear:N\g__tbl_LT@lastfoot_rows_seq
+ \seq_gclear:N\g__tbl_LT@foot_rows_seq
+ }
+
+\NewSocketPlug{tagsupport/tbl/longtable/finalize}{Table}
{
\bool_lazy_and:nnTF
{ \seq_if_empty_p:N \g__tbl_LT@head_rows_seq }
@@ -180,7 +190,7 @@
\prop_if_exist:cT
{ g__tag_struct_ \l__tbl_tmpa_tl _prop }
{
- \__tbl_struct_prop_gput:Vnn \l__tbl_tmpa_tl {S}{/Artifact}
+ \exp_args:No \__tag_struct_prop_gput:nnn {\l__tbl_tmpa_tl} {S}{/Artifact}
}
}
}
@@ -251,24 +261,35 @@
\prop_if_exist:cT
{ g__tag_struct_ \l__tbl_tmpa_tl _prop }
{
- \__tbl_struct_prop_gput:Vnn \l__tbl_tmpa_tl {S}{/Artifact}
+ \exp_args:No\__tag_struct_prop_gput:nnn {\l__tbl_tmpa_tl} {S}{/Artifact}
}
}
}
}
}
}
-\NewSocketPlug{tagsupport/tblhmode/begin}{Table}
+\NewSocketPlug{tagsupport/tbl/longtable/head}{Table}
+ {
+ \tagmcbegin{artifact}
+ \tag_mc_reset_box:N\LT@head
+ \tagmcend
+ }
+\NewSocketPlug{tagsupport/tbl/longtable/foot}{Table}
+ {
+ \tagmcbegin{artifact}
+ \tag_mc_reset_box:N \LT@foot
+ \tagmcend
+ }
+\NewSocketPlug{tagsupport/tbl/hmode/begin}{Table}
{
- \mode_leave_vertical:
\tag_mc_end_push:
\bool_lazy_and:nnT
{ \bool_if_exist_p:N \l__tag_para_bool } { \l__tag_para_bool }
{ \tag_struct_end:n { text } }
- \tag_struct_begin:n {tag=Table}
+ \tag_struct_begin:n {tag=\l__tbl_tabletag_tl}
\tl_gset:Ne \g__tbl_struct_table_tl { \tag_get:n {struct_num} }
}
-\NewSocketPlug{tagsupport/tblhmode/end}{Table}
+\NewSocketPlug{tagsupport/tbl/hmode/end}{Table}
{
\tag_struct_end:
\bool_lazy_and:nnT
@@ -276,105 +297,113 @@
{ \tag_struct_begin:n { tag=\l__tag_para_tag_tl } }
\tag_mc_begin_pop:n{}
}
-\NewSocketPlug{tagsupport/tblvmode/begin}{Table}
+\NewSocketPlug{tagsupport/tbl/vmode/begin}{Table}
{
- \tag_struct_begin:n {tag=Table}
+ \tag_struct_begin:n {tag=\l__tbl_tabletag_tl}
\tl_gset:Ne \g__tbl_struct_table_tl { \tag_get:n {struct_num} }
}
-\NewSocketPlug{tagsupport/tblvmode/end}{Table}
+\NewSocketPlug{tagsupport/tbl/vmode/end}{Table}
{
\tag_struct_end:
\par
}
-\AddToHook{env/tabular/before} {\UseSocket{tagsupport/tblhmode/begin}}
-\AddToHook{env/tabular/after} {\UseSocket{tagsupport/tblhmode/end}}
-\AddToHook{env/tabular*/before} {\UseSocket{tagsupport/tblhmode/begin}}
-\AddToHook{env/tabular*/after} {\UseSocket{tagsupport/tblhmode/end}}
-\AddToHook{env/tabularx/before} {\UseSocket{tagsupport/tblhmode/begin}}
-\AddToHook{env/tabularx/after} {\UseSocket{tagsupport/tblhmode/end}}
-\AddToHook{env/longtable/before}{\UseSocket{tagsupport/tblvmode/begin}}
-\AddToHook{env/longtable/after} {\UseSocket{tagsupport/tblvmode/end}}
-\AddToHook{env/array/begin} {\__tag_tbl_disable:}
-\tag_if_active:T
- { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} }
-\cs_new_protected:Npn \__tbl_set_colspan:n #1
+\NewSocketPlug{tagsupport/tbl/colspan}{code}
{
- \tag_if_active:T
- {
- \int_compare:nNnT {#1}>{1}
- {
- \prop_get:NeNF \g__tag_attr_entries_prop
- {colspan-\int_eval:n{#1}}
- \l__tbl_tmpa_tl
- {
- \__tag_attr_new_entry:ee
- {colspan-\int_eval:n{#1}}
- {/O /Table /ColSpan~\int_eval:n{#1}}
- }
- \tl_set:Ne \l__tbl_cellattribute_tl
+ \int_compare:nNnT {#1}>{1}
+ {
+ \prop_get:NeNF \g__tag_attr_entries_prop
+ {colspan-\int_eval:n{#1}}
+ \l__tbl_tmpa_tl
+ {
+ \__tag_attr_new_entry:ee
{colspan-\int_eval:n{#1}}
- }
- }
+ {/O /Table /ColSpan~\int_eval:n{#1}}
+ }
+ \tl_set:Ne \l__tbl_cellattribute_tl
+ {colspan-\int_eval:n{#1}}
+ }
}
+\tag_if_active:T
+ { \cs_generate_variant:Nn \__tag_attr_new_entry:nn {ee} }
+
+\AddToHook{cmd/array/before}{\__tag_tbl_disable:}
\cs_new_protected:Npn \__tag_tbl_disable:
{
- \AssignSocketPlug{tagsupport/tblcell/begin}{noop}
- \AssignSocketPlug{tagsupport/tblcell/end}{noop}
- \AssignSocketPlug{tagsupport/tblrow/begin}{noop}
- \AssignSocketPlug{tagsupport/tblrow/end}{noop}
+ \AssignSocketPlug{tagsupport/tbl/cell/begin}{noop}
+ \AssignSocketPlug{tagsupport/tbl/cell/end}{noop}
+ \AssignSocketPlug{tagsupport/tbl/pcell/begin}{noop}
+ \AssignSocketPlug{tagsupport/tbl/pcell/end}{noop}
+ \AssignSocketPlug{tagsupport/tbl/row/begin}{noop}
+ \AssignSocketPlug{tagsupport/tbl/row/end}{noop}
\AssignSocketPlug{tagsupport/tbl/init}{noop}
\AssignSocketPlug{tagsupport/tbl/finalize}{noop}
- \AssignSocketPlug{tagsupport/tbl/finalize/longtable}{noop}
- \AssignSocketPlug{tagsupport/tblhmode/begin}{noop}
- \AssignSocketPlug{tagsupport/tblhmode/end}{noop}
- \AssignSocketPlug{tagsupport/tblvmode/begin}{noop}
- \AssignSocketPlug{tagsupport/tblvmode/end}{noop}
+ \AssignSocketPlug{tagsupport/tbl/longtable/init}{noop}
+ \AssignSocketPlug{tagsupport/tbl/longtable/head}{noop}
+ \AssignSocketPlug{tagsupport/tbl/longtable/foot}{noop}
+ \AssignSocketPlug{tagsupport/tbl/longtable/finalize}{noop}
+ \AssignSocketPlug{tagsupport/tbl/hmode/begin}{noop}
+ \AssignSocketPlug{tagsupport/tbl/hmode/end}{noop}
+ \AssignSocketPlug{tagsupport/tbl/vmode/begin}{noop}
+ \AssignSocketPlug{tagsupport/tbl/vmode/end}{noop}
+ \AssignSocketPlug{tagsupport/tbl/colspan}{noop}
}
\cs_new_protected:Npn \__tag_tbl_enable:
{
- \AssignSocketPlug{tagsupport/tblcell/begin}{TD}
- \AssignSocketPlug{tagsupport/tblcell/end}{TD}
- \AssignSocketPlug{tagsupport/tblrow/begin}{TR}
- \AssignSocketPlug{tagsupport/tblrow/end}{TR}
+ \AssignSocketPlug{tagsupport/tbl/cell/begin}{TD}
+ \AssignSocketPlug{tagsupport/tbl/cell/end}{TD}
+ \AssignSocketPlug{tagsupport/tbl/pcell/begin}{TDpbox}
+ \AssignSocketPlug{tagsupport/tbl/pcell/end}{TDpbox}
+ \AssignSocketPlug{tagsupport/tbl/row/begin}{TR}
+ \AssignSocketPlug{tagsupport/tbl/row/end}{TR}
\AssignSocketPlug{tagsupport/tbl/init}{Table}
\AssignSocketPlug{tagsupport/tbl/finalize}{Table}
- \AssignSocketPlug{tagsupport/tbl/finalize/longtable}{Table}
- \AssignSocketPlug{tagsupport/tblhmode/begin}{Table}
- \AssignSocketPlug{tagsupport/tblhmode/end}{Table}
- \AssignSocketPlug{tagsupport/tblvmode/begin}{Table}
- \AssignSocketPlug{tagsupport/tblvmode/end}{Table}
+ \AssignSocketPlug{tagsupport/tbl/longtable/head}{Table}
+ \AssignSocketPlug{tagsupport/tbl/longtable/foot}{Table}
+ \AssignSocketPlug{tagsupport/tbl/longtable/init}{Table}
+ \AssignSocketPlug{tagsupport/tbl/longtable/finalize}{Table}
+ \AssignSocketPlug{tagsupport/tbl/hmode/begin}{Table}
+ \AssignSocketPlug{tagsupport/tbl/hmode/end}{Table}
+ \AssignSocketPlug{tagsupport/tbl/vmode/begin}{Table}
+ \AssignSocketPlug{tagsupport/tbl/vmode/end}{Table}
+ \AssignSocketPlug{tagsupport/tbl/colspan}{code}
}
\keys_define:nn { __tag / setup }
{
- table-tagging .choices:nn = { true, on }
+ table/tagging .choices:nn = { true, on }
{ \__tag_tbl_enable: },
- table-tagging .choices:nn = { false, off }
+ table/tagging .choices:nn = { false, off }
{ \__tag_tbl_disable: },
- table-tagging .default:n = true,
- table-tagging .initial:n = true
+ table/tagging .choice:,
+ table/tagging / presentation .code:n =
+ {
+ \__tag_tbl_enable:
+ \tl_set:Nn\l__tbl_rowtag_tl {NonStruct}
+ \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
+ },
+ table/tagging .default:n = true,
+ table/tagging .initial:n = true
+ }
+\keys_define:nn { __tag / setup }
+ {
+ table-tagging .meta:n = {table/tagging={#1}}
}
-\AddToHook{begindocument}
- {
- \cs_if_exist:NT \@kernel@before@head
- {
- \tl_put_right:Nn \@kernel@before@head {\__tag_tbl_disable:}
- \tl_put_right:Nn \@kernel@before@foot {\__tag_tbl_disable:}
- }
- }
\AddToHook{begindocument}
{
\tag_if_active:T
{
\tagpdfsetup
{
- newattribute =
+ role/new-attribute =
{TH-col}{/O /Table /Scope /Column},
- newattribute =
+ role/new-attribute =
{TH-row}{/O /Table /Scope /Row},
- newattribute =
+ role/new-attribute =
{TH-both}{/O /Table /Scope /Both},
}
\seq_gput_left:Ne\g__tag_attr_class_used_seq
@@ -387,15 +416,6 @@
}
\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}
\cs_new_protected:Npn \__tbl_set_header_rows:
{
\clist_map_inline:Nn \l__tbl_header_rows_clist
@@ -408,196 +428,47 @@
{
\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}}
+ {\__tag_struct_prop_gput:nne{ ####1 }{C}{[/TH-col~\l__tbl_tmpa_tl]} }
+ {\__tag_struct_prop_gput:nnn{ ####1 }{C}{/TH-col}}
}
}
}
}
\keys_define:nn { __tag / setup }
{
- table-header-rows .clist_set:N = \l__tbl_header_rows_clist
+ table/header-rows .clist_set:N = \l__tbl_header_rows_clist,
+ table-header-rows .meta:n = {table/header-rows={#1}}
}
\cs_new_protected:Npn \__tbl_show_curr_cell_data: {
- \typeout { ==>~ current~cell~data:~
- \int_use:N \g__tbl_row_int ,
- \int_use:N \g__tbl_col_int ,
- \g__tbl_span_tl
- }
-}
-\def\insert@column{%
- \__tbl_show_curr_cell_data:
- \UseSocket{tagsupport/tblcell/begin}%
- \the@toks \the \@tempcnta
- \ignorespaces \@sharp \unskip
- \the@toks \the \count@ \relax
- \UseSocket{tagsupport/tblcell/end}%
-}
-\def\@classz{\@classx
- \@tempcnta \count@
- \prepnext@tok
- \@addtopreamble{\ifcase \@chnum
- \hfil
- \hskip1sp%
- \d@llarbegin
- \insert@column
- \d@llarend \do@row@strut \hfil \or
- \hskip1sp\d@llarbegin \insert@column \d@llarend \do@row@strut \hfil \or
- \hfil\hskip1sp\d@llarbegin \insert@column \d@llarend \do@row@strut \or
- \setbox\ar@mcellbox\vbox
- \@startpbox{\@nextchar}
- \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
- \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
- \insert@column \@endpbox
- \ar@align@mcell
- \do@row@strut \or
- \vtop \@startpbox{\@nextchar}
- \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
- \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
- \insert@column \@endpbox\do@row@strut \or
- \vbox \@startpbox{\@nextchar}
- \AssignSocketPlug{tagsupport/tblcell/begin}{TDpbox}
- \AssignSocketPlug{tagsupport/tblcell/end}{TDpbox}
- \insert@column \@endpbox\do@row@strut
- \fi}\prepnext@tok}
-\def\@array[#1]#2{%
- \@tempdima \ht \strutbox
- \advance \@tempdima by\extrarowheight
- \setbox \@arstrutbox \hbox{\vrule
- \@height \arraystretch \@tempdima
- \@depth \arraystretch \dp \strutbox
- \@width \z@}%
- \tl_set_eq:NN \l__tbl_saved_table_cols_tl \g__tbl_table_cols_tl
- \begingroup
- \@mkpream{#2}
- \__tbl_determine_table_cols:
- \xdef\@preamble{%
- \noexpand
- \ar@ialign
- \@halignto
- \bgroup \@arstrut
- \UseSocket{tagsupport/tblrow/begin}%
- \__tbl_init_cell_data:
- \@preamble
- \tabskip \z@ \cr}%
- \endgroup
- \@arrayleft
- \UseSocket{tagsupport/tbl/init}
- \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
- \bgroup
- \let \@sharp ##\let \protect \relax
- \lineskip \z@
- \baselineskip \z@
- \m@th
- \let\\\@arraycr \let\tabularnewline\\\let\par\@empty
- \@preamble}
-\let\@@array\@array
-\cs_new_protected:Npn \__tbl_init_cell_data: {
- \int_gset:Nn \g__tbl_col_int {1}
- \tl_gset:Nn \g__tbl_span_tl {1}
-}
-\cs_new_protected:Npn \__tbl_update_cell_data: {
- \int_gadd:Nn \g__tbl_col_int { \g__tbl_span_tl }
- \tl_gset:Nn \g__tbl_span_tl {1}
-}
-\cs_new:Npn \__tbl_determine_table_cols: {
- \seq_set_split:NnV\l__tbl_tmpa_seq {&}\@preamble
- \tl_gset:Ne \g__tbl_table_cols_tl { \seq_count:N \l__tbl_tmpa_seq }
- \typeout{ ==>~ Table~ has~ \g__tbl_table_cols_tl \space columns }
-}
-\protected\def\@arraycr{
- \relax
- \__tbl_store_missing_cells:n{@arraycr}
- %
- \iffalse{\fi\ifnum 0=`}\fi
- \@ifstar \@xarraycr \@xarraycr}
-\cs_new:Npn \__tbl_store_missing_cells:n #1 {
- \int_compare:nNnT \g__tbl_col_int > 0
- {
- \int_gset:Nn \g__tbl_missing_cells_int
- {
- \g__tbl_table_cols_tl
- - \g__tbl_col_int
- - \g__tbl_span_tl
- + 1
- }
- \int_compare:nNnT \g__tbl_missing_cells_int < 0 \ERROR % should not happen
- \typeout{==>~
- (#1)~
- This~ row~ needs~
- \int_use:N \g__tbl_missing_cells_int \space
- additional~ cell(s)
- }
- }
+ \__tbl_trace:n { ==>~ current~cell~data:~
+ \int_use:N \g__tbl_row_int ,
+ \int_use:N \g__tbl_col_int ,
+ \g__tbl_span_tl
+ }
}
-\cs_new:Npn \__tag_tbl_add_missing_cells:n #1
+\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 {#1}>{0}
- {
- \typeout{==>~
- ~Inserting~\int_eval:n{#1}~additional~cell(s)~into~previous~row:}
- }
- \int_step_inline:nn { #1 }
+ \int_compare:nNnT \g__tbl_missing_cells_int > 0
{
- \UseSocket{tagsupport/tblcell/begin}
- \UseSocket{tagsupport/tblcell/end}
+ \__tbl_trace:n {==>~
+ ~Inserting~\int_use:N \g__tbl_missing_cells_int \space
+ additional~cell(s)~into~previous~row:}
+ \int_step_inline:nn { \g__tbl_missing_cells_int }
+ {
+ \UseTaggingSocket{tbl/cell/begin}
+ \UseTaggingSocket{tbl/cell/end}
+ }
}
}
-\def\endarray{
- \__tbl_store_missing_cells:n{endarray}
- \crcr \egroup
- \UseSocket{tagsupport/tbl/finalize}
- \int_gset:Nn \g__tbl_col_int { \l__tbl_saved_col_tl }
- \int_gset:Nn \g__tbl_row_int { \l__tbl_saved_row_tl }
- \tl_gset_eq:NN \g__tbl_span_tl \l__tbl_saved_span_tl
- \tl_gset_eq:NN \g__tbl_table_cols_tl \l__tbl_saved_table_cols_tl
- \tl_gset_eq:NN \g__tbl_struct_table_tl \l__tbl_saved_struct_table_tl
- \seq_gset_eq:NN \g__tbl_struct_rows_seq \l__tbl_saved_struct_rows_seq
- \seq_gset_eq:NN \g__tbl_struct_cells_seq\l__tbl_saved_struct_cells_seq
- \seq_gset_eq:NN \g__tbl_struct_cur_seq \l__tbl_saved_struct_cur_seq
- \typeout{==>~ restored~cell~data:~
- \int_use:N \g__tbl_row_int,
- \int_use:N \g__tbl_col_int,
- \l__tbl_saved_span_tl \space
- (
- \int_compare:nNnTF \g__tbl_table_cols_tl = 0
- { outer~ level }
- { max:~ \g__tbl_table_cols_tl }
- )
- }
- \egroup
- \@arrayright \gdef\@preamble{}%
-}
-\def\@addamp {
- \if@firstamp
- \@firstampfalse
- \else
- \edef\@preamble{\@preamble &
- \__tbl_update_cell_data:
- }
- \fi
-}
-\int_new:N \g__tbl_col_int
-\int_new:N \g__tbl_row_int
-\tl_new:N \g__tbl_span_tl
-\tl_new:N \g__tbl_table_cols_tl
-
-\tl_gset:Nn \g__tbl_span_tl {1}
-\tl_gset:Nn \g__tbl_table_cols_tl {0} % indicates outer level
-\tl_new:N \l__tbl_saved_col_tl
-\tl_new:N \l__tbl_saved_row_tl
-\tl_new:N \l__tbl_saved_span_tl
-\tl_new:N \l__tbl_saved_table_cols_tl
-
-\tl_set:Nn \l__tbl_saved_col_tl{0}
-\tl_set:Nn \l__tbl_saved_row_tl{0}
-\tl_set:Nn \l__tbl_saved_span_tl{1}
-\tl_set:Nn \l__tbl_saved_table_cols_tl{0} % indicates outer level
\tl_new:N \g__tbl_struct_table_tl
\tl_new:N \l__tbl_saved_struct_table_tl
\seq_new:N \g__tbl_struct_rows_seq
@@ -606,300 +477,24 @@
\seq_new:N \l__tbl_saved_struct_cells_seq
\seq_new:N \g__tbl_struct_cur_seq
\seq_new:N \l__tbl_saved_struct_cur_seq
-\def\ar@ialign{%
- \tl_set:No \l__tbl_saved_col_tl {\int_use:N \g__tbl_col_int }
- \tl_set:No \l__tbl_saved_row_tl {\int_use:N \g__tbl_row_int }
- \tl_set_eq:NN \l__tbl_saved_span_tl \g__tbl_span_tl
+
+\cs_new_protected:Npn \__tbl_init_struct_data: {
\tl_set_eq:NN \l__tbl_saved_struct_table_tl \g__tbl_struct_table_tl
\seq_set_eq:NN \l__tbl_saved_struct_rows_seq \g__tbl_struct_rows_seq
\seq_set_eq:NN \l__tbl_saved_struct_cells_seq \g__tbl_struct_cells_seq
\seq_set_eq:NN \l__tbl_saved_struct_cur_seq \g__tbl_struct_cur_seq
- \typeout{==>~ saved~cell~data:~
- \l__tbl_saved_row_tl,
- \l__tbl_saved_col_tl,
- \l__tbl_saved_span_tl \space
- (
- \int_compare:nNnTF \l__tbl_saved_table_cols_tl = 0
- { outer~ level }
- { max:~ \l__tbl_saved_table_cols_tl }
- )
- }
- \int_gzero:N \g__tbl_row_int
- \int_gzero:N \g__tbl_col_int
- \tl_gset:Nn \g__tbl_span_tl {1}
\seq_gclear:N\g__tbl_struct_rows_seq
\seq_gclear:N\g__tbl_struct_cells_seq
\seq_gclear:N\g__tbl_struct_cur_seq
- \everycr{%
- \noalign{%
- \int_compare:nNnT \g__tbl_col_int > 0
- { \UseSocket{tagsupport/tblrow/end} }
- \int_gincr:N \g__tbl_row_int % this row about to start
- \int_gzero:N \g__tbl_col_int % we are before first col
- }%
- }%
- \tabskip\z@skip\halign}
-\long\def\multicolumn#1#2#3{%
- % alternative: determine first col with vmode test ...
- % \ifvmode
- % \multispan{#1}\typeout{A==> vmode}%
- % \else
- % \multispan{#1}\typeout{A==> not vmode}
- % \fi
- % but this makes the \crcr handling really complicated which would
- % then need to become something like
- % \ifvmode \expandafter \@gobble
- % \else \expandafter \@iden \fi {\cr\noalign{do something}}%
- % so not used.
- % Instead:
- \multispan{#1}\begingroup
- \int_compare:nNnTF \g__tbl_col_int = 0
- {
- \UseSocket{tagsupport/tblrow/begin}
- \int_gset:Nn \g__tbl_col_int {1}
- }
- {
- \int_gadd:Nn \g__tbl_col_int { \g__tbl_span_tl }
- }
- \tl_gset:Nn \g__tbl_span_tl {#1}
- \def\@addamp{\if@firstamp\@firstampfalse \else
- \@preamerr 5\fi}%
- \@mkpream{#2}\@addtopreamble\@empty
- \endgroup
- \__tbl_set_colspan:n {#1}
- \def\@sharp{#3}%
- \@arstrut \@preamble
- \null
- \ignorespaces}
-\let\@kernel@refstepcounter\refstepcounter
-\def\hyper@nopatch@longtable{}
-\def\__tbl_patch_LT@array[#1]#2{%
- \UseSocket{tagsupport/tbl/init}%
- \@kernel@refstepcounter{table}\stepcounter{LT@tables}%
- \tl_gset:Ne \@currentHref {table.\cs_if_exist_use:N\theHtable}
- \int_gzero:N \g__tbl_row_int
- \seq_gclear:N\g__tbl_struct_rows_seq
- \seq_gclear:N\g__tbl_struct_cells_seq
- \seq_gclear:N\g__tbl_struct_cur_seq
- \seq_gclear:N\g__tbl_LT@firsthead_rows_seq
- \seq_gclear:N\g__tbl_LT@head_rows_seq
- \seq_gclear:N\g__tbl_LT@lastfoot_rows_seq
- \seq_gclear:N\g__tbl_LT@foot_rows_seq
- \if l#1%
- \LTleft\z@ \LTright\fill
- \else\if r#1%
- \LTleft\fill \LTright\z@
- \else\if c#1%
- \LTleft\fill \LTright\fill
- \fi\fi\fi
- \let\LT@mcol\multicolumn
- \let\LT@@tabarray\@tabarray
- \let\LT@@hl\hline
- \def\@tabarray{%
- \let\hline\LT@@hl
- \LT@@tabarray}%
- \let\\\LT@tabularcr
- \let\tabularnewline\\%
- \def\newpage{\noalign{\break}}%
- \def\pagebreak{\noalign{\ifnum`}=0\fi\@testopt{\LT@no@pgbk-}4}%
- \def\nopagebreak{\noalign{\ifnum`}=0\fi\@testopt\LT@no@pgbk4}%
- \let\hline\LT@hline \let\kill\LT@kill\let\caption\LT@caption
- \@tempdima\ht\strutbox
- \let\@endpbox\LT@endpbox
- \ifx\extrarowheight\@undefined
- \let\@acol\@tabacol
- \let\@classz\@tabclassz \let\@classiv\@tabclassiv
- \def\@startpbox{\vtop\LT@startpbox}%
- \let\@@startpbox\@startpbox
- \let\@@endpbox\@endpbox
- \let\LT@LL@FM@cr\@tabularcr
- \else
- \advance\@tempdima\extrarowheight
- \col@sep\tabcolsep
- \let\@startpbox\LT@startpbox\let\LT@LL@FM@cr\@arraycr
- \fi
- \setbox\@arstrutbox\hbox{\vrule
- \@height \arraystretch \@tempdima
- \@depth \arraystretch \dp \strutbox
- \@width \z@}%
- \let\@sharp##\let\protect\relax
- \begingroup
- \@mkpream{#2}%
- \__tbl_determine_table_cols:
- \xdef\LT@bchunk{%
- \int_gzero:N \g__tbl_col_int
- \global\advance\c@LT@chunks\@ne
- \global\LT@rows\z@\setbox\z@\vbox\bgroup
- \LT@setprevdepth
- \tabskip\LTleft \noexpand\halign to\hsize\bgroup
- \tabskip\z@ \@arstrut
- \UseSocket{tagsupport/tblrow/begin}%
- \__tbl_init_cell_data:
- \@preamble \tabskip\LTright \cr}%
- \endgroup
- \expandafter\LT@nofcols\LT@bchunk&\LT@nofcols
- \LT@make@row
- \m@th\let\par\@empty
- \everycr{%
- \noalign{%
- \typeout{--longtable-->~chunk~row:~ \the\LT@rows \space
- row:~ \the\g__tbl_row_int \space
- column:~ \the\g__tbl_col_int
- }
- \int_compare:nNnT \g__tbl_col_int > 0
- {
- \UseSocket{tagsupport/tblrow/end}
- }
- \int_gzero:N \g__tbl_col_int % before first col
- \int_compare:nNnT \LT@rows < \LTchunksize
- { \int_gincr:N \g__tbl_row_int } % this row about to start
- }%
- }%
- \lineskip\z@\baselineskip\z@
- \LT@bchunk}
-\def\__tbl_patch_endlongtable{%
- \__tbl_store_missing_cells:n{endlongtable}
- \crcr
- \noalign{%
- \UseSocket{tagsupport/tbl/finalize/longtable}
- \int_gzero:N \g__tbl_row_int % this prevents considering the next
- % \crcr as another row end.
- \let\LT@entry\LT@entry@chop
- \xdef\LT@save@row{\LT@save@row}}%
- \LT@echunk
- \LT@start
- \unvbox\z@
- \LT@get@widths
- \if@filesw
- {\let\LT@entry\LT@entry@write\immediate\write\@auxout{%
- \gdef\expandafter\noexpand
- \csname LT@\romannumeral\c@LT@tables\endcsname
- {\LT@save@row}}}%
- \fi
- \ifx\LT@save@row\LT@@save@row
- \else
- \LT@warn{Column~\@width s~have~changed\MessageBreak
- in~table~\thetable}%
- \LT@final@warn
- \fi
- \endgraf\penalty -\LT@end@pen
- \ifvoid\LT@foot\else
- \global\advance\vsize\ht\LT@foot
- \global\advance\@colroom\ht\LT@foot
- \dimen@\pagegoal\advance\dimen@\ht\LT@foot\pagegoal\dimen@
- \fi
- \endgroup
- \global\@mparbottom\z@
- \endgraf\penalty\z@\addvspace\LTpost
- \ifvoid\footins\else\insert\footins{}\fi}
-\def\__tbl_patch_LT@t@bularcr{%
- \global\advance\LT@rows\@ne
- \ifnum\LT@rows=\LTchunksize
- \__tbl_store_missing_cells:n{echunk}
- \gdef\LT@setprevdepth{%
- \prevdepth\z@
- \global\let\LT@setprevdepth\relax}%
- \expandafter\LT@xtabularcr
- \else
- \ifnum0=`{}\fi
- \expandafter\LT@LL@FM@cr
- \fi}
+}
-\def\__tbl_patch_LT@end@hd@ft#1{%
- \__tbl_store_missing_cells:n{head/foot}
- \int_step_inline:nn
- { \LT@rows + 1 }
- {
- \seq_gput_left:ce
- {g__tbl_\cs_to_str:N #1 _rows_seq }
- { \int_eval:n {\g__tbl_row_int + 1 - ##1 } }
- }
- \int_gset:Nn \LT@rows { \LTchunksize }
- \LT@echunk
- \ifx\LT@start\endgraf
- \LT@err
- {Longtable head or foot not at start of table}%
- {Increase LTchunksize}%
- \fi
- \setbox#1\box\z@
- \LT@get@widths
- \LT@bchunk}
+\cs_new_protected:Npn \__tbl_restore_struct_data: {
+ \tl_gset_eq:NN \g__tbl_struct_table_tl \l__tbl_saved_struct_table_tl
+ \seq_gset_eq:NN \g__tbl_struct_rows_seq \l__tbl_saved_struct_rows_seq
+ \seq_gset_eq:NN \g__tbl_struct_cells_seq\l__tbl_saved_struct_cells_seq
+ \seq_gset_eq:NN \g__tbl_struct_cur_seq \l__tbl_saved_struct_cur_seq
+}
-\def\__tbl_patch_LT@start{%
- \let\LT@start\endgraf
- \endgraf\penalty\z@\vskip\LTpre\endgraf
- \ifdim \pagetotal<\pagegoal \else
- \dimen@=\pageshrink
- \advance \dimen@ 1sp %
- \kern\dimen@\penalty 9999\endgraf \kern-\dimen@
- \fi
- \dimen@\pagetotal
- \advance\dimen@ \ht\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
- \advance\dimen@ \dp\ifvoid\LT@firsthead\LT@head\else\LT@firsthead\fi
- \advance\dimen@ \ht\LT@foot
- \edef\LT@reset@vfuzz{\vfuzz\the\vfuzz\vbadness\the\vbadness\relax}%
- \vfuzz\maxdimen
- \vbadness\@M
- \setbox\tw@\copy\z@
- \setbox\tw@\vsplit\tw@ to \ht\@arstrutbox
- \setbox\tw@\vbox{\unvbox\tw@}%
- \LT@reset@vfuzz
- \advance\dimen@ \ht
- \ifdim\ht\@arstrutbox>\ht\tw@\@arstrutbox\else\tw@\fi
- \advance\dimen@\dp
- \ifdim\dp\@arstrutbox>\dp\tw@\@arstrutbox\else\tw@\fi
- \advance\dimen@ -\pagegoal
- \ifdim \dimen@>\z@
- \vfil\break
- \else
- \ifdim\pageshrink>\z@\pageshrink\z@\fi
- \fi
- \global\@colroom\@colht
- \ifvoid\LT@foot\else
- \global\advance\vsize-\ht\LT@foot
- \global\advance\@colroom-\ht\LT@foot
- \dimen@\pagegoal\advance\dimen@-\ht\LT@foot\pagegoal\dimen@
- \maxdepth\z@
- \fi
- \MakeLinkTarget{table}
- \ifvoid\LT@firsthead\copy\LT@head\else\box\LT@firsthead\fi\nobreak
- \tagmcbegin{artifact}
- \tag_mc_reset_box:N\LT@head
- \tagmcend
- \output{\LT@output}}
-\def\__tbl_patch_LT@output{%
- \ifnum\outputpenalty <-\@Mi
- \ifnum\outputpenalty > -\LT@end@pen
- \LT@err{floats and marginpars not allowed in a longtable}\@ehc
- \else
- \setbox\z@\vbox{\unvbox\@cclv}%
- \ifdim \ht\LT@lastfoot>\ht\LT@foot
- \dimen@\pagegoal
- \advance\dimen@\ht\LT@foot
- \advance\dimen@-\ht\LT@lastfoot
- \ifdim\dimen@<\ht\z@
- \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
- \@makecol
- \@outputpage
- \global\vsize\@colroom
- \setbox\z@\vbox{\box\LT@head}%
- \fi
- \fi
- \unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi
- \tagmcbegin{artifact}
- \tag_mc_reset_box:N \LT@foot
- \tagmcend
- \fi
- \else
- \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
- \tagmcbegin{artifact}
- \tag_mc_reset_box:N \LT@foot
- \tagmcend
- \@makecol
- \@outputpage
- \global\vsize\@colroom
- \copy\LT@head\nobreak
- \fi}
\def\__tbl_patch_LT@makecaption#1#2#3{%
\LT@mcol\LT@cols c{%
% test can go after merge
@@ -922,56 +517,10 @@
\hss}}}
\AddToHook{package/longtable/after}
{
- \seq_new:N \g__tbl_LT@firsthead_rows_seq
- \seq_new:N \g__tbl_LT@head_rows_seq
- \seq_new:N \g__tbl_LT@lastfoot_rows_seq
- \seq_new:N \g__tbl_LT@foot_rows_seq
- \cs_set_eq:NN \LT@array\__tbl_patch_LT@array
- \cs_set_eq:NN \endlongtable\__tbl_patch_endlongtable
- \cs_set_eq:NN \LT@start\__tbl_patch_LT@start
- \cs_set_eq:NN \LT@output\__tbl_patch_LT@output
- \cs_set_eq:NN \LT@t@bularcr\__tbl_patch_LT@t@bularcr
- \cs_set_eq:NN \LT@end@hd@ft\__tbl_patch_LT@end@hd@ft
\cs_set_eq:NN \LT@makecaption\__tbl_patch_LT@makecaption
}
-\def\__tbl_patch_TX@endtabularx{%
- \expandafter\expandafter\expandafter
- \TX@find@endtabularxa\csname end\TX@\endcsname
- \endtabularx\TX@\endtabularx\TX@find@endtabularxa
- \expandafter\TX@newcol\expandafter{\tabularxcolumn{\TX@col@width}}%
- \let\verb\TX@verb
- \def\@elt##1{\global\value{##1}\the\value{##1}\relax}%
- \edef\TX@ckpt{\cl@@ckpt}%
- \let\@elt\relax
- \TX@old@table\maxdimen
- \TX@col@width\TX@target
- \global\TX@cols\@ne
- \TX@typeout@
- {\@spaces Table Width\@spaces Column Width\@spaces X Columns}%
- \tag_stop:n{tabularx}
- \TX@trial{\def\NC@rewrite@X{%
- \global\advance\TX@cols\@ne\NC@find p{\TX@col@width}}}%
- \loop
- \TX@arith
- \ifTX@
- \TX@trial{}%
- \repeat
- \tag_start:n{tabularx}
- {\let\@footnotetext\TX@ftntext\let\@xfootnotenext\TX@xftntext
- \csname tabular*\expandafter\endcsname\expandafter\TX@target
- \the\toks@
- \csname endtabular*\endcsname}%
- \global\TX@ftn\expandafter{\expandafter}\the\TX@ftn
- \ifnum0=`{\fi}%
- \expandafter\expandafter\expandafter
- \TX@find@endtabularxbb
- \expandafter\end\expandafter{\TX@}%
- \endtabularx\TX@\endtabularx\TX@find@endtabularxb
-}
-\AddToHook{package/tabularx/after}
- {\cs_set_eq:NN \TX@endtabularx\__tbl_patch_TX@endtabularx }
\endinput
%%
%% End of file `latex-lab-testphase-table.sty'.