From 70b6b86404ca9e9de782a577d1dfda3b15f0544d Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 26 Sep 2003 00:00:00 +0200 Subject: stable 2003.09.26 --- tex/context/base/cont-new.tex | 352 +---------- tex/context/base/context.tex | 172 +++--- tex/context/base/core-fig.tex | 36 +- tex/context/base/core-job.tex | 46 -- tex/context/base/core-ltb.tex | 304 ++++----- tex/context/base/core-mis.tex | 3 +- tex/context/base/core-new.tex | 115 +++- tex/context/base/core-ntb.tex | 106 +++- tex/context/base/core-obj.tex | 124 ++-- tex/context/base/core-spa.tex | 84 ++- tex/context/base/lang-ini.tex | 71 ++- tex/context/base/mult-con.tex | 3 + tex/context/base/mult-sys.tex | 1 + tex/context/base/page-ini.tex | 345 ++++++----- tex/context/base/page-lay.tex | 6 +- tex/context/base/page-lyr.tex | 193 +++--- tex/context/base/page-num.tex | 50 +- tex/context/base/page-one.tex | 37 +- tex/context/base/page-set.tex | 39 +- tex/context/base/s-pre-09.tex | 228 +++---- tex/context/base/s-pre-10.tex | 26 +- tex/context/base/supp-lan.tex | 30 +- tex/context/base/syst-ext.tex | 1361 +++++++++++++++++++++-------------------- tex/context/base/xtag-ini.tex | 560 ++++++++--------- 24 files changed, 2192 insertions(+), 2100 deletions(-) diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 35a2aae12..6b78510a6 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -17,101 +17,9 @@ \unprotect -\newbox\nestednextbox \prependtoks \let\nextbox\nestednextbox \to \everybeforepagebody +\writestatus{\m!systems}{beware: some patches loaded from cont-new.tex!} -\def\dostartcolumnsetspan[#1][#2][#3]% [#3] gobbles space - {\endgraf % else rubish output if forgotten - \vskip \zeropoint % make sure otr is done, otherwise last line problems - \bgroup - \forgetall - \ifnum\columnsetlevel>\zerocount\else - % of course we needed a one-column fall back for tm - \columnsetspanhsize\hsize - \nofcolumns\plusone - \mofcolumns\plusone - \fi - \setupframedtexts[cs:#1] - [\c!breedte=\columnsetspanhsize, - \c!regelcorrectie=\v!uit, - \c!dieptecorrectie=\v!uit, - #2]% - % determine widths - \!!countc\framedtextparameter{cs:#1}\c!n - % \!!countd\numexpr(\nofcolumns-\mofcolumns+\plusone)% - \!!countd\nofcolumns - % n <= n of columns - \ifnum\!!countc>\!!countd \!!countc\!!countd \fi - \advance\!!countd -\mofcolumns - \advance\!!countd \plusone - % n <= n of available columns (alternative a) - \doif{\framedtextparameter{cs:#1}\c!variant}\v!a - {\ifnum\!!countc>\!!countd \!!countc\!!countd \fi}% - % here it all starts - \setcolumnsetspanhsize\mofcolumns\!!countc % a/b used - \hsize\columnsetspanhsize - \setbox\scratchbox\vbox\bgroup - \dostartframedtext[cs:#1][\v!geen]% geen nils placement - \vskip-\struttotal\par\verticalstrut\par - \ifnum\columnsetlevel>\zerocount - \framedtextparameter{cs:#1}\c!voor - \fi - \def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}} - -\def\dostopcolumnsetspan#1% - {\par - \verticalstrut - \kern-2\struttotal - \verticalstrut - \ifnum\columnsetlevel>\zerocount - \doifsomething{\framedtextparameter{cs:#1}\c!na} - {\framedtextparameter{cs:#1}\c!na - \kern\zeropoint}% otherwise blanks disappear, better be a switch - \else - \endgraf - \fi - \dostopframedtext - \egroup - % frozen keeps grid snapping okay - \setbox\scratchbox\frozenhbox to \hsize - {\dontcomplain - \alignedline{\framedtextparameter{cs:#1}\c!plaats}\v!midden - {\lower\strutdepth\box\scratchbox}}% - \dp\scratchbox\zeropoint % else wrong snap insidefloat -% -% to be tested first: -% -% \setbox\scratchbox\frozenhbox to \hsize -% {\dontcomplain -% \chardef\alignstrutmode\zerocount -% \alignedline{\framedtextparameter{cs:#1}\c!plaats}\v!midden -% {\box\scratchbox}}% -% - \ifinsidefloat - \box\scratchbox - \else\ifnum\columnsetlevel>\zerocount - % we only set \columnsetspacing when asked for, else bottom problems - % don't change this any more (test naw) - \chardef\columnslotspacing\framedtextparameter{cs:#1}\c!nregels\relax - % todo: nboven/onder & \chardef\columnslotlocation2 - %\OTRSETstoreincolumnslotHERE\scratchbox - \edef\floatmethod{\framedtextparameter{cs:#1}\c!default}% - \@EA\uppercasestring\floatmethod\to\floatmethod - % todo : \v!hier -> here enzovoorts - \OTRSETstoreincolumnslot\floatmethod\scratchbox - % watch out: no \dochecknextindentation{tag} - \checknextindentation[\framedtextparameter{cs:#1}\c!springvolgendein] - \else - % of course we needed a one-column fall back for tm; brrr, the box has now too - % much height (try \ruledvbox); don't change this without testing techniek - \scratchdimen\ht\scratchbox - \advance\scratchdimen-\strutdp - \ht\scratchbox\scratchdimen - \framedtextparameter{cs:#1}\c!voor - \snaptogrid\vbox{\box\scratchbox}% - \framedtextparameter{cs:#1}\c!na - \fi\fi - \egroup - \endgraf} +\def\showsetupsdefinition[#1]{\showvalue{\??su:#1}} % will be a MyWay % @@ -150,84 +58,6 @@ % \input ward % % \stoptext - -\let\@@efgrid\empty - -\def\dosetdimensionfiguresize#1#2#3% - {#1\relax - \doifsomething\@@efmaxbreedte - {\ifdim\figwid>\@@efmaxbreedte\global\figwid\@@efmaxbreedte#2\relax\fi}% - \doifsomething\@@efmaxhoogte - {\ifdim\fighei>\@@efmaxhoogte \global\fighei\@@efmaxhoogte #3\relax\fi}% - \processaction - [\@@efgrid] - [ \v!ja=>\getnoflines\fighei - \global\fighei\noflines\lineheight, - \v!hoogte=>\getrawnoflines\fighei - \global\fighei\noflines\lineheight - \global\advance\fighei\strutdepth, - \v!passend=>\getrawnoflines\fighei - \global\fighei\noflines\lineheight]} - -\def\splittblbox#1% #1 <> 0/2 - {\ifinsidefloat - \unvbox#1% - \else - % spacing between rows gets lost in split - \setbox4\vbox - {\doifsomething\tbltbltussenwit{\blank[\tbltbltussenwit]}}% - \setbox2\vbox - {}% - \dorecurse\noftblheadlines - {\setbox0\vsplit#1 to \lineheight - \setbox2\vbox{\unvcopy2\unvcopy0}}% - \ifcase\noftblheadlines\else\unvcopy2\fi - \donefalse - \doloop - {\setbox0\vsplit#1 to \lineheight - \ifdim\pagegoal<\maxdimen - \setbox0\vbox{\unvbox0}% - \dimen0\ht0 - \advance\dimen0\ht4 - \advance\dimen0\pagetotal - \ifdim\dimen0>\pagegoal - \bgroup \pagina \egroup % make sure that local vars are kept - \ifcase\noftblheadlines\else\unvcopy2\fi - \fi - \fi - \ifdone - \doifsomething\tbltbltussenwit{\blank[\tbltbltussenwit]}% - \fi - \unvbox0 - %\allowbreak - \bgroup - \scratchcounter\recurselevel - \advance\scratchcounter\noftblheadlines - \setupTBLcell{\number\scratchcounter}1 - \ifx\@@tblsplitafter\relax - \allowbreak - \else - \doifelsenothing\@@tblsplitafter - \allowbreak - {\scratchcounter\realpageno - \@@tblsplitafter - \ifnum\scratchcounter<\realpageno - \ifcase\noftblheadlines\else\unvcopy2\fi - \fi}% - \fi - \egroup - \ifvoid#1 \exitloop \else \donetrue \fi}% - \fi} - -% \bTABLE[split=repeat] -% \bTABLEhead -% \bTR \bTH lxxxeft \eTH\bTD right \eTD\eTR -% \eTABLEhead -% \bTABLEbody -% \dorecurse{100}{\bTR[after={\pagina[bigpreference]}] \bTD left \eTD\bTD right \eTD\eTR} -% \dorecurse{100}{\bTR\bTD left \eTD\bTD right \eTD\eTR} -% \eTABLEbody -% \eTABLE % new, continuous blocks, \som \par \startdoorlopendblok ... @@ -245,19 +75,19 @@ \setbox\nextbox\hbox{\lower\scratchdimen\box\nextbox}% \ht\nextbox\strutheight \dp\nextbox\strutdepth -\setbox\nextbox\vbox - {\indent\box\nextbox - \endgraf - \nobreak - \advance\noflines\minusone - \dorecurse\noflines{\crlf\nobreak}}% -\verticalstrut -\endgraf -\nobreak -\offinterlineskip -\kern-2\lineheight -\nobreak -\unvbox\nextbox + \setbox\nextbox\vbox + {\indent\box\nextbox + \endgraf + \nobreak + \advance\noflines\minusone + \dorecurse\noflines{\crlf\nobreak}}% + \verticalstrut + \endgraf + \nobreak + \offinterlineskip + \kern-2\lineheight + \nobreak + \unvbox\nextbox \prevdepth\strutdepth % evt (eerst testen) een signal zodat een direct volgend blok goed gaat) \egroup} @@ -268,74 +98,12 @@ \def\stopdoorlopendblok {\egroup} -\def\disablelanguagespecifics{\def\installcompoundcharacter##1 ##2{}} - -\appendtoks - \disablelanguagespecifics -\to \everyenableXML - -\installoutput\discardpage - {\setbox\scratchbox\box\normalpagebox} - -\unexpanded\def\referencepagenumber[#1]% - {\doifelsenothing{#1}{?}% \prepare had got lost - {\preparepaginaprefix\??rf\paginaprefix\??rf[#1]\translatednumber[#1]}} - \def\defineXMLstore {\doquadrupleargument\dodefineXMLstore[\saveXMLasdata]} \def\defineXMLgstore{\doquadrupleargument\dodefineXMLstore[\gsaveXMLasdata]} \def\dodefineXMLstore[#1][#2][#3][#4]% element attribute prefix % will become faster {\defineXMLargument[#2][#3=\s!dummy]{#1{#4:\XMLop{#3}}}} -\def\OTRONEsometopsfloat[#1]% - {\ifdim\topinserted=\zeropoint - \topofinserttrue - \else - \topofinsertfalse - \fi - \global\advance\topinserted \ht\floatbox - \global\advance\topinserted \dp\floatbox - \global\advance\topinserted \floatbottomskip - \insert\topins - {\forgetall - \iftopofinsert - \topskipcorrection % [xx] new: see icare topbleed - \kern-\lineskip\par\prevdepth\maxdimen - \else - %\blanko[-\@@bknawit,\@@bkvoorwit]% inserts can't look back - \betweenfloatblanko - \fi - \flushfloatbox - \blanko[\@@bknawit]}% - \doinsertfloatinfo} - -\def\OTRONEdotopinsertions - {\ifvoid\topins\else - \ifgridsnapping - \box\topins - \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed - \else - \unvbox\topins - \fi - \fi - \global\topinserted\zeropoint} - - -\def\tightlayer[#1]% - {\hbox - {\def\currentlayer{#1}% todo: left/right - \hsize\layerparameter\c!breedte - \vsize\layerparameter\c!hoogte - \composedlayer{#1}}} - -\def\dodosetobject#1#2#3% - {\bgroup - \globalpushmacro\crossreferenceobject \objectreferenced - \inobjecttrue - \dowithnextbox - {\globalpopmacro\crossreferenceobject - \dododosetobject{#1}{#2}{#3}\egroup}} - % Just a simple and fast hanger, for usage in macros. \def\setuphanging @@ -357,16 +125,6 @@ {\endgraf \egroup} -\def\doifdimensionelse#1% - {\afterassignment\dodoifdimensionelse\scratchdimen#1pt\relax} - -\def\dodoifdimensionelse#1% - {\ifx#1\relax - \expandafter\secondoftwoarguments - \else % #1=p ... t\relax - \expandafter\thirdoffourarguments - \fi} - \def\definepushbutton % name optional setup {\dodoubleempty\dodefinepushbutton} @@ -440,8 +198,6 @@ %%%%%%%% todo: \chardef\snapstruts=1 => d=l-h -\writestatus{\m!systems}{beware: some patches loaded from cont-new.tex!} - \def\useMPvariables {\dodoubleargument\douseMPvariables} @@ -465,30 +221,6 @@ \startlinetableanalysis\processXMLfile{#1}\stoplinetableanalysis \startlinetablerun \processXMLfile{#1}\stoplinetablerun \egroup} - -\def\startlinetablepart - {\global\linetablesubcol\zerocount - \setbox\scratchbox\hbox\bgroup - \doconvertfont{\linetablerparameter\c!letter}% - \startcolor[\linetablerparameter\c!kleur]% - \ignorespaces} - -\def\stoplinetablepart - {\ifnum\linetablepart>\zerocount - \unskip \unskip % remove last intercolumn skip (distance+fill) - \fi - \stopcolor - \egroup - \iflinetablepreroll \else - \ifcase\linetablepart - % we're collecting the repeater - \else - \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax - \ifdim\scratchdimen>\linetableparameter\c!rek\else - \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}% - \fi - \fi - \fi} % experimental: \synchronizegrid bla bla bla @@ -609,19 +341,6 @@ \TABLEnoalign{\kern-\lineheight}% \fi} -\def\showexternalfigured - {\bgroup - \immediate\openout\scratchwrite=mpfigs.mp - \def\presetfigure[##1][##2]% - {\getfiguredimensionsonly[##1]% \pagefigure[##1]% - \immediate\write\scratchwrite - {registerfigure("##1",\figurewidth,\figureheight)}} - \pushendofline - \readjobfile\@@exfile\donothing\donothing - \popendofline - \immediate\closeout\scratchwrite - \egroup} - % between alignment lines certain rules apply, and even a % simple test can mess up a table, which is why we have a % special test facility @@ -1067,47 +786,6 @@ % \global\divide#1 \!!ten\relax % \global\multiply#1 #2#3#4\relax]} -\def\complexTableTB[#1]{\TABLEnoalign{\blanko[#1]}} -\def\simpleTableTB {\TABLEnoalign{\blanko}} - -\def\TabulateTB - {\complexorsimpleTable{TB}} - -\def\doTableinterline% #1 - {\ifnum\currentTABLEcolumn>\maxTABLEcolumn - \chuckTABLEautorow - \else\ifnum\currentTABLEcolumn=\zerocount - \TABLEnoalign - {\globalletempty\checkTABLEautorow - \globalletempty\chuckTABLEautorow}% - \else - \setTABLEerror\TABLEmissingcolumn - \handleTABLEerror - \fi\fi - \complexorsimpleTable} % {#1} - -\def\TableHL{\doTableinterline{HL}} -\def\TableTB{\doTableinterline{TB}} - -\appendtoks\let\TB\TableTB \to\everytable -\appendtoks\let\TB\TabulateTB\to\everytabulate - -% \starttabulate -% \NC text \NC text \NC \NR -% \TB[small] -% \NC text \NC text \NC \NR -% \TB[4*big] -% \NC text \NC text \NC \NR -% \stoptabulate -% -% \starttable[|||] -% \VL text \VL text \VL \AR -% \TB[small] -% \VL text \VL text \VL \AR -% \TB[4*big] -% \VL text \VL text \VL \AR -% \stoptable - % still needed for uguide \let\placefloatlabel \placefloatcaption diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index a6a049ad4..9db58bf70 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -8,14 +8,14 @@ %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. % dec 07 2001 : cont-en.efmt : 4,035,912 -\catcode`\{=1 \catcode`\}=2 +\catcode`\{=1 \catcode`\}=2 -\def\contextversion{2003.9.25} +\def\contextversion{2003.9.26} %D Welcome to the main module. When this module is ran through %D \type{initex} or \type{tex -i} or \type{whatevertex} using @@ -29,26 +29,26 @@ %D manipulation macros. The first one loads \PLAIN\ \TEX, as %D minimal as possible. -%input syst-tex.tex +%input syst-tex.tex -\input syst-pln.tex % stripped plain +\input syst-pln.tex % stripped plain \input syst-prm.tex % saved primitives (will be extended) -\input syst-etx.tex % etex -\input syst-omg.tex % omega +\input syst-etx.tex % etex +\input syst-omg.tex % omega \input syst-gen.tex \input syst-ext.tex \input syst-new.tex \input syst-con.tex -\input math-pln.tex % basic plain math +\input math-pln.tex % basic plain math %D To enable selective loading, we say: \CONTEXTtrue -%D In order to conveniently load files, we need a few -%D support modules. +%D In order to conveniently load files, we need a few +%D support modules. \input supp-ini.tex \input supp-fil.tex @@ -83,10 +83,10 @@ \input supp-ran.tex \input supp-ali.tex -%D The next module deals with language specific typographic -%D extensions. +%D The next module deals with language specific typographic +%D extensions. -\input typo-ini.tex +\input typo-ini.tex %D Verbatim typesetting is implemented in a separate class of %D modules. The pretty typesetting modules are loaded at run @@ -94,9 +94,9 @@ \input verb-ini.tex % replaces supp-ver -%D The following modules are not sequentially dependent, -%D i.e. they have ugly dependencies, which will be cleaned -%D up by adding more overloading. +%D The following modules are not sequentially dependent, +%D i.e. they have ugly dependencies, which will be cleaned +%D up by adding more overloading. %D When loading the font, color and special modules, we need a %D bit more advanced file handling as well as some general @@ -107,16 +107,16 @@ \input core-fil.tex \input core-con.tex -%D We already need some synonyms (patterns). At runtime this -%D file will be reloaded. +%D We already need some synonyms (patterns). At runtime this +%D file will be reloaded. -\input cont-fil.tex +\input cont-fil.tex %D \CONTEXT\ does not implement its own table handling. We %D just go for the best there is and load \TABLE. Just to be %D sure we do it here, before we redefine \type{|}. -\input thrd-tab.tex +\input thrd-tab.tex %D Here comes the last support modules. They take care of %D some language specific things. @@ -127,12 +127,12 @@ %D The next few modules do what their names state. They %D load additional definition modules when needed. -\input enco-ini.tex -\input filt-ini.tex -\input hand-ini.tex -\input regi-ini.tex +\input enco-ini.tex +\input filt-ini.tex +\input hand-ini.tex +\input regi-ini.tex \input lang-ini.tex -\input unic-ini.tex +\input unic-ini.tex \input colo-ini.tex %input colo-sep.tex @@ -159,17 +159,18 @@ \input lang-sla.tex \input lang-ura.tex -\input lang-vn.tex % vietnamese, will be grouped +\input lang-vn.tex % vietnamese, will be grouped %D All kind of symbols are handled in: \input symb-ini.tex %D Next we load some core macro's. These implement the -%D macros' that are seen by the users. The order of loading -%D is important, due to dependancies. +%D macros' that are seen by the users. The order of loading +%D is important, due to dependancies. \input core-gen.tex +\input core-new.tex \input core-uti.tex \input core-mar.tex \input core-mak.tex @@ -179,34 +180,33 @@ \input core-vis.tex %input core-con.tex \input core-rul.tex -\input core-new.tex \input core-tab.tex \input core-nav.tex \input core-ref.tex -\input core-obj.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-lst.tex +\input core-num.tex +\input core-itm.tex +\input core-des.tex \input core-mat.tex -\input core-syn.tex -%input core-mul.tex % moved -\input core-spa.tex -\input core-sys.tex +\input core-syn.tex +%input core-mul.tex % moved +\input core-spa.tex +\input core-sys.tex -% experimental otr +% experimental otr -\input page-ini.tex -\input page-not.tex -\input page-one.tex -\input page-lay.tex +\input page-ini.tex +\input page-not.tex +\input page-one.tex +\input page-lay.tex \input page-log.tex \input page-txt.tex -\input page-sid.tex -\input page-flt.tex -\input page-mul.tex -\input page-set.tex +\input page-sid.tex +\input page-flt.tex +\input page-mul.tex +\input page-set.tex \input page-lyr.tex \input page-mak.tex \input page-num.tex @@ -217,17 +217,17 @@ \input core-job.tex -% so far +% so far -\input core-sec.tex +\input core-sec.tex \input page-imp.tex \input core-tbl.tex \input core-int.tex \input core-ntb.tex -\input core-ltb.tex +\input core-ltb.tex -%D Like languages, fonts, encodings and symbols, \METAPOST\ -%D support is also organized in its own class of modules. +%D Like languages, fonts, encodings and symbols, \METAPOST\ +%D support is also organized in its own class of modules. \input meta-ini.tex \input meta-pag.tex @@ -235,10 +235,10 @@ %D On which the next one depends: -\input core-pos.tex +\input core-pos.tex -%D A few more languages, that have specifics using core -%D functionality: +%D A few more languages, that have specifics using core +%D functionality: \input lang-chi.tex @@ -263,9 +263,9 @@ \input type-ini.tex \input prop-ini.tex -\input prop-lay.tex % needs core-ref.tex +\input prop-lay.tex % needs core-ref.tex -\input math-ini.tex % after enco-ini.tex +\input math-ini.tex % after enco-ini.tex %D Now we're ready for more core modules. @@ -274,18 +274,18 @@ \input core-mis.tex -\input core-fig.tex % after page body +\input core-fig.tex % after page body \input core-par.tex \input core-box.tex -%D Language specific spacing. +%D Language specific spacing. \input lang-spa.tex -%D Only the basic XML parser and remapper are part of the core. +%D Only the basic XML parser and remapper are part of the core. %D These macrosa re loaded last since they overload and|/|or -%D extend previously defined ones. +%D extend previously defined ones. \input xtag-ini.tex \input xtag-ext.tex @@ -296,7 +296,7 @@ \input xtag-rng.tex %input xtag-ent.tex -%D How about this: +%D How about this: \input meta-xml.tex @@ -312,10 +312,10 @@ \input cont-log.tex -%D Defaults go here (more will be moved to this module -%D later): +%D Defaults go here (more will be moved to this module +%D later): -\input core-def.tex +\input core-def.tex %D At run time, a few more files are loaded, like: %D @@ -326,7 +326,7 @@ %D \som \type{cont-fil}: filename and module synonyms %D \stopopsomming -%D Just to keep the user busy for a while, we say: +%D Just to keep the user busy for a while, we say: \startinterface english @@ -410,7 +410,7 @@ \stopinterface \edef\copyrightversion - {Copyright 1990-\the\normalyear\normalspace / + {Copyright 1990-\the\normalyear\normalspace / PRAGMA ADE / J. Hagen - A.F. Otten} \writeline\writestring{\copyrightversion}\writeline @@ -424,25 +424,25 @@ \doifparentfileelse{context}{\donothing}{\endinput} -%D Unless we're generating a \type {cont-..} format, we also -%D do the following. +%D Unless we're generating a \type {cont-..} format, we also +%D do the following. %D Except from english, no hyphenation patterns are loaded %D yet. Users can specify their needs in the next module: -\loaduserspecifications +\loaduserspecifications -%D Next we default to the same language as the interface. +%D Next we default to the same language as the interface. \unprotect -\installlanguage [\s!en] [\c!status=\v!start] +\installlanguage [\s!en] [\c!status=\v!start] -\startinterface english +\startinterface english \installlanguage [\s!uk] [\c!status=\v!start] -\stopinterface +\stopinterface \appendtoks \language [\s!en] \to \everyjob \appendtoks \mainlanguage [\s!en] \to \everyjob @@ -454,7 +454,7 @@ \appendtoks \language [\s!de] \to \everyjob \appendtoks \mainlanguage [\s!de] \to \everyjob -\stopinterface +\stopinterface \startinterface dutch @@ -463,44 +463,44 @@ \appendtoks \language [\s!nl] \to \everyjob \appendtoks \mainlanguage [\s!nl] \to \everyjob -\stopinterface +\stopinterface -\startinterface czech +\startinterface czech \installlanguage [\s!cz] [\c!status=\v!start] \appendtoks \language [\s!cz] \to \everyjob \appendtoks \mainlanguage [\s!cz] \to \everyjob -\stopinterface +\stopinterface -\startinterface italian +\startinterface italian \installlanguage [\s!it] [\c!status=\v!start] \appendtoks \language [\s!it] \to \everyjob \appendtoks \mainlanguage [\s!it] \to \everyjob -\stopinterface +\stopinterface -\startinterface romanian +\startinterface romanian \installlanguage [\s!ro] [\c!status=\v!start] \appendtoks \language [\s!ro] \to \everyjob \appendtoks \mainlanguage [\s!ro] \to \everyjob -\stopinterface +\stopinterface \protect -%D Finally we (pre)load some fonts. +%D Finally we (pre)load some fonts. \setupbodyfont [cmr,rm,12pt] %D The next hook can be used to generate a local (extended) -%D format. This file is only searched for at the current -%D path. +%D format. This file is only searched for at the current +%D path. % \readlocfile{cont-def.tex} % {\writestatus{loading}{adding extensions from cont-def}} diff --git a/tex/context/base/core-fig.tex b/tex/context/base/core-fig.tex index 458e6198f..b4182de1a 100644 --- a/tex/context/base/core-fig.tex +++ b/tex/context/base/core-fig.tex @@ -643,12 +643,30 @@ \global\figwid\@@efmaxbreedte \fi}}} +% \def\dosetdimensionfiguresize#1#2#3% +% {#1\relax +% \doifsomething\@@efmaxbreedte +% {\ifdim\figwid>\@@efmaxbreedte\global\figwid\@@efmaxbreedte#2\relax\fi}% +% \doifsomething\@@efmaxhoogte +% {\ifdim\fighei>\@@efmaxhoogte \global\fighei\@@efmaxhoogte #3\relax\fi}} + +\let\@@efgrid\empty + \def\dosetdimensionfiguresize#1#2#3% {#1\relax \doifsomething\@@efmaxbreedte {\ifdim\figwid>\@@efmaxbreedte\global\figwid\@@efmaxbreedte#2\relax\fi}% \doifsomething\@@efmaxhoogte - {\ifdim\fighei>\@@efmaxhoogte \global\fighei\@@efmaxhoogte #3\relax\fi}} + {\ifdim\fighei>\@@efmaxhoogte \global\fighei\@@efmaxhoogte #3\relax\fi}% + \processaction + [\@@efgrid] + [ \v!ja=>\getnoflines\fighei + \global\fighei\noflines\lineheight, + \v!hoogte=>\getrawnoflines\fighei + \global\fighei\noflines\lineheight + \global\advance\fighei\strutdepth, + \v!passend=>\getrawnoflines\fighei + \global\fighei\noflines\lineheight]} \def\setdimensionfiguresize {\ifdim\figwid>\zeropoint\relax @@ -943,7 +961,7 @@ \c!object=\@@exobject,\c!preset=\v!ja, \c!pagina=0,\c!sturing=\v!nee,\c!preview=\v!nee,\c!herhaal=\v!nee, \c!maxbreedte=\@@exmaxbreedte,\c!maxhoogte=\@@exmaxhoogte, - \c!schaal=,\c!breedte=,\c!hoogte=,\c!scherm=,\c!regels=, + \c!schaal=,\c!breedte=,\c!hoogte=,\c!scherm=,\c!regels=,\c!grid=, %\c!voorgrondkleur=, \c!splitsen=, \c!factor=,\c!hfactor=,\c!bfactor=]% @@ -1536,6 +1554,19 @@ \popendofline \egroup} +\def\showexternalfigured % to be documented; this one builds a dimension file for + {\bgroup % metapost/metafun + \immediate\openout\scratchwrite=mpfigs.mp + \def\presetfigure[##1][##2]% + {\getfiguredimensionsonly[##1]% \pagefigure[##1]% + \immediate\write\scratchwrite + {registerfigure("##1",\figurewidth,\figureheight)}} + \pushendofline + \readjobfile\@@exfile\donothing\donothing + \popendofline + \immediate\closeout\scratchwrite + \egroup} + \def\startpagefigure {\dodoubleempty\dostartpagefigure} @@ -1949,6 +1980,7 @@ \c!kader=\v!uit, \c!achtergrond=, % new \c!splitskleur=white, +% \c!grid=, \c!plaats={\v!lokaal,\v!globaal}] \setupexternalfigures diff --git a/tex/context/base/core-job.tex b/tex/context/base/core-job.tex index 91c963770..aaf273a5a 100644 --- a/tex/context/base/core-job.tex +++ b/tex/context/base/core-job.tex @@ -377,52 +377,6 @@ \def\deelomgeving #1 % {\doexecutefileonce{#1}} -\def\setups - {\dosingleargument\dosetups} - -\def\dosetups[#1]% - {\iffirstargument - \def\next{\dodosetups{#1}}% - \else - \let\next\dodosetups - \fi - \next} - -\def\dodosetups#1% - {\processcommalist[#1]\dododosetups} - -\def\dodososetups#1% - {\getvalue{\??su#1}} - -\def\doifsetupselse#1% - {\doifdefinedelse{\??su#1}} - -\long\@EA\def\csname\e!start\v!instellingen\endcsname#1 % - {\bgroup - \catcode`\^^M=\@@ignore - \xdostartsetups{#1}} - -\expanded - {\long\noexpand\def\noexpand\xdostartsetups##1##2\csname\e!stop\v!instellingen\endcsname - {\egroup - \long\noexpand\setvalue{\??su##1}{##2}}} - -\def\startsetups % for international purposes - {\bgroup\doifnextcharelse[\startsetupsA\startsetupsB\stopsetups} - -\def\startlocalsetups % for nested purposes - {\bgroup\doifnextcharelse[\startsetupsA\startsetupsB\stoplocalsetups} - -\def\startsetupsA#1[#2]% - {\catcode`\^^M=\@@ignore - \dostartsetups#1{#2}} - -\def\startsetupsB#1#2 % space delimited - {\startsetupsA#1[#2]}% - -\long\def\dostartsetups#1#2% watch out: not \grabuntil - {\dograbuntil#1{\egroup\long\setvalue{\??su#2}}} - % Het -karakter (FormFeed), wordt omgezet in \par \catcode`\^^L=\@@endofline diff --git a/tex/context/base/core-ltb.tex b/tex/context/base/core-ltb.tex index 1e5353669..bec04c804 100644 --- a/tex/context/base/core-ltb.tex +++ b/tex/context/base/core-ltb.tex @@ -11,31 +11,31 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\beginTEX - \expandafter \endinput +\beginTEX + \expandafter \endinput \endTEX -% This module is experimental, undocumented, and currently only set up -% eTeX. It provides a mechanism for typesetting very large tables, -% spanning many pages horizontally and vertically, with repeated -% header lines and (entry) columns, tab tracking, color, etc. In does -% two passes over a table, which is why the table goes into a -% buffer or file. As said, tables can be real huge. +% This module is experimental, undocumented, and currently only set up +% eTeX. It provides a mechanism for typesetting very large tables, +% spanning many pages horizontally and vertically, with repeated +% header lines and (entry) columns, tab tracking, color, etc. In does +% two passes over a table, which is why the table goes into a +% buffer or file. As said, tables can be real huge. -% \BH \BC .. \EC \BC .. \EC \EH % append -% \BR \BC .. \EC \BC .. \EC \ER +% \BH \BC .. \EC \BC .. \EC \EH % append +% \BR \BC .. \EC \BC .. \EC \ER % -% or +% or % -% \NC .. \NC .. \NC \NR (todo: optional last \NC) +% \NC .. \NC .. \NC \NR (todo: optional last \NC) -% alternative: +% alternative: % -% (1) direct run, save content in macro, but only if needed +% (1) direct run, save content in macro, but only if needed % -% todo +% todo % -% (2) buffered table content +% (2) buffered table content % % \startbuffer % \startlinetablehead @@ -45,12 +45,12 @@ % \stopbuffer % % \processlinetablebuffer[buffer] -% -% in buffer : head and body % -% (3) unbuffered run, multipass +% in buffer : head and body % -% - run with starting width zero / prev run +% (3) unbuffered run, multipass +% +% - run with starting width zero / prev run % - clip on prev run % - flush real widths @@ -84,11 +84,11 @@ \let\linetablerow \!!zerocount \let\linetablerows \!!zerocount -\initializetablebox \zerocount % holds repeater +\initializetablebox \zerocount % holds repeater \chardef\linetablehmode \zerocount -\chardef\linetablepage \zerocount -\chardef\linetablerepeat\zerocount +\chardef\linetablepage \zerocount +\chardef\linetablerepeat\zerocount \def\setuplinetable {\dotripleempty\dosetuplinetable} @@ -107,7 +107,7 @@ \c!regels=\!!maxcard, \c!nx=\plusone, \c!nlinks=0, - \c!herhaal=\v!ja, % when \c!nlinks>0, repeat on both pages + \c!herhaal=\v!ja, % when \c!nlinks>0, repeat on both pages \c!voor=, \c!na=, \c!tussen=\pagina, @@ -118,7 +118,7 @@ \c!rechteroffset=\linetableparameter\c!linkeroffset, \c!maxbreedte=\zeropoint, \c!breedte=5em, - \c!hoogte=\v!passend, % \v!regel = faster + \c!hoogte=\v!passend, % \v!regel = faster \c!achtergrond=, \c!achtergrondkleur=] @@ -143,10 +143,10 @@ \def\linetablerparameter#1% faster, leaner and meaner {\csname - \ifnum\linetablerow=\zerocount % geen ifcase + \ifnum\linetablerow=\zerocount % geen ifcase \ifcsname\??ler\v!hoofd#1\endcsname \??ler\v!hoofd#1% - \else\ifcsname\??ler0#1\endcsname + \else\ifcsname\??ler0#1\endcsname \??ler0#1% \else \s!empty @@ -164,7 +164,7 @@ \def\setnoftableslines {\doifelse{\linetableparameter\c!regels}\v!passend - {% nearly the same as core-tab, so same bugs + {% nearly the same as core-tab, so same bugs \ifdim\pagegoal<\maxdimen \scratchdimen\pagegoal \advance\scratchdimen -\pagetotal @@ -176,7 +176,7 @@ \global\advance\scratchdimen -\strutdp \global\advance\scratchdimen -\parskip \fi\fi - \getrawnoflines\scratchdimen + \getrawnoflines\scratchdimen \xdef\noflinetablelines{\the\noflines}} {\xdef\noflinetablelines{\linetableparameter\c!regels}}} @@ -199,40 +199,40 @@ \global\advance\linetablecolumn\plusone}% \global\linetablecolumn\scratchcounter \fi - \chardef\linetablemode + \chardef\linetablemode \iflinetablepreroll \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi \else \zerocount \fi \ifcase\linetablemode - \ifcase\linetablehmode - % nothing + \ifcase\linetablehmode + % nothing \or % fit, keep it simple \or - \chardef\linetablemode\plusone % line + \chardef\linetablemode\plusone % line \else - % some already calculated height + % some already calculated height \fi \fi - \setbox\scratchbox\hbox + \setbox\scratchbox\hbox \bgroup - \dontcomplain + \dontcomplain \hskip\linetablecparameter\c!linkeroffset\relax % 0 = width, unknown height - % 1 = width, fixed height - % 2 = no width, auto hsize + % 1 = width, fixed height + % 2 = no width, auto hsize \ifnum\linetablemode<\plustwo \advance\scratchdimen-\linetablecparameter\c!linkeroffset \advance\scratchdimen-\linetablecparameter\c!rechteroffset \fi - \ifcase\linetablemode + \ifcase\linetablemode \dosetraggedcommand{\linetablecparameter\c!uitlijnen}% - \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup - \hsize\scratchdimen + \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup + \hsize\scratchdimen \raggedcommand - \else + \else \setalignmentswitch{\linetablecparameter\c!uitlijnen}% \hbox \ifcase\linetablemode \or to\scratchdimen \fi \bgroup \ifcase\alignmentswitch\hss\or\hss\fi @@ -241,9 +241,9 @@ \begstrut \ignorespaces} \def\stoplinetablecell - {\unskip \endstrut + {\unskip \endstrut \dostopattributes - \ifcase\linetablemode + \ifcase\linetablemode \endgraf \else \ifcase\alignmentswitch\else\hss\fi @@ -261,15 +261,15 @@ \egroup} \def\savelinetablepart - {\global\setbox\tablebox\linetablepart - \ifnum\linetablepart=\zerocount - \box\scratchbox % just storing + {\global\setbox\tablebox\linetablepart + \ifnum\linetablepart=\zerocount + \box\scratchbox % just storing \else - \vbox + \vbox {\ifvoid\tablebox\linetablepart\else\unvbox\tablebox\linetablepart\fi \doif{\linetablerparameter\c!achtergrond}\v!kleur {\backgroundline[\linetablerparameter\c!achtergrondkleur]}% - {\box\scratchbox}% is also arg to \backgroundline + {\box\scratchbox}% is also arg to \backgroundline \endgraf \linetablerparameter\c!na}% \fi} @@ -277,10 +277,10 @@ \def\flushlinetableparts {\doglobal\increment\linetableline \ifnum\linetableline<\noflinetablelines - % keep collecting + % keep collecting \else - \iflinetablepreroll - % forget about them + \iflinetablepreroll + % forget about them \else \doifelse{\linetableparameter\c!regels}\v!passend {\scratchdimen\pagetotal}% @@ -291,12 +291,12 @@ \ifnum\recurselevel>\plusone \setbox\scratchbox\vbox to \scratchdimen{\vss}% \dp\scratchbox\strutdepth - \wd\scratchbox\hsize - \box\scratchbox + \wd\scratchbox\hsize + \box\scratchbox \else \obeydepth \fi - \fi + \fi \dp\tablebox\linetablepart\strutdepth \hbox to \hsize{\box\tablebox\linetablepart\hss}% \ifnum\linetablepart<\noflinetableparts\relax @@ -305,37 +305,61 @@ \ifnum\linetablerows<\noflinetablerows\relax \linetableparameter\c!tussen \else - % after, later - \fi + % after, later + \fi \chardef\linetableheadstatus\plusthree - \global\setbox\tablebox\zerocount\emptybox % here + \global\setbox\tablebox\zerocount\emptybox % here \fi - % reset \linetablerow will be an option, currently - % starts at zero after split - \globallet\linetablerow\!!zerocount + % reset \linetablerow will be an option, currently + % starts at zero after split + \globallet\linetablerow\!!zerocount \globallet\linetableline\!!zerocount \global\chardef\linetablepage\zerocount \global\linetablewidth\zeropoint \setnoftableslines \fi} +% \def\startlinetablepart +% {\global\linetablesubcol\zerocount +% \setbox\scratchbox\hbox\bgroup\ignorespaces} + +% \def\stoplinetablepart +% {\ifnum\linetablepart>\zerocount +% \unskip \unskip % remove last intercolumn skip (distance+fill) +% \fi +% \egroup +% \iflinetablepreroll \else +% \ifcase\linetablepart +% % we're collecting the repeater +% \else +% \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax +% \ifdim\scratchdimen>\linetableparameter\c!rek\else +% \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}% +% \fi +% \fi +% \fi} + \def\startlinetablepart {\global\linetablesubcol\zerocount - \setbox\scratchbox\hbox\bgroup\ignorespaces} + \setbox\scratchbox\hbox\bgroup + \doconvertfont{\linetablerparameter\c!letter}% + \startcolor[\linetablerparameter\c!kleur]% + \ignorespaces} \def\stoplinetablepart - {\ifnum\linetablepart>\zerocount + {\ifnum\linetablepart>\zerocount \unskip \unskip % remove last intercolumn skip (distance+fill) \fi + \stopcolor \egroup \iflinetablepreroll \else \ifcase\linetablepart - % we're collecting the repeater + % we're collecting the repeater \else \scratchdimen\hsize \advance\scratchdimen-\wd\scratchbox\relax \ifdim\scratchdimen>\linetableparameter\c!rek\else \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}% - \fi + \fi \fi \fi} @@ -355,55 +379,55 @@ %%% \donefalse \ifcase\linetablerepeat\else - % van te voren berekenen + % van te voren berekenen \scratchcounter\linetablecolumn\advance\scratchcounter-2 \ifnum\linetablerepeat=\scratchcounter - \donetrue % collecting repeater + \donetrue % collecting repeater \fi \fi %%%% - \ifdone - % collecting repeater + \ifdone + % collecting repeater \else \ifnum\linetablecolumn>\getvalue{\??le::\linetablepart}\relax - \donetrue + \donetrue \fi - \fi + \fi \ifdone \stoplinetablepart \iflinetablepreroll \else \savelinetablepart - \fi + \fi \ifcase\linetablepage \or \global\chardef\linetablepage \plustwo \else \global\chardef\linetablepage \plusone - \fi + \fi \doglobal\increment\linetablepart - \global\linetablewidth\wd\tablebox\zerocount + \global\linetablewidth\wd\tablebox\zerocount \startlinetablepart \fi \else \donefalse \!!doneafalse \ifcase\linetablerepeat\else - % van te voren berekenen + % van te voren berekenen \scratchcounter\linetablecolumn \advance\scratchcounter-2 \ifnum\linetablerepeat=\scratchcounter - \donetrue % collecting repeater + \donetrue % collecting repeater \fi - \fi - \ifdone + \fi + \ifdone \!!doneatrue - % collecting repeater - \else\ifdim\linetablewidth>\hsize + % collecting repeater + \else\ifdim\linetablewidth>\hsize \donetrue \else \global\advance\linetablewidth\linetablecparameter\c!afstand\relax - \ifdim\linetablewidth>\hsize % ? + \ifdim\linetablewidth>\hsize % ? \donetrue \fi - \fi\fi + \fi\fi \ifdone \stoplinetablepart \savelinetablepart @@ -411,21 +435,21 @@ \global\chardef\linetablepage \plustwo \else \global\chardef\linetablepage \plusone - \fi + \fi \doglobal\increment\linetablepart \ifnum\linetablepart>\noflinetableparts \globallet\noflinetableparts\linetablepart \initializetablebox\linetablepart - \fi + \fi \global\linetablewidth\wd\linetablecell \startlinetablepart - \if!!doneb \else \ifcase\linetablerepeat \else - % check for left/right page + \if!!doneb \else \ifcase\linetablerepeat \else + % check for left/right page \ifcase\linetablepage\donetrue\or\donetrue\or\donefalse\fi\ifdone - % insert repeater - \global\advance\linetablewidth\wd\tablebox\zerocount + % insert repeater + \global\advance\linetablewidth\wd\tablebox\zerocount \iflinetablepreroll\kern\wd\else\unhcopy\fi\tablebox\zerocount - \fi + \fi \fi \fi \fi \iflinetablepreroll \else @@ -436,24 +460,24 @@ \fi \fi} -% \linetableparameter\c!var -> \@@levar (when no classes) +% \linetableparameter\c!var -> \@@levar (when no classes) \def\startlinetablerun % to do: quit when nested {\bgroup - \inlinetabletrue - % autowidth + \inlinetabletrue + % autowidth \doif{\linetableparameter\c!maxbreedte}\v!passend {\setuplinetable[\c!maxbreedte=\zeropoint]}% \processaction [\linetableparameter\c!rek] [\v!nee=>{\setuplinetable[\c!rek=\maxdimen]},% no stretch - \v!ja=>{\setuplinetable[\c!rek=\zeropoint]}]% max stretch + \v!ja=>{\setuplinetable[\c!rek=\zeropoint]}]% max stretch \chardef\linetablerepeat\linetableparameter\c!nlinks - \chardef\linetablesplitstatus % = + \chardef\linetablesplitstatus % = \ifdim\linetableparameter\c!maxbreedte>\zeropoint - \zerocount \else \plusone + \zerocount \else \plusone \fi - % optional prevdepth correction + % optional prevdepth correction \iflinetablepreroll \globallet\noflinetablerows\!!zerocount \else @@ -472,8 +496,8 @@ \ifcase\linetablerepeat \globallet\linetablepart\!!plusone \else - \globallet\linetablepart\!!zerocount % repeater - \fi + \globallet\linetablepart\!!zerocount % repeater + \fi \globallet\linetablestep\!!plusone \globallet\linetableline\!!zerocount \globallet\linetablerow \!!zerocount @@ -481,7 +505,7 @@ \global\linetablesubcol \zerocount \global\linetablewidth \zeropoint \setnoftableslines - \checklinetablepage + \checklinetablepage \let\BR\linetableBR \let\ER\linetableER \let\BH\linetableBR @@ -490,11 +514,11 @@ \let\EC\linetableEC \let\NC\linetableNC \let\NR\linetableNR - \flushlinetablehead} + \flushlinetablehead} \def\stoplinetablerun {\globallet\linetableline\!!maxcard - \chardef\linetableheadstatus\zerocount % blocked + \chardef\linetableheadstatus\zerocount % blocked \flushlinetableparts \iflinetablepreroll \else \linetableparameter\c!na @@ -542,7 +566,7 @@ \def\linetableBR {\dosingleempty\dolinetableBR} -\def\dolinetableBR[#1]% #1 not yet implemented +\def\dolinetableBR[#1]% #1 not yet implemented {\ifnum\linetableheadstatus=1\else \doglobal\increment\linetablerow \doglobal\increment\linetablerows @@ -551,27 +575,27 @@ \global\linetablesubcol\plusone % \linetableheight\linetablerparameter\c!hoogte % -% \ifx\linetableheight\empty -% % nothing -% \else\ifx\linetableheight\v!passend +% \ifx\linetableheight\empty +% % nothing +% \else\ifx\linetableheight\v!passend % % keep it simple -% \else\ifx\linetableheight\v!regel +% \else\ifx\linetableheight\v!regel % \chardef\linetablemode\plusone % \else -% \!!heighta\linetableheight +% \!!heighta\linetableheight % \advance\!!heighta-\strutdepth % \fi\fi\fi % \linetableheight\zeropoint \edef\!!stringa{\linetablerparameter\c!hoogte}% - \ifx\!!stringa\empty + \ifx\!!stringa\empty \chardef\linetablehmode\zerocount - \else\ifx\!!stringa\v!passend - \chardef\linetablehmode\plusone - \else\ifx\!!stringa\v!regel + \else\ifx\!!stringa\v!passend + \chardef\linetablehmode\plusone + \else\ifx\!!stringa\v!regel \chardef\linetablehmode\plustwo \else - \linetableheight\!!stringa + \linetableheight\!!stringa \advance\linetableheight-\strutdepth \fi\fi\fi % @@ -589,10 +613,10 @@ \def\linetableER {\stoplinetablecell - % no \box\linetablecell, i.e. dummy columnn, last \NC \NR + % no \box\linetablecell, i.e. dummy columnn, last \NC \NR \stoplinetablepart \savelinetablepart - \advance\linetablecolumn \minusone + \advance\linetablecolumn \minusone \ifnum\linetablecolumn>\noflinetablecolumns \xdef\noflinetablecolumns{\number\linetablecolumn}% \fi @@ -602,9 +626,9 @@ \ifcase\linetablerepeat \globallet\linetablepart\!!plusone \else - \globallet\linetablepart\!!zerocount % repeater + \globallet\linetablepart\!!zerocount % repeater \fi - \checklinetablepage + \checklinetablepage \flushlinetablehead} \def\checklinetablepage @@ -616,13 +640,13 @@ \def\flushlinetablehead {\ifcase\linetableheadstatus - % 0 blocked - \or - % 1 doing head + % 0 blocked + \or + % 1 doing head \or - % 2 head done + % 2 head done \or - % 3 trigger flush + % 3 trigger flush \chardef\linetableheadstatus\plusone \the\@@linetablehead\relax \chardef\linetableheadstatus\plustwo @@ -659,37 +683,37 @@ \dorecurse\noflinetablecolumns % global, from last run {\linetableparameter\c!n} {%\writestatus{linetable}{\recurselevel->\getvalue{\??lew\recurselevel}}% \setevalue{\??lec\recurselevel\c!breedte}{\getvalue{\??lew\recurselevel}}% - \letgvalue{\??lew\recurselevel}\!!zeropoint}} % init next table + \letgvalue{\??lew\recurselevel}\!!zeropoint}} % init next table -% todo: store in box instead of macro +% todo: store in box instead of macro \newtoks \@@linetablehead \long\def\startlinetablehead#1\stoplinetablehead {\ifinlinetable \@@linetablehead\emptytoks - \fi - \chardef\linetableheadstatus3 % full + \fi + \chardef\linetableheadstatus3 % full \@@linetablehead{#1}% \ifinlinetable \flushlinetablehead \fi} -\def\linetableBH - {\ifx\EC\relax - % signal, grabbing lines +\def\linetableBH + {\ifx\EC\relax + % signal, grabbing lines \else - \@@linetablehead\emptytoks - \fi - \pushmacro\BC - \pushmacro\EC + \@@linetablehead\emptytoks + \fi + \pushmacro\BC + \pushmacro\EC \def\BC##1\EC{\appendtoks##1\to\@@linetablehead}% - \let\EC\relax} % signal + \let\EC\relax} % signal -\def\linetableEH +\def\linetableEH {\popmacro\EC \popmacro\BC - \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead} + \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead} \let\startlinetablebody\donothing \let\stoplinetablebody \donothing @@ -698,7 +722,7 @@ {\dosingleempty\doprocesslinetablebuffer} \def\doprocesslinetablebuffer[#1]% - {\bgroup + {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis @@ -706,18 +730,18 @@ \egroup} \def\processlinetablefile#1% - {\bgroup + {\bgroup \let\startlinetable\donothing \let\stoplinetable \donothing \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun \egroup} -\protect \endinput +\protect \endinput \doifnotmode{demo}{\endinput} -% to be documented, see stan's ledger styles for an example +% to be documented, see stan's ledger styles for an example \setuplinetable[n=6,m={2,2,2},regels=25] @@ -729,7 +753,7 @@ \starttext -\showframe \showstruts +\showframe \showstruts \setupcolors[state=start] diff --git a/tex/context/base/core-mis.tex b/tex/context/base/core-mis.tex index f16bdb603..7a1f7910c 100644 --- a/tex/context/base/core-mis.tex +++ b/tex/context/base/core-mis.tex @@ -2278,6 +2278,7 @@ \let \@@efbreedte\@@xybreedte \let \@@efhoogte \@@xyhoogte \let \@@efregels \@@xyregels + \let \@@efgrid \@@xygrid \let \@@epx \!!zeropoint \let \@@epy \!!zeropoint \edef\@@epw {\the\nextboxwd}% @@ -2301,7 +2302,7 @@ \getparameters [\??xy] [\c!schaal=,\c!breedte=,\c!hoogte=,\c!regels=, - \c!factor=,\c!hfactor=,\c!bfactor=, + \c!factor=,\c!hfactor=,\c!bfactor=,\c!grid=, \c!sx=1,\c!sy=1,#1]% \dowithnextbox {\dontshowcomposition diff --git a/tex/context/base/core-new.tex b/tex/context/base/core-new.tex index a675ce0ed..aee564701 100644 --- a/tex/context/base/core-new.tex +++ b/tex/context/base/core-new.tex @@ -193,8 +193,8 @@ \let\stopmode \donothing \let\stopnotmode\donothing -\long\def\dostopmode #1\stopmode {} -\long\def\dostopnotmode#1\stopnotmode{} +\long\def\dostopmode #1\stopmode {} +\long\def\dostopnotmode#1\stopnotmode{} \def\doifallmodeselse{\unprotect\dodoifallmodeselse} \def\doifallmodes {\unprotect\dodoifallmodes} @@ -220,8 +220,111 @@ \let\stopallmodes \donothing \let\stopnotallmodes\donothing -\long\def\dostopallmodes #1\stopallmodes {} -\long\def\dostopnotallmodes#1\stopnotallmodes{} +\long\def\dostopallmodes #1\stopallmodes {} +\long\def\dostopnotallmodes#1\stopnotallmodes{} + +% \def\setups +% {\dosingleargument\dosetups} +% +% \def\dosetups[#1]% +% {\iffirstargument +% \def\next{\dodosetups{#1}}% +% \else +% \let\next\dodosetups +% \fi +% \next} +% +% \def\dodosetups#1% +% {\processcommalist[#1]\dododosetups} +% +% \def\dododosetups#1% +% {\getvalue{\??su#1}} +% +% \def\doifsetupselse#1% +% {\doifdefinedelse{\??su#1}} +% +% \long\@EA\def\csname\e!start\v!instellingen\endcsname#1 % +% {\bgroup +% \catcode`\^^M=\@@ignore +% \xdostartsetups{#1}} +% +% \expanded +% {\long\noexpand\def\noexpand\xdostartsetups##1##2\csname\e!stop\v!instellingen\endcsname +% {\egroup +% \long\noexpand\setvalue{\??su##1}{##2}}} +% +% \def\startsetups % for international purposes +% {\bgroup\doifnextcharelse[{\startsetupsA\stopsetups}{\startsetupsB\stopsetups}} +% +% \def\startlocalsetups % for nested purposes +% {\bgroup\doifnextcharelse[{\startsetupsA\stoplocalsetups}{\startsetupsB\stoplocalsetups}} +% +% \def\startsetupsA#1[#2]% +% {\catcode`\^^M=\@@ignore +% \dostartsetups#1{#2}} +% +% \def\startsetupsB#1#2 % space delimited +% {\startsetupsA#1[#2]}% +% +% \long\def\dostartsetups#1#2% watch out: not \grabuntil +% {\dograbuntil#1{\egroup\long\setvalue{\??su#2}}} + +\expanded + {\long\def\@EA\noexpand\csname\e!start\v!instellingen\endcsname + {\bgroup\noexpand\doifnextcharelse[% + {\noexpand\startsetupsA\@EA\noexpand\csname\e!stop\v!instellingen\endcsname} + {\noexpand\startsetupsB\@EA\noexpand\csname\e!stop\v!instellingen\endcsname}}} + +\letvalue{\e!stop\v!instellingen}\relax + +\def\setups % {..} or [..] + {\doifnextcharelse\bgroup\dosetupsA\dosetupsB} + +\def\dosetupsA #1{\processcommalist[#1]\dosetups} % {..} +\def\dosetupsB[#1]{\processcommalist[#1]\dosetups} % [..] + +\def\dosetups#1% the grid option will be extended to other main modes + {\executeifdefined{\??su\ifgridsnapping\v!grid\fi:#1}{\csname\??su:#1\endcsname}\relax} + +\def\doifsetupselse#1% to be done: grid + {\doifdefinedelse{\??su:#1}} + +\def\startsetups % for international purposes + {\bgroup\doifnextcharelse[{\startsetupsA\stopsetups}{\startsetupsB\stopsetups}} + +\def\startlocalsetups % for nested purposes + {\bgroup\doifnextcharelse[{\startsetupsA\stoplocalsetups}{\startsetupsB\stoplocalsetups}} + +\let\stopsetups \relax +\let\stoplocalsetups\relax + +\def\startsetupsA#1% + {\catcode`\^^M\@@ignore + \dotripleempty\dostartsetups[#1]} + +\def\startsetupsB#1#2 % space delimited / kind of obsolete + {\catcode`\^^M\@@ignore + \dodostartsetups#1\empty{#2}} + +\def\dostartsetups + {\ifthirdargument + \@EA\startsetupsC + \else + \@EA\startsetupsD + \fi} + +\def\startsetupsC[#1][#2][#3]% [..] [..] + {\dodostartsetups#1{#2}{#3}} + +\def\startsetupsD[#1][#2][#3]% [..] + {\dodostartsetups#1\empty{#2}} + +\long\def\dodostartsetups#1#2#3% watch out: not \grabuntil + {\dograbuntil#1{\egroup\long\setvalue{\??su#2:#3}}} + +\def\systemsetupsprefix{*} + +\def\systemsetups#1{\dosetups{\systemsetupsprefix#1}} % new % @@ -394,7 +497,7 @@ \bgroup -\gdef\cleanedupcolon{:} \catcode`:=\@@active +\gdef\cleanedupcolon{:} \catcode`:=\@@active \gdef\cleanuplabel#1% {\bgroup\let:\cleanedupcolon @@ -422,4 +525,4 @@ \egroup -\protect \endinput +\protect \endinput \ No newline at end of file diff --git a/tex/context/base/core-ntb.tex b/tex/context/base/core-ntb.tex index 6aa6cc0c6..b85c87c61 100644 --- a/tex/context/base/core-ntb.tex +++ b/tex/context/base/core-ntb.tex @@ -710,6 +710,51 @@ % \def\splittblbox#1% #1 <> 0/2 % {\unvbox#1} +% \def\splittblbox#1% #1 <> 0/2 +% {\ifinsidefloat +% \unvbox#1% +% \else +% % spacing between rows gets lost in split +% \setbox4\vbox +% {\doifsomething\tbltbltussenwit{\blank[\tbltbltussenwit]}}% +% \setbox2\vbox +% {}% +% \dorecurse\noftblheadlines +% {\setbox0\vsplit#1 to \lineheight +% \setbox2\vbox{\unvcopy2\unvcopy0}}% +% \ifcase\noftblheadlines\else\unvcopy2\fi +% \donefalse +% \doloop +% {\setbox0\vsplit#1 to \lineheight +% \ifdim\pagegoal<\maxdimen +% \setbox0\vbox{\unvbox0}% +% \dimen0\ht0 +% \advance\dimen0\ht4 +% \advance\dimen0\pagetotal +% \ifdim\dimen0>\pagegoal +% \bgroup \pagina \egroup % make sure that local vars are kept +% \ifcase\noftblheadlines\else\unvcopy2\fi +% \fi +% \fi +% \ifdone +% \doifsomething\tbltbltussenwit{\blank[\tbltbltussenwit]}% +% \fi +% \unvbox0 +% \allowbreak +% \ifvoid#1 \exitloop \else \donetrue \fi}% +% \fi} + + +% \bTABLE[split=repeat] +% \bTABLEhead +% \bTR \bTH lxxxeft \eTH\bTD right \eTD\eTR +% \eTABLEhead +% \bTABLEbody +% \dorecurse{100}{\bTR[after={\pagina[bigpreference]}] \bTD left \eTD\bTD right \eTD\eTR} +% \dorecurse{100}{\bTR\bTD left \eTD\bTD right \eTD\eTR} +% \eTABLEbody +% \eTABLE + \def\splittblbox#1% #1 <> 0/2 {\ifinsidefloat \unvbox#1% @@ -740,7 +785,23 @@ \doifsomething\tbltbltussenwit{\blank[\tbltbltussenwit]}% \fi \unvbox0 - \allowbreak + %\allowbreak + \bgroup + \scratchcounter\recurselevel + \advance\scratchcounter\noftblheadlines + \setupTBLcell{\number\scratchcounter}1 + \ifx\@@tblsplitafter\relax + \allowbreak + \else + \doifelsenothing\@@tblsplitafter + \allowbreak + {\scratchcounter\realpageno + \@@tblsplitafter + \ifnum\scratchcounter<\realpageno + \ifcase\noftblheadlines\else\unvcopy2\fi + \fi}% + \fi + \egroup \ifvoid#1 \exitloop \else \donetrue \fi}% \fi} @@ -1114,4 +1175,47 @@ \fi \fi} +%D Spacing: +% +% \starttabulate +% \NC text \NC text \NC \NR +% \TB[small] +% \NC text \NC text \NC \NR +% \TB[4*big] +% \NC text \NC text \NC \NR +% \stoptabulate +% +% \starttable[|||] +% \VL text \VL text \VL \AR +% \TB[small] +% \VL text \VL text \VL \AR +% \TB[4*big] +% \VL text \VL text \VL \AR +% \stoptable + +\def\complexTableTB[#1]{\TABLEnoalign{\blanko[#1]}} +\def\simpleTableTB {\TABLEnoalign{\blanko}} + +\def\TabulateTB + {\complexorsimpleTable{TB}} + +\def\doTableinterline% #1 + {\ifnum\currentTABLEcolumn>\maxTABLEcolumn + \chuckTABLEautorow + \else\ifnum\currentTABLEcolumn=\zerocount + \TABLEnoalign + {\globalletempty\checkTABLEautorow + \globalletempty\chuckTABLEautorow}% + \else + \setTABLEerror\TABLEmissingcolumn + \handleTABLEerror + \fi\fi + \complexorsimpleTable} % {#1} + +\def\TableHL{\doTableinterline{HL}} +\def\TableTB{\doTableinterline{TB}} + +\appendtoks\let\TB\TableTB \to\everytable +\appendtoks\let\TB\TabulateTB\to\everytabulate + \protect \endinput \ No newline at end of file diff --git a/tex/context/base/core-obj.tex b/tex/context/base/core-obj.tex index 8b1edaaff..82428db4f 100644 --- a/tex/context/base/core-obj.tex +++ b/tex/context/base/core-obj.tex @@ -2,14 +2,14 @@ %D [ file=core-obj, %D version=1998.01.15, %D title=\CONTEXT\ Core Macros, -%D subtitle=Object Handling, +%D subtitle=Object Handling, %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. +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. \writestatus{loading}{Context Core Macros / Object Handling} @@ -50,57 +50,57 @@ 31: obiect duplicat -- \stopmessages -%D \macros +%D \macros %D {setobject,getobject,ifinobject} %D %D Boxes can be considered reuable objects. Unfortunaltely once %D passed to the \DVI\ file, such objects cannot be reused. In %D \PDF\ however, reusing is possible and sometimes even a -%D necessity. Therefore, \CONTEXT\ supports reusable objects. -%D +%D necessity. Therefore, \CONTEXT\ supports reusable objects. +%D %D During the \TEX\ processing run, boxes can serve the purpose %D of objects, and the \DVI\ driver module implements objects -%D using packed boxes. -%D +%D using packed boxes. +%D %D The \PDF\ and \PDFTEX\ driver modules implement objects %D using \PDF\ forms. There is no (real) restriction on the -%D number of objects there. -%D +%D number of objects there. +%D %D The first application of objects in \CONTEXT\ concerned %D \METAPOST\ graphics and fill||in form fields. The first %D application can save lots of bytes, while the latter use is -%D more a necessity than byte saving. -%D +%D more a necessity than byte saving. +%D %D \starttypen %D \setobject{class}{name}\somebox{} %D \getobject{class}{name} %D \stoptypen -%D +%D %D Here \type{\somebox} can be whatever box specification suits %D \TEX. We save the dimensions of an object, although some %D drivers will do so themselves. This means that when for %D instance using \PDFTEX\ we could save a hash entry plus some %D 20+ memory locations per object by delegating this -%D housekeeping to the driver. The current approach permits -%D us to keep the box characteristic too. +%D housekeeping to the driver. The current approach permits +%D us to keep the box characteristic too. \newif\ifinobject \def\objectplaceholder{NOT YET FLUSHED}% -\def\presetobject#1#2% \global added +\def\presetobject#1#2% \global added {\blabelgroup - \ifundefined{\r!object#1::#2}% + \ifundefined{\r!object#1::#2}% \global\@EA\let\csname\r!object#1::#2\endcsname\objectplaceholder \fi \elabelgroup} \def\dosetobject#1#2#3% \initializepaper this will move to \everyshipout {\initializepaper - \blabelgroup - \ifundefined{\r!object#2::#3}% + \blabelgroup + \ifundefined{\r!object#2::#3}% \elabelgroup \expandafter\dodosetobject - \else % tzt, overload internal referenced objects to save entries + \else % tzt, overload internal referenced objects to save entries \elabelgroup \expandafter\gobblefivearguments \fi {#1}{#2}{#3}} @@ -112,22 +112,30 @@ %D Somehow there is a rounding error problem in either \PDFTEX\ %D or in viewers, or maybe it is conforming the specs. The next %D variable compensate for it by removing the rather tight -%D clip. +%D clip. \def\objectoffset{1cm} {} -\def\dodosetobject#1#2#3% +% \def\dodosetobject#1#2#3% +% {\bgroup +% \inobjecttrue +% \dowithnextbox{\dododosetobject{#1}{#2}{#3}\egroup}} + +\def\dodosetobject#1#2#3% {\bgroup + \globalpushmacro\crossreferenceobject \objectreferenced \inobjecttrue - \dowithnextbox{\dododosetobject{#1}{#2}{#3}\egroup}} + \dowithnextbox + {\globalpopmacro\crossreferenceobject + \dododosetobject{#1}{#2}{#3}\egroup}} \def\dododosetobject#1#2#3% {\blabelgroup \dontshowcomposition % rather fuzzy in \setxvalue ... \hbox - \scratchdimen\objectoffset + \scratchdimen\objectoffset \@EA\xdef\csname\r!object#2::#3\endcsname - {\noexpand\dohandleobject{#2}{#3}% + {\noexpand\dohandleobject{#2}{#3}% {\ifhbox\nextbox\hbox\else\vbox\fi}% %{\the\nextboxwd}{\the\nextboxht}{\the\nextboxdp}}% {\number\nextboxwd}{\number\nextboxht}{\number\nextboxdp}% @@ -151,13 +159,13 @@ % \def\dogetobject#1#2#3#4#5#6% % {\initializepaper -% \forgetall +% \forgetall % \dontshowcomposition % \setbox\scratchbox\vbox % {\doinsertobject{#1}{#2}}% % \setbox\scratchbox#3% -% {\vbox to #5\s!sp -% {\ifdim\ht\scratchbox>#5\s!sp +% {\vbox to #5\s!sp +% {\ifdim\ht\scratchbox>#5\s!sp % % or \ifdim\wd\scratchbox>#4\s!sp % \vss\hbox to #4\s!sp{\hss\box\scratchbox\hss}\vss % \else @@ -171,13 +179,13 @@ \def\dogetobject#1#2#3#4#5#6#7% {\initializepaper - \forgetall + \forgetall \dontshowcomposition \setbox\scratchbox\vbox {\doinsertobject{#1}{#2}}% \setbox\scratchbox#3% - {\vbox to #5\s!sp - {\ifdim\ht\scratchbox>#5\s!sp + {\vbox to #5\s!sp + {\ifdim\ht\scratchbox>#5\s!sp % or \ifdim\wd\scratchbox>#4\s!sp \vss\hbox to #4\s!sp{\hss\box\scratchbox\hss}\vss \else @@ -185,7 +193,7 @@ \fi}}% \scratchdimen#7\s!sp \setbox\nextbox\hbox - {\hskip-\scratchdimen\lower\scratchdimen\flushnextbox}% + {\hskip-\scratchdimen\lower\scratchdimen\flushnextbox}% \wd\scratchbox#4\s!sp \ht\scratchbox#5\s!sp \dp\scratchbox#6\s!sp @@ -198,15 +206,15 @@ %D \getobjectdimensions{class}{name} %D \stoptypen %D -%D The results are reported in \type {\objectwidth}, \type -%D {\objectheight} and \type {\objectdepth}. +%D The results are reported in \type {\objectwidth}, \type +%D {\objectheight} and \type {\objectdepth}. -% \def\dogetobjectdimensions#1#2#3#4#5#6% +% \def\dogetobjectdimensions#1#2#3#4#5#6% % {\def\objectwidth {#4\s!sp}% % \def\objectheight{#5\s!sp}% % \def\objectdepth {#6\s!sp}} -\def\dogetobjectdimensions#1#2#3#4#5#6#7% +\def\dogetobjectdimensions#1#2#3#4#5#6#7% {\def\objectwidth {#4\s!sp}% \def\objectheight{#5\s!sp}% \def\objectdepth {#6\s!sp}% @@ -219,31 +227,31 @@ \let\objectdepth \!!zeropoint \labelcsname\r!object#1::#2\endcsname} -%D Apart from this kind of objects, that have typeset content, -%D we can have low level driver specific objects. Both types -%D can have references to internal representations, hidden for -%D the user. We keep track of such references by means of a -%D dedicated cross reference mechanism. Normally, objects are -%D defined before they are used, but forward referencing -%D sometimes occurs. -%D +%D Apart from this kind of objects, that have typeset content, +%D we can have low level driver specific objects. Both types +%D can have references to internal representations, hidden for +%D the user. We keep track of such references by means of a +%D dedicated cross reference mechanism. Normally, objects are +%D defined before they are used, but forward referencing +%D sometimes occurs. +%D %D \starttypen %D \dosetobjectreference {class} {identifier} {reference value} {page} %D \dogetobjectreference {class} {identifier} \csname %D \stoptypen -%D +%D %D These commands are to be called by the \type{\startobject}, %D \type{\stopobject} and \type{\insertobject} specials. -\def\objectreferenced{\global\chardef\crossreferenceobject\plusone} +\def\objectreferenced{\global\chardef\crossreferenceobject\plusone} \def\driverreferenced{\global\chardef\crossreferenceobject\zerocount} \objectreferenced \def\checkobjectreferences {\startnointerference - \protectlabels + \protectlabels \doutilities{objectreferences}\jobname\empty\relax\relax \global\let\checkobjectreferences\relax \stopnointerference} @@ -271,9 +279,9 @@ {\writeutilitycommand{\objectreference{#1}{#2}{#3}{\noexpand\realfolio}}}% \dowritereference \fi - %\ifundefined{\r!driver#1::#2}% could have been be replaced ! + %\ifundefined{\r!driver#1::#2}% could have been be replaced ! \setxvalue{\r!driver#1::#2}{{#3}{\noexpand\realfolio}}% - %\fi % so no test ! ! ! ! (pdftex fails on undefined objects) + %\fi % so no test ! ! ! ! (pdftex fails on undefined objects) \elabelgroup} \def\dosetdriverreference @@ -305,7 +313,7 @@ %D \macros %D {doifobjectfoundelse,doifobjectreferencefoundelse} %D -%D To prevent redundant definition of objects, one can use +%D To prevent redundant definition of objects, one can use %D the next tests: %D %D \starttypen @@ -354,16 +362,16 @@ %D \macros %D {doifobjectssupportedelse} %D -%D Starting with reuse of graphics, we will implement object -%D reuse when possible. To enable mechanisms to determine +%D Starting with reuse of graphics, we will implement object +%D reuse when possible. To enable mechanisms to determine %D what method to use, we provide: %D %D \starttypen %D \doifobjectssupportedelse{true action}{false action} %D \stoptypen %D -%D As we can see, currently objects depend on the special -%D driver. +%D As we can see, currently objects depend on the special +%D driver. \newif\ifobjectssupported \objectssupportedtrue @@ -376,8 +384,8 @@ %D There is a conceptual problem here. Objects are not possible %D in \DVI, unless faked like in \type {spec-dvi}. This means -%D that we must be careful in loading special drivers that do -%D support objects while we still want to be able to use the -%D \DVI\ output. +%D that we must be careful in loading special drivers that do +%D support objects while we still want to be able to use the +%D \DVI\ output. -\protect \endinput +\protect \endinput diff --git a/tex/context/base/core-spa.tex b/tex/context/base/core-spa.tex index ce0683431..09823c6f7 100644 --- a/tex/context/base/core-spa.tex +++ b/tex/context/base/core-spa.tex @@ -1759,6 +1759,24 @@ % \widowpenalty=\defaultwidowpenalty\relax % \clubpenalty =\defaultclubpenalty \relax +\beginTEX widowpenalties clubpenalties interlinepenalties + + \newcount \widowpenalties + \newcount \clubpenalties + \newcount \interlinepenalties + +\endTEX + +% \setpenalties\widowpenalties2\maxdimen +% +% expands to \widowpenalty \maxdimen \maxdimen \zeropoint + +\def\setpenalties#1#2#3% + {#1\numexpr(#2+1)\space\doexpandedrecurse{\numexpr(#2)}{#3}\zeropoint\relax} + +\def\doexpandedrecurse#1#2% + {\ifnum#1>\zerocount#2\@EA\doexpandedrecurse\@EA{\the\numexpr(#1-1)}{#2}\fi} + \newif\ifgridsnapping % to be sure \def\defaultwidowpenalty {2000} % was: 1000 @@ -1767,19 +1785,63 @@ \def\defaultgridwidowpenalty {0} \def\defaultgridclubpenalty {0} -\def\synchronizecriteria - {\dosingleempty\dosynchronizecriteria} +% The original approach: +% +% \def\setdefaultpenalties +% {\ifgridsnapping +% \widowpenalty\defaultgridwidowpenalty +% \clubpenalty \defaultgridclubpenalty +% \else +% \widowpenalty\defaultwidowpenalty +% \clubpenalty \defaultclubpenalty +% \fi} +% +% However, we will use setups: -\def\dosynchronizecriteria[#1]% - {\ifgridsnapping - \widowpenalty\defaultgridwidowpenalty - \clubpenalty \defaultgridclubpenalty - \else - \widowpenalty\defaultwidowpenalty - \clubpenalty \defaultclubpenalty - \fi} +\def\setdefaultpenalties + {\setups[\systemsetupsprefix\s!default]} + +\startsetups [\systemsetupsprefix\v!reset] + \widowpenalties \minusone + \clubpenalties \minusone + \interlinepenalties \minusone +\stopsetups + +\startsetups [\systemsetupsprefix\s!default] + + \setups[\systemsetupsprefix\s!reset] + + \widowpenalty\defaultwidowpenalty + \clubpenalty \defaultclubpenalty + +\stopsetups + +\startsetups [\v!grid] [\systemsetupsprefix\s!default] + + \setups[\systemsetupsprefix\v!reset] + + \widowpenalty\defaultgridwidowpenalty + \clubpenalty \defaultgridclubpenalty + +\stopsetups + +% as an illustration: + +\startsetups [\systemsetupsprefix\v!streng] + + \setups[\v!reset] + + \setpenalties\widowpenalties2\maxdimen + \setpenalties\clubpenalties 2\maxdimen + \brokenpenalty \maxdimen + +\stopsetups + +\setdefaultpenalties % will happen later in \setuplayout + +% Suggested by GB (not the name -): -\synchronizecriteria +\def\rapfillskip{.5\hsize plus .092\hsize minus .5\hsize} % D.A.'s value % Bovendien definieren we enkele extra \fill's: diff --git a/tex/context/base/lang-ini.tex b/tex/context/base/lang-ini.tex index ad3d14a6d..caf6229d7 100644 --- a/tex/context/base/lang-ini.tex +++ b/tex/context/base/lang-ini.tex @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -%D Todo : --language=pl,en,nl : nl incs number of language +%D Todo : --language=pl,en,nl : nl incs number of language %D This module implements the (for the moment still simple) %D multi||language support of \CONTEXT, which should not be @@ -139,8 +139,8 @@ \newcounter\loadedlanguage %D Let's start with setting the lowercase code of quotes, so -%D that we get proper hyphenation in languages like Dutch, -%D French and Czech. +%D that we get proper hyphenation in languages like Dutch, +%D French and Czech. \lccode`\'=`\' @@ -157,7 +157,7 @@ \def\setupcurrentlanguage[#1]{\def\currentlanguage{#1}} -%D The internal macros will be defined later. +%D The internal macros will be defined later. %D \macros %D {installlanguage} @@ -299,7 +299,7 @@ \def\installlanguage {\dodoubleargument\doinstalllanguage} -%D Handy +%D Handy \def\preloadallpatterns {\gdef\preloadallpatterns##1% @@ -333,7 +333,7 @@ \let\normalpatterns\patterns -\def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr +\def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr {\normallanguage\loadedlanguage % when not really needed %\letvalue{\??la\??la#2}\loadedlanguage \bgroup @@ -370,14 +370,14 @@ \egroup \increment\loadedlanguage} -%D Since we can only load patterns in ini\TeX, we nil the -%D loading before dumping (which saves a bit of memory, but -%D strangely enough not in the format). +%D Since we can only load patterns in ini\TeX, we nil the +%D loading before dumping (which saves a bit of memory, but +%D strangely enough not in the format). -\appendtoks +\appendtoks \gdef\doloadpatterns{\increment\loadedlanguage\gobbletwoarguments}% \globallet\dodoloadpatterns\gobblefourarguments -\to \everydump +\to \everydump %D \macros %D {setuplanguage} @@ -390,7 +390,7 @@ {\dodoubleargument\dosetuplanguage} \def\dosetuplanguage[#1][#2]% - {\getparameters[\??la#1][#2]% + {\getparameters[\??la#1][#2]% \doif{#1}\currentlanguage\docomplexlanguage} %D The values \type {\c!leftsentence} and \type @@ -493,6 +493,9 @@ \newevery \everylanguage \relax \newevery \everyresetlanguagespecifics \relax +\def\disablelanguagespecifics + {\ignorecompoundcharacter} + \def\setnormallanguage#1% {\dosetnormallanguage{:\currentencoding:\currentmapping:}{#1}{% \dosetnormallanguage{:\currentencoding:\s!default :}{#1}{% @@ -503,7 +506,7 @@ {\edef\currentdefaultlanguage{\defaultlanguage\currentlanguage}% \def\synchronizepatterns{\setnormallanguage {\csname\??la\currentlanguage\s!patterns\endcsname}}% called often - \donefalse + \donefalse \synchronizepatterns \ifdone\else \def\synchronizepatterns{\setnormallanguage\currentlanguage}% @@ -520,16 +523,16 @@ \fi \fi \fi - \the\everylanguage + \the\everylanguage \enablelanguagespecifics[\currentlanguage]% -% strange, what is this doing here, dangerous for {il2,ec} +% strange, what is this doing here, dangerous for {il2,ec} % \edef\languagemapping{\csname\??la\currentlanguage\s!mapping\endcsname}% % \ifx\languagemapping\empty\else % \fastenablemapping\languagemapping % \fi \lefthyphenmin 0\csname\??la\currentlanguage\s!lefthyphenmin \endcsname \righthyphenmin0\csname\??la\currentlanguage\s!righthyphenmin\endcsname\relax - % will be definable + % will be definable \doifelsevalue{\??la\currentlanguage\c!spatiering}\v!ruim \nonfrenchspacing\frenchspacing} @@ -541,15 +544,15 @@ \beginETEX -\def\complexlanguage[#1]% - {\edef\askedlanguage{#1}% +\def\complexlanguage[#1]% + {\edef\askedlanguage{#1}% \ifx\askedlanguage\empty \else \ifcsname\l!prefix!\askedlanguage\endcsname \edef\askedlanguage{\csname\l!prefix!\askedlanguage\endcsname}% \ifx\currentlanguage\askedlanguage \else \let\currentlanguage\askedlanguage \docomplexlanguage - \fi + \fi \else \showmessage\m!linguals6{#1}% \fi @@ -569,7 +572,7 @@ \ifx\currentlanguage\askedlanguage \else \let\currentlanguage\askedlanguage \docomplexlanguage - \fi + \fi \fi \fi} @@ -589,8 +592,8 @@ \ifx\currentmainlanguage\askedlanguage \else \let\currentmainlanguage\askedlanguage \let\currentlanguage\askedlanguage - \docomplexlanguage - \fi + \docomplexlanguage + \fi \fi \fi} @@ -606,8 +609,8 @@ \ifx\currentmainlanguage\askedlanguage \else \let\currentmainlanguage\askedlanguage \let\currentlanguage\askedlanguage - \docomplexlanguage - \fi + \docomplexlanguage + \fi \fi \fi} @@ -641,7 +644,7 @@ \def\languageparameter#1% {\csname\??la\defaultlanguage\currentlanguage#1\endcsname} -% moved +% moved % % %D \macros % %D {leftguillemot,rightguillemot,leftsubguillemot,rightsubguillemot, @@ -671,36 +674,36 @@ % %D % %D But in other fonts, these definitions can give problems, so % %D we just say: -% +% % \def\lowerleftsingleninequote {,} % \def\lowerleftdoubleninequote {,,} % \def\upperleftsingleninequote {'} % \def\upperleftdoubleninequote {''} % \def\upperleftsinglesixquote {`} % \def\upperleftdoublesixquote {``} -% +% % \def\lowerrightsingleninequote {,} % \def\lowerrightdoubleninequote {,,} % \def\upperrightsingleninequote {'} % \def\upperrightdoubleninequote {''} % \def\upperrightsinglesixquote {`} % \def\upperrightdoublesixquote {``} -% +% % %D Yes I know, they are ugly: -% +% % \def\leftfakeguillemot % {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle\ll$}}} -% +% % \def\rightfakeguillemot % {\hbox{\raise.25ex\hbox{$\scriptscriptstyle\gg$}}} -% +% % \def\leftsubfakeguillemot % {\dontleavehmode\hbox{\raise.25ex\hbox{$\scriptscriptstyle<$}}} -% +% % \def\rightsubfakeguillemot % {\hbox{\raise.25ex\hbox{$\scriptscriptstyle>$}}} -%D New (see nomarking and nolist): +%D New (see nomarking and nolist): \def\splitsequence#1#2% {\doifelse{#1}\v!nee @@ -825,7 +828,7 @@ % \bgroup \normallanguage255 \patterns{} \egroup % \def\nopatterns{\normallanguage255 } -\def\nopatterns{\normallanguage\minusone} +\def\nopatterns{\normallanguage\minusone} %D We default to the language belonging to the interface. This %D is one of the few places outside the interface modules where diff --git a/tex/context/base/mult-con.tex b/tex/context/base/mult-con.tex index d1b3553ec..7c26c04f1 100644 --- a/tex/context/base/mult-con.tex +++ b/tex/context/base/mult-con.tex @@ -1063,6 +1063,9 @@ proces: proces process sectienummer: sectienummer sectionnumber abschnittsnummer cislooddilu numerosezione numarsectiune +setups: setups setups + setups setups + setups setups snijwit: snijwit cutspace cutspace cutspace cutspace cutspace % GB diff --git a/tex/context/base/mult-sys.tex b/tex/context/base/mult-sys.tex index 5f799f39b..4a726a15d 100644 --- a/tex/context/base/mult-sys.tex +++ b/tex/context/base/mult-sys.tex @@ -379,6 +379,7 @@ \definesystemvariable {de} % DEel \definesystemvariable {dl} % DunneLijnen \definesystemvariable {dn} % DoorNummeren +\definesystemvariable {dm} % DefineMeasure \definesystemvariable {do} % DefinieerOpmaak \definesystemvariable {du} % DUmmy \definesystemvariable {ds} % DoorSpringen diff --git a/tex/context/base/page-ini.tex b/tex/context/base/page-ini.tex index e7cded9e8..3100aded7 100644 --- a/tex/context/base/page-ini.tex +++ b/tex/context/base/page-ini.tex @@ -2,7 +2,7 @@ %D [ file=page-ini, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, -%D subtitle=Initializations, +%D subtitle=Initializations, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] @@ -11,20 +11,20 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\writestatus{loading}{Context Page Macros / Initializations} +\writestatus{loading}{Context Page Macros / Initializations} -%D This class of modules implements the output routines and -%D floating body support. Although the modules are relatively -%D new, the code herein is rather old. This reordering was -%D needed when column sets were implemented and sharing code -%D started to make sense. +%D This class of modules implements the output routines and +%D floating body support. Although the modules are relatively +%D new, the code herein is rather old. This reordering was +%D needed when column sets were implemented and sharing code +%D started to make sense. -%D The history shows from the code, since both column -%D mechanism use a different way of looping over columns. +%D The history shows from the code, since both column +%D mechanism use a different way of looping over columns. \unprotect -% message will be distributed +% message will be distributed \startmessages dutch library: systems title: systeem @@ -317,7 +317,7 @@ title: layout 1: teksthøyde tilpasset med -- på side -- 2: -- ganger forskjøvet tekst plassert - 3: -- ganger tekst forskjøvet + 3: -- ganger tekst forskjøvet 4: margblokker aktive 5: margblokker inaktive 6: delside sett -- behandlet (størrelse --) @@ -331,7 +331,7 @@ title: aranjamente 1: textheight adaptat cu -- la pagina -- 2: textul amanat de -- ori a fost plasat - 3: textul amanat de -- ori + 3: textul amanat de -- ori 4: blocuri marginale active 5: blocuri marginale inactive 6: setul -- de subpagini procesat (dimensiunea --) @@ -351,14 +351,14 @@ \let \recalculatelayout \relax -\fi +\fi \ifx\recalculatelogos\undefined \let \recalculatelogos \relax \let \addlogobackground \gobbleoneargument % -\fi +\fi \ifx\recalculatebackgrounds\undefined @@ -369,18 +369,18 @@ \let \addprintbackground \gobbleoneargument % \let \addstatusinfo \gobbleoneargument % -\fi +\fi \ifx\realpageno\undefined \countdef\realpageno\zerocount \realpageno\plusone -\fi +\fi -\ifx\realfolio\undefined +\ifx\realfolio\undefined + + \def\realfolio{\the\realpageno} - \def\realfolio{\the\realpageno} - \fi \newcount\nofshipouts @@ -388,7 +388,7 @@ \appendtoks \global\advance\nofshipouts\plusone \to \everyaftershipout - + % principle: % % multiple otr's @@ -507,7 +507,7 @@ 9: kontrola nerovnost 10: zbyl (mene nez) 1 radek 11: plovouci objekt je pro sloupec prilis siroky - 12: plovouci objekt je presunut do nasledujiciho sloupce / -- + 12: plovouci objekt je presunut do nasledujiciho sloupce / -- 13: siroky plovouci objekt je presunut nad sloupce \stopmessages @@ -562,26 +562,26 @@ 13: blocul lat este mutat in partea de sus a coloanelor \stopmessages -\ifx\dosetuplayout\undefined % overloaded in page-lay ! +\ifx\dosetuplayout\undefined % overloaded in page-lay ! \def\setuplayout{\dodoubleempty\getparameters[\??ly]} -\fi +\fi -%D In case we're not running \ETEX, we need to bypass a -%D couple of primitives. +%D In case we're not running \ETEX, we need to bypass a +%D couple of primitives. \beginTEX \...discards \chardef \savingvdiscards \zerocount - \let \splitdiscards \relax - \let \pagediscards \relax + \let \splitdiscards \relax + \let \pagediscards \relax \endTEX -% ONE = single column +% ONE = single column % MUL = multi column -% SET = columns sets +% SET = columns sets \def\@@OTR{OTR} @@ -593,8 +593,8 @@ {\csname\@@OTR \ifcsname\@@OTR\OTRidentifier\strippedcsname#1\endcsname \OTRidentifier - \else\ifcsname\@@OTR\OTRdefault\strippedcsname#1\endcsname % fallback - \OTRdefault + \else\ifcsname\@@OTR\OTRdefault\strippedcsname#1\endcsname % fallback + \OTRdefault \fi\fi \strippedcsname#1\endcsname} @@ -605,7 +605,7 @@ \def\OTRcommand#1% {\csname\@@OTR \@EA\ifx\csname\@@OTR\OTRidentifier\strippedcsname#1\endcsname\relax - \@EA\ifx\csname\@@OTR\OTRdefault\strippedcsname#1\endcsname\relax % fallback + \@EA\ifx\csname\@@OTR\OTRdefault\strippedcsname#1\endcsname\relax % fallback \else \OTRdefault \fi @@ -616,7 +616,7 @@ \endTEX -% obsolete +% obsolete \def\installotr#1% andere naam, beter \connectotr of zo {\def\OTRidentifier{#1}} @@ -626,7 +626,7 @@ \def\OTRdefault {#2}} %D The initialization of the \type {\hsize} and \type {\vsize} -%D depends on the OTR used. +%D depends on the OTR used. \def\setvsize {\OTRcommand\setvsize} \def\sethsize {\OTRcommand\sethsize} @@ -642,7 +642,7 @@ \def\doflushfloats {\OTRcommand\doflushfloats} \def\flushfloatbox {\OTRcommand\flushfloatbox} \def\docheckiffloatfits {\OTRcommand\docheckiffloatfits} - + \def\someherefloat {\OTRcommand\someherefloat} \def\somefixdfloat {\OTRcommand\somefixdfloat} \def\somepagefloat {\OTRcommand\somepagefloat} @@ -655,19 +655,19 @@ \def\synchronizehsize {\OTRcommand\synchronizehsize} \def\gotonextpage {\OTRcommand\gotonextpage } -\def\gotonextpageX {\OTRcommand\gotonextpageX} % will become obsolete +\def\gotonextpageX {\OTRcommand\gotonextpageX} % will become obsolete -% beter een \installotr#1 met #1 = macro en auto test +% beter een \installotr#1 met #1 = macro en auto test -\newif \iftraceotr +\newif \iftraceotr \newif \ifinotr -\newtoks \mainoutput -\newcount\otrlevel +\newtoks \mainoutput +\newcount\otrlevel -% When issuing two \par\penalty-\@M's, only the first -% triggers the otr; obscure feature or optimization? +% When issuing two \par\penalty-\@M's, only the first +% triggers the otr; obscure feature or optimization? -\def\outputcounter{-100010} % -10010 +\def\outputcounter{-100010} % -10010 \def\doinvokeoutput {\iftraceotr @@ -685,15 +685,15 @@ \outputmessage-{special}{#1}} \def\dodotracedoutput#1% - {\outputmessage+{traced}{#1/\the\outputpenalty}% + {\outputmessage+{traced}{#1/\the\outputpenalty}% \writestatus\m!otr{c:\number\mofcolumns,v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}% \dodoinvokeoutput{#1}% \writestatus\m!otr{c:\number\mofcolumns,v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}% \outputmessage-{traced}{#1/\the\outputpenalty}} -\def\installoutput#1#2% \invoke \action +\def\installoutput#1#2% \invoke \action {\decrement\outputcounter - \edef#1{\noexpand\doinvokeoutput{\outputcounter}}% + \edef#1{\noexpand\doinvokeoutput{\outputcounter}}% \setvalue{\@@OTR\outputcounter}{#2}} \def\invokeoutputroutine @@ -708,30 +708,33 @@ \mainoutput{\invokeoutputroutine} \output{\inotrtrue\the\mainoutput} -\installoutput\synchronizeoutput % maybe add pagediscards +\installoutput\synchronizeoutput % maybe add pagediscards {\ifvoid\normalpagebox\else\unvbox\normalpagebox\fi} + +\installoutput\discardpage + {\setbox\scratchbox\box\normalpagebox} -%D In order to force consistent use of variables, we -%D predefine a lot of them here. +%D In order to force consistent use of variables, we +%D predefine a lot of them here. -%D The next two registers can be used to store pre column -%D material as well as footnotes or so. +%D The next two registers can be used to store pre column +%D material as well as footnotes or so. \newbox\precolumnbox \newdimen\precolumnboxheight \newbox\postcolumnbox \newdimen\postcolumnboxheight -%D We reserve a counter for the number of columns as well as -%D the current column. Both are not to be changed by users! +%D We reserve a counter for the number of columns as well as +%D the current column. Both are not to be changed by users! \newcount\nofcolumns \nofcolumns = 1 \newcount\mofcolumns \mofcolumns = 1 -\chardef\maxnofcolumns = 50 +\chardef\maxnofcolumns = 50 \chardef\allocatednofcolumns = 0 -%D The next dimensions reports the final column height +%D The next dimensions reports the final column height -\newdimen\finalcolumnheights +\newdimen\finalcolumnheights \newcount\finalcolumnlines %D During initialization the temporary boxes are allocated. @@ -796,7 +799,7 @@ %D and only parameter can do something with \type %D {\currentcolumnbox}. In case of the mid columns, \type %D {\firstcolumnbox} and \type {\lastcolumnbox} are handled -%D outside these macro's. +%D outside these macro's. \def\dohandlecolumn#1% {\mofcolumns\recurselevel @@ -811,20 +814,20 @@ \def\dohandlemidcolumns#1% {\dohandleallcolumns - {\ifnum\recurselevel>\plusone + {\ifnum\recurselevel>\plusone \ifnum\recurselevel<\nofcolumns \dohandlecolumn{#1}% \fi \fi}} -%D This register can be used as a temporary storage for page -%D content. +%D This register can be used as a temporary storage for page +%D content. \newbox\restofpage %D Features. -\newif\ifintermediatefootnotes +\newif\ifintermediatefootnotes \newif\ifcarryoverfootnotes %\carryoverfootnotestrue \newif\iflastcolumnfootnotes %\lastcolumnfootnotestrue \newif\ifbalancecolumns %\balancecolumnstrue @@ -834,11 +837,11 @@ \newif\ifinheritcolumns \inheritcolumnsfalse \newif\ifheightencolumns \heightencolumnsfalse -\newif\ifbalancingcolumns -\newif\ifcollectingcontent +\newif\ifbalancingcolumns +\newif\ifcollectingcontent \newif\ifcolumnoverflow \newif\iffinalflushingfloats -\newif\ifpackflushedfloats \packflushedfloatstrue % for the moment +\newif\ifpackflushedfloats \packflushedfloatstrue % for the moment \newdimen\intercolumnwidth \newdimen\localcolumnwidth @@ -857,18 +860,18 @@ %D The \type {\ifdim} test is needed, because otherwise the %D last line of a text end up on top of the baseline instead of -%D on the baseline, as is the case with preceding pages. -%D Also, a \type {\vfil} better than a \type {\vfill}. +%D on the baseline, as is the case with preceding pages. +%D Also, a \type {\vfil} better than a \type {\vfill}. -\def\eject {\par\penalty-\@M } % == {\par\break} % plain -\def\supereject {\par\penalty-\@MM} % also plain +\def\eject {\par\penalty-\@M } % == {\par\break} % plain +\def\supereject {\par\penalty-\@MM} % also plain \def\doejectpage {\par\ifdim\pagetotal>\pagegoal\else\normalvfil\fi} \def\ejectpage {\doejectpage\eject} \def\superejectpage{\doejectpage\supereject} -% floats -% +% floats +% % \def\ejectinsert % {\flushnotes % \bgroup @@ -882,18 +885,18 @@ \bgroup \noftopfloats\plusthousand \nofbotfloats\zerocount - % this is needed in case a float that has been stored - % ends up at the current page; this border case occurs when + % this is needed in case a float that has been stored + % ends up at the current page; this border case occurs when % the calculated room is 'eps' smaller that the room available - % when just flushing; so now we have (maybe optional): + % when just flushing; so now we have (maybe optional): \pagebaselinecorrection % alas, this is tricky but needed (first surfaced in prikkels) \doflushfloats \egroup} \def\ejectdummypage - {\ejectinsert - \hardespatie % will be different + {\ejectinsert + \hardespatie % will be different \vfill \gotonextpage} @@ -907,13 +910,13 @@ \unvbox\normalpagebox \penalty\outputpenalty \fi - % not really needed, replaced by \flushsavedfloats + % not really needed, replaced by \flushsavedfloats \ifnum\outputpenalty>-\@MM \else % better use a proper otr signal - \dosupereject + \dosupereject \fi - % but does not hurt either + % but does not hurt either \inpagebodytrue % needed for enabling \blanko ! - \flushsavedfloats % was \dosetbothinserts; only otr one ! + \flushsavedfloats % was \dosetbothinserts; only otr one ! \setvsize % this is needed for interacting components, like floats and multicolumns \adaptfuzzypagegoal} % watch this hack! @@ -937,7 +940,7 @@ \setpagecounters \message{[-\the\realpageno]}% \setbox\scratchbox\hbox - {%\the\everyshipout % still needed here ? + {%\the\everyshipout % still needed here ? \dopagebody#1#2}% \deadcycles\zerocount \gotonextrealpage @@ -966,17 +969,17 @@ \ifnum\outputpenalty>-\@MM \else \dosupereject \fi - \doflushspread + \doflushspread \douitstellen} -\ifx\doflushspread\undefined \let\doflushspread\relax \fi +\ifx\doflushspread\undefined \let\doflushspread\relax \fi \def\dooutput {\finaloutput\unvbox\normalpagebox} \maxdeadcycles=1000 -% will be installable tracer; better use chardef +% will be installable tracer; better use chardef \newif\ifvoorlopig \voorlopigfalse @@ -990,16 +993,16 @@ \def\plaatsversieaanduiding% nog engels maken {\ifcase\conceptmode - % nothing - \or - % simple + % nothing + \or + % simple \vskip\!!sixpoint \hbox to \zetbreedte {\infofont Concept: \currentdate \hss\reportpagedimensions}% - \or - % extensive + \or + % extensive \vskip\!!sixpoint \hbox to \zetbreedte {\infofont @@ -1019,10 +1022,10 @@ \overfullrule\zeropoint \processaction % \v!definitief=> [#1] - [ \v!concept=>\chardef\conceptmode\plusone,% simple banner - \v!file=>\chardef\conceptmode\plustwo,% full banner - \v!voorlopig=>\chardef\conceptmode\plustwo % full banner plus - \overfullrule5\s!pt]} % info in the margin + [ \v!concept=>\chardef\conceptmode\plusone,% simple banner + \v!file=>\chardef\conceptmode\plustwo,% full banner + \v!voorlopig=>\chardef\conceptmode\plustwo % full banner plus + \overfullrule5\s!pt]} % info in the margin \def\versie {\dosingleargument\doversie} @@ -1030,14 +1033,14 @@ %\def\addstatusinfo % {\ifvoorlopig % \@EA\doaddstatusinfo -% \else\ifcase\conceptmode +% \else\ifcase\conceptmode % \@EAEAEA\gobbleoneargument % \else % \@EAEAEA\doaddstatusinfo % \fi\fi} \def\addstatusinfo - {\ifcase\conceptmode + {\ifcase\conceptmode \@EA\gobbleoneargument \else \@EA\doaddstatusinfo @@ -1045,12 +1048,12 @@ \def\doaddstatusinfo#1% {\setbox#1\vbox to \papierhoogte - {\vsmashbox#1\box#1% + {\vsmashbox#1\box#1% \offinterlineskip - \vskip\kopwit + \vskip\kopwit \hsize\papierbreedte \hfill\hbox{\plaatstestinfo\hskip.5cm}\vss - \settexthoffset\hskip\texthoffset % brrrr + \settexthoffset\hskip\texthoffset % brrrr %\tlap{\plaatsversieaanduiding}\vskip.5cm}} \vbox to 1cm{\vss\plaatsversieaanduiding\vss}}} @@ -1062,7 +1065,7 @@ {#2 \ascii}% \gdef\totaltestinfo {\global\setbox#1\vbox - {\unvbox#1\relax + {\unvbox#1\relax \infofont \setupinterlinespace \hbox {\strut @@ -1079,9 +1082,9 @@ % this will be inserts some day -% \installinsertion\referentieinfobox -% \installinsertion\registerinfobox -% \installinsertion\floatinfobox +% \installinsertion\referentieinfobox +% \installinsertion\registerinfobox +% \installinsertion\floatinfobox \newbox\referentieinfobox \newbox\registerinfobox @@ -1125,12 +1128,12 @@ \newif\ifinpagebody -\ifx\pushcolor\undefined +\ifx\pushcolor\undefined \let \pushcolor \relax \let \popcolor \relax \let \startcolorpage \relax \let \stopcolorpage \relax -\fi +\fi % bewaren tvb documentatie % @@ -1166,7 +1169,7 @@ \newtoks\afterpage \newtoks\aftereverypage \newtoks\beforepage \newtoks\beforeeverypage -\chardef\showgridstate=0 +\chardef\showgridstate=0 \def\showgrid {\dosingleempty\doshowgrid} @@ -1198,21 +1201,21 @@ \newif\ifpagebodyornaments \pagebodyornamentstrue \newif\ifarrangingpages \arrangingpagesfalse -\appendtoks +\appendtoks \global\pagebodyornamentstrue -\to \everyaftershipout +\to \everyaftershipout \let\poparrangedpages\relax \let\pusharrangedpage\relax -\ifx\shiftprintpagebox\undefined +\ifx\shiftprintpagebox\undefined \let\shiftprintpagebox\gobbleoneargument \let\shiftpaperpagebox\gobbleoneargument -\fi +\fi \ifx\registerpageposition\undefined \let\registerpageposition\gobbleoneargument -\fi +\fi \def\reportarrangedpage#1% {\showmessage\m!systems @@ -1221,7 +1224,7 @@ \newif\ifsavepagebody \newbox\savedpagebody % \def\buildpagebody#1#2% -% {\ifsavepagebody\global\setbox\savedpagebody\fi +% {\ifsavepagebody\global\setbox\savedpagebody\fi % \vbox % {\beginrestorecatcodes % \forgetall % igv problemen, check: \boxmaxdepth\maxdimen @@ -1233,14 +1236,14 @@ % % \getbackgroundbox % % \getlogobox % \bgroup % else footnotes get inconsistent font/baseline -% % \doconvertfont\@@lyletter\empty +% % \doconvertfont\@@lyletter\empty % \dostartattributes\??ly\c!letter\c!kleur\empty -% \offinterlineskip +% \offinterlineskip % \gettextboxes % \dostopattributes % \egroup % \fi -% \getmainbox#1#2}% including footnotes +% \getmainbox#1#2}% including footnotes % \ifpagebodyornaments % \addmainbackground \pagebox % \addlogobackground \pagebox @@ -1251,16 +1254,16 @@ % \addpagebackground \pagebox % \fi % \registerpageposition\pagebox -% \ifarrangingpages +% \ifarrangingpages % \shiftpaperpagebox \pagebox % \v!papier % \else % \clippagebox \pagebox -% \addpagecutmarks \pagebox +% \addpagecutmarks \pagebox % \replicatepagebox \pagebox % \scalepagebox \pagebox % \mirrorpaperbox \pagebox % \rotatepaperbox \pagebox -% \addpagecolormarks \pagebox +% \addpagecolormarks \pagebox % \centerpagebox \pagebox % \addprintbackground\pagebox % \mirrorprintbox \pagebox @@ -1273,12 +1276,12 @@ % \endrestorecatcodes}% % \ifsavepagebody\copy\savedpagebody\fi} -% beware, \??ly is used before defined, i.e. bad module design +% beware, \??ly is used before defined, i.e. bad module design \setuplayout[\c!methode=\v!normaal] \def\buildpagebody#1#2% - {\ifsavepagebody\global\setbox\savedpagebody\fi + {\ifsavepagebody\global\setbox\savedpagebody\fi \vbox {\beginrestorecatcodes \forgetall % igv problemen, check: \boxmaxdepth\maxdimen @@ -1287,22 +1290,22 @@ % the following plugin uses and sets pagebox; beware: this % will change and is for my (hh) personal experiments \executeifdefined{\??ly\c!methode\@@lymethode}% - {\getvalue{\??ly\c!methode\v!normaal}}#1#2% - % the finishing touch + {\getvalue{\??ly\c!methode\v!normaal}}#1#2% + % the finishing touch \ifpagebodyornaments \addpagebackground \pagebox \fi \registerpageposition\pagebox - \ifarrangingpages + \ifarrangingpages \shiftpaperpagebox \pagebox % \v!papier \else \clippagebox \pagebox - \addpagecutmarks \pagebox + \addpagecutmarks \pagebox \replicatepagebox \pagebox \scalepagebox \pagebox \mirrorpaperbox \pagebox \rotatepaperbox \pagebox - \addpagecolormarks \pagebox + \addpagecolormarks \pagebox \centerpagebox \pagebox \addprintbackground\pagebox \mirrorprintbox \pagebox @@ -1321,12 +1324,12 @@ \ifpagebodyornaments \bgroup % else footnotes get inconsistent font/baseline \dostartattributes\??ly\c!letter\c!kleur\empty - \offinterlineskip + \offinterlineskip \gettextboxes \dostopattributes \egroup \fi - \getmainbox#1#2}% including footnotes + \getmainbox#1#2}% including footnotes \ifpagebodyornaments \addmainbackground \pagebox \addlogobackground \pagebox @@ -1336,7 +1339,7 @@ \def\finishpagebox#1% {\ifarrangingpages - \addpagecutmarks #1% + \addpagecutmarks #1% \addpagecolormarks#1% \centerpagebox #1% \mirrorprintbox #1% @@ -1348,8 +1351,12 @@ \appendtoks \restoreglobalbodyfont \to \everybeforepagebody \appendtoks \restorecolumnsettings \to \everybeforepagebody +\ifx\nestednewbox\undefined \newbox\nestednextbox \fi + +\prependtoks \let\nextbox\nestednextbox \to \everybeforepagebody + \def\dopagebody#1#2% - {%\getallmarks % now in following token register + {%\getallmarks % now in following token register \the\everybeforepagebody \startcolorpage \gotonextsubpage % nog eens: als in pagina (tbv standaard opmaak) @@ -1374,7 +1381,7 @@ \let\checkpageversion=\relax -% not here +% not here \newif\ifpaginageblokkeerd \paginageblokkeerdfalse @@ -1382,9 +1389,9 @@ {\dodoubleempty\dotestpage} \def\dotestpage[#1][#2]% - {%\relax % needed before \if + {%\relax % needed before \if \endgraf - \ifpaginageblokkeerd \else \ifdim\pagegoal<\maxdimen + \ifpaginageblokkeerd \else \ifdim\pagegoal<\maxdimen \ifdim\pagetotal<\pagegoal % \relax \scratchdimen\lineheight \multiply\scratchdimen#1\relax @@ -1395,11 +1402,11 @@ \ifsecondargument \advance\scratchdimen#2\relax \fi - % quite inaccurate, better pagegoal 1pt or so - \ifdim\scratchdimen>.99\pagegoal + % quite inaccurate, better pagegoal 1pt or so + \ifdim\scratchdimen>.99\pagegoal \penalty-\!!tenthousand\relax \fi - \fi + \fi \else \goodbreak \fi \fi} @@ -1413,16 +1420,16 @@ \ifdim\pagegoal<\maxdimen \ifdim\pagetotal<\pagegoal % \relax \scratchdimen\pagegoal \advance\scratchdimen-\pagetotal - \ifdim\lastskip<\parskip - \advance\scratchdimen \parskip + \ifdim\lastskip<\parskip + \advance\scratchdimen \parskip \fi \ifsecondargument \advance\scratchdimen#2% \fi - \getrawnoflines\scratchdimen % raw ! - % \message{[\number#1>\number\noflines ?}\wait + \getrawnoflines\scratchdimen % raw ! + % \message{[\number#1>\number\noflines ?}\wait \ifnum#1>\noflines - \column + \column \fi \else \penalty-\!!tenthousand % untested ! ! \column @@ -1432,7 +1439,7 @@ % was: \resetsectionmarks\firstsection, zie \handelpaginaaf -\def\page {\pagebreak} % the short form of \pagebreak (mult-com one) +\def\page {\pagebreak} % the short form of \pagebreak (mult-com one) \def\pagina{\pagebreak} % for the moment, keep this one \def\resetpagebreak @@ -1458,9 +1465,9 @@ {\flushnotes \executepagebreakhandler\v!ja} -\def\complexpagebreak[#1]% if empty, do nothing and avoid processing, - {\flushnotes % see head's; watch how we group - \doifsomething{#1}{\bgroup\executepagebreakhandlers{#1}\egroup}} +\def\complexpagebreak[#1]% if empty, do nothing and avoid processing, + {\flushnotes % see head's; watch how we group + \doifsomething{#1}{\bgroup\executepagebreakhandlers{#1}\egroup}} \def\executepagebreakhandlers#1% {\processcommacommand[#1]\executepagebreakhandler} @@ -1493,13 +1500,13 @@ \installpagebreakhandler \v!ja {\ifpaginageblokkeerd\else \ejectinsert - \gotonextpage - \ifbinnenkolommen % this will move to MUL + \gotonextpage + \ifbinnenkolommen % this will move to MUL \ejectpage % anders soms geen overgang \fi \fi} -\installpagebreakhandler \v!opmaak % ?? +\installpagebreakhandler \v!opmaak % ?? {\ifpaginageblokkeerd\else \eject \fi} @@ -1514,7 +1521,7 @@ \installpagebreakhandler \v!voorkeur {\ifpaginageblokkeerd\else - \ifbinnenkolommen % this will move to MUL + \ifbinnenkolommen % this will move to MUL \dosomebreak\goodbreak \else \testpage[3][\zeropoint]% @@ -1569,7 +1576,7 @@ \doifoddpageelse \donothing{\resetcurrentsectionmarks\ejectdummypage}} -\installpagebreakhandler \v!viertal % not yet ok inside columnsets +\installpagebreakhandler \v!viertal % not yet ok inside columnsets {\ifdubbelzijdig \!!counta\realpageno \!!countb\realpageno @@ -1596,7 +1603,7 @@ \od \filluparrangedpages} -% nb: \executepagebreakhandler\v!hoofd in other ones +% nb: \executepagebreakhandler\v!hoofd in other ones \installpagebreakhandler \v!hoofd {\doifnotvalue{\??tk\v!hoofd\c!status}\v!stop @@ -1609,14 +1616,14 @@ % \definepagebreak % [chapter] % [yes,header,right] -% +% % \setuphead % [chapter] % [page=chapter, % header=empty, % footer=chapter] -% public page handler, beware: definepage already in use (core-ref) +% public page handler, beware: definepage already in use (core-ref) % % \definepagebreak[instance][forsure] % \definepagebreak[forsure][yes,+4] @@ -1634,10 +1641,10 @@ % \setupbackgrounds[state=repeat] % \setupbackgrounds[text][text][background=whatever] % \couplepage[chapter][before={\defineoverlay[whatever][ON]}] -% \setuphead[chapter][before={\pagetype[chapter]}] -% \chapter{First} \page test \chapter{second} \page test +% \setuphead[chapter][before={\pagetype[chapter]}] +% \chapter{First} \page test \chapter{second} \page test -\long\def\installcolumnbreakhandler#1#2#3% #1=otr-id #2=tag +\long\def\installcolumnbreakhandler#1#2#3% #1=otr-id #2=tag {\long\setvalue{\??cn:#1:#2}{#3}} \def\definecolumnbreak @@ -1658,12 +1665,12 @@ {\executecolumnbreakhandler\v!ja} \def\complexcolumnbreak[#1]% if empty, do nothing and avoid processing - {\doifsomething{#1}{\executecolumnbreakhandlers{#1}}} + {\doifsomething{#1}{\executecolumnbreakhandlers{#1}}} \def\executecolumnbreakhandlers#1% {\processcommacommand[#1]\executecolumnbreakhandler} -\def\executecolumnbreakhandler#1% here no commalist +\def\executecolumnbreakhandler#1% here no commalist {\edef\@@columnspecification{#1}% \doifdefinedelse{\??cn:\OTRidentifier:\@@columnspecification} {\getvalue{\??cn:\OTRidentifier:\@@columnspecification}} @@ -1687,12 +1694,12 @@ \let\ignorerestoftext\donothing -\prependtoks % only ignore in a symmetrical doc - \globallet\ignorerestoftext\doignorerestoftext +\prependtoks % only ignore in a symmetrical doc + \globallet\ignorerestoftext\doignorerestoftext \to \everystarttext -\appendtoks - \ignorerestoftext +\appendtoks + \ignorerestoftext \to \everylastshipout \newif\ifgeselecteerd \geselecteerdtrue @@ -1732,11 +1739,11 @@ {\doifsomething\paginasoort {\processcommacommand[\paginasoort]\dodonapagina}} -% Dit wordt eigenlijk nooit en moet worden vervangen door +% Dit wordt eigenlijk nooit en moet worden vervangen door % het meer algemene mechanisme. \def\dosoortpagina[#1]% - {\edef\desoortpagina{#1}% + {\edef\desoortpagina{#1}% \ifx\desoortpagina\empty \else \@EA\doglobal\@EA\addtocommalist\@EA{\desoortpagina}\paginasoort \ifselecteren @@ -1790,19 +1797,19 @@ \od \fi} -\newif\ifregistertextareas +\newif\ifregistertextareas \newif\iftracetextareas \newbox\registertextbox -% \def\registeredtextarea#1#2#3% #1=lower-dp #2=correct-ht #3=box +% \def\registeredtextarea#1#2#3% #1=lower-dp #2=correct-ht #3=box % {\hbox{\box#3}} \def\enabletextarearegistration{\global\registertextareastrue} -\def\registeredtextarea#1#2#3% #1=lower-dp #2=correct-ht #3=box +\def\registeredtextarea#1#2#3% #1=lower-dp #2=correct-ht #3=box {\hbox\bgroup - \ifregistertextareas \ifx\registerMPtextarea\undefined \else + \ifregistertextareas \ifx\registerMPtextarea\undefined \else \setbox\registertextbox\null \wd\registertextbox\wd#3% \ht\registertextbox\ht#3% @@ -1810,11 +1817,11 @@ \ifcase#1\or % 1 \setbox\registertextbox\hbox{\lower\strutdp\box\registertextbox}% \fi - \ifcase#2\or % 1 + \ifcase#2\or % 1 \setbox\registertextbox\hbox{\raise\topskip\hbox{\lower\strutht\box\registertextbox}}% \dp\registertextbox\strutdp \fi - \dp\registertextbox\strutdp % needed + \dp\registertextbox\strutdp % needed %\setbox\registertextbox\hbox % {\iftracetextareas\gray\boxrulewidth2pt\ruledhbox\fi % {\registerMPtextarea{\box\registertextbox}}}% @@ -1822,8 +1829,8 @@ {\registerMPtextarea{\box\registertextbox}}% \smashbox\registertextbox \box\registertextbox - \fi \fi + \fi \fi \box#3% \egroup} -\protect \endinput +\protect \endinput diff --git a/tex/context/base/page-lay.tex b/tex/context/base/page-lay.tex index 3ab1b1d6f..373b65d67 100644 --- a/tex/context/base/page-lay.tex +++ b/tex/context/base/page-lay.tex @@ -440,6 +440,8 @@ {\showmessage\m!systems{10}{##1}}}}% \processcommalist[#1]\docommando} +\ifx\setups\undefined \def\setups[#1]{\setdefaultpenalties} \fi + \def\recalculatelayout {\global\linkermargebreedte \layoutparameter\c!linkermarge \global\rechtermargebreedte\layoutparameter\c!rechtermarge @@ -453,7 +455,7 @@ \global\kopwit \layoutparameter\c!kopwit \setlayoutdimensions % the rest of the `dimensions' \doifelse\@@lygrid\v!ja\gridsnappingtrue\gridsnappingfalse - \synchronizecriteria[\layoutparameter\c!criterium]% see elsewhere + \setups[\layoutparameter\c!setups]% depends on gridsnapping ! \simplesetupwhitespace \simplesetupblank \global\snijwit\layoutparameter\c!snijwit @@ -1193,7 +1195,7 @@ \c!dx=\!!zeropoint, \c!dy=\!!zeropoint, \c!grid=\v!nee, - \c!criterium=\s!default, + \c!setups=\systemsetupsprefix\s!default, \c!clipoffset=\!!zeropoint, \c!regels=0, \c!kolommen=1, diff --git a/tex/context/base/page-lyr.tex b/tex/context/base/page-lyr.tex index b40e36337..bd76ab558 100644 --- a/tex/context/base/page-lyr.tex +++ b/tex/context/base/page-lyr.tex @@ -2,7 +2,7 @@ %D [ file=page-lyr, %D version=2000.10.20, %D title=\CONTEXT\ Page Macros, -%D subtitle=Layers, +%D subtitle=Layers, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] @@ -11,29 +11,29 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\writestatus{loading}{Context Page Macros / Layers} +\writestatus{loading}{Context Page Macros / Layers} \unprotect -% When being backgrounds layers get the background offset -% displacement. Should be an option, on by default +% When being backgrounds layers get the background offset +% displacement. Should be an option, on by default % (compatibility). %D The layering mechanism implemented here is independent of %D the output routine, but future extensions may depend on a -%D more close cooperation. +%D more close cooperation. %D First we overload a macro from \type {core-rul}. From now on %D we accept a (optional) argument: the specific layer it %D will go in. This means that we can move an overlay from one %D background to the other using the dimensions of the parent. -\ifx\undefined\defineoverlay \message{loaded to early} \wait \fi +\ifx\undefined\defineoverlay \message{loaded to early} \wait \fi \def\defineoverlay {\dotripleempty\dodefineoverlay} -\def\dodefineoverlay[#1][#2][#3]% overlay [layer] content +\def\dodefineoverlay[#1][#2][#3]% overlay [layer] content {\ifthirdargument \writestatus{BEWARE}{This (overlay definition) has changed!}% temp \def\docommando##1% @@ -47,24 +47,24 @@ \fi \processcommalist[#1]\docommando} -%D When tracing is turned on, a couple of boxes will -%D show up as well as the reference point. +%D When tracing is turned on, a couple of boxes will +%D show up as well as the reference point. \newif\iftracelayers % \tracelayerstrue -%D This handy constant saved some string memory. +%D This handy constant saved some string memory. \def\@@layerbox{@@layerbox} -%D \macros +%D \macros %D {definelayer} %D -%D Each layer gets its own (global) box. This also means that -%D the data that goes into a layer, is typeset immediately. -%D Each layer automatically gets an associated overlay, +%D Each layer gets its own (global) box. This also means that +%D the data that goes into a layer, is typeset immediately. +%D Each layer automatically gets an associated overlay, %D which can be used in any background assignment. -% todo : links/rechts +% todo : links/rechts \def\definelayer {\dodoubleargument\dodefinelayer} @@ -77,7 +77,7 @@ \c!x=\!!zeropoint,\c!y=\!!zeropoint,\c!positie=\v!nee, \c!regel=0,\c!kolom=0, \c!breedte=\nextboxwd,\c!hoogte=\nextboxht, - \c!offset=\!!zeropoint,\c!rotatie=, % geen 0 ! + \c!offset=\!!zeropoint,\c!rotatie=, % geen 0 ! \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint, \c!plaats=rb,\c!positie=\v!nee,\c!pagina=, \c!methode=\v!overlay, @@ -95,11 +95,11 @@ \resetlayer[#1]% \fi} -%D \macros +%D \macros %D {setuplayer} %D -%D After a layer is defined, you can change its -%D characteristics. +%D After a layer is defined, you can change its +%D characteristics. \def\setuplayer {\dodoubleargument\dosetuplayer} @@ -108,17 +108,17 @@ {\def\docommando##1{\getparameters[\??ll##1][#2]}% \processcommalist[#1]\docommando} -%D \macros +%D \macros %D {setlayer} -%D +%D %D Data is moved into a layer with the following macro. When %D \type {position} is set, relative positioning is used, with %D the current point as reference point. Otherwise the topleft -%D corner is used as reference point. -%D -%D \starttypen -%D \setlayer [identifier] [optional parameters] {data} -%D \stoptypen +%D corner is used as reference point. +%D +%D \starttypen +%D \setlayer [identifier] [optional parameters] {data} +%D \stoptypen \def\currentlayerdata{0} @@ -158,7 +158,7 @@ \let\lastlayerxpos\!!zeropoint \let\lastlayerypos\!!zeropoint -% todo left/right +% todo left/right \def\setlastlayerpos#1% {\edef\layerpage{\MPp{lyr:\currentlayerdata}}% @@ -176,7 +176,7 @@ \def\dodefinelayerpreset[#1][#2]% {\setvalue{\??ll\??ll#1}{\dopresetlayer{#2}}} -\def\dopresetlayer#1#2#3% #1=list #2=tag #3=list +\def\dopresetlayer#1#2#3% #1=list #2=tag #3=list {\getparameters[\??ll#2][#1,#3]} \letempty\currentlayer @@ -187,18 +187,18 @@ \newdimen\layerheight \def\dododosetlayer[#1][#2][#3]% will be sped up - {% we use the global width, never change this + {% we use the global width, never change this \def\currentlayer{#1}% \@@layerxsiz\layerparameter\c!breedte \@@layerysiz\layerparameter\c!hoogte \layerwidth \@@layerxsiz \layerheight\@@layerysiz - % preroll + % preroll \getparameters[\??ll#1][#3]% - % presets and real roll + % presets and real roll \doifdefined{\??ll\??ll\layerparameter\c!preset} {\getvalue{\??ll\??ll\layerparameter\c!preset}{#1}{#3}}% - % that was real slow + % that was real slow \doifvalue{\??ll#1\c!positie}\v!overlay % slow {\getparameters[\??ll#1] [\c!breedte=\zeropoint, @@ -210,14 +210,14 @@ [\c!plaats=\v!hoog, \c!rotatie=\layerparameter\c!rotatie] {\flushnextbox}}}% - % no, not local + % no, not local % \@@layerxsiz\layerparameter\c!breedte - % \@@layerysiz\layerparameter\c!hoogte - % never change that + % \@@layerysiz\layerparameter\c!hoogte + % never change that \@@layerxpos\layerparameter\c!x \@@layerypos\layerparameter\c!y \doifelsevalue{\??ll#1\c!hoffset}\v!max - {\@@layerxoff\@@layerxsiz} + {\@@layerxoff\@@layerxsiz} {\@@layerxoff\layerparameter\c!hoffset}% \doifelsevalue{\??ll#1\c!voffset}\v!max {\@@layeryoff\@@layerysiz} @@ -246,7 +246,7 @@ \advance\scratchcounter\layoutlines \advance\scratchcounter\plusone \setevalue{\??ll#1\c!regel}{\the\scratchcounter}% - \fi + \fi \ifdim\@@layerysiz>\zeropoint \advance\@@layerypos-\@@layerysiz \@@layerypos-\@@layerypos @@ -259,7 +259,7 @@ \advance\scratchcounter \layoutcolumns \advance\scratchcounter \plusone \setevalue{\??ll#1\c!kolom}{\the\scratchcounter}% - \fi + \fi \ifdim\@@layerxsiz>\zeropoint \advance\@@layerxpos-\@@layerxsiz \@@layerxpos-\@@layerxpos @@ -277,11 +277,11 @@ {\edef\layerpage{:\layerpage}% \doifundefined{\@@layerbox#2#1\layerpage} {\global\expandafter\newbox\csname\@@layerbox#2#1\layerpage\endcsname}}% - \dontcomplain % more comfortable + \dontcomplain % more comfortable \global\setbox\csname\@@layerbox#2#1\layerpage\endcsname\vbox - to \layerparameter\c!hoogte % new, otherwise no negative y possible + to \layerparameter\c!hoogte % new, otherwise no negative y possible {\offinterlineskip - \hsize\layerparameter\c!breedte % new, keep box small + \hsize\layerparameter\c!breedte % new, keep box small \ifvoid\csname\@@layerbox#1\layerpage\endcsname\else \ht\csname\@@layerbox#2#1\layerpage\endcsname\zeropoint \dp\csname\@@layerbox#2#1\layerpage\endcsname\zeropoint @@ -297,13 +297,13 @@ \setbox\nextbox\hbox {\alignedbox[\layerparameter\c!plaats]\vbox{\flushnextbox}}% \fi - \ifnum\layerparameter\c!regel=\zerocount\else % no \ifcase, can be negative + \ifnum\layerparameter\c!regel=\zerocount\else % no \ifcase, can be negative \advance\@@layerypos \layerparameter\c!regel\lineheight - \advance\@@layerypos \topskip + \advance\@@layerypos \topskip \advance\@@layerypos-\lineheight \advance\@@layerypos-\nextboxht \fi - \ifnum\layerparameter\c!kolom=\zerocount\else % no \ifcase, can be negative + \ifnum\layerparameter\c!kolom=\zerocount\else % no \ifcase, can be negative \advance\@@layerxpos \layoutcolumnoffset{\layerparameter\c!kolom}% \fi \ifdone @@ -330,15 +330,15 @@ %D not even that complicated. It mainly comes down to skipping %D to the right place and placing a box on top of or below the %D existing content. In the case of position tracking, another -%D reference point is chosen. +%D reference point is chosen. %D \macros -%D {flushlayer} +%D {flushlayer} %D %D When we flush a layer, we flush both the main one and the -%D page dependent one (when defined). This feature is more -%D efficient in \ETEX\ since there testing for an undefined -%D macro does not takes hash space. +%D page dependent one (when defined). This feature is more +%D efficient in \ETEX\ since there testing for an undefined +%D macro does not takes hash space. % \unexpanded\def\flushlayer[#1]% % {\doifnotvalue{\??ll#1\c!status}{\v!stop} @@ -346,12 +346,12 @@ % {\doflushlayer1{#1}{#1}} % {\doflushlayer0{#1}{#1:\realfolio}} % \stopoverlay}} -% +% % \def\doflushlayer#1#2#3% % {\ifundefined{\@@layerbox#3}% % \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi % \else -% \doifvalue{\??ll#2\c!optie}{\v!test} +% \doifvalue{\??ll#2\c!optie}{\v!test} % {\traceboxplacementtrue\tracelayerstrue}% % \iftracelayers \ruledvbox \else \vbox \fi to \overlayheight % {\forgetall @@ -363,7 +363,7 @@ % \doifnotvalue{\??ll#2\c!positie}{\v!ja} % {\doifvalue{\??ll#2\c!status}{\v!herhaal} % {\let\next\copy}}% -% \fi +% \fi % \next\csname\@@layerbox#3\endcsname % \hss}% % \vss}% @@ -372,15 +372,15 @@ \unexpanded\def\flushlayer[#1]% {\doifelsevalue{\??ll#1\c!dubbelzijdig}\v!ja {\doifundefinedelse{\@@layerbox#1}% - {\dodoflushlayerA[#1]} + {\dodoflushlayerA[#1]} {\doifbothsidesoverruled \dodoflushlayerB[#1][\v!links]% left \orsideone - \dodoflushlayerB[#1][\v!rechts]% right + \dodoflushlayerB[#1][\v!rechts]% right \orsidetwo \dodoflushlayerB[#1][\v!links]% left \od}} - {\dodoflushlayerA[#1]}} + {\dodoflushlayerA[#1]}} \def\dodoflushlayerA[#1]% {\doifnotvalue{\??ll#1\c!status}\v!stop @@ -398,7 +398,7 @@ {\dodoflushlayer0{#1}{#2#1:\realfolio}} \stopoverlay}} -% \def\dodoflushlayer#1#2#3% +% \def\dodoflushlayer#1#2#3% % {\ifundefined{\@@layerbox#3}% % \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi % \else @@ -407,8 +407,8 @@ % \doifelsevalue{\??ll#2\c!methode}\v!tekst\donetrue\donefalse % \iftracelayers \ruledvbox \else \vbox \fi \ifdone \else to \overlayheight \fi % {\forgetall -% \hbox \ifdone \else to \overlaywidth \fi -% {% klopt dit? #3 en niet #2 ? +% \hbox \ifdone \else to \overlaywidth \fi +% {% klopt dit? #3 en niet #2 ? % \doifvalue{\??ll#3\realfolio\c!positie}\v!ja % {\xypos{lyr:#3:\realfolio}}% % \let\next\box @@ -416,13 +416,13 @@ % \doifnotvalue{\??ll#2\c!positie}\v!ja % {\doifvalue{\??ll#2\c!status}\v!herhaal % {\let\next\copy}}% -% \fi +% \fi % \next\csname\@@layerbox#3\endcsname % \hss}% % \vss}% % \fi} -\def\dodoflushlayer#1#2#3% +\def\dodoflushlayer#1#2#3% {\ifundefined{\@@layerbox#3}% \ifcase#1\else\writestatus{layer}{unknown layer #3}\fi \else @@ -431,8 +431,8 @@ \doifelsevalue{\??ll#2\c!methode}\v!tekst\donetrue\donefalse \iftracelayers \ruledvbox \else \vbox \fi \ifdone \else to \overlayheight \fi {\forgetall - \hbox \ifdone \else to \overlaywidth \fi - {% klopt dit? #3 en niet #2 ? + \hbox \ifdone \else to \overlaywidth \fi + {% klopt dit? #3 en niet #2 ? \doifvalue{\??ll#3\realfolio\c!positie}\v!ja {\xypos{lyr:#3:\realfolio}}% \let\next\box @@ -440,7 +440,7 @@ \doifnotvalue{\??ll#2\c!positie}\v!ja {\doifvalue{\??ll#2\c!status}\v!herhaal {\let\next\copy}}% - \fi + \fi \doifoverlayelse{#3} {\next\csname\@@layerbox#3\endcsname}% {\startlayoutcomponent{l:#3}{layer #3}% @@ -451,58 +451,65 @@ \fi} %D \macros -%D {composedlayer} +%D {composedlayer,placelayer,tightlayer} %D -%D This is a handy shortcut, which saves a couple of braces -%D when we use it as parameter. This name also suits better -%D to other layering commands. +%D This is a handy shortcut, which saves a couple of braces +%D when we use it as parameter. This name also suits better +%D to other layering commands. \def\composedlayer#1{\flushlayer[#1]} \let\placelayer\flushlayer +\def\tightlayer[#1]% + {\hbox + {\def\currentlayer{#1}% todo: left/right + \hsize\layerparameter\c!breedte + \vsize\layerparameter\c!hoogte + \composedlayer{#1}}} + %D \macros -%D {resetlayer} +%D {resetlayer} %D -%D This macro hardly needs an explanation (and is seldom -%D needed as well). +%D This macro hardly needs an explanation (and is seldom +%D needed as well). \def\doresetlayer#1% - {\ifundefined{\@@layerbox#1}\else + {\ifundefined{\@@layerbox#1}\else \global\setbox\csname\@@layerbox#1\endcsname\emptybox \fi} \def\resetlayer[#1]% {\doresetlayer{#1}% \doifvalue{\??ll#1\c!dubbelzijdig}\v!ja % kind of redundant test - {\doresetlayer{\v!links #1}% - \doresetlayer{\v!rechts#1}}% - \doresetlayer{#1:\realfolio}} + {\doresetlayer{\v!links #1}% + \doresetlayer{\v!rechts#1}}% + \doresetlayer{#1:\realfolio}} %D \macros %D {setMPlayer} -%D -%D The following layer macro uses the positions that are -%D registered by \METAPOST. +%D +%D The following layer macro uses the positions that are +%D registered by \METAPOST. %D %D \starttypen -%D \definelayer[test] -%D +%D \definelayer[test] +%D %D \setMPlayer [test] [somepos-1] {Whatever we want here!} %D \setMPlayer [test] [somepos-2] {Whatever we need there!} %D \setMPlayer [test] [somepos-3] {\externalfigure[cow.mps][width=2cm]} -%D +%D %D \startuseMPgraphic{oeps} -%D draw fullcircle scaled 10cm withcolor red ; -%D register ("somepos-1",2cm,3cm,center currentpicture) ; -%D register ("somepos-2",8cm,5cm,(-1cm,-2cm)) ; -%D register ("somepos-3",0cm,0cm,(-2cm,2cm)) ; +%D draw fullcircle scaled 10cm withcolor red ; +%D register ("somepos-1",2cm,3cm,center currentpicture) ; +%D register ("somepos-2",8cm,5cm,(-1cm,-2cm)) ; +%D register ("somepos-3",0cm,0cm,(-2cm,2cm)) ; %D \stopuseMPgraphic -%D +%D %D \getMLlayer[test]{\useMPgraphic{oeps}} %D \stoptypen -%D -%D The last line is equivalent to +%D +%D The last line is equivalent to %D %D \starttypen %D \framed @@ -530,8 +537,8 @@ \c!kader=\v!uit, \c!offset=\v!overlay,#2]} -% Some day this (old) mechanism will be combined/integrated -% in overlays +% Some day this (old) mechanism will be combined/integrated +% in overlays \newskip\xposition \newskip\yposition \newskip\xdimension \newskip\ydimension @@ -583,7 +590,7 @@ \dodoubleargument\getparameters[\??ps]} \def\calculateposition#1#2#3#4#5#6#7#8#9% - {\setdimensionwithunit\scratchskip{#1}\@@pseenheid + {\setdimensionwithunit\scratchskip{#1}\@@pseenheid \scratchskip#8\scratchskip \scratchskip#9\scratchskip \advance\scratchskip #4\relax @@ -612,7 +619,7 @@ \calculateposition{#4}\@@psystap\yposition \@@psyoffset\scratchdimen\ydimension\yoffset \@@psyschaal\@@psyfactor - \vbox to \zeropoint % kan beter. + \vbox to \zeropoint % kan beter. {\vskip\yposition \hbox to \zeropoint {\hskip\xposition @@ -631,7 +638,7 @@ \resetpositioning -\setuppositioning +\setuppositioning [\c!eenheid=\s!cm, \c!factor=1, \c!schaal=1, @@ -641,4 +648,4 @@ \c!xoffset=\!!zeropoint, \c!yoffset=\!!zeropoint] -\protect \endinput +\protect \endinput diff --git a/tex/context/base/page-num.tex b/tex/context/base/page-num.tex index 20c079306..d25def347 100644 --- a/tex/context/base/page-num.tex +++ b/tex/context/base/page-num.tex @@ -2,7 +2,7 @@ %D [ file=page-num, % moved here from main-001 %D version=1997.03.31, %D title=\CONTEXT\ Core Macros, -%D subtitle=Numbering, +%D subtitle=Numbering, %D author=Hans Hagen, %D date=\currentdate, %D copyright={PRAGMA / Hans Hagen \& Ton Otten}] @@ -13,7 +13,7 @@ \writestatus{loading}{Context Core Macros / Numbering} -\unprotect +\unprotect % \gotonextsubpage : voor de pagebody % \subpaginanummer : alleen in de voet/kopregels @@ -36,15 +36,15 @@ [\s!subpage] [\c!wijze=\@@snwijze] -% hard to sync +% hard to sync % % \def\resetsubpaginanummer% % {\resetnummer[\s!subpage]% % \global\subpageno=\ruwenummer[\s!subpage]} % -% better sync +% better sync -\newif\ifresettingsubpagenumber +\newif\ifresettingsubpagenumber \def\resetsubpaginanummer {\global\resettingsubpagenumbertrue} @@ -58,7 +58,7 @@ \processaction [\@@snstatus] [ \v!stop=>\ifsubpaging - \resetsubpaginanummer % new, see sync + \resetsubpaginanummer % new, see sync \else \subpagingfalse \fi @@ -114,8 +114,8 @@ \def\gotonextsubpage % overlapt behoorlijk met realpage macro {\global\let\checksubpages\relax - \ifresettingsubpagenumber - \resetnummer[\s!subpage]% + \ifresettingsubpagenumber + \resetnummer[\s!subpage]% \global\resettingsubpagenumberfalse \fi \ifsubpaging @@ -258,7 +258,7 @@ \global\let\checkrealpage\relax} \def\savenofpages - {\bgroup + {\bgroup \advance\realpageno \minusone \savecurrentvalue\lastpage\realfolio \advance\userpageno \minusone @@ -303,13 +303,13 @@ \def\stelpaginanummerin {\dosingleargument\dostelpaginanummerin} -% long time used alternative +% long time used alternative % % \def\verlaagpaginanummer % {\doifinset{\@@pnstatus}{\v!start,\v!leeg,\v!geen} % {\verlaagnummer[\s!page]% % \setuserpageno{\ruwenummer[\s!page]}}} -% +% % \def\verhoogpaginanummer % {\doifinset{\@@pnstatus}{\v!start,\v!leeg,\v!geen} % {\verhoognummer[\s!page]% @@ -342,7 +342,7 @@ \dosynchronizepagenumber} \letvalue{\??pn+\v!handhaaf}\dosynchronizepagenumber -% so far +% so far \def\checkpagecounter% {\checknummer{\s!page}} @@ -506,18 +506,18 @@ {\dodopaginaprefix{#1}% \donexttracklevel{#1}} -\def\paginaprefix#1[#2]% +\def\paginaprefix#1[#2]% {\bgroup \edef\paginatype{#1}% - \edef\postprefix{\@@filternumberpart[#2]}% + \edef\postprefix{\@@filternumberpart[#2]}% \let\donexttrackcommando\dopaginaprefix \donexttrackcommando\firstsection \egroup} -%D It was Marco Kuhlmann who uncovered the missing strut. This -%D was a pretty old bug kind of covered up by the fact that non +%D It was Marco Kuhlmann who uncovered the missing strut. This +%D was a pretty old bug kind of covered up by the fact that non %D oldstyle numbers are about as high as strutheight. Rather -%D interesting that it went unnoticed for so long. +%D interesting that it went unnoticed for so long. \unexpanded\def\@@plaatspaginanummer % called in empty tests {\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start} @@ -525,7 +525,7 @@ \@@nmcommando{\doattributes\??nm\c!letter\c!kleur {\completepagenumber}}}}} -\def\@@plaatspaginascheider% still used ? +\def\@@plaatspaginascheider% still used ? {\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start} {\@@nmtekstscheider}} @@ -546,15 +546,15 @@ \donexttracklevel{##1}}% \donexttrackcommando{\firstsection}} -\unexpanded\def\completepagenumber - {\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start} +\unexpanded\def\completepagenumber + {\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start} {\@@nmlinks\labeltexts\v!paginanummer{\pageprefixes\pagenumber}\@@nmrechts}} \unexpanded\def\placepagenumber {\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start} {\labeltexts\v!paginanummer{\pagenumber}}} -% Nog een variant; wat is een goeie naam? +% Nog een variant; wat is een goeie naam? % \unexpanded\def\placexxpagenumber % {\@@plaatspaginanummer} @@ -563,8 +563,12 @@ \def\translatednumber{\@@filterpagepart} +% \unexpanded\def\referencepagenumber[#1]% +% {\doifelsenothing{#1}{?}{\paginaprefix\??rf[#1]\translatednumber[#1]}} + \unexpanded\def\referencepagenumber[#1]% - {\doifelsenothing{#1}{?}{\paginaprefix\??rf[#1]\translatednumber[#1]}} + {\doifelsenothing{#1}{?}% \prepare had got lost + {\preparepaginaprefix\??rf\paginaprefix\??rf[#1]\translatednumber[#1]}} \stelpaginanummerin [\c!status=\v!start, @@ -574,4 +578,4 @@ [\c!wijze=\v!per\v!deel, \c!status=\v!stop] -\protect \endinput +\protect \endinput diff --git a/tex/context/base/page-one.tex b/tex/context/base/page-one.tex index 38f633437..f236a411e 100644 --- a/tex/context/base/page-one.tex +++ b/tex/context/base/page-one.tex @@ -342,11 +342,22 @@ \global\botinserted\zeropoint \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 - \box\topins % not \topsnaptogrid{\box\topins}% - \else + \box\topins + \vskip-\topskip \vskip\strutheight % [xx] new: see icare topbleed + \else \unvbox\topins \fi \fi @@ -545,6 +556,27 @@ \goodbreak}% \doinsertfloatinfo} +% \def\OTRONEsometopsfloat[#1]% +% {\ifdim\topinserted=\zeropoint +% \topofinserttrue +% \else +% \topofinsertfalse +% \fi +% \global\advance\topinserted \ht\floatbox +% \global\advance\topinserted \dp\floatbox +% \global\advance\topinserted \floatbottomskip +% \insert\topins +% {\forgetall +% \iftopofinsert +% \kern-\lineskip\par\prevdepth\maxdimen +% \else +% %\blanko[-\@@bknawit,\@@bkvoorwit]% inserts can't look back +% \betweenfloatblanko +% \fi +% \flushfloatbox +% \blanko[\@@bknawit]}% +% \doinsertfloatinfo} + \def\OTRONEsometopsfloat[#1]% {\ifdim\topinserted=\zeropoint \topofinserttrue @@ -557,6 +589,7 @@ \insert\topins {\forgetall \iftopofinsert + \topskipcorrection % [xx] new: see icare topbleed \kern-\lineskip\par\prevdepth\maxdimen \else %\blanko[-\@@bknawit,\@@bkvoorwit]% inserts can't look back diff --git a/tex/context/base/page-set.tex b/tex/context/base/page-set.tex index abe6331e7..518da3132 100644 --- a/tex/context/base/page-set.tex +++ b/tex/context/base/page-set.tex @@ -2507,7 +2507,13 @@ {\endgraf % else rubish output if forgotten \vskip \zeropoint % make sure otr is done, otherwise last line problems \bgroup -\forgetall + \forgetall + \ifnum\columnsetlevel>\zerocount\else + % of course we needed a one-column fall back for tm + \columnsetspanhsize\hsize + \nofcolumns\plusone + \mofcolumns\plusone + \fi \setupframedtexts[cs:#1] [\c!breedte=\columnsetspanhsize, \c!regelcorrectie=\v!uit, @@ -2530,19 +2536,23 @@ \setbox\scratchbox\vbox\bgroup \dostartframedtext[cs:#1][\v!geen]% geen nils placement \vskip-\struttotal\par\verticalstrut\par - \framedtextparameter{cs:#1}\c!voor + \ifnum\columnsetlevel>\zerocount + \framedtextparameter{cs:#1}\c!voor + \fi \def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}} -% \chardef\columnslotlocation2 - \def\dostopcolumnsetspan#1% {\par \verticalstrut \kern-2\struttotal \verticalstrut - \doifsomething{\framedtextparameter{cs:#1}\c!na} - {\framedtextparameter{cs:#1}\c!na - \kern\zeropoint}% otherwise blanks disappear, better be a switch + \ifnum\columnsetlevel>\zerocount + \doifsomething{\framedtextparameter{cs:#1}\c!na} + {\framedtextparameter{cs:#1}\c!na + \kern\zeropoint}% otherwise blanks disappear, better be a switch + \else + \endgraf + \fi \dostopframedtext \egroup % frozen keeps grid snapping okay @@ -2562,7 +2572,7 @@ % \ifinsidefloat \box\scratchbox - \else + \else\ifnum\columnsetlevel>\zerocount % we only set \columnsetspacing when asked for, else bottom problems % don't change this any more (test naw) \chardef\columnslotspacing\framedtextparameter{cs:#1}\c!nregels\relax @@ -2574,7 +2584,16 @@ \OTRSETstoreincolumnslot\floatmethod\scratchbox % watch out: no \dochecknextindentation{tag} \checknextindentation[\framedtextparameter{cs:#1}\c!springvolgendein] - \fi + \else + % of course we needed a one-column fall back for tm; brrr, the box has now too + % much height (try \ruledvbox); don't change this without testing techniek + \scratchdimen\ht\scratchbox + \advance\scratchdimen-\strutdp + \ht\scratchbox\scratchdimen + \framedtextparameter{cs:#1}\c!voor + \snaptogrid\vbox{\box\scratchbox}% + \framedtextparameter{cs:#1}\c!na + \fi\fi \egroup \endgraf} @@ -2588,4 +2607,4 @@ % \startcolumnsetspan[two] \input tufte \stopcolumnsetspan % \stopcolumnset -\protect \endinput +\protect \endinput \ No newline at end of file diff --git a/tex/context/base/s-pre-09.tex b/tex/context/base/s-pre-09.tex index 78e26ca95..cba452973 100644 --- a/tex/context/base/s-pre-09.tex +++ b/tex/context/base/s-pre-09.tex @@ -11,21 +11,21 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -%D I made this style when I had to give a presentation on -%D the \MAPS\ bibliography production for several user group -%D meetings. This style is rather tuned for combinations of -%D examples and explanations. The colors match the \MAPS\ -%D bibliography colors. +%D I made this style when I had to give a presentation on +%D the \MAPS\ bibliography production for several user group +%D meetings. This style is rather tuned for combinations of +%D examples and explanations. The colors match the \MAPS\ +%D bibliography colors. \startmode[asintended] \setupbodyfont[lbr] \stopmode \setupbodyfont[14.4pt] -%D A couple of years later, in 2001 this style was documented -%D and made public. While documenting, I also changed box -%D building on top of overlays into the now available layer -%D positioning. So, this styles demonstrates quite some -%D tricks. +%D A couple of years later, in 2001 this style was documented +%D and made public. While documenting, I also changed box +%D building on top of overlays into the now available layer +%D positioning. So, this styles demonstrates quite some +%D tricks. \setuppapersize [S6][S6] @@ -40,41 +40,41 @@ %D Local environments can be set by using the setups commands. %D For downward compatibility, we keep supporting the \type -%D {\...Settings} hooks. Using local environments is seldom -%D needed. +%D {\...Settings} hooks. Using local environments is seldom +%D needed. \let\TextSettings \empty \let\SampleSettings\empty -\startsetups text \TextSettings \stopsetups -\startsetups sample \SampleSettings \stopsetups +\startsetups [text] \TextSettings \stopsetups +\startsetups [sample] \SampleSettings \stopsetups -%D The dimensions are kind of fixed. +%D The dimensions are kind of fixed. \def\FrameWidth {448pt} \def\FrameHeight {348pt} \def\FrameOffset {24pt} \def\FrameSkip {12pt} -%D But they {\em can} and {\em will} be changed. +%D But they {\em can} and {\em will} be changed. \def\FrameWidth {408pt} \def\FrameHeight {318pt} -%D The funny values come from the $3:4$ display aspect +%D The funny values come from the $3:4$ display aspect %D ratio. \setupcolors [state=start] -\definecolor[PageColor] [s=.40] -\definecolor[TextColor] [s=.90] -\definecolor[InteractionColor][r=.40] -\definecolor[LineColor] [r=.60,g=.60] +\definecolor[PageColor] [s=.40] +\definecolor[TextColor] [s=.90] +\definecolor[InteractionColor][r=.40] +\definecolor[LineColor] [r=.60,g=.60] -%D Of course we go interactive and since we will probably -%D open other documents, we make sure that the viewer opens a -%D new window. +%D Of course we go interactive and since we will probably +%D open other documents, we make sure that the viewer opens a +%D new window. \setupinteraction [color=InteractionColor, @@ -85,31 +85,31 @@ \setupinteractionscreen [option=max] -%D Before we come to the real macros, we do a little bit of -%D tuning. +%D Before we come to the real macros, we do a little bit of +%D tuning. \setupitemize - [1][packed] + [1][packed] \setuptyping [blank=medium] -%D Apart from the titlepage, the page gets a simple colored -%D background. Later we will activate the background. +%D Apart from the titlepage, the page gets a simple colored +%D background. Later we will activate the background. \setupbackgrounds [page] [backgroundcolor=PageColor] -%D Everything gets frames by a nice \METAPOST\ frame. +%D Everything gets frames by a nice \METAPOST\ frame. \defineoverlay [background] [\uniqueMPgraphic{background}] \startuniqueMPgraphic{background} - path p ; color c, w, d ; - c := \MPcolor{PageColor} ; - w := \MPcolor{TextColor} ; - d := \MPcolor{LineColor} ; + path p ; color c, w, d ; + c := \MPcolor{PageColor} ; + w := \MPcolor{TextColor} ; + d := \MPcolor{LineColor} ; p := unitsquare xscaled OverlayWidth yscaled OverlayHeight ; pickup pencircle scaled (1.5*\FrameSkip) ; draw p withcolor c ; @@ -118,17 +118,17 @@ draw p withcolor d ; \stopuniqueMPgraphic -%D We will present samples and explanation pair||wise, so -%D we need a hyperlink that skips a page. +%D We will present samples and explanation pair||wise, so +%D we need a hyperlink that skips a page. \defineoverlay [nextpage] [\overlaybutton{nextpage}] \defineoverlay [previouspage] [\overlaybutton{previouspage}] \defineoverlay [skippage] [\overlaybutton{page(+2)}] -%D Layers are normally used to position multiple content on -%D a specific overlay. Here we will use them to position +%D Layers are normally used to position multiple content on +%D a specific overlay. Here we will use them to position %D only and since the samples and text will swap place, we -%D will use quite a few layers. +%D will use quite a few layers. \defineoverlay [text] [\composedlayer{text}] \defineoverlay [sample] [\composedlayer{sample}] @@ -136,43 +136,43 @@ %D There are three positions. When combined, the sample and %D text windows overlap, otherwise the lone window is -%D centered. We could have used one layer and reversed the -%D order by setting the \type {direction} parameter, but -%D this approach is more readable. +%D centered. We could have used one layer and reversed the +%D order by setting the \type {direction} parameter, but +%D this approach is more readable. \definelayer - [text] + [text] [x=\makeupwidth,y=\makeupheight,location=lt, hoffset=-\FrameSkip,voffset=-\FrameSkip] \definelayer - [sample] + [sample] [hoffset=\FrameSkip,voffset=\FrameSkip] \definelayer - [common] - [x=.5\makeupwidth,y=.5\makeupheight,location=c] + [common] + [x=.5\makeupwidth,y=.5\makeupheight,location=c] %D The topic is put in the lower right corner of the text -%D window. +%D window. \defineoverlay [topic] [\composedlayer{topic}] \definelayer - [topic] + [topic] [x=\FrameWidth,y=\FrameHeight,location=lt, hoffset=-\FrameOffset,voffset=-\FrameSkip] -%D The topic is put in a framed box. That way we can make -%D sure that it gets a background, which looks better when -%D it covers something else. Otherwise we could have stuct +%D The topic is put in a framed box. That way we can make +%D sure that it gets a background, which looks better when +%D it covers something else. Otherwise we could have stuct %D to: -%D +%D %D \starttypen %D \def\Topic#1% %D {\setlayer[topic]{\color[PageColor]{\bfb\setstrut#1}}} %D \stoptypen -%D +%D %D But, we go for the nice alternative: \def\Topic#1% @@ -184,10 +184,10 @@ background=color,backgroundcolor=TextColor] {#1}}}} -%D The sample as well as the explanation will be collected in -%D a buffer. That way we can reuse the content. We could +%D The sample as well as the explanation will be collected in +%D a buffer. That way we can reuse the content. We could %D have used a box instead, but can we be sure that the content -%D is not adapting itself? So, buffers we use. +%D is not adapting itself? So, buffers we use. \resetbuffer[sample] \resetbuffer[text] @@ -200,9 +200,9 @@ frame=off,align=normal,strut=no,before=,after=, background={background,nextpage}] -%D We safe some keying in by combining things in one macro. +%D We safe some keying in by combining things in one macro. -\def\DoSampleText#1#2#3% kind layer overlays +\def\DoSampleText#1#2#3% kind layer overlays {\setupframedtexts[SampleText][background={background,#3}] \setlayer[#2] {\startSampleText[none] @@ -217,24 +217,24 @@ \def\StopSample {\startstandardmakeup - \DoSampleText{sample}{common}{nextpage} + \DoSampleText{sample}{common}{nextpage} \stopstandardmakeup \resetbuffer[sample]} \def\StopText {\startstandardmakeup - \DoSampleText{text}{common}{topic,nextpage} + \DoSampleText{text}{common}{topic,nextpage} \stopstandardmakeup \resetbuffer[text]} \setupbackgrounds[page][background={color,nextpage}] \setupbackgrounds[text][background=common] -%D When we combine sample and text, we get slightly -%D different definitions. As you can see we generate two -%D pages. Watch how we manipulate the order of the -%D overlays and teh nature of the buttons. Here data -%D abstraction really pays off. +%D When we combine sample and text, we get slightly +%D different definitions. As you can see we generate two +%D pages. Watch how we manipulate the order of the +%D overlays and teh nature of the buttons. Here data +%D abstraction really pays off. \def\StartIdea {\bgroup @@ -245,68 +245,68 @@ {\setupbackgrounds[page][background={color,skippage}] \setupbackgrounds[text][background={text,sample}] \startstandardmakeup - \DoSampleText{sample}{sample}{previouspage} + \DoSampleText{sample}{sample}{previouspage} \DoSampleText{text} {text} {topic,nextpage} \stopstandardmakeup \setupbackgrounds[page][background={color,nextpage}] \setupbackgrounds[text][background={sample,text}] \startstandardmakeup \DoSampleText{sample}{sample}{previouspage} - \DoSampleText{text} {text} {topic,nextpage} + \DoSampleText{text} {text} {topic,nextpage} \stopstandardmakeup \egroup} %D The rest of the definitions takes care of the title page. -%D Please don't steal this one for your own documents. - -\defineoverlay[joke] [\useMPgraphic{joke}{n=0}] % not to be changed! +%D Please don't steal this one for your own documents. + +\defineoverlay[joke] [\useMPgraphic{joke}{n=0}] % not to be changed! \startuseMPgraphic{joke}{n} StartPage ; - path p, q ; numeric w ; pair xy ; + path p, q ; numeric w ; pair xy ; set_grid(OverlayWidth,OverlayHeight,OverlayWidth/8,OverlayHeight/8) ; - if \MPvar{n}=1 : - p := fulldiamond ; fill Page withcolor \MPcolor{TextColor} ; + if \MPvar{n}=1 : + p := fulldiamond ; fill Page withcolor \MPcolor{TextColor} ; else : - p := fullsquare ; fill Page withcolor \MPcolor{PageColor} ; - fi ; - forever : + p := fullsquare ; fill Page withcolor \MPcolor{PageColor} ; + fi ; + forever : xy := center Page randomized (OverlayWidth,OverlayHeight) ; - if new_on_grid(xpart xy, ypart xy) : - q := (p xyscaled (OverlayWidth/5,OverlayHeight/5)) - randomized (\FrameSkip,\FrameSkip) - shifted xy ; + if new_on_grid(xpart xy, ypart xy) : + q := (p xyscaled (OverlayWidth/5,OverlayHeight/5)) + randomized (\FrameSkip,\FrameSkip) + shifted xy ; w := (\FrameSkip) randomized (\FrameSkip/2) ; - draw q withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ; - fill q withcolor \MPcolor{TextColor} ; - draw q withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ; - fi ; + draw q withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ; + fill q withcolor \MPcolor{TextColor} ; + draw q withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ; + fi ; exitif grid_full ; - endfor ; + endfor ; StopPage ; \stopuseMPgraphic \defineoverlay[fuzzy][\useMPgraphic{fuzzy}] \startuseMPgraphic{fuzzy} - path p ; numeric w ; - p := (fullsquare xyscaled (OverlayWidth,OverlayHeight)) - randomized (\FrameSkip,\FrameSkip) ; + path p ; numeric w ; + p := (fullsquare xyscaled (OverlayWidth,OverlayHeight)) + randomized (\FrameSkip,\FrameSkip) ; w := (\FrameSkip) randomized (\FrameSkip/2) ; - draw p withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ; - fill p withcolor \MPcolor{TextColor} ; - draw p withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ; + draw p withcolor \MPcolor{PageColor} withpen pencircle scaled (1.5w) ; + fill p withcolor \MPcolor{TextColor} ; + draw p withcolor \MPcolor{LineColor} withpen pencircle scaled ( w) ; \stopuseMPgraphic -%D This time we use a fit window, but with a slightly randomized -%D frame, our trademark so to say. +%D This time we use a fit window, but with a slightly randomized +%D frame, our trademark so to say. \def\StartTitlePage {\bgroup \setupbackgrounds[page][background={joke,nextpage}] \startstandardmakeup \switchtobodyfont[big] - \setupframedtexts + \setupframedtexts [SampleText] [background=fuzzy, foregroundcolor=PageColor, @@ -325,56 +325,56 @@ \def\TitlePage#1% {\StartTitlePage#1\StopTitlePage} -%D Let's nill some error prone presentation macros. +%D Let's nill some error prone presentation macros. \let\Subject \Topic \let\Topics \gobbleoneargument \let\Subjects \relax -%D We will avoid \citeer {overfull} messages. +%D We will avoid \citeer {overfull} messages. -\dontcomplain +\dontcomplain \doifnotmode{demo}{\endinput} -%D The (rather silly) demo section. +%D The (rather silly) demo section. -\starttext +\starttext \setupbodyfont[12pt] \TitlePage{Quotes, Quotes\\and more quotes} \StartIdea - \StartSample - \input knuth \par + \StartSample + \input knuth \par \StopSample - \StartText + \StartText \Topic{Tufte} - \input tufte \par + \input tufte \par \StopText \StopIdea \StartIdea - \StartSample - \input materie \par + \StartSample + \input materie \par \StopSample - \StartText - \input reich \par + \StartText + \input reich \par \StopText \StopIdea -\StartText - \input tufte \par +\StartText + \input tufte \par \StopText \StartIdea - \StartSample - \input knuth \par + \StartSample + \input knuth \par \StopSample - \StartText - \input tufte \par + \StartText + \input tufte \par \StopText \StopIdea -\stoptext +\stoptext diff --git a/tex/context/base/s-pre-10.tex b/tex/context/base/s-pre-10.tex index 1320e3bc6..67a867ec7 100644 --- a/tex/context/base/s-pre-10.tex +++ b/tex/context/base/s-pre-10.tex @@ -63,7 +63,7 @@ %D Because we build up the text window step by step, we will %D separate the entries by white space. -\startsetups always +\startsetups [always] \setupwhitespace[big] \setupblank[big] \stopsetups @@ -110,7 +110,7 @@ %D addition of subtexts (each subtext goes into its own %D buffer). -\def\DoSampleText#1#2#3% +\def\DoSampleText#1#2#3% {\setupframedtexts[SampleText][background={background,#3}] \bgroup \setups[#1]% @@ -126,8 +126,8 @@ \egroup} %D Since we are no longer swapping windows, we end up with a -%D much simplier \type {\Stopidea} macro. We don't reset -%D samples at the inner level. +%D much simplier \type {\Stopidea} macro. We don't reset +%D samples at the inner level. \def\StartIdea% {\bgroup @@ -149,7 +149,7 @@ %D within a sequence. \def\SetTextWidth - {\ifnum\TextN<1 % yes or no, may change + {\ifnum\TextN<1 % yes or no, may change \scratchdimen=\makeupwidth \advance\scratchdimen by -\SampleTextWidth \advance\scratchdimen by \FrameSkip @@ -166,8 +166,8 @@ \doifnotmode{demo}{\endinput} -%D The demo section. The original presentation uses proper -%D graphics and has better spacing. +%D The demo section. The original presentation uses proper +%D graphics and has better spacing. \def\SomeSymbol#1#2{\definedfont[ContextNavigation at #1]\char#2} @@ -287,20 +287,20 @@ \StopIdea \StartIdea - \StartSample + \StartSample \SomeSymbol{6cm}{3} \StopSample - \StartSubText + \StartSubText \unknown\ and yet another for first \unknown \StopSubText \StopIdea \StartIdea - \StartSample - \SomeSymbol{6cm}{4} + \StartSample + \SomeSymbol{6cm}{4} \StopSample - \StartSubText - \unknown\ and of course for last. + \StartSubText + \unknown\ and of course for last. \StopSubText \StopIdea diff --git a/tex/context/base/supp-lan.tex b/tex/context/base/supp-lan.tex index 6c51a94d8..777c99454 100644 --- a/tex/context/base/supp-lan.tex +++ b/tex/context/base/supp-lan.tex @@ -12,7 +12,7 @@ %C details. %D This module needs a drastic update: can be made simplier -%D and faster; code can move to core module. +%D and faster; code can move to core module. %D Also, commenting the previous versions code will clear up %D some memory. @@ -791,9 +791,9 @@ {\convertargument#1\to\ascii \setvalue{\@tmd@\ascii}} -\definetextmodediscretionary {} % empty case, also handled in parser +\definetextmodediscretionary {} % empty case, also handled in parser {\prewordbreak\compoundhyphen\allowbreak\postwordbreak} - + \definetextmodediscretionary = {\prewordbreak\textmodediscretionary} @@ -829,14 +829,14 @@ \definetextmodediscretionary > {\endofsubsentencespacing\prewordbreak\endofsubsentence} -\definetextmodediscretionary . % not yet definitive +\definetextmodediscretionary . % not yet definitive {\prewordbreak\midsentence\prewordbreak} \definetextmodediscretionary ^ {\prewordbreak\discretionary{\hbox{$|$}}{}{\hbox{$|$}}% \allowbreak\postwordbreak} -\definetextmodediscretionary : +\definetextmodediscretionary : {\removeunwantedspaces\prewordbreak\kern\hspaceamount\empty{:}:} %\space\aftergroup\ignorespaces} @@ -869,10 +869,10 @@ %D Done somewhere else: \type {\enableactivediscretionaries}. -%D \macros +%D \macros %D {directdiscretionary} %D -%D In those situations where the nature of characters is +%D In those situations where the nature of characters is %D less predictable, we can use the more direct approach: \def\directdiscretionary#1% @@ -978,6 +978,12 @@ \def\restorecompoundcharacter#1% new {\catcode`#1=\csname\@nn@\string#1\endcsname\relax} +%D We can also ignore definitions (needed in for instance \XML). Beware, +%D this macro is supposed to be used grouped! + +\def\ignorecompoundcharacter + {\def\installcompoundcharacter##1 ##2{}} + %D In handling the compound characters we have to take care of %D \type{\bgroup} and \type{\egroup} tokens, so we end up with %D a multi||step interpretation macro. We look ahead for a @@ -1390,13 +1396,13 @@ % % {\hsize1cm\hyphenatedstring{ABXXXXXXXXXXC-12345-12345}} -%D \macros +%D \macros %D {disablediscretionaries,disablecompoundcharacter} -%D -%D Occasionally we need to disable this mechanism. For the -%D moment we assume that \type {|} is used. +%D +%D Occasionally we need to disable this mechanism. For the +%D moment we assume that \type {|} is used. -\def\disablediscretionaries +\def\disablediscretionaries {\def|##1|{\string##1}% \def\directdiscretionary##1{\string##1}} diff --git a/tex/context/base/syst-ext.tex b/tex/context/base/syst-ext.tex index 8970025e5..14c5beccc 100644 --- a/tex/context/base/syst-ext.tex +++ b/tex/context/base/syst-ext.tex @@ -8,8 +8,8 @@ %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. \writestatus{loading}{Context System Macro's / Extras} @@ -18,7 +18,7 @@ \unprotect -%D \macros +%D \macros %D {rawgetparameters} %D %D A raw and dirty alternative for \type {\getparameters}; no @@ -43,8 +43,8 @@ %D specified \type {\doglobal} action. The last and often only %D global assignment in a macro is done with %D \type {\dodoglobal}, but all preceding ones with -%D \type {\redoglobal}. When using only alternatives, one can -%D reset this mechanism with \type {\resetglobal}. +%D \type {\redoglobal}. When using only alternatives, one can +%D reset this mechanism with \type {\resetglobal}. \def\doglobal {\let\redoglobal\global @@ -56,7 +56,7 @@ \resetglobal -%D New: +%D New: \def\doglobal {\ifx\redoglobal\relax @@ -69,46 +69,46 @@ \def\@@dodoglobal {\resetglobal\global} -\def\saveglobal - {\let\@@dodoglobal\dodoglobal - \let\@@redoglobal\redoglobal} - -\def\restoreglobal - {\let\redoglobal\@@redoglobal - \let\dodoglobal\@@dodoglobal} - -%D A very useful application of this macro is \type {\newif}, -%D \TEX's fake boolean type. Not being a primitive, -%D \type {\global} hopelessly fails here. But a slight -%D adaption of Knuth's original macro permits: -%D +\def\saveglobal + {\let\@@dodoglobal\dodoglobal + \let\@@redoglobal\redoglobal} + +\def\restoreglobal + {\let\redoglobal\@@redoglobal + \let\dodoglobal\@@dodoglobal} + +%D A very useful application of this macro is \type {\newif}, +%D \TEX's fake boolean type. Not being a primitive, +%D \type {\global} hopelessly fails here. But a slight +%D adaption of Knuth's original macro permits: +%D %D \starttypen %D \doglobal\newif\iftest %D \stoptypen -%D +%D %D Of course one can still say: %D %D \starttypen -%D \global\testtrue +%D \global\testtrue %D \global\testfalse %D \stoptypen %D -%D Apart from the prefixes, a few more \type{\expandafters} +%D Apart from the prefixes, a few more \type{\expandafters} %D are needed: \def\newif#1% - {\count@\escapechar + {\count@\escapechar \escapechar\m@ne \expandafter\expandafter\expandafter \redoglobal\expandafter\expandafter\expandafter \edef\@if#1{true}{\let\noexpand#1\noexpand\iftrue}% \expandafter\expandafter\expandafter - \redoglobal\expandafter\expandafter\expandafter + \redoglobal\expandafter\expandafter\expandafter \edef\@if#1{false}{\let\noexpand#1\noexpand\iffalse}% \dodoglobal\@if#1{false}% - \escapechar\count@} + \escapechar\count@} -%D Also new: +%D Also new: \def\define#1% {\ifx#1\undefined @@ -178,7 +178,7 @@ %D \stoptypen %D %D In the first test, \TEX\ continues it's search for the -%D second number after reading \type{\pseudocounter}, while +%D second number after reading \type{\pseudocounter}, while %D in the second test, it stops reading after having %D encountered a real one. Tests like the first one therefore %D can give unexpected results, for instance execution @@ -201,27 +201,27 @@ % \scratchcounter=\incrementsign\scratchcounter % \advance\scratchcounter #1\relax % \dodoglobal\edef#1{\the\scratchcounter}} -% +% % \def\dododoincrement#1% % {\dodododoincrement(#1,1)} -% +% % \def\dodoincrement(#1% % {\doifnextcharelse,% % {\dodododoincrement(#1}{\dodododoincrement(#1,1}} -% +% % \def\doincrement#1% % {\def\incrementsign{#1}% % \doifnextcharelse(\dodoincrement\dododoincrement} -% +% % \def\increment{\doincrement+} % \def\decrement{\doincrement-} -% +% % And this is the one optimized for speed: -% maxcounter = 2\maxdimen=1 +% maxcounter = 2\maxdimen=1 -\def\!!zerocount {0} % alongside \zerocount -\def\!!minusone {-1} % alongside \minusone +\def\!!zerocount {0} % alongside \zerocount +\def\!!minusone {-1} % alongside \minusone \def\!!plusone {1} % alongside \plusone \beginTEX @@ -254,7 +254,7 @@ \fastincrement#1% \fi\fi} -\def\dodecrement#1% 10% faster alternative +\def\dodecrement#1% 10% faster alternative {\ifx#1\undefined %\dodoglobal\edef#1{-1}% \dodoglobal\let#1\!!minusone @@ -310,16 +310,16 @@ %D that signals the next macro that something just happened. %D This macro can take any action depending on the previous %D signal. Signals must be unique and the next macro takes care -%D of that. +%D of that. %D %D \starttypen %D \newsignal\somesignal %D \stoptypen %D -%D Signals old dimensions and can be used in skips, kerns and -%D tests like \type{\ifdim}. +%D Signals old dimensions and can be used in skips, kerns and +%D tests like \type{\ifdim}. -\newdimen\maximumsignal % step is about 0.00025pt +\newdimen\maximumsignal % step is about 0.00025pt \def\newsignal#1% {\ifx#1\undefined @@ -329,22 +329,22 @@ %D \macros %D {newskimen} -%D +%D %D \TEX\ offers 256 \DIMENSIONS\ and \SKIPS. Unfortunately this %D amount is too small to suit certain packages. Therefore when -%D possible one should use: -%D +%D possible one should use: +%D %D \starttypen %D \newskimen\tempskimen %D \stoptypen -%D +%D %D This commands allocates a \DIMENSION\ or a \SKIP, depending %D on the availability. One should be aware of the difference %D between both. When searching for some glue \TEX\ goes on %D searching till it's sure that no other glue component if %D found. This search can be canceled by using \type{\relax} -%D when possible and needed. -%D +%D when possible and needed. +%D %D \starttypen %D \def\newskimen#1% %D {\ifx#1\undefined @@ -353,12 +353,12 @@ %D \else %D \newdimen#1\relax %D \fi -%D \fi} +%D \fi} %D \stoptypen -%D -%D In order to make this macro work in plain \TEX\ too, we -%D use the following alternative, which fools \TEX\ about -%D the new commands being \type {\outer} ones. +%D +%D In order to make this macro work in plain \TEX\ too, we +%D use the following alternative, which fools \TEX\ about +%D the new commands being \type {\outer} ones. \def\newskimen#1% {\ifx#1\undefined @@ -369,13 +369,13 @@ %D {strippedcsname} %D %D The next macro can be very useful when using \type{\csname} -%D like in: +%D like in: %D %D \starttypen %D \csname if\strippedcsname\something\endcsname %D \stoptypen %D -%D This expands to \type{\ifsomething}. +%D This expands to \type{\ifsomething}. \def\strippedcsname {\expandafter\gobbleoneargument\string} @@ -383,51 +383,51 @@ %D \macros %D {savenormalmeaning} %D -%D We will use this one in: +%D We will use this one in: \def\savenormalmeaning#1% {\ifundefined{normal\strippedcsname#1}% - \letvalue{normal\strippedcsname#1}#1% + \letvalue{normal\strippedcsname#1}#1% \fi} %D \macros -%D {newconditional, -%D settrue, setfalse, +%D {newconditional, +%D settrue, setfalse, %D ifconditional} -%D -%D \TEX's lacks boolean variables, although the \PLAIN\ format -%D implements \type{\newif}. The main disadvantage of this -%D scheme is that it takes three hash table entries. A more -%D memory saving alternative is presented here. A conditional -%D is defined by: -%D +%D +%D \TEX's lacks boolean variables, although the \PLAIN\ format +%D implements \type{\newif}. The main disadvantage of this +%D scheme is that it takes three hash table entries. A more +%D memory saving alternative is presented here. A conditional +%D is defined by: +%D %D \starttypen %D \newconditional\doublesided %D \setfalse -%D -%D Setting a conditional is done by \type{\settrue} and -%D \type{\setfalse}: -%D +%D +%D Setting a conditional is done by \type{\settrue} and +%D \type{\setfalse}: +%D %D \starttypen %D \settrue\doublesided %D \setfalse -%D -%D while testing is accomplished by: -%D +%D +%D while testing is accomplished by: +%D %D \starttypen %D \ifconditional\doublesided ... \else ... \fi %D \setfalse -%D -%D We cannot use the simple scheme: +%D +%D We cannot use the simple scheme: %D %D \starttypen %D \def\settrue#1{\let#1=\iftrue} %D \def\settrue#1{\let#1=\iffalse} %D \stoptypen %D -%D Such an implementation gives problems with nested -%D conditionals. The next implementation is abaou as fast -%D and just as straightforward: +%D Such an implementation gives problems with nested +%D conditionals. The next implementation is abaou as fast +%D and just as straightforward: \def\settrue #1{\chardef#1\zerocount} \def\setfalse#1{\chardef#1\plusone} @@ -437,13 +437,13 @@ %D \macros %D {ifzeropt} -%D -%D The next macro is both cosmetic and byte saving. It is -%D pretty \type{\if}||safe too. It can be used in cases +%D +%D The next macro is both cosmetic and byte saving. It is +%D pretty \type{\if}||safe too. It can be used in cases %D like: %D -%D \starttypen -%D \ifzeropt \somedimen ... \else ... \fi +%D \starttypen +%D \ifzeropt \somedimen ... \else ... \fi %D \stoptypen \let\ifzeropt\ifcase @@ -453,11 +453,11 @@ %D dostepwiserecurse, %D for} %D -%D \TEX\ does not offer us powerfull for||loop mechanisms. On +%D \TEX\ does not offer us powerfull for||loop mechanisms. On %D the other hand its recursion engine is quite unique. We %D therefore identify the for||looping macros by this method. %D The most simple alternative is the one that only needs a -%D number. +%D number. %D %D \starttypen %D \dorecurse {n} {whatever we want} @@ -486,10 +486,10 @@ %D \type{\recurselevel} concern the outer loop, while the third %D and fifth one concern the inner loop. The depth of the %D nesting is available for inspection in \type{\recursedepth}. -%D -%D Both \type{\recurselevel} and \type{\recursedepth} are +%D +%D Both \type{\recurselevel} and \type{\recursedepth} are %D macros. The real \COUNTERS\ are hidden from the user because -%D we don't want any interference. +%D we don't want any interference. \newcount\outerrecurse \newcount\innerrecurse @@ -500,8 +500,8 @@ \let\nextrecurse\relax %D Acceptable: -%D -%D \starttypen +%D +%D \starttypen %D \long\def\dostepwiserecurse#1#2#3% %D {\let\nextrecurse\gobblefourarguments %D \ifnum#3>0\relax\ifnum#2<#1\relax\else @@ -512,10 +512,10 @@ %D \fi\fi %D \nextrecurse{#1}{#2}{#3}} %D \stoptypen -%D -%D Better: -%D -%D \starttypen +%D +%D Better: +%D +%D \starttypen %D \long\def\dostepwiserecurse#1#2#3% %D {\let\nextrecurse\gobblefourarguments %D \ifnum#3>0\relax \ifnum#2<#1\relax \else @@ -524,13 +524,13 @@ %D \def\nextrecurse{\dosetstepwiserecurse<}% %D \fi \fi \fi %D \nextrecurse{#1}{#2}{#3}} -%D +%D %D \def\@@irecurse{@@irecurse} % stepper -%D \def\@@nrecurse{@@nrecurse} % number of steps -%D \def\@@srecurse{@@srecurse} % step -%D \def\@@drecurse{@@drecurse} % direction, < or > -%D \def\@@arecurse{@@arecurse} % action -%D +%D \def\@@nrecurse{@@nrecurse} % number of steps +%D \def\@@srecurse{@@srecurse} % step +%D \def\@@drecurse{@@drecurse} % direction, < or > +%D \def\@@arecurse{@@arecurse} % action +%D %D \long\def\dosetstepwiserecurse#1#2#3#4#5% %D {\global\advance\outerrecurse 1 %D \setevalue{\@@drecurse\recursedepth}{#1}% @@ -539,10 +539,10 @@ %D \setevalue{\@@srecurse\recursedepth}{\number#4}% %D \long\setvalue{\@@arecurse\recursedepth}{#5}% %D \dodorecurse} -%D +%D %D \def\donorecurse %D {} -%D +%D %D \def\dododorecurse %D {\edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}% %D \getvalue{\@@arecurse\recursedepth}% @@ -551,7 +551,7 @@ %D \advance\innerrecurse \csname\@@srecurse\recursedepth\endcsname %D \setevalue{\@@irecurse\recursedepth}{\the\innerrecurse}% %D \dodorecurse} -%D +%D %D \def\dodorecurse %D {\ifnum\csname\@@irecurse\recursedepth\endcsname %D \csname\@@drecurse\recursedepth\endcsname @@ -560,20 +560,20 @@ %D \else %D \expandafter\dododorecurse %D \fi} -%D +%D %D \def\nododorecurse %D {\global\advance\outerrecurse -1 %D \edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}} %D \stoptypen -%D -%D Cleaner and much faster: +%D +%D Cleaner and much faster: \def\@@irecurse{@@ir@@} % ecurse} % stepper -\def\@@arecurse{@@ar@@} % ecurse} % action +\def\@@arecurse{@@ar@@} % ecurse} % action % \mathchardef -\long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 +\long\def\dostepwiserecurse#1#2#3#4% can be made faster by postponing #4 {\global\advance\outerrecurse \plusone \long\global\@EA\def\csname\@@arecurse\recursedepth\endcsname{#4}% \global\@EA\let\csname\@@irecurse\recursedepth\endcsname\recurselevel @@ -595,57 +595,57 @@ \fi \fi\expanded{\nextrecurse{\number#1}{\number#2}{\number#3}}} -\beginETEX \numexpr +\beginETEX \numexpr -\long\def\dodostepwiserecurse#1#2#3% from to step +\long\def\dodostepwiserecurse#1#2#3% from to step {\ifnum#1>#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \@EAEAEA\redostepwiserecurse\@EA - \fi\@EA{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} + \fi\@EA{\the\numexpr\recurselevel+#3\relax}{#2}{#3}} \endETEX -\beginTEX +\beginTEX -\long\def\dodostepwiserecurse#1#2#3% from to step +\long\def\dodostepwiserecurse#1#2#3% from to step {\ifnum#1>#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse#3\relax \@EAEAEA\redostepwiserecurse\@EA - \fi\@EA{\the\innerrecurse}{#2}{#3}} + \fi\@EA{\the\innerrecurse}{#2}{#3}} \endTEX \def\redostepwiserecurse {\csname\@@arecurse\recursedepth\endcsname\dodostepwiserecurse} -\beginETEX \numexpr +\beginETEX \numexpr -\long\def\dodostepwisereverse#1#2#3% from to step +\long\def\dodostepwisereverse#1#2#3% from to step {\ifnum#1<#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% \@EAEAEA\redostepwisereverse\@EA - \fi\@EA{\the\numexpr\recurselevel#3\relax}{#2}{#3}} + \fi\@EA{\the\numexpr\recurselevel#3\relax}{#2}{#3}} \endETEX -\beginTEX +\beginTEX -\long\def\dodostepwisereverse#1#2#3% from to step +\long\def\dodostepwisereverse#1#2#3% from to step {\ifnum#1<#2\relax \@EA\nodostepwiserecurse \else \def\recurselevel{#1}% - \innerrecurse#1\relax + \innerrecurse#1\relax \advance\innerrecurse#3\relax \@EAEAEA\redostepwisereverse\@EA - \fi\@EA{\the\innerrecurse}{#2}{#3}} + \fi\@EA{\the\innerrecurse}{#2}{#3}} \endTEX @@ -682,8 +682,8 @@ %D \dostepwiserecurse {10} {1} {-2} {...} %D \stoptypen %D -%D Because the simple case is used often, we implement it -%D more efficiently: +%D Because the simple case is used often, we implement it +%D more efficiently: \long\def\dorecurse#1% {\ifcase#1\relax @@ -710,26 +710,26 @@ \beginETEX \numexpr -\long\def\dodorecurse#1#2% from to +\long\def\dodorecurse#1#2% from to {\ifnum#1>#2\relax \@EA\nodorecurse \else \def\recurselevel{#1}% \@EAEAEA\redorecurse - \fi\@EA{\the\numexpr\recurselevel+1\relax}{#2}} + \fi\@EA{\the\numexpr\recurselevel+1\relax}{#2}} \endETEX \beginTEX -\long\def\dodorecurse#1#2% from to +\long\def\dodorecurse#1#2% from to {\ifnum#1>#2\relax \@EA\nodorecurse \else \def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse\plusone \@EAEAEA\redorecurse - \fi\@EA{\the\innerrecurse}{#2}} + \fi\@EA{\the\innerrecurse}{#2}} \endTEX @@ -742,7 +742,7 @@ %D The third alternative looks a bit different and uses a %D pseudo counter. When this macro is nested, we have to use -%D different counters. This time we use keywords. +%D different counters. This time we use keywords. %D %D \starttypen %D \def\alfa{2} \def\beta{100} \def\gamma{3} @@ -754,11 +754,11 @@ %D \for \n=55 \to 100 \step 2 \do {... \n ...} %D \stoptypen %D -%D Only in the third example we need to predefine \type{\n}. +%D Only in the third example we need to predefine \type{\n}. %D The use of \type{\od} as a dilimiter would have made nested -%D use more problematic. +%D use more problematic. -% maybe this one will becoem obsolete +% maybe this one will becoem obsolete \def\for#1=#2\to#3\step#4\do#5% {\dostepwiserecurse{#2}{#3}{#4} @@ -767,47 +767,47 @@ %D \macros %D {doloop,exitloop} %D -%D Sometimes loops are not determined by counters, but by -%D (a combinations of) conditions. We therefore implement a -%D straightforward loop, which can only be left when we -%D explictly exit it. Nesting is supported. First we present -%D a more extensive alternative. +%D Sometimes loops are not determined by counters, but by +%D (a combinations of) conditions. We therefore implement a +%D straightforward loop, which can only be left when we +%D explictly exit it. Nesting is supported. First we present +%D a more extensive alternative. %D %D \starttypen %D \doloop %D {Some kind of typesetting punishment \par %D \ifnum\pageno>100 \exitloop \fi} %D \stoptypen -%D -%D When needed, one can call for \type{\looplevel} and +%D +%D When needed, one can call for \type{\looplevel} and %D \type{\loopdepth}. %D -%D If we write this macros from scratch, we end up with -%D something like the ones described above: -%D +%D If we write this macros from scratch, we end up with +%D something like the ones described above: +%D %D \starttypen -%D \def\@@eloop{@@eloop} % exit +%D \def\@@eloop{@@eloop} % exit %D \def\@@iloop{@@iloop} % stepper %D \def\@@aloop{@@aloop} % action -%D +%D %D \newcount\outerloop -%D +%D %D \def\loopdepth% %D {\the\outerloop} -%D +%D %D \def\exitloop% %D {\setevalue{\@@eloop\loopdepth}{0}} -%D +%D %D \long\def\doloop#1% %D {\global\advance\outerloop by 1 %D \setevalue{\@@iloop\loopdepth}{1}% %D \setevalue{\@@eloop\loopdepth}{1}% %D \long\setvalue{\@@aloop\loopdepth}{#1}% %D \dodoloop} -%D +%D %D \def\dodonoloop% %D {\global\advance\outerloop by -1\relax} -%D +%D %D \def\dododoloop% %D {\edef\looplevel{\getvalue{\@@iloop\loopdepth}}% %D \innerrecurse=\looplevel @@ -816,41 +816,41 @@ %D \getvalue{\@@aloop\loopdepth}% %D \edef\looplevel{\getvalue{\@@iloop\loopdepth}}% %D \dodoloop} -%D +%D %D \def\dodoloop% %D {\ifnum\getvalue{\@@eloop\loopdepth}=0 %D \expandafter\dodonoloop %D \else %D \expandafter\dododoloop -%D \fi} -%D +%D \fi} +%D %D \def\doloop% %D {\dostepwiserecurse{1}{\maxdimen}{1}} -%D +%D %D \def\exitloop %D {\setvalue{\@@irecurse\recursedepth}{\maxdimen}} -%D +%D %D \def\looplevel{\recurselevel} %D \def\loopdepth{\recursedepth} %D \stoptypen -%D -%D We don't have to declare new counters for \type{\looplevel} -%D and \type{\loopdepth} because we can use \type{\recurselevel} -%D and \type{\recursedepth}. %D -%D We prefer however a more byte saving implementation, that -%D executes of course a bit slower. -%D +%D We don't have to declare new counters for \type{\looplevel} +%D and \type{\loopdepth} because we can use \type{\recurselevel} +%D and \type{\recursedepth}. +%D +%D We prefer however a more byte saving implementation, that +%D executes of course a bit slower. +%D %D \starttypen %D \def\doloop% %D {\dostepwiserecurse1\maxdimen1} -%D +%D %D \def\exitloop% %D {\letvalue{\@@irecurse\recursedepth}\maxdimen} %D \stoptypen -%D -%D Although, the next version is faster because it used the -%D simple loop. +%D +%D Although, the next version is faster because it used the +%D simple loop. \let\endofloop\donothing @@ -863,9 +863,9 @@ \beginETEX \numexpr -\long\def\dodoloop#1% +\long\def\dodoloop#1% {\def\recurselevel{#1}% - \@EA\redoloop\@EA{\the\numexpr\recurselevel+1\relax}} + \@EA\redoloop\@EA{\the\numexpr\recurselevel+1\relax}} \endETEX @@ -874,7 +874,7 @@ \long\def\dodoloop#1% {\def\recurselevel{#1}% \innerrecurse#1\advance\innerrecurse\plusone - \@EA\redoloop\@EA{\the\innerrecurse}} + \@EA\redoloop\@EA{\the\innerrecurse}} \endTEX @@ -885,29 +885,29 @@ {\@EA\let\@EA\recurselevel\csname\@@irecurse\recursedepth\endcsname \global\advance\outerrecurse \minusone } -\def\exitloop % \exitloop quits at end +\def\exitloop % \exitloop quits at end {\let\endofloop\nodoloop} -\long\def\exitloopnow#1\endofloop % \exitloopnow quits directly +\long\def\exitloopnow#1\endofloop % \exitloopnow quits directly {\nodoloop} %D The loop is executed at least once, so beware of situations -%D like: +%D like: %D %D \starttypen -%D \doloop {\exitloop some commands} +%D \doloop {\exitloop some commands} %D \stoptypen %D %D It's just a matter of putting the text into the \type{\if} -%D statement that should be there anyway, like in: +%D statement that should be there anyway, like in: %D %D \starttypen -%D \doloop {\ifwhatever \exitloop \else some commands\fi} +%D \doloop {\ifwhatever \exitloop \else some commands\fi} %D \stoptypen %D -%D You can also quit a loop immediately, by using \type -%D {\exitloopnow} instead. Beware, this is more sensitive -%D for conditional errors. +%D You can also quit a loop immediately, by using \type +%D {\exitloopnow} instead. Beware, this is more sensitive +%D for conditional errors. %D \macros %D {newevery,everyline,EveryLine,EveryPar} @@ -925,31 +925,31 @@ %D basis. Just by calling \type{\EveryPar{}} and %D \type{\EveryLine{}} we restore the old situation. %D -%D The definition command \type{\DoWithEvery} will be quite -%D unreadable, so let's first show an implementation that -%D shows how things are done: +%D The definition command \type{\DoWithEvery} will be quite +%D unreadable, so let's first show an implementation that +%D shows how things are done: %D -%D \starttypen +%D \starttypen %D \newtoks \everyline %D \newtoks \oldeveryline %D \newif \ifeveryline -%D +%D %D \def\DoWithEvery#1#2#3#4% %D {#3\else\edef\next{\noexpand#2={\the#1}}\next\fi %D \edef\next{\noexpand#1={\the#2\the\scratchtoks}}\next %D #4} -%D +%D %D \def\doEveryLine% %D {\DoWithEvery\everyline\oldeveryline\ifeveryline\everylinetrue} -%D +%D %D \def\EveryLine% %D {\afterassignment\doEveryLine\scratchtoks} %D -%D The real implementation is a bit more complicated but we -%D prefer something more versatile. +%D The real implementation is a bit more complicated but we +%D prefer something more versatile. -% the old one -% +% the old one +% % \def\DoWithEvery#1% % {\csname if\strippedcsname#1\endcsname \else % \edef\next% @@ -962,10 +962,10 @@ % {\@EA\the\csname old\strippedcsname#1\endcsname\the\scratchtoks}}% % \next % \csname\strippedcsname#1true\endcsname} -% +% % \def\dowithevery#1% % {\@EA\afterassignment\csname do\strippedcsname#1\endcsname\scratchtoks} -% +% % \def\newevery#1#2% % {\ifx#1\undefined\newtoks#1\fi % \ifx#2\relax\else\ifx#2\undefined @@ -975,7 +975,7 @@ % \def#2{\dowithevery#2}% % \fi\fi} % -% cleaner and more efficient +% cleaner and more efficient %\def\dowithevery#1% % {\def\dodowithevery% @@ -988,7 +988,7 @@ % \next}% % \afterassignment\dodowithevery\scratchtoks} % -% more efficient: +% more efficient: \def\dodowithevery#1% {\ifcase\csname c\strippedcsname#1\endcsname \expandafter\chardef @@ -1003,10 +1003,10 @@ {\def\next{\dodowithevery#1}% \afterassignment\next\scratchtoks} -\bgroup \let\newtoks\relax % plain safe (\outer) +\bgroup \let\newtoks\relax % plain safe (\outer) \gdef\newevery#1#2% - {\ifx#1\undefined\csname newtoks\endcsname#1\fi % plain safe (\outer) + {\ifx#1\undefined\csname newtoks\endcsname#1\fi % plain safe (\outer) \ifx#2\relax\else\ifx#2\undefined \expandafter\newtoks\csname t\strippedcsname#1\endcsname \expandafter\chardef\csname c\strippedcsname#1\endcsname\zerocount @@ -1015,59 +1015,59 @@ \egroup -%D The first \type {\outer} hack is needed to trick \TEX\ -%D into thinking that \type {\newtoks} is no outer macro, -%D the second hack is needed due to some funny interaction -%D between outer macros and \type {\if} at expansion time. +%D The first \type {\outer} hack is needed to trick \TEX\ +%D into thinking that \type {\newtoks} is no outer macro, +%D the second hack is needed due to some funny interaction +%D between outer macros and \type {\if} at expansion time. -%D This one permits definitions like: +%D This one permits definitions like: \newevery \everypar \EveryPar \newevery \everyline \EveryLine -%D and how about: +%D and how about: \newevery \neverypar \NeveryPar -%D Which we're going to use indeed! When the second argument -%D equals \type {\relax}, the first token list is created -%D unless it is already defined. +%D Which we're going to use indeed! When the second argument +%D equals \type {\relax}, the first token list is created +%D unless it is already defined. -%D Technically spoken we could have used the method we are -%D going to present in the visual debugger. First we save -%D the primitive \type{\everypar}: -%D -%D \starttypen +%D Technically spoken we could have used the method we are +%D going to present in the visual debugger. First we save +%D the primitive \type{\everypar}: +%D +%D \starttypen %D \let\normaleverypar=\everypar %D \stoptypen %D -%D Next we allocate a \TOKENLIST\ named \type{\everypar}, -%D which means that \type{\everypar} is no longer a primitive -%D but something like \type{\toks44}. +%D Next we allocate a \TOKENLIST\ named \type{\everypar}, +%D which means that \type{\everypar} is no longer a primitive +%D but something like \type{\toks44}. %D -%D \starttypen +%D \starttypen %D \newtoks\everypar %D \stoptypen %D -%D Because \TEX\ now executes \type{\normaleverypar} instead -%D of \type{\everypar}, we are ready to assign some tokens to +%D Because \TEX\ now executes \type{\normaleverypar} instead +%D of \type{\everypar}, we are ready to assign some tokens to %D this internally known and used \TOKENLIST. -%D -%D \starttypen +%D +%D \starttypen %D \normaleverypar={all the things the system wants to do \the\everypar} %D \stoptypen -%D -%D Where the user can provide his own tokens to be expanded -%D every time he expects them to expand. -%D -%D \starttypen +%D +%D Where the user can provide his own tokens to be expanded +%D every time he expects them to expand. +%D +%D \starttypen %D \everypar={something the user wants to do} %D \stoptypen -%D -%D We don't use this method because it undoubtly leads to -%D confusing situations, especially when other packages are -%D used, but it's this kind of tricks that make \TEX\ so -%D powerful. +%D +%D We don't use this method because it undoubtly leads to +%D confusing situations, especially when other packages are +%D used, but it's this kind of tricks that make \TEX\ so +%D powerful. %D \macros %D {convertargument,convertcommand,convertvalue} @@ -1111,7 +1111,7 @@ % \dodoglobal\edef#2{\convertedcommand\convertedargument}} \long\def\convertargument#1\to#2% - {\long\def#2{#1}% saves a restore + {\long\def#2{#1}% saves a restore \dodoglobal\edef#2{\convertedcommand#2}} \long\def\convertcommand#1\to#2% @@ -1124,20 +1124,20 @@ %D In \ETEX\ we can use \type {\detokenize} and gain some %D speed, but in general far less that 1\% for \type -%D {\convertargument} and nil for \type {\convertcommand}. -%D This macro is more robust than the pure \TEX\ one, -%D something I found out when primitives like \type +%D {\convertargument} and nil for \type {\convertcommand}. +%D This macro is more robust than the pure \TEX\ one, +%D something I found out when primitives like \type %D {\jobname} were fed (or something undefined). -\beginETEX \detokenize +\beginETEX \detokenize \long\def\convertargument#1\to#2% {\dodoglobal\edef#2{\detokenize{#1}}} - -% \long\def\convertcommand#1\to#2% + +% \long\def\convertcommand#1\to#2% % {\@EA\dodoglobal\@EA\edef\@EA#2\@EA{\@EA\detokenize\@EA{#1}}} - -\long\def\convertcommand#1\to#2% + +\long\def\convertcommand#1\to#2% {\dodoglobal\edef#2{\@EA\detokenize\@EA{#1}}} \endETEX @@ -1145,8 +1145,8 @@ %D When you try to convert a primitive command, you'll find %D out that the \ETEX\ method fails on for instance \type %D {\jobname} in the sense that it returns the filename -%D instead of just \type {\jobname}. So far this does not -%D give real problems. +%D instead of just \type {\jobname}. So far this does not +%D give real problems. %D This is typically a macro that one comes to after reading %D the \TEX book carefully. Even then, the definite solution @@ -1157,26 +1157,26 @@ %D \def\doconvertargument#1->#2\\\\{#2} %D \stoptypen %D -%D The \type{-}, the delimiter \type{\\\\} and the the second +%D The \type{-}, the delimiter \type{\\\\} and the the second %D argument are completely redundant. % %D As said, the \TEX\ alternative fails on expanding primitives, -% %D like in: -% %D +% %D like in: +% %D % %D \starttypen % %D \convertcommand\someprimitive\to\ascii % %D \stoptypen -% %D -% %D Because these primitives convert to themselves, we can use -% %D the backslash as a signal to treat them different. At the -% %D cost of slightly more overhead we can therefore define a +% %D +% %D Because these primitives convert to themselves, we can use +% %D the backslash as a signal to treat them different. At the +% %D cost of slightly more overhead we can therefore define a % %D more robust alternative. The catcode trickery is needed to -% %D get the backslash into the test as character (and not as -% %D escape, letter or whatever code else). +% %D get the backslash into the test as character (and not as +% %D escape, letter or whatever code else). % % % % does not work: -% % -% % \beginTEX +% % +% % \beginTEX % % % % \let\dodoconvertargument\doconvertargument % % @@ -1186,13 +1186,13 @@ % % *gdef*doconvertargument#1% % % {*ifx#1\*else*expandafter*dodoconvertargument*fi#1} % % *egroup -% % +% % % % \endTEX %D \macros %D {showvalue,showargument} %D -%D Two handy macros for testing purposes only: +%D Two handy macros for testing purposes only: \def\showvalue#1% {\expandafter\show\csname#1\endcsname} @@ -1206,13 +1206,13 @@ %D We can use both commands in testing, but alas, not all %D meanings expand to something \type {->}. This is no problem %D in the \ETEX\ implementation, but since we want -%D compatibility, we need: +%D compatibility, we need: %D -%D \starttypen +%D \starttypen %D \doifmeaningelse {\next} {\something} {true} {false} -%D \stoptypen +%D \stoptypen %D -%D Watch the one level expansion of the second argument. +%D Watch the one level expansion of the second argument. \def\doifmeaningelse#1#2% {\edef\!!stringa{\meaning#1}% @@ -1226,15 +1226,15 @@ %D \macros %D {doifsamestringselse,doifsamestring,doifnotsamestring} %D -%D The next comparison macro converts the arguments into -%D expanded strings. This command can be used to compare for -%D instance \type {\jobname} with a name stored in a macro. +%D The next comparison macro converts the arguments into +%D expanded strings. This command can be used to compare for +%D instance \type {\jobname} with a name stored in a macro. \def\@@doifsamestringelse#1#2% {\edef\!!stringa{#1}% \edef\!!stringb{#2}% \convertcommand\!!stringa\to\!!stringa - \convertcommand\!!stringb\to\!!stringb + \convertcommand\!!stringb\to\!!stringb \ifx\!!stringa\!!stringb} \def\doifsamestringelse#1#2% @@ -1279,8 +1279,8 @@ %D \stoptypen %D %D The first three calls result in the threefold message -%D \type{OK}, the fourth one shows the three elements of -%D \type{\first}. The command \type{\ExpandFirstAfter} takes +%D \type{OK}, the fourth one shows the three elements of +%D \type{\first}. The command \type{\ExpandFirstAfter} takes %D care of (first) arguments that are delimited by \type{[ ]}, %D but the faster \type{\ExpandAfter} does not. @@ -1369,7 +1369,7 @@ %D \hbox to \hsize{\rubish} %D \stoptypen %D -%D As we will see in the core modules, this macro permits +%D As we will see in the core modules, this macro permits %D constructions like: %D %D \starttypen @@ -1403,7 +1403,7 @@ %D %D We don't explicitly test if the macro is defined. -\def\assignifempty#1#2% can be sped up +\def\assignifempty#1#2% can be sped up {\doifsomething{#1}{\def#1{#2}}} % {\doifnot{#1}{}{\def#1{#2}}} %D \macros @@ -1484,8 +1484,8 @@ \def\gobbleuntilrelax#1\relax {} -%D The next one simply expands the pickup up tokens. -%D +%D The next one simply expands the pickup up tokens. +%D %D \starttypen %D \processuntil{sequence} %D \stoptypen @@ -1559,7 +1559,7 @@ %D Here \TEX\ typesets \type{\bf the right way} unbreakable %D at the end of the line. The solution mentioned before does %D not work here. -%D +%D %D \starttypen %D \long\unexpanded\def\groupedcommand#1#2% %D {\bgroup @@ -1570,25 +1570,25 @@ %D \afterassignment\BeforeGroup %D \let\next=} %D \stoptypen -%D -%D We used this method some time until the next alternative -%D was needed. From now on we support both -%D -%D \starttypen +%D +%D We used this method some time until the next alternative +%D was needed. From now on we support both +%D +%D \starttypen %D to be \bold{bold} or not, that's the question %D \stoptypen -%D -%D and -%D -%D \starttypen +%D +%D and +%D +%D \starttypen %D to be {\bold bold} or not, that's the question %D \stoptypen -%D +%D %D This alternative checks for a \type{\bgroup} token first. %D The internal alternative does not accept the box handling %D mentioned before, but further nesting works all right. The %D extra \type{\bgroup}||\type{\egroup} is needed to keep -%D \type{\AfterGroup} both into sight and local. +%D \type{\AfterGroup} both into sight and local. \long\def\HandleGroup#1#2% {\bgroup @@ -1614,20 +1614,20 @@ %D \next{#1}{#2}}% %D \futurelet\next\dogroupedcommand} %D \stoptypen -%D -%D From the missing paragraph number one can deduce that the -%D last macro is not the real one yet. I considered it a -%D nuisance that -%D +%D +%D From the missing paragraph number one can deduce that the +%D last macro is not the real one yet. I considered it a +%D nuisance that +%D %D \starttypen -%D \kleur[groen] -%D {as grass} +%D \kleur[groen] +%D {as grass} %D \stoptypen -%D +%D %D was not interpreted as one would expect. This is due to the %D fact that \type{\futurelet} obeys blank spaces, and a %D line||ending token is treated as a blank space. So the final -%D implementation became: +%D implementation became: %\long\unexpanded\def\groupedcommand#1#2% % {\bgroup @@ -1635,23 +1635,23 @@ % {\ifx\next\bgroup % \def\\{\egroup\HandleGroup{#1}{#2}}% % \else\ifx\next\blankspace -% \def\\ {\egroup\groupedcommand{#1}{#2}}% +% \def\\ {\egroup\groupedcommand{#1}{#2}}% % \else % \def\\{\egroup\HandleNoGroup{#1}{#2}}% % \fi\fi % \\}% % \futurelet\next\dogroupedcommand} % -% compatible ? +% compatible ? \long\unexpanded\def\groupedcommand#1#2% - {\doifnextcharelse\bgroup + {\doifnextcharelse\bgroup {\HandleGroup{#1}{#2}}{\HandleNoGroup{#1}{#2}}} -%D Users should be aware of the fact that grouping can -%D interfere with ones paragraph settings that are executed -%D after the paragraph is closed. One should therefore -%D explictly close the paragraph with \type{\par}, else the +%D Users should be aware of the fact that grouping can +%D interfere with ones paragraph settings that are executed +%D after the paragraph is closed. One should therefore +%D explictly close the paragraph with \type{\par}, else the %D settings will be forgotten and not applied. So it's: %D %D \starttypen @@ -1678,7 +1678,7 @@ \def\showdefinederror#1#2% {\writestatus{system}{#1 #2 replaces a macro, use CAPITALS!}} - + \def\checkdefined#1#2#3% {\doifdefined{#3}{\showdefinederror{#2}{#3}}} @@ -1743,7 +1743,7 @@ %D The original definition was: %D -%D \starttypen +%D \starttypen %D \def\doGotoPar %D {\ifx\nextchar\blankspace %D \@EA\GotoPar @@ -1752,21 +1752,21 @@ %D \else %D \@EAEAEA\dodoGotoPar %D \fi\fi} -%D +%D %D \def\dodoGotoPar %D {\the\BeforePar %D \BeforePar\emptytoks %D \nextchar} -%D +%D %D \def\GotoPar %D {\afterassignment\doGotoPar\let\nextchar=} -%D \stoptypen +%D \stoptypen %D Its big brother \type{\GetPar} redefines the \type{\par} %D primitive, which can lead to unexpected results, depending %D in the context. %D -%D \starttypen +%D \starttypen %D \def\GetPar %D {\expanded %D {\BeforePar @@ -1780,31 +1780,31 @@ %D \BeforePar\emptytoks %D \AfterPar\emptytoks}}}% %D \GotoPar} -%D \stoptypen +%D \stoptypen %D However, we can implement a better alternative by using: %D -%D \starttypen +%D \starttypen %D \def\dowithpar#1#2% -%D {\def\handlepar##1\par{#1##1#2}% -%D \def\gobblepar\par{\dowithpar{#1}{#2}}% +%D {\def\handlepar##1\par{#1##1#2}% +%D \def\gobblepar\par{\dowithpar{#1}{#2}}% %D \doifnextcharelse\par\gobblepar\handlepar} %D \stoptypen -%D -%D Or, nicer +%D +%D Or, nicer \def\redowithpar\par - {\doifnextcharelse\par\redowithpar\dodowithpar}% + {\doifnextcharelse\par\redowithpar\dodowithpar}% \def\dowithpar#1#2% - {\def\dodowithpar##1\par{#1##1#2}% + {\def\dodowithpar##1\par{#1##1#2}% \redowithpar\par} \def\redogotopar\par - {\doifnextcharelse\par\redogotopar\dodogotopar}% + {\doifnextcharelse\par\redogotopar\dodogotopar}% \def\dogotopar#1% - {\def\dodogotopar{#1}% + {\def\dodogotopar{#1}% \redogotopar\par} %D The previosuly defined macros now become: @@ -1873,7 +1873,7 @@ %D \stoptypen %D %D A second and better implementation was: -%D +%D %D \starttypen %D \def\dowithpargument#1% %D {\def\nextpar##1 \par{#1{##1}}% @@ -1882,10 +1882,10 @@ %D {\nextarg} %D {\nextpar}} %D \stoptypen -%D -%D We ended up with an alternative that also accepts en empty -%D argument. This command permits for instance chapters to -%D have no title. +%D +%D We ended up with an alternative that also accepts en empty +%D argument. This command permits for instance chapters to +%D have no title. %\def\dowithpargument#1% % {\def\nextpar##1 \par{#1{##1}}% @@ -1981,7 +1981,7 @@ %D a row. In both commands, the \type{n*} is optional. When this %D specification is missing, the command executes once. -% ! ! ! obsolete ! ! ! +% ! ! ! obsolete ! ! ! \def\dorepeat[#1]% {\dodorepeat#1*\empty*\relax} @@ -2005,7 +2005,7 @@ % \else % \dorecurse{#1}{#5{#2#3}}% % \fi} -% +% % more complex but better: \long\def\dodorepeatwithcommand#1*#2#3*#4\relax#5% @@ -2026,32 +2026,32 @@ \dorecurse{#1}{#5{#2#3}}% \fi\fi\fi} -%D \macros +%D \macros %D {normalbgroup,normalgroup} %D -%D No comment. +%D No comment. \let\normalbgroup\bgroup \let\normalegroup\egroup -%D \macros +%D \macros %D {doifstringinstringelse} %D %D The next macro is meant for situations where both strings -%D are macros. This save some unneeded expansion. +%D are macros. This save some unneeded expansion. %D %D \starttypen -%D \long\def\doifstringinstringelse#1#2% +%D \long\def\doifstringinstringelse#1#2% %D {\p!doifinstringelse#1#2% %D \@EA\firstoftwoarguments %D \else %D \@EA\secondoftwoarguments %D \fi} -%D \stoptypen +%D \stoptypen %D %D A bit faster is: -\def\pp!doifstringinstringelse#1% +\def\pp!doifstringinstringelse#1% {\if#1@% \@EA\secondoftwoarguments \else @@ -2059,9 +2059,9 @@ \fi} \long\def\doifstringinstringelse#1#2% - {\long\@EA\def\@EA\p!doifstringinstringelse\@EA##\@EA1#1##2##3\war - {\pp!doifstringinstringelse##2}% - \@EA\@EA\@EA\p!doifstringinstringelse\@EA#2#1@@\war} + {\long\@EA\def\@EA\p!doifstringinstringelse\@EA##\@EA1#1##2##3\war + {\pp!doifstringinstringelse##2}% + \@EA\@EA\@EA\p!doifstringinstringelse\@EA#2#1@@\war} %D \macros %D {appendtoks,prependtoks,appendtoksonce,prependtoksonce, @@ -2082,20 +2082,20 @@ %D macros are clones of the ones implemented in page~378 of %D Knuth's \TeX book. %D -%D A simple implementation, one that does not handle braces -%D at the outer level, is: -%D +%D A simple implementation, one that does not handle braces +%D at the outer level, is: +%D %D \starttypen %D \def\appendtoks#1\to#2% %D {\scratchtoks={#1}% %D \expanded{\dodoglobal\noexpand#2{\the#2\the\scratchtoks}}} -%D +%D %D \def\prependtoks#1\to#2% %D {\scratchtoks={#1}% %D \expanded{\dodoglobal\noexpand#2{\the\scratchtoks\the#2}}} %D \stoptypen %D -%D But here we prefer: +%D But here we prefer: \newtoks\@@scratchtoks @@ -2107,7 +2107,7 @@ % \long\def\doappendtoks#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \expanded{\dodoglobal\noexpand#2{\the#2\the\@@scratchtoks}}} -% +% % \long\def\doprependtoks#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \expanded{\dodoglobal\noexpand#2{\the\@@scratchtoks\the#2}}} @@ -2119,26 +2119,26 @@ % \def\dodoappendtoks#1% % {\expanded{\dodoglobal\noexpand#1{\the#1\the\@@scratchtoks}}} -% +% % \def\dodoprependtoks#1% % {\expanded{\dodoglobal\noexpand#1{\the\@@scratchtoks\the#1}}} -% +% % \long\def\doappendtoks#1\to% % {\@@scratchtoks\@EA{\gobbleoneargument#1}\dodoappendtoks} -% +% % \long\def\doprependtoks#1\to% % {\@@scratchtoks\@EA{\gobbleoneargument#1}\dodoprependtoks} -% +% % \long\def\doappendtoksonce#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \doifintokselse\@@scratchtoks{#2}{}{\dodoappendtoks{#2}}} -% +% % \long\def\doprependtoksonce#1\to#2% % {\@@scratchtoks\@EA{\gobbleoneargument#1}% % \doifintokselse\@@scratchtoks{#2}{}{\dodoprependtoks{#2}}} % -% A slightly (but in the case of large arguments -% significantly) faster alternative is given below: +% A slightly (but in the case of large arguments +% significantly) faster alternative is given below: \def\dodoappendtoks {\dodoglobal\@@toks\@EAEAEA{\@EA\the\@EA\@@toks\the\@@scratchtoks}} @@ -2164,24 +2164,24 @@ \@@scratchtoks\@EA{\gobbleoneargument#1}% \doifintokselse\@@scratchtoks\@@toks\donothing\dodoprependtoks} -%D The test macro: +%D The test macro: %D -%D \starttypen -%D \def\doifintokselse#1#2% #1 en #2 zijn toks +%D \starttypen +%D \def\doifintokselse#1#2% #1 en #2 zijn toks %D {\edef\!!stringa{\the#1}\convertcommand\!!stringa\to\asciiA %D \edef\!!stringb{\the#2}\convertcommand\!!stringb\to\asciiB %D \doifinstringelse\asciiA\asciiB} -%D \stoptypen +%D \stoptypen %D -%D Better: -%D -%D \starttypen -%D \def\doifintokselse#1#2% #1 en #2 zijn toks +%D Better: +%D +%D \starttypen +%D \def\doifintokselse#1#2% #1 en #2 zijn toks %D {\edef\!!stringa{\the#1}\convertcommand\!!stringa\to\asciiA %D \edef\!!stringb{\the#2}\convertcommand\!!stringb\to\asciiB %D \doifstringinstringelse\asciiA\asciiB} -%D \stoptypen -%D +%D \stoptypen +%D %D Even better: \def\doifintokselse#1#2% #1 en #2 zijn toks @@ -2189,12 +2189,12 @@ \@EA\convertargument\the#2\to\asciiB \doifstringinstringelse\asciiA\asciiB} -%D Also: +%D Also: \def\appendetoks #1\to{\expanded{\appendtoks #1}\to} \def\prependetoks#1\to{\expanded{\prependtoks#1}\to} -%D Hm. +%D Hm. \def\flushtoks#1% {\@@scratchtoks#1\relax @@ -2278,7 +2278,7 @@ \setxvalue{#1}{\the\scratchcounter}} \def\resetcounter#1% - {\letgvalue{#1}\zerocountervalue} + {\letgvalue{#1}\zerocountervalue} \def\setcounter#1#2% {\scratchcounter#2% @@ -2286,9 +2286,9 @@ %D \macros %D {savecounter,restorecounter} -%D -%D These two commands can be used to save and restore counter -%D values. Only one level is saved. +%D +%D These two commands can be used to save and restore counter +%D values. Only one level is saved. \def\savecounter#1% {{\scratchcounter\getvalue {#1}\setxvalue{!#1}{\the\scratchcounter}}} @@ -2298,11 +2298,11 @@ % == {\setxvalue{#1}{\getvalue{!#1}}} -%D The next \ETEX\ based solution is some 15\% faster, which -%D goes unnoticed in any normal run, simply because these -%D macros are not used milions of times. +%D The next \ETEX\ based solution is some 15\% faster, which +%D goes unnoticed in any normal run, simply because these +%D macros are not used milions of times. -\beginETEX \numexpr +\beginETEX \numexpr \def\makecounter#1% {\global\@EA\let\csname#1\endcsname\zerocountervalue} % see earlier @@ -2319,7 +2319,7 @@ \def\resetcounter#1% {\global\@EA\let\csname#1\endcsname\zerocountervalue} -\def\setcounter#1#2% +\def\setcounter#1#2% {\@EA\xdef\csname#1\endcsname{\the\numexpr(#2)}} \def\savecounter#1% @@ -2357,10 +2357,10 @@ {\def#3{##2}}% \@EA\dosplitstring#1@@@#2@@@\\} -%D \macros +%D \macros %D {splitstring} %D -%D A bonus macro. +%D A bonus macro. %\def\splitstring#1\at#2\to#3\and#4% % {\def\dosplitstring##1#2##2@@@##3\\% @@ -2372,30 +2372,30 @@ {\def#3{##1}\def#4{##2}}% \@EA\dosplitstring#1#2#2\\} -%D \macros +%D \macros %D {beforetestandsplitstring, %D aftertestandsplitstring, %D testandsplitstring} -%D -%D The next alternatives are for Simon Pepping. This time -%D the result is empty when no split is done. +%D +%D The next alternatives are for Simon Pepping. This time +%D the result is empty when no split is done. % \def\beforetestandsplitstring#1\at#2\to#3% % {\def\dosplitstring##1#2##2#2##3\\{\doifelsenothing % {##3}{\let#3\empty}{\def#3{##1}}}% % \@EA\dosplitstring#1#2#2\\} -% +% % \def\aftertestandsplitstring#1\at#2\to#3% % {\def\dosplitstring ##1#2##2@@@##3\\{\doifelsenothing % {##3}{\let#3\empty}{\def#3{##2}}}% % \@EA\dosplitstring #1@@@#2@@@\\} -% +% % \def\testandsplitstring#1\at#2\to#3\and#4% % {\def\dosplitstring##1#2##2#2##3\\{\doifelsenothing % {##3}{\let#3\empty\let#4\empty}{\def#3{##1}\def#4{##2}}}% % \@EA\dosplitstring#1#2#2\\} -% -% faster: +% +% faster: \def\beforetestandsplitstring#1\at#2\to#3% {\def\dosplitstring##1#2##2#2##3##4\\% @@ -2420,8 +2420,8 @@ %D \starttypen %D \removesubstringtest-\from first-last\to\nothyphenated %D \stoptypen -%D -%D Which in terms of \TEX\ looks like: +%D +%D Which in terms of \TEX\ looks like: %\def\removesubstring#1\from#2\to#3% % {\doifinstringelse{#1}{#2} @@ -2465,33 +2465,33 @@ %D %D Removing an item takes more time than adding one. %D -%D A fast appending alternative, without any testing, is -%D also provided: +%D A fast appending alternative, without any testing, is +%D also provided: %D %D \starttypen %D \appendtocommalist {something} \name %D \prependtocommalist {something} \name %D \stoptypen -%D -%D This can be implemented as follows: %D -%D \starttypen +%D This can be implemented as follows: +%D +%D \starttypen %D \def\appendtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% -%D \else % no test on empty +%D \else % no test on empty %D \dodoglobal\edef#2{#2,#1}% %D \fi} -%D +%D %D \def\prependtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% -%D \else % no test on empty +%D \else % no test on empty %D \dodoglobal\edef#2{#1,#2}% %D \fi} -%D \stoptypen -%D -%D The faster alternatives are: +%D \stoptypen +%D +%D The faster alternatives are: \def\appendtocommalist#1#2% {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}} @@ -2499,9 +2499,9 @@ \def\prependtocommalist#1#2% {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}} -%D The old ones are: +%D The old ones are: %D -%D \starttypen +%D \starttypen %D \def\addtocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% @@ -2512,7 +2512,7 @@ %D {\resetglobal} %D {\dodoglobal\edef#2{#2,#1}}% %D \fi} -%D +%D %D \def\pretocommalist#1#2% %D {\ifx#2\empty %D \dodoglobal\edef#2{#1}% @@ -2523,29 +2523,29 @@ %D {\resetglobal} %D {\dodoglobal\edef#2{#1,#2}}% %D \fi} -%D -%D \def\doremovefromcommalist#1#2#3% nog \doglobal +%D +%D \def\doremovefromcommalist#1#2#3% nog \doglobal %D {\edef\!!stringa{,,#3,,}% %D \beforesplitstring\!!stringa\at,#1#2,\to\!!stringb %D \aftersplitstring\!!stringa\at,#1#2,\to\!!stringc %D \edef#3{\!!stringb,\!!stringc}% %D \aftersplitstring#3\at,,\to#3\relax %D \beforesplitstring#3\at,,\to#3} -%D +%D %D \def\removefromcommalist#1#2% %D {\doremovefromcommalist{ }{#1}{#2}% %D \doremovefromcommalist{}{#1}{#2}% %D \dofrontstrip#2% %D \dodoglobal\edef#2{#2}} -%D \stoptypen +%D \stoptypen %D -%D Significantly faster (especially for longer lists): +%D Significantly faster (especially for longer lists): -\def\addtocommalist#1#2% {item} \cs +\def\addtocommalist#1#2% {item} \cs {\rawdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{\ifx#2\empty\else#2,\fi#1}}} -\def\pretocommalist#1#2% {item} \cs +\def\pretocommalist#1#2% {item} \cs {\rawdoifinsetelse{#1}#2\resetglobal {\dodoglobal\edef#2{#1\ifx#2\empty\else,#2\fi}}} @@ -2583,14 +2583,14 @@ %D \macros %D {substituteincommalist} %D -%D Slow but seldom used, so for the moment we stick to this -%D implementation. +%D Slow but seldom used, so for the moment we stick to this +%D implementation. %D -%D \starttypen +%D \starttypen %D \substituteincommalist{old}{new}{list} -%D \stoptypen +%D \stoptypen -\def\substituteincommalist#1#2#3% old, new, list (slooow) +\def\substituteincommalist#1#2#3% old, new, list (slooow) {\edef\!!stringb{#1}% \edef\!!stringd{#2}% \let\!!stringa#3% @@ -2607,7 +2607,7 @@ \fi}% \@EA\rawprocesscommacommand\@EA[\!!stringa]\dosubstituteincommalist} -%D A not so useful macro: +%D A not so useful macro: \def\dodofrontstrip[#1#2]#3% {\ifx#1\space @@ -2622,27 +2622,27 @@ \@EA\dodofrontstrip\@EA[#1]#1% \fi} -%D \macros +%D \macros %D {replaceincommalist} %D -%D The next macro can be used to replace an indexed element +%D The next macro can be used to replace an indexed element %D in a commalist: %D -%D \starttypen +%D \starttypen %D \replaceincommalist\MyList{2} -%D \stoptypen +%D \stoptypen %D -%D Element~2 will be replaced by the current meaning of the macro -%D \type {\newcommalistelement}. The old meaning is saved in -%D \type {\commalistelement}. The replacement honors grouped items, -%D like in: +%D Element~2 will be replaced by the current meaning of the macro +%D \type {\newcommalistelement}. The old meaning is saved in +%D \type {\commalistelement}. The replacement honors grouped items, +%D like in: %D %D \starttypen %D \def\MyList{a,b,c,d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,b,c,d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,{b,c},d,e,f} \replaceincommalist\MyList{3} %D \def\MyList{a,b,c,{d,e,f}} \replaceincommalist\MyList{3} -%D \stoptypen +%D \stoptypen \let\newcommalistelement\empty @@ -2680,9 +2680,9 @@ \@EA\processcommalist\@EA[#1]\doreplaceincommalist \dodoglobal\let#1\newcommalist} -%D \macros +%D \macros %D {globalprocesscommalist} -%D +%D %D The commalist processing commands are characterized by the %D fact that the way they handle expansion as well as the fact %D that they can be nested. This makes them kind of useless for @@ -2725,7 +2725,7 @@ \def\withoutpt#1{\withoutunit{#1}{pt}} \def\withoutcm#1{\withoutunit{#1}{cm}} -%D A bit faster and more robust alternative is one that +%D A bit faster and more robust alternative is one that %D manipulates the \CATCODES. {\catcode`\.=\@@other @@ -2795,13 +2795,13 @@ %D \popmacro\macro %D \stoptypen %D -%D Beware: global! +%D Beware: global! \def\@s@{@s@} -\beginTEX +\beginTEX -\def\globalpushmacro#1% we can use a faster incement here +\def\globalpushmacro#1% we can use a faster incement here {\@EA\doglobal\@EA\increment\csname\@s@:\string#1\endcsname \global\@EA\let\csname\csname\@s@:\string#1\endcsname:\string#1\endcsname#1} @@ -2811,7 +2811,7 @@ % this one can be used to push a value over an \egroup -\def\localpushmacro#1% +\def\localpushmacro#1% {\@EA\doglobal\@EA\increment\csname\@s@::\string#1\endcsname \global\@EA\let\csname\csname\@s@::\string#1\endcsname::\string#1\endcsname#1} @@ -2821,30 +2821,30 @@ \endTEX -% * niet nodig, in @s@ stoppen +% * niet nodig, in @s@ stoppen \beginETEX \newcount -\def\globalpushmacro#1% +\def\globalpushmacro#1% {\ifcsname\@s@*\string#1\endcsname \else - \@EA\newcount\csname\@s@*\string#1\endcsname + \@EA\newcount\csname\@s@*\string#1\endcsname \fi \global\advance\csname\@s@*\string#1\endcsname \plusone \global\@EA\let\csname\the\csname\@s@*\string#1\endcsname*\string#1\endcsname#1} - + \def\globalpopmacro#1% \global\let - {%\ifcsname\@s@*\string#1\endcsname + {%\ifcsname\@s@*\string#1\endcsname \global\@EA\let\@EA#1\csname\the\csname\@s@*\string#1\endcsname*\string#1\endcsname - \global\advance\csname\@s@*\string#1\endcsname \minusone + \global\advance\csname\@s@*\string#1\endcsname \minusone %\else % \message{error in \string#1}\wait }%\fi} % this one can be used to push a value over an \egroup -\def\localpushmacro#1% +\def\localpushmacro#1% {\ifcsname\@s@**\string#1\endcsname \else - \@EA\newcount\csname\@s@**\string#1\endcsname + \@EA\newcount\csname\@s@**\string#1\endcsname \fi \global\advance\csname\@s@**\string#1\endcsname \plusone \global\@EA\let\csname\the\csname\@s@**\string#1\endcsname**\string#1\endcsname#1} @@ -2927,9 +2927,9 @@ % {\before\box\nextbox % \let\before=\between % \doprocesstokens} -% \hbox\bgroup}% +% \hbox\bgroup}% % \else -% \expandafter\if\space\next +% \expandafter\if\space\next % \before\white % \else % \before\next @@ -2938,10 +2938,10 @@ % \let\next=\doprocesstokens % \fi\fi % \next} -% +% % \def\doprocesstokens% the space after = is essential % {\afterassignment\dodoprocesstokens\let\next= } -% +% % \def\processtokens#1#2#3#4#5% % {\bgroup % \def\lastcharacter{\lastcharacter}% @@ -2961,12 +2961,12 @@ \else\ifx\nextprocessedtoken\bgroup \def\nextprocessedtoken {\dowithnextbox - {\before{\copy\nextbox}% \before can use nextbox several times + {\before{\copy\nextbox}% \before can use nextbox several times \let\before\between \doprocesstokens} - \hbox\bgroup}% + \hbox\bgroup}% \else - \expandafter\if\space\nextprocessedtoken + \expandafter\if\space\nextprocessedtoken \after\white \let\before\savedbefore \else @@ -3018,10 +3018,10 @@ %D Faster but spoiling inheritance (copying parameters): %D -%D \starttypen +%D \starttypen %D \def\doifelsevaluesomething#1#2#3% %D {\expandafter\ifx\csname#1\endcsname\empty#3\else#2\fi} -%D +%D %D \def\doifvaluesomething#1#2% %D {\expandafter\ifx\csname#1\endcsname\empty\else#2\fi} %D @@ -3111,8 +3111,8 @@ %D \macros %D {doifemptyelsevalue, doifemptyvalue, doifnotemptyvalue} -%D -%D Also handy: +%D +%D Also handy: \def\doifemptyelsevalue#1% {\@EA\ifx\csname#1\endcsname\empty @@ -3138,11 +3138,11 @@ %D \macros %D {doifallcommonelse} %D -%D A complete match of two sets can be tested with -%D \type {\doifallcommonelse}, where the first two -%D arguments are sets. +%D A complete match of two sets can be tested with +%D \type {\doifallcommonelse}, where the first two +%D arguments are sets. -%\def\doifallcommonelse#1#2#3#4% +%\def\doifallcommonelse#1#2#3#4% % {\def\p!docommoncheck##1% % {\doifnotinset{##1}{#2}{\donefalse}% % \ifdone\else\quitcommalist\fi}% @@ -3150,7 +3150,7 @@ % \processcommalist[#1]\p!docommoncheck % \ifdone#3\else#4\fi} -\def\@@doifallcommonelse#1#2#3#4% slow +\def\@@doifallcommonelse#1#2#3#4% slow {\def\p!docommoncheck##1% {\doifnotinset{##1}{#4}\donefalse \ifdone\else\expandafter\quitcommalist\fi}% @@ -3188,28 +3188,28 @@ {\uppercase{\ifinstringelse{$#1$}{$#2$}}% \expandafter\firstofoneargument \else - \expandafter\gobbleoneargument + \expandafter\gobbleoneargument \fi} \def\p!DOIFNOT#1#2% {\uppercase{\ifinstringelse{$#1$}{$#2$}}% - \expandafter\gobbleoneargument + \expandafter\gobbleoneargument \else \expandafter\firstofoneargument \fi} \def\p!DOIFELSE#1#2% {\uppercase{\ifinstringelse{$#1$}{$#2$}}% - \expandafter\firstoftwoarguments + \expandafter\firstoftwoarguments \else - \expandafter\secondoftwoarguments + \expandafter\secondoftwoarguments \fi} -\def\p!DOIFINSTRINGELSE#1#2% +\def\p!DOIFINSTRINGELSE#1#2% {\uppercase{\ifinstringelse{#1}{#2}}% - \expandafter\firstoftwoarguments + \expandafter\firstoftwoarguments \else - \expandafter\secondoftwoarguments + \expandafter\secondoftwoarguments \fi} \def\DOIF {\ExpandBothAfter\p!DOIF} @@ -3274,7 +3274,7 @@ %D We can of course gobble more arguments using the %D appropriate gobbling command. -\newif\ifexecuted % general purpose +\newif\ifexecuted % general purpose \def\executeifdefined#1#2% {\ifundefined{#1}% @@ -3284,10 +3284,10 @@ \fi \next} -%D Just for fun I times the next alternative: it was roughly -%D timed about 15\% faster than the default (10+ sec to 9 sec)! +%D Just for fun I times the next alternative: it was roughly +%D timed about 15\% faster than the default (10+ sec to 9 sec)! -\def\executeifdefined#1% #2 / never change this one again +\def\executeifdefined#1% #2 / never change this one again {\ifundefined{#1}% \expandafter\secondoftwoarguments \else @@ -3297,7 +3297,7 @@ \beginETEX -\def\executeifdefined#1% #2 / never change this one again +\def\executeifdefined#1% #2 / never change this one again {\ifcsname#1\endcsname \expandafter\firstoftwoarguments \else @@ -3307,19 +3307,19 @@ \endETEX -%D This one also has the advantage that it is fully -%D expandable and that it can be used after an assignment. +%D This one also has the advantage that it is fully +%D expandable and that it can be used after an assignment. -%D \macros +%D \macros %D {executeifdefinedcs} %D -%D An also fully expandable variant is the following: -%D +%D An also fully expandable variant is the following: +%D %D \starttypen %D \executeifdefinedcs{a}{b} %D \stoptypen -%D -%D In dit geval zijn beide argumenten csnames. +%D +%D In dit geval zijn beide argumenten csnames. \def\executeifdefinedcs#1#2% {\csname\ifundefined{#1}#2\else#1\fi\endcsname} @@ -3332,22 +3332,22 @@ %D \stoptypen %D %D For the moment we don't need this one, so we stick to the -%D faster one. +%D faster one. %D \macros %D {executeandforget} -%D -%D The following macros were requested by Simon. Watch the -%D global variant. -%D -%D \starttypen +%D +%D The following macros were requested by Simon. Watch the +%D global variant. +%D +%D \starttypen %D \executeandforget\SomeCommand %D \doglobal\executeandforget\AnotherCommand -%D \stoptypen +%D \stoptypen \def\executeandforget#1% {\global\let\@@expanded#1% - \dodoglobal\let#1\relax + \dodoglobal\let#1\relax \@@expanded} %D \macros @@ -3364,7 +3364,7 @@ %D argument must be broken into words when made interactive. %D Watch the use of \type{\noexpand}. -%D Is this one still needed? +%D Is this one still needed? % \long\def\doifsomespaceelse#1#2#3% % {\def\p!doifsomespaceelse##1 ##2##3\war% @@ -3426,7 +3426,7 @@ \dodoglobal\advance#2 -\scratchdimen} %D Both commands can be preceded by \type{\doglobal}. Here we -%D use \type{\redo} first, because \type{\dodo} resets the +%D use \type{\redo} first, because \type{\dodo} resets the %D global character. %D \macros @@ -3446,7 +3446,7 @@ %D \processseparatedlist[alfa+beta+gamma][+]\message %D \stoptypen -%D First we show the simple alternative: +%D First we show the simple alternative: %D %D \starttypen %D \def\processseparatedlist[#1][#2]#3% @@ -3466,8 +3466,8 @@ %D \doprocessseparatedlist#1#2]#2} %D \stoptypen %D -%D However, we want to handle all situations, like: -%D +%D However, we want to handle all situations, like: +%D %D \startbuffer %D \processseparatedlist[{aap noot}] [ ]{\def\xxx} \show\xxx %D \processseparatedlist[{aap} {noot}][ ]{\def\xxx} \show\xxx @@ -3477,8 +3477,8 @@ %D %D \typebuffer \getbuffer %D -%D Therefore we smuggle a \type {\relax} in front of the -%D argument, which we remove afterwards. +%D Therefore we smuggle a \type {\relax} in front of the +%D argument, which we remove afterwards. \def\doprocessseparatedlist#1]#2[#3]#4% {\def\dodoprocessseparatedlist##1##2#3% @@ -3497,18 +3497,18 @@ \def\processseparatedlist[% {\doprocessseparatedlist\relax} -%D \macros +%D \macros %D {processlist} %D -%D An even more general list processing macro is the +%D An even more general list processing macro is the %D following one: %D %D \starttypen -%D \processlist{beginsym}{endsym}{separator}\docommando list +%D \processlist{beginsym}{endsym}{separator}\docommando list %D \stoptypen -%D +%D %D This one supports arbitrary open and close symbols as well -%D as user defined separators. +%D as user defined separators. %D %D \starttypen %D \processlist(){=>}\docommando(a=>b=>c=>d) @@ -3532,15 +3532,15 @@ {\doprocesslist\relax}% \dodoprocesslist} -% %D \macros +% %D \macros % %D {dohonorgroupedargument} % %D -% %D The previous macro uses yet another auxiliary macro to -% %D handle the special case. -% +% %D The previous macro uses yet another auxiliary macro to +% %D handle the special case. +% % \def\dohonorgroupedargument#1[% % {\doifnextcharelse\bgroup{\dodohonorgroupedargument#1}{#1[}} -% +% % \def\dodohonorgroupedargument#1#2% % {#1[{{#2}}} @@ -3565,7 +3565,7 @@ {\p!dodogetparameter[##1==\relax]}% \processcommalist[#2]\p!dogetparameter} -% too ugly +% too ugly % % %D \macros % %D {DoAfterFi,DoAfterFiFi} @@ -3581,24 +3581,24 @@ % %D It saves us a \type{\next} construction. Skipping % %D \type{\else...\fi} is more tricky, so this one is not % %D provided. -% +% % \def\DoAfterFi#1\fi{\fi#1} % \def\DoAfterFiFi#1\fi#2\fi{\fi\fi#1} - + %D \macros %D {untextargument %D untexcommand} -%D -%D When manipulating data(bases) and for instance generating -%D index entries, the next three macros can be of help: -%D +%D +%D When manipulating data(bases) and for instance generating +%D index entries, the next three macros can be of help: +%D %D \starttypen %D \untextargument{...}\to\name %D \untexcommand {...}\to\name %D \stoptypen -%D -%D They remove braces and backslashes and give us something to -%D sort. +%D +%D They remove braces and backslashes and give us something to +%D sort. \def\untexsomething% {\begingroup @@ -3617,30 +3617,30 @@ %D \macros %D {ScaledPointsToBigPoints,ScaledPointsToWholeBigPoints} -%D -%D One characteristic of \POSTSCRIPT\ and \PDF\ is that both -%D used big points (\TEX's bp). The next macros convert points -%D and scaled points into big points. -%D +%D +%D One characteristic of \POSTSCRIPT\ and \PDF\ is that both +%D used big points (\TEX's bp). The next macros convert points +%D and scaled points into big points. +%D %D \starttypen %D \ScaledPointsToBigPoints {number} \target %D \ScaledPointsToWholeBigPoints {number} \target %D \stoptypen -%D -%D The magic factor $72/72.27$ can be found in most \TEX\ -%D related books. +%D +%D The magic factor $72/72.27$ can be found in most \TEX\ +%D related books. -\def\ScaledPointsToBigPoints #1{\PointsToBigPoints {#1sp}} +\def\ScaledPointsToBigPoints #1{\PointsToBigPoints {#1sp}} \def\ScaledPointsToWholeBigPoints#1{\PointsToWholeBigPoints{#1sp}} -\def\PointsToBigPoints#1#2% +\def\PointsToBigPoints#1#2% {\scratchdimen#1% - \scratchdimen.996264\scratchdimen + \scratchdimen.996264\scratchdimen \edef#2{\withoutpt{\the\scratchdimen}}} -\def\PointsToWholeBigPoints#1#2% +\def\PointsToWholeBigPoints#1#2% {\scratchdimen#1% - \scratchdimen.996264\scratchdimen + \scratchdimen.996264\scratchdimen \scratchcounter\scratchdimen \advance\scratchcounter \medcard \divide\scratchcounter \maxcard @@ -3648,35 +3648,35 @@ %D \macros %D {PointsToReal} -%D -%D Points can be stripped from their suffix by using -%D \type{\withoutpt}. The next macro enveloppes this macro. -%D +%D +%D Points can be stripped from their suffix by using +%D \type{\withoutpt}. The next macro enveloppes this macro. +%D %D \starttypen %D \PointsToReal {dimension} \target -%D \stoptypen +%D \stoptypen \def\PointsToReal#1#2% - {\scratchdimen#1% + {\scratchdimen#1% \edef#2{\withoutpt{\the\scratchdimen}}} -%D \macros +%D \macros %D {dontleavehmode} -%D -%D Sometimes when we enter a paragraph with some command, the -%D first token gets the whole first line. We can prevent this +%D +%D Sometimes when we enter a paragraph with some command, the +%D first token gets the whole first line. We can prevent this %D by saying: -%D +%D %D \starttypen %D \dontleavehmode %D \stoptypen -%D -%D This command is used in for instance the language module +%D +%D This command is used in for instance the language module %D \type{lang-ini}. %\def\dontleavehmode{\ifhmode\else\ifmmode\else$ $\fi\fi} % -% The (thanks to Taco) better alternative (mathsurround): +% The (thanks to Taco) better alternative (mathsurround): \def\dontleavehmode {\ifhmode\else \ifmmode\else @@ -3693,7 +3693,7 @@ %D \lowercasestring somestring\to\somestring %D \stoptypen %D -%D the first argument may be a \type{\macro}. +%D the first argument may be a \type{\macro}. \def\uppercasestring#1\to#2% {\edef#2{#1}\@EA\uppercase\@EA{\@EA\dodoglobal\@EA\edef\@EA#2\@EA{#2}}} @@ -3704,79 +3704,79 @@ %D \macros %D {handletokens} %D -%D With the next macro we enter a critical area of macro +%D With the next macro we enter a critical area of macro %D expansion. What we want is a macro that looks like: -%D +%D %D \starttypen %D \handletokens some tokens\with \somemacro %D \stoptypen -%D -%D At first sight the next implementation will suffice, but -%D running this one shows that we loose the spaces. This is no +%D +%D At first sight the next implementation will suffice, but +%D running this one shows that we loose the spaces. This is no %D surprise because we grab arguments and spaces preceding those -%D are just ignored. -%D +%D are just ignored. +%D %D \starttypen %D \def\nohandletokens#1\end% %D {} -%D +%D %D \def\dohandletokens#1#2\end% -%D {\ifx#1\endoftoken +%D {\ifx#1\endoftoken %D \expandafter\nohandletokens %D \else %D \docommando{#1}% %D \expandafter\dohandletokens %D \fi %D #2\end} -%D +%D %D \long\def\handletokens#1\with#2% %D {\let\docommando=#2\relax %D \dohandletokens#1\endoftoken\end} %D \stoptypen -%D -%D A second approach therefore grabs the individual characters -%D by using \type{\afterassignment}, in which case the space is -%D read in as space. -%D +%D +%D A second approach therefore grabs the individual characters +%D by using \type{\afterassignment}, in which case the space is +%D read in as space. +%D %D \starttypen %D \def\dodohandletokens% %D {\ifx\next\end \else %D \docommando{\next}% %D \expandafter\dohandletokens %D \fi} -%D +%D %D \def\dohandletokens %D {\afterassignment\dodohandletokens\let\next= } -%D +%D %D \long\def\handletokens#1\with#2% %D {\let\docommando=#2% %D \dohandletokens#1\end} %D \stoptypen -%D A bonus example: +%D A bonus example: %D -%D \starttypen +%D \starttypen %D \hbox{\handletokens tekst en meer tekst\with\ruledhbox} -%D +%D %D \def\weetikveel#1{\if#1\blankspace\space\else\ruledhbox{#1}\fi} -%D +%D %D \hbox{\handletokens tekst en meer tekst\with\weetikveel} -%D \stoptypen +%D \stoptypen %D \macros %D {counttoken,counttokens} %D -%D For the few occasions that we want to know the number of -%D specific tokens in a string, we can use: -%D +%D For the few occasions that we want to know the number of +%D specific tokens in a string, we can use: +%D %D \starttypen %D \counttoken token\in string\to \count %D \counttokens string\to \count %D \stoptypen -%D -%D This macro, that for instance is used in \type{cont-tab}, -%D takes a real counter. The macro can be preceded by \type -%D {\doglobal}. +%D +%D This macro, that for instance is used in \type{cont-tab}, +%D takes a real counter. The macro can be preceded by \type +%D {\doglobal}. \def\counttoken#1\in#2\to#3% {\redoglobal#3\zerocount @@ -3804,7 +3804,7 @@ % \handletokens#1\with\docounttoken % \resetglobal} -\def\counttokens#1\to#2% +\def\counttokens#1\to#2% {\redoglobal#2\zerocount \def\docounttoken##1{\dodoglobal\advance#2\plusone}% \handletokens#1\with\docounttoken @@ -3813,9 +3813,9 @@ %D \macros %D {splitofftokens} %D -%D Running this one not always gives the expected results. -%D Consider for instance the macro for which I originally -%D wrote this token handler. +%D Running this one not always gives the expected results. +%D Consider for instance the macro for which I originally +%D wrote this token handler. \long\def\splitofftokens#1\from#2\to#3% {\ifnum#1>\zerocount @@ -3825,7 +3825,7 @@ \advance\scratchcounter \minusone \edef#3{#3##1}% \fi}% - % \let#3\empty % #3 can be #2, so: + % \let#3\empty % #3 can be #2, so: \@EA\let\@EA#3\@EA\empty \@EA\handletokens#2\with\dosplitofftokens \else @@ -3833,16 +3833,16 @@ \fi} %D This macro can be called like: -%D -%D \startbuffer[example] +%D +%D \startbuffer[example] %D \splitofftokens10\from01234567 890123456789\to\test [\test] %D \stopbuffer -%D +%D %D However, the characters that we expect to find in %D \type{\test} just don;t show up there. The reason for this %D is not that logical but follows from \TEX's sometimes -%D mysterious way of expanding. Look at this: -%D +%D mysterious way of expanding. Look at this: +%D %D \startbuffer[next] %D \def\next{a} \edef\test{\next} [\test] %D \let\next=b \edef\test{\test\next} [\test] @@ -3850,33 +3850,33 @@ %D \let\next=d \edef\test{\test\next} [\test] %D \let\next=e \@EA\edef\@EA\test\@EA{\test\next} [\test] %D \stopbuffer -%D +%D %D \typebuffer[next] -%D -%D Careful reading shows that inside an \type{\edef} macro's +%D +%D Careful reading shows that inside an \type{\edef} macro's %D that are \type{\let} are not expanded! -%D +%D %D \unprotect\haalbuffer[next]\protect -%D -%D That's why we finally end up with a macro that looks -%D ahead by using an assignment, this time by using \type +%D +%D That's why we finally end up with a macro that looks +%D ahead by using an assignment, this time by using \type %D {\futurelet}, and grabbing an argument as well. That -%D way we can handle the sentinal, a blank space and grouped -%D tokens. +%D way we can handle the sentinal, a blank space and grouped +%D tokens. \def\dohandletokens {\futurelet\nexthandledtoken\dodohandletokens} \long\def\handletokens#1\with#2% - {\global\let\dododohandletokens#2% + {\global\let\dododohandletokens#2% \dohandletokens#1\end} %D A previous version said \type{\docommando=#2}, but to enable %D use in alignments, I decided to use another placeholder, one -%D that is not sensitive to the global assignment. +%D that is not sensitive to the global assignment. %D This alternatives does not handle grouped tokens well, so -%D next we had (for a short moment): +%D next we had (for a short moment): %D %D \starttypen %D \def\dodohandletokens#1% @@ -3887,10 +3887,10 @@ %D \dododohandletokens{#1}% %D \expandafter\dohandletokens %D \fi} -%D \stoptypen +%D \stoptypen %D -%D This one failed on a trailing space, something we -%D encounter in \JAVASCRIPT\ cleaning. +%D This one failed on a trailing space, something we +%D encounter in \JAVASCRIPT\ cleaning. %D %D \starttypen %D \def\dodohandletokens#1% @@ -3901,11 +3901,11 @@ %D \dododohandletokens{#1}% %D \expandafter\dohandletokens %D \fi} -%D \stoptypen +%D \stoptypen %D %D So, now we have: -\def\dodohandletokens % can be sped up +\def\dodohandletokens % can be sped up {\ifx\nexthandledtoken\blankspace \def\next * {\dododohandletokens{ }\dohandletokens}% \else\ifx\nexthandledtoken\end @@ -3915,12 +3915,12 @@ \fi\fi \next *} -%D This macro is tested on: -%D +%D This macro is tested on: +%D %D \def\xxx#1{[#1]} -%D +%D %D \startregels -%D \handletokens abc\with\xxx +%D \handletokens abc\with\xxx %D \handletokens a b c\with\xxx %D \handletokens a b c\with\xxx %D \handletokens a{bc}d\with\xxx @@ -3928,37 +3928,37 @@ %D \stopregels %D %D And our previous example shows up as: -%D +%D %D \haalbuffer[example] -%D \macros +%D \macros %D {iftrialtypesetting} -%D +%D %D The next boolean is at first sight a strange one. Sometimes %D one does a trial typesetting run, for instance to determine %D dimensions. Some mechanisms, like object inclusion, can fail %D on such trials. Temporary setting the next boolean to true, -%D helps a lot. +%D helps a lot. \newif\iftrialtypesetting %D \macros %D {startlocal, startglobal} %D -%D The next four macros are rather self explaining: +%D The next four macros are rather self explaining: %D %D \starttypen %D \startlocal -%D whatever assignments +%D whatever assignments %D \stoplocal %D %D \startglobal -%D whatever assignments +%D whatever assignments %D \stopglobal %D \stoptypen %D -%D These macros are meant for those who know the difference -%D between local and global assignments and are aware of the +%D These macros are meant for those who know the difference +%D between local and global assignments and are aware of the %D possible unwanted side effect \def\dostartglobaldefs#1#2% @@ -3982,10 +3982,10 @@ %D \macros %D {twodigitrounding} %D -%D When using \type {\special}s or \type {\pdfliteral}s, it -%D sometimes makes sense to limit the precission. The next -%D macro rounds a real number to two digits. It takes one -%D argument and only works in \ETEX. +%D When using \type {\special}s or \type {\pdfliteral}s, it +%D sometimes makes sense to limit the precission. The next +%D macro rounds a real number to two digits. It takes one +%D argument and only works in \ETEX. \beginTEX @@ -4015,8 +4015,8 @@ %D \def\starthans% %D {\processcontent{stophans}\test{\message{\test}\wait}} %D \stoptypen -%D -%D This macro is first used in the tabulation macros. +%D +%D This macro is first used in the tabulation macros. \def\processcontent#1% {\begingroup\@EA\doprocesscontent\csname#1\endcsname} @@ -4030,8 +4030,8 @@ %\endTEX -% Hm. Side effect, spaces after \type{\test} in verbatim. -% must set eof token +% Hm. Side effect, spaces after \type{\test} in verbatim. +% must set eof token %\beginETEX \scantokens % @@ -4042,10 +4042,10 @@ % %\endETEX -%D \macros +%D \macros %D {dogobblesingleempty, dogobbledoubleempty} %D -%D These two macros savely grab and dispose two arguments. +%D These two macros savely grab and dispose two arguments. \def\dogobblesingleempty{\dosingleempty\dodogobblesingleempty} \def\dogobbledoubleempty{\dodoubleempty\dodogobbledoubleempty} @@ -4053,39 +4053,39 @@ \def\dodogobblesingleempty [#1]{} \def\dodogobbledoubleempty[#1][#2]{} -\let\gobblesingleempty\dogobblesingleempty % also used -\let\gobbledoubleempty\dogobbledoubleempty % also used +\let\gobblesingleempty\dogobblesingleempty % also used +\let\gobbledoubleempty\dogobbledoubleempty % also used %D \macros %D {sortcommalist,sortcommacommand, %D donumericcompare,comparedresult} -%D +%D %D Sometimes we need to sort a commalist, so here is Taco's %D solution. This will in many cases be a list that is stored %D in a \type{\csname}, so both commalist and commacommands are %D supported. The sorting algorithm is very simple, so the list -%D should not be too long or sorting will be very slow. +%D should not be too long or sorting will be very slow. %D -%D \starttypen +%D \starttypen %D \sortcommalist[10,2,4,5,6,1,2,3,4,10,20]\donumericcompare %D -%D \def\test{10,2,4,5,6,1,2,3,4,10,20} +%D \def\test{10,2,4,5,6,1,2,3,4,10,20} %D %D \sortcommacommand[\test]\donumericcompare -%D \stoptypen +%D \stoptypen %D -%D In both cases, the result is available in the macro \type +%D In both cases, the result is available in the macro \type %D {\sortedcommalist}. -%D +%D %D Parameter \type{#2} is a macro that should accept two %D parameters, and it has to decide which one is larger, by %D setting the counter \type{\comparedresult} to~0 (for equal), %D 1~(if it's first argument is larger), or~2 (if it's second -%D argument is larger). +%D argument is larger). %D -%D As said, these macro are largely written by Taco, and are -%D (maybe therefore) also the first application of \type -%D {\replaceincommalist}. +%D As said, these macro are largely written by Taco, and are +%D (maybe therefore) also the first application of \type +%D {\replaceincommalist}. \newcount\comparedresult @@ -4120,7 +4120,7 @@ \def\docompareitems#1% {\doifnotempty{#1} {\@EA\comparecommand\@EA{\!!tempa}{#1}\relax - %\ifcase\compareresult % equal + %\ifcase\compareresult % equal \ifnum\comparedresult<2 \ifnum\scratchcounter=\commalistsize \@EA\@EA\@EA\def\@EA\@EA\@EA\sortedcommalist @@ -4138,13 +4138,13 @@ \fi}% \advance\scratchcounter \plusone} % bug, was \minusone -%D The macro \type{\donumericcompare} considers everything +%D The macro \type{\donumericcompare} considers everything %D that is not a number to be larger than any number. \def\donumericcompare#1#2% {\doifnumberelse{#1} {\doifnumberelse{#2} - {\ifnum#1>#2\relax + {\ifnum#1>#2\relax \comparedresult\plusone % #1 is larger \else\ifnum#1<#2\relax \comparedresult\plustwo % #2 is larger @@ -4156,19 +4156,19 @@ %D \macros %D {@saveprimitive} -%D -%D The next definition originates in the \type {amsgen} package. In -%D case some preceding package redefined a primitive that we also -%D want to redefine, we had better do some checking to make sure -%D that we are able to save the primitive meaning for internal use. -%D Primitive control sequences can be distinguished by the fact that -%D \type {\string} and \type {\meaning} return the same information. +%D +%D The next definition originates in the \type {amsgen} package. In +%D case some preceding package redefined a primitive that we also +%D want to redefine, we had better do some checking to make sure +%D that we are able to save the primitive meaning for internal use. +%D Primitive control sequences can be distinguished by the fact that +%D \type {\string} and \type {\meaning} return the same information. \def\@saveprimitive#1#2% {\begingroup \edef\@tempa{\string#1}% \edef\@tempb{\meaning#1}% - \ifx\@tempa\@tempb + \ifx\@tempa\@tempb \global\let#2#1% %\debuggerinfo{prim}{Saving \string#1 as \string#2}% \else @@ -4176,7 +4176,7 @@ %\ifx\@tempa\@tempb % \debuggerinfo{prim}{Saving \string#1 as \string#2}% %\else - % \debuggerinfo{prim}{Can't define \string#2 properly; + % \debuggerinfo{prim}{Can't define \string#2 properly; % primitive \noexpand#1 is no longer primitive}% %\fi \fi @@ -4186,17 +4186,17 @@ {\begingroup \@EA\edef\@EA\@tempa\@EA{\@EA\gobbleoneargument\string#1}% \@EA\let\csname normal\@tempa\endcsname\relax - \@EA\@saveprimitive\@EA#1\csname normal\@tempa\endcsname + \@EA\@saveprimitive\@EA#1\csname normal\@tempa\endcsname \endgroup } -%D In this macro, the message only shows up when the debugging -%D is turned on. +%D In this macro, the message only shows up when the debugging +%D is turned on. -%D \macros +%D \macros %D {@True, @False, @Not, @And} %D -%D Some predicate logic functions, used in for instance the -%D math module. +%D Some predicate logic functions, used in for instance the +%D math module. \def\@True {00} \def\@False {01} @@ -4206,31 +4206,31 @@ %D \macros %D {setdimensionwithunit, freezedimensionwithunit} %D -%D The next assignments are all valid: +%D The next assignments are all valid: %D -%D \starttypen +%D \starttypen %D \setdimensionwithunit\scratchdimen{10} {cm} %D \setdimensionwithunit\scratchdimen{10cm}{cm} %D \setdimensionwithunit\scratchdimen{10cm}{} %D \freezedimensionwithunit\SomeWidth{\textwidth} %D \freezedimensionwithunit\SomeDepth{\dp\strutbox} -%D \stoptypen +%D \stoptypen %D -%D As an alternative for the next macro we can use a global -%D assignment inside a box. The \type{\empty}'s permits -%D gobbling while preventing spurious \type{\relax}'s. +%D As an alternative for the next macro we can use a global +%D assignment inside a box. The \type{\empty}'s permits +%D gobbling while preventing spurious \type{\relax}'s. -\def\setdimensionwithunit#1#2#3% number unit dimension / nice trick +\def\setdimensionwithunit#1#2#3% number unit dimension / nice trick {\afterassignment\gobblefourarguments#1=#2#3pt\relax\empty\empty\empty\empty} \def\freezedimensionwithunit#1#2% {\setdimensionwithunit\scratchdimen#1{#2}\edef#1{\the\scratchdimen}} -%D \macros +%D \macros %D {doifsometokselse} %D %D Not that fast I guess, but here's a way to test for token -%D registers being empty. +%D registers being empty. \def\doifsometokselse#1% % #2#3% {\edef\!!stringa{\the#1}% @@ -4242,12 +4242,12 @@ %D \macros %D {startstrictinspectnextcharacter} -%D +%D %D This one if for Taco's bibliography module: \let\normalinspectnextcharacter\inspectnextcharacter -\def\strictinspectnextcharacter% no user macro ! +\def\strictinspectnextcharacter% no user macro ! {\ifx\nexttoken\charactertoken \expandafter\!!stringa \else @@ -4261,26 +4261,26 @@ {\let\inspectnextcharacter\normalinspectnextcharacter} %D \macros -%D {gobblespacetokens} +%D {gobblespacetokens} %D %D This macro needs a speed-up! -%\def\gobblespacetokens -% {\doifnextcharelse\empty\donothing\donothing} % no {}\do\do ! +%\def\gobblespacetokens +% {\doifnextcharelse\empty\donothing\donothing} % no {}\do\do ! -\def\gobblespacetokens +\def\gobblespacetokens {\afterassignment\nexttoken\let\nexttoken=} %D \macros %D {verbatimargument} %D -%D As the name says, this macro converts its argument to a -%D (rather safe) string. +%D As the name says, this macro converts its argument to a +%D (rather safe) string. \def\verbatimstring#1% {\convertargument#1\to\ascii\ascii} -%D These are needed in ordinal number conversions: +%D These are needed in ordinal number conversions: \def\lastdigit#1% {\@EA\thelastdigit\number#1\relax} @@ -4296,8 +4296,8 @@ %D \macros %D {serializecommalist} -%D -%D Concatenate commalists: +%D +%D Concatenate commalists: \def\serializecommalist[#1]% {\let\serializedcommalist\empty @@ -4308,24 +4308,24 @@ %D {purenumber} %D %D Sometimes we need control over when \TEX\ stops reading a -%D number, especially in full expandable macros where using -%D \type {\relax} would lead to disasters. -%D -%D \starttypen -%D \ifodd\purenumber{...}\space ... \else ... \fi -%D \stoptypen -%D -%D Here we use a space as number delimiter in combination -%D with a space- and relax-less \type {\purenumber}. This +%D number, especially in full expandable macros where using +%D \type {\relax} would lead to disasters. +%D +%D \starttypen +%D \ifodd\purenumber{...}\space ... \else ... \fi +%D \stoptypen +%D +%D Here we use a space as number delimiter in combination +%D with a space- and relax-less \type {\purenumber}. This %D macro works ok with \type {\the}, \type {\number} as well -%D as \ETEX's \type {\numexpr}. +%D as \ETEX's \type {\numexpr}. \def\purenumber#1{\@EA\firstofoneargument\@EA{\number#1}} %D \macros %D {filterfromvalue} %D -%D \starttypen +%D \starttypen %D \setvalue{xx}{{A}{B}{C}} %D %D \filterfromvalue{xx}{3}{3} @@ -4335,7 +4335,7 @@ %D %D An alternative is to store 'max' in the list, say: %D -%D \starttypen +%D \starttypen %D \setvalue{xx}{3{A}{B}{C}} %D %D \filterfromvalues{xx}{3} @@ -4344,10 +4344,10 @@ %D \stoptypen %D %D I'll implement this when I'm in \quotation {writing dirty -%D macros mood}. +%D macros mood}. \def\filterfromvalue#1#2#3% value max n - {\@EA\@EAEAEA\csname % we use the fact that an + {\@EA\@EAEAEA\csname % we use the fact that an \@EA\ifx\csname#1\endcsname\relax % undefined cs has become \relax \strippedcsname\gobbleoneargument % which we then gobble here \else @@ -4379,4 +4379,41 @@ \fi \endcsname\csname#1\endcsname} -\protect \endinput +%D \macros +%D {definemeasure} +%D +%D \starttypen +%D \definemeasure[mywidth][\dimexpr(\textwidth-1cm)] +%D +%D ... \measure{mywidth} ... +%D \stoptypen + +\def\??dm{@@dm} % brrr + +\def\definemeasure + {\dodoubleargument\dodefinemeasure} + +\def\dodefinemeasure[#1][#2]% + {\setvalue{\??dm#1}{#2}} + +\def\setmeasure#1{\setvalue{\??dm#1}} % quick way + +\def\measure#1% + {\ifcsname\??dm#1\endcsname\csname\??dm#1\endcsname\else\zeropoint\fi} + +%D \macros +%D {doifdimensionelse} +%D +%D This is a dirty one: we simply append a unit and discard it when needed. + +\def\doifdimensionelse#1% + {\afterassignment\dodoifdimensionelse\scratchdimen#1pt\relax} + +\def\dodoifdimensionelse#1% + {\ifx#1\relax + \expandafter\secondoftwoarguments + \else % #1=p ... t\relax + \expandafter\thirdoffourarguments + \fi} + +\protect \endinput \ No newline at end of file diff --git a/tex/context/base/xtag-ini.tex b/tex/context/base/xtag-ini.tex index d275fc986..282aea035 100644 --- a/tex/context/base/xtag-ini.tex +++ b/tex/context/base/xtag-ini.tex @@ -13,12 +13,12 @@ \writestatus{loading}{Context XML Macros (initialization)} -%D Beware: don't rely on \longempty things, since this may -%D change! +%D Beware: don't rely on \longempty things, since this may +%D change! -%D To be sure: +%D To be sure: -\newif\ifprocessingXML +\newif\ifprocessingXML \beginTEX \writestatus{XML}{sorry, XML is only supported in (pdf)etex} @@ -26,8 +26,8 @@ \endinput \endTEX -%D This module is highly optimized for speed, which sometimes -%D reads to rather unreadable code. Sorry for this. +%D This module is highly optimized for speed, which sometimes +%D reads to rather unreadable code. Sorry for this. \beginETEX XML @@ -45,8 +45,8 @@ \endETEX -% todo: XMLfullsave == also attributes -% csnames +% todo: XMLfullsave == also attributes +% csnames % XMLelse -> elseXML %D Remark: some hard coded character things will be replaced @@ -91,7 +91,7 @@ %D either or not using delimited arguments. And, when moving %D data around, there is always the expansion problem to deal %D with. -%D +%D %D As can be expected, we have to map begin and end tags onto %D \CONTEXT's start- and stopcommands. This is the easy part. %D When we have to pass the content of an element to a macro @@ -100,18 +100,18 @@ %D {m-sgml.tex} already. New in this core module is nested %D grabbing. Also new here is the support for namespaces and %D extensive attribute handling. On the other hand, recursive -%D traceback of attributes is no longer supported. Because +%D traceback of attributes is no longer supported. Because %D this feature was not really used, we can hereby safely we -%D declare the \type {m-sgml.tex} module obsolete. -%D +%D declare the \type {m-sgml.tex} module obsolete. +%D %D In order to be able to incorporate \XML\ style definitions %D into basic \TEX\ styles, we will provide some basic %D functionality in the core itself. Some of the functionality %D can be set up with this general command. We use a token %D list register to handle post||setup actions. This permits -%D us to extend this command. +%D us to extend this command. -\unprotect +\unprotect \newtoks\aftersetupXMLprocessing @@ -121,12 +121,12 @@ \def\dosetupXMLprocessing[#1]% {\getparameters[\??xp][#1]\the\aftersetupXMLprocessing} -\protect +\protect -%D Formally an \XML\ file starts with an unique sequence -%D \type {} @@ -156,21 +156,21 @@ \unprotect \def\@@XML {XML:} -\def\@@XMLentity {\@@XML ent} % &crap; +\def\@@XMLentity {\@@XML ent} % &crap; \def\@@XMLelement {\@@XML ele} % \def\@@XMLvariable {\@@XML var} % key="val" \def\@@XMLvalue {\@@XML val} % key="val" \def\@@XMLpars {\@@XML par} % -\def\@@XMLdata {\@@XML dat} % mem buffer +\def\@@XMLdata {\@@XML dat} % mem buffer \def\@@XMLcode {\@@XML cod} % named mem buffers -\def\@@XMLinstruction {\@@XML ins} % =.@@other + .catcode`.>=.@@other .catcode`."=.@@other - .catcode`./=.@@other + .catcode`./=.@@other .catcode`.'=.@@other - .catcode`.~=.@@other + .catcode`.~=.@@other * .catcode`.#=.@@active .def#B&hash;E* - .catcode`.#=.@@other + .catcode`.#=.@@other .ifcase.XMLtokensreduction .entitleXMLescapetokens .or .reduceXMLescapetokens - .else + .else .ignoreXMLescapetokens - .fi + .fi .processingXMLtrue .the.everyenableXML E .gdef.activateXMLescapetokens* - B.catcode`.$=.@@active - .catcode`.%=.@@active - .catcode`.\=.@@active - .catcode`.^=.@@active - .catcode`._=.@@active - .catcode`.{=.@@active - .catcode`.}=.@@active - .catcode`.|=.@@active + B.catcode`.$=.@@active + .catcode`.%=.@@active + .catcode`.\=.@@active + .catcode`.^=.@@active + .catcode`._=.@@active + .catcode`.{=.@@active + .catcode`.}=.@@active + .catcode`.|=.@@active E .gdef.entitleXMLescapetokens* B.activateXMLescapetokens* - .def#B&tex-hash;E* + .def#B&tex-hash;E* .def$B&tex-dollar;E* .def%B&tex-percent;E* .def\B&tex-backslash;E* @@ -303,7 +303,7 @@ E .gdef.ignoreXMLescapetokens* - B.catcode`.$=.@@other * or letter ? + B.catcode`.$=.@@other * or letter ? .catcode`.%=.@@other .catcode`.\=.@@other .catcode`.^=.@@other @@ -313,25 +313,25 @@ .catcode`.|=.@@other E -* The following macro can be invokes when reading from -* an auxiliary file. +* The following macro can be invokes when reading from +* an auxiliary file. -.unexpanded.gdef.enableXMLelements* - B.catcode60=.@@active * .catcode`.<=.@@active +.unexpanded.gdef.enableXMLelements* + B.catcode60=.@@active * .catcode`.<=.@@active .catcode62=.@@other * .catcode`.>=.@@other .unexpanded.def=.@@other - .let<.relax * new + .let<.relax * new .processingXMLfalse E -.global.let<.relax * new -.global.let&.relax * new +.global.let<.relax * new +.global.let&.relax * new .egroup @@ -400,17 +400,17 @@ %D mess up with catcodes. We probably have to treat a few %D more catcode and first character cases. We need to use %D \type {\begingroup} here, otherwise we get funny spaces in -%D math. +%D math. -%D Maybe I will remove grouping here and introduce \type -%D {\obeyXMLlines}. +%D Maybe I will remove grouping here and introduce \type +%D {\obeyXMLlines}. %D By using a few {\expandafter}'s we can avoid a \type {\next} %D construction. We could speed the first char test up a bit %D by using an installer and something \typ {\getvalue %D {#1doXMLelement}} (todo). -\protect % we need an normal ! ? +\protect % we need an normal ! ? % \long\def\doXMLelement#1% % {\if#1!\expandafter \xparseXMLescape \else @@ -426,15 +426,15 @@ \expandthree \xparseXMLelement \fi\fi #1} -% does it end with ? or ?> +% does it end with ? or ?> \long\def\xparseXMLescape !#1 {\parseXMLescape{#1}} \long\def\xparseXMLprocess ?#1 #2>{\parseXMLprocess{#1}{#2}} \long\def\xparseXMLelement #1>{\parseXMLelement #1 >} -%D The escape handler takes care of the fuzzy \type { parsing takes place in macros +\def\parseXMLescape#1% #2> parsing takes place in macros {\executeifdefined{\@@XMLescape:#1}{\csname\@@XMLescape:\s!default\endcsname}} %D In our case, processing instructions are only needed if @@ -475,27 +475,27 @@ %D The processing instructions handler is implemented as %D follows. -\long\def\defineXMLprocessor[#1]#2% +\long\def\defineXMLprocessor[#1]#2% {\long\setvalue{\@@XMLinstruction:#1}{#2}} -% \def\parseXMLprocess#1#2% +% \def\parseXMLprocess#1#2% % {\executeifdefined{\@@XMLinstruction:#1}\gobbleoneargument{#2}} -%D Because we support \type {.. ?>} as well as \type {.. >} -%D end||of||pi situations, we need to clean up the ending +%D Because we support \type {.. ?>} as well as \type {.. >} +%D end||of||pi situations, we need to clean up the ending %D \type {?}. -\protect +\protect \long\def\cleanupXMLprocess#1% {\docleanupXMLprocess#1 ? \relax} -\long\def\docleanupXMLprocess#1? #2\relax +\long\def\docleanupXMLprocess#1? #2\relax {\def\currentXMLprocess{#1}} -\unprotect +\unprotect -\def\parseXMLprocess#1#2% +\def\parseXMLprocess#1#2% {\cleanupXMLprocess{#2}% \convertcommand#1\to\ascii %\writestatus{xml-process}{\ascii} @@ -505,7 +505,7 @@ \noexpand\gobbleoneargument {\expandafter\noexpand\currentXMLprocess}}} -%D One never knows: +%D One never knows: \let\normalparseXMLescape \parseXMLescape \let\normalparseXMLelement\parseXMLelement @@ -520,7 +520,7 @@ \let\currentXMLidentifier\empty % name or name/ \let\currentXMLnamespace \empty % the (remapped) namespace \let\originalXMLnamespace\empty % the unremapped namespace -\let\rawXMLidentifier \empty +\let\rawXMLidentifier \empty \def\rawXMLnamespace {\ifx\currentXMLnamespace\empty\else\currentXMLnamespace:\fi} @@ -542,38 +542,38 @@ \chardef\endXMLtag =2 \chardef\emptyXMLtag=3 -%D We do a rather hard coded scan for the namespace attribute. This -%D is needed because its value determines further namespace related -%D actions. +%D We do a rather hard coded scan for the namespace attribute. This +%D is needed because its value determines further namespace related +%D actions. \def\openXMLargument{ /} - + \long\def\parseXMLelement#1#2 #3>% - {\def\currentXMLarguments{#3}% including end / - \if#1/% + {\def\currentXMLarguments{#3}% including end / + \if#1/% \chardef\kindofXMLelement\endXMLtag \def\currentXMLelement{#2}% \else \docleanupXMLelement#1#2/\empty\relax - \fi + \fi \ifx\currentXMLarguments\openXMLargument \chardef\kindofXMLelement\emptyXMLtag \fi \@EA\splitoffXMLnamespace\currentXMLelement::\relax \ifcase\kindofXMLelement - % can't happen - \or - % begintag or emptytag with arguments or space before / + % can't happen + \or + % begintag or emptytag with arguments or space before / \the\everyXMLelement % only for begin/empty tag ! \ifx\currentXMLarguments\empty \else \dogetXMLarguments\rawXMLelement#3>% \fi \or - % no arguments + % no arguments \or - % empty element without arguments (but possible presets) - \the\everyXMLelement - \fi + % empty element without arguments (but possible presets) + \the\everyXMLelement + \fi \ifcase\kindofXMLelement\or \let\currentXMLidentifier \rawXMLidentifier \edef\currentXMLfullidentifier {\rawXMLelement }% @@ -588,7 +588,7 @@ \executeXMLelement} \long\def\docleanupXMLelement#1/#2#3\relax - {\def\currentXMLelement{#1}% watch out: \empty == begin or empty tag + {\def\currentXMLelement{#1}% watch out: \empty == begin or empty tag \chardef\kindofXMLelement\ifx#2\empty\beginXMLtag\else\emptyXMLtag\fi} \def\@@traceXMLelement @@ -618,7 +618,7 @@ \let\originalXMLnamespace\currentXMLnamespace \checkXMLnamespace\rawXMLidentifier} -\def\xsplitoffXMLnamespace% fast resplit +\def\xsplitoffXMLnamespace% fast resplit {\ifcsname\@@XMLnamespace:\currentXMLnamespace\endcsname \csname\@@XMLnamespace:\currentXMLnamespace\endcsname \fi} @@ -629,42 +629,42 @@ %D The namespace attribute checking is part of the element %D parser, since the value of \type {xmlns} may influence other -%D namespace mapping. +%D namespace mapping. \def\@@XMLns{xmlns} \def\checkXMLnamespaceattr#1% xmlns:\@@XMLname="\XMLns" - {\edef\XMLns{#1}% + {\edef\XMLns{#1}% \ifx\XMLns\empty \else \ifcsname\@@XMLurlspace:\XMLns\endcsname - % get remapped namespace (from url) + % get remapped namespace (from url) % \edef\XMLns{\csname\@@XMLurlspace:\XMLns\endcsname}% \@EA\let\@EA\XMLns\csname\@@XMLurlspace:\XMLns\endcsname - % remap this one - \ifx\@@XMLname\empty - % not watertight since no implicit grouping + % remap this one + \ifx\@@XMLname\empty + % not watertight since no implicit grouping \xautoXMLnamespace\XMLns \else \xremapXMLnamespace\@@XMLname\XMLns - % redo namespace remapping of self if needed - \ifx\XMLns\currentXMLnamespace - % i'm still not sure if this is ok + % redo namespace remapping of self if needed + \ifx\XMLns\currentXMLnamespace + % i'm still not sure if this is ok \else \xsplitoffXMLnamespace \fi \fi - \fi + \fi \fi} -%D Although not really needed, we clean up the arguments. +%D Although not really needed, we clean up the arguments. % \long\def\cleanupXMLarguments % {\ifnum\kindofXMLelement=\emptyXMLtag -% \ifx\currentXMLarguments\empty \else +% \ifx\currentXMLarguments\empty \else % \@EA\docleanupXMLarguments\currentXMLarguments/\empty % \fi % \fi} -% +% % \long\def\docleanupXMLarguments#1/#2\empty % {\edef\currentXMLarguments{#1}} % @@ -672,7 +672,7 @@ \long\def\cleanupXMLarguments {\ifnum\kindofXMLelement=\emptyXMLtag - \ifx\currentXMLarguments\empty \else + \ifx\currentXMLarguments\empty \else \@EA\docleanupXMLarguments\currentXMLarguments/ \relax \fi \fi} @@ -680,17 +680,17 @@ \long\def\docleanupXMLarguments#1/ #2\relax % space added earlier {\edef\currentXMLarguments{#1}} -\def\executeXMLelementA % no fallback +\def\executeXMLelementA % no fallback {\ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname - \csname\@@XMLelement:\currentXMLfullidentifier\endcsname + \csname\@@XMLelement:\currentXMLfullidentifier\endcsname \fi} -\def\executeXMLelementB % default fallback +\def\executeXMLelementB % default fallback {\csname \@@XMLelement:% \ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname \currentXMLfullidentifier \else - \defaultXMLelementID % was \s!default + \defaultXMLelementID % was \s!default \fi \endcsname} @@ -701,22 +701,22 @@ \else\ifcsname\@@XMLelement:\currentXMLidentifier\endcsname \currentXMLidentifier \else - \defaultXMLelementID % was \s!default + \defaultXMLelementID % was \s!default \fi\fi \endcsname} \def\executeXMLelementD - {\csname + {\csname \ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname \@@XMLelement:\currentXMLfullidentifier \else\ifcsname\@@XMLelement:\currentXMLidentifier\endcsname \@@XMLelement:\currentXMLidentifier \else - \executeXMLelementDD % less skipping and thereby faster + \executeXMLelementDD % less skipping and thereby faster \fi\fi \endcsname} -\def\executeXMLelementDD % now forget about tex mapping +\def\executeXMLelementDD % now forget about tex mapping {\ifcsname\normal@@XMLelement:\currentXMLfullidentifier\endcsname \normal@@XMLelement:\currentXMLfullidentifier \else\ifcsname\normal@@XMLelement:\currentXMLidentifier\endcsname @@ -727,27 +727,27 @@ \def\setXMLfallbackmode#1% {\ifcase#1\relax - \let\executeXMLelement \executeXMLelementA - \let\automateXMLnamespace\automateXMLnamespaceA - \or % 1 - \let\executeXMLelement \executeXMLelementB - \let\automateXMLnamespace\automateXMLnamespaceB - \or % 2 - \let\executeXMLelement \executeXMLelementC - \let\automateXMLnamespace\automateXMLnamespaceC + \let\executeXMLelement \executeXMLelementA + \let\automateXMLnamespace\automateXMLnamespaceA + \or % 1 + \let\executeXMLelement \executeXMLelementB + \let\automateXMLnamespace\automateXMLnamespaceB + \or % 2 + \let\executeXMLelement \executeXMLelementC + \let\automateXMLnamespace\automateXMLnamespaceC \or % 3 - \let\executeXMLelement \executeXMLelementD - \let\automateXMLnamespace\automateXMLnamespaceD + \let\executeXMLelement \executeXMLelementD + \let\automateXMLnamespace\automateXMLnamespaceD \fi} -\setXMLfallbackmode3 % was 2 +\setXMLfallbackmode3 % was 2 -%D An example of fall back modes is given below. +%D An example of fall back modes is given below. %D The automated namespace stuff is new and yet undocumented %D (see resource libraries for usage). -\def\xautoXMLnamespace#1% fast internal one +\def\xautoXMLnamespace#1% fast internal one {\ifcsname\@@XMLnamespace-#1\endcsname\else \@EA\appendtoks\csname\@@XMLnamespace-#1\endcsname\to\autoXMLnamespaces \fi @@ -758,26 +758,26 @@ \def\doautoXMLnamespace#1% \done is set before list {\ifdone\else\automateXMLnamespace#1\fi} -\def\automateXMLnamespaceA#1% +\def\automateXMLnamespaceA#1% {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname \let\currentXMLnamespace#1% \else\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname \let\currentXMLnamespace#1% - \fi\fi} + \fi\fi} \let\automateXMLnamespaceB\automateXMLnamespaceA \let\automateXMLnamespaceC\automateXMLnamespaceA -\def\automateXMLnamespaceD#1% +\def\automateXMLnamespaceD#1% {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname \let\currentXMLnamespace#1% \else\ifcsname\normal@@XMLelement:#1:\checkedXMLnamespace\endcsname \let\currentXMLnamespace#1% \else - \automateXMLnamespaceDD#1% + \automateXMLnamespaceDD#1% \fi\fi} -\def\automateXMLnamespaceDD#1% +\def\automateXMLnamespaceDD#1% {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname \let\currentXMLnamespace#1% \else\ifcsname\normal@@XMLelement:#1:\checkedXMLnamespace/\endcsname @@ -785,7 +785,7 @@ \fi\fi} %D Later we will implement the error handler, here we handle -%D the default case. +%D the default case. \def\someXMLelementID#1% {\ifnum\kindofXMLelement=\endXMLtag /\fi @@ -795,24 +795,24 @@ \def\defaultXMLelementID {\someXMLelementID\s!default} -%D It is possible to keep track of nesting automatically, -%D but this would kind of prohibit things like \type -%D {\ignorespaces}. In the future we may provide an -%D automatic depth tracking as an alternative (exclusive) -%D mode of operation combined with space grabbing. +%D It is possible to keep track of nesting automatically, +%D but this would kind of prohibit things like \type +%D {\ignorespaces}. In the future we may provide an +%D automatic depth tracking as an alternative (exclusive) +%D mode of operation combined with space grabbing. \def\beginXMLelement - {\global\advance\XMLdepth\plusone + {\global\advance\XMLdepth\plusone \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement} \def\endXMLelement - {\global\advance\XMLdepth\minusone} + {\global\advance\XMLdepth\minusone} -% 0 = nothing +% 0 = nothing % 1 = unknown -% 2 = current element +% 2 = current element -\chardef\XMLancestormode=2 % never change this one globally +\chardef\XMLancestormode=2 % never change this one globally \def\XMLancestor#1% {\ifnum\numexpr(\XMLdepth-#1)>0 @@ -832,70 +832,70 @@ \def\XMLpureparent {\XMLpureancestor\plusone} -% \defineXMLenvironment[one] +% \defineXMLenvironment[one] % {\beginXMLelement} % {\endXMLelement} -% -% \defineXMLenvironment[two] +% +% \defineXMLenvironment[two] % {\beginXMLelement % \starttabulate -% \NC ancestor 1 \NC \XMLancestor{1} \NC \NR -% \NC ancestor 2 \NC \XMLancestor{2} \NC \NR -% \NC ancestor 3 \NC \XMLancestor{3} \NC \NR -% \NC ancestor 4 \NC \XMLancestor{4} \NC \NR +% \NC ancestor 1 \NC \XMLancestor{1} \NC \NR +% \NC ancestor 2 \NC \XMLancestor{2} \NC \NR +% \NC ancestor 3 \NC \XMLancestor{3} \NC \NR +% \NC ancestor 4 \NC \XMLancestor{4} \NC \NR % \stoptabulate} % {\endXMLelement} -% +% % \startbuffer -% +% % \stopbuffer -% +% % {fallback A: \setXMLfallbackmode 0 \processXMLbuffer}\par % {fallback B: \setXMLfallbackmode 1 \processXMLbuffer}\par % {fallback C: \setXMLfallbackmode 2 \processXMLbuffer}\par -% todo: split #1 into raws en reconstruct, set current etc, push and pop +% todo: split #1 into raws en reconstruct, set current etc, push and pop % % \def\beginXMLelement % {\dosingleempty\dobeginXMLelement} -% +% % \def\dobeginXMLelement[#1]% -% {\global\advance\XMLdepth 1 +% {\global\advance\XMLdepth 1 % \global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement % \global\@EA\edef\csname\@@XMLdopth:\the\XMLdepth\endcsname{\ownXMLelement}% % \iffirstargument\edef\ownXMLelement{#1}\fi} -% +% % \def\endXMLelement % {\@EA\let\@EA\ownXMLelement\csname\@@XMLdopth:\the\XMLdepth\endcsname % \global\advance\XMLdepth -1 } -%D \defineXMLenvironment[one] +%D \defineXMLenvironment[one] %D {\beginXMLelement} %D {\endXMLelement} -%D -%D \defineXMLenvironment[two] +%D +%D \defineXMLenvironment[two] %D {\beginXMLelement %D \starttabulate -%D \NC parent 1 \NC \XMLparent{1} \NC \NR -%D \NC parent 2 \NC \XMLparent{2} \NC \NR -%D \NC parent 3 \NC \XMLparent{3} \NC \NR -%D \NC parent 4 \NC \XMLparent{4} \NC \NR +%D \NC parent 1 \NC \XMLparent{1} \NC \NR +%D \NC parent 2 \NC \XMLparent{2} \NC \NR +%D \NC parent 3 \NC \XMLparent{3} \NC \NR +%D \NC parent 4 \NC \XMLparent{4} \NC \NR %D \stoptabulate} %D {\endXMLelement} -%D +%D %D \startbuffer -%D +%D %D \stopbuffer -%D +%D %D fallback A: \setXMLfallbacklevel0 \processXMLbuffer %D fallback B: \setXMLfallbacklevel1 \processXMLbuffer %D fallback C: \setXMLfallbacklevel2 \processXMLbuffer -%D Here we do the namespace (re)mapping. More examples are -%D provided in the manual. +%D Here we do the namespace (re)mapping. More examples are +%D provided in the manual. %D %D \starttypen -%D \supportXMLnamespace [test] % needed to get a namespace working +%D \supportXMLnamespace [test] % needed to get a namespace working %D \skipXMLnamespace [test] % slow %D \ignoreXMLnamespace [test] % faster %D \defineXMLenvironment [rubish:itemize] {[} {]} @@ -909,8 +909,8 @@ \newtoks\autoXMLnamespaces -%D The automatically mapped namespaces (the fallbacks so to -%D day) are collected in a token list. +%D The automatically mapped namespaces (the fallbacks so to +%D day) are collected in a token list. \let\checkedXMLnamespace\empty @@ -918,13 +918,13 @@ {\edef\checkedXMLnamespace{#1}% \ifcsname\@@XMLnamespace:\currentXMLnamespace\endcsname \csname\@@XMLnamespace:\currentXMLnamespace\endcsname - % forced namespace + % forced namespace \else\ifcsname\@@XMLelement:\currentXMLelement\endcsname - % natural element + % natural element \else\ifcsname\@@XMLelement:\currentXMLelement/\endcsname - % natural element + % natural element \else - % locate fallback + % locate fallback \donefalse\the\autoXMLnamespaces \fi\fi\fi} @@ -945,9 +945,9 @@ \def\ignoreXMLnamespace[#1]% {\letvalue{\@@XMLnamespace:#1}\doXMLignorenamespace} -\def\doXMLignorenamespace % \let binnen def +\def\doXMLignorenamespace % \let binnen def {\long\@EA\def\csname\@@XMLelement:\checkedXMLnamespace\endcsname - {\@EA\redoXMLignore\@EA{\checkedXMLnamespace}}} % EA ? + {\@EA\redoXMLignore\@EA{\checkedXMLnamespace}}} % EA ? \def\remapXMLnamespace {\dodoubleargument\doremapXMLnamespace} @@ -965,14 +965,14 @@ \def\dosupportXMLnamespace[#1]% {\setvalue{\@@XMLnamespace:#1}{\def\currentXMLnamespace{#1}}} -\def\xremapXMLnamespace#1#2% fast internal one +\def\xremapXMLnamespace#1#2% fast internal one {\@EA\edef\csname\@@XMLnamespace:#1\endcsname {\def\noexpand\currentXMLnamespace{#2}}} \def\autoXMLnamespace[#1]% {\xautoXMLnamespace{#1}} -\def\xautoXMLnamespace#1% fast internal one +\def\xautoXMLnamespace#1% fast internal one {\ifcsname\@@XMLnamespace-#1\endcsname\else \@EA\appendtoks\csname\@@XMLnamespace-#1\endcsname\to\autoXMLnamespaces \fi @@ -998,8 +998,8 @@ \def\doremapXMLurlspace[#1][#2]% {\setvalue{\@@XMLurlspace:#1}{#2}} -%D Entities needs a bit more work, as well as a connection -%D with the encoding handlers. +%D Entities needs a bit more work, as well as a connection +%D with the encoding handlers. % we need to be able to do: % @@ -1013,13 +1013,13 @@ % % so we need an ifless implementation -% \eacute -> simplified -> e (via raw encoding) -% -> raw -> eacute (via handler) +% \eacute -> simplified -> e (via raw encoding) +% -> raw -> eacute (via handler) % % naming sucks -\newif\ifXMLrawentities % proper fallback -\newif\ifXMLsimpleentities % last resort +\newif\ifXMLrawentities % proper fallback +\newif\ifXMLsimpleentities % last resort \def\simpleXMLencoding{raw} @@ -1041,17 +1041,17 @@ {\dododefineXMLentity{#1}{\ifXMLsimpleentities#2\else#3\fi}} \def\dododefineXMLentity#1#2% - {\unspaceargument#1\to\ascii % #1 can be {[} or so + {\unspaceargument#1\to\ascii % #1 can be {[} or so \long\setvalue{\@@XMLentity:\@EA\firstofoneargument\ascii}{#2}} -\def\setXMLentity#1% fast one +\def\setXMLentity#1% fast one {\long\@EA\def\csname\@@XMLentity:#1\endcsname} -%D May this wile become dodo (more in tune with rest); -%D beware: also remapped in xtag-map. +%D May this wile become dodo (more in tune with rest); +%D beware: also remapped in xtag-map. -\def\doXMLentity#1#2;% interesting: # is now ## - {\if\string#1\letterhash +\def\doXMLentity#1#2;% interesting: # is now ## + {\if\string#1\letterhash \@EA\parseXMLcharacter \else\ifXMLrawentities \@EAEAEA\firstofoneargument @@ -1061,16 +1061,16 @@ %D Here we need to get rid of the double hash and act upon the %D number. Proper hex/oct number support can be implemented by -%D redefining \type {\executeXMLcharacter}. +%D redefining \type {\executeXMLcharacter}. -% \def\parseXMLcharacter#1% gobble the ##x -% {\@EA\executeXMLcharacter\@EA{\gobblethreearguments#1}} +% \def\parseXMLcharacter#1% gobble the ##x +% {\@EA\executeXMLcharacter\@EA{\gobblethreearguments#1}} +% +% single hash now +% +% \def\parseXMLcharacter#1% +% {\@EA\executeXMLcharacter\@EA{\gobbleoneargument#1}} % -% single hash now -% -% \def\parseXMLcharacter#1% -% {\@EA\executeXMLcharacter\@EA{\gobbleoneargument#1}} -% % \def\executeXMLcharacter#1% can be overloaded % {\ifnum"#1<256 % \@EA\getXMLcharacter @@ -1079,13 +1079,13 @@ % \else % \@EAEAEA\unknownXMLcharacter % \fi\fi{\number"#1}} -% -% \unexpanded\def\getXMLcharacter#1{\rawcharacter{#1}} +% +% \unexpanded\def\getXMLcharacter#1{\rawcharacter{#1}} -\def\parseXMLcharacter#1% - {\@EA\executeXMLcharacter\gobbleoneargument#1\empty\relax} - -\def\executeXMLcharacter#1#2\relax +\def\parseXMLcharacter#1% + {\@EA\executeXMLcharacter\gobbleoneargument#1\empty\relax} + +\def\executeXMLcharacter#1#2\relax {\if#1x% \@EA\executeXMLhexcharacter \else @@ -1113,7 +1113,7 @@ \@EAEAEA\unknownXMLcharacter \fi\fi{\number"#1}} -% == +% == % % \def\executeXMLhexcharacter x#1\relax % {\uppercase{\ifnum"#1}<256 @@ -1142,52 +1142,52 @@ \@EA\unicodechar % was: \rawcharacter \fi{#1}} -\def\unknownXMLcharacter#1{[#1]} +\def\unknownXMLcharacter#1{[#1]} -% \useXMLfilter[ent] -% +% \useXMLfilter[ent] +% % \defineXMLsingular[test]{{\simplifyXMLentities\XMLpar{test}{bla}{}}} -% +% % \startXMLdata % % \stopXMLdata -% +% % \defineXMLentity[45]{|it works|} % {|-|} -% +% % \startXMLdata % text-.text % textEFtext % \stopXMLdata -%D May be this will change a bit ... +%D May be this will change a bit ... -\def\executeXMLentity#1% named one +\def\executeXMLentity#1% named one {\getXMLentity{#1}} %\def\expandedXMLentity#1% -% {\ifcsname\@@XMLentity:#1\endcsname\csname\@@XMLentity:#1\endcsname\fi} +% {\ifcsname\@@XMLentity:#1\endcsname\csname\@@XMLentity:#1\endcsname\fi} % %\unexpanded\def\getXMLentity#1% -% {\ifcsname\@@XMLentity:#1\endcsname\csname\@@XMLentity:#1\endcsname\fi} +% {\ifcsname\@@XMLentity:#1\endcsname\csname\@@XMLentity:#1\endcsname\fi} % %\def\expandedXMLentity#1% -% {\csname\@@XMLentity:#1\endcsname} +% {\csname\@@XMLentity:#1\endcsname} % %\unexpanded\def\getXMLentity#1% -% {\csname\@@XMLentity:#1\endcsname} +% {\csname\@@XMLentity:#1\endcsname} -\newif\ifautoXMLentities % fall back on context commands +\newif\ifautoXMLentities % fall back on context commands \def\expandedXMLentity#1% {\ifcsname\@@XMLentity:#1\endcsname \@EA \execXMLentity \else\ifautoXMLentities \@EAEAEA \autoXMLentity \else \@EAEAEA \crapXMLentity - \fi\fi{#1}} + \fi\fi{#1}} -\def\execXMLentity#1% +\def\execXMLentity#1% {\csname\@@XMLentity:#1\endcsname} -\def\crapXMLentity#1% +\def\crapXMLentity#1% {\inframed[\c!offset=.1ex]{\tttf#1}} \def\autoXMLentity#1% @@ -1232,7 +1232,7 @@ \let\dosetXMLattributeA\gobbleoneargument \def\dosetXMLattributeB#1% - {\ifx\@@XMLspac\originalXMLnamespace + {\ifx\@@XMLspac\originalXMLnamespace \@EA\def\csname\@@XMLvariable:\@@XMLclass:\@@XMLname\endcsname{#1}% \fi} @@ -1270,7 +1270,7 @@ \let\dosetXMLattribute\dosetXMLattributeD \fi} -\setXMLattributemode{2} % a reasonable default +\setXMLattributemode{2} % a reasonable default \let\@@XMLspac\empty % argumentnamespace @@ -1288,7 +1288,7 @@ % \long\def\doparseXMLarguments#1% space goes ok % {\if#1>% % \let\dodoparseXMLarguments\empty -% \else\if#1=% +% \else\if#1=% % \edef\@@XMLname{\the\XMLtoks}% % \XMLtoks\emptytoks % \else\if#1"% @@ -1307,7 +1307,7 @@ % \dodoparseXMLarguments} % % The next speed optimization is suggested by Taco. Since we -% are dealing with validated code, we can grab larger chunks. +% are dealing with validated code, we can grab larger chunks. \long\def\doparseXMLarguments#1% space goes ok {\if#1>% @@ -1341,8 +1341,8 @@ \edef\@@XMLspac{#1}% \fi} -% ok ? -% +% ok ? +% % \def\dodoparseXMLargumentsX#1=#2% % {\edef\@@XMLname{\the\XMLtoks#1}% % \@EA\getXMLNSSSS\@@XMLname:\relax @@ -1353,9 +1353,9 @@ % \@EA\dodoparseXMLargumentsS % \fi} -% Storing \type {#1} in a macro in order to minimize the -% amount of data passed as argument does not improve -% performance, so we keep the readable form. +% Storing \type {#1} in a macro in order to minimize the +% amount of data passed as argument does not improve +% performance, so we keep the readable form. \def\dodoparseXMLargumentsD#1"{\dosetXMLargument{#1}} \def\dodoparseXMLargumentsS#1'{\dosetXMLargument{#1}} @@ -1376,7 +1376,7 @@ \let\dodoparseXMLarguments\doparseXMLarguments \dodoparseXMLarguments} -\def\dosetXMLargument#1% ugly alternative +\def\dosetXMLargument#1% ugly alternative {\ifXMLnamespace \XMLnamespacefalse \ifx\@@XMLspac\@@XMLns @@ -1422,7 +1422,7 @@ \bgroup \enableXMLexpansion \let\getXMLentity\expandedXMLentity - #1% simplify maps entities back to _ and alike + #1% simplify maps entities back to _ and alike \expanded{\global\globalscratchtoks{\csname#2\endcsname}}% \egroup \@EA\edef\csname#2\endcsname{\the\globalscratchtoks}% @@ -1446,7 +1446,7 @@ %D \starttabulate[||||] %D \HL %D \NC \bf mode \NC \bf call \NC \bf result \NC\NR -%D \HL +%D \HL %D \NC 0\NC\asciistr{\XMLpar {fx:root} {crap} {}} \NC dirt \NC\NR %D \NC \NC\asciistr{\XMLpar {fx:root} {junk} {}} \NC \NC\NR %D \NC \NC\asciistr{\XMLNSpar {fx:root} {fx} {crap} {}}\NC \NC\NR @@ -1468,10 +1468,10 @@ %D \NC \NC\asciistr{\XMLNSpar {fx:root} {xml} {lang} {}}\NC en \NC\NR %D \HL %D \stoptabulate} -%D +%D %D \remapXMLurlspace [http://www.w3.org/1999/XSL/Format] [fx] %D \stopbuffer -%D +%D %D \startbuffer[xml] %D %D \stopbuffer %D -%D \typebuffer[tex] \processTEXbuffer[tex] +%D \typebuffer[tex] \processTEXbuffer[tex] %D \typebuffer[xml] \processXMLbuffer[xml] %D The previous macros were the basic parser and their working %D is left to the imagination of the reader. These macros -%D will be improved over time. We use rather low level -%D definitions so that the mappings will run as fast as -%D possible. +%D will be improved over time. We use rather low level +%D definitions so that the mappings will run as fast as +%D possible. \bgroup \catcode`<=\@@active @@ -1539,7 +1539,7 @@ \next} \long\gdef\dododefineXMLenvironment#1#2#3% - {\long\setvalue{\@@XMLelement:#1/}{#2#3}% + {\long\setvalue{\@@XMLelement:#1/}{#2#3}% \long\setvalue{\@@XMLelement:#1}{#2}% \long\setvalue{\@@XMLelement:/#1}{#3}} @@ -1704,11 +1704,11 @@ % command element [map] [parlst] begin end -\long\def\defineXMLmethod#1#2#3#4#5#6% +\long\def\defineXMLmethod#1#2#3#4#5#6% {\ifsecondargument \setXMLarguments{#2}{#3}{#4}% \else - \resetXMLarguments{#2}% new + \resetXMLarguments{#2}% new \fi #1{#2}{#5}{#6}} @@ -1727,6 +1727,10 @@ \presetXMLarguments\rawXMLidentifier \to \everyXMLelement +\appendtoks + \disablelanguagespecifics % interesting what kind of things are needed ... +\to \everyenableXML + \long\def\longempty{} \long\def\longspace{ } @@ -1735,16 +1739,16 @@ % \expandafter\secondoftwoarguments % \else % \expandafter\firstoftwoarguments -% \fi} +% \fi} % % \def\doifXMLdata#1% always empty at start [gets a long assignment] % {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty % \expandafter\gobbleoneargument % \else % \expandafter\firstofoneargument -% \fi} +% \fi} % -% \let\doifXMLdataelse\doifelseXMLdata +% \let\doifXMLdataelse\doifelseXMLdata \def\doifelseXMLdata#1% always empty at start [gets a long assignment] {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty @@ -1762,16 +1766,16 @@ \let\doifXMLdataelse\doifelseXMLdata -\def\doifelseXMLempty#1% +\def\doifelseXMLempty#1% {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty \expandafter\firstoftwoarguments \else\@EA\ifx\csname\@@XMLdata:#1\endcsname\longspace \expandthree\firstoftwoarguments \else \expandthree\secondoftwoarguments - \fi\fi} + \fi\fi} -% test case: +% test case: % % \defineXMLenvironmentsave[test] % {} @@ -1780,7 +1784,7 @@ % \message{/} % \message{\doifelseXMLempty{test}{}{not }empty} % \wait} -% +% % \startXMLdata % xxx % @@ -1813,11 +1817,11 @@ \let\XMLpopdata\XMLflushdata -\def\XMLappend#1#2% let to empty expands to nothing -) +\def\XMLappend#1#2% let to empty expands to nothing -) {\long\@EA\edef\csname\@@XMLdata:#1\endcsname {\csname\@@XMLdata:#1\endcsname#2}} -\def\XMLprepend#1#2% let to empty expands to nothing -) +\def\XMLprepend#1#2% let to empty expands to nothing -) {\long\@EA\edef\csname\@@XMLdata:#1\endcsname {#2\csname\@@XMLdata:#1\endcsname}} @@ -1846,7 +1850,7 @@ \enableXMLexpansion \simplifyXMLelements \simplifyXMLentities - \let\getXMLentity\expandedXMLentity % should this go in \simplify ? + \let\getXMLentity\expandedXMLentity % should this go in \simplify ? \xdef\@@XML@@string{\csname\@@XMLdata:#2\endcsname}% \egroup \convertcommand\@@XML@@string\to#1} @@ -1854,7 +1858,7 @@ \def\XMLshow#1% {\showvalue{\@@XMLdata:#1}} -\def\XMLunspace#1% kan sneller +\def\XMLunspace#1% kan sneller {\@EA\ifx\csname\@@XMLdata:#1\endcsname\longempty\else \long\@EA\edef\csname\@@XMLdata:#1\endcsname {\@EAEAEA\dounspaced\csname\@@XMLdata:#1\endcsname\end}% @@ -1923,14 +1927,14 @@ \def\setXMLpar#1#2% {\@EA\def\csname\@@XMLvariable:#1:#2\endcsname} -\def\TEXpar#1#2% +\def\TEXpar#1#2% {\csname#1\interfaced{#2}\endcsname} -\let\texXMLpar\TEXpar % soon obsolete +\let\texXMLpar\TEXpar % soon obsolete \let\XMLtex\TEXpar -% handy one +% handy one \def\XMLtyp#1#2#3% {\ifcsname\@@XMLvariable:#1:#2\endcsname @@ -1960,9 +1964,9 @@ \fi} \def\doifXMLvarelse#1#2% geen etex, \relax too - {\ifcsname\@@XMLvariable:#1:#2\endcsname + {\ifcsname\@@XMLvariable:#1:#2\endcsname %\expandafter\ifx\csname\@@XMLvariable:#1:#2\endcsname\relax -% \message{#1 #2 -> relax}\wait +% \message{#1 #2 -> relax}\wait %\fi \expandafter\ifx\csname\@@XMLvariable:#1:#2\endcsname\empty \@EAEAEA\secondoftwoarguments @@ -1974,7 +1978,7 @@ \fi} \def\doifXMLvar#1#2% geen etex, \relax too - {\ifcsname\@@XMLvariable:#1:#2\endcsname + {\ifcsname\@@XMLvariable:#1:#2\endcsname \expandafter\ifx\csname\@@XMLvariable:#1:#2\endcsname\empty \@EAEAEA\gobbleoneargument \else @@ -1985,7 +1989,7 @@ \fi} \def\doifXMLvalelse#1#2% geen etex, \relax too - {\ifcsname\@@XMLvalue:#1:#2\endcsname + {\ifcsname\@@XMLvalue:#1:#2\endcsname \expandafter\ifx\csname\@@XMLvalue:#1:#2\endcsname\empty \@EAEAEA\secondoftwoarguments \else @@ -2017,10 +2021,10 @@ \def\ownXMLelement{\rawXMLnamespace\rawXMLidentifier} -\def\XMLop#1% ownpar +\def\XMLop#1% ownpar {\csname\@@XMLvariable:\ownXMLelement:#1\endcsname} -\def\XMLtp#1% texpar +\def\XMLtp#1% texpar {\csname\@@XMLmapmap\interfaced{#1}\endcsname} \def\doifelseXMLop#1{\doifelse{\XMLop{#1}}} @@ -2061,7 +2065,7 @@ {\begingroup \protectXMLdata \dostartXMLcode} - + \long\def\dostartXMLcode[#1] #2 \stopXMLcode {\@EA\gdef\csname\@@XMLcode:#1\endcsname{\startXMLdata#2\stopXMLdata}% \endgroup} @@ -2102,7 +2106,7 @@ % % currently: -\unexpanded\def\XMLdata % # safe +\unexpanded\def\XMLdata % # safe {\begingroup \protectXMLdata \doXMLdata} @@ -2173,7 +2177,7 @@ %D Loading specific modules takes place with \type %D {\useXMLfilters}. -% todo: flag +% todo: flag \def\useXMLfilter[#1]% {\processcommalist[#1]\douseXMLfilter} @@ -2223,7 +2227,7 @@ % \dosplitstring#2@@#1@@\end} \long\gdef\docountXMLgrouped#1\end#2\end % 1 relax is enough since it's - {\long\def\dosplitstring##1#1##2\relax\relax##3\end % another regime + {\long\def\dosplitstring##1#1##2\relax\relax##3\end % another regime {\def\ascii{##2}% \ifx\ascii\empty \else \advance\scratchcounter \plusone @@ -2231,7 +2235,7 @@ \fi}% \dosplitstring#2\relax\relax#1\relax\relax\end} -\long\unexpanded\gdef\getXMLgrouped#1% #1 kan weg % klopt dit nu? +\long\unexpanded\gdef\getXMLgrouped#1% #1 kan weg % klopt dit nu? {\groupedtoks\emptytoks \scratchcounter\zerocount \edef\theXMLnamespace @@ -2270,19 +2274,19 @@ \def\doXMLifequalelse#1#2% {\@EA\@@ifequal#1\relax\@@and#2\relax\@@then} -%D \starttypen +%D \starttypen %D \defineXMLenvironment[test][a=1] %D {\XMLownifequalelse{a}{2}{YES}{NO}} %D {} -%D +%D %D \defineXMLenvironment[test][a=1] %D {\XMLifequalelse{test}{a}{1}{YES}{NO}} %D {} -%D +%D %D \startXMLdata %D test %D \stopXMLdata -%D \stoptypen +%D \stoptypen \def\XMLyes#1{\XMLownifequalelse{#1}{yes}{#1}{}} -- cgit v1.2.3