diff options
Diffstat (limited to 'tex/context/base/core-ntb.tex')
-rw-r--r-- | tex/context/base/core-ntb.tex | 176 |
1 files changed, 147 insertions, 29 deletions
diff --git a/tex/context/base/core-ntb.tex b/tex/context/base/core-ntb.tex index ba861eec2..914b55e65 100644 --- a/tex/context/base/core-ntb.tex +++ b/tex/context/base/core-ntb.tex @@ -67,6 +67,7 @@ \def\eTBLCELL {\ifhmode \delayedendstrut + \par % added 13/4/2006 \else \par \ifdim\prevdepth<\zeropoint % =-1000pt ? @@ -138,6 +139,7 @@ \let\popTBLparameters \relax \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 \newif\ifautoTBLrowspan \autoTBLrowspantrue @@ -224,48 +226,113 @@ \let\setupTBLsection\relax +% \def\setupTBLcell#1#2% cell over col over row +% {\setupTBLsection % already forgotten +% \getvalue{\@@tblprefix\v!each\v!each}% +% \getvalue{\@@tblprefix\c!y\v!each}% +% \getvalue{\@@tblprefix\c!x\v!each}% +% \getvalue{\@@tblprefix\c!y\v!oddeven{#1}}% +% \getvalue{\@@tblprefix\c!x\v!oddeven{#2}}% +% \getvalue{\@@tblprefix\c!x\v!oddeven{#2}\c!y\v!oddeven{#1}}% +% \ifnum#1=\plusone +% \getvalue{\@@tblprefix\c!y\v!first}% +% \executeifdefined{\@@tblprefix\c!x#2\c!y\v!first}\donothing +% \fi +% \ifnum#2=\plusone +% \getvalue{\@@tblprefix\c!x\v!first}% +% \executeifdefined{\@@tblprefix\c!x\v!first\c!y#1}\donothing +% \fi +% \ifnum#1=\maximumrow\relax +% \getvalue{\@@tblprefix\c!y\v!last}% +% \executeifdefined{\@@tblprefix\c!x#2\c!y\v!last}\donothing +% \fi +% \ifnum#2=\maximumcol\relax +% \getvalue{\@@tblprefix\c!x\v!last}% +% \executeifdefined{\@@tblprefix\c!x\v!last\c!y#1}\donothing +% \fi +% \ifnum#1=\maximumrow\relax\ifnum#2=\maximumcol\relax +% \getvalue{\@@tblprefix\c!x\v!last\c!y\v!last}% +% \fi\fi +% \ifnum#1=\plusone \ifnum#2=\plusone +% \getvalue{\@@tblprefix\c!x\v!first\c!y\v!first}% +% \fi\fi +% \ifnum#1>\noftblhdnxlines\else +% \executeifdefined{\@@tblprefix\v!header\v!each}\donothing +% \executeifdefined{\@@tblprefix\v!header#2}\donothing +% \fi +% \executeifdefined{\@@tblprefix\c!y#1}\donothing +% \getvalue{\@@tbl\@@tbl\c!extras}\letvalue{\@@tbl\@@tbl\c!extras}\relax % new, see x-fo +% \executeifdefined{\@@tblprefix\c!x#2}\donothing +% \getvalue{\@@tbl\@@tbl\c!extras}\letvalue{\@@tbl\@@tbl\c!extras}\relax % new, see x-fo +% \executeifdefined{\@@tblprefix\c!x#2\c!y#1}\donothing +% \global\letcscsname\@@tblsplitafter\csname\@@tbl\@@tbl\c!after\endcsname +% \relax} + + \def\setupTBLcell#1#2% cell over col over row {\setupTBLsection % already forgotten -\getvalue{\@@tblprefix\v!each\v!each}% +\edef\positiverow{\number#1}% +\edef\positivecol{\number#2}% +\scratchcounter-\maximumrow\advance\scratchcounter#1\advance\scratchcounter\minusone +\edef\negativerow{\number\scratchcounter}% +\scratchcounter-\maximumcol\advance\scratchcounter#2\advance\scratchcounter\minusone +\edef\negativecol{\number\scratchcounter}% + \getvalue{\@@tblprefix\v!each\v!each}% \getvalue{\@@tblprefix\c!y\v!each}% \getvalue{\@@tblprefix\c!x\v!each}% - \getvalue{\@@tblprefix\c!y\v!oddeven{#1}}% - \getvalue{\@@tblprefix\c!x\v!oddeven{#2}}% - \getvalue{\@@tblprefix\c!x\v!oddeven{#2}\c!y\v!oddeven{#1}}% - \ifnum#1=\plusone + \getvalue{\@@tblprefix\c!y\v!oddeven\positiverow}% + \getvalue{\@@tblprefix\c!x\v!oddeven\positivecol}% + \getvalue{\@@tblprefix\c!x\v!oddeven\positivecol\c!y\v!oddeven\positiverow}% + \ifnum\positiverow=\plusone \getvalue{\@@tblprefix\c!y\v!first}% - \executeifdefined{\@@tblprefix\c!x#2\c!y\v!first}\donothing + \executeifdefined{\@@tblprefix\c!x\positivecol\c!y\v!first}\donothing \fi - \ifnum#2=\plusone + \ifnum\positivecol=\plusone \getvalue{\@@tblprefix\c!x\v!first}% - \executeifdefined{\@@tblprefix\c!x\v!first\c!y#1}\donothing + \executeifdefined{\@@tblprefix\c!x\v!first\c!y\positiverow}\donothing \fi - \ifnum#1=\maximumrow\relax + \ifnum\positiverow=\maximumrow\relax \getvalue{\@@tblprefix\c!y\v!last}% - \executeifdefined{\@@tblprefix\c!x#2\c!y\v!last}\donothing + \executeifdefined{\@@tblprefix\c!x\positivecol\c!y\v!last}\donothing \fi - \ifnum#2=\maximumcol\relax + \ifnum\positivecol=\maximumcol\relax \getvalue{\@@tblprefix\c!x\v!last}% - \executeifdefined{\@@tblprefix\c!x\v!last\c!y#1}\donothing + \executeifdefined{\@@tblprefix\c!x\v!last\c!y\positiverow}\donothing \fi - \ifnum#1=\maximumrow\relax\ifnum#2=\maximumcol\relax + \ifnum\positiverow=\maximumrow\relax\ifnum\positivecol=\maximumcol\relax \getvalue{\@@tblprefix\c!x\v!last\c!y\v!last}% \fi\fi - \ifnum#1=\plusone \ifnum#2=\plusone + \ifnum\positiverow=\plusone \ifnum\positivecol=\plusone \getvalue{\@@tblprefix\c!x\v!first\c!y\v!first}% \fi\fi \ifnum#1>\noftblhdnxlines\else \executeifdefined{\@@tblprefix\v!header\v!each}\donothing - \executeifdefined{\@@tblprefix\v!header#2}\donothing + \executeifdefined{\@@tblprefix\v!header\positivecol}\donothing \fi - \executeifdefined{\@@tblprefix\c!y#1}\donothing + \executeifdefined{\@@tblprefix\c!y\positiverow}\donothing +\executeifdefined{\@@tblprefix\c!y\negativerow}\donothing \getvalue{\@@tbl\@@tbl\c!extras}\letvalue{\@@tbl\@@tbl\c!extras}\relax % new, see x-fo - \executeifdefined{\@@tblprefix\c!x#2}\donothing + \executeifdefined{\@@tblprefix\c!x\positivecol}\donothing +\executeifdefined{\@@tblprefix\c!x\negativecol}\donothing \getvalue{\@@tbl\@@tbl\c!extras}\letvalue{\@@tbl\@@tbl\c!extras}\relax % new, see x-fo - \executeifdefined{\@@tblprefix\c!x#2\c!y#1}\donothing + \executeifdefined{\@@tblprefix\c!x\positivecol\c!y\positiverow}\donothing +\executeifdefined{\@@tblprefix\c!x\negativecol\c!y\negativerow}\donothing \global\letcscsname\@@tblsplitafter\csname\@@tbl\@@tbl\c!after\endcsname \relax} +% we cannot use +n (checking on number/last/first would slow down too much) +% +% \setupTABLE[r] [2][color=red] +% \setupTABLE[r] [-2][color=red] +% \setupTABLE[c] [2][color=green] +% \setupTABLE[c] [-2][color=green] +% \setupTABLE[4] [4][color=blue] +% \setupTABLE[-4][-4][color=blue] +% +% \bTABLE +% \dorecurse{10}{\bTR \dorecurse{6}{\bTD xxx \eTD} \eTR} +% \eTABLE + \globallet\@@tblsplitafter\relax % split + page: @@ -289,11 +356,13 @@ {\getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,\c!n=\currentcol,\c!m=,#1]% % goto first cell % NEW, n/m=cellnumber \increment\currentcolpos - \doifvaluesomething{\@@tbl\c!n} + \doifelsevaluenothing{\@@tbl\c!n} + {\increment(\spnTBL,\tblnx)\relax} {\ifnum\getvalue{\@@tbl\c!n}=\currentcol\else \scratchcounter\getvalue{\@@tbl\c!n}% \advance\scratchcounter-\currentcol \advance\scratchcounter\minusone +\advance\scratchcounter-\spnTBL \ifnum\scratchcounter>\zerocount \expanded{\parseTD[\c!nx=\the\scratchcounter,\c!n=,\c!m=,*sq=\v!no][]}\eTD \fi @@ -304,6 +373,7 @@ \scratchcounter\getvalue{\@@tbl\c!m}% \advance\scratchcounter-\currentcol \advance\scratchcounter\minusone +% \advance\scratchcounter-\spnTBL \dorecurse\scratchcounter{\expanded{\parseTD[\c!n=,\c!m=][]}\eTD}% \getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1,\c!n=,\c!m=]% \fi}% @@ -356,6 +426,21 @@ %D \stopbuffer %D %D \typebuffer \getbuffer +%D +%D \startbuffer +%D \bTABLE[frame=on] +%D \bTR \bTH[nc=3] One \eTH \bTH[m=4] Four \eTH\eTR +%D \bTR \bTD a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR +%D \eTABLE +%D +%D \bTABLE[frame=on] +%D \bTR \bTH[nr=2] One \eTH \bTH[m=3] Three \eTH\eTR +%D \bTR \bTD[m=3] a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR +%D \bTR \bTD[m=3] a \eTD\bTD b \eTD\bTD c \eTD\bTD d \eTD\eTR +%D \eTABLE +%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} @@ -626,9 +711,14 @@ \def\spantblcol {\span} +\newcounter\rowTBL +\newcounter\colTBL +\newcounter\spnTBL + \def\begintblrow {\noalign - {\doglobal\increment\rowTBL + {\doglobal\increment \rowTBL + \doglobal\newcounter\spnTBL \doglobal\newcounter\colTBL}% \nexttblcol \kern\tbltblleftmargindistance @@ -663,6 +753,7 @@ \def\begintbl {\doglobal\newcounter\colTBL \doglobal\newcounter\rowTBL + \doglobal\newcounter\spnTBL \doglobal\decrement\rowTBL \tabskip\zeropoint \halign\bgroup @@ -687,6 +778,7 @@ \def\begTBL {\doglobal\newcounter\rowTBL \doglobal\newcounter\colTBL + \doglobal\newcounter\spnTBL \chardef\TBLpass\zerocount \tbltoks\emptytoks \appendtoks @@ -744,8 +836,11 @@ \fi \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 \checktblwidthsone % trial run \checktblwidthstwo % real run +\hsize\savedhsize % \let\handleTBLcell\dohandleTBLcellC \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}% @@ -855,11 +950,25 @@ \box\finaltblbox \afterTABLEbox} +% \def\splittblbox#1% +% {\ifinsidefloat +% \notsplittblbox{#1}% +% \else +% \executeifdefined{splittblbox\tbltblsplitmethod}\splittblboxa{#1}% +% \fi} + \def\splittblbox#1% - {\ifinsidefloat - \notsplittblbox{#1}% + {\ifinsidesplitfloat + \donetrue + \else\ifinsidefloat + \donefalse \else + \donetrue + \fi\fi + \ifdone \executeifdefined{splittblbox\tbltblsplitmethod}\splittblboxa{#1}% + \else + \notsplittblbox{#1}% \fi} \newbox\TABLEsplitbox % public, don't change @@ -1248,10 +1357,10 @@ \long\def\dohandleTBLcellA#1#2[#3]#4% {\setbox\scratchbox\hbox {\setupTBLcell{#1}{#2}% -\scratchdimen\tbltbldistance\relax -\ifdim\scratchdimen>\gettbldis{#2}\relax - \settbldis{#2}{\the\scratchdimen}% -\fi + \scratchdimen\tbltbldistance\relax + \ifdim\scratchdimen>\gettbldis{#2}\relax + \settbldis{#2}{\the\scratchdimen}% + \fi \localframed [\@@tbl\@@tbl] [#3,\c!background=,\c!frame=\v!off]% 25% faster @@ -1259,12 +1368,21 @@ \scratchdimen\gettblwid\colTBL\relax \ifdim\wd\scratchbox>\scratchdimen \ifsqueezeTBLspan -\doifnotvalue{\@@tbl*sq}\v!no{% +% \doifinset\tbltblwidth{\v!fit,\v!fixed,\v!broad,\v!local}{% +% \ifnum0\number\gettblcol{#1}{#2}>1\relax \settblspn\colTBL \fi +% }% +\ifautosqueezeTBLspan +\doifinsetelse\tbltblwidth{\v!fit,\v!fixed,\v!broad,\v!local} + \donetrue \donefalse +\else + \donetrue +\fi +\ifdone \ifnum0\number\gettblcol{#1}{#2}>1\relax \settblspn\colTBL \fi -}% +\fi \fi \doifelsetblspn\colTBL - \donothing{\settblwid\colTBL{\the\wd\scratchbox}}% auto set + \donothing{\ifdim\gettblwid\colTBL<\wd\scratchbox\settblwid\colTBL{\the\wd\scratchbox}\fi}% auto set \fi \let\rowTBLx\rowTBL\increment\rowTBLx \scratchdimen\gettblhei\rowTBLx\relax |