summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/tabl-xtb.mklx
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/tabl-xtb.mklx')
-rw-r--r--tex/context/base/mkiv/tabl-xtb.mklx976
1 files changed, 0 insertions, 976 deletions
diff --git a/tex/context/base/mkiv/tabl-xtb.mklx b/tex/context/base/mkiv/tabl-xtb.mklx
deleted file mode 100644
index 906355d42..000000000
--- a/tex/context/base/mkiv/tabl-xtb.mklx
+++ /dev/null
@@ -1,976 +0,0 @@
-% macros=mkvi
-
-%D \module
-%D [ file=tabl-xtb,
-%D version=2011.10.26,
-%D title=\CONTEXT\ Table Macros,
-%D subtitle=Xtreme,
-%D author=Hans Hagen,
-%D date=\currentdate,
-%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
-%C
-%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
-
-\writestatus{loading}{ConTeXt Table Macros / Xtreme}
-
-\registerctxluafile{tabl-xtb}{}
-
-% todo:
-%
-% - yes or no: foregroundstyle/color <- style/color
-% - template alignment
-% - maybe split horizontal (a la linetables)
-% - before/after and wrapping (linecorrection)
-% - maybe also some before/after commands
-% - maybe correction when non float usage
-% - tagging needs to be checked
-% - maybe only tag the box
-% - scale to fit
-%
-% - buffers permit verbatim but are not always handy
-
-%D This module started as an afternoon experiment and surprisingly could be
-%D mostly finished the same evening. Of course it builds upon existing
-%D functionality. The main reason for writing it is that we occasionally
-%D run into pretty large tables that take tens of pages and need to be split
-%D into floats. Speed is one issue there, avoiding to use vsplit is another.
-%D
-%D \starttyping
-%D \definextable [tag] | [tag][parent]
-%D \setupxtable [settings] | [tag][settings]
-%D
-%D \startxtable[tag|settings]
-%D \startxtablehead|\startxtablenext|\startxtablebody|\startxtablefoot
-%D \startxrowgroup[tag|settings]
-%D \startxrow[settings]
-%D \startxcellgroup[tag|settings]
-%D \startxcell[settings] ... \stopxcell
-%D \stopxcellgroup
-%D \stopxrow
-%D \startxrowgroup
-%D \stopxtablehead|\stopxtablenext|\stopxtablebody|\stopxtablefoot
-%D \stopxtable
-%D \stoptyping
-%D
-%D See xtables-001.tex etc for some examples.
-
-% We can avoid some checking by using the fastoptionalcheckcs helpers
-% instead of dosingleempty but the speed gain is neglectable.
-
-\unprotect
-
-% option=stretch : equal distribution
-% option={stretch,width} : proportional distribution
-% option={max} : prefer max over forced width/height
-%
-% cells: option=fixed : nils autostretch (not yet complete)
-
-% \setbox\scratchbox\hbox attr \taggedattribute \c_attr_tagged {...}
-
-\aliased\let\dotagxtablecell \relax % names will change
-\aliased\let\dotagxtablesignal\relax % names will change
-
-\appendtoks
- \enforced\permanent\protected\def\dotagxtablecell
- {\clf_settagtablecell
- \numexpr\tablecellrows\relax
- \numexpr\tablecellcolumns\relax
- \numexpr\raggedstatus\relax}%
- \enforced\permanent\protected\def\dotagxtablesignal
- {\signalcharacter}% not used
-\to \everyenableelements
-
-\newdimen\d_tabl_x_width
-\newdimen\d_tabl_x_height
-\newdimen\d_tabl_x_depth % not used
-\newdimen\d_tabl_x_distance
-\newcount\c_tabl_x_nx
-\newcount\c_tabl_x_ny
-\newcount\c_tabl_x_mode
-\newbox \b_tabl_x
-\newcount\c_tabl_x_state % 0=empty 1=content 3=splitleft
-\newdimen\d_tabl_x_final_width
-\newcount\c_tabl_x_nesting
-\newcount\c_tabl_x_skip_mode % 1 = skip
-\newdimen\d_tabl_x_textwidth
-\newcount\c_tabl_x_swapped
-\newcount\c_tabl_x_swapped_max
-
-\let\m_tabl_x_swapped_settings\empty
-
-\aliased\let\currentxtablerow \clf_x_table_r
-\aliased\let\currentxtablecolumn\clf_x_table_c
-
-% \setupxtable[one][parent][a=b,c=d]
-% \setupxtable[one] [a=b,c=d]
-% \setupxtable [a=b,c=d]
-
-\installcorenamespace{xtable}
-\installcorenamespace{xtablecheck}
-\installcorenamespace{xtableswap}
-
-\installframedautocommandhandler \??xtable {xtable} \??xtable
-
-\appendtoks
- \checkxtableparent % so we can deal with undefined settings, not that it's efficient
-\to \everysetupxtable
-
-\setupxtable[%
- \c!nr=\plusone,
- \c!nc=\plusone,
- \c!nx=\plusone, % slow
- \c!ny=\plusone, % slow
- \c!align=\v!table, % {\v!flushleft,\v!broad,\v!high}, % just as \bTABLE .. \eTABLE
- \c!frameoffset=.5\linewidth,
- \c!backgroundoffset=\v!frame,
- % \c!framecolor=\s!black,
- % \c!foregroundstyle=\xtableparameter\c!style, % not clean, better capture elsewhere
- % \c!foregroundcolor=\xtableparameter\c!color, % not clean, better capture elsewhere
- % \c!bodyfont=,
- \c!width=\v!fit,
- \c!height=\v!fit,
- \c!maxwidth=8\emwidth,
- \c!autowidth=\v!yes, % controls framed
- \c!rulethickness=\linewidth,
- \c!strut=\v!yes,
- \c!autostrut=\v!no,
- \c!split=\v!auto, % a number will take that many lines
- \c!splitoffset=\zeropoint, % extra space taken
- \c!aligncharacter=\v!no,
- \c!alignmentcharacter={,},
- \c!alignmentleftsample=,
- \c!alignmentrightsample=,
- \c!alignmentleftwidth=\zeropoint,
- \c!alignmentrightwidth=\zeropoint,
- % \c!option=, % \v!stretch {\v!stretch,\v!width}
- % \c!footer=,
- % \c!header=,
- \c!spaceinbetween=,
- \c!textwidth=\v!local, % was \hsize,
- \c!textheight=\vsize, % used for vertical spread
- \c!distance=\zeropoint, % individual column
- \c!columndistance=\zeropoint, % each column (whole table)
- \c!leftmargindistance=\zeropoint, % whole table
- \c!rightmargindistance=\zeropoint,% whole table
-]
-
-\def\tabl_x_default_buffer{x_table_\number\c_tabl_x_nesting}
-\let\tabl_x_current_buffer\empty
-
-\permanent\protected\def\startxtable{\tabl_x_start_table}
-
-\protected\tolerant\def\tabl_x_start_table[#settings]% maybe two arguments: [tag][settings] | [tag] | [settings]
- {\bgroup
- \tabl_x_prepare{#settings}%
- \edef\tabl_x_current_buffer{\tabl_x_default_buffer}%
- \buff_pickup{\tabl_x_current_buffer}{startxtable}{stopxtable}\relax\tabl_x_process\zerocount}
-
-% \permanent\protected\aliased\startxtable\tabl_x_start_table
-
-\aliased\permanent\let\stopxtable\relax
-
-% These direct buffers can be somewhat faster but it's probably neglectable.
-% Anyway, no nesting is supported as we then need to catch (e.g.) rows and keep
-% track of nesting and have a more complex redefinition of nested instanced
-% \unknown\ it's not worth the trouble. Only use them when you really need them and
-% use the embeddedxtable command when nesting them. Implementing nesting would be
-% slower than not using direct buffers.
-
-\permanent\tolerant\protected\def\processxtablebuffer[#name]%
- {\bgroup
- \let\tabl_x_start_table\tabl_x_process_buffer
- \edef\tabl_x_current_buffer{#name}%
- \tabl_x_get_buffer % settings
- \tabl_x_process}
-
-\protected\tolerant\def\tabl_x_start_ignore[#settings]%
- {}
-
-\protected\tolerant\def\tabl_x_process_buffer[#settings]%
- {\tabl_x_prepare{#settings}%
- \let\tabl_x_start_table\tabl_x_start_ignore
- \gobbleuntil\stopxtable} % nested xtables are not supported,
-
-%D A bonus: you have to use the following construct inside a macro or
-%D direct buffer.
-
-\permanent\tolerant\protected\def\startembeddedxtable[#settings]#:#content\stopembeddedxtable
- {\tabl_x_prepare{#settings}%
- \clf_assignbuffer{embedded_x_table}{\detokenize{#content}}\catcodetable\relax
- \bgroup
- \let\tabl_x_start_table\tabl_x_process_buffer
- \edef\tabl_x_current_buffer{embedded_x_table}%
- \tabl_x_process}
-
-\aliased\permanent\let\stopembeddedxtable\relax
-
-%D We can also define xtables.
-
-\appendtoks
- \permanent\setuevalue{\e!start\currentxtable}{\tabl_x_start_named[\currentxtable]}%
- \permanent\setuevalue{\e!stop \currentxtable}{\tabl_x_stop_named}%
-\to \everydefinextable
-
-\protected\def\tabl_x_start_named[#tag]#spacer[#settings]%
- {\bgroup
- \edef\currentxtable{#tag}%
- \advance\c_tabl_x_nesting\plusone
- \dostarttaggedchained\t!table\empty\??xtable
- \setupcurrentxtable[#settings]%
- \tabl_x_check_textwidth
- %\forgetall % else whitespace mess
- \edef\tabl_x_current_buffer{\tabl_x_default_buffer}%
- \normalexpanded{\buff_pickup{\tabl_x_current_buffer}{\e!start\currentxtable}{\e!stop\currentxtable}\relax\tabl_x_process\zerocount}}
-
-\protected\def\tabl_x_stop_named
- {}
-
-%D Now we come to processing:
-
-\protected\def\tabl_x_check_textwidth
- {\edef\p_textwidth{\xtableparameter\c!textwidth}%
- \ifx\p_textwidth\v!local
- \d_tabl_x_textwidth\availablehsize
- \else
- \d_tabl_x_textwidth\p_textwidth
- \fi}
-
-\newtoks\everypreparextable
-
-\protected\def\tabl_x_prepare#settings%
- {\advance\c_tabl_x_nesting\plusone
- \dostarttaggedchained\t!table\empty\??xtable
- \tabl_x_set_checked{#settings}%
- \tabl_x_check_textwidth
- \the\everypreparextable
- }% else whitespace mess
-
-\def\tabl_x_get_buffer
- {\clf_gettexbuffer{\tabl_x_current_buffer}}
-
-\let\tabl_x_start_row_yes \relax
-\let\tabl_x_start_row_nop \relax
-\let\tabl_x_stop_row \relax
-\let\tabl_x_start_cell_yes\relax
-\let\tabl_x_start_cell_nop\relax
-\let\tabl_x_stop_cell \relax
-
-\newtoks\t_table_x_cleanup
-
-\protected\def\tabl_x_process
- {\begingroup % *
- \forgetall % moved here
- \dontcomplain % for the moment here till we figure out where we get the overflow
- \usebodyfontparameter\xtableparameter
- \setbox\scratchbox\vbox
- {\doifsomething{\xtableparameter\c!spaceinbetween}{\blank[\xtableparameter\c!spaceinbetween]}}%
- \clf_x_table_create
- option {\xtableparameter\c!option}%
- textwidth \d_tabl_x_textwidth
- textheight \dimexpr\xtableparameter\c!textheight\relax
- maxwidth \dimexpr\xtableparameter\c!maxwidth\relax
- lineheight \openlineheight
- columndistance \dimexpr\xtableparameter\c!columndistance\relax
- leftmargindistance \dimexpr\xtableparameter\c!leftmargindistance\relax
- rightmargindistance \dimexpr\xtableparameter\c!rightmargindistance\relax
- rowdistance \ht\scratchbox
- header {\xtableparameter\c!header}%
- footer {\xtableparameter\c!footer}%
- \relax
- %
- \letxtableparameter\c!option\empty
- % not so nice but needed as we use this in the setup
- \linewidth\xtableparameter\c!rulethickness\relax
- % so we freeze it
- \c_tabl_x_swapped_max\zerocount
- \begingroup
- \let\tabl_x_start_row_yes \tabl_x_start_row_reflow_width_yes
- \let\tabl_x_start_row_nop \tabl_x_start_row_reflow_width_nop
- \let\tabl_x_stop_row \tabl_x_stop_row_reflow_width
- \let\tabl_x_start_cell_yes\tabl_x_start_cell_reflow_width_yes
- \let\tabl_x_start_cell_nop\tabl_x_start_cell_reflow_width_nop
- \let\tabl_x_stop_cell \tabl_x_stop_cell_reflow_width
- \settrialtypesetting
- \tabl_x_get_buffer
- \ifcase\c_tabl_x_swapped_max
- \else
- \tabl_x_flush_swapped
- \fi
- \clf_x_table_reflow_width
- \endgroup
- \begingroup
- \let\tabl_x_start_row_yes \tabl_x_start_row_reflow_height_yes
- \let\tabl_x_start_row_nop \tabl_x_start_row_reflow_height_nop
- \let\tabl_x_stop_row \tabl_x_stop_row_reflow_height
- \let\tabl_x_start_cell_yes\tabl_x_start_cell_reflow_height_yes
- \let\tabl_x_start_cell_nop\tabl_x_start_cell_reflow_height_nop
- \let\tabl_x_stop_cell \tabl_x_stop_cell_reflow_height
- \settrialtypesetting
- \ifcase\c_tabl_x_swapped_max
- \tabl_x_get_buffer
- \else
- \tabl_x_flush_swapped
- \fi
- \clf_x_table_reflow_height
- \endgroup
- \begingroup
- \let\tabl_x_start_row_yes \tabl_x_start_row_construct_yes
- \let\tabl_x_start_row_nop \tabl_x_start_row_construct_nop
- \let\tabl_x_stop_row \tabl_x_stop_row_construct
- \let\tabl_x_start_cell_yes\tabl_x_start_cell_construct_yes
- \let\tabl_x_start_cell_nop\tabl_x_start_cell_construct_nop
- \let\tabl_x_stop_cell \tabl_x_stop_cell_construct
- \ifcase\c_tabl_x_swapped_max
- \tabl_x_get_buffer
- \else
- \tabl_x_flush_swapped
- \fi
- \clf_x_table_construct
- \endgroup
- \endgroup % *
- \ifinsidesplitfloat
- \tabl_x_flush_float_split
- \orelse\ifinsidefloat
- \tabl_x_flush_float_normal
- \else
- \tabl_x_flush_text_checked
- \fi
- \clf_x_table_cleanup
- \dostoptagged
- \resetbuffer[\tabl_x_current_buffer]%
- \resetcharacteralign
- \the\t_table_x_cleanup
- \egroup}
-
-% text flow split modes
-
-\installcorenamespace{xtableflushsplit}
-
-\protected\def\tabl_x_flush_text_checked
- {\expandnamespaceparameter\??xtableflushsplit\xtableparameter\c!split\v!no}
-
-% in text flow: headers and footers only once
-
-\setvalue{\??xtableflushsplit\v!yes}%
- {\clf_x_table_flush
- method {\v!split}%
- \relax}
-
-% in text flow: headers and footers only once
-
-\setvalue{\??xtableflushsplit\v!no}%
- {% \noindent % gives extra line after table
- % \noindentation % messes up the next indentation
- % \dontleavehmode % no leftskip
- \kern\zeropoint % yet another guess
- \ignorespaces
- \clf_x_table_flush
- method {\v!normal}%
- \relax
- \removeunwantedspaces}
-
-% in text flow: headers and footers get repeated
-
-\setvalue{\??xtableflushsplit\v!repeat}%
- {\doloop
- {\clf_x_table_flush
- method {\v!split}%
- height \ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi
- \relax
- \ifcase\c_tabl_x_state
- \exitloop
- \else
- \page
- \fi}}
-
-% \setvalue{\??xtableflushsplit\v!setups}%
-% {\directsetup{xtable:split:user}}
-%
-% \startsetups[xtable:split:user]
-% \doloop {
-% \xtablesplitflush % uses \xtablesplitvsize (a macro)
-% \ifcase\xtablesplitstate
-% \exitloop
-% \else
-% \page
-% \fi
-% }
-% \stopsetups
-%
-% \protected\def\xtablesplitflush
-% {\clf_x_table_flush
-% method {\v!split}%
-% height \dimexpr\xtablesplitvsize\relax
-% \relax}
-%
-% \def\xtablesplitvsize
-% {\ifdim\pagegoal=\maxdimen\textheight\else\pagegoal\fi}
-%
-% \let\xtablesplitstate\c_tabl_x_state
-
-\let\extratxtablesplitheight\zeropoint % might disappear so don't depend on it
-
-\protected\def\tabl_x_flush_float_normal
- {\clf_x_table_flush
- method {\v!normal}%
- \relax}
-
-\protected\def\tabl_x_flush_float_split
- {\resetdirecttsplit
- \edef\extrasplitfloatlines{\xtableparameter\c!split}%
- \d_split_minimum_free_space\dimexpr\extratxtablesplitheight+\xtableparameter\c!splitoffset\relax
- %\c_split_minimum_free_lines\plustwo % not needed here as we're precise enough
- \let\tsplitdirectsplitter\tabl_x_split_splitter
- \let\tsplitdirectwidth \d_tabl_x_final_width
- \handledirecttsplit}
-
-\protected\def\tabl_x_split_splitter#height%
- {\setbox\b_split_result\vbox
- {\clf_x_table_flush
- method {\v!split}%
- height \dimexpr#height\relax
- \relax}%
- \ifcase\c_tabl_x_state
- \global\setfalse\somenextsplitofffloat
- \else
- \global\settrue \somenextsplitofffloat
- \fi}
-
-% \permanent\protected\def\startxrow
-% {\begingroup
-% \doifelsenextoptionalcs\tabl_x_start_row_yes\tabl_x_start_row_nop}
-
-% \permanent\protected\def\stopxrow
-% {\tabl_x_stop_row
-% \endgroup}
-
-\protected\def\tabl_x_start_row_reflow_width_yes[#settings]%
- {\setupcurrentxtable[#settings]%
- \clf_x_table_next_row}
-
-\protected\def\tabl_x_start_row_reflow_width_nop
- {\clf_x_table_next_row}
-
-\protected\def\tabl_x_stop_row_reflow_width
- {}
-
-\let\tabl_x_start_row_reflow_height_yes\tabl_x_start_row_reflow_width_yes
-\let\tabl_x_start_row_reflow_height_nop\tabl_x_start_row_reflow_width_nop
-\let\tabl_x_stop_row_reflow_height \tabl_x_stop_row_reflow_width
-
-\protected\def\tabl_x_start_row_construct_yes[#settings]%
- {\setupcurrentxtable[#settings]%
- \dostarttagged\t!tablerow\empty
- \clf_x_table_next_row_option{\xtableparameter\c!samepage}}
-
-\protected\def\tabl_x_start_row_construct_nop
- {\dostarttagged\t!tablerow\empty
- \clf_x_table_next_row}
-
-\protected\def\tabl_x_stop_row_construct
- {\clf_x_table_finish_row
- \dostoptagged}
-
-\permanent\protected\def\dummyxcell
- {\begingroup
- \enforced\let\inheritedxtableframed\relax
- \tabl_x_start_cell_nop
- \tabl_x_stop_cell
- \endgroup}
-
-\def\tabl_x_setup_character_align
- {\edef\p_left {\directxtableparameter\c!alignmentleftsample}%
- \edef\p_right{\directxtableparameter\c!alignmentrightsample}%
- \ifempty\p_left
- \scratchdimenone\dimexpr\directxtableparameter\c!alignmentleftwidth\relax
- \else
- \setbox\scratchbox\hbox{\p_left}%
- \scratchdimenone\wd\scratchbox
- \fi
- \ifempty\p_right
- \scratchdimentwo\dimexpr\directxtableparameter\c!alignmentrightwidth\relax
- \else
- \setbox\scratchbox\hbox{\p_right}%
- \scratchdimentwo\wd\scratchbox
- \fi
- \clf_setcharacteraligndetail
- \clf_x_table_c
- {\directxtableparameter\c!alignmentcharacter}%
- \scratchdimenone
- \scratchdimentwo
- \relax}
-
-\newtoks\t_tabl_x_every_cell
-
-% \appendtoks
-% \inhibitblank % already in framed
-% \to \t_tabl_x_every_cell
-
-\appendtoks
- \edef\p_characteralign{\directxtableparameter\c!aligncharacter}%
- \ifx\p_characteralign\v!yes
- \ifcase\clf_x_table_r\or
- \tabl_x_setup_character_align
- \fi
- \signalcharacteralign\clf_x_table_c\clf_x_table_r
- \fi
-\to \t_tabl_x_every_cell
-
-\protected\def\tabl_x_begin_of_cell
- {\the\t_tabl_x_every_cell
- \everypar{\delayedbegstrut}}
-
-\protected\def\tabl_x_end_of_cell
- {\ifhmode
- \delayedendstrut
- \par
- \else
- \par
- \ifdim\prevdepth<\zeropoint % =-1000pt ?
- \vskip-\strutdp
- \else
- \removebottomthings
- \fi
- \fi}
-
-% For historic reasons we support both nx/nc and ny/nr : maybe nx/ny becomes
-% obsolete some day. The let as well as the direct speed things up a bit. We
-% could also consider a \defaultxtableparameter.
-%
-% \c_tabl_x_nx\defaultxtableparameter\c!nc{\defaultxtableparameter\c!nx\plusone}
-% \c_tabl_x_ny\defaultxtableparameter\c!nr{\defaultxtableparameter\c!ny\plusone}
-%
-% Although this becomes kind of messy. It saves already time that we only check
-% for it when we have settings.
-
-% \def\tabl_x_set_hsize
-% {\hsize.25\maxdimen} % let's be reasonable
-
-% \def\tabl_x_set_hsize
-% {\edef\p_width{\xtableparameter\c!width}%
-% \ifempty\p_width
-% \hsize.25\maxdimen % is this really needed
-% \fi}
-
-\let\tabl_x_set_hsize\relax
-
-\protected\def\tabl_x_start_cell_reflow_width_yes[#settings]%
- {\setbox\b_tabl_x\hpack\bgroup
- \ifnum\c_tabl_x_nesting>\plusone
- \letxtableparameter\c!width \v!fit % overloads given width
- \letxtableparameter\c!height\v!fit % overloads given height
- \fi
- %
- \letxtableparameter\c!nx\plusone
- \letxtableparameter\c!ny\plusone
- \letxtableparameter\c!nc\plusone
- \letxtableparameter\c!nr\plusone
- %
- \setupcurrentxtable[#settings]%
- %
- \c_tabl_x_nx\directxtableparameter\c!nc\relax
- \c_tabl_x_ny\directxtableparameter\c!nr\relax
- \ifnum\c_tabl_x_nx=\plusone
- \c_tabl_x_nx\directxtableparameter\c!nx\relax
- \fi
- \ifnum\c_tabl_x_ny=\plusone
- \c_tabl_x_ny\directxtableparameter\c!ny\relax
- \fi
- %
- \d_tabl_x_distance\xtableparameter\c!distance\relax
- \clf_x_table_init_reflow_width_option{\xtableparameter\c!option}%
- \inheritedxtableframed\bgroup
- \tabl_x_begin_of_cell
- \tabl_x_set_hsize}
-
-\protected\def\tabl_x_start_cell_reflow_width_nop
- {\setbox\b_tabl_x\hpack\bgroup
- \ifnum\c_tabl_x_nesting>\plusone
- \letxtableparameter\c!width \v!fit % overloads given width
- \letxtableparameter\c!height\v!fit % overloads given height
- \fi
- \c_tabl_x_nx\plusone
- \c_tabl_x_ny\plusone
- \d_tabl_x_distance\xtableparameter\c!distance\relax
- \clf_x_table_init_reflow_width
- \inheritedxtableframed\bgroup
- \tabl_x_begin_of_cell
- \tabl_x_set_hsize}
-
-\protected\def\tabl_x_stop_cell_reflow_width
- {\tabl_x_end_of_cell
- \egroup
- \egroup
- \clf_x_table_set_reflow_width}
-
-\protected\def\tabl_x_start_cell_reflow_height_yes[#settings]%
- {\setbox\b_tabl_x\hpack\bgroup
- \clf_x_table_init_reflow_height
- \ifcase\c_tabl_x_skip_mode % can be sped up
- \ifnum\c_tabl_x_nesting>\plusone
- \letxtableparameter\c!height\v!fit % overloads given height
- \fi
- \setupcurrentxtable[#settings]%
- \relax
- \letxtableparameter\c!width\d_tabl_x_width % overloads given width
- \inheritedxtableframed\bgroup
- \tabl_x_begin_of_cell
- \fi}
-
-\protected\def\tabl_x_start_cell_reflow_height_nop
- {\setbox\b_tabl_x\hpack\bgroup
- \clf_x_table_init_reflow_height
- \ifcase\c_tabl_x_skip_mode % can be sped up
- \ifnum\c_tabl_x_nesting>\plusone
- \letxtableparameter\c!height\v!fit % overloads given height
- \fi
- \relax
- \letxtableparameter\c!width\d_tabl_x_width % overloads given width
- \inheritedxtableframed\bgroup
- \tabl_x_begin_of_cell
- \fi}
-
-\protected\def\tabl_x_stop_cell_reflow_height
- {\ifcase\c_tabl_x_skip_mode
- \tabl_x_end_of_cell
- \egroup
- \fi
- \egroup
- \clf_x_table_set_reflow_height}
-
-\protected\def\tabl_x_start_cell_construct_yes[#settings]%
- {\dostarttagged\t!tablecell\empty % can't we just tag the box
- \setbox\b_tabl_x\hpack\bgroup
- \setupcurrentxtable[#settings]%
- \letxtableparameter\c!width \d_tabl_x_width % overloads given width
- \letxtableparameter\c!height\d_tabl_x_height % overloads given height
- \clf_x_table_init_construct
- \inheritedxtableframed\bgroup
- \tabl_x_begin_of_cell
- \dotagxtablecell}
-
-\protected\def\tabl_x_start_cell_construct_nop
- {\dostarttagged\t!tablecell\empty % can't we just tag the box
- \setbox\b_tabl_x\hpack\bgroup
- \letxtableparameter\c!width \d_tabl_x_width % overloads given width
- \letxtableparameter\c!height\d_tabl_x_height % overloads given height (commenting it ... nice option)
- \clf_x_table_init_construct
- \inheritedxtableframed\bgroup
- \tabl_x_begin_of_cell
- \dotagxtablecell}
-
-\protected\def\tabl_x_stop_cell_construct
- {\tabl_x_end_of_cell
- \egroup
- \dotagxtablesignal % harmless spot
- \egroup
- \clf_x_table_set_construct
- \dostoptagged}
-
-% \permanent\tolerant\protected\def\startxcellgroup[#settings]%
-% {\begingroup
-% \ifarguments\or
-% \tabl_x_set_checked{#settings}%
-% \fi}
-%
-% \permanent\protected\def\stopxcellgroup
-% {\endgroup}
-%
-% \permanent\tolerant\protected\def\startxrowgroup[#settings]%
-% {\begingroup
-% \ifarguments\or
-% \tabl_x_set_checked{#settings}%
-% \fi}
-%
-% \permanent\protected\def\stopxrowgroup
-% {\dostoptagged
-% \endgroup}
-
-\protected\def\tabl_x_set_checked#settings%
- {\ifcsname\namedxtablehash{#settings}\s!parent\endcsname
- \edef\currentxtable{#settings}%
- \else
- \setupcurrentxtable[#settings]%
- \fi}
-
-\permanent\protected\def\startxtablehead{\begingroup\c_tabl_x_mode\plusone \tabl_x_start_partition}
-\permanent\protected\def\startxtablefoot{\begingroup\c_tabl_x_mode\plustwo \tabl_x_start_partition}
-\permanent\protected\def\startxtablenext{\begingroup\c_tabl_x_mode\plusthree\tabl_x_start_partition}
-\permanent\protected\def\startxtablebody{\begingroup\c_tabl_x_mode\plusfour \tabl_x_start_partition}
-
-\permanent\tolerant\protected\def\tabl_x_start_partition[#settings]%
- {\ifarguments\or
- \tabl_x_set_checked{#settings}%
- \fi}
-
-\protected\def\tabl_x_stop_partition
- {\endgroup}
-
-\permanent\aliased\let\stopxtablehead\tabl_x_stop_partition
-\permanent\aliased\let\stopxtablefoot\tabl_x_stop_partition
-\permanent\aliased\let\stopxtablenext\tabl_x_stop_partition
-\permanent\aliased\let\stopxtablebody\tabl_x_stop_partition
-
-%D This is an experiment! Beware: you can create loops by using nested
-%D references to already chained settings.
-%D
-%D \startbuffer
-%D \setupxtable[suffix][align=middle,foregroundcolor=red]
-%D \setupxtable[blabla][foregroundstyle=slanted]
-%D \setupxtable[crap] [foregroundcolor=blue]
-%D \setupxtable[bold] [crap][foregroundstyle=bold]
-%D
-%D \startxtable[frame=off]
-%D \startxtablehead
-%D \startxrow[bold]
-%D \startxcell[suffix] a 0 \stopxcell
-%D \startxcell[blabla] a 1 \stopxcell
-%D \startxcell a 2 \stopxcell
-%D \stopxrow
-%D \stopxtablehead
-%D \startxtablebody
-%D \startxrow \startxcell[suffix][ny=2] a 1 \stopxcell \startxcell b 1 \stopxcell \startxcell c 1 \stopxcell \stopxrow
-%D \startxrow \startxcell b 2 \stopxcell \startxcell c 2 \stopxcell \stopxrow
-%D \startxrow \startxcell[suffix] a 3 \stopxcell \startxcell b 3 \stopxcell \startxcell c 3 \stopxcell \stopxrow
-%D \startxrow \startxcell[suffix] a 4 \stopxcell \startxcell b 4 \stopxcell \startxcell c 4 \stopxcell \stopxrow
-%D \startxrow \startxcell[suffix] a 5 \stopxcell \startxcell b 5 \stopxcell \startxcell c 5 \stopxcell \stopxrow
-%D \stopxtablebody
-%D \stopxtable
-%D \stopbuffer
-%D
-%D \typebuffer \placetable{}{\getbuffer}
-
-\appendtoks
- \letvalue{\??xtablecheck\currentxtable}\relax % faster than checking parent
-\to \everysetupxtable
-
-% \definefontfamily[newtimes][serif][TeX Gyre Termes]
-% \setupxtable[newtimes][foregroundstyle=\newtimes]
-% \startxcell[newtimes] ...\stopxcell
-% \startxcell[foregroundstyle=\newtimes] ...\stopxcell
-
-% % \ifcsname\namedxtablehash{#tag}\s!parent\endcsname
-% % \ifcsname\??xtablecheck#tag\endcsname
-% \ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname % two times slower on keywords
-% \expandafter\whatever % but more tolerant for tricky key=value
-% \else
-% \expandafter\whatever
-% \fi[#tag]
-
-% groups
-
-\permanent\protected\def\startxgroup
- {\begingroup
- \doifelsenextoptionalcs\tabl_x_start_group_delayed_one\relax}
-
-\permanent\protected\def\stopxgroup
- {\endgroup}
-
-\protected\def\tabl_x_start_group_delayed_one[#tag]%
- {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname
- \expandafter\tabl_x_start_group_delayed_two
- \else
- \expandafter\setupcurrentxtable
- \fi[#tag]}
-
-\protected\def\tabl_x_start_group_delayed_two[#tag]%
- {\ifempty\currentxtable \else
- \chaintocurrentxtable{#tag}%
- \fi
- \edef\currentxtable{#tag}%
- \doifelsenextoptionalcs\setupcurrentxtable\relax}
-
-\aliased\let\startxrowgroup \startxgroup
-\aliased\let\stopxrowgroup \stopxgroup
-\aliased\let\startxcellgroup\startxgroup
-\aliased\let\stopxcellgroup \stopxgroup
-
-% cells (maybe also check for 1 etc but it becomes messy)
-
-\permanent\protected\def\startxcell
- {\begingroup
- \doifelsenextoptionalcs\tabl_x_start_cell_delayed_one\tabl_x_start_cell_nop}
-
-\protected\def\tabl_x_start_cell_delayed_one[#tag]%
- {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname
- \expandafter\tabl_x_start_cell_delayed_two
- \else
- \expandafter\tabl_x_start_cell_yes
- \fi[#tag]}
-
-\protected\def\tabl_x_start_cell_delayed_two[#tag]%
- {\ifempty\currentxtable \else
- \chaintocurrentxtable{#tag}%
- \fi
- \edef\currentxtable{#tag}%
- \doifelsenextoptionalcs\tabl_x_start_cell_yes\tabl_x_start_cell_nop}
-
-\permanent\protected\def\stopxcell
- {\tabl_x_stop_cell
- \endgroup}
-
-% rows
-
-\permanent\protected\def\startxrow
- {\begingroup
- \doifelsenextoptionalcs\tabl_x_start_row_delayed_one\tabl_x_start_row_nop}
-
-\protected\def\tabl_x_start_row_delayed_one[#tag]%
- {\ifcsname\??xtablecheck\detokenize\expandafter{\normalexpanded{#tag}}\endcsname
- \expandafter\tabl_x_start_row_delayed_two
- \else
- \expandafter\tabl_x_start_row_yes
- \fi[#tag]}
-
-\permanent\protected\def\tabl_x_start_row_delayed_two[#tag]%
- {\ifempty\currentxtable \else
- \chaintocurrentxtable{#tag}%
- \fi
- \edef\currentxtable{#tag}%
- \doifelsenextoptionalcs\tabl_x_start_row_yes\tabl_x_start_row_nop}
-
-\permanent\protected\def\stopxrow
- {\tabl_x_stop_row
- \endgroup}
-
-%D A bonus, not advertised but some like it this way:
-
-\protected\def\tabl_x_nc
- {\startxrow
- \enforced\let\NC\tabl_x_nc_next
- \enforced\let\NR\tabl_x_nr
- \startxcell}
-
-\protected\def\tabl_x_nc_next
- {\stopxcell
- \startxcell}
-
-\protected\def\tabl_x_nr
- {\stopxcell
- \stopxrow
- \enforced\let\NC\tabl_x_nc}
-
-\appendtoks
- \enforced\let\NC\tabl_x_nc
- \enforced\let\NR\tabl_x_nr
-\to \everypreparextable
-
-%D Another bonus, suggested by Taco at the 2018 \CONTEXT\ meeting.
-
-\protected\def\tabl_x_c_cell_start#settings%
- {\begingroup
- \tabl_x_set_checked{#settings}%
- \doifelsenextoptionalcs\tabl_x_start_cell_yes\tabl_x_start_cell_nop}
-
-\protected\def\tabl_x_c_cell_stop
- {\tabl_x_stop_cell
- \endgroup}
-
-% \protected\def\dummyxcell
-% {\tabl_x_start_cell_nop
-% \tabl_x_stop_cell}
-
-\mutable\let\t_tabl_x_swapped\relax
-
-\def\tabl_x_flush_swapped
- {\dorecurse\c_tabl_x_swapped_max
- {\expandafter
- \startxrow
- \the\csname\??xtableswap##1\endcsname\relax
- \stopxrow}}
-
-\def\tabl_x_collect_allocate
- {\expandafter\newtoks\csname\??xtableswap\number\c_tabl_x_swapped\endcsname
- \expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname}
-
-\def\tabl_x_collect_advance
- {\global\advance\c_tabl_x_swapped\plusone
- \ifnum\c_tabl_x_swapped>\c_tabl_x_swapped_max
- \global\c_tabl_x_swapped_max\c_tabl_x_swapped
- \fi
- \mutable\expandafter\let\expandafter\t_tabl_x_swapped\csname\??xtableswap\number\c_tabl_x_swapped\endcsname
- \ifx\t_tabl_x_swapped\relax
- \tabl_x_collect_allocate
- \fi}
-
-\protected\def\tabl_x_collect_cell_start
- {\doifelsenextoptionalcs
- \tabl_x_collect_cell_start_yes
- \tabl_x_collect_cell_start_nop}
-
-\def\tabl_x_collect_cell_start_nop#content\stopxcell
- {\tabl_x_collect_advance
- \ifempty\m_tabl_x_swapped_settings
- \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}#content\tabl_x_c_cell_stop}%
- \else
- \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}#content\tabl_x_c_cell_stop}%
- \fi}
-
-\def\tabl_x_collect_cell_start_yes[#settings]#content\stopxcell
- {\tabl_x_collect_advance
- \ifempty\m_tabl_x_swapped_settings
- \gtoksapp\t_tabl_x_swapped{\tabl_x_c_cell_start{}[#settings]#content\tabl_x_c_cell_stop}%
- \else
- \gtoksapp\t_tabl_x_swapped\expandafter{\expandafter\tabl_x_c_cell_start\expandafter{\m_tabl_x_swapped_settings}[#settings]#content\tabl_x_c_cell_stop}%
- \fi
- \getdummyparameters[\c!ny=1,#settings]%
- \scratchcounter\numexpr\dummyparameter\c!ny-\plusone\relax
- \ifcase\scratchcounter\else
- \dorecurse\scratchcounter\tabl_x_collect_advance
- \fi}
-
-\permanent\tolerant\protected\def\startxcolumn[#1]%
- {\begingroup
- \global\c_tabl_x_swapped\zerocount
- \enforced\let\startxcell\tabl_x_collect_cell_start
- \enforced\let\stopxcell \relax
- \xdef\m_tabl_x_swapped_settings{#1}}
-
-\permanent\protected\def\stopxcolumn
- {\endgroup}
-
-\appendtoks
- \dorecurse\c_tabl_x_swapped_max
- {\global\csname\??xtableswap\number#1\endcsname\emptytoks}%
-\to \t_table_x_cleanup
-
-%D \startbuffer
-%D \setupxtable[one][foregroundcolor=red]
-%D \setupxtable[two][foregroundcolor=blue]
-%D
-%D \startlinecorrection
-%D \startxtable
-%D \startxrow[one]
-%D \startxcell[width=5cm] Row 1, Column 1 \stopxcell
-%D \startxcell Row 1, Column 2 \stopxcell
-%D \startxcell Row 1, Column 3 \stopxcell
-%D \stopxrow
-%D \startxrow[two]
-%D \startxcell Row 2, Column 1 \stopxcell
-%D \startxcell Row 2, Column 2 \stopxcell
-%D \startxcell Row 2, Column 3 \stopxcell
-%D \stopxrow
-%D \stopxtable
-%D \stoplinecorrection
-%D
-%D \startlinecorrection
-%D \startxtable
-%D \startxcolumn[one]
-%D \startxcell[width=5cm] Row 1, Column 1 \stopxcell
-%D \startxcell Row 1, Column 2 \stopxcell
-%D \startxcell Row 1, Column 3 \stopxcell
-%D \stopxcolumn
-%D \startxcolumn[two]
-%D \startxcell Row 2, Column 1 \stopxcell
-%D \startxcell Row 2, Column 2 \stopxcell
-%D \startxcell Row 2, Column 3 \stopxcell
-%D \stopxcolumn
-%D \stopxtable
-%D \stoplinecorrection
-%D \stopbuffer
-%D
-%D \typebuffer \getbuffer
-
-\protect \endinput