summaryrefslogtreecommitdiff
path: root/tex/context/base/tabl-ntb.mkiv
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/tabl-ntb.mkiv')
-rw-r--r--tex/context/base/tabl-ntb.mkiv1912
1 files changed, 901 insertions, 1011 deletions
diff --git a/tex/context/base/tabl-ntb.mkiv b/tex/context/base/tabl-ntb.mkiv
index 9c7864184..99da4b5e8 100644
--- a/tex/context/base/tabl-ntb.mkiv
+++ b/tex/context/base/tabl-ntb.mkiv
@@ -1,5 +1,5 @@
%D \module
-%D [ file=tabl-ntb,
+%D [ file=core-ntb,
%D version=2000.04.18,
%D title=\CONTEXT\ Table Macros,
%D subtitle=Natural Tables,
@@ -11,15 +11,16 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D This module as a more modern variant in xtables but as we follow a bit
-%D different approach with settings there, this mechanism will stay. In fact
-%D each of them has its advantages. This module could be sped up a bit and made
-%D more efficient by delegating some housekeeping to \LUA\ but it's not worth
-%D the effort. The code could me made more readable but again, there is no
-%D real purpose in it. If needed I can squeeze out a few more percentages
-%D runtime.
+%D This is an unfinished, preliminary module. At least two
+%D runs are needed to get the table fixed. Ugly code.
-\writestatus{loading}{ConTeXt Table Macros / Natural Tables}
+% todo: TABLE TBL -> ntb
+% todo: special parsetb for argless variant
+% todo: protect \tbl...
+% todo: tblnx also count
+% todo: get rid of recurse
+% todo: fast if
+% todo: avoid halign (just do it manual) and thereby globals
% bug: width 3cm is not honored and column becomes too wide
% as given width is added to distributed width
@@ -55,14 +56,65 @@
% \stopcelltable
% \stoptext
-%D As always, this is the n\high{th} version. Much time went in
+% optie=rek beschrijven
+
+\writestatus{loading}{ConTeXt Table Macros / Natural Tables}
+
+%D As always, this is the nth version. Much time went in
%D trying to speed up the many cell calculations, some
%D optimizations were rejected in order not to complicate this
-%D module too much (and in order to prevail extensibility). In the
-%D meantime we've sacrified some speed for readability.
+%D module too much (and in order to prevail extensibility).
+% shapebox fails here in mkii
+%
+% \setupcolors[state=start]
+% \bTABLE
+% \bTR [align=middle]\bTH Range\eTH{}\bTH Value\eTH{}\eTR
+% \bTR \bTD \type{<} 12\eTD{}\bTD 3\eTD{}\eTR
+% \bTR \bTD 12--16\eTD{}\bTD 2\eTD{}\eTR
+% \bTR \bTD \type{>}16\eTD{}\bTD 1\eTD{}\eTR
+% \eTABLE
+
+% \starttext
+% \placefigure[left]{}{}
+% \startlinecorrection \dontleavehmode \bTABLE
+% \bTR \bTD oeps \eTD \eTR
+% \eTABLE \stoplinecorrection
+% \placefigure[right]{}{}
+% \startlinecorrection \dontleavehmode \bTABLE
+% \bTR \bTD oeps \eTD \eTR
+% \eTABLE \stoplinecorrection
+% \stoptext
+
+%D To Do:
+%D
+%D \starttyping
+%D break over pagina
+%D kop herhalen
+%D reset settings
+%D
+%D \setupTABLE [c|column|x] [nx|odd|even|first|last][a=b]
+%D \setupTABLE [r|row |y] [nx|odd|even|first|last][a=b]
+%D \setupTABLE [nx|odd|even|first|last][ny|odd|even|first|last][a=b]
+%D \setupTABLE [nx|odd|even|first|last] [a=b]
+%D \setupTABLE [a=b]
+%D
+%D \bTH \eTH
+%D \stoptyping
+
+% the section setup does not work yet, data needs to be stored,
+% i.e.each row should know if it's a head/body/foot, and there
+% should be \setupTABLE[head]... and alike
+
\unprotect
+%D A simple way to force equal line spacing is to say:
+%D
+%D \starttyping
+%D \def\bTBLCELL{\begstrut}
+%D \def\eTBLCELL{\endstrut}
+%D \stoptyping
+%D
%D The next alternative also takes care of preceding and following
%D white space.
%D
@@ -74,25 +126,22 @@
%D
%D \typebuffer \getbuffer
-\ifdefined\dotagTABLEcell \else \let\dotagTABLEcell \relax \fi % todo: namespace
-\ifdefined\dotagTABLEsignal \else \let\dotagTABLEsignal\relax \fi % todo: namespace
-
-\let\tabl_tnb_next_level\relax
+\ifdefined\dotagTABLEcell \else \let\dotagTABLEcell \relax \fi
+\ifdefined\dotagTABLEsignal \else \let\dotagTABLEsignal\relax \fi
-\unexpanded\def\tabl_tnb_cell_start
+\def\bTBLCELL % why not \doinhibitblank
{\inhibitblank
\dotagTABLEcell
-% \tabl_tnb_next_level
- \usenaturaltablelocalstyleandcolor\c!style\c!color
- \everypar{\naturaltablelocalparameter\c!left\delayedbegstrut}}
+ \dousestyleparameter\tbltblstyle
+ \everypar{\tbltblleft\delayedbegstrut}}
-\unexpanded\def\tabl_tnb_cell_stop
+\def\eTBLCELL
{\ifhmode
\delayedendstrut
- \naturaltablelocalparameter\c!right
+ \tbltblright
\par % added 13/4/2006
\else
- % not sure yet:\naturaltablelocalparameter\c!right
+ % not sure yet:\tbltblright
\par
\ifdim\prevdepth<\zeropoint % =-1000pt ?
\vskip-\strutdp
@@ -101,195 +150,92 @@
\fi
\fi}
-\newcount\c_tabl_ntb_row
-\newcount\c_tabl_ntb_col
-\newcount\c_tabl_ntb_spn
+\newcount\currenttbl
-\newcount\c_tabl_ntb_nx
-\newcount\c_tabl_ntb_ny
+\def\@@tbl{tbl} \def\tblcell{1} \def\tblnone{2}
-\setnewconstant\c_tabl_ntb_cell \plusone
-\setnewconstant\c_tabl_ntb_none \plustwo
+\def\@@tblprefix{tbl:} \let\@@rawtblprefix\@@tblprefix
-\newcount\c_tabl_ntb_current_row
-\newcount\c_tabl_ntb_current_col
-\newcount\c_tabl_ntb_current_row_one
-\newcount\c_tabl_ntb_current_col_one
-\newcount\c_tabl_ntb_current_row_two
-\newcount\c_tabl_ntb_current_col_two
-\newcount\c_tabl_ntb_current_row_three
-\newcount\c_tabl_ntb_current_col_three
-\newcount\c_tabl_ntb_current_row_four
-\newcount\c_tabl_ntb_current_col_four
+%D This should be done more efficient: soon
-\newcount\c_tabl_ntb_running_col
-\newcount\c_tabl_ntb_maximum_row
-\newcount\c_tabl_ntb_maximum_col
-\newcount\c_tabl_ntb_maximum_row_span
-\newcount\c_tabl_ntb_maximum_col_span
+% \let as well as \expandafter\edef's
-\newtoks\t_tabl_ntb
-\newtoks\t_tabl_ntb_row
+\newcounter\TBLlevel
-\newconstant\c_tabl_tbl_pass
+\def\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi}
-\newtoks\t_tabl_ntb_head
-\newtoks\t_tabl_ntb_next
-\newtoks\t_tabl_ntb_body
-\newtoks\t_tabl_ntb_foot
+% \def\tblsetprefix % not yet used, figure out when .. may interfere with setup
+% {\edef\@@tblprefix{\@@tbl:\ifnum\TBLlevel>1 :\TBLlevel:\fi}}
-\newcount\c_tabl_ntb_n_of_head_lines
-\newcount\c_tabl_ntb_n_of_next_lines
-\newcount\c_tabl_ntb_n_of_hdnx_lines
+\def\settblnob#1{\expandafter\let\csname\@@tblprefix\number#1:b\endcsname\plusone}
+\def\gettblnob#1{\ifcsname\@@tblprefix\number#1:b\endcsname\plusone\else\zerocount\fi}
-\newdimen\d_tabl_ntb_height
-\newdimen\d_tabl_ntb_width
+\def\settbltag#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:s\endcsname}
+\def\settblcol#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:c\endcsname}
+\def\settblrow#1#2{\expandafter\edef\csname\@@tblprefix\number#1:\number#2:r\endcsname}
-\newtoks\everyTABLEpass % public
+\def\lettbltag#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:s\endcsname}
+\def\lettblcol#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:c\endcsname}
+\def\lettblrow#1#2{\expandafter\let\csname\@@tblprefix\number#1:\number#2:r\endcsname}
-\newcount\tablecellrows % public (needs checking)
-\newcount\tablecellcolumns % public (needs checking)
+\def\settblwd#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:wd\endcsname} % global !
+\def\settblht#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:ht\endcsname} % global !
+\def\lettblwd#1#2{\global\expandafter\let\csname\@@tblprefix\number#1:\number#2:wd\endcsname} % global !
+\def\lettblht#1#2{\global\expandafter\let\csname\@@tblprefix\number#1:\number#2:ht\endcsname} % global !
-\newbox\b_tabl_ntb_final
+\def\gettbltag#1#2{\csname\@@tblprefix\number#1:\number#2:s\endcsname}
+\def\gettblcol#1#2{\csname\@@tblprefix\number#1:\number#2:c\endcsname}
+\def\gettblrow#1#2{\csname\@@tblprefix\number#1:\number#2:r\endcsname}
-%D We have already prepared the previous macros for nesting,
-%D so we only have to pop in the right ones:
+\def\gettblwd #1#2{\csname\@@tblprefix\number#1:\number#2:wd\endcsname}
+\def\gettblht #1#2{\csname\@@tblprefix\number#1:\number#2:ht\endcsname}
-\newcount\c_tabl_level
+\def\settblwid#1{\expandafter\xdef\csname\@@tblprefix\number#1:w\endcsname} % {#2} global !
+\def\settblhei#1{\expandafter\xdef\csname\@@tblprefix\number#1:h\endcsname} % {#2} global !
+\def\settbldis#1{\expandafter\xdef\csname\@@tblprefix\number#1:d\endcsname} % {#2} global !
+\def\settblaut#1{\expandafter\xdef\csname\@@tblprefix\number#1:a\endcsname} % {#2} global !
-\unexpanded\def\tabl_ntb_table_push
- {\ifnum\m_tabl_tbl_level>\plusone
- \tabl_ntb_parameters_reset
- % we need a proper count push/pop
- \xdef\m_tabl_ntb_saved_row{\the\c_tabl_ntb_row}\globalpushmacro\m_tabl_ntb_saved_row
- \xdef\m_tabl_ntb_saved_col{\the\c_tabl_ntb_col}\globalpushmacro\m_tabl_ntb_saved_col
- \else
- \global\intabletrue
- \fi}
+\def\lettblwid#1{\global\expandafter\let\csname\@@tblprefix\number#1:w\endcsname} % {#2} global !
+\def\lettblhei#1{\global\expandafter\let\csname\@@tblprefix\number#1:h\endcsname} % {#2} global !
+\def\lettbldis#1{\global\expandafter\let\csname\@@tblprefix\number#1:d\endcsname} % {#2} global !
+\def\lettblaut#1{\global\expandafter\let\csname\@@tblprefix\number#1:a\endcsname} % {#2} global !
-\unexpanded\def\tabl_ntb_table_pop
- {\ifnum\m_tabl_tbl_level>\plusone
- \globalpopmacro\m_tabl_ntb_saved_row\global\c_tabl_ntb_row\m_tabl_ntb_saved_row
- \globalpopmacro\m_tabl_ntb_saved_col\global\c_tabl_ntb_col\m_tabl_ntb_saved_col
- \else
- \global\intablefalse
- \fi}
+\def\gettblwid#1{\ifcsname\@@tblprefix\number#1:w\endcsname\csname\@@tblprefix\number#1:w\endcsname\else\zeropoint\fi}
+\def\gettblhei#1{\ifcsname\@@tblprefix\number#1:h\endcsname\csname\@@tblprefix\number#1:h\endcsname\else\zeropoint\fi}
+\def\gettbldis#1{\ifcsname\@@tblprefix\number#1:d\endcsname\csname\@@tblprefix\number#1:d\endcsname\else\zeropoint\fi}
+\def\gettblaut#1{\csname \@@tblprefix\number#1:a\endcsname}
-\unexpanded\def\tabl_tnb_next_level
- {\advance\c_tabl_level\plusone
- \edef\m_tabl_tbl_level{\the\c_tabl_level}}
-
-\unexpanded\def\tabl_tnb_prev_level
- {\advance\c_tabl_level\minusone
- \edef\m_tabl_tbl_level{\the\c_tabl_level}}
-
-\tabl_tnb_next_level % go to level 1
-
-\installcorenamespace{naturaltable} % was tbl
-\installcorenamespace{naturaltablelocal} % was tbltbl
-
-\installdirectcommandhandler \??naturaltable {naturaltable} % \??naturaltable
-\installsimpleframedcommandhandler \??naturaltablelocal {naturaltablelocal} \??naturaltablelocal
-
-\installcorenamespace{naturaltablenob}
-\installcorenamespace{naturaltabletag}
-\installcorenamespace{naturaltablecol}
-\installcorenamespace{naturaltablerow}
-\installcorenamespace{naturaltablewd}
-\installcorenamespace{naturaltableht}
-\installcorenamespace{naturaltabledp}
-\installcorenamespace{naturaltablewid}
-\installcorenamespace{naturaltablehei}
-\installcorenamespace{naturaltabledis}
-\installcorenamespace{naturaltableaut}
-\installcorenamespace{naturaltabletxt}
-\installcorenamespace{naturaltablespn}
-\installcorenamespace{naturaltableref}
-\installcorenamespace{naturaltableset}
-\installcorenamespace{naturaltablecell}
-
-\def\tabl_ntb_set_nob#1{\expandafter\let\csname\??naturaltablenob\m_tabl_tbl_level:\number#1\endcsname\plusone}
-\def\tabl_ntb_get_nob#1{\ifcsname\??naturaltablenob\m_tabl_tbl_level:\number#1\endcsname\plusone\else\zerocount\fi}
-
-\def\tabl_ntb_set_tag#1#2{\expandafter\edef\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_set_col#1#2{\expandafter\edef\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_set_row#1#2{\expandafter\edef\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-
-\def\tabl_ntb_let_tag#1#2{\expandafter\let\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_let_col#1#2{\expandafter\let\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_let_row#1#2{\expandafter\let\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-
-\def\tabl_ntb_set_wd#1#2{\expandafter\xdef\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
-\def\tabl_ntb_set_ht#1#2{\expandafter\xdef\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
-
-\def\tabl_ntb_let_wd#1#2{\global\expandafter\let\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
-\def\tabl_ntb_let_ht#1#2{\global\expandafter\let\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname} % global !
-
-\def\tabl_ntb_get_tag#1#2{\csname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_get_col#1#2{\csname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_get_row#1#2{\csname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-
-\def\tabl_ntb_get_wd#1#2{\csname\??naturaltablewd\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_get_ht#1#2{\csname\??naturaltableht\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-
-\def\tabl_ntb_set_wid#1{\expandafter\xdef\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_set_hei#1{\expandafter\xdef\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_set_dis#1{\expandafter\xdef\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_set_aut#1{\expandafter\xdef\csname\??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-
-\def\tabl_ntb_let_wid#1{\global\expandafter\let\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_let_hei#1{\global\expandafter\let\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_let_dis#1{\global\expandafter\let\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-\def\tabl_ntb_let_aut#1{\global\expandafter\let\csname\??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname} % {#2} global !
-
-\def\tabl_ntb_get_wid#1{\ifcsname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltablewid\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi}
-\def\tabl_ntb_get_hei#1{\ifcsname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltablehei\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi}
-\def\tabl_ntb_get_dis#1{\ifcsname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\csname\??naturaltabledis\m_tabl_tbl_level:\number#1\endcsname\else\zeropoint\fi}
-\def\tabl_ntb_get_aut#1{\csname \??naturaltableaut\m_tabl_tbl_level:\number#1\endcsname}
-
-\def\tabl_ntb_tag_pattern#1#2{\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2}
-\def\tabl_ntb_row_pattern#1#2{\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2}
-\def\tabl_ntb_col_pattern#1#2{\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2}
-
-\def\tabl_ntb_tag_doif #1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
-\def\tabl_ntb_tag_doifnot #1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi}
-\def\tabl_ntb_tag_doifelse#1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstoftwoarguments\else\expandafter\secondoftwoarguments\fi}
-\def\tabl_ntb_row_doif #1#2{\ifcsname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
-\def\tabl_ntb_col_doif #1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\firstofoneargument \else\expandafter\gobbleoneargument \fi}
-\def\tabl_ntb_col_doifnot #1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\expandafter\gobbleoneargument \else\expandafter\firstofoneargument \fi}
-
-% not used
-%
-% \def\tabl_ntb_tag_state#1#2{\ifcsname\??naturaltabletag\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi}
-% \def\tabl_ntb_row_state#1#2{\ifcsname\??naturaltablerow\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi}
-% \def\tabl_ntb_col_state#1#2{\ifcsname\??naturaltablecol\m_tabl_tbl_level:\number#1:\number#2\endcsname\zerocount\else\plusone\fi}
+\def\doiftbltag #1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
+\def\doifnottbltag #1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\gobbleoneargument \else\@EA\firstofoneargument \fi}
+\def\doifelsetbltag#1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
+\def\doiftblrow #1#2{\ifcsname\@@tblprefix\number#1:\number#2:r\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
+\def\doiftblcol #1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\@EA\firstofoneargument \else\@EA\gobbleoneargument \fi}
+\def\doifnottblcol #1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\@EA\gobbleoneargument \else\@EA\firstofoneargument \fi}
-\def\tabl_ntb_set_spn #1{\expandafter\let\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname \!!plusone}
-\def\tabl_ntb_spn_doifelse#1{\doifelse {\csname\??naturaltablespn\m_tabl_tbl_level:\number#1\endcsname}\!!plusone}
+\def\tbltagstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:s\endcsname\zerocount\else\plusone\fi}
+\def\tblrowstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:r\endcsname\zerocount\else\plusone\fi}
+\def\tblcolstate#1#2{\ifcsname\@@tblprefix\number#1:\number#2:c\endcsname\zerocount\else\plusone\fi}
-\def\tabl_ntb_set_spn #1{\setvalue {\??naturaltablespn\m_tabl_tbl_level:\number#1}{1}}
-\def\tabl_ntb_spn_doifelse#1{\doifelsevalue{\??naturaltablespn\m_tabl_tbl_level:\number#1}{1}}
+\def\settblspn #1{\expandafter\let\csname\@@tblprefix\number#1:s\endcsname \!!plusone}
+\def\doifelsetblspn#1{\doifelse {\csname\@@tblprefix\number#1:s\endcsname}\!!plusone}
+% \def\doifelsetblspn#1{\@EA\ifx\csname\@@tblprefix\number#1:s\endcsname\plusone\@EA\firstoftwoarguments\else\@EA\secondoftwoarguments\fi}
-\def\tabl_ntb_let_ref#1#2{\expandafter\glet\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_set_ref#1#2{\expandafter\xdef\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname}
-\def\tabl_ntb_get_ref#1#2{\ifcsname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname\csname\??naturaltableref\m_tabl_tbl_level:\number#1:\number#2\endcsname\fi}
+\def\settblspn #1{\setvalue {\@@tblprefix\number#1:s}{1}}
+\def\doifelsetblspn#1{\doifelsevalue{\@@tblprefix\number#1:s}{1}}
-% keep for a while:
-%
-% \unexpanded\def\tabl_ntb_set_txt_process#1#2#3#4#5#6% nasty: we restore the level
-% {\expandafter\def\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\expandafter\endcsname\expandafter
-% {\expandafter\def\expandafter\m_tabl_tbl_level\expandafter{\m_tabl_tbl_level}\tabl_ntb_cell_process{#3}{#4}[#5]{#6}}}
+\long\def\settbltxt#1#2#3%
+ {\long\@EA\def\csname\@@tblprefix\number#1:\number#2:t\@EA\endcsname\@EA{\@EA\def\@EA\TBLlevel\@EA{\TBLlevel}#3}}
-\unexpanded\def\tabl_ntb_set_txt_process#1#2#3#4#5#6%
- {\expandafter\def\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\endcsname
- {\tabl_ntb_cell_process{#3}{#4}[#5]{\tabl_tnb_next_level#6\tabl_tnb_prev_level}}}
+\def\gettbltxt#1#2%
+ {\csname\@@tblprefix\number#1:\number#2:t\endcsname}
-\def\tabl_ntb_get_txt#1#2%
- {\csname\??naturaltabletxt\m_tabl_tbl_level:\number#1:\number#2\endcsname}
+\newtoks\tbltoks
+\newtoks\tblrowtoks
-% to be changed:
+\let\pushTBLparameters\relax
+\let\popTBLparameters \relax
-\newif\ifsqueezeTBLspan \squeezeTBLspantrue % spans one column cell over multi column par cells
+\newif\ifsqueezeTBLspan \squeezeTBLspantrue % spans one column cell over multi column par cells
\newif\ifautosqueezeTBLspan \autosqueezeTBLspantrue % unless explicit widths are given
\newif\ifautoTBLspread \autoTBLspreadfalse
\newif\ifautoTBLhsize \autoTBLhsizetrue
@@ -303,90 +249,78 @@
\newif\iftraceTABLE \traceTABLEfalse
-% so far
+\def\noftblheadlines{0}
+\def\noftblnextlines{0}
+\def\noftblhdnxlines{0}
-\unexpanded\def\tabl_ntb_cell_process#1#2[#3]{}
+\long\def\handleTBLcell#1#2[#3]{}
-\unexpanded\def\bTC#1\eTC{\bTD#1\eTD} \let\eTC\relax
-\unexpanded\def\bTX#1\eTX{\bTD#1\eTD} \let\eTX\relax
-\unexpanded\def\bTY#1\eTY{\bTR#1\eTR} \let\eTY\relax
+\long\def\bTC#1\eTC{\bTD#1\eTD}
+\long\def\bTX#1\eTX{\bTD#1\eTD}
+\long\def\bTY#1\eTY{\bTR#1\eTR}
-\unexpanded\def\setupTABLE
- {\dotripleempty\tabl_ntb_setup}
+\let\getTABLEparameters\getparameters
-\let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal
+\unexpanded\def\setupTABLE
+ {\dotripleempty\dosetupTABLE}
-\def\tabl_ntb_setup
+\def\dosetupTABLE[#1][#2][#3]%
{\ifthirdargument
- \expandafter\tabl_ntb_setup_three
+ \processaction
+ [#1]
+ [ \v!row=>{\dosetupTABLExy[\c!y][#2][#3]},%
+ \v!column=>{\dosetupTABLExy[\c!x][#2][#3]},%
+ r=>{\dosetupTABLExy[\c!y][#2][#3]},%
+ c=>{\dosetupTABLExy[\c!x][#2][#3]},%
+ y=>{\dosetupTABLExy[\c!y][#2][#3]},%
+ x=>{\dosetupTABLExy[\c!x][#2][#3]},%
+ \v!start=>{\dosetupTABLExy[#1][#2][#3]},%
+ \v!header=>{\dosetupTABLExy[#1][#2][#3]},%
+ \s!unknown=>{\dosetupTABLEzz[#1][#2][#3]}]%
\else\ifsecondargument
- \doubleexpandafter\tabl_ntb_setup_two
+ \processaction
+ [#1]
+ [ \v!row=>{\dosetupTABLExy[\c!y][\v!each][#2]},%
+ \v!column=>{\dosetupTABLExy[\c!x][\v!each][#2]},%
+ r=>{\dosetupTABLExy[\c!y][\v!each][#2]},%
+ c=>{\dosetupTABLExy[\c!x][\v!each][#2]},%
+ y=>{\dosetupTABLExy[\c!y][\v!each][#2]},%
+ x=>{\dosetupTABLExy[\c!x][\v!each][#2]},%
+ \v!start=>{\dosetupTABLExy[#1][\v!each][#2]},%
+ \v!header=>{\dosetupTABLExy[#1][\v!each][#2]},%
+ \s!unknown=>{\dosetupTABLEzz[\c!x][#1][#2]}]%
\else
- \doubleexpandafter\tabl_ntb_setup_one
+ \getparameters[\@@tbl\@@tbl][#1]%
\fi\fi}
-\def\tabl_ntb_setup_one[#1][#2][#3]%
- {\setupcurrentnaturaltablelocal[#1]}
-
-\def\tabl_ntb_setup_xy[#1][#2][#3]%
- {\def\tabl_ntb_setup_step##1{\tabl_ntb_parameters_set[#1##1][#3]}%
- \processcommalist[#2]\tabl_ntb_setup_step}
-
-\def\tabl_ntb_setup_un[#1][#2][#3]%
- {\def\tabl_ntb_setup_step##1%
- {\def\tabl_ntb_setup_step_step####1{\tabl_ntb_parameters_set[\c!x##1\c!y####1][#3]}%
- \processcommalist[#2]\tabl_ntb_setup_step_step}%
- \processcommalist[#1]\tabl_ntb_setup_step}
-
-\def\tabl_ntb_setup_each[#1][#2][#3]% ignores #3
- {\tabl_ntb_parameters_set[#1\v!each][#2]}
-
-\def\tabl_ntb_setup_ux[#1][#2][#3]% ignores #3
- {\def\tabl_ntb_setup_step##1{\tabl_ntb_parameters_set[\c!x##1][#2]}%
- \processcommalist[#1]\tabl_ntb_setup_step}
-
-\installcorenamespace{naturaltablesetupthree}
-\installcorenamespace{naturaltablesetuptwo}
-
-\def\tabl_ntb_setup_three[#1]{\csname\??naturaltablesetupthree\ifcsname\??naturaltablesetupthree#1\endcsname#1\else\s!unknown\fi\endcsname[#1]}
-\def\tabl_ntb_setup_two [#1]{\csname\??naturaltablesetuptwo \ifcsname\??naturaltablesetuptwo #1\endcsname#1\else\s!unknown\fi\endcsname[#1]}
-
-\setvalue{\??naturaltablesetupthree \v!row}[#1]{\tabl_ntb_setup_xy [\c!y]}
-\setvalue{\??naturaltablesetupthree \v!column}[#1]{\tabl_ntb_setup_xy [\c!x]}
-\setvalue{\??naturaltablesetupthree \v!start}[#1]{\tabl_ntb_setup_xy [\v!start]}
-\setvalue{\??naturaltablesetupthree \v!header}[#1]{\tabl_ntb_setup_xy [\v!header]}
-
-\setvalue{\??naturaltablesetuptwo \v!row}[#1]{\tabl_ntb_setup_each[\c!y]}
-\setvalue{\??naturaltablesetuptwo \v!column}[#1]{\tabl_ntb_setup_each[\c!x]}
-\setvalue{\??naturaltablesetuptwo \v!start}[#1]{\tabl_ntb_setup_each[\v!start]}
-\setvalue{\??naturaltablesetuptwo \v!header}[#1]{\tabl_ntb_setup_each[\v!header]}
-
-\letvalue{\??naturaltablesetupthree\s!unknown}\tabl_ntb_setup_un
-\letvalue{\??naturaltablesetuptwo \s!unknown}\tabl_ntb_setup_ux
-
-\letcsnamecsname\csname\??naturaltablesetupthree r\endcsname\csname\??naturaltablesetupthree \v!row\endcsname
-\letcsnamecsname\csname\??naturaltablesetupthree c\endcsname\csname\??naturaltablesetupthree\v!column\endcsname
-\letcsnamecsname\csname\??naturaltablesetupthree y\endcsname\csname\??naturaltablesetupthree \v!row\endcsname
-\letcsnamecsname\csname\??naturaltablesetupthree x\endcsname\csname\??naturaltablesetupthree\v!column\endcsname
-
-\letcsnamecsname\csname\??naturaltablesetuptwo r\endcsname\csname\??naturaltablesetuptwo \v!row\endcsname
-\letcsnamecsname\csname\??naturaltablesetuptwo c\endcsname\csname\??naturaltablesetuptwo \v!column\endcsname
-\letcsnamecsname\csname\??naturaltablesetuptwo y\endcsname\csname\??naturaltablesetuptwo \v!row\endcsname
-\letcsnamecsname\csname\??naturaltablesetuptwo x\endcsname\csname\??naturaltablesetuptwo \v!column\endcsname
-
-\def\tabl_ntb_parameters_set[#1][#2]%
- {\ifappendTBLsetups
- \ifcsname\??naturaltableset\m_tabl_tbl_level:#1\endcsname
- \def\tabl_ntb_parameters_get[##1]%
- {\setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[##1,#2]}}%
- \getvalue{\??naturaltableset\m_tabl_tbl_level:#1}%
- \let\tabl_ntb_parameters_get\setupcurrentnaturaltablelocal
- \else
- \setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[#2]}%
- \fi
+\def\dosetupTABLExy[#1][#2][#3]%
+ {\def\dodosetupTABLE##1{\setTABLEparameters[#1##1][#3]}%
+ \processcommalist[#2]\dodosetupTABLE}
+
+\def\dosetupTABLEzz[#1][#2][#3]%
+ {\def\dodosetupTABLE##1%
+ {\def\dododosetupTABLE####1{\setTABLEparameters[\c!x##1\c!y####1][#3]}%
+ \processcommalist[#2]\dododosetupTABLE}%
+ \processcommalist[#1]\dodosetupTABLE}
+
+\def\nopTABLEparameters[#1][#2]%
+ {\letvalueempty{\@@tblprefix#1}} % can be made faster
+
+\def\setTABLEparameters[#1][#2]%
+ {\pushTBLparameters
+ \ifappendTBLsetups
+ \doifdefinedelse{\@@tblprefix#1}
+ {\def\getTABLEparameters[##1][##2]%
+ {\setvalue{\@@tblprefix#1}{\getTABLEparameters[\@@tbl\@@tbl][##2,#2]}}%
+ \getvalue{\@@tblprefix#1}%
+ \let\getTABLEparameters\getparameters}
+ {\setvalue{\@@tblprefix#1}{\getTABLEparameters[\@@tbl\@@tbl][#2]}}%
\else
- \setvalue{\??naturaltableset\m_tabl_tbl_level:#1}{\tabl_ntb_parameters_get[#2]}%
- \fi}
+ \setvalue{\@@tblprefix#1}{\getTABLEparameters[\@@tbl\@@tbl][#2]}%
+ \fi
+ \popTBLparameters}
+
+\let\setupTBLsection\relax
% % \setupTABLE [y] [first][background=color,backgroundcolor=blue,frame=off,bottomframe=on,topframe=on,framecolor=white]
% \setupTABLE [first][first][backgroundcorner=2,corner=10,frame=on]
@@ -448,91 +382,87 @@
%D
%D \start \tightTBLrowspanfalse \getbuffer \stop
-\let\tabl_ntb_setup_section\relax
-
-\unexpanded\def\tabl_ntb_setup_cell#1#2% cell over col over row
- {\tabl_ntb_setup_section % already forgotten
- \edef\m_tabl_ntb_positive_row{\number#1}%
- \edef\m_tabl_ntb_positive_col{\number#2}%
- \edef\m_tabl_ntb_negative_row{\the\numexpr-\c_tabl_ntb_maximum_row+#1+\minusone\relax}%
- \edef\m_tabl_ntb_negative_col{\the\numexpr-\c_tabl_ntb_maximum_col+#2+\minusone\relax}%
- % saves tokens (no speed gain)
- \edef\m_tabl_ntb_prefix{\??naturaltableset\m_tabl_tbl_level:}%
+\unexpanded\def\setupTBLcell#1#2% cell over col over row
+ {\setupTBLsection % already forgotten
+ \edef\positiverow{\number#1}%
+ \edef\positivecol{\number#2}%
+ \edef\negativerow{\the\numexpr-\maximumrow+#1+\minusone\relax}%
+ \edef\negativecol{\the\numexpr-\maximumcol+#2+\minusone\relax}%
% each each
- \csname\m_tabl_ntb_prefix\c!x\v!each\c!y\v!each\endcsname
- \csname\m_tabl_ntb_prefix\c!y\v!each\endcsname
- \csname\m_tabl_ntb_prefix\c!x\v!each\endcsname
+ \csname\@@tblprefix\c!x\v!each\c!y\v!each\endcsname
+ \csname\@@tblprefix\c!y\v!each\endcsname
+ \csname\@@tblprefix\c!x\v!each\endcsname
% odd even
- \csname\m_tabl_ntb_prefix\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname
- \csname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\endcsname
- \csname\m_tabl_ntb_prefix\c!x\v!oddeven\m_tabl_ntb_positive_col\c!y\v!oddeven\m_tabl_ntb_positive_row\endcsname
+ \csname\@@tblprefix\c!y\v!oddeven\positiverow\endcsname
+ \csname\@@tblprefix\c!x\v!oddeven\positivecol\endcsname
+ \csname\@@tblprefix\c!x\v!oddeven\positivecol\c!y\v!oddeven\positiverow\endcsname
% row/col number combinations
- \ifcsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_positive_row\endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname\csname\m_tabl_ntb_prefix\c!y\m_tabl_ntb_negative_row\endcsname\fi
- \naturaltablelocalparameter\c!extras
- \letnaturaltablelocalparameter\c!extras\relax % new, see x-fo
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\endcsname\fi
- \naturaltablelocalparameter\c!extras
- \letnaturaltablelocalparameter\c!extras\relax % new, see x-fo
+ \ifcsname\@@tblprefix\c!y\positiverow\endcsname\csname\@@tblprefix\c!y\positiverow\endcsname\fi
+ \ifcsname\@@tblprefix\c!y\negativerow\endcsname\csname\@@tblprefix\c!y\negativerow\endcsname\fi
+ \csname\@@tbl\@@tbl\c!extras\endcsname
+ \@EA\let\csname\@@tbl\@@tbl\c!extras\endcsname\relax % new, see x-fo
+ \ifcsname\@@tblprefix\c!x\positivecol\endcsname\csname\@@tblprefix\c!x\positivecol\endcsname\fi
+ \ifcsname\@@tblprefix\c!x\negativecol\endcsname\csname\@@tblprefix\c!x\negativecol\endcsname\fi
+ \csname\@@tbl\@@tbl\c!extras\endcsname
+ \@EA\let\csname\@@tbl\@@tbl\c!extras\endcsname\relax % new, see x-fo
% first/last combinations
- \ifnum\m_tabl_ntb_positive_row=\plusone
- \csname\m_tabl_ntb_prefix\c!y\v!first\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!first\endcsname\fi
+ \ifnum\positiverow=\plusone
+ \csname\@@tblprefix\c!y\v!first\endcsname
+ \ifcsname\@@tblprefix\c!x\positivecol\c!y\v!first\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\v!first\endcsname\fi
\fi
- \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\v!first\c!y\m_tabl_ntb_positive_row\endcsname\fi
+ \ifnum\positivecol=\plusone
+ \csname\@@tblprefix\c!x\v!first\endcsname
+ \ifcsname\@@tblprefix\c!x\v!first\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\v!first\c!y\positiverow\endcsname\fi
\fi
- \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax
- \csname\m_tabl_ntb_prefix\c!y\v!last\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\v!last\endcsname\fi
+ \ifnum\positiverow=\maximumrow\relax
+ \csname\@@tblprefix\c!y\v!last\endcsname
+ \ifcsname\@@tblprefix\c!x\positivecol\c!y\v!last\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\v!last\endcsname\fi
\fi
- \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\endcsname
- \ifcsname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\v!last\c!y\m_tabl_ntb_positive_row\endcsname\fi
+ \ifnum\positivecol=\maximumcol\relax
+ \csname\@@tblprefix\c!x\v!last\endcsname
+ \ifcsname\@@tblprefix\c!x\v!last\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\v!last\c!y\positiverow\endcsname\fi
\fi
- \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!last\endcsname
+ \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax
+ \csname\@@tblprefix\c!x\v!last\c!y\v!last\endcsname
\fi\fi
- \ifnum\m_tabl_ntb_positive_row=\plusone \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!first\endcsname
+ \ifnum\positiverow=\plusone \ifnum\positivecol=\plusone
+ \csname\@@tblprefix\c!x\v!first\c!y\v!first\endcsname
\fi\fi
- \ifnum\m_tabl_ntb_positive_row=\plusone \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!first\endcsname
+ \ifnum\positiverow=\plusone \ifnum\positivecol=\maximumcol\relax
+ \csname\@@tblprefix\c!x\v!last\c!y\v!first\endcsname
\fi\fi
- \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!last\endcsname
+ \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\plusone
+ \csname\@@tblprefix\c!x\v!first\c!y\v!last\endcsname
\fi\fi
% special case: two rows and last row : two&first and two&last (round corners)
- \ifnum\c_tabl_ntb_maximum_row=\plustwo\relax
- \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!first\c!y\v!two\endcsname
+ \ifnum\maximumrow=\plustwo\relax
+ \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\plusone
+ \csname\@@tblprefix\c!x\v!first\c!y\v!two\endcsname
\fi\fi
- \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax \ifnum\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax
- \csname\m_tabl_ntb_prefix\c!x\v!last\c!y\v!two\endcsname
+ \ifnum\positiverow=\maximumrow\relax \ifnum\positivecol=\maximumcol\relax
+ \csname\@@tblprefix\c!x\v!last\c!y\v!two\endcsname
\fi\fi
\fi
- \ifnum\tabl_ntb_get_col\m_tabl_ntb_positive_row\m_tabl_ntb_positive_col=\c_tabl_ntb_maximum_col\relax % top span over whole width
- \ifnum\m_tabl_ntb_positive_row=\plusone
- \csname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!first\endcsname
+ \ifnum\gettblcol\positiverow\positivecol=\maximumcol\relax % top span over whole width
+ \ifnum\positiverow=\plusone
+ \csname\@@tblprefix\c!x\v!one\c!y\v!first\endcsname
\fi
- \ifnum\m_tabl_ntb_positive_row=\c_tabl_ntb_maximum_row\relax
- \csname\m_tabl_ntb_prefix\c!x\v!one\c!y\v!last\endcsname
+ \ifnum\positiverow=\maximumrow\relax
+ \csname\@@tblprefix\c!x\v!one\c!y\v!last\endcsname
\fi
\fi
% header things
- \ifnum#1>\c_tabl_ntb_n_of_hdnx_lines\else
- \ifcsname\m_tabl_ntb_prefix\v!header\v!each \endcsname\csname\m_tabl_ntb_prefix\v!header\v!each \endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname\csname\m_tabl_ntb_prefix\v!header\m_tabl_ntb_positive_col\endcsname\fi
+ \ifnum#1>\noftblhdnxlines\else
+ \ifcsname\@@tblprefix\v!header\v!each \endcsname\csname\@@tblprefix\v!header\v!each \endcsname\fi
+ \ifcsname\@@tblprefix\v!header\positivecol\endcsname\csname\@@tblprefix\v!header\positivecol\endcsname\fi
\fi
% explicit cells
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_positive_col\c!y\m_tabl_ntb_positive_row\endcsname\fi
- \ifcsname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname\csname\m_tabl_ntb_prefix\c!x\m_tabl_ntb_negative_col\c!y\m_tabl_ntb_negative_row\endcsname\fi
+ \ifcsname\@@tblprefix\c!x\positivecol\c!y\positiverow\endcsname\csname\@@tblprefix\c!x\positivecol\c!y\positiverow\endcsname\fi
+ \ifcsname\@@tblprefix\c!x\negativecol\c!y\negativerow\endcsname\csname\@@tblprefix\c!x\negativecol\c!y\negativerow\endcsname\fi
% local
- \ifcsname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname\csname\m_tabl_ntb_prefix\c!y++\m_tabl_ntb_positive_row\endcsname\fi
+ \ifcsname\@@tblprefix\c!y++\positiverow\endcsname\csname\@@tblprefix\c!y++\positiverow\endcsname\fi
% done
- \xdef\m_tabl_ntb_after_split{\naturaltablelocalparameter\c!after}% to be checked
+ \global\letcscsname\@@tblsplitafter\csname\@@tbl\@@tbl\c!after\endcsname
\relax}
% we cannot use +n (checking on number/last/first would slow down too much)
@@ -548,7 +478,7 @@
% \dorecurse{10}{\bTR \dorecurse{6}{\bTD xxx \eTD} \eTR}
% \eTABLE
-\let\m_tabl_ntb_after_split\relax
+\globallet\@@tblsplitafter\relax
% split + page:
%
@@ -558,152 +488,101 @@
% \bTR \bTD left \eTD\bTD right \eTD\eTR
% \eTABLE
-\unexpanded\def\tabl_ntb_tr
- {\c_tabl_ntb_running_col\zerocount
- \advance\c_tabl_ntb_maximum_row\plusone
- \iffirstargument
- \expandafter\tabl_ntb_tr_yes
- \else
- \expandafter\gobbleoneoptional
- \fi}
+% todo: protect counters
-\def\tabl_ntb_tr_yes[#1]%
- {\setvalue{\??naturaltableset\m_tabl_tbl_level:\c!y++\the\c_tabl_ntb_maximum_row}{\setupcurrentnaturaltablelocal[#1]}}
+\newcount\row \newcount\col
+\newcount\xrow \newcount\xcol
+\newcount\xxrow \newcount\xxcol
+\newcount\maximumrow \newcount\maximumcol \newcount\maximumrowspan
+ \newcount\currentcol
+\newcount\tblspn
-\def\m_tabl_ntb_default_nr{\naturaltableparameter\c!nr}
-\def\m_tabl_ntb_default_nc{\naturaltableparameter\c!nc}
+\def\settblref#1#2{\expandafter\xdef\csname\@@tblprefix\number#1:\number#2:x\endcsname}
+\def\gettblref#1#2{\ifcsname\@@tblprefix\number#1:\number#2:x\endcsname\csname\@@tblprefix\number#1:\number#2:x\endcsname\fi}
-\unexpanded\def\tabl_ntb_td
- {\iffirstargument
- \expandafter\tabl_ntb_td_yes
- \else
- \expandafter\tabl_ntb_td_nop
+\def\parseTR[#1]%
+ {\currentcol\zerocount
+ \advance\maximumrow\plusone
+ \iffirstargument
+ \setvalue{\@@tblprefix\c!y++\number\maximumrow}{\getparameters[\@@tbl\@@tbl][#1]}% maybe also in mkii
\fi}
-\def\tabl_ntb_td_yes[#1]#2\eTD
- {\letnaturaltableparameter\c!ny \m_tabl_ntb_default_nr
- \letnaturaltableparameter\c!nx \m_tabl_ntb_default_nc
- \letnaturaltableparameter\c!nc \plusone
- \letnaturaltableparameter\c!nr \plusone
- \letnaturaltableparameter\c!n \c_tabl_ntb_running_col
- \letnaturaltableparameter\c!m \empty
- \letnaturaltableparameter\c!action\empty % not that important
- \setupcurrentnaturaltable[#1]%
- %
- \c_tabl_ntb_nx\naturaltableparameter\c!nx\relax
- \c_tabl_ntb_ny\naturaltableparameter\c!ny\relax
- % goto first cell n/m=cellnumber
- \edef\m_tabl_ntb_n{\naturaltableparameter\c!n}%
- \edef\m_tabl_ntb_m{\naturaltableparameter\c!m}%
- %
- \ifx\m_tabl_ntb_n\empty
- \global\advance\c_tabl_ntb_spn\c_tabl_ntb_nx\relax
- \else\ifnum\m_tabl_ntb_n=\c_tabl_ntb_running_col\else
- \tabl_ntb_td_pass_n{#1}%
+\long\def\parseTD[#1]#2\eTD
+ {\def\tblny{\tblnr}%
+ \def\tblnx{\tblnc}%
+ \let\tblnc\plusone
+ \let\tblnr\plusone
+ \let\tbln\currentcol
+ \let\tblm\empty
+ \iffirstargument
+ \getparameters[\@@tbl][#1]%
+ \fi
+ % goto first cell % NEW, n/m=cellnumber
+ \edef\@@tblnindeed{\csname\@@tbl\c!n\endcsname}%
+ \ifx\@@tblnindeed\empty
+ \global\advance\tblspn\tblnx\relax
+ \else\ifnum\@@tblnindeed=\currentcol\else
+ \scratchcounter\numexpr\@@tblnindeed-\currentcol+\minusone-\tblspn\relax
+ \ifnum\scratchcounter>\zerocount
+ \normalexpanded{\noexpand\parseTD[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no]}\eTD
+ \fi
+ % can also be made faster
+ \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]%
\fi\fi
- \ifx\m_tabl_ntb_m\empty \else
- \ifnum\m_tabl_ntb_m=\c_tabl_ntb_running_col\else
- \tabl_ntb_td_pass_m{#1}%
+ \edef\@@tblmindeed{\csname\@@tbl\c!m\endcsname}%
+ \ifx\@@tblmindeed\empty \else
+ \ifnum\@@tblmindeed=\currentcol \else
+ \scratchcounter\numexpr\@@tblmindeed-\currentcol+\minusone-\tblspn\relax
+ \dorecurse\scratchcounter{\normalexpanded{\noexpand\parseTD[\c!n=,\c!m=]}\eTD}%
+ % can be sped up
+ \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]% kind of double, see prev
\fi
\fi
\doloop % skip over columns that result from earlier span
- {\advance\c_tabl_ntb_running_col\plusone
- \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\endcsname \else
- \exitloop
- \fi}%
+ {\advance\currentcol\plusone
+ \doifnottbltag\maximumrow\currentcol\exitloop}%
+ % == \def\next{\advance\currentcol\plusone\doiftbltag\maximumrow\currentcol\next}\next
% fill r*c cells and set span
- \c_tabl_ntb_nx\naturaltableparameter\c!nx\relax
- \c_tabl_ntb_ny\naturaltableparameter\c!ny\relax
- \ifnum\c_tabl_ntb_nx=\plusone
- \ifnum\c_tabl_ntb_ny=\plusone
- \ifnum\c_tabl_ntb_running_col>\c_tabl_ntb_maximum_col\relax
- \c_tabl_ntb_maximum_col\c_tabl_ntb_running_col
+ \ifnum\tblnx=\plusone
+ \ifnum\tblny=\plusone
+ \ifnum\currentcol>\maximumcol\relax
+ \maximumcol\currentcol
\fi
\else
- \tabl_ntb_cell_preset
+ \presetTBLcell
\fi
\else
- \tabl_ntb_cell_preset
+ \presetTBLcell
\fi
% set values
- \tabl_ntb_let_tag\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\c_tabl_ntb_cell
- \tabl_ntb_set_col\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_nx}%
- \tabl_ntb_set_row\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_ny}%
+ \lettbltag\maximumrow\currentcol\tblcell
+ \settblcol\maximumrow\currentcol{\number\tblnx}%
+ \settblrow\maximumrow\currentcol{\number\tblny}%
% the action key will change!
- \tabl_ntb_set_ref\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\naturaltableparameter\c!action}%
+ \settblref\maximumrow\currentcol{\ifcsname\@@tbl\c!action\endcsname\csname\@@tbl\c!action\endcsname\fi}%
% save text
- \normalexpanded
- {\tabl_ntb_set_txt_process\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_maximum_row}{\the\c_tabl_ntb_running_col}}%
- {#1}{#2}}
-
-\def\tabl_ntb_td_nop[#1]#2\eTD
- {\global\advance\c_tabl_ntb_spn\plusone\relax
- \doloop
- {\advance\c_tabl_ntb_running_col\plusone
- \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\endcsname \else
- \exitloop
- \fi}%
- \c_tabl_ntb_nx\plusone
- \c_tabl_ntb_ny\plusone
- \ifnum\c_tabl_ntb_running_col>\c_tabl_ntb_maximum_col\relax
- \c_tabl_ntb_maximum_col\c_tabl_ntb_running_col
- \fi
- \tabl_ntb_let_tag\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\c_tabl_ntb_cell
- \tabl_ntb_set_col\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_nx}%
- \tabl_ntb_set_row\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_ny}%
- \tabl_ntb_let_ref\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col\empty
- \normalexpanded
- {\tabl_ntb_set_txt_process\c_tabl_ntb_maximum_row\c_tabl_ntb_running_col{\the\c_tabl_ntb_maximum_row}{\the\c_tabl_ntb_running_col}}%
- {#1}{#2}}
-
-\def\tabl_ntb_td_pass_n#1%
- {\scratchcounter\numexpr\m_tabl_ntb_n-\c_tabl_ntb_running_col+\minusone-\c_tabl_ntb_spn\relax
- \ifnum\scratchcounter>\zerocount
- \normalexpanded{\tabl_ntb_td[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no]}\eTD
- \fi
- \letnaturaltableparameter\c!ny\m_tabl_ntb_default_nr
- \letnaturaltableparameter\c!nx\m_tabl_ntb_default_nc
- \letnaturaltableparameter\c!nc\plusone
- \letnaturaltableparameter\c!nr\plusone
- \setupcurrentnaturaltable[#1]%
- \letnaturaltableparameter\c!n \empty
- \letnaturaltableparameter\c!m \empty}
-
-\def\tabl_ntb_td_pass_m#1%
- {\scratchcounter\numexpr\m_tabl_ntb_m-\c_tabl_ntb_running_col+\minusone-\c_tabl_ntb_spn\relax
- \dorecurse\scratchcounter{\normalexpanded{\tabl_ntb_td[\c!n=,\c!m=]}\eTD}%
- % can be sped up
- \letnaturaltableparameter\c!ny\m_tabl_ntb_default_nr
- \letnaturaltableparameter\c!nx\m_tabl_ntb_default_nc
- \letnaturaltableparameter\c!nc\plusone
- \letnaturaltableparameter\c!nr\plusone
- \setupcurrentnaturaltable[#1]%
- \letnaturaltableparameter\c!n \empty
- \letnaturaltableparameter\c!m \empty}
-
-\def\tabl_ntb_cell_preset
- {\c_tabl_ntb_current_row\c_tabl_ntb_maximum_row
- \c_tabl_ntb_current_col\c_tabl_ntb_running_col
- \dorecurse\c_tabl_ntb_ny\tabl_ntb_cell_preset_rows
+ \edef\celltag{{\number\maximumrow}{\number\currentcol}}%
+ \@EA\settbltxt\@EA\maximumrow\@EA\currentcol\@EA{\@EA\handleTBLcell\celltag[#1]{#2}}}
+
+\def\presetTBLcell
+ {\row\maximumrow
+ \col\currentcol
+ \dorecurse\tblny
+ {\col\currentcol
+ \settblcol\row\col{\number\tblnx}%
+ \ifnum\tblnx>\maximumrowspan\relax
+ \maximumrowspan\tblnx
+ \fi
+ \dorecurse\tblnx
+ {\lettbltag\row\col\tblnone
+ \advance\col\plusone}%
+ \advance\row\plusone}%
% check max column
- \advance\c_tabl_ntb_current_col\minusone
- \ifnum\c_tabl_ntb_current_col>\c_tabl_ntb_maximum_col\relax
- \c_tabl_ntb_maximum_col\c_tabl_ntb_current_col
+ \advance\col\minusone
+ \ifnum\col>\maximumcol\relax
+ \maximumcol\col
\fi}
-\def\tabl_ntb_cell_preset_rows
- {\c_tabl_ntb_current_col\c_tabl_ntb_running_col
- \tabl_ntb_set_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_nx}%
- \ifnum\c_tabl_ntb_nx>\c_tabl_ntb_maximum_row_span\relax
- \c_tabl_ntb_maximum_row_span\c_tabl_ntb_nx
- \fi
- \dorecurse\c_tabl_ntb_nx\tabl_ntb_cell_preset_cells
- \advance\c_tabl_ntb_current_row\plusone}
-
-\def\tabl_ntb_cell_preset_cells
- {\tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_none
- \advance\c_tabl_ntb_current_col\plusone}
-
%D The usage of n and m:
%D
%D \startbuffer
@@ -738,13 +617,13 @@
%D \stopbuffer
%D
%D \typebuffer \getbuffer
+
+\long\def\parseTH[#1]#2\eTH
+ {\parseTD[#1,\c!color=\tbltblheadcolor,\c!style=\tbltblheadstyle,\c!aligncharacter=\v!no]#2\eTD}
-\def\tabl_ntb_th[#1]#2\eTH
- {\tabl_ntb_td[#1,\c!color=\naturaltablelocalparameter\c!headcolor,\c!style=\naturaltablelocalparameter\c!headstyle,\c!aligncharacter=\v!no]#2\eTD}
-
-\def\tabl_ntb_tn[#1]#2\eTN
- {\tabl_ntb_td[#1]\digits#2\relax\eTD}
-
+\long\def\parseTN[#1]#2\eTN
+ {\parseTD[#1]\digits#2\relax\eTD}
+
%D Vit Zyka needed the option to create a distance between columns, so I
%D added support for individual column distances.
%D
@@ -789,94 +668,86 @@
%D \stopbuffer
%D
%D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection
+
+\newtoks\TBLhead
+\newtoks\TBLnext
+\newtoks\TBLbody
+\newtoks\TBLfoot
% to be done: head <raw> foot, dus state var
-\unexpanded\def\bTABLEhead{\dosingleempty\tabl_ntb_head} \let\eTABLEhead\relax
-\unexpanded\def\bTABLEnext{\dosingleempty\tabl_ntb_next} \let\eTABLEnext\relax
-\unexpanded\def\bTABLEbody{\dosingleempty\tabl_ntb_body} \let\eTABLEbody\relax
-\unexpanded\def\bTABLEfoot{\dosingleempty\tabl_ntb_foot} \let\eTABLEfoot\relax
+\unexpanded\def\bTABLEhead{\dosingleempty\doTABLEhead} \let\eTABLEhead\relax
+\unexpanded\def\bTABLEnext{\dosingleempty\doTABLEnext} \let\eTABLEnext\relax
+\unexpanded\def\bTABLEbody{\dosingleempty\doTABLEbody} \let\eTABLEbody\relax
+\unexpanded\def\bTABLEfoot{\dosingleempty\doTABLEfoot} \let\eTABLEfoot\relax
-\def\tabl_ntb_head[#1]#2\eTABLEhead{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_head}
-\def\tabl_ntb_next[#1]#2\eTABLEnext{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_next}
-\def\tabl_ntb_body[#1]#2\eTABLEbody{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_body}
-\def\tabl_ntb_foot[#1]#2\eTABLEfoot{\appendtoks\tabl_ntb_section[#1]{#2}\to\t_tabl_ntb_foot}
+\long\def\doTABLEhead[#1]#2\eTABLEhead{\appendtoks\doTABLEsection[#1]{#2}\to\TBLhead}
+\long\def\doTABLEnext[#1]#2\eTABLEnext{\appendtoks\doTABLEsection[#1]{#2}\to\TBLnext}
+\long\def\doTABLEbody[#1]#2\eTABLEbody{\appendtoks\doTABLEsection[#1]{#2}\to\TBLbody}
+\long\def\doTABLEfoot[#1]#2\eTABLEfoot{\appendtoks\doTABLEsection[#1]{#2}\to\TBLfoot}
-\def\tabl_ntb_section[#1]#2% also used in tabl-nte
- {\unexpanded\def\tabl_ntb_setup_section{\setupcurrentnaturaltablelocal[#1]}%
+\long\def\doTABLEsection[#1]#2%
+ {\unexpanded\def\setupTBLsection{\getparameters[\@@tbl\@@tbl][#1]}%
#2%
- \let\tabl_ntb_setup_section\relax}
+ \let\setupTBLsection\relax}
-\def\tabl_ntb_preset_parameters% each odd|even level / can be sped up but only once per table
- {\ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname
- \csname\??naturaltableset\m_tabl_tbl_level:\v!start\v!each\endcsname
- \fi
- \ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname % hm
- \csname\??naturaltableset\m_tabl_tbl_level:\v!start\v!oddeven\m_tabl_tbl_level\endcsname
- \fi
- \ifcsname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname % hm
- \csname\??naturaltableset\m_tabl_tbl_level:\v!start\m_tabl_tbl_level\endcsname
- \fi}
+\let\pushTBL\relax
+\let\popTBL \relax
+
+\newconstant\tblpass
+
+\def\presetallTABLEparameters% each odd|even level / can be sped up but only once per table
+ {\executeifdefined{\@@rawtblprefix\v!start\v!each}\relax
+ \executeifdefined{\@@rawtblprefix\v!start\v!oddeven\TBLlevel}\relax
+ \executeifdefined{\@@rawtblprefix\v!start\number\TBLlevel}\relax}
\unexpanded\def\bTABLE
- {\dosingleempty\tabl_ntb_table}
+ {\dosingleempty\dobTABLE}
-\def\tabl_ntb_table[#1]%
- {\tabl_ntb_table_push
+\def\dobTABLE[#1]%
+ {\pushTBL
% box not here
\bgroup
- \t_tabl_ntb_head\emptytoks
- \t_tabl_ntb_next\emptytoks
- \t_tabl_ntb_body\emptytoks
- \t_tabl_ntb_foot\emptytoks
+ \TBLhead\emptytoks
+ \TBLnext\emptytoks
+ \TBLbody\emptytoks
+ \TBLfoot\emptytoks
\ifhmode\kern\zeropoint\fi % blocks \removeunwantedspaces: check this on icare handelingsschema
\resetcharacteralign % new
- \setupcurrentnaturaltablelocal[\c!align={\v!right,\v!broad,\v!high},#1]%
- \doifsomething{\naturaltablelocalparameter\c!setups}\doprocesslocalsetups{\naturaltablelocalparameter\c!setups}%
- \doifelse{\naturaltablelocalparameter\c!textwidth}\v!local
- {\hsize\availablehsize}
- {\hsize\naturaltablelocalparameter\c!textwidth}%
+ \getparameters
+ [\@@tbl\@@tbl]
+ [\c!align={\v!right,\v!broad,\v!high},#1]%
+ \ifx\tbltblsetups\empty\else
+ \doprocesslocalsetups\tbltblsetups
+ \fi
+ \hsize\tbltbltextwidth
\processaction
- [\naturaltablelocalparameter\c!split]
+ [\tbltblsplit]
[ \v!yes=>\enableTBLbreaktrue,
\v!repeat=>\enableTBLbreaktrue\multipleTBLheadstrue,
\v!auto=>\ifinsidesplitfloat\enableTBLbreaktrue\fi]
\processaction
- [\naturaltablelocalparameter\c!header]
+ [\tbltblheader]
[\v!repeat=>\multipleTBLheadstrue]%
- \tabl_ntb_preset_parameters
+ \presetallTABLEparameters
\processallactionsinset
- [\naturaltablelocalparameter\c!option]
+ [\tbltbloption]
[\v!stretch=>\autoTBLspreadtrue]%
- \linewidth\naturaltablelocalparameter\c!rulethickness % needs to be frozen
+ \linewidth\tbltblrulethickness % needs to be frozen
\dontcomplain
- \c_tabl_ntb_running_col \zerocount
- \c_tabl_ntb_maximum_col \zerocount
- \c_tabl_ntb_maximum_row \zerocount
- \c_tabl_ntb_maximum_row_span\plusone
- \let\currentTABLErow \tabl_ntb_current_row
- \let\currentTABLEcolumn\tabl_ntb_current_column
- \let\nofTABLErows \tabl_ntb_n_of_rows
- \let\nofTABLEcolumns \tabl_ntb_n_of_columns
+ \currentcol\zerocount
+ \maximumrowspan\plusone
+ \maximumcol\zerocount
+ \maximumrow\zerocount
\let\bTR\dobTR
\let\bTD\dobTD
\let\bTH\dobTH
\let\bTN\dobTN}
-\def\tabl_ntb_current_row {\m_tabl_ntb_positive_row}
-\def\tabl_ntb_current_column{\m_tabl_ntb_positive_col}
-\def\tabl_ntb_n_of_rows {\number\c_tabl_ntb_maximum_row}
-\def\tabl_ntb_n_of_columns {\number\c_tabl_ntb_maximum_col}
-
-\let\currentTABLErow \!!zerocount
-\let\currentTABLEcolumn\!!zerocount
-\let\nofTABLErows \!!zerocount
-\let\nofTABLEcolumns \!!zerocount
-
-\unexpanded\def\dobTR{\dosingleempty\tabl_ntb_tr} % also used in tabl-nte
-\unexpanded\def\dobTD{\dosingleempty\tabl_ntb_td} % also used in tabl-nte
-\unexpanded\def\dobTH{\dosingleempty\tabl_ntb_th} % also used in tabl-nte
-\unexpanded\def\dobTN{\dosingleempty\tabl_ntb_tn} % also used in tabl-nte
+\unexpanded\def\dobTR{\dosingleempty\parseTR}
+\unexpanded\def\dobTD{\dosingleempty\parseTD}
+\unexpanded\def\dobTH{\dosingleempty\parseTH}
+\unexpanded\def\dobTN{\dosingleempty\parseTN}
% permits \expanded{\bTD ... \eTD}
@@ -887,348 +758,302 @@
\unexpanded\def\eTABLE % beware, we need to get rid of spurious spaces when in hmode
{% tricky and dirty order -)
- \doifsometokselse\t_tabl_ntb_head % slow, better a flag
- {\the\t_tabl_ntb_head
- \c_tabl_ntb_n_of_head_lines\c_tabl_ntb_maximum_row\relax
- \doifsometokselse\t_tabl_ntb_next
- {\the\t_tabl_ntb_next
- \c_tabl_ntb_n_of_next_lines\numexpr\c_tabl_ntb_maximum_row-\c_tabl_ntb_n_of_head_lines\relax}%
- {\c_tabl_ntb_n_of_next_lines\zerocount}% was 1
- \c_tabl_ntb_n_of_hdnx_lines\c_tabl_ntb_maximum_row}
- {\c_tabl_ntb_n_of_head_lines\zerocount % was 1
- \c_tabl_ntb_n_of_next_lines\zerocount
- \c_tabl_ntb_n_of_hdnx_lines\zerocount}%
- \the\t_tabl_ntb_body
- \the\t_tabl_ntb_foot
+ \doifsometokselse\TBLhead % slow, better a flag
+ {\the\TBLhead
+ \edef\noftblheadlines{\number\maximumrow}%
+ \doifsometokselse\TBLnext
+ {\the\TBLnext
+ \edef\noftblnextlines{\number\numexpr\maximumrow-\noftblheadlines\relax}}%
+ {\let\noftblnextlines\zerocount}% was 1
+ \edef\noftblhdnxlines{\number\maximumrow}}
+ {\let\noftblheadlines\zerocount % was 1
+ \let\noftblnextlines\zerocount
+ \let\noftblhdnxlines\zerocount}%
+ \the\TBLbody
+ \the\TBLfoot
\removeunwantedspaces % only if hmode
% finish cells
- \tabl_ntb_loop_one
+ \dorecurse\maximumrow
+ {\row\recurselevel\relax
+ \dorecurse\maximumcol
+ {\col\recurselevel\relax
+ \doifnottbltag\row\col
+ {\xxcol\col
+ \xxrow\row
+ \xrow\row
+ \doloop
+ {\xcol\col
+ \doloop
+ {\doifelsetbltag\xrow\xcol \exitloop
+ {\advance\xcol\plusone
+ \ifnum\xcol>\maximumcol\relax \exitloop \fi}}%
+ \doifelsetbltag\xrow\xcol \exitloop
+ {\xxrow\xrow \xxcol\xcol \advance\xrow\plusone
+ \ifnum\xrow>\maximumrow \exitloop \fi}}%
+ \ifnum\xxrow>\maximumrow\xxrow\maximumrow\fi
+ \ifnum\xxcol>\maximumcol\xxcol\maximumcol\fi
+ \xxrow\numexpr\xxrow-\row+\plusone\relax
+ \xxcol\numexpr\xxcol-\col+\plusone\relax
+ \xrow\row
+ \dorecurse\xxrow
+ {\xcol\col \settblcol\xrow\xcol{\number\xxcol}%
+ \dorecurse\xxcol
+ {\lettbltag\xrow\xcol\tblnone \advance\xcol\plusone}%
+ \advance\xrow\plusone}%
+ \lettbltag\row\col\tblcell
+ \settblcol\row\col{\the\xxcol}%
+ \settblrow\row\col{\the\xxrow}%
+ \ifautoTBLemptycell
+ \edef\celltag{{\number\row}{\number\col}}%
+ \@EA\settbltxt\@EA\row\@EA\col\@EA{\@EA\handleTBLcell\celltag[]{\strut}}%
+ \fi}}}%
% to be sure
- \tabl_ntb_loop_two
+ \dorecurse\maximumrow
+ {\row\recurselevel\relax
+ \dorecurse\maximumcol
+ {\col\recurselevel\relax
+ \doiftblrow\row\col
+ {\scratchcounter\numexpr\maximumrow-\row+\plusone\relax
+ \ifnum\gettblrow\row\col>\scratchcounter
+ \settblrow\row\col{\the\scratchcounter}%
+ \fi}%
+ \lettblht\row\col\zeropoint
+ \lettblwd\row\col\zeropoint
+ \doifnottblcol\row\col{\lettblcol\row\col\zerocount}%
+ \doifnottbltag\row\col{\lettbltag\row\col\tblnone}}}%
% check and do
- \ifcase\c_tabl_ntb_maximum_col\else
+ \ifcase\maximumcol\else
\startTBLprocessing
- \tabl_ntb_table_start
- \dorecurse\c_tabl_ntb_maximum_row
- {\tabl_ntb_row_start
- \c_tabl_ntb_current_row\recurselevel\relax
- \dorecurse\c_tabl_ntb_maximum_col
- {\c_tabl_ntb_current_col\recurselevel\relax
- \normalexpanded{\tabl_ntb_cell{\the\c_tabl_ntb_current_row}{\the\c_tabl_ntb_current_col}}}%
- \tabl_ntb_row_stop}%
+ \begTBL
+ \dorecurse\maximumrow
+ {\bTBL
+ \row\recurselevel\relax
+ \dorecurse\maximumcol
+ {\col\recurselevel\relax
+ \normalexpanded{\noexpand\doTBL{\number\row}{\number\col}}}%
+ \eTBL}%
\removeunwantedspaces % only if hmode
- \tabl_ntb_table_stop
+ \endTBL
\stopTBLprocessing
% wrong ! ! ! better to have an auto-offset-overlay
- % \ifnum\m_tabl_tbl_level>1
+ % \ifnum\TBLlevel>1
% \vskip-\strutdp
% \fi
\fi
% tracing
% \iftrue
% \blank \tttf
- % \dorecurse\c_tabl_ntb_maximum_row
- % {\c_tabl_ntb_current_row\recurselevel\relax
- % \dorecurse\c_tabl_ntb_maximum_col
- % {\c_tabl_ntb_current_col\recurselevel\relax
- % [r=\the\c_tabl_ntb_current_row,c=\the\c_tabl_ntb_current_col,h=\the\dimexpr\tabl_ntb_get_ht\c_tabl_ntb_current_row\c_tabl_ntb_current_col,w=\the\dimexpr\tabl_ntb_get_wd\c_tabl_ntb_current_row\c_tabl_ntb_current_col]}%
+ % \dorecurse\maximumrow
+ % {\row\recurselevel\relax
+ % \dorecurse\maximumcol
+ % {\col\recurselevel\relax
+ % [r=\the\row,c=\the\col,h=\the\dimexpr\gettblht\row\col,w=\the\dimexpr\gettblwd\row\col]}%
% \par}%
% \blank
% \fi
\egroup
- \tabl_ntb_table_pop}
-
-\def\tabl_ntb_loop_one
- {\dorecurse\c_tabl_ntb_maximum_row{\tabl_ntb_loop_one_rows}}
-
-\def\tabl_ntb_loop_one_rows
- {\c_tabl_ntb_current_row\recurselevel\relax
- \dorecurse\c_tabl_ntb_maximum_col\tabl_ntb_loop_one_cells}
+ \popTBL}
-\def\tabl_ntb_loop_one_cells
- {\c_tabl_ntb_current_col\recurselevel\relax
- \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else
- \tabl_ntb_loop_one_cells_indeed
- \fi}
+\let\startTBLprocessing\relax
+\let\stopTBLprocessing \relax
-\def\tabl_ntb_loop_one_cells_indeed
- {\c_tabl_ntb_current_col_two\c_tabl_ntb_current_col
- \c_tabl_ntb_current_row_two\c_tabl_ntb_current_row
- \c_tabl_ntb_current_row_one\c_tabl_ntb_current_row
- \doloop
- {\c_tabl_ntb_current_col_one\c_tabl_ntb_current_col
- \doloop
- {\ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one\endcsname
- \exitloop
- \else
- \advance\c_tabl_ntb_current_col_one\plusone
- \ifnum\c_tabl_ntb_current_col_one>\c_tabl_ntb_maximum_col\relax
- \exitloop
- \fi
- \fi}%
- \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one\endcsname
- \exitloop
- \else
- \c_tabl_ntb_current_row_two\c_tabl_ntb_current_row_one
- \c_tabl_ntb_current_col_two\c_tabl_ntb_current_col_one
- \advance\c_tabl_ntb_current_row_one\plusone
- \ifnum\c_tabl_ntb_current_row_one>\c_tabl_ntb_maximum_row
- \exitloop
- \fi
- \fi}%
- \ifnum\c_tabl_ntb_current_row_two>\c_tabl_ntb_maximum_row\c_tabl_ntb_current_row_two\c_tabl_ntb_maximum_row\fi
- \ifnum\c_tabl_ntb_current_col_two>\c_tabl_ntb_maximum_col\c_tabl_ntb_current_col_two\c_tabl_ntb_maximum_col\fi
- \c_tabl_ntb_current_row_two\numexpr\c_tabl_ntb_current_row_two-\c_tabl_ntb_current_row+\plusone\relax
- \c_tabl_ntb_current_col_two\numexpr\c_tabl_ntb_current_col_two-\c_tabl_ntb_current_col+\plusone\relax
- \c_tabl_ntb_current_row_one\c_tabl_ntb_current_row
- \dorecurse\c_tabl_ntb_current_row_two
- {\c_tabl_ntb_current_col_one\c_tabl_ntb_current_col
- \tabl_ntb_set_col\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one{\the\c_tabl_ntb_current_col_two}%
- \dorecurse\c_tabl_ntb_current_col_two
- {\tabl_ntb_let_tag\c_tabl_ntb_current_row_one\c_tabl_ntb_current_col_one\c_tabl_ntb_none
- \advance\c_tabl_ntb_current_col_one\plusone}%
- \advance\c_tabl_ntb_current_row_one\plusone}%
- \tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_cell
- \tabl_ntb_set_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_current_col_two}%
- \tabl_ntb_set_row\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_current_row_two}%
- \ifautoTBLemptycell
- \normalexpanded
- {\tabl_ntb_set_txt_process\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\c_tabl_ntb_current_row}{\the\c_tabl_ntb_current_col}}%
- {}{\strut}%
- \fi}
+\newcount\prelocatedTBLrows % \prelocateTBLrows{1000} may speed up large tables
-\def\tabl_ntb_loop_two
- {\dorecurse\c_tabl_ntb_maximum_row\tabl_ntb_loop_two_rows}
-
-\def\tabl_ntb_loop_two_rows
- {\c_tabl_ntb_current_row\recurselevel\relax
- \dorecurse\c_tabl_ntb_maximum_col\tabl_ntb_loop_two_cells}
-
-\def\tabl_ntb_loop_two_cells
- {\c_tabl_ntb_current_col\recurselevel\relax
- \ifcsname\tabl_ntb_row_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname
- \scratchcounter\numexpr\c_tabl_ntb_maximum_row-\c_tabl_ntb_current_row+\plusone\relax
- \ifnum\tabl_ntb_get_row\c_tabl_ntb_current_row\c_tabl_ntb_current_col>\scratchcounter
- \tabl_ntb_set_row\c_tabl_ntb_current_row\c_tabl_ntb_current_col{\the\scratchcounter}%
- \fi
- \fi
- \tabl_ntb_let_ht\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint
- \tabl_ntb_let_wd\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zeropoint
- \ifcsname\tabl_ntb_col_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else
- \tabl_ntb_let_col\c_tabl_ntb_current_row\c_tabl_ntb_current_col\zerocount
- \fi
- \ifcsname\tabl_ntb_tag_pattern\c_tabl_ntb_current_row\c_tabl_ntb_current_col\endcsname \else
- \tabl_ntb_let_tag\c_tabl_ntb_current_row\c_tabl_ntb_current_col\c_tabl_ntb_none
- \fi}
-
-\let\startTBLprocessing\relax % public
-\let\stopTBLprocessing \relax % public
-
-\newcount\c_tabl_prelocated_rows % \prelocateTBLrows{1000} may speed up large tables
-
-\def\tabl_ntb_row_start{\t_tabl_ntb_row\emptytoks}
-\def\tabl_ntb_row_stop {\normalexpanded{\t_tabl_ntb{\the\t_tabl_ntb\noexpand\tabl_ntb_row_align_start\the\t_tabl_ntb_row\tabl_ntb_row_align_stop}}}
-
-\def\tabl_ntb_prelocate_error
- {\writestatus\m!system{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \the\c_tabl_prelocated_rows)}}
-
-% \prelocateTBLrows{1000} % may speed up large tables
+\def\bTBL{\tblrowtoks\emptytoks}
+\def\eTBL{\tbltoks\@EA\@EA\@EA{\@EA\the\@EA\tbltoks\@EA\begintblrow\the\tblrowtoks\endtblrow}}%
-\installcorenamespace{naturaltabletok}
+\def\prelocateTBLerror
+ {\writestatus\m!system{fatal error: use \string\prelocateTBLrows\space to increase table memory (now: \number\prelocatedTBLrows)}}
\def\prelocateTBLrows#1% we start at zero so we have one to much, better play safe anyway
- {\dostepwiserecurse\c_tabl_prelocated_rows{#1}\plusone{\expandafter\newtoks\csname\??naturaltabletok\recurselevel\endcsname}%
- \def\tabl_ntb_row_start
- {\ifnum\c_tabl_ntb_row<\c_tabl_prelocated_rows\relax
- \expandafter\let\expandafter\t_tabl_ntb_row\csname\??naturaltabletok\the\c_tabl_ntb_row\endcsname\t_tabl_ntb_row\emptytoks
+ {\dostepwiserecurse\prelocatedTBLrows{#1}\plusone{\expandafter\newtoks\csname tbl:\recurselevel\endcsname}%
+ \def\bTBL
+ {\ifnum\tblrow<\prelocatedTBLrows\relax
+ \@EA\let\@EA\tblrowtoks\csname tbl:\the\tblrow\endcsname\tblrowtoks\emptytoks
\else
- \tabl_ntb_prelocate_error
+ \prelocateTBLerror
\fi}%
- \def\tabl_ntb_row_stop
- {\normalexpanded{\t_tabl_ntb{\the\t_tabl_ntb\noexpand\tabl_ntb_row_align_start\the\csname\??naturaltabletok\the\c_tabl_ntb_row\endcsname\tabl_ntb_row_align_stop}}}%
- \global\c_tabl_prelocated_rows#1\relax}
+ \def\eTBL
+ {\tbltoks\@EA\@EA\@EA{\@EA\the\@EA\tbltoks\@EA\begintblrow\@EA\the\csname tbl:\the\tblrow\endcsname\endtblrow}}%
+ \global\prelocatedTBLrows#1\relax}
+
+% \prelocateTBLrows{1000} % may speed up large tables
% We use aligments to handle the empty (skipped) columns, so
% that we don't have to (re|)|calculate these.
-\def\tabl_ntb_column_skip
- {\global\advance\c_tabl_ntb_col\plusone}
+\def\skiptblcol
+ {\global\advance\tblcol\plusone}
-\def\tabl_ntb_column_next
- {\global\advance\c_tabl_ntb_col\plusone
- \kern\naturaltablelocalparameter\c!columndistance
- \aligntab}
+\def\nexttblcol
+ {\global\advance\tblcol\plusone
+ \kern\tbltblcolumndistance
+ &}
-\def\tabl_ntb_column_span
+\def\spantblcol
{\span}
-\let\m_tabl_ntb_saved_row\!!zerocount
-\let\m_tabl_ntb_saved_col\!!zerocount
+\newcount\tblrow
+\newcount\tblcol
-\def\tabl_ntb_row_align_start
- {\noalign{\tabl_ntb_row_align_reset}%
- \tabl_ntb_column_next
- \kern\dimexpr\naturaltablelocalparameter\c!leftmargindistance-\naturaltablelocalparameter\c!columndistance\relax}
+\let\savedtblrow\!!zerocount
+\let\savedtblcol\!!zerocount
-\unexpanded\def\tabl_ntb_row_align_reset
- {\global\advance\c_tabl_ntb_row\plusone
- \global\c_tabl_ntb_col\zerocount
- \global\c_tabl_ntb_spn\zerocount}
+\def\begintblrow
+ {\noalign
+ {\global\advance\tblrow\plusone
+ \global\tblcol\zerocount
+ \global\tblspn\zerocount}%
+ % \iftrue
+ % \bgroup\tbox{\tttf[\number\tblrow]}\egroup
+ % \fi
+ \nexttblcol
+ \kern\dimexpr\tbltblleftmargindistance-\tbltblcolumndistance\relax}
-\unexpanded\def\tabl_ntb_row_align_stop
- {\kern\dimexpr\naturaltablelocalparameter\c!rightmargindistance-\naturaltablelocalparameter\c!columndistance\relax
+\def\endtblrow
+ {\kern\dimexpr\tbltblrightmargindistance-\tbltblcolumndistance\relax
\crcr
\noalign
{\nointerlineskip
- \ifnum\c_tabl_ntb_row>\c_tabl_ntb_n_of_head_lines
- \ifnum\tabl_ntb_get_nob\c_tabl_ntb_row=\zerocount
+ \ifnum\tblrow>\noftblheadlines
+ \ifnum\gettblnob\tblrow=\zerocount
\allowbreak
\fi
\else
\allowbreak % else no proper head split off
\fi
\bgroup % protect local vars
- \m_tabl_ntb_after_split
+ \@@tblsplitafter
\egroup
\bgroup % protect local vars
- \scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax
- \ifnum\scratchcounter>\c_tabl_ntb_n_of_hdnx_lines\relax
- \ifnum\scratchcounter<\c_tabl_ntb_maximum_row\relax
- \doifsomething{\naturaltablelocalparameter\c!spaceinbetween}
- {\blank[\naturaltablelocalparameter\c!spaceinbetween]}%
+ \scratchcounter\numexpr\tblrow+\plusone\relax
+ \ifnum\scratchcounter>\noftblhdnxlines\relax
+ \ifnum\scratchcounter<\maximumrow\relax
+ \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
\fi
\fi
\egroup}}
-\def\tabl_ntb_flush_content
- {\the\everyTABLEpass
- \global\c_tabl_ntb_spn\zerocount
- \global\c_tabl_ntb_col\zerocount
- \global\c_tabl_ntb_row\zerocount
- \global\advance\c_tabl_ntb_row\minusone
+\def\begintbl
+ {\global\tblspn\zerocount
+ \global\tblcol\zerocount
+ \global\tblrow\zerocount
+ \global\advance\tblrow\minusone
\tabskip\zeropoint
\dostarttagged\t!table\empty
\dostarttagged\t!tablerow\empty
\appendtoks\dostoptagged\dostarttagged\t!tablerow\empty\to\everycr
\halign\bgroup
- \registerparoptions
- % watch out: tagging the cell happens at the outer level (faster)
- \ignorespaces\alignmark\alignmark\unskip
- \aligntab\aligntab
- \ignorespaces\alignmark\alignmark\unskip
- \cr % one too many
- \the\t_tabl_ntb
- \dostoptagged
+ \registerparoptions
+ % watch out: tagging the cell happens at the outer level (faster)
+% \ignorespaces##\unskip&&\dostarttagged\t!tablecell\empty\ignorespaces##\unskip\dostoptagged\cr} % one too many
+ \ignorespaces##\unskip&&\ignorespaces##\unskip\cr} % one too many
+
+\def\endtbl
+ {\dostoptagged
\egroup
\dostoptagged}
-\setvalue{\??naturaltablecell\the\c_tabl_ntb_none}#1#2%
- {\scratchcounter\tabl_ntb_get_col{#1}{#2}\relax
- \ifnum\scratchcounter>\zerocount
- \advance\scratchcounter\minusone
- \ifnum\scratchcounter>\zerocount
- \tabl_ntb_span
- \fi
- \t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_next}
- \fi}
+\setvalue{\tblnone TBL}#1#2%
+ {\spanTBL{#1}{#2}}
+
+\setvalue{\tblcell TBL}#1#2%
+ {\tblrowtoks\expandafter{\the\tblrowtoks\makeTBL #1 #2 }% space delimited -> less tokens
+ \spanTBL{#1}{#2}}
-\setvalue{\??naturaltablecell\the\c_tabl_ntb_cell}#1#2%
- {\t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_pass #1 #2 }% space delimited -> less tokens
- \scratchcounter\tabl_ntb_get_col{#1}{#2}\relax
+\def\spanTBL#1#2%
+ {\scratchcounter\gettblcol{#1}{#2}\relax
\ifnum\scratchcounter>\zerocount
- \advance\scratchcounter\minusone
- \ifnum\scratchcounter>\zerocount
- \tabl_ntb_span
- \fi
- \t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_next}
+ \advance\scratchcounter \minusone
+ \dorecurse\scratchcounter{\tblrowtoks\expandafter{\the\tblrowtoks\spantblcol}}%
+ \dorecurse\scratchcounter{\tblrowtoks\expandafter{\the\tblrowtoks\skiptblcol}}%
+ \tblrowtoks\expandafter{\the\tblrowtoks\nexttblcol}%
\fi}
-\def\tabl_ntb_span
- {\dorecurse\scratchcounter{\t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_span}}%
- \dorecurse\scratchcounter{\t_tabl_ntb_row\expandafter{\the\t_tabl_ntb_row\tabl_ntb_column_skip}}}
+\def\doTBL#1#2%
+ {\csname\gettbltag{#1}{#2}TBL\endcsname{#1}{#2}}
+
+\def\begTBL
+ {\global\tblspn\zerocount
+ \global\tblrow\zerocount
+ \global\tblcol\zerocount
+ \tblpass\zerocount
+ \tbltoks\emptytoks}
-\unexpanded\def\tabl_ntb_cell#1#2%
- {\csname\??naturaltablecell\the\tabl_ntb_get_tag{#1}{#2}\endcsname{#1}{#2}}
+\newtoks\everyTABLEpass
-\unexpanded\def\tabl_ntb_table_start
- {\global\c_tabl_ntb_spn\zerocount
- \global\c_tabl_ntb_row\zerocount
- \global\c_tabl_ntb_col\zerocount
- \c_tabl_tbl_pass\zerocount
- \t_tabl_ntb\emptytoks}
+\def\flushtbltoks
+ {\the\everyTABLEpass
+ \begintbl
+ \the\tbltoks
+ \endtbl}
-\def\tabl_ntb_pass_one#1 #2 %
- {\tabl_ntb_get_txt{#1}{#2}}%
+\def\domakeTBLone#1 #2 %
+ {\gettbltxt{#1}{#2}}%
-\def\tabl_ntb_pass_two#1 #2 % meer in cellD
- {\d_tabl_ntb_width\zeropoint
- \scratchcounter\c_tabl_ntb_col
- \!!counta\tabl_ntb_get_col{#1}{#2}\relax
+\def\domakeTBLtwo#1 #2 % meer in cellD
+ {\scratchdimen\zeropoint
+ \scratchcounter\tblcol
+ \!!counta\gettblcol{#1}{#2}\relax
\dorecurse\!!counta
- {\advance\d_tabl_ntb_width\dimexpr
- \tabl_ntb_get_wid\scratchcounter
- +\naturaltablelocalparameter\c!columndistance
- \ifnum\recurselevel<\!!counta
- +\tabl_ntb_get_dis\scratchcounter
- \fi
- \relax
+ {\advance\scratchdimen\dimexpr\gettblwid\scratchcounter+\tbltblcolumndistance\relax
+ \ifnum\recurselevel<\!!counta \advance\scratchdimen \gettbldis\scratchcounter\fi
\advance\scratchcounter\plusone}%
- \advance\d_tabl_ntb_width-\naturaltablelocalparameter\c!columndistance\relax
- \setbox\scratchbox\hbox{\tabl_ntb_get_txt{#1}{#2}}%
- \tabl_ntb_set_ht{#1}{#2}{\the\ht\scratchbox}%
- \tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}%
- \ifdim\ht\scratchbox>\tabl_ntb_get_hei{#1}\relax
- \tabl_ntb_set_hei{#1}{\the\ht\scratchbox}%
+ \edef\widthTBL{\the\dimexpr\scratchdimen-\tbltblcolumndistance\relax}%
+ \setbox\scratchbox\hbox{\gettbltxt{#1}{#2}}%
+ \settblht{#1}{#2}{\the\ht\scratchbox}%
+ \settblwd{#1}{#2}{\the\wd\scratchbox}%
+ \ifdim\ht\scratchbox>\gettblhei{#1}\relax
+ \settblhei{#1}{\the\ht\scratchbox}%
\fi}%
-\def\tabl_ntb_pass_three#1 #2 %
+\newcount\tablecellrows
+\newcount\tablecellcolumns
+
+\def\domakeTBLthree#1 #2 %
{% height
\dostarttagged\t!tablecell\empty
- \!!counta \tabl_ntb_get_col{#1}{#2}\relax
- \!!countb \tabl_ntb_get_row{#1}{#2}\relax
- \!!heighta\tabl_ntb_get_ht {#1}{#2}\relax
+ \!!counta \gettblcol{#1}{#2}\relax
+ \!!countb \gettblrow{#1}{#2}\relax
+ \!!heighta\gettblht {#1}{#2}\relax
\tablecellcolumns\!!counta % used later so don't adapt these
\tablecellrows \!!countb % used later so don't adapt these
- \d_tabl_ntb_height\zeropoint
- \ifnum\!!counta=\c_tabl_ntb_maximum_col\relax
+ \scratchdimen\zeropoint
+ \ifnum\!!counta=\maximumcol\relax
% case: nc=maxcolumns
\else
\scratchcounter#1\relax
\dorecurse\!!countb
- {\advance\d_tabl_ntb_height\tabl_ntb_get_hei\scratchcounter
+ {\advance\scratchdimen\gettblhei\scratchcounter
\advance\scratchcounter\plusone}%
- \ifdim\d_tabl_ntb_height<\!!heighta\relax
- \d_tabl_ntb_height\!!heighta
+ \ifdim\scratchdimen<\!!heighta\relax
+ \scratchdimen\!!heighta
\fi
\fi
+ \edef\heightTBL{\the\scratchdimen}%
% width
- \d_tabl_ntb_width\zeropoint
- \scratchcounter\c_tabl_ntb_col
+ \scratchdimen\zeropoint
+ \scratchcounter\tblcol
\dorecurse\!!counta
- {\advance\d_tabl_ntb_width\dimexpr
- \tabl_ntb_get_wid\scratchcounter
- +\naturaltablelocalparameter\c!columndistance
- \ifnum\recurselevel<\!!counta
- +\tabl_ntb_get_dis\scratchcounter
- \fi
- \relax
+ {\advance\scratchdimen\dimexpr\gettblwid\scratchcounter+\tbltblcolumndistance\relax
+ \ifnum\recurselevel<\!!counta \advance\scratchdimen \gettbldis\scratchcounter\fi
\advance\scratchcounter\plusone}%
- \advance\d_tabl_ntb_width-\naturaltablelocalparameter\c!columndistance\relax
+ \edef\widthTBL{\the\dimexpr\scratchdimen-\tbltblcolumndistance\relax}%
% cell
\setbox\scratchbox\hbox attr \taggedattribute \attribute\taggedattribute \bgroup
\dotagTABLEsignal % maybe we need to add some packaging in this case
- \tabl_ntb_get_txt{#1}{#2}%
+ \gettbltxt{#1}{#2}%
\egroup
- \ifnum\!!counta=\c_tabl_ntb_maximum_col\relax
+ \ifnum\!!counta=\maximumcol\relax
% case: nc=maxcolumns
\else
- \scratchdimen\tabl_ntb_get_hei{#1}%
+ \scratchdimen\gettblhei{#1}%
\setbox\scratchbox\hbox
{\lower\ht\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}}%
\ht\scratchbox\scratchdimen
\fi
\dp\scratchbox\zeropoint
- \edef\!!stringa{\tabl_ntb_get_ref{#1}{#2}}%
+ \edef\!!stringa{\gettblref{#1}{#2}}%
\ifx\!!stringa\empty
\box\scratchbox
\else
@@ -1236,103 +1061,108 @@
\fi
\dostoptagged} % right spot
-\def\tabl_tnb_cell_finalize
+\def\inTBLcell#1#2% hm, do we need #1 #2 ? we use tblcol anyway
{\doifnotinset\localwidth{\v!fit,\v!broad}% user set
- {\scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax
+ {\scratchdimen\gettblaut\tblcol\relax
\ifdim\localwidth>\scratchdimen
- \tabl_ntb_set_aut\c_tabl_ntb_col{\the\dimexpr\localwidth}%
- \fi}}
+ \settblaut\tblcol{\the\dimexpr\localwidth\relax}%
+ \fi}}%
-\def\tabl_ntb_table_stop
+\def\endTBL
{\setbox\scratchbox\hbox
- {\setupcurrentnaturaltablelocal[\c!frame=\v!off,\c!background=,\c!align=\v!no]%
- \inheritednaturaltablelocalframed{\strut}}%
- \edef\minimalcellheight{\the\ht\scratchbox}% not used
- \dorecurse\c_tabl_ntb_maximum_col
- {\tabl_ntb_let_aut\recurselevel\zeropoint
+ {\localframed
+ [\@@tbl\@@tbl]
+ [\c!frame=\v!off,\c!background=,\c!align=\v!no]
+ {\strut}}%
+ \edef\minimalcellheight{\the\ht\scratchbox}%
+ \dorecurse\maximumcol
+ {\lettblaut\recurselevel\zeropoint
% new
- \c_tabl_ntb_current_col_one\recurselevel\relax
- \dorecurse\c_tabl_ntb_maximum_row
- {\tabl_ntb_let_wd\recurselevel\c_tabl_ntb_current_col_one\zeropoint
- \tabl_ntb_let_ht\recurselevel\c_tabl_ntb_current_col_one\zeropoint}%
+ \xcol\recurselevel\relax
+ \dorecurse\maximumrow
+ {\lettblwd\recurselevel\xcol\zeropoint
+ \lettblht\recurselevel\xcol\zeropoint}%
% till here
- \tabl_ntb_let_wid\recurselevel\zeropoint
- \tabl_ntb_let_dis\recurselevel\zeropoint}%
- \dorecurse\c_tabl_ntb_maximum_row
- {\tabl_ntb_let_hei\recurselevel\maxdimen}%
- \c_tabl_tbl_pass\plusone
- \let\tabl_ntb_pass\tabl_ntb_pass_one
- \let\tabl_ntb_cell_process\tabl_ntb_cell_process_a
- \setbox0\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
- \tabl_ntb_let_dis\c_tabl_ntb_maximum_col\zeropoint
+ \lettblwid\recurselevel\zeropoint
+ \lettbldis\recurselevel\zeropoint}%
+ \dorecurse\maximumrow
+ {\lettblhei\recurselevel\maxdimen}%
+ \tblpass\plusone
+ \let\makeTBL\domakeTBLone
+ \let\handleTBLcell\dohandleTBLcellA
+ \setbox0\vbox{\settrialtypesetting \flushtbltoks}%
+% \setbox\scratchbox\vbox{\settrialtypesetting \flushtbltoks}%
+ \lettbldis\maximumcol\zeropoint
\ifautoTBLspread
% experimental, stretch non fixed cells to \hsize
- \tabl_ntb_check_widths_one % trial run
- \tabl_ntb_check_widths_two % real run
- \tabl_ntb_stretch_widths
- \let\tabl_ntb_cell_process\tabl_ntb_cell_process_b
- \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
+ \checktblwidthsone % trial run
+ \checktblwidthstwo % real run
+ \stretchtblwidths
+ \let\handleTBLcell\dohandleTBLcellB
+ \setbox\scratchbox\vbox{\settrialtypesetting \flushtbltoks}%
\else\ifdim\wd0>\hsize
\ifautoTBLhsize
- \tabl_ntb_check_widths_one % trial run
- \tabl_ntb_check_widths_two % real run
- \let\tabl_ntb_cell_process\tabl_ntb_cell_process_b
- \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
+ \checktblwidthsone % trial run
+ \checktblwidthstwo % real run
+ \let\handleTBLcell\dohandleTBLcellB
+ \setbox\scratchbox\vbox{\settrialtypesetting \flushtbltoks}%
\fi
- \else\ifautoTBLrowspan\ifnum\c_tabl_ntb_maximum_row_span>1 % max ?
+ \else\ifautoTBLrowspan\ifnum\maximumrowspan>1 % max ?
% added jan 2002 because nx=* did no longer work
\edef\savedhsize{\the\hsize}%
\hsize\wd0\relax % new per 17/04/2006
- \tabl_ntb_check_widths_one % trial run
- \tabl_ntb_check_widths_two % real run
+ \checktblwidthsone % trial run
+ \checktblwidthstwo % real run
\hsize\savedhsize
%
- \let\tabl_ntb_cell_process\tabl_ntb_cell_process_c
- \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
+ \let\handleTBLcell\dohandleTBLcellC
+ \setbox\scratchbox\vbox{\settrialtypesetting \flushtbltoks}%
\fi\fi\fi\fi
- \let\tabl_ntb_cell_process\tabl_ntb_cell_process_d
- \c_tabl_tbl_pass\plustwo
- \let\tabl_ntb_pass\tabl_ntb_pass_two
- \setbox\scratchbox\vbox{\settrialtypesetting \tabl_ntb_flush_content}%
- \tabl_ntb_check_heights_one
- \tabl_ntb_check_heights_two
- \let\tabl_ntb_cell_process\tabl_ntb_cell_process_e
- \c_tabl_tbl_pass\plusthree
- \let\tabl_ntb_pass\tabl_ntb_pass_three
- \ifnum\m_tabl_tbl_level>\plusone
- \expandafter\tabl_tbl_split_nop
+ \let\handleTBLcell\dohandleTBLcellD
+ \tblpass\plustwo
+ \let\makeTBL\domakeTBLtwo
+ \setbox\scratchbox\vbox{\settrialtypesetting \flushtbltoks}%
+ \checktblheightsone
+ \checktblheightstwo
+ \let\handleTBLcell\dohandleTBLcellE
+ \tblpass\plusthree
+ \let\makeTBL\domakeTBLthree
+ \ifnum\TBLlevel>\plusone
+ \@EA\notsplittblbox
\else\ifenableTBLbreak
- \doubleexpandafter\tabl_tbl_split_yes
+ \@EAEAEA\splittblbox
\else
- \doubleexpandafter\tabl_tbl_split_nop
- \fi\fi{\tabl_ntb_flush_content}}
+ \@EAEAEA\notsplittblbox
+ \fi\fi{\flushtbltoks}}
-\def\tabl_ntb_stretch_widths % more variants, e.g. a max to \dimend
- {\ifcase\c_tabl_ntb_maximum_col\else % else division by zero
+\def\stretchtblwidths % more variants, e.g. a max to \dimend
+ {\ifcase\maximumcol\else % else division by zero
\!!dimend\zeropoint
\!!dimene\hsize
- \dorecurse\c_tabl_ntb_maximum_col
- {\advance\!!dimend\dimexpr\tabl_ntb_get_wid\recurselevel+\naturaltablelocalparameter\c!columndistance\relax
- \advance\!!dimene-\tabl_ntb_get_dis\recurselevel}%
- \advance\!!dimend\dimexpr-\naturaltablelocalparameter\c!columndistance+\naturaltablelocalparameter\c!leftmargindistance+\naturaltablelocalparameter\c!rightmargindistance\relax
+ \dorecurse\maximumcol
+ {\advance\!!dimend\dimexpr\gettblwid\recurselevel+\tbltblcolumndistance\relax
+ \advance\!!dimene-\gettbldis\recurselevel}%
+ \advance\!!dimend\dimexpr-\tbltblcolumndistance+\tbltblleftmargindistance+\tbltblrightmargindistance\relax
% distribute width (stretch)
\ifdim\!!dimend<\!!dimene
\advance\!!dimend-\!!dimene
\!!dimend-\!!dimend
- \divide\!!dimend\c_tabl_ntb_maximum_col
- \dorecurse\c_tabl_ntb_maximum_col
- {\tabl_ntb_set_wid\recurselevel{\the\dimexpr\tabl_ntb_get_wid\recurselevel+\!!dimend\relax}}%
+ \divide\!!dimend\maximumcol
+ \dorecurse\maximumcol
+ {\settblwid\recurselevel{\the\dimexpr\gettblwid\recurselevel+\!!dimend\relax}}%
\fi
\fi}
-\def\tabl_tbl_split_nop#1%
- {\setbox\b_tabl_ntb_final\vbox{#1}%
- \postprocessTABLEbox\b_tabl_ntb_final
+\newbox\finaltblbox
+
+\def\notsplittblbox#1%
+ {\setbox\finaltblbox\vbox{#1}%
+ \postprocessTABLEbox\finaltblbox
\beforeTABLEbox
- \box\b_tabl_ntb_final
+ \box\finaltblbox
\afterTABLEbox}
-\def\tabl_tbl_split_yes % #1
+\def\splittblbox#1%
{\ifinsidesplitfloat
\donetrue
\else\ifinsidefloat
@@ -1341,33 +1171,33 @@
\donetrue
\fi\fi
\ifdone
- \expandafter\tabl_ntb_split_box
+ \executeifdefined{dosplittblbox\tbltblsplitmethod}\dosplittblbox{#1}%
\else
- \expandafter\tabl_tbl_split_nop
+ \notsplittblbox{#1}%
\fi}
\newbox\TABLEsplitbox % public, don't change
\let\extratblsplitheight\zeropoint % additional space taken by before/afterTABLEsplitbox
-\def\tabl_ntb_split_box#1%
+\def\dosplittblbox#1%
{\resettsplit
\def\tsplitminimumfreelines{2}%
- \def\tsplitminimumfreespace{\dimexpr\extratblsplitheight+\naturaltablelocalparameter\c!splitoffset\relax}%
+ \def\tsplitminimumfreespace{\dimexpr\extratblsplitheight+\tbltblsplitoffset\relax}%
\def\tsplitbeforeresult {\beforeTABLEsplitbox}%
\def\tsplitafterresult {\afterTABLEsplitbox}%
- \def\tsplitafter {\m_tabl_ntb_after_split}%
+ \def\tsplitafter {\@@tblsplitafter}%
\setbox\tsplitcontent\vbox{#1}%
\ifmultipleTBLheads
- \dorecurse\c_tabl_ntb_n_of_head_lines
+ \dorecurse\noftblheadlines
{\setbox\scratchbox\vsplit\tsplitcontent to \lineheight
\setbox\tsplithead\vbox{\unvcopy\tsplithead\unvcopy\scratchbox}}%
- \dorecurse\c_tabl_ntb_n_of_next_lines
+ \dorecurse\noftblnextlines
{\setbox\scratchbox\vsplit\tsplitcontent to \lineheight
\setbox\tsplitnext\vbox{\unvcopy\tsplitnext\unvcopy\scratchbox}}%
\fi
- \doifsomething{\naturaltablelocalparameter\c!spaceinbetween}
- {\def\tsplitinbetween{\blank[\naturaltablelocalparameter\c!spaceinbetween]}}%
+ \doifsomething\tbltblspaceinbetween
+ {\def\tsplitinbetween{\blank[\tbltblspaceinbetween]}}%
\def\postprocesstsplit{\postprocessTABLEsplitbox{\box\tsplitresult}}%
\handletsplit}
@@ -1381,22 +1211,22 @@
\let\beforeTABLEbox \relax
\let\afterTABLEbox \relax
-\def\tabl_ntb_check_widths_one{\tabl_ntb_check_widths_indeed0} % 0 = trial run
-\def\tabl_ntb_check_widths_two{\tabl_ntb_check_widths_indeed1} % 1 = real run
+\def\checktblwidthsone{\dochecktblwidths0} % 0 = trial run
+\def\checktblwidthstwo{\dochecktblwidths1} % 1 = real run
-\def\tabl_ntb_check_widths_indeed#1%
- {\iftraceTABLE\tabl_ntb_show_widths{B#1}\fi
+\def\dochecktblwidths#1%
+ {\iftraceTABLE\showtblwids{B#1}\fi
\!!counta\zerocount
- \!!dimena\dimexpr\hsize-\naturaltablelocalparameter\c!leftmargindistance-\naturaltablelocalparameter\c!rightmargindistance-\naturaltablelocalparameter\c!columndistance\relax
- \dorecurse\c_tabl_ntb_maximum_col
- {\scratchdimen\tabl_ntb_get_aut\recurselevel\relax
- \advance\!!dimena-\tabl_ntb_get_dis\recurselevel\relax
+ \!!dimena\dimexpr\hsize-\tbltblleftmargindistance-\tbltblrightmargindistance-\tbltblcolumndistance\relax
+ \dorecurse\maximumcol
+ {\scratchdimen\gettblaut\recurselevel\relax
+ \advance\!!dimena-\gettbldis\recurselevel\relax
\ifdim\scratchdimen>\zeropoint\relax
\advance\!!dimena -\scratchdimen
\else
- \scratchdimen\tabl_ntb_get_wid\recurselevel\relax
- \ifdim\scratchdimen>\naturaltablelocalparameter\c!maxwidth\relax
- \ifcase#1\else\tabl_ntb_let_wid\recurselevel\zeropoint\fi
+ \scratchdimen\gettblwid\recurselevel\relax
+ \ifdim\scratchdimen>\tbltblmaxwidth\relax
+ \ifcase#1\else\lettblwid\recurselevel\zeropoint\fi
\advance\!!counta \plusone
\else
\ifdim\scratchdimen>\zeropoint\relax
@@ -1409,157 +1239,163 @@
\fi
\fi}%
\ifcase\!!counta \else \divide\!!dimena \!!counta \fi
- \dorecurse\c_tabl_ntb_maximum_col
- {\scratchdimen\tabl_ntb_get_wid\recurselevel\relax
+ \dorecurse\maximumcol
+ {\scratchdimen\gettblwid\recurselevel\relax
\ifcase#1\relax
\ifdim\scratchdimen<\!!dimena % take natural width
- \tabl_ntb_set_aut\recurselevel{\the\scratchdimen}%
+ \settblaut\recurselevel{\the\scratchdimen}%
\fi
\else
\ifdim\scratchdimen=\zeropoint % auto set width
- \tabl_ntb_set_wid\recurselevel{\the\!!dimena}%
+ \settblwid\recurselevel{\the\!!dimena}%
\fi
\fi}%
- \iftraceTABLE\tabl_ntb_show_widths{E#1}\fi}
+ \iftraceTABLE\showtblwids{E#1}\fi}
+
+\newcount\xrowTBL
+\newcount\xcolTBL
+\newcount\xxrowTBL
-\def\tabl_ntb_check_heights_one_indeed
- {\!!countb\tabl_ntb_get_row\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three\relax
+% dikke arg naar recurse wegwerken
+
+\def\dochecktblheightsone
+ {\!!countb\gettblrow\xrowTBL\xcolTBL\relax
% check row span
\ifnum\!!countb>\plusone
% current height in row
- \dimen0=\tabl_ntb_get_ht\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three
+ \dimen0=\gettblht\xrowTBL\xcolTBL
% find nearest height in row
\dimen2=\zeropoint
- \dorecurse\c_tabl_ntb_maximum_col
- {\ifnum\recurselevel=\c_tabl_ntb_current_col_three\else
- \ifcsname\tabl_ntb_row_pattern\c_tabl_ntb_current_row_three\recurselevel\endcsname
- \!!countc=\tabl_ntb_get_row\c_tabl_ntb_current_row_three\recurselevel\relax
- \ifnum\!!countc=\plusone
- \dimen4=\tabl_ntb_get_ht\c_tabl_ntb_current_row_three\recurselevel\relax
- \ifdim\dimen2<\dimen4
- \dimen2=\dimen4
- \fi
- \fi
- \fi
+ \dorecurse\maximumcol
+ {\ifnum\recurselevel=\xcolTBL\else
+ \doiftblrow\xrowTBL\recurselevel
+ {\!!countc=\gettblrow\xrowTBL\recurselevel\relax
+ \ifnum\!!countc=\plusone
+ \dimen4=\gettblht\xrowTBL\recurselevel\relax
+ \ifdim\dimen2<\dimen4
+ \dimen2=\dimen4
+ \fi
+ \fi}%
\fi}%
- \c_tabl_ntb_current_row_four\c_tabl_ntb_current_row_three
+ \xxrowTBL\xrowTBL
% calculate cummulative height
\dimen4=\dimen2
- \!!countc\c_tabl_ntb_current_row_three
+ \!!countc\xrowTBL
\advance\!!countc\minusone
\dorecurse\!!countb
- {\ifnum\c_tabl_ntb_current_row_four=\c_tabl_ntb_current_row_three\else
- \advance\dimen4 \tabl_ntb_get_hei\c_tabl_ntb_current_row_four
+ {\ifnum\xxrowTBL=\xrowTBL\else
+ \advance\dimen4 \gettblhei\xxrowTBL
\fi
\ifnum\recurselevel=\!!countb\else
- \tabl_ntb_set_nob\!!countc
+ \settblnob\!!countc
\advance\!!countc\plusone
\fi
- \advance\c_tabl_ntb_current_row_four\plusone}%
+ \advance\xxrowTBL\plusone}%
% distribute overshoot equally
\ifdim\dimen2>\zeropoint % new: test on natural-003
\ifdim\dimen4<\dimen0
\advance\dimen0 -\dimen4
\divide\dimen0 \!!countb
- \c_tabl_ntb_current_row_four\c_tabl_ntb_current_row_three
- \tabl_ntb_set_hei\c_tabl_ntb_current_row_three{\the\dimen2}%
+ \xxrowTBL\xrowTBL
+ \settblhei\xrowTBL{\the\dimen2}%
\dorecurse\!!countb
- {\dorecurse\c_tabl_ntb_maximum_col
- {\ifnum\recurselevel=\c_tabl_ntb_current_col_three\else
- \scratchdimen\dimexpr\tabl_ntb_get_ht\c_tabl_ntb_current_row_four\recurselevel+\dimen0\relax
- \tabl_ntb_set_ht\c_tabl_ntb_current_row_four\recurselevel{\the\scratchdimen}%
- \ifdim\tabl_ntb_get_hei\c_tabl_ntb_current_row_four<\scratchdimen
- \tabl_ntb_set_hei\c_tabl_ntb_current_row_four{\the\scratchdimen}%
+ {\dorecurse\maximumcol
+ {\ifnum\recurselevel=\xcolTBL\else
+ \scratchdimen\dimexpr\gettblht\xxrowTBL\recurselevel+\dimen0\relax
+ \settblht\xxrowTBL\recurselevel{\the\scratchdimen}%
+ \ifdim\gettblhei\xxrowTBL<\scratchdimen
+ \settblhei\xxrowTBL{\the\scratchdimen}%
\fi
\fi}%
- \advance\c_tabl_ntb_current_row_four\plusone}%
+ \advance\xxrowTBL\plusone}%
\else\ifdim\dimen4>\dimen0
\iftightTBLrowspan
- \tabl_ntb_set_hei\c_tabl_ntb_current_row_three{\the\dimen2}%
+ \settblhei\xrowTBL{\the\dimen2}%
\fi
\fi\fi
\fi
\fi}
+\def\checktblheightsone
+ {\dorecurse\maximumrow
+ {\xrowTBL\recurselevel\relax
+ \dorecurse\maximumcol
+ {\xcolTBL\recurselevel\relax
+ \doiftblrow\xrowTBL\xcolTBL\dochecktblheightsone}}}
-\def\tabl_ntb_check_heights_one
- {\dorecurse\c_tabl_ntb_maximum_row
- {\c_tabl_ntb_current_row_three\recurselevel\relax
- \dorecurse\c_tabl_ntb_maximum_col
- {\c_tabl_ntb_current_col_three\recurselevel\relax
- \ifcsname\tabl_ntb_row_pattern\c_tabl_ntb_current_row_three\c_tabl_ntb_current_col_three\endcsname
- \tabl_ntb_check_heights_one_indeed
- \fi}}}
-
-\def\tabl_ntb_check_heights_two
+\def\checktblheightstwo
{}
-\def\tabl_ntb_show_widths#1%
+\def\showtblwids#1%
{\vbox
- {\forgetall\tttf[#1]\dorecurse\c_tabl_ntb_maximum_col
- {\scratchdimen\tabl_ntb_get_wid\recurselevel\relax
+ {\forgetall\tttf[#1]\dorecurse\maximumcol
+ {\scratchdimen\gettblwid\recurselevel\relax
[\recurselevel:\the\scratchdimen]}}}
-\def\tabl_ntb_char_align
- {\doifelse{\naturaltablelocalparameter\c!aligncharacter}\v!yes
- \tabl_ntb_char_align_indeed\gobbleoneargument}
+\def\TBLcharalign
+ {\doifelse\tbltblaligncharacter\v!yes
+ \doTBLcharalign\gobbleoneargument}
-\def\tabl_ntb_char_align_indeed#1#2% column data
+\long\def\doTBLcharalign#1#2% column data
{\edef\alignmentclass{#1}%
- \edef\alignmentcharacter{\naturaltablelocalparameter\c!alignmentcharacter}%
- \ifcase\c_tabl_tbl_pass\or
+ \edef\alignmentcharacter{\tbltblalignmentcharacter}%
+ \ifcase\tblpass\or
\setfirstpasscharacteralign\checkalignment{#2}% {\strut#2\unskip}%
\fi % force hsize, so always a second
\setsecondpasscharacteralign \checkalignment{#2}% {\strut#2\unskip}%
\ignorespaces}
-\unexpanded\def\tabl_ntb_cell_process_a#1#2[#3]#4% grouping added ! ! !
+% new, needed for icare first col of 'doeltabel', experimental
+
+\long\def\dohandleTBLcellA#1#2[#3]#4% grouping added ! ! !
{\bgroup
- \tabl_ntb_setup_cell{#1}{#2}%
+ \setupTBLcell{#1}{#2}%
\setbox\scratchbox\hbox
- {\scratchdimen\naturaltablelocalparameter\c!distance\relax
- \ifdim\scratchdimen>\tabl_ntb_get_dis{#2}\relax
- \tabl_ntb_set_dis{#2}{\the\scratchdimen}%
+ {\scratchdimen\tbltbldistance\relax
+ \ifdim\scratchdimen>\gettbldis{#2}\relax
+ \settbldis{#2}{\the\scratchdimen}%
\fi
- \setupcurrentnaturaltablelocal[#3,\c!background=,\c!frame=\v!off]% 25% faster
- \inheritednaturaltablelocalframed{\tabl_tnb_cell_start\tabl_ntb_char_align{#2}{#4}\tabl_tnb_cell_stop\tabl_tnb_cell_finalize}}%
- \scratchdimen\tabl_ntb_get_wid\c_tabl_ntb_col\relax
+ \localframed
+ [\@@tbl\@@tbl]
+ [#3,\c!background=,\c!frame=\v!off]% 25% faster
+ {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL\inTBLcell{#1}{#2}}}%
+ \scratchdimen\gettblwid\tblcol\relax
\ifdim\wd\scratchbox>\scratchdimen
\ifsqueezeTBLspan
\ifautosqueezeTBLspan
- \doifinsetelse{\naturaltablelocalparameter\c!width}{\v!fit,\v!fixed,\v!broad,\v!local}
+ \doifinsetelse\tbltblwidth{\v!fit,\v!fixed,\v!broad,\v!local}
\donetrue \donefalse
\else
\donetrue
\fi
\ifdone % brr, 0
- \ifnum\tabl_ntb_get_col{#1}{#2}>\plusone \tabl_ntb_set_spn\c_tabl_ntb_col\fi
+ \ifnum\number\gettblcol{#1}{#2}>\plusone \settblspn\tblcol\fi
\fi
\fi
- \tabl_ntb_spn_doifelse\c_tabl_ntb_col
+ \doifelsetblspn\tblcol
\donothing
- {\ifdim\tabl_ntb_get_wid\c_tabl_ntb_col<\wd\scratchbox
- \tabl_ntb_set_wid\c_tabl_ntb_col{\the\wd\scratchbox}%
+ {\ifdim\gettblwid\tblcol<\wd\scratchbox
+ \settblwid\tblcol{\the\wd\scratchbox}%
\fi}% auto set
\fi
- \scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax
- \scratchdimen\tabl_ntb_get_hei\scratchcounter\relax
+ \scratchcounter\numexpr\tblrow+\plusone\relax
+ \scratchdimen\gettblhei\scratchcounter\relax
\ifdim\ht\scratchbox<\scratchdimen
- \tabl_ntb_set_hei\scratchcounter{\the\ht\scratchbox}% auto set
+ \settblhei\scratchcounter{\the\ht\scratchbox}% auto set
\fi
- \tabl_ntb_set_ht{#1}{#2}{\the\ht\scratchbox}%
- \tabl_ntb_set_wd{#1}{#2}{\the\wd\scratchbox}%
+ \settblht{#1}{#2}{\the\ht\scratchbox}%
+ \settblwd{#1}{#2}{\the\wd\scratchbox}%
\ifautoTBLcheckwidth
\ifdim\wd\scratchbox<.75\hsize % fuzzy guess
\ifdim\ht\scratchbox>2\openlineheight % honor width since this
- \scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax % can be a figure or so
+ \scratchdimen\gettblaut\tblcol\relax % can be a figure or so
\ifdim\scratchdimen=\zeropoint
% side effect: when width is set to 0pt,
% we can force a span that fits the sum of spans widths
- \tabl_ntb_set_aut\c_tabl_ntb_col{\the\scratchdimen}%
+ \settblaut\tblcol{\the\scratchdimen}%
\else\ifdim\wd\scratchbox>\scratchdimen
% unless span
- \tabl_ntb_set_aut\c_tabl_ntb_col{\the\wd\scratchbox}%
+ \settblaut\tblcol{\the\wd\scratchbox}%
% to be translated
\writestatus\m!TABLE
{no auto width in (\number#1,\number#2)\space\the\wd\scratchbox/\the\hsize}%
@@ -1568,102 +1404,155 @@
\fi
\fi
\setbox2\emptyhbox
- \wd2\wd\scratchbox
- \ht2\ht\scratchbox
- \dp2\dp\scratchbox
+ \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox
\box2
\egroup}
-\unexpanded\def\tabl_ntb_cell_process_b_c#1#2#3[#4]#5%
+\long\def\dohandleTBLcellBC#1#2#3[#4]#5%
{\setbox\scratchbox\hbox
- {\tabl_ntb_setup_cell{#2}{#3}%
- \setupcurrentnaturaltablelocal[#4,#1,\c!frame=\v!off,\c!background=]%
- \inheritednaturaltablelocalframed{\tabl_tnb_cell_start#5\tabl_tnb_cell_stop}}%
+ {\setupTBLcell{#2}{#3}%
+ \localframed
+ [\@@tbl\@@tbl]
+ [#4,#1,\c!frame=\v!off,\c!background=]
+ {\bTBLCELL#5\eTBLCELL}}%
\setbox2\emptyhbox
- \wd2\wd\scratchbox
- \ht2\ht\scratchbox
- \dp2\dp\scratchbox
+ \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox
\ifautoTBLrowspan
- \scratchcounter\numexpr\c_tabl_ntb_row+\plusone\relax
- \ifcsname\tabl_ntb_row_pattern\scratchcounter\c_tabl_ntb_col\endcsname
- \scratchdimen\tabl_ntb_get_hei\scratchcounter\relax
- \ifnum\tabl_ntb_get_row\scratchcounter\c_tabl_ntb_col>\plusone
- \ifdim\ht\scratchbox>\scratchdimen
- \ht2\dimexpr-\scratchdimen-\ht\scratchbox\relax
- \fi
- \fi
- \fi
+ \scratchcounter\numexpr\tblrow+\plusone\relax
+ \doiftblrow\scratchcounter\tblcol
+ {\scratchdimen\gettblhei\scratchcounter\relax % moved inside test
+ \ifnum\gettblrow\scratchcounter\tblcol>\plusone \ifdim\ht\scratchbox>\scratchdimen
+ \scratchdimen-\scratchdimen \advance\scratchdimen -\ht\scratchbox
+ \ht2\scratchdimen
+ \fi \fi}%
\fi
\box2 }
-\unexpanded\def\tabl_ntb_cell_process_b#1#2[#3]#4%
- {\scratchdimen\tabl_ntb_get_aut\c_tabl_ntb_col\relax
+\long\def\dohandleTBLcellB#1#2[#3]#4%
+ {\scratchdimen\gettblaut\tblcol\relax
\ifdim\scratchdimen>\zeropoint\relax
+ \let\tblwidthkey\c!width
+ \edef\tblwidth{\the\scratchdimen}%
\else
- \scratchdimen\tabl_ntb_get_wid\c_tabl_ntb_col\relax
+ \scratchdimen\gettblwid\tblcol\relax
\ifdim\scratchdimen>\zeropoint\relax
- \ifnum\tabl_ntb_get_col{#1}{#2}=\c_tabl_ntb_maximum_col\relax
+ \ifnum\gettblcol{#1}{#2}=\maximumcol\relax
\scratchdimen\hsize
\fi
+ \let\tblwidthkey\c!width
+ \edef\tblwidth{\the\scratchdimen}%
+ \else
+ \let\tblwidthkey\s!unknown
+ \let\tblwidth\zeropoint
\fi
\fi
- \normalexpanded{\tabl_ntb_cell_process_b_c{\ifdim\scratchdimen>\zeropoint \c!width=\the\scratchdimen\fi}}%
- {#1}{#2}[#3]{\tabl_ntb_char_align{#2}{#4}}}
+ \dohandleTBLcellBC{\tblwidthkey=\tblwidth}{#1}{#2}[#3]{\TBLcharalign{#2}{#4}}}
-\unexpanded\def\tabl_ntb_cell_process_c
- {\tabl_ntb_cell_process_b_c{}}
+\long\def\dohandleTBLcellC
+ {\dohandleTBLcellBC{}}
-\unexpanded\def\tabl_ntb_cell_process_d#1#2[#3]#4%
- {\tabl_ntb_setup_cell{#1}{#2}%
+\long\def\dohandleTBLcellD#1#2[#3]#4%
+ {\setupTBLcell{#1}{#2}%
\bgroup
- \setupcurrentnaturaltablelocal[#3,\c!width=\d_tabl_ntb_width,\c!background=,\c!frame=\v!off]% 25% faster
- \inheritednaturaltablelocalframed{\tabl_tnb_cell_start\tabl_ntb_char_align{#2}{#4}\tabl_tnb_cell_stop}%
+ \localframed
+ [\@@tbl\@@tbl]
+ [#3,\c!width=\widthTBL,\c!background=,\c!frame=\v!off]% 25% faster
+ {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}%
\egroup}
-\unexpanded\def\tabl_ntb_cell_process_e#1#2[#3]#4%
- {\tabl_ntb_setup_cell{#1}{#2}%
- \setupcurrentnaturaltablelocal[#3]% to get the color right, the way we
+\long\def\dohandleTBLcellE#1#2[#3]#4%
+ {\setupTBLcell{#1}{#2}%
+ \getparameters[\@@tbl\@@tbl][#3]% to get the color right, the way we
\color % handle color here prevents interference due to whatsit nodes
- [\naturaltablelocalparameter\c!color] % as well as permits local colors to take precedence
- {\ifdim\d_tabl_ntb_height=\zeropoint\relax % case: nc=maxcolumns
- \setupcurrentnaturaltablelocal[\c!color=,\c!width=\d_tabl_ntb_width]%
+ [\tbltblcolor] % as well as permits local colors to take precedence
+ {\ifdim\heightTBL=\zeropoint\relax % case: nc=maxcolumns
+ \localframed
+ [\@@tbl\@@tbl]
+ [\c!color=,\c!width=\widthTBL]
+ {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}%
\else
- \setupcurrentnaturaltablelocal[\c!color=,\c!width=\d_tabl_ntb_width,\c!height=\d_tabl_ntb_height]%
- \fi
- \inheritednaturaltablelocalframed{\tabl_tnb_cell_start\tabl_ntb_char_align{#2}{#4}\tabl_tnb_cell_stop}}%
- \hskip\tabl_ntb_get_dis{#2}}
-
-\setupTABLE
- [\c!frameoffset=.5\linewidth,
- \c!backgroundoffset=\v!frame,
- \c!framecolor=\s!black,
- \c!width=\v!fit,
- \c!height=\v!fit,
- \c!autowidth=\v!yes,
- \c!rulethickness=\linewidth,
- \c!strut=\v!yes,
- \c!autostrut=\v!no,
- %
- \c!color=,
- \c!style=,
- \c!headstyle=\v!bold,
- \c!headcolor=,
- \c!aligncharacter=\v!no,
- \c!alignmentcharacter={,},
- \c!option=, % \v!stretch
- \c!header=,
- \c!spaceinbetween=,
- \c!maxwidth=8\emwidth,
- \c!textwidth=\v!local, % was \hsize
- \c!split=\v!auto,
- \c!splitoffset=\zeropoint,
- \c!distance=\zeropoint, % individual column
- \c!columndistance=\zeropoint, % each column (whole table)
- \c!leftmargindistance=\zeropoint, % whole table
- \c!rightmargindistance=\zeropoint,% whole table
- \c!left=,
- \c!right=,
- \c!setups=]
+ \localframed
+ [\@@tbl\@@tbl]
+ [\c!color=,\c!width=\widthTBL,\c!height=\heightTBL]
+ {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}%
+ \fi}%
+ \hskip\gettbldis{#2}}
+
+\presetlocalframed % todo: tableparameter etc
+ [\@@tbl\@@tbl]
+
+\setupTABLE [%
+ \c!frameoffset=.5\linewidth,
+ \c!backgroundoffset=\v!frame,
+ \c!framecolor=\s!black,
+ \c!width=\v!fit,
+ \c!height=\v!fit,
+ \c!autowidth=\v!yes,
+ \c!rulethickness=\linewidth,
+ \c!strut=\v!yes,
+ \c!autostrut=\v!no,
+ %
+ \c!color=,
+ \c!style=,
+ \c!headstyle=\v!bold,
+ \c!headcolor=,
+ \c!aligncharacter=\v!no,
+ \c!alignmentcharacter={,},
+ \c!option=, % \v!stretch
+ \c!header=,
+ \c!spaceinbetween=,
+ \c!maxwidth=8em,
+ \c!textwidth=\hsize,
+ \c!split=\v!auto,
+ \c!splitoffset=0pt,
+ \c!distance=\zeropoint, % individual column
+ \c!columndistance=\zeropoint, % each column (whole table)
+ \c!leftmargindistance=\zeropoint, % whole table
+ \c!rightmargindistance=\zeropoint,% whole table
+ \c!left=,
+ \c!right=,
+ \c!setups=,
+ \c!splitmethod=a%
+]
+
+%D We have already prepared the previous macros for nesting,
+%D so we only have to pop in the right ones:
+
+%D New:
+
+\def\pushTBLparameters
+ {\globalpushmacro\TBLlevel
+ \ifcase\tblpass
+ % we're just after \bTABLE
+ \else\ifnum\TBLlevel>\zerocount
+ \doglobal\increment\TBLlevel\relax
+ \fi\fi}
+
+\def\popTBLparameters
+ {\globalpopmacro\TBLlevel}
+
+\def\pushTBL
+ {\ifnum\TBLlevel=\zerocount
+ \global\advance\currenttbl\plusone
+ \fi
+ \doglobal\increment\TBLlevel\relax
+ \ifnum\TBLlevel>\plusone
+ \resetallTABLEparameters
+ % we need a proper count push/pop
+ \xdef\savedtblrow{\the\tblrow}\globalpushmacro\savedtblrow
+ \xdef\savedtblcol{\the\tblcol}\globalpushmacro\savedtblcol
+ \else
+ \global\intabletrue
+ \fi}
+
+\def\popTBL
+ {\ifnum\TBLlevel>\plusone
+ \globalpopmacro\savedtblrow\global\tblrow\savedtblrow
+ \globalpopmacro\savedtblcol\global\tblcol\savedtblcol
+ \else
+ \global\intablefalse
+ \fi
+ \doglobal\decrement\TBLlevel\relax}
% \bgroup
% \setupTABLE[column][1][aligncharacter=yes, alignmentcharacter={,}]
@@ -1681,21 +1570,23 @@
\newconditional\resetTABLEmode \settrue\resetTABLEmode
-\def\tabl_ntb_parameters_reset
- {\ifnum\m_tabl_tbl_level>\plusone % in ieder geval
+\def\resetallTABLEparameters% moet genest wel werken
+ {\ifnum\TBLlevel>\plusone % in ieder geval
\ifconditional\resetTABLEmode
+% \presetlocalframed % breedte hoogte diepte offset
+% [\@@tbl\@@tbl]% % achtergrond, achtergrondraster, achtergrondkleur
% not ok yet
- \setupTABLE
- [\c!frameoffset=.5\linewidth,
+ \setupTABLE [%
+ \c!frameoffset=.5\linewidth,
\c!backgroundoffset=\v!frame,
\c!framecolor=\s!black,
\c!width=fit,
\c!height=fit,
- \c!autowidth=\v!yes,
- % \c!rulethickness=\linewidth,
+\c!autowidth=\v!yes,
+% \c!rulethickness=\linewidth,
\c!strut=\v!no,
- \c!strut=\v!yes, % needed for mathml, but ... maybe we need another resetTABLEmode
- \c!autostrut=\v!no,
+\c!strut=\v!yes, % needed for mathml, but ... maybe we need another resetTABLEmode
+\c!autostrut=\v!no,
\c!color=,
\c!style=,
\c!headstyle=,
@@ -1720,22 +1611,21 @@
% \bTRs[xx] \bTD oeps \eTD \bTD oeps \eTD \eTRs
% \eTABLE
-\installcorenamespace{naturaltablesetup}
-
\unexpanded\def\defineTABLEsetup
- {\dodoubleargument\tabl_ntb_define_setup}
-
-\def\tabl_ntb_define_setup[#1][#2]%
- {\setvalue{\??naturaltablesetup#1}{#2}}
+ {\dodoubleargument\dodefineTABLEsetup}
-\let\eTDs\relax
-\let\eTRs\relax
+\def\dodefineTABLEsetup[#1][#2]%
+ {\setvalue{\@@tbl:set:#1}{#2}}
-\unexpanded\def\bTDs[#1]#2\eTDs
- {\normalexpanded{\bTD[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTD}
+\long\def\bTDs[#1]#2\eTDs
+ {\doifdefinedelse{\@@tbl:set:#1}
+ {\@EA\@EA\@EA\bTD\@EA\@EA\@EA[\csname\@@tbl:set:#1\endcsname]#2\eTD}
+ {\bTD[]#2\eTD}}
-\unexpanded\def\bTRs[#1]#2\eTRs
- {\normalexpanded{\bTR[\ifcsname\??naturaltablesetup#1\endcsname\csname\??naturaltablesetup#1\endcsname\fi]}#2\eTR}
+\long\def\bTRs[#1]#2\eTRs
+ {\doifdefinedelse{\@@tbl:set:#1}
+ {\@EA\@EA\@EA\bTR\@EA\@EA\@EA[\csname\@@tbl:set:#1\endcsname]#2\eTR}
+ {\bTR[]#2\eTR}}
\protect \endinput