summaryrefslogtreecommitdiff
path: root/tex/context/base/mkiv/tabl-tsp.mkxl
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/mkiv/tabl-tsp.mkxl')
-rw-r--r--tex/context/base/mkiv/tabl-tsp.mkxl575
1 files changed, 0 insertions, 575 deletions
diff --git a/tex/context/base/mkiv/tabl-tsp.mkxl b/tex/context/base/mkiv/tabl-tsp.mkxl
deleted file mode 100644
index f09a5d9d8..000000000
--- a/tex/context/base/mkiv/tabl-tsp.mkxl
+++ /dev/null
@@ -1,575 +0,0 @@
-%D \module
-%D [ file=tabl-tsp,
-%D version=2000.10.20,
-%D title=\CONTEXT\ Table Macros,
-%D subtitle=Splitting,
-%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 / Splitting}
-
-%D The code in this file is moved here from other places and needs a mkiv cleanup.
-%D As it mostly targets at tables the code lives in the tabl and page namespaces.
-
-% work in progress
-
-\unprotect
-
-%D Although the name resembles floats, and therefore this should be a page module,
-%D we decided to make it core functionality because the table code depends on it.
-%D Othrwise there would be too much overloading afterwards involved. Actually, the
-%D float part is rather generic and not that related to floats.
-
-% \splitfloat [settings] {\placetable[optional args]{test}} {content}
-
-%D When \type {inbetween} is made empty instead of the default \type {\page}, we
-%D will get delayed flushing and text may continue below the graphic.
-%D
-%D \starttyping
-%D \dorecurse{2}{\input tufte }
-%D
-%D \splitfloat[lines=auto,inbetween=]
-%D {\placetable{\dorecurse{5}{test\recurselevel\endgraf}}}
-%D {\bTABLE[split=yes]
-%D \bTR \bTD 11 \eTD \bTD \input tufte \eTD \eTR
-%D \bTR \bTD 12 \eTD \bTD \input zapf \eTD \eTR
-%D \bTR \bTD 13 \eTD \bTD \input bryson \eTD \eTR
-%D \bTR \bTD 14 \eTD \bTD test \eTD \eTR
-%D \bTR \bTD 21 \eTD \bTD \input tufte \eTD \eTR
-%D \bTR \bTD 22 \eTD \bTD \input zapf \eTD \eTR
-%D \bTR \bTD 23 \eTD \bTD \input bryson \eTD \eTR
-%D \bTR \bTD 24 \eTD \bTD test \eTD \eTR
-%D \bTR \bTD 31 \eTD \bTD \input tufte \eTD \eTR
-%D \bTR \bTD 32 \eTD \bTD \input zapf \eTD \eTR
-%D \bTR \bTD 33 \eTD \bTD \input bryson \eTD \eTR
-%D \bTR \bTD 34 \eTD \bTD test \eTD \eTR
-%D \eTABLE}
-%D
-%D \dorecurse{10}{\input tufte }
-%D \stoptyping
-
-\installcorenamespace{floatsplitting}
-
-\installdirectcommandhandler \??floatsplitting {floatsplitting} % \??floatsplitting
-
-\setupfloatsplitting
- [\c!conversion=\v!character, % \v!romannumerals
- \c!lines=3,
- \c!before=,
- \c!inbetween=\page,
- \c!after=]
-
-\newconditional\splitfloatfirstdone
-\newconditional\somenextsplitofffloat
-\newconditional\splitfloatdone
-\newconditional\onlyonesplitofffloat \settrue\onlyonesplitofffloat
-
-\newif \ifinsidesplitfloat % will become conditional
-
-\newcount \noffloatssplits
-\newtoks \everysplitfloatsetup
-
-\let \extrasplitfloatlines \!!zerocount
-\let \splitfloatfinalizer \relax
-
-\mutable\let \floatcaptionsuffix \empty
-
-\permanent\tolerant\protected\def\splitfloat[#1]#:#2% nog dubbele refs
- {\bgroup
- \global\setfalse\splitfloatdone
- \aftergroup\page_split_float_check
- \insidefloattrue
- \insidesplitfloattrue
- \setupcurrentfloatsplitting[#1]%
- \global\noffloatssplits\zerocount
- \let\floatcaptionsuffix\page_split_float_suffix
- \edef\extrasplitfloatlines{\floatsplittingparameter\c!lines}%
- \the\everysplitfloatsetup
- \def\splitfloatcommand{#2}%
- \global\settrue \onlyonesplitofffloat
- \global\setfalse\somenextsplitofffloat
- \page_floats_push_saved
- \floatsplittingparameter\c!before
- \let\next} % \bgroup
-
-\protected\def\page_split_float_suffix
- {\begingroup
- \usefloatsplittingstyleandcolor\c!style\c!color % only the suffix
- \convertnumber{\floatsplittingparameter\c!conversion}\noffloatssplits
- \endgroup}
-
-\protected\def\page_split_float_check
- {\ifconditional\splitfloatdone
- \splitfloatfinalizer % a weird place (could interfere with flushing)
- \else
- \blank
- \begingroup
- \tttf \dontleavehmode \getmessage\m!floatblocks{13}\empty
- \endgroup
- \blank
- \showmessage\m!floatblocks{13}\empty
- \fi}
-
-\def\page_split_float_process % nextbox
- {\ifinsidesplitfloat
- \expandafter\page_split_float_process_yes
- \else
- \expandafter\page_split_float_process_nop
- \fi}
-
-\def\page_split_float_process_yes
- {\dowithnextboxcs\page_split_float_process_finish\vbox}
-
-\def\page_split_float_process_finish
- {\forgetall
- \dontcomplain
- \global\settrue\splitfloatdone
- % \nodelocationmode\zerocount % bypass auto-renumbering
- \global\advance\noffloatssplits\plusone
- \ifcase\noffloatssplits\relax \or
- \ifconditional\onlyonesplitofffloat
- \let\floatcaptionsuffix\empty
- \fi
- \fi
- \bgroup
- \ifconditional\somenextsplitofffloat
- \notesenabledfalse % best here, experimental, brrr; test with note in caption
- \fi
- \splitfloatcommand{\box\nextbox}%
- \egroup
- \ifconditional\somenextsplitofffloat
- \edef\p_inbetween{\floatsplittingparameter\c!inbetween}%
- \ifempty\p_inbetween
- \ifconditional\splitfloatfirstdone\else\page\fi
- \else
- \p_inbetween
- \fi
- \else
- \floatsplittingparameter\c!after
- \page_floats_pop_saved
- \page_floats_flush_saved
- \fi
- \global\settrue\splitfloatfirstdone}
-
-\def\page_split_float_process_nop
- {\dowithnextboxcs\page_split_float_process_nop_finish\vbox}
-
-\def\page_split_float_process_nop_finish
- {\forgetall
- \dontcomplain
- \box\nextbox % maybe an option to unvbox
- \global\settrue\splitfloatfirstdone}
-
-\def\page_split_float_check_content#1% box
- {\ifinsidesplitfloat
- % \ifdim\ht#1=\zeropoint % funny: \ifcase does not check for overflow
- \ifcase\ht#1\relax
- \global\setfalse\somenextsplitofffloat
- \else
- \global\settrue \somenextsplitofffloat
- \global\setfalse\onlyonesplitofffloat
- \fi
- \fi}
-
-\def\page_split_float_check_caption#1% depends on page-flt .. pretty messy
- {\edef\extrasplitfloatlines{\extrasplitfloatlines}%
- \ifx\extrasplitfloatlines\v!auto
- \bgroup
- \forcelocalfloats
- \setuplocalfloats[\c!before=,\c!after=,\c!inbetween=]%
- % This controls samepage resetting too but it also messes up the numbering
- % so I need another fix.
-% \settrialtypesetting
- \splitfloatcommand{\hbox to #1{\strut}}% dummy line
-% \resettrialtypesetting
- \setbox\scratchbox\vbox{\flushlocalfloats}% \vpack ?
- \getnoflines{\ht\scratchbox}%
- \resetlocalfloats
- \advance\noflines\minusone % compensate dummy line
- \normalexpanded{\egroup\noexpand\edef\noexpand\extrasplitfloatlines{\the\noflines}}%
- \global\settrue\usesamefloatnumber
- \else
- \doifelsenumber\extrasplitfloatlines\donothing{\def\extrasplitfloatlines{1}}%
- \fi}
-
-\permanent\protected\def\doifnotinsidesplitfloat
- {\ifinsidesplitfloat
- \expandafter\gobbleoneargument
- \fi}
-
-%D Table splitter, on top of previous code:
-
-% todo: keep tail to rest, so we need a lookahead
-
-\newbox\b_split_content
-\newbox\b_split_result
-\newbox\b_split_head
-\newbox\b_split_next
-\newbox\b_split_tail
-
-\newtoks\t_split_before_result
-\newtoks\t_split_after_result
-\newtoks\t_split_before
-\newtoks\t_split_inbetween
-\newtoks\t_split_after
-
-\newtoks\everyresettsplit
-
-\newcount\c_split_minimum_free_lines
-
-\newdimen\d_split_minimum_free_space
-\newdimen\d_split_available_height
-\newdimen\d_split_inbetween_height
-
-\newconditional\c_tabl_split_done
-\newconditional\c_tabl_split_head
-\newconditional\c_tabl_split_full
-
-\newconditional\tabl_split_forced_page
-
-\appendtoks
- \c_split_minimum_free_lines\zerocount
- \d_split_minimum_free_space\zeropoint
- \setbox\b_split_content \emptyvbox
- \setbox\b_split_result \emptyvbox
- \setbox\b_split_head \emptyvbox
- \setbox\b_split_next \emptyvbox
- \setbox\b_split_tail \emptyvbox
- \t_split_before_result \emptytoks
- \t_split_after_result \emptytoks
- \t_split_inbetween \emptytoks
- \t_split_before \emptytoks
- \t_split_after \emptytoks
- \let\postprocesstsplit \donothing
-\to \everyresettsplit
-
-\permanent\protected\def\resettsplit
- {\the\everyresettsplit}
-
-\resettsplit
-
-\def\tsplitdirectwidth{\hsize}
-
-\protected\def\handletsplit
- {\page_split_float_check_caption{\wd\b_split_content}%
- \global\setfalse\splitfloatfirstdone
- \testpagesync % new, sync, but still tricky
- [\number\c_split_minimum_free_lines]
- [\dimexpr\d_split_minimum_free_space+\extrasplitfloatlines\lineheight\relax]%
- \setbox\scratchbox\vbox{\the\t_split_inbetween}%
- \d_split_inbetween_height\htdp\scratchbox
- \setfalse\c_tabl_split_done
- \doloop\tabl_split_loop_body
- \global\setfalse\usesamefloatnumber % new, prevent next increment
- \global\setfalse\splitfloatfirstdone} % we can use this one for tests
-
-\def\tabl_split_loop_body
- {\ifinsidecolumns
- % brrr, assumes empty columns
- \global\setfalse\splitfloatfirstdone
- \d_split_available_height\textheight
- \settrue\c_tabl_split_full
- \else
- \ifconditional\splitfloatfirstdone
- \d_split_available_height\textheight
- \settrue\c_tabl_split_full
- \orelse\ifdim\pagegoal<\maxdimen
- \d_split_available_height\dimexpr\pagegoal-\pagetotal\relax
- \setfalse\c_tabl_split_full
- \else
- \d_split_available_height\textheight
- \settrue\c_tabl_split_full
- \fi
- \fi
- \d_split_available_height \dimexpr
- \d_split_available_height
- -\d_split_inbetween_height
- -\d_split_minimum_free_space
- -\extrasplitfloatlines\lineheight
- \relax
- \ifdim\htdp\b_split_tail>\zeropoint
- \advance\d_split_available_height-\htdp\b_split_tail
- \fi
- \setbox\b_split_result\vbox
- {\ifdim\ht\b_split_head>\zeropoint
- \unvcopy\b_split_head
- \the\t_split_inbetween
- \fi}%
- \ifconditional\c_tabl_split_done \else
- \ifdim\ht\b_split_next>\zeropoint
- \setbox\b_split_head\box\b_split_next
- \fi
- \fi
- \settrue\c_tabl_split_done
- \ifdim\ht\b_split_result>\zeropoint
- \settrue\c_tabl_split_head % table head
- \else
- \setfalse\c_tabl_split_head % no tablehead
- \fi
- \splittopskip\zeropoint
- \doloop % inner loop
- {\setbox\scratchbox\vsplit\b_split_content to \onepoint % \lineheight
- \setbox\scratchbox\vbox % \vpack
- {\unvbox\scratchbox
- \setbox\scratchbox\vbox % \vpack
- {\splitdiscards
- \ifnum\lastpenalty>-\plustenthousand\else
- % so that \bTR[before=\page] works
- \global\settrue\tabl_split_forced_page
- \fi}}%
- \ifconditional\tabl_split_forced_page
- \global\setfalse\tabl_split_forced_page
- \setbox\b_split_result\vbox
- {\unvbox\b_split_result
- \the\t_split_inbetween
- \unvbox\scratchbox}%
- \exitloop
- \orelse\ifdim\dimexpr\d_split_available_height-\htdp\scratchbox-\htdp\b_split_result\relax>\zeropoint
- \setbox\b_split_result\vbox
- {\unvbox\b_split_result
- \the\t_split_inbetween
- \unvbox\scratchbox}%
- \ifvoid\b_split_content \exitloop \fi
- \orelse\ifconditional\c_tabl_split_head
- % we only have a tablehead so far
- \setbox\b_split_result\vbox{\unvbox\b_split_result\unvbox\scratchbox}% \vpack
- \exitloop
- \orelse\ifconditional\c_tabl_split_full
- % we have text height available, but the (one) cell is too
- % large to fit, so, in order to avoid loops/deadcycles we do:
- \setbox\b_split_result\vbox
- {\unvbox\b_split_result
- \the\t_split_inbetween
- \unvbox\scratchbox}%
- \exitloop
- \else
- \setbox\b_split_content\vbox
- {\unvbox\scratchbox
- \the\t_split_inbetween
- \ifvoid\b_split_content\else\unvbox\b_split_content\fi}%
- \exitloop
- \fi
- \setfalse\c_tabl_split_head
- \setfalse\c_tabl_split_full}%
- \postprocesstsplit
- \page_split_float_check_content\b_split_content
- \ifvoid\b_split_content
- \setbox\b_split_result\vbox
- {\unvbox\b_split_result
- \the\t_split_inbetween
- \unvcopy\b_split_tail}%
- \page_split_float_process{\the\t_split_before_result\box\b_split_result\the\t_split_after_result}%
- \doifnotinsidesplitfloat{\the\t_split_after}%
- \endgraf
- \exitloop
- \else
- % hack
- \ifdim\pagegoal<\maxdimen
- \pagegoal\dimexpr\pagegoal+\lineheight\relax % etex
- \fi
- % brrr
- \ifdim\ht\b_split_result>\zeropoint
- \setbox\b_split_result\vbox
- {\unvbox\b_split_result
- \the\t_split_inbetween
- \unvcopy\b_split_tail}%
- \page_split_float_process{\the\t_split_before_result\box\b_split_result\the\t_split_after_result}%
- \doifnotinsidesplitfloat{\the\t_split_after}%
- \endgraf
- \global\settrue\usesamefloatnumber % new, prevent next increment
- \fi
- \ifinsidecolumns
- \goodbreak % was \doifnotinsidesplitfloat\goodbreak
- \else
- \page % was \doifnotinsidesplitfloat\page
- \fi
- \fi}
-
-%D The next one assumes that the split takes place elsewhere. This is used in
-%D xtables.
-
-\aliased\let\resetdirecttsplit\resettsplit
-
-\permanent\protected\def\handledirecttsplit
- {\page_split_float_check_caption{\tsplitdirectwidth}%
- \global\setfalse\splitfloatfirstdone
- \testpagesync % new, sync, but still tricky
- [\number\c_split_minimum_free_lines]
- [\dimexpr\d_split_minimum_free_space+\extrasplitfloatlines\lineheight\relax]%
- \doloop\tabl_split_direct_loop_body
- \global\setfalse\usesamefloatnumber % new, prevent next increment
- \global\setfalse\splitfloatfirstdone} % we can use this one for tests
-
-\def\tabl_split_direct_loop_body
- {\ifinsidecolumns
- \global\setfalse\splitfloatfirstdone
- \d_split_available_height\textheight
- \orelse\ifconditional\splitfloatfirstdone
- \d_split_available_height\textheight
- \orelse\ifdim\pagegoal<\maxdimen
- \d_split_available_height\dimexpr\pagegoal-\pagetotal\relax
- \else
- \d_split_available_height\textheight
- \fi
- \d_split_available_height\dimexpr
- \d_split_available_height
- -\d_split_minimum_free_space
- -\extrasplitfloatlines\lineheight
- \relax
- \tsplitdirectsplitter\d_split_available_height % also sets state
- \ifdim\ht\b_split_result>\zeropoint
- \ifconditional\somenextsplitofffloat
- \global\setfalse\onlyonesplitofffloat
- \fi
- \ifdim\pagegoal<\maxdimen
- \pagegoal\dimexpr\pagegoal+\lineheight\relax % etex
- \fi
- \page_split_float_process{\the\t_split_before_result\box\b_split_result\the\t_split_after_result}%
- \global\settrue\usesamefloatnumber % new, prevent next increment
- \endgraf
- \ifconditional\somenextsplitofffloat
- \ifinsidecolumns
- \goodbreak
- \else
- \page
- \fi
- \fi
- \global\settrue\splitfloatfirstdone
- \orelse\ifconditional\somenextsplitofffloat
- \ifinsidecolumns
- \goodbreak
- \else
- \page % no room
- \fi
- \else
- \exitloop
- \fi}
-
-%D Maybe handy:
-%D
-%D \starttyping
-%D \splitfloat
-%D {\placefigure{some caption}}
-%D {\startsplittext
-%D \typefile[option=TEX,before=,after=]{oeps.tex}
-%D \stopsplittext}
-%D \stoptyping
-
-\permanent\def\handlesplittext#1%
- {\setbox\b_split_result\vbox
- {\vsplit\b_split_content to \dimexpr#1-\lineheight\relax}}
-
-\permanent\protected\def\startsplittext
- {\begingroup
- \resettsplit
- \c_split_minimum_free_lines\zerocount
- \d_split_minimum_free_space\zeropoint
- \let\extrasplitfloatlines \!!plusone
- \let\tsplitdirectsplitter \handlesplittext
- \setbox\b_split_content\vbox\bgroup
- \insidefloattrue}
-
-\permanent\protected\def\stopsplittext
- {\egroup
- \handledirecttsplit
- \endgroup}
-
-\protect \endinput
-
-% test cases
-
-% \setupTABLE[split=repeat]
-%
-% \input tufte \endgraf
-% \splitfloat[lines=11]
-% {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}}
-% {\bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE}
-% \input tufte \page
-%
-% \input tufte \endgraf
-% \splitfloat[lines=0]
-% {}
-% {\bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE}
-% \input tufte \endgraf \page
-%
-% \input tufte \endgraf
-% \bTABLE\dorecurse{100}{\bTR \bTD test \eTD \eTR}\eTABLE
-% \input tufte \page
-
-% \setuptabulate[split=yes]
-%
-% \input tufte \endgraf
-% \splitfloat[lines=11]
-% {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}}
-% {\starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate}
-% \input tufte \page
-%
-% \input tufte \endgraf
-% \splitfloat[lines=0]
-% {}
-% {\starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate}
-% \input tufte \page
-%
-% \input tufte \endgraf
-% \starttabulate\dorecurse{200}{\NC test \NC test \NC \NR}\stoptabulate
-% \input tufte \page
-
-% \setuptables[split=yes]
-%
-% \newtoks\TestToks
-%
-% \TestToks\emptytoks
-% \appendtoks\starttablehead\to\TestToks
-% \dorecurse{3}{\appendtoks\VL head \VL head \VL \SR\to\TestToks}
-% \appendtoks\stoptablehead\to\TestToks
-% \appendtoks\starttabletail\to\TestToks
-% \dorecurse{3}{\appendtoks\VL tail \VL tail \VL \SR\to\TestToks}
-% \appendtoks\stoptabletail\to\TestToks
-% \appendtoks\starttables[|c|c|]\to\TestToks
-% \dorecurse{100}{\appendtoks\VL test \VL test \VL \SR\to\TestToks}
-% \appendtoks\stoptables\to\TestToks
-%
-% \input tufte \endgraf
-% \splitfloat[lines=auto] % [lines=11]
-% {\placetable{\dorecurse{10}{test\recurselevel\endgraf}}}
-% {\the\TestToks}
-% \input tufte \page
-%
-% \input tufte \endgraf
-% \splitfloat[lines=0]
-% {}
-% {\the\TestToks}
-% \input tufte \page
-%
-% \input tufte \endgraf
-% \the\TestToks
-% \input tufte \page
-%
-% multiple floats
-%
-% \starttext
-% \dorecurse{3}{\input tufte } \endgraf
-% \dorecurse{5}{\placefigure{}{\framed[height=.5\textheight]{}}}
-% \splitfloat[lines=auto,inbetween=]
-% {\placetable{\dorecurse{5}{test\recurselevel\endgraf}}}
-% {\bTABLE[split=yes]
-% \bTR \bTD 11 \eTD \bTD \input tufte \eTD \eTR
-% \bTR \bTD 12 \eTD \bTD \input zapf \eTD \eTR
-% \bTR \bTD 13 \eTD \bTD \input bryson \eTD \eTR
-% \bTR \bTD 14 \eTD \bTD test \eTD \eTR
-% \bTR \bTD 21 \eTD \bTD \input tufte \eTD \eTR
-% \bTR \bTD 22 \eTD \bTD \input zapf \eTD \eTR
-% \bTR \bTD 23 \eTD \bTD \input bryson \eTD \eTR
-% \bTR \bTD 24 \eTD \bTD test \eTD \eTR
-% \bTR \bTD 31 \eTD \bTD \input tufte \eTD \eTR
-% \bTR \bTD 32 \eTD \bTD \input zapf \eTD \eTR
-% \bTR \bTD 33 \eTD \bTD \input bryson \eTD \eTR
-% \bTR \bTD 34 \eTD \bTD test \eTD \eTR
-% \eTABLE}
-% \dorecurse{10}{\input tufte }
-% \stoptext