summaryrefslogtreecommitdiff
path: root/tex
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2006-07-13 22:26:00 +0200
committerHans Hagen <pragma@wxs.nl>2006-07-13 22:26:00 +0200
commitcb58eea8a8460f4288c8ba9279bcd1a4d9333f74 (patch)
treea935db5f4be07adc3ab7ff0a6838505030a72fc4 /tex
parentf9420a5dde4d6646f2e117813bd85e0bfc701d7d (diff)
downloadcontext-cb58eea8a8460f4288c8ba9279bcd1a4d9333f74.tar.gz
stable 2006.07.13 22:26
Diffstat (limited to 'tex')
-rw-r--r--tex/context/base/colo-ini.tex23
-rw-r--r--tex/context/base/cont-new.tex71
-rw-r--r--tex/context/base/context.tex7
-rw-r--r--tex/context/base/core-con.tex15
-rw-r--r--tex/context/base/core-des.tex15
-rw-r--r--tex/context/base/core-lst.tex2
-rw-r--r--tex/context/base/core-mak.tex18
-rw-r--r--tex/context/base/core-mat.tex12
-rw-r--r--tex/context/base/core-ntb.tex444
-rw-r--r--tex/context/base/core-ref.tex14
-rw-r--r--tex/context/base/core-reg.tex18
-rw-r--r--tex/context/base/core-rul.tex75
-rw-r--r--tex/context/base/core-sec.tex172
-rw-r--r--tex/context/base/core-spa.tex115
-rw-r--r--tex/context/base/core-tab.tex379
-rw-r--r--tex/context/base/core-tbl.tex169
-rw-r--r--tex/context/base/core-tsp.tex451
-rw-r--r--tex/context/base/core-uti.tex7
-rw-r--r--tex/context/base/font-ini.tex78
-rw-r--r--tex/context/base/lang-all.xml2
-rw-r--r--tex/context/base/lang-ini.tex2
-rw-r--r--tex/context/base/lang-ita.tex2
-rw-r--r--tex/context/base/m-database.tex286
-rw-r--r--tex/context/base/m-r.tex83
-rw-r--r--tex/context/base/m-streams.tex26
-rw-r--r--tex/context/base/m-tryout.tex4
-rw-r--r--tex/context/base/m-units.tex2
-rw-r--r--tex/context/base/math-cow.tex30
-rw-r--r--tex/context/base/math-eul.tex106
-rw-r--r--tex/context/base/math-ext.tex199
-rw-r--r--tex/context/base/meta-ini.tex51
-rw-r--r--tex/context/base/meta-pdf.tex197
-rw-r--r--tex/context/base/meta-tex.tex205
-rw-r--r--tex/context/base/mult-con.tex10
-rw-r--r--tex/context/base/mult-ini.tex16
-rw-r--r--tex/context/base/page-bck.tex24
-rw-r--r--tex/context/base/page-flt.tex177
-rw-r--r--tex/context/base/page-imp.tex2
-rw-r--r--tex/context/base/page-ini.tex13
-rw-r--r--tex/context/base/page-lay.tex16
-rw-r--r--tex/context/base/page-log.tex2
-rw-r--r--tex/context/base/page-lyr.tex2
-rw-r--r--tex/context/base/page-mak.tex11
-rw-r--r--tex/context/base/page-mar.tex2
-rw-r--r--tex/context/base/page-num.tex18
-rw-r--r--tex/context/base/page-one.tex106
-rw-r--r--tex/context/base/page-run.tex2
-rw-r--r--tex/context/base/page-set.tex2
-rw-r--r--tex/context/base/page-spr.tex2
-rw-r--r--tex/context/base/s-abr-01.tex6
-rw-r--r--tex/context/base/s-pre-30.tex13
-rw-r--r--tex/context/base/s-pre-50.tex28
-rw-r--r--tex/context/base/supp-lan.tex34
-rw-r--r--tex/context/base/supp-mis.tex38
-rw-r--r--tex/context/base/supp-mps.tex26
-rw-r--r--tex/context/base/symb-cow.tex104
-rw-r--r--tex/context/base/syst-gen.tex8
-rw-r--r--tex/context/base/type-cow.tex83
-rw-r--r--tex/context/base/type-gyr.tex36
-rw-r--r--tex/context/base/type-syn.tex20
-rw-r--r--tex/context/base/verb-c.tex11
-rw-r--r--tex/context/base/x-fe.tex2
-rw-r--r--tex/context/base/x-set-11.tex13
-rw-r--r--tex/context/base/x-set-12.tex57
-rw-r--r--tex/context/base/xtag-run.tex4
-rw-r--r--tex/context/bib/bibl-ams.tex2
-rw-r--r--tex/context/bib/bibl-apa-de.tex2
-rw-r--r--tex/context/bib/bibl-apa-fr.tex2
-rw-r--r--tex/context/bib/bibl-apa.tex5
-rw-r--r--tex/context/bib/bibl-aps.tex2
-rw-r--r--tex/context/bib/bibl-num-fr.tex2
-rw-r--r--tex/context/bib/bibl-num.tex8
-rw-r--r--tex/context/bib/bibl-ssa.tex2
-rw-r--r--tex/context/bib/t-bib.tex638
-rw-r--r--tex/context/bib/t-bibltx.tex75
-rw-r--r--tex/context/interface/cont-cz.xml13
-rw-r--r--tex/context/interface/cont-de.xml13
-rw-r--r--tex/context/interface/cont-en.xml13
-rw-r--r--tex/context/interface/cont-fr.xml13
-rw-r--r--tex/context/interface/cont-it.xml13
-rw-r--r--tex/context/interface/cont-nl.xml13
-rw-r--r--tex/context/interface/cont-ro.xml13
-rw-r--r--tex/context/interface/keys-cz.xml3
-rw-r--r--tex/context/interface/keys-de.xml3
-rw-r--r--tex/context/interface/keys-en.xml3
-rw-r--r--tex/context/interface/keys-fr.xml3
-rw-r--r--tex/context/interface/keys-it.xml3
-rw-r--r--tex/context/interface/keys-nl.xml3
-rw-r--r--tex/context/interface/keys-ro.xml3
-rw-r--r--tex/context/interface/t-bib.xml13
90 files changed, 3407 insertions, 1624 deletions
diff --git a/tex/context/base/colo-ini.tex b/tex/context/base/colo-ini.tex
index 007629620..70e19b914 100644
--- a/tex/context/base/colo-ini.tex
+++ b/tex/context/base/colo-ini.tex
@@ -1360,19 +1360,22 @@
\ifx\initializemaintextcolor\undefined
-% \def\initializemaintextcolor
-% {\doifsomething\@@cltekstkleur
-% {\appendtoks\starttextcolor[\@@cltekstkleur]\to\everystarttext
-% \appendtoks\stoptextcolor \to\everystoptext
-% \let\initializemaintextcolor\relax}}
-
- % global ?
+ \let\@@clprevcolor\empty
\def\initializemaintextcolor
- {\doifelsenothing\@@cltextcolor
+ {% saveguard for setting text color to empty after
+ % it has been set
+ \doifnothing\@@cltextcolor
+ {\ifx\@@clprevcolor\empty\else
+ \let\@@cltextcolor\defaulttextcolor
+ \fi}%
+ \doifelsenothing\@@cltextcolor
{\let\maintextcolor\empty}
- {\let\maintextcolor\@@themaintextcolor
- \definecolor[\@@themaintextcolor][\@@cltextcolor]%
+ {\edef\@@clprevcolor{\@@cltextcolor}%
+ \let\maintextcolor\@@themaintextcolor
+ \doifelsenothing\@@cltextcolor % another saveguard
+ {\definecolor[\@@themaintextcolor][\defaulttextcolor]}%
+ {\definecolor[\@@themaintextcolor][\@@cltextcolor]}%
\doinitializemaintextcolor}}
\def\doinitializemaintextcolor
diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex
index 69ebcd593..c41d99953 100644
--- a/tex/context/base/cont-new.tex
+++ b/tex/context/base/cont-new.tex
@@ -11,7 +11,7 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\newcontextversion{2006.06.09 13:05}
+\newcontextversion{2006.07.13 22:26}
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks, patches, extensions and new
@@ -24,6 +24,9 @@
\unprotect
+% \setuplabeltext[\s!itemcount1={{I(},{)}}]
+% \def\labeledcountervalue#1{\labeltexts{#1}{\countervalue{#1}}}
+
\writestatus{\m!systems}{beware: some patches loaded from cont-new.tex}
%D A nice example of a plugin:
@@ -849,11 +852,65 @@
{\expanded{\everyhbox{\the\everyhbox\noexpand\fastenableencoding{\currentencoding}}}%
\def\dealwithmathtextencoding{\let\characterencoding\nocharacterencoding}%
\dealwithmathtextencoding}
-
\appendtoks
\dealwithmathtextencoding
\to \everymathematics
+\def\dohandlemathtoken#1%
+ {\csname
+ \ifmmode
+ \ifcsname\@mt@\mathcollection:\outerencoding#1\endcsname
+ \@mt@\mathcollection:\outerencoding
+ \else\ifcsname\@mt@\mathcollection#1\endcsname
+ \@mt@\mathcollection
+ \else\ifcsname\@mt@\nomathcollection#1\endcsname
+ \@mt@\nomathcollection
+ \else\ifcsname\characterencoding#1\endcsname
+ \characterencoding
+ \else
+ \nocharacterencoding
+ \fi\fi\fi\fi
+ \else
+ \ifcsname\characterencoding#1\endcsname
+ \characterencoding
+ \else\ifcsname\nocharacterencoding#1\endcsname
+ \nocharacterencoding
+ \else\ifcsname\@mt@\mathcollection:\outerencoding#1\endcsname
+ \@mt@\mathcollection:\outerencoding
+ \else\ifcsname\@mt@\mathcollection#1\endcsname
+ \strippedcsname\mathematics\expandafter\endcsname\csname\@mt@\mathcollection
+ \else\ifcsname\@mt@\nomathcollection#1\endcsname
+ \strippedcsname\mathematics\expandafter\endcsname\csname\@mt@\nomathcollection
+ \else
+ \nocharacterencoding
+ \fi\fi\fi\fi\fi
+ \fi
+ #1\endcsname}
+
+\let\dohandlecommand\dohandlemathtoken
+
+\let\outerencoding\empty
+
+\def\checkoutermathencoding
+ {\ifx\outerencoding\empty
+ \ifx\outerencoding\s!default\else
+ \edef\outerencoding{\currentencoding}%
+ \fi
+ \fi}
+
+\prependtoks
+ \checkoutermathencoding
+\to \everymathematics
+
+% \startmathcollection[euler:texnansi]
+% \definemathsymbol [breve] [accent] [tf] ["15]
+% \stopmathcollection
+% \startmathcollection[euler:ec]
+% \definemathsymbol [breve] [accent] [tf] ["08]
+% \stopmathcollection
+%
+% $\breve e$
+
% \separatestring123 456\to\test [\test]
% \def\separatestring#1\to#2%
@@ -1558,6 +1615,16 @@
% \headsym{xx} test \par test
% \stopitemize
+% \def\removeunwantedspaces
+% {\ifhmode
+% \doloop{\ifdim\lastskip>\zeropoint\unskip\else\exitloop\fi}%
+% \fi}
+
+\def\removeunwantedspaces
+ {\ifhmode \ifdim\lastskip>\zeropoint
+ \unskip \@EAEAEA\removeunwantedspaces
+ \fi \fi}
+
% wait till bugfix in etex is widespead
%
% \beginETEX \lastnodetype
diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex
index 8deeb434c..2780c21b8 100644
--- a/tex/context/base/context.tex
+++ b/tex/context/base/context.tex
@@ -31,7 +31,7 @@
%D 2004.8.30 the low level interface is english. Watch out and adapt
%D your styles an modules.
-\def\contextversion{2006.06.09 13:05}
+\def\contextversion{2006.07.13 22:26}
%D For those who want to use this:
@@ -242,13 +242,14 @@
\input core-vis.tex
%input core-con.tex
\input core-rul.tex
+\input core-num.tex
+\input core-tsp.tex % splitter
\input core-tab.tex
\input core-nav.tex
\input core-ref.tex
\input core-obj.tex
\input core-buf.tex
\input core-lst.tex
-\input core-num.tex
\input core-itm.tex
\input core-des.tex
\input core-mat.tex
@@ -334,12 +335,14 @@
\input type-ini.tex
\input type-def.tex
+\input meta-tex.tex % we need fonts
\input prop-ini.tex
\input prop-lay.tex % needs core-ref.tex
\input prop-mis.tex
\input math-ini.tex % needs enco-ini.tex
+\input math-ext.tex
%D Now we're ready for more core modules.
diff --git a/tex/context/base/core-con.tex b/tex/context/base/core-con.tex
index ca2bb7a86..98837ec6d 100644
--- a/tex/context/base/core-con.tex
+++ b/tex/context/base/core-con.tex
@@ -20,6 +20,21 @@
%D one and a core one, but to keep things simple as well as
%D preserve the overview, I decided against splitting.
+\let\spr\firstofoneargument % separator
+\let\stp\firstofoneargument % stopper
+
+% cleaner, some day:
+%
+% \def\isolateseparators % etex only, even works with list separator overloading
+% {\unexpanded\def\spr##1{{##1}}%
+% \unexpanded\def\stp##1{{##1}}}
+
+% needed for arab :
+
+\def\isolateseparators % even works with list separator overloading
+ {\def\spr##1{{##1}}%
+ \def\stp##1{{##1}}}
+
%D \macros
%D {numbers}
%D
diff --git a/tex/context/base/core-des.tex b/tex/context/base/core-des.tex
index 2f5dafd31..195bb01b7 100644
--- a/tex/context/base/core-des.tex
+++ b/tex/context/base/core-des.tex
@@ -508,23 +508,23 @@
\setvalue{showdn\v!sub\c!number}%
{\getvalue{showdn\c!number}%
- \descriptionparameter\c!separator
+ \spr{\descriptionparameter\c!separator}%
\convertednumber[\v!sub\currentdescriptionnumber]}
\setvalue{showdn\v!sub\v!sub\c!number}%
{\getvalue{showdn\v!sub\c!number}%
- \descriptionparameter\c!separator
+ \spr{\descriptionparameter\c!separator}%
\convertednumber[\v!sub\v!sub\currentdescriptionnumber]}
\setvalue{showdn\v!sub\v!sub\v!sub\c!number}%
{\getvalue{showdn\v!sub\v!sub\c!number}%
- \descriptionparameter\c!separator
+ \spr{\descriptionparameter\c!separator}%
\convertednumber[\v!sub\v!sub\v!sub\currentdescriptionnumber]}
\def\domakednnumber
{\descriptionparameter\c!left
\strut\doshowdnnumber
- \descriptionparameter\c!stopper
+ % \descriptionparameter\c!stopper
\descriptionparameter\c!right}
\setvalue{\??dd\s!set\v!sub\s!sub\s!sub\c!number}#1%
@@ -706,7 +706,8 @@
{\getvalue{\??ds#1\c!width}}
{\doattributes
{\??ds#1}\c!headstyle\c!headcolor
- {\getvalue{\??ds#1\c!sample}\getvalue{\??ds#1\c!separator}}}
+ {\getvalue{\??ds#1\c!sample}%
+ \spr{\getvalue{\??ds#1\c!separator}}}}
{\getvalue{\??ds#1\c!distance}}%
\advance\!!widtha \getvalue{\??ds#1\c!distance}%
\setbox2\hbox to \!!widtha
@@ -715,7 +716,7 @@
{\strut
\getvalue{\??ds#1\c!text}%
\hss
- \getvalue{\??ds#1\c!separator}%
+ \spr{\getvalue{\??ds#1\c!separator}}%
\hskip\getvalue{\??ds#1\c!distance}}}%
\parindent\zeropoint
\hskip#2\!!widtha\indent\box2%
@@ -811,7 +812,7 @@
\c!conversion=, % to be upward compatible
\c!way=\v!by\v!text,
\c!sectionnumber=\v!yes,
- \c!separator=.,
+ \c!separator=\@@koseparator, % per 2006.06.23, was .
\c!stopper=,
\c!number=,
\c!command=]
diff --git a/tex/context/base/core-lst.tex b/tex/context/base/core-lst.tex
index 74a6e34d7..2d45282c2 100644
--- a/tex/context/base/core-lst.tex
+++ b/tex/context/base/core-lst.tex
@@ -404,7 +404,7 @@
{\let\splitlistsymbol\currentlistnumber}}% geen \edef ivm enz
\doif{\listparameter\c!label}\v!yes{\leftlabeltext\currentlist}%
\strut
- \def\numberseparator{\listparameter\c!separator}%
+ \def\numberseparator{\listparameter\c!separator}% overloaded, todo
\@EA\dohandlelistnumber\@EA{\splitlistsymbol}%
\listparameter\c!stopper
\doif{\listparameter\c!label}\v!yes{\rightlabeltext\currentlist}}
diff --git a/tex/context/base/core-mak.tex b/tex/context/base/core-mak.tex
index 68315ea57..761f83156 100644
--- a/tex/context/base/core-mak.tex
+++ b/tex/context/base/core-mak.tex
@@ -48,24 +48,6 @@
\def\doplacement
{\dodoubleempty\dodoplacement}
-% \def\dodoplacement[#1][#2]% correctie moet mooier
-% {\bgroup
-% \dowithnextbox
-% {\setlocalhsize
-% \getparameters[#1][#2]%
-% \getvalue{#1\c!voor}%
-% \doifvalue{#1\c!regelcorrectie}\v!aan \startbaselinecorrection
-% \doifinset{\getvalue{#1\c!marge}}{\v!standaard,\v!ja}\noindent
-% \hbox to \localhsize
-% {\getvalue{#1\c!links}%
-% \flushnextbox
-% \getvalue{#1\c!rechts}}%
-% \doifvalue{#1\c!dieptecorrectie}\v!aan\baselinecorrection
-% \doifvalue{#1\c!regelcorrectie }\v!aan\stopbaselinecorrection
-% \getvalue{#1\c!na}%
-% \egroup}
-% \vbox}
-
\def\dodoplacement[#1][#2]% correctie moet mooier
{\bgroup
\dowithnextboxcontent
diff --git a/tex/context/base/core-mat.tex b/tex/context/base/core-mat.tex
index b80c9cc09..2170c44c7 100644
--- a/tex/context/base/core-mat.tex
+++ b/tex/context/base/core-mat.tex
@@ -155,7 +155,8 @@
[\c!text=\v!formula,
\c!way=\@@fmway,
\c!blockway=\@@fmblockway,
- \c!location=\v!intext]
+ \c!location=\v!intext,
+ \c!conversion=\@@fmconversion]
\def\setupformulas
{\dodoubleargument\getparameters[\??fm]}
@@ -244,6 +245,7 @@
[\c!way=\@@nrway,
\c!blockway=,
\c!sectionnumber=\@@nrsectionnumber,
+ \c!conversion=\v!numbers,
\c!location=\v!right,
\c!left=(,
\c!right=),
@@ -441,9 +443,9 @@
%\forgetall % otherwise backgrounds fail
\ifdim\lastskip<\zeropoint\else
\par
- \ifvmode \ifdim\parskip>\zeropoint\relax
- \whitespace \vskip-\parskip % kind of forces and cancels again
- \fi \fi
+ \ifvmode \ifdim\parskip>\zeropoint\relax
+ \whitespace \vskip-\parskip % kind of forces and cancels again
+ \fi \fi
\fi
\doif\displaygridcorrection{-\v!top}{\kern-\strutht}% new, currently only option/default
\beforedisplayspace
@@ -700,7 +702,7 @@
\def\stopformula {\normalstopformula\egroup$\hss}%
#1%
\egroup
- \stopdisplaymath
+ \stopdisplaymath
\egroup}
\def\dispplaceformula[#1]#2$$#3$$%
diff --git a/tex/context/base/core-ntb.tex b/tex/context/base/core-ntb.tex
index 2e424c2b7..f50d785f8 100644
--- a/tex/context/base/core-ntb.tex
+++ b/tex/context/base/core-ntb.tex
@@ -61,14 +61,41 @@
%D However, the next alternative also takes care of preceding
%D and following white space.
+% \def\bTBLCELL % why not \doinhibitblank
+% {\inhibitblank\doconvertfont\tbltblstyle\empty\everypar{\delayedbegstrut}}
+
+% \def\eTBLCELL
+% {\ifhmode
+% \delayedendstrut
+% \par % added 13/4/2006
+% \else
+% \par
+% \ifdim\prevdepth<\zeropoint % =-1000pt ?
+% \vskip-\strutdp
+% \else
+% \removebottomthings
+% \fi
+% \fi}
+
+%D \startbuffer
+%D \bTABLE[left={(},right={)},top=\startnarrower,bottom=\stopnarrower]
+%D \bTR \bTD something \eTD \eTR
+%D \eTABLE
+%D
+%D \typebuffer \getbuffer
+
\def\bTBLCELL % why not \doinhibitblank
- {\inhibitblank\doconvertfont\tbltblstyle\empty\everypar{\delayedbegstrut}}
+ {\inhibitblank
+ \doconvertfont\tbltblstyle\empty
+ \everypar{\tbltblleft\delayedbegstrut}}
\def\eTBLCELL
{\ifhmode
\delayedendstrut
+ \tbltblright
\par % added 13/4/2006
\else
+ % not sure yet:\tbltblright
\par
\ifdim\prevdepth<\zeropoint % =-1000pt ?
\vskip-\strutdp
@@ -226,57 +253,15 @@
\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
-\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}%
+ \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}%
@@ -310,13 +295,13 @@
\executeifdefined{\@@tblprefix\v!header\positivecol}\donothing
\fi
\executeifdefined{\@@tblprefix\c!y\positiverow}\donothing
-\executeifdefined{\@@tblprefix\c!y\negativerow}\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\positivecol}\donothing
-\executeifdefined{\@@tblprefix\c!x\negativecol}\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\positivecol\c!y\positiverow}\donothing
-\executeifdefined{\@@tblprefix\c!x\negativecol\c!y\negativerow}\donothing
+ \executeifdefined{\@@tblprefix\c!x\negativecol\c!y\negativerow}\donothing
\global\letcscsname\@@tblsplitafter\csname\@@tbl\@@tbl\c!after\endcsname
\relax}
@@ -543,7 +528,8 @@
\processaction
[\tbltblsplit]
[ \v!yes=>\enableTBLbreaktrue,
- \v!repeat=>\enableTBLbreaktrue\multipleTBLheadstrue]%
+ \v!repeat=>\enableTBLbreaktrue\multipleTBLheadstrue,
+ \v!auto=>\ifinsidesplitfloat\enableTBLbreaktrue\fi]
\processaction
[\tbltblheader]
[\v!repeat=>\multipleTBLheadstrue]%
@@ -966,97 +952,100 @@
\donetrue
\fi\fi
\ifdone
- \executeifdefined{splittblbox\tbltblsplitmethod}\splittblboxa{#1}%
+ \executeifdefined{dosplittblbox\tbltblsplitmethod}\dosplittblbox{#1}%
\else
\notsplittblbox{#1}%
\fi}
\newbox\TABLEsplitbox % public, don't change
-% todo: mode: first|next (of niets)
+\let\extratblsplitheight\zeropoint % additional space taken by before/afterTABLEsplitbox
-\def\splittblboxa#1% spacing between rows gets lost in split
- {\setbox\TABLEsplitbox\vbox{#1}%
- \setbox8\vbox{\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}}%
- \ifmultipleTBLheads
- \setbox2\vbox{}%
- \setbox4\vbox{}%
- \dorecurse\noftblheadlines
- {\setbox0\vsplit\TABLEsplitbox to \lineheight
- \setbox2\vbox{\unvcopy2\unvcopy0}}%
- \dorecurse\noftblnextlines
- {\setbox0\vsplit\TABLEsplitbox to \lineheight
- \setbox4\vbox{\unvcopy4\unvcopy0}}%
- \ifcase\noftblheadlines\else
- \ifdim\pagegoal<\maxdimen
- \dimen0\ht2
- \advance\dimen0\ht8
- \advance\dimen0\pagetotal\relax
- \ifdim\dimen0>\pagegoal
- \bgroup\page\egroup % make sure that local vars are kept
- \fi
- \fi
- \unvcopy2
- \ifcase\noftblnextlines\else
- \setbox2\box4
- \fi
- \fi
- \fi
- \donefalse
- \!!doneafalse
- \doloop
- {\setbox0\vsplit\TABLEsplitbox to \lineheight
- \if!!donea
- \ifdim\pagegoal<\maxdimen
- \setbox0\vbox{\unvbox0}%
- \ifdim\ht0>\zeropoint
- \dimen0\ht0
- \advance\dimen0\ht8
- \advance\dimen0\pagetotal\relax
- \ifdim\dimen0>\pagegoal
- \bgroup\page\egroup % make sure that local vars are kept
- \ifmultipleTBLheads
- \ifcase\noftblheadlines\else\unvcopy2\fi
- \fi
- \fi
- \fi
- \fi
- \fi
- \!!doneatrue
- \ifdone
- \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
- \fi
- \unvbox0
- %\allowbreak
- \bgroup
- % todo: what if tblnextlines ?
- \scratchcounter\recurselevel
- \ifmultipleTBLheads
- \advance\scratchcounter\noftblheadlines
- \fi
- \setupTBLcell{\number\scratchcounter}1
- \ifx\@@tblsplitafter\relax
- \allowbreak
- \else
- \doifelsenothing\@@tblsplitafter
- \allowbreak
- {\scratchcounter\realpageno
- \@@tblsplitafter
- \ifmultipleTBLheads
- \ifnum\scratchcounter<\realpageno
- \ifcase\noftblheadlines\else\unvcopy2\fi
- \fi
- \fi}%
- \fi
- \egroup
- \ifvoid\TABLEsplitbox \exitloop \else \donetrue \fi}}
+% todo: mode: first|next (of niets)
-\let\extratblsplitheight\zeropoint % additional space taken by before/afterTABLEsplitbox
+% \def\dosplittblboxa#1% spacing between rows gets lost in split
+% {\setbox\TABLEsplitbox\vbox{#1}%
+% \setbox8\vbox{\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}}%
+% \ifmultipleTBLheads
+% \setbox2\vbox{}%
+% \setbox4\vbox{}%
+% \dorecurse\noftblheadlines
+% {\setbox0\vsplit\TABLEsplitbox to \lineheight
+% \setbox2\vbox{\unvcopy2\unvcopy0}}%
+% \dorecurse\noftblnextlines
+% {\setbox0\vsplit\TABLEsplitbox to \lineheight
+% \setbox4\vbox{\unvcopy4\unvcopy0}}%
+% \ifcase\noftblheadlines\else
+% \ifdim\pagegoal<\maxdimen
+% \dimen0\ht2
+% \advance\dimen0\ht8
+% \advance\dimen0\pagetotal\relax
+% \ifdim\dimen0>\pagegoal
+% \bgroup\page\egroup % make sure that local vars are kept
+% \fi
+% \fi
+% \unvcopy2
+% \ifcase\noftblnextlines\else
+% \setbox2\box4
+% \fi
+% \fi
+% \fi
+% \donefalse
+% \!!doneafalse
+% \doloop
+% {\setbox0\vsplit\TABLEsplitbox to \lineheight
+% \if!!donea
+% \ifdim\pagegoal<\maxdimen
+% \setbox0\vbox{\unvbox0}%
+% \ifdim\ht0>\zeropoint
+% \dimen0\ht0
+% \advance\dimen0\ht8
+% \advance\dimen0\pagetotal\relax
+% \ifdim\dimen0>\pagegoal
+% \bgroup\page\egroup % make sure that local vars are kept
+% \ifmultipleTBLheads
+% \ifcase\noftblheadlines\else\unvcopy2\fi
+% \fi
+% \fi
+% \fi
+% \fi
+% \fi
+% \!!doneatrue
+% \ifdone
+% \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
+% \fi
+% \unvbox0
+% %\allowbreak
+% \bgroup
+% % todo: what if tblnextlines ?
+% \scratchcounter\recurselevel
+% \ifmultipleTBLheads
+% \advance\scratchcounter\noftblheadlines
+% \fi
+% \setupTBLcell{\number\scratchcounter}1
+% \ifx\@@tblsplitafter\relax
+% \allowbreak
+% \else
+% \doifelsenothing\@@tblsplitafter
+% \allowbreak
+% {\scratchcounter\realpageno
+% \@@tblsplitafter
+% \ifmultipleTBLheads
+% \ifnum\scratchcounter<\realpageno
+% \ifcase\noftblheadlines\else\unvcopy2\fi
+% \fi
+% \fi}%
+% \fi
+% \egroup
+% \ifvoid\TABLEsplitbox \exitloop \else \donetrue \fi}}
-% \def\splittblboxb#1%
-% {\testpage[2]% quite save since a row is > 1 lineheight and we don't want one-liners
+% \def\dosplittblboxb#1%
+% {\scratchdimen-\extratblsplitheight
+% \advance\scratchdimen-\tbltblsplitoffset
+% \expanded{\testpage[2][\the\scratchdimen]}% quite save since a row is > 1 lineheight and we don't want one-liners
% \setbox\TABLEsplitbox\vbox{#1}%
% \setbox8\vbox{\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}}%
+% \dimen8\ht8\advance\dimen8\dp8
% \ifmultipleTBLheads
% \setbox2\vbox{}%
% \setbox4\vbox{}%
@@ -1072,33 +1061,57 @@
% {\ifdim\pagegoal<\maxdimen
% \scratchdimen\pagegoal
% \advance\scratchdimen-\pagetotal
+% \!!donecfalse
% \else
% \scratchdimen\textheight
+% \!!donectrue
% \fi
-% \ifmultipleTBLheads
-% \ifcase\noftblheadlines\else
-% \advance\scratchdimen-\ht2
-% \fi
-% \fi
-% \advance\scratchdimen-\ht8
-% \getnoflines\scratchdimen
-% \ifdim\noflines\lineheight>\scratchdimen
-% \advance\scratchdimen-\lineheight
-% \fi
+% \advance\scratchdimen-\dimen8
% \advance\scratchdimen-\extratblsplitheight
+% \advance\scratchdimen-\tbltblsplitoffset
% \setbox\finaltblbox\vbox
% {\ifmultipleTBLheads
% \ifcase\noftblheadlines\else
-% \unvcopy2
-% \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
+% \unvcopy2 \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
% \fi
-% \fi
-% \setbox0\vsplit\TABLEsplitbox to\scratchdimen
-% \unvbox0}%
+% \fi}%
% \if!!donea\else\ifcase\noftblnextlines\else
% \setbox2\box4
% \fi\fi
% \!!doneatrue
+% % alternatively we could use a kind of balancing like splitter
+% % first to scratchdimen and then smaller etc; more code and copy -)
+% \!!counta\zerocount
+% \doloop
+% {\setbox\scratchbox\vsplit\TABLEsplitbox to \onepoint
+% \setbox\scratchbox\vbox{\unvbox\scratchbox}%
+% \bgroup
+% \advance\scratchdimen-\ht\scratchbox
+% \advance\scratchdimen-\dp\scratchbox
+% \advance\scratchdimen-\ht\finaltblbox
+% \advance\scratchdimen-\dp\finaltblbox\relax
+% \ifdim\scratchdimen>\zeropoint
+% \egroup
+% \setbox\finaltblbox\vbox
+% {\unvbox\finaltblbox
+% \unvbox\scratchbox}%
+% \ifvoid\TABLEsplitbox \exitloop \fi
+% \else\if!!donec
+% % we have text height available, but the (one) cell is too
+% % large to fit, so, in order to avoid loops/deadcycles we do:
+% \egroup
+% \setbox\finaltblbox\vbox
+% {\unvbox\finaltblbox
+% \unvbox\scratchbox}%
+% \exitloop
+% \else
+% \egroup
+% \setbox\TABLEsplitbox\vbox
+% {\unvbox\scratchbox
+% \ifvoid\TABLEsplitbox\else\unvbox\TABLEsplitbox\allowbreak\fi}%
+% \exitloop
+% \fi\fi}%
+% %
% \postprocessTABLEsplitbox\finaltblbox
% \ifvoid\TABLEsplitbox
% \beforeTABLEsplitbox
@@ -1107,116 +1120,42 @@
% \@@tblsplitafter
% \exitloop
% \else
-% % hack
-% \scratchdimen\pagegoal
-% \ifdim\scratchdimen<\maxdimen
+% % hack
+% \ifdim\pagegoal<\maxdimen
+% \scratchdimen\pagegoal
% \advance\scratchdimen \lineheight
% \global\pagegoal\scratchdimen
% \fi
% % brrr
-% \beforeTABLEsplitbox
-% \box\finaltblbox
-% \afterTABLEsplitbox
-% \@@tblsplitafter
+% \ifdim\ht\finaltblbox>\zeropoint
+% \beforeTABLEsplitbox
+% \box\finaltblbox
+% \afterTABLEsplitbox
+% \@@tblsplitafter
+% \fi
% \page
% \fi}}
-\def\splittblboxb#1%
- {\scratchdimen-\extratblsplitheight
- \advance\scratchdimen-\tbltblsplitoffset
- \expanded{\testpage[2][\the\scratchdimen]}% quite save since a row is > 1 lineheight and we don't want one-liners
- \setbox\TABLEsplitbox\vbox{#1}%
- \setbox8\vbox{\doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}}%
- \dimen8\ht8\advance\dimen8\dp8
+\def\dosplittblbox#1%
+ {\resettsplit
+ \def\tsplitminimumfreelines{2}%
+ \def\tsplitminimumfreespace{\dimexpr\extratblsplitheight+\tbltblsplitoffset\relax}%
+ \def\tsplitbeforeresult {\beforeTABLEsplitbox}%
+ \def\tsplitafterresult {\afterTABLEsplitbox}%
+ \def\tsplitafter {\@@tblsplitafter}%
+ \setbox\tsplitcontent\vbox{#1}% \the\tbltoks
\ifmultipleTBLheads
- \setbox2\vbox{}%
- \setbox4\vbox{}%
\dorecurse\noftblheadlines
- {\setbox0\vsplit\TABLEsplitbox to \lineheight
- \setbox2\vbox{\unvcopy2\unvcopy0}}%
+ {\setbox\scratchbox\vsplit\tsplitcontent to \lineheight
+ \setbox\tsplithead\vbox{\unvcopy\tsplithead\unvcopy\scratchbox}}%
\dorecurse\noftblnextlines
- {\setbox0\vsplit\TABLEsplitbox to \lineheight
- \setbox4\vbox{\unvcopy4\unvcopy0}}%
+ {\setbox\scratchbox\vsplit\tsplitcontent to \lineheight
+ \setbox\tsplitnext\vbox{\unvcopy\tsplitnext\unvcopy\scratchbox}}%
\fi
- \!!doneafalse
- \doloop
- {\ifdim\pagegoal<\maxdimen
- \scratchdimen\pagegoal
- \advance\scratchdimen-\pagetotal
- \!!donecfalse
- \else
- \scratchdimen\textheight
- \!!donectrue
- \fi
- \advance\scratchdimen-\dimen8
- \advance\scratchdimen-\extratblsplitheight
- \advance\scratchdimen-\tbltblsplitoffset
- \setbox\finaltblbox\vbox
- {\ifmultipleTBLheads
- \ifcase\noftblheadlines\else
- \unvcopy2 \doifsomething\tbltblspaceinbetween{\blank[\tbltblspaceinbetween]}%
- \fi
- \fi}%
- \if!!donea\else\ifcase\noftblnextlines\else
- \setbox2\box4
- \fi\fi
- \!!doneatrue
- % alternatively we could use a kind of balancing like splitter
- % first to scratchdimen and then smaller etc; more code and copy -)
- \!!counta\zerocount
- \doloop
- {\setbox\scratchbox\vsplit\TABLEsplitbox to \onepoint
- \setbox\scratchbox\vbox{\unvbox\scratchbox}%
- \bgroup
- \advance\scratchdimen-\ht\scratchbox
- \advance\scratchdimen-\dp\scratchbox
- \advance\scratchdimen-\ht\finaltblbox
- \advance\scratchdimen-\dp\finaltblbox\relax
- \ifdim\scratchdimen>\zeropoint
- \egroup
- \setbox\finaltblbox\vbox
- {\unvbox\finaltblbox
- \unvbox\scratchbox}%
- \ifvoid\TABLEsplitbox \exitloop \fi
- \else\if!!donec
- % we have text height available, but the (one) cell is too
- % large to fit, so, in order to avoid loops/deadcycles we do:
- \egroup
- \setbox\finaltblbox\vbox
- {\unvbox\finaltblbox
- \unvbox\scratchbox}%
- \exitloop
- \else
- \egroup
- \setbox\TABLEsplitbox\vbox
- {\unvbox\scratchbox
- \ifvoid\TABLEsplitbox\else\unvbox\TABLEsplitbox\allowbreak\fi}%
- \exitloop
- \fi\fi}%
- %
- \postprocessTABLEsplitbox\finaltblbox
- \ifvoid\TABLEsplitbox
- \beforeTABLEsplitbox
- \box\finaltblbox
- \afterTABLEsplitbox
- \@@tblsplitafter
- \exitloop
- \else
- % hack
- \ifdim\pagegoal<\maxdimen
- \scratchdimen\pagegoal
- \advance\scratchdimen \lineheight
- \global\pagegoal\scratchdimen
- \fi
- % brrr
- \ifdim\ht\finaltblbox>\zeropoint
- \beforeTABLEsplitbox
- \box\finaltblbox
- \afterTABLEsplitbox
- \@@tblsplitafter
- \fi
- \page
- \fi}}
+ \doifsomething\tbltblspaceinbetween
+ {\def\tsplitinbetween{\blank[\tbltblspaceinbetween]}}%
+ \def\postprocesstsplit{\postprocessTABLEsplitbox{\box\tsplitresult}}%
+ \handletsplit}
% ! ! ! ! TODO: naast \postprocessTABLEsplitbox ook evt \postprocessTABLEbox voor niet split
@@ -1235,9 +1174,14 @@
{\iftraceTABLE\showtblwids{B#1}\fi
\!!dimena\hsize
\!!counta\zerocount
+% test, dunno yet
+\advance\!!dimena-\tbltblleftmargindistance
+\advance\!!dimena-\tbltblrightmargindistance
+\advance\!!dimena-\tbltblcolumndistance
\dorecurse\maximumcol
{\scratchdimen\gettblaut\recurselevel\relax
-% test: \advance\!!dimena-\gettbldis\recurselevel\relax
+% test, seems to work ok
+\advance\!!dimena-\gettbldis\recurselevel\relax
\ifdim\scratchdimen>\zeropoint\relax
\advance\!!dimena -\scratchdimen
\else
@@ -1498,12 +1442,14 @@
\c!spaceinbetween=,
\c!maxwidth=8em,
\c!textwidth=\hsize,
- \c!split=\v!no,
+ \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!splitmethod=a]
%D We have already prepared the previous macros for nesting,
diff --git a/tex/context/base/core-ref.tex b/tex/context/base/core-ref.tex
index f3224d94d..0876ba13d 100644
--- a/tex/context/base/core-ref.tex
+++ b/tex/context/base/core-ref.tex
@@ -198,8 +198,9 @@
\the\everyreference
\makesectionformat
\writereference{#2}
- {\sectionformat\sectionseparator\sectionseparator\noexpand\pagenumber}
- {\noexpand\realfolio}{#3}%
+ {\sectionformat\sectionseparator\sectionseparator\noexpand\pagenumber}%
+ {\noexpand\realfolio}%
+ {#3}%
\egroup}
\def\rawpagereference#1#2%
@@ -207,15 +208,18 @@
\the\everyreference
\makesectionformat
\writereference{#2}
- {\sectionformat\sectionseparator\sectionseparator\noexpand\pagenumber}
- {\noexpand\realfolio}{}%
+ {\sectionformat\sectionseparator\sectionseparator\noexpand\pagenumber}%
+ {\noexpand\realfolio}%
+ {}%
\egroup}
\def\rawtextreference#1#2#3%
{\bgroup
\the\everyreference
\writereference{#2}
- {}{\noexpand\realfolio}{#3}%
+ {}%
+ {\noexpand\realfolio}%
+ {#3}%
\egroup}
diff --git a/tex/context/base/core-reg.tex b/tex/context/base/core-reg.tex
index a192c6526..ebc743af1 100644
--- a/tex/context/base/core-reg.tex
+++ b/tex/context/base/core-reg.tex
@@ -423,12 +423,13 @@
\def\doregistercharacter[#1]#2%
{\global\firstregisterentrytrue
- \doifelsevalue{\??id#1\c!indicator}\v!yes
- {\executeifdefined
- {\strippedcsname\doregistercharacter\getvalue{\??id#1\c!alternative}}%
- \doregistercharactera
- [#1]{#2}}
- {\noregistercharacter[#1]{#2}}}
+ \doifsomething{#2}
+ {\doifelsevalue{\??id#1\c!indicator}\v!yes
+ {\executeifdefined
+ {\strippedcsname\doregistercharacter\getvalue{\??id#1\c!alternative}}%
+ \doregistercharactera
+ [#1]{#2}}
+ {\noregistercharacter[#1]{#2}}}}
\def\noregistercharacter[#1]#2%
{\getvalue{\??id#1\c!before}%
@@ -465,8 +466,9 @@
% {\pagereference[#1:#2]}}
\def\doregisterreference[#1]#2%
- {\doifvalue{\??id#1\c!referencing}\v!on
- {\pagereference[#1:\strippedcsname#2]}}
+ {\doifsomething{#2}
+ {\doifvalue{\??id#1\c!referencing}\v!on
+ {\pagereference[#1:\strippedcsname#2]}}}
\def\dosetpageregisterletter#1#2%
{\gdef\c!entryreference
diff --git a/tex/context/base/core-rul.tex b/tex/context/base/core-rul.tex
index c7c480c1b..83d1800d8 100644
--- a/tex/context/base/core-rul.tex
+++ b/tex/context/base/core-rul.tex
@@ -641,7 +641,7 @@
\def\copylocalframed[#1]#2[#3]%
{\copyparameters[#1][#3]%
- [\c!width,\c!height,\c!offset,\c!empty,\c!rulethickness,%
+ [\c!width,\c!height,\c!autowidth,\c!offset,\c!empty,\c!rulethickness,%
\c!radius,\c!corner,\c!depth,\c!frame,\c!framecolor,%
\c!foregroundstyle,\c!foregroundcolor,\c!lines,\c!orientation,%
\c!topframe,\c!bottomframe,\c!leftframe,\c!rightframe,%
@@ -741,6 +741,8 @@
\edef\@@locallocation {\framedparameter\c!location}%
\edef\@@localorientation{\framedparameter\c!orientation}%
%
+ \edef\@@localautowidth {\framedparameter\c!autowidth}%
+ %
\ifx\@@localframing\v!overlay % no frame, no offset, no framewidth
\boxhasframefalse
\let\localoffset\v!overlay
@@ -1035,14 +1037,21 @@
{\dontshowcomposition
\@@stopframedorientation
\ifboxhasformat
- \ifx\localwidth\v!fit
+ \ifx\@@localautowidth\v!force
\ifreshapeframebox\doreshapeframedbox\fi
\boxhaswidthfalse
- \else\ifx\localwidth\v!fixed
- \boxhaswidthfalse
\else
- \resetshapeframebox
- \fi\fi
+ \ifx\localwidth\v!fit
+ \ifx\@@localautowidth\v!yes
+ \ifreshapeframebox\doreshapeframedbox\fi
+ \fi
+ \boxhaswidthfalse
+ \else\ifx\localwidth\v!fixed
+ \boxhaswidthfalse
+ \else
+ \resetshapeframebox
+ \fi\fi
+ \fi
\else
\resetshapeframebox
\fi
@@ -1490,10 +1499,38 @@
%D or free widths and heights. Each combination gets its own
%D macro.
+%D The following code handles one-liners: \type{align={line,flushright}}.
+%D Beware, since we entered a group and either or not grab the next
+%D bgroup token, we need to finish the group in the oneliner mode.
+
+\ifx\raggedoneliner\undefined \chardef\raggedoneliner\zerocount \fi
+
+\def\doformatonelinerbox % beware: assumes explicit preceding bgroup
+ {\ifcase\raggedoneliner
+ \expandafter\nodoformatonelinerbox
+ \else
+ \expandafter\dodoformatonelinerbox
+ \fi}
+
+\def\dodoformatonelinerbox
+ {\dowithnextboxcontent
+ {\ignorespaces}
+ {\hbox to \hsize
+ {\ifcase\raggedstatus\or\hss\or\hss\fi
+ \unhbox\nextbox \removeunwantedspaces
+ \ifcase\raggedstatus\or \or\hss\or\hss\fi}%
+ \egroup}
+ \hbox}
+
+\def\nodoformatonelinerbox % grabs {
+ {\let\next=}
+
+%D The handlers:
+
\def\doformatboxSomeFormat
{\vbox to \!!heighta
\bgroup
- \let\postprocessframebox\relax
+ \let\postprocessframebox\relax
\forgetall
\oninterlineskip
\hsize\!!widtha
@@ -1503,16 +1540,15 @@
\dobeforeframedbox
\bgroup
\localbegstrut
- \@@handleoneliner
\aftergroup\localendstrut
\aftergroup\doafterframedbox
\aftergroup\egroup
- \let\next=}
+ \doformatonelinerbox}
\def\doformatboxNoFormat
{\vbox to \!!heighta
\bgroup
- \let\postprocessframebox\relax
+ \let\postprocessframebox\relax
\forgetall
\oninterlineskip
\hsize\!!widtha
@@ -1522,11 +1558,10 @@
\vss
\bgroup
\localbegstrut
- \@@handleoneliner
\aftergroup\localendstrut
\aftergroup\vss
\aftergroup\egroup
- \let\next=}
+ \doformatonelinerbox}
\def\doformatboxHeight
{\vbox to \!!heighta
@@ -1542,8 +1577,7 @@
\aftergroup\vss
\aftergroup\egroup
\localbegstrut
- \@@handleoneliner
- \let\next=}
+ \doformatonelinerbox}
\def\doformatboxWidth
{\vbox
@@ -1557,11 +1591,10 @@
\dobeforeframedbox
\bgroup
\localbegstrut
- \@@handleoneliner
\aftergroup\localendstrut
\aftergroup\doafterframedbox
\aftergroup\egroup
- \let\next=}
+ \doformatonelinerbox}
\def\doformatboxVSize
{\vbox to \!!heighta
@@ -1578,8 +1611,7 @@
\bgroup
\aftergroup\egroup
\localstrut
- \@@handleoneliner
- \let\next=}
+ \doformatonelinerbox}
\def\doformatboxHSize
{\hbox to \!!widtha
@@ -1589,11 +1621,10 @@
\doframedsetups
\hss
\localstrut
- \@@handleoneliner
\bgroup
\aftergroup\hss
\aftergroup\egroup
- \let\next=}
+ \doformatonelinerbox}
\def\doformatboxNoSize
{\hbox
@@ -1601,8 +1632,7 @@
\let\postprocessframebox\relax
\doframedsetups
\localstrut
- \@@handleoneliner
- \let\next=}
+ \doformatonelinerbox}
\let\doframedsetups\relax
@@ -3349,6 +3379,7 @@
\c!autostrut=\v!yes,
\c!location=\v!normal,
\c!orientation=,
+ \c!autowidth=\v!yes,
\c!setups=]
\setupscreens
diff --git a/tex/context/base/core-sec.tex b/tex/context/base/core-sec.tex
index 30ceeed2e..b94ceee70 100644
--- a/tex/context/base/core-sec.tex
+++ b/tex/context/base/core-sec.tex
@@ -79,25 +79,25 @@
% and postprocessed on demand
\def\numberseparator {.} % reasonable default
-\def\sectionseparator{:} % was : but is now -
+\def\sectionseparator{-} % was : but is now -
-\def\@@filterfirstpart [#1::#2]{#1}
-\def\@@filtersecondpart [#1::#2]{#2}
+\def\@@filterfirstpart [#1--#2]{#1}
+\def\@@filtersecondpart [#1--#2]{#2}
-\def\@@filterblockpart [#1::#2::#3]{#1}
-\def\@@filternumberpart [#1::#2::#3]{#2}
-\def\@@filterpagepart [#1::#2::#3]{#3}
-\def\@@filterblocknumberpart[#1::#2::#3]{#1::#2}
+\def\@@filterblockpart [#1--#2--#3]{#1}
+\def\@@filternumberpart [#1--#2--#3]{#2}
+\def\@@filterpagepart [#1--#2--#3]{#3}
+\def\@@filterblocknumberpart[#1--#2--#3]{#1--#2}
-\def\@@filterheadpart[#1]{\@EA\@@dofilterheadpart\@EA[#1:0]}
-\def\@@filtertailpart[#1]{\@EA\@@dofiltertailpart\@EA[#1:0]}
+\def\@@filterheadpart[#1]{\@EA\@@dofilterheadpart\@EA[#1-0]}
+\def\@@filtertailpart[#1]{\@EA\@@dofiltertailpart\@EA[#1-0]}
-\def\@@dofilterheadpart[#1:#2]{#1}
-\def\@@dofiltertailpart[#1:#2]{#2}
+\def\@@dofilterheadpart[#1-#2]{#1}
+\def\@@dofiltertailpart[#1-#2]{#2}
-\def\@@filterlevelpart[#1::#2::#3]{\@@dofilterlevelpart[#2:0:0:0:0]}
+\def\@@filterlevelpart[#1--#2--#3]{\@@dofilterlevelpart[#2-0-0-0-0]}
-\def\@@dofilterlevelpart[#1:0:0:0:#2]{#1}
+\def\@@dofilterlevelpart[#1-0-0-0-#2]{#1}
\def\gobbleuntilrelax#1\relax{}
@@ -174,6 +174,8 @@
\def\rawsectionnumber#1%
{\countervalue{\??se#1}}
+\def\precedingseparator{\@@koseparator} % brrr
+
\def\domakeprecedingsectionnumber[#1]% will become ugly after speed up
{\bgroup % added
\globallet\precedingsectionnumber\empty
@@ -189,7 +191,8 @@
\doifnot\currentsection\zerosection
{\doifnot{\@@sectionvalue\currentsection}{0}
{\xdef\precedingsectionnumber%
- {\getvalue{\currentsection\c!number}.}}}%
+ {\getvalue{\currentsection\c!number}%
+ \spr{\precedingseparator}}}}%
\fi}%
\fi
\egroup}
@@ -219,29 +222,21 @@
{\precedingsectionnumber\convertednumber[#1]}%
\egroup}
-% \def\preparethenumber#1#2#3% {\??id#1} \number \result
-% {\doifelsevaluenothing{#1\c!separator}
-% {\let\numberseparator\empty
-% \let#3#2}
-% {% was \unexpanded \edef, but we need it unexpanded !
-% \edef\numberseparator{\getvalue{#1\c!separator}}%
-% \edef#3{\@EA\separatednumber\@EA{#2}\getvalue{#1\c!stopper}}}} % hm, etex
-
\def\preparethenumber#1#2#3% {\??id#1} \number \result
{\doifelsevaluenothing{#1\c!separator}
{\let\numberseparator\empty
\let#3#2}
{% was \unexpanded \edef, but we need it unexpanded !
- \edef\numberseparator{\getvalue{#1\c!separator}}%
+ \edef\numberseparator{\spr{\getvalue{#1\c!separator}}}%
\doifelsenothing{\executeifdefined{#1\c!suffix}\empty}
{\edef#3%
{\@EA\separatednumber\@EA{#2}%
- \getvalue{#1\c!stopper}}}
+ }}%\stp{\getvalue{#1\c!stopper}}}}
{\edef#3%
{\@EA\separatednumber\@EA{#2}%
- \getvalue{#1\c!separator}%
+ \spr{\getvalue{#1\c!separator}}%
\getvalue{#1\c!suffix}%
- \getvalue{#1\c!stopper}}}}}
+ \stp{\getvalue{#1\c!stopper}}}}}}
\def\sectionnumberonly[#1]%
{\makesectionnumber[#1]%
@@ -268,19 +263,19 @@
\makecounter{\??se\v!text}
\letvalueempty{\??se\v!text\c!before}
-\letvalueempty{\??se\v!text\c!after }
+\letvalueempty{\??se\v!text\c!after }
\setvalue {\v!text\c!number}{0}
\letvalueempty{\v!text\s!format}
\letvalueempty{\??sk\v!text}
-\letvalueempty{\??sk }
+\letvalueempty{\??sk }
-\letvalue{\??by }\v!text
-\letvalue{\??by\v!text }\v!text
-\letvalue{\??by\v!all }\v!text
-\letvalue{\??by\v!by }\v!text
-\letvalue{\??by\v!by\v!text }\v!text
+\letvalue{\??by }\v!text
+\letvalue{\??by\v!text }\v!text
+\letvalue{\??by\v!all }\v!text
+\letvalue{\??by\v!by }\v!text
+\letvalue{\??by\v!by\v!text}\v!text
\letvalue{\??by\v!by\v!all }\v!text
\letvalue{\??by\v!by\v!page}\v!text % see footnotes
@@ -294,16 +289,6 @@
{\dodosetupsection[#1]}%
{\dodosetupsection[\sectionofhead{#1}]}}
-% \def\dosetupsection[#1][#2][#3]%
-% {\ifthirdargument
-% \getparameters[\??se#1#2][#3]%
-% \else
-% \getparameters[\??se#1][#2]%
-% \fi
-% \doifelsevalue{\??se#1\c!previousnumber}\v!yes
-% {\setvalue{#1\c!number}{\@@longsectionnumber {#1}}}
-% {\setvalue{#1\c!number}{\@@shortsectionnumber{#1}}}}
-
\def\dodosetupsection[#1][#2][#3]%
{\doifdefined{\??se#1}
{\ifthirdargument
@@ -333,29 +318,6 @@
\def\decouplemarking[#1]%
{\couplemarking[#1][]}
-% \def\definesection[#1]%
-% {\doifundefined{\??se#1}
-% {\doifelsenothing\firstsection
-% {\def\firstsection{#1}%
-% \setevalue{\??se#1\c!before}{\v!text}%
-% \setevalue{\??se\v!text\c!after}{#1}}
-% {\setevalue{\??se\commalistelement\c!after}{#1}%
-% \setevalue{\??se#1\c!before}{\lastsection}%
-% \setevalue{\??se\lastsection\c!after}{#1}}%
-% \advance\nofsections \plusone
-% \setevalue{\??se#1\c!level}{\the\nofsections}%
-% \letvalue{\??se#1\c!after}\empty
-% \setvalue{\e!next#1}{\@@nextsectionnumber{#1}}%
-% \setvalue{#1\c!number}{\@@longsectionnumber{#1}}%
-% \setvalue{#1\s!format}{\@@longformatnumber{#1}}%
-% \setevalue{\??by#1}{#1}%
-% \setevalue{\??by\v!by#1}{#1}%
-% \makecounter{\??se#1}%
-% \edef\lastsection{#1}%
-% \setvalue{\??sk#1}{#1}%
-% \letvalue{\??se#1\c!marking}\empty
-% \setupsection[#1][\c!previousnumber=\v!yes]}}%
-
\def\definesection[#1]%
{\doifundefined{\??se#1}
{\doifelsenothing\firstsection
@@ -395,12 +357,6 @@
\fi
\fi}
-% \def\@@setsectionnumber#1#2%
-% {\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean
-% \setcounter{\??se#1}{#2}%
-% \ifconditional\@@resetsubheadnumbers\resetsectioncounters{#1}\fi
-% \checkpagecounter}
-
\def\@@setsectionnumber#1#2%
{\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean
\setcounter{\??se#1}{#2}%
@@ -408,12 +364,6 @@
\resetsectioncounters{#1}%
\checkpagecounter}
-% \def\@@nextsectionnumber#1%
-% {\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean
-% \pluscounter{\??se#1}%
-% \ifconditional\@@resetsubheadnumbers\resetsectioncounters{#1}\fi
-% \checkpagecounter}
-
\def\@@nextsectionnumber#1% patched by GB
{\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean
\ifnum\countervalue{\??se\v!last#1}>\zerocount
@@ -428,24 +378,8 @@
\def\@@sectionvalue#1% % nog niet overal doorgevoerd
{\countervalue{\??se#1}} % zoeken op \??se
-% \def\@@sectionconversion#1%
-% {\getvalue{\??cv\getvalue{\??se#1\@@sectionblock\c!conversion}}}
-
% suited for chinese too:
-% \def\@@sectionconversion#1#2% a doublure with \@@shortsectionnumber
-% {\ifnum#2=0 0\else % else troubles with \uchar
-% \@EA\ifx\csname\??se#1\@@sectionblock\c!conversion\endcsname\relax
-% \@EA\ifx\csname\??se#1\c!conversion\endcsname\relax
-% #2%
-% \else
-% \getvalue{\??cv\getvalue{\??se#1\c!conversion}}{#2}%
-% \fi
-% \else
-% \getvalue{\??cv\getvalue{\??se#1\@@sectionblock\c!conversion}}{#2}%
-% \fi
-% \fi}
-
\def\@@sectionconversion#1#2% a doublure with \@@shortsectionnumber
{\ifnum#2=0 0\else % else troubles with \uchar
\@EA\ifx\csname\??se#1\@@sectionblock\c!conversion\endcsname\relax
@@ -459,8 +393,11 @@
\fi
\fi}
+% \def\@@sectionlevel#1%
+% {\ifundefined{\??se#1\c!level}0\else\getvalue{\??se#1\c!level}\fi}
+
\def\@@sectionlevel#1%
- {\ifundefined{\??se#1\c!level}0\else\getvalue{\??se#1\c!level}\fi}
+ {\executeifdefined{\??se#1\c!level}0}
% Omdat een markering kan worden herdefinieerd moeten we
% eerst testen of er wel een keten||afhankelijkheid is.
@@ -1183,6 +1120,8 @@
{\expanded{\setupalign[\getvalue{\??ko#1\c!align}]}}%
\doifvaluesomething{\??ko#1\c!tolerance} % wordt al expanded in spa
{\expanded{\setuptolerance[\getvalue{\??ko#1\c!tolerance}]}}%
+ \doifvalue{\??ko#1\c!strut}\v!no % wordt al expanded in spa
+ {\setnostrut}% new
\def\\{\crlf\strut\ignorespaces}}
\def\localkopsetup{\localheadsetup} % kan tzt weg
@@ -1273,33 +1212,6 @@
\setupheadnumber[#1][\foundsectionnumber]%
\setupheadnumber[#1][-1]}
-% \def\setsomeheadconversion#1#2%
-% {\someheadconversionfalse
-% \doifelsevalue{\??ko#1\c!eigennummer}\v!ja
-% {\def\someheadconversion{#2}}
-% {\bepaalkopnummer[#1]%
-% \@EA\ifx\csname\??se\@@sectie\@@sectionblock\c!kopconversie\endcsname\relax
-% \@EA\ifx\csname\??se\@@sectie\c!kopconversie\endcsname\relax
-% \def\someheadconversion{#2}%
-% \else
-% \@EA\ifx\csname\??se\@@sectie\c!kopconversie\endcsname\empty
-% \def\someheadconversion{#2}%
-% \else
-% \someheadconversiontrue
-% \def\someheadconversion%
-% {\fullsectionnumber{#1}{\getvalue{\??se\@@sectie\c!kopconversie}}{#2}}%
-% \fi
-% \fi
-% \else
-% \@EA\ifx\csname\??se\@@sectie\@@sectionblock\c!kopconversie\endcsname\empty
-% \def\someheadconversion{#2}%
-% \else
-% \someheadconversiontrue
-% \def\someheadconversion%
-% {\fullsectionnumber{#1}{\getvalue{\??se\@@sectie\@@sectionblock\c!kopconversie}}{#2}}%
-% \fi
-% \fi}}
-%
% deal with eigennummer
\def\setsomeheadconversion#1#2%
@@ -1405,7 +1317,7 @@
{\def\currenthead{#1}% dus #1 overal vervangen
\let\finalsectionnumber\dofinalsectionnumber % overloaded ungrouped -)
\unexpanded\def\\{\space}%
- \def\numberseparator{\getvalue{\??ko\currenthead\c!separator}}%
+ \edef\numberseparator{\spr{\getvalue{\??ko\currenthead\c!separator}}}%
\flushingcolumnfloatsfalse % {number} can be \finalsectionnumber
\someheadconversionfalse
\let\fullsectionnumber\limitedfullsectionnumber
@@ -2144,9 +2056,11 @@
{\vbox
{\localheadsetup
\begstrut % use one \strut here!
+ \dontleavehmode % in case there is no strut, else side effects with llap
\ifheadnumbercontent
- \llap{\hbox to 5em{\hfill{#1}%
- \hskip\localheadskip\hskip\leftmargindistance}}%
+ \llap{\hbox to 5em{\hfill{#1}\hskip\localheadskip\hskip\leftmargindistance}}% introduces whitespace
+ % maybe better:
+ % \inleftmargin{\hbox{\hss{#1}\hskip\localheadskip}}%
\fi
{#2}}}
@@ -2170,7 +2084,7 @@
\def\placeheadlohi#1#2#3%
{\ifheadnumbercontent
\setbox0\hbox{#2}
- \setbox2#1{\localheadsetup\advance\hsize-\wd0\relax#3}%
+ \setbox2=#1{\localheadsetup\advance\hsize-\wd0\relax#3}%
\hbox{\box0\hskip\numberheaddistance\box2}%
\else
#1{\localheadsetup\noindent#3}%
@@ -2228,6 +2142,7 @@
\c!aligntitle=\@@koaligntitle,
\c!tolerance=\@@kotolerance,
\c!indentnext=\@@koindentnext,
+ \c!strut=\@@kostrut,
\c!hang=\@@kohang,
\c!file=,
\c!expansion=,
@@ -2246,7 +2161,7 @@
% new per 20/03/3002 (o-pbu-l) / was too confusing
% \c!numberstyle,\c!textstyle,\c!expansion,
% again too confusing
- \c!align,\c!aligntitle,\c!tolerance,\c!grid,\c!hang,
+ \c!align,\c!aligntitle,\c!tolerance,\c!grid,\c!hang,\c!strut,
\c!numbercommand,\c!textcommand,\c!margintext,\c!margin]}}%
\getparameters[\??ko#1][#2]%
\doifsomething{\getvalue{\??ko#1\c!section}}
@@ -2270,7 +2185,7 @@
% new per 20/03/3002 (o-pbu-l) / was too confusing
% \c!numberstyle,\c!textstyle,\c!expansion,
% again too confusing
- \c!align,\c!aligntitle,\c!tolerance,\c!grid,\c!hang,
+ \c!align,\c!aligntitle,\c!tolerance,\c!grid,\c!hang,\c!strut,
\c!numbercommand,\c!textcommand,\c!margintext,\c!margin]%
\getparameters[\??ko#1][\c!expansion=]% iig een value, rather fuzzy
\definemarking[#1][#2]%
@@ -2331,6 +2246,7 @@
\c!align=,
\c!aligntitle=,
\c!tolerance=,
+ \c!strut=,
\c!indentnext=\v!no,
\c!margin=\zeropoint,
\c!hang=\v!none,
diff --git a/tex/context/base/core-spa.tex b/tex/context/base/core-spa.tex
index 4e53a6dcf..b5d743b8f 100644
--- a/tex/context/base/core-spa.tex
+++ b/tex/context/base/core-spa.tex
@@ -2271,30 +2271,33 @@
% \edef\strutdepth{\the\strutdimen}%
% \dosetstrut}
+% interesting, strudepth is 4.05064pt vs 4.05066pt depending on grid
+% nasty rounding problem
+
\def\setstrut
{% height
\strutdimen\normallineheight
-\ifdim\minimumstrutheight>\zeropoint
- \strutdimen\minimumstrutheight
-\else
- \strutdimen\strutheightfactor\strutdimen
-\fi
+ \ifdim\minimumstrutheight>\zeropoint
+ \strutdimen\minimumstrutheight
+ \else
+ \strutdimen\strutheightfactor\strutdimen
+ \fi
\strutdimen\spacingfactor\strutdimen
\edef\strutheight{\the\strutdimen}%
% depth
\strutdimen\normallineheight
\ifgridsnapping
-\ifdim\minimumstrutdepth>\zeropoint
- \strutdimen\minimumstrutdepth
-\else
- \advance\strutdimen-\strutheight
-\fi
+ \ifdim\minimumstrutdepth>\zeropoint
+ \strutdimen\minimumstrutdepth
+ \else
+ \advance\strutdimen-\strutheight
+ \fi
\else
-\ifdim\minimumstrutdepth>\zeropoint
- \strutdimen\minimumstrutdepth
-\else
- \strutdimen\strutdepthfactor\strutdimen
-\fi
+ \ifdim\minimumstrutdepth>\zeropoint
+ \strutdimen\minimumstrutdepth
+ \else
+ \strutdimen\strutdepthfactor\strutdimen
+ \fi
\strutdimen\spacingfactor\strutdimen
\fi
\edef\strutdepth{\the\strutdimen}%
@@ -2456,7 +2459,8 @@
{\setbox\strutbox\copy\nostrutbox
\let\strut\empty
\let\endstrut\empty
- \let\begstrut\empty}
+ \let\begstrut\empty
+ \let\crlfplaceholder\empty}
% unsave:
%
@@ -2639,17 +2643,19 @@
\adjdemerits \zerocount}
\def\setdefaultpenalties
- {\setups[\systemsetupsprefix\s!default]}
+ {\directsetup{\systemsetupsprefix\s!default}}
-\startsetups [\systemsetupsprefix\v!reset]
+\startsetups [\systemsetupsprefix\s!reset]
\resetpenalties\widowpenalties
\resetpenalties\clubpenalties
\resetpenalties\interlinepenalties
\stopsetups
+% we use \directsetup because it's faster and we know there is no csl
+
\startsetups [\systemsetupsprefix\s!default]
- \setups[\systemsetupsprefix\s!reset]
+ \directsetup{\systemsetupsprefix\s!reset}
\widowpenalty\defaultwidowpenalty
\clubpenalty \defaultclubpenalty
@@ -2658,7 +2664,7 @@
\startsetups [\v!grid] [\systemsetupsprefix\s!default]
- \setups[\systemsetupsprefix\v!reset]
+ \directsetup{\systemsetupsprefix\s!reset}
\widowpenalty\defaultgridwidowpenalty
\clubpenalty \defaultgridclubpenalty
@@ -2669,7 +2675,7 @@
\startsetups [\systemsetupsprefix\v!strict]
- \setups[\v!reset]
+ \directsetup{\systemsetupsprefix\s!reset}
\setpenalties\widowpenalties2\maxdimen
\setpenalties\clubpenalties 2\maxdimen
@@ -2915,33 +2921,44 @@
{\getvalue{\@@ragged@@command\v!left}}
{\getvalue{\@@ragged@@command\v!right}}}
+% compare:
+%
+% \framed[width=4cm,align=no] {\hfil xxx}
+% \framed[width=4cm,align=disable]{\hfil xxx}
+
+\setvalue{\@@ragged@@command\v!disable}% for one liners
+ {\appendtoks\raggedright\parfillskip\zeropoint\to\everyraggedcommand}
+
\chardef\raggedoneliner\zerocount
\setvalue{\@@ragged@@command\v!line}%
{\chardef\raggedoneliner\plusone}
-\def\@@startraggedoneliner
- {\ifcase\raggedoneliner\else
- \dontleavehmode\hbox\bgroup
- \ifcase\raggedstatus\or\hss\or\hss\fi
- \ignorespaces
- \bgroup
- \aftergroup\removeunwantedspaces
- \fi}
+%D Unofficial, may disappear. Now handled directly in the
+%D core-rul module.
-\def\@@stopraggedoneliner
- {\ifcase\raggedoneliner\else
- \egroup
- \ifcase\raggedstatus\or\hss\or\or\hss\fi
- \egroup
- \ignorespaces
- \fi}
+% \def\@@startraggedoneliner
+% {\ifcase\raggedoneliner\else
+% \dontleavehmode\hbox to \hsize \bgroup % hsize added, else useless
+% \ifcase\raggedstatus\or\hss\or\hss\fi
+% \ignorespaces
+% \bgroup
+% \aftergroup\removeunwantedspaces
+% \fi}
-\def\@@handleoneliner
- {\ifcase\raggedoneliner\else
- \@@startraggedoneliner
- \aftergroup\@@stopraggedoneliner
- \fi}
+% \def\@@stopraggedoneliner
+% {\ifcase\raggedoneliner\else
+% \egroup
+% \ifcase\raggedstatus\or\or\hss\or\hss\fi
+% \egroup
+% \ignorespaces % ? ? ?
+% \fi}
+
+% \def\@@handleoneliner
+% {\ifcase\raggedoneliner\else
+% \@@startraggedoneliner
+% \aftergroup\@@stopraggedoneliner
+% \fi}
% Nodig i.v.m. inspringen eerste alineas
@@ -3346,13 +3363,13 @@
%
% \def\setraggedparagraphmode#1#2% combineren met \ifrightpage
% {\ifinpagebody
-% \ifdubbelzijdig
+% \ifdoublesided
% \ifodd\realpageno\relax#1\else#2\fi
% \else
% #2\relax
% \fi
% \else\ifinner
-% \ifdubbelzijdig
+% \ifdoublesided
% \gettwopassdata\s!paragraph
% \iftwopassdatafound
% \ifodd\twopassdata\relax#1\else#2\fi
@@ -3370,7 +3387,7 @@
% \def\doifrightpageelse % watch out: other default ! ! !
% {\ifinpagebody
% % optimalisation ?
-% \ifdubbelzijdig
+% \ifdoublesided
% \ifodd\realpageno\relax
% \twopassdatafoundtrue \else \twopassdatafoundfalse
% \fi
@@ -3378,7 +3395,7 @@
% \twopassdatafoundtrue
% \fi
% \else
-% \ifdubbelzijdig
+% \ifdoublesided
% \gettwopassdata\s!paragraph
% \iftwopassdatafound
% \ifodd\twopassdata\relax
@@ -3400,7 +3417,7 @@
% \fi}
%
% \def\signalrightpage
-% {\ifdubbelzijdig \ifinpagebody \else
+% {\ifdoublesided \ifinpagebody \else
% \doparagraphreference
% \fi \fi}
@@ -3412,7 +3429,7 @@
\chardef \frozenpagestate \zerocount
\def\dotrackpagestate#1#2%
- {\ifdubbelzijdig \ifinpagebody \else
+ {\ifdoublesided \ifinpagebody \else
\doforcedtrackpagestate{#1}{#2}%
\fi \fi}
@@ -3432,14 +3449,14 @@
\pagestatemismatchfalse
\let\realpagestateno\realfolio
\ifinpagebody
- \ifdubbelzijdig
+ \ifdoublesided
\ifodd\realpageno\relax
\twopassdatafoundtrue \else \twopassdatafoundfalse
\fi
\else
\twopassdatafoundtrue
\fi
- \else\ifdubbelzijdig
+ \else\ifdoublesided
\findtwopassdata{#1}{#2:}%
\iftwopassdatafound
\let\realpagestateno\twopassdata
diff --git a/tex/context/base/core-tab.tex b/tex/context/base/core-tab.tex
index c23619cb2..e14dc12dd 100644
--- a/tex/context/base/core-tab.tex
+++ b/tex/context/base/core-tab.tex
@@ -305,16 +305,6 @@
\newif \ifTABLEgraydone % gray line executed
\newtoks \TABLEgraytoks % gray line specification
-%D A third major extension, besides spacing and color support,
-%D concerns splitting tables over pages. We don't give
-%D examples here, because its a waste of space.
-
-\newdimen\TABLEheight % These can be \newskimens
-\newdimen\TABLEmaxheight % given a few \relax's when
-\newdimen\TABLEheadheight % testing them with \ifdim.
-\newdimen\TABLEtailheight
-\newdimen\TABLEcaptionheight
-
\newif\ifTABLEinbreak
%D Nog vervangen:
@@ -371,39 +361,6 @@
\newif\ifForgetTableBarAndQuote \ForgetTableBarAndQuotetrue
-% Old crappy code (live has changed):
-%
-% \bgroup
-%
-% \catcode`\|=\@@active
-% \catcode`\"=\@@active
-%
-% \gdef\pushouterbarandquote
-% {\ifForgetTableBarAndQuote
-% \ifnum\catcode`\|=\@@active \else
-% \catcode`\|=\@@active
-% \def|{\ifmmode\vert\else\char`\|\fi}%
-% \fi
-% \let\outertablebar=|%
-% \ifnum\catcode`\"=\@@active \else
-% \catcode`\"=\@@active
-% \def"{\char`\"}%
-% \fi
-% \let\outertablequote="%
-% \fi}
-%
-% \gdef\popouterbarandquote
-% {\ifForgetTableBarAndQuote
-% \let|\outertablebar
-% \let"\outertablequote
-% \else
-% \redefinetablebarandquote
-% \fi}
-%
-% \egroup
-%
-% probably better (untested):
-
\bgroup
\catcode`\|=\@@active
@@ -500,7 +457,7 @@
%D \ReadFormatKeys}
%D \stoptyping
-\newdimen\TABLEparheight
+% \newdimen\TABLEparheight
\def\BeginTableParBox#1%
{\setbox\scratchbox\vtop\bgroup % \setbox added
@@ -526,10 +483,10 @@
\else % of paragraphs
\egroup
\fi
- \getboxheight\scratchdimen\of\box\scratchbox\relax% compensate for
- \ifdim\scratchdimen>\TABLEparheight % funny depth of
- \global\TABLEparheight\scratchdimen % multi-line box
- \fi % i.e. vtop
+% \getboxheight\scratchdimen\of\box\scratchbox\relax% compensate for
+% \ifdim\scratchdimen>\TABLEparheight % funny depth of
+% \global\TABLEparheight\scratchdimen % multi-line box
+% \fi % i.e. vtop
\box\scratchbox}
% We also need to patch away the interfering math switch:
@@ -852,26 +809,6 @@
\let\TABLEbeforebar\empty
\let\TABLEafterbar \empty
-% \def\!ttInsertVrule
-% {\hfil
-% \TABLEbeforebar % added
-% \startglobalTABLEcolor % added
-% \vrule \!thWidth
-% \ifnum\!tgCode=\plusone
-% \ifx\!tgValue\empty
-% \LineThicknessFactor
-% \else
-% \!tgValue
-% \fi
-% \LineThicknessUnit
-% \else
-% \!tgValue
-% \fi
-% \stopglobalTABLEcolor % added
-% \TABLEafterbar % added
-% \hfil
-% &}
-
\def\@VLn{1}
\def\@VLd{.125em}
@@ -957,7 +894,7 @@
\def\!ttuse#1%
{\ifnum#1>\plusone
\omit
-\global\TABLEdivisionfalse
+ \global\TABLEdivisionfalse
\scratchcounter\currentTABLEcolumn % added
\advance\scratchcounter #1% % added
\advance\scratchcounter \minusone % added
@@ -1025,16 +962,31 @@
%D
%D \showsetup{starttable}
+\newconditional\tablerepeathead
+\newconditional\tablerepeattail
+
\def\starttable
{\bgroup
- \doifelsenothing\@@tiframe
- {\ifinsidefloat\else\startbaselinecorrection\fi}
- {\startframedcontent[\@@tiframe]}%
- \postponefootnotes
- \firststagestartTABLE}
+ \doif\@@tisplit\v!auto
+ {\ifinsidesplitfloat\let\@@tisplit\v!yes\fi}%
+ \doifelse\@@tisplit\v!yes
+ {\def\stoptable{\stoptables}%
+ \setfalse\tablerepeathead
+ \setfalse\tablerepeattail
+ \starttables}
+ {\doifelse\@@tisplit\v!repeat
+ {\def\stoptable{\stoptables}%
+ \settrue\tablerepeathead
+ \settrue\tablerepeattail
+ \starttables}
+ {\doifelsenothing\@@tiframe
+ {\ifinsidefloat\else\startbaselinecorrection\fi}
+ {\startframedcontent[\@@tiframe]}%
+ \postponefootnotes
+ \firststagestartTABLE}}}
\def\stoptable
- {\TABLEtail
+ {\insertTABLEtail
\globalletempty\@@TABLEhead
\globalletempty\@@TABLEtail
\finishTABLE
@@ -1078,17 +1030,6 @@
%D The implementation of the definition macro is not that
%D complicated:
-%\def\dodefinetabletemplate[#1][#2]%
-% {\setgvalue{\c!Table#1}{\complexsecondstagestartTABLE[#2]}%
-% \egroup}
-%
-%\def\definetabletemplate%
-% {\bgroup
-% \catcode`\|=\@@other
-% \dodoubleargument\dodefinetabletemplate}
-
-% \TABLEnoalign{\page}\TABLEhead is valid
-
\def\douseTABLEtemplate#1#2#3%
{\gdef\TABLEhead{\getvalue{@@TABLEhead#2}}%
\gdef\TABLEtail{\getvalue{@@TABLEtail#3}}%
@@ -1129,35 +1070,36 @@
%D The second half of the next macro prepares table
%D splitting.
-% \def\complexsecondstagestartTABLE#1[#2]%
-% {\convertargument|\to\asciiA
-% \convertargument#2\to\asciiB
-% \doifinstringelse{\asciiA}{\asciiB}
-% {\gdef\restartTABLE{\thirdstagestartTABLE{#2}}}
-% {\doifdefinedelse{\c!Table#2}
-% {\gdef\restartTABLE{\getvalue{\c!Table#2}}}
-% {\gdef\restartTABLE{\getvalue{#2}}}}%
-% \prepareTABLEsplitting
-% \restartTABLE
-% \TABLEhead}
+\def\insertTABLEhead
+ {\TABLEnoalign{\global\settrue \preventTABLEbreak \global\setfalse\someTABLEhead}%
+ \TABLEhead
+ \TABLEnoalign{\global\setfalse\preventTABLEbreak}}
+
+\def\insertTABLEtail
+ {\TABLEnoalign{\global\settrue \preventTABLEbreak \global\setfalse\someTABLEtail}%
+ \TABLEtail
+ \TABLEnoalign{\global\setfalse\preventTABLEbreak}}
+
+\def\dorestartTABLE#1%
+ {\gdef\restartTABLE{#1}%
+ \restartTABLE
+ \insertTABLEhead
+ \ifsplittables \ifconditional \tablerepeattail
+ \TABLEnoalign{\goodbreak}%
+ \insertTABLEtail
+ \TABLEnoalign{\goodbreak}%
+ \fi \fi}
\def\complexsecondstagestartTABLE#1[#2]%
{\convertargument|\to\asciiA
\convertargument#2\to\asciiB
+ \global\setfalse\someTABLEhead
+ \global\setfalse\someTABLEtail
\doifinstringelse\asciiA\asciiB
- {\gdef\restartTABLE
- {\gdef\restartTABLE{\thirdstagestartTABLE{#2}}%
- \prepareTABLEsplitting
- \restartTABLE
- \TABLEhead}}
+ {\gdef\restartTABLE{\dorestartTABLE{\thirdstagestartTABLE{#2}}}}
{\doifdefinedelse{\c!Table#2}
- {\gdef\restartTABLE
- {\getvalue{\c!Table#2}}}
- {\gdef\restartTABLE
- {\gdef\restartTABLE{\getvalue{#2}}%
- \prepareTABLEsplitting
- \restartTABLE
- \TABLEhead}}}%
+ {\gdef\restartTABLE{\getvalue{\c!Table#2}}}
+ {\gdef\restartTABLE{\dorestartTABLE{\getvalue{#2}}}}}%
\restartTABLE}
%D The third stage involves a lot of (re)sets, which we will
@@ -1212,45 +1154,6 @@
\global\intablefalse
\egroup}
-%D The preparation for split columns concerns some
-%D calculations. Although not explicitly needed, one can
-%D predefine a tablehead as well as a tail. Each table fragment
-%D is preceded by such a head and ends with a tail. This means
-%D that, in order to determine the available height, we have to
-%D take the head and tail into account. Because we want to
-%D support captions too, we will also reserve some space for
-%D those later on.
-
-\def\prepareTABLEsplitting
- {\global\TABLEheight\zeropoint
- \ifsplittables
- \ifx\TABLEhead\empty
- \global\TABLEheadheight\zeropoint
- \else
- \setbox0\vbox
- \bgroup
- \def\doEndOfTableLine##1##2##3{\normalTABLElineformat##2##3}%
- \restartTABLE\TABLEhead
- \finishTABLE
- \global\TABLEheadheight\ht0
- \fi
- \ifx\TABLEtail\empty
- \global\TABLEtailheight\zeropoint
- \else
- \setbox0\vbox
- \bgroup
- \def\doEndOfTableLine##1##2##3{\normalTABLElineformat##2##3}%
- \restartTABLE\TABLEtail
- \finishTABLE
- \global\TABLEtailheight\ht0
- \fi
- \else
- \global\TABLEheadheight\zeropoint
- \global\TABLEtailheight\zeropoint
- \fi
- \global\TABLEheight\zeropoint
- \calculatemaxTABLEheight\docalculatemaxTABLEheight}
-
%D \macros
%D {starttables}
%D
@@ -1272,27 +1175,45 @@
%D \stoptables
%D \stoptyping
+\newbox\tablecontentbox
+
\def\starttables
{\bgroup
- \ifinsidefloat\else
- \baselinecorrection
- \flushnotes
- \topbaselinecorrection
- \fi
- \forgetall
- \globallet\absmaxTABLEheight\zeropoint
\splittablestrue
+ \flushnotes
+ \setbox\tablecontentbox\vbox\bgroup
+ \forgetall
\global\TABLEinbreakfalse
\firststagestartTABLE}
\def\stoptables
- {\TABLEtail
+ {\ifconditional\tablerepeattail\else\insertTABLEtail\fi
\finishTABLE
+ \egroup
+ \dosplittablebox\tablecontentbox
+ \flushnotes
+ \egroup}
+
+\newdimen\TABLEcaptionheight % obsolete
+
+\def\dosplittablebox#1%
+ {\resettsplit
+ \def\tsplitminimumfreelines{2}%
+ \def\tsplitminimumfreespace{\TABLEcaptionheight}%
+ \setbox\tsplitcontent\box#1%
+ \ifconditional\tablerepeathead \ifconditional\someTABLEhead
+ \setbox\tsplithead\vsplit\tsplitcontent to \lineheight
+ \setbox\tsplithead\vbox{\unvbox\tsplithead}%
+ \fi \fi
+ \ifconditional\tablerepeattail \ifconditional\someTABLEtail
+ \setbox\tsplittail\vsplit\tsplitcontent to \lineheight
+ \setbox\tsplittail\vbox{\unvbox\tsplittail}%
+ \fi \fi
\ifinsidefloat\else
- \flushnotes
- \botbaselinecorrection
+ \def\tsplitbeforeresult{\startbaselinecorrection}%
+ \def\tsplitafterresult {\stopbaselinecorrection}%
\fi
- \egroup}
+ \handletsplit}
%D When the table in the previous example is split across
%D pages, only the first gets a head. We could have said
@@ -1344,90 +1265,21 @@
\def\setTABLEhead{\dodoubleempty\dosetTABLEhead}
\def\setTABLEtail{\dodoubleempty\dosetTABLEtail}
-\def\dosetTABLEhead[#1][#2]#3\end{\setvalue{@@TABLEhead#1}{#3}}
-\def\dosetTABLEtail[#1][#2]#3\end{\setvalue{@@TABLEtail#1}{#3}}
+\newconditional\preventTABLEbreak
+\newconditional\someTABLEhead
+
+\def\dosetTABLEhead[#1][#2]#3\end{\setvalue{@@TABLEhead#1}{\TABLEnoalign{\global\settrue\someTABLEhead}#3}}
+\def\dosetTABLEtail[#1][#2]#3\end{\setvalue{@@TABLEtail#1}{\TABLEnoalign{\global\settrue\someTABLEtail}#3}}
%D Redudant \type{\HL}'s are removed automatically, so
%D mid||lines can be used without problems.
-%D When calculating the available height of a split table, we
-%D try to handle multi||column mode as good as possible. This
-%D algoritm evolved during the development of the split option
-%D and will probably be improved bit by bit.
-
-\def\docalculatemaxTABLEheight
- {\ifinsidecolumns
- \getcolumnstatus\column\scratchcounter\total\dimen0\goal\dimen2\\%
- \else
- \ifdim\pagegoal<\maxdimen
- \dimen0\pagetotal
- \dimen2\pagegoal
- \else
- \dimen0\zeropoint
- \dimen2\textheight
- \fi
- \fi
- \advance\dimen2 -\dimen0
- \global\TABLEmaxheight\dimen2
- \global\advance\TABLEmaxheight -\strutdp
- \ifdim\prevdepth<\maxdimen\ifdim\prevdepth>\zeropoint
- \global\advance\TABLEmaxheight -\strutdp
- \global\advance\TABLEmaxheight -\parskip
- \fi\fi}
-
-\def\nocalculatemaxTABLEheight
- {\ifinsidecolumns
- \getcolumnstatus\column\scratchcounter\total\dimen0\goal\dimen2\\%
- \else
- \dimen0\zeropoint
- \dimen2\textheight
- \fi
- \advance\dimen2 -\dimen0
- \global\TABLEmaxheight\dimen2
- \global\advance\TABLEmaxheight -\strutdp}
-
-\def\calculatemaxTABLEheight#1%
- {\ifsplittables
- #1\relax
- \ifdim\TABLEmaxheight<3\baselineskip \relax % instelbaar maken
- \ifinsidecolumns
- \nobreak
- \kern\dimen2
- \goodbreak
- \else
- \goodbreak % \page
- \fi
- \removeTABLEtopskip
- \nocalculatemaxTABLEheight
- \fi
- \ifdim\TABLEmaxheight<\absmaxTABLEheight % forces equal columns
- \global\TABLEmaxheight\absmaxTABLEheight
- \else
- \xdef\absmaxTABLEheight{\the\TABLEmaxheight}%
- \fi
- \global\TABLEheight\zeropoint
- \else
- \global\TABLEmaxheight\maxdimen
- \fi}
-
-%D When splitting tables, we have to remove the top skip when
-%D we're in the main vertical list, else we remove whatever
-%D skip \TEX\ adds.
-
-\def\removeTABLEtopskip
- {\ifinsidefloat
- \verticalstrut\kern-\struttotal
- \else
- \hbox{}\kern-\topskip
- \fi}
-
%D We need an alternative for the normal complex or simple
%D commands, because assignments in these system commands
%D conflict with \type{\noalign}. This alternative is about
%D as efficient as possible.
\def\complexorsimpleTable#1#2%
-% {\getvalue{\if[\noexpand#2\s!complex\else\s!simple\fi\c!Table#1}#2}
{\csname\if[\noexpand#2\s!complex\else\s!simple\fi\c!Table#1\endcsname#2}
%D The next one is used in \type{\VL} cum suis and honours
@@ -1702,57 +1554,8 @@
%D we repeat the table head.
\def\handleTABLEbreak#1#2%
- {\ifsplittables
- \setbox0\hbox{\AugmentedTableStrut{#1}{#2}}%
- \getboxheight\dimen0\of\box0\relax
- \ifdim\TABLEparheight>\dimen0 % new
- \advance\dimen0-\lineheight % newer
- \ifdim\dimen0<\zeropoint % newer
- \dimen2\zeropoint % newer
- \fi % newer
- \advance\dimen0 \TABLEparheight % new
- \global\TABLEparheight\zeropoint % new
- \fi % new
- \ifTABLEgrayline \else
- \global\advance\TABLEheight\dimen0
- \fi
- \ifTABLEinbreak
- \globalletempty\beforeTABLEline
- \gdef\afterTABLEline{\TABLEnoalign{\nobreak}}%
- \else
- \dimen2=\TABLEheight
- \advance\dimen2 \strutdp
- \advance\dimen2 \TABLEtailheight
- \advance\dimen2 \TABLEcaptionheight
- \advance\dimen2 \lineheight % we're ahead
- \ifdim\dimen2>\TABLEmaxheight
- \gdef\beforeTABLEline
- {\setTABLEforce\TABLEforcelastrow}%
- \gdef\afterTABLEline
- {\TABLEnoalign
- {\nobreak
- \global\TABLEinbreaktrue}%
- \TABLEtail
- \TABLEnoalign
- {\goodbreak
- \calculatemaxTABLEheight\nocalculatemaxTABLEheight
- \removeTABLEtopskip
- \setTABLEaction\TABLEunknown
- \setTABLEforce \TABLEunknown}%
- \TABLEhead
- \TABLEnoalign
- {\nobreak
- \global\TABLEinbreakfalse
- \setTABLEforce\TABLEforcefirstrow}}%
- \else
- \globalletempty\beforeTABLEline
- \gdef\afterTABLEline{\TABLEnoalign{\nobreak}}%
- \fi
- \fi
- \else
- \globalletempty\beforeTABLEline
- \gdef\afterTABLEline{\TABLEnoalign{\nobreak}}%
- \fi}
+ {\globalletempty\beforeTABLEline
+ \gdef\afterTABLEline{\TABLEnoalign{\ifconditional\preventTABLEbreak\nobreak\else\goodbreak\fi}}}
%D When tables are split, the spacing before and after a
%D horizontal rule is corrected according to what we expect.
@@ -1770,7 +1573,6 @@
->%
\fi
\color[#1]{\string#3}%
- \ifsplittables\space\the\TABLEmaxheight/\the\TABLEheight\fi
\ifx\TABLEgraylineerror\empty
\space\TABLEgraylinestatus
\else
@@ -2027,7 +1829,6 @@
{\TABLEnoalign
{\nobreak
\setbox0\vbox{\blank[\@@tiNL]}%
- \global\advance\TABLEheight \ht0
\vskip\ht0
\nobreak}}
@@ -2167,8 +1968,7 @@
\setTABLEaction\TABLErule}}
\def\accountTABLElinewidth
- {\scratchdimen\LineThicknessUnit
- \global\advance\TABLEheight \@@tiHLheight\scratchdimen}
+ {\scratchdimen\LineThicknessUnit}
%D \startitemize[3*ruim]
%D \sym{\type{\BC}}
@@ -2649,7 +2449,8 @@
\c!commands=,
\c!background=\v!screen,
\c!backgroundscreen=\@@rsscreen,
- \c!backgroundcolor=]
+ \c!backgroundcolor=,
+ \c!split=\v!auto]
\def\ifintabel{\ifintable} % upward compatible
diff --git a/tex/context/base/core-tbl.tex b/tex/context/base/core-tbl.tex
index 4c2f238da..a3d245066 100644
--- a/tex/context/base/core-tbl.tex
+++ b/tex/context/base/core-tbl.tex
@@ -755,27 +755,35 @@
\chardef\tabulatepass=0
+\def\tabulateparameter#1{\csname\??tt\currenttabulate#1\endcsname}
+
\def\dofinalstarttabulate[#1][#2][#3]% identifier sub preamble
{\edef\currenttabulate{#1::#2}%
\ifinsidefloat \else
\whitespace
- \getvalue{\??tt\currenttabulate\c!before}%
+ \tabulateparameter\c!before
\fi
\bgroup
\resetcharacteralign
% todo: spacing around tabulate when bodyfont is set
% expansion en test needed ?
+ \splittabulatefalse
+ \processaction
+ [\tabulateparameter\c!split]
+ [ \v!yes=>\splittabulatetrue,
+ % \v!repeat=>\splittabulatetrue, % todo, default yes
+ \v!auto=>\ifinsidesplitfloat\splittabulatetrue\fi]%
\doifelsevalue{\??tt\currenttabulate\c!split}\v!yes
- \splittabulatetrue\splittabulatefalse
+
\doifvaluesomething{\??tt\currenttabulate\c!bodyfont}
{\expanded{\switchtobodyfont
- [\getvalue{\??tt\currenttabulate\c!bodyfont}]}}%
+ [\tabulateparameter\c!bodyfont]}}%
\postponefootnotes % new, to be tested / will be configurable
\chardef\tabulatepass\plusone
\widowpenalty\zerocount % otherwise lines are not broken
\clubpenalty \zerocount % but overlap in funny ways
\the\everytabulate
- \getvalue{\??tt\currenttabulate\c!inner}%
+ \tabulateparameter\c!inner
\scratchdimen\leftskip
\advance\scratchdimen \hangindent
\doifvalue{\??tt\currenttabulate\c!indenting}\v!yes
@@ -817,7 +825,7 @@
\newif\iftabulatefirstflushed
\def\tabulateEQ
- {\iftabulatefirstflushed\else\getvalue{\??tt\currenttabulate EQ}\fi
+ {\iftabulatefirstflushed\else\tabulateparameter{EQ}\fi
\global\tabulateequalfalse}
% \def\tabulatenormalcolumn#1%
@@ -856,7 +864,7 @@
\let\factor\!!plusone
\scratchskip\strutdp
\ExpandFirstAfter\processallactionsinset
- [\getvalue{\??tt\currenttabulate\c!distance}]
+ [\tabulateparameter\c!distance]
[ \v!blank=>\scratchskip\bigskipamount,
\v!depth=>\scratchskip\strutdp,
\v!small=>\def\factor{.25},
@@ -869,18 +877,10 @@
\ifconditional\tabulatesomeamble\kern\else\vskip\fi\scratchdimen % new
\egroup}
-% \def\dotabulaterule
-% {\color
-% [\getvalue{\??tt\currenttabulate\c!lijnkleur}]
-% {\scratchdimen\getvalue{\??tt\currenttabulate\c!lijndikte}%
-% \hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax
-% \doifvalue{\??tt\currenttabulate\c!afstand}\v!grid
-% {\kern-\scratchdimen}}} % experimental tm-prikkels
-
\def\dodotabulaterule#1%
{\color
- [\getvalue{\??tt\currenttabulate\c!rulecolor}]
- {\scratchdimen\getvalue{\??tt\currenttabulate\c!rulethickness}#1}}
+ [\tabulateparameter\c!rulecolor]
+ {\scratchdimen\tabulateparameter\c!rulethickness#1}}
\def\dotabulaterule
{\dodotabulaterule
@@ -891,7 +891,7 @@
\def\dotabulatelinerule
{\multispan\totaltabulatecolumns % \multispan is a plain macro
% for the moment this one
- \strut\hskip\getvalue{\??tt\currenttabulate\c!margin}%
+ \strut\hskip\tabulateparameter\c!margin
% neg values are ok !
\hskip\tabulateindent % new august 2003
\dodotabulaterule
@@ -955,12 +955,12 @@
\chardef\tabulaterepeathead\zerocount
\def\processtabulate[|#1|]% in the process of optimizing
- {\tabulateunit\getvalue{\??tt\currenttabulate\c!unit}%
+ {\tabulateunit\tabulateparameter\c!unit
\checkfulltabulatecontent
\globallet\tabulateruledepth \!!zeropoint
\globallet\tabulateruleheight\!!zeropoint
\ExpandFirstAfter\processaction % use \setalignmentswitch instead
- [\getvalue{\??tt\currenttabulate\c!align}]
+ [\tabulateparameter\c!align]
[ \v!normal=>\def\@@tabulatealign{0},% = default value
\v!right=>\def\@@tabulatealign{1},% chardefs gebruiken
\v!left=>\def\@@tabulatealign{2},%
@@ -977,9 +977,16 @@
\global\tabulatepwidth\zeropoint
\global\tabulateequalfalse
\resettabulatepheight
- \ifinsidefloat \else
+ \ifinsidesplitfloat
+ \donetrue
+ \else\ifinsidefloat
+ \donefalse
+ \else
+ \donetrue
+ \fi\fi
+ \ifdone
\processaction
- [\getvalue{\??tt\currenttabulate\c!header}]
+ [\tabulateparameter\c!header]
[\v!repeat=>\chardef\tabulaterepeathead\plusone,
\v!text=>\chardef\tabulaterepeathead\plustwo]%
\fi
@@ -1033,9 +1040,9 @@
\global\let\flushtabulated\empty
\let\savedbar|\let|\nexttabulate
\tabskip\zeropoint
- \ifdim\getvalue{\??tt\currenttabulate\c!margin}>\zeropoint
+ \ifdim\tabulateparameter\c!margin>\zeropoint
\!!toksa{&\flushtabulateindent\strut##%
- \tabskip\getvalue{\??tt\currenttabulate\c!margin}\strut
+ \tabskip\tabulateparameter\c!margin\strut
&##\tabskip\zeropoint}%
\else
\!!toksa{&\flushtabulateindent\strut##%
@@ -1248,7 +1255,7 @@
\ifnum\noftabulatelines>\plusone
\ifnum\noftabulatelines<\minusnoftabulatelines
\vskip\topskip\allowbreak\vskip-\topskip
- \vskip-\getvalue{\??tt\currenttabulate\c!rulethickness}%
+ \vskip-\tabulateparameter\c!rulethickness
\dotabulaterule
\fi
\fi
@@ -1267,7 +1274,11 @@
\chardef\tabulatepass\plustwo
%
\ifcase\tabulaterepeathead
- \startframedcontent[\getvalue{\??tt\currenttabulate\c!frame}]%
+ \ifinsidesplitfloat
+ \setbox\tabulatebox\vbox \bgroup
+ \else
+ \startframedcontent[\tabulateparameter\c!frame]%
+ \fi
\else
\setbox\tabulatebox\vbox \bgroup
\fi
@@ -1278,14 +1289,18 @@
{\vskip-\strutdp}% experimental tm-prikkels
%
\ifcase\tabulaterepeathead
- \stopframedcontent
+ \ifinsidesplitfloat
+ \egroup \splittabulatebox\tabulatebox
+ \else
+ \stopframedcontent
+ \fi
\else
\egroup \splittabulatebox\tabulatebox
\fi
%
\egroup
\ifinsidefloat \else
- \getvalue{\??tt\currenttabulate\c!after}%
+ \tabulateparameter\c!after
\fi
\egroup}
@@ -1304,47 +1319,69 @@
% \NC test \NC \input tufte \relax \NC \NR
% \stoptabulate
+% \def\splittabulatebox#1% #1 <> 0/2 / derived from the one in core-ntb.tex
+% {\ifinsidefloat
+% \unvbox#1%
+% \else
+% \ifcase\tabulaterepeathead\or
+% \setbox2\copy#1%
+% \setbox2\vsplit2 to \lineheight
+% \setbox2\vbox{\unvbox2}%
+% \fi
+% \doloop
+% {\setbox0\vsplit#1 to \onepoint % \lineheight
+% \ifdim\pagegoal<\maxdimen
+% \donetrue
+% \else\ifdim\pagetotal=\zeropoint
+% \donetrue
+% \else
+% \donefalse
+% \fi\fi
+% \ifdone
+% \setbox0\vbox{\unvbox0}%
+% \dimen0\pagetotal
+% \advance\dimen0\dp0
+% \advance\dimen0\ht0
+% \ifdim\dimen0>\pagegoal
+% \bgroup \page \egroup % make sure that local vars are kept
+% \ifcase\tabulaterepeathead\or
+% \unvcopy2
+% \or
+% \hbox{\strut\tabulateparameter\c!title}%
+% \fi
+% \fi
+% \fi
+% % test this on icare checklists / quite hacky ! ! !
+% \ifdim\ht0>\tabulateparameter\c!rulethickness\else
+% \kern-2\ht0 % brrrr
+% \fi
+% %
+% \unvbox0
+% \allowbreak
+% \ifvoid#1 \exitloop \fi}%
+% \fi}
+
\def\splittabulatebox#1% #1 <> 0/2 / derived from the one in core-ntb.tex
- {\ifinsidefloat
+ {\ifinsidesplitfloat
+ \dosplittabulatebox#1%
+ \else\ifinsidefloat
\unvbox#1%
\else
- \ifcase\tabulaterepeathead\or
- \setbox2\copy#1%
- \setbox2\vsplit2 to \lineheight
- \setbox2\vbox{\unvbox2}%
- \fi
- \doloop
- {\setbox0\vsplit#1 to \onepoint % \lineheight
- \ifdim\pagegoal<\maxdimen
- \donetrue
- \else\ifdim\pagetotal=\zeropoint
- \donetrue
- \else
- \donefalse
- \fi\fi
- \ifdone
- \setbox0\vbox{\unvbox0}%
- \dimen0\pagetotal
- \advance\dimen0\dp0
- \advance\dimen0\ht0
- \ifdim\dimen0>\pagegoal
- \bgroup \page \egroup % make sure that local vars are kept
- \ifcase\tabulaterepeathead\or
- \unvcopy2
- \or
- \hbox{\strut\getvalue{\??tt\currenttabulate\c!title}}%
- \fi
- \fi
- \fi
- % test this on icare checklists / quite hacky ! ! !
- \ifdim\ht0>\getvalue{\??tt\currenttabulate\c!rulethickness}\else
- \kern-2\ht0 % brrrr
- \fi
- %
- \unvbox0
- \allowbreak
- \ifvoid#1 \exitloop \fi}%
- \fi}
+ \dosplittabulatebox#1%
+ \fi\fi}
+
+\def\dosplittabulatebox#1%
+ {\resettsplit
+ \def\tsplitminimumfreelines{2}%
+ \def\tsplitminimumfreespace{0pt}%
+ \setbox\tsplitcontent\box#1%
+ \ifcase\tabulaterepeathead\or
+ \setbox\tsplithead\vsplit\tsplitcontent to \lineheight
+ \setbox\tsplithead\vbox{\unvbox\tsplithead}%
+ \or
+ \setbox\tsplithead\vbox{\hbox{\strut\tabulateparameter\c!title}}%
+ \fi
+ \handletsplit}
%D \starttyping
%D \setuptabulate[split=no,rule=line]
@@ -1425,7 +1462,7 @@
\c!distance={\v!depth,\v!medium},
\c!align=\v!normal,
\c!margin=\!!zeropoint,
- \c!split=\v!yes,
+ \c!split=\v!auto,
\c!header=\v!yes,
\c!title=,
\c!indenting=\v!no]
diff --git a/tex/context/base/core-tsp.tex b/tex/context/base/core-tsp.tex
new file mode 100644
index 000000000..4568a38a1
--- /dev/null
+++ b/tex/context/base/core-tsp.tex
@@ -0,0 +1,451 @@
+%D \module
+%D [ file=core-tsp,
+%D version=2000.10.20,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Splitting Tables,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%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 OTR Macros / Floating Bodies}
+
+\beginTEX
+ \expandafter \endinput
+\endTEX
+
+%D The code in this file is move here from other places.
+
+\unprotect
+
+% only to be used with single tokens (will be prim)
+
+\ifx\htdp\undefined
+ \def\htdp#1{\dimexpr\ht#1+\dp#1\relax}
+\fi
+
+%D Although the name resembles floats, and therefore this should be
+%D a page module, we decided to make it core functionality because the
+%D table code depends on it. Othrwise there would be too much
+%D overloading afterwards involved. Actually, the float part is rather
+%D generic and not that related to floats.
+
+% \splitfloat [settings] {\placetable[optional args]{test}} {content}
+
+\definenumber
+ [\??si]
+ [\c!way=\v!by\v!text,
+ \c!conversion=\@@siconversion]
+
+\def\setupfloatsplitting
+ {\dodoubleargument\getparameters[\??si]}
+
+\newif\ifinsidesplitfloat % will become chardef
+
+\newtoks \everysplitfloatsetup
+
+\def\splitfloat
+ {\dosingleempty\dosplitfloat}
+
+% \def\dosplitfloat[#1]#2% nog dubbele refs
+% {\ifinsidecolumns % tzt ook nog figuren splitten
+% % not yet supported
+% \else
+% \bgroup
+% \insidefloattrue
+% \insidesplitfloattrue
+% \getparameters[\??si][#1]%
+% \resetnumber[\??si]%
+% \def\floatcaptionsuffix{\convertednumber[\??si]}%
+% % \TABLEcaptionheight\@@silines\lineheight% brrr
+% % todo: auto == \getnoflines\captionheight
+% \let\extrasplitfloatlines\@@silines
+% \the\everysplitfloatsetup
+% \simplifypagebreak % \page becomes \goodbreak, no fails misserably
+% % todo: a preceding float does not count yet
+% % so we need a better predictor
+% \dowithnextbox
+% {\forgetall
+% \dontcomplain
+% \chardef\nodelocationmode\zerocount
+% \doloop
+% {\setbox2\vsplit\nextbox to \lineheight
+% \setbox2\vbox{\unvbox2}
+% \ifdim\ht2>\lineheight
+% \incrementnumber[\??si]%
+% \ifcase\rawnumber[\??si]\or \ifdim\nextboxht=\zeropoint
+% \let\floatcaptionsuffix\empty
+% \fi \fi
+% \bgroup
+% #2{\unvbox2}
+% \egroup
+% \ifdim\nextboxht>\zeropoint
+% \page
+% \decrementnumber[\floatcaptionnumber]%
+% \fi
+% \fi
+% \ifdim\nextboxht>\zeropoint
+% \page
+% \else
+% \expandafter\exitloop
+% \fi}%
+% \egroup}
+% \vbox
+% \fi}
+
+\ifx\floatcaptionsuffix\undefined \else
+ \let\floatcaptionsuffix\empty % will become \splitfloatcaptionsuffix
+\fi
+
+\def\extrasplitfloatlines{0}
+
+\def\dosplitfloat[#1]#2% nog dubbele refs
+ {\bgroup
+ \insidefloattrue
+ \insidesplitfloattrue
+ \getparameters[\??si][#1]%
+ \resetnumber[\??si]%
+ \def\floatcaptionsuffix{\convertednumber[\??si]}%
+ \let\extrasplitfloatlines\@@silines
+ \the\everysplitfloatsetup
+ \def\splitfloatcommand{#2}%
+ \global\settrue \onlyonesplitofffloat
+ \global\setfalse\somenextplitofffloat
+ \dopushsavedfloats
+ \@@sibefore
+ \let\next} % \bgroup
+
+\settrue \onlyonesplitofffloat
+\setfalse\somenextplitofffloat
+
+%D When \type {inbetween} is made empty instead of the
+%D default \type {\page}, we will get delayed flushing
+%D 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
+
+\def\dodowithsplitofffloat
+ {\dowithnextbox
+ {\forgetall
+ \dontcomplain
+ \chardef\nodelocationmode\zerocount % bypass auto-renumbering
+ \incrementnumber[\??si]%
+ \ifcase\rawnumber[\??si]\or \ifconditional\onlyonesplitofffloat
+ \let\floatcaptionsuffix\empty
+ \fi \fi
+ \bgroup
+ \ifconditional\somenextplitofffloat
+ \settrue\retainfloatnumber
+ \else
+ \setfalse\retainfloatnumber
+ \fi
+ \splitfloatcommand{\box\nextbox}%
+ \egroup
+ \ifconditional\somenextplitofffloat
+ \doifelsenothing\@@siinbetween
+ {\ifconditional\tsplitfirstdone\else\page\fi}
+ \@@siinbetween
+ \else
+ \@@siafter
+ \dopopsavedfloats
+ \doflushsavedfloats
+ \fi
+ \global\settrue\tsplitfirstdone}%
+ \vbox}
+
+\def\nodowithsplitofffloat
+ {\dowithnextbox
+ {\forgetall
+ \dontcomplain
+ \box\nextbox % maybe an option to unvbox
+ \global\settrue\tsplitfirstdone}%
+ \vbox}
+
+\def\dochecksplitofffloat#1% box
+ {\ifinsidesplitfloat
+ \ifdim\ht#1=\zeropoint
+ \global\setfalse\somenextplitofffloat
+ \else
+ \global\settrue \somenextplitofffloat
+ \global\setfalse\onlyonesplitofffloat
+ \fi
+ \fi}
+
+\def\analyzesplitfloatcaption#1% depend son page-flt
+ {\doif\extrasplitfloatlines\v!auto
+ {\bgroup
+ \settrue\retainfloatnumber
+ \chardef\nodelocationmode\zerocount
+ \forcelocalfloats
+ \setuplocalfloats[\c!before=,\c!after=,\c!inbetween=]%
+ \splitfloatcommand{\hbox to \wd#1{\strut}}% dummy line
+ \setbox\scratchbox\vbox{\flushlocalfloats}%
+ \getnoflines{\ht\scratchbox}%
+ \resetlocalfloats
+ \advance\noflines\minusone % compensate dummy line
+ \expanded{\egroup\noexpand\edef\noexpand\extrasplitfloatlines{\the\noflines}}}}
+
+% \def\analyzesplitfloatcaption#1%
+% {\edef\extrasplitfloatlines{11}}
+
+\def\dowithsplitofffloat % nextbox
+ {\ifinsidesplitfloat
+ \expandafter\dodowithsplitofffloat
+ \else
+ \expandafter\nodowithsplitofffloat
+ \fi}
+
+\def\doifnotinsidesplitfloat
+ {\ifinsidesplitfloat\expandafter\gobbleoneargument\fi}
+
+%D Some defaults:
+
+\setupfloatsplitting
+ [\c!conversion=\v!character, % \v!romannumerals
+ \c!lines=3,
+ \c!before=,
+ \c!inbetween=\page,
+ \c!after=]
+
+%D Table splitter, on top of previous code:
+
+\newbox\tsplitcontent
+\newbox\tsplitresult
+\newbox\tsplithead
+\newbox\tsplitnext
+\newbox\tsplittail
+
+\def\resettsplit
+ {\def\tsplitminimumfreelines{0}%
+ \def\tsplitminimumfreespace{0pt}%
+ \setbox\tsplitcontent \vbox{}%
+ \setbox\tsplitresult \vbox{}%
+ \setbox\tsplithead \vbox{}%
+ \setbox\tsplitnext \vbox{}%
+ \setbox\tsplittail \vbox{}%
+ \let\tsplitbeforeresult\donothing
+ \let\tsplitafterresult \donothing
+ \let\tsplitinbetween \donothing
+ \let\tsplitbefore \donothing
+ \let\tsplitafter \donothing
+ \let\postprocesstsplit \donothing}
+
+\resettsplit
+
+% todo: keep tail to rest, so we need a lookahead
+
+\newconditional\tsplitfirstdone
+
+\def\handletsplit
+ {\analyzesplitfloatcaption\tsplitcontent
+ \global\setfalse\tsplitfirstdone
+ \testpage
+ [\tsplitminimumfreelines]
+ [\dimexpr\tsplitminimumfreespace+\extrasplitfloatlines\lineheight\relax]%
+ \setbox\scratchbox\vbox{\tsplitinbetween}%
+ \edef\tsplitinbetweenheight{\the\htdp\scratchbox}% etex
+ \!!doneafalse
+ \doloop
+ {\ifinsidecolumns
+ % brrr, assumes empty columns
+ \global\setfalse\tsplitfirstdone
+ \scratchdimen\textheight
+ \!!donectrue
+ \else
+ \ifconditional\tsplitfirstdone
+ \scratchdimen\textheight
+ \!!donectrue
+ \else\ifdim\pagegoal<\maxdimen
+ \scratchdimen\dimexpr\pagegoal-\pagetotal\relax
+ \!!donecfalse
+ \else
+ \scratchdimen\textheight
+ \!!donectrue
+ \fi\fi
+ \fi
+ \scratchdimen\dimexpr\scratchdimen-\tsplitinbetweenheight-\tsplitminimumfreespace-\extrasplitfloatlines\lineheight\relax
+ \ifdim\htdp\tsplittail>\zeropoint
+ \advance\scratchdimen-\htdp\tsplittail
+ \fi
+ \setbox\tsplitresult\vbox
+ {\ifdim\ht\tsplithead>\zeropoint
+ \unvcopy\tsplithead
+ \tsplitinbetween
+ \fi}%
+ \if!!donea\else\ifdim\ht\tsplitnext>\zeropoint
+ \setbox\tsplithead\box\tsplitnext
+ \fi\fi
+ \!!doneatrue
+ \ifdim\ht\tsplitresult>\zeropoint
+ \!!donedtrue % table head
+ \else
+ \!!donedfalse % no tablehead
+ \fi
+ \doloop
+ {\setbox\scratchbox\vsplit\tsplitcontent to \onepoint % \lineheight
+ \setbox\scratchbox\vbox{\unvbox\scratchbox}%
+ \ifdim\dimexpr\scratchdimen-\htdp\scratchbox-\htdp\tsplitresult\relax>\zeropoint
+ \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvbox\scratchbox}%
+ \ifvoid\tsplitcontent \exitloop \fi
+ \else\if!!doned
+ % we only have a tablehead so far
+ \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvbox\scratchbox}%
+ \exitloop
+ \else\if!!donec
+ % we have text height available, but the (one) cell is too
+ % large to fit, so, in order to avoid loops/deadcycles we do:
+ \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvbox\scratchbox}%
+ \exitloop
+ \else
+ \setbox\tsplitcontent\vbox
+ {\unvbox\scratchbox
+ \ifvoid\tsplitcontent\else\unvbox\tsplitcontent\fi}%
+ \exitloop
+ \fi\fi\fi
+ \!!donedfalse
+ \!!donecfalse}%
+ \postprocesstsplit
+ \dochecksplitofffloat\tsplitcontent
+ \ifvoid\tsplitcontent
+ \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvcopy\tsplittail}%
+ \dowithsplitofffloat{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}%
+ \doifnotinsidesplitfloat\tsplitafter
+ \endgraf
+ \exitloop
+ \else
+ % hack
+ \ifdim\pagegoal<\maxdimen
+ \global\pagegoal\dimexpr\pagegoal+\lineheight\relax % etex
+ \fi
+ % brrr
+ \ifdim\ht\tsplitresult>\zeropoint
+ \setbox\tsplitresult\vbox{\unvbox\tsplitresult\unvcopy\tsplittail}%
+ \dowithsplitofffloat{\tsplitbeforeresult\box\tsplitresult\tsplitafterresult}%
+ \doifnotinsidesplitfloat\tsplitafter
+ \endgraf
+ \fi
+ \ifinsidecolumns
+ \doifnotinsidesplitfloat\goodbreak
+ \else
+ \doifnotinsidesplitfloat\page
+ \fi
+ \fi}}
+
+\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
diff --git a/tex/context/base/core-uti.tex b/tex/context/base/core-uti.tex
index 680de0f7a..66b5b46df 100644
--- a/tex/context/base/core-uti.tex
+++ b/tex/context/base/core-uti.tex
@@ -31,6 +31,7 @@
\edef\utilityversion{1998.07.07} % was: 1996.03.15 % status variables
\edef\utilityversion{1998.12.20} % was: 1998.07.07 % index attributes
\edef\utilityversion{2003.07.19} % was: 1998.12.20 % object pages
+\edef\utilityversion{2006.06.23} % was: 2003.07.19 % -- instead of :
% Bepaalde commando's worden als string weggeschreven. Deze
% zijn aan het eind van deze file gedefinieerd.
@@ -56,10 +57,10 @@
{\checksectionseparator}
{\@@utilityerrormessage\resetutilities\endinput}}
-\def\checksectionseparator % catches backward compatibility conflict
- {\doifnot\sectionseparator:\endinput} % this dependency may go in a few years
+\def\checksectionseparator % catches backward compatibility conflict
+ {}% \doifnot\sectionseparator:\endinput} % this dependency may go in a few years
-\def\dosplitofffoliopart[#1::#2::#3]{#3}
+\def\dosplitofffoliopart[#1--#2--#3]{#3}
\def\thisissectionseparator#1%
{\bgroup
diff --git a/tex/context/base/font-ini.tex b/tex/context/base/font-ini.tex
index 75c59605b..f6c1b9904 100644
--- a/tex/context/base/font-ini.tex
+++ b/tex/context/base/font-ini.tex
@@ -1048,21 +1048,21 @@
\def\dodosetmathfamily#1#2%
{\@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \relax
- \@EA\ifx \csname\fontclass\fontbody\backfamily\fontsize\endcsname \relax
- \@EA\ifx \csname\fontclass\fontbody\backfamily\endcsname \relax
+ \@EA\ifx \csname\fontclass\fontbody\c!mm\fontfamily \endcsname\relax
+ \@EA\ifx \csname\fontclass\fontbody \backfamily\fontsize\endcsname\relax
+ \@EA\ifx \csname\fontclass\fontbody \backfamily \endcsname\relax
\@EA\ifx \csname \fontbody\c!mm\fontfamily\fontsize\endcsname\relax
- \@EA\ifx \csname \fontbody\c!mm\fontfamily\endcsname \relax
- \@EA\ifx \csname \fontbody\backfamily\fontsize\endcsname \relax
- \@EA\ifx \csname \fontbody\backfamily\endcsname \relax
- \autofontsizetrue \nullfont \else
- \autofontsizetrue \csname \fontbody\backfamily\endcsname \fi \else
- \autofontsizefalse \csname \fontbody\backfamily\fontsize\endcsname \fi \else
- \autofontsizetrue \csname \fontbody\c!mm\fontfamily\endcsname \fi \else
+ \@EA\ifx \csname \fontbody\c!mm\fontfamily \endcsname\relax
+ \@EA\ifx \csname \fontbody \backfamily\fontsize\endcsname\relax
+ \@EA\ifx \csname \fontbody \backfamily \endcsname\relax
+ \autofontsizetrue \nullfont \else
+ \autofontsizetrue \csname \fontbody \backfamily \endcsname\fi \else
+ \autofontsizefalse \csname \fontbody \backfamily\fontsize\endcsname\fi \else
+ \autofontsizetrue \csname \fontbody\c!mm\fontfamily \endcsname\fi \else
\autofontsizefalse \csname \fontbody\c!mm\fontfamily\fontsize\endcsname\fi \else
- \autofontsizetrue \csname\fontclass\fontbody\backfamily\endcsname \fi \else
- \autofontsizefalse \csname\fontclass\fontbody\backfamily\fontsize\endcsname \fi \else
- \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \fi \else
+ \autofontsizetrue \csname\fontclass\fontbody \backfamily \endcsname\fi \else
+ \autofontsizefalse \csname\fontclass\fontbody \backfamily\fontsize\endcsname\fi \else
+ \autofontsizetrue \csname\fontclass\fontbody\c!mm\fontfamily \endcsname\fi \else
\autofontsizefalse \csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname\fi
#1#2\font}
@@ -1103,12 +1103,12 @@
\def\dodosetmathfamilyA#1#2%
{\ifcsname \fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
\csname \fontbody\c!mm\fontfamily\fontsize\endcsname \else
- \ifcsname \fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
- \csname \fontbody\c!mm\fontfamily\endcsname \else
- \ifcsname \fontbody\backfamily\fontsize\endcsname \autofontsizefalse
- \csname \fontbody\backfamily\fontsize\endcsname \else
- \ifcsname \fontbody\backfamily\endcsname \autofontsizetrue
- \csname \fontbody\backfamily\endcsname \else
+ \ifcsname \fontbody\c!mm\fontfamily \endcsname \autofontsizetrue
+ \csname \fontbody\c!mm\fontfamily \endcsname \else
+ \ifcsname \fontbody \backfamily\fontsize\endcsname \autofontsizefalse
+ \csname \fontbody \backfamily\fontsize\endcsname \else
+ \ifcsname \fontbody \backfamily \endcsname \autofontsizetrue
+ \csname \fontbody \backfamily \endcsname \else
\nullfont \autofontsizetrue
\fi\fi\fi\fi
#1#2\font}
@@ -1116,12 +1116,12 @@
\def\dodosetmathfamilyB#1#2%
{\ifcsname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \autofontsizefalse
\csname\fontclass\fontbody\c!mm\fontfamily\fontsize\endcsname \else
- \ifcsname\fontclass\fontbody\c!mm\fontfamily\endcsname \autofontsizetrue
- \csname\fontclass\fontbody\c!mm\fontfamily\endcsname \else
- \ifcsname\fontclass\fontbody\backfamily\fontsize\endcsname \autofontsizefalse
- \csname\fontclass\fontbody\backfamily\fontsize\endcsname \else
- \ifcsname\fontclass\fontbody\backfamily\endcsname \autofontsizetrue
- \csname\fontclass\fontbody\backfamily\endcsname \else
+ \ifcsname\fontclass\fontbody\c!mm\fontfamily \endcsname \autofontsizetrue
+ \csname\fontclass\fontbody\c!mm\fontfamily \endcsname \else
+ \ifcsname\fontclass\fontbody \backfamily\fontsize\endcsname \autofontsizefalse
+ \csname\fontclass\fontbody \backfamily\fontsize\endcsname \else
+ \ifcsname\fontclass\fontbody \backfamily \endcsname \autofontsizetrue
+ \csname\fontclass\fontbody \backfamily \endcsname \else
\dodosetmathfamilyA#1#2%
\fi\fi\fi\fi
#1#2\font}
@@ -1610,6 +1610,9 @@
%
% \testfeatureonce{5000}{\definefontsynonym[somefont][somename]} \end
+
+\def\classfont#1#2{#1#2} % \definefont[whatever][\classfont{xx}{yy} at 10pt]
+
\def\definefontsynonym[#1]#2[#3]%
{\edef\@@fontfile{#3}%
\@EA\let\csname\??ff\fontclass#1\endcsname\@@fontfile
@@ -4320,15 +4323,30 @@
\let\thedefinedfont\relax
-\def\symbolicscaledfont#1#2%
- {\scaledfont\fontbody
- \scaledfont#1\scaledfont
- \font\thedefinedfont\truefontname{\glyphfontfile{#2}} at
+% \def\symbolicscaledfont#1#2%
+% {\scaledfont\fontbody
+% \scaledfont#1\scaledfont
+% \font\thedefinedfont\truefontname{\glyphfontfile{#2}} at
+% \currentfontbodyscale\scaledfont
+% \thedefinedfont}
+%
+% \unexpanded\def\symbolicfont
+% {\symbolicscaledfont\plusone}
+%
+% even more control (needed for mthsqrt etc)
+
+\def\symbolicsizedfont#1#2#3%
+ {\scaledfont#1%
+ \scaledfont#2\scaledfont
+ \font\thedefinedfont\truefontname{\glyphfontfile{#3}} at
\currentfontbodyscale\scaledfont
\thedefinedfont}
+\def\symbolicscaledfont
+ {\symbolicsizedfont\fontbody}
+
\unexpanded\def\symbolicfont
- {\symbolicscaledfont\plusone}
+ {\symbolicsizedfont\fontbody\plusone}
\unexpanded\def\getglyph#1#2% slow, faster, much faster
%{{\definefont[\s!dummy][\glyphfontfile{#1} sa \currentfontscale]\dummy#2}}
diff --git a/tex/context/base/lang-all.xml b/tex/context/base/lang-all.xml
index 0d5ea936b..486ef5d08 100644
--- a/tex/context/base/lang-all.xml
+++ b/tex/context/base/lang-all.xml
@@ -11,7 +11,7 @@
<year>1991</year>
<owner>Julio Sanchez (jsanchez@gmv.es)</owner>
<comment>These patterns have been derived from "On Word Division in Spanish"
- Jos'e A. Ma~nas</comment>
+ Jos'e A. Ma~nas</comment>
</copyright>
<copyright>
<year>1997</year>
diff --git a/tex/context/base/lang-ini.tex b/tex/context/base/lang-ini.tex
index 469e90c53..a031a32ed 100644
--- a/tex/context/base/lang-ini.tex
+++ b/tex/context/base/lang-ini.tex
@@ -95,7 +95,7 @@
\stopmessages
\startmessages norwegian library: linguals
- title: sprk
+ title: sprøk
1: orddelingsmønster -- for -- er lest inn (n=--,e=--,m=--)
2: ingen orddelingsmønster -- for -- (n=--,e=--,m=--) (--,--)
3: orddelingsdefinisjon -- for -- er lest inn (n=--,e=--,m=--)
diff --git a/tex/context/base/lang-ita.tex b/tex/context/base/lang-ita.tex
index 776078118..950f87344 100644
--- a/tex/context/base/lang-ita.tex
+++ b/tex/context/base/lang-ita.tex
@@ -23,7 +23,7 @@
%D
%D \starttabulate[|lB|l|]
%D \NC Italian \NC Giuseppe Bilotta \NC \NR
-%D \NC Rumanian \NC Dan Seracu \NC \NR
+%D \NC Romanian \NC Dan Seracu \NC \NR
%D \NC Portuguese \NC Pedro F. M. Mendon\c a \NC \NR
%D \stoptabulate
diff --git a/tex/context/base/m-database.tex b/tex/context/base/m-database.tex
index a657e38c3..b707a8ecc 100644
--- a/tex/context/base/m-database.tex
+++ b/tex/context/base/m-database.tex
@@ -3,15 +3,15 @@
%D version=2006.04.23,
%D title=\CONTEXT\ Modules,
%D subtitle=Database Thingies,
-%D author=Hans Hagen,
+%D author=Hans Hagen\& Taco Hoekwater,
%D date=\currentdate,
%D copyright=PRAGMA
+%D ]
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-
\unprotect
% % % to be added to mult-* files
@@ -19,26 +19,100 @@
% % % todo: \dontcollectseparatedlist via k/v
\definesystemvariable{ls}
-\def\c!first{first}
-\def\c!last {last}
+
+\def\c!first {first}
+\def\c!last {last}
+\def\c!quotechar {quotechar}
+
+\let\@NX\noexpand
+
+%D {processquotedlist}
+%D
+%D An even more general list processing macro is the
+%D following one:
+%D
+%D \starttyping
+%D \processquotedlist{beginsym}{endsym}{separator}\docommando list
+%D \stoptyping
+%D
+%D This one supports arbitrary open and close symbols as well
+%D as user defined separators.
+%D
+%D \starttyping
+%D \processquotedlist(){,}{"}\docommando(a=>b=>c=>d)
+%D \stoptyping
+
+\def\processquotedlist#1#2#3#4#5%
+ {\def\csvquotechar{#4}%
+ \edef\doconvertcsvquoteditem#4##1#4##2%
+ {\@NX\ifx##2#3%
+ \let\@NX\next\@NX\doconvertcsvlist
+ \def\@NX\arg{#3}%
+ \edef\@NX\temp{##1}%
+ \@NX\expanded{\@NX#5{\@NX\temp}}%
+ \@NX\else
+ \let\@NX\next\@NX\redoconvertcsvquoteditem
+ \def\@NX\arg{##1\@NX\csvquotechar}%
+ \@NX\fi
+ \@NX\expandafter\@NX\next\@NX\arg}%
+ \edef\redoconvertcsvquoteditem##1#4##2%
+ {\@NX\ifx##2#3%
+ \let\@NX\next\@NX\doconvertcsvlist
+ \def\@NX\arg{#3}%
+ \edef\@NX\temp{##1}%
+ \@NX\expanded{\@NX#5{\@NX\temp}}%
+ \@NX\else
+ \let\@NX\next\@NX\redoconvertcsvquoteditem
+ \def\@NX\arg{##1\@NX\csvquotechar}%
+ \@NX\fi
+ \@NX\expandafter\@NX\next\@NX\arg}%
+ \edef\doconvertcsvitem##1#3%
+ {\edef\@NX\temp{##1}%
+ \@NX\expanded{\@NX#5{\@NX\temp}}%
+ \@NX\doconvertcsvlist#3}%
+ \edef\doconvertcsvlist#3##1%
+ {\@NX\ifx##1\@NX#2%
+ \let\@NX\next \@NX\gobbleoneargument
+ \@NX\else\@NX\ifx##1#4%
+ \let\@NX\next \@NX\doconvertcsvquoteditem
+ \@NX\else
+ \let\@NX\next \@NX\doconvertcsvitem
+ \@NX\fi\@NX\fi \@NX\next##1}%
+ \doconvertcsvitem}
+
+\gdef\doprocessseparatedquoteditem#1%
+ {\appendseparatedlistparameter\c!left%
+ \appendseparatedlistcontent{#1}%
+ \appendseparatedlistparameter\c!right}
+
% % % so far
-% \long\def\processseplist#1#2#3\end
-% {\def\doprocessseplist####1####2\end
-% {\ifx\end####1%
-% \expandafter\gobbleoneargument
+% \def\dodefineprocessseplist#1#2% separator \docommand
+% {\def\dodoprocessseplist##1##2#1%
+% {\ifx\relax##1%
+% \expandafter\nodoprocessseplist
+% \else\ifx##1#1%
+% #2{}%
+% #2{##2}%
+% \expandafter\expandafter\expandafter\dodoprocessseplist
% \else
-% #2{####1####2}%
-% \fi
-% \doprocessseplist}%
-% \dodoprocessseplist#3\end}
+% #2{##1##2}%
+% \expandafter\expandafter\expandafter\dodoprocessseplist
+% \fi\fi}%
+% \def\doprocessseplist##1\relax
+% {\dodoprocessseplist##1#1\relax#1\relax\relax\end}}
+%
+% a version more robust with regard to {a a} b c d situations
+
+\def\edef@relax{\relax}
\def\dodefineprocessseplist#1#2% separator \docommand
{\def\dodoprocessseplist##1##2#1%
- {\ifx\relax##1%
+ {\edef\!!stringa{##1}%
+ \ifx\edef@relax\!!stringa
\expandafter\nodoprocessseplist
- \else\ifx##1#1%
+ \else\ifx\!!stringa#1%
#2{}%
#2{##2}%
\expandafter\expandafter\expandafter\dodoprocessseplist
@@ -46,13 +120,13 @@
#2{##1##2}%
\expandafter\expandafter\expandafter\dodoprocessseplist
\fi\fi}%
- \def\doprocessseplist##1\relax
- {\dodoprocessseplist##1#1\relax#1\relax\relax\end}}
+ \def\doprocessseplist##1\relax
+ {\dodoprocessseplist##1#1\relax#1\relax\relax\end}}
\def\nodoprocessseplist#1\end
{}
-\long\def\processseplist#1#2#3\relax
+\long\def\processseplist#1#2#3\relax raw version
{\dodefineprocessseplist{#1}{#2}%
\dodoprocessseplist#3#1\relax#1\relax\relax\end}
@@ -98,90 +172,128 @@
\chardef\separatedlistmode\zerocount
-\bgroup \obeylines
+\def\setcurrentlistseparator
+ {\edef\currentlistseparator
+ {\executeifdefined
+ {\??ls::\csname\??ls\currentseparatedlist\c!separator\endcsname}%
+ {\csname\??ls\currentseparatedlist\c!separator\endcsname}}%
+ \doifvalue{\??ls\currentseparatedlist\c!separator}{tab}
+ {\catcode`\^^I=12\relax}%
+ \ifx\currentlistseparator\empty\def\currentlistseparator{,}\fi}
+
+\bgroup \catcode`\^^I=12
+ \setgvalue{\??ls::tab}{ }
+ \setgvalue{\??ls::space}{ }
+ \setgvalue{\??ls::comma}{,}
+\egroup
-\gdef\doprocessseparatedfileline%
- {\ifeof\scratchread%
- \ifcase\separatedlistmode\appendseparatedlistparameter\c!after\fi%
- \immediate\closein\scratchread%
- \expandafter\flushseparatedlistdata%
- \else\ifx\line\empty%
+\def\doprocessseparatedfileline
+ {\ifeof\scratchread
+ \ifcase\separatedlistmode\appendseparatedlistparameter\c!after\fi
+ \immediate\closein\scratchread
+ \expandafter\flushseparatedlistdata
+ \else\ifx\line\empty
% skip, can be comment
- \read\scratchread to\line%
- \@EA\dodoprocessseparatedfileline%
+ \read\scratchread to\line
+ \@EA\dodoprocessseparatedfileline
\else
\appendseparatedlistparameter{\ifcase\separatedlistmode\c!first\else\c!command\fi}%
- \expandafter\doprocessseplist\line\relax%
- \ifcase\separatedlistmode\appendseparatedlistparameter\c!last\fi%
- \read\scratchread to\line%
- \@EAEAEA\dodoprocessseparatedfileline%
+ \ifx\currentlistquotechar\empty%
+ \expandafter\doprocessseplist\line\relax
+ \else
+ \expanded{\processquotedlist{}{\noexpand\end}%
+ {\currentlistseparator}{\currentlistquotechar}%
+ \noexpand\doprocessseparatedquoteditem \line\currentlistseparator\noexpand\end}%
+ \fi
+ \ifcase\separatedlistmode\appendseparatedlistparameter\c!last\fi
+ \read\scratchread to\line
+ \@EAEAEA\dodoprocessseparatedfileline
\fi\fi}
-\gdef\dodoprocessseparatedfileline%
+\def\dodoprocessseparatedfileline
{\doprocessseparatedfileline}
-\gdef\doprocessseparatedfile[#1][#2]%
- {\bgroup%
+\def\doprocessseparatedfile[#1][#2]%
+ {\bgroup
\edef\currentseparatedlist{#1}%
\doifdefined{\??ls\currentseparatedlist\c!command}{\chardef\separatedlistmode\plusone}%
- \edef\currentlistseparator{\csname\??ls\currentseparatedlist\c!separator\endcsname}%
- \ifx\currentlistseparator\empty\def\currentlistseparator{,}\fi%
- \expandafter\dodefineprocessseplist\expandafter{\currentlistseparator}\doprocessseparateditem%
- \initializeseparatedlistdata%
+ \setcurrentlistseparator
+ \edef\currentlistquotechar{\csname\??ls\currentseparatedlist\c!quotechar\endcsname}%
+ \expandafter\dodefineprocessseplist\expandafter{\currentlistseparator}\doprocessseparateditem
+ \initializeseparatedlistdata
\directsetup{\currentseparatedlist:\executeifdefined{\??ls\currentseparatedlist\c!setups}\s!default}%
- \ifcase\separatedlistmode\appendseparatedlistparameter\c!before\fi%
- \endlinechar\minusone%
- \ignorelines%
+ \ifcase\separatedlistmode\appendseparatedlistparameter\c!before\fi
+ \endlinechar\minusone
+ \ignorelines
\catcode`\#\@@comment
- \immediate\openin\scratchread=#2\relax% todo: \doopenin
- \read\scratchread to\line%
+ \immediate\openin\scratchread=#2\relax % todo: \doopenin
+ \read\scratchread to\line
\doprocessseparatedfileline}
-\gdef\dostartseparatedlist#1[#2]%
- {\bgroup%
+\def\dostartseparatedlist#1[#2]%
+ {\bgroup
\edef\currentseparatedlist{#2}%
\doifdefined{\??ls\currentseparatedlist\c!command}{\chardef\separatedlistmode\plusone}%
- \obeylines%
- \let#1\relax%
+ \obeylines
+ \let#1\relax
\def\separateslistend{#1}%
- \edef\currentlistseparator{\csname\??ls\currentseparatedlist\c!separator\endcsname}%
- \ifx\currentlistseparator\empty\def\currentlistseparator{,}\fi%
- \expandafter\dodefineprocessseplist\expandafter{\currentlistseparator}\doprocessseparateditem%
+ \setcurrentlistseparator
+ \edef\currentlistquotechar{\csname\??ls\currentseparatedlist\c!quotechar\endcsname}%
+ \expandafter\dodefineprocessseplist\expandafter{\currentlistseparator}\doprocessseparateditem
\directsetup{\currentseparatedlist:\executeifdefined{\??ls\currentseparatedlist\c!setups}\s!default}%
- \initializeseparatedlistdata%
- \ifcase\separatedlistmode\appendseparatedlistparameter\c!before\fi%
+ \initializeseparatedlistdata
+ \ifcase\separatedlistmode\appendseparatedlistparameter\c!before\fi
\dodostartseparatedlist}
-\gdef\dodostartseparatedlist#1
- {\doprocessseparatedline}
-
-\gdef\doprocessseparatedline#1
+\def\redoprocessseparatedline#1%
{\def\!!stringa{#1}%
- \ifx\!!stringa\separateslistend%
- \ifcase\separatedlistmode\appendseparatedlistparameter\c!after\fi%
- \expandafter\flushseparatedlistdata%
+ \ifx\!!stringa\separateslistend
+ \ifcase\separatedlistmode\appendseparatedlistparameter\c!after\fi
+ \expandafter\flushseparatedlistdata
\else%
\appendseparatedlistparameter{\ifcase\separatedlistmode\c!first\else\c!command\fi}%
- \expandafter\doprocessseplist#1\relax%
- \ifcase\separatedlistmode\appendseparatedlistparameter\c!last\fi%
- \expandafter\dodoprocessseparatedline%
+ \ifx\currentlistquotechar\empty%
+ \doprocessseplist#1\relax
+ \else%
+ \convertargument#1\to\csvdata%
+ \expanded{\processquotedlist{}{\noexpand\end}%
+ {\currentlistseparator}{\currentlistquotechar}%
+ \noexpand\doprocessseparatedquoteditem \csvdata\currentlistseparator\noexpand\end}%
+ \fi
+ \ifcase\separatedlistmode\appendseparatedlistparameter\c!last\fi
+ \expandafter\dodoprocessseparatedline
\fi}
-\gdef\dodoprocessseparatedline%
+\def\doprocessseparatedline
+ {\doifnextcharelse\bgroup\xdoprocessseparatedline\ydoprocessseparatedline}
+
+\def\dodoprocessseparatedline
{\doprocessseparatedline}
-\gdef\doprocessseparateditem#1%
+\def\doprocessseparateditem#1%
{\ifcase\separatedlistmode
- \appendseparatedlistparameter\c!left%
+ \appendseparatedlistparameter\c!left
\appendseparatedlistcontent{#1}%
\appendseparatedlistparameter\c!right
\else
\appendseparatedlistcontent{{#1}}%
\fi}
+
+\bgroup \obeylines
+
+ \gdef\dodostartseparatedlist#1
+ {\doprocessseparatedline}
+
+ \gdef\xdoprocessseparatedline#1#2
+ {\redoprocessseparatedline{{{#1}}#2}}
+
+ \gdef\ydoprocessseparatedline#1
+ {\redoprocessseparatedline{#1}}
+
\egroup
-\startsetups CVS:unix
+\startsetups CSV:unix
\catcode`\#=\@@comment
\stopsetups
@@ -193,6 +305,7 @@
\getparameters
[\??ls#1]
[\c!separator=,
+ \c!quotechar=,
\c!first=,
\c!left=,
\c!before=,
@@ -202,63 +315,70 @@
% \c!command=,
#2]}
+\def\setupseparatedlist
+ {\dodoubleempty\dosetupseparatedlist}
+
+\def\dosetupseparatedlist[#1]% [#2]
+ {\getparameter[\??ls#1]} % [#2]
+
\def\startseparatedlist[#1]%
{\dostartseparatedlist\stopseparatedlist[#1]}
\def\processseparatedfile
{\dodoubleargument\doprocessseparatedfile}
-\protect \endinput
+\protect \doifnotmode{demo}{\endinput}
\defineseparatedlist
- [CVS]
+ [CSV]
[separator={,},
first=\bTR,last=\eTR,
left=\bTD,right=\eTD,
before=\bTABLE,after=\eTABLE]
-\startseparatedlist[CVS]
+\startseparatedlist[CSV]
a,b,c
d,e,f
\stopseparatedlist
-\startCVS
+\startCSV
a,b,c
d,e,f
-\stopCVS
+\stopCSV
\defineseparatedlist
- [CVS]
+ [CSV]
[separator={,},
+ quotechar={"},
first=\NC,last=\NR,
left=,right=\NC,
before={\starttabulate[|l|l|l|]},after=\stoptabulate]
-\startCVS
-a,b,c
-d,e,f
-\stopCVS
+\startCSV
+a,b,"c,d"
+d,"""",f
+\stopCSV
\defineseparatedlist
- [CVS]
+ [CSV]
[separator={ },
first=\NC,last=\NR,
left=,right=\NC,
before={\starttabulate[|l|l|l|]},after=\stoptabulate]
-\startCVS
+\startCSV
a b c
d e f
-\stopCVS
+\stopCSV
\defineseparatedlist
- [CVS]
+ [CSV]
[setups=unix,
first=\NC,last=\NR,
left=,right=\NC,
before={\starttabulate[|l|l|l|]},after=\stoptabulate]
-% \startsetups CVS:unix
+% \startsetups CSV:unix
% \catcode`\#=\@@comment
% \stopsetups
@@ -267,10 +387,10 @@ d e f
% # 4,5,6
% 4,5,6
-\processseparatedfile[CVS][test.dat]
+\processseparatedfile[CSV][test.dat]
\defineseparatedlist
- [CVSX]
+ [CSVX]
[command=\Whatever,
separator={,},
first=\bTR,last=\eTR,
@@ -279,7 +399,7 @@ d e f
\def\Whatever#1#2#3{[#1][#2][#3]\endgraf}
-\startseparatedlist[CVSX]
+\startseparatedlist[CSVX]
a,b,c
d,e,f
\stopseparatedlist
diff --git a/tex/context/base/m-r.tex b/tex/context/base/m-r.tex
index fe208cf75..244b62c36 100644
--- a/tex/context/base/m-r.tex
+++ b/tex/context/base/m-r.tex
@@ -84,35 +84,62 @@
\def\stopRhidden
{\doifmode{*\v!first}\runR}
+% \def\runR % " " needed to preserve < >
+% {\executesystemcommand{texmfstart
+% --ifchanged=\Rfile\space --direct R
+% "-q --save --restore < \Rfile\space > \Rfile.out"}}
+
\def\runR
{\executesystemcommand{texmfstart
-% --ifchanged=\Rfile\space bin:R
--ifchanged=\Rfile\space --direct R
- "-q --save --restore < \Rfile\space > \Rfile.out"}}
+ CMD BATCH -q --save --restore \Rfile\space \Rfile.out}}
\protect \doifnotmode{demo}{\endinput}
% Johan's test file:
+\usemodule[r]
+
+\def\R{R}
+
+\setupcolors[state=start]
+
+\setuptyping
+ [Rtype]
+ [color=darkgreen]
+
\starttext
+First a test of whether the workspace is persistent:
+bla
+
\startR
a <- "bla"
b <- "blabla"
ls()
\stopR
-bla bla
+One \R run ends, another begins.
+
+\startR
+ls()
+\stopR
+
+Now follows a hidden \R run which cleans the R workspace
\startRhidden
rm(list=ls())
save.image()
\stopRhidden
-more bla
+What is in the workspace now?
\startR
ls()
+\stopR
+
+Then a small test of generating a graphic, in this case a pdf
+\startR
ushape <- c(rexp(500000), 12-rexp(500000))
pdf("ushape.pdf")
par(mfrow=c(1,2))
@@ -121,7 +148,12 @@ plot(density(ushape), main="Density")
dev.off()
\stopR
-\input tufte \par \input knuth
+The graphic \type{ushape.pdf} can be included in the standard \CONTEXT\ way
+\startbuffer
+\placefigure{An ugly distribution}{\externalfigure[ushape]}
+\stopbuffer
+\typebuffer
+\getbuffer
\startR
x <- rnorm(900)
@@ -135,25 +167,50 @@ xyplot(y~x|f)
dev.off()
\stopR
-\placefigure{}{\externalfigure[lattice]}
-\placefigure{}{\externalfigure[ushape]}
+With \type{Sweave} lattice graphics calls must be enclosed in
+\type{print()} statements but that is not necessary here.
-\input tufte
+\startbuffer
+\placefigure[here]{Lattice graphics}{\externalfigure[lattice]}
+\stopbuffer
+\typebuffer
+\getbuffer
+A test string with nasty characters. In \R, the result of a statement
+is not printed by default. Enclosing the statement in parentheses,
+however causes the parser to see only the value of the statement and
+applying the \type{print()} method.
\startR
-(test <- ".*\\\\ []{}=?!+%#|<|>@$")
+(test <- ".*\\\\ [[{[{]{[{[{}\]\}=?!+%#|<|>@$")
cat(test)
\stopR
-\input bryson \par \input knuth
+A combination
+\startbuffer
+\placefigure{A combination of two previously used graphics}{
+\startcombination[2*1]
+ {\externalfigure[ushape][width=.4\textwidth]}{The first graphic, rescaled}
+ {\externalfigure[lattice][width=.4\textwidth]}{The second graphic, rescaled}}
+\stopcombination
+\stopbuffer
+\typebuffer
+\getbuffer
+
+Testing a function definition.
\startR
a.df <- data.frame(a=1:2, b=rnorm(2))
a.df$a
testfunction <- function(a=NULL, ...) {
- for(i in 1:length(a)) {
- gsub(a[[i]], "([a-r]|[A-R])", "bla")}
- print(a)}
+ for(i in 1:length(a)) {
+ gsub(a[[i]], "([a-r]|[A-R])", "bla")}
+ print(a)}
+\stopR
+
+What is in the workspace now?
+
+\startR
+ls()
\stopR
\stoptext
diff --git a/tex/context/base/m-streams.tex b/tex/context/base/m-streams.tex
index fd93f2655..181c82d33 100644
--- a/tex/context/base/m-streams.tex
+++ b/tex/context/base/m-streams.tex
@@ -1,3 +1,16 @@
+%D \module
+%D [ file=m-streams,
+%D version=2006.03.21,
+%D title=\CONTEXT\ Modules,
+%D subtitle=Streams,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
%D First we implement a simple left||right synchronization
%D mechanism, which we may perfect and extend over time.
@@ -107,6 +120,18 @@
{\outputstreambox[\currentstreamlayer]}%
\stopsetups
+\startsetups streamlayer:default:copy
+ \setlayer
+ [\currentstreamlayer]
+ [\c!preset=\v!left\v!top]
+ {\outputstreamcopy[\currentstreamlayer]}%
+\stopsetups
+
+
+\startsetups streamlayer:default:reset
+ \outputstreambox[\currentstreamlayer]
+\stopsetups
+
\startsetups streamlayer:default:flush
\tightlayer[\currentstreamlayer]
\stopsetups
@@ -268,7 +293,6 @@
%D \stoptext
%D \stoptyping
-
\def\starttextstreamlayer
{\startstreamlayer}
diff --git a/tex/context/base/m-tryout.tex b/tex/context/base/m-tryout.tex
index ef6c502ba..89ffc4678 100644
--- a/tex/context/base/m-tryout.tex
+++ b/tex/context/base/m-tryout.tex
@@ -24,6 +24,10 @@
\startmode[activecolon]
+\endinput
+
+% this is now default
+
\gdef\sectionseparator{-}
\gdef\@@filterfirstpart [#1--#2]{#1}
diff --git a/tex/context/base/m-units.tex b/tex/context/base/m-units.tex
index 89dd71e77..0a42862f1 100644
--- a/tex/context/base/m-units.tex
+++ b/tex/context/base/m-units.tex
@@ -646,7 +646,7 @@
\setuplabeltext
[\s!en]
[u:vac=alternating current,
- u:vdc=different current]
+ u:vdc=direct current]
\setuplabeltext
[\s!de]
diff --git a/tex/context/base/math-cow.tex b/tex/context/base/math-cow.tex
new file mode 100644
index 000000000..016221f2d
--- /dev/null
+++ b/tex/context/base/math-cow.tex
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=math-cow,
+%D version=2006.06.23,
+%D title=\CONTEXT\ Math Macros,
+%D subtitle=Cow Math,
+%D author={Hans Hagen \& Taco Hoekwater},
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+\let\COWsqrt\mthsqrt
+\let\COWfrac\mthfrac
+
+\startmathcollection [cow]
+ % todo
+\stopmathcollection
+
+\startrawmathcollection[cow]
+ \definemathcommand [frac] {\COWfrac}
+ \definemathcommand [sqrt] {\COWsqrt}
+ %definemathcommand [r@@t] {\COWroot}
+ %definemathcommand [matrix] {\COWmatrix}
+\stoprawmathcollection
+
+\protect \endinput
diff --git a/tex/context/base/math-eul.tex b/tex/context/base/math-eul.tex
index f89b54125..6acc33356 100644
--- a/tex/context/base/math-eul.tex
+++ b/tex/context/base/math-eul.tex
@@ -89,59 +89,59 @@
\startmathcollection [eul]
% Ugh. no way around this to keep it compact in the font defs.
-\definemathcharacter [a] [nothing] [mr] ["61]
-\definemathcharacter [b] [nothing] [mr] ["62]
-\definemathcharacter [c] [nothing] [mr] ["63]
-\definemathcharacter [d] [nothing] [mr] ["64]
-\definemathcharacter [e] [nothing] [mr] ["65]
-\definemathcharacter [f] [nothing] [mr] ["66]
-\definemathcharacter [g] [nothing] [mr] ["67]
-\definemathcharacter [h] [nothing] [mr] ["68]
-\definemathcharacter [i] [nothing] [mr] ["69]
-\definemathcharacter [j] [nothing] [mr] ["6A]
-\definemathcharacter [k] [nothing] [mr] ["6B]
-\definemathcharacter [l] [nothing] [mr] ["6C]
-\definemathcharacter [m] [nothing] [mr] ["6D]
-\definemathcharacter [n] [nothing] [mr] ["6E]
-\definemathcharacter [o] [nothing] [mr] ["6F]
-\definemathcharacter [p] [nothing] [mr] ["70]
-\definemathcharacter [q] [nothing] [mr] ["71]
-\definemathcharacter [r] [nothing] [mr] ["72]
-\definemathcharacter [s] [nothing] [mr] ["73]
-\definemathcharacter [t] [nothing] [mr] ["74]
-\definemathcharacter [u] [nothing] [mr] ["75]
-\definemathcharacter [v] [nothing] [mr] ["76]
-\definemathcharacter [w] [nothing] [mr] ["77]
-\definemathcharacter [x] [nothing] [mr] ["78]
-\definemathcharacter [y] [nothing] [mr] ["79]
-\definemathcharacter [z] [nothing] [mr] ["7A]
-
-\definemathcharacter [A] [nothing] [mr] ["41]
-\definemathcharacter [B] [nothing] [mr] ["42]
-\definemathcharacter [C] [nothing] [mr] ["43]
-\definemathcharacter [D] [nothing] [mr] ["44]
-\definemathcharacter [E] [nothing] [mr] ["45]
-\definemathcharacter [F] [nothing] [mr] ["46]
-\definemathcharacter [G] [nothing] [mr] ["47]
-\definemathcharacter [H] [nothing] [mr] ["48]
-\definemathcharacter [I] [nothing] [mr] ["49]
-\definemathcharacter [J] [nothing] [mr] ["4A]
-\definemathcharacter [K] [nothing] [mr] ["4B]
-\definemathcharacter [L] [nothing] [mr] ["4C]
-\definemathcharacter [M] [nothing] [mr] ["4D]
-\definemathcharacter [N] [nothing] [mr] ["4E]
-\definemathcharacter [O] [nothing] [mr] ["4F]
-\definemathcharacter [P] [nothing] [mr] ["50]
-\definemathcharacter [Q] [nothing] [mr] ["51]
-\definemathcharacter [R] [nothing] [mr] ["52]
-\definemathcharacter [S] [nothing] [mr] ["53]
-\definemathcharacter [T] [nothing] [mr] ["54]
-\definemathcharacter [U] [nothing] [mr] ["55]
-\definemathcharacter [V] [nothing] [mr] ["56]
-\definemathcharacter [W] [nothing] [mr] ["57]
-\definemathcharacter [X] [nothing] [mr] ["58]
-\definemathcharacter [Y] [nothing] [mr] ["59]
-\definemathcharacter [Z] [nothing] [mr] ["5A]
+\definemathcharacter [a] [alpha] [mr] ["61]
+\definemathcharacter [b] [alpha] [mr] ["62]
+\definemathcharacter [c] [alpha] [mr] ["63]
+\definemathcharacter [d] [alpha] [mr] ["64]
+\definemathcharacter [e] [alpha] [mr] ["65]
+\definemathcharacter [f] [alpha] [mr] ["66]
+\definemathcharacter [g] [alpha] [mr] ["67]
+\definemathcharacter [h] [alpha] [mr] ["68]
+\definemathcharacter [i] [alpha] [mr] ["69]
+\definemathcharacter [j] [alpha] [mr] ["6A]
+\definemathcharacter [k] [alpha] [mr] ["6B]
+\definemathcharacter [l] [alpha] [mr] ["6C]
+\definemathcharacter [m] [alpha] [mr] ["6D]
+\definemathcharacter [n] [alpha] [mr] ["6E]
+\definemathcharacter [o] [alpha] [mr] ["6F]
+\definemathcharacter [p] [alpha] [mr] ["70]
+\definemathcharacter [q] [alpha] [mr] ["71]
+\definemathcharacter [r] [alpha] [mr] ["72]
+\definemathcharacter [s] [alpha] [mr] ["73]
+\definemathcharacter [t] [alpha] [mr] ["74]
+\definemathcharacter [u] [alpha] [mr] ["75]
+\definemathcharacter [v] [alpha] [mr] ["76]
+\definemathcharacter [w] [alpha] [mr] ["77]
+\definemathcharacter [x] [alpha] [mr] ["78]
+\definemathcharacter [y] [alpha] [mr] ["79]
+\definemathcharacter [z] [alpha] [mr] ["7A]
+
+\definemathcharacter [A] [alpha] [mr] ["41]
+\definemathcharacter [B] [alpha] [mr] ["42]
+\definemathcharacter [C] [alpha] [mr] ["43]
+\definemathcharacter [D] [alpha] [mr] ["44]
+\definemathcharacter [E] [alpha] [mr] ["45]
+\definemathcharacter [F] [alpha] [mr] ["46]
+\definemathcharacter [G] [alpha] [mr] ["47]
+\definemathcharacter [H] [alpha] [mr] ["48]
+\definemathcharacter [I] [alpha] [mr] ["49]
+\definemathcharacter [J] [alpha] [mr] ["4A]
+\definemathcharacter [K] [alpha] [mr] ["4B]
+\definemathcharacter [L] [alpha] [mr] ["4C]
+\definemathcharacter [M] [alpha] [mr] ["4D]
+\definemathcharacter [N] [alpha] [mr] ["4E]
+\definemathcharacter [O] [alpha] [mr] ["4F]
+\definemathcharacter [P] [alpha] [mr] ["50]
+\definemathcharacter [Q] [alpha] [mr] ["51]
+\definemathcharacter [R] [alpha] [mr] ["52]
+\definemathcharacter [S] [alpha] [mr] ["53]
+\definemathcharacter [T] [alpha] [mr] ["54]
+\definemathcharacter [U] [alpha] [mr] ["55]
+\definemathcharacter [V] [alpha] [mr] ["56]
+\definemathcharacter [W] [alpha] [mr] ["57]
+\definemathcharacter [X] [alpha] [mr] ["58]
+\definemathcharacter [Y] [alpha] [mr] ["59]
+\definemathcharacter [Z] [alpha] [mr] ["5A]
\stopmathcollection
diff --git a/tex/context/base/math-ext.tex b/tex/context/base/math-ext.tex
new file mode 100644
index 000000000..1091cd5ff
--- /dev/null
+++ b/tex/context/base/math-ext.tex
@@ -0,0 +1,199 @@
+%D \module
+%D [ file=math-ext,
+%D version=2006.01.14,
+%D title=\CONTEXT\ Math Macros,
+%D subtitle=Extra Macros,
+%D author={Hans Hagen \& Taco Hoekwater \& Adity Mahajan},
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\unprotect
+
+%D These will be generalized!
+
+\def\exmthfont#1{\symbolicsizedfont#1\plusone{MathExtension}}
+
+\def\domthfrac#1#2#3#4%
+ {\begingroup
+ \mathsurround\zeropoint
+ \setbox0\hbox{$#1 #3$}%
+ \setbox2\hbox{$#1 #4$}%
+ \dimen0\wd0
+ \ifdim\wd2>\dimen0 \dimen0\wd2 \fi
+ \setbox4\hbox to \dimen0{\exmthfont#2\char"77\leaders\hbox{\char"75}\hss\char"76}%
+ \mathord{\vcenter{{\offinterlineskip
+ \hbox to \dimen0{\hss\box0\hss}%
+ \kern \ht4%
+ \hbox to \dimen0{\hss\copy4\hss}%
+ \kern \ht4%
+ \hbox to \dimen0{\hss\box2\hss}}}}%
+ \endgroup}
+
+\def\domthsqrt#1#2#3%
+ {\begingroup
+ \mathsurround\zeropoint
+ \setbox0\hbox{$#1 #3$}%
+ \dimen0\wd0
+ \setbox4\hbox to \dimen0{\exmthfont#2\leaders\hbox{\char"75}\hfill\char"76}%
+ \setbox2\hbox{\exmthfont#2\char"70}%
+ \ifdim\dimexpr\dp0+\ht0+\ht2\relax>\dp2 \setbox2\hbox{\exmthfont#2\char"71}\fi
+ \ifdim\dimexpr\dp0+\ht0+\ht2\relax>\dp2 \setbox2\hbox{\exmthfont#2\char"72}\fi
+ \ifdim\dimexpr\dp0+\ht0+\ht2\relax>\dp2 \setbox2\hbox{\exmthfont#2\char"73}\fi
+ \ifdim\dimexpr\dp0+\ht0+\ht2\relax>\dp2 \setbox2\hbox{\exmthfont#2\char"74}\fi
+ \mathord{\vcenter{\hbox{%
+ \raise\dimexpr\dp2-.5\ht2\relax\hbox{\copy2\rlap{\copy4}}%
+ \raise\dp0 \copy0}}}%
+ \endgroup}
+
+\def\mthfrac#1#2{\mathchoice
+ {\domthfrac\displaystyle \textface {#1}{#2}}
+ {\domthfrac\textstyle \textface {#1}{#2}}
+ {\domthfrac\scriptstyle \scriptface {#1}{#2}}
+ {\domthfrac\scriptscriptstyle\scriptscriptface{#1}{#2}}}
+
+\def\mthsqrt#1{\mathchoice
+ {\domthsqrt\displaystyle \textface {#1}}
+ {\domthsqrt\textstyle \textface {#1}}
+ {\domthsqrt\scriptstyle \scriptface {#1}}
+ {\domthsqrt\scriptscriptstyle\scriptscriptface{#1}}}
+
+% temp here
+
+\def\mtharrfactor{1}
+\def\mtharrextra {0}
+
+\def\domthxarr#1#2#3#4#5% hm, looks like we do a double mathrel
+ {\begingroup
+ \def\mtharrfactor{1}%
+ \def\mtharrextra {0}%
+ \processaction[#1] % will be sped up
+ [ \v!none=>\def\mtharrfactor{0},
+ \v!small=>\def\mtharrextra{10},
+ \v!medium=>\def\mtharrextra{15},
+ \v!big=>\def\mtharrextra{20},
+ \v!normal=>,
+ \v!default=>,
+ \v!unknown=>\doifnumberelse{#1}{\def\mtharrextra{#1}}\donothing]%
+ \mathsurround\zeropoint
+ \muskip0=\thirdoffourarguments #2mu
+ \muskip2=\fourthoffourarguments #2mu
+ \muskip4=\firstoffourarguments #2mu
+ \muskip6=\secondoffourarguments #2mu
+ \muskip0=\mtharrfactor\muskip0 \advance\muskip0 \mtharrextra mu
+ \muskip2=\mtharrfactor\muskip2 \advance\muskip2 \mtharrextra mu
+ \setbox0\hbox{$\scriptstyle
+ \mkern\muskip4\relax
+ \mkern\muskip0\relax
+ #5\relax
+ \mkern\muskip2\relax
+ \mkern\muskip6\relax
+ $}%
+ \setbox4\hbox{#3}%
+ \dimen0\wd0
+ \ifdim\wd4>\dimen0 \dimen0\wd4 \fi
+ \setbox2\hbox{$\scriptstyle
+ \mkern\muskip4\relax
+ \mkern\muskip0\relax
+ #4\relax
+ \mkern\muskip2\relax
+ \mkern\muskip6\relax
+ $}%
+ \ifdim\wd2>\dimen0 \dimen0\wd2 \fi
+ \setbox4\hbox to \dimen0{#3}%
+ \mathrel{\mathop{\hbox to \dimen0{\hss\copy4\hss}}\limits^{\box0}_{\box2}}
+ \endgroup}
+
+\let\domthxarrsingle\domthxarr
+
+\def\domthxarrdouble#1#2#3#4#5#6#7% opt l r sp rs top bot
+ {\mathrel
+ {\scratchdimen.22ex\relax
+ \setbox0\hbox{$\domthxarr{#1}{#2}{#4}{\phantom{#6}}{#7}$}%
+ \setbox2\hbox{$\domthxarr{#1}{#3}{#5}{#6}{\phantom{#7}}$}%
+ \raise\scratchdimen\box0
+ \kern-\wd2
+ \lower\scratchdimen\box2}}
+
+\def\definematharrow
+ {\doquadrupleargument\dodefinematharrow}
+
+\def\dodefinematharrow[#1][#2][#3][#4]% name type[none|both] template command
+ {\iffourthargument
+ \executeifdefined{dodefine#2arrow}\gobblethreearguments{#1}{#3}{#4}%
+ \else\ifthirdargument
+ \dodefinebotharrow{#1}{#2}{#3}%
+ \fi\fi}
+
+\def\dodefinebotharrow#1#2#3%
+ {\setvalue{#1}{\dotripleempty\xmtharrow[#2][#3]}}
+
+\def\xmtharrow[#1][#2][#3]% #3 == optional arg
+ {\def\doxmtharrow{\dodoxmtharrow[#1,\empty,\empty][#2,\empty,\empty][#3]}% {##1}{##2}
+ \dodoublegroupempty\doxmtharrow}
+
+\def\dodoxmtharrow[#1,#2,#3][#4,#5,#6][#7]#8#9% [3] is the optional arg
+ {\ifx#2\empty
+ \mathrel{\domthxarrsingle{#7}{#1}{#4}{#8}{#9}}%
+ \else
+ \mathrel{\domthxarrdouble{#7}{#1}{#2}{#4}{#5}{#8}{#9}}%
+ \fi}
+
+% Adapted from amsmath.
+
+\def\mtharrowfill#1#2#3%
+ {$\m@th\thickmuskip0mu\medmuskip\thickmuskip\thinmuskip\thickmuskip
+ \relax#1\mkern-7mu%
+ \cleaders\hbox{$\mkern-2mu#2\mkern-2mu$}\hfill
+ \mkern-7mu#3$}
+
+% Maybe redefine leftarrowfill and rightarrowfill using arrowfill
+
+\def\rightarrowfill {\mtharrowfill \relbar \relbar \rightarrow }
+\def\leftarrowfill {\mtharrowfill \leftarrow \relbar \relbar }
+\def\equalfill {\mtharrowfill \Relbar \Relbar \Relbar }
+\def\Rightarrowfill {\mtharrowfill \Relbar \Relbar \Rightarrow }
+\def\Leftarrowfill {\mtharrowfill \Leftarrow \Relbar \Relbar }
+\def\Leftrightarrowfill {\mtharrowfill \Leftarrow \Relbar \Rightarrow }
+\def\leftrightarrowfill {\mtharrowfill \leftarrow \relbar \rightarrow }
+\def\mapstofill {\mtharrowfill{\mapstochar\relbar}\relbar \rightarrow }
+\def\twoheadrightarrowfill{\mtharrowfill \relbar \relbar \twoheadrightarrow}
+\def\twoheadleftarrowfill {\mtharrowfill \twoheadleftarrow \relbar \relbar }
+\def\rightharpoondownfill {\mtharrowfill \relbar \relbar \rightharpoondown }
+\def\rightharpoonupfill {\mtharrowfill \relbar \relbar \rightharpoonup }
+\def\leftharpoondownfill {\mtharrowfill \leftharpoondown \relbar \relbar }
+\def\leftharpoonupfill {\mtharrowfill \leftharpoonup \relbar \relbar }
+
+% From amsmath.sty, extarrows.sty, extpfel.sty and mathtools.sty(ams)
+
+\definematharrow [xrightarrow] [0359] [\rightarrowfill]
+\definematharrow [xleftarrow] [3095] [\leftarrowfill]
+\definematharrow [xequal] [0099] [\equalfill]
+\definematharrow [xRightarrow] [0359] [\Rightarrowfill]
+\definematharrow [xLeftarrow] [3095] [\Leftarrowfill]
+\definematharrow [xLeftrightarrow] [0099] [\Leftrightarrowfill]
+\definematharrow [xleftrightarrow] [0099] [\leftrightarrowfill]
+\definematharrow [xmapsto] [0599] [\mapstofill]
+\definematharrow [xtwoheadrightarrow] [5009] [\twoheadrightarrowfill]
+\definematharrow [xtwoheadleftarrow] [0590] [\twoheadleftarrowfill]
+\definematharrow [xrightharpoondown] [0359] [\rightharpoondownfill]
+\definematharrow [xrightharpoonup] [0359] [\rightharpoonupfill]
+\definematharrow [xleftharpoondown] [3095] [\leftharpoondownfill]
+\definematharrow [xleftharpoonup] [3095] [\leftharpoonupfill]
+
+\definematharrow [xleftrightharpoons] [3095,0359] [\leftharpoonupfill,\rightharpoondownfill]
+\definematharrow [xrightleftharpoons] [3095,0359] [\rightharpoonupfill,\leftharpoondownfill]
+
+% \startformula \xrightarrow{}{stuff on top}\stopformula
+% \startformula \xrightarrow{stuff below}{}\stopformula
+% \startformula \xrightarrow{stuff below}{stuff on top}\stopformula
+
+% \startformula \xleftarrow [none]{stuff below}{stuff on top}\stopformula
+% \startformula \xleftarrow [small]{stuff below}{stuff on top}\stopformula
+% \startformula \xleftarrow [medium]{stuff below}{stuff on top}\stopformula
+% \startformula \xleftarrow [big]{stuff below}{stuff on top}\stopformula
+
+\protect \endinput
diff --git a/tex/context/base/meta-ini.tex b/tex/context/base/meta-ini.tex
index 38c3ec3bd..0fa99aa5c 100644
--- a/tex/context/base/meta-ini.tex
+++ b/tex/context/base/meta-ini.tex
@@ -1015,6 +1015,57 @@
%D \ruledhbox{\flushlayer[mp]}
%D \stoptyping
+%D \macros
+%D {startstaticMPfigure,useMPstaticfigure}
+%D
+%D Static figures are processed only when there has been
+%D something changed. Here is Aditya Mahajan's testcase:
+%D
+%D \startbuffer
+%D \startstaticMPfigure{circle}
+%D fill fullcircle scaled 1cm withcolor blue;
+%D \stopstaticMPfigure
+%D
+%D \startstaticMPfigure{axis}
+%D drawarrow (0,0)--(2cm,0) ;
+%D drawarrow (0,0)--(0,2cm) ;
+%D label.llft(textext("(0,0)") ,origin) ;
+%D \stopstaticMPfigure
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
+\def\usestaticMPfigure[#1]%
+ {\dodoubleempty\externalfigure[\jobname-#1.pdf]}
+
+\def\startstaticMPfigure
+ {\begingroup
+ \obeyMPlines
+ \dostartstaticMPfigure}
+
+\def\dostartstaticMPfigure#1#2\stopstaticMPfigure
+ {\startstaticMPgraphic{\jobname-#1}#2\stopstaticMPgraphic
+ \doifmode{*\v!first}{\executesystemcommand
+ {texmfstart --ifchanged=\MPgraphicfile.mp texexec --mpgraphic \MPgraphicfile.mp}}%
+ \endgroup}
+
+% faster, but more tricky
+%
+% \def\startstaticMPfigure
+% {\doifmodeelse{*\v!first}
+% {\begingroup
+% \obeyMPlines
+% \dostartstaticMPfigure}
+% {\gobbleuntil\stopstaticMPfigure}}
+%
+% \def\dostartstaticMPfigure#1#2\stopstaticMPfigure
+% {\startMPstaticgraphic{\jobname-#1}#2\stopMPstaticgraphic
+% \executesystemcommand
+% {texmfstart --ifchanged=\MPgraphicfile.mp texexec --mpgraphic \MPgraphicfile.mp}%
+% % dirty trick, don't register, so no second main run of texexec:
+% \global\advance\nofMPgraphics \minusone
+% \endgroup}}
+
%D New:
% \appendtoks \closeMPgraphicfiles \to \everystoptext
diff --git a/tex/context/base/meta-pdf.tex b/tex/context/base/meta-pdf.tex
index 1c76075a9..49dc4df38 100644
--- a/tex/context/base/meta-pdf.tex
+++ b/tex/context/base/meta-pdf.tex
@@ -14,10 +14,12 @@
%D In due time this file will replace \type {supp-pdf} and
%D \type {supp-mpe}.
-\input supp-pdf
-\input supp-mpe
+% \input supp-pdf
+% \input supp-mpe
+%
+% \endinput
-\endinput
+% we're going to experiment a bit with new code
%D To be tested: texopt.rb on this file.
@@ -703,53 +705,89 @@
\let\MPfshowcommand\empty
+% \def\dohandleMPfshow
+% {\bgroup
+% \setbox\scratchbox\hbox
+% {\obeyMPspecials
+% \let\ \relax % mp breaks long lines and appends a \
+% \edef\size{\gMPa\nofMParguments}%
+% \ifx\size\PSnfont % round font size (to pt)
+% \advance\nofMParguments \minusone
+% \expandafter\scratchdimen\gMPa\nofMParguments\onepoint\relax
+% \ifdim\scratchdimen<\onepoint
+% \def\size{1pt}%
+% \else
+% \advance\scratchdimen .5\onepoint
+% \def\size##1.##2\relax{\def\size{##1pt}}%
+% \expandafter\size\the\scratchdimen\relax
+% \fi
+% \else
+% \edef\size{\size bp}%
+% \fi
+% \advance\nofMParguments \minusone
+% %\font\temp=\gMPa\nofMParguments\space at \size
+% \let\temp\relax % to be sure
+% \setMPfshowfont{\gMPa\nofMParguments}\size
+% \advance\nofMParguments \minusone
+% \temp
+% \MPfshowcommand
+% {\ifnum\nofMParguments=\plusone
+% \def\do(##1){##1}%
+% \dogMPa1%
+% \else
+% % we need to catch ( a ) (a a a) (\123 \123 \123) etc
+% \scratchcounter\plusone
+% \def\dodo##1% Andreas Fieger's bug: (\304...)
+% {\edef\!!stringa{##1\empty\empty}% and another one: ( 11) -> \ifx 11
+% \ifx\!!stringa\MPspacechar\MPspacechar\else\expandafter##1\fi}%
+% \def\do(##1{\dodo{##1}}%
+% \dogMPa\scratchcounter\MPspacechar
+% \let\do\relax
+% \loop
+% \advance\scratchcounter \plusone
+% \ifnum\scratchcounter<\nofMParguments\relax
+% \gMPa\scratchcounter\MPspacechar
+% \repeat
+% \def\do##1){\dodo{##1}}%
+% \dogMPa\scratchcounter
+% \fi
+% \unskip}}%
+% %
+% % this fails in some versions of pdftex
+% %
+% % \dimen0=\lastMPmoveY bp
+% % \advance\dimen0 by \ht0
+% % \ScaledPointsToBigPoints{\number\dimen0}\lastMPmoveY
+% % \PDFcode{n q 1 0 0 1 \lastMPmoveX\space\lastMPmoveY\space cm}%
+% % \dimen0=\ht0
+% % \advance\dimen0 by \dp0
+% % \box0
+% % \vskip-\dimen0
+% % \PDFcode{Q}%
+% % \egroup}
+% %
+% \setbox\scratchbox\hbox
+% {\hskip\lastMPmoveX\onebasepoint\raise\lastMPmoveY\onebasepoint\box\scratchbox}%
+% \ht\scratchbox\zeropoint
+% \dp\scratchbox\zeropoint
+% \wd\scratchbox\zeropoint
+% \box\scratchbox
+% \egroup}
+%
+% \let\handleMPfshow\dohandleMPfshow % so we can overload this one later
+%
+% we will support plug-ins:
+
\def\dohandleMPfshow
- {\bgroup
- \setbox\scratchbox\hbox
+ {\setbox\scratchbox\hbox
{\obeyMPspecials
- \let\ \relax % mp breaks long lines and appends a \
- \edef\size{\gMPa\nofMParguments}%
- \ifx\size\PSnfont % round font size (to pt)
- \advance\nofMParguments \minusone
- \expandafter\scratchdimen\gMPa\nofMParguments\onepoint\relax
- \ifdim\scratchdimen<\onepoint
- \def\size{1pt}%
- \else
- \advance\scratchdimen .5\onepoint
- \def\size##1.##2\relax{\def\size{##1pt}}%
- \expandafter\size\the\scratchdimen\relax
- \fi
- \else
- \edef\size{\size bp}%
- \fi
- \advance\nofMParguments \minusone
- %\font\temp=\gMPa\nofMParguments\space at \size
- \let\temp\relax % to be sure
- \setMPfshowfont{\gMPa\nofMParguments}\size
- \advance\nofMParguments \minusone
- \temp
- \MPfshowcommand
- {\ifnum\nofMParguments=\plusone
- \def\do(##1){##1}%
- \dogMPa1%
- \else
- % we need to catch ( a ) (a a a) (\123 \123 \123) etc
- \scratchcounter\plusone
- \def\dodo##1% Andreas Fieger's bug: (\304...)
- {\edef\!!stringa{##1\empty\empty}% and another one: ( 11) -> \ifx 11
- \ifx\!!stringa\MPspacechar\MPspacechar\else\expandafter##1\fi}%
- \def\do(##1{\dodo{##1}}%
- \dogMPa\scratchcounter\MPspacechar
- \let\do\relax
- \loop
- \advance\scratchcounter \plusone
- \ifnum\scratchcounter<\nofMParguments\relax
- \gMPa\scratchcounter\MPspacechar
- \repeat
- \def\do##1){\dodo{##1}}%
- \dogMPa\scratchcounter
- \fi
- \unskip}}%
+ \edef\MPtextsize{\gMPa\nofMParguments}%
+ \def\do(##1){##1}%
+ \edef\MPtextdata{\dogMPa1}% beware, stack can have more
+ \handleMPtext}%
+ \setbox\scratchbox\hbox
+ {\hskip\lastMPmoveX\onebasepoint\raise\lastMPmoveY\onebasepoint
+ \box\scratchbox}%
%
% this fails in some versions of pdftex
%
@@ -764,15 +802,68 @@
% \PDFcode{Q}%
% \egroup}
%
- \setbox\scratchbox\hbox
- {\hskip\lastMPmoveX\onebasepoint\raise\lastMPmoveY\onebasepoint\box\scratchbox}%
\ht\scratchbox\zeropoint
\dp\scratchbox\zeropoint
\wd\scratchbox\zeropoint
- \box\scratchbox
- \egroup}
+ \box\scratchbox}
+
+\def\handleMPtext {\handleMPtextnormal} % so we can overload this one later
+\def\handleMPfshow{\dohandleMPfshow } % so we can overload this one later
+
+\def\handleMPtext
+ {\ifnum\nofMParguments>\plusthree
+ \handleMPtextnormal
+ \else
+ \convertcommand\MPtextdata\to\MPtextdata
+ \expanded{\splitstring\MPtextdata}\at::::\to\MPtexttag\and\MPtextnumber
+ \executeifdefined{handleMPtext\MPtexttag}\handleMPtextnormal
+ \fi}
+
+% elsewhere we will implement \handleMPtextmptxt
-\let\handleMPfshow\dohandleMPfshow % so we can overload this one later
+\def\handleMPtextnormal
+ {\let\ \relax % mp breaks long lines and appends a \
+ \ifx\MPtextsize\PSnfont % round font size (to pt)
+ \advance\nofMParguments \minusone
+ \expandafter\scratchdimen\gMPa\nofMParguments\onepoint\relax
+ \ifdim\scratchdimen<\onepoint
+ \def\MPtextsize{1pt}%
+ \else
+ \advance\scratchdimen .5\onepoint
+ \def\MPtextsize##1.##2\relax{\def\MPtextsize{##1pt}}%
+ \expandafter\MPtextsize\the\scratchdimen\relax
+ \fi
+ \else
+ \edef\MPtextsize{\MPtextsize bp}%
+ \fi
+ \advance\nofMParguments \minusone
+ \font\temp=\gMPa\nofMParguments\space at \MPtextsize
+ \let\temp\relax % to be sure
+ \setMPfshowfont{\gMPa\nofMParguments}\MPtextsize
+ \advance\nofMParguments \minusone
+ \temp
+ \MPfshowcommand
+ {\ifnum\nofMParguments=\plusone
+ \def\do(##1){##1}%
+ \dogMPa1%
+ \else
+ % we need to catch ( a ) (a a a) (\123 \123 \123) etc
+ \scratchcounter\plusone
+ \def\dodo##1% Andreas Fieger's bug: (\304...)
+ {\edef\!!stringa{##1\empty\empty}% and another one: ( 11) -> \ifx 11
+ \ifx\!!stringa\MPspacechar\MPspacechar\else\expandafter##1\fi}%
+ \def\do(##1{\dodo{##1}}%
+ \dogMPa\scratchcounter\MPspacechar
+ \let\do\relax
+ \loop
+ \advance\scratchcounter \plusone
+ \ifnum\scratchcounter<\nofMParguments\relax
+ \gMPa\scratchcounter\MPspacechar
+ \repeat
+ \def\do##1){\dodo{##1}}%
+ \dogMPa\scratchcounter
+ \fi
+ \unskip}}
%D You could consider the following definition to be the most
%D natural one.
diff --git a/tex/context/base/meta-tex.tex b/tex/context/base/meta-tex.tex
new file mode 100644
index 000000000..8008ae6c4
--- /dev/null
+++ b/tex/context/base/meta-tex.tex
@@ -0,0 +1,205 @@
+%D \module
+%D [ file=meta-tex,
+%D version=2006.06.07,
+%D title=\CONTEXT\ Support Macros,
+%D subtitle=\METAPOST\ fast text insertion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D Many thanks to Fabrice Popineau and Taco Hoekwater in helping me
+%D figure out some aspects of the text inclusion method implemented
+%D here. The following code is derived from a more advanced (and to
+%D be used) mechanism where \TEX, \METAPOST\ and \LUA\ play together.
+
+%D Much of this mechanism was written with running live DVD's of
+%D the Dave Matthews band in the background (or the corner of my
+%D screen).
+
+\unprotect
+
+\newwrite\TeXtextwrite
+
+\def\openTeXtexts {\immediate\openout \TeXtextwrite=\currentTeXtext.mpb\relax}
+\def\closeTeXtexts{\immediate\closeout\TeXtextwrite}
+
+\def\currentTeXtext{\jobname-mpgraph}
+
+\initializeboxstack\currentTeXtext
+
+\newtoks\collectedmptexts
+
+\long\def\startTeXtexts#1\stopTeXtexts
+ {\global\collectedmptexts\expandafter{\the\collectedmptexts#1}}
+
+\def\dostartTeXtexts
+ {\global\setfalse\TeXtextdone
+ \startnointerference
+ \the\everyMPTEXgraphic
+ \openTeXtexts
+ \ifrunMPgraphics
+ \initializeboxstack\currentTeXtext
+ \else
+ \global\let\openTeXtexts\relax
+ \global\let\finishTeXtexts\closeTeXtexts
+ \fi}
+
+\def\dostopTeXtexts
+ {\ifrunMPgraphics
+ \closeTeXtexts
+ \fi
+ \stopnointerference}
+
+\let\finishTeXtexts\relax
+
+\appendtoks
+ \finishTeXtexts
+\to \everystoptext
+
+\newconditional\TeXtextdone
+
+% \long\def\TeXtext#1%
+% {\dowithnextboxcontent
+% {\setnormalcatcodes}
+% {\global\settrue\TeXtextdone
+% \immediate\write\TeXtextwrite{savetxt(#1,\the\wd\nextbox,\the\ht\nextbox,\the\dp\nextbox);}%
+% \savebox\currentTeXtext{#1}{\box\nextbox}}
+% \hbox}
+
+\long\def\TeXtext
+ {\dosingleempty\doTeXtext}
+
+\long\def\doTeXtext[#1]#2#3%
+ {\begingroup
+ \setbox\nextbox\hbox
+ {\setnormalcatcodes
+ \newlinechar=`\^^M
+ \everyeof\emptytoks
+ %\def\ascii{#3}%
+ %\scantokens\expandafter{\ascii}}%
+ \scantokens{#3}}%
+ \global\settrue\TeXtextdone
+ \edef\currenttextxt{\number#2}%
+ \executeifdefined{textext::#1}{\getvalue{textext::depth}}%
+ \savebox\currentTeXtext\currenttextxt{\box\nextbox}%
+ \endgroup}
+
+\setvalue{textext::depth}{\immediate\write\TeXtextwrite{savetxt(\currenttextxt,\the\nextboxwd,\the\nextboxht,\the\nextboxdp) shifted (0,-\the\nextboxdp);}}
+\setvalue{textext::nodepth}{\immediate\write\TeXtextwrite{savetxt(\currenttextxt,\the\nextboxwd,\the\nextboxht,\the\nextboxdp);}}
+
+\setvalue{textext::d}{\getvalue{textext::depth}}
+\setvalue{textext::n}{\getvalue{textext::nodepth}}
+
+\newbox\mptextbox
+
+\definefontsynonym[MPtxtfont][texnansi-lmtt10] \loadmapfile[lm-texnansi.map]
+
+\definefont[localMPtxtfont][MPtxtfont at 10bp]
+
+\ifx\getTeXtext\undefined
+
+ % this took a while to figure out
+
+ % \def\getTeXtext
+ % {\localMPtxtfont
+ % \setbox\mptextbox\hbox{\foundbox\currentTeXtext{\number\nofTeXtexts}}%
+ % \setbox\scratchbox\hbox{\MPtextdata}%
+ % \edef\mpwd{\the\dimexpr\MPtextsize\dimexpr\wd\scratchbox/10\relax\relax}%
+ % \edef\mpht{\the\dimexpr\MPtextsize\dimexpr\ht\scratchbox/10\relax\relax}%
+ % \setbox\mptextbox\hbox{\raise\dp\mptextbox\box\mptextbox}%
+ % \dp\mptextbox\zeropoint
+ % \scale[\c!width=\mpwd,\c!height=\mpht]{\box\mptextbox}}%
+
+ \def\getTeXtext
+ {\localMPtxtfont
+ \setbox\mptextbox\hbox{\foundbox\currentTeXtext{\number\nofTeXtexts}}%
+ \setbox\scratchbox\hbox{\MPtextdata}%
+ \edef\mpwd{\the\dimexpr\MPtextsize\dimexpr\wd\scratchbox/10\relax\relax}%
+ \edef\mpht{\the\dimexpr\MPtextsize\dimexpr\ht\scratchbox/10\relax\relax}%
+ \setbox\mptextbox\hbox{\raise\dp\mptextbox\box\mptextbox}%
+ \dp\mptextbox\zeropoint
+ \scale[\c!width=\mpwd,\c!height=\mpht]{\box\mptextbox}}
+
+\fi
+
+\setvalue{handleMPtext00001}% only height in tag (00001)
+ {\setbox\scratchbox\hbox
+ {\obeyMPspecials
+ \edef\nofTeXtexts{\number\MPtextnumber}%
+ \getTeXtext}%
+ \setbox\scratchbox\hbox
+ {\hskip\lastMPmoveX\onebasepoint\raise\lastMPmoveY\onebasepoint
+ \box\scratchbox}%
+ \ht\scratchbox\zeropoint
+ \dp\scratchbox\zeropoint
+ \wd\scratchbox\zeropoint
+ \box\scratchbox}
+
+\startMPextensions
+ string txtfile ; txtfile := "\currentTeXtext.mpb" ;
+ string txtfont ; txtfont := "\truefontname{MPtxtfont}" ;
+ string txtpref ; txtpref := "00001::::" ;
+\stopMPextensions
+
+% \long\def\filtersometxt#1\sometxt#2#3#4%
+% {\ifx#3\empty
+% \else
+% \increment\txtcounter
+% \TeXtext\txtcounter{#2}%
+% \expandafter\filtersometxt
+% \fi#3#4}
+
+\long\def\dodofiltersometxt#1#2#3%
+ {\ifx#2\empty
+ \else
+ \increment\txtcounter
+ \TeXtext\txtcounter{#1}%
+ \expandafter\filtersometxt
+ \fi#2#3}
+
+\long\def\redofiltersometxt[#1]#2%
+ {\increment\txtcounter
+ \TeXtext[#1]\txtcounter{#2}%
+ \filtersometxt}
+
+\long\def\filtersometxt#1\sometxt
+ {\doifnextcharelse[\redofiltersometxt\dodofiltersometxt}
+
+% \filtersometxt abc\sometxt{def};hij\sometxt{klm};\sometxt{}\empty\relax
+
+\long\def\flushTeXtexts#1%
+ {\newcounter\txtcounter
+ \dostartTeXtexts
+ \the\collectedmptexts
+ \filtersometxt#1\sometxt{}\empty\relax
+ \dostopTeXtexts
+ \ifconditional\TeXtextdone
+ \immediate\write\MPwrite{loadtxts ; txtnext := 0 ;}%
+ \global\collectedmptexts\emptytoks
+ \fi
+ \newcounter\txtcounter}
+
+% \long\def\sometxt#1{sometxt(nexttxt)} % to be used in mp definitions, no ; here
+
+\long\def\sometxt #1#{\dosometxt} % grab optional [args]
+\long\def\dosometxt#1{sometxt(nexttxt)} % to be used in mp definitions, no ; here
+
+% we redefine the writer:
+
+\long\def\writecheckedMPgraphic#1%
+ {\ifforceMPTEXgraphic
+ \global\MPTEXgraphictrue
+ \else
+ \global\MPTEXgraphicfalse
+ \edef\ascii{#1}\convertcommand\ascii\to\MPascii
+ \the\MPTEXgraphicchecks\relax % \relax is end condition!
+ \fi
+ \flushMPTEXgraphic% % verbatimtex etc
+ \flushTeXtexts{#1}% added
+ \writeMPgraphic{#1}} % potential optimization: pass \ascii
+
+\protect \endinput
diff --git a/tex/context/base/mult-con.tex b/tex/context/base/mult-con.tex
index ec2e1ac11..84c956e26 100644
--- a/tex/context/base/mult-con.tex
+++ b/tex/context/base/mult-con.tex
@@ -13,10 +13,6 @@
%D In this rather large definition file we are going to tell
%D \CONTEXT\ which constants, variables and elements we use.
-%D
-%D The German translations were provided by Tobias Burnus,
-%D the Czech ones by Tom Hudec, the Italian ones by Giuseppe
-%D Bilotta.
\writestatus{loading}{Context Multilingual Macros / Constants}
@@ -756,6 +752,10 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
breite sirka
ampiezza latime
largeur
+ autowidth: autobreedte autowidth
+ autobreite autosirka
+ autoampiezza autolatime
+ autolargeur
maxwidth: maxbreedte maxwidth
maxbreite maxsirka
ampiezzamax latimemaxima
@@ -2966,7 +2966,7 @@ subsubsubsubsubsubject: subsubsubsubsubonderwerp subsubsubsubsub
random: willekeurig random
zufaellig nahodny
casuale aleator
- alatoire
+ aleatoire
white: wit white
weiss bily
bianco alb
diff --git a/tex/context/base/mult-ini.tex b/tex/context/base/mult-ini.tex
index 1e3f378df..667a9352e 100644
--- a/tex/context/base/mult-ini.tex
+++ b/tex/context/base/mult-ini.tex
@@ -17,13 +17,15 @@
%D supported:
%D
%D \starttabulate[|l|l|c|c|]
-%D \NC\bf language\NC\bf translator \NC\bf messages\NC\bf interface\NC\NR
-%D \NC dutch \NC Hans Hagen \NC yes \NC yes \NC\NR
-%D \NC english \NC Hans Hagen \NC yes \NC yes \NC\NR
-%D \NC german \NC Tobias Burnus \NC yes \NC yes \NC\NR
-%D \NC czech \NC Tom Hudec \NC yes \NC yes \NC\NR
-%D \NC italian \NC Giuseppe Bilotta \NC yes \NC yes \NC\NR
-%D \NC norwegian \NC Hans Fredrik Nordhaug\NC yes \NC no \NC\NR
+%D \NC\bf language\NC\bf translator \NC\bf messages\NC \bf interface\NC\NR
+%D \NC dutch \NC Hans Hagen \NC yes \NC yes \NC\NR
+%D \NC english \NC Hans Hagen \& SPQR \NC yes \NC yes \NC\NR
+%D \NC german \NC Tobias Burnus \NC yes \NC yes \NC\NR
+%D \NC czech \NC Tom Hudec \NC yes \NC yes \NC\NR
+%D \NC italian \NC Giuseppe Bilotta \NC yes \NC yes \NC\NR
+%D \NC french \NC Renaud Aubin \NC yes \NC yes \NC\NR
+%D \NC romanian \NC .... \NC yes \NC yes \NC\NR
+%D \NC norwegian \NC Hans Fredrik Nordhaug \NC yes \NC no \NC\NR
%D \stoptabulate
\writestatus{loading}{Context Multilingual Macros / Initialization}
diff --git a/tex/context/base/page-bck.tex b/tex/context/base/page-bck.tex
index 9dcc920ad..2054be5fb 100644
--- a/tex/context/base/page-bck.tex
+++ b/tex/context/base/page-bck.tex
@@ -225,7 +225,7 @@
% \def\setbackgroundboxes
% {\showmessage\m!layouts8\empty
% \setbackgroundbox\leftbackground\relax
-% \ifdubbelzijdig
+% \ifdoublesided
% \setbackgroundbox\rightbackground\doswapmargins
% \fi
% \doifnot\@@mastatus\v!herhaal{\global\newbackgroundfalse}}
@@ -590,19 +590,35 @@
\resetglobal \expandafter\gobbleoneargument
\fi}
+% \def\doaddlocalbackground#1%
+% {\edef\next
+% {\noexpand\redoglobal\wd#1\the\wd#1%
+% \noexpand\redoglobal\ht#1\the\ht#1%
+% \noexpand\dodoglobal\dp#1\the\dp#1}%
+% \dodoglobal\setbox#1\hbox
+% {\fastlocalframed
+% [\??ma\v!local]
+% [\c!component=local,\c!frame=\v!off,\c!offset=\v!overlay,\c!setups=,%
+% \c!width=\wd#1,\c!height=\ht#1,% no \c!depth=\dp#1 in cont-exp.tex, to be checked !
+% \c!background=\localbackground]%
+% {\registerMPlocaltextarea{\box#1}}}%
+% \next
+% \doglobal\increment\localpositionnumber\relax} % afterwards !
+
\def\doaddlocalbackground#1%
{\edef\next
{\noexpand\redoglobal\wd#1\the\wd#1%
\noexpand\redoglobal\ht#1\the\ht#1%
- \noexpand\dodoglobal\dp#1\the\dp#1}%
- \dodoglobal\setbox#1\hbox
+ \noexpand\redoglobal\dp#1\the\dp#1}%
+ \redoglobal\setbox#1\hbox
{\fastlocalframed
[\??ma\v!local]
[\c!component=local,\c!frame=\v!off,\c!offset=\v!overlay,\c!setups=,%
- \c!width=\wd#1,hoogte=\ht#1,% no diepte=\dp#1 in cont-exp.tex, to be checked !
+ \c!width=\wd#1,\c!height=\ht#1,% no \c!depth=\dp#1 in cont-exp.tex, to be checked !
\c!background=\localbackground]%
{\registerMPlocaltextarea{\box#1}}}%
\next
+ \resetglobal
\doglobal\increment\localpositionnumber\relax} % afterwards !
% Test how previous macro behaves with depth:
diff --git a/tex/context/base/page-flt.tex b/tex/context/base/page-flt.tex
index 30a337443..eb1311512 100644
--- a/tex/context/base/page-flt.tex
+++ b/tex/context/base/page-flt.tex
@@ -13,9 +13,6 @@
\writestatus{loading}{Context OTR Macros / Floating Bodies}
-%D This module is currently a mess, due to splitting float
-%D handlers over specific otr's. Consider it work in progress.
-
%D Some of the sidefloat settings should move to page-sid; now it's quite
%D fuzzy the way the variables are set/reset.
@@ -412,7 +409,7 @@
%\to \everyinsidefloat
%\def\doifrightpagefloatelse % watch out: other default ! ! !
-% {\ifdubbelzijdig
+% {\ifdoublesided
% \ifodd\purenumber\twopassfloatdata\space
% \@EAEAEA\firstoftwoarguments
% \else
@@ -423,8 +420,8 @@
% \fi}
\def\doifrightpagefloatelse
- {\ifdubbelzijdig
- \ifenkelzijdig
+ {\ifdoublesided
+ \ifsinglesided
\@EAEAEA\firstoftwoarguments
\else
\@EAEAEA\doifoddfloatpageelse
@@ -819,10 +816,14 @@
{\checkfloatracer{\v!float#1}% will go
\tagnodelocation{\v!float#1}}}
+\newconditional\retainfloatnumber
+
\def\preparefloatnumber#1%
- {\doifelse\@@bknumbering\v!nocheck
+ {\xdef\floatcaptionnumber{#1}%
+ \doifelse\@@bknumbering\v!nocheck
{\incrementnumber[#1]%
- \makesectionnumber[#1]}
+ \makesectionnumber[#1]%
+ \ifconditional\retainfloatnumber\decrementnumber[#1]\fi}
{\ifinsidecolumns
\chardef\nodelocationmode\zerocount
% to be perfected:
@@ -831,6 +832,7 @@
\ifcase\nodelocationmode
\incrementnumber[#1]%
\makesectionnumber[#1]%
+ \ifconditional\retainfloatnumber\decrementnumber[#1]\fi
\else
% force check, so that we get a proper way-sync and
% can use the accumulated number
@@ -995,6 +997,8 @@
\global\somefloatwaitingtrue
\dosavefloatinfo}
+% better (todo): \savednofsavedfloats
+
\def\dosavefloatstatus
{\global\setbox\savedfloatlist\copy\floatlist
\global\setbox\savedfloatbox \copy\floatbox
@@ -1008,6 +1012,45 @@
\ifx\doflushfloats\undefined \let\doflushfloats\relax \fi
\ifx\flushfloatbox\undefined \let\flushfloatbox\relax \fi
+% needed in the splitter:
+
+\newcount\savedsavednoffloats
+
+\let\dopopsavedfloats\relax
+
+\def\dopushsavedfloats
+ {\global\setbox\savedfloatlist\box\floatlist
+ \global\savedsavednoffloats\savednoffloats
+ \global\savednoffloats\savednoffloats
+ \global\somefloatwaitingfalse
+ \gdef\dopopsavedfloats
+ {\global\advance\savednoffloats\savedsavednoffloats
+ \global\setbox\floatlist\vbox\bgroup
+ \ifvoid\floatlist \else\unvbox\floatlist \fi
+ \ifvoid\savedfloatlist\else\unvbox\savedfloatlist\fi
+ \egroup
+ \global\ifcase\savednoffloats
+ \somefloatwaitingfalse\else\somefloatwaitingtrue\fi
+ \globallet\dopopsavedfloats\relax}}
+
+\def\doflushsavedfloats % simplified \OTRONEdodoflushfloats
+ {\doloop
+ {\ifsomefloatwaiting
+ \dogetfloat
+ \dofloatflushedinfo
+ \docheckiffloatfits
+ \ifroomforfloat
+ \doplacefloatbox
+ \else
+ \doreversesavefloat
+ \exitloop
+ \fi
+ \else
+ \exitloop
+ \fi}}
+
+% top and bottom
+
\newif\iftopofinsert
\newif\iftestfloatbox
\newif\ifcenterfloatbox \centerfloatboxtrue
@@ -1317,35 +1360,6 @@
\def\setfloatcaption % \dosetfloatcaption already in use
{\dodoubleempty\dodosetfloatcaption} % beware, name clash
-% \def\dodosetfloatcaption[#1][#2]#3% to do namespace for number/ascii
-% {\ifnofloatnumber % also handle trialtypesetting
-% \letgvalue{@fl@r@#1}\relax
-% \letgvalue{@fl@t@#1}\relax
-% \else
-% \incrementnumber[#1]%
-% \makesectionnumber[#1]%
-% % \globallet\flcomposedsectionnumber\composedsectionnumber % beware, not unique should be done on a per class base
-% \letgvalue{@fl@n@#1}\composedsectionnumber
-% % indirect macro can be more efficient
-% \setgvalue{@fl@r@#1}%
-% {\dofloatreference
-% \redofloatorder{#1}%
-% % \dowritetolist{#1}{\flcomposedsectionnumber}{#3}{#1}%
-% \dowritetolist{#1}{\getvalue{@fl@n@#1}}{#3}{#1}%
-% \doglobal\convertargument#3\to\flasciititle % \asciititle is global
-% % \doifsomething{#2}{\rawreference\s!flt{#2}{{\flcomposedsectionnumber}{\flasciititle}}}%
-% \doifsomething{#2}{\rawreference\s!flt{#2}{{\getvalue{@fl@n@#1}}{\flasciititle}}}%
-% \letgvalue{@fl@r@#1}\relax}% nils
-% \setgvalue{@fl@t@#1}%
-% % {\preparethenumber{\??kj#1}\flcomposedsectionnumber\preparednumber
-% {\preparethenumber{\??kj#1}{\getvalue{@fl@n@#1}}\preparednumber
-% \doattributes{\??kj#1}\c!style\c!color
-% {\doattributes{\??kj#1}\c!headstyle\c!headcolor
-% {\labeltexts{#1}{\preparednumber}}%
-% \doattributes{\??kj#1}\c!textstyle\c!textcolor
-% {\dotfskip{\getvalue{\??kj#1\c!distance}}#3}}}%
-% \fi}
-
\def\dodosetfloatcaption[#1][#2]#3% to do namespace for number/ascii
{\ifnofloatnumber % also handle trialtypesetting
\letgvalue{@fl@r@#1}\relax
@@ -1396,7 +1410,7 @@
{\noindent
% \xdef\lastcaptiontag{\strut#2\floatcaptionsuffix}%
\xdef\lastcaptiontag{\strut#2}%
- \xdef\floatcaptionnumber{#1}%
+% \xdef\floatcaptionnumber{#1}%
\dostartattributes{\??kj#1}\c!style\c!color\empty
\ifnofloatnumber
\else
@@ -2195,89 +2209,6 @@
\dostartbuffer[pbuf-\nofpostponedblocks]%
[\e!start\v!postponing][\e!stop\v!postponing]}
-\definenumber
- [\??si]
- [\c!way=\v!by\v!text,
- \c!conversion=\@@siconversion]
-
-\def\setupfloatsplitting
- {\dodoubleargument\getparameters[\??si]}
-
-% ook (continued)
-
-\newif\ifinsidesplitfloat % will become chardef
-
-\def\dosplitfloat[#1]#2% nog dubbele refs
- {\ifinsidecolumns % tzt ook nog figuren splitten
- % not yet supported
- \else
- \bgroup
- \insidefloattrue
- \insidesplitfloattrue
- \getparameters[\??si][#1]%
- \resetnumber[\??si]%
- \def\floatcaptionsuffix{\convertednumber[\??si]}%
- % \TABLEcaptionheight\@@silines\lineheight% brrr
-% todo: auto == \getnoflines\captionheight
-\let\extrasplitfloatlines\@@silines
-\the\everysplitfloatsetup
- \simplifypagebreak % \page becomes \goodbreak
-% todo: a preceding float does not count yet
-% so we need a better predictor
- \dowithnextbox
- {\forgetall
- \dontcomplain
-\chardef\nodelocationmode\zerocount
- \doloop
- {\setbox2\vsplit\nextbox to \lineheight
- \setbox2\vbox{\unvbox2}
- \ifdim\ht2>\lineheight
- \incrementnumber[\??si]%
- \ifcase\rawnumber[\??si]\or \ifdim\nextboxht=\zeropoint
- \let\floatcaptionsuffix\empty
- \fi \fi
- \bgroup
- #2{\unvbox2}
- \egroup
- \ifdim\nextboxht>\zeropoint
- \page
- \fi
- \fi
- \ifdim\nextboxht>\zeropoint
-\decrementnumber[\floatcaptionnumber]
-%\setupnumber[\floatcaptionnumber][\c!state=\v!stop]%
- \else
- \expandafter\exitloop
- \fi}%
- \egroup}
- \vbox
- \fi}
-
-\def\splitfloat
- {\dosingleempty\dosplitfloat}
-
-\newtoks \everysplitfloatsetup
-
-% will move to core-tab
-
-\appendtoks
- \TABLEcaptionheight\extrasplitfloatlines\lineheight
-\to \everysplitfloatsetup
-
-% will move to core-ntb
-
-\appendtoks
- \def\extratblsplitheight{\extrasplitfloatlines\lineheight}%
-\to \everysplitfloatsetup
-
-% todo in core-tbl
-
-\appendtoks
- % set extra
-\to \everysplitfloatsetup
-
-% \splitfloat [settings] {\placetable[optional args]{test}} {content}
-
\def\dooutput{\sidefloatoutput} % redefinition of \dooutput
\setupmarginblocks
@@ -2376,10 +2307,6 @@
\c!local=,
\c!default=\v!figure,
\c!numbering=\v!yes]
-
-\setupfloatsplitting
- [\c!conversion=\v!character, % \v!romannumerals
- \c!lines=3]
% float strategy, replaces some of the above macros
diff --git a/tex/context/base/page-imp.tex b/tex/context/base/page-imp.tex
index bb8247e63..b64a543cf 100644
--- a/tex/context/base/page-imp.tex
+++ b/tex/context/base/page-imp.tex
@@ -922,7 +922,7 @@
\def\dofilterpage#1#2%
{\hbox to \textwidth
- {\ifdubbelzijdig\ifdim\@@ipwidth>\zeropoint\relax\ifodd\realpageno\else
+ {\ifdoublesided\ifdim\@@ipwidth>\zeropoint\relax\ifodd\realpageno\else
\hfill
\def\dowithfigure{\hskip-\@@ipwidth}%
\fi\fi\fi
diff --git a/tex/context/base/page-ini.tex b/tex/context/base/page-ini.tex
index ee62d92bb..b7cbfc9c3 100644
--- a/tex/context/base/page-ini.tex
+++ b/tex/context/base/page-ini.tex
@@ -938,7 +938,7 @@
\def\eject {\par\ifvmode\penalty\ejectpenalty\fi\resetpagebreak} % == {\par\break} % plain
\def\supereject {\par\ifvmode\penalty\superpenalty\fi\resetpagebreak} % also plain
-\def\doejectpage {\par\ifvmode\ifdim\pagetotal>\pagegoal\else\normalvfil\fi\fi}
+\def\doejectpage {\par\ifvmode\ifdim\pagetotal>\pagegoal\else\normalvfil\fi\fi} % pg set to \textheight
\def\ejectpage {\doejectpage\eject}
\def\superejectpage{\doejectpage\supereject}
@@ -1570,6 +1570,9 @@
\def\simplifypagebreak
{\def\dopagebreak[##1]{\goodbreak}}
+\def\disablepagebreaks
+ {\def\dopagebreak[##1]{}}
+
\def\executepagebreakhandler#1%
{\edef\@@pagespecification{#1}%
\doifdefinedelse{\??pe:\@@pagespecification}
@@ -1701,7 +1704,7 @@
\gotonextpageX % will become \gotonextpage
\doifbothsidesoverruled
\orsideone
- \resetcurrentsectionmarks
+ \resetcurrentsectionmarks % sic
\ejectdummypage
\orsidetwo
\od}
@@ -1712,7 +1715,7 @@
\doifbothsidesoverruled
\orsideone
\orsidetwo
- \resetcurrentsectionmarks
+ \resetcurrentsectionmarks % sic
\ejectdummypage
\od}
@@ -1725,7 +1728,7 @@
\doifoddpageelse\donothing{\resetcurrentsectionmarks\ejectdummypage}}
\installpagebreakhandler \v!quadruple % not yet ok inside columnsets
- {\ifdubbelzijdig
+ {\ifdoublesided
\!!counta\realpageno
\!!countb\realpageno
\divide\!!counta 4
@@ -1753,7 +1756,7 @@
\installpagebreakhandler \v!lastpage % handy for backpage preceded by empty pages
{\executepagebreakhandler\v!yes
- \ifdubbelzijdig
+ \ifdoublesided
\executepagebreakhandler\v!left
\executepagebreakhandler\v!empty
\executepagebreakhandler\v!empty
diff --git a/tex/context/base/page-lay.tex b/tex/context/base/page-lay.tex
index 89768922b..20d9e6686 100644
--- a/tex/context/base/page-lay.tex
+++ b/tex/context/base/page-lay.tex
@@ -863,7 +863,7 @@
\def\orientpagebodybox#1#2#3%
{\ifnum#2#3>\zerocount
\setbox#1\vbox
- {\edef\somerotation{\ifdubbelzijdig\ifodd\realpageno#2\else#3\fi\else#2\fi}%
+ {\edef\somerotation{\ifdoublesided\ifodd\realpageno#2\else#3\fi\else#2\fi}%
\dorotatebox\somerotation\hbox{\box#1}}%
\fi}
@@ -940,8 +940,8 @@
\ifnum\verticalcutmarks >2 \chardef\colormarkoffset4 \fi
#1{#2}}
-\newif\ifdubbelzijdig \dubbelzijdigfalse
-\newif\ifenkelzijdig \enkelzijdigtrue
+\newif\ifdoublesided \doublesidedfalse
+\newif\ifsinglesided \singlesidedtrue
% NOG EENS NAGAAN WANNEER NU GLOBAL EN WANNEER NIET
@@ -1036,15 +1036,15 @@
% what are those \relax'es doing there?
\def\doifbothsidesoverruled#1\orsideone#2\orsidetwo#3\od
- {\ifdubbelzijdig
+ {\ifdoublesided
\doifoddpageelse{#2}{#3}\relax
\else
#1\relax
\fi}
\def\doifbothsides#1\orsideone#2\orsidetwo#3\od
- {\ifdubbelzijdig
- \ifenkelzijdig
+ {\ifdoublesided
+ \ifsinglesided
#1\relax
\else
\doifoddpageelse{#2}{#3}\relax
@@ -1084,8 +1084,8 @@
\the\everyswapmargins}
\def\rightorleftpageaction
- {\ifdubbelzijdig
- \ifenkelzijdig
+ {\ifdoublesided
+ \ifsinglesided
\@EAEAEA\firstoftwoarguments
\else
\@EAEAEA\doifoddpageelse
diff --git a/tex/context/base/page-log.tex b/tex/context/base/page-log.tex
index d124fdd3d..53984eefd 100644
--- a/tex/context/base/page-log.tex
+++ b/tex/context/base/page-log.tex
@@ -135,7 +135,7 @@
\def\setlogoboxes
{\showmessage\m!layouts7\empty
\dosetlogobox\leftlogos\relax
- \ifdubbelzijdig
+ \ifdoublesided
\dosetlogobox\rightlogos\doswapmargins
\fi}
diff --git a/tex/context/base/page-lyr.tex b/tex/context/base/page-lyr.tex
index 48ea1e3c2..e92f12052 100644
--- a/tex/context/base/page-lyr.tex
+++ b/tex/context/base/page-lyr.tex
@@ -435,6 +435,8 @@
%D efficient in \ETEX\ since there testing for an undefined
%D macro does not takes hash space.
+% todo: setups before flush, handy hook
+
\unexpanded\def\flushlayer[#1]%
{\doifelsevalue{\??ll#1\c!state}\v!next
{\global\letvalue{\??ll#1\c!state}\v!start} % dangerous, stack-built-up
diff --git a/tex/context/base/page-mak.tex b/tex/context/base/page-mak.tex
index 70530ba87..807d77fc0 100644
--- a/tex/context/base/page-mak.tex
+++ b/tex/context/base/page-mak.tex
@@ -167,13 +167,20 @@
\def\doshipoutmakeup
{\globalpushmacro\@@pnstate % new
\makeupparameter\c!before
- \vbox{\hbox{\color[\makeupparameter\c!color]{\box\makeupbox}}}%
+ \setbox\makeupbox\vbox{\hbox{\color[\makeupparameter\c!color]{\box\makeupbox}}}%
+ % \ifgridsnapping
+ % new per 22/6/2006
+ \ifdim\ht\makeupbox>\vsize
+ \ht\makeupbox\vsize
+ \fi
+ % \fi
+ \box\makeupbox
\setuppagenumber[\c!state=\makeupparameter\c!pagestate]%
\setupmakeuplayout
\page
\makeupparameter\c!after
\relax % voor fi
- \ifdubbelzijdig \ifodd\realpageno\else
+ \ifdoublesided \ifodd\realpageno\else
\processaction
[\makeupparameter\c!doublesided]
[ \v!yes=>\null
diff --git a/tex/context/base/page-mar.tex b/tex/context/base/page-mar.tex
index d05ece78c..6a251f0d0 100644
--- a/tex/context/base/page-mar.tex
+++ b/tex/context/base/page-mar.tex
@@ -574,7 +574,7 @@
\v!right=>\let\next\dorightmarginblock, % no swapping
\v!inner=>\def\next{\doinmarginswapped\dorightmarginblock\doleftmarginblock },
\v!outer=>\def\next{\doinmarginswapped\doleftmarginblock \dorightmarginblock},
- \s!unknown=>\ifdubbelzijdig
+ \s!unknown=>\ifdoublesided
\doifcommonelse{+,-}{#4}
{\def\next{\doinmarginswapped\dorightmarginblock\doleftmarginblock }}
{\def\next{\doinmarginswapped\doleftmarginblock \dorightmarginblock}}%
diff --git a/tex/context/base/page-num.tex b/tex/context/base/page-num.tex
index a684eb7ef..b5a90fe6b 100644
--- a/tex/context/base/page-num.tex
+++ b/tex/context/base/page-num.tex
@@ -346,7 +346,7 @@
{\checknumber[\s!page]}
% \getpagestatus
-% \ifrightpage als odd/enkelzijdig
+% \ifrightpage als odd/singlesided
\newif\ifrightpage \rightpagetrue
@@ -365,7 +365,7 @@
\writepagref}
\def\getpagestatus % hierboven gebruiken
- {\ifdubbelzijdig
+ {\ifdoublesided
\gettwopassdata\s!page
\iftwopassdatafound \else
\let\twopassdata\realpageno
@@ -402,8 +402,8 @@
\v!right=>\dododosetpagenumberlocation{\v!text\c!righttext},
\v!inleft=>\dododosetpagenumberlocation{\v!margin\c!lefttext},
\v!inright=>\dododosetpagenumberlocation{\v!margin\c!righttext},
- \v!inmargin=>\dododosetpagenumberlocation{\v!margin\ifdubbelzijdig\c!margintext\else\c!righttext\fi},
- \v!margin=>\dododosetpagenumberlocation{\v!margin\ifdubbelzijdig\c!margintext\else\c!righttext\fi},
+ \v!inmargin=>\dododosetpagenumberlocation{\v!margin\ifdoublesided\c!margintext\else\c!righttext\fi},
+ \v!margin=>\dododosetpagenumberlocation{\v!margin\ifdoublesided\c!margintext\else\c!righttext\fi},
\v!atmargin=>\dododosetpagenumberlocation{\v!text\c!marginedgetext},
\v!marginedge=>\dododosetpagenumberlocation{\v!text\c!marginedgetext}]%
\ifdone \else
@@ -419,14 +419,14 @@
\def\dosetuppagenumbering[#1]%
{\getparameters[\??nm][#1]%
\preparepageprefix\??nm
- \enkelzijdigfalse
- \dubbelzijdigfalse
+ \singlesidedfalse
+ \doublesidedfalse
\ExpandFirstAfter\processallactionsinset
[\@@nmalternative]
- [ \v!singlesided=>\enkelzijdigtrue,
- \v!doublesided=>\dubbelzijdigtrue]%
+ [ \v!singlesided=>\singlesidedtrue,
+ \v!doublesided=>\doublesidedtrue]%
\ifx\trackingmarginnotestrue\undefined\else
- \ifdubbelzijdig
+ \ifdoublesided
\trackingmarginnotestrue
\else
\trackingmarginnotesfalse
diff --git a/tex/context/base/page-one.tex b/tex/context/base/page-one.tex
index a52196c59..b1931dd1e 100644
--- a/tex/context/base/page-one.tex
+++ b/tex/context/base/page-one.tex
@@ -125,16 +125,48 @@
#1%
\fi}
+% \chardef\kindofpagetextareas\plusone
+
+\def\doOTRONEregisteredtextareaA#1%
+ {\ifregistertextareas
+ \xypos{pbd:\realfolio:b}% we could save bytes by only saving the y
+ \endgraf
+ \begingroup
+ \scratchdimen\MPy{pbd:\realfolio:b}%
+ \advance\scratchdimen-\MPy{pbd:\realfolio:e}%
+ \setbox\scratchbox\null
+ \wd\scratchbox\makeupwidth
+ \ht\scratchbox\scratchdimen
+ \vsmash{\registeredtextarea00\scratchbox}%
+ \endgroup
+ #1%
+ \endgraf
+ \xypos{pbd:\realfolio:e}%
+ \else
+ #1%
+ \fi}
+
+\def\doOTRONEregisteredtextareaB#1%
+ {\ifregistertextareas
+ \setbox0\vbox{#1}%
+ \wd0\makeupwidth % somehow a space creeps in
+ \vbox{\registeredtextarea000}%
+ \else
+ #1%
+ \fi}
+
\let\OTRONEregisteredtextareaA\firstofoneargument
\let\OTRONEregisteredtextareaB\firstofoneargument
\def\OTRONEdopagecontents#1#2% \box<n> \unvbox<n>
{\bgroup % niet breedte zetten, kan fractie zijn!
\ifcase\kindofpagetextareas
- \or % partial page
- \let\OTRONEregisteredtextareaA\OTRONEregisteredtextarea
- \or % whole page
- \let\OTRONEregisteredtextareaB\OTRONEregisteredtextarea
+ \or % partial page (experimental)
+ \let\OTRONEregisteredtextareaA\doOTRONEregisteredtextareaA
+ \or % whole page (default)
+ \let\OTRONEregisteredtextareaB\doOTRONEregisteredtextareaB
+ \or % partial page (only works well with no stretch!)
+ \let\OTRONEregisteredtextareaA\doOTRONEregisteredtextareaB
\fi
\setbox0\vbox \ifbottomnotes to \textheight \fi
{\edef\currentpagedepth{\the\dp#2}% still to be derived from #1
@@ -309,16 +341,6 @@
\OTRONEdosetbotinserts
\fi}
-% \def\OTRONEdotopinsertions
-% {\ifvoid\topins\else
-% \ifgridsnapping
-% \box\topins % not \topsnaptogrid{\box\topins}%
-% \else
-% \unvbox\topins
-% \fi
-% \fi
-% \global\topinserted\zeropoint}
-
\def\OTRONEdotopinsertions
{\ifvoid\topins\else
\ifgridsnapping
@@ -359,16 +381,6 @@
\fi \fi
\snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\copy\floatbox}}}
-% \def\OTRONEdodoflushfloats % moet nog beter: als precies passend, niet onder baseline
-% {\ifsomefloatwaiting
-% \bgroup % \box\floatbox can be in use!
-% \dogetfloat
-% \doplacefloatbox
-% \egroup
-% \dofloatflushedinfo
-% \expandafter\OTRONEdodoflushfloats
-% \fi}
-
\def\OTRONEdodoflushfloats % much in common with OTRSET
{\ifsomefloatwaiting
\ifpackflushedfloats
@@ -424,52 +436,6 @@
\expandafter\OTRONEdodoflushfloats
\fi}
-% \def\OTRONEdocheckiffloatfits % vervangen ivm downward comp
-% {\ifnofloatpermitted
-% \global\roomforfloatfalse
-% \else
-% \dimen0 \pagetotal
-% \advance\dimen0 \ht\floatbox
-% \advance\dimen0 \dp\floatbox
-% \advance\dimen0 \floattopskip
-% % \advance\dimen0 -\pageshrink % toegevoegd
-% %\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait
-% \ifdim\dimen0>\pagegoal
-% \global\roomforfloatfalse
-% \else
-% \global\roomforfloattrue
-% \fi
-% \fi}
-
-% \def\OTRONEdocheckiffloatfits % vervangen ivm downward comp
-% {\ifnofloatpermitted
-% \global\roomforfloatfalse
-% \else
-% \dimen0 \pagetotal
-% \advance\dimen0 \ht\floatbox
-% \advance\dimen0 \dp\floatbox
-% \advance\dimen0 \floattopskip
-% \advance\dimen0 -\pageshrink % toegevoegd
-% %\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait
-% \dimen2\pagegoal
-% \relax % needed
-% \ifcase\textfloatmethod
-% % method 0 : raw
-% \or
-% % method 1 : safe
-% \dimen2 .99\pagegoal
-% \or
-% % method 2 : tight
-% \advance\dimen0 -\onepoint
-% \fi
-% \relax % really needed ! ! ! !
-% \ifdim\dimen0>\dimen2
-% \global\roomforfloatfalse
-% \else
-% \global\roomforfloattrue
-% \fi
-% \fi}
-
\def\OTRONEdocheckiffloatfits % vervangen ivm downward comp
{\ifnofloatpermitted
\global\roomforfloatfalse
diff --git a/tex/context/base/page-run.tex b/tex/context/base/page-run.tex
index b44662d3c..302a1b5a0 100644
--- a/tex/context/base/page-run.tex
+++ b/tex/context/base/page-run.tex
@@ -32,7 +32,7 @@
[\c!offset=\v!overlay,\c!strut=\v!no,
\c!width=\paperwidth,\c!height=\paperheight]
{\ss ABC\par DEF}}%
- \dubbelzijdigfalse
+ \doublesidedfalse
\def\cutmarklength{.5em}%
\addpagecutmarks0%
\replicatepagebox0%
diff --git a/tex/context/base/page-set.tex b/tex/context/base/page-set.tex
index 1c31f6a10..9c553167b 100644
--- a/tex/context/base/page-set.tex
+++ b/tex/context/base/page-set.tex
@@ -2711,7 +2711,7 @@
\advance\!!widthb -\!!countc\textwidth
\ifodd\realpageno \else % tricky, assumes that we keep there
\ifcase\!!countc\else
- % nog niet ok voor enkel/dubbelzijdig
+ % nog niet ok voor enkel/doublesided
\advance\!!widtha \namedlayoutparameter\v!even\c!backspace
\advance\!!widtha \namedlayoutparameter\v!odd \c!backspace
\advance\!!widthb \namedlayoutparameter\v!even\c!backspace
diff --git a/tex/context/base/page-spr.tex b/tex/context/base/page-spr.tex
index c90e9cf0f..53d508752 100644
--- a/tex/context/base/page-spr.tex
+++ b/tex/context/base/page-spr.tex
@@ -60,7 +60,7 @@
\def\startspread
{\bgroup
- \ifdubbelzijdig
+ \ifdoublesided
\page[\v!left]%
%\setsystemmode{spread}%
\inspreadtrue
diff --git a/tex/context/base/s-abr-01.tex b/tex/context/base/s-abr-01.tex
index 63861acf8..54e5d6f97 100644
--- a/tex/context/base/s-abr-01.tex
+++ b/tex/context/base/s-abr-01.tex
@@ -82,8 +82,8 @@
\logo [FREEBSD] {FreeBSD}
\logo [FOXET] {foXet}
\logo [FTP] {ftp}
-\logo [GHOSTSCRIPT]{Ghost\-Script}
-\logo [GHOSTVIEW] {Ghost\-View}
+\logo [GHOSTSCRIPT]{Ghost\-script}
+\logo [GHOSTVIEW] {Ghost\-view}
\logo [GIF] {gif}
\logo [GNU] {gnu}
\logo [GS] {Ghost\-Script}
@@ -198,7 +198,7 @@
\logo [TUGNEWS] {Tug\-News}
\logo [TUG] {tug}
\logo [UNICODE] {Uni\-code}
-\logo [UNIX] {unix}
+\logo [UNIX] {Unix}
\logo [URI] {uri}
\logo [URL] {url}
\logo [USA] {usa}
diff --git a/tex/context/base/s-pre-30.tex b/tex/context/base/s-pre-30.tex
index 2f983e51b..2a3899c92 100644
--- a/tex/context/base/s-pre-30.tex
+++ b/tex/context/base/s-pre-30.tex
@@ -196,6 +196,19 @@
\page
\stopsetups
+\startsetups show-usage-lines
+ \subject{usage}
+ \typebuffer
+ \startstreamlayer[resultstream]
+ \subject{result}
+ \startlines
+ \getbuffer
+ \stoplines
+ \stopstreamlayer
+ \placestreamlayer[resultstream]
+ \page
+\stopsetups
+
\startsetups show-contents
\startcolumns[n=3]
\placelist[section][criterium=text]
diff --git a/tex/context/base/s-pre-50.tex b/tex/context/base/s-pre-50.tex
index 0332001ab..782f6aea1 100644
--- a/tex/context/base/s-pre-50.tex
+++ b/tex/context/base/s-pre-50.tex
@@ -8,29 +8,29 @@
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
-%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
-%C details.
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
%D When my mailbox started to overflow with messages about
%D problems with the presentation step mechanism, I looked up
%D old presentaton, hacked a bit and cooked up an alternative
-%D that is less dependent on \PDF\ trickery.
+%D that is less dependent on \PDF\ trickery.
%D
-%D Consider it a cheap trick and prelude to a couple of new
-%D presentation styles. (At the time of writing this, I
-%D still have some 10 of those styles to clean up and
-%D document.) You can give it a try:
+%D Consider it a cheap trick and prelude to a couple of new
+%D presentation styles. (At the time of writing this, I
+%D still have some 10 of those styles to clean up and
+%D document.) You can give it a try:
%D
-%D \starttyping
-%D texexec --pdf --mode=demo s-pre-50
-%D \stoptyping
+%D \starttyping
+%D texexec --pdf --mode=demo s-pre-50
+%D \stoptyping
% Basic definitions.
\defineframedtext
[horizontal]
[width=\textwidth,
- frame=off,
+ frame=off,
strut=no,
height=fit,
align={right,lohi},
@@ -50,7 +50,7 @@
\setupcollector
[contribution]
[voffset=-.25\bodyfontsize]
-
+
\setupframedtexts
[horizontal]
[background=color,
@@ -59,7 +59,7 @@
\stopmode
-%D Structure and trick.
+%D Structure and trick.
\def\StartSteps
{\checkutilities}
@@ -74,7 +74,7 @@
\flushcollector[contribution]
\page}
-%D Trick.
+%D Trick. Nowadays we can use streams.
\installoutput\FlushStep
{\StartStep\unvbox\normalpagebox\StopStep}
diff --git a/tex/context/base/supp-lan.tex b/tex/context/base/supp-lan.tex
index cab3f0bec..83ab14df0 100644
--- a/tex/context/base/supp-lan.tex
+++ b/tex/context/base/supp-lan.tex
@@ -1475,27 +1475,27 @@
\flushurl\splitbefore\#%
\else\ifnum\catcode`#1=4
\flushurl\splitbefore\&%
- \else\if#1\lettertilde
+ \else\expandafter\if\string#1\lettertilde
\flushurl\splitbefore\~%
- \else\if#1\letterpercent
+ \else\expandafter\if\string#1\letterpercent
\flushurl\splitbefore\%%
- \else\if#1\letterunderscore
+ \else\expandafter\if\string#1\letterunderscore
\flushurl\splitbefore\_%
- \else\if#1\letterquestionmark
+ \else\expandafter\if\string#1\letterquestionmark
\flushurl\splitafter\letterquestionmark
- \else\if#1\letterat
+ \else\expandafter\if\string#1\letterat
\flushurl\splitafter\letterat
- \else\if#1\letterslash
+ \else\expandafter\if\string#1\letterslash
\edef\savedurl{\savedurl\letterslash}%
- \else\if#1+%
+ \else\expandafter\if\string#1+%
\flushurl\splitafter+%
- \else\if#1:%
+ \else\expandafter\if\string#1:%
\flushurl\splitafter:%
- \else\if#1.%
+ \else\expandafter\if\string#1.%
\flushurl\splitafter.%
- \else\if#1(%
+ \else\expandafter\if\string#1(%
\flushurl\splitbefore(%
- \else\if#1)%
+ \else\expandafter\if\string#1)%
\flushurl\splitafter)%
\else
\ifx\savedurl\empty\else
@@ -1503,12 +1503,12 @@
\let\savedurl\empty
\fi
\ifcase\urlhyphenmethod
- #1%
+ \string#1%
\else
\ifnum\scratchcounter>\plusthree % so, \http: will not break
- \edef\savedurl{#1}%
+ \edef\savedurl{\string#1}%
\else
- #1%
+ \string#1%
\fi
\fi
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
@@ -1522,6 +1522,12 @@
% \hsize1pt\gotoURL{http://www.physik.fu-berlin.de/SomeVeryVeryVeryLongDirectory/And/AQuiteLongFileName.html}
% \stoptext
+% \useencoding[ffr]
+% \mainlanguage[fr]
+% \starttext
+% \hyphenatedurl{http://somewhere.to/go}
+% \stoptext
+
%D When Joop Susan asked (on the \CONTEXT\ mailing list) how
%D to handle url's passed as argument, the following solutions
%D came to my mind:
diff --git a/tex/context/base/supp-mis.tex b/tex/context/base/supp-mis.tex
index 9ab55142f..d2105e34c 100644
--- a/tex/context/base/supp-mis.tex
+++ b/tex/context/base/supp-mis.tex
@@ -20,18 +20,36 @@
%D Because \LATEX\ has no safe package loading mechanism, we
%D need to take care of possible interference.
+% \def\StartLatexHack
+% {\edef\StopLatexHack
+% {\catcode`\noexpand/=\the\catcode`/
+% \catcode`\noexpand-=\the\catcode`-
+% \catcode`\noexpand:=\the\catcode`:
+% \catcode`\noexpand;=\the\catcode`;
+% \catcode`\noexpand"=\the\catcode`"
+% \catcode`\noexpand<=\the\catcode`<
+% \catcode`\noexpand>=\the\catcode`>}%
+% \catcode`/=12 \catcode`-=12
+% \catcode`:=12 \catcode`;=12
+% \catcode`"=12 \catcode`<=12 \catcode`>=12 }
+
+%D Adapted conform request from morten.hoegholm@latex-project.org,
+%D i.e. untested by me; using strings makes Babel more happy.
+
\def\StartLatexHack
{\edef\StopLatexHack
- {\catcode`\noexpand/=\the\catcode`/
- \catcode`\noexpand-=\the\catcode`-
- \catcode`\noexpand:=\the\catcode`:
- \catcode`\noexpand;=\the\catcode`;
- \catcode`\noexpand"=\the\catcode`"
- \catcode`\noexpand<=\the\catcode`<
- \catcode`\noexpand>=\the\catcode`>}%
- \catcode`/=12 \catcode`-=12
- \catcode`:=12 \catcode`;=12
- \catcode`"=12 \catcode`<=12 \catcode`>=12 }
+ {\catcode\string`\noexpand/=\the\catcode\string`/
+ \catcode\string`\noexpand-=\the\catcode\string`-
+ \catcode\string`\noexpand:=\the\catcode\string`:
+ \catcode\string`\noexpand;=\the\catcode\string`;
+ \catcode\string`\noexpand"=\the\catcode\string`"
+ \catcode\string`\noexpand<=\the\catcode\string`<
+ \catcode\string`\noexpand>=\the\catcode\string`>
+ \catcode\string`\noexpand`=\the\catcode\string``}%
+ \catcode\string`/=12 \catcode\string`-=12
+ \catcode\string`:=12 \catcode\string`;=12
+ \catcode\string`"=12 \catcode\string`<=12
+ \catcode\string`>=12 \catcode\string``=12 }
%D This hack is needed especially for \LATEX\ users who use
%D the Babel package. The Germans have active \type {"}'s, the
diff --git a/tex/context/base/supp-mps.tex b/tex/context/base/supp-mps.tex
index b89483a5c..9005b5736 100644
--- a/tex/context/base/supp-mps.tex
+++ b/tex/context/base/supp-mps.tex
@@ -1000,7 +1000,7 @@
\deallocateMPslot\currentMPgraphic
\egroup}
-\long\def\startuseMPgraphic#1%
+\long\def\startuseMPgraphic
{\blabelgroup
\obeyMPlines
\dostartuseMPgraphic}
@@ -1009,7 +1009,7 @@
{\long\setgvalue{\@@MPG#1}{\handleuseMPgraphic{#1}{#2}}%
\elabelgroup}
-\long\def\startusableMPgraphic#1%
+\long\def\startusableMPgraphic
{\blabelgroup
\obeyMPlines
\dostartusableMPgraphic}
@@ -1111,8 +1111,7 @@
\def\MPOSTbatchswitch {-int=batchmode}
\def\MPOSTnonstopswitch {-int=nonstopmode}
-% \def\MPOSTformatswitch {-progname=mpost -mem=}
- \def\MPOSTformatswitch {-mem=}
+ \def\MPOSTformatswitch {-progname=metafun -mem=}
\def\MPOSTdriver {dvips}
\def\executeMPOST#1% direct call
@@ -1962,7 +1961,24 @@
\let\stopMPcode \relax % so that we can use it in \expanded
-%D Special for \XETEX\ (problem with newlines):
+%D \macros
+%D {startstaticMPgraphic}
+%D
+%D Dedicated to Aditya Mahajan. See meta-ini for usage.
+
+\long\def\startstaticMPgraphic#1#2\stopstaticMPgraphic
+ {\setMPrandomseedfalse
+ \def\MPgraphicfile{#1}% no \jobname here
+ \let\allocateMPslot \gobbleoneargument
+ \let\deallocateMPslot\gobbleoneargument
+ \let\runMPgraphic \gobbleoneargument
+ \runMPgraphicstrue
+ \currentMPgraphic\plusone % hack, else no close
+ \startMPgraphic#2\stopMPgraphic}
+
+%D Special for \XETEX\ (problem with newlines). This will go
+%D away once the version supporting \type {--8bit} is
+%D widespread.
\beginXETEX
\let\obeyMPlines\relax
diff --git a/tex/context/base/symb-cow.tex b/tex/context/base/symb-cow.tex
new file mode 100644
index 000000000..427e0af32
--- /dev/null
+++ b/tex/context/base/symb-cow.tex
@@ -0,0 +1,104 @@
+%D \module
+%D [ file=symb-cow,
+%D version=2006.06.23,
+%D title=\CONTEXT\ Symbol Libraries,
+%D subtitle=Cow Symbols,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=\PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\loadmapfile[koeieletters.map]
+
+\definefontsynonym [Cows] [koeielett]
+\definefontsynonym [CowsContour] [koeielett-contour]
+\definefontsynonym [CowsLogo] [koeielogos]
+\definefontsynonym [CowsLogoContour] [koeielogos-contour]
+
+\definecolor [lsky] [r=.6,g=.6,b=1]
+\definecolor [dsky] [r=.1,g=.1,b=1]
+\definecolor [lground] [r=.3,g=.9,b=.3]
+\definecolor [dground] [r=0,g=.5,b=0]
+\definecolor [cspots] [r=.33,g=.1,b=0]
+
+\definecolor [tlsky] [t=.5,a=1,r=.6,g=.6,b=1]
+\definecolor [tdsky] [t=.5,a=1,r=.1,g=.1,b=1]
+\definecolor [tlground] [t=.5,a=1,r=.3,g=.9,b=.3]
+\definecolor [tdground] [t=.5,a=1,r=0,g=.5,b=0]
+\definecolor [tcspots] [t=.5,a=1,r=.33,g=.1,b=0]
+
+\definepalet
+ [cow]
+ [normal=lground,
+ contour=dground]
+
+\def\ScaledCowOverlay#1#2%
+ {\dontleavehmode\hbox
+ {\color[cow:contour]{\hsmash{\definedfont[CowsContour sa #1]#2}}%
+ \color[cow:normal] {\definedfont[Cows sa #1]#2}}}
+
+\def\CowOverlay#1%
+ {\dontleavehmode\hbox
+ {\color[cow:contour]{\hsmash{\getglyph{CowsContour}{#1}}}%
+ \color[cow:normal] {\getglyph{Cows} {#1}}}}
+
+\def\CowContour#1%
+ {\dontleavehmode\hbox
+ {\color[cow:contour]{\hsmash{\getglyph{CowsLogoContour}{#1}}}%
+ \color[cow:normal] {\getglyph{CowsLogo} {#1}}}}
+
+\def\CowLogo#1%
+ {\getglyph{CowsLogo}{\char#1\relax}}
+
+\startsymbolset[cownormal]
+
+\definesymbol[CowPragma] [\CowLogo{1}]
+\definesymbol[CowConTeXt] [\CowLogo{2}]
+\definesymbol[CowConTeXtComplete][\CowLogo{3}]
+\definesymbol[CowConTeXtShadow] [\CowLogo{4}]
+\definesymbol[CowConTeXtContour] [\CowLogo{5}]
+\definesymbol[CowConTeXtOutline] [\CowLogo{6}]
+\definesymbol[CowConTeXtDots] [\CowLogo{7}]
+\definesymbol[CowMP] [\CowLogo{8}]
+\definesymbol[CowMPComplete] [\CowLogo{9}]
+\definesymbol[CowTeX] [\CowLogo{10}]
+\definesymbol[CowTeXComplete] [\CowLogo{11}]
+\definesymbol[CowBoo] [\CowLogo{12}]
+\definesymbol[CowCow] [\CowLogo{13}]
+\definesymbol[CowExampleComplete][\CowLogo{14}]
+\definesymbol[CowFoxetComplete] [\CowLogo{15}]
+\definesymbol[CowMetafun] [\CowLogo{16}]
+\definesymbol[CowMetafunComplete][\CowLogo{17}]
+\definesymbol[CowTEX] [\CowLogo{18}]
+\definesymbol[CowWiki] [\CowLogo{19}]
+
+\stopsymbolset
+
+\startsymbolset[cowcontour]
+
+\definesymbol[CowPragma] [\CowContour{1}]
+\definesymbol[CowConTeXt] [\CowContour{2}]
+\definesymbol[CowConTeXtComplete][\CowContour{3}]
+\definesymbol[CowConTeXtShadow] [\CowContour{4}]
+\definesymbol[CowConTeXtContour] [\CowContour{5}]
+\definesymbol[CowConTeXtOutline] [\CowContour{6}]
+\definesymbol[CowConTeXtDots] [\CowContour{7}]
+\definesymbol[CowMP] [\CowContour{8}]
+\definesymbol[CowMPComplete] [\CowContour{9}]
+\definesymbol[CowTeX] [\CowContour{10}]
+\definesymbol[CowTeXComplete] [\CowContour{11}]
+\definesymbol[CowBoo] [\CowContour{12}]
+\definesymbol[CowCow] [\CowContour{13}]
+\definesymbol[CowExampleComplete][\CowContour{14}]
+\definesymbol[CowFoxetComplete] [\CowContour{15}]
+\definesymbol[CowMetafun] [\CowContour{16}]
+\definesymbol[CowMetafunComplete][\CowContour{17}]
+\definesymbol[CowTEX] [\CowContour{18}]
+\definesymbol[CowWiki] [\CowContour{19}]
+
+\stopsymbolset
+
+\endinput
diff --git a/tex/context/base/syst-gen.tex b/tex/context/base/syst-gen.tex
index 9d4d9fd2e..a2beceac9 100644
--- a/tex/context/base/syst-gen.tex
+++ b/tex/context/base/syst-gen.tex
@@ -405,7 +405,9 @@
%D \type{\unprotect}, one can use \type{\@EA} as equivalent
%D of \type{\expandafter}.
-\let\@EA =\expandafter
+\let\@NX\noexpand
+\let\@EA\expandafter
+
\def\@EAEA {\expandafter\expandafter}
\def\@EAEAEA{\expandafter\expandafter\expandafter}
@@ -3818,10 +3820,10 @@
\processcommalist[##1]\dodododoublewithset}}%
#1\dododoublewithset}%
-\def\dodoubleemptywithset%
+\def\dodoubleemptywithset
{\dodoublewithset\dodoubleempty}
-\def\dodoubleargumentwithset%
+\def\dodoubleargumentwithset
{\dodoublewithset\dodoubleargument}
\def\dotriplewithset#1#2%
diff --git a/tex/context/base/type-cow.tex b/tex/context/base/type-cow.tex
new file mode 100644
index 000000000..027f6b6b7
--- /dev/null
+++ b/tex/context/base/type-cow.tex
@@ -0,0 +1,83 @@
+%D \module
+%D [ file=type-cow,
+%D version=2006.06.23,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=Cow Fonts,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D The cow fonts are a project of Duane Bibby, Hans Hagen and Taco
+%D Hoekwater.
+
+\starttypescriptcollection[cow]
+
+\starttypescript [math,serif] [cow,sheep] [default]
+ \setups[font:fallback:serif]
+ \usemathcollection[cow]
+ \loadmapfile[koeieletters.map]
+ \definefontsynonym [Serif] [Cows] [encoding=\typescriptthree]
+ \definefontsynonym [SerifContour] [CowsContour] [encoding=\typescriptthree]
+ \definefontsynonym [SerifLogo] [CowsLogo] [encoding=\typescriptthree]
+ \definefontsynonym [SerifLogoContour][CowsLogoContour] [encoding=\typescriptthree]
+ \definefontsynonym [MathRoman] [CowsMathRoman] [encoding=\typescriptthree]
+ \definefontsynonym [MathItalic] [CowsMathItalic] [encoding=\typescriptthree]
+ \definefontsynonym [MathSymbol] [CowsMathSymbol] [encoding=\typescriptthree]
+ \definefontsynonym [MathExtension] [CowsMathExtensions][encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [math,serif] [sheep] [default]
+ \setups[font:fallback:serif]
+ \usemathcollection[cow]
+ \loadmapfile[koeieletters.map]
+ \definefontsynonym [Serif] [Sheep] [encoding=\typescriptthree]
+ \definefontsynonym [SerifContour] [SheepContour] [encoding=\typescriptthree]
+ \definefontsynonym [SerifLogo] [SheepLogo] [encoding=\typescriptthree]
+ \definefontsynonym [SerifLogoContour][SheepLogoContour] [encoding=\typescriptthree]
+ \definefontsynonym [MathRoman] [SheepMathRoman] [encoding=\typescriptthree]
+ \definefontsynonym [MathItalic] [SheepMathItalic] [encoding=\typescriptthree]
+ \definefontsynonym [MathSymbol] [SheepMathSymbol] [encoding=\typescriptthree]
+ \definefontsynonym [MathExtension] [SheepMathExtensions][encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [all] [cow,sheep] [default]
+ \definefontsynonym [Cows] [koeielett]
+ \definefontsynonym [CowsContour] [koeielett-contour]
+ \definefontsynonym [CowsLogo] [koeielogos]
+ \definefontsynonym [CowsLogoContour] [koeielogos-contour]
+ \definefontsynonym [CowsMathRoman] [koeielett]
+ \definefontsynonym [CowsMathItalic] [koeieletter-mi]
+ \definefontsynonym [CowsMathSymbol] [koeieletter-sy]
+ \definefontsynonym [CowsMathExtensions][koeieletter-ex]
+\stoptypescript
+
+\starttypescript [all] [sheep] [default]
+ \definefontsynonym [Sheep] [koeielett]
+ \definefontsynonym [SheepContour] [koeielett-contour]
+ \definefontsynonym [SheepLogo] [koeielogos]
+ \definefontsynonym [SheepLogoContour] [koeielogos-contour]
+ \definefontsynonym [SheepMathRoman] [koeielettx]
+ \definefontsynonym [SheepMathItalic] [koeieletter-mi]
+ \definefontsynonym [SheepMathSymbol] [koeieletter-syx]
+ \definefontsynonym [SheepMathExtensions][koeieletter-ex]
+\stoptypescript
+
+\starttypescript [cow] [default]
+ \definetypeface [cow] [ss][serif][cow] [default][encoding=default]
+ \definetypeface [cow] [mm][math] [cow] [default][encoding=default]
+ \definetypeface [cow] [tt][mono] [modern][default][encoding=default,rscale=.85]
+\stoptypescript
+
+\starttypescript [sheep] [default]
+ \definetypeface [sheep][ss][serif][sheep] [default][encoding=default]
+ \definetypeface [sheep][mm][math] [sheep] [default][encoding=default]
+ \definetypeface [sheep][tt][mono] [modern][default][encoding=default,rscale=.85]
+\stoptypescript
+
+\stoptypescriptcollection
+
+\endinput
diff --git a/tex/context/base/type-gyr.tex b/tex/context/base/type-gyr.tex
new file mode 100644
index 000000000..b5063201d
--- /dev/null
+++ b/tex/context/base/type-gyr.tex
@@ -0,0 +1,36 @@
+%D \module
+%D [ file=type-gyr,
+%D version=2006.06.28,
+%D title=\CONTEXT\ Typescript Macros,
+%D subtitle=TeXGyre Collection,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\starttypescriptcollection[gyre]
+
+% TeXGyrePagella
+%
+% qplr TeXGyrePagella-Regular
+% qplri TeXGyrePagella-Italic
+% qplb TeXGyrePagella-Bold
+% qplbi TeXGyrePagella-BoldItalic
+
+\starttypescript [serif] [palatino] [texnansi,ec,8r,t5,qx]
+ \loadmapfile[\typescriptthree-qpl.map]
+
+ \definefontsynonym [Palatino] [\typescriptthree-qplr] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Italic] [\typescriptthree-qplri] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-Bold] [\typescriptthree-qplb] [encoding=\typescriptthree]
+ \definefontsynonym [Palatino-BoldItalic] [\typescriptthree-qplbi] [encoding=\typescriptthree]
+
+ \definefontsynonym [Palatino-Slanted] [Palatino-Italic]
+ \definefontsynonym [Palatino-BoldSlanted] [Palatino-BoldItalic]
+ \definefontsynonym [Palatino-Caps] [Palatino]
+\stoptypescript
+
+\stoptypescriptcollection
diff --git a/tex/context/base/type-syn.tex b/tex/context/base/type-syn.tex
index e5967d2f0..0470622fb 100644
--- a/tex/context/base/type-syn.tex
+++ b/tex/context/base/type-syn.tex
@@ -510,6 +510,26 @@
\definefontsynonym [SansBoldItalic] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
\stoptypescript
+\starttypescript [sans] [iwona-heavy] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [Sans] [Iwona-Heavy] [encoding=\typescriptthree]
+ \definefontsynonym [SansItalic] [Iwona-HeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [SansBold] [Iwona-Heavy] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldItalic] [Iwona-HeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+\stoptypescript
+
+\starttypescript [sans] [iwona-heavy-caps] [name]
+ \setups[font:fallback:sans]
+ \definefontsynonym [SansCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
+ \definefontsynonym [SansItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldCaps] [Iwona-CapsHeavy] [encoding=\typescriptthree]
+ \definefontsynonym [SansBoldItalicCaps] [Iwona-CapsHeavyItalic] [encoding=\typescriptthree]
+\stoptypescript
+
\starttypescript [sans] [iwona-light-cond] [name]
\setups[font:fallback:sans]
\definefontsynonym [Sans] [Iwona-CondLight] [encoding=\typescriptthree]
diff --git a/tex/context/base/verb-c.tex b/tex/context/base/verb-c.tex
index a7a041c7e..d2f708a8d 100644
--- a/tex/context/base/verb-c.tex
+++ b/tex/context/base/verb-c.tex
@@ -39,7 +39,7 @@
\ifcontinueCsinglelinecomment
\continueCsinglelinecommentfalse
\else
- \egroup
+ \tttf
\endofpretty
\global\inCsinglelinecommentfalse
\global\inCcommentfalse
@@ -200,7 +200,7 @@
\next{#1}#2}
\gdef\Cstartcomment#1#2%
- {\beginofpretty[\!!prettyfourthree]\bgroup\ttsl\getpretties{#1}{#2}}
+ {\beginofpretty[\!!prettyfourthree]\ttsl\getpretties{#1}{#2}}
\gdef\dodoCtypefourthree% #1%
{\endCtypesix
@@ -215,7 +215,7 @@
\else
\global\inCcommenttrue
\global\inCsinglelinecommenttrue
- \def\next{\beginofpretty[\!!prettyfourthree]\bgroup\ttsl\getpretties{#1}{#2}}%
+ \def\next{\beginofpretty[\!!prettyfourthree]\ttsl\getpretties{#1}{#2}}%
\expandafter\next
\fi}
@@ -235,7 +235,7 @@
\expandafter#2%
\else\ifnum\prettytype=43
\getpretties{#1}{#2}%
- \egroup
+ \tttf
\endofpretty
\global\inCcommentfalse
\global\inCmultilinecommentfalse
@@ -265,7 +265,7 @@
\endCtypesix
\global\inCcommenttrue
\global\inCsinglelinecommenttrue
- \def\next{\beginofpretty[\!!prettyfourthree]\bgroup\ttsl\getpretty{#1}}%
+ \def\next{\beginofpretty[\!!prettyfourthree]\ttsl\getpretty{#1}}%
\expandafter\next
\fi\fi\fi}
@@ -481,3 +481,4 @@
[\c!icommand=\tttf]
\protect \endinput
+
diff --git a/tex/context/base/x-fe.tex b/tex/context/base/x-fe.tex
index 6e24417ac..8562b1d52 100644
--- a/tex/context/base/x-fe.tex
+++ b/tex/context/base/x-fe.tex
@@ -104,7 +104,7 @@
\defineXMLargument
[fe:trace]
[attribute=,option=]
- {\showXMLinh{\XMLop{attribute}}%
+ {\showXMLinh[\XMLop{attribute}]%
\XMLval{fe:trace}{\XMLop{option}}{}}
\mapXMLvalue
diff --git a/tex/context/base/x-set-11.tex b/tex/context/base/x-set-11.tex
index 37de793bc..537148b43 100644
--- a/tex/context/base/x-set-11.tex
+++ b/tex/context/base/x-set-11.tex
@@ -400,7 +400,7 @@
{\showSETUPrecord}
\def\showSETUPrecord
- {\getvalue{startsetuptext}
+ {\getvalue{\e!start setuptext}
\tttf
\nohyphens
\veryraggedright
@@ -439,7 +439,7 @@
\egroup
\stopXMLmapping}
\stopXMLmapping
- \getvalue{stopsetuptext}}
+ \getvalue{\e!stop setuptext}}
\defineXMLenvironmentsave [cd:sequence] \ignorespaces \ignorespaces
\defineXMLenvironmentsave [cd:arguments] \ignorespaces \ignorespaces
@@ -785,9 +785,14 @@
\stopXMLmapping
-\def\loadsetups
+\def\loadsetups{\complexorsimple\loadsetups}
+
+\def\simpleloadsetups
+ {\complexloadsetups[cont-en.xml]}
+
+\def\complexloadsetups[#1]%
{\startXMLmapping[zero]
- \processXMLfilegrouped{cont-en.xml}
+ \processXMLfilegrouped{#1}
\stopXMLmapping}
\protect \endinput
diff --git a/tex/context/base/x-set-12.tex b/tex/context/base/x-set-12.tex
index d7ff8fd18..93055b860 100644
--- a/tex/context/base/x-set-12.tex
+++ b/tex/context/base/x-set-12.tex
@@ -32,7 +32,6 @@
\definecolor[TitleColor][r=.15,g=.20,b=.25]
\definecolor[TitleColor][r=.15,g=.25,b=.20]
-
\startinterface dutch \definecolor[LocalColor][r=.75,g=.25,b=.25] \stopinterface
\startinterface english \definecolor[LocalColor][r=.25,g=.75,b=.25] \stopinterface
\startinterface german \definecolor[LocalColor][r=.25,g=.25,b=.75] \stopinterface
@@ -150,22 +149,17 @@
\setuplayout
[titlepage]
-\startmakeup[\v!standard]
- \dontcomplain
- \startcolor[TitleColor]
- \definedfont[RegularBold at 100pt]\setstrut
- \setupalign[\v!left]
- \strut Con\TeX t \par
- \definedfont[RegularBold at 50pt]\setstrut
+\startsetups text:commands
\startinterface dutch \strut commando's \par \stopinterface
\startinterface english \strut commands \par \stopinterface
\startinterface german \strut befehle \par \stopinterface
- \startinterface french \strut ....... \par \stopinterface
- \startinterface czech \strut prikaz\'y \par \stopinterface
+ \startinterface french \strut commandes \par \stopinterface
+ \startinterface czech \strut p\v{r}ikazy \par \stopinterface
\startinterface italian \strut comandi \par \stopinterface
\startinterface romanian \strut comenzile \par \stopinterface
- \vfill
- \definedfont[RegularBold at 150pt]\setstrut
+\stopsetups
+
+\startsetups text:uppercase
\startinterface dutch NL\stopinterface
\startinterface english EN\stopinterface
\startinterface german DE\stopinterface
@@ -173,6 +167,29 @@
\startinterface czech CZ\stopinterface
\startinterface italian IT\stopinterface
\startinterface romanian RO\stopinterface
+\stopsetups
+
+\startsetups text:lowercase
+ \startinterface dutch \strut nl / nederlands \par \stopinterface
+ \startinterface english \strut en / english \par \stopinterface
+ \startinterface german \strut de / deutsch \par \stopinterface
+ \startinterface french \strut fr / fran\c{c}ais \par \stopinterface
+ \startinterface czech \strut cz / \v{c}esk\'y \par \stopinterface
+ \startinterface italian \strut it / italiano \par \stopinterface
+ \startinterface romanian \strut ro / rom\^{a}n\u{a} \par \stopinterface
+\stopsetups
+
+\startmakeup[\v!standard]
+ \dontcomplain
+ \startcolor[TitleColor]
+ \definedfont[RegularBold at 100pt]\setstrut
+ \setupalign[\v!left]
+ \strut Con\TeX t \par
+ \definedfont[RegularBold at 50pt]\setstrut
+ \setups[text:commands]
+ \vfill
+ \definedfont[RegularBold at 150pt]\setstrut
+ \setups[text:uppercase]
\stopcolor
\stopmakeup
@@ -189,22 +206,10 @@
\setupalign[\v!left]
\strut Con\TeX t \par
\definedfont[RegularBold at 50pt]\setstrut
- \startinterface dutch \strut commando's \par \stopinterface
- \startinterface english \strut commands \par \stopinterface
- \startinterface german \strut befehle \par \stopinterface
- \startinterface french \strut ....... \par \stopinterface
- \startinterface czech \strut prikaz\'y \par \stopinterface
- \startinterface italian \strut comandi \par \stopinterface
- \startinterface romanian \strut comenzile \par \stopinterface
+ \setups[text:commands]
\vfill
\definedfont[RegularBold at 24pt]\setupinterlinespace
- \startinterface dutch \strut nl / nederlands \par \stopinterface
- \startinterface english \strut en / english \par \stopinterface
- \startinterface german \strut de / deutsch \par \stopinterface
- \startinterface french \strut fr / fran\,c ais \par \stopinterface
- \startinterface czech \strut cz / \^cesk\'y \par \stopinterface
- \startinterface italian \strut it / italiano \par \stopinterface
- \startinterface romanian \strut ro / rom\^{a}n\u{a} \par \stopinterface
+ \setups[text:lowercase]
\par \strut \currentdate \par
\stopcolor
\stopmakeup
diff --git a/tex/context/base/xtag-run.tex b/tex/context/base/xtag-run.tex
index 6d1d3078d..face9f0b0 100644
--- a/tex/context/base/xtag-run.tex
+++ b/tex/context/base/xtag-run.tex
@@ -172,7 +172,7 @@
{\def\docommando##1{#1[##1]#2#3\letvalue{\@@XMLshow:##1}\empty}%
\processcommalist[#4]\docommando}
-\gdef\showXMLinh[#1]%
+\gdef\showXMLign[#1]%
{\setXMLshow\defineXMLignore \relax\relax[#1]%
\setXMLshow\defineXMLsingular \relax\relax[#1]}
@@ -305,7 +305,7 @@
\fi}%
\egroup}
-\gdef\showXMLinh#1%
+\gdef\showXMLinh[#1]%
{\doifsomething{#1}
{\bgroup\infofont[%
\dorecurse\XMLdepth
diff --git a/tex/context/bib/bibl-ams.tex b/tex/context/bib/bibl-ams.tex
index 1c5a9fd1c..ddfe927c3 100644
--- a/tex/context/bib/bibl-ams.tex
+++ b/tex/context/bib/bibl-ams.tex
@@ -45,7 +45,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ and },
\c!otherstext={ et al.},
\c!pubsep={, },
diff --git a/tex/context/bib/bibl-apa-de.tex b/tex/context/bib/bibl-apa-de.tex
index 71996926d..8ab1f48ff 100644
--- a/tex/context/bib/bibl-apa-de.tex
+++ b/tex/context/bib/bibl-apa-de.tex
@@ -47,7 +47,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ und },
\c!otherstext={ et al.},
\c!pubsep={, },
diff --git a/tex/context/bib/bibl-apa-fr.tex b/tex/context/bib/bibl-apa-fr.tex
index 68eac13c2..d2a1efb8a 100644
--- a/tex/context/bib/bibl-apa-fr.tex
+++ b/tex/context/bib/bibl-apa-fr.tex
@@ -45,7 +45,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ et },
\c!otherstext={ et al.},
\c!pubsep={, },
diff --git a/tex/context/bib/bibl-apa.tex b/tex/context/bib/bibl-apa.tex
index c3d11911a..8e2e9e842 100644
--- a/tex/context/bib/bibl-apa.tex
+++ b/tex/context/bib/bibl-apa.tex
@@ -45,7 +45,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ and },
\c!otherstext={ et al.},
\c!pubsep={, },
@@ -66,6 +66,7 @@
\c!left={[},
\c!right={]}]
+
\setuppublications[%
\c!sorttype=,
\c!criterium=,
@@ -386,4 +387,4 @@
\insertnote{ }{.}{}%
}
-\protect \ No newline at end of file
+\protect
diff --git a/tex/context/bib/bibl-aps.tex b/tex/context/bib/bibl-aps.tex
index 6d9e8db12..39d3bd7d4 100644
--- a/tex/context/bib/bibl-aps.tex
+++ b/tex/context/bib/bibl-aps.tex
@@ -45,7 +45,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ and },
\c!otherstext={ et al.},
\c!pubsep={, },
diff --git a/tex/context/bib/bibl-num-fr.tex b/tex/context/bib/bibl-num-fr.tex
index ca634a3da..c4271fb7f 100644
--- a/tex/context/bib/bibl-num-fr.tex
+++ b/tex/context/bib/bibl-num-fr.tex
@@ -49,7 +49,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ et },
\c!otherstext={ et al.},
\c!pubsep={, },
diff --git a/tex/context/bib/bibl-num.tex b/tex/context/bib/bibl-num.tex
index ff7cfe7a5..45d527f77 100644
--- a/tex/context/bib/bibl-num.tex
+++ b/tex/context/bib/bibl-num.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=bibl-num,
-%D version=2005.12.31,
+%D version=2006.07.01,
%D title=Numeric bibliography style,
%D subtitle=Publications,
%D author={Taco Hoekwater},
@@ -49,7 +49,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ and },
\c!otherstext={ et al.},
\c!pubsep={, },
@@ -184,7 +184,7 @@
{}%
\insertpublisher
{ }%
- {\insertedition{, }{ edition}{}
+ {\insertedition{, }{ edition}{}%
\insertpubyear{, }{.}{.}}%
{\insertedition{, }{ edition}{}%
\insertpubyear{, }{.}{.}}%
@@ -318,7 +318,7 @@
\insertchap{\unskip, }{ }{ }%
\insertpages
{\unskip, pages~}
- {\insertcity{, }{}{}
+ {\insertcity{, }{}{}%
\insertpubyear{\unskip, }{. }{. }}%
{\unskip
\insertpubyear{\unskip, }{. }{. }}%
diff --git a/tex/context/bib/bibl-ssa.tex b/tex/context/bib/bibl-ssa.tex
index 2e3341328..b93bd1b68 100644
--- a/tex/context/bib/bibl-ssa.tex
+++ b/tex/context/bib/bibl-ssa.tex
@@ -46,7 +46,7 @@
\c!right={)}]
\setupcite
- [key,serial,page,short,type,doi,url]
+ [key,serial,authornum,page,short,type,doi,url]
[\c!andtext={ and },
\c!otherstext={ et al.},
\c!pubsep={, },
diff --git a/tex/context/bib/t-bib.tex b/tex/context/bib/t-bib.tex
index dbb5df612..719991255 100644
--- a/tex/context/bib/t-bib.tex
+++ b/tex/context/bib/t-bib.tex
@@ -1,6 +1,6 @@
%D \module
%D [ file=t-bib,
-%D version=2006.04.11,
+%D version=2006.07.12,
%D title=\CONTEXT\ Publication Module,
%D subtitle=Publications,
%D author=Taco Hoekwater,
@@ -49,6 +49,33 @@
%D \item Destroy interactivity in labels of the publication list (13/03/2006)
%D \item fix multi-cite list compression (11/4/2006)
%D \item fix \type{\getcitedata} (11/4/2006)
+%D \item magic for chapter bibs (18-25/4/2006)
+%D \item language setting (25/4/2006)
+%D \item use \type{\hyphenatedurl} for \type{\inserturl} (25/4/2006)
+%D \item Add \type{\docitation} to \type{\nocite}(26/4/2006)
+%D \item patents can have numbers, added to bst files (26/4/2006)
+%D \item \type{\docitation} needs a \type{\iftrialtypesetting} (27/4/2006)
+%D \item \type{\filllocalpublist}'s loop is bound by definedness, not resolvedness (27/4/2006)
+%D \item \type{\setuppublications[monthconversion=]} added (15/5/2006)
+%D \item use \type{\undefinedreference} instead of bare question marks (15/5/2006)
+%D \item add grouping around \type{\placepublications} commands (16/5/2006)
+%D \item fix a bug in \type{\cite{<item>}} (17/5/2006)
+%D \item support \type{\cite[authornum]} (18/5/2006)
+%D \item make \type{\cite} unexpandable (20/6/2006)
+%D \item allow hyperlinks in author\&year combo's
+%D (cite list compression has to be off) (20/6/2006)
+%D \item fix duplicate labels for per-chapter style (20/6/2006)
+%D \item allow \type{\setupcite[interaction=(start|stop)]}
+%D \item fix the item number in the publication list with 'numbering=yes' (22/6/2006)
+%D \item make the default criterium for \type{\placepublications} be \type{previous} (23/6/2006)
+%D \item fix \type{\normalauthor} and \type{\normalshortauthor} spacing (29/6/2006)
+%D \item do not typeset empty arguments to \type{\typesetapublication} (29/6/2006)
+%D \item add \type{symbol=none} to \type{\setuplist} in unnumbered
+%D mode to prevent typesetting of bare numbers (29/6/2006)
+%D \item remove two incorrect spaces from bibl-num.tex (1/7/2006)
+%D \item reset font styles within \type{\cite}, so that font switches
+%D in \type{left} stay in effect (12/7/2006)
+%D \item guard added against loading bbl files multiple times (13/7/2006)
%D \stopitemize
%D
%D \subject{WISHLIST}
@@ -66,6 +93,7 @@
\definesystemvariable {pv} % PublicationVariable
\definesystemvariable {pb} % PuBlication
+
\definemessageconstant {bib}
\definefileconstant {bibextension} {bbl}
@@ -148,11 +176,11 @@
\stopvariables
+\def\biblistname{pubs} % for compatibility
+
%D how to load the references. There is some new stuff here
%D to support Idris' (incorrect :-)) use of projects
-\def\biblistname{pubs}
-
\let\preloadbiblist\relax
@@ -186,26 +214,24 @@
%
\fi \fi \fi
-\expanded{\definelist[\biblistname]}
+\definelist[pubs]
+\setuplist[pubs][\c!width=]
+
%D The text string for the publication list header
-\setupheadtext[en][\biblistname=References]
-\setupheadtext[nl][\biblistname=Literatuur]
-\setupheadtext[de][\biblistname=Literatur]
-\setupheadtext[it][\biblistname=Bibliografia]
-\setupheadtext[sl][\biblistname=Literatura]
-\setupheadtext[fr][\biblistname=Bibliographie]
+\setupheadtext[en][pubs=References]
+\setupheadtext[nl][pubs=Literatuur]
+\setupheadtext[de][pubs=Literatur]
+\setupheadtext[it][pubs=Bibliografia]
+\setupheadtext[sl][pubs=Literatura]
+\setupheadtext[fr][pubs=Bibliographie]
%D \macros{bibdoif,bibdoifnot,bibdoifelse}
%D
%D Here are a few small helpers that are used a lot
%D in all the typesetting commands
%D (\type{\insert...}) we will encounter later.
-%D
-%D TH: Hans, don't replace these! It is vital that
-%D there is a precisly one level of expansion of
-%D the argument.
\long\def\bibdoifelse#1%
{\@EA\def\@EA\!!stringa\@EA{#1}%
@@ -312,9 +338,10 @@
[\??pb]
[\c!alternative=,#1]%
\doifsomething\@@pbalternative
- {\readsysfile{bibl-\@@pbalternative.tex}
- {\showmessage\m!bib{6}{bibl-\@@pbalternative}\let\@@pbalternative\empty}
- {\showmessage\m!bib{1}{bibl-\@@pbalternative}\let\@@pbalternative\empty}}%
+ {\readsysfile
+ {bibl-\@@pbalternative.tex}
+ {\showmessage\m!bib{6}{bibl-\@@pbalternative}\let\@@pbalternative\empty}
+ {\showmessage\m!bib{1}{bibl-\@@pbalternative}\let\@@pbalternative\empty}}%
\getparameters
[\??pb]
[#1]%
@@ -359,9 +386,11 @@
{\usereferences[#1]\processcommalist[#1]\dousepublications}
\def\dousepublications#1%
- {\readfile{#1.\f!bibextension}
- {\showmessage\m!bib{4}{#1.\f!bibextension}}
- {\showmessage\m!bib{2}{#1.\f!bibextension}}}
+ {\doonlyonce
+ {#1.\f!bibextension}
+ {\readfile{#1.\f!bibextension}
+ {\showmessage\m!bib{4}{#1.\f!bibextension}}
+ {\showmessage\m!bib{2}{#1.\f!bibextension}}}}
%D \macros{setuppublicationlist}
%D
@@ -380,15 +409,14 @@
{\dosingleempty\dosetuppublicationlist}
\def\dosetuppublicationlist[#1]%
- {\getparameters
- [@@pvdata]
- [\c!samplesize={AA99},\c!totalnumber={99},#1]% for sample & totalnumber & firstnamesep etc.
+ {\getparameters[\??pv data][#1]%
\setuplist
- [\biblistname]
- [\c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1]}
+ [pubs]
+ [\c!samplesize={AA99},\c!totalnumber={99},
+ \c!alternative=a,\c!interaction=,\c!pagenumber=\v!no,#1]}
\def\setuppublicationlayout[#1]#2%
- {\setvalue{@@pvdata#1}{#2\unskip}}
+ {\setvalue{\??pv data#1}{#2\unskip}}
%D \macros{bibalternative}
%D
@@ -428,18 +456,27 @@
}}
\def\bibcommandlist
- {arttitle, title, journal, notes, volume, issue, pubname, city,
- country, bibtype, organization, series, thekey, edition, month,
- pubyear, note, annotate, pages, keyword, keywords, comment,
- abstract, names, size, issn, isbn, chapter, eprint, doi,
- howpublished, biburl, lastchecked,
- % ieee
- nationality, assignee, bibnumber, day, dayfiled, monthfiled,
- yearfiled, revision}
+ {abstract, annotate, arttitle, assignee, bibnumber, bibtype, biburl, chapter, city,
+ comment, country, day, dayfiled, doi, edition, eprint, howpublished, isbn, issn,
+ issue, journal, keyword, keywords, lastchecked, month, monthfiled, names, nationality,
+ note, notes, organization, pages, pubname, pubyear, revision, series, size, thekey,
+ title, volume, yearfiled}
\processcommacommand[\bibcommandlist]\simplebibdef
+\def\insertbiburl#1#2#3%
+ {{\bibdoifelse{\@@pb@biburl}%
+ {\edef\ascii{\@EA\detokenize\@EA{\@@pb@biburl}}%
+ #1\@EA\hyphenatedurl\@EA{\ascii}#2}{#3}}}
+
+\def\insertmonth#1#2#3%
+ {\bibdoifelse{\@@pb@month}%
+ {#1\doifnumberelse{\@@pb@month}%
+ {\doifconversiondefinedelse\@@pbmonthconversion
+ {\convertnumber\@@pbmonthconversion{\@@pb@month}}{\@@pb@month}}%
+ {\@@pb@month}#2}{#3}}
+
\let\inserturl \insertbiburl % for backward compat.
\let\inserttype\insertbibtype % for backward compat.
@@ -487,8 +524,6 @@
%D \specialbibinsert{author}{\author@num}{<before>}{<after>}{<not>}
%D \stoptyping
-% hh: use a context counter instead, more options
-
\def\complexbibdef#1%
{\@EA\newcounter\csname #1@num\endcsname
\@EA\def\csname bib@#1\endcsname[##1]##2[##3]##4##5%
@@ -526,7 +561,7 @@
\def\specialbibinsert#1#2#3#4#5%
{\bgroup
\ifnum#2>\zerocount
- \letcscsname\tempa\csname @@pvdata#1\endcsname
+ \letcscsname\tempa\csname \??pv data#1\endcsname
\def\tempb{\@EA\tempa}%
\etallimitcounter =0\bibalternative{#1etallimit}\relax
\etaldisplaycounter=0\bibalternative{#1etaldisplay}\relax
@@ -594,14 +629,14 @@
\def\normalauthor#1#2#3#4#5%
{\bibdoif{#1}{#1\bibalternative\c!firstnamesep}%
\bibdoif{#2}{#2\bibalternative\c!vonsep}%
- #3\bibalternative\c!surnamesep
- \bibdoif{#5}{#5\unskip}}
+ #3%
+ \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
\def\normalshortauthor#1#2#3#4#5%
{\bibdoif{#4}{#4\bibalternative\c!firstnamesep}%
\bibdoif{#2}{#2\bibalternative\c!vonsep}%
- #3\bibalternative\c!surnamesep
- \bibdoif{#5}{#5\unskip}}
+ #3%
+ \bibdoif{#5}{\bibalternative\c!surnamesep#5\unskip}}
\def\invertedauthor#1#2#3#4#5%
{\bibdoif{#2}{#2\bibalternative\c!vonsep}%
@@ -698,68 +733,186 @@
\newif\ifinpublist
-\let\@@pvdatawidth\empty
+% from Hans
+
+\def\ignoresectionconversion
+ {\let\@@sectionconversion\secondoftwoarguments}
+
+\let\normaldosetfilterlevel\dosetfilterlevel
+
+\def\patcheddosetfilterlevel#1#2% beware: this one is \let
+ {\bgroup
+ \ignoresectionconversion
+ \edef\askedlevel{#1}%
+ \edef\askedfilter{#2}%
+% \message{ASKD: \meaning\askedlevel}%
+% \message{PREV: \meaning\v!previous}%
+ \ifx\askedlevel\v!current
+ \dosetcurrentlevel\askedlevel
+ \else\ifx\askedlevel\v!previous
+ \dosetpreviouslevel\askedlevel
+ \else\ifx\askedlevel\v!all
+ \global\chardef\alltoclevels\plusone
+ \else\ifx\askedlevel\v!text
+ \global\chardef\alltoclevels\plusone
+ \else
+ \edef\byaskedlevel{\csname\??by\askedlevel\endcsname}%
+ \ifx\byaskedlevel\v!text
+ \dosettextlevel\askedlevel
+ \else
+ \dosetotherlevel\askedlevel
+ \fi
+ \fi\fi\fi\fi
+ % experiment
+ \ifx\askedfilter\empty \else
+ \xdef\currentlevel{\currentlevel\sectionseparator\askedfilter}%
+ \fi
+ \egroup}
+
+
+\unless\ifcsname currentlocationrefence\endcsname
-\def\preinitializepubslist
- {\let\bibcounter\!!zerocount
+\let\currentlocationreference\empty
+
+\def\dogetreferenceelements#1#2#3#4#5%
+ {\chardef\currentreferencetype=\ifx#1\relax0\else#1\fi\relax
+ \ifnum\currentreferencetype<2
+ \edef\currentpagereference{#2}%
+ \let \currentdatareference\empty
+ \edef\currentlocationreference{#2}%
+ \ifx\currentpagereference \empty
+ \let\currentfolioreference\folio
+ \else
+ \def \currentpagereference {\referencepagenumber[#2]}%
+ \edef\currentfolioreference{\dosplitofffoliopart[#2]}%
+ \fi
+ \edef\currentrealreference{#3}%
+ \settextreferences#4\end
+ \ifnum0#5<\crossreferencenumber
+ \forwardreferencetrue
+ \else
+ \forwardreferencefalse
+ \fi
+ \else
+ \let \currentlocationreference\empty
+ \edef\currentrealreference {#3}%
+ \def \currentdatareference {#2}%
+ \let \currentfolioreference\folio
+ \settextreferences#4\end
+ \forwardreferencefalse
+ \fi
+ \ifodd\currentreferencetype
+ \realreferencepagefalse
+ \else
+ \docheckrealreferencepage\currentrealreference
+ \ifrealreferencepage \else
+ \docheckrealreferencepage\currentdatareference
+ \fi
+ \fi}
+
+\fi
+
+\def\filllocalpublist%
+ {\let\dosetfilterlevel\patcheddosetfilterlevel
+ \dosettoclevel\??li{pubs}%
+ \let\dosetfilterlevel\normaldosetfilterlevel
+ \global\let\glocalpublist\empty
+ \doloop
+ {\doifdefinedelse
+ {\r!cross cite-\jobname-\recurselevel}
+ {\doifreferencefoundelse
+ {cite-\jobname-\recurselevel}
+ {\@EA\doifreglevelelse\@EA[\currentlocationreference]
+ {\@EA\doglobal\@EA\addtocommalist\@EA
+ {\currenttextreference}\glocalpublist}{}}
+ {}}%
+ {\exitloop}}%
+ \let\localpublist\glocalpublist}
+
+%
+\def\typesetpubslist
+ {\dobeginoflist
+ \edef\askedlevel{\csname \??li pubs\c!criterium\endcsname}%
+ \ifx\askedlevel\v!all
+ \def\bibrefprefix{}%
+ \else %
+ \preparebibrefprefix
+ \fi
\ifsortbycite
- \processcommacommand[\publist]\sortwritepublist
- \glet\publist\empty
+ \filllocalpublist
\iftypesetall
- \processcommacommand[\allrefs]\writepublist
+ \let\localallrefs\allrefs
+ \processcommacommand[\localpublist]\typesetapublication
+ \def\removefromallrefs##1%
+ {\removefromcommalist{##1}\localallrefs }%
+ \processcommacommand[\localpublist]\removefromallrefs
+ \processcommacommand[\localallrefs]\typesetapublication
+ \else
+ \processcommacommand[\localpublist]\typesetapublication
\fi
\else
\iftypesetall
- \processcommacommand[\allrefs]\writepublist
+ \processcommacommand[\allrefs]\typesetapublication
\else
- \processcommacommand[\allrefs]\writereferredpublist
+ %
+ \filllocalpublist
+ \processcommacommand[\allrefs]\maybetypesetapublication
\fi
- \fi}
+ \fi
+ \doendoflist }
+
+\newif\ifinpublist
+\def\maybetypesetapublication#1%
+ {\global\inpublistfalse
+ \def\test{#1}%
+ \def\runtest##1%
+ {\def\tempa{##1}\ifx \test\tempa \global\inpublisttrue \fi}%
+ \processcommacommand[\localpublist]\runtest
+ \ifinpublist \typesetapublication{#1}\fi}
\def\initializepubslist
{\edef\@@pbnumbering{\@@pbnumbering}%
\ifautohang
\ifx\@@pbnumbering\v!short
- \setbox\scratchbox\hbox{\@@pbnumbercommand{\csname @@pvdata\c!samplesize\endcsname}}%
+ \setbox\scratchbox\hbox{\@@pbnumbercommand{\getvalue{\??li pubs\c!samplesize}}}%
\else\iftypesetall
- \setbox\scratchbox\hbox{\@@pbnumbercommand{\csname @@pvdata\c!totalnumber\endcsname}}%
+ \setbox\scratchbox\hbox{\@@pbnumbercommand{\getvalue{\??li pubs\c!totalnumber}}}%
\else
\setbox\scratchbox\hbox{\@@pbnumbercommand{\numreferred}}%
\fi\fi
\edef\samplewidth{\the\wd\scratchbox}%
- \setuplist[\biblistname][\c!width=\samplewidth,\c!distance=0pt]%
+ \setuplist[pubs][\c!width=\samplewidth,\c!distance=0pt]%
\def\@@pblimitednumber##1{\hbox to \samplewidth{\@@pbnumbercommand{##1}}}%
\else
\doifemptyelse
- {\@@pvdatawidth}
+ {\getvalue{\??li pubs\c!width}}
{\def\@@pblimitednumber##1{\hbox{\@@pbnumbercommand{##1}}}}%
- {\def\@@pblimitednumber##1{\hbox to \@@pvdatawidth{\@@pbnumbercommand{##1}}}}%
+ {\def\@@pblimitednumber##1{\hbox to \getvalue{\??li pubs\c!width}{\@@pbnumbercommand{##1}}}}%
\fi
\ifx\@@pbnumbering\v!no
- \setuplist[\biblistname][\c!numbercommand=,\c!textcommand=\outdented]
+ \setuplist[pubs][\c!numbercommand=,\c!symbol=\v!none,\c!textcommand=\outdented]
\else
- \setuplist[\biblistname][\c!numbercommand=\@@pblimitednumber]%
+ \setuplist[pubs][\c!numbercommand=\@@pblimitednumber]%
\fi
\forgetall % bugfix 2005/03/18
}
+
\def\outdented#1% move to supp-box ?
{\hskip -\hangindent #1}
+
%D The full list of publications
\def\completepublications
{\dosingleempty\docompletepublications}
\def\docompletepublications[#1]%
- {\preinitializepubslist
- \ifcase\bibcounter\else
- \initializepubslist
- \let\bibcounter\!!zerocount
- \inpublisttrue
- \completelist[\biblistname][\c!criterium=\v!current,#1]%
- \inpublistfalse
- \fi}
+ {%\getparameters[\??pv data][#1]%
+ \begingroup
+ \setuplist[pubs][\c!criterium=\v!previous,#1]
+ \expanded{\systemsuppliedtitle[pubs]{\noexpand\headtext{pubs}}}%
+ \dodoplacepublications }
%D And the portion with the entries only.
@@ -767,49 +920,28 @@
{\dosingleempty\doplacepublications}
\def\doplacepublications[#1]%
- {\preinitializepubslist
- \ifcase\bibcounter\else
- \initializepubslist
- \let\bibcounter\!!zerocount
- \inpublisttrue
- \placelist[\biblistname][\c!criterium=\v!current,#1]%
- \inpublistfalse
- \fi}
-
-\def\dowritebiblist#1#2%
- {\makepbkvalue{#2}%
- \edef\pbnumbercommand{\@@pbinumbercommand{#1}}%
- \@EA\dodowritebiblist\@EA{\pbnumbercommand}{\typesetapublication{#2}}}
-
-\def\dodowritebiblist
- {\writetolist[\biblistname]}
+ {%\getparameters[\??pv data][#1]
+ \begingroup
+ \setuplist[pubs][\c!criterium=\v!previous,#1]
+ \dodoplacepublications }%
-\def\writepublist#1%
- {\doifnotempty{#1}
- {\increment\bibcounter
- \@EA\dowritebiblist\@EA{\bibcounter}{#1}}}
+\def\dodoplacepublications%
+ {\initializepubslist
+ \global\let\bibcounter\!!zerocount
+ \inpublisttrue
+ \typesetpubslist
+ \inpublistfalse
+ \endgroup }
-\def\writereferredpublist#1%
- {\doifnotempty{#1}
- {\doifreferredelse{#1}
- {\increment\bibcounter
- \@EA\dowritebiblist\@EA{\bibcounter}{#1}}{}}}
-
-\def\sortwritepublist#1%
- {\doifnotempty{#1}
- {\removefromcommalist{#1}\allrefs
- \increment\bibcounter
- \@EA\dowritebiblist\@EA{\bibcounter}{#1}}}
%D \subsubject{What's in a publication}
%D
-\unexpanded\def\typesetapublication
- {\doglobal\increment\bibcounter
- \dotypesetapublication}
-
-%D quick hack to make sure stuff isn't typeset twice:
-
+\unexpanded\def\typesetapublication#1%
+ {\doifsomething{#1}{\doglobal\increment\bibcounter
+ \dodolistelement{pubs}{}{\bibcounter}%
+ {\expanded{\reference[\bibrefprefix#1]{\bibcounter}}%
+ \strut \dotypesetapublication{#1}\strut }{}{}}}
\def\dotypesetapublication#1%
{\bgroup
@@ -819,22 +951,10 @@
\processcommalist [artauthor,author,editor]\clearbibitemtwo
\processcommacommand[\bibcommandlist]\bibitemdefs
\processcommalist [artauthor,author,editor,crossref]\bibitemdefs
- \ifinpublist
- \@EA\ifx\csname #1-is-typeset\endcsname \relax
- \setgvalue{#1-is-typeset}{1}%
- \expanded{\reference[#1]{\bibcounter}}%
- \getvalue{pbdd-#1}%
- \strut \ifcsname pbdt-#1\endcsname \bibalternative{\getvalue{pbdt-#1}}\fi\strut
- \else
- \endgraf
- \setbox0=\lastbox \unskip
- \fi
- \else
- \getvalue{pbdd-#1}% execute data
- %\bibalternative{\getvalue{pbdt-#1}}% do typesetting
- \ifcsname pbdt-#1\endcsname \bibalternative{\getvalue{pbdt-#1}}\fi
- \fi
- \egroup}
+ \let\biblanguage\empty
+ \getvalue{pbdd-#1}%
+ \ifcsname pbdt-#1\endcsname \bibalternative{\getvalue{pbdt-#1}}\fi
+ \egroup }
%D An afterthought
@@ -847,7 +967,14 @@
%D This is the result of bibtex's `language' field.
-\def\lang#1{}
+\def\setbiblanguage#1#2{\setvalue{\??pb @lang@#1}{#2}}
+
+\def\lang#1%
+ {\def\biblanguage{#1}%
+ \ifcsname \??pb @lang@#1\endcsname
+ \expanded{\language[\getvalue{\??pb @lang@#1}]}%
+ \fi \ignorespaces}
+
%D \subject{Citations}
@@ -857,7 +984,7 @@
%D \type{\cite} commands with a braced argument (these might appear
%D in included data from the \type{.bib} file).
-\def\cite
+\unexpanded\def\cite
{\doifnextcharelse{[}
{\dodocite}
{\dobibref}}
@@ -873,54 +1000,60 @@
\stopstrictinspectnextcharacter
\docite[#1][#2]}
-\def\docite#1[#2]#3[#4]%
+\def\docite[#1][#2]%
{\begingroup
+ \setupinteraction[\c!style=]%
+ \edef\temp{#2}%
+ \ifx\empty\temp \secondargumentfalse
+ \else \secondargumenttrue \fi
\ifsecondargument
- \doifassignmentelse
- {#2}%
- {\getparameters[LO][\c!alternative=,\c!extras=,#2]%
+ \processcommalist[#2]\docitation
+ \doifassignmentelse
+ {#1}%
+ {\getparameters[LO][\c!alternative=,\c!extras=,#1]%
\edef\@@currentalternative{\LOalternative}%
\ifx\@@currentalternative\empty
\edef\@@currentalternative{\@@citedefault}%
\fi
\ifx\LOextras\empty
- \setupcite[\@@currentalternative][#2]%
+ \setupcite[\@@currentalternative][#1]%
\else
\expandafter\ifx\csname LOright\endcsname \relax
\edef\LOextras{{\LOextras\bibalternative\c!right}}%
\else
\edef\LOextras{{\LOextras\LOright}}%
\fi
- \expanded{\setupcite[\@@currentalternative][#2,\c!right=\LOextras]}%
+ \expanded{\setupcite[\@@currentalternative][#1,\c!right=\LOextras]}%
\fi
}%
- {\def\@@currentalternative{#2}}%
+ {\def\@@currentalternative{#1}}%
\expanded{%
\processaction[\csname @@pv\@@currentalternative compress\endcsname]}
[ \v!yes=>\bibcitecompresstrue,
\v!no=>\bibcitecompressfalse,
\s!default=>\bibcitecompresstrue,
\s!unknown=>\bibcitecompresstrue]%
- \getvalue{bib\@@currentalternative ref}[#4]%
+ \getvalue{bib\@@currentalternative ref}[#2]%
\else
+ \processcommalist[#1]\docitation
\expanded{\processaction[\csname @@pv\@@citedefault compress\endcsname]}
[ \v!yes=>\bibcitecompresstrue,
\v!no=>\bibcitecompressfalse,
\s!default=>\bibcitecompresstrue,
\s!unknown=>\bibcitecompresstrue]%
\edef\@@currentalternative{\@@citedefault}%
- \getvalue{bib\@@citedefault ref}[#2]%
+ \getvalue{bib\@@citedefault ref}[#1]%
\fi
\endgroup}
%D \macros{nocite}
\def\nocite[#1]%
- {\processcommalist[#1]\addthisref}
+ {\processcommalist[#1]\addthisref
+ \processcommalist[#1]\docitation }
%D \macros{setupcite}
-
\def\setupcite{\dodoubleempty\dosetupcite}
\def\dosetupcite[#1][#2]%
@@ -952,6 +1085,17 @@
\processcommalist [artauthor,author,editor,crossref]\bibitemdefs
\getvalue{pbdd-#1}}
+%D This new version writes a reference out to the tui file for every
+%D \type{\cite}. This will allow backlinking
+
+\newcounter\citationnumber
+
+\def\docitation#1{%
+ \iftrialtypesetting \else
+ \doglobal\increment\citationnumber
+ \expanded{\rawreference{}{cite-\jobname-\citationnumber}{#1}}%
+ \fi}
+
%D \macros{numreferred,doifreferredelse,addthisref,publist}
%D
@@ -967,10 +1111,11 @@
\long\def\doifreferredelse#1{\doifdefinedelse{pbr-#1}}
\def\addthisref#1%
- {\doifundefined{pbr-#1}
- {\setgvalue{pbr-#1}{a}%
+ {\doifundefinedelse{pbr-#1}
+ {\setxvalue{pbr-#1}{\citationnumber}%
\doglobal\increment\numreferred
- \appended\gdef\publist{,#1}}}
+ \ifx\publist\empty \gdef\publist{#1}\else\appended\gdef\publist{,#1}\fi}
+ {\setxvalue{pbr-#1}{\getvalue{pbr-#1},\citationnumber}}}
\let\publist\empty
@@ -1009,8 +1154,6 @@
%D
%D In `normal' \TeX, of course there are expansion problems again.
-\def\gobbledef#1{\def#1##1{##1}}
-
\def\ixbibauthoryear#1#2#3#4%
{\bgroup
\gdef\ixlastcommand {#4}%
@@ -1043,7 +1186,7 @@
\edef\wantednumber{\the\scratchcounter}%
\getfromcommacommand[\thebibyears][\wantednumber]%
\@EA\def\@EA\currentbibyear\@EA{\commalistelement}%
- \def\@currentbibauthor{#1}% brr
+ \setcurrentbibauthor{#1}%
\ifnum\scratchcounter=\plusone
\ixfirstcommand
\else\ifnum \scratchcounter=\commalistsize\relax
@@ -1052,23 +1195,25 @@
\ixsecondcommand
\fi\fi}
-\def\currentbibauthor%
- {\getcommacommandsize[\@currentbibauthor]%
+\def\setcurrentbibauthor#1%
+ {\getcommacommandsize[#1]%
\ifcase\commalistsize
% anonymous?
+ \def\currentbibauthor{}%
\or
- \@currentbibauthor
+ \def\currentbibauthor{#1}%
\or
- \expanded{\docurrentbibauthor\@currentbibauthor}%
+ \expanded{\docurrentbibauthor#1}%
\else
% this can't happen/
+ \def\currentbibauthor{}%
\fi }
\def\docurrentbibauthor#1,#2%
{\doifemptyelse{#2}
- {#1\bibalternative{otherstext}}
- {#1\bibalternative{andtext}#2}}
+ {\def\currentbibauthor{#1\bibalternative{otherstext}}}
+ {\def\currentbibauthor{#1\bibalternative{andtext}#2}}}
%D This is not the one Hans made for me, because I need a global
%D edef, and the \type{\robustdoifinsetelse} doesn't listen to
@@ -1164,7 +1309,6 @@
\def\findmatchingyear
{\edef\wantednumber{\the\bibitemwanted}%
-% \message{year needed: \wantednumber (\thebibyears)}%
\getfromcommacommand[\thebibyears][\wantednumber]%
\ifx\commalistelement\empty
\edef\myyear{{\myyear}}%
@@ -1172,46 +1316,156 @@
\edef\myyear{{\commalistelement, \myyear}}%
\fi
\edef\newcommalistelement{\myyear}%
-% \message{bibyears \wantednumber = \newcommalistelement}%
\doglobal\replaceincommalist \thebibyears \wantednumber}
+
+%D \macros{preparebibrefprefix}
+%D
+%D The reference list only writes bare references when the criterium
+%D is `all'. Otherwise, a prefix is added to make sure that pdfTeX
+%D does not encounter duplicate named references. On the generation
+%D side, this is not a big problem. \type{\preparebibrefprefix}
+%D creates a suitable string to prepend if a prefix is needed.
+
+\def\preparebibrefprefix
+ {\let\dosetfilterlevel\patcheddosetfilterlevel
+ \dosettoclevel\??li{pubs}%
+ \let\dosetfilterlevel\normaldosetfilterlevel
+ \edef\bibrefprefix{\@@sectiontype\currentlevel\sectionseparator}}%
+
+%D \macros{preparebibreflist}
+%D
+%D But this optional prefixing is a bit of a problem on the
+%D other side. We would like to do \type{\goto{}[article-full]}
+%D but can't do it like that, because the actual label may be
+%D \type{1:2:0:3:4:article-full]} or so. The problem is solved
+%D by building a commalist that looks like this:
+%D \starttyping
+%D \def\bibreflist%
+%D {1:2:0:3:4:article-full,
+%D 1:2:0:3:article-full,
+%D 1:2:0:article-full,
+%D 1:2:article-full,
+%D 1:article-full,
+%D article-full}
+%D \stoptyping
+
+\def\preparebibreflist#1%
+ {\let\bibreflist\empty
+ \def\storeitem##1%
+ {\ifx\bibreflist\empty
+ \edef\prefix{##1\sectionseparator}%
+ \edef\bibreflist{\prefix#1,#1}%
+ \else
+ \edef\prefix{\prefix##1\sectionseparator}%
+ \edef\bibreflist{\prefix#1,\bibreflist}%
+ \fi}%
+ \expanded{\processseparatedlist[\bibrefprefix][\sectionseparator]}\storeitem }
+
+%D \macros{gotobiblink,inbiblink,atbiblink}
+%D
+%D The final task is looping over that list until a match is found.
+
+\newif\ifbibreffound
+
+\def\gotobiblink#1[#2]%
+ {\bgroup
+ \preparebibrefprefix
+ \preparebibreflist{#2}%
+ \global\bibreffoundfalse
+ \def\setuplink##1%
+ {\ifbibreffound\else
+ \doifreferencefoundelse
+ {##1}
+ {\global\bibreffoundtrue \goto{#1}[##1]}%
+ {}\fi}%
+ \processcommacommand[\bibreflist]\setuplink
+ \ifbibreffound \else \unknownreference{#2}\fi
+ \egroup }
+
+\def\atbiblink[#1]%
+ {\bgroup
+ \preparebibrefprefix
+ \preparebibreflist{#1}%
+ \global\bibreffoundfalse
+ \def\setuplink##1%
+ {\ifbibreffound\else
+ \doifreferencefoundelse
+ {##1}
+ {\global\bibreffoundtrue \at[##1]}%
+ {}\fi}%
+ \processcommacommand[\bibreflist]\setuplink
+ \ifbibreffound \else \unknownreference{#1}\fi
+ \egroup }
+
+\def\inbiblink[#1]%
+ {\bgroup
+ \preparebibrefprefix
+ \preparebibreflist{#1}%
+ \global\bibreffoundfalse
+ \def\setuplink##1%
+ {\ifbibreffound\else
+ \doifreferencefoundelse
+ {##1}
+ {\global\bibreffoundtrue \in[##1]}%
+ {}\fi}%
+ \processcommacommand[\bibreflist]\setuplink
+ \ifbibreffound \else \unknownreference{#1}\fi
+ \egroup }
+
%D \macros{bibauthoryearref,bibauthoryearsref,bibauthorref,bibyearref}
%D
%D Now that all the hard work has been done, these are simple.
%D \type{\ixbibauthoryearref} stores the data in the macros
%D \type{\currentbibauthor} and \type{\currentbibyear}.
+\def\ifbibinteractionelse%
+ {\edef\test{\bibalternative\c!interaction}%
+ \ifx\test\v!stop
+ \expandafter\secondoftwoarguments
+ \else
+ \expandafter\firstoftwoarguments
+ \fi}
+
+\def\bibmaybeinteractive#1#2%
+ {\ifbibcitecompress #2\else
+ \ifbibinteractionelse{\gotobiblink{#2}[#1]}{#2}\fi }
+
\def\bibauthoryearref[#1]%
{\ixbibauthoryear{#1}%
- {{\currentbibauthor}\bibalternative\c!inbetween
- \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}
- {\bibalternative\c!pubsep{\currentbibauthor}\bibalternative\c!inbetween
- \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}
- {\bibalternative\c!lastpubsep{\currentbibauthor}\bibalternative\c!inbetween
- \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}
+ {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+ \bibalternative\v!left{\currentbibyear}\bibalternative\v!right}}
+ {\bibalternative\c!pubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+ \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}
+ {\bibalternative\c!lastpubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween
+ \bibalternative\v!left {\currentbibyear}\bibalternative\v!right}}}
\def\bibauthoryearsref[#1]%
{\bibalternative\v!left
\ixbibauthoryear{#1}
- {{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}
- {\bibalternative\c!pubsep {\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}%
- {\bibalternative\c!lastpubsep{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}%
+ {\bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
+ {\bibalternative\c!pubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}
+ {\bibalternative\c!lastpubsep
+ \bibmaybeinteractive{#1}{{\currentbibauthor}\bibalternative\c!inbetween{\currentbibyear}}}%
\bibalternative\v!right}
\def\bibauthorref[#1]%
{\bibalternative\v!left
\ixbibauthoryear{#1}%
- {{\currentbibauthor}}
- {\bibalternative\c!pubsep {\currentbibauthor}}
- {\bibalternative\c!lastpubsep{\currentbibauthor}}%
+ {\bibmaybeinteractive{#1}{{\currentbibauthor}}}
+ {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibauthor}}}
+ {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibauthor}}}%
\bibalternative\v!right}
\def\bibyearref[#1]%
{\bibalternative\v!left
\ixbibauthoryear{#1}%
- {{\currentbibyear}}
- {\bibalternative\c!pubsep {\currentbibyear}}
- {\bibalternative\c!lastpubsep{\currentbibyear}}%
+ {\bibmaybeinteractive{#1}{{\currentbibyear}}}
+ {\bibalternative\c!pubsep \bibmaybeinteractive{#1}{{\currentbibyear}}}
+ {\bibalternative\c!lastpubsep\bibmaybeinteractive{#1}{{\currentbibyear}}}%
\bibalternative\v!right}
%D ML problems:
@@ -1234,7 +1488,8 @@
\def\dobibshortref#1%
{\addthisref{#1}\refsep
- \doifbibreferencefoundelse{#1}{\goto{\getvalue{pbds-#1}}[#1]}{??}}
+ \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbds-#1}}[#1]}
+ {\unknownreference{#1}}}
\def\bibserialref[#1]%
@@ -1244,7 +1499,8 @@
\def\dobibserialref#1%
{\addthisref{#1}\refsep
- \doifbibreferencefoundelse{#1}{\getvalue{pbdn-#1}}{??}}
+ \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbdn-#1}}[#1]}
+ {\unknownreference{#1}}}
\def\bibkeyref[#1]%
{\bibalternative\v!left
@@ -1252,9 +1508,12 @@
\bibalternative\v!right}
\def\dobibkeyref#1%
- {\addthisref{#1}\refsep#1}
+ {\addthisref{#1}\refsep\gotobiblink{#1}[#1]}
-\def\gotoDOI#1#2{\useURL[bibfoo#1][http://dx.doi.org/#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
+\def\gotoDOI#1#2%
+ {\ifbibinteractionelse
+ {\useURL[bibfoo#1][http://dx.doi.org/#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
+ {\hyphenatedurl{#2}}}
\def\bibdoiref[#1]%
{\bibalternative\v!left
@@ -1263,7 +1522,8 @@
\def\dobibdoiref#1%
{\addthisref{#1}\refsep
- \doifbibreferencefoundelse{#1}{\expanded{\gotoDOI{#1}{\getvalue{pbdo-#1}}}}{??}}
+ \doifbibreferencefoundelse{#1}{\expanded{\gotoDOI{#1}{\getvalue{pbdo-#1}}}}
+ {\unknownreference{#1}}}
\def\biburlref[#1]%
@@ -1271,11 +1531,15 @@
\firstreftrue\processcommalist[#1]\dobiburlref
\bibalternative\v!right}
-\def\gotoURL#1#2{\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
+\def\gotoURL#1#2%
+ {\ifbibinteractionelse
+ {\useURL[bibfoo#1][#2]\goto{\url[bibfoo#1]}[url(bibfoo#1)]}
+ {\hyphenatedurl{#2}}}
\def\dobiburlref#1%
{\addthisref{#1}\refsep
- \doifbibreferencefoundelse{#1}{\expanded{\gotoURL{#1}{\getvalue{pbdu-#1}}}}{??}}
+ \doifbibreferencefoundelse{#1}{\expanded{\gotoURL{#1}{\getvalue{pbdu-#1}}}}
+ {\unknownreference{#1}}}
\def\bibtyperef[#1]%
{\bibalternative\v!left
@@ -1284,7 +1548,8 @@
\def\dobibtyperef#1%
{\addthisref{#1}\refsep
- \doifbibreferencefoundelse{#1}{\getvalue{pbdt-#1}}{??}}
+ \doifbibreferencefoundelse{#1}{\gotobiblink{\getvalue{pbdt-#1}}[#1]}
+ {\unknownreference{#1}}}
\def\bibpageref[#1]%
{\bibalternative\v!left
@@ -1292,7 +1557,8 @@
\bibalternative\v!right}
\def\dobibpageref#1%
- {\addthisref{#1}\refsep\at[#1]}
+ {\addthisref{#1}\refsep
+ \ifbibinteractionelse{\atbiblink[#1]}{{\referencingfalse\at[#1]}}}
\def\bibdataref[#1]%
{\bibalternative\v!left
@@ -1301,7 +1567,8 @@
\def\dobibdata#1%
{\addthisref{#1}\refsep
- \doifbibreferencefoundelse{#1}{\dotypesetapublication{#1}}{??}}
+ \doifbibreferencefoundelse{#1}{\dotypesetapublication{#1}}
+ {\unknownreference{#1}}}
\let\bibnoneref\nocite
@@ -1345,22 +1612,41 @@
\fi
\bibalternative\v!right}
-\def\dosimplebibnumref #1{\refsep\in[#1]}
+\def\dosimplebibnumref #1%
+ {\refsep\ifbibinteractionelse{\inbiblink[#1]}{{\referencingfalse\in[#1]}}}
+
\def\verysimplebibnumref#1{\doverysimplebibnumref#1}
\def\doverysimplebibnumref#1#2%
{\refsep
- \ifcase#1\relax ??\else
+ \ifcase#1\relax \unknownreference{#1}\else
\def\tempa{#2}\ifx\empty\tempa#1\else#1\bibalternative\c!inbetween#2\fi
\fi}
-%D And some defaults are loaded from bibl-apa:
+%D By request from Sanjoy. This makes it easier to implement
+%D \type{\citeasnoun}.
+
+\def\bibauthornumref[#1]%
+ {\getcommalistsize[#1]
+ \global\bibitemcounter\commalistsize
+ \firstreftrue
+ \processcommalist[#1]\dobibauthornumref }
-% hh: shouldn't those bibl files be made international ?
+\def\dobibauthornumref#1%
+ {\addthisref{#1}\refsep
+ \doifbibreferencefoundelse{#1}
+ {\getvalue{pbda-#1}%
+ \bibalternative\c!inbetween
+ \bibalternative\v!left
+ \ifbibinteractionelse{\inbiblink[#1]}{{\referencingfalse\in[#1]}}%
+ \bibalternative\v!right}
+ {\unknownreference{#1}}}
+
+%D And some defaults are loaded from bibl-apa:
\setuppublications
- [\c!alternative=apa]
+ [\v!month\v!conversion=,\c!alternative=apa]
\preloadbiblist
-\protect \endinput
+\protect \endinput \ No newline at end of file
diff --git a/tex/context/bib/t-bibltx.tex b/tex/context/bib/t-bibltx.tex
new file mode 100644
index 000000000..cb9e787ad
--- /dev/null
+++ b/tex/context/bib/t-bibltx.tex
@@ -0,0 +1,75 @@
+%D \module
+%D [ file=t-bibltx,
+%D version=2005.01.04,
+%D title=\CONTEXT\ Publication Module,
+%D subtitle=Publications,
+%D author={Taco Hoekwater},
+%D date=\currentdate,
+%D copyright={Public Domain}]
+%C
+%C Donated to the public domain.
+
+%D \macros{newcommand}
+%D
+%D Just about all databases define something that uses
+%D \type {\newcommand}. This fake version does not cover
+%D everything \type {\newcommand} does, but it should be
+%D enough for simple definitions like the ones found in
+%D \BIBTEX\ files.
+
+\unprotect
+
+\def\@star@or@long#1%
+ {\doifnextcharelse*{\afterassignment#1\let\next=}{#1}}
+
+\def\newcommand
+ {\@star@or@long\new@command}
+
+\def\new@command#1%
+ {\@testopt{\@newcommand#1}0}
+
+\def\@newcommand#1[#2]%
+ {\doifnextcharelse[{\@xargdef#1[#2]}{\@argdef#1[#2]}}
+
+\long\def\@argdef#1[#2]#3%
+ {\@yargdef#1\@ne{#2}{#3}}
+
+\long\def\@xargdef#1[#2][#3]#4%
+ {\@EA\def\@EA#1\@EA{\@EA\do@testopt\@EA#1\csname\string#1\endcsname{#3}}%
+ \@EA\@yargdef\csname\string#1\endcsname\tw@{#2}{#4}}
+
+\def\@testopt#1#2%
+ {\doifnextcharelse[{#1}{#1[#2]}}
+
+\def\do@testopt#1%
+ {\expandafter\@testopt}
+
+\long\def\@yargdef#1#2#3%
+ {\!!counta#3\relax
+ \advance \!!counta \@ne
+ \let\@hash@\relax
+ \edef\!!tempa{\ifx#2\tw@ [\@hash@1]\fi}%
+ \!!countb #2%
+ \loop
+ \ifnum\!!countb <\!!counta
+ \edef\!!tempa{\!!tempa\@hash@\the\!!countb}%
+ \advance\!!countb \@ne
+ \repeat
+ \let\@hash@##%
+ \long\@EA\def\@EA#1\!!tempa}
+
+\long\def\@reargdef#1[#2]%
+ {\@yargdef#1\@ne{#2}}
+
+%D Something like the following is needed to support the
+%D average \LATEX-based \BIBTEX\ databases.
+%D
+%D \starttyping
+%D \let\textsc\kap
+%D \def\emph#1{{\em#1}}
+%D \let\sf\ss
+%D \stoptyping
+%D
+%D But we happily leave that to the user.
+
+\protect \endinput
diff --git a/tex/context/interface/cont-cz.xml b/tex/context/interface/cont-cz.xml
index ce881ea6d..4d2b4fb34 100644
--- a/tex/context/interface/cont-cz.xml
+++ b/tex/context/interface/cont-cz.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="lokalne"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autosirka">
+ <cd:constant type="ano"/>
+ <cd:constant type="ne"/>
+ <cd:constant type="sila"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="zadny"/>
<cd:constant type="prekryv"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="oddelovac">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="konverze">
+ <cd:constant type="cisla"/>
+ <cd:constant type="pismena"/>
+ <cd:constant type="Pismena"/>
+ <cd:constant type="rimskecislice"/>
+ <cd:constant type="Rimskecislice"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/cont-de.xml b/tex/context/interface/cont-de.xml
index 0859070b7..a316ab0a6 100644
--- a/tex/context/interface/cont-de.xml
+++ b/tex/context/interface/cont-de.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="lokal"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autobreite">
+ <cd:constant type="ja"/>
+ <cd:constant type="nein"/>
+ <cd:constant type="zwinge"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="kein"/>
<cd:constant type="overlay"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="seperator">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="konversion">
+ <cd:constant type="ziffern"/>
+ <cd:constant type="buchstaben"/>
+ <cd:constant type="Buchstaben"/>
+ <cd:constant type="roemischezahlen"/>
+ <cd:constant type="Roemischezahlen"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/cont-en.xml b/tex/context/interface/cont-en.xml
index f118229aa..2b39cefa2 100644
--- a/tex/context/interface/cont-en.xml
+++ b/tex/context/interface/cont-en.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="local"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autowidth">
+ <cd:constant type="yes"/>
+ <cd:constant type="no"/>
+ <cd:constant type="force"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="none"/>
<cd:constant type="overlay"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="separator">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="numbers"/>
+ <cd:constant type="characters"/>
+ <cd:constant type="Characters"/>
+ <cd:constant type="romannumerals"/>
+ <cd:constant type="Romannumerals"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/cont-fr.xml b/tex/context/interface/cont-fr.xml
index 7e9ad66a9..115df8b2a 100644
--- a/tex/context/interface/cont-fr.xml
+++ b/tex/context/interface/cont-fr.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="local"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autolargeur">
+ <cd:constant type="oui"/>
+ <cd:constant type="non"/>
+ <cd:constant type="force"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="rien"/>
<cd:constant type="revetement"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="separateur">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="conversion">
+ <cd:constant type="numeros"/>
+ <cd:constant type="caracteres"/>
+ <cd:constant type="Caracteres"/>
+ <cd:constant type="chiffresromains"/>
+ <cd:constant type="Chiffresromains"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/cont-it.xml b/tex/context/interface/cont-it.xml
index 480b6098a..0a3ba26cc 100644
--- a/tex/context/interface/cont-it.xml
+++ b/tex/context/interface/cont-it.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="locale"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autoampiezza">
+ <cd:constant type="si"/>
+ <cd:constant type="no"/>
+ <cd:constant type="forza"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="nessuno"/>
<cd:constant type="sovrapponi"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="separatore">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="conversione">
+ <cd:constant type="numeri"/>
+ <cd:constant type="lettere"/>
+ <cd:constant type="Lettere"/>
+ <cd:constant type="numeriromani"/>
+ <cd:constant type="Numeriromani"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/cont-nl.xml b/tex/context/interface/cont-nl.xml
index e74915152..92e6899b9 100644
--- a/tex/context/interface/cont-nl.xml
+++ b/tex/context/interface/cont-nl.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="lokaal"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autobreedte">
+ <cd:constant type="ja"/>
+ <cd:constant type="nee"/>
+ <cd:constant type="forceer"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="geen"/>
<cd:constant type="overlay"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="scheider">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="conversie">
+ <cd:constant type="cijfers"/>
+ <cd:constant type="letters"/>
+ <cd:constant type="Letters"/>
+ <cd:constant type="romeins"/>
+ <cd:constant type="Romeins"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/cont-ro.xml b/tex/context/interface/cont-ro.xml
index 5a69366bb..967d0a9e9 100644
--- a/tex/context/interface/cont-ro.xml
+++ b/tex/context/interface/cont-ro.xml
@@ -1615,6 +1615,11 @@
<cd:constant type="local"/>
<cd:constant type="cd:dimension"/>
</cd:parameter>
+ <cd:parameter name="autolatime">
+ <cd:constant type="da"/>
+ <cd:constant type="nu"/>
+ <cd:constant type="fortat"/>
+ </cd:parameter>
<cd:parameter name="offset">
<cd:constant type="niciunul"/>
<cd:constant type="overlay"/>
@@ -5247,6 +5252,14 @@
<cd:parameter name="separator">
<cd:constant type="cd:text"/>
</cd:parameter>
+ <cd:parameter name="conversie">
+ <cd:constant type="numere"/>
+ <cd:constant type="caractere"/>
+ <cd:constant type="Caractere"/>
+ <cd:constant type="numereromane"/>
+ <cd:constant type="Numereromane"/>
+ <cd:constant type="cd:text"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
diff --git a/tex/context/interface/keys-cz.xml b/tex/context/interface/keys-cz.xml
index a4b077bae..5f31bdce3 100644
--- a/tex/context/interface/keys-cz.xml
+++ b/tex/context/interface/keys-cz.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="cz" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="cz" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="jedna"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="offsetvrsku"/>
<cd:constant name="topstate" value="statusvrsku"/>
<cd:constant name="width" value="sirka"/>
+ <cd:constant name="autowidth" value="autosirka"/>
<cd:constant name="maxwidth" value="maxsirka"/>
<cd:constant name="minwidth" value="minsirka"/>
<cd:constant name="source" value="zdroj"/>
diff --git a/tex/context/interface/keys-de.xml b/tex/context/interface/keys-de.xml
index 8e9d30ff2..0c2b50ec2 100644
--- a/tex/context/interface/keys-de.xml
+++ b/tex/context/interface/keys-de.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="de" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="de" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="eins"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="obenoffset"/>
<cd:constant name="topstate" value="statusoben"/>
<cd:constant name="width" value="breite"/>
+ <cd:constant name="autowidth" value="autobreite"/>
<cd:constant name="maxwidth" value="maxbreite"/>
<cd:constant name="minwidth" value="minbreite"/>
<cd:constant name="source" value="quelle"/>
diff --git a/tex/context/interface/keys-en.xml b/tex/context/interface/keys-en.xml
index 0fe262c0e..155e84be6 100644
--- a/tex/context/interface/keys-en.xml
+++ b/tex/context/interface/keys-en.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="en" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="one"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="topoffset"/>
<cd:constant name="topstate" value="topstate"/>
<cd:constant name="width" value="width"/>
+ <cd:constant name="autowidth" value="autowidth"/>
<cd:constant name="maxwidth" value="maxwidth"/>
<cd:constant name="minwidth" value="minwidth"/>
<cd:constant name="source" value="source"/>
diff --git a/tex/context/interface/keys-fr.xml b/tex/context/interface/keys-fr.xml
index f8156e14e..5c590c261 100644
--- a/tex/context/interface/keys-fr.xml
+++ b/tex/context/interface/keys-fr.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="fr" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="fr" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="un"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="decalagesup"/>
<cd:constant name="topstate" value="etatsup"/>
<cd:constant name="width" value="largeur"/>
+ <cd:constant name="autowidth" value="autolargeur"/>
<cd:constant name="maxwidth" value="largeurmax"/>
<cd:constant name="minwidth" value="largeurmin"/>
<cd:constant name="source" value="origine"/>
diff --git a/tex/context/interface/keys-it.xml b/tex/context/interface/keys-it.xml
index 6e281b78a..0c1c4c367 100644
--- a/tex/context/interface/keys-it.xml
+++ b/tex/context/interface/keys-it.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="it" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="it" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="uno"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="offsetcima"/>
<cd:constant name="topstate" value="statocima"/>
<cd:constant name="width" value="ampiezza"/>
+ <cd:constant name="autowidth" value="autoampiezza"/>
<cd:constant name="maxwidth" value="ampiezzamax"/>
<cd:constant name="minwidth" value="ampiezzamin"/>
<cd:constant name="source" value="origine"/>
diff --git a/tex/context/interface/keys-nl.xml b/tex/context/interface/keys-nl.xml
index f780a39d2..9a119e474 100644
--- a/tex/context/interface/keys-nl.xml
+++ b/tex/context/interface/keys-nl.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="nl" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="nl" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="een"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="bovenoffset"/>
<cd:constant name="topstate" value="bovenstatus"/>
<cd:constant name="width" value="breedte"/>
+ <cd:constant name="autowidth" value="autobreedte"/>
<cd:constant name="maxwidth" value="maxbreedte"/>
<cd:constant name="minwidth" value="minbreedte"/>
<cd:constant name="source" value="bron"/>
diff --git a/tex/context/interface/keys-ro.xml b/tex/context/interface/keys-ro.xml
index a1d740f38..98f5bc8ac 100644
--- a/tex/context/interface/keys-ro.xml
+++ b/tex/context/interface/keys-ro.xml
@@ -1,6 +1,6 @@
<?xml version="1.0"?>
-<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="ro" version="2006.06.09 13:05">
+<cd:interface xmlns:cd="http://www.pragma-ade.com/commands" name="context" language="ro" version="2006.07.13 22:26">
<cd:variables>
<cd:variable name="one" value="unu"/>
@@ -183,6 +183,7 @@
<cd:constant name="topoffset" value="offsetsus"/>
<cd:constant name="topstate" value="staresus"/>
<cd:constant name="width" value="latime"/>
+ <cd:constant name="autowidth" value="autolatime"/>
<cd:constant name="maxwidth" value="latimemaxima"/>
<cd:constant name="minwidth" value="latimeminima"/>
<cd:constant name="source" value="sursa"/>
diff --git a/tex/context/interface/t-bib.xml b/tex/context/interface/t-bib.xml
index 526e2fdf6..02af330a0 100644
--- a/tex/context/interface/t-bib.xml
+++ b/tex/context/interface/t-bib.xml
@@ -22,6 +22,7 @@
</cd:parameter>
<cd:parameter name="refcommand">
<cd:constant type="author"/>
+ <cd:constant type="authornum"/>
<cd:constant type="authoryear"/>
<cd:constant type="authoryears" default="yes"/>
<cd:constant type="key"/>
@@ -53,6 +54,9 @@
<cd:constant type="yes"/>
<cd:constant type="no" default="yes"/>
</cd:parameter>
+ <cd:parameter name="monthconversion">
+ <cd:constant type="cd:command"/>
+ </cd:parameter>
</cd:assignments>
</cd:arguments>
</cd:command>
@@ -330,6 +334,15 @@
</cd:arguments>
</cd:command>
+<cd:command name="nocite" file="t-bib.tex">
+ <cd:sequence>
+ <cd:string value="nocite"/>
+ </cd:sequence>
+ <cd:arguments>
+ <cd:reference list="yes"/>
+ </cd:arguments>
+</cd:command>
+
<cd:command name="citealt" file="t-bib.tex">
<cd:sequence>
<cd:string value="cite"/>