summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--context/data/cont-cz.tws71
-rw-r--r--context/data/cont-de.tws71
-rw-r--r--context/data/cont-en.tws71
-rw-r--r--context/data/cont-it.tws71
-rw-r--r--context/data/cont-nl.tws73
-rw-r--r--context/data/cont-ro.tws71
-rw-r--r--context/data/type-buy.dat4
-rw-r--r--context/perltk/cont_set.pm88
-rw-r--r--context/perltk/makempy.pl2
-rw-r--r--context/perltk/mptopdf.pl20
-rw-r--r--context/perltk/runperl.zipbin0 -> 3145 bytes
-rw-r--r--context/perltk/texexec.pl251
-rw-r--r--context/perltk/texfont.pl74
-rw-r--r--context/perltk/texutil.pl154
-rw-r--r--metapost/context/mp-char.mp100
-rw-r--r--metapost/context/mp-core.mp701
-rw-r--r--metapost/context/mp-form.mp19
-rw-r--r--metapost/context/mp-page.mp78
-rw-r--r--metapost/context/mp-spec.mp139
-rw-r--r--metapost/context/mp-symb.mp1
-rw-r--r--metapost/context/mp-tool.mp168
-rw-r--r--tex/context/base/colo-ini.tex1076
-rw-r--r--tex/context/base/colo-rgb.tex4
-rw-r--r--tex/context/base/colo-run.tex92
-rw-r--r--tex/context/base/cont-cz.tex2
-rw-r--r--tex/context/base/cont-de.tex2
-rw-r--r--tex/context/base/cont-en.tex2
-rw-r--r--tex/context/base/cont-fil.tex4
-rw-r--r--tex/context/base/cont-it.tex2
-rw-r--r--tex/context/base/cont-log.tex21
-rw-r--r--tex/context/base/cont-new.tex1779
-rw-r--r--tex/context/base/cont-nl.tex2
-rw-r--r--tex/context/base/cont-ro.tex2
-rw-r--r--tex/context/base/cont-uk.tex8
-rw-r--r--tex/context/base/context.tex28
-rw-r--r--tex/context/base/core-box.tex97
-rw-r--r--tex/context/base/core-buf.tex321
-rw-r--r--tex/context/base/core-con.tex24
-rw-r--r--tex/context/base/core-dat.tex9
-rw-r--r--tex/context/base/core-des.tex223
-rw-r--r--tex/context/base/core-fig.tex1100
-rw-r--r--tex/context/base/core-fil.tex10
-rw-r--r--tex/context/base/core-fld.tex90
-rw-r--r--tex/context/base/core-fnt.tex31
-rw-r--r--tex/context/base/core-gen.tex15
-rw-r--r--tex/context/base/core-grd.tex486
-rw-r--r--tex/context/base/core-int.tex1052
-rw-r--r--tex/context/base/core-itm.tex68
-rw-r--r--tex/context/base/core-job.tex152
-rw-r--r--tex/context/base/core-lst.tex231
-rw-r--r--tex/context/base/core-ltb.tex742
-rw-r--r--tex/context/base/core-mak.tex12
-rw-r--r--tex/context/base/core-mar.tex47
-rw-r--r--tex/context/base/core-mat.tex619
-rw-r--r--tex/context/base/core-mis.tex1094
-rw-r--r--tex/context/base/core-nav.tex20
-rw-r--r--tex/context/base/core-new.tex14
-rw-r--r--tex/context/base/core-not.tex191
-rw-r--r--tex/context/base/core-ntb.tex604
-rw-r--r--tex/context/base/core-num.tex10
-rw-r--r--tex/context/base/core-obj.tex10
-rw-r--r--tex/context/base/core-par.tex73
-rw-r--r--tex/context/base/core-pos.tex669
-rw-r--r--tex/context/base/core-ref.tex26
-rw-r--r--tex/context/base/core-reg.tex509
-rw-r--r--tex/context/base/core-rul.tex1011
-rw-r--r--tex/context/base/core-sec.tex509
-rw-r--r--tex/context/base/core-spa.tex841
-rw-r--r--tex/context/base/core-syn.tex42
-rw-r--r--tex/context/base/core-sys.tex26
-rw-r--r--tex/context/base/core-tab.tex1007
-rw-r--r--tex/context/base/core-tbl.tex646
-rw-r--r--tex/context/base/core-uti.tex106
-rw-r--r--tex/context/base/core-var.tex29
-rw-r--r--tex/context/base/core-ver.tex164
-rw-r--r--tex/context/base/core-vis.tex333
-rw-r--r--tex/context/base/enco-ini.tex119
-rw-r--r--tex/context/base/enco-mis.tex19
-rw-r--r--tex/context/base/enco-pol.tex3
-rw-r--r--tex/context/base/font-chi.tex66
-rw-r--r--tex/context/base/font-ini.tex614
-rw-r--r--tex/context/base/font-run.tex64
-rw-r--r--tex/context/base/font-uni.tex81
-rw-r--r--tex/context/base/font-unk.tex3
-rw-r--r--tex/context/base/java-fld.tex2
-rw-r--r--tex/context/base/java-ini.tex154
-rw-r--r--tex/context/base/lang-chi.tex239
-rw-r--r--tex/context/base/lang-ger.tex14
-rw-r--r--tex/context/base/lang-ini.tex67
-rw-r--r--tex/context/base/lang-ita.tex2
-rw-r--r--tex/context/base/lang-lab.tex99
-rw-r--r--tex/context/base/lang-spe.tex4
-rw-r--r--tex/context/base/m-chart.tex156
-rw-r--r--tex/context/base/m-graph.tex232
-rw-r--r--tex/context/base/m-newmat.tex77
-rw-r--r--tex/context/base/m-pictex.tex6
-rw-r--r--tex/context/base/m-steps.tex170
-rw-r--r--tex/context/base/math-ams.tex15
-rw-r--r--tex/context/base/math-ini.tex59
-rw-r--r--tex/context/base/math-lbr.tex62
-rw-r--r--tex/context/base/math-pln.tex6
-rw-r--r--tex/context/base/math-run.tex16
-rw-r--r--tex/context/base/math-tex.tex96
-rw-r--r--tex/context/base/meta-ini.tex45
-rw-r--r--tex/context/base/meta-pag.tex56
-rw-r--r--tex/context/base/meta-xml.tex30
-rw-r--r--tex/context/base/mult-com.tex120
-rw-r--r--tex/context/base/mult-con.tex49
-rw-r--r--tex/context/base/mult-ini.tex85
-rw-r--r--tex/context/base/mult-sys.tex37
-rw-r--r--tex/context/base/page-app.tex55
-rw-r--r--tex/context/base/page-bck.tex88
-rw-r--r--tex/context/base/page-flt.tex948
-rw-r--r--tex/context/base/page-imp.tex744
-rw-r--r--tex/context/base/page-ini.tex675
-rw-r--r--tex/context/base/page-lay.tex646
-rw-r--r--tex/context/base/page-lin.tex399
-rw-r--r--tex/context/base/page-log.tex20
-rw-r--r--tex/context/base/page-lyr.tex338
-rw-r--r--tex/context/base/page-mak.tex26
-rw-r--r--tex/context/base/page-mar.tex172
-rw-r--r--tex/context/base/page-mul.tex754
-rw-r--r--tex/context/base/page-not.tex12
-rw-r--r--tex/context/base/page-num.tex118
-rw-r--r--tex/context/base/page-one.tex223
-rw-r--r--tex/context/base/page-run.tex30
-rw-r--r--tex/context/base/page-set.tex1527
-rw-r--r--tex/context/base/page-sid.tex173
-rw-r--r--tex/context/base/page-spr.tex101
-rw-r--r--tex/context/base/page-txt.tex193
-rw-r--r--tex/context/base/regi-il1.tex2
-rw-r--r--tex/context/base/regi-ini.tex8
-rw-r--r--tex/context/base/regi-mac.tex119
-rw-r--r--tex/context/base/regi-utf.tex45
-rw-r--r--tex/context/base/s-abr-01.tex15
-rw-r--r--tex/context/base/s-dtk-01.tex10
-rw-r--r--tex/context/base/s-fnt-01.tex41
-rw-r--r--tex/context/base/s-map-01.tex6
-rw-r--r--tex/context/base/s-mod-01.tex2
-rw-r--r--tex/context/base/s-mod-02.tex2
-rw-r--r--tex/context/base/s-pre-02.tex2
-rw-r--r--tex/context/base/s-pre-10.tex10
-rw-r--r--tex/context/base/setupb.tex219
-rw-r--r--tex/context/base/spec-def.tex30
-rw-r--r--tex/context/base/spec-dpm.tex23
-rw-r--r--tex/context/base/spec-dpx.tex579
-rw-r--r--tex/context/base/spec-fdf.tex377
-rw-r--r--tex/context/base/spec-ini.tex40
-rw-r--r--tex/context/base/spec-mis.tex15
-rw-r--r--tex/context/base/spec-pdf.tex30
-rw-r--r--tex/context/base/spec-tpd.tex72
-rw-r--r--tex/context/base/supp-ali.tex71
-rw-r--r--tex/context/base/supp-box.tex440
-rw-r--r--tex/context/base/supp-fil.tex93
-rw-r--r--tex/context/base/supp-fun.tex283
-rw-r--r--tex/context/base/supp-lan.tex3
-rw-r--r--tex/context/base/supp-mat.tex22
-rw-r--r--tex/context/base/supp-mis.tex64
-rw-r--r--tex/context/base/supp-mpe.tex467
-rw-r--r--tex/context/base/supp-mps.tex261
-rw-r--r--tex/context/base/supp-mrk.tex110
-rw-r--r--tex/context/base/supp-num.tex131
-rw-r--r--tex/context/base/supp-pdf.tex73
-rw-r--r--tex/context/base/supp-ran.tex12
-rw-r--r--tex/context/base/supp-spe.tex20
-rw-r--r--tex/context/base/supp-tpi.tex87
-rw-r--r--tex/context/base/supp-vis.tex294
-rw-r--r--tex/context/base/symb-eur.tex8
-rw-r--r--tex/context/base/symb-ini.tex6
-rw-r--r--tex/context/base/symb-nav.tex4
-rw-r--r--tex/context/base/syst-con.tex44
-rw-r--r--tex/context/base/syst-etx.tex19
-rw-r--r--tex/context/base/syst-ext.tex481
-rw-r--r--tex/context/base/syst-gen.tex267
-rw-r--r--tex/context/base/syst-new.tex118
-rw-r--r--tex/context/base/type-buy.tex12
-rw-r--r--tex/context/base/type-enc.tex11
-rw-r--r--tex/context/base/type-exa.tex4
-rw-r--r--tex/context/base/type-ini.tex10
-rw-r--r--tex/context/base/type-run.tex2
-rw-r--r--tex/context/base/type-siz.tex16
-rw-r--r--tex/context/base/type-spe.tex8
-rw-r--r--tex/context/base/type-syn.tex12
-rw-r--r--tex/context/base/unic-000.tex224
-rw-r--r--tex/context/base/unic-001.tex287
-rw-r--r--tex/context/base/unic-002.tex48
-rw-r--r--tex/context/base/unic-032.tex84
-rw-r--r--tex/context/base/unic-033.tex29
-rw-r--r--tex/context/base/unic-exp.tex69
-rw-r--r--tex/context/base/unic-ini.tex538
-rw-r--r--tex/context/base/verb-ini.tex200
-rw-r--r--tex/context/base/verb-tex.tex34
-rw-r--r--tex/context/base/x-contml.tex28
-rw-r--r--tex/context/base/x-fig-00.tex41
-rw-r--r--tex/context/base/x-xml-02.tex15
-rw-r--r--tex/context/base/xtag-cml.tex2
-rw-r--r--tex/context/base/xtag-ent.tex112
-rw-r--r--tex/context/base/xtag-exp.tex6
-rw-r--r--tex/context/base/xtag-ext.tex7
-rw-r--r--tex/context/base/xtag-ini.tex392
-rw-r--r--tex/context/base/xtag-mmc.tex56
-rw-r--r--tex/context/base/xtag-mml.tex27
-rw-r--r--tex/context/base/xtag-mmp.tex6
-rw-r--r--tex/context/base/xtag-pre.tex81
-rw-r--r--tex/context/base/xtag-raw.tex36
-rw-r--r--tex/context/base/xtag-rng.tex28
-rw-r--r--tex/context/base/xtag-run.tex83
-rw-r--r--tex/context/base/xtag-utf.tex21
-rw-r--r--tex/context/base/xtag-xsd.tex2
-rw-r--r--tex/context/base/xtag-xsl.tex8
-rw-r--r--tex/generic/context/mptopdf.tex2
211 files changed, 22871 insertions, 13318 deletions
diff --git a/context/data/cont-cz.tws b/context/data/cont-cz.tws
index 5ef939216..e01c065a6 100644
--- a/context/data/cont-cz.tws
+++ b/context/data/cont-cz.tws
@@ -159,7 +159,10 @@ var:redukce:ano,ne::
var:rgb:ano,ne::
var:cmyk:ano,ne::
var:mpcmyk:ano,ne::
+var:mpspot:ano,ne::
var:barvatextu:*jmeno::
+var:split:c,m,y,k,p,s,ne,*jmeno::
+var:kriterium:vse,zadny::
stopsetup
startsetup
@@ -699,9 +702,9 @@ startsetup
com:nastavoramovani:
typ:vars/:
var:vyska:prizpusobive,siroky,*dimenze::
-var:sirka:prizpusobive,siroky,*dimenze::
+var:sirka:prizpusobive,siroky,fixne,*dimenze::
var:offset:zadny,prekryv,implicitni,*dimenze::
-var:misto:nizko,podlehloubky::
+var:misto:nizko,podlehloubky,visici::
var:volba:zadny,prazdne::
var:strut:ano,ne::
var:zarovnani:ne,vlevo,vpravo,nastred,normalni,vysoko,nizko,nivy::
@@ -1291,6 +1294,12 @@ typ::
stopsetup
startsetup
+com:emptylines:
+typ:val/:
+val:*cislo::
+stopsetup
+
+startsetup
com:zadnamezera:
typ::
stopsetup
@@ -1643,7 +1652,7 @@ var:horoffset:*dimenze::
var:offsethlavicky:*dimenze::
var:pismeno:normalni,tucne,sklonene,tucnesklonene,opis,kap,male...,*prikaz::
var:barva:*jmeno::
-var:znaceni:zap,vyp,barevne::
+var:znaceni:zap,vyp,barevne,rastr::
var:misto:vlevo,nastred,vpravo,spodek,vrsek, jednostranne,dvoustranny::
var:meritko:*dimenze::
var:nx:*cislo::
@@ -1651,10 +1660,15 @@ var:ny:*cislo::
var:dx:*dimenze::
var:dy:*dimenze::
var:radky:*cislo::
+var:sloupce:*cislo::
+var:vzdalenostsloupcu:*dimenze::
var:mrizka:ano,ne::
-var:bottomspace:*cislo::
-var:cutspace:*cislo::
-var:textdistance:*cislo::
+var:bottomspace:*dimenze::
+var:cutspace:*dimenze::
+var:textdistance:*dimenze::
+var:sirkatextu:*cislo::
+var:textmargin:*dimenze::
+var:clipoffset:*dimenze::
stopsetup
startsetup
@@ -1739,6 +1753,7 @@ var:*sekcecislo singular: jmeno v singularu:ano,ne::
var:oddelovac:*text::
var:strut:ano,ne::
var:status:start,stop::
+var:sirka:*dimenze::
var:prikaz:*\prikaz#1::
stopsetup
@@ -1777,6 +1792,10 @@ typ:vars/:
var:cislooddilu:ano,cislo,ne::
var:alternativa:normalni,marginalie,nastred,text,odstavec::
var:oddelovac:*text::
+var:zarovnani:vlevo,vpravo,normalni,siroky::
+var:zarovnejtitul:ano,ne::
+var:tolerance:velmistriktni,striktni,tolerantni,velmitolerantni,natahnout::
+var:odsadpristi:ano,ne::
var:prikaz:*\prikaz#1#2::
stopsetup
@@ -1818,6 +1837,9 @@ var:odsadpristi:ano,ne::
var:nvrsek:*cislo::
var:nspodek:*cislo::
var:nradky:*cislo::
+var:implicitni:*jmeno::
+var:vzdalenostlevehookraje:*dimenze::
+var:vzdalenostpravehookraje:*dimenze::
ivr:nastavoramovani::
stopsetup
@@ -1965,6 +1987,13 @@ val:*text::
stopsetup
startsetup
+com:listsymbol:
+typ:val/arg/:
+val:*jmeno::
+val:*text::
+stopsetup
+
+startsetup
com:umistiseznam:
typ:vals/vars/:
val:*jmeno::
@@ -2164,6 +2193,8 @@ var:zarovnani:uvnitr,vnejsi,vlevo,vpravo,nastred,normalni,ne,ano::
var:radek:*cislo::
var:vzdalenost:*dimenze::
var:oddelovac:*text::
+var:sirka:*dimenze::
+var:vzdalenost:*dimenze::
ivr:nastavoramovani::
stopsetup
@@ -2205,6 +2236,19 @@ var:meritko:*cislo::
stopsetup
startsetup
+com:setuppaper:
+typ:vars/:
+var:papir:*jmeno::
+var:stranka:*jmeno::
+var:nx:*cislo::
+var:ny:*cislo::
+var:sirka:*dimenze::
+var:vyska:*dimenze::
+var:svrchnimezera:*dimenze::
+var:zpetnamezera:*dimenze::
+stopsetup
+
+startsetup
com:nastavvelikostpapiru:
typ:vals/vals/:
val:A3,A4,A5,A6,letter,...,CD,*jmeno, nasirku,zrcadleno,otoceno,90,180,270:A4:
@@ -2214,7 +2258,7 @@ stopsetup
startsetup
com:nastavusporadani:
typ:vals/:
-val:zablokovat, 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN, zrcadleno,otoceno,dvoustranny,negativ,90,180,270::
+val:zablokovat, 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP, zrcadleno,otoceno,dvoustranny,negativ,90,180,270::
stopsetup
startsetup
@@ -2306,16 +2350,12 @@ var:alternativa:normalni,naokraji,nastred,text::
var:prikaz:*\prikaz#1#2::
var:ciselnyprikaz:*\prikaz#1::
var:textovyprikaz:*\prikaz#1::
-var:oddelovac:*text::
var:prefix:+,-,*text::
-var:umistihlavicku:ano,ne::
-var:zvysujicicislo:ano,ne,*soubor::
-var:zarovnani:vlevo,vpravo,normalni,siroky::
-var:zarovnejtitul:ano,ne::
-var:tolerance:velmistriktni,striktni,tolerantni,velmitolerantni,natahnout::
-var:odsadpristi:ano,ne::
+var:umistihlavicku:ano,ne,prazdne::
+var:zvysujicicislo:ano,ne,seznam,*soubor::
var:soubor:*jmeno::
var:expanzen:ano,prikaz,ne::
+ivr:nastavnadpisy::
stopsetup
startsetup
@@ -3223,6 +3263,7 @@ var:zarovnani:vlevo,nastred,vpravo,normalni::
var:tloustkalinky:*dimenze::
var:vzdalenost:prazdny,mrizka,podlehloubky,*dimenze,male,stredni,velke,zadny::
var:zakladnifont:5pt,...,12pt,male,velke::
+var:linka:normalni,radek::
stopsetup
startsetup
@@ -3395,6 +3436,7 @@ var:po:commando::
var:vzdalenost:*dimenze::
var:vyska:*dimenze,prizpusobive::
var:sirka:*dimenze,prizpusobive::
+var:misto:boven,midden,onder,links,rechts::
var:zarovnani:ne,vlevo,vpravo,nastred,normalni::
stopsetup
@@ -3798,6 +3840,7 @@ stopsetup
startsetup
com:nastavkomentar:
typ:vars/:
+var:status:start,stop::
var:sirka:*dimenze::
var:vyska:*dimenze::
var:barva:*jmeno::
diff --git a/context/data/cont-de.tws b/context/data/cont-de.tws
index 14280614f..4f8c06904 100644
--- a/context/data/cont-de.tws
+++ b/context/data/cont-de.tws
@@ -159,7 +159,10 @@ var:reduktion:ja,nein::
var:rgb:ja,nein::
var:cmyk:ja,nein::
var:mpcmyk:ja,nein::
+var:mpspot:ja,nein::
var:textfarbe:*Name::
+var:split:c,m,y,k,p,s,nein,*Name::
+var:kriterium:alles,kein::
stopsetup
startsetup
@@ -699,9 +702,9 @@ startsetup
com:stelleumrahmtein:
typ:vars/:
var:hoehe:passend,breit,*Dimension::
-var:breite:passend,breit,*Dimension::
+var:breite:passend,breit,fest,*Dimension::
var:offset:kein,overlay,default,*Dimension::
-var:platz:tief,tiefe::
+var:platz:tief,tiefe,haengend::
var:option:kein,leer::
var:strut:ja,nein::
var:ausrichtung:nein,links,rechts,mittig,normal,hoch,tief,hoti::
@@ -1291,6 +1294,12 @@ typ::
stopsetup
startsetup
+com:emptylines:
+typ:val/:
+val:*Nummer::
+stopsetup
+
+startsetup
com:keinspatium:
typ::
stopsetup
@@ -1643,7 +1652,7 @@ var:rumpfabstand:*Dimension::
var:kopfoffset:*Dimension::
var:stil:normal,fett,geneigt,fettgeneigt,tippen,kap,klein...,*Befehl::
var:farbe:*Name::
-var:beschriftung:an,aus,farbe::
+var:beschriftung:an,aus,farbe,raster::
var:platz:links,mittig,rechts,unten,oben, einzelseitig,doppelseitig::
var:format:*Dimension::
var:nx:*Nummer::
@@ -1651,10 +1660,15 @@ var:ny:*Nummer::
var:dx:*Dimension::
var:dy:*Dimension::
var:zeilen:*Nummer::
+var:spalten:*Nummer::
+var:spaltenabstand:*Dimension::
var:gritter:ja,nein::
-var:bottomspace:*Nummer::
-var:cutspace:*Nummer::
-var:textdistance:*Nummer::
+var:bottomspace:*Dimension::
+var:cutspace:*Dimension::
+var:textdistance:*Dimension::
+var:textbreite:*Nummer::
+var:textmargin:*Dimension::
+var:clipoffset:*Dimension::
stopsetup
startsetup
@@ -1739,6 +1753,7 @@ var:*Abschnittnummer:ja,nein::
var:seperator:*Text::
var:strut:ja,nein::
var:status:start,stop::
+var:breite:*Dimension::
var:befehl:*\Befehl#1::
stopsetup
@@ -1777,6 +1792,10 @@ typ:vars/:
var:abschnittsnummer:ja,nummer,nein::
var:alternative:normal,marginalie,mittig,text,absatz::
var:seperator:*Text::
+var:ausrichtung:links,rechts,normal,breit::
+var:titelausrichten:ja,nein::
+var:toleranz:sehrstreng,streng,tolerant,sehrtolerant,strecken::
+var:ziehefolgendeein:ja,nein::
var:befehl:*\Befehl#1#2::
stopsetup
@@ -1818,6 +1837,9 @@ var:ziehefolgendeein:ja,nein::
var:noben:*Nummer::
var:nunten:*Nummer::
var:zzeile:*Nummer::
+var:default:*Name::
+var:linkerrandabstand:*Dimension::
+var:rechterrandabstand:*Dimension::
ivr:stelleumrahmtein::
stopsetup
@@ -1965,6 +1987,13 @@ val:*Text::
stopsetup
startsetup
+com:listsymbol:
+typ:val/arg/:
+val:*Name::
+val:*Text::
+stopsetup
+
+startsetup
com:platziereliste:
typ:vals/vars/:
val:*Name::
@@ -2164,6 +2193,8 @@ var:ausrichtung:innen,aussen,links,rechts,mittig,normal,nein,ja::
var:zeile:*Nummer::
var:abstand:*Dimension::
var:seperator:*Text::
+var:breite:*Dimension::
+var:abstand:*Dimension::
ivr:stelleumrahmtein::
stopsetup
@@ -2205,6 +2236,19 @@ var:format:*Nummer::
stopsetup
startsetup
+com:setuppaper:
+typ:vars/:
+var:papier:*Name::
+var:seite:*Name::
+var:nx:*Nummer::
+var:ny:*Nummer::
+var:breite:*Dimension::
+var:hoehe:*Dimension::
+var:kopfspatium:*Dimension::
+var:rumpfspatium:*Dimension::
+stopsetup
+
+startsetup
com:stellepapierformatein:
typ:vals/vals/:
val:A3,A4,A5,A6,letter,...,CD,*Name, querformat,gespiegelt,gedreht,90,180,270:A4:
@@ -2214,7 +2258,7 @@ stopsetup
startsetup
com:stelleanordnenein:
typ:vals/:
-val:sperren, 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN, gespiegelt,gedreht,doppelseitig,negativ,90,180,270::
+val:sperren, 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP, gespiegelt,gedreht,doppelseitig,negativ,90,180,270::
stopsetup
startsetup
@@ -2306,16 +2350,12 @@ var:alternative:normal,imrand,mittig,text::
var:befehl:*\Befehl#1#2::
var:nummerbefehl:*\Befehl#1::
var:textbefehl:*\Befehl#1::
-var:seperator:*Text::
var:prefix:+,-,*Text::
-var:setzekopf:ja,nein::
-var:nummererhoehen:ja,nein,*Datei::
-var:ausrichtung:links,rechts,normal,breit::
-var:titelausrichten:ja,nein::
-var:toleranz:sehrstreng,streng,tolerant,sehrtolerant,strecken::
-var:ziehefolgendeein:ja,nein::
+var:setzekopf:ja,nein,leer::
+var:nummererhoehen:ja,nein,liste,*Datei::
var:datei:*Name::
var:expansion:ja,befehl,nein::
+ivr:stelleueberschriftenein::
stopsetup
startsetup
@@ -3223,6 +3263,7 @@ var:ausrichtung:links,mittig,rechts,normal::
var:liniendicke:*Dimension::
var:abstand:blanko,gritter,tiefe,*Dimension,klein,mittel,gross,kein::
var:fliesstext:5pt,...,12pt,klein,gross::
+var:linie:normal,zeile::
stopsetup
startsetup
@@ -3395,6 +3436,7 @@ var:nach:commando::
var:abstand:*Dimension::
var:hoehe:*Dimension,passend::
var:breite:*Dimension,passend::
+var:platz:boven,midden,onder,links,rechts::
var:ausrichtung:nein,links,rechts,mittig,normal::
stopsetup
@@ -3798,6 +3840,7 @@ stopsetup
startsetup
com:stellekommentarein:
typ:vars/:
+var:status:start,stop::
var:breite:*Dimension::
var:hoehe:*Dimension::
var:farbe:*Name::
diff --git a/context/data/cont-en.tws b/context/data/cont-en.tws
index 62fddc5d4..7e88c3303 100644
--- a/context/data/cont-en.tws
+++ b/context/data/cont-en.tws
@@ -159,7 +159,10 @@ var:reduction:yes,no::
var:rgb:yes,no::
var:cmyk:yes,no::
var:mpcmyk:yes,no::
+var:mpspot:yes,no::
var:textcolor:*name::
+var:split:c,m,y,k,p,s,no,*name::
+var:criterium:all,none::
stopsetup
startsetup
@@ -699,9 +702,9 @@ startsetup
com:setupframed:
typ:vars/:
var:height:fit,broad,*dimension::
-var:width:fit,broad,*dimension::
+var:width:fit,broad,fixed,*dimension::
var:offset:none,overlay,default,*dimension::
-var:location:low,depth::
+var:location:low,depth,hanging::
var:option:none,empty::
var:strut:yes,no::
var:align:no,left,right,middle,normal,high,low,lohi::
@@ -1291,6 +1294,12 @@ typ::
stopsetup
startsetup
+com:emptylines:
+typ:val/:
+val:*number::
+stopsetup
+
+startsetup
com:nospace:
typ::
stopsetup
@@ -1643,7 +1652,7 @@ var:horoffset:*dimension::
var:veroffset:*dimension::
var:style:normal,bold,slanted,boldslanted,type,cap,small...,*command::
var:color:*name::
-var:marking:on,off,color::
+var:marking:on,off,color,screen::
var:location:left,middle,right,bottom,top, singlesided,doublesided::
var:scale:*dimension::
var:nx:*number::
@@ -1651,10 +1660,15 @@ var:ny:*number::
var:dx:*dimension::
var:dy:*dimension::
var:lines:*number::
+var:columns:*number::
+var:columndistance:*dimension::
var:grid:yes,no::
-var:bottomspace:*number::
-var:cutspace:*number::
-var:textdistance:*number::
+var:bottomspace:*dimension::
+var:cutspace:*dimension::
+var:textdistance:*dimension::
+var:textwidth:*number::
+var:textmargin:*dimension::
+var:clipoffset:*dimension::
stopsetup
startsetup
@@ -1739,6 +1753,7 @@ var:*sectionnumber:yes,no::
var:separator:*text::
var:strut:yes,no::
var:state:start,stop::
+var:width:*dimension::
var:command:*\command#1::
stopsetup
@@ -1777,6 +1792,10 @@ typ:vars/:
var:sectionnumber:yes,number,no::
var:alternative:normal,margin,middle,text,paragraph::
var:separator:*text::
+var:align:left,right,normal,broad::
+var:aligntitle:yes,no::
+var:tolerance:verystrict,strict,tolerant,verytolerant,stretch::
+var:indentnext:yes,no::
var:command:*\command#1#2::
stopsetup
@@ -1818,6 +1837,9 @@ var:indentnext:yes,no::
var:ntop:*number::
var:nbottom:*number::
var:nlines:*number::
+var:default:*name::
+var:leftmargindistance:*dimension::
+var:rightmargindistance:*dimension::
ivr:setupframed::
stopsetup
@@ -1965,6 +1987,13 @@ val:*text::
stopsetup
startsetup
+com:listsymbol:
+typ:val/arg/:
+val:*name::
+val:*text::
+stopsetup
+
+startsetup
com:placelist:
typ:vals/vars/:
val:*name::
@@ -2164,6 +2193,8 @@ var:align:inner,outer,left,right,middle,normal,no,yes::
var:line:*number::
var:distance:*dimension::
var:separator:*text::
+var:width:*dimension::
+var:distance:*dimension::
ivr:setupframed::
stopsetup
@@ -2205,6 +2236,19 @@ var:scale:*number::
stopsetup
startsetup
+com:setuppaper:
+typ:vars/:
+var:paper:*name::
+var:page:*name::
+var:nx:*number::
+var:ny:*number::
+var:width:*dimension::
+var:height:*dimension::
+var:topspace:*dimension::
+var:backspace:*dimension::
+stopsetup
+
+startsetup
com:setuppapersize:
typ:vals/vals/:
val:A3,A4,A5,A6,letter,...,CD,*name, landscape,mirrored,rotated,90,180,270:A4:
@@ -2214,7 +2258,7 @@ stopsetup
startsetup
com:setuparranging:
typ:vals/:
-val:disable, 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN, mirrored,rotated,doublesided,negative,90,180,270::
+val:disable, 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP, mirrored,rotated,doublesided,negative,90,180,270::
stopsetup
startsetup
@@ -2306,16 +2350,12 @@ var:alternative:normal,inmargin,middle,text::
var:command:*\command#1#2::
var:numbercommand:*\command#1::
var:textcommand:*\command#1::
-var:separator:*text::
var:prefix:+,-,*text::
-var:placehead:yes,no::
-var:incrementnumber:yes,no,*file::
-var:align:left,right,normal,broad::
-var:aligntitle:yes,no::
-var:tolerance:verystrict,strict,tolerant,verytolerant,stretch::
-var:indentnext:yes,no::
+var:placehead:yes,no,empty::
+var:incrementnumber:yes,no,list,*file::
var:file:*name::
var:expansion:yes,command,no::
+ivr:setupheads::
stopsetup
startsetup
@@ -3223,6 +3263,7 @@ var:align:left,middle,right,normal::
var:rulethickness:*dimension::
var:distance:blank,grid,depth,*dimension,small,medium,big,none::
var:bodyfont:5pt,...,12pt,small,big::
+var:rule:normal,line::
stopsetup
startsetup
@@ -3395,6 +3436,7 @@ var:after:commando::
var:distance:*dimension::
var:height:*dimension,fit::
var:width:*dimension,fit::
+var:location:boven,midden,onder,links,rechts::
var:align:no,left,right,middle,normal::
stopsetup
@@ -3798,6 +3840,7 @@ stopsetup
startsetup
com:setupcomment:
typ:vars/:
+var:state:start,stop::
var:width:*dimension::
var:height:*dimension::
var:color:*name::
diff --git a/context/data/cont-it.tws b/context/data/cont-it.tws
index 21181c578..39874de02 100644
--- a/context/data/cont-it.tws
+++ b/context/data/cont-it.tws
@@ -159,7 +159,10 @@ var:riduzione:si,no::
var:rgb:si,no::
var:cmyk:si,no::
var:mpcmyk:si,no::
+var:mpspot:si,no::
var:coloretesto:*nome::
+var:separa:c,m,y,k,p,s,no,*nome::
+var:criterio:tutti,nessuno::
stopsetup
startsetup
@@ -699,9 +702,9 @@ startsetup
com:impostaincorniciato:
typ:vars/:
var:altezza:adatta,ampio,*dimensione::
-var:ampiezza:adatta,ampio,*dimensione::
+var:ampiezza:adatta,ampio,fisso,*dimensione::
var:offset:nessuno,sovrapponi,implicito,*dimensione::
-var:luogo:basso,profondita::
+var:luogo:basso,profondita,sospeso::
var:opzione:nessuno,vuoto::
var:strut:si,no::
var:allinea:no,sinistra,destra,centro,normale,alto,basso,pedap::
@@ -1291,6 +1294,12 @@ typ::
stopsetup
startsetup
+com:emptylines:
+typ:val/:
+val:*numero::
+stopsetup
+
+startsetup
com:nientespazio:
typ::
stopsetup
@@ -1643,7 +1652,7 @@ var:horoffset:*dimensione::
var:veroffset:*dimensione::
var:stile:normale,grassetto,inclinato,grassettoinclinato,type,cap,piccolo...,*comando::
var:colore:*nome::
-var:marcatura:attivo,disattivo,colore::
+var:marcatura:attivo,disattivo,colore,schermo::
var:luogo:sinistra,centro,destra,fondo,cima, facciasingola,doppiafaccia::
var:scala:*dimensione::
var:nx:*numero::
@@ -1651,10 +1660,15 @@ var:ny:*numero::
var:dx:*dimensione::
var:dy:*dimensione::
var:righe:*numero::
+var:colonne:*numero::
+var:distanzacolonne:*dimensione::
var:griglia:si,no::
-var:spaziofondo:*numero::
-var:cutspace:*numero::
-var:distanzatesto:*numero::
+var:spaziofondo:*dimensione::
+var:cutspace:*dimensione::
+var:distanzatesto:*dimensione::
+var:ampiezzatesto:*numero::
+var:textmargin:*dimensione::
+var:clipoffset:*dimensione::
stopsetup
startsetup
@@ -1739,6 +1753,7 @@ var:*numero sezione:si,no::
var:separatore:*testo::
var:strut:si,no::
var:stato:inizia,termina::
+var:ampiezza:*dimensione::
var:comando:*\comando#1::
stopsetup
@@ -1777,6 +1792,10 @@ typ:vars/:
var:numerosezione:si,numero,no::
var:alternativa:normale,margine,centro,testo,capoverso::
var:separatore:*testo::
+var:allinea:sinistra,destra,normale,ampio::
+var:allineatitolo:si,no::
+var:tolleranza:moltorigido,rigido,tollerante,moltotollerante,dilata::
+var:rientrasuccessivo:si,no::
var:comando:*\comando#1#2::
stopsetup
@@ -1818,6 +1837,9 @@ var:rientrasuccessivo:si,no::
var:ncima:*numero::
var:nfondo:*numero::
var:nrighe:*numero::
+var:implicito:*nome::
+var:distanzamarginesinistro:*dimensione::
+var:distanzamarginedestro:*dimensione::
ivr:impostaincorniciato::
stopsetup
@@ -1965,6 +1987,13 @@ val:*testo::
stopsetup
startsetup
+com:listsymbol:
+typ:val/arg/:
+val:*nome::
+val:*testo::
+stopsetup
+
+startsetup
com:mettielenco:
typ:vals/vars/:
val:*nome::
@@ -2164,6 +2193,8 @@ var:allinea:interno,esterno,sinistra,destra,centro,normale,no,si::
var:riga:*numero::
var:distanza:*dimensione::
var:separatore:*testo::
+var:ampiezza:*dimensione::
+var:distanza:*dimensione::
ivr:impostaincorniciato::
stopsetup
@@ -2205,6 +2236,19 @@ var:scala:*numero::
stopsetup
startsetup
+com:setuppaper:
+typ:vars/:
+var:carta:*nome::
+var:pagina:*nome::
+var:nx:*numero::
+var:ny:*numero::
+var:ampiezza:*dimensione::
+var:altezza:*dimensione::
+var:spaziocima:*dimensione::
+var:backspace:*dimensione::
+stopsetup
+
+startsetup
com:impostadimensionicarta:
typ:vals/vals/:
val:A3,A4,A5,A6,letter,...,CD,*nome, orizzontale,riflesso,ruotato,90,180,270:A4:
@@ -2214,7 +2258,7 @@ stopsetup
startsetup
com:impostaparranging:
typ:vals/:
-val:disattiva, 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN, riflesso,ruotato,doppiafaccia,negativo,90,180,270::
+val:disattiva, 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP, riflesso,ruotato,doppiafaccia,negativo,90,180,270::
stopsetup
startsetup
@@ -2306,16 +2350,12 @@ var:alternativa:normale,inmargine,centro,testo::
var:comando:*\comando#1#2::
var:comandonumero:*\comando#1::
var:comandotesto:*\comando#1::
-var:separatore:*testo::
var:prefisso:+,-,*testo::
-var:mettitesta:si,no::
-var:incrementanumero:si,no,*file::
-var:allinea:sinistra,destra,normale,ampio::
-var:allineatitolo:si,no::
-var:tolleranza:moltorigido,rigido,tollerante,moltotollerante,dilata::
-var:rientrasuccessivo:si,no::
+var:mettitesta:si,no,vuoto::
+var:incrementanumero:si,no,elenco,*file::
var:file:*nome::
var:espansione:si,comando,no::
+ivr:impostateste::
stopsetup
startsetup
@@ -3223,6 +3263,7 @@ var:allinea:sinistra,centro,destra,normale::
var:spessorelinea:*dimensione::
var:distanza:rigovuoto,griglia,profondita,*dimensione,piccolo,medio,grande,nessuno::
var:fonttesto:5pt,...,12pt,piccolo,grande::
+var:linea:normale,riga::
stopsetup
startsetup
@@ -3395,6 +3436,7 @@ var:dopo:commando::
var:distanza:*dimensione::
var:altezza:*dimensione,adatta::
var:ampiezza:*dimensione,adatta::
+var:luogo:boven,midden,onder,links,rechts::
var:allinea:no,sinistra,destra,centro,normale::
stopsetup
@@ -3798,6 +3840,7 @@ stopsetup
startsetup
com:impostacommento:
typ:vars/:
+var:stato:inizia,termina::
var:ampiezza:*dimensione::
var:altezza:*dimensione::
var:colore:*nome::
diff --git a/context/data/cont-nl.tws b/context/data/cont-nl.tws
index 3d8869457..3d9198c6c 100644
--- a/context/data/cont-nl.tws
+++ b/context/data/cont-nl.tws
@@ -159,7 +159,10 @@ var:reductie:ja,nee::
var:rgb:ja,nee::
var:cmyk:ja,nee::
var:mpcmyk:ja,nee::
+var:mpspot:ja,nee::
var:tekstkleur:*naam::
+var:splitsen:c,m,y,k,p,s,nee,*naam::
+var:criterium:alles,geen::
stopsetup
startsetup
@@ -699,9 +702,9 @@ startsetup
com:stelomlijndin:
typ:vars/:
var:hoogte:passend,ruim,*maat::
-var:breedte:passend,ruim,*maat::
+var:breedte:passend,ruim,vast,*maat::
var:offset:geen,overlay,default,*maat::
-var:plaats:laag,diepte::
+var:plaats:laag,diepte,hangend::
var:optie:geen,leeg::
var:strut:ja,nee::
var:uitlijnen:nee,links,rechts,midden,normaal,hoog,laag,laho::
@@ -1291,6 +1294,12 @@ typ::
stopsetup
startsetup
+com:legeregels:
+typ:val/:
+val:*getal::
+stopsetup
+
+startsetup
com:geenspatie:
typ::
stopsetup
@@ -1643,7 +1652,7 @@ var:rugoffset:*maat::
var:kopoffset:*maat::
var:letter:normaal,vet,schuin,vetschuin,type,kap,klein...,*commando::
var:kleur:*naam::
-var:markering:aan,uit,kleur::
+var:markering:aan,uit,kleur,raster::
var:plaats:links,midden,rechts,onder,boven, enkelzijdig,dubbelzijdig::
var:schaal:*maat::
var:nx:*getal::
@@ -1651,10 +1660,15 @@ var:ny:*getal::
var:dx:*maat::
var:dy:*maat::
var:regels:*getal::
+var:kolommen:*getal::
+var:kolomafstand:*maat::
var:grid:ja,nee::
-var:bodemwit:*getal::
-var:snijwit:*getal::
-var:tekstafstand:*getal::
+var:bodemwit:*maat::
+var:snijwit:*maat::
+var:tekstafstand:*maat::
+var:tekstbreedte:*getal::
+var:tekstmarge:*maat::
+var:clipoffset:*maat::
stopsetup
startsetup
@@ -1723,7 +1737,7 @@ var:onder:*getal::
stopsetup
startsetup
-com:stelnummeringin:
+com:stelpaginanummeringin:
typ:vars/:
var:variant:enkelzijdig,dubbelzijdig::
var:plaats:hoofd,voet, links,rechts,midden, marge,kantlijn,inlinker,inrechter::
@@ -1739,6 +1753,7 @@ var:*sectienummer:ja,nee::
var:scheider:*tekst::
var:strut:ja,nee::
var:status:start,stop::
+var:breedte:*maat::
var:commando:*\commando#1::
stopsetup
@@ -1777,6 +1792,10 @@ typ:vars/:
var:sectienummer:ja,nummer,nee::
var:variant:normaal,marge,midden,tekst,alinea::
var:scheider:*tekst::
+var:uitlijnen:links,rechts,normaal,ruim::
+var:titeluitlijnen:ja,nee::
+var:tolerantie:zeerstreng,streng,soepel,zeersoepel,rek::
+var:springvolgendein:ja,nee::
var:commando:*\commando#1#2::
stopsetup
@@ -1818,6 +1837,9 @@ var:springvolgendein:ja,nee::
var:nboven:*getal::
var:nonder:*getal::
var:nregels:*getal::
+var:default:*naam::
+var:linkermargeafstand:*maat::
+var:rechtermargeafstand:*maat::
ivr:stelomlijndin::
stopsetup
@@ -1965,6 +1987,13 @@ val:*tekst::
stopsetup
startsetup
+com:lijstsymbool:
+typ:val/arg/:
+val:*naam::
+val:*tekst::
+stopsetup
+
+startsetup
com:plaatslijst:
typ:vals/vars/:
val:*naam::
@@ -2164,6 +2193,8 @@ var:uitlijnen:binnen,buiten,links,rechts,midden,normaal,nee,ja::
var:regel:*getal::
var:afstand:*maat::
var:scheider:*tekst::
+var:breedte:*maat::
+var:afstand:*maat::
ivr:stelomlijndin::
stopsetup
@@ -2205,6 +2236,19 @@ var:schaal:*getal::
stopsetup
startsetup
+com:stelpapierin:
+typ:vars/:
+var:papier:*naam::
+var:pagina:*naam::
+var:nx:*getal::
+var:ny:*getal::
+var:breedte:*maat::
+var:hoogte:*maat::
+var:kopwit:*maat::
+var:rugwit:*maat::
+stopsetup
+
+startsetup
com:stelpapierformaatin:
typ:vals/vals/:
val:A3,A4,A5,A6,letter,...,CD,*naam, liggend,gespiegeld,geroteerd,90,180,270:A4:
@@ -2214,7 +2258,7 @@ stopsetup
startsetup
com:stelarrangerenin:
typ:vals/:
-val:blokkeer, 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN, gespiegeld,geroteerd,dubbelzijdig,negatief,90,180,270::
+val:blokkeer, 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP, gespiegeld,geroteerd,dubbelzijdig,negatief,90,180,270::
stopsetup
startsetup
@@ -2306,16 +2350,12 @@ var:variant:normaal,inmarge,midden,tekst::
var:commando:*\commando#1#2::
var:nummercommando:*\commando#1::
var:tekstcommando:*\commando#1::
-var:scheider:*tekst::
var:prefix:+,-,*tekst::
-var:plaatskop:ja,nee::
-var:verhoognummer:ja,nee,*file::
-var:uitlijnen:links,rechts,normaal,ruim::
-var:titeluitlijnen:ja,nee::
-var:tolerantie:zeerstreng,streng,soepel,zeersoepel,rek::
-var:springvolgendein:ja,nee::
+var:plaatskop:ja,nee,leeg::
+var:verhoognummer:ja,nee,lijst,*file::
var:file:*naam::
var:expansie:ja,commando,nee::
+ivr:stelkoppenin::
stopsetup
startsetup
@@ -3223,6 +3263,7 @@ var:uitlijnen:links,midden,rechts,normaal::
var:lijndikte:*maat::
var:afstand:blanko,grid,diepte,*maat,klein,middel,groot,geen::
var:korps:5pt,...,12pt,klein,groot::
+var:lijn:normaal,regel::
stopsetup
startsetup
@@ -3395,6 +3436,7 @@ var:na:commando::
var:afstand:*maat::
var:hoogte:*maat,passend::
var:breedte:*maat,passend::
+var:plaats:boven,midden,onder,links,rechts::
var:uitlijnen:nee,links,rechts,midden,normaal::
stopsetup
@@ -3798,6 +3840,7 @@ stopsetup
startsetup
com:stelcommentaarin:
typ:vars/:
+var:status:start,stop::
var:breedte:*maat::
var:hoogte:*maat::
var:kleur:*naam::
diff --git a/context/data/cont-ro.tws b/context/data/cont-ro.tws
index fbf69d7b5..5a931b3a6 100644
--- a/context/data/cont-ro.tws
+++ b/context/data/cont-ro.tws
@@ -159,7 +159,10 @@ var:reducere:da,nu::
var:rgb:da,nu::
var:cmyk:da,nu::
var:mpcmyk:da,nu::
+var:mpspot:da,nu::
var:culoaretext:*nume::
+var:split:c,m,y,k,p,s,nu,*nume::
+var:criteriu:tot,niciunul::
stopsetup
startsetup
@@ -699,9 +702,9 @@ startsetup
com:seteazainconjurat:
typ:vars/:
var:inaltime:ajustat,broad,*dimensiune::
-var:latime:ajustat,broad,*dimensiune::
+var:latime:ajustat,broad,fixat,*dimensiune::
var:offset:niciunul,overlay,implicit,*dimensiune::
-var:locatie:jos,adancime::
+var:locatie:jos,adancime,suspendat::
var:optiune:niciunul,gol::
var:strut:da,nu::
var:aliniere:nu,stanga,dreapta,centru,normal,inalt,jos,lohi::
@@ -1291,6 +1294,12 @@ typ::
stopsetup
startsetup
+com:emptylines:
+typ:val/:
+val:*numar::
+stopsetup
+
+startsetup
com:faraspatiu:
typ::
stopsetup
@@ -1643,7 +1652,7 @@ var:offsetoriz:*dimensiune::
var:veroffset:*dimensiune::
var:stil:normal,aldin,inclinat,aldininclinat,type,cap,mic...,*comanda::
var:culoare:*nume::
-var:marcaje:on,dezactivat,culoare::
+var:marcaje:on,dezactivat,culoare,ecran::
var:locatie:stanga,centru,dreapta,subsol,sus, ofata,douafete::
var:scala:*dimensiune::
var:nx:*numar::
@@ -1651,10 +1660,15 @@ var:ny:*numar::
var:dx:*dimensiune::
var:dy:*dimensiune::
var:linii:*numar::
+var:coloane:*numar::
+var:distantacoloane:*dimensiune::
var:grid:da,nu::
-var:spatiujos:*numar::
-var:cutspace:*numar::
-var:textdistance:*numar::
+var:spatiujos:*dimensiune::
+var:cutspace:*dimensiune::
+var:textdistance:*dimensiune::
+var:latimetext:*numar::
+var:textmargin:*dimensiune::
+var:clipoffset:*dimensiune::
stopsetup
startsetup
@@ -1739,6 +1753,7 @@ var:*sectiunenumar singular: nume singular:da,nu::
var:separator:*text::
var:strut:da,nu::
var:stare:start,stop::
+var:latime:*dimensiune::
var:comanda:*\comanda#1::
stopsetup
@@ -1777,6 +1792,10 @@ typ:vars/:
var:numarsectiune:da,numar,nu::
var:alternativ:normal,margine,centru,text,paragraf::
var:separator:*text::
+var:aliniere:stanga,dreapta,normal,broad::
+var:alinieretitlu:da,nu::
+var:toleranta:foartestrict,strict,tolerant,foartetolerant,dilatat::
+var:aliniaturmator:da,nu::
var:comanda:*\comanda#1#2::
stopsetup
@@ -1818,6 +1837,9 @@ var:aliniaturmator:da,nu::
var:nsus:*numar::
var:njos:*numar::
var:nlinii:*numar::
+var:implicit:*nume::
+var:distantamarginestanga:*dimensiune::
+var:distantamarginedreapta:*dimensiune::
ivr:seteazainconjurat::
stopsetup
@@ -1965,6 +1987,13 @@ val:*text::
stopsetup
startsetup
+com:listsymbol:
+typ:val/arg/:
+val:*nume::
+val:*text::
+stopsetup
+
+startsetup
com:punelista:
typ:vals/vars/:
val:*nume::
@@ -2164,6 +2193,8 @@ var:aliniere:intern,extern,stanga,dreapta,centru,normal,nu,da::
var:linie:*numar::
var:distanta:*dimensiune::
var:separator:*text::
+var:latime:*dimensiune::
+var:distanta:*dimensiune::
ivr:seteazainconjurat::
stopsetup
@@ -2205,6 +2236,19 @@ var:scala:*numar::
stopsetup
startsetup
+com:setuppaper:
+typ:vars/:
+var:hartie:*nume::
+var:pagina:*nume::
+var:nx:*numar::
+var:ny:*numar::
+var:latime:*dimensiune::
+var:inaltime:*dimensiune::
+var:spatiusus:*dimensiune::
+var:spatiuspate:*dimensiune::
+stopsetup
+
+startsetup
com:seteazadimensiunihartie:
typ:vals/vals/:
val:A3,A4,A5,A6,letter,...,CD,*nume, vedere,oglindit,rotat,90,180,270:A4:
@@ -2214,7 +2258,7 @@ stopsetup
startsetup
com:seteazaaranjareapag:
typ:vals/:
-val:dezactivat, 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN, oglindit,rotat,douafete,negativ,90,180,270::
+val:dezactivat, 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP, oglindit,rotat,douafete,negativ,90,180,270::
stopsetup
startsetup
@@ -2306,16 +2350,12 @@ var:alternativ:normal,inmargine,centru,text::
var:comanda:*\comanda#1#2::
var:comandanumar:*\comanda#1::
var:comandatext:*\comanda#1::
-var:separator:*text::
var:prefix:+,-,*text::
-var:punetitlu:da,nu::
-var:numarincrement:da,nu,*fisier::
-var:aliniere:stanga,dreapta,normal,broad::
-var:alinieretitlu:da,nu::
-var:toleranta:foartestrict,strict,tolerant,foartetolerant,dilatat::
-var:aliniaturmator:da,nu::
+var:punetitlu:da,nu,gol::
+var:numarincrement:da,nu,lista,*fisier::
var:fisier:*nume::
var:expansiune:da,comanda,nu::
+ivr:seteazatitluri::
stopsetup
startsetup
@@ -3223,6 +3263,7 @@ var:aliniere:stanga,centru,dreapta,normal::
var:grosimerigla:*dimensiune::
var:distanta:blank,grila,adancime,*dimensiune,mic,mediu,mare,niciunul::
var:fonttext:5pt,...,12pt,mic,mare::
+var:rigla:normal,linie::
stopsetup
startsetup
@@ -3395,6 +3436,7 @@ var:dupa:commando::
var:distanta:*dimensiune::
var:inaltime:*dimensiune,ajustat::
var:latime:*dimensiune,ajustat::
+var:locatie:boven,midden,onder,links,rechts::
var:aliniere:nu,stanga,dreapta,centru,normal::
stopsetup
@@ -3798,6 +3840,7 @@ stopsetup
startsetup
com:seteazacomentariu:
typ:vars/:
+var:stare:start,stop::
var:latime:*dimensiune::
var:inaltime:*dimensiune::
var:culoare:*nume::
diff --git a/context/data/type-buy.dat b/context/data/type-buy.dat
index 31590b2d1..f401f4d30 100644
--- a/context/data/type-buy.dat
+++ b/context/data/type-buy.dat
@@ -19,8 +19,8 @@
# fontfont meta
--en=? --ve=fontfont --co=meta --re
---en=? --ve=fontfont --co=meta --so=fontfont/meta-1 --ma --in
---en=? --ve=fontfont --co=meta --so=fontfont/meta-2 --ma --in
+--en=? --ve=fontfont --co=meta --so=fontfont/meta-1 --ma --in --expert
+--en=? --ve=fontfont --co=meta --so=fontfont/meta-2 --ma --in --expert
--en=? --ve=fontfont --co=meta --so=fontfont/meta-1 --sl=* mtbk_*
--en=? --ve=fontfont --co=meta --so=fontfont/meta-1 --sl=* mtbd_*
diff --git a/context/perltk/cont_set.pm b/context/perltk/cont_set.pm
index a7c9c5a2f..9c6d2cbcd 100644
--- a/context/perltk/cont_set.pm
+++ b/context/perltk/cont_set.pm
@@ -12,6 +12,8 @@
#C therefore copyrighted by \PRAGMA. See licen-en.pdf for
#C details.
+# todo: tacos speed patch
+
#D As always: thanks to Taco and Tobias for testing this
#D module and providing suggestions and code snippets as
#D well as haunting bugs.
@@ -81,13 +83,34 @@ my $c_horizontal = 24 ;
#D The main window is not resizable, but the text area and
#D command list will have scrollbars.
+my %lw ; # stack of lists
+
my $mw = MainWindow -> new ( -title => 'ConTeXt commands' ) ;
-$mw -> resizable ('n', 'n') ;
+$mw -> withdraw() ; $mw -> resizable ('y', 'y') ;
sub SetupWindow { return $mw } ;
-my $sw = $mw -> Scrolled ( 'ROText' ,
+my $bw = $mw -> Frame () ; # buttons
+my $tw = $mw -> Frame () ; # sw + fw
+my $fw = $tw -> Frame () ; # string + list
+
+my $request = $fw -> Entry ( -font => $textfont ,
+ -background => 'ivory1' ,
+ -width => $c_horizontal ) ;
+
+my $cw = $fw -> Scrolled ( 'Listbox' ,
+ -scrollbars => 'e' ,
+ -font => $textfont ,
+ -width => $c_horizontal ,
+ -selectbackground => 'gray' ,
+ -background => 'ivory1' ,
+ -selectmode => 'browse' ) ;
+
+$cw -> pack ( -side => 'bottom' , -fill => 'both' , -expand => 1 ) ;
+$request -> pack ( -side => 'top' , -fill => 'x' ) ;
+
+my $sw = $tw -> Scrolled ( 'ROText' ,
-scrollbars => 'se' ,
-height => $s_vertical ,
-width => $s_horizontal ,
@@ -95,36 +118,20 @@ my $sw = $mw -> Scrolled ( 'ROText' ,
-background => 'ivory1' ,
-font => $textfont ) ;
-my $cw = $mw -> Scrolled ( 'Listbox' ,
- -scrollbars => 'e' ,
- -font => $textfont ,
- -width => $c_horizontal ,
- -selectbackground => 'gray' ,
- -background => 'ivory1' ,
- -selectmode => 'browse' ) ;
-
-#D The (optional) file buttons are packed in a frame.
-
-my $fw = $mw -> Frame () ;
-
-my %lw ;
-
-#D We can search for commands, using:
-
-my $request = $fw -> Entry ( -font => $textfont ,
- -background => 'ivory1' ,
- -width => 20 ) ;
#D And the whole bunch of widgets are packed in the main
#D window.
-$fw -> pack ( -fill => 'x' ,
- -side => 'top' ) ;
-$sw -> pack ( #-fill => 'both' ,
- #-expand => 1 ,
- -side => 'left' ) ;
-$cw -> pack ( -fill => 'both' ,
- -expand => 1 ) ;
+sub pack_them_all
+ { $sw -> pack ( -side => 'left' , -fill => 'both' , -expand => 1 ) ;
+ $fw -> pack ( -side => 'right' , -fill => 'y' , -expand => 0 ) ;
+ $bw -> pack ( -side => 'top' , -fill => 'x' , -anchor => 'w' , -expand => 1 ) ;
+ $tw -> pack ( -side => 'bottom', -fill => 'both' , -expand => 1 ) }
+
+sub unpack_them_all
+ { }
+
+pack_them_all ;
#D We scan for available setup files, with suffix \type {tws}.
#D These should be somewhere on the system, grouped in one
@@ -155,11 +162,25 @@ sub setups_found
else
{ return 0 } }
+#D A hide button
+
+sub show_hide_button
+ { my $hb = $bw -> Button ( -text => "hide" ,
+ -font => $buttonfont ,
+ command => \&hide_widget ) ;
+ $hb -> pack ( -padx => '2p',
+ -pady => '2p',
+ -side => 'right' ) }
+
+sub hide_widget
+ { $mw -> withdraw() }
+
#D The setup files can be shown and chosen.
sub show_setups
- { foreach (@setup_files)
- { $lw{$_} = $fw -> Radiobutton ( -text => lc $_ ,
+ { unpack_them_all ;
+ foreach (@setup_files)
+ { $lw{$_} = $bw -> Radiobutton ( -text => lc $_ ,
-value => $_ ,
-font => $buttonfont ,
-selectcolor => 'ivory1' ,
@@ -169,9 +190,7 @@ sub show_setups
$lw{$_} -> pack ( -padx => '2p',
-pady => '2p',
-side => 'left' ) }
- $request -> pack ( -padx => '6p',
- -pady => '2p',
- -side => 'left' ) }
+ pack_them_all }
$cw -> bind ('<B1-Motion>', \&update_setup ) ;
$cw -> bind ('<1>' , \&update_setup ) ;
@@ -264,7 +283,8 @@ sub load_setup
update_setup }
sub load_setups
- { foreach my $setup (@setup_files) { load_setup ($setup) } }
+ { foreach my $setup (@setup_files) { load_setup ($setup) } ;
+ $mw -> deiconify() }
#D The core of this module deals with transforming the
#D definitions like shown earlier. Details on the format
diff --git a/context/perltk/makempy.pl b/context/perltk/makempy.pl
index 600cb9944..ef8fa3cfc 100644
--- a/context/perltk/makempy.pl
+++ b/context/perltk/makempy.pl
@@ -16,7 +16,7 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $
# Tobias Burnus provided the code needed to proper testing
# of binaries on UNIX as well as did some usefull suggestions
-# to imnprove the functionality.
+# to improve the functionality.
# This script uses GhostScript and PStoEdit as well as
# pdfTeX, and if requested TeXEdit and ConTeXt.
diff --git a/context/perltk/mptopdf.pl b/context/perltk/mptopdf.pl
index e55fb74b2..337869519 100644
--- a/context/perltk/mptopdf.pl
+++ b/context/perltk/mptopdf.pl
@@ -26,11 +26,14 @@ use strict ;
$Getopt::Long::passthrough = 1 ; # no error message
$Getopt::Long::autoabbrev = 1 ; # partial switch accepted
-my $Help = my $Latex = 0 ;
+my $Help = my $Latex = my $RawMP = 0 ;
+my $PassOn = '' ;
&GetOptions
- ( "help" => \$Help ,
- "latex" => \$Latex ) ;
+ ( "help" => \$Help ,
+ "rawmp" => \$RawMP,
+ "passon" => \$PassOn,
+ "latex" => \$Latex ) ;
my $program = "MPtoPDF 1.2" ;
my $pattern = $ARGV[0] ;
@@ -44,7 +47,7 @@ my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i) ;
my $miktex = ($ENV{"TEXSYSTEM"} =~ /miktex/io);
my @files ;
-my $command = "" ;
+my $command = my $mpbin = '' ;
sub CopyFile # agressive copy, works for open files like in gs
{ my ($From,$To) = @_ ;
@@ -66,7 +69,11 @@ elsif ($pattern =~ /\.mp$/io)
close (INP) }
if ($Latex)
{ $rest .= " $latexswitch" }
- my $error = system ("texexec --mptex $rest $pattern") ;
+ if ($RawMP)
+ { $mpbin = 'mpost' }
+ else
+ { $mpbin = 'texexec --mptex $PassOn' }
+ my $error = system ("$mpbin $rest $pattern") ;
if ($error)
{ print "\n$program : error while processing mp file\n" ; exit }
else
@@ -101,6 +108,9 @@ foreach my $file (@files)
$report .= " $_-$1.pdf" ;
++$done } }
+if ($report eq '')
+ { $report = '*' }
+
if ($done)
{ print "\n$program : $pattern is converted to$report\n" }
else
diff --git a/context/perltk/runperl.zip b/context/perltk/runperl.zip
new file mode 100644
index 000000000..d9ddcbd0a
--- /dev/null
+++ b/context/perltk/runperl.zip
Binary files differ
diff --git a/context/perltk/texexec.pl b/context/perltk/texexec.pl
index ba666e283..4ae004cde 100644
--- a/context/perltk/texexec.pl
+++ b/context/perltk/texexec.pl
@@ -55,8 +55,10 @@ $ENV{"MPXCOMMAND"} = "0" ; # otherwise loop
my $TotalTime = time ;
-## $dosish = ($Config{'osname'} =~ /dos|mswin/i) ;
-my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i) ;
+## $dosish = ($Config{'osname'} =~ /dos|mswin/i) ;
+## $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i) ;
+my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^mswin/i) ;
+my $escapeshell = ($ENV{'SHELL'} =~ m/sh/i);
my $TeXUtil = 'texutil' ;
my $TeXExec = 'texexec' ;
@@ -112,7 +114,9 @@ my $PdfArrange = 0 ;
my $PdfSelect = 0 ;
my $PdfCombine = 0 ;
my $PrintFormat = 'standard' ;
-my $ProducePdf = 0 ;
+my $ProducePdfT = 0 ;
+my $ProducePdfM = 0 ;
+my $ProducePdfX = 0 ;
my $Input = "" ;
my $Result = 0 ;
my $Suffix = '' ;
@@ -136,6 +140,14 @@ my $RunPath = "" ;
my $Arguments = "" ;
my $Pretty = 0 ;
my $SetFile = "" ;
+my $TeXTree = "" ;
+my $TeXRoot = "" ;
+my $Purge = 0 ;
+my $Separation = "" ;
+my $ModeFile = "" ;
+my $GlobalFile = 0 ;
+my $AllPatterns = 0 ;
+my $ForceXML = 0 ;
&GetOptions
( "arrange" => \$Arrange ,
@@ -145,6 +157,7 @@ my $SetFile = "" ;
"convert=s" => \$Convert ,
"environments=s"=> \$Environments ,
"usemodules=s" => \$Modules ,
+ "xml" => \$ForceXML ,
"xmlfilters=s" => \$Filters ,
"fast" => \$FastMode ,
"final" => \$FinalMode ,
@@ -173,7 +186,9 @@ my $SetFile = "" ;
"paper=s" => \$PaperFormat ,
"passon=s" => \$PassOn ,
"path=s" => \$RunPath ,
- "pdf" => \$ProducePdf ,
+ "pdf" => \$ProducePdfT ,
+ "pdm" => \$ProducePdfM ,
+ "pdx" => \$ProducePdfX ,
"pdfarrange" => \$PdfArrange ,
"pdfselect" => \$PdfSelect ,
"pdfcombine" => \$PdfCombine ,
@@ -203,7 +218,16 @@ my $SetFile = "" ;
"input=s" => \$Input ,
"arguments=s" => \$Arguments ,
"pretty" => \$Pretty ,
- "setfile=s" => \$SetFile ) ;
+ "setfile=s" => \$SetFile ,
+ "purge" => \$Purge ,
+ #### yet undocumented #################
+ "allpatterns" => \$AllPatterns ,
+ "separation=s" => \$Separation ,
+ "textree=s" => \$TeXTree ,
+ "texroot=s" => \$TeXRoot ,
+ "translate=s" => \$TeXTranslation ,
+ "modefile=s" => \$ModeFile , # additional modes file
+ "globalfile" => \$GlobalFile ) ; # don't check name
# a set file (like blabla.bat) can set paths now
@@ -219,14 +243,17 @@ if ($ARGV[0] =~ /\.mpx$/io) # catch -tex=.... bug in mpost
if ($DoMPTeX||$DoMPXTeX)
{ $RunOnce = 1 ;
- $ProducePdf = 0 }
+ $ProducePdfT = 0 ;
+ $ProducePdfX = 0 ;
+ $ProducePdfM = 0 }
if ($PdfArrange||$PdfSelect||$PdfCopy||$PdfCombine)
- { $ProducePdf = 1 ;
+ { $ProducePdfT = 1 ;
$RunOnce = 1 }
-if ($ProducePdf)
- { $OutputFormat = "pdf" }
+if ($ProducePdfT) { $OutputFormat = "pdftex" }
+elsif ($ProducePdfM) { $OutputFormat = "dvipdfm" }
+elsif ($ProducePdfX) { $OutputFormat = "dvipdfmx" }
if ($RunOnce||$Pages||$TypesetFigures||$TypesetListing)
{ $NOfRuns = 1 }
@@ -236,10 +263,13 @@ if (($LogFile ne '')&&($LogFile =~ /\w+\.log$/io))
*STDOUT = *LOGFILE ;
*STDERR = *LOGFILE }
-my $Program = " TeXExec 3.0 - ConTeXt / PRAGMA ADE 1997-2002" ;
+my $Program = " TeXExec 3.1 - ConTeXt / PRAGMA ADE 1997-2002" ;
print "\n$Program\n\n" ;
+if ($Verbose)
+ { print " current path : " . cwd . "\n" }
+
my $pathslash = '/' ; if ($0 =~ /\\/) { $pathslash = "\\" }
my $cur_path = ".$pathslash" ;
my $own_path = $0 ; $own_path =~ s/texexec(\.pl|\.bat|)//io ;
@@ -509,7 +539,7 @@ if ($TeXFormatFlag eq "" )
if ($MpFormatFlag eq "")
{ $MpFormatFlag = "&" }
-unless ($dosish)
+unless ($dosish && !$escapeshell)
{ if ($TeXFormatFlag == "&") { $TeXFormatFlag = "\\&" }
if ($MpFormatFlag == "&") { $MpFormatFlag = "\\&" } }
@@ -565,6 +595,7 @@ $OutputFormats{acrobat} = "acrobat" ;
$OutputFormats{dviwindo} = "dviwindo" ;
$OutputFormats{dviview} = "dviview" ;
$OutputFormats{dvipdfm} = "dvipdfm" ;
+$OutputFormats{dvipdfmx} = "dvipdfmx" ;
my @ConTeXtFormats = ("nl", "en", "de", "cz", "uk", "it", "ro", "xx") ;
@@ -660,6 +691,7 @@ SetInterfaces ( "xx" , "experimental" , "english" ) ;
# . " =dviwindo\n"
# . " =dviview\n"
# . " =dvipdfm\n" ;
+# . " =dvipdfmx\n" ;
# $Help{PASSON} = ' --passon switches to pass to TeX ("--src" for MikTeX)' . "\n" ;
# $Help{PAGES} = " --pages pages to output\n" ;
# $Help{pages} =
@@ -870,7 +902,7 @@ sub print_val
{ my ($k,$opt) = @_ ;
$~ = 'H2' ; write ;
format H2 =
- @<<<<<<< : @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+ @<<<<<<<< : @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
$k,$opt
.
}
@@ -951,9 +983,9 @@ sub MPJobName
sub RunPerlScript
{ my ($ScriptName, $Options) = @_ ;
if ($dosish)
-# { if (-e "$TeXScriptsPath$ScriptName.pl")
- { if (-e "$TeXScriptsPath$ScriptName$own_type")
-# { system ("perl $TeXScriptsPath$ScriptName.pl $Options") } }
+ { if (-e "$own_path$ScriptName$own_type")
+ { system ("$own_stub$own_path$ScriptName$own_type $Options") }
+ elsif (-e "$TeXScriptsPath$ScriptName$own_type")
{ system ("$own_stub$TeXScriptsPath$ScriptName$own_type $Options") } }
else
{ system ("$ScriptName $Options") } }
@@ -989,6 +1021,8 @@ sub MakeOptionFile
{ my ($FinalRun, $FastDisabled, $JobName, $JobSuffix) = @_ ;
open (OPT, ">$JobName.top") ;
print OPT "\\unprotect\n" ;
+ if ($ModeFile ne '')
+ { print OPT "\\readlocfile{$ModeFile}{}{}" }
if ($Result) # no '' test
{ print OPT "\\setupsystem[file=$Result]\n" }
elsif ($Suffix)
@@ -1015,6 +1049,8 @@ sub MakeOptionFile
{ print OPT "\\fastmode\n" }
if ($SilentMode)
{ print OPT "\\silentmode\n" }
+ if ($Separation ne "")
+ { print OPT "\\setupcolors[\\c!splitsen=$Separation]\n" }
if ($SetupPath)
{ print OPT "\\setupsystem[\\c!gebied=\{$SetupPath\}]\n" }
$_ = $PaperFormat ;
@@ -1025,7 +1061,9 @@ sub MakeOptionFile
elsif (/.5.4/goi)
{ print OPT "\\setuppapersize[A5][A4]\n" }
elsif (!/standard/)
- { s/x/\*/io ; $_ = uc $_ ; my ($from,$to) = split (/\*/) ;
+ { s/x/\*/io ;
+ if (/\w+\d+/) { $_ = uc $_ }
+ my ($from,$to) = split (/\*/) ;
if ($to eq "") { $to = $from }
print OPT "\\setuppapersize[$from][$to]\n" } }
if (($PdfSelect||$PdfCombine||$PdfCopy||$PdfArrange)&&($Background ne ''))
@@ -1093,27 +1131,31 @@ my $AllLanguages = '' ;
sub MakeUserFile
{ $UserFileOk = 0 ;
- return if (($MainLanguage eq 'standard')&&
- ($MainBodyFont eq 'standard')) ;
- print " preparing user file : cont-fmt.tex\n" ;
- open (USR, ">cont-fmt.tex") ;
- print USR "\\unprotect\n" ;
- $AllLanguages = $MainLanguage ;
- if ($MainLanguage ne 'standard')
- { @MainLanguages = split (/\,/,$MainLanguage) ;
- foreach (@MainLanguages)
- { print USR "\\installlanguage[\\s!$_][\\c!status=\\v!start]\n" }
- $MainLanguage = $MainLanguages[0] ;
- print USR "\\setupcurrentlanguage[\\s!$MainLanguage]\n" }
- if ($MainBodyFont ne 'standard')
- { print USR "\\definetypescriptsynonym[cmr][$MainBodyFont]" ;
- print USR "\\definefilesynonym[font-cmr][font-$MainBodyFont]\n" }
- print USR "\\protect\n" ;
+ if ($AllPatterns)
+ { open (USR, ">cont-fmt.tex") ;
+ print USR "\\preloadallpatterns\n" }
+ else
+ { return if (($MainLanguage eq 'standard')&&
+ ($MainBodyFont eq 'standard')) ;
+ print " preparing user file : cont-fmt.tex\n" ;
+ open (USR, ">cont-fmt.tex") ;
+ print USR "\\unprotect\n" ;
+ $AllLanguages = $MainLanguage ;
+ if ($MainLanguage ne 'standard')
+ { @MainLanguages = split (/\,/,$MainLanguage) ;
+ foreach (@MainLanguages)
+ { print USR "\\installlanguage[\\s!$_][\\c!status=\\v!start]\n" }
+ $MainLanguage = $MainLanguages[0] ;
+ print USR "\\setupcurrentlanguage[\\s!$MainLanguage]\n" }
+ if ($MainBodyFont ne 'standard')
+ { print USR "\\definetypescriptsynonym[cmr][$MainBodyFont]" ;
+ print USR "\\definefilesynonym[font-cmr][font-$MainBodyFont]\n" }
+ print USR "\\protect\n" }
print USR "\\endinput\n" ;
close (USR) ;
ReportUserFile () ;
print "\n" ;
- $UserFileOk = 1 }
+ $UserFileOk = 1 }
sub RemoveResponseFile
{ unlink "mult-def.tex" }
@@ -1162,7 +1204,7 @@ sub CompareFiles # 2 = tuo
{ return 0 } }
sub CheckPositions
- { return if ($DVIspec eq '') ;
+ { return if ($DVIspec eq '') || ($OutputFormat eq 'pdftex') ;
my $JobName = shift ; my $TuoName = "$JobName.tuo" ;
if (open(POS,"$TuoName"))
{ seek POS, (-s $TuoName) - 5000, 0 ;
@@ -1211,6 +1253,8 @@ sub ScanPreamble
if (/program=([a-z]*)/goi) { $TeXExecutable = $1 }
if (/output=([a-z\,\-]*)/goi) { $OutputFormat = $1 }
if (/modes=([a-z\,\-]*)/goi) { $ConTeXtModes = $1 }
+ if (/textree=([a-z\-]*)/goi) { $TeXTree = $1 }
+ if (/texroot=([a-z\-]*)/goi) { $TeXRoot = $1 }
if ($ConTeXtInterface eq "unknown")
{ if (/format=([a-z]*)/goi) { $ConTeXtInterface = $ConTeXtInterfaces{$1} }
if (/interface=([a-z]*)/goi) { $ConTeXtInterface = $ConTeXtInterfaces{"$1"} } }
@@ -1338,6 +1382,10 @@ sub RunTeXutil
{ print "\n utility file analysis : another run needed\n" }
return $StopRunning }
+sub PurgeFiles
+ { my $JobName = shift ;
+ RunPerlScript($TeXUtil, "--purge $JobName" ) }
+
sub RunTeXMP
{ my $JobName = shift ;
my $MPfile = shift ;
@@ -1347,6 +1395,7 @@ sub RunTeXMP
if ($MPJobName ne "")
{ if (open(MP, "$MPJobName"))
{ $_ = <MP> ; chomp ; # we should handle the prefix as well
+if (/^\%\s+translate.*?\=([\w\d\-]+)/io) { $TeXTranslation = $1 }
if (/collected graphics of job \"(.+)\"/i)
{ $MPFoundJobName = $1 }
close(MP) ;
@@ -1356,10 +1405,12 @@ sub RunTeXMP
{ print " generating graphics : metaposting $MPJobName\n" ;
my $ForceMpy = "" ;
if ($MpyForce) { $ForceMpy = "--mpyforce" }
+my $ForceTCX = '' ;
+if ($TeXTranslation ne '') { $ForceTCX = "--translate=$TeXTranslation " }
if ($EnterBatchMode)
- { RunPerlScript ($TeXExec,"$ForceMpy --mptex --nomp --batch $MPJobName") }
+ { RunPerlScript ($TeXExec,"$ForceTCX $ForceMpy --mptex --nomp --batch $MPJobName") }
else
- { RunPerlScript ($TeXExec,"$ForceMpy --mptex --nomp $MPJobName") } }
+ { RunPerlScript ($TeXExec,"$ForceTCX $ForceMpy --mptex --nomp $MPJobName") } }
else
{ print " generating graphics : metapost cannot be run\n" }
$MPrundone = 1 } } } }
@@ -1398,22 +1449,27 @@ sub RunConTeXtFile
$RunPath =~ s/\\/\//goi ;
my $OriSuffix = $JobSuffix ;
if (-e "$JobName.$JobSuffix")
- { $DummyFile = ($JobSuffix =~ /(xml|xsd)/io) }
- elsif (($RunPath)&&(-e "$RunPath/$JobName.$JobSuffix"))
- { $DummyFile = 1 }
+ { $DummyFile = (($JobSuffix =~ /(xml|xsd|exa|rng)/io)||($ForceXML)) }
+ elsif ($RunPath ne "")
+ { my @RunPaths = split(/,/,$RunPath) ;
+ foreach my $rp (@RunPaths)
+ { if (-e "$rp/$JobName.$JobSuffix")
+ { $DummyFile = 1 ; last } } }
if ($DummyFile)
{ open (TMP,">$JobName.run") ;
- if ($JobSuffix =~ /(xml|xsd)/io)
+ if ($JobSuffix =~ /(xml|xsd|exa)/io)
{ if ($Filters ne "")
{ print " using xml filters : $Filters\n" }
print TMP "\\starttext\n" ;
print TMP "\\processXMLfilegrouped{$JobName.$JobSuffix}\n" ;
print TMP "\\stoptext\n" }
else
- { print TMP "\\processfile{$JobName}\n" }
+ { print TMP "\\starttext\n" ;
+ print TMP "\\processfile{$JobName}\n" ;
+ print TMP "\\stoptext\n" }
close (TMP) ;
$JobSuffix = "run" }
- if (-e "$JobName.$JobSuffix")
+ if ((-e "$JobName.$JobSuffix")||($GlobalFile))
{ unless ($Dummy) # we don't need this for xml
{ ScanPreamble ("$JobName.$JobSuffix") ;
if ($ConTeXtInterface eq "unknown")
@@ -1518,8 +1574,11 @@ sub RunConTeXtFile
unlink "$JobName.tup" ; # previous tuo file
unlink "$JobName.top" ; # runtime option file
PopResult($JobName) }
- if ($DummyFile) # $JobSuffix == run
- { unlink "$JobName.$JobSuffix" } } }
+ if ($Purge)
+ { PurgeFiles($JobName) }
+# if ($DummyFile) # $JobSuffix == run
+# { unlink "$JobName.$JobSuffix" }
+} }
sub RunSomeTeXFile
{ my ($JobName, $JobSuffix) = @_ ;
@@ -1586,11 +1645,11 @@ sub RunFigures
if (@Files) { RunPerlScript ($TeXUtil, "--figures @Files" ) }
open (FIG, ">$FiguresFile.tex") ;
print FIG "% format=english\n" ;
- print FIG "\\starttext\n" ;
print FIG "\\setuplayout\n" ;
print FIG " [topspace=1.5cm,backspace=1.5cm,\n" ;
print FIG " header=1.5cm,footer=0pt,\n" ;
print FIG " width=middle,height=middle]\n" ;
+ print FIG "\\starttext\n" ;
print FIG "\\showexternalfigures[alternative=$TypesetFigures,offset=$PaperOffset]\n" ;
print FIG "\\stoptext\n" ;
close(FIG) ;
@@ -1631,7 +1690,6 @@ sub RunListing
{ print " topspace : $TopSpace\n" }
open (LIS, ">$ListingFile.tex") ;
print LIS "% format=english\n" ;
- print LIS "\\starttext\n" ;
print LIS "\\setupbodyfont[11pt,tt]\n" ;
print LIS "\\setuplayout\n" ;
print LIS " [topspace=$TopSpace,backspace=$BackSpace,\n" ;
@@ -1640,6 +1698,7 @@ sub RunListing
print LIS "\\setuptyping[lines=yes]\n" ;
if ($Pretty)
{ print LIS "\\setuptyping[option=color]\n" }
+ print LIS "\\starttext\n" ;
foreach $FileName (@FileNames)
{ $CleanFileName = lc CleanTeXFileName($FileName) ;
print LIS "\\page\n" ;
@@ -1704,6 +1763,7 @@ sub RunArrange
{ print " duplex : on\n" ;
print ARR "\\setuppagenumbering\n" ;
print ARR " [alternative=doublesided]\n" }
+ print ARR "\\starttext\n" ;
foreach my $FileName (@files)
{ print " pdffile : $FileName\n" ;
print ARR "\\insertpages\n [$FileName]" ;
@@ -1751,6 +1811,7 @@ sub RunSelect
print SEL " footer=0pt]\n" ;
print SEL "\\setupexternalfigures\n" ;
print SEL " [directory=]\n" ;
+ print SEL "\\starttext\n" ;
if ($Selection ne '')
{ print SEL "\\filterpages\n" ;
print SEL " [$FileName][$Selection][width=$TextWidth]\n" }
@@ -1972,6 +2033,7 @@ sub RunFiles
my $MpTmp = "tmpgraph" ; # todo: prefix met jobname
my $MpKep = "$MpTmp.kep" ; # sub => MpTmp("kep")
my $MpLog = "$MpTmp.log" ;
+my $MpBck = "$MpTmp.bck" ;
my $MpTex = "$MpTmp.tex" ;
my $MpDvi = "$MpTmp.dvi" ;
@@ -2031,21 +2093,24 @@ sub doRunMP ###########
{ # fails with %
# local $/ = "\0777" ; $_ = <MP> ; close(MP) ;
-my $MPdata = "" ;
-while (<MP>) { unless (/^\%/) { $MPdata .= $_ } }
-$_ = $MPdata ;
-close (MP) ;
+ my $MPdata = "" ;
+ while (<MP>) { unless (/^\%/) { $MPdata .= $_ } }
+ $_ = $MPdata ;
+ close (MP) ;
# save old file
unlink ($MpKep) ;
return if (-e $MpKep) ;
rename ($MpFile, $MpKep) ;
# check for tex stuff
-# $TexFound = $MergeBE || /(btex|etex|verbatimtex)/o ;
-# verbatim tex can be there due to an environment belonging to
-# mpy (not really, but about)
-# $TexFound = $MergeBE || /(btex|etex)/o ;
-$TexFound = $MergeBE || /btex .*? etex/o ;
+
+ # $TexFound = $MergeBE || /(btex|etex|verbatimtex)/o ;
+ # verbatim tex can be there due to an environment belonging to
+ # mpy (not really, but about)
+ # $TexFound = $MergeBE || /(btex|etex)/o ;
+
+ $TexFound = $MergeBE || /btex .*? etex/o ;
+
# shorten lines into new file if okay
unless (-e $MpFile)
{ open(MP, ">$MpFile") ;
@@ -2060,7 +2125,7 @@ $TexFound = $MergeBE || /btex .*? etex/o ;
unless (/beginfig\s*\(\s*0\s*\)/gmois)
{ print MP $mpbetex{0} }
print MP $_ ;
- print MP "end .\n" ;
+ print MP "\n" . "end" . "\n" ;
close(MP) }
if ($TexFound)
{ print " metapost to tex : $MpName\n" ;
@@ -2079,8 +2144,9 @@ $TexFound = $MergeBE || /btex .*? etex/o ;
$Problems = system ("$DviToMpExecutable $MpDvi $MpName.mpx") }
# $Problems = system ("dvicopy $MpDvi texexec.dvi") ;
# $Problems = system ("$DviToMpExecutable texexec.dvi $MpName.mpx") }
- unlink $MpTex ;
- unlink $MpDvi } }
+ unlink $MpBck ;
+ rename $MpTex, $MpBck ;
+ unlink $MpDvi } }
print " metapost : $MpName\n" ;
my $cmd = $MpExecutable ;
if ($EnterBatchMode)
@@ -2161,23 +2227,73 @@ if ($SetFile ne "")
# { print " warning : nothing to do\n" }
# return $problems }
+# sub check_texmf_root
+# { return if ($TeXRoot eq "") ;
+# my $root = $TeXRoot ;
+# $root =~ s/\\/\//goi ;
+# if (-d $root)
+# { print " using tex root : $root \n" ;
+# $ENV{TEXROOT} = $root ;
+# $ENV{TEXMFCNF} = "$root/texmf-local/web2c" ;
+# $ENV{TEXMFFONTS} = "$root/texmf-fonts" ;
+# $ENV{TEXMFLOCAL} = "$root/texmf-local" ;
+# $ENV{TEXMFMAIN} = "$root/texmf" }
+# else
+# { print " invalid tex root : $root \n" } }
+#
+# sub check_texmf_tree
+# { return if ($TeXTree eq "") ;
+# my $tree = $TeXTree ;
+# unless (-d $tree)
+# { $tree = $ENV{TEXMFLOCAL} ;
+# $tree =~ s/texmf.*//io ;
+# $tree .= $TeXTree }
+# if (-d $tree)
+# { print " using texmf tree : $tree \n" ;
+# $ENV{TEXMFPROJECT} = $tree ;
+# if ((-f "$tree/web2c/cont-en.efmt")||
+# (-f "$tree/web2c/cont-nl.efmt"))
+# { $ENV{TEXFORMATS} = "$tree/web2c" }
+# $ENV{TEXMF} = '{$TEXMFPROJECT,$TEXMFFONTS,$TEXMFLOCAL,!!$TEXMFMAIN}' }
+# else
+# { print " invalid texmf tree : $tree \n" } }
+
+sub check_texmf_root {}
+sub check_texmf_tree {}
+
+# the main thing
+
if ($HelpAsked)
{ show_help_info }
elsif ($TypesetListing)
- { RunListing (@ARGV) }
+ { check_texmf_root ;
+ check_texmf_tree ;
+ RunListing (@ARGV) }
elsif ($TypesetFigures)
- { RunFigures (@ARGV) }
+ { check_texmf_root ;
+ check_texmf_tree ;
+ RunFigures (@ARGV) }
elsif ($DoMPTeX)
- { RunMP }
+ { check_texmf_root ;
+ check_texmf_tree ;
+ RunMP }
elsif ($DoMPXTeX)
- { RunMPX ($ARGV[0]) }
+ { check_texmf_root ;
+ check_texmf_tree ;
+ RunMPX ($ARGV[0]) }
elsif ($MakeFormats)
- { if ($MpDoFormat ne '')
+ { check_texmf_root ;
+ check_texmf_tree ;
+ if ($MpDoFormat ne '')
{ RunMpFormat($MpDoFormat) }
else
{ RunFormats } }
elsif (@ARGV)
- { @ARGV = <@ARGV> ; RunFiles }
+ { check_texmf_root ;
+ check_texmf_tree ;
+ @ARGV = <@ARGV> ;
+ RunFiles }
+
# else
# { # print $Help{HELP} ;
# # unless ($Verbose) { print $Help{VERBOSE} } }
@@ -2275,6 +2391,7 @@ output specials to use
=dvipsone YandY's dvi to ps converter
=dviwindo YandY's windows previewer
=dvipdfm Mark Wicks' dvi to pdf converter
+=dvipdfmx Jin-Hwan Cho's extended dvipdfm
-----------
passon switches to pass to TeX (--src for MikTeX)
-----------
@@ -2352,6 +2469,12 @@ silent minimize (status) messages
tex TeX binary
=name binary of executable
-----------
+textree additional texmf tree to be used
+=path subpath of tex root
+-----------
+texroot root of tex trees
+=path tex root
+-----------
verbose shows some additional info
-----------
help show this or more, e.g. '--help interface'
diff --git a/context/perltk/texfont.pl b/context/perltk/texfont.pl
index 3b86e9cd0..cae71ee47 100644
--- a/context/perltk/texfont.pl
+++ b/context/perltk/texfont.pl
@@ -4,6 +4,8 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $
# This is an example of a crappy unstructured file but once
# I know what should happen exactly, I will clean it up.
+# todo : ttf (partially doen already)
+
#D \module
#D [ file=texfont.pl,
#D version=2000.12.14,
@@ -72,6 +74,7 @@ my $virtual = 0 ;
my $novirtual = 0 ;
my $listing = 0 ;
my $remove = 0 ;
+my $expert = 0 ;
my $fontsuffix = "" ;
my $namesuffix = "" ;
@@ -111,7 +114,8 @@ my $width = "" ;
"caps=s" => \$caps,
"batch" => \$batch,
"weight=s" => \$weight,
- "width=s" => \$width) ;
+ "width=s" => \$width,
+ "expert" => \$expert) ;
# so we can use both combined
@@ -135,7 +139,7 @@ sub error
# The banner.
print "\n" ;
-report ("TeXFont 1.5 - ConTeXt / PRAGMA ADE 2000-2001 (STILL BETA)") ;
+report ("TeXFont 1.6 - ConTeXt / PRAGMA ADE 2000-2002") ;
print "\n" ;
# Handy for scripts: one can provide a preferred path, if it
@@ -231,6 +235,8 @@ if ($help)
print "\n" ;
report "--weight : multiple master weight" ;
report "--width : multiple master width" ;
+ print "\n" ;
+ report "--expert : also handle expert fonts" ;
exit }
if (($batch)||($ARGV[0] =~ /.+\.dat$/io))
@@ -262,7 +268,7 @@ if (($batch)||($ARGV[0] =~ /.+\.dat$/io))
s/\s+/ /gio ;
s/(--en.*\=)\?/$1$encoding/io ;
report ("batch line : $_") ;
- system ("perl $0 $_") }
+ system ("perl $0 --fontroot=$fontroot $_") }
close (BAT) }
exit }
@@ -340,8 +346,17 @@ my $afmpath = "$fontroot/fonts/afm/$vendor/$collection" ;
my $tfmpath = "$fontroot/fonts/tfm/$vendor/$collection" ;
my $vfpath = "$fontroot/fonts/vf/$vendor/$collection" ;
my $pfbpath = "$fontroot/fonts/type1/$vendor/$collection" ;
+my $ttfpath = "$fontroot/fonts/truetype/$vendor/$collection" ;
my $pdfpath = "$fontroot/pdftex/config" ;
+# are not on local path ! ! ! !
+
+foreach my $path ($afmpath, $pfbpath)
+ { my @gzipped = <$path/*.gz> ;
+ foreach my $file (@gzipped)
+ { system ("gzip -d $file") }
+ system ("mktexlsr $fontroot") } # needed ?
+
sub do_make_path
{ my $str = shift ; mkdir $str, 0755 unless -d $str }
@@ -388,16 +403,32 @@ my $runpath = $sourcepath ;
my @files ;
+sub globafmfiles
+ { my ($runpath, $pattern) = @_ ;
+ my @files = glob("$runpath/$pattern.afm") ;
+ if (@files) # also elsewhere
+ { report("locating afm files : using pattern $pattern") }
+ else
+ { report("locating afm files : using ttf files") ;
+ @files = glob("$runpath/$pattern.ttf") ;
+ foreach my $file (@files)
+ { $file =~ s/\.ttf$//io ;
+ report ("generating afm file : $file.afm") ;
+ system("ttf2afm $file.ttf -o $file.afm") }
+ @files = glob("$runpath/$pattern.afm") }
+ return @files }
+
+
if ($ARGV[0] ne "")
{ $pattern = $ARGV[0] ;
report ("processing files : all in pattern $ARGV[0]") ;
- @files = glob("$runpath/$pattern.afm") }
+ @files = globafmfiles($runpath,$pattern) }
elsif ("$extend$narrow$slant$caps" ne "")
{ error ("transformation needs file spec") }
else
{ $pattern = "*" ;
report ("processing files : all on afm path") ;
- @files = glob("$runpath/$pattern.afm") }
+ @files = globafmfiles($runpath,$pattern) }
sub copy_files
{ my ($suffix,$sourcepath,$topath) = @_ ;
@@ -555,15 +586,17 @@ foreach my $file (@files)
{ $vfstr = " -V $raw$cleanname$fontsuffix" }
else # if ($virtual)
{ $vfstr = " -v $raw$cleanname$fontsuffix" }
- # let's see what we have here
- my $font = `afm2tfm $file texfont.tfm` ;
+ # let's see what we have here (we force texnansi.enc to avoid error messages)
+ my $font = `afm2tfm $file -p texnansi.enc texfont.tfm` ;
unlink "texfont.tfm" ;
if ($font =~ /(math|expert)/io) { $strange = lc $1 }
my ($rawfont,$cleanfont,$restfont) = split(/\s/,$font) ;
$cleanfont =~ s/\_/\-/goi ;
$cleanfont =~ s/\-+$//goi ;
print "\n" ;
- if ($strange ne "")
+ if (($strange eq "expert")&&($expert))
+ { report ("font identifier : $cleanfont$namesuffix -> $strange -> tfm") }
+ elsif ($strange ne "")
{ report ("font identifier : $cleanfont$namesuffix -> $strange -> skipping") }
elsif ($virtual)
{ report ("font identifier : $cleanfont$namesuffix -> text -> tfm + vf") }
@@ -590,7 +623,10 @@ foreach my $file (@files)
} # end of next stage
elsif (-e "$sourcepath/$cleanname.tfm" )
{ report "using existing tfm : $cleanname.tfm" }
- else
+ elsif (($strange eq "expert")&&($expert))
+ { report "creating tfm file : $cleanname.tfm" ;
+ my $font = `afm2tfm $file $cleanname.tfm` }
+ else
{ report "use supplied tfm : $cleanname" }
# report results
my ($rawfont,$cleanfont,$restfont) = split(/\s/,$font) ;
@@ -644,24 +680,32 @@ foreach my $file (@files)
{ if ($tex) { $report .= "missing file: \\type \{$fontname.pfb\}\n" }
report ("missing pfb file : $fontname.pfb") }
# now add entry to map
- $str = "$thename $cleanfont $option < $fontname.pfb$theencoding\n" ;
+ if ($strange eq "")
+ { $str = "$thename $cleanfont $option < $fontname.pfb$theencoding\n" }
+ else
+ { $str = "$thename $cleanfont < $fontname.pfb\n" }
if ($map) # check for redundant entries
{ $mapdata =~ s/^$thename\s.*?$//gmis ;
$maplist .= $str ;
$mapdata .= $str }
# write lines to tex file
- if ($strange ne "")
- { $fntlist .= "\%definefontsynonym[$cleanfont$namesuffix][$usename]\n" }
+ if (($strange eq "expert")&&($expert))
+ { $fntlist .= "\\definefontsynonym[$cleanfont$namesuffix][$cleanname] \% expert\n" }
+ elsif ($strange ne "")
+ { $fntlist .= "\%definefontsynonym[$cleanfont$namesuffix][$cleanname]\n" }
else
{ $fntlist .= "\\definefontsynonym[$cleanfont$namesuffix][$usename][encoding=$encoding]\n" }
next unless $tex ;
- if ($strange ne "")
- { $texlist .= "\%ShowFont[$cleanfont$namesuffix][$usename]\n" }
+ if (($strange eq "expert")&&($expert))
+ { $texlist .= "\\ShowFont[$cleanfont$namesuffix][$cleanname]\n" }
+ elsif ($strange ne "")
+ { $texlist .= "\%ShowFont[$cleanfont$namesuffix][$cleanname]\n" }
else
{ $texlist .= "\\ShowFont[$cleanfont$namesuffix][$usename][$encoding]\n" } }
if ($map)
- { while ($mapdata =~ s/\n\n+/\n/mois) {} ;
+ { report ("updating map file : $mapfile") ;
+ while ($mapdata =~ s/\n\n+/\n/mois) {} ;
$mapdata =~ s/^\s*//gmois ;
print MAP $mapdata }
diff --git a/context/perltk/texutil.pl b/context/perltk/texutil.pl
index b7c9d4ddd..bdd1912d6 100644
--- a/context/perltk/texutil.pl
+++ b/context/perltk/texutil.pl
@@ -38,7 +38,7 @@ eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $
#D binary version, like scanning illustrations other than \EPS.
#D I would suggest to keep an eye on the version number:
-$Program = "TeXUtil 7.3 - ConTeXt / PRAGMA ADE 1992-2000" ;
+$Program = "TeXUtil 7.4 - ConTeXt / PRAGMA ADE 1992-2002" ;
#D By the way, this is my first \PERL\ script, which means
#D that it will be improved as soon as I find new and/or more
@@ -88,6 +88,12 @@ $UserInterface = "en" ;
$UnknownOptions = 0 ;
$TcXPath = '' ;
+#D We need this for calling GS.
+
+use Config ;
+
+my $dosish = ($Config{'osname'} =~ /^(ms)?dos|^os\/2|^(ms|cyg)win/i) ;
+
#D Here come the options:
&GetOptions
@@ -153,12 +159,18 @@ sub CloseTerminal
$InputFile = "@ARGV" ; # niet waterdicht
-#sub CheckInputFiles
-# { my ($UserSuppliedPath) = @_ ;
-# @UserSuppliedFiles = map { split " " } sort lc $UserSuppliedPath }
+sub CompFileName
+ { my ($a,$b) = @_ ;
+ my ($fa,$sa) = split(/\./,$a) ;
+ my ($fb,$sb) = split(/\./,$b) ;
+ if (($sa =~ /^\d+$/o)&&($sb =~ /^\d+$/o))
+ { $a = $fa . "." . sprintf("%10d",$sa) ; $a =~ s/\s/0/o ;
+ $b = $fb . "." . sprintf("%10d",$sb) ; $b =~ s/\s/0/o }
+ return (lc ($a) cmp lc ($b)) }
sub CheckInputFiles
- { @UserSuppliedFiles = glob $_[0] }
+ { @UserSuppliedFiles = glob $_[0] ;
+ @UserSuppliedFiles = sort { CompFileName($a,$b) } @UserSuppliedFiles }
#D The next subroutine takes care of the optional output
#D filename (e.g. for figure dimensions).
@@ -822,16 +834,16 @@ sub FlushKeys
{ Report ("RemappedKeys", $SortN) }
sub SanitizedString
- { my $string = shift ;
+ { my $string = my $original = shift ;
if ($SortN)
{ my $copied = $string ;
for ($i=1;$i<=$SortN;$i++)
{ my $s = $STR[$i] ;
- my $m = $MAP[$i] ;
my $c = $CHR[$i] ;
+ my $m = $MAP[$i] ;
+#print "[$i $s $c $m]\n" ;
$string =~ s/($s)/$c/ge ;
- $copied =~ s/($s)/$m/eg }
- #print "$string $copied\n" ;
+ $copied =~ s/($s)/$m/ge }
$string .= "\x00";
$string .= $copied }
elsif ($ProcessQuotes)
@@ -841,6 +853,8 @@ sub SanitizedString
$string =~ s/([\^\"\`\'\~\,])([a-zA-Z])/$2/gio ;
$string .= "\x00";
$string .= $copied }
+#
+#print "$original $string $copied\n" ;
# new and very experimental, will change
$string =~ s/\<\*(.*?)\>/\\$1 /go ; # reduce entities / will be table too
$string =~ s/\\getXMLentity\s*\{(.*?)\}/$1/gio ; # {tex} => tex
@@ -943,6 +957,8 @@ my $NOfPositionsFound = 0 ;
my $TotalNOfPositions = 0 ;
my $TotalNOfMPgraphics = 0 ;
+my $SectionSeparator = ":" ;
+
sub InitializeCommands
{ print TUO "%\n" . "% $Program / Commands\n" . "%\n" ;
$NOfCommands = 0 }
@@ -956,6 +972,9 @@ sub HandleCommand
{ $TotalNOfPositions = $1 }
elsif ($RestOfLine =~ /^initializevariable\\totalnofMPgraphics\{(.*)\}/i)
{ $TotalNOfMPgraphics = $1 }
+# todo: reg how to
+# elsif ($RestOfLine =~ /^thisissectionseparator\{(.*)\}/o)
+# { $SectionSeparator = $1 }
print TUO "\\$RestOfLine\n" }
sub FlushCommands
@@ -1171,6 +1190,8 @@ $RegStat{"e"} = 2 ; # end up between from and to
$RegStat{"t"} = 3 ;
$RegStat{"s"} = 4 ;
+my $RegSep = "$SectionSeparator$SectionSeparator" ;
+
sub HandleRegister # the } { makes sure that local {} is ok
{ ($SecondTag, $RestOfLine) = split(/ /, $RestOfLine, 2) ;
++$NOfEntries ;
@@ -1188,13 +1209,13 @@ sub HandleRegister # the } { makes sure that local {} is ok
$SeeToo = "" }
#
$_ = $Key ;
- if (/\:\:/)
- { ($PageHow,$Key) = split (/\:\:/) }
+ if (/$RegSep/)
+ { ($PageHow,$Key) = split (/$RegSep/) }
else
{ $PageHow = "" }
$_ = $Entry ;
- if (/\:\:/)
- { ($TextHow,$Entry) = split (/\:\:/) }
+ if (/$RegSep/)
+ { ($TextHow,$Entry) = split (/$RegSep/) }
else
{ $TextHow = "" }
#
@@ -1293,10 +1314,23 @@ $Entry =~ s/^\{(.*)\}$SPLIT/$1$SPLIT/go ; ###### new
#D \haalbuffer After being sorted, these entries are
#D turned into something \TEX\ using:
+$CollapseEntries = 0 ;
+
$RegisterEntry[0] = ("") ;
sub How
- { return "$TextHow\:\:" . "$_[0]" }
+ { return "$TextHow$RegSep" . "$_[0]" }
+
+sub FlushSavedLine
+ { if (($CollapseEntries)&&($SavedFrom ne ""))
+ { if ($SavedTo ne "")
+ { print TUO "\\registerfrom$SavedFrom" ;
+ print TUO "\\registerto$SavedTo" }
+ else
+ { print TUO "\\registerpage$SavedFrom" } }
+ $SavedFrom = "" ;
+ $SavedTo = "" ;
+ $SavedEntry = "" }
sub FlushRegisters
{ print TUO "%\n" . "% $Program / Registers\n" . "%\n" ;
@@ -1313,25 +1347,32 @@ sub FlushRegisters
$ActualA = "" ;
$ActualB = "" ;
$ActualC = "" ;
+
+$SavedFrom = "" ;
+$SavedTo = "" ;
+$SavedEntry = "" ;
+
for ($n=1 ; $n<=$NOfEntries ; ++$n)
{ ($Class, $LCKey, $Key, $Entry, $TextHow, $RegisterState,
$RealPage, $Location, $Page, $PageHow, $SeeToo) =
split(/$JOIN/, $RegisterEntry[$n]) ;
$RealPage =~ s/^\s*//o ;
$TestAlfa = lc substr $Key, 0, 1 ;
-#
-if ($SortN)
- { $AlfKey = $Key ;
- $AlfKey =~ s/(.).*\x00(.).*/$1$2/o ;
- if (defined($ALF{$AlfKey}))
- { $TestAlfa = $ALF{$AlfKey} } }
-#
+ #
+ if ($SortN)
+ { $AlfKey = $Key ;
+ $AlfKey =~ s/(.).*\x00(.).*/$1$2/o ;
+ if (defined($ALF{$AlfKey}))
+ { $TestAlfa = $ALF{$AlfKey} } }
+ #
if ((lc $TestAlfa ne lc $Alfa) or ($AlfaClass ne $Class))
{ # $Alfa= lc substr $Key, 0, 1 ;
$Alfa = $TestAlfa ;
$AlfaClass = $Class ;
if ($Alfa ne " ")
- { print TUO "\\registerentry{$Class}{$Alfa}\n" } }
+ {
+FlushSavedLine ;
+ print TUO "\\registerentry{$Class}{$Alfa}\n" } }
($ActualA, $ActualB, $ActualC ) =
split(/$SPLIT/, $Entry, 3) ;
unless ($ActualA) { $ActualA = "" }
@@ -1354,33 +1395,64 @@ if ($SortN)
{ $PreviousC = How($ActualC) }
$Copied = 0 ;
if ($ActualA ne "")
- { print TUO "\\registerentrya{$Class}{$ActualA}\n" ;
+ {
+FlushSavedLine ;
+ print TUO "\\registerentrya{$Class}{$ActualA}\n" ;
$Copied = 1 }
if ($ActualB ne "")
- { print TUO "\\registerentryb{$Class}{$ActualB}\n" ;
+ {
+FlushSavedLine ;
+ print TUO "\\registerentryb{$Class}{$ActualB}\n" ;
$Copied = 1 }
if ($ActualC ne "")
- { print TUO "\\registerentryc{$Class}{$ActualC}\n" ;
+ {
+FlushSavedLine ;
+ print TUO "\\registerentryc{$Class}{$ActualC}\n" ;
$Copied = 1 }
if ($Copied)
{ $NOfSaneEntries++ }
if ($RealPage eq 0)
-# { print TUO "\\registersee{$Class}{$SeeToo}{$Page}\n" ;
-{ print TUO "\\registersee{$Class}{$PageHow,$TextHow}{$SeeToo}{$Page}\n" ;
+ {
+FlushSavedLine ;
+ print TUO "\\registersee{$Class}{$PageHow,$TextHow}{$SeeToo}{$Page}\n" ;
$LastPage = $Page ;
$LastRealPage = $RealPage }
elsif (($Copied) ||
! (($LastPage eq $Page) and ($LastRealPage eq $RealPage)))
-# { print TUO "\\registerpage{$Class}{$Location}{$Page}{$RealPage}\n" ;
-{ if ($RegisterState eq $RegStat{"f"})
- { print TUO "\\registerfrom{$Class}{$PageHow,$TextHow}{$Location}{$Page}{$RealPage}\n" }
- elsif ($RegisterState eq $RegStat{"t"})
- { print TUO "\\registerto {$Class}{$PageHow,$TextHow}{$Location}{$Page}{$RealPage}\n" }
- else
- { print TUO "\\registerpage{$Class}{$PageHow,$TextHow}{$Location}{$Page}{$RealPage}\n" }
+ { # print "$LastPage / $Page // $LastRealPage / $RealPage\n" ;
+
+$NextEntry = "{$Class}{$PreviousA}{$PreviousB}{$PreviousC}{$PageHow,$TextHow}" ;
+
+ $SavedLine = "{$Class}{$PageHow,$TextHow}{$Location}{$Page}{$RealPage}\n" ;
+ if ($RegisterState eq $RegStat{"f"})
+ {
+FlushSavedLine ;
+ print TUO "\\registerfrom$SavedLine" }
+ elsif ($RegisterState eq $RegStat{"t"})
+ {
+FlushSavedLine ;
+ print TUO "\\registerto$SavedLine" }
+ else
+# { print TUO "\\registerpage$SavedLine" }
+ { if ($CollapseEntries)
+ {
+
+if ($SavedEntry ne $NextEntry)
+ { $SavedFrom = $SavedLine }
+else
+ { $SavedTo = $SavedLine }
+$SavedEntry = $NextEntry ;
+
+ }
+ else
+ { print TUO "\\registerpage$SavedLine" }
+ }
++$NOfSanePages ;
$LastPage = $Page ;
$LastRealPage = $RealPage } }
+
+FlushSavedLine ;
+
Report("RegisterEntries", $NOfEntries, "->", $NOfSaneEntries, "Entries",
$NOfSanePages, "References") ;
if ($NOfBadEntries>0)
@@ -1958,7 +2030,8 @@ sub ConvertEpsToEps
{ my ( $SuppliedFileName , $LLX, $LLY, $URX, $URY ) = @_ ;
($FileName, $FileSuffix) = SplitFileName ($SuppliedFileName) ;
if ($ProcessEpsToPdf)
- { unlink "$FileName.pdf" ;
+ { if ($dosish) { $gs = "gswin32c" } else { $gs = "gs" }
+ unlink "$FileName.pdf" ;
$GSCommandLine = "-q " .
"-sDEVICE=pdfwrite " .
"-dNOCACHE " .
@@ -1967,7 +2040,7 @@ sub ConvertEpsToEps
"-sOutputFile=$FileName.pdf " .
"- -c " .
"quit " ;
- open ( EPS, "| gs $GSCommandLine") }
+ open ( EPS, "| $gs $GSCommandLine") }
elsif ($PDFReady)
{ return }
else
@@ -2098,9 +2171,9 @@ sub HandlePdfFigure
while (<PDF>)
{ $SomeLine = $_ ;
chomp ($SomeLine) ;
- if ($SomeLine =~ /\/Type \/Pages/io)
+ if ($SomeLine =~ /\/Type\s*\/Pages/io)
{ $PagesFound = 1 }
- elsif ($SomeLine =~ /\/Type \/Page/io)
+ elsif ($SomeLine =~ /\/Type\s*\/Page/io)
{ ++$PageFound ;
if ($PageFound>1) { last } }
if ((($PageFound)||($PagesFound)) && ($SomeLine =~ /\/MediaBox /io))
@@ -2438,8 +2511,7 @@ sub InitializeFigures
{ $NOfFigures = 0 }
sub FlushFigures
- { $Figures = sort { lc ($a) cmp lc ($b) } $Figures ;
- SetOutputFile ("texutil.tuf") ;
+ { SetOutputFile ("texutil.tuf") ;
open ( TUF, ">$OutputFile" ) ;
print TUF "%\n" . "% $Program / Figures\n" . "%\n" ;
print TUF "\\thisisfigureversion\{1996.06.01\}\n" . "%\n" ;
@@ -2614,7 +2686,7 @@ my @dontasksuffixes =
"mprun.mp", "mprun.mpd", "mprun.mpo", "mprun.mpy") ;
my @forsuresuffixes =
("tui","tup","ted","tes","top",
- "log","tmp",
+ "log","tmp","run",
"mpt","mpx","mpd","mpo") ;
my @texonlysuffixes =
("dvi","ps","pdf") ;
diff --git a/metapost/context/mp-char.mp b/metapost/context/mp-char.mp
index 740d36c37..9416b1349 100644
--- a/metapost/context/mp-char.mp
+++ b/metapost/context/mp-char.mp
@@ -146,6 +146,8 @@ def initialize_grid (expr maxx, maxy) =
save i, j ;
max_x := maxx ;
max_y := maxy ;
+ dsp_x := 0 ;
+ dsp_y := 0 ;
for x=1 upto max_x :
for y=1 upto max_y :
xyfree [x][y] := true ;
@@ -291,13 +293,15 @@ def collapse_points = % this is now an mp-tool macro
fi ;
enddef ;
-vardef smooth_connection (expr a,b) = % also a mp-tool macro
+vardef smooth_connection (expr a,b) =
sx := connection_smooth_size/grid_width ;
sy := connection_smooth_size/grid_height ;
if ypart a = ypart b :
a shifted (if xpart a >= xpart b : - fi sx,0)
+% a shifted (sx*xpart unitvector(b-a),0)
else :
a shifted (0,if ypart a >= ypart b : - fi sy)
+% a shifted (0,sy*ypart unitvector(b-a))
fi
enddef ;
@@ -347,6 +351,33 @@ vardef connection_path =
xypoints[xypoint])
enddef ;
+% vardef connection_path =
+% sx := connection_smooth_size/grid_width ;
+% sy := connection_smooth_size/grid_height ;
+% if reverse_connection : reverse fi
+% (for i=1 upto xypoint-1 : xypoints[i] -- endfor xypoints[xypoint])
+% if smooth : cornered max(sx,sy) fi
+% enddef ;
+%
+% primarydef p cornered c =
+% if cycle p :
+% ((point 0 of p) shifted (c*(unitvector(point 1 of p - point 0 of p))) --
+% for i=1 upto length(p) :
+% (point i-1 of p) shifted (c*(unitvector(point i of p - point i-1 of p))) --
+% (point i of p) shifted (c*(unitvector(point i-1 of p - point i of p))) ..
+% controls point i of p ..
+% endfor cycle)
+% else :
+% ((point 0 of p) --
+% for i=1 upto length(p)-1 :
+% (point i-1 of p) shifted (c*(unitvector(point i of p - point i-1 of p))) --
+% (point i of p) shifted (c*(unitvector(point i-1 of p - point i of p))) ..
+% controls point i of p ..
+% endfor
+% (point length(p) of p))
+% fi
+% enddef ;
+
def draw_connection =
if xypoint>0 :
collapse_points ;
@@ -382,11 +413,11 @@ def flush_connections =
endfor ;
if crossing :
pickup pencircle scaled 2cline[i] ;
-% draw cpaths[i] withcolor chart_background_color ;
-path cp ; cp := cpaths[i] ;
-cp := cp cutbefore point .05 length cp of cp ;
-cp := cp cutafter point .95 length cp of cp ;
-draw cp withcolor chart_background_color ;
+ %draw cpaths[i] withcolor chart_background_color ;
+ path cp ; cp := cpaths[i] ;
+ cp := cp cutbefore point .05 length cp of cp ;
+ cp := cp cutafter point .95 length cp of cp ;
+ draw cp withcolor chart_background_color ;
fi ;
fi ;
pickup pencircle scaled cline[i] ;
@@ -482,6 +513,10 @@ vardef right_to_grid (expr a,b) =
ypart xypoints[a])
enddef ;
+% vardef boundingboxfraction(expr p, f) =
+% ((boundingbox p) enlarged (-f*bbwidth(p),-f*bbheight(p)))
+% enddef ;
+
vardef valid_connection (expr xfrom, yfrom, xto, yto) =
begingroup ;
save ok, vc, pp ;
@@ -489,9 +524,9 @@ vardef valid_connection (expr xfrom, yfrom, xto, yto) =
% check for slanted lines
ok := true ;
for i=1 upto xypoint-1 :
- if not ((xpart xypoints[i]=xpart xypoints[i+1]) or
- (ypart xypoints[i]=ypart xypoints[i+1])) : ok := false ;
- fi ;
+ if not ((xpart xypoints[i]=xpart xypoints[i+1]) or
+ (ypart xypoints[i]=ypart xypoints[i+1])) : ok := false ;
+ fi ;
endfor ;
if not ok :
%message("slanted");
@@ -516,13 +551,13 @@ vardef valid_connection (expr xfrom, yfrom, xto, yto) =
xypoints[xypoint] := xylast ;
for i=1 upto max_x :
- for j=1 upto max_y :
-if not ( ( (i,j) = (xfrom,yfrom) ) or ( (i,j) = (yfrom,yto) ) ) :
- if not xyfree[i][j] :
- vc := pp intersection_point xypath[i][j] ;
- if intersection_found : ok := false fi ;
- fi ;
-fi ;
+ for j=1 upto max_y : % was bug: xfrom,yto
+ if not ( ( (i,j)=(xfrom,yfrom) ) or ( (i,j)=(xto,yto) ) ) :
+ if not xyfree[i][j] :
+ vc := pp intersection_point xypath[i][j] ;
+ if intersection_found : ok := false fi ;
+ fi ;
+ fi ;
endfor ;
endfor ;
%if not ok: message("crossing") ; fi ;
@@ -544,6 +579,17 @@ def connect_top_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) =
xypoints[3] := x_on_grid(2,xfrom,xto,zfrom) ;
xypoints[4] := xy_on_grid(3,5) ;
fi ;
+ %%%% begin experiment
+ xypoints[3] := xypoints[3] shifted (dsp_x,0) ;
+ xypoints[4] := xypoints[4] shifted (dsp_x,0) ;
+ if dsp_y>0 :
+ xypoints[2] := xypoints[2] shifted (0,dsp_y) ;
+ xypoints[3] := xypoints[3] shifted (0,dsp_y) ;
+ elseif dsp_y<0 :
+ xypoints[4] := xypoints[4] shifted (0,dsp_y) ;
+ xypoints[5] := xypoints[5] shifted (0,dsp_y) ;
+ fi
+ %%%% end experiment
draw_connection ;
fi ;
enddef ;
@@ -621,6 +667,17 @@ def connect_right_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) =
if not valid_connection(xfrom,yfrom,xto,yto) :
xypoints[3] := xy_on_grid(2,4) ;
fi ;
+ %%%% begin experiment
+ xypoints[2] := xypoints[2] shifted (dsp_x,0) ;
+ xypoints[3] := xypoints[3] shifted (dsp_x,0) ;
+ if dsp_y>0 :
+ xypoints[3] := xypoints[3] shifted (0,-dsp_y) ;
+ xypoints[4] := xypoints[4] shifted (0,-dsp_y) ;
+ elseif dsp_y<0 :
+ xypoints[3] := xypoints[3] shifted (0,dsp_y) ;
+ xypoints[4] := xypoints[4] shifted (0,dsp_y) ;
+ fi
+ %%%% end experiment
draw_connection ;
fi ;
enddef ;
@@ -689,6 +746,17 @@ def connect_bottom_bottom (expr xfrom,yyfrom,zfrom) (expr xto,yyto,zto) =
xypoints[3] := x_on_grid(2,xfrom,xto,zfrom) ;
xypoints[4] := xy_on_grid(3,5) ;
fi ;
+ %%%% begin experiment
+ xypoints[3] := xypoints[3] shifted (dsp_x,0) ;
+ xypoints[4] := xypoints[4] shifted (dsp_x) ;
+ if dsp_y<0 :
+ xypoints[2] := xypoints[2] shifted (0,-dsp_y) ;
+ xypoints[3] := xypoints[3] shifted (0,-dsp_y) ;
+ elseif dsp_y>0 :
+ xypoints[4] := xypoints[4] shifted (0,dsp_y) ;
+ xypoints[5] := xypoints[5] shifted (0,dsp_y) ;
+ fi
+ %%%% end experiment
draw_connection ;
fi ;
enddef ;
diff --git a/metapost/context/mp-core.mp b/metapost/context/mp-core.mp
index 918838e33..80e3a8eb5 100644
--- a/metapost/context/mp-core.mp
+++ b/metapost/context/mp-core.mp
@@ -1,6 +1,6 @@
%D \module
%D [ file=mp-core.mp,
-%D version=1999.08.12,
+%D version=2000.something, % 1999.08.12,
%D title=\CONTEXT\ \METAPOST\ graphics,
%D subtitle=core interfacing,
%D author=Hans Hagen,
@@ -87,6 +87,15 @@ def do_initialize_area (expr fpos, tpos) =
cxy := center pxy ;
enddef ;
+def set_par_line_height (expr ph, pd) =
+ par_strut_height :=
+ if ph>0 : ph elseif StrutHeight>0 : StrutHeight else : 8pt fi ;
+ par_strut_depth :=
+ if pd>0 : pd elseif StrutDepth >0 : StrutDepth else : 3pt fi ;
+ par_line_height :=
+ par_strut_height + par_strut_depth ;
+enddef ;
+
def initialize_par (expr fn,fx,fy,fw,fh,fd,
tn,tx,ty,tw,th,td,
mn,mx,my,mw,mh,md,
@@ -100,9 +109,7 @@ def initialize_par (expr fn,fx,fy,fw,fh,fd,
numeric par_strut_height, par_strut_depth, par_line_height ;
- par_strut_height := ph ;
- par_strut_depth := pd ;
- par_line_height := ph + pd ;
+ set_par_line_height (ph, pd) ;
do_initialize_area (fpos, tpos) ;
do_initialize_par (fpos, tpos, mpos, ppos, rw,rl,rr,rh,ra,ri) ;
@@ -119,9 +126,7 @@ def initialize_area_par (expr fn,fx,fy,fw,fh,fd,
numeric par_strut_height, par_strut_depth, par_line_height ;
- par_strut_height := wh ;
- par_strut_depth := wd ;
- par_line_height := wh + wd ;
+ set_par_line_height (wh, wd) ;
numeric ffpos ; ffpos := 4 ; initialize_box_pos(ffpos,wn,wx,fy,0,wh,wd) ;
numeric ttpos ; ttpos := 5 ; initialize_box_pos(ttpos,wn,wx+ww,ty,0,wh,wd) ;
@@ -316,9 +321,9 @@ def do_initialize_par (expr fpos, tpos, mpos, ppos, rw,rl,rr,rh,ra,ri) =
enddef ;
-if unknown TopSkip : TopSkip := 0 fi ;
-if unknown StrutHeight : StrutHeight := 0 fi ;
-
+TopSkip := 0 ; % will move
+StrutHeight := 0 ; % will move
+
pair last_multi_par_shift ; last_multi_par_shift := origin ;
def relocate_multipars (expr xy) =
@@ -329,16 +334,39 @@ def relocate_multipars (expr xy) =
enddef ;
boolean compensate_multi_par_topskip ;
-compensate_multi_par_topskip := true ;
-
boolean span_multi_column_pars ;
-span_multi_column_pars := false ;
+boolean auto_multi_par_hsize ;
+
+compensate_multi_par_topskip := true ;
+span_multi_column_pars := false ;
+auto_multi_par_hsize := false ; % true ;
vardef multi_par_at_top (expr i) =
(round (ypart ulcorner multipars[i]) = round (ypart ulcorner
(TextAreas[multirefs[i]] shifted last_multi_par_shift)))
enddef ;
+numeric nofmultipars ; nofmultipars := 0 ;
+
+boolean obey_multi_par_hang ; obey_multi_par_hang := true ;
+boolean obey_multi_par_more ; obey_multi_par_more := true ;
+boolean snap_multi_par_tops ; snap_multi_par_tops := true ;
+boolean local_multi_par_area ; local_multi_par_area := false ;
+boolean ignore_multi_par_page ; ignore_multi_par_page := false ;
+
+def simplify_multi_pars = % boundingbox ipv shape als optie
+ for i := 1 upto nofmultipars :
+ multipars[i] := boundingbox multipars[i] ;
+ endfor ;
+enddef ;
+
+def save_multipar (expr i, l, p) =
+ nofmultipars := nofmultipars + 1 ;
+ multirefs[nofmultipars] := i ;
+ multilocs[nofmultipars] := l ;
+ multipars[nofmultipars] := unspiked (simplified p) ;
+enddef ;
+
def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd,
tn,tx,ty,tw,th,td,
wn,wx,wy,ww,wh,wd,
@@ -346,121 +374,568 @@ def prepare_multi_pars (expr fn,fx,fy,fw,fh,fd,
rw,rl,rr,rh,ra,ri) =
if span_multi_column_pars :
- begingroup ;
- save TextAreas ; path TextAreas[] ;
- save NOfTextAreas ; numeric NOfTextAreas ;
- for i=1 upto NOfTextColumns :
- TextAreas[i] := TextColumns[i] ;
- endfor ;
- NOfTextAreas := NOfTextColumns ;
- fi ;
+ begingroup ;
+ save TextAreas ; path TextAreas[] ;
+ save NOfTextAreas ; numeric NOfTextAreas ;
+ for i=1 upto NOfTextColumns :
+ TextAreas[i] := TextColumns[i] ;
+ endfor ;
+ NOfTextAreas := NOfTextColumns ;
+ fi ;
last_multi_par_shift := origin ;
- % rh/ra/ri not yet supported
-
numeric fpos ; fpos := 1 ; initialize_box_pos(fpos,fn,fx,fy,fw,fh,fd) ;
numeric tpos ; tpos := 2 ; initialize_box_pos(tpos,tn,tx,ty,tw,th,td) ;
numeric wpos ; wpos := 3 ; initialize_box_pos(wpos,wn,wx,wy,ww,wh,wd) ;
numeric ppos ; ppos := 4 ; initialize_box_pos(ppos,pn,px,py,pw,ph,pd) ;
+if local_multi_par_area :
+ RealPageNumber := fn ;
+ NOfTextAreas := 1 ;
+ NOfSavedTextAreas := 0 ;
+ TextAreas[1] := TextAreas[0] ;
+ TextColumns[1] := TextColumns[0] ;
+ nxy[fpos] := nxy[tpos] := nxy[wpos] := nxy[ppos] := RealPageNumber ;
+elseif ignore_multi_par_page :
+ RealPageNumber := fn ;
+ nxy[fpos] := nxy[tpos] := nxy[wpos] := nxy[ppos] := RealPageNumber ;
+fi ;
+
numeric par_strut_height, par_strut_depth, par_line_height ;
- par_strut_height := ph ;
- par_strut_depth := pd ;
- par_line_height := ph + pd ;
+ set_par_line_height (ph, pd) ;
+
+ numeric par_hang_indent, par_hang_after, par_indent, par_left_skip ;
+
+ par_hang_indent := rh ;
+ par_hang_after := ra ;
+ par_indent := ri ;
+ par_left_skip := rl ;
+
+ pair par_start_pos ;
+
+% par_start_pos := llxy[fpos] if par_indent<0: shifted (-par_indent,0) fi ;
+
+ par_start_pos := llxy[fpos]
+ if par_indent <0: shifted (-par_indent, 0) fi
+ if par_left_skip<0: shifted (-par_left_skip,0) fi ;
if wxy[wpos]>0 :
left_skip := rl + xpart llxy[wpos] - xpart llxy[ppos] ;
- right_skip := rw - left_skip - ww ;
- else :
- left_skip := rl ;
- right_skip := rr ;
+ right_skip := rw - left_skip - ww ;
+ else :
+ left_skip := rl ;
+ right_skip := rr ;
fi ;
- path multipar, multipars[] ;
- numeric multiref, multirefs[] ;
+ path multipar, multipars[] ;
+ numeric multiref, multirefs[] ;
numeric multiloc, multilocs[] ; % 1=begin 2=between 3=end
- ii := 0 ; nn := NOfTextAreas+1 ; nofmultipars := 0 ;
+ numeric multi_par_pages ; multi_par_pages := nxy[tpos]-nxy[fpos]+1 ;
- def set_multipar (expr i) =
- ((TextAreas[i] leftenlarged -left_skip) rightenlarged -right_skip)
- enddef ;
+ ii := 0 ; nn := NOfTextAreas+1 ; nofmultipars := 0 ;
- def save_multipar (expr i, l, p) =
- nofmultipars := nofmultipars + 1 ;
- multirefs[nofmultipars] := i ;
- multilocs[nofmultipars] := l ;
- multipars[nofmultipars] := unspiked simplified p ;
+ vardef snapped_multi_pos (expr p) =
+ if snap_multi_par_tops :
+ if abs(ypart p - ypart ulcorner multipar) < par_line_height :
+ (xpart p,ypart ulcorner multipar)
+ else :
+ p
+ fi
+ else :
+ p
+ fi
enddef ;
+ % def set_multipar (expr i) =
+ % ((TextAreas[i] leftenlarged -left_skip) rightenlarged -right_skip)
+ % enddef ;
+
+ vardef set_multipar (expr i) =
+ ( (TextAreas[i] leftenlarged -left_skip) rightenlarged (-right_skip
+ if auto_multi_par_hsize : + rw - bbwidth(TextAreas[i]) fi) )
+ enddef ;
+
+ vardef top_multi_par(expr p) =
+ (round(estimated_par_lines(bbheight(p)*par_line_height))=round(bbheight(p)))
+ enddef ;
+
+ vardef multi_par_tsc(expr p) =
+ if top_multi_par(p) : TopSkipCorrection else : 0 fi
+ enddef ;
+
+ vardef estimated_par_lines (expr h) =
+ round(h/par_line_height)
+ enddef ;
+
+ vardef estimated_multi_par_height (expr n, t) =
+ if round(par_line_height)=0 :
+ 0
+ else :
+ save ok, h ; boolean ok ;
+ numeric h ; h := 0 ;
+ ok := false ;
+ if (nxy[fpos]=RealPageNumber-1) :
+ for i := 1 upto NOfSavedTextAreas :
+ if (InsideSavedTextArea(i,par_start_pos)) :
+ ok := true ;
+ h := h + estimated_par_lines(ypart ulxy[fpos] -
+ ypart llcorner SavedTextAreas[i]) ;
+ elseif ok :
+ h := h + estimated_par_lines(bbheight(SavedTextAreas[i])) ;
+ fi ;
+ endfor ;
+ fi ;
+ if ok :
+ for i := 1 upto n-1 :
+ h := h + estimated_par_lines(bbheight(TextAreas[i])) ;
+ endfor ;
+ else :
+ % already: ok := false ;
+ for i := 1 upto n-1 :
+ if (InsideTextArea(i,par_start_pos)) :
+ ok := true ;
+ h := h + estimated_par_lines(ypart ulxy[fpos] - ypart llcorner TextAreas[i]) ;
+ elseif ok :
+ h := h + estimated_par_lines(bbheight(TextAreas[i])) ;
+ fi ;
+ endfor ;
+ fi ;
+ h
+ fi
+ enddef ;
+
+ vardef left_top_hang (expr same_area) =
+
+par_hang_after := ra + estimated_par_lines(py-fy) ;
+
+ if (par_hang_indent>0) and (par_hang_after<0) and obey_multi_par_hang :
+ pair _ul_ ; _ul_ := (xpart ulcorner multipar, ypart snapped_multi_pos(ulxy[fpos]));
+ pair _pa_ ; _pa_ := _ul_ shifted (0,par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart llcorner multipar)) ;
+ if same_area :
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart llxy[tpos])) ;
+ fi ;
+% vervalt:
+ if obey_multi_par_more and (round(par_line_height)>0) :
+ par_hang_after := min(0,round(par_hang_after +
+ (ypart urxy[fpos]-ypart _pa_)/par_line_height)) ;
+ fi ;
+ (xpart _ul_ + par_hang_indent, ypart lrxy[fpos]) --
+ (xpart _ul_ + par_hang_indent, ypart _pa_) --
+ (xpart ulcorner multipar, ypart _pa_)
+ else :
+ (xpart ulcorner multipar, ypart lrxy[fpos])
+ fi
+ enddef ;
+
+ vardef right_top_hang (expr same_area) =
+
+par_hang_after := ra - estimated_par_lines(py-fy) ;
+
+ if (par_hang_indent<0) and (par_hang_after<0) and obey_multi_par_hang :
+ pair _ur_ ; _ur_ := (xpart urcorner multipar, ypart snapped_multi_pos(urxy[fpos])) ;
+ pair _pa_ ; _pa_ := _ur_ shifted (0,par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_ -TopSkipCorrection,ypart llcorner multipar)) ;
+ if same_area :
+ _pa_ := (xpart _pa_,max(ypart _pa_ -TopSkipCorrection,ypart snapped_multi_pos(ulxy[tpos]))) ;
+ fi ;
+ if obey_multi_par_more and (round(par_line_height)>0) :
+ par_hang_after := min(0,round(par_hang_after +
+ (ypart urxy[fpos]-ypart _pa_)/par_line_height)) ;
+ fi ;
+ (xpart urcorner multipar, ypart _pa_) --
+ (xpart _ur_ + par_hang_indent, ypart _pa_) --
+ (xpart _ur_ + par_hang_indent, ypart snapped_multi_pos(urxy[fpos]))
+ else :
+ (xpart urcorner multipar, ypart snapped_multi_pos(urxy[fpos]))
+ fi
+ enddef ;
+
+ vardef x_left_top_hang (expr i, t) =
+ par_hang_after := min(0,ra + estimated_multi_par_height(i,t)) ;
+ if (par_hang_indent>0) and (par_hang_after<0) :
+ pair _ul_ ; _ul_ := ulcorner multipar ;
+ pair _pa_ ; _pa_ := _ul_ shifted (0,par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart llcorner multipar)) ;
+
+if t :
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart llxy[tpos]));
+fi ;
+if abs(ypart _pa_-ypart llxy[tpos])<par_line_height :
+ _pa_ := (xpart _pa_,ypart llxy[tpos]);
+fi ;
+if abs(ypart _pa_-ypart llcorner multipar)<par_line_height :
+ _pa_ := (xpart _pa_,ypart llcorner multipar);
+fi ;
+
+ (xpart _ul_, ypart _pa_) --
+ (xpart _ul_ + par_hang_indent, ypart _pa_) --
+ (xpart _ul_ + par_hang_indent, ypart _ul_)
+ else :
+ ulcorner multipar
+ fi
+ enddef ;
+
+% here
+
+ vardef x_right_top_hang (expr i, t) =
+ par_hang_after := min(0,ra + estimated_multi_par_height(i,t)) ;
+ if (par_hang_indent<0) and (par_hang_after<0) :
+ pair _ur_ ; _ur_ := urcorner multipar ;
+ pair _pa_ ; _pa_ := _ur_ shifted (0,par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart lrcorner multipar)) ;
+if t :
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart snapped_multi_pos(urxy[tpos]))) ;
+fi ;
+
+%todo
+%
+%if abs(ypart _pa_-ypart llxy[tpos])<par_line_height :
+% _pa_ := (xpart _pa_,ypart llxy[tpos]);
+%fi ;
+%if abs(ypart _pa_-ypart llcorner multipar)<par_line_height :
+% _pa_ := (xpart _pa_,ypart llcorner multipar);
+%fi ;
+
+
+ (xpart _ur_ + par_hang_indent, ypart _ur_) --
+ (xpart _ur_ + par_hang_indent, ypart _pa_) --
+ (xpart _ur_, ypart _pa_)
+ else :
+ urcorner multipar
+ fi
+ enddef ;
+
+ vardef left_bottom_hang (expr same_area) =
+ pair _ll_, _sa_, _pa_ ;
+ _sa_ := if same_area : llxy[tpos] else : lrcorner multipar fi ;
+ if (par_hang_indent>0) and (par_hang_after>0) and obey_multi_par_hang :
+ _ll_ := (xpart ulcorner multipar, ypart snapped_multi_pos(ulxy[fpos])) ;
+ _pa_ := _ll_ shifted (0,-par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart llcorner multipar)) ;
+ if same_area :
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart _sa_)) ;
+ fi ;
+ if obey_multi_par_more and (round(par_line_height)>0) :
+ par_hang_after := max(0,round(par_hang_after -
+ (ypart urxy[fpos]-ypart _pa_)/par_line_height)) ;
+ fi ;
+ _pa_ --
+ (xpart _pa_ + par_hang_indent,ypart _pa_) --
+ (xpart _pa_ + par_hang_indent,ypart _sa_)
+ else :
+ (xpart llcorner multipar, ypart _sa_)
+ fi
+ enddef ;
+
+ vardef right_bottom_hang (expr same_area) =
+ pair _lr_, _sa_, _pa_ ;
+ _sa_ := if same_area : snapped_multi_pos(ulxy[tpos]) else : lrcorner multipar fi ;
+ if (par_hang_indent<0) and (par_hang_after>0) and obey_multi_par_hang :
+ _lr_ := (xpart urcorner multipar, ypart snapped_multi_pos(urxy[fpos])) ;
+ _pa_ := _lr_ shifted (0,-par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart lrcorner multipar)) ;
+ if same_area :
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart snapped_multi_pos(ulxy[tpos]))) ;
+ fi ;
+ if obey_multi_par_more and (round(par_line_height)>0) :
+ par_hang_after := max(0,round(par_hang_after -
+ (ypart urxy[fpos]-ypart _pa_)/par_line_height)) ;
+ fi ;
+ (xpart _pa_ + par_hang_indent,ypart _sa_) --
+ (xpart _pa_ + par_hang_indent,ypart _pa_) --
+ _pa_
+ else :
+ (xpart lrcorner multipar, ypart _sa_)
+ fi
+ enddef ;
+
+ vardef x_left_bottom_hang (expr i, t) =
+ pair _ll_, _sa_, _pa_ ;
+if t :
+ _sa_ := llxy[tpos] ;
+else :
+ _sa_ := llcorner multipar ;
+fi ;
+ if (par_hang_indent>0) and (ra>0) :
+ par_hang_after := max(0,ra - estimated_multi_par_height(i,t)) ;
+ _ll_ := ulcorner multipar ;
+ _pa_ := _ll_ shifted (0,-par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart llcorner multipar)) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart _sa_)) ;
+ % we need to compensate for topskip enlarged areas
+ if abs(ypart _pa_ - ypart _sa_) > par_line_height :
+ (xpart _pa_ + par_hang_indent,ypart _sa_) --
+ (xpart _pa_ + par_hang_indent,ypart _pa_) --
+ fi
+ _pa_
+ else :
+ (xpart llcorner multipar, ypart _sa_)
+ fi
+ enddef ;
+
+ vardef x_right_bottom_hang (expr i, t) =
+ pair _lr_, _sa_, _pa_ ;
+if t :
+ _sa_ := snapped_multi_pos(ulxy[tpos]) ;
+else :
+ _sa_ := llcorner multipar ;
+fi ;
+ if (par_hang_indent<0) and (ra>0) :
+ par_hang_after := max(0,ra - estimated_multi_par_height(i, t)) ;
+ _lr_ := urcorner multipar ;
+ _pa_ := _lr_ shifted (0,-par_hang_after*par_line_height) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart lrcorner multipar)) ;
+ _pa_ := (xpart _pa_,max(ypart _pa_,ypart _sa_)) ;
+ % we need to compensate for topskip enlarged areas
+ _pa_
+ if abs(ypart _pa_ - ypart _sa_) > par_line_height :
+ -- (xpart _pa_ + par_hang_indent,ypart _pa_)
+ -- (xpart _pa_ + par_hang_indent,ypart _sa_)
+ fi
+ else :
+ (xpart lrcorner multipar, ypart _sa_)
+ fi
+ enddef ;
+
+ def test_multipar =
+ multipar :=
+ llcorner multipar --
+ urcorner multipar --
+ lrcorner multipar --
+ ulcorner multipar --
+ cycle ;
+ enddef ;
+
+ % first loop
+
for i=1 upto NOfTextAreas :
+
+ TopSkipCorrection := 0 ;
+
multipar := set_multipar(i) ;
- if (nxy[fpos]=RealPageNumber) and (InsideTextArea(i,llxy[fpos])) :
- % first one in chain
+
+ % watch how we compensate for negative indentation
+
+ if (nxy[fpos]=RealPageNumber) and (InsideTextArea(i,par_start_pos)) :
+
+ % first one in chain
+
ii := i ;
+
if (nxy[tpos]=RealPageNumber) and (InsideTextArea(i,llxy[tpos])) :
+
+ % in same area
+
nn := i ;
- if compensate_multi_par_topskip :
- TopSkipCorrection := TopSkip - StrutHeight ;
+ if compensate_multi_par_topskip and (round(LineHeight-ph-pd)=0) :
- if round(ypart ulxy[fpos] + TopSkipCorrection) =
- round(ypart ulcorner TextAreas[i]) :
- ulxy[fpos] := ulxy[fpos] shifted (0,TopSkipCorrection) ;
- urxy[fpos] := urxy[fpos] shifted (0,TopSkipCorrection) ;
- fi ;
- fi ;
+ TopSkipCorrection := TopSkip - StrutHeight ;
+
+ if round(ypart ulxy[fpos] + TopSkipCorrection) =
+ round(ypart ulcorner TextAreas[i]) :
+ ulxy[fpos] := ulxy[fpos] shifted (0,TopSkipCorrection) ;
+ urxy[fpos] := urxy[fpos] shifted (0,TopSkipCorrection) ;
+ else :
+ TopSkipCorrection := 0 ;
+ fi ;
+
+ fi ;
if ypart llxy[fpos] = ypart llxy[tpos] :
- multipar := llxy[fpos] --
- lrxy[tpos] --
- urxy[tpos] --
- ulxy[fpos] --
- cycle ;
+
+ multipar :=
+ llxy[fpos] --
+ lrxy[tpos] --
+ %urxy[tpos] --
+ snapped_multi_pos(urxy[tpos]) --
+ %ulxy[fpos] --
+ snapped_multi_pos(ulxy[fpos]) --
+ cycle ;
+
+ save_multipar (i,1,multipar) ;
+
+ elseif (ypart llxy[fpos] = ypart ulxy[tpos]) and
+ (xpart llxy[tpos] < xpart llxy[fpos]) :
+
+ % two loners
+
+ multipar := if obey_multi_par_hang :
+
+ right_bottom_hang(true) --
+ right_top_hang(true) --
+ snapped_multi_pos(urxy[fpos]) --
+ lrxy[fpos] --
+
+ else :
+
+ llxy[fpos] --
+ (xpart urcorner multipar, ypart llxy[fpos]) --
+ (xpart urcorner multipar, ypart ulxy[fpos]) --
+ snapped_multi_pos(ulxy[fpos]) --
+
+ fi cycle ;
+
+ save_multipar (i,1,multipar) ;
+
+ multipar := set_multipar(i) ;
+
+ multipar := if obey_multi_par_hang :
+
+ left_bottom_hang(true) --
+ llxy[tpos] --
+ snapped_multi_pos(ulxy[tpos]) --
+ left_top_hang(true) --
+
+ else :
+
+ (xpart llcorner multipar, ypart llxy[tpos]) --
+ llxy[tpos] --
+ snapped_multi_pos(ulxy[tpos]) --
+ (xpart llcorner multipar, ypart ulxy[tpos]) --
+
+ fi cycle ;
+
+ save_multipar (i,1,multipar) ;
+
else :
- multipar := (xpart llcorner multipar, ypart llxy[tpos]) --
- llxy[tpos] --
- ulxy[tpos] --
- (xpart lrcorner multipar, ypart ulxy[tpos]) --
- (xpart urcorner multipar, ypart urxy[fpos]) --
- urxy[fpos] --
- lrxy[fpos] --
- (xpart ulcorner multipar, ypart lrxy[fpos])--
- cycle ;
+
+ multipar := if obey_multi_par_hang :
+
+ left_bottom_hang(true) --
+ llxy[tpos] --
+ %ulxy[tpos] --
+ snapped_multi_pos(ulxy[tpos]) --
+ right_bottom_hang(true) --
+ right_top_hang(true) --
+ %urxy[fpos] --
+ snapped_multi_pos(urxy[fpos]) --
+ lrxy[fpos] --
+ left_top_hang(true) --
+
+ else :
+
+ (xpart llcorner multipar, ypart llxy[tpos]) --
+ llxy[tpos] --
+ %ulxy[tpos] --
+ snapped_multi_pos(ulxy[tpos]) --
+ (xpart lrcorner multipar, ypart ulxy[tpos]) --
+ (xpart urcorner multipar, ypart urxy[fpos]) --
+ %urxy[fpos] --
+ snapped_multi_pos(urxy[fpos]) --
+ lrxy[fpos] --
+ (xpart ulcorner multipar, ypart lrxy[fpos]) --
+
+ fi cycle ;
+
+ save_multipar (i,1,multipar) ;
+
fi ;
+
else :
- multipar := llcorner multipar --
- lrcorner multipar --
- (xpart lrcorner multipar, ypart urxy[fpos]) --
- urxy[fpos] --
- lrxy[fpos] --
- (xpart ulcorner multipar, ypart lrxy[fpos])-- cycle ;
+
+ multipar := if obey_multi_par_hang :
+
+ left_bottom_hang(false) --
+ right_bottom_hang(false) --
+ right_top_hang(false) --
+ %urxy[fpos] --
+ snapped_multi_pos(urxy[fpos]) --
+ lrxy[fpos] --
+ left_top_hang(false) --
+
+ else :
+
+ llcorner multipar --
+ lrcorner multipar --
+ (xpart urcorner multipar, ypart urxy[fpos]) --
+ %urxy[fpos] --
+ snapped_multi_pos(urxy[fpos]) --
+ lrxy[fpos] --
+ (xpart ulcorner multipar, ypart lrxy[fpos]) --
+
+ fi cycle ;
+
+ save_multipar (i,1,multipar) ;
+
fi ;
- save_multipar (i,1,multipar) ;
+
elseif (nxy[tpos]=RealPageNumber) and (InsideTextArea(i,llxy[tpos])) :
- % last one in chain
+
+ % last one in chain
+
nn := i ;
- multipar := ulcorner multipar --
- urcorner multipar --
- (xpart lrcorner multipar, ypart urxy[tpos]) --
- ulxy[tpos] --
- llxy[tpos] --
- (xpart llcorner multipar, ypart llxy[tpos]) --
- cycle ;
- save_multipar (i,3,multipar) ;
+
+ if obey_multi_par_hang and obey_multi_par_more :
+
+ multipar :=
+ x_left_top_hang(i,true) --
+ x_right_top_hang(i,true) --
+ x_right_bottom_hang(i,true) --
+% ulxy[tpos] --
+snapped_multi_pos(ulxy[tpos]) --
+ llxy[tpos] --
+ x_left_bottom_hang(i,true) --
+ cycle ;
+
+ else :
+
+ multipar :=
+ ulcorner multipar --
+ urcorner multipar --
+ (xpart lrcorner multipar, ypart urxy[tpos]) --
+% ulxy[tpos] --
+snapped_multi_pos(ulxy[tpos]) --
+ llxy[tpos] --
+ (xpart llcorner multipar, ypart llxy[tpos]) --
+ cycle ;
+
+ fi ;
+
+ save_multipar (i,3,multipar) ;
+
+ else :
+
+ % handled later
+
fi ;
+
endfor ;
+ % second loop
+
for i=ii+1 upto nn-1 :
- % rest of chain
- save_multipar(i,2,set_multipar(i)) ;
+
+ % rest of chain / todo : hang
+
+%if (nxy[fpos]<=RealPageNumber) and (nxy[tpos]>=RealPageNumber) :
+
+ multipar := set_multipar(i) ;
+
+ if obey_multi_par_hang and obey_multi_par_more :
+
+ multipar :=
+ x_left_top_hang(i,false) --
+ x_right_top_hang(i,false) --
+ x_right_bottom_hang(i,false) --
+ x_left_bottom_hang(i,false) --
+ cycle ;
+
+ fi ;
+
+ save_multipar(i,2,multipar) ;
+
+%fi ;
+
endfor ;
if span_multi_column_pars :
- endgroup ;
- fi ;
+ endgroup ;
+ fi ;
enddef ;
@@ -475,22 +950,26 @@ numeric boxgridwidth ; boxgridwidth := 1pt ;
numeric boxlinewidth ; boxlinewidth := 1pt ;
numeric boxlineradius ; boxlineradius := 0pt ;
numeric boxfilloffset ; boxfilloffset := 0pt ;
+numeric boxgriddistance ; boxgriddistance := .5cm ;
def draw_box =
draw pxy withcolor boxlinecolor withpen pencircle scaled boxlinewidth ;
draw lxy -- rxy withcolor boxlinecolor withpen pencircle scaled boxgridwidth ;
enddef ;
-def draw_par = % 1 2 11
- numeric distance ; distance := .5cm ;
+def draw_par = % 1 2 11 12
do_draw_par(pxy) ; do_draw_par(txy) ; do_draw_par(bxy) ;
for i = pxy, txy, bxy :
if boxgridtype= 1 :
+ boxgriddirection := origin ;
draw baseline_grid (i,boxgriddirection,true ) withcolor boxgridcolor ;
elseif boxgridtype= 2 :
+ boxgriddirection := origin ;
draw baseline_grid (i,boxgriddirection,false) withcolor boxgridcolor ;
elseif boxgridtype=11 :
- draw graphic_grid(i,distance,distance,distance/2,distance/2) ;
+ draw graphic_grid(i,boxgriddistance,boxgriddistance,boxgriddistance/2,boxgriddistance/2) ;
+ elseif boxgridtype=12 :
+ draw graphic_grid(i,boxgriddistance,boxgriddistance,0,0) ;
fi ;
endfor ;
enddef ;
@@ -500,6 +979,7 @@ def do_show_par (expr p, r, c) =
draw fullcircle scaled r shifted point i of p
withpen pencircle scaled .5pt withcolor c ;
endfor ; fi ;
+ draw p withpen pencircle scaled .5pt withcolor c ;
enddef ;
def show_par =
@@ -517,11 +997,13 @@ def draw_multi_pars =
for i=1 upto nofmultipars :
do_draw_par(multipars[i]) ;
if boxgridtype= 1 :
- draw baseline_grid (multipars[i],boxgriddirection,true ) withcolor boxgridcolor ;
+ draw baseline_grid (multipars[i],up,true ) withcolor boxgridcolor ;
elseif boxgridtype= 2 :
- draw baseline_grid (multipars[i],boxgriddirection,false) withcolor boxgridcolor ;
+ draw baseline_grid (multipars[i],up,false) withcolor boxgridcolor ;
elseif boxgridtype=11 :
- draw graphic_grid(multipars[i],distance,distance,distance/2,distance/2) ;
+ draw graphic_grid(multipars[i],boxgriddistance,boxgriddistance,boxgriddistance/2,boxgriddistance/2) ;
+ elseif boxgridtype=12 :
+ draw graphic_grid(multipars[i],boxgriddistance,boxgriddistance,0,0) ;
fi ;
endfor ;
enddef ;
@@ -558,27 +1040,28 @@ enddef ;
vardef baseline_grid (expr pxy, pdir, at_baseline) =
if (par_line_height>0) and (bbheight(pxy)>1) and (bbwidth(pxy)>1) and (boxgridwidth>0) :
- save grid, start ; picture grid ; pair start ;
+ save i, grid ; picture grid ; pair start ;
+ def _do_ (expr start) =
+ draw start -- start shifted (bbwidth(pxy),0)
+ withpen pencircle scaled boxgridwidth
+ withcolor boxgridcolor ;
+ enddef ;
grid := image
( %fails with inlinespace
%
- %if pdir=up :
- % for i = if at_baseline : par_strut_depth else : 0 fi
- % step par_line_height until bbheight(pxy) :
- % start := llcorner pxy shifted (0,+i) ;
- % draw start -- start shifted (bbwidth(pxy),0)
- % withpen pencircle scaled boxgridwidth
- % withcolor boxgridcolor ;
- % endfor ;
- %else :
+ if pdir=up :
+ for i = if at_baseline : par_strut_depth else : 0 fi
+ step par_line_height
+ until max(bbheight(pxy),par_line_height) :
+ _do_ (llcorner pxy shifted (0,+i)) ;
+ endfor ;
+ else :
for i = if at_baseline : par_strut_height else : 0 fi
- step par_line_height until bbheight(pxy) :
- start := ulcorner pxy shifted (0,-i) ;
- draw start -- start shifted (bbwidth(pxy),0)
- withpen pencircle scaled boxgridwidth
- withcolor boxgridcolor ;
+ step par_line_height
+ until bbheight(pxy) :
+ _do_ (ulcorner pxy shifted (0,-i)) ;
endfor ;
- %fi ;
+ fi ;
) ;
clip grid to pxy ;
grid
@@ -598,8 +1081,8 @@ vardef graphic_grid (expr pxy, dx, dy, x, y) =
for i = ypart llcorner pxy step dy until ypart ulcorner pxy :
draw (xpart llcorner pxy,i) -- (xpart lrcorner pxy,i)
withpen pencircle scaled boxgridwidth ;
- endfor ) ;
- clip grid shifted (x,y) to pxy ;
+ endfor ) shifted (x,y) ;
+ clip grid to pxy ;
grid
else :
nullpicture
diff --git a/metapost/context/mp-form.mp b/metapost/context/mp-form.mp
index 15802dfbc..b5c06b11a 100644
--- a/metapost/context/mp-form.mp
+++ b/metapost/context/mp-form.mp
@@ -13,6 +13,8 @@
% instead of a picture, one can format a number in a for TeX
% acceptable input string
+boolean mant_font ; mant_font := true ; % signals graph not to load form
+
if known fmt_loaded : expandafter endinput fi ;
boolean fmt_loaded ; fmt_loaded := true ;
@@ -115,7 +117,11 @@ vardef init_numbers(expr s, m, x, sn, e) =
Feraise_ := ypart llcorner p ;
exitif true ;
endfor
- Fe_base := Fline_up_("1" infont Fmfont_ scaled Fmscale_, Femarker_) ;
+ if fmt_metapost :
+ Fe_base := Fline_up_("1" infont Fmfont_ scaled Fmscale_, Femarker_) ;
+ % else :
+ % sFe_base := Fline_up_("1", sFemarker_) ;
+ fi ;
Fe_plus := nullpicture ;
enddef ;
@@ -323,14 +329,23 @@ fmt_[ASCII "G"] = "Formgen_(z Fdigs_ p)" ;
% of the format letters defined above. The number should be
% an integer giving the precision (default 3).
+vardef isfmtseparator primary c = %%% added by HH %%%
+ ((c <> fmt_separator) and (c <> "%"))
+enddef ;
+
vardef dofmt_@#(expr f, x) = %%% adapted by HH %%%
+ initialize_numbers ;
if f = "" :
if fmt_metapost : nullpicture else : "" fi
else :
interim warningcheck := 0 ;
save k, l, s, p, z ;
pair z ; z = @#(x) ;
- k = 1 + cspan(f, fmt_separator <> ) ;
+ % the next adaption is okay
+ % k = 1 + cspan(f, fmt_separator <> ) ;
+ % but best is to support both % and fmt_separator
+ k = 1 + cspan(f, isfmtseparator) ;
+ %
l-k = cspan(substring(k,infinity) of f, isdigit) ;
p = if l > k :
scantokens substring(k,l) of f
diff --git a/metapost/context/mp-page.mp b/metapost/context/mp-page.mp
index 035b65bd6..032844ce3 100644
--- a/metapost/context/mp-page.mp
+++ b/metapost/context/mp-page.mp
@@ -47,12 +47,14 @@ def SaveTextAreas =
enddef ;
def ResetTextAreas =
- path TextAreas[], TextColumns[];
+ path TextAreas[], TextColumns[] ;
numeric NOfTextAreas ; NOfTextAreas := 0 ;
numeric NOfTextColumns ; NOfTextColumns := 0 ;
+ numeric nofmultipars ; nofmultipars := 0 ;
+ TextAreas[0] := TextColumns[0] := origin -- cycle ;
enddef ;
-ResetTextAreas ; SaveTextAreas ;
+ResetTextAreas ; SaveTextAreas ; ;
def RegisterTextArea (expr x, y, w, h, d) =
begingroup ; save p ; path p ;
@@ -91,6 +93,18 @@ def RegisterTextArea (expr x, y, w, h, d) =
endgroup ;
enddef ;
+%D We store a local area in slot zero.
+
+def RegisterLocalTextArea (expr x, y, w, h, d) =
+ TextAreas[0] := TextColumns[0] := unitsquare xyscaled(w,h+d) shifted (x,y-d) ;
+enddef ;
+
+def ResetLocalTextArea =
+ TextAreas[0] := TextColumns[0] := origin -- cycle ;
+enddef ;
+
+ResetLocalTextArea ;
+
vardef InsideTextArea (expr _i_, _xy_) =
( (round(xpart _xy_) >= round(xpart llcorner TextAreas[_i_])) and
(round(xpart _xy_) <= round(xpart lrcorner TextAreas[_i_])) and
@@ -181,7 +195,7 @@ PaperWidth := 597.50787pt ;
PrintPaperHeight := 845.04684pt ;
PrintPaperWidth := 597.50787pt ;
TopSpace := 71.12546pt ;
-BottomSpace := 0.0pt ;
+BottomSpace := 0.0pt ;
BackSpace := 71.13275pt ;
CutSpace := 0.0pt ;
MakeupHeight := 711.3191pt ;
@@ -218,12 +232,22 @@ RightMargin := +2 ; Footer := +20 ;
RightEdgeSeparator := +3 ; BottomSeparator := +30 ;
RightEdge := +4 ; Bottom := +40 ;
-Margin := LeftMargin ;
-Edge := LeftEdge ;
-InnerMargin := RightMargin ;
-InnerEdge := RightEdge ;
-OuterMargin := LeftMargin ;
-OuterEdge := LeftEdge ;
+Margin := LeftMargin ; % obsolete
+Edge := LeftEdge ; % obsolete
+InnerMargin := RightMargin ; % obsolete
+InnerEdge := RightEdge ; % obsolete
+OuterMargin := LeftMargin ; % obsolete
+OuterEdge := LeftEdge ; % obsolete
+
+InnerMarginWidth := 0pt ;
+OuterMarginWidth := 0pt ;
+InnerMarginDistance := 0pt ;
+OuterMarginDistance := 0pt ;
+
+InnerEdgeWidth := 0pt ;
+OuterEdgeWidth := 0pt ;
+InnerEdgeDistance := 0pt ;
+OuterEdgeDistance := 0pt ;
path Area [][] ; pair Location [][] ; path Field [][] ; path Page ;
numeric HorPos ; numeric Hstep [] ; numeric Hsize [] ;
@@ -261,6 +285,8 @@ def SwapPageState =
LeftEdgeDistance := RightEdgeDistance ;
RightEdgeDistance := i ;
+% these are now available as ..Width and ..Distance
+
Margin := LeftMargin ;
Edge := LeftEdge ;
InnerMargin := RightMargin ;
@@ -269,7 +295,7 @@ def SwapPageState =
OuterEdge := LeftEdge ;
else :
Margin := RightMargin ;
- Edge := RightEdge ;
+ Edge := RightEdge ;
InnerMargin := LeftMargin ;
InnerEdge := LeftEdge ;
OuterMargin := RightMargin ;
@@ -277,13 +303,8 @@ def SwapPageState =
fi ;
enddef ;
-def StartPage =
+def SetPageAreas =
- if PageStateAvailable :
- LoadPageState ;
- SwapPageState ;
- fi ;
-
numeric Vsize[], Hsize[], Vstep[], Hstep[] ;
Vsize[Top] = TopHeight ;
@@ -337,21 +358,36 @@ def StartPage =
endfor ;
endfor ;
-% pickup pencircle scaled 0pt ;
-
Page := unitsquare xscaled PaperWidth yscaled PaperHeight ;
- bboxmargin := 0 ; setbounds currentpicture to Page ;
enddef ;
-def StopPage =
+def BoundPageAreas =
- %pickup pencircle scaled 0pt ;
+ % pickup pencircle scaled 0pt ;
bboxmargin := 0 ; setbounds currentpicture to Page ;
enddef ;
+def StartPage =
+
+ if PageStateAvailable :
+ LoadPageState ;
+ SwapPageState ;
+ fi ;
+
+ SetPageAreas ;
+ BoundPageAreas ;
+
+enddef ;
+
+def StopPage =
+
+ BoundPageAreas ;
+
+enddef ;
+
def OverlayBox =
(unitsquare xyscaled (OverlayWidth,OverlayHeight))
enddef ;
diff --git a/metapost/context/mp-spec.mp b/metapost/context/mp-spec.mp
index 05f5cecad..dca7ffdbc 100644
--- a/metapost/context/mp-spec.mp
+++ b/metapost/context/mp-spec.mp
@@ -11,9 +11,13 @@
%C therefore copyrighted by \PRAGMA. See licen-en.pdf for
%C details.
+% Spot colors are not handled by mptopdf !
+
% (r,g,b) => cmyk : r=123 g= 1 b=hash
-% => transparent rgb : r=123 g= 2 b=hash
-% => transparent cmyk : r=123 g= 3 b=hash
+% => spot : r=123 g= 2 b=hash
+% => transparent rgb : r=123 g= 3 b=hash
+% => transparent cmyk : r=123 g= 4 b=hash
+% => transparent spot : r=123 g= 5 b=hash
% => rest : r=123 g=n>10 b=whatever
%D This module is rather preliminary and subjected to
@@ -162,15 +166,15 @@ pair shadeoffset ; shadeoffset := origin ;
vardef define_linear_shade (expr a, b, ca, cb) =
flush_special(30, 15, "0 1 " & decimal shadefactor & " " &
- dddecimal ca & ddecimal (a shifted shadeoffset) &
- dddecimal cb & ddecimal (b shifted shadeoffset) ) ;
+ dddecimal ca & " " & ddecimal (a shifted shadeoffset) & " " &
+ dddecimal cb & " " & ddecimal (b shifted shadeoffset) ) ;
_special_counter_
enddef ;
vardef define_circular_shade (expr a, b, ra, rb, ca, cb) =
flush_special(31, 17, "0 1 " & decimal shadefactor & " " &
- dddecimal ca & ddecimal (a shifted shadeoffset) & " " & decimal ra &
- dddecimal cb & ddecimal (b shifted shadeoffset) & " " & decimal rb ) ;
+ dddecimal ca & " " & ddecimal (a shifted shadeoffset) & " " & decimal ra & " " &
+ dddecimal cb & " " & ddecimal (b shifted shadeoffset) & " " & decimal rb ) ;
_special_counter_
enddef ;
@@ -356,24 +360,6 @@ enddef ;
resetcmykcolors ; boolean cmykcolors ; cmykcolors := false ; % true
-% vardef cmyk(expr c,m,y,k) =
-% if cmykcolors :
-% if not known cmykcolorhash[c][m][y][k] :
-% _cmyk_counter_ := _cmyk_counter_ + 1 ;
-% cmykcolorhash[c][m][y][k] := _cmyk_counter_ ;
-% flush_special(1, 7,
-% decimal _cmyk_counter_ & " " &
-% decimal c & " " &
-% decimal m & " " &
-% decimal y & " " &
-% decimal k) ;
-% fi
-% (_special_signal_/1000,1/1000,cmykcolorhash[c][m][y][k]/1000)
-% else :
-% (1-c-k,1-m-k,1-y-k)
-% fi
-% enddef ;
-
string cmykcolorpattern[] ; % needed for transparancies
vardef cmyk(expr c,m,y,k) =
@@ -384,7 +370,7 @@ vardef cmyk(expr c,m,y,k) =
elseif cmykcolorhash[c][m][y][k] = -1 :
ok := false ; % locally defined and undefined
else :
- ok := true ; % globally already defined
+ ok := true ; % globally already defined
fi ;
if not ok :
save s ; string s ; s := dddecimal (c,m,y) & " " & decimal k ;
@@ -394,7 +380,7 @@ vardef cmyk(expr c,m,y,k) =
flush_special(1, 7, decimal _cmyk_counter_ & " " & s) ;
_local_specials_ := _local_specials_ &
" cmykcolorhash[" & decimal c & "][" & decimal m &
- "][" & decimal y & "][" & decimal k & "] := -1 ; " ;
+ "][" & decimal y & "][" & decimal k & "] := -1 ; " ;
fi ;
(_special_signal_/1000,1/1000,cmykcolorhash[c][m][y][k]/1000)
else :
@@ -408,6 +394,52 @@ enddef ;
% truemagenta = cmyk (0,1,0,0) ;
% trueyellow = cmyk (0,0,1,0) ;
+%D Spot colors
+
+_spotcolor_counter_ := 0 ;
+_spotcolor_number_ := 0 ;
+
+extra_endfig := " resetspotcolors ; " & extra_endfig ;
+
+def resetspotcolors =
+ numeric spotcolorhash[][] ;
+enddef ;
+
+resetspotcolors ; boolean spotcolors ; spotcolors := false ; % true
+
+string spotcolorpattern[] ; % needed for transparancies
+
+vardef spotcolor(expr p, s) =
+ if spotcolors :
+ save ok, pc_tag ; boolean ok ; string pc_tag ;
+ pc_tag := "_pct_"&p ;
+ if not unstringed(pc_tag) :
+ _spotcolor_number_ := _spotcolor_number_ + 1 ;
+ setunstringed(pc_tag,_spotcolor_number_) ;
+ fi ;
+ pp := getunstringed(pc_tag) ;
+ if unknown spotcolorhash[pp][s] :
+ ok := false ; % not yet defined
+ elseif spotcolorhash[pp][s] = -1 :
+ ok := false ; % locally defined and undefined
+ else :
+ ok := true ; % globally already defined
+ fi ;
+ if not ok :
+ save ss ; string ss ; ss := p & " " & decimal s ;
+ _spotcolor_counter_ := _spotcolor_counter_ + 1 ;
+ spotcolorpattern[_spotcolor_counter_/1000] := ss ;
+ spotcolorhash[pp][s] := _spotcolor_counter_ ;
+ flush_special(2, 5, decimal _spotcolor_counter_ & " " & ss) ;
+ _local_specials_ := _local_specials_ &
+ "spotcolorhash["&decimal pp&"]["&decimal s&"]:=-1;" ;
+ fi ;
+ (_special_signal_/1000,2/1000,spotcolorhash[pp][s]/1000)
+ else :
+ (1-s,1-s,1-s)
+ fi
+enddef ;
+
%D Transparency
normaltransparent := 1 ; multiplytransparent := 2 ;
@@ -423,8 +455,8 @@ differencetransparent := 11 ; exclusiontransparent := 12 ;
% fill fullcircle scaled 10cm withcolor transparant(.8,3,color) ;
vardef transparent(expr n, t, c) =
- save s, ss, nn, cc, is_cmyk, ok ;
- string s, ss ; numeric nn ; color cc ; boolean is_cmyk, ok ;
+ save s, ss, nn, cc, is_cmyk, is_spot, ok ;
+ string s, ss ; numeric nn ; color cc ; boolean is_cmyk, is_spot, ok ;
% transparancy type
if string n :
if expandafter known scantokens(n&"transparent") :
@@ -440,9 +472,13 @@ vardef transparent(expr n, t, c) =
% check for cmyk special
is_cmyk := (redpart cc = _special_signal_/1000)
and (greenpart cc = 1/1000) ;
+ is_spot := (redpart cc = _special_signal_/1000)
+ and (greenpart cc = 2/1000) ;
% build special string, fetch cmyk components
- s := decimal nn & " " & decimal t & " " & if is_cmyk :
- cmykcolorpattern[bluepart cc] else : dddecimal cc fi ;
+ s := decimal nn & " " & decimal t & " " &
+ if is_cmyk : cmykcolorpattern[bluepart cc]
+ elseif is_spot : spotcolorpattern[bluepart cc]
+ else : dddecimal cc fi ;
% check if this one is already used
ss := "tr_" & s ;
% efficiency hack
@@ -454,20 +490,24 @@ vardef transparent(expr n, t, c) =
ok := true ; % globally already defined
fi ;
if not ok :
- if is_cmyk :
- flush_special(3, 8, s) ;
- else :
- flush_special(2, 7, s) ;
+ if is_spot :
+ flush_special(5, 6, s) ;
+ elseif is_cmyk :
+ flush_special(4, 8, s) ;
+ else :
+ flush_special(3, 7, s) ;
fi ;
scantokens(ss) := _special_counter_ ;
_local_specials_ := _local_specials_ &
"scantokens(" & ditto & ss & ditto & ") := -1 ;" ;
fi ;
% go ahead
- if is_cmyk :
- (_special_signal_/1000,3/1000,scantokens(ss)/1000)
+ if is_spot :
+ (_special_signal_/1000,5/1000,scantokens(ss)/1000)
+ elseif is_cmyk :
+ (_special_signal_/1000,4/1000,scantokens(ss)/1000)
else :
- (_special_signal_/1000,2/1000,scantokens(ss)/1000)
+ (_special_signal_/1000,3/1000,scantokens(ss)/1000)
fi
enddef ;
@@ -482,4 +522,29 @@ def register (expr label, width, height, offset) =
endgroup ;
enddef ;
+%D We cannot scale cmyk colors directly since this spoils
+%D the trigger signal (such colors are no real colors).
+
+vardef scaledcmyk(expr c,m,y,k,sf) =
+ cmyk(sf*c,sf*m,sf*y,sf*k)
+enddef ;
+
+vardef scaledcmykasrgb(expr c,m,y,k,sf) =
+ (sf*(1-c-k,1-m-k,1-y-k))
+enddef ;
+
+vardef scaledrgbascmyk(expr c,m,y,k,sf) =
+ scaledcmyk(1-c,1-m,1-y,0,sf)
+enddef ;
+
+vardef scaledrgb(expr r,g,b,sf) =
+ (sf*(r,g,b))
+enddef ;
+
+vardef scaledgray(expr s,sf) =
+ (sf*(s,s,s))
+enddef ;
+
+% spotcolor is already scaled
+
endinput ;
diff --git a/metapost/context/mp-symb.mp b/metapost/context/mp-symb.mp
index edf2b44d3..a84c84e82 100644
--- a/metapost/context/mp-symb.mp
+++ b/metapost/context/mp-symb.mp
@@ -27,7 +27,6 @@ path lefttriangle, righttriangle, sublefttriangle, subrighttriangle;
pair s ; s = (2wb,0) ;
-
x1t = x2t = 0;
x3t = wt;
y3t = .5h;
diff --git a/metapost/context/mp-tool.mp b/metapost/context/mp-tool.mp
index 1c8dc83f2..210c34632 100644
--- a/metapost/context/mp-tool.mp
+++ b/metapost/context/mp-tool.mp
@@ -60,27 +60,27 @@ string semicolor ; semicolor := char 59 ;
% eerste " " er uit
+string space ; space = char 32 ;
+
vardef ddecimal primary p =
- " " & decimal xpart p &
- " " & decimal ypart p
+ decimal xpart p & " " & decimal ypart p
enddef ;
extra_endfig := extra_endfig
- & "special "
+ & "special "
& "("
& ditto
- & "%%HiResBoundingBox:"
+ & "%%HiResBoundingBox: "
& ditto
& "&ddecimal llcorner currentpicture"
+ & "&space"
& "&ddecimal urcorner currentpicture"
& ");";
%D Also handy (when we flush colors):
vardef dddecimal primary c =
- " " & decimal redpart c &
- " " & decimal greenpart c &
- " " & decimal bluepart c
+ decimal redpart c & " " & decimal greenpart c & " " & decimal bluepart c
enddef ;
%D We have standardized data file names:
@@ -1343,7 +1343,7 @@ vardef anglebetween (expr a, b, str) = % path path string
curve := pointa..controls middle..pointb ;
middle := point .5 along curve ;
fi ;
- draw thefreelabel(str, middle, common) withcolor black ;
+ draw thefreelabel(str, middle, common) ; % withcolor black ;
curve
enddef ;
@@ -1635,38 +1635,107 @@ def remappedcolor(expr c) =
fi
enddef ;
-def refill suffix c = do_repath (1) (c) enddef ;
-def redraw suffix c = do_repath (2) (c) enddef ;
-def recolor suffix c = do_repath (0) (c) enddef ;
+% def refill suffix c = do_repath (1) (c) enddef ;
+% def redraw suffix c = do_repath (2) (c) enddef ;
+% def recolor suffix c = do_repath (0) (c) enddef ;
+%
+% color refillbackground ; refillbackground := (1,1,1) ;
+%
+% def do_repath (expr mode) (suffix c) text t = % can it be stroked and filled at the same time ?
+% begingroup ;
+% if mode=0 : save withcolor ; remapcolors ; fi ;
+% save _c_, _cc_, _f_, _b_ ; picture _c_, _cc_ ; color _f_ ; path _b_ ;
+% _c_ := c ; _b_ := boundingbox c ; c := nullpicture ;
+% for i within _c_ :
+% _f_ := (redpart i, greenpart i, bluepart i) ;
+% if bounded i :
+% setbounds c to pathpart i ;
+% elseif clipped i :
+% clip c to pathpart i ;
+% elseif stroked i :
+% addto c doublepath pathpart i
+% dashed dashpart i withpen penpart i
+% withcolor _f_ % (redpart i, greenpart i, bluepart i)
+% if mode=2 : t fi ;
+% elseif filled i :
+% addto c contour pathpart i
+% withcolor _f_
+% if (mode=1) and (_f_<>refillbackground) : t fi ;
+% else :
+% addto c also i ;
+% fi ;
+% endfor ;
+% setbounds c to _b_ ;
+% endgroup ;
+% enddef ;
+
+% Thanks to Jens-Uwe Morawski for pointing out that we need
+% to treat bounded and clipped components as local pictures.
+
+def recolor suffix p = p := repathed (0,p) enddef ;
+def refill suffix p = p := repathed (1,p) enddef ;
+def redraw suffix p = p := repathed (2,p) enddef ;
+def retext suffix p = p := repathed (3,p) enddef ;
+def untext suffix p = p := repathed (4,p) enddef ;
+
+primarydef p recolored t = repathed(0,p) t enddef ;
+primarydef p refilled t = repathed(1,p) t enddef ;
+primarydef p redrawn t = repathed(2,p) t enddef ;
+primarydef p retexted t = repathed(3,p) t enddef ;
+primarydef p untexted t = repathed(4,p) t enddef ;
color refillbackground ; refillbackground := (1,1,1) ;
-def do_repath (expr mode) (suffix c) text t = % can it be stroked and filled at the same time ?
+vardef repathed (expr mode, p) text t =
begingroup ;
if mode=0 : save withcolor ; remapcolors ; fi ;
- save _c_, _f_, _b_ ; picture _c_ ; color _f_ ; path _b_ ;
- _c_ := c ; _b_ := boundingbox c ; c := nullpicture ;
- for i within _c_ :
+ save _p_, _pp_, _f_, _b_, _t_ ;
+ picture _p_, _pp_ ; color _f_ ; path _b_ ; transform _t_ ;
+ _b_ := boundingbox p ; _p_ := nullpicture ;
+ for i within p :
_f_ := (redpart i, greenpart i, bluepart i) ;
if bounded i :
- setbounds c to pathpart i ;
+ _pp_ := repathed(mode,i) t ;
+ setbounds _pp_ to pathpart i ;
+ addto _p_ also _pp_ ;
elseif clipped i :
- clip c to pathpart i ;
+ _pp_ := repathed(mode,i) t ;
+ clip _pp_ to pathpart i ;
+ addto _p_ also _pp_ ;
elseif stroked i :
- addto c doublepath pathpart i
+ addto _p_ doublepath pathpart i
dashed dashpart i withpen penpart i
withcolor _f_ % (redpart i, greenpart i, bluepart i)
if mode=2 : t fi ;
elseif filled i :
- addto c contour pathpart i
+ addto _p_ contour pathpart i
withcolor _f_
if (mode=1) and (_f_<>refillbackground) : t fi ;
+ elseif textual i : % textpart i <> "" :
+ if mode <> 4 :
+ % transform _t_ ;
+ % (xpart _t_, xxpart _t_, xypart _t_) = (xpart i, xxpart i, xypart i) ;
+ % (ypart _t_, yypart _t_, yxpart _t_) = (ypart i, yypart i, yxpart i) ;
+ % addto _p_ also
+ % textpart i infont fontpart i % todo : other font
+ % transformed _t_
+ % withpen penpart i
+ % withcolor _f_
+ % if mode=3 : t fi ;
+ addto _p_ also i if mode=3 : t fi ;
+ fi ;
+ else :
+ addto _p_ also i ;
fi ;
endfor ;
- setbounds c to _b_ ;
- endgroup ;
+ setbounds _p_ to _b_ ;
+ _p_
+ endgroup
enddef ;
+
+
+
% After a question of Denis on how to erase a z variable, Jacko
% suggested to assign whatever to x and y. So a clearz
% variable can be defined as:
@@ -1771,7 +1840,7 @@ def [[ = [ [ enddef ; def [[[ = [ [ [ enddef ;
% not prefect, but useful since it removes redundant points.
vardef dostraightened(expr sign, p) =
- if length(p)>1 :
+ if length(p)>2 : % was 1, but straight lines are ok
save pp ; path pp ;
pp := point 0 of p ;
for i=1 upto length(p)-1 :
@@ -1781,15 +1850,9 @@ vardef dostraightened(expr sign, p) =
endfor ;
save n, ok ; numeric n ; boolean ok ;
n := length(pp) ; ok := false ;
+if n>2 :
for i=0 upto n : % evt hier ook round
-%% if unitvector(point i of pp -
-%% point if i=0 : n else : i-1 fi of pp) <>
-%% sign * unitvector(point if i=n : 0 else : i+1 fi of pp -
-%% point i of pp) :
-%% if ok : -- else : hide ( ok := true ; ) fi point i of pp
-%% fi
-
if unitvector(round(point i of pp -
point if i=0 : n else : i-1 fi of pp)) <>
sign * unitvector(round(point if i=n : 0 else : i+1 fi of pp -
@@ -1799,6 +1862,9 @@ vardef dostraightened(expr sign, p) =
endfor
if ok and (cycle p) : -- cycle fi
+else :
+ pp
+fi
else :
p
fi
@@ -1807,8 +1873,16 @@ enddef ;
% simplified : remove same points as well as redundant points
% unspiked : remove same points as well as areas with zero distance
-vardef simplified expr p = dostraightened(+1,p) enddef ;
-vardef unspiked expr p = dostraightened(-1,p) enddef ;
+% vardef simplified expr p = dostraightened(+1,p) enddef ;
+% vardef unspiked expr p = dostraightened(-1,p) enddef ;
+
+vardef simplified expr p =
+ (reverse dostraightened(+1,dostraightened(+1,reverse p)))
+enddef ;
+
+vardef unspiked expr p =
+ (reverse dostraightened(-1,dostraightened(-1,reverse p)))
+enddef ;
% path p ;
% p := (2cm,1cm) -- (2cm,1cm) -- (2cm,1cm) -- (3cm,1cm) --
@@ -1940,7 +2014,39 @@ vardef infinite expr p =
shifted point length(p) of p)
enddef ;
+% obscure macros: create var from string and replace - and :
+% (needed for process color id's)
+
+string _clean_ascii[] ;
+
+_clean_ascii[ASCII "-"] := "_" ;
+_clean_ascii[ASCII ":"] := "_" ;
+_clean_ascii[ASCII "."] := "_" ;
+
+vardef cleanstring (expr s) =
+ save ss ; string ss, si ; ss = "" ;
+ for i=0 upto length(s) :
+ si := substring(i,i+1) of s ;
+ ss := ss & if known _clean_ascii[ASCII si] : _clean_ascii[ASCII si] else : si fi ;
+ endfor ;
+ ss
+enddef ;
+
+vardef setunstringed (expr s, v) =
+ scantokens(cleanstring(s)) := v ;
+enddef ;
+
+vardef setunstringed (expr s, v) =
+ scantokens(cleanstring(s)) := v ;
+enddef ;
+vardef getunstringed (expr s) =
+ scantokens(cleanstring(s))
+enddef ;
+
+vardef unstringed (expr s) =
+ expandafter known scantokens(cleanstring(s))
+enddef ;
% done
diff --git a/tex/context/base/colo-ini.tex b/tex/context/base/colo-ini.tex
index f88d3b094..c23efdf38 100644
--- a/tex/context/base/colo-ini.tex
+++ b/tex/context/base/colo-ini.tex
@@ -14,6 +14,7 @@
\writestatus{loading}{Context Color Macros}
%D To do: stroke versus fill color
+%D 1000 100 10 -> constants
\unprotect
@@ -219,7 +220,10 @@
%D \setvalue{\??cr name}{S:s:a:t}
%D \stoptypen
-\let\colorlist\empty
+\newif\iffreezecolors \freezecolorsfalse
+
+\let\colorlist \empty
+\let\currentspotcolor\empty
\def\@@cl@@z{0}
\def\@@cl@@o{1}
@@ -227,36 +231,168 @@
\def\@@resetcolorparameters
{\let\@@cl@@r\@@cl@@z\let\@@cl@@g\@@cl@@z\let\@@cl@@b\@@cl@@z
\let\@@cl@@c\@@cl@@z\let\@@cl@@m\@@cl@@z\let\@@cl@@y\@@cl@@z
- \let\@@cl@@k\@@cl@@z\let\@@cl@@s\@@cl@@z
- \let\@@cl@@t\@@cl@@z\let\@@cl@@a\@@cl@@z}
+ \let\@@cl@@k\@@cl@@z\let\@@cl@@s\@@cl@@z\let\@@cl@@p\@@cl@@o
+ \let\@@cl@@t\@@cl@@z\let\@@cl@@a\@@cl@@z\let\@@cl@@n\empty}
\def\@@cl@@A{\@@cl@@a} % a hook for symbolic conversion, see below
-\def\colorZpattern{S:\@@cl@@z:\@@cl@@A:\@@cl@@t}
-\def\colorSpattern{S:\@@cl@@s:\@@cl@@A:\@@cl@@t}
-\def\colorCpattern{C:\@@cl@@c:\@@cl@@m:\@@cl@@y:\@@cl@@k:\@@cl@@A:\@@cl@@t}
-\def\colorRpattern{R:\@@cl@@r:\@@cl@@g:\@@cl@@b:\@@cl@@A:\@@cl@@t}
+%D Handling a few nested \type{\cs}'s is no problem (\type
+%D {\@EA\@EAEAEA\@EA}) but we need a full expansion, so I
+%D tried one of the fully expandable primitives using a sort
+%D of delimited thing. I tried \type {\number} first, but this
+%D does not work, but \type {\romannumeral} does. Actually,
+%D \type{\romannumeral0} returns nothing, so it's a perfect
+%D candidate for this kind of hackery. This reminds me that I
+%D have to look into David Karstrup's (check spelling)
+%D Euro\TeX\ 2002 article because he is using \type
+%D {\romannumeral} for loops (repetitive \quote {m} stuff).
+
+% \def\x{\y}\def\y{\z}\def\z{0:1:1:1}
+%
+% \def\bla #1:#2:#3\end{}
+%
+% \@EA\bla\romannumeral\x\end
+
+\def\colorXpattern{0S:\@@cl@@z:\@@cl@@z:\@@cl@@z}
+\def\colorZpattern{0S:\@@cl@@z:\@@cl@@A:\@@cl@@t}
+\def\colorSpattern{0S:\@@cl@@s:\@@cl@@A:\@@cl@@t}
+\def\colorCpattern{0C:\@@cl@@c:\@@cl@@m:\@@cl@@y:\@@cl@@k:\@@cl@@A:\@@cl@@t}
+\def\colorRpattern{0R:\@@cl@@r:\@@cl@@g:\@@cl@@b:\@@cl@@A:\@@cl@@t}
+\def\colorPpattern{0P:\@@cl@@n:\@@cl@@p:\@@cl@@A:\@@cl@@t}
-\def\definecolor
- {\dodoubleargument\dodefinecolor}
+%D The extra 0 catches empty colors specs (needed for the
+%D \type {\MPcolor} and \type {\PDFcolor} conversion (\type
+%D {\@@cr} equals \type {\relax}!).
+
+\def\handlecolorwith#1{\@EA#1\romannumeral0}
-\def\dodefinecolor[#1][#2]%
- {\addtocommalist{#1}\colorlist
- \doifassignmentelse{#2}
+%D Next comes the main definition macro.
+
+\def\definecolor {\dodoubleargument\dodefinecolor}
+\def\defineglobalcolor{\dodoubleargument\dodefineglobalcolor}
+\def\definenamedcolor {\dodoubleargument\dodefinenamedcolor}
+
+\def\dodefinecolor {\dododefinecolor\relax \setvalue \setevalue1}
+\def\dodefineglobalcolor{\dododefinecolor\doglobal\setgvalue\setxvalue1}
+\def\dodefinenamedcolor {\dododefinecolor\doglobal\setvalue \setevalue0}
+
+% keep this for readability
+%
+% \def\dodefinecolor[#1][#2]%
+% {\addtocommalist{#1}\colorlist
+% \doifassignmentelse{#2}
+% {\@@resetcolorparameters
+% \getparameters[\??cl @@][#2]%
+% \doifelse{\@@cl@@r\@@cl@@g\@@cl@@b}{\@@cl@@z\@@cl@@z\@@cl@@z}
+% {\doifelse{\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k}{\@@cl@@z\@@cl@@z\@@cl@@z\@@cl@@z}
+% {\doifelse\@@cl@@s\@@cl@@z
+% {\showmessage\m!colors8{{[#2]},#1}%
+% \setevalue{\??cr#1}{\colorZpattern}}
+% {\setevalue{\??cr#1}{\colorSpattern}}}
+% {\setevalue{\??cr#1}{\colorCpattern}}}
+% {\setevalue{\??cr#1}{\colorRpattern}}}
+% {\doifdefinedelse{\??cr#2}
+% {\doifelse{#1}{#2}
+% {% this way we can freeze \definecolor[somecolor][somecolor]
+% % and still prevent cyclic definitions
+% \iffreezecolors\setevalue{\??cr#1}{\getvalue{\??cr#2}}\fi}
+% {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi
+% {\??cr#1}{\getvalue{\??cr#2}}}}
+% {\showmessage\m!colors3{#1}}}%
+% \unexpanded\setvalue{#1}{\color[#1]}} % \unexpanded toegevoegd
+
+\def\dododefinecolor#1#2#3#4[#5][#6]% #2==set(g)value #3==set[e|x]value
+ {#1\addtocommalist{#5}\colorlist
+ \doifassignmentelse{#6}
{\@@resetcolorparameters
- \getparameters[\??cl @@][#2]%
+ \getparameters[\??cl @@][#6]%
\doifelse{\@@cl@@r\@@cl@@g\@@cl@@b}{\@@cl@@z\@@cl@@z\@@cl@@z}
{\doifelse{\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k}{\@@cl@@z\@@cl@@z\@@cl@@z\@@cl@@z}
- {\doifelse{\@@cl@@s}{\@@cl@@z}
- {\showmessage{\m!colors}{8}{{[#2]},#1}%
- \setevalue{\??cr#1}{\colorZpattern}}
- {\setevalue{\??cr#1}{\colorSpattern}}}
- {\setevalue{\??cr#1}{\colorCpattern}}}
- {\setevalue{\??cr#1}{\colorRpattern}}}
- {\doifdefinedelse{\??cr#2}
- {\setevalue{\??cr#1}{\getvalue{\??cr#2}}}
- {\showmessage{\m!colors}{3}{#1}}}%
- \unexpanded\setvalue{#1}{\color[#1]}} % \unexpanded toegevoegd
+ {\doifelse\@@cl@@s\@@cl@@z
+ {\showmessage\m!colors8{{[#6]},#5}%
+ #3{\??cr#5}{\colorZpattern}}
+ {#3{\??cr#5}{\colorSpattern}}}
+ {#3{\??cr#5}{\colorCpattern}}}
+ {#3{\??cr#5}{\colorRpattern}}}
+ {\doifdefinedelse{\??cr#6}
+ {\doifelse{#5}{#6}
+ {% this way we can freeze \definecolor[somecolor][somecolor]
+ % and still prevent cyclic definitions
+ \iffreezecolors#3{\??cr#5}{\getvalue{\??cr#6}}\fi}
+ {\iffreezecolors\@EA#3\else\@EA#2\fi
+ {\??cr#5}{\getvalue{\??cr#6}}}}
+ {\showmessage\m!colors3{#5}}}%
+ \ifcase#4\or
+ \unexpanded#2{#5}{\switchtocolor[#5]}% \unexpanded toegevoegd
+ \fi}
+
+%D New and experimental.
+
+\let\allspotcolors\empty
+
+\def\definespotcolor % [name] [color] [p=,t=,a=]
+ {\dotripleempty\dodefinespotcolor}
+
+\def\dodefinespotcolor[#1][#2][#3]%
+ {\doifnot{#1}{#2}
+ {\@@resetcolorparameters
+ \edef\@@cl@@n{#2}%
+ \getparameters[\??cl @@][#3]%
+ \doifnothing\@@cl@@p{\let\@@cl@@p\!!plusone}%
+ \doglobal\addtocommalist{#2}\allspotcolors
+ \setevalue{\??cr#1}{\colorPpattern}%
+ \setvalue{#1}{\switchtocolor[#1]}}}
+
+\let\usedspotcolors\empty
+
+\def\registerusedspotcolors
+ {\ifx\allspotcolors\empty \else
+ \bgroup
+ \let\usedspotcolors\empty
+ \def\docommando##1%
+ {\doifdefined{\??cs##1}{\addtocommalist{##1}\usedspotcolors}}%
+ \processcommacommand[\allspotcolors]\docommando
+ \savecurrentvalue\usedspotcolors\usedspotcolors
+ \egroup
+ \fi}
+
+\let\usedcolorchannels\empty
+
+\def\registerusedcolorchannels
+ {\bgroup
+ \doifdefinedelse{\??cs c}
+ {\def\usedcolorchannels{c,m,y,k}}%
+ {\let\usedcolorchannels\empty}%
+ \doifdefined{\??cs r}
+ {\addtocommalist{r,g,b}\usedcolorchannels}%
+ \doifdefined{\??cs s}
+ {\ExpandBothAfter\doifnotinset{k}\usedcolorchannels
+ {\addtocommalist{s}\usedcolorchannels}}%
+ \savecurrentvalue\usedcolorchannels\usedcolorchannels
+ \egroup}
+
+\prependtoks
+ \registerusedspotcolors
+ \registerusedcolorchannels
+\to \everylastshipout
+
+\def\registerusedspotcolor#1%
+ {\global\@EA\chardef\csname\??cs#1\endcsname\zerocount}
+
+%D We now redefine the color definition macro so that you
+%D can define both normal and spotcolors.
+
+\def\definecolor
+ {\dotripleempty\dodefinewhatevercolor}
+
+\def\dodefinewhatevercolor[#1][#2][#3]%
+ {\ifthirdargument
+ \doifassignmentelse{#2}
+ {\dododefinecolor[#1][#2,#3]}% actually this is an error
+ {\dodefinespotcolor[#1][#2][#3]}%
+ \else
+ \dodefinecolor[#1][#2]%
+ \fi}
%D The names of colors are stored in a comma separated list
%D only for the purpose of showing them with \type {\showcolor}.
@@ -264,8 +400,24 @@
%D \typebuffer
%D \haalbuffer
%D
-%D This color shows up as \color[SomeKindOfRed]{some kind
+%D This color shows up as \color [SomeKindOfRed] {some kind
%D of red}.
+%D
+%D \starttypen
+%D \setupcolors[state=start]
+%D
+%D \definecolor[mygreen][green]
+%D \definecolor[green][g=.5]
+%D
+%D \startcolor[mygreen]test\stopcolor
+%D
+%D \setupcolors[expansion=no]
+%D
+%D \definecolor[mygreen][green]
+%D \definecolor[green][g=.5]
+%D
+%D \startcolor[mygreen]test\stopcolor
+%D \stoptypen
%D \macros
%D {setupcolor}
@@ -290,11 +442,11 @@
\let\colorstyle\empty
-\def\setupcolor%
+\def\setupcolor
{\dosingleargument\dosetupcolor}
\def\dosetupcolor[#1]%
- {\doifnot{#1}{\colorstyle}
+ {\doifnot{#1}\colorstyle
{\def\colorstyle{#1}%
\processcommalist[#1]\dodosetupcolor}}
@@ -327,6 +479,7 @@
\newif\ifRGBsupported
\newif\ifCMYKsupported
+\newif\ifSPOTsupported
\newif\ifpreferGRAY
\newif\ifGRAYprefered
\newif\ifreduceCMYK
@@ -381,9 +534,9 @@
\def\dowithcolor#1#2% #1=\action #2=color
{\ifincolor\ifpermitcolormode
\ifcsname\??cr\currentpalet#2\endcsname
- \@EAEAEA#1\csname\??cr\currentpalet#2\endcsname\od
+ \handlecolorwith#1\csname\??cr\currentpalet#2\endcsname\od
\else\ifcsname\??cr#2\endcsname
- \@EAEAEA#1\csname\??cr#2\endcsname\od
+ \handlecolorwith#1\csname\??cr#2\endcsname\od
\fi\fi
\fi\fi}
@@ -395,22 +548,33 @@
{\ifincolor\ifpermitcolormode
\@EA\ifx\csname\??cr\currentpalet#2\endcsname\relax
\@EA\ifx\csname\??cr#2\endcsname\relax \else
- \@EAEAEA#1\csname\??cr#2\endcsname\od
+ \handlecolorwith#1\csname\??cr#2\endcsname\od
\fi
\else
- \@EAEAEA#1\csname\??cr\currentpalet#2\endcsname\od
+ \handlecolorwith#1\csname\??cr\currentpalet#2\endcsname\od
\fi
\fi\fi}
\endTEX
\def\startcolormode % includes \ifincolor\ifpermitcolormode
- {\dowithcolor\execcolorRCS}
+ {%\dostoptransparency % needed for: {test \trans test \notrans test}
+ \conditionalstoptransparency
+ \dowithcolor\execcolorRCSP}
\def\stopcolormode
{\ifincolor\ifpermitcolormode
+ \dostoptransparency
+ \dostopcolormode
+ \fi\fi}
+
+\def\restorecolormode
+ {\ifincolor\ifpermitcolormode
\dostoptransparency
\dostopcolormode
+ \ifx\maintextcolor\empty \else
+ \startcolormode\maintextcolor
+ \fi
\fi\fi}
%D Color modes are entered using the next set of commands.
@@ -420,54 +584,277 @@
%D The, for this module redundant, check if we are in color
%D mode is needed when we use these macros in other modules.
-\def\execcolorRCS#1:%
+\chardef\currentcolorchannel=0
+
+\newif\iffilterspotcolor \filterspotcolorfalse
+\newif\ifdoingspotcolor \doingspotcolorfalse
+
+\def\registercolorchannel#1%
+ {\ifdoingspotcolor \else
+ \global\expandafter\chardef\csname\??cs#1\endcsname\zerocount
+ \fi}
+
+\def\execcolorRCSP#1:%
{\csname execcolor#1\endcsname}
-\def\execcolorR#1:#2:#3:%
+\def\execcolorR
+ {\iffilterspotcolor
+ \@EA\noexeccolor
+ \else
+ \@EA\doexeccolorR
+ \fi}
+
+\def\execcolorC
+ {\iffilterspotcolor
+ \@EA\noexeccolor
+ \else
+ \@EA\doexeccolorC
+ \fi}
+
+\def\execcolorS
+ {\iffilterspotcolor
+ \@EA\noexeccolorS
+ \else
+ \@EA\doexeccolorS
+ \fi}
+
+\def\execcolorP
+ {\iffilterspotcolor
+ \@EA\doexeccolorPP
+ \else\ifcase\currentcolorchannel
+ \@EAEAEA\doexeccolorP
+ \else
+ \@EAEAEA\noexeccolorP
+ \fi\fi}
+
+\def\doexeccolorR#1:#2:#3:%
{\edef\@@cl@@r{#1}\edef\@@cl@@g{#2}\edef\@@cl@@b{#3}%
\ifpreferGRAY\ifx\@@cl@@r\@@cr@@g\ifx\@@cl@@r\@@cl@@b
\GRAYpreferedtrue
\fi\fi\fi
\ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
\ifGRAYprefered
- \dostartgraycolormode\@@cl@@r
+ \registercolorchannel\c!s
+ \let\@@cl@@s\@@cl@@r
+ \normalizeGRAY
+ \doexeccolorgray
\else\ifRGBsupported
- \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b
+ \registercolorchannel\c!r
+ \normalizeRGB
+ \doexeccolorrgb
\else\ifCMYKsupported
+ \registercolorchannel\c!c
\convertRGBtoCMYK\@@cl@@r\@@cl@@g\@@cl@@b
- \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+\normalizeCMYK
+ \doexeccolorcmyk
\else
+ \registercolorchannel\c!s
\convertRGBtoGRAY\@@cl@@r\@@cl@@g\@@cl@@b
- \dostartgraycolormode\@@cl@@s
+\normalizeGRAY
+ \doexeccolorgray
\fi\fi\fi
\exectransparency}
-
-\def\execcolorC#1:#2:#3:#4:%
+
+\def\doexeccolorC#1:#2:#3:#4:%
{\edef\@@cl@@c{#1}\edef\@@cl@@m{#2}\edef\@@cl@@y{#3}\edef\@@cl@@k{#4}%
\ifpreferGRAY\ifx\@@cl@@k\@@cl@@z\ifx\@@cl@@c\@@cr@@m\ifx\@@cl@@c\@@cl@@y
\GRAYpreferedtrue
\fi\fi\fi\fi
\ifincolor\else\RGBsupportedfalse\CMYKsupportedfalse\fi
\ifGRAYprefered
- \dostartgraycolormode\@@cl@@c
+ \registercolorchannel\c!s
+ \let\@@cl@@s\@@cl@@c
+ \normalizeGRAY
+ \doexeccolorgray
\else\ifCMYKsupported
+ \registercolorchannel\c!c
\ifreduceCMYK
\convertCMYKtoCMY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \fi
- \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+% \else
+% \normalizeCMYK
+% \fi
+\fi
+\normalizeCMYK
+ \doexeccolorcmyk
\else\ifRGBsupported
+ \registercolorchannel\c!r
\convertCMYKtoRGB\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b
+\normalizeRGB
+ \doexeccolorrgb
\else
+ \registercolorchannel\c!s
\convertCMYKtoGRAY\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
- \dostartgraycolormode\@@cl@@s
+\normalizeGRAY
+ \doexeccolorgray
\fi\fi\fi
\exectransparency}
-
-\def\execcolorS#1:%
- {\dostartgraycolormode{#1}%
+
+\def\doexeccolorS#1:%
+ {\edef\@@cl@@s{#1}%
+ \registercolorchannel\c!s
+ \normalizeGRAY
+ \doexeccolorgray
\exectransparency}
+\def\doexeccolorP#1:#2:%
+ {\edef\@@cl@@n{#1}%
+ \edef\@@cl@@p{#2}%
+ \registerusedspotcolor\@@cl@@n
+ \ifSPOTsupported
+ \dowithcolor\registerspotcolor\@@cl@@n
+ \dostartspotcolormode\@@cl@@n\@@cl@@p
+ \else
+ \doingspotcolortrue
+ \let\spotcolorfactor\@@cl@@p
+ \factorizecolortrue % using counter and array
+ \dowithcolor\execcolorRCSP\@@cl@@n
+ \factorizecolorfalse
+\let\spotcolorfactor\@@cl@@o
+ \doingspotcolorfalse
+ \fi
+ \exectransparency}
+
+\def\doexeccolorPP#1:#2:%
+ {\edef\@@cl@@n{#1}%
+ \edef\@@cl@@p{#2}%
+ \registerusedspotcolor\@@cl@@n
+ \ifx\@@cl@@n\currentspotcolor
+ \normalizeSPOT
+ \dostartgraycolormode\@@cl@@p % was spotcolormode
+ \else
+ \dostartgraycolormode\@@cl@@o
+ \fi
+ \exectransparency}
+
+\def\doexeccolorrgb
+ {\ifcase\currentcolorchannel
+ \dostartrgbcolormode\@@cl@@r\@@cl@@g\@@cl@@b
+ \or \or \or \or
+ \or \dostartgraycolormode\@@cl@@r
+ \or \dostartgraycolormode\@@cl@@g
+ \or \dostartgraycolormode\@@cl@@b
+ \fi}
+
+\def\doexeccolorcmyk
+ {\ifcase\currentcolorchannel
+ \dostartcmykcolormode\@@cl@@c\@@cl@@m\@@cl@@y\@@cl@@k
+ \or \negatecolorcomponent\@@cl@@c\dostartgraycolormode\@@cl@@c
+ \or \negatecolorcomponent\@@cl@@m\dostartgraycolormode\@@cl@@m
+ \or \negatecolorcomponent\@@cl@@y\dostartgraycolormode\@@cl@@y
+ \or \negatecolorcomponent\@@cl@@k\dostartgraycolormode\@@cl@@k
+ \fi}
+
+\def\doexeccolorgray
+ {\ifcase\currentcolorchannel
+ \dostartgraycolormode\@@cl@@s
+ \or \or \or
+ \or \dostartgraycolormode\@@cl@@s
+ \or \or \or
+ \or \dostartgraycolormode\@@cl@@s
+ \fi}
+
+%D When filtering colors, we need to either erase
+%D the background, or ignore the foreground.
+
+\newif\ifhidesplitcolor \hidesplitcolortrue
+
+\def\noexeccolor#1\od
+ {\dostartgraycolormode\@@cl@@o}
+
+\let\noexeccolorS\noexeccolor
+\let\noexeccolorP\noexeccolor
+
+%D For the sake of postprocessing (i.e.\ color separation)
+%D we can normalize colors, which comes down to giving equal
+%D values an equal accuracy and format. This feature is
+%D turned off by default due to a speed penalty. This macro
+%D also handles spot color precentages.
+
+\newif\iffactorizecolor
+\newif\ifnormalizecolor
+
+\def\spotcolorfactor{1}
+
+\def\normalizecolor#1%
+ {\colordimen#1\thousandpoint
+ \colordimen\spotcolorfactor\colordimen
+ \colorcount\colordimen
+ \advance\colorcount \medcard
+ \divide\colorcount \maxcard
+ \edef#1{\realcolorvalue\colorcount}}
+
+\def\normalizespotcolor#1%
+ {\colordimen-#1\thousandpoint
+ \advance\colordimen\thousandpoint
+ \colorcount\colordimen
+ \advance\colorcount \medcard
+ \divide\colorcount \maxcard
+ \edef#1{\realcolorvalue\colorcount}}
+
+\def\donormalizeRGB
+ {\normalizecolor\@@cl@@r
+ \normalizecolor\@@cl@@g
+ \normalizecolor\@@cl@@b}
+
+\def\normalizeRGB
+ {\ifnormalizecolor
+ \donormalizeRGB
+ \else\iffactorizecolor
+ \donormalizeRGB
+ \fi\fi}
+
+\def\donormalizeCMYK
+ {\normalizecolor\@@cl@@c
+ \normalizecolor\@@cl@@m
+ \normalizecolor\@@cl@@y
+ \normalizecolor\@@cl@@k}
+
+\def\normalizeCMYK
+ {\ifnormalizecolor
+ \donormalizeCMYK
+ \else\iffactorizecolor
+ \donormalizeCMYK
+ \fi\fi}
+
+\def\donormalizeGRAY
+ {\normalizecolor\@@cl@@s}
+
+\def\normalizeGRAY
+ {\ifnormalizecolor
+ \donormalizeGRAY
+ \else\iffactorizecolor
+ \donormalizeGRAY
+ \fi\fi}
+
+\def\normalizeSPOT
+ {\normalizespotcolor\@@cl@@p}
+
+%D We need to register spot colors (i.e.\ resources need to
+%D be created.
+
+\def\registerspotcolor#1:%
+ {\ifundefined{\??cl:\c!p:\@@cl@@n}%
+ \letgvalue{\??cl:\c!p:\@@cl@@n}\empty
+ \@EA\@EA\csname registerspotcolor#1\endcsname
+ \else
+ \@EA\dontregistersplotcolor
+ \fi}
+
+\def\dontregistersplotcolor#1\od
+ {}
+
+\def\registerspotcolorR#1:#2:#3:#4\od
+ {\doregisterrgbspotcolor\@@cl@@n{#1}{#2}{#3}}
+
+\def\registerspotcolorC#1:#2:#3:#4:#5\od
+ {\doregistercmykspotcolor\@@cl@@n{#1}{#2}{#3}{#4}}
+
+\def\registerspotcolorS#1:#2\od
+ {\doregistergrayspotcolor\@@cl@@n{#1}}
+
+\def\registerspotcolorP#1:#2:#3\od
+ {\doregistergrayspotcolor\@@cl@@n{#2}}
+
%D Transparency is handled similar for all three color modes. We
%D can turn transparency off with the following switch:
@@ -480,24 +867,46 @@
\expandafter\noexectransparency
\fi}
+%\def\doexectransparency#1:#2\od
+% {\global\@EA\chardef\csname\@@currenttransparent\endcsname % nasty
+% \ifcase#1\space
+% \zerocount
+% \else
+% \plusone
+% \dostarttransparency{#1}{#2}%
+% \fi}
+
\def\doexectransparency#1:#2\od
- {\global\@EA\chardef\csname\@@currenttransparent\endcsname % nasty
- \ifcase#1\space
- \zerocount
+ {\ifcase#1\space
+ \global\intransparentfalse
\else
- \plusone
+ \global\intransparentfalse
\dostarttransparency{#1}{#2}%
+ \global\intransparenttrue
\fi}
\def\noexectransparency#1\od
{}
-%D Todo: minimize resets.
+%D Experimental: minimize transparency resets.
-\def\conditionalstoptransparancy
- {\ifcase\csname\@@currenttransparent\endcsname\or
+\newif\ifintransparent \newif\ifoptimizetransparency
+
+\def\conditionalstoptransparency
+ {\iffilterspotcolor
\dostoptransparency
- \fi}
+ \else\ifcase\currentcolorchannel
+ \ifoptimizetransparency
+ \ifintransparent
+ \dostoptransparency
+ \global\intransparentfalse
+ \fi
+ \else
+ \dostoptransparency
+ \fi
+ \else
+ \dostoptransparency
+ \fi\fi}
%D We now use the \type {\@@cl@@A} hook to implement
%D symbolic names. These are converted into numbers
@@ -566,20 +975,38 @@
%D \stopregistercolor
%D \stoptypen
-\let\maintextcolor\empty
+\let\maintextcolor\empty \def\defaulttextcolor{black}
+
+% \def\starttextcolor[#1]%
+% {\doifsomething{#1}
+% {\bgroup
+% \def\stoptextcolor % also goes ok with \page after
+% {\let\maintextcolor\empty % this one because the top of
+% \stopregistercolor % page sets the color right (side
+% \egroup}% % effect)
+% \def\starttextcolor[##1]%
+% {\bgroup
+% \let\stoptextcolor\egroup}%
+% \startregistercolor[#1]%
+% \edef\maintextcolor{#1}}}
-\def\starttextcolor[#1]%
+\def\@@themaintextcolor{themaintextcolor}
+
+\def\starttextcolor[#1]%
{\doifsomething{#1}
{\bgroup
- \def\stoptextcolor % also goes ok with \page after
- {\let\maintextcolor\empty % this one because the top of
- \stopregistercolor % page sets the color right (side
- \egroup}% % effect)
+ \def\stoptextcolor % also goes ok with \page after
+ {\let\maintextcolor\empty % this one because the top of
+ \stopregistercolor % page sets the color right (side
+ \egroup}% % effect)
\def\starttextcolor[##1]%
{\bgroup
- \let\stoptextcolor\egroup}%
- \startregistercolor[#1]%
- \def\maintextcolor{#1}}}
+ % \@@themaintextcolor==##1 is catched in \definecolor
+ \definecolor[\@@themaintextcolor][##1]%
+ \let\stoptextcolor\egroup}%
+ \startregistercolor[\@@themaintextcolor]%
+ \definecolor[\@@themaintextcolor][#1]%
+ \let\maintextcolor\@@themaintextcolor}}
\let\stoptextcolor\relax
@@ -589,20 +1016,42 @@
\ifx\initializemaintextcolor\undefined
- % \let\initializemaintextcolor\relax
+% \def\initializemaintextcolor
+% {\doifsomething\@@cltekstkleur
+% {\appendtoks\starttextcolor[\@@cltekstkleur]\to\everystarttext
+% \appendtoks\stoptextcolor \to\everystoptext
+% \let\initializemaintextcolor\relax}}
- \def\initializemaintextcolor
- {\doifsomething{\@@cltekstkleur}
- {\appendtoks\starttextcolor[\@@cltekstkleur]\to\everystarttext
- \appendtoks\stoptextcolor \to\everystoptext
- \let\initializemaintextcolor\relax}}
+ % global ?
+ \def\initializemaintextcolor
+ {\doifelsenothing\@@cltekstkleur
+ {\let\maintextcolor\empty}
+ {\let\maintextcolor\@@themaintextcolor
+ \definecolor[\@@themaintextcolor][\@@cltekstkleur]%
+ \doinitializemaintextcolor}}
+
+ \def\doinitializemaintextcolor
+ {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext
+ \appendtoks\stoptextcolor \to\everystoptext
+ \let\doinitializemaintextcolor\relax}
+
\fi
%D The next macro can be used to return to the (normal)
%D page color. This macro is used in the same way as
%D \type {\color}.
+\def\localstarttextcolor
+ {\ifx\maintextcolor\empty
+ \startcolormode\defaulttextcolor
+ \else
+ \startcolormode\maintextcolor
+ \fi}
+
+\def\localstoptextcolor
+ {\stopcolormode}
+
\def\restoretextcolor
{\ifx\maintextcolor\empty
\expandafter\dorestoretextcolor
@@ -611,7 +1060,7 @@
\fi}
\def\dorestoretextcolor
- {\color[black]}
+ {\color[\defaulttextcolor]}
%D We use some reserved names for local color components.
%D Consistent use of these scratch variables saves us
@@ -665,17 +1114,17 @@
\else 0\fi}
\def\doconvertCMYKtoRGB#1\k#2\to#3%
- {\ifdim#2\s!pt<#1\s!pt
+ {\ifdim#2\s!pt>#1\s!pt % >= problem, repaired 2/12/2002
+ \let#3\@@cl@@z % k >= color
+ \else
\colordimen1\s!pt
\advance\colordimen -#1\s!pt
\advance\colordimen -#2\s!pt
- \multiply\colordimen 1000
+ \multiply\colordimen \!!thousand\relax % 1000
\colorcount\colordimen
\advance\colorcount \medcard
\divide\colorcount \maxcard
\edef#3{\realcolorvalue\colorcount}%
- \else % k >= color
- \let#3\@@cl@@z
\fi}
\def\convertCMYKtoRGB#1#2#3#4%
@@ -685,12 +1134,12 @@
\def\doconvertRGBtoCMYK#1\to#2%
{\colordimen#1\s!pt
- \multiply\colordimen 1000
+ \multiply\colordimen \!!thousand\relax % 1000
\colorcount\colordimen
\advance\colorcount \medcard
\divide\colorcount \maxcard
\colorcount-\colorcount
- \advance\colorcount 1000
+ \advance\colorcount \!!thousand\relax % 1000
\edef#2{\realcolorvalue\colorcount}}
\def\convertRGBtoCMYK#1#2#3%
@@ -735,7 +1184,7 @@
%\else
% \colordimen\colordimen
\fi
- \multiply\colordimen 1000
+ \multiply\colordimen \!!thousand\relax % 1000
\colorcount\colordimen
\advance\colorcount \medcard
\divide\colorcount \maxcard
@@ -752,71 +1201,112 @@
%D booleans that control local and global behavior (more on
%D that later) and conversion to other color spaces.
+\let\currentspotcolor \empty
+\let\previousspotcolor\empty
+
\newif\ifincolor
\newif\iflocalcolor
-\def\setupcolors%
+\def\setupcolors
{\dosingleargument\dosetupcolors}
+\def\resetcolorsplitting
+ {\chardef\currentcolorchannel\zerocount
+ \let\currentspotcolor\empty
+ \filterspotcolorfalse}
+
+\def\colorsplitsuffix{\ifcase\currentcolorchannel\else-\@@clsplitsen\fi}
+\def\colorsplitprefix{\ifcase\currentcolorchannel\else\@@clsplitsen-\fi}
+
+\ifx\resetsystemmode\undefined
+ \let\setsystemmode \gobbleoneargument
+ \let\resetsystemmode\gobbleoneargument
+\fi
+
+\def\setcolorsplitting
+ {\resetsystemmode{\v!kleur\colorsplitsuffix}%
+ \resetcolorsplitting
+ \processaction
+ [\@@clsplitsen]
+ [ c=>\chardef\currentcolorchannel1,%
+ m=>\chardef\currentcolorchannel2,%
+ y=>\chardef\currentcolorchannel3,%
+ k=>\chardef\currentcolorchannel4,%
+ r=>\chardef\currentcolorchannel5,%
+ g=>\chardef\currentcolorchannel6,%
+ b=>\chardef\currentcolorchannel7,%
+ s=>\chardef\currentcolorchannel8,%
+ \v!nee=>,% \currentcolorchannel0,% all colors
+ \s!default=>,% \currentcolorchannel0,% all colors
+ \s!unknown=>\filterspotcolortrue
+ \edef\currentspotcolor{\commalistelement}]%
+ \setsystemmode{\v!kleur\colorsplitsuffix}%
+ \iffilterspotcolor \let\@@clrgb\v!nee \fi}
+
\def\dosetupcolors[#1]%
- {\getparameters[\??cl][#1]%
- \doifelse\@@clreductie\v!ja
- \reduceCMYKtrue
- \reduceCMYKfalse
- \doifelse\@@clrgb\v!nee
- {\ifRGBsupported \showmessage\m!colors {9}\v!rgb\RGBsupportedfalse\fi}
- {\ifRGBsupported\else\showmessage\m!colors{10}\v!rgb\RGBsupportedtrue \fi}%
- \doifelse\@@clcmyk\v!nee
- {\ifCMYKsupported \showmessage\m!colors {9}\v!cmyk\CMYKsupportedfalse\fi}
- {\ifCMYKsupported\else\showmessage\m!colors{10}\v!cmyk\CMYKsupportedtrue \fi}%
- \doifelse\@@clmpcmyk\v!nee
- {\ifMPcmyk \showmessage\m!colors {9}{\v!mp\v!cmyk}\MPcmykfalse\fi}
- {\ifMPcmyk\else\showmessage\m!colors{10}{\v!mp\v!cmyk}\MPcmyktrue \fi}%
-% \processaction
-% [\@@clconversie]
-% [ \v!ja=>\preferGRAYtrue,
-% \v!nee=>\preferGRAYfalse,
-% \v!altijd=>\preferGRAYtrue
-% \RGBsupportedfalse
-% \CMYKsupportedfalse,
-% \s!default=>\preferGRAYfalse,
-% \s!unknown=>\preferGRAYfalse]%
-%
- \preferGRAYfalse
- \processaction
- [\@@clconversie]
- [ \v!ja=>\preferGRAYtrue,
- \v!altijd=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
-%
- \ifRGBsupported
- \converttoGRAYfalse
- \forcegrayMPcolorsfalse
- \else\ifCMYKsupported
- \converttoGRAYfalse
- \forcegrayMPcolorsfalse
- \convertMPcolorstrue
- \ifreduceCMYK
- \reduceMPcolorstrue
- \fi
- \else
- \ifconverttoGRAY\else\showmessage\m!colors{11}\empty\fi
- \converttoGRAYtrue
- \forcegrayMPcolorstrue
- \convertMPcolorsfalse
- \reduceMPcolorsfalse
- \fi\fi
- \processaction
- [\@@clstatus]
- [\v!globaal=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
- \incolortrue\localcolorfalse,
- \v!lokaal=>\ifincolor\else\showmessage\m!colors2\colorstyle\fi
- \incolortrue\localcolortrue,
- \v!start=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
- \incolortrue\localcolorfalse
- \let\@@clstatus\v!globaal,
- \v!stop=>\incolorfalse\localcolorfalse
- \forcegrayMPcolorstrue]%
- \initializemaintextcolor}
+ {\getparameters[\??cl][#1]%
+ \doifelse\@@clspot\v!ja
+ \SPOTsupportedtrue
+ \SPOTsupportedfalse
+ \doifelsenothing\@@clsplitsen
+ \resetcolorsplitting
+ \setcolorsplitting
+ \doifelse\@@clreductie\v!ja
+ \reduceCMYKtrue
+ \reduceCMYKfalse
+ \doifelse\@@clexpansie\v!ja
+ \freezecolorstrue
+ \freezecolorsfalse
+ \doifelse\@@clcriterium\v!alles
+ \hidesplitcolortrue
+ \hidesplitcolorfalse
+ \doifelse\@@clrgb\v!nee
+ {\ifRGBsupported \showmessage\m!colors {9}\v!rgb\RGBsupportedfalse\fi}
+ {\ifRGBsupported\else\showmessage\m!colors{10}\v!rgb\RGBsupportedtrue \fi}%
+ \doifelse\@@clcmyk\v!nee
+ {\ifCMYKsupported \showmessage\m!colors {9}\v!cmyk\CMYKsupportedfalse\fi}
+ {\ifCMYKsupported\else\showmessage\m!colors{10}\v!cmyk\CMYKsupportedtrue \fi}%
+ % todo : mpspot
+ \doifelse\@@clmpcmyk\v!nee
+ {\ifMPcmykcolors \showmessage\m!colors {9}{\v!mp\v!cmyk}\MPcmykcolorsfalse\fi}
+ {\ifMPcmykcolors\else\showmessage\m!colors{10}{\v!mp\v!cmyk}\MPcmykcolorstrue \fi}%
+ \doifelse\@@clmpspot\v!nee
+ {\ifMPspotcolors \showmessage\m!colors {9}{\v!mp\v!spot}\MPspotcolorsfalse\fi}
+ {\ifMPspotcolors\else\showmessage\m!colors{10}{\v!mp\v!spot}\MPspotcolorstrue \fi}%
+ \preferGRAYfalse
+ \processaction
+ [\@@clconversie]
+ [ \v!ja=>\preferGRAYtrue,
+ \v!altijd=>\preferGRAYtrue\RGBsupportedfalse\CMYKsupportedfalse]%
+ \ifRGBsupported
+ \converttoGRAYfalse
+ \forcegrayMPcolorsfalse
+ \else\ifCMYKsupported
+ \converttoGRAYfalse
+ \forcegrayMPcolorsfalse
+ \convertMPcolorstrue
+ \ifreduceCMYK
+ \reduceMPcolorstrue
+ \fi
+ \else
+ \ifconverttoGRAY\else\showmessage\m!colors{11}\empty\fi
+ \converttoGRAYtrue
+ \forcegrayMPcolorstrue
+ \convertMPcolorsfalse
+ \reduceMPcolorsfalse
+ \fi\fi
+ \processaction
+ [\@@clstatus]
+ [\v!globaal=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
+ \incolortrue\localcolorfalse,
+ \v!lokaal=>\ifincolor\else\showmessage\m!colors2\colorstyle\fi
+ \incolortrue\localcolortrue,
+ \v!start=>\ifincolor\else\showmessage\m!colors1\colorstyle\fi
+ \incolortrue\localcolorfalse
+ \let\@@clstatus\v!globaal,
+ \v!stop=>\incolorfalse\localcolorfalse
+ \forcegrayMPcolorstrue]%
+ \initializemaintextcolor}
%D \macros
%D {doifcolorelse}
@@ -929,16 +1419,21 @@
\def\@@currentcolorstop {\??cl\the\colorlevel S}
\def\@@currenttransparent{\??cl\the\colorlevel T}
+\def\currentcolor
+ {\csname
+ \ifundefined\@@currentcolorname\s!empty\else\@@currentcolorname\fi
+ \endcsname}
+
\def\dodoglobalstartcolor
- {\global\@EA\let\@EA\currentcolor\csname\@@currentcolorname\endcsname
+ {\global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
\global\advance\colorlevel \@@colorplus
\global\@EA\let\csname\@@currentcolorname\endcsname\@@askedcolor
- %\debuggerinfo{\m!colors}
+ %\debuggerinfo\m!colors
% {start \@@askedcolor\space at level \the\colorlevel}%
\ifx\@@askedcolor\empty
- \global\@EA\let\csname\@@currentcolorname\endcsname\currentcolor
+ \global\@EA\let\csname\@@currentcolorname\endcsname\@@currentcolor
\global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
- \else\ifx\@@askedcolor\currentcolor
+ \else\ifx\@@askedcolor\@@currentcolor
\global\@EA\let\csname\@@currentcolorstop\endcsname\donoglobalstopcolor
\else
\doifcolorelse\@@askedcolor
@@ -968,35 +1463,43 @@
\def\dodoglobalstopcolor
{\ifcase\colorlevel \else
\donoglobalstopcolor
- \global\@EA\let\@EA\previouscolor\csname\@@currentcolorname\endcsname
+ \global\@EA\let\@EA\@@previouscolor\csname\@@currentcolorname\endcsname
\ifcase\colorlevel\relax
- \docolormark\empty
- \dostoptransparency
- \dostopcolormode
- \else % let's do a bit redundant testing here
- \docolormark\previouscolor
- \ifx\previouscolor\empty
- \dostoptransparency
+ \ifpermitcolormode
+ \docolormark\empty
+ \conditionalstoptransparency
\dostopcolormode
+ \fi
+ \else % let's do a bit redundant testing here
+ \docolormark\@@previouscolor
+ \ifx\@@previouscolor\empty
+ \ifpermitcolormode
+ \conditionalstoptransparency
+ \dostopcolormode
+ \fi
\else
- \doifcolorelse\previouscolor
- {\ifx\currentcolor\previouscolor\else
+ \doifcolorelse\@@previouscolor
+ {\ifx\@@currentcolor\@@previouscolor\else
% alternatively we could let \startcolormode handle this
- \dostoptransparency % really needed
- % \dostopcolormode % less safe but more efficient
- \startcolormode\previouscolor
+ \ifpermitcolormode
+ \conditionalstoptransparency % really needed
+ % more safe but less efficient: \dostopcolormode
+ \fi
+ \startcolormode\@@previouscolor
\fi}
- {\dostoptransparency
- \dostopcolormode}%
+ {\ifpermitcolormode
+ \conditionalstoptransparency
+ \dostopcolormode
+ \fi}%
\fi
\fi
\fi}
\def\donoglobalstopcolor
{\ifcase\colorlevel \else
- \global\@EA\let\@EA\currentcolor\csname\@@currentcolorname\endcsname
+ \global\@EA\let\@EA\@@currentcolor\csname\@@currentcolorname\endcsname
%\debuggerinfo{\m!colors}
- % {stop \currentcolor\normalspace at level \the\colorlevel}%
+ % {stop \@@currentcolor\normalspace at level \the\colorlevel}%
\global\advance\colorlevel \@@colorminus
\fi}
@@ -1068,14 +1571,14 @@
%D the colors temporary have to be reset. After the page is
%D shipped out, we have to revive the current color.
%D
-%D We use \type{\marks} to keep track of colors across page
+%D We use \type{\mark}s to keep track of colors across page
%D boundaries. Unfortunately standard \TEX\ supports only one mark,
%D and using this one for color support only would be a waste.
%D We therefore use an adapted version of J.~Fox's multiple mark
%D mechanism as (re|)|implemented in \module{supp-mrk}.
-\doifdefinedelse{newmark}
- {\newmark\colormark}
+\doifdefinedelse{rawnewmark}
+ {\rawnewmark\colormark}
{\let\colormark\gobbleoneargument}
%D Using this mark mechanism with lots of colors has one
@@ -1107,7 +1610,7 @@
{\edef\newcolormark{#1}%
\ifx\newcolormark\lastcolormark\else
\global\let\lastcolormark\newcolormark
- \@EA\setmark\@EA\colormark\@EA{\lastcolormark}%
+ \@EA\rawsetmark\@EA\colormark\@EA{\lastcolormark}%
\fi}
%D \macros
@@ -1117,21 +1620,35 @@
%D to resetting the color to black, while popping restores the
%D color state to that of before the break.
-\def\topofpagecolor{\getbotmark\colormark} % see postponing
+\def\topofpagecolor{\rawgetbotmark\colormark} % see postponing
\def\pushcolor
{\stopcolormode}
\def\popcolor
- {\doifsomething{\getbotmark\colormark}
- {%\debuggerinfo{\m!colors}{popping \getbotmark\colormark}%
- \startcolormode{\getbotmark\colormark}}}
+ {\doifsomething{\rawgetbotmark\colormark}
+ {%\debuggerinfo\m!colors{popping \getbotmark\colormark}%
+ \startcolormode{\rawgetbotmark\colormark}}}
-\def\popsplitcolor%
+\def\popsplitcolor
{\getsplitmarks\colormark % hier wel
- \doifsomething{\getsplitbotmark\colormark}
- {%\debuggerinfo{\m!colors}{split popping \getsplitbotmark\colormark}%
- \startcolormode{\getsplitbotmark\colormark}}}
+ \doifsomething{\rawgetsplitbotmark\colormark}
+ {%\debuggerinfo\m!colors{split popping \getsplitbotmark\colormark}%
+ \startcolormode{\rawgetsplitbotmark\colormark}}}
+
+% Private macro: only needed in test cases (like multiple
+% seprations in one file); no user command!
+
+\def\resynccolor
+ {\ifdim\pagetotal=\zeropoint
+ \popcolor
+ \else\ifx\@@currentcolor\empty
+ \ifx\maintextcolor\empty\else
+ \startcolormode\maintextcolor
+ \fi
+ \else
+ \startcolormode\@@currentcolor
+ \fi\fi}
%D \macros
%D {startcolorpage, stopcolorpage}
@@ -1143,16 +1660,20 @@
%D easy. It also supports nested colors in page backgrounds
%D and texts.
-\def\startcolorpage%
+\def\startcolorpage
{\bgroup
\let\@@colorplus \minusone
\let\@@colorminus\plusone
\let\docolormark\gobbleoneargument
\edef\savedcolorlevel{\the\colorlevel}%
\global\colorlevel\zerocount % before \localstartcolor of
- \localstartcolor[black]} % course, ugly bug removed
+ \ifx\maintextcolor\empty % course, ugly bug removed
+ \localstartcolor[\defaulttextcolor]%
+ \else
+ \localstartcolor[\maintextcolor]%
+ \fi}
-\def\stopcolorpage%
+\def\stopcolorpage
{\localstopcolor
\global\colorlevel\savedcolorlevel
\egroup}
@@ -1173,6 +1694,8 @@
{\groupedcommand
{\startcolor[#1]}\stopcolor}
+\let\switchtocolor\color
+
\unexpanded\def\graycolor[#1]% not \gray because this is a color
{\groupedcommand
{\RGBsupportedfalse\CMYKsupportedfalse\startcolor[#1]}\stopcolor}
@@ -1258,6 +1781,9 @@
\def\doformatgrayS#1:#2:#3\od
{\dodoformatcolor{#1}}
+\def\doformatgrayP#1:#2:#3:#4\od
+ {\dowithcolor\doformatcolor{#1}}
+
\def\doformatgray#1:%
{\getvalue{doformatgray#1}}
@@ -1278,7 +1804,7 @@
\def\localstartraster[#1]%
{\doifelsenothing{#1}
- {\dostartgraymode{\@@rsraster}}
+ {\dostartgraymode\@@rsraster}
{\dostartgraymode{#1}}}
\def\localstopraster
@@ -1352,21 +1878,22 @@
%D This saves us some typing in for instance the modules that
%D deal with pretty verbatim typesetting.
-\def\definepalet%
+\def\definepalet
{\dodoubleargument\dodefinepalet}
\def\dodefinepalet[#1][#2]%
{\doifassignmentelse{#2}
- {\setvalue{\??pa#1}{}%
+ {\showmessage\m!colors6{#1}%
+ \letvalue{\??pa#1}\empty
\setevalue{\??pa\??pa#1}{#2}%
- \showmessage{\m!colors}{6}{#1}%
\def\dodododefinepalet[##1=##2]%
{\doifvaluesomething{\??pa#1}
{\setevalue{\??pa#1}{\getvalue{\??pa#1},}}%
\setevalue{\??pa#1}{\getvalue{\??pa#1}##1}%
\doifdefinedelse{\??cr##2}
- {\setevalue{\??cr#1:##1}{\getvalue{\??cr##2}}}
- {\setevalue{\??cr#1:##1}{S:0:0:0}}}%
+ {\iffreezecolors\@EA\setevalue\else\@EA\setvalue\fi
+ {\??cr#1:##1}{\getvalue{\??cr##2}}}
+ {\letvalue{\??cr#1:##1}\colorXpattern}}%
\def\dododefinepalet##1%
{\dodododefinepalet[##1]}%
\processcommalist[#2]\dododefinepalet}
@@ -1440,7 +1967,7 @@
%D defining each color separate, it also loads faster and takes
%D less bytes.
-\def\definecolorgroup%
+\def\definecolorgroup
{\dotripleempty\dodefinecolorgroup}
\def\dodefinecolorgroup[#1][#2][#3]%
@@ -1450,11 +1977,12 @@
[ \v!cmyk=>\edef\currentcolorspace{C},
\v!rgb=>\edef\currentcolorspace{R},
\v!gray=>\edef\currentcolorspace{S},
+ \v!spot=>\edef\currentcolorspace{P},
\v!s=>\edef\currentcolorspace{S},
\s!unknown=>\edef\currentcolorspace{R}]%
- \colorcount=0
+ \colorcount\zerocount
\def\dododefinecolorgroup##1%
- {\advance\colorcount 1
+ {\advance\colorcount \plusone
\setevalue{\??cr#1:\the\colorcount}{\currentcolorspace:##1:0:0}}%
\processcommalist[#3]\dododefinecolorgroup
\else
@@ -1589,7 +2117,7 @@
\fetchruntimecommand \showcolor {\f!colorprefix\s!run}
%D \macros
-%D {negativecolorbox}
+%D {negatecolorcomponent, negativecolorbox}
%D
%D Sometimes, especially when we deal with typesetting
%D devices, we want to reverse the color scheme. Instead of
@@ -1602,8 +2130,13 @@
%D
%D will negate the colors in box zero.
+\def\negatecolorcomponent#1% #1 = \macro
+ {\scratchdimen\!!onepoint\advance\scratchdimen-#1\s!pt
+ \ifdim\scratchdimen<\zeropoint\scratchdimen\zeropoint\fi
+ \edef#1{\@EA\withoutpt\the\scratchdimen}}
+
\def\negatecolorbox#1%
- {\setbox#1=\hbox
+ {\setbox#1\hbox
{\dostartnegative
\localstartcolor[white]%
\vrule\!!height\ht#1\!!depth\dp#1\!!width\wd#1%
@@ -1612,7 +2145,7 @@
\box#1\dostopnegative}}
%D \macros
-%D {ifMPgraphics, ifMPcmyk, MPcolor}
+%D {ifMPgraphics, ifMPcmykcolors, MPcolor}
%D
%D A very special macro is \type{\MPcolor}. This one can be
%D used to pass a \CONTEXT\ color to \METAPOST.
@@ -1626,81 +2159,97 @@
%D {MPcmyk}, only \kap{RGB} colors and gray scales are
%D supported.
-\newif\ifMPcmyk % \MPcmykfalse
+\newif\ifMPcmykcolors % \MPcmykcolorsfalse
+\newif\ifMPspotcolors % \MPspotcolorsfalse
\beginTEX
-\def\MPcolor#1%
+\def\scaledMPcolor#1#2%
{\ifMPgraphics
- \@EA\@EA\@EA\doMPcolor
+ \handlecolorwith\doMPcolor
\csname\??cr\@EA
- \ifx\csname\??cr\currentpalet#1\endcsname\relax\else\currentpalet\fi
- #1\endcsname
- :::::::\end
+ \ifx\csname\??cr\currentpalet#2\endcsname\relax\else\currentpalet\fi
+ #2\endcsname
+ :::::::\end#1\end
\else
- #1%
+ #2%
\fi}
\endTEX
\beginETEX \ifcsname
-\def\MPcolor#1%
+\def\scaledMPcolor#1#2%
{\ifMPgraphics
- \@EA\@EA\@EA\doMPcolor
+ \handlecolorwith\doMPcolor
\csname\??cr
- \ifcsname\??cr\currentpalet#1\endcsname\currentpalet\fi
- #1\endcsname
- :::::::\end
+ \ifcsname\??cr\currentpalet#2\endcsname\currentpalet\fi
+ #2\endcsname
+ :::::::\end#1\end
\else
- #1%
+ #2%
\fi}
\endETEX
+\def\MPcolor{\scaledMPcolor1}
+
%D Before we had transparancy available, the following
%D conversion macro was available:
%D
%D \starttypen
%D \def\doMPcolor#1:#2:#3:#4:#5:#6:#7:#8\end
%D {\if #1R(#2,#3,#4)%
-%D \else\if#1C\ifMPcmyk cmyk(#2,#3,#4,#5)\else(1-#2-#5,1-#3-#5,1-#4-#5)\fi
+%D \else\if#1C\ifMPcmykcolors cmyk(#2,#3,#4,#5)\else(1-#2-#5,1-#3-#5,1-#4-#5)\fi
%D \else\if#1S(#2,#2,#2)%
%D \else (0,0,0)%
%D \fi\fi\fi}
%D \stoptypen
%D
%D In order to be useful, this macro is to be fully
-%D expandabele. The next alternative also handles transparant
-%D colors. We could have packaged everything in one macro, but
-%D splitting it up is not only more readable, but also faster
-%D (because less arguments have to be skipped)
-
-\def\doMPcolor#1:%
- {\if#1R%
- \@EA\doMPrgb
- \else\if#1C\ifMPcmyk
- \@EA\@EAEAEA\@EA\doMPcmykY
- \else
- \@EA\@EAEAEA\@EA\doMPcmykN
- \fi\else\if#1S%
- \@EA\@EAEAEA\@EA\doMPgray
- \else
- \@EA\@EAEAEA\@EA\doMPblack
- \fi\fi\fi}
-
-\def\transparentMP{transparent}
-\def\cmykspecialMP{cmyk}
+%D expandabele.
+
+\def\doMPcolor#1:% #1 can be \relax ! ! ! i.e. an empty color
+ {\csname
+ MPc\@EA\ifx\csname MPc\string#1\endcsname\relax B\else#1\fi
+ \endcsname}
+
+\def\MPcR{\doMPrgb}
+\def\MPcC{\ifMPcmykcolors\@EA\doMPcmykY\else\@EA\doMPcmykN\fi}
+\def\MPcS{\doMPgray}
+\def\MPcP{\ifMPspotcolors\@EA\doMPspotY\else\@EA\doMPspotN\fi}
+\def\MPcB{\doMPblack}
+
+\def\transparentMP {transparent}
+\def\cmykMP {scaledcmyk}
+\def\cmykASrgbMP {scaledcmykasrgb} % not really needed any more
+\def\rgbMP {scaledrgb}
+\def\grayMP {scaledgray}
+\def\processMP {spotcolor}
\def\doMPtransparent#1#2:#3:#4\end
{\ifcase#2\space(#1)\else\transparentMP(#2,#3,(#1))\fi}
-\def\doMPgray #1:{\doMPtransparent{#1,#1,#1}}
-\def\doMPrgb #1:#2:#3:{\doMPtransparent{#1,#2,#3}}
-\def\doMPcmykY#1:#2:#3:#4:{\doMPtransparent{\cmykspecialMP(#1,#2,#3,#4)}}
-\def\doMPcmykN#1:#2:#3:#4:{\doMPtransparent{1-#1-#4,1-#2-#4,1-#3-#4}}
+\def\doMPgray#1:#2\end#3\end
+ {\doMPtransparent{\grayMP(#1,#3)}#2\end}
+
+\def\doMPrgb#1:#2:#3:#4\end#5\end
+ {\doMPtransparent{\rgbMP(#1,#2,#3,#5)}#4\end}
+
+\def\doMPcmykY#1:#2:#3:#4:#5\end#6\end
+ {\doMPtransparent{\cmykMP(#1,#2,#3,#4,#6)}#5\end}
+
+\def\doMPcmykN#1:#2:#3:#4:#5\end#6\end
+ {\doMPtransparent{\cmykASrgbMP(#1,#2,#3,#4,#6)}#5\end}
-\def\doMPblack#1:#2:#3:#4:#5:#6:#7\end{(0,0,0)}
+\def\doMPspotY#1:#2:#3\end#4\end
+ {\doMPtransparent{\processMP("#1",#2)}#3\end}
+
+\def\doMPspotN#1:#2:#3\end#4\end
+ {\scaledMPcolor{#2}{#1}}
+
+\def\doMPblack#1\end#2\end
+ {(0,0,0)}
%D \macros
%D {PDFcolor,FDFcolor}
@@ -1708,24 +2257,37 @@
%D Similar alternatives are avaliable for \PDF:
\def\PDFcolor#1%
- {\@EA\@EA\@EA\doPDFcolor\csname\??cr#1\endcsname:::::::\end}
+ {\handlecolorwith\doPDFcolor\csname\??cr#1\endcsname:::::::\end}
\def\doPDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
{\if #1R#2 #3 #4 rg%
\else\if#1C#2 #3 #4 #5 k%
\else\if#1S#2 g%
- \else 0 g%
- \fi\fi\fi}
+ \else\if#1P#3 g% todo
+ \else 0 g%
+ \fi\fi\fi\fi}
+
+\def\PDFcolorvalue#1%
+ {\handlecolorwith\doPDFcolorvalue\csname\??cr#1\endcsname:::::::\end}
+
+\def\doPDFcolorvalue#1:#2:#3:#4:#5:#6:#7:#8\end
+ {\if #1R#2 #3 #4%
+ \else\if#1C#2 #3 #4 #5%
+ \else\if#1S#2%
+ \else\if#1P#3%
+ \else 0%
+ \fi\fi\fi\fi}
\def\FDFcolor#1%
- {\@EA\@EA\@EA\doFDFcolor\csname\??cr#1\endcsname:::::::\end}
+ {\handlecolorwith\doFDFcolor\csname\??cr#1\endcsname:::::::\end}
\def\doFDFcolor#1:#2:#3:#4:#5:#6:#7:#8\end
{[\if #1R#2 #3 #4%
\else\if#1C#2 #3 #4 #5%
\else\if#1S#2%
- \else 0%
- \fi\fi\fi]}
+ \else\if#1P#3% todo
+ \else 0%
+ \fi\fi\fi\fi]}
%D \macros
%D {everyshapebox}
@@ -1744,12 +2306,64 @@
\c!reductie=\v!nee,
\c!rgb=\v!ja,
\c!cmyk=\v!ja,
+ \c!spot=\v!ja,
\c!mp\c!cmyk=\@@clcmyk,
- \c!tekstkleur=]
+ \c!mp\c!spot=\@@clspot,
+ \c!expansie=\v!nee,
+ \c!tekstkleur=,
+ \c!splitsen=\v!nee,
+ \c!criterium=\v!alles]
\setupcolor
[\v!rgb]
+%D For the moment we keep the next downward compatibility
+%D switch, i.e.\ expanded colors. However, predefined colors
+%D and palets are no longer expanded (which is what I wanted
+%D in the first place).
+%D
+%D Well, in case we want to do color separation and use CMYK
+%D colors only, this is dangerous since unwanted remapping may
+%D take place. Especially when we redefine already defined
+%D colors in another color space (e.g. darkgreen is
+%D predefined in RGB color space, so a redefinition in CMYK
+%D coordinates before RGB mode is disabled, would give
+%D unexpected results due to the already frozen color spec.)
+%D
+%D So, from now on, colors are not frozen any more!
+
+% \appendtoks\setupcolors[\c!expansie=\v!ja]\to\everyjob
+
+%D The next macro is for instance used in figure splitting:
+
+\def\doifseparatingcolorselse
+ {\iffilterspotcolor
+ \@EA\firstoftwoarguments
+ \else\ifcase\currentcolorchannel
+ \@EAEAEA\secondoftwoarguments
+ \else
+ \@EAEAEA\firstoftwoarguments
+ \fi\fi}
+
+\def\doifcolorchannelelse#1%
+ {\doifseparatingcolorselse
+ {\doifelsenothing{#1}
+ \secondoftwoarguments
+ {\doifelse{#1}\@@clsplitsen
+ \firstoftwoarguments
+ \secondoftwoarguments}}
+ \secondoftwoarguments}
+
+\def\resetcolorseparation
+ {\filterspotcolorfalse
+ \chardef\currentcolorchannel\zerocount}
+
+%D These can be used in selecting specific files (like
+%D figuredatabases).
+
+\def\colorchannelprefix{\doifseparatingcolorselse\@@clsplitsen\empty-}
+\def\colorchannelsuffix{-\doifseparatingcolorselse\@@clsplitsen\empty}
+
%D As we can see, color support is turned off by default.
%D Reduction of gray colors to gray scales is turned on.
diff --git a/tex/context/base/colo-rgb.tex b/tex/context/base/colo-rgb.tex
index 5f5a21638..39f34d569 100644
--- a/tex/context/base/colo-rgb.tex
+++ b/tex/context/base/colo-rgb.tex
@@ -29,7 +29,7 @@
\definecolor [magenta] [r=1, g=0, b=1]
\definecolor [yellow] [r=1, g=1, b=0]
-\definecolor [white] [r=1, g=1, b=1]
+\definecolor [white] [s=1] % [r=1, g=1, b=1]
\definecolor [black] [s=0]
\definecolor [gray] [s=.9]
@@ -270,6 +270,8 @@
%D Like colors, we first define the english colorgroups. These
%D colorgroups are tuned for distinctive gray scale printing.
+% todo : more efficient and real gray
+
\definecolorgroup
[gray]
[0.95:0.95:0.95,
diff --git a/tex/context/base/colo-run.tex b/tex/context/base/colo-run.tex
index 0b6c6da68..1355c9365 100644
--- a/tex/context/base/colo-run.tex
+++ b/tex/context/base/colo-run.tex
@@ -1,11 +1,11 @@
\unprotect
-\gdef\showpalet%
+\gdef\showpalet
{\dodoubleargument\doshowpalet}
\gdef\doshowpalet[#1][#2]%
{\doifdefined{\??pa#1}
- {\doifinsetelse{\v!vertikaal}{#2}
+ {\doifinsetelse\v!vertikaal{#2}
{\showverticalpalet[#1][#2]}
{\showhorizontalpalet[#1][#2]}}}
@@ -13,13 +13,13 @@
{\localvbox
{\offinterlineskip
\setuppalet[#1]
- \def\rule%
+ \def\rule
{\vrule\!!width3em\!!height\ht\strutbox\!!depth\dp\strutbox}
- \tabskip\!!zeropoint
+ \tabskip\zeropoint
\def\doshowpalet##1%
- {\doifinsetelse{\v!nummer}{#2}{##1\hskip.5em}{}&
+ {\doifinsetelse\v!nummer{#2}{##1\hskip.5em}{}&
\color[##1]{\rule}\graycolor[##1]{\rule}&
- \doifinset{\v!waarde}{#2}{\hskip.5em\colorvalue{##1}}\crcr}
+ \doifinset\v!waarde{#2}{\hskip.5em\colorvalue{##1}}\crcr}
\halign
{\hss##&\hss##\hss&##\cr
&\doifinset{\v!naam}{#2}{\strut#1}&\cr%
@@ -29,30 +29,30 @@
{\localvbox
{\offinterlineskip
\setuppalet[#1]
- \tabskip\!!zeropoint
- \!!widtha=\!!zeropoint
- \doifinset{\v!nummer}{#2}
+ \tabskip\zeropoint
+ \!!widtha\zeropoint
+ \doifinset\v!nummer{#2}
{\def\doshowpalet##1%
- {\setbox0=\hbox{##1}%
- \ifdim\!!widtha<\wd0\!!widtha=\wd0\fi}%
+ {\setbox0\hbox{##1}%
+ \ifdim\!!widtha<\wd0\!!widtha\wd0\fi}%
\processpalet[#1]\doshowpalet}%
- \advance\!!widtha by 1em
+ \advance\!!widtha 1em
\ifdim\!!widtha<5em
- \!!widtha=5em
+ \!!widtha5em
\fi
\halign
{##&&\hbox to \!!widtha{\hss##\hss}\cr
- \doifinset{\v!nummer}{#2}
+ \doifinset\v!nummer{#2}
{\def\doshowpalet##1{&\strut##1}%
\processpalet[#1]\doshowpalet}\cr
- \doifinset{\v!naam}{#2}{#1\hskip.5em}%
+ \doifinset\v!naam{#2}{#1\hskip.5em}%
\def\doshowpalet##1%
{&\color[##1]{\vrule\!!width\!!widtha\!!height\ht\strutbox\!!depth\!!zeropoint}}%
\processpalet[#1]\doshowpalet\crcr
\def\doshowpalet##1%
{&\graycolor[##1]{\vrule\!!width\!!widtha\!!height\!!zeropoint\!!depth\dp\strutbox}}%
\processpalet[#1]\doshowpalet\crcr
- \doifinset{\v!waarde}{#2}
+ \doifinset\v!waarde{#2}
{\def\doshowpalet##1%
{&\vbox
{\hsize\!!widtha
@@ -67,12 +67,12 @@
\gdef\processpalet[#1]%
{\expanded{\globalprocesscommalist[\getvalue{\??pa#1}]}}
-\gdef\showcolorgroup%
+\gdef\showcolorgroup
{\dodoubleargument\doshowcolorgroup}
\gdef\doshowcolorgroup[#1][#2]%
{\doifdefined{\??cr#1:1}
- {\doifinsetelse{\v!vertikaal}{#2}
+ {\doifinsetelse\v!vertikaal{#2}
{\showverticalcolorgroup[#1][#2]}
{\showhorizontalcolorgroup[#1][#2]}}}
@@ -80,24 +80,24 @@
{\localvbox
{\offinterlineskip
\setuppalet
- \tabskip\!!zeropoint
- \def\rule%
+ \tabskip\zeropoint
+ \def\rule
{\vrule\!!width4em\!!height\ht\strutbox\!!depth\dp\strutbox}
\def\colorformatseparator{\strut\cr}
\def\dodoshowgroup##1%
{\halign
{\hss####\hss\cr
- \doifinset{\v!nummer}{#2}{\strut##1}\cr
+ \doifinset\v!nummer{#2}{\strut##1}\cr
\color[#1:##1]{\vrule\!!width4em\!!height\ht\strutbox\!!depth\!!zeropoint}\cr
\graycolor[#1:##1]{\vrule\!!width4em\!!height\!!zeropoint\!!depth\dp\strutbox}\cr
- \doifinset{\v!waarde}{#2}{\colorvalue{#1:##1}\strut}\crcr}}
+ \doifinset\v!waarde{#2}{\colorvalue{#1:##1}\strut}\crcr}}
\def\doshowgroup##1%
{\doifdefined{\??cr#1:##1}
{\vbox{\dodoshowgroup{##1}}}}
\hbox
- {\doifinset{\v!naam}{#2}
+ {\doifinset\v!naam{#2}
{\strut
- \doifinsetelse{\v!waarde}{#2}
+ \doifinsetelse\v!waarde{#2}
{\raise3\lineheight\hbox{#1\hskip.5em}}
{#1}%
\hskip.5em}%
@@ -108,17 +108,17 @@
{\localvbox
{\offinterlineskip
\setuppalet
- \tabskip\!!zeropoint
- \def\rule%
+ \tabskip\zeropoint
+ \def\rule
{\vrule\!!width2.5em\!!height\ht\strutbox\!!depth\dp\strutbox}
\def\doshowgroup##1%
{\doifdefined{\??cr#1:##1}
- {\doifinset{\v!nummer}{#2}{##1\hskip.5em}&
+ {\doifinset\v!nummer{#2}{##1\hskip.5em}&
\color[#1:##1]{\rule}\graycolor[#1:##1]{\rule}&
- \doifinset{\v!waarde}{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}
+ \doifinset\v!waarde{#2}{\hskip.5em\colorvalue{#1:##1}}\crcr}}
\halign
{\hss##&\hss##\hss&##\hss\cr
- &\doifinset{\v!naam}{#2}{\strut#1}&\crcr
+ &\doifinset\v!naam{#2}{\strut#1}&\crcr
\doshowgroup1\doshowgroup2\doshowgroup3\doshowgroup4%
\doshowgroup5\doshowgroup6\doshowgroup7\doshowgroup8}}}
@@ -126,7 +126,7 @@
{\bgroup
\setupcolor[#1]
\stelwitruimtein[\v!geen]
- \def\rule%
+ \def\rule
{\vrule\!!width4em\!!height\ht\strutbox\!!depth\dp\strutbox}
\def\docommand##1%
{\hbox
@@ -139,7 +139,7 @@
\processcommacommand[\colorlist]\docommand
\egroup}
-\gdef\comparepalet%
+\gdef\comparepalet
{\dosingleargument\docomparepalet}
\gdef\docomparepalet[#1]%
@@ -154,15 +154,16 @@
{\offinterlineskip
\setuppalet[#2]
\getcommacommandsize[\getvalue{\??pa#2}]
- \!!widtha=2em\relax
- \hsize=\commalistsize\!!widtha
+ \!!widtha2em\relax
+ \hsize\commalistsize\!!widtha
\def\rule%
{\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
\def\dododocomparepalet##1%
{\hbox
- {\setbox0=\hbox
+ {\setbox0\hbox
{#1[##1]{\vrule\!!width\hsize\!!height3ex}}%
- \wd0=\!!zeropoint\box0
+ \wd0\zeropoint
+ \box0
\hbox to \hsize
{\def\dododocomparepalet####1%
{\hbox to \!!widtha
@@ -171,7 +172,7 @@
\endgraf}
\processcommacommand[\getvalue{\??pa#2}]\dododocomparepalet}}
-\gdef\comparecolorgroup%
+\gdef\comparecolorgroup
{\dosingleargument\docomparecolorgroup}
\gdef\docomparecolorgroup[#1]%
@@ -183,21 +184,22 @@
\gdef\dodocomparecolorgroup#1[#2]%
{\localvbox
- {\!!counta=0
+ {\!!counta\zerocount
\dorecurse{15}
- {\doifdefined{\??cr#2:\recurselevel}{\advance\!!counta by 1}}
- \!!widtha=2em\relax
- \hsize=\!!counta\!!widtha
- \def\rule%
+ {\doifdefined{\??cr#2:\recurselevel}{\advance\!!counta\plusone}}
+ \!!widtha2em\relax
+ \hsize\!!counta\!!widtha
+ \def\rule
{\vrule\!!width.5\!!widtha\!!height2.25ex\!!depth-.75ex}
\def\dododocomparecolorgroup##1%
{\hbox to \hsize
- {\setbox0=\hbox
+ {\setbox0\hbox
{#1[#2:##1]{\vrule\!!width\hsize\!!height3ex}}%
- \wd0=\!!zeropoint\box0
+ \wd0\zeropoint
+ \box0
\hbox to \hsize
- {\hss\dorecurse{\!!counta}{#1[#2:\recurselevel]{\rule}\hss}}}
+ {\hss\dorecurse\!!counta{#1[#2:\recurselevel]{\rule}\hss}}}
\endgraf}
- \dorecurse{\!!counta}{\dododocomparecolorgroup\recurselevel}}}
+ \dorecurse\!!counta{\dododocomparecolorgroup\recurselevel}}}
\protect \endinput
diff --git a/tex/context/base/cont-cz.tex b/tex/context/base/cont-cz.tex
index 05ac01287..84c0a5ca2 100644
--- a/tex/context/base/cont-cz.tex
+++ b/tex/context/base/cont-cz.tex
@@ -26,6 +26,6 @@
\installlanguage [\s!sk] [\c!status=\v!start]
\installlanguage [\s!cz] [\c!status=\v!start]
-\setupbodyfont [csr,rm,12pt]
+\setupbodyfont [csr,ams,rm,12pt]
\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/cont-de.tex b/tex/context/base/cont-de.tex
index 9e75bc0cf..314122ab9 100644
--- a/tex/context/base/cont-de.tex
+++ b/tex/context/base/cont-de.tex
@@ -31,6 +31,6 @@
\installlanguage [deo] [\c!status=\v!start]
-\setupbodyfont [cmr,rm,12pt]
+\setupbodyfont [cmr,ams,rm,12pt]
\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/cont-en.tex b/tex/context/base/cont-en.tex
index bfd38e7ea..b84470695 100644
--- a/tex/context/base/cont-en.tex
+++ b/tex/context/base/cont-en.tex
@@ -29,6 +29,6 @@
\installlanguage [\s!it] [\c!status=\v!start]
\installlanguage [\s!nl] [\c!status=\v!start]
-\setupbodyfont [cmr,rm,12pt]
+\setupbodyfont [cmr,ams,rm,12pt]
\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/cont-fil.tex b/tex/context/base/cont-fil.tex
index f576bc699..d605583bb 100644
--- a/tex/context/base/cont-fil.tex
+++ b/tex/context/base/cont-fil.tex
@@ -34,6 +34,10 @@
\definefilesynonym [fig-fake] [fig-02]
\definefilesynonym [fig-missing] [fig-06]
+\definefilesynonym [res-make] [res-01]
+\definefilesynonym [res-base] [res-04]
+\definefilesynonym [res-trace] [res-08]
+
\definefilesynonym [pre-general] [pre-00]
\definefilesynonym [pre-original] [pre-01]
diff --git a/tex/context/base/cont-it.tex b/tex/context/base/cont-it.tex
index 21d6418c7..4957f966e 100644
--- a/tex/context/base/cont-it.tex
+++ b/tex/context/base/cont-it.tex
@@ -29,6 +29,6 @@
\installlanguage [\s!it] [\c!status=\v!start]
%\installlanguage [\s!nl] [\c!status=\v!start]
-\setupbodyfont [cmr,rm,12pt]
+\setupbodyfont [cmr,ams,rm,12pt]
\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/cont-log.tex b/tex/context/base/cont-log.tex
index a8183398a..fc08efb60 100644
--- a/tex/context/base/cont-log.tex
+++ b/tex/context/base/cont-log.tex
@@ -29,41 +29,42 @@
{\def\next{#2}}%
\next}
-\unexpanded\def\CMRkern%
+\unexpanded\def\CMRkern
{\doifCMRfontelse{\kern}{\scratchdimen=}}
-\def\TeX%
+\def\TeX
{T%
\kern-.1667em\lower.5ex\hbox{E}%
\kern-.125emX}
-\def\ConTeXt%
+\def\ConTeXt
{C%
\CMRkern-.0333emo%
\CMRkern-.0333emn%
- \CMRkern-.1667em\TeX%
+% \CMRkern-.1667em\TeX%
+ \CMRkern-.0667em\TeX%
\CMRkern-.0333emt}
-\def\PPCHTeX%
+\def\PPCHTeX
{ppch\TeX}
-\def\PRAGMA%
+\def\PRAGMA
{Pragma ADE}
-%\def\LaTeX%
+%\def\LaTeX
% {L%
% \kern-.30em\raise.3ex\hbox{\txx A}%
% \kern-.18em\TeX}
-\def\LaTeX% requested by erik frambach
+\def\LaTeX % requested by erik frambach
{{\setbox\scratchbox\hbox{L}%
- \scratchdimen=\ht\scratchbox
+ \scratchdimen\ht\scratchbox
\setbox\scratchbox\hbox{\txx A}%
L\kern-.55\wd\scratchbox
\raise\scratchdimen\hbox{\lower\ht\scratchbox\copy\scratchbox}%
\kern-.2\wd\scratchbox\TeX}}
-\def\TaBlE%
+\def\TaBlE
{T%
\kern-.27em\lower.5ex\hbox{A}%
\kern-.18emB%
diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex
index 1ebd70ba1..e7269d251 100644
--- a/tex/context/base/cont-new.tex
+++ b/tex/context/base/cont-new.tex
@@ -12,309 +12,901 @@
%C details.
% manual : offsetbox alignbox
-
-% todo achtergronden in kolommen
+% todo achtergronden in kolommen
%D This file is loaded at runtime, thereby providing an
%D excellent place for hacks and new features.
\unprotect
-% we don't register the paragraph characteristics, only the
-% width
+\def\filluparrangedpages % beware: \realpageno is 1 ahead
+ {\ifarrangingpages
+ \scratchcounter\realpageno
+ \advance\scratchcounter \minusone
+ \dosetmodulo\scratchcounter\arrangedpageT\scratchcounter
+ \ifcase\scratchcounter\else
+ \advance\scratchcounter \plusone
+ \dostepwiserecurse\scratchcounter\arrangedpageT\plusone
+ {\noheaderandfooterlines\ejectdummypage}%
+ \fi
+ \fi}
+
+% experiment, not yet to be used
-\appendtoks
- \setinnerparpositions % see "techniek" for application
-\to \everytabulate
+\def\displaybreak
+ {\ifhmode
+ \removeunwantedspaces
+ \ifcase\raggedstatus\hfill\fi
+ \strut\penalty-9999 % \break fails on case (3)
+ \fi}
-\def\OTRSETnaturalflush
- {\bgroup
- \forgetall % new
- \setbox0\vbox to \columnfreecells\lineheight
- {\vskip-\topskip
- \vskip\lineheight
- \prevdepth\dp\strutbox
- \unvbox\normalpagebox
- \vfill}%
- \setbox2\hbox
- {\OTRSETplacebottomnotes}%
- \setbox\scratchbox\hbox
- {\wd0=\zeropoint\box0\box2}%
- \dp\scratchbox\dp\strutbox
- \OTRSEThandleflushedtext1
- \egroup}
+\def\startdisplay{\displaybreak\ignorespaces\startopelkaar}
+\def\stopdisplay {\stopopelkaar\displaybreak\ignorespaces}
-\appendtoks \checkcurrentlayout \to \everystarttext
+\def\tightvbox
+ {\dowithnextbox{\dp\nextbox\zeropoint\box\nextbox}\vbox}
+\def\tightvtop
+ {\dowithnextbox{\ht\nextbox\zeropoint\box\nextbox}\vtop}
+
+% cleaner
-\def\flushfootnotes {\flushnotes}
-\def\doflushfootnotes{\doflushnotes}
+\def\@@nmpre#1{\doiftext{#1}{{#1}\tfskip}}
+\def\@@nmpos#1{\doiftext{#1}{\tfskip{#1}}}
+
+% newer
+
+\def\@@nmprepos#1#2#3#4#5%
+ {\doifelsenothing\@@nmbreedte
+ {\doiftext{#5}{#1{#5}#2}}
+ {\doiftext{#5}{\hbox to \@@nmbreedte{#3{#5}#4}}}}
+
+\def\@@nmpre{\@@nmprepos\empty\tfskip\relax\hss}
+\def\@@nmpos{\@@nmprepos\tfskip\empty\hss\relax}
+
+\def\doprocesstabskipline#1%
+ {\bgroup
+ \scratchcounter\plusone
+ \dodoprocesstabskipline#1\relax
+ \egroup}
+
+\def\dodoprocesstabskipline#1%
+ {\ifnum\scratchcounter>\spacespertab\relax
+ \donetrue \else \donefalse \advance
+ \fi \scratchcounter \plusone
+ \ifx#1\relax \else
+ \ifcase\tabskipmode
+ % can't happen
+ \or
+ % go on
+ \else\ifnum`#1<128
+ % ok, no special character
+ \else\ifnum\catcode`#1=\active
+ % quits parsing, else utf lookahead problems
+ \chardef\tabskipmode\zerocount
+ \fi\fi\fi
+ \ifcase\tabskipmode
+ \@EAEAEA#1%
+ \else
+ \@EAEAEA#1\@EAEAEA\dodoprocesstabskipline
+ \fi
+ \fi}
+
+\setuptyping[\c!tab=\s!ascii] % better default than \v!yes
-\def\usesubpath[#1]%
- {\ifx\allinputpaths\empty
- \edef\allinputpaths{#1}%
+% obey eigennummer
+
+\def\doresetsectioncounters#1%
+ {\resetcounter{\??se#1}%
+ \letgvalue{\??se#1\c!eigennummer}\relax
+ \donexttracklevel{#1}}
+
+\def\@@shortsectionnumber#1%
+ {\@EA\ifx\csname\??se#1\c!eigennummer\endcsname\relax
+ \@EA\ifx\csname\??se#1\@@sectieblok\c!conversie\endcsname\relax
+ \@EA\ifx\csname\??se#1\c!conversie\endcsname\relax
+ \@@sectionvalue{#1}%
+ \else
+ \@@sectionconversion{#1}{\@@sectionvalue{#1}}%
+ \fi
+ \else
+ \@@sectionconversion{#1}{\@@sectionvalue{#1}}%
+ \fi
\else
- \def\docommando##1%
- {\def\dodocommando####1{\addtocommalist{##1/####1}\allinputpaths}%
- \processcommalist[#1]\dodocommando}%
- \processcommacommand[\allinputpaths]\docommando
+ \csname\??se#1\c!eigennummer\endcsname
\fi}
+
+\def\setsomeheadconversion#1#2%
+ {\someheadconversionfalse
+ \doifelsevalue{\??ko#1\c!eigennummer}\v!ja
+ {\setgvalue{\??se\@@sectie\c!eigennummer}{#2}%
+ \def\someheadconversion{#2}}
+ {\letgvalue{\??se\@@sectie\c!eigennummer}\relax
+ \bepaalkopnummer[#1]%
+ \@EA\ifx\csname\??se\@@sectie\@@sectieblok\c!kopconversie\endcsname\relax
+ \@EA\ifx\csname\??se\@@sectie\c!kopconversie\endcsname\relax
+ \def\someheadconversion{#2}%
+ \else
+ \@EA\ifx\csname\??se\@@sectie\c!kopconversie\endcsname\empty
+ \def\someheadconversion{#2}%
+ \else
+ \someheadconversiontrue
+ \def\someheadconversion%
+ {\fullsectionnumber{#1}{\getvalue{\??se\@@sectie\c!kopconversie}}{#2}}%
+ \fi
+ \fi
+ \else
+ \@EA\ifx\csname\??se\@@sectie\@@sectieblok\c!kopconversie\endcsname\empty
+ \def\someheadconversion{#2}%
+ \else
+ \someheadconversiontrue
+ \def\someheadconversion%
+ {\fullsectionnumber{#1}{\getvalue{\??se\@@sectie\@@sectieblok\c!kopconversie}}{#2}}%
+ \fi
+ \fi}}
-\newif\ifboxhasframe
+% pretty important (esp since we now ignore shipouts)
+%
+% actually we should nil all writes, marks, specials
-\def\startlocalframed[#1][#2]%
+\appendtoks \globallet\popcolor\relax \to \everylastshipout
+
+\def\doscalelikeafigure % quite dirty and potential interference possible
+ {\doifsomething{\@@xyfactor\@@xyhfactor\@@xybfactor\@@xyschaal
+ \@@xybreedte\@@xyhoogte\@@xyregels}
+ {\let \@@efschaal \@@xyschaal
+ \let \@@effactor \@@xyfactor
+ \let \@@efbfactor\@@xybfactor
+ \let \@@efhfactor\@@xyhfactor
+ \let \@@efbreedte\@@xybreedte
+ \let \@@efhoogte \@@xyhoogte
+ \let \@@efregels \@@xyregels
+ \let \@@epx \!!zeropoint
+ \let \@@epy \!!zeropoint
+ \edef\@@epw {\the\wd\nextbox}%
+ \edef\@@eph {\the\ht\nextbox}%
+ \figwid\zeropoint \figxsca\plusone % see note * (core-fig)
+ \fighei\zeropoint \figysca\plusone % see note * (core-fig)
+ \checkfiguresettings
+ \setfactorfiguresize
+ \setscalefiguresize
+ \setdimensionfiguresize
+ \convertfigureinsertscale\@@epx\figx\figxsca\scax
+ \convertfigureinsertscale\@@epy\figy\figysca\scay
+ \scratchdimen\scax\s!pt \divide\scratchdimen 100
+ \edef\@@xysx{\withoutpt\the\scratchdimen}%
+ \scratchdimen\scay\s!pt \divide\scratchdimen 100
+ \edef\@@xysy{\withoutpt\the\scratchdimen}}}
+
+\def\doschaal[#1]%
{\bgroup
- \inframedtrue
- \edef\@@framed{#1}%
- % this piece of pre expansion is needed (sometimes used in frameoffset)
- % \doifvaluesomething{\@@framed\c!lijndikte} % obsolete
- % {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}}% obsolete
- % this piece of pre expansion is needed (sometimes used circular)
- \scratchdimen\getvalue{\@@framed\c!kaderoffset}%
- \setevalue{\@@framed\c!kaderoffset}{\the\scratchdimen}%
- \doifnotvalue{\@@framed\c!achtergrondoffset}\v!kader
- {\scratchdimen\getvalue{\@@framed\c!achtergrondoffset}%
- \setevalue{\@@framed\c!achtergrondoffset}{\the\scratchdimen}}%
- % we need to register the (outer) color
- \startregistercolor[\getvalue{\@@framed\c!voorgrondkleur}]%
- % to prevent deadlock in case of self refering
- \ifsecondargument % faster
- \getparameters[\@@framed][#2]% here !
- \fi
- % to get the right spacing
- \doifvaluesomething{\@@framed\c!voorgrondletter}
- {\@EA\doconvertfont\csname\@@framed\c!voorgrondletter\endcsname\empty}%
- % beware, both the frame and background offset can be overruled
- %
- % the next macros are visible
- \edef\localoffset{\getvalue{\@@framed\c!offset }}%
- \edef\localwidth {\getvalue{\@@framed\c!breedte }}%
- \edef\localheight{\getvalue{\@@framed\c!hoogte }}%
- \edef\localformat{\getvalue{\@@framed\c!uitlijnen}}%
- \edef\localstrut {\getvalue{\@@framed\c!strut }}%
- % these are not
- \edef\@@localframing {\getvalue{\@@framed\c!kader }}%
- \edef\@@locallocation{\getvalue{\@@framed\c!plaats}}%
- %
- \ifx\@@localframing\v!overlay % no frame, no offset, no framewidth
- \boxhasframefalse
- \let\localoffset\v!overlay
- \else\ifx\@@localframing\v!geen % no frame, no framewidth
- \boxhasframefalse
- \else
- \boxhasframetrue
- \fi\fi
- \ifboxhasframe
- \doifvaluesomething{\@@framed\c!lijndikte}
- {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}\relax
- \ifinheritruledlinewidth\linewidth\ruledlinewidth\fi}%
- \else
- \ruledlinewidth\zeropoint
- \fi
- \ifx\localformat\empty
- \boxhasformatfalse
- \else
- \boxhasformattrue
- \dosetraggedcommand\localformat
- \edef\dobeforeframedbox{\raggedtopcommand\getvalue{\@@framed\c!boven}}%
- \edef\doafterframedbox {\getvalue{\@@framed\c!onder}\raggedbottomcommand}%
- \fi
- \ifx\localoffset\v!geen
- \boxhasoffsetfalse
- \boxhasstrutfalse
- \boxisoverlaidfalse
- \@@localoffset\ruledlinewidth
- \else\ifx\localoffset\v!overlay
-% \ifx\@@localframing\v!nee \boxhasframefalse \fi % test first
- \boxhasoffsetfalse
- \boxhasstrutfalse
- \boxisoverlaidtrue
- \@@localoffset\zeropoint
- \else
- \boxhasoffsettrue
- \boxhasstruttrue
- \boxisoverlaidfalse
- \ifx\localoffset\v!default % new per 2-6-2000
- \let\localoffset\defaultframeoffset
- \letvalue{\@@framed\c!offset}\defaultframeoffset
+ \forgetall
+ \getparameters
+ [\??xy]
+ [\c!schaal=,\c!breedte=,\c!hoogte=,\c!regels=,
+ \c!factor=,\c!hfactor=,\c!bfactor=,
+ \c!sx=1,\c!sy=1,#1]%
+ \dowithnextbox
+ {\dontshowcomposition
+ \ifdim\ht\nextbox>\zeropoint \ifdim\wd\nextbox>\zeropoint
+ \doscalelikeafigure
+ \dimen0=\@@xysy\ht\nextbox
+ \dimen2=\@@xysy\dp\nextbox
+ \dimen4=\@@xysx\wd\nextbox
+ \dimen6=\dimen0\advance\dimen6 \dimen2
+% \setbox\nextbox\vbox to \dimen6
+% {\ht\nextbox\zeropoint
+% \dp\nextbox\zeropoint
+% \vfill % erbij
+% \dostartscaling\@@xysx\@@xysy\box\nextbox\dostopscaling}%
+ \setbox\nextbox\hbox
+ {\smashbox\nextbox
+ \dostartscaling\@@xysx\@@xysy\box\nextbox\dostopscaling}%
+ \ht\nextbox\dimen0
+ \dp\nextbox\dimen2
+ \wd\nextbox\dimen4
+ \fi \fi
+ \box\nextbox
+ \egroup}
+ \hbox}
+
+\def\incrementvalue#1%
+ {\expandafter\increment\csname#1\endcsname}
+
+\def\decrementvalue#1%
+ {\expandafter\decrement\csname#1\endcsname}
+
+% \translateMPinput{il2-pl}
+%
+% \startMPenvironment[global]
+% \setupbodyfont[plr]
+% \stopMPenvironment
+%
+% \TeX: ± ¶
+%
+% \startMPcode
+% draw btex MetaPost: ± ¶ etex scaled 5 ;
+% \stopMPcode
+
+\def\doMPpositiongraphic#1#2% tag setups
+ {\bgroup
+ \def\@@meta{#1:}%
+ \setupMPvariables[#2]%
+ \prepareMPpositionvariables
+ \MPshiftdrawingtrue
+ \def\doMPpositiongraphic##1##2%
+ {{% new, see (techniek)
+ \def\@@meta{##1:}%
+ \setupMPvariables[#2,##2]%
+ \prepareMPpositionvariables
+ % and needed
+ \getvalue{MPG:##1}}}% temp hack
+ \setbox\positiongraphicbox\hbox
+ {\ignorespaces
+ \executeifdefined{MPM:#1}{\executeifdefined{MPG:#1}\donothing}%
+ \removelastspace}%
+ \smashbox\positiongraphicbox
+ \box\positiongraphicbox
+ \egroup}
+
+\writestatus{\m!systems}{beware: some patches loaded from cont-new.tex!}
+
+\def\columnhbreak
+ {\ifhmode
+ \bgroup
+ \removeunwantedspaces
+ \parfillskip\zeropoint
+ \OTRSETcolumnseparator
+ \par
+ \egroup
+ \fi}
+
+\installcolumnbreakhandler {SET} \v!lokaal
+ {\columnhbreak
+ \ejectinsert
+ \ejectpage} % brrr
+ % no \OTRSETsethsize, can be mid smaller (like tabulate)
+
+% We need to make sure that we really leave the column; mid
+% column we may end up in an empty gap, and we don;t want to
+% stay there (basically such a gap is a small empty page
+% then).
+
+\installcolumnbreakhandler {SET} \v!ja
+ {\columnhbreak
+ \edef\savedmofcolumns{\the\mofcolumns}%
+ \edef\savedrealpageno{\the\realpageno}%
+ \ejectinsert
+ \ejectpage % brrr
+ \doloop
+ {\ifnum\savedmofcolumns=\mofcolumns
+ \ifnum\savedrealpageno=\realpageno
+ \OTRSETdummycolumn
+ \else
+ \exitloop
+ \fi
+ \else
+ \exitloop
+ \fi}}
+
+% testcase : pascal demo-bbi, paragraaf/aanduiding koppen
+
+\ifx\lastskipinotr\undefined \newskip\lastskipinotr \fi
+
+\installoutput\OTRSETflushpreposttext
+ {\global\setbox\precolumnbox\vbox
+ {\unvbox\normalpagebox
+ \global\lastskipinotr\lastskip}%
+ \ifdim\lastskipinotr>\zeropoint
+ \global\setbox\precolumnbox\hbox
+ {\lower\strutdepth\box\precolumnbox}%
+ \fi
+ \global\dp\precolumnbox\strutdepth
+ \ifcarryoverfootnotes \else
+ \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
+ \fi}
+
+\def\dopositionaction#1% test saves hash entry in etex
+ {\ifundefined{\POSactionprefix#1::}\else
+ \ifnum\MPp{#1}>\zerocount % new
+\setbox\scratchbox\hbox
+ \bgroup
+ \traceposstring\clap\red{<#1>}%
+ \the\everyinsertpositionaction
+ \the\everypositionaction
+ \ifcollectMPpositiongraphics
+ % can save a lot of run time
+ \pushMPdrawing
+ \MPshiftdrawingtrue
+ \resetMPdrawing
+ \getvalue{\POSactionprefix#1::}%
+ \ifMPdrawingdone
+ \getMPdrawing
+ \fi
+ \resetMPdrawing
+ \popMPdrawing
+ \else
+ \getvalue{\POSactionprefix#1::}%
+ \fi
+ \cleanuppositionaction{#1}%
+ \egroup
+\smashedbox\scratchbox
\else
- \let\defaultframeoffset\localoffset
+ % shouldn't happen too often
+ \traceposstring\clap\cyan{<#1>}%
\fi
- \@@localoffset\localoffset
- \advance\@@localoffset \ruledlinewidth
- \fi\fi
- \ifx\localwidth\v!passend
- \ifboxhasformat
- \boxhaswidthtrue
- \!!widtha\hsize
+ \fi}
+
+\def\MPspacechar{\char32\relax} % old solution does not work with math
+
+\def\begintbl
+ {\doglobal\newcounter\colTBL
+ \doglobal\newcounter\rowTBL
+ \doglobal\decrement\rowTBL
+ \tabskip\zeropoint
+ \halign\bgroup
+\registerparoptions
+ \ignorespaces##\unskip&&\ignorespaces##\unskip\cr}
+
+% \startcolumnset[two] \input tufte
+% \startcolumnsetspan[two] \input tufte \stopcolumnsetspan
+% \input tufte \stopcolumnset
+
+%D Well, here comes some real trickery. When we have the 100\%
+%D spot color or black color, we don't want to erase the
+%D background. So, instead we hide the content by giving it
+%D zero transparency.
+
+% todo : #1#2#3 met #2 > of < and #3 een threshold
+
+% \newif\ifhidesplitcolor \hidesplitcolortrue
+
+\def\dohidecolor#1#2%
+ {\ifhidesplitcolor
+ \ifx#1#2%
+ \dostartgraycolormode\@@cl@@o
\else
- \boxhaswidthfalse
+ \fullytransparentcolor
\fi
- \else\ifx\localwidth\v!ruim
- \boxhaswidthtrue
- \!!widtha\hsize
\else
- \boxhaswidthtrue
- \!!widtha\localwidth
- \fi\fi
- \ifx\localheight\v!passend
- \boxhasheightfalse % no longer: \boxhasstrutfalse
- \else\ifx\localheight\v!ruim
- \boxhasheightfalse
+ \dostartgraycolormode\@@cl@@o
+ \fi}
+
+\def\dovidecolor#1#2%
+ {\ifhidesplitcolor
+ \ifx#1#2%
+ \fullytransparentcolor
+ \else
+ \dostartgraycolormode\@@cl@@o
+ \fi
\else
- \boxhasheighttrue
- \!!heighta\localheight
- \fi\fi
- % this should be an option ! ! ! !
- \ifdim\!!widtha=\hsize
- \parindent\zeropoint
- \setlocalhsize
- \!!widtha\localhsize
- \fi
- % i.e. disable (colsetbackgroundproblemintechniek)
- \advance\!!widtha -2\@@localoffset
- \advance\!!heighta -2\@@localoffset
- \ifx\localstrut\v!nee
- \boxhasstrutfalse
+ \dostartgraycolormode\@@cl@@o
+ \fi}
+
+\def\fullytransparentcolor
+ {\dostartgraycolormode\@@cl@@o % better than z
+ %\global\@EA\chardef\csname\@@currenttransparent\endcsname\plusone
+ %\global\intransparenttrue
+ \dostarttransparency10}
+
+\def\noexeccolorS#1:#2\od
+ {\edef\@@cl@@s{#1}%
+ \dohidecolor\@@cl@@s\@@cl@@o}
+
+\def\noexeccolorP#1:#2:#3\od
+ {\edef\@@cl@@p{#2}%
+ \dohidecolor\@@cl@@p\@@cl@@z}
+
+\def\doexeccolorPP#1:#2:%
+ {\edef\@@cl@@n{#1}%
+ \edef\@@cl@@p{#2}%
+ \registerusedspotcolor\@@cl@@n
+ \ifx\@@cl@@n\currentspotcolor
+ \normalizeSPOT
+ \dostartgraycolormode\@@cl@@p % was spotcolormode
+ \else
+ \dovidecolor\@@cl@@p\@@cl@@o
\fi
- \ifboxhasstrut
- \setstrut
- \let\localbegstrut\begstrut
- \let\localendstrut\endstrut
- \let\localstrut \strut
+ \exectransparency}
+
+% now in cont-loc.tex, for the sake of testing.
+%
+% %D When \type {\somecolor} is issued, we can savely assume
+% %D grouping. Using \type {\groupedcommand} here (i.e.\ the
+% %D definition of \type {\color}) is unsafe because in
+% %D interferes with for instance switching attributes.
+%
+% \def\switchtocolor[#1]%
+% {\bgroup\startcolor[#1]
+% \aftergroup\stopcolor
+% \aftergroup\egroup}
+
+% this supports:
+%
+% \starttypen
+% \placelist[section][criterium=chapter,number=1] \blank
+% \placelist[section][criterium=chapter,number=2] \blank
+% \placelist[section][criterium=chapter,number=3] \blank
+%
+% \chapter{first} \section{AA} \section{BB}
+% \chapter{second} \section{CC} \section{DD}
+% \chapter{third} \section{EE} \section{FF}
+% \stoptypen
+
+\def\dosettoclevel#1#2%
+ {\ifundefined{#1#2\c!nummer}%
+ \dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty
\else
- \let\localbegstrut\pseudobegstrut % was: \relax
- \let\localendstrut\pseudoendstrut % was: \relax
- \let\localstrut \pseudostrut % was: \relax
- %\ifboxhasheight\ifdim\!!heighta<\ht\strutbox % saveguard
- % \let\localbegstrut\relax % but not that
- % \let\localstrut \relax % save afterall
- %\fi\fi
+ \doifelsevaluenothing{#1#2\c!nummer}%
+ {\dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty}
+ {\setsectieenkoppeling{\getvalue{#1#2\c!criterium}}%
+ \dosetfilterlevel
+ {\previoussection\@@sectie}%
+ {\getvalue{#1#2\c!nummer}}}%
+ \fi}
+
+\def\GetPar
+ {\expanded
+ {\dowithpar
+ {\the\BeforePar
+ \BeforePar\emptytoks}
+ {\the\AfterPar
+ \BeforePar\emptytoks
+ \AfterPar\emptytoks}}}
+
+\def\GotoPar
+ {\expanded
+ {\dogotopar
+ {\the\BeforePar
+ \BeforePar\emptytoks}}}
+
+\def\@@somedefinitie#1[#2]#3%
+ {\dowithpar
+ {\bgroup\executedoordefinitie{#1}[#2]{#3}}%
+ {\@@stopdefinitie{#1}}}
+
+% test this for a long time, esp since from now on, by default
+% \commands are not expanded
+
+\setupreferencing
+ [\c!expansie=\v!nee]
+
+\def\dotextreference[#1]#2%
+ {\bgroup
+ \def\asciia{#1}%
+ \convertexpanded\??rf{#2}\asciib
+ \@EA\rawtextreference\@EA\s!txt\@EA\asciia\@EA{\asciib}%
+ \egroup}
+
+\def\dopagereference[#1]%
+ {\rawpagereference\s!pag{#1}}
+
+\def\doreference[#1]#2%
+ {\bgroup
+ \def\asciia{#1}%
+ \convertexpanded\??rf{#2}\asciib
+ \@EA\rawreference\@EA\s!ref\@EA\asciia\@EA{\asciib}%
+ \egroup}
+
+\def\hyphenationpoint
+ {\hskip\zeropoint}
+
+\def\hyphenated#1%
+ {\bgroup
+ \!!counta\zerocount
+ \def\hyphenated##1{\advance\!!counta\plusone}%
+ \handletokens#1\with\hyphenated
+ \!!countb\plusone
+ \def\hyphenated##1%
+ {##1%
+ \advance\!!countb\plusone\relax
+ \ifnum\!!countb>2 \ifnum\!!countb<\!!counta
+ \hyphenationpoint
+ \fi\fi}%
+ \handletokens#1\with\hyphenated
+ \egroup}
+
+\def\obeysupersubletters
+ {\let\super\normalsuper
+ \let\suber\normalsuber
+ \let\normalsuper\letterhat
+ \let\normalsuber\letterunderscore
+ \enablesupersub}
+
+\def\obeysupersubmath
+ {\let\normalsuper\letterhat
+ \let\normalsuber\letterunderscore
+ \enablesupersub}
+
+%\let\normaltype\type
+%
+%\def\type#1%
+% {\expanded{\normaltype{\detokenize{#1}}}}
+
+% {x123 \os x123} {\tfa x123 \os x123} {x123 \tx x123 \os x123}
+% \definefontsynonym[OldStyle][Serif]
+% {x123 \os x123} {\tfa x123 \os x123} {x123 \tx x123 \os x123}
+
+% testen :
+%
+% \appendtoks
+% \let\registerparoptions\relax
+% \to \everyforgetall
+
+\newsignal\noblanksignal
+
+\def\docomplexdoblanko[#1]% pas op \relax's zijn nodig ivm volgende \if
+ {\global\blankoresetfalse
+ \global\blankoblokkeerfalse
+ \global\blankogeenwitfalse
+ \global\lokaalblankoflexibelfalse
+ \global\lokaalblankovastfalse
+ \global\blankoskip\zeropoint
+ \global\blankoforceerfalse
+ \blankobuitenfalse
+ \expanded{\rawprocesscommalist[#1]}\doblanko
+ \ifdim\blankoskip=\zeropoint\relax
+ \iflokaalblankoflexibel
+ \doglobal\advance\blankoskip \currentblanko
+ \else\iflokaalblankovast
+ \doglobal\advance\blankoskip \currentblanko
+ \fi\fi
\fi
- \ifboxhasheight
- \let\\\vboxednewline
- \ifboxhaswidth
- \let\hairline\vboxedhairline
- \ifboxhasformat
- \let\next\doformatboxSomeFormat
- \else
- \let\next\doformatboxNoFormat
+ \ifblankobuiten
+ \else
+ \par
+ \ifvmode %in pos fonts gaat dit mis
+ \ifblankoforceer%\ifdim\prevdepth>\zeropoint\else
+ % -1000pt signals top of page or column (\ejectcolumn)
+ \vbox{\strut}\kern-\lineheight
\fi
- \else
- \let\hairline\hboxedhairline
- \ifboxhasformat
- \let\next\doformatboxHeight
+ \ifblankoblokkeer
+ \global\doeblankofalse
+ \ifgridsnapping
+ \ifdim\prevdepth<\zeropoint
+ % brrr
+ \else
+ % dirty trick: smaller blanks are ignored after
+ % a larger one, so 10 lines is probably safe; first make
+ % sure that we honor penalties
+ \scratchcounter\lastpenalty
+ % now comes the trick (cross our fingers that this works
+ % well in multi columns; maybe an ifinner test is needed
+ % \vskip-10\lineheight
+ % \ifnum\scratchcounter=\zerocount \else \penalty\lastpenalty \fi
+ % \vskip 10\lineheight
+ % allas, this leads to overfull pages, so we try this:
+ \kern-\noblanksignal
+ \ifnum\scratchcounter=\zerocount
+ \else
+ \penalty\lastpenalty
+ \fi
+ \kern\noblanksignal
+ % end-of-dirty-trick
+ \fi
+ \else
+ \ifdim\prevdepth<\zeropoint
+ % brrr
+ \else
+ % ensure at least a proper prevdepth, this should be
+ % an option
+ \vskip-\prevdepth
+ \vskip\strutdepth
+ \prevdepth\strutdepth
+ \fi
+ % the old crappy piece of code
+ \edef\oldprevdepth{\the\prevdepth}%
+ \prevdepth\newprevdepth
+ \fi
\else
- \let\next\doformatboxVSize
+ \global\doeblankotrue
\fi
- \fi
- \else
- \ifboxhaswidth
- \ifboxhasformat
- \let\hairline\vboxedhairline
- \let\\\vboxednewline
- \let\next\doformatboxWidth
- \else
- \let\hairline\hboxedhairline
- \let\\\hboxednewline
- \let\next\doformatboxHSize
+ \ifblankoreset
+ \global\doeblankotrue
+ \ifgridsnapping
+ % let's play safe and not fool around with the depth, if
+ % only because it took a lot of effort to sort out the grid
+ % stuff in the first place
+ \else
+ \ifdim\prevdepth=\newprevdepth
+ \prevdepth\oldprevdepth
+ \fi
+ \fi
+ \fi
+ \ifdoeblanko
+ \ifdim1\lastskip<1\blankoskip\relax
+ % else when \blanko[2*groot] + \blanko[3*groot] with parskip
+ % equaling 1*groot, gives a groot=\parskip so adding a small
+ % value makes it distinguishable; can also be done at parskip
+ % setting time (better)
+ \global\advance\blankoskip \mindimen\relax % = skip
+ % test this on 2* + 3* and parskip groot
+ \ifblankogeenwit
+ \global\advance\blankoskip -\parskip
+ \else
+ \ifdim\lastskip=\parskip
+ \else % force this due to previous comment
+ \ifdim\parskip>\zeropoint\relax
+ \ifdim\blankoskip<\parskip\relax
+ \global\blankoskip\zeropoint
+ \else
+ \global\advance\blankoskip -\parskip
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifblankoflexibel \else
+ \blankoskip1\blankoskip
+ \fi
+ \iflokaalblankovast
+ \blankoskip1\blankoskip
+ \fi
+ \iflokaalblankoflexibel
+ \blankoskip1\blankoskip
+ \!!plus\skipgluefactor\blankoskip
+ \!!minus\skipgluefactor\blankoskip
+ \fi
+ \ifgridsnapping
+ \ifdim\lastkern=\noblanksignal
+ \global\doeblankofalse
+ \fi
+ \else
+ \ifdim\prevdepth=\newprevdepth
+ \global\doeblankofalse
+ \fi
+ \fi
+ \ifdoeblanko
+ \iffuzzyvskip
+ \removelastfuzzyvskip
+ \fuzzyvskip\blankoskip\relax
+ \else
+ \removelastskip
+ \vskip\blankoskip\relax
+ \fi
+ \fi
+ \else
+ \iffuzzyvskip
+ \removelastfuzzyvskip
+ \fuzzyvskip\blankoskip\relax
+ \else
+ % new, test this on pascal
+ \ifdim\blankoskip<\zeropoint
+ \advance\blankoskip-\lastskip
+ \removelastskip
+ \ifdim\blankoskip>\zeropoint
+ \vskip\blankoskip
+ \else
+ \vskip\zeropoint
+ \fi
+ \else
+ % also new
+ \ifdim\blankoskip=\zeropoint
+ \ifblankogeenwit
+ \geenwitruimte
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
\fi
- \else
- \let\hairline\hboxedhairline
- \let\\\hboxednewline
- \let\next\doformatboxNoSize
- \fi
- \fi
- \edef\framedwidth % a new feature, visible fo ruser
- {\ifdim\!!widtha >\zeropoint\the\!!widtha \else\zeropoint\fi}%
- \edef\framedheight% a new feature, visible fo ruser
- {\ifdim\!!heighta>\zeropoint\the\!!heighta\else\zeropoint\fi}%
- % first alternative
- %\def\dowithframedbox%
- % {\let\postprocessframebox\undefined %new
- % \aftergroup\stoplocalframed}%
- % \afterassignment\dowithframedbox
- % \setbox\framebox=\next}
- % second alternative
- %\dowithnextbox
- % {\setbox\framebox=\box\nextbox
- % \let\postprocessframebox\undefined %new
- % \stoplocalframed}
- % \next}
- % third alternative
- \afterassignment\dodowithframebox
- \setbox\framebox\next}
-
-\def\stoplocalframed%
- {\dontshowcomposition
- \ifboxhasformat
- \ifx\localwidth\v!passend
- \ifreshapeframebox\doreshapeframedbox\fi
- \boxhaswidthfalse
- \else
- \resetshapeframebox
\fi
- \else
- \resetshapeframebox
- \fi
- \ifboxhaswidth
- \wd\framebox\!!widtha
\fi
- \ifboxhasheight
- \ht\framebox\!!heighta
- \fi
- \doifvalue{\@@framed\c!leeg}\v!ja
- {\setbox\scratchbox\null
- \wd\scratchbox\wd\framebox
- \ht\scratchbox\ht\framebox
- \dp\scratchbox\dp\framebox
- \setbox\framebox\box\scratchbox}%
- \stopregistercolor
- \docolorframebox
- \ifboxhasoffset
- \dooffsetframebox
- \fi
- \ifboxisoverlaid \else
- \dolocateframebox
- \fi
- \ifx\postprocessframebox\undefined \else
- \postprocessframebox\framebox
- \fi
- \edef\overlaylinecolor{\getvalue{\@@framed\c!kaderkleur}}%
- \edef\overlaylinewidth{\the\ruledlinewidth}% \@@...
- \ifboxhasframe % real or invisible frame
- \doframedbox
- \fi
- \doifvaluesomething{\@@framed\c!achtergrond}\dobackedbox
- \ifx\@@locallocation\v!laag
- \doinlineframedbox
- \else\ifx\@@locallocation\v!diepte
- \doloweredframedbox
- \fi\fi
- \box\framebox
- \egroup
+ \global\fuzzyvskipfalse
+ \presetindentation}
+
+\def\processfilelinesverbatim#1#2#3%
+ {\bgroup
+ \let\saveddoflushverbatimline\doflushverbatimline
+ \let\saveddoemptyverbatimline\doemptyverbatimline
+ \def\checkverbatimfileline##1%
+ {\ifnum\verbatimlinenumber<#2\else
+ \ifnum\verbatimlinenumber>#3\else
+ ##1%
+ \fi\fi}%
+ \def\doflushverbatimline
+ {\checkverbatimfileline\saveddoflushverbatimline}%
+ \def\doemptyverbatimline
+ {\checkverbatimfileline\saveddoemptyverbatimline}%
+ \processfileverbatim{#1}%
\egroup}
+
+\def\typefile
+ {\dodoubleempty\dotypefile}
+
+\def\dotypefile[#1][#2]#3%
+ {\ifsecondargument
+ \dodotypefile[#1][#2]{#3}%
+ \else\iffirstargument
+ \doifassignmentelse{#1}
+ {\dodotypefile[\v!file][#1]{#3}}
+ {\dodotypefile[#1][]{#3}}%
+ \else
+ \dodotypefile[\v!file][]{#3}%
+ \fi\fi}
+
+\def\dosetuptypelinenumbering#1#2%
+ {\setuptyping[#1][\c!start=,\c!stop=,\c!stap=,\c!nregels=,#2]%
+ \doifelsevalue{\??tp#1\c!nummeren}\v!file
+ {\stelregelnummerenin[\c!methode=\v!file]%
+ \donetrue}
+ {\doifelsevalue{\??tp#1\c!nummeren}\v!regel
+ {% \stelregelnummerenin defaults start/step to 1/1, so we need
+ \doifvaluenothing{\??tp#1\c!start}{\setvalue{\??tp#1\c!start}{1}}%
+ \doifvaluenothing{\??tp#1\c!stap }{\setvalue{\??tp#1\c!stap }{1}}%
+ \stelregelnummerenin
+ [\c!methode=\v!type,
+ \c!start=\getvalue{\??tp#1\c!start},
+ \c!stap=\getvalue{\??tp#1\c!stap}]%
+ \donetrue}
+ {\donefalse}}%
+ \ifdone
+ \def\beginofverbatimlines{\startregelnummeren}%
+ \def\endofverbatimlines {\stopregelnummeren }%
+ \fi}
+
+\def\dodotypefile[#1][#2]#3%
+ {\getvalue{\??tp#1\c!voor}%
+ \doiflocfileelse{#3}
+ {\startopelkaar % includes \bgroup
+ \dosetuptypelinenumbering{#1}{#2}%
+ \doifinset{\getvalue{\??tp#1\c!optie}}{\v!commandos,\v!schuin,\v!normaal}
+ {\setuptyping[#1][\c!optie=\v!geen]}%
+ \doifvalue{\??tp#1\c!optie}\v!kleur
+ {\expandafter\aftersplitstring#3\at.\to\prettyidentifier
+ \letvalue{\??tp#1\c!optie}\prettyidentifier}%
+ \initializetyping{#1}%
+ \startverbatimcolor
+ \makelocreadfilename{#3}%
+ \doifundefinedelse{\??tp#3\v!globaal\c!start}
+ {\scratchcounter\zerocount}
+ {\scratchcounter\getvalue{\??tp#3\v!globaal\c!start}}%
+ \advance\scratchcounter\plusone
+ \setxvalue{\??tp#3\v!globaal\c!start}{\the\scratchcounter}%
+ \doifelsevaluenothing{\??tp#1\c!start}
+ {\processfileverbatim\readfilename}
+ {\doifvalue{\??tp#1\c!start}\v!verder
+ {\setevalue{\??tp#1\c!start}%
+ {\getvalue{\??tp#3\v!globaal\c!start}}}%
+ \doifelsevaluenothing{\??tp#1\c!stop}
+ {\doifelsevaluenothing{\??tp#1\c!nregels}
+ {\processfileverbatim\readfilename}
+ {\scratchcounter\getvalue{\??tp#1\c!start}%
+ \advance\scratchcounter\getvalue{\??tp#1\c!nregels}%
+ \advance\scratchcounter\minusone
+ \setxvalue{\??tp#3\v!globaal\c!start}%
+ {\the\scratchcounter}%
+ \processfilelinesverbatim\readfilename
+ {\getvalue{\??tp#1\c!start}}
+ {\getvalue{\??tp#3\v!globaal\c!start}}}}%
+ {\processfilelinesverbatim\readfilename
+ {\getvalue{\??tp#1\c!start}}
+ {\getvalue{\??tp#1\c!stop }}}}%
+ \stopverbatimcolor
+ \stopopelkaar} % includes \egroup
+ {\bgroup
+ \expanded{\convertargument#3}\to\ascii
+ \tttf[\makemessage\m!verbatims1\ascii]%
+ \showmessage\m!verbatims1\ascii
+ \egroup}%
+ \getvalue{\??tp#1\c!na}}
+
+% \setuptyping[file][numbering=file]
+%
+% \typefile[start=2,nlines=3]{zapf}
+% \typefile[start=continue,nlines=13]{zapf}
+% \typefile{zapf}
+%
+% \setuptyping[file][numbering=line]
+%
+% \typefile[start=4,step=3]{zapf}
+% \typefile{zapf}
-%D This alternative is slower, since it works on top of the
-%D color (stack) mechanism, but it does provide nesting.
+\def\startgridcorrection
+ {\dosingleempty\dostartgridcorrection}
+
+\def\dostartgridcorrection[#1]%
+ {\ifgridsnapping
+ \iffirstargument\doifsomething{#1}{\verplaatsopgrid[#1]}\fi
+ \snaptogrid\vbox\bgroup
+ \else
+ \startbaselinecorrection
+ \fi}
+
+\def\stopgridcorrection
+ {\ifgridsnapping
+ \egroup
+ \else
+ \stopbaselinecorrection
+ \fi}
+
+\def\checkgridsnapping
+ {\lineskip\ifgridsnapping\zeropoint\else\normallineskip\fi}
+
+\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}
+
+\def\startplaatsen
+ {\dosingleempty\dostartplaatsen}
+
+\def\dostartplaatsen[#1]% tzt n*links etc
+ {\endgraf
+ \noindent\bgroup
+ \setlocalhsize
+ \hbox to \localhsize\bgroup
+ \doifnot{#1}\v!links\hss
+ \def\stopplaatsen
+ {\unskip\unskip\unskip
+ \doifnot{#1}\v!rechts\hss
+ \egroup
+ \egroup
+ \endgraf}%
+ \gobblespacetokens}
+
+% \startplaatsen[links] bla \stopplaatsen
+
+% we don't register the paragraph characteristics, only the
+% width
+
+\appendtoks
+ \setinnerparpositions % see "techniek" for application
+\to \everytabulate
+
+\appendtoks \checkcurrentlayout \to \everystarttext
+
+\def\flushfootnotes {\flushnotes}
+\def\doflushfootnotes{\doflushnotes}
+
+%D This alternative is slower, since it works on top of the
+%D color (stack) mechanism, but it does provide nesting.
\def\dosetrastercolor#1%
{\edef\@@cl@@s{#1}%
\ifx\@@cl@@s\empty
- \let\@@rsraster
+ \let\@@cl@@s\@@rsraster
\fi
\setevalue{\??cr\??rs}{\colorSpattern}}
-\def\localstartraster[#1]%
- {\bgroup\dosetrastercolor{#1}\localstartcolor[\??rs]}
+% beware, don't add extra grouping, else color in tables
+% fails
-\def\localstopraster
- {\localstopcolor\egroup}
+\def\localstartraster[#1]%
+ {\ifincolor\dosetrastercolor{#1}\localstartcolor[\??rs]\fi}
\def\startraster[#1]%
- {\bgroup\dosetrastercolor{#1}\startcolor[\??rs]}
+ {\ifincolor\dosetrastercolor{#1}\startcolor[\??rs]\fi}
-\def\stopraster
- {\stopcolor\egroup}
+\def\localstopraster{\ifincolor\localstopcolor\fi}
+\def\stopraster {\ifincolor\stopcolor\fi}
\def\fontclassname#1#2%
{\ifcsname\??ff#1#2\endcsname
@@ -329,24 +921,32 @@
{\dotripleargument\dodefineclassfontsynonym}
\def\dodefineclassfontsynonym[#1][#2][#3]%
- {\definefontsynonym[#1][\fontclassname{#2}{#3}]}
+ {\definefontsynonym[#1][\fontclassname{#2}{#3}]}
-%\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}]
+%\definefontsynonym [KopFont] [\fontclassname{officina}{SerifBold}]
%
-%\defineclassfontsynonym [KopFont] [officina] [SerifBold]
+%\defineclassfontsynonym [KopFont] [officina] [SerifBold]
-\def\woordrechts % zie naw
+\def\woordrechts % zie naw
{\groupedcommand
- {\hfill\allowbreak\strut\hfill\hbox}
- {\parfillskip\zeropoint\par}}
+ {\removeunwantedspaces
+ \hfill
+ \hskip\zeropoint % permit break, \allowbreak fails here
+ \strut
+ \hfill
+ \quad % decent spacing
+ \hbox}
+ {\parfillskip\zeropoint
+ \par}}
-\def\startkolomopmaak % don't change
+\def\startkolomopmaak % don't change
{\bgroup
- \getrawnoflines\teksthoogte % teksthoogte kan topskip hebben, dus raw
+ \getrawnoflines\teksthoogte % teksthoogte kan topskip hebben, dus raw
\scratchdimen\noflines\lineheight
\advance\scratchdimen-\lineheight
\advance\scratchdimen\topskip
- \setbox\scratchbox\vbox to \scratchdimen\bgroup}
+ \setbox\scratchbox
+ \ifcase\showgridstate\vbox\else\ruledvbox\fi to \scratchdimen\bgroup}
\def\stopkolomopmaak
{\egroup
@@ -355,9 +955,7 @@
\box\scratchbox
\egroup}
-\writestatus{\m!systems}{beware: some patches loaded from cont-new.tex!}
-
-% todo : hoe komt box er uit
+% todo : hoe komt box er uit
\long\def\startexternalfigure
{\dotripleempty\dostartexternalfigure}
@@ -365,11 +963,11 @@
\long\def\dostartexternalfigure[#1][#2][#3]#4\stopexternalfigure
{\gdef\figuredescription{#4}%
\externalfigure[#1][#2][#3]%
- \global\let\figuredescription\empty}
+ \globallet\figuredescription\empty}
\let\figuredescription\empty
-% very experimental
+% very experimental
\def\redoanalyzefigurefiles#1%
{\ifcase\figurestatus
@@ -391,257 +989,6 @@
\doanalyzefigurefiles\doanalyzefigurefilesB
\doanalyzefigurefiles\doanalyzefigurefilesC}
-\def\regelweergave
- {\@@rnlinks\convertnumber\@@rnconversie\linenumber\@@rnrechts}
-
-% extension to page-lin
-
-\def\dodoschrijfregelnummer%
- {% beware of em's, the font is already switched !
- \setbox\scratchbox\hbox
- {\setbox0\hbox{\@@rncommando{\regelweergave}}\vsmashbox0%
- \ifcase\linenumberlocation
- \rlap{\hbox to \@@rnbreedte{\box0\hss}}% was \llap, nog testen !!
- \or
- %\llap{\hbox to \@@rnbreedte{\hss\box0\hskip\linkermargeafstand}}%
- \inleftmargin
- {\forgetall
- \doifelse\@@rnbreedte\v!marge
- {\hsize\linkermargebreedte}{\hsize\@@rnbreedte}%
- \alignedline\@@rnuitlijnen\v!rechts{\box0\hskip\@@rnafstand}}%
- \else
- \inrightmargin
- {\forgetall
- \doifelse\@@rnbreedte\v!marge
- {\hsize\rechtermargebreedte}{\hsize\@@rnbreedte}%
- \alignedline\@@rnuitlijnen\v!links{\hskip\@@rnafstand\box0}}%
- \fi}%
- \vsmashbox\scratchbox
- \box\scratchbox}
-
-\stelregelnummerenin
- [\c!breedte=\ifcase\linenumberlocation2em\else\v!marge\fi,
- \c!links=,
- \c!rechts=,
- \c!commando=,
- \c!afstand=\zeropoint,
- \c!uitlijnen=\ifcase\linenumberlocation\v!rechts\or\v!rechts\or\v!links\fi]
-
-% another one
-
-\newevery \everylinenumber \relax
-
-\let\normaldodoschrijfregelnummer\dodoschrijfregelnummer
-
-\def\dodoschrijfregelnummer
- {\normaldodoschrijfregelnummer
- \the\everylinenumber}
-
-% new
-
-\newcounter\linenotecounter
-\newtoks \collectedlinenotes
-\newif \iftracelinenotes
-
-\appendtoks
- \the\collectedlinenotes
-\to \everylinenumber
-
-\appendtoks
- \global\collectedlinenotes\emptytoks
-\to \beforeeverylinenumbering
-
-\def\handlelinenote#1#2%
- {\bgroup
- \expanded{\beforesplitstring#1}\at--\to\linenotelinenumber
- \ifnum\linenotelinenumber=\linenumber\relax
- % todo: \onlyfootnote{#1}{#2}% == configurable
- \setupfootnotes[\c!nummercommando=\gobbleoneargument]%
- \footnotetext{#1: #2}%
- \fi
- \egroup}
-
-\def\tracedlinenote#1%
- {\iftracelinenotes
- \hbox to \zeropoint
- {\forgetall
- \localcolortrue
- \hsize\zeropoint
- \hss
- \vbox to \strutheight{\llap{\red\infofont\setstrut\linenotecounter}\vss}%
- {\blue\vl}%
- \vbox to \strutheight{\rlap{\red\infofont\setstrut#1}\vss}%
- \hss}%
- \prewordbreak
- \fi}
-
-\def\linenote#1%
- {\doglobal\increment\linenotecounter
- \doifreferencefoundelse{\??rr:\linenotecounter}%
- {\doglobal\@EA\appendtoks\@EA\handlelinenote\@EA
- {\currenttextreference}{#1}\to\collectedlinenotes}
- {}%
- \tracedlinenote\empty
- \expanded{\eenregel[\??rr:\linenotecounter]}}
-
-\def\startlinenote[#1]#2%
- {\doifreferencefoundelse{\??rr:#1}%
- {\doglobal\@EA\appendtoks\@EA\handlelinenote\@EA
- {\currenttextreference}{#2}\to\collectedlinenotes}
- {}%
- \tracedlinenote{#1}%
- \startregel[\??rr:#1]}
-
-\def\stoplinenote[#1]%
- {\stopregel[\??rr:#1]}
-
-% \startbuffer[test]
-% \startlinenumbering[100]
-% test \linenote {oeps} test test test test test test
-% test \startlinenote [well] {oeps} test test test test test test
-% test \linenote {oeps} test test test test test test
-% test \linenote {oeps} test test test test test test
-% test \linenote {oeps} test test test test test test
-% test \linenote {oeps} test test test test test test
-% test \stoplinenote [well] test test test test test test
-% \stoplinenumbering
-% \stopbuffer
-%
-% {\typebuffer[test] \getbuffer[test]} \page
-%
-% \startbuffer[setup]
-% \setuplinenumbering
-% [align=left]
-% \stopbuffer
-%
-% {\typebuffer[setup] \getbuffer[setup,test]} \page
-%
-% \startbuffer[setup]
-% \setuplinenumbering
-% [width=1em,
-% align=left]
-% \stopbuffer
-%
-% {\typebuffer[setup] \getbuffer[setup,test]} \page
-%
-% \startbuffer[setup]
-% \setuplinenumbering
-% [width=2em,
-% distance=.5em,
-% align=left]
-% \stopbuffer
-%
-% {\typebuffer[setup] \getbuffer[setup,test]} \page
-%
-% \startbuffer[setup]
-% \setuplinenumbering
-% [width=2em,
-% align=middle]
-% \stopbuffer
-%
-% {\typebuffer[setup] \getbuffer[setup,test]} \page
-%
-% \startbuffer[setup]
-% \setuplinenumbering
-% [conversion=romannumerals,
-% start=1,
-% step=1,
-% location=text,
-% style=slanted,
-% color=blue,
-% width=1.5em]
-% \stopbuffer
-%
-% {\typebuffer[setup] \startnarrower\getbuffer[setup,test]\stopnarrower} \page
-%
-% \startbuffer[setup]
-% \setuplinenumbering
-% [width=4em,
-% left=--,
-% right=--,
-% align=middle]
-% \stopbuffer
-%
-% {\typebuffer[setup] \getbuffer[setup,test]} \page
-%
-% \startbuffer[setup-1]
-% \setuplinenumbering
-% [style=\bfxx,
-% command=\WatchThis]
-% \stopbuffer
-%
-% \startbuffer[setup-2]
-% \def\WatchThis#1%
-% {\ifodd\linenumber
-% \definecolor[linecolor][red]%
-% \else
-% \definecolor[linecolor][green]%
-% \fi
-% \inframed
-% [offset=1pt,frame=off,background=color,backgroundcolor=linecolor]
-% {#1}}
-% \stopbuffer
-%
-% {\typebuffer[setup-1,setup-2] \getbuffer[setup-1,setup-2,test]} \page
-%
-% \startbuffer[setup-1]
-% \setuplinenumbering
-% [location=inright,
-% style=\bfxx,
-% command=\WatchThis]
-% \stopbuffer
-%
-% {\typebuffer[setup-1] \getbuffer[setup-1,setup-2,test]} \page
-
-\def\OTRSETgotocell#1#2% not that robust
- {\endgraf
- \gdef\gotocellcounter{0}%
- \doloop
- {\ifnum\mofcolumns<#1\relax
- \doglobal\increment\gotocellcounter\relax
- \ifnum\gotocellcounter>#1\relax
- \line{\strut}\crlf
- \line{\strut}\crlf
- \kolom % \column
- \writestatus{columnset}{quitting goto cell}%
- \exitloop
- \else
- \kolom % \column
- \fi
- \else
- \exitloop
- \fi}%
- \ifnum\mofcolumns=#1\relax
- \ifnum#2>1
- \scratchcounter=0
- \currenthcell\mofcolumns
- \currentvcell#2\advance\currentvcell -1
- \dorecurse\currentvcell
- {\OTRSETdoifcellelse\mofcolumns\recurselevel\donothing
- {\advance\scratchcounter1\relax}}
- \getnoflines\pagetotal
- \advance\scratchcounter-\noflines
- \ifnum\scratchcounter>0
- \dorecurse\scratchcounter{\line{\strut}}%
- \fi
- \fi
- \fi
- \OTRSETsetvsize}
-
-\def\setlocalfloatdimensions#1#2% experimental ! ! ! !
- {\doifvaluesomething{\??fl#1\c!maxbreedte}
- {\scratchdimen=\getvalue{\??fl#1\c!maxbreedte}\relax
- \ifdim\wd\nextbox>\scratchdimen
- \setbox\nextbox=\hbox to \scratchdimen
- {\doifcommonelse{\v!rechts,\v!inrechter,\v!links,\v!inlinker}{#2}
- {\doifnotcommon{\v!rechts,\v!inrechter}{#2}\hss
- \box\nextbox
- \doifnotcommon{\v!links ,\v!inlinker }{#2}\hss}%
- {\doifvalue{\??fl#1\c!plaats}\v!rechts\hss
- \box\nextbox
- \doifvalue{\??fl#1\c!plaats}\v!links \hss}}%
- \fi}}
-
\def\phantombox[#1]%
{\hbox\bgroup
\getparameters
@@ -663,212 +1010,40 @@
{\long\noexpand\def\noexpand\xdostartsetups##1##2\csname\e!stop\e!instellingen\endcsname%
{\egroup
\long\noexpand\setvalue{\??su##1}{##2}}}
-
-\def\startsetups#1 % for international purposes
- {\bgroup
- \catcode`\^^M=\@@ignore
- \dostartsetups{#1}}
-
-\long\def\dostartsetups#1#2\stopsetups
- {\egroup
- \long\setvalue{\??su#1}{#2}}
-
-\def\definefont
- {\dotripleempty\dodefinefont}
-
-\def\dodefinefont[#1][#2][#3]% [name][spec][1.6 | line=10pt | setup_id]
- {\doifinstringelse{ }{#2}
- {\ifthirdargument
- \unexpanded\setvalue{#1}{\redodefinefont{#1}{#2}{#3}}%
- \else
- \unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}%
- \fi}
- {\definefont[#1][#2 sa 1][#3]}}
-
-\def\redodefinefont#1#2#3%
- {\dododefinefont{#1}{#2}%
- \doifnumberelse{#3}
- {\stelinterliniein[#3]\stelspatieringin}
- {\doifassignmentelse{#3}
- {\stelinterliniein[#3]\stelspatieringin}
- {\setups[#3]}}}
-
-% \def\defineclassfont
-% {\doquadrupleempty\dodefineclassfont}
-%
-% \def\dodefineclassfont[#1][#2][#3][#4]% #2 = class
-% {\iffourthargument
-% \definefont[#1][#2#3][#4]%
-% %\else\ifthirdargument
-% % \definefont[#1][#2#3]%
-% \else
-% \definefont[#1][#2]%
-% \fi}
-
-% todo, but now more easy to do:\definepage
-
-\def\docomplexpagina[#1]%
- {\flushnotes
- \bgroup
- \def\dodocomplexpagina##1%
- {\csname
- @@\v!pagina\ifundefined{@@\v!pagina##1}\s!unknown\else##1\fi
- \endcsname}%
- \processcommalist[#1]\dodocomplexpagina
- \egroup}
-
-\def\installpagehandler#1#2%
- {\setvalue{@@\v!pagina#1}{#2}}
-
-\installpagehandler \s!unknown
- {\let\@@pagespecification\commalistelement
- \doifinstringelse{+}\@@pagespecification
- {\ejectinsert\ejectpage
- \dorecurse\@@pagespecification\ejectdummypage}
- {\doifnumberelse\@@pagespecification
- {\ejectinsert\ejectpage
- \doloop
- {\ifnum\userpageno<\@@pagespecification\relax
- \ejectdummypage
- \else
- \exitloop
- \fi}}
- {}}}
-
-\installpagehandler \s!default
- {} % do nothing if empty
-
-\installpagehandler \v!reset
- {\global\paginageblokkeerdfalse}
-
-\installpagehandler \v!blokkeer
- {\global\paginageblokkeerdtrue}
-
-\installpagehandler \v!ja
- {\ifpaginageblokkeerd\else
- \ejectinsert
- \ejectpage
- \ifbinnenkolommen
- \ejectpage % anders soms geen overgang
- \fi
- \fi}
-
-\installpagehandler \v!opmaak
- {\ifpaginageblokkeerd\else
- \eject
- \fi}
-
-\installpagehandler \v!blanko
- {\pagebodyornamentsfalse}
-
-\installpagehandler \v!nee
- {\ifpaginageblokkeerd\else
- \dosomebreak\nobreak
- \fi}
-
-\installpagehandler \v!voorkeur
- {\ifpaginageblokkeerd\else
- \ifbinnenkolommen
- \dosomebreak\goodbreak
- \else
- \testpagina[3][\!!zeropoint]%
- \fi
- \fi}
-
-\installpagehandler \v!grotevoorkeur
- {\ifpaginageblokkeerd\else
- \ifbinnenkolommen
- \dosomebreak\goodbreak
- \else
- \testpagina[5][\!!zeropoint]%
- \fi
- \fi}
-
-\installpagehandler \v!leeg
- {\ejectinsert
- \ejectpage
- \doifnotvalue{\??tk\v!hoofd\c!status}{\v!stop}
- {\setupheader[\c!status=\v!leeg]}%
- \doifnotvalue{\??tk\v!voet\c!status}{\v!stop}
- {\setupfooter[\c!status=\v!leeg]}%
- \ejectdummypage}
-
-\installpagehandler \v!links
- {\ejectinsert
- \superejectpage
- \doifbothsidesoverruled
- \orsideone
- \resetcurrentsectionmarks
- \ejectdummypage
- \orsidetwo
- \od}
-
-\installpagehandler \v!rechts
- {\ejectinsert
- \superejectpage
- \doifbothsidesoverruled
- \orsideone
- \orsidetwo
- \resetcurrentsectionmarks
- \ejectdummypage
- \od}
-
-\installpagehandler \v!even
- {\pagina
- \doifonevenpaginaelse
- {\resetcurrentsectionmarks\ejectdummypage}{}}
-
-\installpagehandler \v!oneven
- {\pagina
- \doifonevenpaginaelse
- {}{\resetcurrentsectionmarks\ejectdummypage}}
-
-\installpagehandler \v!viertal
- {\ifdubbelzijdig
- \!!counta=\realpageno
- \!!countb=\realpageno
- \divide\!!counta 4
- \divide\!!countb 2
- \ifnum\!!counta=\!!countb
- \else
- \pagina
- \pagina[\v!leeg]%
- \pagina[\v!leeg]%
- \fi
- \fi}
-
-\installpagehandler \v!laatste
- {\ejectinsert
- \superejectpage\relax
- \doifbothsidesoverruled
- \naastpagina
- \orsideone
- \orsidetwo
- %\ifodd\realpageno \else % kan weer weg
- \noheaderandfooterlines
- \ejectdummypage
- %\fi
- \od
- \filluparrangedpages}
-
-\beginETEX \dimexpr
-
-\definepapersize
- [oversized]
- [\c!breedte=\dimexpr(\papierbreedte+1.5cm),
- \c!hoogte=\dimexpr(\papierhoogte+1.5cm)]
-
-\definepapersize
- [doublesized]
- [\c!breedte=\dimexpr(\papierbreedte),
- \c!hoogte=\dimexpr(2\papierhoogte)]
-
-\definepapersize
- [doubleoversized]
- [\c!breedte=\dimexpr(\papierhoogte+1.5cm),
- \c!hoogte=\dimexpr(2\papierbreedte+1.5cm)]
-
-\endETEX
+
+%\def\startsetups % for international purposes
+% {\bgroup
+% \doifnextcharelse[\startsetupsA\startsetupsB}
+%
+%\def\startsetupsA[#1]%
+% {\catcode`\^^M=\@@ignore
+% \dostartsetups{#1}}
+%
+%\def\startsetupsB#1 % space delimited
+% {\catcode`\^^M=\@@ignore
+% \dostartsetups{#1}}
+%
+%\long\def\dostartsetups#1#2\stopsetups
+% {\egroup
+% \long\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}}}
\newtoks\everyfirstparagraphintro
\newtoks\everynextparagraphintro
@@ -881,10 +1056,10 @@
\def\dosetupparagraphintro[#1][#2]%
{\processallactionsinset
[#1]
- [ \v!reset=>\global\chardef\everyparagraphintro=0
+ [ \v!reset=>\global\chardef\everyparagraphintro0
\global\everyfirstparagraphintro\emptytoks
\global\everynextparagraphintro \emptytoks,
- \v!eerste=>\global\chardef\everyparagraphintro=1
+ \v!eerste=>\global\chardef\everyparagraphintro1
\doglobal\appendtoks#2\to\everyfirstparagraphintro,
\v!volgende=>\ifcase\everyparagraphintro\global\chardef\everyparagraphintro=2\fi
\doglobal\appendtoks#2\to\everynextparagraphintro,
@@ -897,7 +1072,7 @@
% no data
\or
% first data
- \global\chardef\everyparagraphintro=2
+ \global\chardef\everyparagraphintro2
\scratchtoks\everyfirstparagraphintro
\global\everyfirstparagraphintro\emptytoks
\or
@@ -932,35 +1107,6 @@
%D some paragraph \par
%D \stoptypen
-\def\@@themaintextcolor{themaintextcolor}
-
-\def\starttextcolor[#1]%
- {\doifsomething{#1}
- {\bgroup
- \def\stoptextcolor % also goes ok with \page after
- {\let\maintextcolor\empty % this one because the top of
- \stopregistercolor % page sets the color right (side
- \egroup}% % effect)
- \def\starttextcolor[##1]%
- {\bgroup
- \definecolor[\@@themaintextcolor][##1]%
- \let\stoptextcolor\egroup}%
- \startregistercolor[\@@themaintextcolor]%
- \definecolor[\@@themaintextcolor][#1]%
- \let\maintextcolor\@@themaintextcolor}}
-
-\def\initializemaintextcolor
- {\doifelsenothing\@@cltekstkleur
- {\let\maintextcolor\empty}
- {\let\maintextcolor\@@themaintextcolor
- \definecolor[\@@themaintextcolor][\@@cltekstkleur]%
- \doinitializemaintextcolor}}
-
-\def\doinitializemaintextcolor
- {\appendtoks\starttextcolor[\@@themaintextcolor]\to\everystarttext
- \appendtoks\stoptextcolor \to\everystoptext
- \let\doinitializemaintextcolor\relax}
-
% wrong names
\newif\ifpagechanged \let\lastchangedpage\empty
@@ -974,10 +1120,10 @@
\fi
\fi
\ifpagechanged
- \global\letvalue{\s!paragraph:p:#1}\twopassdata
- \global\let\lastchangedpage\twopassdata
+ \letgvalue{\s!paragraph:p:#1}\twopassdata
+ \globallet\lastchangedpage\twopassdata
\else
- \global\let\lastchangedpage\realfolio
+ \globallet\lastchangedpage\realfolio
\fi
\doparagraphreference}
@@ -998,15 +1144,15 @@
{\ifcase#1\relax
\processaction
[#2]
- [ \v!hoog=>\bbox{\box\nextbox},
- \v!laag=>\tbox{\box\nextbox},
- \v!midden=>\vcenter{\box\nextbox},
- \v!laho=>\vcenter{\box\nextbox},
- \s!unknown=>\tbox{\box\nextbox},
- \s!default=>\tbox{\box\nextbox}]%
+ [ \v!hoog=>\bbox {\flushnextbox},
+ \v!laag=>\tbox {\flushnextbox},
+ \v!midden=>\vcenter{\flushnextbox},
+ \v!laho=>\vcenter{\flushnextbox},
+ \s!unknown=>\tbox {\flushnextbox},
+ \s!default=>\tbox {\flushnextbox}]%
\else
\startbaselinecorrection
- \noindent\box\nextbox
+ \noindent\flushnextbox
\stopbaselinecorrection
\fi}
@@ -1074,10 +1220,10 @@
\def\doTableinterline% #1
{\ifnum\currentTABLEcolumn>\maxTABLEcolumn
\chuckTABLEautorow
- \else\ifnum\currentTABLEcolumn=0
+ \else\ifnum\currentTABLEcolumn=\zerocount
\TABLEnoalign
- {\global\let\checkTABLEautorow\empty
- \global\let\chuckTABLEautorow\empty}%
+ {\globalletempty\checkTABLEautorow
+ \globalletempty\chuckTABLEautorow}%
\else
\setTABLEerror\TABLEmissingcolumn
\handleTABLEerror
@@ -1112,37 +1258,34 @@
\let\placefloatlabeltext \placefloatcaptiontext
\let\placefloatlabelreference \placefloatcaptionreference
-\def\checkframedtext%
- {\ifinsidefloat
- \localhsize\hsize
- \else\ifdim\sidefloatvsize>\zeropoint % will be proper handle
- % \strut % rather clean way to invoke the sidefloat OTR
- % \setbox0=\lastbox % and get the widths set, so from now on we
- % \setlocalhsize % can have framed texts alongside sidefloats
- \checksidefloat
- \setlocalhsize
- \advance\localhsize-\hangindent
- \else
- \localhsize\hsize
- \fi \fi}
-
\def\obeyfollowingtoken{{}} % end \cs scanning
\def\gobbleparameters{\doquadrupleempty\dogobbleparameters}
\def\dogobbleparameters[#1][#2][#3][#4]{}
-\def\setvariables%
+% \setvariables[xx][titel=]
+% \setvariables[xx][titel=test test]
+% \setvariables[xx][titel=test $x=1$ test] % fatal error reported
+% \setvariables[xx][titel=test {$x=1$} test]
+% \setvariables[xx][titel] % fatal error reported
+% \setvariables[xx][titel=e]
+
+\def\??vars{@@vars}
+
+\def\setvariables
{\dodoubleargument\dosetvariables}
\def\dosetvariables[#1][#2]%
- {\def\currentvariableclass{#1}%
- \getparameters[vars:#1:][#2]}
-
-% \def\getvariable#1#2%
-% {\ifundefined{vars:#1:#2}\else\getvalue{vars:#1:#2}\fi}
+ {\errorisfataltrue
+ \def\currentvariableclass{#1}%
+ \getrawparameters[\??vars:#1:][#2]%
+ \errorisfatalfalse}
\def\getvariable#1#2% to be sped up
- {\csname\ifundefined{vars:#1:#2}empty\else vars:#1:#2\fi\endcsname}
+ {\csname\ifundefined{\??vars:#1:#2}\s!empty\else\??vars:#1:#2\fi\endcsname}
+
+\def\showvariable#1#2%
+ {\showvalue{\ifundefined{\??vars:#1:#2}\s!empty\else\??vars:#1:#2\fi}}
\let\currentvariableclass\empty
@@ -1297,20 +1440,20 @@
\setupcolumnspan[#1]%
\forgetall
\ifbinnenkolommen
- \advance\hsize by \intercolumnwidth
- \hsize=\@@ksn\hsize
- \advance\hsize by -\intercolumnwidth
+ \advance\hsize \intercolumnwidth
+ \hsize\@@ksn\hsize
+ \advance\hsize -\intercolumnwidth
\fi
\dowithnextbox
- {\setbox\columnspanbox=\box\nextbox
- \ifbinnenkolommen\wd\columnspanbox=\hsize\fi
+ {\setbox\columnspanbox\flushnextbox
+ \ifbinnenkolommen\wd\columnspanbox\hsize\fi
\postprocesscolumnspanbox\columnspanbox
- \scratchdimen=\ht\columnspanbox
- \setbox\columnspanbox=\hbox % depth to be checked, probably option!
+ \scratchdimen\ht\columnspanbox
+ \setbox\columnspanbox\hbox % depth to be checked, probably option!
{\localframed[\??ks][\c!offset=\v!overlay]{\box\columnspanbox}}%
- \ht\columnspanbox=\scratchdimen
- \dp\columnspanbox=\dp\strutbox
- \wd\columnspanbox=\hsize
+ \ht\columnspanbox\scratchdimen
+ \dp\columnspanbox\dp\strutbox
+ \wd\columnspanbox\hsize
\ifbinnenkolommen
\ifnum\@@ksn>1
\setvsize
@@ -1322,10 +1465,10 @@
\else
\snaptogrid\vbox{\vphantom{\copy\columnspanbox}}
\fi}%
- \wd\currenttopcolumnbox=\hsize
- \global\advance\vsize by -\ht\currenttopcolumnbox
+ \wd\currenttopcolumnbox\hsize
+ \global\advance\vsize -\ht\currenttopcolumnbox
\fi}
- \global\pagegoal=\vsize
+ \global\pagegoal\vsize
\else
\snaptogrid\vbox{\box\columnspanbox}
\fi
@@ -1345,6 +1488,23 @@
\def\stopcolumnspan%
{\egroup}
+\def\backgroundline[#1]%
+ %{\doifsomething{#1}{\dobackgroundline{#1}}\hbox}
+ {\doifcolorelse{#1}{\dobackgroundline{#1}\hbox}\hbox}
+
+\def\dobackgroundline#1%
+ {\dowithnextbox
+ {\hbox
+ {\localcolortrue
+ \startcolor[#1]%
+ \vrule
+ \!!width \wd\nextbox
+ \!!height\ht\nextbox
+ \!!depth \dp\nextbox
+ \stopcolor
+ \hskip-\wd\nextbox
+ \box\nextbox}}}
+
%D For Ton. To be documented.
\def\plaatsexterndocument[#1]%
@@ -1370,4 +1530,3 @@
\readfile {cont-loc} {} {}
\endinput
-
diff --git a/tex/context/base/cont-nl.tex b/tex/context/base/cont-nl.tex
index 974790061..259ce0b1b 100644
--- a/tex/context/base/cont-nl.tex
+++ b/tex/context/base/cont-nl.tex
@@ -29,6 +29,6 @@
\installlanguage [\s!nl] [\c!status=\v!start]
\installlanguage [\s!it] [\c!status=\v!start]
-\setupbodyfont [cmr,rm,12pt]
+\setupbodyfont [cmr,ams,rm,12pt]
\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/cont-ro.tex b/tex/context/base/cont-ro.tex
index 1e24d4844..48f8c6164 100644
--- a/tex/context/base/cont-ro.tex
+++ b/tex/context/base/cont-ro.tex
@@ -25,6 +25,6 @@
\installlanguage [\s!de] [\c!status=\v!start]
\installlanguage [\s!ro] [\c!status=\v!start]
-\setupbodyfont [cmr,rm,12pt]
+\setupbodyfont [cmr,ams,rm,12pt]
\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/cont-uk.tex b/tex/context/base/cont-uk.tex
index b7ade6157..dbfb0263a 100644
--- a/tex/context/base/cont-uk.tex
+++ b/tex/context/base/cont-uk.tex
@@ -29,10 +29,6 @@
\installlanguage [\s!nl] [\c!status=\v!start]
\installlanguage [\s!it] [\c!status=\v!start]
-\setupbodyfont [cmr,rm,12pt]
+\setupbodyfont [cmr,ams,rm,12pt]
-\protect
-
-\dump
-
-\endinput
+\protect \errorstopmode \dump \endinput
diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex
index 81b6b4d9a..cc22ab771 100644
--- a/tex/context/base/context.tex
+++ b/tex/context/base/context.tex
@@ -15,7 +15,7 @@
\catcode`\{=1 \catcode`\}=2
-\def\contextversion{2002.6.7}
+\def\contextversion{2002.12.20}
%D Welcome to the main module. When this module is ran through
%D \type{initex} or \type{tex -i} or \type{whatevertex} using
@@ -34,8 +34,6 @@
\input syst-pln.tex % stripped plain
\input syst-prm.tex % saved primitives (will be extended)
-\input math-pln.tex % basic plain math
-
\input syst-etx.tex % etex
\input syst-omg.tex % omega
\input syst-gen.tex
@@ -43,6 +41,8 @@
\input syst-new.tex
\input syst-con.tex
+\input math-pln.tex % basic plain math
+
%D To enable selective loading, we say:
\CONTEXTtrue
@@ -132,8 +132,10 @@
\input hand-ini.tex
\input regi-ini.tex
\input lang-ini.tex
+\input unic-ini.tex
\input colo-ini.tex
+%input colo-sep.tex
\input spec-mis.tex
\input spec-ini.tex
@@ -222,6 +224,7 @@
\input core-tbl.tex
\input core-int.tex
\input core-ntb.tex
+\input core-ltb.tex
%D Like languages, fonts, encodings and symbols, \METAPOST\
%D support is also organized in its own class of modules.
@@ -287,8 +290,13 @@
\input xtag-exp.tex
\input xtag-pre.tex
\input xtag-xsd.tex
+\input xtag-rng.tex
%input xtag-ent.tex
+%D How about this:
+
+\input meta-xml.tex
+
%D The next two modules implement some additional
%D functionality concenring classes of documents and output.
%D These modules probably will be replaced some day.
@@ -398,7 +406,7 @@
\stopinterface
-\edef\copyrightversion%
+\edef\copyrightversion
{Copyright 1990-\the\normalyear\normalspace /
PRAGMA ADE / J. Hagen - A.F. Otten}
@@ -411,7 +419,7 @@
%D Let's quit this file when doing a \type {cont-..} generation.
-\doifparentfileelse{context}{\let\next\relax}{\let\next\endinput} \next
+\doifparentfileelse{context}{\donothing}{\endinput}
%D Unless we're generating a \type {cont-..} format, we also
%D do the following.
@@ -483,10 +491,18 @@
\protect
-%D Finally we 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.
+
+% \readlocfile{cont-def.tex}
+% {\writestatus{loading}{adding extensions from cont-def}}
+% {}
+
%D Now dumping the format is all that's left to be done.
\errorstopmode \dump
diff --git a/tex/context/base/core-box.tex b/tex/context/base/core-box.tex
index fe52203ab..f8003f20f 100644
--- a/tex/context/base/core-box.tex
+++ b/tex/context/base/core-box.tex
@@ -19,10 +19,19 @@
\unprotect
-\definelayer[\v!tekst-2][\c!positie=\v!ja]
-\definelayer[\v!tekst-1][\c!positie=\v!ja]
-\definelayer[\v!tekst+1][\c!positie=\v!ja]
-\definelayer[\v!tekst+2][\c!positie=\v!ja]
+% \definelayer[\v!tekst-2][\c!positie=\v!ja]
+% \definelayer[\v!tekst-1][\c!positie=\v!ja]
+% \definelayer[\v!tekst+1][\c!positie=\v!ja]
+% \definelayer[\v!tekst+2][\c!positie=\v!ja]
+
+% we need to set the size, else we get dimensions depending
+% on the content, which in itsel fis ok, but can lead to loops
+% due to rounding errors (happened in demo-obv)
+
+\definelayer[\v!tekst-2][\c!positie=\v!ja,\c!breedte=\overlaywidth,\c!hoogte=\overlayheight]
+\definelayer[\v!tekst-1][\c!positie=\v!ja,\c!breedte=\overlaywidth,\c!hoogte=\overlayheight]
+\definelayer[\v!tekst+1][\c!positie=\v!ja,\c!breedte=\overlaywidth,\c!hoogte=\overlayheight]
+\definelayer[\v!tekst+2][\c!positie=\v!ja,\c!breedte=\overlaywidth,\c!hoogte=\overlayheight]
\def\internaltextoverlay#1% will become more generic and installable
{\startoverlay % i.e. probably an overlay by itself
@@ -34,6 +43,8 @@
% {\hbox to \zeropoint{\positionoverlay{\v!tekst#1}\hss}%
% \composedlayer{\v!tekst#1}}
+% todo: share info, so that tuo will be smaller
+
\defineoverlay[\v!tekst-2][\internaltextoverlay{-2}]
\defineoverlay[\v!tekst-1][\internaltextoverlay{-1}]
\defineoverlay[\v!tekst+1][\internaltextoverlay{+1}]
@@ -70,16 +81,16 @@
{\bgroup
\checktextbackgrounds
\setbox\scratchbox\null
- \wd\scratchbox\wd\nextbox
- \ht\scratchbox\ht\nextbox
- \dp\scratchbox\dp\nextbox
+ \wd\scratchbox\nextboxwd
+ \ht\scratchbox\nextboxht
+ \dp\scratchbox\nextboxdp
\setlayer
[anchor]
[\c!breedte=\wd\scratchbox,
\c!hoogte=\ht\scratchbox,
\c!offset=\!!zeropoint,
#2,#3]
- {\setlayer[#1]{\box\nextbox}}%
+ {\setlayer[#1]{\flushnextbox}}%
\framed
[#2,
\c!achtergrond=anchor,
@@ -158,7 +169,7 @@
{\rotate
[\c!plaats=\v!hoog,
\c!rotatie=\getvalue{\??cb#1\c!rotatie}]
- {\box\nextbox}}}%
+ {\flushnextbox}}}%
\advance\@@layerysiz\dp\csname\@@collectorbox#1\endcsname
\@@layerxpos\getvalue{\??cb#1\c!x}%
\advance\@@layerxpos\getvalue{\??cb#1\c!hoffset}%
@@ -175,7 +186,7 @@
\@@layerxpos-\@@layerxpos
\fi}%
\setbox\nextbox\hbox
- {\alignedbox[\getvalue{\??cb#1\c!plaats}]\vbox{\box\nextbox}}%
+ {\alignedbox[\getvalue{\??cb#1\c!plaats}]\vbox{\flushnextbox}}%
\boxmaxdepth\zeropoint % really needed, nice example
\global\advance\boxhdisplacement\@@layerxpos
\ifdim\boxhdisplacement<\zeropoint
@@ -185,14 +196,14 @@
\fi
\global\advance\boxvdisplacement\@@layerypos
\ifdim\boxvdisplacement<\zeropoint
- \global\setbox\csname\@@collectorbox#1\endcsname=\hbox
+ \global\setbox\csname\@@collectorbox#1\endcsname\hbox
{\lower-\boxvdisplacement
\box\csname\@@collectorbox#1\endcsname}%
\fi
\@@layerxsiz\wd\csname\@@collectorbox#1\endcsname
\@@layerysiz\ht\csname\@@collectorbox#1\endcsname
\advance\@@layerysiz\dp\csname\@@collectorbox#1\endcsname
- \global\setbox\csname\@@collectorbox#1\endcsname=\hbox
+ \global\setbox\csname\@@collectorbox#1\endcsname\hbox
{\box\csname\@@collectorbox#1\endcsname
\hskip-\@@layerxsiz
\hskip\@@layerxpos\relax
@@ -201,9 +212,9 @@
\fi
\lower\@@layerypos\hbox
{\ifdim\boxvdisplacement<\zeropoint
- \lower-\boxvdisplacement\box\nextbox
+ \lower-\boxvdisplacement\flushnextbox
\else
- \box\nextbox
+ \flushnextbox
\fi}}%
\ifdim\wd\csname\@@collectorbox#1\endcsname<\@@layerxsiz
\global\wd\csname\@@collectorbox#1\endcsname\@@layerxsiz
@@ -249,7 +260,7 @@
\dowithnextbox
{\setcollector
[caption]
- {\box\nextbox}%
+ {\flushnextbox}%
\setcollector
[caption][#1]
{\getparameters[\??du][#2]%
@@ -288,7 +299,7 @@
\def\dolayeredtext[#1][#2]#3%
{\bgroup
\dowithnextbox
- {\!!widtha\nextboxwd
+ {\!!widtha \nextboxwd
\!!heighta\nextboxht
\bgroup % preserve \nextbox
\setlayer
@@ -306,7 +317,7 @@
\c!achtergrond={\v!voorgrond,caption},
\c!breedte=\!!widtha,
\c!hoogte=\!!heighta]
- {\box\nextbox}%
+ {\flushnextbox}%
\egroup}%
\hbox}
@@ -379,7 +390,7 @@
%
% \affiliation{drawing}{\externalfigure[hakker][width=3cm]}
-% pas op: aanpassen aan nieuwe layer hoek ankers
+% pas op: aanpassen aan nieuwe layer hoek ankers en columnset
\newcounter\nofbleeds % per pag
@@ -408,7 +419,7 @@
\!!donebfalse % right
\!!donecfalse % top
\!!donedfalse % bottom
-% replace this part !
+ % replace this part ! todo: default location
\processaction
[\@@bgplaats]
[ t=>\!!donectrue\let\@@bghoffset\!!zeropoint,
@@ -503,16 +514,58 @@
\fi}
\def\dosetlayerframedT[#1][#2][#3]%
- {\dowithnextbox{\setlayer[#1][#2]{\box\nextbox}}%
+ {\dowithnextbox{\setlayer[#1][#2]{\flushnextbox}}%
\hbox\framed[#3]}
\def\dosetlayerframedS[#1][#2][#3]%
{\dowithnextbox
{\setlayer
[#1]
- [\c!breedte=\wd\nextbox,\c!hoogte=\ht\nextbox,
+ [\c!breedte=\nextboxwd,\c!hoogte=\nextboxht,
\c!offset=\!!zeropoint,#2]
- {\box\nextbox}}%
+ {\flushnextbox}}%
\hbox\framed[\c!plaats=\v!normaal,#2]}
+
+\def\setlayertext
+ {\dotripleempty\dosetlayertext}
+\def\dosetlayertext[#1][#2][#3]%
+ {\bgroup
+ \getparameters
+ [\??lx]
+ [\c!uitlijnen=,
+ \c!breedte=\hsize,
+ \c!kleur=,
+ \c!letter=,
+ #3]%
+ \dowithnextboxcontent
+ {\forgetall
+ \hsize\@@lxbreedte
+ \expanded{\steluitlijnenin[\@@lxuitlijnen]}%
+ \dosetfontattribute\??lx\c!letter}
+ {\setlayer[#1][#2]{\strut\color[\@@lxkleur]{\flushnextbox}}%
+ \egroup}%
+ \vtop}
+
+% \setupbackgrounds
+% [page]
+% [background=pagefigures]
+%
+% \definelayer
+% [pagefigures]
+% [x=-2mm,
+% y=-2mm,
+% width=\paperwidth,
+% height=\paperheight]
+%
+% \definelayerpreset [lefttop] [location=rb]
+% \definelayerpreset [righttop] [corner={right,top},location={left,bottom}]
+% \definelayerpreset [leftbottom] [corner={left,bottom},location={right,top}]
+% \definelayerpreset [rightbottom] [corner={right,bottom},location={left,top}]
+%
+% \setlayer[pagefigures][preset=lefttop]
+% \setlayer[pagefigures][preset=righttop]
+% \setlayer[pagefigures][preset=leftbottom]
+% \setlayer[pagefigures][preset=rightbottom]
+
\protect \endinput
diff --git a/tex/context/base/core-buf.tex b/tex/context/base/core-buf.tex
index 46db44213..bb08de0cf 100644
--- a/tex/context/base/core-buf.tex
+++ b/tex/context/base/core-buf.tex
@@ -129,7 +129,12 @@
\unprotect
-\def\resetbuffer%
+% more accurate
+%
+% \@EA\convertcommand\csname\e!start\e!buffer\endcsname\to\beginofblock % else a space
+% \@EA\convertcommand\csname\e!stop\e!buffer \endcsname\to\endofblock
+
+\def\resetbuffer
{\dosingleempty\doresetbuffer}
\def\doresetbuffer[#1]%
@@ -146,43 +151,42 @@
%D For Willy's nested commented buffers, we need the \type
%D {\delcharacter} trick.
-% \def\processnextbufferline#1#2#3%
-% {\relax % checken waarom eerdere macro dit nodig heeft / supp-mps run
-% \convertargument#1 \to\next
-% \doifinstringelse{\delcharacter\texcommentsymbol}{\delcharacter\next}
-% {\def\next{#3}}
-% {\doifinstringelse{\endofblock}{\next}
-% {\ifnum\nestedbufferlevel=0\relax % \relax ?
-% \def\next{#2}%
-% \else
-% \decrement\nestedbufferlevel\relax
-% \def\next{#3}%
-% \fi}
-% {\doifinstringelse{\beginofblock}{\next}
-% {\increment\nestedbufferlevel\relax
-% \def\next{#3}}
-% {\def\next{#3}}}}%
-% \next}
-
-\def\processnextbufferline#1% needs testing ! ! ! !
+%\def\processnextbufferline#1% needs testing ! ! ! !
+% {\relax % checken waarom eerdere macro dit nodig heeft / supp-mps run
+% \convertargument#1 \to\next
+% \doifinstringelse{\delcharacter\texcommentsymbol}{\delcharacter\next}
+% {\let\next\secondoftwoarguments}
+% {\doifincsnameelse\endofblock\next
+% {\ifnum\nestedbufferlevel=\zerocount
+% \let\next\firstoftwoarguments
+% \else
+% \decrement\nestedbufferlevel\relax
+% \let\next\secondoftwoarguments
+% \fi}
+% {\doifincsnameelse\beginofblock\next
+% {\increment\nestedbufferlevel\relax
+% \let\next\secondoftwoarguments}
+% {\let\next\secondoftwoarguments}}}%
+% \next}
+
+\long\def\processnextbufferline#1%
{\relax % checken waarom eerdere macro dit nodig heeft / supp-mps run
\convertargument#1 \to\next
\doifinstringelse{\delcharacter\texcommentsymbol}{\delcharacter\next}
- {\let\next\secondoftwoarguments}
- {\doifincsnameelse{\endofblock}{\next}
- {\ifnum\nestedbufferlevel=0
- \let\next\firstoftwoarguments
+ {\secondoftwoarguments}
+ {\doifincsnameelse\endofblock\next
+ {\ifnum\nestedbufferlevel=\zerocount
+ \expandafter\firstoftwoarguments
\else
\decrement\nestedbufferlevel\relax
- \let\next\secondoftwoarguments
+ \expandafter\secondoftwoarguments
\fi}
- {\doifincsnameelse{\beginofblock}{\next}
+ {\doifincsnameelse\beginofblock\next
{\increment\nestedbufferlevel\relax
- \let\next\secondoftwoarguments}
- {\let\next\secondoftwoarguments}}}%
- \next}
+ \secondoftwoarguments}
+ {\secondoftwoarguments}}}}
-\def\dostartbuffer%
+\def\dostartbuffer
{\bgroup
\obeylines % nodig, anders gaat 't fout als direct \starttabel (bv)
\doquadrupleempty\dodostartbuffer}
@@ -196,17 +200,16 @@
\next}
\def\dododostartbuffer[#1][#2][#3][#4]%
- {%\showmessage{\m!systems}{15}{#2}%
- \doifelsevalue{\??bu#1\c!alinea}{\v!ja}
+ {%\showmessage\m!systems{15}{#2}%
+ \doifelsevalue{\??bu#1\c!alinea}\v!ja
{\segmentatebuffertrue}
{\doifnumberelse{\getvalue{\??bu#1\c!alinea}}
- {\segmentatebuffertrue}
- {\segmentatebufferfalse}}%
+ \segmentatebuffertrue\segmentatebufferfalse}%
\doifelse{#4}{}
{\letbeundefined{\e!stop\e!buffer}% % \let\stopbuffer=\relax % \undefined
\@EA\@EA\@EA\convertargument\@EA\e!start\e!buffer\to\beginofblock % else a space
\@EA\@EA\@EA\convertargument\@EA\e!stop\e!buffer\to\endofblock
- \let\processnextblockline=\processnextbufferline}
+ \let\processnextblockline\processnextbufferline}
{\letbeundefined{#4}% \letvalue{#4}=\relax % \undefined
\@EA\convertargument\csname#3\endcsname\to\beginofblock
\@EA\convertargument\csname#4\endcsname\to\endofblock}%
@@ -219,7 +222,7 @@
\getvalue{#4}}%
\doifelsenothing{#2}
{\message{<\TEXbufferfile{\jobname}>}%
- \immediate\openout\tmpblocks\TEXbufferfile{\jobname}}
+ \immediate\openout\tmpblocks\TEXbufferfile\jobname}
{\message{<\TEXbufferfile{#2}>}%
\immediate\openout\tmpblocks\TEXbufferfile{#2}}%
\ifsegmentatebuffer
@@ -234,7 +237,7 @@
% \setbuffer[name]#2\endbuffer : saves to file #1.tmp
-\def\setbuffer[#1]#2\endbuffer%
+\def\setbuffer[#1]#2\endbuffer
{\immediate\openout\tmpblocks=\TEXbufferfile{#1}%
\convertargument#2\to\ascii
\immediate\write\tmpblocks{\ascii}%
@@ -242,17 +245,17 @@
\def\dobuffer#1[#2]#3%
{\def\dodobuffer##1%
- {%\showmessage{\m!systems}{#1}{##1}%
+ {%\showmessage\m!systems{#1}{##1}%
\beginrestorecatcodes
\doifdefinedelse{\??bu##1\c!nummer}
- {#3{\TEXbufferfile{def-\getvalue{\??bu##1\c!nummer}}}{}{}}
- {#3{\TEXbufferfile{##1}}{}{}}%
+ {#3{\TEXbufferfile{def-\getvalue{\??bu##1\c!nummer}}}\donothing\donothing}
+ {#3{\TEXbufferfile{##1}}\donothing\donothing}%
\endrestorecatcodes}%
\doifelsenothing{#2}
{\dodobuffer\jobname}
{\processcommalist[#2]\dodobuffer}}
-\def\processTEXbuffer%
+\def\processTEXbuffer
{\dodoubleempty\doprocessTEXbuffer}
\def\doprocessTEXbuffer[#1][#2]%
@@ -270,7 +273,7 @@
\let\getbuffer \processTEXbuffer % handy
\let\haalbuffer\processTEXbuffer % will move to mult-com.tex
-\def\typebuffer%
+\def\typebuffer
{\dodoubleempty\dotypebuffer}
\def\dotypebuffer[#1][#2]%
@@ -280,7 +283,7 @@
\dobuffer{17}[#2]\typefile
\fi}
-\def\stelbufferin%
+\def\stelbufferin
{\dodoubleempty\dostelbufferin}
\def\dostelbufferin[#1][#2]%
@@ -293,8 +296,8 @@
\def\dodefinieerbuffer[#1]%
{\iffirstargument % else problems
\doglobal\increment\nofdefinedbuffers
- \setevalue{\??bu#1\c!nummer}{\nofdefinedbuffers}%
- \setvalue {\??bu#1\c!alinea}{\v!nee}%
+ \letvalue{\??bu#1\c!nummer}\nofdefinedbuffers
+ \letvalue{\??bu#1\c!alinea}\v!nee
\setevalue{\e!start#1}%
{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}%
\setevalue{\e!haal#1}%
@@ -303,9 +306,32 @@
{\noexpand\dodotypebuffer[#1][def-\nofdefinedbuffers]}%
\fi}
-\def\definieerbuffer%
+\def\definieerbuffer
{\dosingleargument\dodefinieerbuffer}
+% yet another undocumented feature, but who cares:
+
+\let\startfilebuffer\startbuffer
+
+\def\usememorybuffers{\let\startbuffer\startmemorybuffer}
+\def\usefilebuffers {\let\startbuffer\startfilebuffer}
+
+\def\startmemorybuffer
+ {\dosingleempty\dostartmemorybuffer}
+
+\long\def\dostartmemorybuffer[#1]#2\stopbuffer
+ {\setbuffer[\iffirstargument#1\else\jobname\fi]#2\endbuffer}
+
+% \long\def\startcrap#1\stopcrap
+% {\usememorybuffers#1\usefilebuffers} % or {{...}}
+%
+% \startcrap
+% \startbuffer
+% some awful code
+% \stopbuffer
+% \placefigure{crap}{\getbuffer}
+% \stopcrap
+
% TODO: no grouping due to sidefloats
\expandafter \convertargument \gobbleoneargument @ \to \emptybufferline
@@ -320,20 +346,20 @@
\newcount\currentbufferparagraph
-\def\getbufferparagraphs%
+\def\getbufferparagraphs
{\dodoubleempty\dogetbufferparagraphs}
\def\dosetbufferoffset#1%
{\doifnumberelse{\getvalue{\??bu#1\c!alinea}}
- {\currentbufferparagraph=-\getvalue{\??bu#1\c!alinea}}
- {\currentbufferparagraph=0}%
+ {\currentbufferparagraph-\getvalue{\??bu#1\c!alinea}}
+ {\currentbufferparagraph \zerocount}%
\relax}
\def\dogetbufferparagraphs[#1][#2]%
{\iffirstargument
\ifsecondargument
\dosetbufferoffset{#1}%
- \doifelse{#2}{\v!alles}
+ \doifelse{#2}\v!alles
{\def\startbufferparagraph{\normalbufferparagraph{#1}}}
{\def\startbufferparagraph{\filterbufferparagraph{#1}{#2}}}%
\def\stopbufferparagraph{\dostopbufferparagraph{#1}}%
@@ -361,17 +387,17 @@
\def\dostartbufferparagraph#1%
{\par\getvalue{\??bu#1\c!voor}}
-\def\normalbufferparagraph%
- {\advance\currentbufferparagraph 1
- \ifnum\currentbufferparagraph>0
+\def\normalbufferparagraph
+ {\advance\currentbufferparagraph \plusone
+ \ifnum\currentbufferparagraph>\zerocount
\expandafter\dostartbufferparagraph
\else
\expandafter\gobbleoneargument
\fi}
\def\filterbufferparagraph#1#2%
- {\advance\currentbufferparagraph 1
- \ifnum\currentbufferparagraph>0
+ {\advance\currentbufferparagraph \plusone
+ \ifnum\currentbufferparagraph>\zerocount
\doifinsetelse{\the\currentbufferparagraph}{#2}
{\let\next\dostartbufferparagraph}
{\let\next\fakebufferparagraph}%
@@ -380,48 +406,35 @@
\fi
\next{#1}}
-\long\def\gobblebufferparagraph#1#2\stopbufferparagraph%
+\long\def\gobblebufferparagraph#1#2\stopbufferparagraph
{}
\def\fakebufferparagraph#1%
{\bgroup
\def\stopbufferparagraph{\dostopbufferparagraph{#1}\egroup\egroup}%
- \setbox\scratchbox=\vbox\bgroup\dostartbufferparagraph{#1}}
+ \setbox\scratchbox\vbox\bgroup\dostartbufferparagraph{#1}}
\def\blockversion {1996.03.10}
\def\@@blockerrormessage%
- {\showmessage{\m!textblocks}{1}{}%
- \global\let\@@blockerrormessage=\relax}
+ {\showmessage\m!textblocks1\empty
+ \global\let\@@blockerrormessage\relax}
\def\thisisblockversion#1%
- {\doifnot{\blockversion}{#1}%
- {\@@blockerrormessage\endinput}}
+ {\doifnot\blockversion{#1}{\@@blockerrormessage\endinput}}
-\def\stopcopyingblocks%
+\def\stopcopyingblocks
{\ifcopyingblocks
\immediate\closeout\outblocks
\copyblockfile
\global\copyingblocksfalse
\fi}
-% \def\dodosetblockcounters[#1:#2]#3%
-% {\setvalue{\??se\s!old#3}{#1}%
-% \doifnot{#3}{\lastsection}
-% {\dodosetblockcounters[#2:0]{\getvalue{\??se#3\c!na}}}}
-%
-% \def\dosetblockcounters[#1#2::#3]%
-% {\ifblockpermitted
-% \dodosetblockcounters[#3:0]\firstsection
-% \setsectiontype[#1]%
-% \def\@@sectionvalue##1{\getvalue{\??se\s!old##1}}%
-% \def\@@sectionconversion##1##2{##2}% to get rid of {##2}
-% \fi}
-
\def\dodosetblockcounters[#1]#2%
{\expanded{\setvalue{\??se\s!old#2}{\@@filterheadpart[#1]}}%
- \doifnot{#2}{\lastsection}
- {\expanded{\dodosetblockcounters[\@@filtertailpart[#1]]}{\getvalue{\??se#2\c!na}}}}
+ \doifnot{#2}\lastsection
+ {\expanded{\dodosetblockcounters[\@@filtertailpart[#1]]}%
+ {\getvalue{\??se#2\c!na}}}} % ????
\def\dosetblockcounters[#1]%
{\ifblockpermitted
@@ -433,26 +446,19 @@
\let\blockstatus\empty
-\def\setblockcounters%
+\def\setblockcounters
{\ifx\blockstatus\empty \else
\@EA\dosetblockcounters\@EA[\blockstatus]%
\fi}
-%\def\getblockstatus#1%
-% {\dosetblklevel{\getvalue{\??by\@@bscriterium}}%
-% \doifblklevelelse[#1]
-% {\global\blockpermittedtrue}
-% {\global\blockpermittedfalse}%
-% \def\blockstatus{#1}}
-
-\def\getblockstatus#1%
- {\dosetblklevel{\getvalue{\??by\@@bscriterium}}%
+\def\getblockstatus#1% is this still ok
+ {\dosetfilterlevel{\getvalue{\??by\@@bscriterium}}\empty
\expanded{\doifblklevelelse[#1\sectionseparator\sectionseparator0]}
{\global\blockpermittedtrue}
{\global\blockpermittedfalse}%
\def\blockstatus{#1}}
-\def\setupblockparameters%
+\def\setupblockparameters
{\dodoubleargument\dosetupblockparameters}
\def\dosetupblockparameters[#1][#2]%
@@ -461,14 +467,14 @@
\beginTEX
\def\blockparameter#1#2%
- {\csname\@EA\ifx\csname\??tb#1#2\endcsname\relax empty\else\??tb#1#2\fi\endcsname}
+ {\csname\@EA\ifx\csname\??tb#1#2\endcsname\relax\s!empty\else\??tb#1#2\fi\endcsname}
\endTEX
\beginETEX \ifcsname
\def\blockparameter#1#2%
- {\@EA\csname\ifcsname\??tb#1#2\endcsname\??tb#1#2\else empty\fi\endcsname}
+ {\@EA\csname\ifcsname\??tb#1#2\endcsname\??tb#1#2\else\s!empty\fi\endcsname}
\endETEX
@@ -493,13 +499,13 @@
% oeps, got bugged
\def\setblocklevel#1% sign
- {\global\advance\blocklevel by #11
+ {\global\advance\blocklevel #11
\ifcase\blocklevel\doingblocksfalse\else\doingblockstrue\fi}
-\def\opentmpblock%
+\def\opentmpblock
{\immediate\openout\tmpblocks=\TEXbufferfile{\f!utilityfilename\the\blocklevel}}
-\def\closetmpblock%
+\def\closetmpblock
{\immediate\write\tmpblocks{}% een lege regel is handig voor \par commando's
\immediate\closeout\tmpblocks}
@@ -521,10 +527,10 @@
\immediate\write\tmpblocks{\string#1}}%
\fi}
-\def\startcopyingblocks%
+\def\startcopyingblocks
{\global\copyingblocksfalse}
-\def\checkcopyingblocks%
+\def\checkcopyingblocks
{\ifcopyingblocks
\else
\immediate\openout\outblocks\f!utilityfilename.\f!blockextension
@@ -533,21 +539,21 @@
\global\copyingblockstrue
\fi}
-\def\stopcopyingblocks%
+\def\stopcopyingblocks
{\ifcopyingblocks
\immediate\closeout\outblocks
\copyblockfile
\global\copyingblocksfalse
\fi}
-\def\geenblokkenmeer%
+\def\geenblokkenmeer
{\stopcopyingblocks}
\def\copyblockfile
{\ifcopyingblocks
\begingroup
- \showmessage{\m!textblocks}{2}{\jobname.\f!blockextension}%
- \openlocin{\inpblocks}{\f!utilityfilename.\f!blockextension}%
+ \showmessage\m!textblocks2{\jobname.\f!blockextension}%
+ \openlocin\inpblocks{\f!utilityfilename.\f!blockextension}%
\immediate\openout\outblocks\jobname.\f!blockextension
\setupcopyblock
\catcode`\^^M=\@@ignore\relax
@@ -565,26 +571,26 @@
\def\loadallblocks#1%
{\beginrestorecatcodes
-\catcode`\^^M=\@@endofline\relax
+ \catcode`\^^M=\@@endofline\relax
\readjobfile{#1.\f!blockextension}
- {\showmessage{\m!textblocks}{3}{#1.\f!blockextension}}
- {\showmessage{\m!textblocks}{4}{}}%
+ {\showmessage\m!textblocks3{#1.\f!blockextension}}
+ {\showmessage\m!textblocks4\empty}%
\endrestorecatcodes}
-\def\setupcopyblock%
- {\makeallother % \dostepwiserecurse{1}{255}{1}{\catcode\recurselevel=\@@other}%
+\def\setupcopyblock
+ {\makeallother
\obeylines}
-\def\writeoutblocks%
+\def\writeoutblocks
{\immediate\write\outblocks}
% readable
%
% \def\processnextblocklineAB#1#2#3%
% {\convertargument#1 \to\next
-% \doifinstringelse{\endofblockA}{\next}
+% \doifinstringelse\endofblockA\next
% {\def\next{#2}}
-% {\doifinstringelse{\endofblockB}{\next}
+% {\doifinstringelse\endofblockB\next
% {\def\next{#2}}
% {\def\next{#3}}}%
% \next}
@@ -598,7 +604,7 @@
%
% even more
-\def\processnextblocklineAB#1% #2#3%
+\long\def\processnextblocklineAB#1% #2#3%
{\convertargument#1 \to\next
\doifinstringelse\endofblockA\next
\firstoftwoarguments
@@ -634,7 +640,7 @@
%
% faster
-\def\processnextblockline#1% #2#3%
+\long\def\processnextblockline#1% #2#3%
{\convertargument#1 \to\next
\ifx\next\emptybufferline
\ifsegmentatebuffer \emptybufferlinetrue \fi
@@ -663,15 +669,15 @@
\def\skipblock#1%
{\checkcopyingblocks
\@EA\convertargument\string\thiswasblock{#1}\to\endofblock
-%testen : \expanded{\convertargument\string\thiswasblock{#1}\noexpand\to\noexpand\endofblock}%
- \let\openblock=\begingroup
- \let\closeblock=\endgroup
+ %testen : \expanded{\convertargument\string\thiswasblock{#1}\noexpand\to\noexpand\endofblock}%
+ \let\openblock\begingroup
+ \let\closeblock\endgroup
\openblock
\setupcopyblock
\skipblockline}
-\def\doafterblock#1#2{}
-\def\dobeforeblock#1#2{}
+\let\doafterblock \gobbletwoarguments
+\let\dobeforeblock\gobbletwoarguments
\def\thisisblock#1%
{\executeifdefined{\s!thisisblock#1}{\skipblock{#1}}}
@@ -683,16 +689,16 @@
{\checkcopyingblocks
\obeylines
\@EA\@EA\@EA\convertargument\@EA\string\csname\e!eindvan#1\endcsname\to\endofblockA
-%testen: \expanded{\convertargument\string\csname\e!eindvan#1\endcsname\to\endofblockA}%
+ %testen: \expanded{\convertargument\string\csname\e!eindvan#1\endcsname\to\endofblockA}%
\@EA\convertargument\string\eindvanblok[#1]\to\endofblockB % MULTI LINGUAL MAKEN
- \def\openblock%
+ \def\openblock
{\dobeforeblock{#1}{#2}%
\opentmpblock
\begingroup
\makesectionformat
\immediate\write\outblocks{}%
\immediate\write\outblocks{\string\thisisblock{#1}{\sectionformat}[#2]}}%
- \def\closeblock%
+ \def\closeblock
{\immediate\write\outblocks{}% handig voor \par commando's
\immediate\write\outblocks{\string\thiswasblock{#1}}%
\endgroup
@@ -703,16 +709,16 @@
\setupcopyblock
\copyblocklineAB}
-\def\copyblock%
+\def\copyblock
{\let\opentmpblock\empty
\let\closetmpblock\empty
\let\writetmpblock\gobbleoneargument
\saveblock}
-\def\loadoneblock%
+\def\loadoneblock
{\edef\blockfilename{\TEXbufferfile{\f!utilityfilename\the\blocklevel}}%
\setblocklevel+%
- \readjobfile{\blockfilename}{}{}%
+ \readjobfile\blockfilename\donothing\donothing
\setblocklevel-}%
\def\dodefinieerblok[#1]%
@@ -726,13 +732,13 @@
\c!letter=,
\c!file=\jobname]}
-\def\definieerblok%
+\def\definieerblok
{\dosingleargumentwithset\dodefinieerblok}
\def\dostelblokin[#1][#2]%
{\getparameters[\??tb#1][#2]}
-\def\stelblokin%
+\def\stelblokin
{\dodoubleargumentwithset\dostelblokin}
\def\passeerblok[#1]%
@@ -741,9 +747,8 @@
\def\doverbergblok[#1][#2][#3]%
{\doifassignmentelse{#3}
- {\def\next{\dodoverbergblok[#1][#2][][#3]}}
- {\def\next{\dodoverbergblok[#1][#2][#3][]}}%
- \next}
+ {\dodoverbergblok[#1][#2][][#3]}
+ {\dodoverbergblok[#1][#2][#3][]}}
\def\dodoverbergblok[#1][#2][#3][#4]%
{\doifelsenothing{#2}
@@ -758,8 +763,8 @@
{\global\blockpermittedtrue
\edef\bloktitel{#1:#3}}}}%
\ifblockpermitted
- \showwarning{\m!textblocks}{5}{\bloktitel}%
- \def\next%
+ \showwarning\m!textblocks5\bloktitel
+ \def\next
{\def\dobeforeblock####1####2%
{\begingroup}%
\def\doafterblock####1####2%
@@ -768,20 +773,20 @@
\saveblock{#1}{#3#4}}%
\else
\doifinsetelse{+}{#3}
- {\showwarning{\m!textblocks}{6}{\bloktitel}%
- \def\next%
+ {\showwarning\m!textblocks6\bloktitel
+ \def\next
{\def\dobeforeblock####1####2%
{\begingroup
\global\visiblefalse}%
\def\doafterblock####1####2%
- {{\setbox0=\vbox
+ {{\setbox0\vbox
{\catcode`\^^M=\@@endofline\relax
\loadoneblock
\par}}%
\endgroup}%
\saveblock{#1}{#3#4}}}%
- {\showwarning{\m!textblocks}{7}{\bloktitel}%
- \def\next%
+ {\showwarning\m!textblocks7\bloktitel
+ \def\next
{\def\dobeforeblock####1####2%
{\begingroup
\globaldefs=-1\relax}%
@@ -797,7 +802,7 @@
{\bgroup\obeylines\dotripleempty\doverbergblok[##1][#2]}}%
\processcommalist[#1]\docommando}
-\def\verbergblokken%
+\def\verbergblokken
{\dodoubleempty\doverbergblokken}
\def\doexecuteloadedblock#1#2%
@@ -805,20 +810,20 @@
\bgroup % before \c!voor (think of: \c!voor=\startitemize)
\dosetupblockparameters[#1][#2]% voor 'voor'?
\getvalue{\??tb#1\c!voor}%
- \doattributes{\??tb#1}\c!letter\c!kleur{}%
+ \dostartattributes{\??tb#1}\c!letter\c!kleur\empty
\visibletrue
\catcode`\^^M=\@@endofline\relax
\getvalue{\??tb#1\c!binnen}%
\loadoneblock
\par
+ \dostopattributes
\getvalue{\??tb#1\c!na}
\egroup}
\def\dohandhaafblok[#1][#2][#3]%
{\doifassignmentelse{#3}
- {\def\next{\dodohandhaafblok[#1][#2][][#3]}}
- {\def\next{\dodohandhaafblok[#1][#2][#3][]}}%
- \next}
+ {\dodohandhaafblok[#1][#2][][#3]}
+ {\dodohandhaafblok[#1][#2][#3][]}}
\def\dodohandhaafblok[#1][#2][#3][#4]%
{\doifelsenothing{#2}
@@ -827,25 +832,25 @@
{\doifcommonelse{#2}{#3}
{\global\blockpermittedtrue
\edef\bloktitel{#1:#2}}
- {\doifinsetelse{\v!alles}{#2}
- {\doifelse{#3}{}
+ {\doifinsetelse\v!alles{#2}
+ {\doifelsenothing{#3}
{\global\blockpermittedtrue
\edef\bloktitel{#1}}
{\global\blockpermittedfalse
\edef\bloktitel{#1:#3}}}
{\global\blockpermittedfalse
- \doifelse{#3}{}
+ \doifelsenothing{#3}
{\edef\bloktitel{#1}}
{\edef\bloktitel{#1:#3}}}}}%
\ifblockpermitted
- \showwarning{\m!textblocks}{8}{\bloktitel}%
+ \showwarning\m!textblocks8\bloktitel
\def\dobeforeblock##1##2%
{\begingroup}%
\def\doafterblock##1##2%
{\endgroup
\doexecuteloadedblock{#1}{#4}}%
\else
- \showwarning{\m!textblocks}{9}{\bloktitel}%
+ \showwarning\m!textblocks9\bloktitel
\fi
\saveblock{#1}{#3#4}}
@@ -891,36 +896,37 @@
\doifinset{-}{#3}{\settrue\dummyblockstatus}%
\fi
\ifconditional\dummyblockstatus
- \showwarning{\m!textblocks}{10}{\bloktitel}%
+ \showwarning\m!textblocks{10}\bloktitel
\setvalue{\s!thiswasblock#1}%
{\par
\egroup
\setblocklevel-}%
- \def\next%
- {\setbox0=\vbox\bgroup
+ \def\next
+ {\setbox0\vbox\bgroup
\ifconditional\blockassignmentstatus
\dosetupblockparameters[#1][#3]%
\fi}%
\else
- \showwarning{\m!textblocks}{11}{\bloktitel}%
+ \showwarning\m!textblocks{11}\bloktitel
\setvalue{\s!thiswasblock#1}%
{\par
+ \dostopattributes
\getvalue{\??tb#1\c!na}%
\egroup
\setblocklevel-}%
- \def\next%
+ \def\next
{\bgroup
\ifconditional\blockassignmentstatus
\dosetupblockparameters[#1][#3]%
\fi
\getvalue{\??tb#1\c!voor}%
- \doattributes{\??tb#1}\c!letter\c!kleur{}%
+ \dostartattributes{\??tb#1}\c!letter\c!kleur\empty
\visibletrue
\getvalue{\??tb#1\c!binnen}}%
\fi
\else
- \def\next%
- {\showwarning{\m!textblocks}{12}{\bloktitel}%
+ \def\next
+ {\showwarning\m!textblocks{12}\bloktitel
\skipblock{#1}}%
\fi
\next}
@@ -938,15 +944,15 @@
{\loadallblocks{\getvalue{\??tb\commalistelement\c!file}}}%
\endgroup}
-\def\dogebruikblokken%
+\def\dogebruikblokken
{\begingroup
\doassign[\??bs][\c!criterium=\v!alles]%
\dodoubleempty\dodogebruikblokken}
-\def\gebruikblokken%
+\def\gebruikblokken
{\setfalse\processblockstatus\dogebruikblokken}
-\def\verwerkblokken%
+\def\verwerkblokken
{\settrue \processblockstatus\dogebruikblokken}
\def\doselecteerblokken[#1][#2][#3]%
@@ -956,7 +962,7 @@
{\getparameters[\??bs][#3]%
\dogebruikblokken[#1][#2]}}%
-\def\selecteerblokken%
+\def\selecteerblokken
{\begingroup
\doassign[\??bs][\c!criterium=\v!alles]%
\dotripleempty\doselecteerblokken}
@@ -970,7 +976,8 @@
{\setblocklevel+\bgroup
\dodoubleempty\doforceerblok[##1]}%
\setvalue{\e!eindvan##1}%
- {\getvalue{\??tb##1\c!na}%
+ {\dostopattributes
+ \getvalue{\??tb##1\c!na}%
\egroup\setblocklevel-}}%
\processcommalist[#1]\docommando}
@@ -982,7 +989,7 @@
\dosetupblockparameters[#1][#2]%
\fi
\getvalue{\??tb#1\c!voor}%
- \doattributes{\??tb#1}\c!letter\c!kleur{}%
+ \dostartattributes{\??tb#1}\c!letter\c!kleur\empty
\getvalue{\??tb#1\c!binnen}}
\def\passeerblokken[#1]%
@@ -996,7 +1003,7 @@
\processcommalist[#1]\docommando}
\def\dopasseerblok[#1][#2]%
- {\def\closeblock%
+ {\def\closeblock
{\egroup\setblocklevel-}%
\checkcopyingblocks
\obeylines
diff --git a/tex/context/base/core-con.tex b/tex/context/base/core-con.tex
index 75ac2395c..1f3af8029 100644
--- a/tex/context/base/core-con.tex
+++ b/tex/context/base/core-con.tex
@@ -239,7 +239,7 @@
%D \showsetup{\y!month}
%D \showsetup{\y!MONTH}
-\def\month%
+\def\month
{\doconvertmonth}
\def\MONTH#1%
@@ -281,7 +281,7 @@
\def\getdayoftheweek#1#2#3%
{\bgroup
\!!counta#3\relax
- \advance\!!counta -1
+ \advance\!!counta \minusone
\!!countb\!!counta
\multiply\!!countb 365
\advance\!!countb \ifcase#2\relax
@@ -305,7 +305,7 @@
\advance\!!countb \!!countc
% \DoMod\!!countb by7to\!!countb
\dosetmodulo\!!countb7\!!countb
- \advance\!!countb 1
+ \advance\!!countb \plusone
\@EA\egroup\@EA\normalweekday\the\!!countb\relax}
\def\dayoftheweek#1#2#3%
@@ -346,7 +346,7 @@
%D \showsetup{\y!weekday}
%D \showsetup{\y!WEEKDAY}
-\def\weekday%
+\def\weekday
{\doconvertday}
\def\WEEKDAY#1%
@@ -473,7 +473,7 @@
\newsignal\datesignal
-\def\dobetweendates%
+\def\dobetweendates
{\ifdim\lastskip=\datesignal\relax\else
\unskip\space
\hskip\datesignal\relax
@@ -555,21 +555,21 @@
[\!!stringa]
[ \v!dag=>\betweendates\the\normalday,
%\v!dag+=>\betweendates\ordinaldaynumber\normalday,
- \v!dag+=>\betweendates\convertnumber{\v!day+}\normalday,
+ \v!dag+=>\betweendates\convertnumber{\v!dag+}\normalday,
\v!maand=>\betweendates\month\normalmonth,
\v!jaar=>\betweendates\the\normalyear,
\v!spatie=>\unskip\ \hskip\datesignal,% optimization -)
\ =>\unskip\ \hskip\datesignal,% optimization -)
d=>\convertnumber\v!dag\normalday,
%d+=>\ordinaldaynumber\normalday,
- d+=>\convertnumber{\v!day+}\normalday,
+ d+=>\convertnumber{\v!dag+}\normalday,
m=>\convertnumber\v!maand\normalmonth,
j=>\convertnumber\v!jaar\normalyear,
y=>\convertnumber\v!jaar\normalyear,
w=>\betweendates\dayoftheweek\normalday\normalmonth\normalyear,
dd=>\ifnum\normalday >9 \else0\fi\the\normalday,
- %dd+=>\ordinaldaynumber{\ifnum\normalday >9 \else0\fi\the\normalday},
- dd+=>\convertnumber{\v!day+}{\ifnum\normalday >9 \else0\fi\the\normalday},
+ %dd+=>\ordinaldaynumber{\ifnum\normalday >9 \else0\fi\the\normalday},
+ dd+=>\convertnumber{\v!dag+}{\ifnum\normalday >9 \else0\fi\the\normalday},
mm=>\ifnum\normalmonth>9 \else0\fi\the\normalmonth,
jj=>\expandafter\gobbletwoarguments\the\normalyear,
yy=>\expandafter\gobbletwoarguments\the\normalyear,
@@ -584,7 +584,7 @@
\fi
\egroup}
-\def\simplecurrentdate%
+\def\simplecurrentdate
{\expanded{\complexcurrentdate[\currentdatespecification]}}
\definecomplexorsimple\currentdate
@@ -775,7 +775,7 @@
\def\convertnumber#1%
{\csname\??cv
\@EA\ifx\csname\??cv\currentlanguage#1\endcsname\relax
- \@EA\ifx\ifcsname\??cv#1\endcsname\relax
+ \@EA\ifx\csname\??cv#1\endcsname\relax
\s!default
\else
#1%
@@ -787,7 +787,7 @@
\def\doifconversiondefinedelse#1%
{\@EA\ifx\csname\??cv\currentlanguage#1\endcsname\relax
- \@EA\ifx\ifcsname\??cv#1\endcsname\relax
+ \@EA\ifx\csname\??cv#1\endcsname\relax
\@EAEAEA\secondoftwoarguments
\else
\@EAEAEA\firstoftwoarguments
diff --git a/tex/context/base/core-dat.tex b/tex/context/base/core-dat.tex
index fac66ce02..c2d13f864 100644
--- a/tex/context/base/core-dat.tex
+++ b/tex/context/base/core-dat.tex
@@ -201,7 +201,7 @@
%D processing a record, no grouping is applied.
\def\getrecordentry #1{\getvalue{\??db:#1}}
-\def\resetrecordentry #1{\global\letvalue{\??db:#1}\empty}
+\def\resetrecordentry #1{\letgvalueempty{\??db:#1}}
\def\assignrecordentry#1{\setgvalue{\??db:#1}}
\long\def\skiprecord#1\stoprecord%
@@ -263,7 +263,7 @@
\egroup
%\the\everyrecord
\getvalue{\??db#1\c!commando}{##1}}%
- \showmessage{\m!databases}{1}{\askedrecords}%
+ \showmessage\m!databases1\askedrecords
\def\doprocessrecords##1%
{\readjobfile{##1}
{\showmessage{\m!databases}{2}{(job)}}
@@ -283,7 +283,4 @@
%D block moving mechaism, the current implementation is
%D prefered out of speed reasons.
-\protect
-
-\endinput
-
+\protect \endinput
diff --git a/tex/context/base/core-des.tex b/tex/context/base/core-des.tex
index 443d65b41..c3f5145e5 100644
--- a/tex/context/base/core-des.tex
+++ b/tex/context/base/core-des.tex
@@ -55,10 +55,10 @@
\def\@@definitiehang#1#2#3%
{\processaction
[\getvalue{\??dd#1\c!hang}]
- [ \v!geen=>\let\next=#2,
- 0=>\let\next=#2,
- \s!unknown=>\let\next=#3,
- \s!default=>\let\next=#2]%
+ [ \v!geen=>\let\next#2,%
+ 0=>\let\next#2,%
+ \s!unknown=>\let\next#3,%
+ \s!default=>\let\next#2]%
\next{#1}}
\def\@@definitielinkspure#1[#2]#3%
@@ -66,9 +66,9 @@
\noindent\ignorespaces
\leftskip\@@leftdefinitieskip
\rightskip\@@rightdefinitieskip
- \advance\leftskip by \!!widtha
+ \advance\leftskip \!!widtha
\@@makedefinitiepurebox{#1}\raggedright
- \advance\leftskip by \!!widthb
+ \advance\leftskip \!!widthb
\llap
{\hbox to \leftskip
{\hskip\@@leftdefinitieskip
@@ -80,7 +80,7 @@
\noindent\ignorespaces
\leftskip\@@leftdefinitieskip
\rightskip\@@rightdefinitieskip
- \advance\rightskip by \!!widtha
+ \advance\rightskip \!!widtha
\@@makedefinitiepurebox{#1}\raggedleft
\rlap
{\hskip\hsize
@@ -88,66 +88,66 @@
\hskip-\rightskip
\copy\@@definitiebox
\hskip\@@rightdefinitieskip}%
- \advance\rightskip by \!!widthb
+ \advance\rightskip \!!widthb
\@@dodefinitie{#1}}
\def\@@makedefinitiepurebox#1#2%
- {\setbox\@@definitiebox=\vtop
+ {\setbox\@@definitiebox\vtop
{\mindermeldingen
\hsize\!!widtha
- \leftskip\!!zeropoint
- \rightskip\!!zeropoint
+ \leftskip\zeropoint
+ \rightskip\zeropoint
#2\steluitlijnenin[\getvalue{\??dd#1\c!uitlijnen}]%
\unhcopy\@@definitiebox}%
- \ht\@@definitiebox=\ht\strutbox
- \dp\@@definitiebox=\dp\strutbox}
+ \ht\@@definitiebox\ht\strutbox
+ \dp\@@definitiebox\dp\strutbox}
\def\@@definitielinkshang#1[#2]#3%
{\@@dostartdefinitie{#1}[#2]{#3}%
\mindermeldingen
- \advance\!!widtha by \!!widthb
- \hangindent=\!!widtha
- \@@makedefinitiehangbox{#1}{\raggedright}{\advance\rightskip by \!!widthb}%
+ \advance\!!widtha \!!widthb
+ \hangindent\!!widtha
+ \@@makedefinitiehangbox{#1}{\raggedright}{\advance\rightskip \!!widthb}%
\noindent\ignorespaces
\llap
{\dontshowcomposition
- \vtop to \!!zeropoint{\box\@@definitiebox}}%
+ \vtop to \zeropoint{\box\@@definitiebox}}%
\@@dodefinitie{#1}}%
\def\@@definitierechtshang#1[#2]#3%
{\@@dostartdefinitie{#1}[#2]{#3}%
\mindermeldingen
- \advance\!!widtha by \!!widthb
- \hangindent=-\!!widtha
- \@@makedefinitiehangbox{#1}{\raggedleft}{\advance\leftskip by \!!widthb}%
+ \advance\!!widtha \!!widthb
+ \hangindent-\!!widtha
+ \@@makedefinitiehangbox{#1}{\raggedleft}{\advance\leftskip \!!widthb}%
\noindent\ignorespaces
\rlap
{\mindermeldingen
\dontshowcomposition
\dimen0=\hsize
- \advance\dimen0 by -\leftskip
- \advance\dimen0 by -\rightskip
+ \advance\dimen0 -\leftskip
+ \advance\dimen0 -\rightskip
\hbox to \dimen0
- {\hss\vtop to \!!zeropoint{\box\@@definitiebox}}}%
+ {\hss\vtop to \zeropoint{\box\@@definitiebox}}}%
\@@dodefinitie{#1}}
\def\@@makedefinitiehangbox#1#2#3%
- {\setbox\@@definitiebox=\vtop % \vbox gaat fout in hang
+ {\setbox\@@definitiebox\vtop % \vbox gaat fout in hang
{\forgetall
\mindermeldingen
\hsize\!!widtha
#2\steluitlijnenin[\getvalue{\??dd#1\c!uitlijnen}]#3%
\unhcopy\@@definitiebox}%
- \ht\@@definitiebox=\ht\strutbox
- \dp\@@definitiebox=\dp\strutbox
+ \ht\@@definitiebox\ht\strutbox
+ \dp\@@definitiebox\dp\strutbox
\doifinsetelse{\getvalue{\??dd#1\c!hang}}{\v!passend,\v!ruim}
{\dimen0=\ht\@@definitiebox
- \advance\dimen0 by \dp\@@definitiebox
- \doifvalue{\??dd#1\c!hang}{\v!ruim}
- {\advance\dimen0 by .5\ht\strutbox}%
+ \advance\dimen0 \dp\@@definitiebox
+ \doifvalue{\??dd#1\c!hang}\v!ruim
+ {\advance\dimen0 .5\ht\strutbox}%
\getnoflines{\dimen0}%
- \hangafter=-\noflines}
- {\hangafter=-\getvalue{\??dd#1\c!hang}}}%
+ \hangafter-\noflines}
+ {\hangafter-\getvalue{\??dd#1\c!hang}}}%
\setvalue{@@definitie\v!boven}#1[#2]#3%
{%\pagina[\v!voorkeur]% % Weg ermee!
@@ -205,47 +205,30 @@
\setvalue{@@definitie\v!aanelkaar}#1[#2]#3%
{\processaction
[\getvalue{\??dd#1\c!breedte}]
- [\v!passend=>\let\next=\@@definitieaanelkaarpassend,
- \v!ruim=>\let\next=\@@definitieaanelkaarruim,
- \s!unknown=>\let\next=\@@definitieaanelkaarbreed,
- \s!default=>\let\next=\@@definitieaanelkaarruim]%
+ [\v!passend=>\let\next\@@definitieaanelkaarpassend,
+ \v!ruim=>\let\next\@@definitieaanelkaarruim,
+ \s!unknown=>\let\next\@@definitieaanelkaarbreed,
+ \s!default=>\let\next\@@definitieaanelkaarruim]%
\next{#1}[#2]{#3}}
-% \setvalue{@@definitie\v!hangend}#1[#2]#3%
-% {\skip0=-\leftskip % uggly trick
-% \@@dostartdefinitie{#1}[#2]{#3}% % adds \c!marge to \leftskip
-% \noindent\ignorespaces
-% \advance\skip0 by \leftskip % but useful
-% \ifdim\skip0=\!!zeropoint
-% \skip0=1.5em % just some default
-% \advance\leftskip by \skip0
-% \fi
-% \hskip-\skip0 % no hang in the first line
-% \unhcopy\@@definitiebox
-% \ifdim\!!widthb=\!!zeropoint
-% \kern.75em % another default
-% \else
-% \kern\!!widthb
-% \fi
-% \ignorespaces
-% \@@dodefinitie{#1}}
-
\setvalue{@@definitie\v!hangend}#1[#2]#3%
{\@@dostartdefinitie{#1}[#2]{#3}% % adds \c!marge to \leftskip
\noindent\ignorespaces
- \advance\leftskip by -\leftskipadaption
- \ifdim\leftskipadaption=\!!zeropoint
- \leftskipadaption=1.5em % just some default
- \ifnum\insidedefinition=1 \ifdim\leftskip>\!!zeropoint
- \leftskipadaption=\leftskip
- \fi \fi
+ \advance\leftskip -\leftskipadaption \relax
+ \ifdim\leftskipadaption=\zeropoint
+ \leftskipadaption1.5em % just some default
+ \ifnum\insidedefinition=\plusone
+ \ifdim\leftskip>\zeropoint \relax
+ \leftskipadaption\leftskip
+ \fi
+ \fi
\fi
- \ifnum\insidedefinition=1
- \advance\leftskip by \leftskipadaption
+ \ifnum\insidedefinition=\plusone
+ \advance\leftskip \leftskipadaption
\fi
\hskip-\leftskipadaption
\unhcopy\@@definitiebox
- \ifdim\!!widthb=\!!zeropoint
+ \ifdim\!!widthb=\zeropoint
\kern.75em % another default
\else
\kern\!!widthb
@@ -253,39 +236,6 @@
\ignorespaces
\@@dodefinitie{#1}}
-% \def\@@dostartdefinitie#1[#2]#3%
-% {\getvalue{\??dd#1\c!voor}%
-% \begingroup
-% \doadaptleftskip{\getvalue{\??dd#1\c!marge}}%
-% \showcomposition
-% \setbox\@@definitiebox=\hbox
-% {\forgetall
-% \mindermeldingen
-% \def\\{\crcr}%
-% % \doattributes
-% % {\??dd#1}\c!kopletter\c!kopkleur
-% % {\doifelsevalue{\??dd#1\c!plaats}{\v!aanelkaar}
-% % {\@@definitiewoord{#1}[#2]{#3}{#3}}
-% % {\@@definitiewoord{#1}[#2]{#3}{\vbox{\halign{\strut##\hss\cr#3\crcr}}}}}}%
-% \doifelsevalue{\??dd#1\c!plaats}{\v!aanelkaar}
-% {\@@definitiewoord{#1}[#2]{#3}{#3}}
-% {\@@definitiewoord{#1}[#2]{#3}{\vbox{\halign{\strut##\hss\cr#3\crcr}}}}}%
-% \!!widthb=\getvalue{\??dd#1\c!afstand}\relax
-% \ifdim\!!widthb=\!!zeropoint\relax
-% \doifvalue{\??dd#1\c!breedte}{\v!ruim}{\!!widthb=1em}%
-% \fi
-% \assignwidth
-% {\!!widtha}
-% {\getvalue{\??dd#1\c!breedte}}
-% {\doifelsevaluenothing{\??dd#1\c!monster}
-% {\unhcopy\@@definitiebox}
-% {\doattributes
-% {\??dd#1}\c!kopletter\c!kopkleur
-% {\getvalue{\??dd#1\c!tekst}\getvalue{\??dd#1\c!monster}}}}
-% {\!!widthb}%
-% %\getvalue{\??dd#1\s!do\c!lokaal}%
-% \parindent=\!!zeropoint\relax} % \noindent\ignorespaces
-
%D A new key 'titeluitlijnen' in definitions.
\chardef\insidedefinition=0
@@ -298,16 +248,16 @@
\begingroup
\doadaptleftskip{\getvalue{\??dd#1\c!marge}}%
\showcomposition
- \setbox\@@definitiebox=\hbox
+ \setbox\@@definitiebox\hbox
{\forgetall
\mindermeldingen
\def\\{\crcr}%
- \doifelsevalue{\??dd#1\c!plaats}{\v!aanelkaar}
+ \doifelsevalue{\??dd#1\c!plaats}\v!aanelkaar
{\@@definitiewoord{#1}[#2]{#3}{#3}}
{\@@definitiewoord{#1}[#2]{#3}{\vbox{\halign{\strut##\hss\cr#3\crcr}}}}}%
- \!!widthb=\getvalue{\??dd#1\c!afstand}\relax
- \ifdim\!!widthb=\!!zeropoint\relax
- \doifvalue{\??dd#1\c!breedte}{\v!ruim}{\!!widthb=1em}%
+ \!!widthb\getvalue{\??dd#1\c!afstand}\relax
+ \ifdim\!!widthb=\zeropoint\relax
+ \doifvalue{\??dd#1\c!breedte}\v!ruim{\!!widthb=1em}%
\fi
\assignwidth
{\!!widtha}
@@ -319,8 +269,8 @@
{\getvalue{\??dd#1\c!tekst}\getvalue{\??dd#1\c!monster}}}}
{\!!widthb}%
%\getvalue{\??dd#1\s!do\c!lokaal}%
- \parindent=\!!zeropoint\relax
- \doifelsevalue{\??dd#1\c!titeluitlijnen}{\v!nee}
+ \parindent\zeropoint\relax
+ \doifelsevalue{\??dd#1\c!titeluitlijnen}\v!nee
{\edef\@@leftdefinitieskip {\the\leftskip }%
\edef\@@rightdefinitieskip{\the\rightskip}}
{\ifcase\insidedefinition
@@ -328,33 +278,31 @@
\edef\@@rightdefinitieskip{\the\rightskip}%
\fi}%
\ifcase\insidedefinition
- \chardef\insidedefinition=1
+ \chardef\insidedefinition1
\or
- \chardef\insidedefinition=2
+ \chardef\insidedefinition2
\fi} % now happens elsewhere : \noindent\ignorespaces
\def\@@stopdefinitie#1%
{\par
\dostopattributes
\endgroup
- \egroup % temporary hack
\getvalue{\??dd#1\c!na}%
- \doifvalue{\??dd#1\c!springvolgendein}{\v!nee}{\noindentation}}
+ \egroup % temporary hack
+ \doifvalue{\??dd#1\c!springvolgendein}\v!nee\noindentation}
\def\@@dodefinitie#1%
- {\dostartattributes{\??dd#1}\c!letter\c!kleur{}%
+ {\dostartattributes{\??dd#1}\c!letter\c!kleur\empty
\ignorespaces}
\def\@@somedefinitie#1[#2]#3%
{\bgroup % temporary hack
- %\BeforePar{\getvalue{\??dd#1}[#2]{#3}}%
\BeforePar{\executedoordefinitie{#1}[#2]{#3}}%
\AfterPar{\@@stopdefinitie{#1}}%
\GetPar}
\def\@@startsomedefinitie#1[#2]#3%
{\bgroup % temporary hack
- %\BeforePar{\getvalue{\??dd#1}[#2]{#3}}%
\BeforePar{\executedoordefinitie{#1}[#2]{#3}}%
\GotoPar}
@@ -383,7 +331,7 @@
[\s!do\c!status=\v!stop,
\s!do\c!commando=\normal@@definitiewoord,
#2]%
- \doifvalue{\??dd#1\c!plaats}{\v!boven}%
+ \doifvalue{\??dd#1\c!plaats}\v!boven
{\doassign[\??dd#1][\c!tussen={\blanko}]}%
\setvalue{#1}%
{\dodoubleempty\@@definitie[#1]}%
@@ -393,16 +341,14 @@
{\@@stopdefinitie{#1}}}%
\def\@@startdefinitie[#1][#2]%
- {\doifelsevalue{\??dd#1\s!do\c!status}{\v!start}
- {\def\next{\@@startsomedefinitie{#1}[#2]{}}}
- {\def\next{\dowithwargument{\@@startsomedefinitie{#1}[#2]}}}%
- \next}
+ {\doifelsevalue{\??dd#1\s!do\c!status}\v!start
+ {\@@startsomedefinitie{#1}[#2]{}}
+ {\dowithwargument{\@@startsomedefinitie{#1}[#2]}}}
\def\@@definitie[#1][#2]%
- {\doifelsevalue{\??dd#1\s!do\c!status}{\v!start}
- {\def\next{\@@somedefinitie{#1}[#2]{}}}
- {\def\next{\dowithwargument{\@@somedefinitie{#1}[#2]}}}%
- \next}
+ {\doifelsevalue{\??dd#1\s!do\c!status}\v!start
+ {\@@somedefinitie{#1}[#2]{}}
+ {\dowithwargument{\@@somedefinitie{#1}[#2]}}}
\def\doordefinieren%
{\dodoubleemptywithset\dodoordefinieren}
@@ -449,18 +395,18 @@
\def\special@@definitiewoord#1#2#3#4[#5]#6#7%
{\strut
- \doifelsevalue{\??dd#1\c!nummer}{\v!nee}
+ \doifelsevalue{\??dd#1\c!nummer}\v!nee
{\!!doneafalse}
{\doifelse{#5}{-}
{\!!doneafalse}
{\!!doneatrue}}%
- \chardef\definitiekoppeling=0
+ \chardef\definitiekoppeling0
\iflocation
\doifvaluesomething{\??dd#1\c!koppeling}
{\processaction % genereert > of <
[\getvalue{\??dd#1\c!koppelwijze}]
- [ \v!lokaal=>\chardef\definitiekoppeling=1, % old: default
- \v!globaal=>\chardef\definitiekoppeling=2]}% new: global crosslinking
+ [ \v!lokaal=>\chardef\definitiekoppeling1, % old: default
+ \v!globaal=>\chardef\definitiekoppeling2]}% new: global crosslinking
\fi
\stelnummerin % the number is called indirectly
[\getvalue{\??dd#1\??dd\c!nummer}]
@@ -469,11 +415,10 @@
\getvalue{\e!volgende#2#1}%
\iflocation
\bgroup
- \setvalue{\??dd#1\c!sectienummer}{\v!ja}%
+ \letvalue{\??dd#1\c!sectienummer}\v!ja
\protectconversion
- %\maakvoorafgaandenummer[#1]%
\maakvoorafgaandenummer[\getvalue{\??dd#1\??dd\c!nummer}]%
-\preparethenumber{\??dd#1}\voorafgaandenummer\preparednumber
+ \preparethenumber{\??dd#1}\voorafgaandenummer\preparednumber
\ifcase\definitiekoppeling \or
\xdef\internaldoornummer{#3{#1}}%
\rawreference{\s!num}{#1:\internaldoornummer}{}%
@@ -483,9 +428,8 @@
\fi
\egroup
\fi
- %\maakvoorafgaandenummer[#1]%
\maakvoorafgaandenummer[\getvalue{\??dd#1\??dd\c!nummer}]%
-\preparethenumber{\??dd#1}\voorafgaandenummer\preparednumber
+ \preparethenumber{\??dd#1}\voorafgaandenummer\preparednumber
\hbox
{\let\normalkap\relax % sorry, uppercase causes troubles
\doattributes % \nocase primitive needed
@@ -497,15 +441,13 @@
\edef\localconnection{\getvalue{\??dd#1\c!koppeling}:\internaldoornummer}%
\doifreferencefoundelse{\localconnection}
{\in[\localconnection]}{}% genereert > of <
- %\in[\localconnection]%
\fi\fi}%
\doifnot{#5}{-}{\rawreference{\s!num}{#5}{#3{#1}}}%
\else % Why was this strange expansion needed?
\hbox
{\edef\!!stringa{\showdnpuretext{#2#1}}% nog eens testen binnen \expanded
\expanded{\doattributes{\??dd#1}\noexpand\c!kopletter\noexpand\c!kopkleur
- {\noexpand\getvalue{\??dd#1\c!commando}%
- {\!!stringa}}}%
+ {\noexpand\getvalue{\??dd#1\c!commando}{\!!stringa}}}%
\doifnot{#5}{-}{\rawreference{\s!num}{#5}{}}}%
\fi}
@@ -586,7 +528,6 @@
\c!monster,\c!hang,\c!uitlijnen,\c!voor,\c!tussen,\c!na,
\c!niveaus,\c!wijze,\c!blokwijze,\c!scheider,\c!marge,
\c!springvolgendein,\c!afsluiter,\c!sectienummer,\c!nummer]%
-% \ConvertToConstant\doifinstringelse{=}{#4}
\doifassignmentelse{#4}
{\getparameters[\??dd#3#1]%
[\c!tekst=#1,\??dd\c!nummer=#1,\c!conversie=,
@@ -594,13 +535,13 @@
{\doifelsenothing{#4}
{\getparameters[\??dd#3#1]%
[\c!tekst=#1,\??dd\c!nummer=#1,\c!conversie=,
-\c!afsluiter=,
+ \c!afsluiter=,
\c!links=,\c!rechts=,\c!koppeling=,\c!koppelwijze=,#4]}%
{\copyparameters[\??dd#3#1][\??dd#3#4]
[\c!plaats,\c!kopletter,\c!letter,\c!kleur,\c!kopkleur,
\c!breedte,\c!nummer,\c!afstand,\c!commando,\c!marge,
\c!monster,\c!hang,\c!uitlijnen,\c!voor,\c!tussen,\c!na,
-\c!afsluiter,
+ \c!afsluiter,
\c!springvolgendein,\c!links,\c!rechts,\c!koppeling,\c!koppelwijze]%
\getparameters[\??dd#3#1]
[\c!tekst=#1,\??dd\c!nummer=#4,\c!conversie=,#5]}}%
@@ -652,17 +593,17 @@
{\dodosteldoorspringenin[][#1]}
{\dodoubleargumentwithset\dodosteldoorspringenin[#1][#2]}}
-\def\steldoorspringenin%
+\def\steldoorspringenin
{\dodoubleempty\dosteldoorspringenin}
-\def\startdoorspringen%
+\def\startdoorspringen
{\witruimte
\@@dsvoor
\dosomebreak{\goodbreak}% \pagina[\v!voorkeur]
\begingroup
- \parskip=\!!zeropoint\relax}
+ \parskip\zeropoint\relax}
-\def\stopdoorspringen%
+\def\stopdoorspringen
{\endgroup
\@@dsna}
@@ -680,8 +621,8 @@
{\??ds#1}\c!kopletter\c!kopkleur
{\getvalue{\??ds#1\c!monster}\getvalue{\??ds#1\c!scheider}}}
{\getvalue{\??ds#1\c!afstand}}%
- \advance\!!widtha by \getvalue{\??ds#1\c!afstand}%
- \setbox2=\hbox to \!!widtha
+ \advance\!!widtha \getvalue{\??ds#1\c!afstand}%
+ \setbox2\hbox to \!!widtha
{\doattributes
{\??ds#1}\c!kopletter\c!kopkleur
{\strut
@@ -689,7 +630,7 @@
\hss
\getvalue{\??ds#1\c!scheider}%
\hskip\getvalue{\??ds#1\c!afstand}}}%
- \parindent\!!zeropoint
+ \parindent\zeropoint
\hskip#2\!!widtha\indent\box2%
\hangindent#3\!!widtha
\doattributes{\??ds#1}\c!letter\c!kleur{}% #4}%
diff --git a/tex/context/base/core-fig.tex b/tex/context/base/core-fig.tex
index f322875fa..73b83cd26 100644
--- a/tex/context/base/core-fig.tex
+++ b/tex/context/base/core-fig.tex
@@ -159,11 +159,13 @@
\newif\ifskipexternalfigures % \skipexternalfigurestrue
+%newif\ifsplitexternalfigures
+
%D A last switch inhibits running \TEXUTIL. Lets do it when
%D possible.
\newif\ifrunutilityfile % \runutilityfiletrue
-\newif\ifconsultutilityfile \consultutilityfiletrue
+\newif\ifconsultutilityfile \consultutilityfiletrue
%D When I ever decide to change the format of the figure
%D directory file that \TEXUTIL\ produces, the next number
@@ -237,14 +239,16 @@
%D method scans the utility files for files with the same name,
%D but different type.
+\let\figurepathlist\empty
+
\def\doanalyzefigurefiles#1%
- {\let\dodododoanalyzefigurefiles=#1%
+ {\let\dodododoanalyzefigurefiles#1%
\processcommacommand[\@@eftype]\dodoanalyzefigurefiles}
\def\dodoanalyzefigurefiles#1%
{\ifcase\figurestatus
\def\@@efcurrenttype{#1}%
- \processcommacommand[\@@ex@@gebied]\dododoanalyzefigurefiles
+ \processcommacommand[\figurepathlist]\dododoanalyzefigurefiles
\fi}
\def\dododoanalyzefigurefiles#1%
@@ -257,21 +261,21 @@
{\@@effilename.\figureextension{\@@efcurrenttype}}%
\to\@@efcurrentfile
\dodododoanalyzefigurefiles}
- {}%
+ \donothing
\fi}
%D Here is our first method: we scan the file directly, parse
%D the utility file next, and finaly run \TEXUTIL. The latter
%D two of course only take place when the first scan fails.
-\def\doanalyzefigurefilesA%
+\def\doanalyzefigurefilesA
{\ifcase\figurestatus
\@@eftrace{locating \@@efcurrentfile\space as \@@efcurrenttype}%
\doiffileelse\@@efcurrentfile
{\getfiguredimensionsA
\getfiguredimensionsB
\getfiguredimensionsC}
- {}%
+ \donothing
\fi}
%D It is possible to let \TEX\ determine the dimensions itself.
@@ -286,25 +290,25 @@
% never change the vsize / hsize here, is taken from env
\def\dogetfiguresizetex#1#2#3#4#5#6% file pagina ...
- {\doifinsetelse{\@@efextension}{\c!tex,\c!tmp}
+ {\doifinsetelse\@@efextension{\c!tex,\c!tmp}
{\ifx\@@efcurrentpath\empty\executedfalse\else\executedtrue\fi}
- {\executedfalse}%
+ \executedfalse
\ifexecuted
- \global\setbox\foundexternalfigure=\vbox
+ \global\setbox\foundexternalfigure\vbox
{\insidefloattrue
\forgetall
- \blanko[\v!blokkeer] % niet meer weg !
+ \blanko[\v!blokkeer]% niet meer weg !
\startreadingfile
- \readfile{#1}{}{}%
+ \readfile{#1}\donothing\donothing
\stopreadingfile
\endgraf
\removelastskip}%
- \global\setbox\foundexternalfigure=\hbox
+ \global\setbox\foundexternalfigure\hbox
{\raise\dp\foundexternalfigure\box\foundexternalfigure}%
- #3=\zeropoint
- #4=\zeropoint
- #5=\wd\foundexternalfigure
- #6=\ht\foundexternalfigure
+ #3\zeropoint
+ #4\zeropoint
+ #5\wd\foundexternalfigure
+ #6\ht\foundexternalfigure
\else
\@@eftrace{ignored}%
\fi}
@@ -315,28 +319,28 @@
\def\@@dogetfiguresize{dogetfiguresize}
-\def\getfiguredimensionsA%
+\def\getfiguredimensionsA
{\ifcase\figurestatus
\@@eftrace{analyzing \@@efcurrentfile\space
on \@@efcurrentpath\space
as \@@efcurrenttype}%
- \!!widthb=\zeropoint % ?
+ \!!widthb\zeropoint % ?
\doifdefinedelse{\@@dogetfiguresize\@@efcurrenttype}
{\executedtrue
\getvalue{\@@dogetfiguresize\@@efcurrenttype}%
- {\@@efcurrentfile}{\@@efpagina}%
- {\!!widtha}{\!!heighta}{\!!widthb}{\!!heightb}}
- {\executedfalse}%
+ \@@efcurrentfile\@@efpagina
+ \!!widtha\!!heighta\!!widthb\!!heightb}
+ \executedfalse
\ifexecuted
\donetrue
\ifdim\!!widtha=\zeropoint\relax\ifdim\!!heighta=\zeropoint\relax
\ifdim\!!widthb=\zeropoint\relax\ifdim\!!heightb=\zeropoint\relax
- \showmessage{\m!figures}{10}{\@@efcurrentfile}%
+ \showmessage\m!figures{10}\@@efcurrentfile
\@@eftrace{zero}%
\donefalse
\fi\fi
\fi\fi
- \doifelse{\@@efcurrenttype}{\c!mps}
+ \doifelse\@@efcurrenttype\c!mps
{\ifcase\EPScreator
\executedfalse
\else
@@ -351,7 +355,7 @@
\fi
\ifexecuted
\chardef\figurestatus=3
- \doifelse{\@@efcurrenttype}{\c!eps}
+ \doifelse\@@efcurrenttype\c!eps
{\ifcase\EPScreator
\@@eftrace{found}%
\else
@@ -376,10 +380,10 @@
\def\dogetfiguresizeeps#1#2#3#4#5#6%
{\dogetEPSboundingbox{#1}{#3}{#4}{#5}{#6}}
-\def\dogetfiguresizemps%
+\def\dogetfiguresizemps
{\dogetfiguresizeeps}
-\def\getfiguredimensionsB%
+\def\getfiguredimensionsB
{\ifcase\figurestatus\ifcase\figurefilemode\else
%\def\@@efloadname{\@@efcurrentpath\f!pathseparator\@@exfile}%
\assignfullfilename\@@efcurrentpath\@@exfile\to\@@efloadname
@@ -388,10 +392,10 @@
on \@@efcurrentpath\space
for \@@effilenametype}%
\pushendofline
- \let\presetfigure=\presetfigureA
-\startreadingfile
- \readsetfile{\@@efcurrentpath}{\@@exfile}\relax\relax
-\stopreadingfile
+ \startreadingfile
+ \let\presetfigure\presetfigureA
+ \readsetfile\@@efcurrentpath\@@exfile\donothing\donothing
+ \stopreadingfile
\popendofline
\@@eftrace{\ifcase\figurestatus not \fi found}%
\fi\fi}
@@ -400,19 +404,18 @@
{\ifcase\figurestatus
\@EA\DOIF\@EA{\@@effilenametype}{#1} % hm, tzt ook nog eens met pad/naam
{\getparameters[\??ep][#2]%
- \ExpandBothAfter\doif{\@@epe}{\@@efcurrenttype}
- {\chardef\figurestatus=4
+ \ExpandBothAfter\doif\@@epe\@@efcurrenttype
+ {\chardef\figurestatus4
\let\@@eftype\@@efcurrenttype
\let\@@effullname\@@efcurrentfile}}%
\else
\endinput
\fi}
-\def\getfiguredimensionsC%
+\def\getfiguredimensionsC
{\ifconsultutilityfile \ifrunutilityfile
\ifcase\figurestatus\ifcase\figurefilemode\else
- %\doif{\@@efcurrenttype}{\c!tex} % oeps, was wrong
- \doifnotinset{\@@efextension}{\c!tex,\c!tmp}
+ \doifnotinset\@@efextension{\c!tex,\c!tmp}
{\doiffileelse\@@efcurrentfile
{\edef\@@effilenametype{\@@effilename.\@@efcurrenttype}%
\@@eftrace{running texutil on \@@effilenametype}%
@@ -421,10 +424,10 @@
{texutil --fig --out=\@@efloadname\space\@@effilenametype}%
\@@eftrace{analyzing \@@efloadname\space on \@@effilenametype}%
\pushendofline
-\startreadingfile
- \let\presetfigure=\presetfigureB
- \readsetfile{.}{\@@efloadname}\relax\relax
-\stopreadingfile
+ \startreadingfile
+ \let\presetfigure\presetfigureB
+ \readsetfile{.}\@@efloadname\donothing\donothing
+ \stopreadingfile
\popendofline
\@@eftrace{\ifcase\figurestatus not \fi found}}
{}}%
@@ -440,7 +443,7 @@
%D The second pass over types and directories uses the
%D utilility files.
-\def\doanalyzefigurefilesB%
+\def\doanalyzefigurefilesB
{\ifconsultutilityfile\ifcase\figurestatus\ifcase\figurefilemode\else
%\def\@@efloadname{\@@efcurrentpath\f!pathseparator\@@exfile}%
\assignfullfilename\@@efcurrentpath\@@exfile\to\@@efloadname
@@ -449,10 +452,10 @@
on \@@efcurrentpath\space
for \@@effilenametype}%
\pushendofline
- \let\presetfigure=\presetfigureC
-\startreadingfile
- \readsetfile{\@@efcurrentpath}{\@@exfile}\relax\relax
-\stopreadingfile
+ \startreadingfile
+ \let\presetfigure\presetfigureC
+ \readsetfile\@@efcurrentpath\@@exfile\donothing\donothing
+ \stopreadingfile
\popendofline
\@@eftrace{\ifcase\figurestatus not \fi found}%
\fi\fi\fi}
@@ -461,8 +464,8 @@
{\ifcase\figurestatus
\@EA\DOIF\@EA{\@@effilenametype}{#1}
{\getparameters[\??ep][#2]%
- \doif{\@@epe}{\@@efcurrenttype}
- {\chardef\figurestatus=4
+ \doif\@@epe\@@efcurrenttype
+ {\chardef\figurestatus4
\let\@@eftype\@@efcurrenttype
\let\@@effullname\@@efcurrentfile}}%
\else
@@ -472,7 +475,7 @@
%D The last and third pass mainly differs from the second in
%D being more tolerant.
-\def\doanalyzefigurefilesC%
+\def\doanalyzefigurefilesC
{\ifconsultutilityfile\ifcase\figurestatus\ifcase\figurefilemode\else
%\def\@@efloadname{\@@efcurrentpath\f!pathseparator\@@exfile}%
\assignfullfilename\@@efcurrentpath\@@exfile\to\@@efloadname
@@ -480,10 +483,10 @@
on \@@efcurrentpath\space
for \@@effilename.* surrogate}%
\pushendofline
- \let\presetfigure=\presetfigureD
-\startreadingfile
- \readsetfile{\@@efcurrentpath}{\@@exfile}\relax\relax
-\stopreadingfile
+ \startreadingfile
+ \let\presetfigure\presetfigureD
+ \readsetfile\@@efcurrentpath\@@exfile\donothing\donothing
+ \stopreadingfile
\popendofline
\@@eftrace{\ifcase\figurestatus not \fi found}%
\fi\fi\fi}
@@ -492,12 +495,12 @@
{\ifcase\figurestatus
\@EA\DOIFINSTRINGELSE\@EA{\@@effilename.}{#1}
{\getparameters[\??ep][#2]%
- \ExpandBothAfter\doifinsetelse{\@@epe}{\@@efcurrenttype}
- {\chardef\figurestatus=4
+ \ExpandBothAfter\doifinsetelse\@@epe\@@efcurrenttype
+ {\chardef\figurestatus4
\let\@@eftype\@@efcurrenttype
\let\@@effullname\@@efcurrentfile}
- {}}
- {}%
+ \donothing}
+ \donothing
\else
\endinput
\fi}
@@ -507,8 +510,9 @@
%D versions don't match.
\def\thisisfigureversion#1%
- {\doifnot{\figureversion}{#1}
- {\showmessage{\m!figures}{7}{\@@efloadname}\endinput}}
+ {\doifnot\figureversion{#1}
+ {\showmessage\m!figures7\@@efloadname
+ \endinput}}
%D Some files, take for instance movies, cannot easilly be
%D parsed on dimensions, that is, not yet. Although the current
@@ -518,28 +522,26 @@
%D can disable \type{preset}. When no preset is needed, we only
%D locate the file.
-\def\locatepresetfigurefiles%
+\def\locatepresetfigurefiles
{\processcommacommand[\@@eftype]\dolocatepresetfigurefiles}
\def\dolocatepresetfigurefiles#1%
{\def\@@efcurrenttype{#1}%
- \processcommacommand[\@@ex@@gebied]\dodolocatepresetfigurefiles}
+ \processcommacommand[\figurepathlist]\dodolocatepresetfigurefiles}
\def\dodolocatepresetfigurefiles#1%
{\ifcase\figurestatus
\doiffileinsertionsupportedelse\@@efcurrenttype
- {%\edef\@@efcurrentfile%
- % {#1\f!pathseparator\@@effilename.\figureextension{\@@efcurrenttype}}%
- \assignfullfilename
+ {\assignfullfilename
{#1}{\@@effilename.\figureextension{\@@efcurrenttype}}%
\to\@@efcurrentfile
\@@eftrace{only searching for \@@efcurrentfile}%
\doiffileelse\@@efcurrentfile
- {\chardef\figurestatus=1
+ {\chardef\figurestatus\plusone
\let\@@eftype\@@efcurrenttype
\let\@@effullname\@@efcurrentfile}
- {}}
- {}%
+ \donothing}
+ \donothing
\fi}
%D All these macros are in some way called by the macro \type
@@ -548,17 +550,17 @@
% bools gebruiken
-\def\setnaturalfiguresize%
- {\doifsomething{\@@efbreedte}
- {\global\figwid=\@@efbreedte}%
- \doifsomething{\@@efhoogte}
- {\global\fighei=\@@efhoogte}%
- \doifsomething{\@@efschaal}
- {\figxsca=\@@efschaal
- \figysca=\@@efschaal}}
-
-\def\setfactorfiguresize%
- {\doifinsetelse{\@@effactor}{\v!max,\v!passend,\v!ruim}
+\def\setnaturalfiguresize
+ {\doifsomething\@@efbreedte
+ {\global\figwid\@@efbreedte}%
+ \doifsomething\@@efhoogte
+ {\global\fighei\@@efhoogte}%
+ \doifsomething\@@efschaal
+ {\figxsca\@@efschaal
+ \figysca\@@efschaal}}
+
+\def\setfactorfiguresize
+ {\doifinsetelse\@@effactor{\v!max,\v!passend,\v!ruim}
{\doapplyfiguresize
\ifdim\@@epw>\@@eph\relax
\docalculatefigurenorm\figwid\@@effactor\@@efmaxbreedte\hsize\@@efhsize
@@ -568,12 +570,12 @@
\docalculatefigurescales\fighei\@@eph\figwid\@@epw
\fi
\!!doneatrue}
- {\doifinsetelse{\@@efhfactor}{\v!max,\v!passend,\v!ruim}
+ {\doifinsetelse\@@efhfactor{\v!max,\v!passend,\v!ruim}
{\doapplyfiguresize
\docalculatefigurenorm\fighei\@@efhfactor\@@efmaxhoogte\figurevsize\@@efvsize
\docalculatefigurescales\fighei\@@eph\figwid\@@epw
\!!doneatrue}
- {\doifinsetelse{\@@efbfactor}{\v!max,\v!passend,\v!ruim}
+ {\doifinsetelse\@@efbfactor{\v!max,\v!passend,\v!ruim}
{\doapplyfiguresize
\docalculatefigurenorm\figwid\@@efbfactor\@@efmaxbreedte\hsize\@@efhsize
\docalculatefigurescales\figwid\@@epw\fighei\@@eph
@@ -584,35 +586,35 @@
\!!doneafalse}}}%
\if!!donea
\ifdim\figwid>\@@efhsize\relax
- \global\fighei=\zeropoint
- \global\figwid=\@@efhsize
+ \global\fighei\zeropoint
+ \global\figwid\@@efhsize
\else\ifdim\fighei>\@@efvsize\relax
- \global\fighei=\@@efvsize
- \global\figwid=\zeropoint
+ \global\fighei\@@efvsize
+ \global\figwid\zeropoint
\fi\fi
\fi}
-\def\setscalefiguresize%
- {\doifsomething{\@@efschaal}
+\def\setscalefiguresize
+ {\doifsomething\@@efschaal
{\doapplyfigurescale\figwid\@@epw\figxsca
\doapplyfigurescale\fighei\@@eph\figysca
- \global\figwid=\zeropoint
- \global\fighei=\zeropoint
- \doifelsenothing{\@@efmaxbreedte}
- {\doifsomething{\@@efmaxhoogte}
+ \global\figwid\zeropoint
+ \global\fighei\zeropoint
+ \doifelsenothing\@@efmaxbreedte
+ {\doifsomething\@@efmaxhoogte
{\ifdim\@@eph>\@@efmaxhoogte
- \global\fighei=\@@efmaxhoogte
+ \global\fighei\@@efmaxhoogte
\fi}}
{\ifdim\@@epw>\@@efmaxbreedte
- \global\figwid=\@@efmaxbreedte
+ \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}}
+ \doifsomething\@@efmaxbreedte
+ {\ifdim\figwid>\@@efmaxbreedte\global\figwid\@@efmaxbreedte#2\relax\fi}%
+ \doifsomething\@@efmaxhoogte
+ {\ifdim\fighei>\@@efmaxhoogte \global\fighei\@@efmaxhoogte #3\relax\fi}}
\def\setdimensionfiguresize
{\ifdim\figwid>\zeropoint\relax
@@ -645,50 +647,55 @@
\fi
\fi}
-\def\setupexternalfigures%
+\def\setupexternalfigures
{\dosingleempty\dosetupexternalfigures}
\def\dosetupexternalfigures[#1]% needs a good clean up
{\getparameters[\??ex][#1]%
\getparameters[\??ef][#1]% dangerous for figs with backgrounds
- \doifelsenothing{\@@explaats} % fig file paths
- {\scratchcounter=3 }
- {\doifelsenothing{\@@exfile} % tuf file paths
- {\scratchcounter=3 }
- {\scratchcounter=0
- \ExpandBothAfter\doifinset{\v!lokaal}{\@@explaats}
+ \checkfiguresettings
+ \doifelsenothing\@@explaats % fig file paths
+ {\scratchcounter3 }
+ {\doifelsenothing\@@exfile % tuf file paths
+ {\scratchcounter3 }
+ {\scratchcounter0
+ \ExpandBothAfter\doifinset\v!lokaal\@@explaats
{\advance\scratchcounter 1 }%
- \ExpandBothAfter\doifinset{\v!globaal}{\@@explaats}
+ \ExpandBothAfter\doifinset\v!globaal\@@explaats
{\advance\scratchcounter 2 }}}%
- \chardef\figurefilemode=\scratchcounter
+ \chardef\figurefilemode\scratchcounter\relax
\ifcase\figurefilemode
- \let\@@ex@@gebied\f!currentpath
+ \let\figurepathlist\f!currentpath
\or % lokaal
- \let\@@ex@@gebied\f!currentpath
+ \let\figurepathlist\f!currentpath
\or % globaal
- \let\@@ex@@gebied\@@exgebied
+ \let\figurepathlist\@@exgebied
\or % lokaal,globaal / non empty gebied
- \edef\@@ex@@gebied{\f!currentpath\ifx\@@exgebied\empty\else,\fi\@@exgebied}%
+ \edef\figurepathlist{\f!currentpath\ifx\@@exgebied\empty\else,\fi\@@exgebied}%
\fi
- \ExpandBothAfter\doifinset{\v!default}{\@@explaats}
- {\edef\@@ex@@gebied{\@@ex@@gebied,}}% default tex path search
+ \ExpandBothAfter\doifinset\v!default\@@explaats
+ {\edef\figurepathlist{\figurepathlist,}}% default tex path search
\ifx\@@exfile\empty
- \chardef\figurefilemode=0
+ \chardef\figurefilemode\zerocount
\fi}
%D The next one is for instance used in symbols:
-\def\resetexternalfigures%
+\def\resetexternalfigures
{\setupexternalfigures
[\c!optie=,\c!maxbreedte=,\c!maxhoogte=,
+ %\c!splitskleur=,% needed ?
+ \c!voorgrondkleur=,
\c!kader=\v!uit,\c!achtergrond=]}
%D Since we only need to reset some parameters, we can
%D better use a faster alternative:
-\def\resetexternalfigures%
+\def\resetexternalfigures
{\getparameters[\??ef]
[\c!optie=,\c!maxbreedte=,\c!maxhoogte=,
+ %\c!splitskleur=,% needed ?
+ \c!voorgrondkleur=,
\c!kader=\v!uit,\c!achtergrond=]}
%D This one dropped the runtime of the \MAPS\ bibliography
@@ -715,118 +722,87 @@
[ \v!max=>\global#1=#4\relax,
\v!passend=>\global#1=#5\relax,
\v!ruim=>\global#1=#5\relax
- \global\advance #1 by -4\@@exkorps\relax,
+ \global\advance #1 -4\@@exkorps\relax,
\s!default=>\doifsomething{#3}{\global#1=#3\relax},
\s!unknown=>\global#1=\@@exkorps\relax
- \global\divide#1 by \!!ten\relax
- \global\multiply#1 by #2\relax]}
+ \global\divide#1 \!!ten\relax
+ \global\multiply#1 #2\relax]}
\def\docalculatefigurescales#1#2#3#4%
{\dimen0=#1\relax % #1 = new 1-value
\dimen2=#2\relax % #2 = old 1-value
- \divide\dimen2 by \!!thousand
- \divide\dimen0 by \dimen2
- \figxsca=\dimen0 % x scale
- \figysca=\dimen0 % y scale
+ \divide\dimen2 \!!thousand
+ \divide\dimen0 \dimen2
+ \figxsca\dimen0 % x scale
+ \figysca\dimen0 % y scale
\dimen2=#4\relax % #4 = old 2-value
- \divide\dimen2 by \!!thousand
- \multiply\dimen2 by \dimen0
+ \divide\dimen2 \!!thousand
+ \multiply\dimen2 \dimen0
#3=\dimen2 } % #3 = new 2-value
\def\docalculatefigurescale#1#2#3%
{\dimen0=#1\relax % #1 = new value
\dimen2=#2\relax % #2 = old value
- \divide\dimen2 by \!!thousand
- \divide\dimen0 by \dimen2
+ \divide\dimen2 \!!thousand
+ \divide\dimen0 \dimen2
#3=\dimen0 } % #3 = schaal
\def\doapplyfigurescale#1#2#3%
{\global#1=#2\relax
- \ifcase0\@@efschaal\relax
+ \ifcase0\@@efschaal\relax % beter: doifnum...
#3=\!!thousand
\else
#3=\@@efschaal
- \fi
- \relax % important !
+ \fi\relax % important !
\ifnum#3=\!!thousand\else
- \global\divide#1 by \!!thousand
- \global\multiply#1 by #3\relax
+ \global\divide #1 \!!thousand
+ \global\multiply#1 #3\relax
\fi}
\newdimen\figurevsize % we cannot manipulate any global vsize !
-% \def\doapplyfiguresize%
-% {\figurevsize=\teksthoogte
-% \ifinner
-% \figurevsize =\vsize % \teksthoogte =\vsize
-% \scratchdimen=\vsize % \scratchdimen=\teksthoogte
-% \else\ifinsidefloat
-% \figurevsize =\vsize % \teksthoogte =\vsize
-% \scratchdimen=\vsize % \scratchdimen=\teksthoogte
-% \else\ifinpagebody
-% \figurevsize =\vsize % \teksthoogte =\vsize
-% \scratchdimen=\vsize % \scratchdimen=\teksthoogte
-% \else
-% \ifdim\pagegoal<\maxdimen
-% \ifdim\pagetotal<\pagegoal
-% \scratchdimen=\pagegoal
-% \advance\scratchdimen by -\pagetotal
-% \else
-% \scratchdimen=\figurevsize % \teksthoogte
-% \fi
-% \else
-% \scratchdimen=\figurevsize % \teksthoogte
-% \fi
-% \fi\fi\fi
-% \doifelsenothing{\@@efhoogte}
-% {\edef\@@efvsize{\the\scratchdimen}}
-% {\let\@@efvsize=\@@efhoogte}%
-% \doifelsenothing{\@@efbreedte}
-% {\edef\@@efhsize{\the\hsize}}
-% {\let\@@efhsize=\@@efbreedte}}
-
-\def\doapplyfiguresize%
- {\doifelsenothing{\@@efmaxhoogte}
- {\figurevsize=\teksthoogte
+\def\doapplyfiguresize
+ {\doifelsenothing\@@efmaxhoogte
+ {\figurevsize\teksthoogte
\ifinner
- \figurevsize =\vsize % \teksthoogte =\vsize
- \scratchdimen=\vsize % \scratchdimen=\teksthoogte
+ \figurevsize \vsize % \teksthoogte =\vsize
+ \scratchdimen\vsize % \scratchdimen=\teksthoogte
\else\ifinsidefloat
- \figurevsize =\vsize % \teksthoogte =\vsize
- \scratchdimen=\vsize % \scratchdimen=\teksthoogte
+ \figurevsize \vsize % \teksthoogte =\vsize
+ \scratchdimen\vsize % \scratchdimen=\teksthoogte
\else\ifinpagebody
- \figurevsize =\vsize % \teksthoogte =\vsize
- \scratchdimen=\vsize % \scratchdimen=\teksthoogte
- \else
+ \figurevsize \vsize % \teksthoogte =\vsize
+ \scratchdimen\vsize % \scratchdimen=\teksthoogte
+ \else % hm, there should be an option to force this
\ifdim\pagegoal<\maxdimen
\ifdim\pagetotal<\pagegoal
- \scratchdimen=\pagegoal
- \advance\scratchdimen by -\pagetotal
+ \scratchdimen\pagegoal
+ \advance\scratchdimen -\pagetotal
\else
- \scratchdimen=\figurevsize % \teksthoogte
+ \scratchdimen\figurevsize % \teksthoogte
\fi
\else
- \scratchdimen=\figurevsize % \teksthoogte
+ \scratchdimen\figurevsize % \teksthoogte
\fi
\fi\fi\fi}
- {\figurevsize=\@@efmaxhoogte}%
- \doifelsenothing{\@@efhoogte}
+ {\figurevsize\@@efmaxhoogte}%
+ \doifelsenothing\@@efhoogte
{\edef\@@efvsize{\the\scratchdimen}}
- {\let\@@efvsize=\@@efhoogte}%
- \doifelsenothing{\@@efbreedte}
+ {\let\@@efvsize\@@efhoogte}%
+ \doifelsenothing\@@efbreedte
{\edef\@@efhsize{\the\hsize}}
- {\let\@@efhsize=\@@efbreedte}}
+ {\let\@@efhsize\@@efbreedte}}
\def\convertfigureinsertscale#1#2#3#4%
- {\scratchdimen=#1\relax
+ {\scratchdimen#1\relax
\ifnum#3=\!!thousand\else % better 1000 100 10 ranges, evt round 2sp
- \divide\scratchdimen by \!!thousand
- \multiply\scratchdimen by #3\relax
+ \divide\scratchdimen \!!thousand
+ \multiply\scratchdimen #3\relax
\fi
- \scratchdimen=-\scratchdimen % beter hier - dan in driver
- \edef#2{\scratchdimen}%
- \scratchdimen=#3pt
- \divide\scratchdimen by \!!ten
+ \scratchdimen-\scratchdimen % beter hier - dan in driver
+ \edef#2{\the\scratchdimen}% oeps, \the vergeten
+ \scratchdimen#3\s!pt
+ \divide\scratchdimen \!!ten
\edef#4{\@EA\withoutpt\@EA{\the\scratchdimen}}}
\newbox\foundexternalfigure
@@ -865,17 +841,294 @@
% become replaced by its xml counterpart; for that I first
% need to patch texutil.
+\def\checkfiguresettings
+ {\doifsomething\@@efregels
+ {\scratchdimen\@@efregels\lineheight
+ \edef\@@efhoogte{\the\scratchdimen}}}
+
+% \def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]%
+% {\mindermeldingen
+% \setupexternalfigures
+% \the\externalfigureresets % hook, see resource libraries
+% \global\figwid\zeropoint \figxsca\plusone % see note *
+% \global\fighei\zeropoint \figysca\plusone % see note *
+% \global\setbox\foundexternalfigure\box\voidb@x
+% \edef\expandedfigurename{#3}% needed e.g. in [\get...] cases
+% \expandafter\beforesplitstring\expandedfigurename\at.\to\@@effilename
+% \expandafter\aftersplitstring \expandedfigurename\at.\to\@@efextension
+% \doifelse\@@effilename{mprun}
+% {\edef\@@effilepref{\bufferprefix}}
+% {\let \@@effilepref\empty}%
+% \edef\@@effilename{\@@effilepref\@@effilename}%
+% \restorecatcodes % recently added; we presume local use
+% \def\@@eflabel{#2}%
+% \global\let\externalfigurelog\empty
+% \getparameters
+% [\??ep]
+% [\c!e=\s!unknown,
+% \c!w=15\korpsgrootte,\c!h=10\korpsgrootte,
+% \c!x=\!!zeropoint,\c!y=\!!zeropoint,
+% \c!t=,\c!s=,\c!a=,\c!f=\@@effilename]%
+% \getparameters
+% [\??ef]
+% [\c!type=\s!unknown,\c!methode=\@@eftype,\c!symbool=\v!nee,
+% \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!voorgrondkleur=,
+% \c!splitsen=,
+% \c!factor=,\c!hfactor=,\c!bfactor=]%
+% \doif\@@efextension\c!mov\presetfiguremov
+% \doif\@@efextension\c!avi\presetfigureavi
+% #1[#4][#5][#6]%
+% % lines -> height
+% \checkfiguresettings
+% % new, color separation
+% \doifseparatingcolorselse
+% {\let\@@efvoorgrondkleur\empty
+% \doifelsenothing\@@efsplitsen
+% {\splitexternalfiguresfalse}
+% {\doifcolorchannelelse\@@efsplitsen
+% {\splitexternalfiguresfalse}
+% {\let\@@efobject\v!nee
+% \splitexternalfigurestrue}}}
+% {\splitexternalfiguresfalse}%
+% % new, fake color in gray bitmaps
+% \doifsomething\@@efvoorgrondkleur
+% {\getparameters[\??ef]
+% [\c!achtergrond={\v!voorgrond,\v!kleur},
+% \c!achtergrondkleur=\@@efvoorgrondkleur]}%
+% %
+% \doif\@@efreset\v!ja \resetexternalfigures
+% \doif\@@eftype \c!mov\presetfiguremov
+% \doif\@@eftype \c!avi\presetfigureavi
+% % hack
+% \doif\@@efmethode\c!mov
+% {\doifsomething\@@efextension{\presetundefinedfigure\@@efextension}}%
+% %
+% \doif\@@eftype\v!buffer
+% {\ifx\@@efextension\empty
+% \let\@@efextension\c!tmp
+% \fi
+% \let\@@eftype\c!tex}%
+% %\@EA\doifnumberelse\@EA{\@@efextension} % new, test first
+% %{\def\@@eftype{\c!mps}}
+% %{%
+% \processaction
+% [\@@efextension]
+% [ \c!tex=>\let\@@eftype\c!tex,
+% \c!tmp=>\let\@@eftype\c!tex
+% \edef\@@effilepref{\bufferprefix}%
+% \edef\@@effilename{\@@effilepref\@@effilename},
+% \c!avi=>\presetfigureavi,
+% \c!mov=>\presetfiguremov]%
+% %}%
+% \edef\figuretypes{\figuretypes,\c!tex}%
+% \ifx\@@eftype\c!tex
+% % Since tex code can have positional stuff and worse,
+% % we want to avoid interference with how objects end
+% % up in files, therefore:
+% \let\@@efobject\v!nee
+% \fi
+% \edef\@@efobjectname{\@@effilename-\@@eftype-\@@efextension-\@@efpagina}%
+% \doifelse\@@efobject\v!nee
+% \donefalse
+% {\doifspecialavailableelse\dostartscaling
+% {\doifobjectssupportedelse
+% {\doifobjectfoundelse{FIG}{\@@efobjectname}{\donetrue}{\donefalse}}
+% \donefalse}
+% \donefalse}%
+% % redo message, only filename
+% \doifparentfileelse\@@effilename
+% {\@EA\removefromcommalist\@EA{\jobsuffix}\figuretypes
+% \let\@@efextension\empty
+% \showmessage\m!figures9\@@effilename
+% \donefalse}
+% \donothing
+% \ifdone
+% \getobjectdimensions{FIG}{\@@efobjectname}%
+% \geteparameters % e !
+% [\??ep]
+% [\c!x=\!!zeropoint,\c!y=\!!zeropoint,
+% \c!w=\objectwidth,\c!h=\objectheight]%
+% \chardef\figurestatus=5
+% \edef\@@effullname{\@@effilepref#3}%
+% \else
+% \doifelse{#2}\s!figurepreset
+% {\def\figureextension##1{\@@efextension}%
+% \edef\@@effullname{\@@effilepref#3}}%
+% {\ifx\@@efextension\empty
+% \dogetcommacommandelement1\from\@@eftype\to\commalistelement
+% \edef\@@effullname{\@@effilename.\commalistelement}%
+% \def\figureextension##1{##1}%
+% \else
+% \@EA\doifnumberelse\@EA{\@@efextension}
+% {\let\@@eftype\c!mps}\donothing
+% \edef\@@effullname{\@@effilename.\@@efextension}%
+% \def\figureextension##1{\@@efextension}%
+% \fi}%
+% \doifelse\@@efpreset\v!nee
+% {\doifelse\@@eftype\s!unknown
+% {\chardef\figurestatus0
+% \let\@@eftype\figuretypes
+% \locatepresetfigurefiles}
+% {\chardef\figurestatus1 }}
+% {\doifelse\@@eftype\s!unknown
+% {\let\@@eftype\figuretypes}
+% {\@EA\removefromcommalist\@EA{\@@eftype}\figuretypes
+% \edef\@@eftype{\ifx\@@eftype\empty\else\@@eftype,\fi\figuretypes}}%
+% \ifx\@@efextension\empty\else
+% \ExpandBothAfter\doifinsetelse\@@efextension\@@eftype
+% {\@EA\removefromcommalist\@EA{\@@efextension}\@@eftype
+% \edef\@@eftype{\@@efextension,\@@eftype}}%
+% \donothing
+% \fi
+% \doifelse{#2}\s!figurepreset
+% {\chardef\figurestatus4
+% %\def\@@efloadname{\f!currentpath\f!pathseparator\@@exfile}%
+% \assignfullfilename\f!currentpath\@@exfile\to\@@efloadname
+% \let\@@eftype\@@epe}
+% {\chardef\figurestatus\zerocount
+% \analyzefigurefiles}}%
+% \let\@@epe\@@eftype
+% \edef\@@efextension{\figureextension{\@@eftype}}% dirty trick
+% \global\figwid\zeropoint \figxsca\plusone
+% \global\fighei\zeropoint \figysca\plusone
+% \doif\v!kader\@@exoptie
+% {\let\@@efkader\v!aan}%
+% \fi
+% \ifcase\figurestatus
+% \let\@@efkader\v!aan
+% \let\@@efobject\v!nee
+% \showmessage\m!figures1{\@@effilename}%
+% \or
+% \showmessage\m!figures2{\@@effullname}%
+% \or
+% \showmessage\m!figures3{\@@effullname,\@@eflenttype}%
+% \or
+% \showmessage\m!figures4{\@@effullname}%
+% \or
+% \showmessage\m!figures5{\@@effullname,\@@efloadname}%
+% \or % no message
+% \doifnot\@@efsymbool\v!ja
+% {\showmessage\m!figures8{\@@effullname}}%
+% \fi
+% \ifdim\@@epw=\zeropoint \chardef\figurestatus1 \fi
+% \ifdim\@@eph=\zeropoint \chardef\figurestatus1 \fi
+% \ifnum\figurestatus=1 % unknown dimensions, take width or height or scale
+% \setnaturalfiguresize
+% \xdef\naturalfigurewidth{\the\figwid}%
+% \xdef\naturalfigureheight{\the\fighei}%
+% \let\@@efkader\v!uit
+% \else
+% \global\let\naturalfigurewidth\@@epw
+% \global\let\naturalfigureheight\@@eph
+% \setfactorfiguresize
+% \setscalefiguresize
+% \setdimensionfiguresize
+% \fi
+% \convertfigureinsertscale\@@epx\figx\figxsca\scax
+% \convertfigureinsertscale\@@epy\figy\figysca\scay
+% \iftraceexternalfigures
+% \message
+% {\externalfigurelog
+% [\@@effullname:
+% t={\@@eftype}\space m={\@@efmethode}\space l=\@@eflabel\space
+% w=\number\figwid\space h=\number\fighei\space
+% \c!sx=\scax\space\c!sy=\scay\space
+% ox=\figx\space oy=\figy]}%
+% \fi
+% \doif\v!leeg\@@exoptie
+% {\skipexternalfigurestrue
+% \let\@@efkader\v!uit}% ? ?
+% \doifelsenothing\@@efpagina % NIEUW ??
+% {\let\@@efoptions\empty}
+% {\let\@@efoptions\@@efpagina}%
+% \doif\@@efpreview\v!ja{\addtocommalist\v!preview\@@efoptions}%
+% \doif\@@efsturing\v!ja{\addtocommalist\v!sturing\@@efoptions}%
+% \doif\@@efherhaal\v!ja{\addtocommalist\v!herhaal\@@efoptions}%
+% \doif\@@eftype\c!mps
+% {\ifcase\EPSspecial\else\ifinobject\else
+% \@@eftrace{special mps, object forced}%
+% \doglobal\increment\forcedMPSobject
+% \edef\@@efobjectname{\c!mps::\forcedMPSobject}%
+% \let\@@efobject\v!ja
+% \fi\fi}%
+% \global\let\lastfigureobjectname\@@efobjectname
+% \doifelse\@@efobject\v!nee
+% \donefalse
+% {\doifobjectssupportedelse\donetrue\donefalse}%
+% \ifdone
+% \doifobjectfoundelse{FIG}\@@efobjectname
+% \donothing
+% {\bgroup % to be cleaned up
+% \figwid\@@epw % local ?
+% \fighei\@@eph % local ?
+% \scratchdimen\@@epx\scratchdimen-\scratchdimen
+% \edef\@@epx{\the\scratchdimen}%
+% \scratchdimen\@@epy\scratchdimen-\scratchdimen
+% \edef\@@epy{\the\scratchdimen}%
+% %\scratchdimen\@@epw\edef\@@epw{\the\scratchdimen}%
+% %\scratchdimen\@@eph\edef\@@eph{\the\scratchdimen}%
+% \setbox0\vbox to \fighei
+% {\vfill
+% \ifdim\wd\foundexternalfigure=\zeropoint
+% \doinsertfile
+% {\@@eftype,\@@efmethode}{\@@effullname,\@@eflabel}
+% {100}{100}\@@epx\@@epy\@@epw\@@eph\@@efoptions
+% \else\ifskipexternalfigures
+% \ruledhbox
+% {\backgroundline
+% [\@@efsplitskleur]{\fakebox\foundexternalfigure}}%
+% \else
+% \box\foundexternalfigure
+% \fi\fi}%
+% \wd0=\figwid
+% \setobject{FIG}\@@efobjectname\vbox{\box0}%
+% \setxvalue{\@@efobjectname\c!n}{\number\nofinsertpages}%
+% \egroup}%
+% \fi
+% \xdef\figurewidth {\the\figwid}%
+% \xdef\figureheight{\the\fighei}%
+% \global\setbox\foundexternalfigure\vbox to \fighei
+% {\vfill
+% \hsize\figwid
+% \ifdone
+% \dimen0=\scax\s!pt\divide\dimen0 100\edef\scax{\@EA\withoutpt\the\dimen0}%
+% \dimen0=\scay\s!pt\divide\dimen0 100\edef\scay{\@EA\withoutpt\the\dimen0}%
+% \schaal[\c!sx=\scax,\c!sy=\scay]{\dowithfigure{\getobject{FIG}{\@@efobjectname}}}%
+% \xdef\noffigurepages{\number\getvalue{\@@efobjectname\c!n}}%
+% \else\ifdim\wd\foundexternalfigure=\zeropoint
+% \dowithfigure
+% {\doinsertfile
+% {\@@eftype,\@@efmethode}{\@@effullname,\@@eflabel}
+% \scax\scay\figx\figy\figwid\fighei\@@efoptions}%
+% \xdef\noffigurepages{\number\nofinsertpages}%
+% \else
+% \dimen0=\scax\s!pt\divide\dimen0 100\edef\scax{\@EA\withoutpt\the\dimen0}%
+% \dimen0=\scay\s!pt\divide\dimen0 100\edef\scay{\@EA\withoutpt\the\dimen0}%
+% \schaal[\c!sx=\scax,\c!sy=\scay]{\dowithfigure{\box\foundexternalfigure}}%
+% \xdef\noffigurepages{\number\nofinsertpages}%
+% \fi\fi
+% \global\let\appliedfigurexscale\scax
+% \global\let\appliedfigureyscale\scay}%
+% \global\wd\foundexternalfigure\figwid
+% \finalizeexternalfigure{#2}{#3}}
+
+\chardef\splitexternalfigure=0 % 0 nosplit 1 split/yes 2 split/no
+
\def\calculateexternalfigure[#1][#2][#3][#4][#5][#6]%
{\mindermeldingen
\setupexternalfigures
\the\externalfigureresets % hook, see resource libraries
- \global\figwid\zeropoint \figxsca1 % see note *
- \global\fighei\zeropoint \figysca1 % see note *
- \global\setbox\foundexternalfigure=\box\voidb@x
+ \global\figwid\zeropoint \figxsca\plusone % see note *
+ \global\fighei\zeropoint \figysca\plusone % see note *
+ \global\setbox\foundexternalfigure\box\voidb@x
\edef\expandedfigurename{#3}% needed e.g. in [\get...] cases
\expandafter\beforesplitstring\expandedfigurename\at.\to\@@effilename
\expandafter\aftersplitstring \expandedfigurename\at.\to\@@efextension
- \doifelse{\@@effilename}{mprun}
+ \doifelse\@@effilename{mprun}
{\edef\@@effilepref{\bufferprefix}}
{\let \@@effilepref\empty}%
\edef\@@effilename{\@@effilepref\@@effilename}%
@@ -894,25 +1147,47 @@
\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!schaal=,\c!breedte=,\c!hoogte=,\c!scherm=,\c!regels=,
+ %\c!voorgrondkleur=,
+ \c!splitsen=,
\c!factor=,\c!hfactor=,\c!bfactor=]%
- \doif{\@@efextension}{\c!mov}{\presetfiguremov}%
- \doif{\@@efextension}{\c!avi}{\presetfigureavi}%
+ \doif\@@efextension\c!mov\presetfiguremov
+ \doif\@@efextension\c!avi\presetfigureavi
#1[#4][#5][#6]%
- \doif{\@@efreset}{\v!ja}{\resetexternalfigures}%
- \doif{\@@eftype}{\c!mov}{\presetfiguremov}%
- \doif{\@@eftype}{\c!avi}{\presetfigureavi}%
-% hack
-\doif{\@@efmethode}{\c!mov}{\doifsomething{\@@efextension}{\presetundefinedfigure\@@efextension}}%
-%
- \doif{\@@eftype}{\v!buffer}
+ % lines -> height
+ \checkfiguresettings
+ % new, color separation
+ \doifseparatingcolorselse
+ {\let\@@efvoorgrondkleur\empty
+ \doifelsenothing\@@efsplitsen
+ {\chardef\splitexternalfigure0}
+ {\doifcolorchannelelse\@@efsplitsen
+ {\let\@@efobject\v!nee % ?
+ \chardef\splitexternalfigure1}
+ {\chardef\splitexternalfigure2}}}
+ {\chardef\splitexternalfigure0}%
+ \relax % ends \chardef
+ % new, fake color in gray bitmaps
+ \doifsomething\@@efvoorgrondkleur
+ {\getparameters[\??ef]
+ [\c!achtergrond={\v!voorgrond,\v!kleur},
+ \c!achtergrondkleur=\@@efvoorgrondkleur]}%
+ %
+ \doif\@@efreset\v!ja \resetexternalfigures
+ \doif\@@eftype \c!mov\presetfiguremov
+ \doif\@@eftype \c!avi\presetfigureavi
+ % hack
+ \doif\@@efmethode\c!mov
+ {\doifsomething\@@efextension{\presetundefinedfigure\@@efextension}}%
+ %
+ \doif\@@eftype\v!buffer
{\ifx\@@efextension\empty
\let\@@efextension\c!tmp
\fi
\let\@@eftype\c!tex}%
-%\@EA\doifnumberelse\@EA{\@@efextension} % new, test first
-%{\def\@@eftype{\c!mps}}
-%{%
+ %\@EA\doifnumberelse\@EA{\@@efextension} % new, test first
+ %{\def\@@eftype{\c!mps}}
+ %{%
\processaction
[\@@efextension]
[ \c!tex=>\let\@@eftype\c!tex,
@@ -921,7 +1196,7 @@
\edef\@@effilename{\@@effilepref\@@effilename},
\c!avi=>\presetfigureavi,
\c!mov=>\presetfiguremov]%
-%}%
+ %}%
\edef\figuretypes{\figuretypes,\c!tex}%
\ifx\@@eftype\c!tex
% Since tex code can have positional stuff and worse,
@@ -930,20 +1205,20 @@
\let\@@efobject\v!nee
\fi
\edef\@@efobjectname{\@@effilename-\@@eftype-\@@efextension-\@@efpagina}%
- \doifelse{\@@efobject}{\v!nee}
- {\donefalse}
+ \doifelse\@@efobject\v!nee
+ \donefalse
{\doifspecialavailableelse\dostartscaling
{\doifobjectssupportedelse
- {\doifobjectfoundelse{FIG}{\@@efobjectname}{\donetrue}{\donefalse}}
- {\donefalse}}
- {\donefalse}}%
+ {\doifobjectfoundelse{FIG}\@@efobjectname\donetrue\donefalse}
+ \donefalse}
+ \donefalse}%
% redo message, only filename
- \doifparentfileelse{\@@effilename}
+ \doifparentfileelse\@@effilename
{\@EA\removefromcommalist\@EA{\jobsuffix}\figuretypes
- \let\@@efextension=\empty
- \showmessage{\m!figures}{9}{\@@effilename}%
+ \let\@@efextension\empty
+ \showmessage\m!figures9\@@effilename
\donefalse}
- {}%
+ \donothing
\ifdone
\getobjectdimensions{FIG}{\@@efobjectname}%
\geteparameters % e !
@@ -953,7 +1228,7 @@
\chardef\figurestatus=5
\edef\@@effullname{\@@effilepref#3}%
\else
- \doifelse{#2}{\s!figurepreset}
+ \doifelse{#2}\s!figurepreset
{\def\figureextension##1{\@@efextension}%
\edef\@@effullname{\@@effilepref#3}}%
{\ifx\@@efextension\empty
@@ -962,72 +1237,63 @@
\def\figureextension##1{##1}%
\else
\@EA\doifnumberelse\@EA{\@@efextension}
- {\def\@@eftype{\c!mps}}{}%
+ {\let\@@eftype\c!mps}\donothing
\edef\@@effullname{\@@effilename.\@@efextension}%
\def\figureextension##1{\@@efextension}%
\fi}%
-% \ifcase\figurefilemode
-% \let\@@ex@@gebied\f!currentpath
-% \or % lokaal
-% \let\@@ex@@gebied\f!currentpath
-% \or % globaal
-% \let\@@ex@@gebied\@@exgebied
-% \or % lokaal,globaal / non empty gebied
-% \edef\@@ex@@gebied{\f!currentpath\ifx\@@exgebied\empty\else,\fi\@@exgebied}%
-% \fi
- \doifelse{\@@efpreset}{\v!nee}
- {\doifelse{\@@eftype}{\s!unknown}
- {\chardef\figurestatus=0
- \let\@@eftype=\figuretypes
+ \doifelse\@@efpreset\v!nee
+ {\doifelse\@@eftype\s!unknown
+ {\chardef\figurestatus0
+ \let\@@eftype\figuretypes
\locatepresetfigurefiles}
- {\chardef\figurestatus=1 }}
- {\doifelse{\@@eftype}{\s!unknown}
- {\let\@@eftype=\figuretypes}
+ {\chardef\figurestatus1 }}
+ {\doifelse\@@eftype\s!unknown
+ {\let\@@eftype\figuretypes}
{\@EA\removefromcommalist\@EA{\@@eftype}\figuretypes
\edef\@@eftype{\ifx\@@eftype\empty\else\@@eftype,\fi\figuretypes}}%
\ifx\@@efextension\empty\else
- \ExpandBothAfter\doifinsetelse{\@@efextension}{\@@eftype}
+ \ExpandBothAfter\doifinsetelse\@@efextension\@@eftype
{\@EA\removefromcommalist\@EA{\@@efextension}\@@eftype
\edef\@@eftype{\@@efextension,\@@eftype}}%
- {}%
+ \donothing
\fi
- \doifelse{#2}{\s!figurepreset}
- {\chardef\figurestatus=4
+ \doifelse{#2}\s!figurepreset
+ {\chardef\figurestatus4
%\def\@@efloadname{\f!currentpath\f!pathseparator\@@exfile}%
\assignfullfilename\f!currentpath\@@exfile\to\@@efloadname
- \let\@@eftype=\@@epe}
- {\chardef\figurestatus=0
+ \let\@@eftype\@@epe}
+ {\chardef\figurestatus\zerocount
\analyzefigurefiles}}%
- \let\@@epe=\@@eftype
+ \let\@@epe\@@eftype
\edef\@@efextension{\figureextension{\@@eftype}}% dirty trick
- \global\figwid=\zeropoint \figxsca=1
- \global\fighei=\zeropoint \figysca=1
- \doif{\v!kader}{\@@exoptie}
- {\let\@@efkader=\v!aan}%
+ \global\figwid\zeropoint \figxsca\plusone
+ \global\fighei\zeropoint \figysca\plusone
+ \doif\v!kader\@@exoptie
+ {\let\@@efkader\v!aan}%
\fi
\ifcase\figurestatus
\let\@@efkader\v!aan
\let\@@efobject\v!nee
- \showmessage{\m!figures}{1}{\@@effilename}%
+ \showmessage\m!figures1{\@@effilename}%
\or
- \showmessage{\m!figures}{2}{\@@effullname}%
+ \showmessage\m!figures2{\@@effullname}%
\or
- \showmessage{\m!figures}{3}{\@@effullname,\@@eflenttype}%
+ \showmessage\m!figures3{\@@effullname,\@@eflenttype}%
\or
- \showmessage{\m!figures}{4}{\@@effullname}%
+ \showmessage\m!figures4{\@@effullname}%
\or
- \showmessage{\m!figures}{5}{\@@effullname,\@@efloadname}%
+ \showmessage\m!figures5{\@@effullname,\@@efloadname}%
\or % no message
- \doifnot{\@@efsymbool}{\v!ja}
- {\showmessage{\m!figures}{8}{\@@effullname}}%
+ \doifnot\@@efsymbool\v!ja
+ {\showmessage\m!figures8{\@@effullname}}%
\fi
- \ifdim\@@epw=\zeropoint \chardef\figurestatus=1 \fi
- \ifdim\@@eph=\zeropoint \chardef\figurestatus=1 \fi
+ \ifdim\@@epw=\zeropoint \chardef\figurestatus1 \fi
+ \ifdim\@@eph=\zeropoint \chardef\figurestatus1 \fi
\ifnum\figurestatus=1 % unknown dimensions, take width or height or scale
\setnaturalfiguresize
\xdef\naturalfigurewidth{\the\figwid}%
\xdef\naturalfigureheight{\the\fighei}%
- \let\@@efkader=\v!uit
+ \let\@@efkader\v!uit
\else
\global\let\naturalfigurewidth\@@epw
\global\let\naturalfigureheight\@@eph
@@ -1043,18 +1309,19 @@
[\@@effullname:
t={\@@eftype}\space m={\@@efmethode}\space l=\@@eflabel\space
w=\number\figwid\space h=\number\fighei\space
- sx=\scax\space sy=\scay\space ox=\figx\space oy=\figy]}%
+ \c!sx=\scax\space\c!sy=\scay\space
+ ox=\figx\space oy=\figy]}%
\fi
- \doif{\v!leeg}{\@@exoptie}
+ \doif\v!leeg\@@exoptie
{\skipexternalfigurestrue
- \let\@@efkader=\v!uit}% ? ?
- \doifelsenothing{\@@efpagina} % NIEUW ??
+ \let\@@efkader\v!uit}% ? ?
+ \doifelsenothing\@@efpagina % NIEUW ??
{\let\@@efoptions\empty}
{\let\@@efoptions\@@efpagina}%
- \doif{\@@efpreview}{\v!ja}{\addtocommalist\v!preview\@@efoptions}%
- \doif{\@@efsturing}{\v!ja}{\addtocommalist\v!sturing\@@efoptions}%
- \doif{\@@efherhaal}{\v!ja}{\addtocommalist\v!herhaal\@@efoptions}%
- \doif{\@@eftype}{\c!mps}
+ \doif\@@efpreview\v!ja{\addtocommalist\v!preview\@@efoptions}%
+ \doif\@@efsturing\v!ja{\addtocommalist\v!sturing\@@efoptions}%
+ \doif\@@efherhaal\v!ja{\addtocommalist\v!herhaal\@@efoptions}%
+ \doif\@@eftype\c!mps
{\ifcase\EPSspecial\else\ifinobject\else
\@@eftrace{special mps, object forced}%
\doglobal\increment\forcedMPSobject
@@ -1062,12 +1329,12 @@
\let\@@efobject\v!ja
\fi\fi}%
\global\let\lastfigureobjectname\@@efobjectname
- \doifelse{\@@efobject}{\v!nee}
- {\donefalse}
- {\doifobjectssupportedelse{\donetrue}{\donefalse}}%
+ \doifelse\@@efobject\v!nee
+ \donefalse
+ {\doifobjectssupportedelse\donetrue\donefalse}%
\ifdone
- \doifobjectfoundelse{FIG}{\@@efobjectname}
- {}
+ \doifobjectfoundelse{FIG}\@@efobjectname
+ \donothing
{\bgroup % to be cleaned up
\figwid\@@epw % local ?
\fighei\@@eph % local ?
@@ -1077,77 +1344,160 @@
\edef\@@epy{\the\scratchdimen}%
%\scratchdimen\@@epw\edef\@@epw{\the\scratchdimen}%
%\scratchdimen\@@eph\edef\@@eph{\the\scratchdimen}%
- \setbox0=\vbox to \fighei
+ \setbox0\vbox to \fighei
{\vfill
\ifdim\wd\foundexternalfigure=\zeropoint
\doinsertfile
{\@@eftype,\@@efmethode}{\@@effullname,\@@eflabel}
- {100}{100}
- {\@@epx}{\@@epy}
- {\@@epw}{\@@eph}
- {\@@efoptions}%
+ {100}{100}\@@epx\@@epy\@@epw\@@eph\@@efoptions
\else\ifskipexternalfigures
- \ruledhbox{\fakebox\foundexternalfigure}%
+ \ruledhbox
+ {\backgroundline
+ [\@@efsplitskleur]{\fakebox\foundexternalfigure}}%
\else
\box\foundexternalfigure
\fi\fi}%
\wd0=\figwid
- \setobject{FIG}{\@@efobjectname}\vbox{\box0}%
+ \setobject{FIG}\@@efobjectname\vbox{\box0}%
\setxvalue{\@@efobjectname\c!n}{\number\nofinsertpages}%
\egroup}%
\fi
\xdef\figurewidth {\the\figwid}%
\xdef\figureheight{\the\fighei}%
- \global\setbox\foundexternalfigure=\vbox to \fighei
+ \global\setbox\foundexternalfigure\vbox to \fighei
{\vfill
\hsize\figwid
\ifdone
- \dimen0=\scax pt\divide\dimen0 by 100\edef\scax{\@EA\withoutpt\the\dimen0}%
- \dimen0=\scay pt\divide\dimen0 by 100\edef\scay{\@EA\withoutpt\the\dimen0}%
- \schaal[sx=\scax,sy=\scay]{\dowithfigure{\getobject{FIG}{\@@efobjectname}}}%
+ \dimen0=\scax\s!pt\divide\dimen0 100\edef\scax{\@EA\withoutpt\the\dimen0}%
+ \dimen0=\scay\s!pt\divide\dimen0 100\edef\scay{\@EA\withoutpt\the\dimen0}%
+ \schaal[\c!sx=\scax,\c!sy=\scay]{\dowithfigure{\getobject{FIG}{\@@efobjectname}}}%
\xdef\noffigurepages{\number\getvalue{\@@efobjectname\c!n}}%
\else\ifdim\wd\foundexternalfigure=\zeropoint
\dowithfigure
{\doinsertfile
{\@@eftype,\@@efmethode}{\@@effullname,\@@eflabel}
- {\scax}{\scay}
- {\figx}{\figy}
- {\figwid}{\fighei}
- {\@@efoptions}}%
+ \scax\scay\figx\figy\figwid\fighei\@@efoptions}%
\xdef\noffigurepages{\number\nofinsertpages}%
\else
- \dimen0=\scax pt\divide\dimen0 100\edef\scax{\@EA\withoutpt\the\dimen0}%
- \dimen0=\scay pt\divide\dimen0 100\edef\scay{\@EA\withoutpt\the\dimen0}%
- \schaal[sx=\scax,sy=\scay]{\dowithfigure{\box\foundexternalfigure}}%
+ \dimen0=\scax\s!pt\divide\dimen0 100\edef\scax{\@EA\withoutpt\the\dimen0}%
+ \dimen0=\scay\s!pt\divide\dimen0 100\edef\scay{\@EA\withoutpt\the\dimen0}%
+ \schaal[\c!sx=\scax,\c!sy=\scay]{\dowithfigure{\box\foundexternalfigure}}%
\xdef\noffigurepages{\number\nofinsertpages}%
\fi\fi
\global\let\appliedfigurexscale\scax
\global\let\appliedfigureyscale\scay}%
- \global\wd\foundexternalfigure=\figwid
+ \global\wd\foundexternalfigure\figwid
\finalizeexternalfigure{#2}{#3}}
+\let\figurelabel \empty
+\let\figurefilename\empty
+\let\figurefiletype\empty
+\let\figurefilepage\empty
+
+% \def\finalizeexternalfigure#1#2%
+% {\pushmacro\figurewidth
+% \pushmacro\figureheight
+% \pushmacro\figurelabel
+% \pushmacro\figurefilename
+% \pushmacro\figurefiletype
+% \pushmacro\figurefilepage
+% \xdef\figurewidth {\the\figwid}%
+% \xdef\figureheight {\the\fighei}%
+% \xdef\figurelabel {#1}%
+% \xdef\figurefilename{#2}%
+% \xdef\figurefiletype{\@@eftype}%
+% \xdef\figurefilepage{\@@efpagina}%
+% \global\setbox\foundexternalfigure\vbox
+% {\forgetall
+% \ifcase\figurestatus
+% \resetsystemmode\v!figuur
+% \let\figurefiletype\empty
+% \else
+% \setsystemmode \v!figuur % beter resource
+% \fi
+% \ifconditional\externalfigurelevel % probably background
+% \ifskipexternalfigures
+% % nothing
+% \else\ifsplitexternalfigures
+% % nothing
+% \else\ifcase\figurestatus
+% % nothing
+% \else
+% \the\externalfigurepostprocessors
+% \box\foundexternalfigure
+% \fi\fi\fi
+% \else
+% \feedbackexternalfigure
+% \settrue\externalfigurelevel
+% \ifskipexternalfigures
+% \externalfigurereplacement{#1}{#2}{skipped}%
+% \else\ifsplitexternalfigures
+% \backgroundline
+% [\@@efsplitskleur]{\fakebox\foundexternalfigure}%
+% \else\ifcase\figurestatus
+% \externalfigurereplacement{#1}{#2}{unknown}%
+% \else
+% \the\externalfigurepostprocessors
+% \doifelse\@@efreset\v!ja
+% {\ht\foundexternalfigure\figureheight
+% \dp\foundexternalfigure\zeropoint
+% \wd\foundexternalfigure\figurewidth
+% \box\foundexternalfigure}
+% {\localframed % should also be applied to high res !
+% [\??ef]
+% [\c!offset=\v!overlay,
+% \c!breedte=\figurewidth,
+% \c!hoogte=\figureheight]
+% {\vfilll\box\foundexternalfigure}}%
+% \fi\fi\fi
+% \fi}%
+% \popmacro\figurefilepage
+% \popmacro\figurefiletype
+% \popmacro\figurefilename
+% \popmacro\figurelabel
+% \popmacro\figureheight
+% \popmacro\figurewidth}
+
\def\finalizeexternalfigure#1#2%
{\pushmacro\figurewidth
\pushmacro\figureheight
- \xdef\figurewidth {\the\figwid}%
- \xdef\figureheight{\the\fighei}%
+ \pushmacro\figurelabel
+ \pushmacro\figurefilename
+ \pushmacro\figurefiletype
+ \pushmacro\figurefilepage
+ \xdef\figurewidth {\the\figwid}%
+ \xdef\figureheight {\the\fighei}%
+ \xdef\figurelabel {#1}%
+ \xdef\figurefilename{#2}%
+ \xdef\figurefiletype{\@@eftype}%
+ \xdef\figurefilepage{\@@efpagina}%
\global\setbox\foundexternalfigure\vbox
{\forgetall
+ \ifcase\figurestatus
+ \resetsystemmode\v!figuur
+ \let\figurefiletype\empty
+ \else
+ \setsystemmode \v!figuur % beter resource
+ \fi
\ifconditional\externalfigurelevel % probably background
\ifskipexternalfigures
% nothing
\else\ifcase\figurestatus
% nothing
- \else
+ \else\ifnum\splitexternalfigure=2\else
\the\externalfigurepostprocessors
\box\foundexternalfigure
- \fi\fi
+ \fi\fi\fi
\else
+ \feedbackexternalfigure
\settrue\externalfigurelevel
\ifskipexternalfigures
\externalfigurereplacement{#1}{#2}{skipped}%
\else\ifcase\figurestatus
\externalfigurereplacement{#1}{#2}{unknown}%
+ \else\ifnum\splitexternalfigure=2
+ \backgroundline[\@@efsplitskleur]
+ {\fakebox\foundexternalfigure}%
\else
\the\externalfigurepostprocessors
\doifelse\@@efreset\v!ja
@@ -1160,21 +1510,37 @@
[\c!offset=\v!overlay,
\c!breedte=\figurewidth,
\c!hoogte=\figureheight]
- {\vfilll\box\foundexternalfigure}}%
- \fi\fi
+ {\vfilll
+ \ifnum\splitexternalfigure=1
+ % hm, eigenlijk in dit geval achtergrondkleur
+\hidesplitcolorfalse % really needed
+ \backgroundline[\@@efsplitskleur]
+ {\box\foundexternalfigure}%
+ \else % = 0, no split mode
+ \box\foundexternalfigure
+ \fi}}%
+ \fi\fi\fi
\fi}%
+ \popmacro\figurefilepage
+ \popmacro\figurefiletype
+ \popmacro\figurefilename
+ \popmacro\figurelabel
\popmacro\figureheight
\popmacro\figurewidth}
+
\def\externalfigurereplacement#1#2#3%
- {\expanded{\localframed
+ {\setupcolors
+ [\c!status=\v!lokaal]%
+ \expanded{\localframed
[\??ef]
[\c!breedte=\figurewidth,
\c!hoogte=\figureheight,
\c!achtergrond=\v!raster,
- \c!achtergrondraster=.5,
+ \c!achtergrondraster=.8,
%\c!kader=\ifincolor\v!uit\else\v!aan\fi]
- \c!kader=\ifincolor\@@efkader\else\v!aan\fi]}%
+ %\c!kader=\ifincolor\@@efkader\else\v!aan\fi]}%
+ \c!kader=\@@efkader]}%
{\ttx \nohyphens
name: \expanded{\verbatimstring{#1}}\\%
file: \expanded{\verbatimstring{#2}}\\%
@@ -1183,6 +1549,8 @@
\newtoks\externalfigureresets
\newtoks\externalfigurepostprocessors
+\let\feedbackexternalfigure\relax % \gobblefourarguments
+
\gdef\appliedfigurexscale{1}
\gdef\appliedfigureyscale{1}
@@ -1213,7 +1581,7 @@
\def\calculateexternalscreenfigure[#1][#2][#3][#4][#5][#6]%
{\ifx\@@efscherm\empty\else
- \doifnot{\@@efobject}{\v!nee}
+ \doifnot\@@efobject\v!nee
{\doifobjectssupportedelse
{\doifspecialavailableelse\doregisterfigure
{\bgroup
@@ -1240,7 +1608,7 @@
\def\dogetfiguredimensions[#1][#2]%
{{\let\immediate\relax % very dirty but prevents flushing, will change
- \setbox0=\hbox{\externalfigure[#1][#2,\c!scherm=,\c!object=\v!nee]}}}
+ \setbox0\hbox{\externalfigure[#1][#2,\c!scherm=,\c!object=\v!nee]}}}
% use the next one when the object must be forgotten (xobj
% nums can migrate to the next object; maybe it should
@@ -1257,7 +1625,7 @@
\newconditional\externalfigurelevel
-\def\doplaceexternalfigure% used direct and indirect
+\def\doplaceexternalfigure % used direct and indirect
{\dosixtupleempty\dodoplaceexternalfigure}
\def\dodoplaceexternalfigure[#1][#2][#3][#4][#5][#6]%
@@ -1323,7 +1691,7 @@
{\setvalue{\??ef\??ef#1}{\doplaceexternalfigure[\doprecopfigure][#1][#2][#3][#4]}}}%
\doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}} % upward compatible
-\def\douseexternalfigure[#1][#2][#3][#4]%
+\def\douseexternalfigure[#1][#2][#3][#4]%
{\doifelsenothing{#1}
{\doifsomething{#2}
{\dosetuseexternalfigure[#2][#2][#3][#4]}}
@@ -1331,7 +1699,7 @@
{\dosetuseexternalfigure[#1][#1][#3][#4]}
{\dosetuseexternalfigure[#1][#2][#3][#4]}}}
-\def\useexternalfigure%
+\def\useexternalfigure
{\doquadrupleempty\douseexternalfigure}
\def\doexternalfigure[#1][#2][#3]%
@@ -1349,18 +1717,14 @@
%D Two alternatives, more settings needed.
-\def\showexternalfigurea%
+\def\showexternalfigurea
{\bgroup
\mindermeldingen
\def\presetfigure[##1][##2]%
- {%\useexternalfigure
- % [\s!figurepreset][##1]
- % [\c!kader=\v!aan,\c!breedte=6cm][##2]%
- \getvalue{\e!start\v!figuur\e!tekst}[\v!links][]
+ {\getvalue{\e!start\v!figuur\e!tekst}[\v!links][]
{\v!geen}
{\hbox
-% {\getvalue{\s!figurepreset}%
-{\externalfigure[##1][\c!kader=\v!aan,\c!breedte=6cm][##2]%
+ {\externalfigure[##1][\c!kader=\v!aan,\c!breedte=6cm][##2]%
\tfskip
\framed[\c!breedte=\figurewidth,\c!hoogte=\figureheight]{}}}%
{\tfa ##1}%
@@ -1377,14 +1741,14 @@
\endgraf
\getvalue{\e!stop\v!figuur\e!tekst}}%
\pushendofline
- \readjobfile{\@@exfile}{}{}% was \readlocfile
+ \readjobfile\@@exfile\donothing\donothing
\popendofline
\egroup}
\def\showexternalfigureb% instelbaar maken
{\bgroup
\def\total{5}%
- \global\let\allfigures=\empty
+ \globalletempty\allfigures
\doglobal\newcounter\figurecounter
\mindermeldingen
\def\docommando##1{##1&}%
@@ -1392,20 +1756,16 @@
{\crcr
\noalign{\nobreak\vskip.5em}%
\@EA\globalprocesscommalist\@EA[\allfigures]\docommando
- \global\let\allfigures=\empty
+ \globalletempty\allfigures
\crcr
\noalign{\vskip1em\goodbreak}}%
\def\presetfigure[##1][##2]%
{\vbox
- {\divide\hsize by \total
- \advance\hsize by -1em
- %\useexternalfigure
- % [\s!figurepreset][##1]
- % [\c!kader=\v!aan,\c!factor=\v!max,\c!breedte=\hsize][##2]%
+ {\divide\hsize \total
+ \advance\hsize -1em
\externalfigure
[##1]
- [\c!kader=\v!aan,\c!factor=\v!max,\c!breedte=\hsize][##2]%
- }%\getvalue{\s!figurepreset}}%
+ [\c!kader=\v!aan,\c!factor=\v!max,\c!breedte=\hsize][##2]}%
\doglobal\addtocommalist{##1}\allfigures
%\getvalue{\s!figurepreset}%
\doglobal\increment\figurecounter
@@ -1419,16 +1779,16 @@
\pushendofline
\tabskip\zeropoint \!!plus 1fill
\halign to \hsize
- {&\hss##\hss\cr\readjobfile{\@@exfile}{}{}\crcr % was \readlocfile
+ {&\hss##\hss\cr\readjobfile\@@exfile\donothing\donothing\crcr
\figurecaptions}
\popendofline
\egroup}
-\def\showexternalfigurec%
+\def\showexternalfigurec
{\bgroup
\def\presetfigure[##1][##2]{\pagefigure[##1]}
\pushendofline
- \readjobfile{\@@exfile}{}{}
+ \readjobfile\@@exfile\donothing\donothing
\popendofline
\egroup}
@@ -1437,7 +1797,7 @@
\def\dopagefigure[#1][#2]%
{\bgroup
- \getparameters[\??ex][\c!offset=\!!zeropoint,#2]
+ \getparameters[\??ex][\c!offset=\!!zeropoint,#2]%
\startTEXpage[\c!offset=\@@exoffset]%
\externalfigure[#1][#2]%
\stopTEXpage
@@ -1452,7 +1812,7 @@
\getvalue{showexternalfigure\@@exvariant}%
\egroup}
-\def\showexternalfigures%
+\def\showexternalfigures
{\dosingleempty\doshowexternalfigures}
\def\overlayfigure#1%
@@ -1464,20 +1824,20 @@
\newdimen\efxsteps
\newdimen\efysteps
-\def\calculateefsteps%
- {\ifnum0\@@exxmax=0
- \ifnum0\@@exymax=0
+\def\calculateefsteps
+ {\ifnum0\@@exxmax=\zerocount
+ \ifnum0\@@exymax=\zerocount
\def\@@exymax{24}%
\fi
- \efysteps=\figureheight \divide\efysteps by \@@exymax
- \efxsteps=\efysteps
+ \efysteps\figureheight \divide\efysteps \@@exymax
+ \efxsteps\efysteps
\dimen0=\figurewidth
- \advance\dimen0 by \efysteps
- \divide\dimen0 by \efysteps
+ \advance\dimen0 \efysteps
+ \divide \dimen0 \efysteps
\edef\@@exxmax{\number\dimen0}%
\else
- \efxsteps=\figurewidth \divide\efxsteps by \@@exxmax
- \efysteps=\figureheight \divide\efysteps by \@@exymax
+ \efxsteps\figurewidth \divide\efxsteps \@@exxmax
+ \efysteps\figureheight \divide\efysteps \@@exymax
\fi}
\def\efcomment#1(#2,#3)#4(#5,#6)% {kader}(x,y)(h,b)[...]{tekst}
@@ -1524,21 +1884,19 @@
\naarbox{\copy0}[#4]}
\def\efmark(#1,#2)#3(#4,#5)#6[#7]%
- {\advance\efreference by 1
+ {\advance\efreference \plusone
\position(#1,#2)
{\hbox{\the\efreference}}%
\position(#1,#2)
- {\gotosomeinternal
- {\s!vwb}{#7}{\realfolio}
- {\efdomarker(#4,#5){\v!aan}{\thisissomeinternal{\s!vwa}{#7}}}}}
+ {\gotosomeinternal\s!vwb{#7}\realfolio
+ {\efdomarker(#4,#5)\v!aan{\thisissomeinternal\s!vwa{#7}}}}}
\def\eftext#1(#2,#3)#4(#5,#6)#7[#8]%
- {\advance\efreference by 1
+ {\advance\efreference \plusone
\hbox
{\quad
- \thisissomeinternal{\s!vwb}{#8}%
- \gotosomeinternal
- {\s!vwa}{#8}{\realfolio}
+ \thisissomeinternal\s!vwb{#8}%
+ \gotosomeinternal \s!vwa{#8}\realfolio
{\hbox to 1.5em{\the\efreference\presetgoto\hfill}}%
\quad#1 (#2,#3) (#5,#6) [#8]\hfill}%
\endgraf}
@@ -1565,7 +1923,7 @@
\def\placestartfigure[#1][#2][#3]#4\placestopfigure[#5]%
{\hbox
- {\setbox0=\hbox
+ {\setbox0\hbox
{\useexternalfigure[\s!dummy][#2][#3,#5]%
\externalfigure[\s!dummy]}%
\calculateefsteps
@@ -1581,7 +1939,7 @@
\def\colorbar##1[##2]%
{}%
\position(0,0){\box0}%
- \linewidth=1pt
+ \linewidth1pt
\setuppositioning
[\c!eenheid=pt,
\c!xschaal=\withoutpt{\the\efxsteps},
@@ -1590,7 +1948,7 @@
\ignorespaces#4%
\def\referring(##1,##2)##3(##4,##5)##6[##7]%
{}%
- \let\marking=\referring
+ \let\marking\referring
\def\remark%
{\efcomment\v!nee}%
\def\colorbar##1[##2]%
@@ -1599,11 +1957,11 @@
\stoppositioning
\box\colorbarbox}}
-\def\dodostartfigure[#1][#2][#3]#4\stopfigure%
+\def\dodostartfigure[#1][#2][#3]#4\stopfigure
{\doifelse{\v!test}{\@@exoptie}
{\teststartfigure[#1][#2][#3]#4\teststopfigure
- \def\@@exhokjes{\v!aan}}
- {\def\@@exhokjes{\v!uit}}%
+ \let\@@exhokjes\v!aan}
+ {\let\@@exhokjes\v!uit}%
\setvalue{\??ef\??ef#1}%
{\dosingleempty{\placestartfigure[#1][#2][#3]#4\placestopfigure}}%
\doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}}
@@ -1613,19 +1971,19 @@
\def\teststartfigure[#1][#2][#3]#4\teststopfigure%
{\begingroup
- \setbox0=\hbox
+ \setbox0\hbox
{\useexternalfigure[\s!dummy][#2][\c!bfactor=\v!max]%
\externalfigure[\s!dummy]}%
- \def\referring%
+ \def\referring
{\efmark}%
- \def\marking%
+ \def\marking
{\efmark}%
- \def\remark%
+ \def\remark
{\efcomment\v!ja}%
\def\colorbar##1[##2]%
{}%
- \efreference=0
- \setbox0=\vbox
+ \efreference\zerocount
+ \setbox0\vbox
{\hsize240pt
\startpositioning
\calculateefsteps
@@ -1647,11 +2005,11 @@
\c!xschaal=\withoutpt{\the\efxsteps},
\c!yschaal=\withoutpt{\the\efysteps},
\c!factor=1]%
- \linewidth=1pt
+ \linewidth1pt
\ignorespaces#4\relax
\stoppositioning
\vfill}%
- \efreference=0
+ \efreference\zerocount
\def\referring%
{\eftext{$\rightarrow$}}%
\def\marking%
@@ -1660,15 +2018,15 @@
{\efnocomment}%
\def\colorbar##1[##2]%
{}%
- \setbox2=\vbox
+ \setbox2\vbox
{{\tfa\doifelsenothing{#1}{#2}{#1}}
\blanko
\tfxx#4
\vfilll}%
\ifdim\ht0>\ht2
- \ht2=\ht0
+ \ht2\ht0
\else
- \ht0=\ht2
+ \ht0\ht2
\fi
\hbox
{\hskip3em
@@ -1677,10 +2035,10 @@
\endgroup}
\def\dodostartfigure[#1][#2][#3]#4\stopfigure%
- {\doifelse{\v!test}{\@@exoptie}
+ {\doifelse\v!test\@@exoptie
{\teststartfigure[#1][#2][#3]#4\teststopfigure
- \def\@@exhokjes{\v!aan}}
- {\def\@@exhokjes{\v!uit}}%
+ \let\@@exhokjes\v!aan}
+ {\let\@@exhokjes\v!uit}%
\setvalue{\??ef\??ef#1}%
{\dosingleempty{\placestartfigure[#1][#2][#3]#4\placestopfigure}}%
\doifundefined{#1}{\setvalue{#1}{\getexternalfigure{#1}}}}
@@ -1740,36 +2098,36 @@
\ifdim\@@cphoogte>\zeropoint
\dimen2=\@@cphoogte
\dimen6=\ht\nextbox
- \advance\dimen6 by -\@@cpvoffset
- \advance\dimen6 by -\dimen2
+ \advance\dimen6 -\@@cpvoffset
+ \advance\dimen6 -\dimen2
\else
\dimen2=\ht\nextbox
\divide\dimen2 \@@cpny
\dimen6=-\@@cpy\dimen2
\advance\dimen6 -\@@cpsy\dimen2
- \advance\dimen6 \dimen2
+ \advance\dimen6 \dimen2
\dimen2=\@@cpsy\dimen2
\advance\dimen6 \ht\nextbox
\fi
- \setbox\nextbox=\hbox
+ \setbox\nextbox\hbox
{\hskip-\dimen4\lower\dimen6\box\nextbox}%
\wd\nextbox\zeropoint
\ht\nextbox\zeropoint
\dp\nextbox\zeropoint
- \setbox\nextbox=\hbox
- {\dostartclipping{\@@cpmp}{\dimen0}{\dimen2}%
+ \setbox\nextbox\hbox
+ {\dostartclipping\@@cpmp{\dimen0}{\dimen2}%
\box\nextbox
\dostopclipping}%
- \wd\nextbox=\dimen0
- \ht\nextbox=\dimen2
- \dp\nextbox=\zeropoint
+ \wd\nextbox\dimen0
+ \ht\nextbox\dimen2
+ \dp\nextbox\zeropoint
\box\nextbox
\egroup}%
\hbox}
\def\clip{\dosingleempty\doclip}
-\def\setupclipping%
+\def\setupclipping
{\dodoubleargument\getparameters[\??cp]}
%D defining sound tracks:
@@ -1793,7 +2151,7 @@
{\iflocation
\doifdefined{\??sd:#1}{\doifvaluesomething{\??sd:#1}
{\doinsertsoundtrack{\getvalue{\??sd:#1}}{#1}\@@sdoptie
- \setgvalue{\??sd:#1}{}}}%
+ \letgvalueempty{\??sd:#1}}}%
\fi}
\setexecutecommandcheck {startsound} \checksoundtrack
@@ -1823,6 +2181,7 @@
\c!hoek=\v!recht,
\c!kader=\v!uit,
\c!achtergrond=, % new
+ \c!splitskleur=white,
\c!plaats={\v!lokaal,\v!globaal}]
\setupexternalfigures
@@ -1834,12 +2193,11 @@
[buffer] [\jobname] [\c!type=\v!buffer,\c!object=\v!nee]
\setupclipping
- [\c!nx=2,\c!x=1,\c!sx=1,
- \c!ny=2,\c!y=1,\c!sy=1,
+ [\c!n=1, % was 2
+ \c!nx=\@@cpn,\c!x=1,\c!sx=1,
+ \c!ny=\@@cpn,\c!y=1,\c!sy=1,
\c!breedte=\!!zeropoint,\c!hoogte=\!!zeropoint,
\c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint,
\c!mp=]
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/core-fil.tex b/tex/context/base/core-fil.tex
index 39fb5be66..2aaf377e3 100644
--- a/tex/context/base/core-fil.tex
+++ b/tex/context/base/core-fil.tex
@@ -80,13 +80,13 @@
%D \usemodules[pictex,chemie,eenheid]
%D \stoptypen
-\def\definefilesynonym%
+\def\definefilesynonym
{\dodoubleempty\dodefinefilesynonym}
\def\dodefinefilesynonym[#1][#2]%
{\doifdefined{\??fs#1}
{\doifnotvalue{\??fs#1}{#2}
- {\showmessage{\m!files}{1}{#1 (#2),\getvalue{\??fs#1}}}}%
+ {\showmessage\m!files1{#1 (#2),\getvalue{\??fs#1}}}}%
\doifelse{#1}{#2}
{\letbeundefined{\??fs#1}{#2}}
{\setevalue{\??fs#1}{#2}}}
@@ -170,7 +170,7 @@
\dododousemodules\f!thirdprefix {#2}}
{\dododousemodules{#1-}{#2}}%
\ifconditional\moduleisloaded\else
- \showmessage{\m!systems}{6}{#2}%
+ \showmessage\m!systems6{#2}%
\fi}
\def\dousemodules[#1][#2]%
@@ -257,10 +257,10 @@
{\doifnotflagged{#2}
{\let#1\undefined
\startreadingfile
- \bgroup
+ \startnointerference % \bgroup
\cleanupfeatures % better \setnormalcatcodes / test first
\readfile{#2}\donothing\donothing
- \egroup
+ \stopnointerference % \egroup
\stopreadingfile
\doglobal\setflag{#2}}%
\ifx#1\undefined
diff --git a/tex/context/base/core-fld.tex b/tex/context/base/core-fld.tex
index 2ed365849..a397e97d2 100644
--- a/tex/context/base/core-fld.tex
+++ b/tex/context/base/core-fld.tex
@@ -14,6 +14,11 @@
% \appendtocommalist versus \addtocommalist
%
% * as default trigger in radiofields ?
+%
+% beware: weblink plugin truncates on length, while save as doesn't;
+% more precise: (1) first time right string is sent, (2)
+% internal string truncated, (3) second time truncated
+% string is sent.
\writestatus{loading}{Context Field Macros}
@@ -34,7 +39,7 @@
{}
{\settightobject{SYM}{#1}\hbox{\symbol[#1]}%
\flushatshipout
- {\setbox0=\hbox{\hskip-\maxdimen\getobject{SYM}{#1}}%
+ {\setbox0\hbox{\hskip-\maxdimen\getobject{SYM}{#1}}%
\smashbox0\box0}}}
\def\presetfieldsymbols[#1]% slow
@@ -117,7 +122,6 @@
{\@@FieldWidth}
{\@@FieldHeight}
{\@@FieldDefault}
-% opties
{\@@fdoptie}
{\@@FieldValues}
{\@@fdklikin,\@@fdklikuit,\@@fdgebiedin,\@@fdgebieduit,\@@fdnatoets,%
@@ -205,7 +209,7 @@
\let\tracefields\tracefieldstrue
-\def\doshowfields[#1]% todo: tabulate van maken
+\def\doshowfields[#1]% todo: tabulate van maken en runtime
{\bgroup
\switchtobodyfont[8pt,tt]
\doifsomething{#1}{\def\collectedfields{#1}}
@@ -240,7 +244,7 @@
\immediate\write\scratchwrite{use \tracefieldstrue}%
\else
\def\normalizedfieldmode##1##2##3%
- {\edef\@@FieldMode%
+ {\edef\@@FieldMode
{\ifcase##1 loner \or parent \or clone \or copy \fi
\ifcase##2 \else(done)\fi}}
\def\dosetfield##1##2##3##4##5##6##7##8##9%
@@ -253,7 +257,7 @@
\immediate\closeout\scratchwrite
\egroup}
-\def\logfields%
+\def\logfields
{\dosingleempty\doLogFields}
%D \starttypen
@@ -342,14 +346,14 @@
\def\setmainfieldkid#1#2%
{\immediatewriteutilitycommand{\fieldreference{#1}{#2}}}
-\def\checkfieldreferences%
+\def\checkfieldreferences
{\startnointerference
\protectlabels
- \doutilities{fieldreferences}{\jobname}{}{}{}%
+ \doutilities{fieldreferences}\jobname\empty\relax\relax
\global\let\checkfieldreferences\relax
\stopnointerference}
-\def\setfieldreferences%
+\def\setfieldreferences
{\def\fieldreference##1##2%
{\ifundefined{\r!widget##1}
\setxvalue{\r!widget##1}{##2}%
@@ -378,24 +382,24 @@
%D english examns publishing on demand document went down from
%D 1350 seconds to less than 950 on a 650 Mhz pentium.
-\def\definefield%
+\def\definefield
{\definemainfieldfalse\doquintupleempty\dodefinefield}
-\def\definemainfield%
+\def\definemainfield
{\definemainfieldtrue \doquintupleempty\dodefinefield}
-\let\collectedfields=\empty
+\let\collectedfields\empty
\newcounter\numberoffields
\newcounter\totalnumberoffields
-\def\savenumberoffields%
+\def\savenumberoffields
{\ifcase\numberoffields\relax\else
\savecurrentvalue\totalnumberoffields\numberoffields
\fi}
\appendtoks \savenumberoffields \to \everybye % \everylastshipout
-% \def\presetfieldreferences%
+% \def\presetfieldreferences
% {\ifnum\totalnumberoffields>0
% \definereference[AtOpenInitializeForm][\v!ResetForm]%
% \fi}
@@ -410,7 +414,7 @@
\doifundefinedelse{define#2field}
{\writestatus\m!fields{unknown field type #2}}
{\doifundefined{fielddata\currentfieldname}
- {\getmainfieldkids{\currentfieldname}%
+ {\getmainfieldkids\currentfieldname
\ifdefinemainfield
\ifx\@@FieldKids\empty
\let\@@FieldMode\fieldlonermode
@@ -484,19 +488,29 @@
{\dogetcommacommandelement1\from#4\to\SavedFieldDefault
\dogetcommacommandelement1\from\SavedFieldDefault\to\SavedFieldDefault}
{\def\SavedFieldDefault{#5}}%
+% when opt works
+% \@EA\beforesplitstring\SavedFieldDefault\at=>\to\SavedFieldDefault
\ifx\@@FieldKids\empty
\setfield{#1}{#2}{}{}{#4}{#3}{\@@FieldMode\@@FieldFree\@@FieldAuto}{}{\SavedFieldDefault}%
\else
\setfield{#1}{#2}{}{}{#4,\@@FieldKids}{#3}{\@@FieldMode\@@FieldFree\@@FieldAuto}{}{\SavedFieldDefault}%
\fi
+%
\def\docommando##1%
- {\doifelse{##1}{\SavedFieldDefault}
+ {\doifelse{##1}\SavedFieldDefault
{\def\@@FieldDefault{##1}}%
{\let\@@FieldDefault\empty}%
\setfield{##1}{#2}{#1}{}{}{#3}{\@@FieldMode\@@FieldFree\@@FieldAuto}{}{\@@FieldDefault}}%
+% when opt works
+% \def\docommando##1%
+% {\@EA\beforesplitstring##1\at=>\to\FieldValue
+% \doifelse\FieldValue\SavedFieldDefault
+% {\let\@@FieldDefault\FieldValue}%
+% {\let\@@FieldDefault\empty}%
+% \setfield\FieldValue{#2}{#1}{}{}{#3}{\@@FieldMode\@@FieldFree\@@FieldAuto}{}{\@@FieldDefault}}%
\processcommalist[#4]\docommando
\else
- \writestatus{\m!fields}{pass values too}%
+ \writestatus\m!fields{pass values too}%
\fi}
\def\definesubfield%
@@ -507,7 +521,7 @@
\def\docommando##1%
{\getfield{##1}%
\ifx\@@FieldType\empty
- \writestatus{\m!fields}{unknown field ##1}% to do
+ \writestatus\m!fields{unknown field ##1}% to do
\else
\doifsomething{#2}
{\edef\@@FieldGroup{#2}}%
@@ -519,7 +533,7 @@
\fi}%
\processcommalist[#1]\docommando
\else
- \writestatus{\m!fields}{pass fieldname, setupgroup, values and default}%
+ \writestatus\m!fields{pass fieldname, setupgroup, values and default}%
\fi}
\def\doclonefield[#1][#2][#3][#4]% parent children setupgroup values
@@ -527,7 +541,7 @@
\getfield{#1}%
\iftrialtypesetting\else
\ifx\@@FieldType\empty
- \writestatus{\m!fields}{unknown field #1}%
+ \writestatus\m!fields{unknown field #1}%
\else
\let\@@FieldMode=\fieldparentmode
%\def\docommando##1{\addtocommalist{##1}\@@FieldKids}%
@@ -552,7 +566,7 @@
\fi
\fi
\else
- \writestatus{\m!fields}{pass parent field and clones}%
+ \writestatus\m!fields{pass parent field and clones}%
\fi}
\def\clonefield%
@@ -586,7 +600,7 @@
\fi
\fi
\else
- \writestatus{\m!fields}{pass parent field and copies}%
+ \writestatus\m!fields{pass parent field and copies}%
\fi}
\def\copyfield%
@@ -822,7 +836,8 @@
{\presetlocalframed[\??fd]%
\localframed
[\??fd]
- [\c!n=12,\c!strut=\v!nee,\c!kleur=,\c!letter=,\c!optie=,
+ [\c!n=1024, % beware: weblink plug in truncates
+ \c!strut=\v!nee,\c!kleur=,\c!letter=,\c!optie=,
\c!klikin=,\c!klikuit=,\c!gebiedin=,\c!gebieduit=,
\c!focusin=,\c!focusuit=,
\c!natoets=,\c!formatteer=,\c!valideer=,\c!bereken=,
@@ -843,13 +858,13 @@
\newcounter\nofsystemfields
-\def\nextsystemfield%
+\def\nextsystemfield
{\doglobal\increment\nofsystemfields
\def\currentsystemfield{sys::\nofsystemfields}}
%D An example:
-\def\fillinfield%
+\def\fillinfield
{\dosingleempty\dofillinfield}
\def\dofillinfield[#1]#2%
@@ -865,12 +880,13 @@
\setbox0=\hbox{#2}%
\setbox2=\hbox{\therightanswer}%
\dimen0=\ifdim\wd0>\wd2 \wd0 \else \wd2 \fi
- \advance\dimen0 by .2em
+ \advance\dimen0 .2em
\definefield
[\currentsystemfield][line][systemfield]%
\setupfield
[systemfield]
- [\c!n=100,\c!plaats=\v!laag,\c!strut=\v!ja,\c!veldoffset=0pt,
+ [\c!n=1024, % beware: weblink plugin truncates
+ \c!plaats=\v!laag,\c!strut=\v!ja,\c!veldoffset=0pt,
\c!hoogte=1.2\openlineheight,\c!breedte=\dimen0,\c!offset=\v!overlay,
\c!letter=,\c!uitlijnen=\v!midden,\c!kader=\v!uit,
\c!kleur=red,\c!veldachtergrondkleur=white,\c!veldkaderkleur=blue,
@@ -889,7 +905,7 @@
{\bgroup
\setupfields[\v!reset]%
\useJSscripts[fld]%
- \setbox0=\hbox
+ \setbox0\hbox
{\mindermeldingen
\nextsystemfield
\setbox0=\hbox{#2}%
@@ -905,15 +921,15 @@
[\c!kader=\v!uit,
\c!gebieduit=JS(Hide_Field{\currentsystemfield:txt}),
\c!optie=\v!verborgen]%
- \hbox to \!!zeropoint
- {\dimen0=\wd2\advance\dimen0 by -\wd0
- \doifelse{#1}{\v!links}
+ \hbox to \zeropoint
+ {\dimen0\wd2\advance\dimen0 -\wd0
+ \doifelse{#1}\v!links
{\hskip-\dimen0}
- {\doif{#1}{\v!midden}
+ {\doif{#1}\v!midden
{\hskip-.5\dimen0}}%
- \lower\openlineheight\hbox to \!!zeropoint
+ \lower\openlineheight\hbox to \zeropoint
{\fitfield[\currentsystemfield:txt]}}%
- \dimen0=\ifdim\wd0=\!!zeropoint 3em\else\wd0\fi
+ \dimen0=\ifdim\wd0=\zeropoint 3em\else\wd0\fi
\definesymbol
[\currentsystemfield:but]
[{\framed[\c!hoogte=2ex,\c!breedte=\dimen0,\c!kader=\v!uit]{}}]%
@@ -926,7 +942,7 @@
\c!optie=,
\c!gebiedin=JS(Vide_Field{\currentsystemfield:txt}),
\c!gebieduit=JS(Hide_Field{\currentsystemfield:txt})]%
- \lower2ex\hbox to \!!zeropoint
+ \lower2ex\hbox to \zeropoint
{\fitfield[\currentsystemfield:but]}%
#2}%
\ht0=\ht\strutbox\dp0=\dp\strutbox\box0
@@ -976,17 +992,17 @@
\getvalue{fieldstack:#1}\setgvalue{fieldstack:#1}{[#1]}%
\fi}
-\def\fieldstack%
+\def\fieldstack
{\dotripleempty\dofieldstack}
%D When submitting a form, we need to tell the driver module
%D that we want \FDF\ or \HTML.
-\def\setupforms%
+\def\setupforms
{\dodoubleargument\getparameters[\??fr]}
\def\checksubmitform#1%
- {\setsubmitoutputformat{\@@frmethode}}
+ {\setsubmitoutputformat\@@frmethode}
\setexecutecommandcheck {submitform} \checksubmitform
diff --git a/tex/context/base/core-fnt.tex b/tex/context/base/core-fnt.tex
index 1235439b0..9bd68420a 100644
--- a/tex/context/base/core-fnt.tex
+++ b/tex/context/base/core-fnt.tex
@@ -98,8 +98,8 @@
\def\cap@@visualize{\tx}}
\def\userealcaps%
- {\let\cap@@uppercase=\relax
- %\let\cap@@lowercase=\relax % Definitely not!
+ {\let\cap@@uppercase\relax
+ %\let\cap@@lowercase\relax % Definitely not!
\def\cap@@visualize{\sc}}
\usepseudocaps
@@ -454,7 +454,7 @@
\def\underbarmethodc#1#2#3% PERIOD
{\hbox to #1
{\dimen4=#3
- \advance\dimen4 by .2ex
+ \advance\dimen4 .2ex
\hskip-.25em
\xleaders
\hbox{\hskip.25em\lower\dimen4\hbox{.}}
@@ -462,11 +462,11 @@
\def\dododounderbar#1#2#3%
{\startmathmode
- \setbox0=\hbox{#3}%
- \setbox2=\hbox{\color[\@@onlijnkleur]{\getvalue{underbarmethod\@@onvariant}{\wd0}{#1}{#2}}}%
- \wd0=\zeropoint
- \ht2=\ht0
- \dp2=\dp0
+ \setbox0\hbox{#3}%
+ \setbox2\hbox{\color[\@@onlijnkleur]{\getvalue{underbarmethod\@@onvariant}{\wd0}{#1}{#2}}}%
+ \wd0\zeropoint
+ \ht2\ht0
+ \dp2\dp0
\box0\box2
\stopmathmode}
@@ -475,17 +475,17 @@
\dimen0=\@@ononderoffset
\dimen0=\underbarlevel\dimen0
\ifdone \else
- %\advance\dimen0 by -1pt
- \advance\dimen0 by -\ht\strutbox
+ %\advance\dimen0 -1pt
+ \advance\dimen0 -\ht\strutbox
\fi
\dimen2=\dimen0
- \advance\dimen2 by \@@onlijndikte
+ \advance\dimen2 \@@onlijndikte
\dododounderbar{-\dimen0}{\dimen2}{#1}%
\egroup}
\def\betweenunderbarwords%
{\bgroup
- \setbox0=\hbox
+ \setbox0\hbox
{\dodounderbar{\hskip\fontdimen2\font}}%
\nobreak
\hskip\zeropoint\!!minus\fontdimen4\font
@@ -528,7 +528,7 @@
{\bgroup
\dimen0=\@@onbovenoffset
\dimen2=\dimen0
- \advance\dimen2 by \@@onlijndikte
+ \advance\dimen2 \@@onlijndikte
\dododounderbar{\dimen2}{-\dimen0}{#1}%
\egroup}
@@ -675,12 +675,13 @@
\setupinitial
[\c!status=\v!stop,
+ \c!plaats=\v!tekst,
\c!n=3,
\s!font=initial]
\def\placeinitial%
- {\doif{\@@dcstatus}{\v!start}
- {\ifnum\@@dcn>0 \AutoDroppedCaps \fi}}
+ {\doifelse\@@dcplaats\v!marge{\chardef\DropMode1}{\chardef\DropMode0}%
+ \doif\@@dcstatus\v!start{\ifnum\@@dcn>0 \AutoDroppedCaps\fi}}
\let\checkinitial\CheckDroppedCaps
diff --git a/tex/context/base/core-gen.tex b/tex/context/base/core-gen.tex
index f9866284a..679dbcddc 100644
--- a/tex/context/base/core-gen.tex
+++ b/tex/context/base/core-gen.tex
@@ -225,16 +225,13 @@
%D met 1~em vermeerderd.
\def\assignwidth#1#2#3#4%
- {\doifelse{#2}{}
- {\setbox0=\hbox{#3}%
- #1=\wd0}
+ {\doifelsenothing{#2}
+ {\setbox0\hbox{#3}%
+ #1\wd0}
{\doifinsetelse{#2}{\v!passend,\v!ruim}
{\setbox0=\hbox{#3}%
- #1=\wd0
- \doif{#2}{\v!ruim}
- {\advance#1 by #4}}%
+ #1\wd0
+ \doif{#2}\v!ruim{\advance#1 #4}}%
{#1=#2}}}%
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/core-grd.tex b/tex/context/base/core-grd.tex
index d15ad7bce..d659289b9 100644
--- a/tex/context/base/core-grd.tex
+++ b/tex/context/base/core-grd.tex
@@ -75,7 +75,7 @@
three=blue,
four=gray]
-\def\setbaselinecorrections%
+\def\setbaselinecorrections
{\setbox0\hbox{\setstrut\strut}%
\setbox2\hbox{(}%
\dimen0\ht0\advance\dimen0 -\ht2
@@ -92,27 +92,28 @@
\def\donegtopbaselinecorrection{\kern\thenegtopbaselinecorrection}
\def\donegbotbaselinecorrection{\kern\thenegbotbaselinecorrection}
-\def\showbaselinecorrection%
- {\def\dobaselinecorrection% visualization is not watertight!
+\def\showbaselinecorrection
+ {\def\dobaselinecorrection % visualization is not watertight!
{\bgroup
- \kern-\prevdepth
- \setbox0=\null
- \wd0=\hsize\dp0=\dp\strutbox
+\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi
+ \setbox0\null
+ \wd0\hsize
+ \dp0\dp\strutbox
\nointerlineskip
\ruledvbox{\box0}%
\egroup
- \prevdepth=\dp\strutbox}%
- \def\dotopbaselinecorrection%
+ \prevdepth\dp\strutbox}%
+ \def\dotopbaselinecorrection
{\hrule\!!height\thetopbaselinecorrection}%
- \def\dobotbaselinecorrection%
+ \def\dobotbaselinecorrection
{\hrule\!!height\thebotbaselinecorrection}}
-\def\dobaselinecorrection%
- {\kern-\prevdepth
+\def\dobaselinecorrection
+ {\ifdim\prevdepth>\zeropoint\kern-\prevdepth\fi
\kern\dp\strutbox
- \prevdepth=\dp\strutbox}
+ \prevdepth\dp\strutbox}
-\def\baselinecorrection%
+\def\baselinecorrection
{\endgraf
\ifvmode
\ifdim\prevdepth<\maxdimen
@@ -128,22 +129,22 @@
% m-steps.tex, where we apply a \localhsize to the \vbox, in
% order to follow narrower and side floats !
-\def\startbaselinecorrection%
+\def\startbaselinecorrection
{\baselinecorrection
\ifvmode
\bgroup
- \setbox\scratchbox=\vbox\bgroup
+ \setbox\scratchbox\vbox\bgroup
\ignorespaces
- \let\stopbaselinecorrection=\dostopbaselinecorrection
+ \let\stopbaselinecorrection\dostopbaselinecorrection
\else
- \let\stopbaselinecorrection=\relax
+ \let\stopbaselinecorrection\relax
\fi}
%D We do a bit more checking than needed. The pageborder check
%D is not needed, but I want to look the visualization as good
%D as possible too.
-\def\dostopbaselinecorrection% I have to check columns yet.
+\def\dostopbaselinecorrection % I have to check columns yet.
{\endgraf
\egroup
\topbaselinecorrection
@@ -153,17 +154,16 @@
\let\stopbaselinecorrection=\relax
-\def\offbaselinecorrection% Can be used inside correction.
- {\def\startbaselinecorrection%
- {\bgroup
- \let\stopbaselinecorrection=\egroup}}
+\def\offbaselinecorrection % Can be used inside correction.
+ {\def\startbaselinecorrection
+ {\bgroup\let\stopbaselinecorrection\egroup}}
%D \macros
%D {topbaselinecorrection,botbaselinecorrection}
%D
%D The actual top and bottom corrections are implemented as:
-\def\topbaselinecorrection%
+\def\topbaselinecorrection
{\ifvmode
\bgroup
\setbaselinecorrections
@@ -207,7 +207,7 @@
\egroup
\fi}
-\def\botbaselinecorrection%
+\def\botbaselinecorrection
{\ifvmode
\bgroup
\setbaselinecorrections
@@ -217,41 +217,6 @@
\egroup
\fi}
-%D An old one, still to be translated:
-%D
-%D \macros
-%D {getnoflines, getrawnoflines}
-%D
-%D Het commando \type{\getnoflines} converteert een hoogte
-%D (dimensie) in een aantal regels en kent dit toe aan
-%D \type{\noflines}.
-%D
-%D \starttypen
-%D \getnoflines{dimensie}
-%D \stoptypen
-%D
-%D Er wordt gedeeld door \type{\openlineheight} en een hoogte
-%D van~0pt komt overeen met 0~regels. The raw alternative
-%D does not round.
-
-\newcount\noflines
-\newdimen\noflinesheight
-
-\def\dogetnoflines#1#2%
- {\noflinesheight=#2\relax
- \ifdim\noflinesheight=\zeropoint
- \noflines=0
- \else
- \divide\noflinesheight \openlineheight
- \noflines=\noflinesheight
- #1\ifdim\noflines\openlineheight=#2\relax \else
- \advance\noflines 1
- \fi\fi
- \fi}
-
-\def\getnoflines {\dogetnoflines\iftrue } % compensated
-\def\getrawnoflines{\dogetnoflines\iffalse} % no compensation
-
%D Still very experimental and therefore undocumented.
\newif\ifgridsnapping % UNDER DEVELOPMENT, USE WITH CARE
@@ -261,14 +226,14 @@
\def\positiveextrasnap {\gdef\extrasnapsign{+}}
\def\negativeextrasnap {\gdef\extrasnapsign{-}}
-\def\extrasnapreset {\global\chardef\@@extrasnap=0
+\def\extrasnapreset {\global\chardef\@@extrasnap0
\positiveextrasnap}
-\def\extrasnapbefore {\global\chardef\@@extrasnap=1 }
-\def\extrasnaparound {\global\chardef\@@extrasnap=2 }
-\def\extrasnapafter {\global\chardef\@@extrasnap=3 }
+\def\extrasnapbefore {\global\chardef\@@extrasnap1 }
+\def\extrasnaparound {\global\chardef\@@extrasnap2 }
+\def\extrasnapafter {\global\chardef\@@extrasnap3 }
-\def\enablepresnapcorrection {\global\chardef\@@presnap=0 }
-\def\disablepresnapcorrection {\global\chardef\@@presnap=1 }
+\def\enablepresnapcorrection {\global\chardef\@@presnap\zerocount}
+\def\disablepresnapcorrection {\global\chardef\@@presnap\plusone}
\extrasnapreset \enablepresnapcorrection
@@ -284,7 +249,7 @@
\let\presnapskip \!!zeropoint \def\presnap {-}
\let\postsnapskip\!!zeropoint \let\postsnap\presnap
-\def\tracedsnapping%
+\def\tracedsnapping
{\iftracegridsnapping
\llap
{\infofont
@@ -328,211 +293,24 @@
% \fi
% \fi}
-\def\forcedpresnapcorrection
+\def\forcedpresnapcorrection % test this on 'details'
{\ifforcepresnap
\ifvmode \else \par \fi % new
% we don't want top of page space when 'top' option
%\vbox{\strut}\nobreak\vskip-\openlineheight
- \vbox{\strut}\vskip-\openlineheight
-%\ifdim\pagetotal>\topskip \else
-%% eigenlijk signal
-%\writestatus{grid}{removing dummy at top of page}%
-%\bgroup
-%\output{\setbox\scratchbox\box255}%
-%\penalty\outputpenalty
-%\egroup
-%\fi
+ %\vbox{\strut}\vskip-\openlineheight
+ % nobreak really needed
+ \allowbreak\vbox{\strut}\nobreak\vskip-\openlineheight
+ %\ifdim\pagetotal>\topskip \else
+ % eigenlijk signal
+ %\writestatus{grid}{removing dummy at top of page}%
+ %\bgroup
+ %\output{\setbox\scratchbox\box255}%
+ %\penalty\outputpenalty
+ %\egroup
+ %\fi
\fi}
-% \def\dodosnaptogrid
-% {\dowithnextbox
-% {\bgroup
-% \ifdim\nextboxht<\teksthoogte % handle special case (like page fig)
-% \ifcase\@@alignsnapbox\relax
-% \ifcase\@@alignsnap\else % 1=top 2=high 3=middle 4=low
-% \ifshowgridboxes
-% \setbox\nextbox\hbox{\color[grid:two]{\ruledhbox{\black\box\nextbox}}}%
-% \fi
-% \getnoflines{\ht\nextbox}%
-% \setbox\nextbox\vbox to \noflines\lineheight
-% {\ifnum\@@alignsnap=1 \kern\lineheight\kern-\topskip\fi
-% \ifnum\@@alignsnap>2 \vfill\fi
-% \box\nextbox
-% \ifnum\@@alignsnap<4 \vfill\fi}%
-% \fi
-% \ifshowgridboxes
-% \setbox\nextbox\hbox{\color[grid:three]{\ruledhbox{\black\box\nextbox}}}%
-% \fi
-% \forgetall
-% \par
-% \ifvbox\nextbox
-% \setbox\nextbox\hbox{\box\nextbox}% don't ask
-% \fi
-% \scratchskip\lastskip
-% \edef\presnapskip{\the\lastskip}%
-% % mixing single/double columns sometimes goes wrong,
-% % check 'som' document
-% \ifbinnenkolommen
-% \forcepresnaptrue
-% \fi
-% \forcedpresnapcorrection
-% \ifdim\ht\nextbox>\ht\strutbox
-% \scratchdimen\ht\nextbox
-% \ifcase\@@presnap\relax
-% \ifdim\scratchskip>\zeropoint\relax
-% \scratchcounter\scratchskip
-% \advance\scratchcounter -\openlineheight
-% \ifnum\scratchcounter<0
-% \scratchcounter-\scratchcounter
-% \fi
-% \ifnum\scratchcounter<10 % \lastkip is about \openlineheight
-% \advance\scratchdimen -\openstrutdepth
-% \edef\presnapskip{*\presnapskip}%
-% \else\ifdim\scratchskip>\openlineheight
-% %<\openlineheight \else
-% \advance\scratchdimen -\openstrutdepth
-% \edef\presnapskip{*\presnapskip}%
-% \fi\fi
-% \fi
-% \fi
-% \getnoflines\scratchdimen
-% \advance\noflines -1
-% \ifnum\noflines>0
-% \scratchdimen\noflines\lineheight
-% \else
-% \scratchdimen\zeropoint
-% \fi
-% \else
-% \scratchdimen\zeropoint
-% \fi
-% \ifnum\@@extrasnap=1 \advance\scratchdimen \extrasnapsign\lineheight \fi
-% \ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
-% \edef\presnap{\the\scratchdimen}%
-% \ifstrutsnapping
-% \ifdim\scratchdimen=\zeropoint\else\vskip\scratchdimen\fi
-% \fi
-% \ifdim\dp\nextbox>\dp\strutbox
-% \getnoflines{\dp\nextbox}%
-% \advance\noflines -1
-% \ifnum\noflines>0
-% \scratchdimen\noflines\lineheight
-% \else
-% \scratchdimen\zeropoint
-% \fi
-% \else
-% \scratchdimen\zeropoint
-% \fi
-% \ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
-% \ifnum\@@extrasnap=3 \advance\scratchdimen \extrasnapsign\lineheight \fi
-% \edef\postsnap{\the\scratchdimen}%
-% \ifstrutsnapping
-% \ht\nextbox\ht\strutbox
-% \dp\nextbox\dp\strutbox
-% \else
-% \scratchdimen\presnap
-% \advance\scratchdimen \ht\strutbox
-% \ht\nextbox\scratchdimen
-% \scratchdimen\postsnap
-% \advance\scratchdimen \dp\strutbox
-% \dp\nextbox\scratchdimen
-% \fi
-% \hbox{\tracedsnapping\box\nextbox}%
-% \ifstrutsnapping
-% \ifdim\scratchdimen=\zeropoint\else\vskip\scratchdimen\fi
-% \fi
-% \else
-% \scratchdimen\ht\nextbox\relax
-% \ifcase\@@alignsnapbox
-% % can't happen here
-% \or
-% \getrawnoflines\scratchdimen
-% \else
-% \getnoflines \scratchdimen
-% \fi
-% \scratchdimen\noflines\lineheight\relax
-% \advance\scratchdimen-\strutdepth
-% \ifnum\pagetotal>\zeropoint
-% \else % disable this as option
-% \advance\scratchdimen-\strutheight
-% \advance\scratchdimen+\topskip
-% \fi
-% \dimen0=\scratchdimen
-% \dimen2=\strutdepth
-% \ifshowgridboxes
-% \setbox\nextbox\hbox{\color[grid:two]{\ruledhbox{\black\box\nextbox}}}%
-% \fi
-% \dp\nextbox\dp\strutbox
-% \dimen4=\ht\nextbox
-% \dimen6=\dp\nextbox
-% \setbox\nextbox\vbox to \scratchdimen
-% {\forgetall
-% \ifnum\@@alignsnap>2 \vfill\fi % 3 4
-% \iftracegridsnapping
-% \scratchdimen\@@alignsnapamount\relax
-% \setbox\scratchbox\hbox
-% {\ifdim\scratchdimen<\zeropoint
-% \tracedgridamount\zeropoint{-\scratchdimen}%
-% \else
-% \tracedgridamount\scratchdimen\zeropoint
-% \fi}%
-% \smashbox\scratchbox
-% \setbox\nextbox\hbox{\box\scratchbox\box\nextbox}%
-% \fi
-% \setbox\nextbox\hbox
-% {\scratchdimen\@@alignsnapamount\relax
-% \ifcase\@@alignsnapdepth\or
-% % don't change this ever !
-% \ifdim\dimen0<\lineheight
-% % otherwise it is ok, but ending up inside
-% % the next paragraph is seldom what we want,
-% % so we move one line up
-% \advance\scratchdimen-\lineheight
-% \advance\scratchdimen\strutheight
-% \else
-% % otherwise we can move down to the
-% % baseline
-% \advance\scratchdimen\dimen6
-% \fi
-% \fi
-% \lower\scratchdimen\box\nextbox}%
-% \ht\nextbox\dimen4
-% \dp\nextbox\dimen6
-% \box\nextbox
-% \nointerlineskip % \offinterlineskip
-% \ifnum\@@alignsnap<4 \vfill\fi % 2 3
-% \kern\zeropoint}%
-% \ifshowgridboxes
-% \setbox\nextbox\vbox{\color[grid:three]{\ruledhbox{\black\box\nextbox}}}%
-% \fi
-% \let\presnapskip\@@alignsnapamount
-% \ifnum\@@alignsnap>2 \def\presnap {+}\fi
-% \ifnum\@@alignsnap<4 \def\postsnap{+}\fi
-% \setbox\nextbox\hbox{\tracedsnapping\box\nextbox}%
-% \par
-% \ht\nextbox\dimen0
-% \dp\nextbox\dimen2
-% \forcedpresnapcorrection
-% \nointerlineskip
-% \box\nextbox
-% \fi
-% \else
-% \setbox\nextbox\vbox to \teksthoogte
-% {\ifdim\nextboxdp=\zeropoint
-% \hbox{\lower\strutdepth\box\nextbox}
-% \else % this branch is yet untested
-% \vss
-% \hbox{\lower\nextboxdp\box\nextbox}
-% \vskip-\strutdepth
-% \fi}%
-% \nextboxdp\strutdepth
-% \box\nextbox
-% \fi
-% \extrasnapreset
-% \enablepresnapcorrection
-% \global\chardef\@@alignsnap0
-% \global\chardef\@@alignsnapbox0
-% \egroup}}
-
\newif\ifboxedsnapping \boxedsnappingtrue
\def\dodosnaptogrid
@@ -600,16 +378,16 @@
\ifnum\@@extrasnap=2 \advance\scratchdimen \extrasnapsign.5\lineheight \fi
\edef\presnap{\the\scratchdimen}%
\ifstrutsnapping
-\ifboxedsnapping
- \getrawnoflines\scratchdimen
- \advance\scratchdimen-\noflines\lineheight
- \vskip\scratchdimen % disappears at top of page
- \dorecurse\noflines{\vbox{\strut}\nobreak}%
-\else \ifdim\scratchdimen=\zeropoint
- % nothing to skip
-\else % disappears at top of page
- \vskip\scratchdimen
-\fi \fi
+ \ifboxedsnapping
+ \getrawnoflines\scratchdimen
+ \advance\scratchdimen-\noflines\lineheight
+ \vskip\scratchdimen % disappears at top of page
+ \dorecurse\noflines{\vbox{\strut}\nobreak}%
+ \else \ifdim\scratchdimen=\zeropoint
+ % nothing to skip
+ \else % disappears at top of page
+ \vskip\scratchdimen
+ \fi \fi
\fi
\ifdim\dp\nextbox>\dp\strutbox
\getnoflines{\dp\nextbox}%
@@ -704,7 +482,8 @@
\ifshowgridboxes
\setbox\nextbox\vbox{\color[grid:three]{\ruledhbox{\black\box\nextbox}}}%
\fi
- \let\presnapskip\@@alignsnapamount
+ \scratchdimen\@@alignsnapamount
+ \edef\presnapskip{\the\scratchdimen}%
\ifnum\@@alignsnap>2 \def\presnap {+}\fi
\ifnum\@@alignsnap<4 \def\postsnap{+}\fi
\setbox\nextbox\hbox{\tracedsnapping\box\nextbox}%
@@ -729,21 +508,19 @@
\fi
\extrasnapreset
\enablepresnapcorrection
- \global\chardef\@@alignsnap0
- \global\chardef\@@alignsnapbox0
+ \global\chardef\@@alignsnap\zerocount
+ \global\chardef\@@alignsnapbox\zerocount
\egroup}}
\def\tracedgridamount#1#2%
{\color[grid:four]{\vrule\!!width\wd\nextbox\!!height#1\!!depth#2}}
-\def\snaptomathgrid% probably not working ok, also kind of obsolete
+\def\snaptomathgrid % probably not working ok, also kind of obsolete
{\ifgridsnapping
\dowithnextbox
- {\blanko[\v!regel]
- \snaptogrid\vbox{\box\nextbox}
- \blanko[\v!regel]}
+ {\blanko[\v!regel]\snaptogrid\vbox{\box\nextbox}\blanko[\v!regel]}
\vbox\bgroup
- \let\setdisplayskips=\relax
+ \let\setdisplayskips\relax
\abovedisplayskip\zeropoint
\abovedisplayshortskip\zeropoint
\belowdisplayskip\zeropoint
@@ -751,14 +528,14 @@
\@EA\let\@EA\next
\fi}
-\def\topsnaptogrid%
+\def\topsnaptogrid
{\ifgridsnapping
\dowithnextbox
- {\scratchdimen=\ht\nextbox
- \advance\scratchdimen by -\ht\strutbox
- \advance\scratchdimen by \topskip
- \ht\nextbox=\scratchdimen
- \dp\nextbox=\zeropoint
+ {\scratchdimen\ht\nextbox
+ \advance\scratchdimen -\ht\strutbox
+ \advance\scratchdimen \topskip
+ \ht\nextbox\scratchdimen
+ \dp\nextbox\zeropoint
\box\nextbox
\kern\lineheight
\kern-\topskip
@@ -766,61 +543,68 @@
\hbox
\fi}
-\def\centertogrid%
- {\ifgridsnapping
- \dowithnextbox
- {\bgroup
- \par
- \scratchdimen=\ht\nextbox
- \advance\scratchdimen by \dp\nextbox
- \getnoflines\scratchdimen
- \setbox\nextbox=\vbox to \noflines\lineheight
- {\forgetall
- \vskip\zeropoint plus \ht\nextbox
- \copy\nextbox
- \kern.5\dp\strutbox % VOORLOPIGE WAARDE
- \vskip\zeropoint plus \dp\nextbox}
- \noindent\snaptogrid\vbox{\box\nextbox}%
- \egroup}
- \hbox
- \fi}
+% The old one (to be kept):
+%
+% \def\centertogrid
+% {\ifgridsnapping
+% \dowithnextbox
+% {\bgroup
+% \par
+% \scratchdimen\ht\nextbox
+% \advance\scratchdimen \dp\nextbox
+% \getnoflines\scratchdimen
+% \setbox\nextbox\vbox to \noflines\lineheight
+% {\forgetall
+% \vskip\zeropoint \!!plus \ht\nextbox
+% \copy\nextbox
+% \kern.5\dp\strutbox % VOORLOPIGE WAARDE
+% \vskip\zeropoint \!!plus \dp\nextbox}
+% \noindent\snaptogrid\vbox{\box\nextbox}%
+% \egroup}
+% \hbox
+% \fi}
+%
+% The new implementation, using one of the placement
+% options, will be configurable some day ...
+
+\def\centertogrid % usage: see ie pascal / stepcharts
+ {\snaptogrid[\v!midden,.5\dp\strutbox]\vbox}
\ifx\startbaselinecorrection\undefined \wait \fi % change order
\let\normalstartbaselinecorrection=\startbaselinecorrection
-\def\startbaselinecorrection%
+\def\startbaselinecorrection
{\ifgridsnapping
\centertogrid\bgroup
- \let\stopbaselinecorrection=\egroup
+ \let\stopbaselinecorrection\egroup
\else
\normalstartbaselinecorrection
\fi}
\def\setgridbox#1#2#3%
- {\setbox#1=\ruledvbox to #3 % given size
+ {\setbox#1\ruledvbox to #3 % given size
{\forgetall
\resetteststrut
\offinterlineskip
- \hsize=#2
+ \hsize#2%
\baselinerulefalse
\ruledvbox % calculated size
-% {\getnoflines{#3}%
- {\getrawnoflines{#3}%
+ {\getrawnoflines{#3}% \getnoflines{#3}%
\vskip\topskip
\vskip-\ht\strutbox
- \scratchdimen=#2\advance\scratchdimen by \lineheight
- \dorecurse
- {\noflines}
+ \scratchdimen#2\advance\scratchdimen \lineheight
+ \dorecurse\noflines
{\strut
\hskip-.5\lineheight
\rlap
- {\hskip\scratchdimen\hskip2pt\infofont
+ {\hskip\scratchdimen
+ \hskip2pt\infofont
\hbox to 1em{\hss\recurselevel}}%
\vrule
\!!height .5\testrulewidth
- \!!depth .5\testrulewidth
- \!!width \scratchdimen
+ \!!depth .5\testrulewidth
+ \!!width \scratchdimen
\par}}
\vfill}}
@@ -839,14 +623,15 @@
{\ifgridsnapping\doifsomething{#1}{\dodoverplaatsopgrid[#1]}\fi}
\def\dodoverplaatsopgrid[#1]% some day : speed up
- {\global\chardef\@@alignsnap0
- \global\chardef\@@alignsnapbox0
- \global\chardef\@@alignsnapdepth0
+ {\global\chardef\@@alignsnap\zerocount
+ \global\chardef\@@alignsnapbox\zerocount
+ \global\chardef\@@alignsnapdepth\zerocount
\global\let\@@alignsnapamount\!!zeropoint
\donefalse
\expanded{\processallactionsinset[#1]}
[\v!standaard=>,
\v!normaal=>, % to be sure
+ \v!ja=>, % to be sure
\v!boven=>\gridwarning+\positiveextrasnap\extrasnapbefore,
\v!onder=>\gridwarning+\positiveextrasnap\extrasnapafter,
\v!beide=>\positiveextrasnap\extrasnaparound,
@@ -869,13 +654,13 @@
\s!default=>,
\s!unknown=>\@@unknowngriddisplacement]}
-\def\verplaatsopgrid%
+\def\verplaatsopgrid
{\dosingleempty\doverplaatsopgrid}
\def\doplaatsopgrid[#1]%
{\doverplaatsopgrid[#1]\snaptogrid\vbox}
-\def\plaatsopgrid%
+\def\plaatsopgrid
{\dosingleempty\doplaatsopgrid}
%D Snapping is rather robust as long as we use whole lines.
@@ -903,7 +688,7 @@
\newbox\fuzzysnapbox
\newbox\fuzzysnapsplit
-%\def\dosyncfuzzyvskip%
+%\def\dosyncfuzzyvskip
% {\ifvmode\ifdim\lastskip<\lineheight\ifdim\lastskip>\zeropoint
% \bgroup
% \endgraf
@@ -927,7 +712,7 @@
% \global\fuzzysnapdonetrue
% \fi}
-\def\dosyncfuzzyvskip%
+\def\dosyncfuzzyvskip
{\ifvmode\ifdim\lastskip<\lineheight\ifdim\lastskip>\zeropoint
\bgroup
\endgraf\forgetall\vbox{\strut}\nobreak\vskip\lineheight
@@ -949,7 +734,7 @@
\def\setfuzzymark#1#2#3% #1/#2 => error recovery
{\ifgridsnapping
\global\fuzzysnappingtrue
- \global\advance\fuzzymarker by \ifodd\fuzzymarker#1\else#2\fi
+ \global\advance\fuzzymarker \ifodd\fuzzymarker#1\else#2\fi
\nobreak
\ifshowfuzzyskips
\hbox{\color[grid:three]
@@ -959,17 +744,14 @@
\fi
%[\the\fuzzymarker]
%\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
- \expandafter\setmark\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
+ \expandafter\rawsetmark\expandafter\fuzzymark\expandafter{\the\fuzzymarker}%
\nobreak
\fi}
-\def\beginfuzzysnapping% odd
- {\setfuzzymark21\v!start}
+\def\beginfuzzysnapping{\setfuzzymark21\v!start} % odd
+\def\endfuzzysnapping {\setfuzzymark12\v!stop } % even
-\def\endfuzzysnapping% even
- {\setfuzzymark12\v!stop}
-
-\def\removelastfuzzyvskip%
+\def\removelastfuzzyvskip
{\ifgridsnapping
\iffuzzysnapping
\ifdim\lastskip<\openlineheight
@@ -986,21 +768,21 @@
\def\docheckfuzzysnap#1%
{\bgroup
\mindermeldingen
- \setbox\fuzzysnapbox=\copy#1\relax
- \setbox\fuzzysnapsplit=\vsplit\fuzzysnapbox to 1\lineheight
- \let\topfuzzymark=\empty % indeed here ... no real mark
+ \setbox\fuzzysnapbox\copy#1\relax
+ \setbox\fuzzysnapsplit\vsplit\fuzzysnapbox to 1\lineheight
+ \let\topfuzzymark\empty % indeed here ... no real mark
\getsplitmarks\fuzzymark
% \ifcase0\topfuzzymark
- \ifcase0\getsplittopmark\fuzzymark
- \global\chardef\fuzzysnappedleft=0
+ \ifcase0\rawgetsplittopmark\fuzzymark
+ \global\chardef\fuzzysnappedleft\zerocount
\global\fuzzysnappedfalse
% \else\ifodd\topfuzzymark
- \else\ifodd\getsplittopmark\fuzzymark
- \global\chardef\fuzzysnappedleft=1
- \global\fuzzysnappedtrue
+ \else\ifodd\rawgetsplittopmark\fuzzymark
+ \global\chardef\fuzzysnappedleft\plusone
+ \global\fuzzysnappedtrue
\else
\global\chardef\fuzzysnappedleft=2
- \global\fuzzysnappedtrue
+ \global\fuzzysnappedtrue
\fi\fi
\iffuzzysnapped \else
\doloop
@@ -1011,13 +793,13 @@
%\let\topfuzzymark=\empty % ... but not here
\getsplitmarks\fuzzymark
% \ifcase0\topfuzzymark
- \ifcase0\getsplittopmark\fuzzymark
+ \ifcase0\rawgetsplittopmark\fuzzymark
% continue
% \else\ifodd\topfuzzymark
- \else\ifodd\getsplittopmark\fuzzymark
+ \else\ifodd\rawgetsplittopmark\fuzzymark
\exitloop
\else
- \global\chardef\fuzzysnappedleft=1
+ \global\chardef\fuzzysnappedleft\plusone
\global\fuzzysnappedtrue
\exitloop
\fi\fi
@@ -1026,13 +808,13 @@
\egroup}
\def\getfuzzysnapcorrection#1%
- {\global\let\presnapcorrection =\relax
- \global\let\postsnapcorrection=\relax
+ {\global\let\presnapcorrection \relax
+ \global\let\postsnapcorrection\relax
\ifgridsnapping\iffuzzysnapping
\docheckfuzzysnap{#1}%
\iffuzzysnapped
\iftracegridsnapping
- \gdef\presnapcorrection%
+ \gdef\presnapcorrection
{\color[grid:four]{\hrule\!!height.5\openlineheight\!!width\hsize}}%
\else
\gdef\presnapcorrection{\kern.5\openlineheight}%
@@ -1047,7 +829,7 @@
#1#2%
\postsnapcorrection}
-\def\adaptfuzzypagegoal%
+\def\adaptfuzzypagegoal
{\ifgridsnapping\iffuzzysnapping\ifcase\fuzzysnappedleft\or % see dopagecontents
\scratchdimen\pagegoal
\advance\scratchdimen -.5\openlineheight
@@ -1056,4 +838,8 @@
\global\chardef\fuzzysnappedleft0
\fi\fi\fi}
+%D New:
+
+\let\checkgridsnapping\relax
+
\protect \endinput
diff --git a/tex/context/base/core-int.tex b/tex/context/base/core-int.tex
index 4a9d08375..4f87cf5d0 100644
--- a/tex/context/base/core-int.tex
+++ b/tex/context/base/core-int.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.
%D Still to be done properly.
@@ -137,12 +137,12 @@
\def\stelkoppelingenin%
{\dodoubleargument\getparameters[\??lk]}
-\def\definieerkoppeling[#1]% % local loading !
+\def\definieerkoppeling[#1]% % local loading !
{\doifundefined{\s!link:#1:\s!list}
{\expanded{\definetwopasslist{\s!link:#1}}%
\expanded{\doloadtwopassdata{\s!link:#1}}%
\getfirsttwopassdata{\s!link:#1}%
- \setxvalue{\s!link:#1:f}{\twopassdata}%
+ \setxvalue{\s!link:#1:f}{\twopassdata}%
\getlasttwopassdata{\s!link:#1}%
\setxvalue{\s!link:#1:l}{\twopassdata}%
\setxvalue{\s!link:#1:s}{\noftwopassitems}%
@@ -159,7 +159,7 @@
\edef\firstlink{0\getvalue{\s!link:#1:f}}%
\edef\lastlink{0\getvalue{\s!link:#1:l}}%
\edef\currentlink{0\getvalue{\s!link:#1:n}}%
- \edef\prevlink{0\getvalue{\s!link:#1:c}}%
+ \edef\prevlink{0\getvalue{\s!link:#1:c}}%
\iftwopassdatafound
\edef\nextlink{0\twopassdata}%
\setxvalue{\s!link:#1:n}{\nextlink}%
@@ -199,17 +199,17 @@
\fi
\egroup}
-\def\definieerkoppeling[#1]% % local loading !
+\def\definieerkoppeling[#1]% % local loading !
{\doifundefined{\s!link:#1:\s!list}
{\expanded{\definetwopasslist{\s!link:#1}}% \expanded{\doloadtwopassdata{\s!link:#1}}%
\getfirsttwopassdata{\s!link:#1}%
- \let\firstlink=\twopassdata
+ \let\firstlink\twopassdata
\getlasttwopassdata{\s!link:#1}%
- \let\lastlink=\twopassdata
- \let\noflinks=\noftwopassitems
+ \let\lastlink\twopassdata
+ \let\noflinks\noftwopassitems
\gettwopassdata{\s!link:#1}%
- \let\currentlink=\twopassdata
- \let\nextlink=\twopassdata
+ \let\currentlink\twopassdata
+ \let\nextlink\twopassdata
\setxvalue{\s!link:#1:}%
{\firstlink:\lastlink:\noflinks:\currentlink:\nextlink}}}
@@ -261,7 +261,7 @@
\let\setupinteractionscreens\empty
-\def\berekeninteractiescherm%
+\def\berekeninteractiescherm
{\doifelse\@@scbreedte\v!passend
{\!!widtha\linkerrandbreedte
\advance\!!widtha \linkerrandafstand
@@ -302,9 +302,9 @@
% may be set! ConTeXt is the producer but we no longer
% mention the pragma site, since we don't want to be bothered
% with remarks about third party documents and/or associated
-% with documents produced outside our control.
+% with documents produced outside our control.
-\def\doprepareidentity
+\def\doprepareidentity
{\let\!!stringa\@@iatrefwoord
\let\@@iatrefwoord\empty
\def\doprepareidentity##1{\edef\@@iatrefwoord
@@ -312,45 +312,28 @@
\@EA\processcommacommand\@EA[\!!stringa]\doprepareidentity
\global\let\doprepareidentity\relax}
-\def\initializeidentity
- {\iflocation
+\def\doinitializeidentity#1%
+ {%\iflocation
\doprepareidentity
- \expanded{\dosetupidentity
- {\@@iatitel}%
- {\@@iasubtitel}%
- {\@@iaauteur}%
- {ConTeXt/user/\jobname.tex}%
- {\@@iadatum}%
- {\@@iatrefwoord}}%
- \global\let\initializeidentity\relax
- \fi}
-
-\appendtoks \initializeidentity \to \everyshipout
-
-% \def\initializepaper%
-% {\bgroup
-% \doif\@@pcstatus\v!start\locationfalse
-% \iflocation % without screen settings
-% \egroup
-% \dosetuppaper
-% {\papersize}
-% {\the\papierbreedte}
-% {\the\papierhoogte}%
-% \else
-% \egroup
-% \dosetuppaper
-% {\printpapersize}
-% {\the\printpapierbreedte}
-% {\the\printpapierhoogte}%
-% \fi}
-
-\def\initializepaper%
+ \expanded
+ {\dosetupidentity
+ {\@@iatitel}{\@@iasubtitel}{\@@iaauteur}{#1}%
+ {\@@iadatum}{\@@iatrefwoord}}%
+ \global\let\initializeidentity\relax
+ }%\fi}
+
+\def\initializeidentity % not to be changed !
+ {\doinitializeidentity{ConTeXt/user/\jobname.tex}}
+
+\appendtoks \initializeidentity \to \everyshipout
+
+\def\initializepaper
{\bgroup
- \ifx\@@pplinks \empty
- \ifx\@@pprechts\empty
- \ifx\@@ppboven \empty
- \ifx\@@pponder \empty
- \ifx\@@pcstatus\v!start
+ \ifx\@@pplinks \empty
+ \ifx\@@pprechts\empty
+ \ifx\@@ppboven \empty
+ \ifx\@@pponder \empty
+ \ifx\@@pcstatus\v!start
\locationfalse\fi\else
\locationfalse\fi\else
\locationfalse\fi\else
@@ -364,16 +347,16 @@
\dosetuppaper\printpapersize\printpapierbreedte\printpapierhoogte
\fi}
-\appendtoks \initializepaper \to \everyshipout
+\appendtoks \initializepaper \to \everyshipout
\def\doinitializepaper
{\bgroup
\berekeninteractiescherm
- \ifdim\!!widtha>\papierbreedte\ifdim\!!widtha>\zeropoint
- \papierbreedte\!!widtha
+ \ifdim\!!widtha>\papierbreedte\ifdim\!!widtha>\zeropoint
+ \papierbreedte\!!widtha
\fi\fi
- \ifdim\!!heighta>\papierhoogte\ifdim\!!heighta>\zeropoint
- \papierhoogte\!!heighta
+ \ifdim\!!heighta>\papierhoogte\ifdim\!!heighta>\zeropoint
+ \papierhoogte\!!heighta
\fi\fi
\dosetuppaper
{\printpapersize}
@@ -383,59 +366,26 @@
\let\@@pcscreendata\empty
-% \def\dosetupinteractionscreens% met a, b en \number
-% {\doifnot{\@@pcstatus}{\v!start}
-% {\bgroup
-% \berekeninteractiescherm
-% \processaction
-% [\@@scoptie]
-% [ \v!max=>\!!counte=1,
-% \v!bookmark=>\!!counte=2,
-% \s!unknown=>\!!counte=0,
-% \s!default=>\!!counte=0]%
-% \edef\temp%
-% {{\number\rugoffset}{\number\kopoffset}%
-% {\number\!!widtha}{\number\!!heighta}%
-% {\the\!!counte}}%
-% \doifnot{\the\!!widtha\the\!!heighta}{\@@pcscreendata}
-% {\xdef\@@pcscreendata{\the\!!widtha\the\!!heighta}%
-% \showmessage{\m!interactions}{1} % niet waterdicht
-% {\@EA\withoutpt\the\!!widtha,\@EA\withoutpt\the\!!heighta}}%
-% % need to be split: dimensions for each page
-% % and mode per document and only once !
-% \dosetupscreen
-% {\rugoffset}{\kopoffset}
-% {\!!widtha}{\!!heighta}
-% {\the\!!counte}%
-% \egroup}}
-
-\def\dosetupinteractionscreens% met a, b en \number
+\def\dosetupinteractionscreens % met a, b en \number
{\doifnot\@@pcstatus\v!start\dodosetupinteractionscreens}
-\setvalue{\??sc\c!optie\v!max }{1} % tzt share with driver
-\setvalue{\??sc\c!optie\v!bookmark}{2} % tzt share with driver
-\setvalue{\??sc\c!optie\v!passend }{3} % tzt share with driver
+\setvalue{\??sc\c!optie\v!max }{1} % tzt share with driver
+\setvalue{\??sc\c!optie\v!bookmark}{2} % tzt share with driver
+\setvalue{\??sc\c!optie\v!passend }{3} % tzt share with driver
-\def\dodosetupinteractionscreens% met a, b en \number
+\def\dodosetupinteractionscreens % met a, b en \number
{\bgroup
\berekeninteractiescherm
- % slow, called each page
- % \processaction
- % [\@@scoptie]
- % [ \v!max=>\!!counte=1,
- % \v!bookmark=>\!!counte=2,
- % \s!unknown=>\!!counte=0,
- % \s!default=>\!!counte=0]%
- % fast, tzt installable
\!!counte=0\getvalue{\??sc\c!optie\@@scoptie}\relax
- %
+ % niet waterdicht
\doifnot{\the\!!widtha\the\!!heighta}\@@pcscreendata
{\xdef\@@pcscreendata{\the\!!widtha\the\!!heighta}%
- \showmessage{\m!interactions}{1} % niet waterdicht
- {\@EA\withoutpt\the\!!widtha,\@EA\withoutpt\the\!!heighta}}%
- % need to be split: dimensions for each page
- % and mode per document and only once !
+ \showmessage\m!interactions
+ 1{\@EA\withoutpt\the\!!widtha,\@EA\withoutpt\the\!!heighta}}%
+ % needs to be split: dimensions for each page
+ % and mode per document and only once !
\dosetupscreen\rugoffset\kopoffset\!!widtha\!!heighta{\the\!!counte}%
+ \dosetupcropbox\rugoffset\kopoffset\!!widtha\!!heighta
\egroup}
\def\dostelinteractieschermin[#1]%
@@ -445,9 +395,9 @@
\let\setupinteractionscreens\dosetupinteractionscreens
\fi}
-\appendtoks \setupinteractionscreens \to \everyshipout
+\appendtoks \setupinteractionscreens \to \everyshipout
-\def\stelinteractieschermin%
+\def\stelinteractieschermin
{\dosingleempty\dostelinteractieschermin}
%D Due to requests I finally decided to support bookmarks, a
@@ -482,7 +432,7 @@
%\let\flushpostponedbookmark\relax
-\def\flushpostponedbookmark%
+\def\flushpostponedbookmark
{\the\postponedbookmarks
\global\postponedbookmarks\emptytoks}
@@ -493,31 +443,20 @@
\writestatus{system}{clashing bookmarks: \ascii}% ECHTE MESSAGE MAKEN
\egroup
\fi
-% \gdef\flushpostponedbookmark%
-% {\global\let\flushpostponedbookmark\relax
-% \schrijfnaarlijst[\@@bookmark]{}{#1}}}
\doglobal\prependtoks
\schrijfnaarlijst[\@@bookmark]{}{#1}%
\to\postponedbookmarks}
\def\complexbookmark[#1]#2%
-% {\schrijfnaarlijst[#1]{}{#2}}
{\doglobal\appendtoks\schrijfnaarlijst[#1]{}{#2}\to\postponedbookmarks}
\definecomplexorsimple\bookmark
-% \def\insertbookmark[#1]#2%
-% {\bgroup
-% \doifreferencefoundelse{#1}
-% {\doinsertbookmark{0}{0}{#2}{\currentrealreference}}{1}
-% {\unknownreference{#1}}%
-% \egroup}
-
\newif\iftracebookmarks \tracebookmarksfalse
\let\tracebookmarks\tracebookmarkstrue
-\def\placebookmarks%
+\def\placebookmarks
{\dodoubleempty\doplacebookmarks}
\def\doplacebookmarks[#1][#2]%
@@ -527,9 +466,9 @@
\ifsecondargument
\edef\openbookmarklist{#2}%
\else
- \let\openbookmarklist=\empty
+ \let\openbookmarklist\empty
\fi
- \global\let\bookmarklevellist=\empty
+ \global\let\bookmarklevellist\empty
\def\bookmarklevelcount{0}%
\doprocessbookmarks[#1]\dogetbookmarkelement
\dolijstelement{}{}{}{}{}{}% needed to finish the first pass
@@ -542,42 +481,40 @@
\fi}
\def\doprocessbookmarks[#1]#2%
- {\let\dolijstelement=#2\relax
- \scratchcounter=0
+ {\let\dolijstelement#2\relax
+ \scratchcounter\zerocount
\def\docommando##1%
- {\advance\scratchcounter by 1
+ {\advance\scratchcounter \plusone
\getlistlevel[##1]\listlevel{\the\scratchcounter}%
\setxvalue{\@@bookcount\the\scratchcounter}{1}%
\setxvalue{\@@booklevel##1}{\listlevel}}%
\processcommalist[#1]\docommando
\setxvalue{\@@bookcount0}{1}%
- \global\chardef\currentbookmarklevel=0
- \global\chardef\previousbookmarklevel=0
- \doutilities{#1,\@@bookmark}{\jobname}{#1}{}{}}
+ \global\chardef\currentbookmarklevel\zerocount
+ \global\chardef\previousbookmarklevel\zerocount
+ \doutilities{#1,\@@bookmark}\jobname{#1}\relax\relax}
\def\dodogetbookmarkelement#1#2#3#4#5#6%
- {%\doifsomething{#1}
- % {\global\chardef\currentbookmarklevel=\getvalue{\@@booklevel#1}}%
- \doifelsenothing{#1}
- {\global\chardef\currentbookmarklevel=0\relax}
- {\global\chardef\currentbookmarklevel=\getvalue{\@@booklevel#1}\relax}%
+ {\doifelsenothing{#1}
+ {\global\chardef\currentbookmarklevel\zerocount}
+ {\global\chardef\currentbookmarklevel\getvalue{\@@booklevel#1}\relax}%
\ifnum\currentbookmarklevel>\previousbookmarklevel
\setxvalue{\@@bookcount\the\currentbookmarklevel}{1}%
\else\ifnum\currentbookmarklevel<\previousbookmarklevel
\bgroup
- \!!counta=\previousbookmarklevel
+ \!!counta\previousbookmarklevel
\doloop
- {\let\bookmarktag=\empty
- \!!countb=\!!counta
- \advance\!!countb by -1
- \dorecurse{\!!countb}
- {\edef\bookmarktag%
+ {\let\bookmarktag\empty
+ \!!countb\!!counta
+ \advance\!!countb \minusone
+ \dorecurse\!!countb
+ {\edef\bookmarktag
{\bookmarktag\getvalue{\@@bookcount\recurselevel}:}}%
- \edef\bookmarklevelcount%
+ \edef\bookmarklevelcount
{\getvalue{\@@bookcount\the\!!counta}}%
- \xdef\bookmarklevellist%
+ \xdef\bookmarklevellist
{\bookmarklevellist/\bookmarktag:\bookmarklevelcount/}%
- \advance\!!counta by -1
+ \advance\!!counta \minusone
\ifnum\!!counta=\currentbookmarklevel
\exitloop
\fi}%
@@ -587,19 +524,17 @@
\@EA\doglobal\@EA\increment\csname \@@bookcount\the\previousbookmarklevel\endcsname\relax
\fi\fi
\global\utilitydonetrue
- \global\chardef\previousbookmarklevel=\currentbookmarklevel}
+ \global\chardef\previousbookmarklevel\currentbookmarklevel}
-\def\getbookmarklevelcount%
+\def\getbookmarklevelcount
{\@EA\def\@EA\docommando\@EA[\@EA##\@EA1\@EA/\bookmarktag:##2/##3]%
{\def\bookmarklevelcount{##2}}%
\@EA\@EA\@EA\docommando\@EA\@EA\@EA[\@EA\bookmarklevellist\@EA/\bookmarktag:0/]}
\def\dodoputbookmarkelement#1#2#3#4#5#6%
- {%\doifsomething{#1}
- % {\global\chardef\currentbookmarklevel=\getvalue{\@@booklevel#1}}%
- \doifelsenothing{#1}
- {\global\chardef\currentbookmarklevel=0\relax}
- {\global\chardef\currentbookmarklevel=\getvalue{\@@booklevel#1}\relax}%
+ {\doifelsenothing{#1}
+ {\global\chardef\currentbookmarklevel\zerocount}
+ {\global\chardef\currentbookmarklevel\getvalue{\@@booklevel#1}\relax}%
\ifnum\currentbookmarklevel>\previousbookmarklevel
\setxvalue{\@@bookcount\the\currentbookmarklevel}{1}%
\else\ifnum\currentbookmarklevel<\previousbookmarklevel
@@ -607,55 +542,51 @@
\else
\@EA\doglobal\@EA\increment\csname \@@bookcount\the\previousbookmarklevel\endcsname\relax
\fi\fi
- \let\bookmarktag=\empty
+ \let\bookmarktag\empty
\!!countb\currentbookmarklevel
- \dorecurse{\!!countb}
- {\edef\bookmarktag%
+ \dorecurse\!!countb
+ {\edef\bookmarktag
{\bookmarktag\getvalue{\@@bookcount\recurselevel}:}}%
\getbookmarklevelcount
\iftracebookmarks
\bgroup
\par
\bookmarktag\quad
- \dorecurse{\currentbookmarklevel}{\quad}\unskip#1\quad
+ \dorecurse\currentbookmarklevel{\quad}\unskip#1\quad
(\bookmarklevelcount)\quad
\egroup
\fi
- \global\chardef\previousbookmarklevel=\currentbookmarklevel
+ \global\chardef\previousbookmarklevel\currentbookmarklevel
\global\utilitydonetrue
\insertsomebookmark
- {#1}
- {\the\currentbookmarklevel}
- {\bookmarklevelcount}
- {#4}
- {#6}}
+ {#1}{\the\currentbookmarklevel}{\bookmarklevelcount}{#4}{#6}}
\def\dogetbookmarkelement#1#2#3#4#5#6%
- {\doifnot{#1}{\@@bookmark}
+ {\doifnot{#1}\@@bookmark
{\dodogetbookmarkelement{#1}{#2}{#3}{#4}{#5}{#6}}}
\def\doputbookmarkelement#1#2#3#4#5#6%
- {\doifelse{#1}{\@@bookmark}
+ {\doifelse{#1}\@@bookmark
{\localbookmark{#4}}
{\flushbookmark
\dodoputbookmarkelement{#1}{#2}{#3}{#4}{#5}{#6}}}
-\let\flushbookmark=\relax
-\let\localbookmark=\gobbleoneargument
+\let\flushbookmark\relax
+\let\localbookmark\gobbleoneargument
\def\insertsomebookmark#1#2#3#4#5%
- {\gdef\flushbookmark%
+ {\gdef\flushbookmark
{\doinsertsomebookmark{#1}{#2}{#3}{#4}{#5}{g}}%
\gdef\localbookmark##1%
{\doinsertsomebookmark{#1}{#2}{#3}{##1}{#5}{l}}}
\def\doinsertsomebookmark#1#2#3#4#5#6%
{\global\utilitydonetrue
- \global\let\localbookmark=\gobbleoneargument
- \global\let\flushbookmark=\relax
- \doifinstringelse{#1}{\openbookmarklist}
- {\chardef\openbookmark=1}
- {\chardef\openbookmark=0}%
+ \global\let\localbookmark\gobbleoneargument
+ \global\let\flushbookmark\relax
+ \doifinstringelse{#1}\openbookmarklist
+ {\chardef\openbookmark\plusone}
+ {\chardef\openbookmark\zerocount}%
\iftracebookmarks(#6: #4)\quad(\the\openbookmark)\par\fi
\doinsertbookmark{#2}{#3}{#4}{#5}{\openbookmark}}
@@ -677,8 +608,8 @@
\def\testinteractiemenu#1%
{\iflocation
- \doifelse{\@@iamenu}{\v!aan}
- {\doifelsevalue{\??am#1\c!status}{\v!start}
+ \doifelse\@@iamenu\v!aan
+ {\doifelsevalue{\??am#1\c!status}\v!start
{\global\locationmenupermittedtrue}
{\global\locationmenupermittedfalse}}
{\global\locationmenupermittedfalse}%
@@ -697,10 +628,10 @@
\setevalue{\??am##1\c!blokkade}{\interactieblokkade}}}%
\processcommalist[#2]\dodoblokkeerinteractiemenu}
-\def\blokkeerinteractiemenu%
+\def\blokkeerinteractiemenu
{\dotripleempty\doblokkeerinteractiemenu[\addtocommalist]}
-\def\geefinteractiemenuvrij%
+\def\geefinteractiemenuvrij
{\dotripleempty\doblokkeerinteractiemenu[\removefromcommalist]}
% ja : kader/achtergrond met tekst
@@ -711,78 +642,7 @@
\newif\iflocationdummy
\newif\ifskippedmenuitem
-% \def\dosetlocationbox#1[#2]#3#4%
-% {\global\skippedmenuitemfalse
-% \setbox\locationbox=\hbox
-% {% anders cyclische aanroep !
-% \resetgoto
-% \iflocationdummy
-% \edef\locationboxborder{\getvalue{#1\c!kader}}%
-% \edef\locationboxbackground{\getvalue{#1\c!achtergrond}}%
-% \else
-% \edef\locationboxborder{\v!uit}%
-% \edef\locationboxbackground{}%
-% \fi
-% \localframed[#1]
-% [\c!kader=\locationboxborder,
-% \c!achtergrond=\locationboxbackground,
-% #2]
-% {\dolocationattributes{#1}\c!letter\c!kleur{#3}}}%
-% \hbox{#4{\box\locationbox}}}
-%
-% \def\setlocationboxyes#1[#2]#3[#4]%
-% {\ifx\currentouterreference\empty
-% \ifrealreferencepage\!!doneatrue\else\!!doneafalse\fi
-% %\doifelse{\currentrealreference}{\realfolio}
-% % {\!!doneatrue}{\!!doneafalse}%
-% \else
-% \!!doneafalse
-% \fi
-% \if!!donea
-% %\ifcase0\getvalue{#1\c!zelfdepagina}\relax
-% \ifcase0\getvalue{\??am\??am\getvalue{#1\c!zelfdepagina}}\relax
-% \bgroup
-% \locationdummytrue
-% \setevalue{#1\c!kleur}{\getvalue{#1\c!contrastkleur}}%
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!nee]{#3}{\gotolocation{#4}}%
-% \egroup
-% \or
-% \locationdummytrue
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!ja]{#3}{\gotolocation{#4}}%
-% \or
-% \locationdummyfalse
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!ja]{#3}{\gotolocation{#4}}%
-% \or
-% \locationdummyfalse
-% \global\skippedmenuitemtrue
-% \fi
-% \else
-% \locationdummytrue
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!nee]{#3}{\gotolocation{#4}}%
-% \fi}
-%
-% \def\setlocationboxnop#1[#2]#3[#4]%
-% %{\ifcase\getvalue{#1\c!onbekendeverwijzing}\relax
-% {\ifcase\getvalie{\??am\??am\getvalue{#1\c!onbekendeverwijzing}}\relax
-% \locationdummytrue
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!nee]{#3}{}%
-% \or
-% \locationdummytrue
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!ja]{#3}{}%
-% \or
-% \locationdummyfalse
-% \dosetlocationbox{#1}[#2,\c!leeg=\v!ja]{#3}{}%
-% \or
-% \locationdummyfalse
-% \global\skippedmenuitemtrue
-% \fi}
-%
-% \def\setlocationbox#1[#2]#3[#4]%
-% {\doifreferencepermittedelse{#4}{\csname#1\c!blokkade\endcsname}
-% {\setlocationboxyes{#1}[#2]{#3}[#4]}
-% {\setlocationboxnop{#1}[#2]{#3}[#4]}}
-
-\newif\iflocationempty
+\newif\iflocationempty
\newif\iflocationclick
% ja : kader/achtergrond met tekst
@@ -796,14 +656,14 @@
% \setupinteractionmenu[right][samepage=none, unknownreference=none]
%
% \startinteractionmenu[right]
-% \but [firstpage] first \\
-% \but [lastpage] last \\
-% \but [somepage] crap \\
+% \but [firstpage] first \\
+% \but [lastpage] last \\
+% \but [somepage] crap \\
% \stopinteractionmenu
\def\dosetlocationboxcontent#1[#2]#3[#4]%
{\global\skippedmenuitemfalse
- \setbox\locationbox=\hbox
+ \setbox\locationbox\hbox
{\resetgoto % anders cyclische aanroep !
\localframed[#1][#2]
{\dolocationattributes{#1}\c!letter\c!kleur{#3}}}%
@@ -813,15 +673,15 @@
\hbox{\box\locationbox}%
\fi}
-\let\dosetlocationboxyes\dosetlocationboxcontent
+\let\dosetlocationboxyes\dosetlocationboxcontent
-\def\dosetlocationboxempty#1[%
- {\dosetlocationboxcontent{#1}[\c!leeg=\v!ja}
+\def\dosetlocationboxempty#1[%
+ {\dosetlocationboxcontent{#1}[\c!leeg=\v!ja,}
-\def\dosetlocationboxno#1[%
+\def\dosetlocationboxno#1[%
{\dosetlocationboxcontent{#1}[\c!leeg=\v!ja,\c!kader=,\c!achtergrond=,}
-\def\dosetlocationboxnone#1[#2]#3[#4]%
+\def\dosetlocationboxnone#1[#2]#3[#4]%
{\global\skippedmenuitemtrue}
\def\setlocationboxyes#1%
@@ -859,7 +719,7 @@
\fi{#1}}
\def\setlocationbox#1[#2]#3[#4]%
- {\bgroup % really needed !
+ {\bgroup % really needed !
\edef\permittedreferences{\csname#1\c!blokkade\endcsname}%
\doifreferencepermittedelse{#4}
{\setlocationboxyes{#1}[#2]{#3}[#4]}
@@ -911,37 +771,9 @@
\newtoks\everysetmenucommands
-% \def\setamboxcommands#1#2%
-% {\def\@@amboxcommand##1\\%
-% {\bgroup
-% \leavevmode\ignorespaces##1\unskip\relax
-% \ifskippedmenuitem \else
-% \getvalue{\??am#1#2}%
-% \fi
-% \egroup
-% \ignorespaces}%
-% \doglobal\newcounter\currentamposition %%% experiment
-% \def\currentmenu{#1}% to be sure
-% % here, but could go into \everysetmenucommands
-% \def\raw[##1]##2\\%
-% {\@@amboxcommand\naarbox{\ignorespaces##2\unskip}[##1]\\}%
-% \def\but[##1]##2\\%
-% {\@@amboxcommand\do@@amposition{#1}{##1}{\setlocationbox{\??am#1}[]{\ignorespaces##2\unskip}[##1]}\\}%
-% \def\got[##1]##2\\% pas op! offset
-% {\@@amboxcommand\setlocationbox{\??am#1}[\c!kader=\v!uit,\c!achtergrond=]{\ignorespaces##2\unskip}[##1]\\}%
-% \def\nop##1\\%
-% {\@@amboxcommand\phantom{\localframed[\??am#1][]{}}\\}%
-% \def\txt##1\\%
-% {\@@amboxcommand\localframed[\??am#1][\c!kader=\v!uit,\c!achtergrond=]{\ignorespaces##1\unskip}\\}%
-% \def\rul##1\\% ook \do@@amposition !
-% {\@@amboxcommand\localframed[\??am#1][]{\ignorespaces##1\unskip}\\}%
-% \def\com##1\\%
-% {\ignorespaces##1\unskip\ignorespaces}%
-% \the\everysetmenucommands}
-
\def\setamboxcommands#1#2%
{\def\currentmenu{#1}% % kan nog eerder
- \def\currentsubmenu{#2}% % ? ?
+ \def\currentsubmenu{#2}% % ? ?
\doglobal\newcounter\currentamposition
\the\everysetmenucommands}
@@ -995,9 +827,9 @@
\let\currentmenu\empty
-% beware : never change the concept of pbgoffset
+% beware : never change the concept of pbgoffset
-\def\@@amhbox#1#2#3#4%
+\def\@@amhbox#1#2#3#4%
{\def\currentmenu{#3}%
\testinteractiemenu{#3}%
\iflocationmenupermitted
@@ -1010,10 +842,10 @@
\advance\dimen0 \pagebackgroundhoffset
\advance\dimen0 -\getvalue{\??am#3\c!linkeroffset}%
\advance\dimen0 -\getvalue{\??am#3\c!rechteroffset}%
- \setbox0=\hbox to \dimen0
+ \setbox0\hbox to \dimen0
{\forgetall
\executeamboxcommands{#3}{#4}\c!links\c!midden\c!rechts}%
- \setbox0=\hbox{\do@@ammenuposition{#3}{\box0}}%
+ \setbox0\hbox{\do@@ammenuposition{#3}{\box0}}%
\wd0=\zetbreedte
% geen \ht=#2 setting (yet)
\hskip-\pagebackgroundhoffset
@@ -1036,14 +868,14 @@
\advance\dimen0 \pagebackgrounddepth
\advance\dimen0 -\getvalue{\??am#3\c!bovenoffset}%
\advance\dimen0 -\getvalue{\??am#3\c!onderoffset}%
- \setbox0=\vbox to \dimen0
+ \setbox0\vbox to \dimen0
{\forgetall % Voor't geval de afstand
%\stelblankoin[\v!standaard]% % (tijdelijk) is aangepast.
\restorestandardblank
\hsize#2\relax
\executeamboxcommands{#3}{#4}\c!voor\c!tussen\c!na}%
- \setbox0=\vbox{\hbox{\do@@ammenuposition{#3}{\box0}}}%
- \setbox0=\vbox
+ \setbox0\vbox{\hbox{\do@@ammenuposition{#3}{\box0}}}%
+ \setbox0\vbox
{\vskip-\pagebackgroundvoffset
\vskip\getvalue{\??am#3\c!bovenoffset}%
\ht0=\zeropoint
@@ -1080,47 +912,47 @@
{\getvalue{\??am\c!menu#1}}
\def\horizontaalinteractiemenu#1#2#3#4%
- {\ifdim#2>\zeropoint % new
- \dimen2=\zeropoint
- \setbox0=\hbox
+ {\ifdim#2>\zeropoint % new
+ \dimen2\zeropoint
+ \setbox0\hbox
{\def\docommando##1%
- {\doifnotvalue{\??am##1\c!status}{\v!geen}
+ {\doifnotvalue{\??am##1\c!status}\v!geen
{\hskip\dimen2
- \setbox2=\hbox to #2
+ \setbox2\hbox to #2
{\getvalue{\??am##1#3}\interactiemenu[##1]\getvalue{\??am##1#4}}%
- \doifelsevalue{\??am##1\c!afstand}{\v!overlay}
- {\dimen2=\zeropoint
- \wd2=\zeropoint}%
+ \doifelsevalue{\??am##1\c!afstand}\v!overlay
+ {\dimen2\zeropoint
+ \wd2\zeropoint}%
{\dimen2=\getvalue{\??am##1\c!afstand}}%
\box2}}%
\startinteractie
\processcommacommand[\getvalue{\??am#1}]\docommando
- \stopinteractie}%
+ \stopinteractie}%
\wd0=#2\relax
\box0\relax
\fi}
\def\vertikaalinteractiemenu#1#2#3#4%
- {\ifdim#2>\zeropoint % new
- \dimen2=\zeropoint
- \setbox0=\vbox
+ {\ifdim#2>\zeropoint % new
+ \dimen2\zeropoint
+ \setbox0\vbox
{\def\docommando##1%
- {\doifnotvalue{\??am##1\c!status}{\v!geen}
+ {\doifnotvalue{\??am##1\c!status}\v!geen
{\vskip\dimen2
- \setbox2=\vbox to #2
+ \setbox2\vbox to #2
{\getvalue{\??am##1#3}\interactiemenu[##1]\getvalue{\??am##1#4}}%
- \doifelsevalue{\??am##1\c!afstand}{\v!overlay}
- {\dimen2=\zeropoint
+ \doifelsevalue{\??am##1\c!afstand}\v!overlay
+ {\dimen2\zeropoint
\offinterlineskip
- \dp2=\zeropoint
- \ht2=\zeropoint}%
+ \dp2\zeropoint
+ \ht2\zeropoint}%
{\dimen2=\getvalue{\??am##1\c!afstand}}%
\box2}}%
\startinteractie
\processcommacommand[\getvalue{\??am#1}]\docommando
- \stopinteractie}%
+ \stopinteractie}%
\ht0=#2\relax
- \dp0=\zeropoint
+ \dp0\zeropoint
\box0\relax
\fi}
@@ -1129,17 +961,7 @@
\letvalue{\??am\v!boven }\empty
\letvalue{\??am\v!onder }\empty
-% \def\interactiemenus[#1]%
-% {\iflocation
-% \processaction
-% [#1]
-% [ \v!links=>\horizontaalinteractiemenu\v!links \linkerrandbreedte\c!links\c!rechts,
-% \v!rechts=>\horizontaalinteractiemenu\v!rechts\rechterrandbreedte\c!links\c!rechts,
-% \v!boven=>\vertikaalinteractiemenu \v!boven \bovenhoogte\c!voor\c!na,
-% \v!onder=>\vertikaalinteractiemenu \v!onder \onderhoogte\c!voor\c!na]%
-% \else
-% \dodummypageskip{#1}%
-% \fi}
+% todo : \defineinteractionmenuclass
\def\interactiemenus[#1]%
{\iflocation
@@ -1157,8 +979,50 @@
\setvalue{\??am\??am\c!menu\v!onder}%
{\vertikaalinteractiemenu\v!onder\onderhoogte\c!voor\c!na}
-%D This can save complicated menu macros when one want to
-%D keep control over parts of a menu (i.e.\ turn them on and
+% this can be implemented with the following command (which
+% is new, undocumented, experimental, untested, etc etc)
+
+\def\defineinteractionmenuclass
+ {\dodoubleargument\dodefineinteractionmenuclass}
+
+\def\dodefineinteractionmenuclass[#1][#2]% tag hori|veri
+ {\doifelse{#2}\v!vertikaal
+ {\setvalue{\??am\??am\c!menu#1}%
+ {\vertikaalinteractiemenu
+ {#1}{\getvalue{\??am#1\c!breedte}}\c!voor\c!na}}
+ {\setvalue{\??am\??am\c!menu#1}%
+ {\horizontaalinteractiemenu
+ {#1}{\getvalue{\??am#1\c!hoogte}}\c!links\c!rechts}}}
+
+% \setupinteraction[menu=on,state=start]
+%
+% \defineinteractionmenuclass[test] [vertical]
+% \defineinteractionmenuclass[another][horizontal]
+%
+% \defineinteractionmenu[test] [left][state=start,width=4cm]
+% \defineinteractionmenu[another][top] [state=start,height=1cm]
+%
+% \startinteractionmenu[test]
+% \but [firstpage] test-a \\
+% \but [nextpage] test-b \\
+% \stopinteractionmenu
+%
+% \startinteractionmenu[another]
+% \but [firstpage] test-a \\
+% \but [nextpage] test-b \\
+% \stopinteractionmenu
+%
+% \setupheadertexts[{\interactiemenu[another]}]
+%
+% \starttext
+%
+% test \interactionmenu[test] \page
+% test \interactionmenu[test] \page
+%
+% \stoptext
+
+%D This can save complicated menu macros when one want to
+%D keep control over parts of a menu (i.e.\ turn them on and
%D off). We could have achieved something similar with modes.
\def\local@@ambox#1#2#3#4% don't change skipping, this one works!
@@ -1172,105 +1036,48 @@
\egroup}
\unprotected\def\includemenu[#1]%
- {\doifvalue{\??am#1\c!status}{\v!lokaal}
+ {\doifvalue{\??am#1\c!status}\v!lokaal
{\bgroup
- \setvalue{\??am#1\c!status}{\v!start}%
+ \letvalue{\??am#1\c!status}\v!start
\let\@@amvbox\local@@ambox
\let\@@amhbox\local@@ambox
\getvalue{\??am\c!menu#1}%
\egroup}}
-%D We also need an explicit position control some day. I'll
+%D We also need an explicit position control some day. I'll
%D do that when I need it. [The stacking order.]
-% \newif\ifextendedmenu
-%
-% \def\dodefinieerinteractiemenu[#1][#2][#3]%
-% {\ConvertToConstant\doifelse{#3}{}
-% {\setvalue{\??am\c!menu#1}%
-% {\extendedmenufalse\dointeractiemenu{#1}{#2}}%
-% \setvalue{\@@dodolijstelement#1}%
-% {\def\dosomelijstelement{\dodomenulijstelement{#1}}}} % of #2 ?
-% {\setvalue{\??am\c!menu#1}%
-% {\extendedmenufalse\dointeractiemenu{#1}{}}%
-% \setvalue{\@@dodolijstelement#1}%
-% {\def\dosomelijstelement{\dodomenulijstelement{#1}}}%
-% \presetlocalframed[\??am#1]%
-% \letvalue{\??am#1\c!blokkade}\empty
-% \edef\!!stringe{\getvalue{\??am#2}}%
-% \addtocommalist{#1}\!!stringe
-% \letvalue{\??am#2}=\!!stringe
-% \doifnot{#1}{#2}
-% {\copyparameters[\??am#1][\??am#2]
-% [\c!links,\c!midden,\c!rechts,\c!voor,\c!na,\c!tussen,
-% \c!breedte,\c!hoogte,\c!afstand,\c!offset,\c!kader,
-% \c!achtergrond,\c!achtergrondkleur,\c!achtergrondraster,
-% \c!letter,\c!kleur,\c!contrastkleur,\c!zelfdepagina,\c!onbekendeverwijzing,
-% \c!linkeroffset,\c!rechteroffset,\c!bovenoffset,\c!onderoffset]}%
-% % \ConvertToConstant\doifinstringelse{=}{#3}
-% \doifassignmentelse{#3}
-% {\getparameters[\??am#1][\c!plaats=#2,#3]}%
-% {\doifnot{#2}{#3}
-% {\copyparameters[\??am#1][\??am#3]
-% [\c!links,\c!midden,\c!rechts,\c!voor,\c!na,\c!tussen,
-% \c!breedte,\c!hoogte,\c!afstand,\c!offset,\c!kader,
-% \c!achtergrond,\c!achtergrondkleur,\c!achtergrondraster,
-% \c!letter,\c!kleur,\c!zelfdepagina,\c!onbekendeverwijzing,
-% \c!linkeroffset,\c!rechteroffset,\c!bovenoffset,\c!onderoffset]}%
-% \getparameters[\??am#1][\c!plaats=#2]}}}
-%
-%\def\dodostelinteractiemenuin[#1][#2]%
-% {\def\docommando##1%
-% {\getparameters[\??am##1][#2]%
-% \dododostelinteractiemenuin{\??am##1\c!onbekendeverwijzing}%
-% \dododostelinteractiemenuin{\??am##1\c!zelfdepagina}}%
-% \processcommalist[#1]\docommando}
-%
-%\def\dostelinteractiemenuin[#1][#2]%
-%% {\ConvertToConstant\doifinstringelse{=}{#2}
-% {\doifassignmentelse{#2}
-% {\dodostelinteractiemenuin[#1][#2]}
-% {\dodefinieerinteractiemenu[#1][#2][]}}
-
-% \def\dododostelinteractiemenuin#1%
-% {\processaction
-% [\getvalue{#1}]
-% [ \v!ja=>\setvalue{#1}{0},
-% \v!leeg=>\setvalue{#1}{1},
-% \v!nee=>\setvalue{#1}{2},
-% \v!geen=>\setvalue{#1}{3},
-% \s!default=>\setvalue{#1}{1}]}
-
-% for the moment we will support the old method
+% for the moment we will support the old method
%
% \stelinteractiemenuin[right][{abc[xyz]},...]
% \stelinteractiemenuin[right][key=val,...]
-
+
\newif\ifextendedmenu
-\def\definieerinteractiemenu%
+\def\definieerinteractiemenu
{\dotripleempty\dodefinieerinteractiemenu}
-\def\dodefinieerinteractiemenu[#1][#2]% compatibility hack
- {\doifinstringelse{[}{#2}
- {\dodostelinteractielijstmenuinx}
- {\dododefinieerinteractiemenu }%
+\def\dodefinieerinteractiemenu[#1][#2]% compatibility hack
+ {\convertargument#2\to\ascii % will disappear soon
+ \doifinstringelse[\ascii
+ \dodostelinteractielijstmenuinx
+ \dododefinieerinteractiemenu
[#1][#2]}
% [name] [location]
-% [name] [location] [pars]
+% [name] [location] [pars]
-\def\dododefinieerinteractiemenu[#1][#2][#3]%
- {% main settings
- \letvalue{\??am\c!menu#1}\empty
+\def\dododefinieerinteractiemenu[#1][#2][#3]%
+ {% main settings
+ \letvalue{\??am\c!menu#1}\empty
% \setvalue{\??am\c!menu#1}%
% {\extendedmenufalse\dointeractiemenu{#1}{}}%
\setvalue{\@@dodolijstelement#1}%
{\def\dosomelijstelement{\dodomenulijstelement{#1}}}%
\presetlocalframed[\??am#1]%
- % register location
+ % register location
\expanded{\addtocommalist{#1}\@EA\noexpand\csname\??am#2\endcsname}%
- % inherit settings
+ % inherit settings
\doifnot{#1}{#2}
{\copyparameters[\??am#1][\??am#2]
[\c!links,\c!midden,\c!rechts,\c!voor,\c!na,\c!tussen,
@@ -1278,21 +1085,21 @@
\c!achtergrond,\c!achtergrondkleur,\c!achtergrondraster,
\c!letter,\c!kleur,\c!contrastkleur,\c!zelfdepagina,\c!onbekendeverwijzing,
\c!linkeroffset,\c!rechteroffset,\c!bovenoffset,\c!onderoffset]}%
- % additional settings
+ % additional settings
\getparameters[\??am#1][\c!plaats=#2,\c!blokkade=,#3]}
\def\stelinteractiemenuin
{\dodoubleargument\dostelinteractiemenuin}
-\def\dostelinteractiemenuin[#1][#2% compatibillity hack
- {\doifnextcharelse\bgroup
- {\dodostelinteractielijstmenuiny[#1][#2}
- {\dodostelinteractiemenuin [#1][#2}}
+\def\dostelinteractiemenuin[#1][% compatibillity hack
+ {\doifnextcharelse\bgroup % will disappear soon
+ {\dodostelinteractielijstmenuiny[#1][}
+ {\dodostelinteractiemenuin [#1][}}
-\def\dodostelinteractielijstmenuinx[#1][#2][#3]% compatibillity hack
+\def\dodostelinteractielijstmenuinx[#1][#2][#3]% compatibillity hack
{\setvalue{\??am\c!menu#1}{\extendedmenufalse\dointeractiemenu{#1}{#2}}}
-\def\dodostelinteractielijstmenuiny[#1][#2]% compatibillity hack
+\def\dodostelinteractielijstmenuiny[#1][#2]% compatibillity hack
{\setvalue{\??am\c!menu#1}%
{\extendedmenufalse\dointeractiemenu{#1}{#2}}}
@@ -1300,11 +1107,11 @@
{\def\docommando##1{\getparameters[\??am##1][#2]}%
\processcommalist[#1]\docommando}
-\setvalue{\??am\??am\v!ja }{0}
-\setvalue{\??am\??am\v!leeg}{1}
-\setvalue{\??am\??am\v!nee }{2}
-\setvalue{\??am\??am\v!geen}{3}
-\setvalue{\??am\??am }{1} % default
+\setvalue{\??am\??am\v!ja }{0}
+\setvalue{\??am\??am\v!leeg}{1}
+\setvalue{\??am\??am\v!nee }{2}
+\setvalue{\??am\??am\v!geen}{3}
+\setvalue{\??am\??am }{1} % default
\processbetween{\e!interactiemenu}\dostartinteractiemenu
@@ -1314,15 +1121,18 @@
\def\dodostartinteractiemenu[#1]#2\dodostopinteractiemenu
{\setvalue{\??am\c!menu#1}{\extendedmenutrue\dointeractiemenu{#1}{#2}}}
-\def\dodomenulijstelement#1#2#3#4#5#6#7%
+\def\resetinteractionmenu[#1]%
+ {\letvalue{\??am\c!menu#1}\empty}
+
+\def\dodomenulijstelement#1#2#3#4#5#6#7%
{\setbox0=\hbox
{\let\gotolocation\gobbleoneargument % hack to catch last []
-%\locationclickfalse % ipv ^
+%\locationclickfalse % ipv ^
\docheckrealreferencepage{#7}%
\setlocationboxyes
{\??am#1}% % needed !
[]% no settings
- {\limitatetext{#5}{\getvalue{\??li#2\c!maxbreedte}}{\unknown}}% % needed !
+ {\limitatetext{#5}{\getvalue{\??li#2\c!maxbreedte}}{\unknown}}% % needed !
[]}% normally the destination, catch by gobble
\@@amboxcommand\do@@amposition{#1}{#7}% beware, we pass the pagenumber
{\ignorespaces\linklisttoelement{#2}{#3}{#6}{#7}{\box0}\unskip}\\}
@@ -1341,22 +1151,6 @@
\definecomplexorsimple\scherm
-% \def\domenubutton[#1][#2]#3[#4]%
-% {\bgroup
-% \locationdummytrue
-% \iffirstargument
-% \ifsecondargument
-% \setlocationbox{\??am#1}[#2]{#3}[#4]%
-% \else
-% \doifassignmentelse{#1}
-% {\setlocationbox\??bt[#1]{#3}[#4]}
-% {\setlocationbox{\??am#1}[]{#3}[#4]}%
-% \fi
-% \else
-% \setlocationbox\??bt[]{#3}[#4]%
-% \fi
-% \egroup}
-
\unexpanded\def\menubutton
{\dodoubleempty\domenubutton}
@@ -1370,7 +1164,7 @@
{\@EAEAEA\domenubuttonD}%
\fi
\else
- \@EA\domenubuttonA
+ \@EA\domenubuttonA
\fi[#1]}
\def\domenubuttonA[#1][#2]#3[#4]% normal button, no parameters
@@ -1393,7 +1187,7 @@
\def\domenubuttonD[#1][#2]#3[#4]% menu button, no parameters
{\bgroup
- %\locationdummytrue
+ %\locationdummytrue
\setlocationbox{\??am#1}[]{#3}[#4]%
\egroup}
@@ -1440,7 +1234,7 @@
\ifvmode
\@EA\setmark\@EA\syncmarker\@EA{\synccounter} % \marking[\syncmarker]{\synccounter}%
\else
- \showmessage{\m!interactions}{4}{\synccounter}%
+ \showmessage\m!interactions4\synccounter
\fi
\fi\fi}
@@ -1450,17 +1244,17 @@
\def\dostelsynchronisatiein[#1]%
{\getparameters[\??sy][#1]%
- \doifelse{\@@systatus}{\v!start}
- {\synchronisationtrue}
- {\synchronisationfalse}}
+ \doifelse\@@systatus\v!start
+ \synchronisationtrue
+ \synchronisationfalse}
-\def\stelsynchronisatiein%
+\def\stelsynchronisatiein
{\dosingleargument\dostelsynchronisatiein}
-\def\definieersynchronisatie%
+\def\definieersynchronisatie
{\dosingleargument\dodefinieersynchronisatie}
-\def\stelsynchronisatiebalkin%
+\def\stelsynchronisatiebalkin
{\dodoubleargument\getparameters[\??ba]}
\presetlocalframed[\??ba]
@@ -1477,10 +1271,10 @@
{\leaders\hrule\!!depth1ex\!!height-.5ex\hfil}%
\def\boven##1##2##3%
{\dimen0=\wd0
- \divide\dimen0 by 3
- \multiply\dimen0 by ##2\relax
+ \divide\dimen0 3
+ \multiply\dimen0 ##2\relax
\dimen2=.25em
- \advance\dimen0 by -##3\dimen2
+ \advance\dimen0 -##3\dimen2
%\gotodestination
% {}{#1}{\syncprefix:##1}{}
% {\hbox to \dimen0{\color[\locationcolor\@@bakleur]{\onder}}}}%
@@ -1494,7 +1288,7 @@
\check\gettopmark\top
\check\getfirstmark\first
\check\getbotmark\bot
- \setbox2=\hbox to \wd0
+ \setbox2\hbox to \wd0
{\ifnum\top=\first\relax
\ifnum\first=\bot\relax
\boven\first30\relax
@@ -1562,12 +1356,12 @@
%\setupinteraction[\c!breedte=\!!zeropoint]%
\setinteractionparameter\c!breedte\!!zeropoint
\setupblackrules[\c!hoogte=\v!max,\c!diepte=\v!max]% maten ??
- \!!widthb=\@@ibbreedte\relax
- \advance\!!widthb by -2.75em\relax
- \!!widtha=\!!widthb\relax
- \divide\!!widtha by \lastpage\relax
+ \!!widthb\@@ibbreedte
+ \advance\!!widthb -2.75em\relax
+ \!!widtha\!!widthb
+ \divide\!!widtha \lastpage\relax
\bgroup
- \advance\realpageno by -1\relax
+ \advance\realpageno \minusone
\ifvoid\meterbox
\bgroup
\processaction
@@ -1577,20 +1371,20 @@
\v!groot=>\dimen0=1em\relax,
\s!unknown=>\dimen0=\!!widtha]%
\ifdim\!!widtha<\dimen0\relax
- \!!counta=\dimen0\relax
- \!!countb=\!!widtha
- \divide\!!counta by \!!countb
+ \!!counta\dimen0\relax
+ \!!countb\!!widtha
+ \divide\!!counta \!!countb
\else
- \!!counta=\@@ibstap\relax
+ \!!counta\@@ibstap\relax
\fi
\!!widtha=\!!counta\!!widtha
- \setbox0=\hbox{\blackrule[\c!breedte=\!!widtha]}%
- \global\setbox\meterbox=\hbox to \!!widthb
+ \setbox0\hbox{\blackrule[\c!breedte=\!!widtha]}%
+ \global\setbox\meterbox\hbox to \!!widthb
{\hss
\for \teller=1 \to \lastpage \step \!!counta \do
{\gotorealpage{}{}{\teller}{\copy0}}%
\hss}%
- \global\wd\meterbox=\zeropoint\relax
+ \global\wd\meterbox\zeropoint
\egroup
\fi
\egroup
@@ -1609,17 +1403,17 @@
\setupblackrules[\c!breedte=\!!widtha]%
\ifnum\realpageno>1\relax
\!!counta=\realpageno
- \advance\!!counta by -2\relax
- \hskip\zeropoint\!!plus\!!counta sp\relax % cm gives overflow
+ \advance\!!counta -2\relax
+ \hskip\zeropoint\!!plus\!!counta \s!sp\relax % cm gives overflow
\doganaareenpagina\??ib\blackrule\prevpage
\fi
\color[\@@ibcontrastkleur]{\blackrule[\c!breedte=.5em]}%
\ifnum\realpageno<\lastpage\relax
\doganaareenpagina\??ib\blackrule\nextpage
\!!counta=\lastpage\relax
- \advance\!!counta by -\realpageno
- \advance\!!counta by -1\relax
- \hskip\zeropoint\!!plus\!!counta sp\relax % cm gives overflow
+ \advance\!!counta -\realpageno
+ \advance\!!counta \minusone
+ \hskip\zeropoint\!!plus\!!counta \s!sp\relax % cm gives overflow
\fi}%
\hss
\doganaareenpagina\??ib\blackrule\lastpage}%
@@ -1630,28 +1424,28 @@
\def\interactiebalkc%
{\iflocation
- \ifnum\lastpage>1
+ \ifnum\lastpage>\plusone
\hbox to \@@ibbreedte
{\setupblackrules[\c!hoogte=\@@ibhoogte,\c!diepte=\@@ibdiepte]%
\def\gotox##1%
{\doganaareenpagina{}{\blackrule[\c!breedte=##1]}}%
\dimen0=\@@ibbreedte\relax
- \advance\dimen0 by -4em
- \!!counta=\lastpage
- \advance\!!counta by -1
- \divide\dimen0 by \!!counta
- \!!counta=\realpageno
- \advance\!!counta by -1
- \!!widtha=\!!counta\dimen0\relax
- \!!countb=\lastpage
- \advance\!!countb by -\realpageno
- \!!widthb=\!!countb\dimen0
+ \advance\dimen0 -4em
+ \!!counta\lastpage
+ \advance\!!counta \minusone
+ \divide\dimen0 \!!counta
+ \!!counta\realpageno
+ \advance\!!counta \minusone
+ \!!widtha\!!counta\dimen0
+ \!!countb\lastpage
+ \advance\!!countb -\realpageno
+ \!!widthb\!!countb\dimen0
\startcolor[\locationcolor\@@ibkleur]%
\gotox{1em}\firstpage
\hss
- \gotox{\!!widtha}\prevpage
+ \gotox\!!widtha\prevpage
\color[\@@ibcontrastkleur]{\blackrule[\c!breedte=1em]}%
- \gotox{\!!widthb}\nextpage
+ \gotox\!!widthb\nextpage
\hss
\gotox{1em}\lastpage
\stopcolor}%
@@ -1660,27 +1454,27 @@
\def\interactiebalkd%
{\iflocation\ifshowingsubpage
- \ifnum\nofsubpages>1
+ \ifnum\nofsubpages>\plusone
\hbox
\bgroup
%\setupinteraction[\c!breedte=\!!zeropoint]%
\setinteractionparameter\c!breedte\!!zeropoint
\ifbalksymbool % beter: 3 chars assign en 3*box
\setupsymbolset[\@@iasymboolset]%
- \setbox0=\hbox{\symbol[\v!vorige]}%
- \setbox2=\hbox{\symbol[\v!ergens]}%
- \setbox4=\hbox{\symbol[\v!volgende]}%
+ \setbox0\hbox{\symbol[\v!vorige]}%
+ \setbox2\hbox{\symbol[\v!ergens]}%
+ \setbox4\hbox{\symbol[\v!volgende]}%
\else
- \setbox0=\hbox
+ \setbox0\hbox
{\vrule
\!!height\@@ibhoogte
\!!depth\@@ibdiepte
\!!width\@@ibbreedte}%
- \setbox2=\copy0
- \setbox4=\copy0
+ \setbox2\copy0
+ \setbox4\copy0
\fi
\startcolor[\locationcolor\@@ibkleur]%
- \for\teller=1\to\nofsubpages\step1\do
+ \for\teller=1\to\nofsubpages\step1\do % brr, \dostepwiserecurse
{\bgroup
\increment(\teller,\firstsubpage)\relax
\decrement\teller\relax
@@ -1703,14 +1497,14 @@
\def\interactiebalke% KAN WORDEN GECOMBINEERD MET D
{\iflocation\ifshowingsubpage
- \ifnum\nofsubpages>1
+ \ifnum\nofsubpages>\plusone
\bgroup
- \!!widthb=\@@ibafstand
- \multiply\!!widthb by \nofsubpages
- \advance\!!widthb by -\@@ibafstand % (n-1)
- \!!widtha=\@@ibbreedte
- \advance\!!widtha by -\!!widthb
- \divide\!!widtha by \nofsubpages\relax
+ \!!widthb\@@ibafstand
+ \multiply\!!widthb \nofsubpages
+ \advance\!!widthb -\@@ibafstand % (n-1)
+ \!!widtha\@@ibbreedte
+ \advance\!!widtha -\!!widthb
+ \divide\!!widtha \nofsubpages\relax
\ifdim\!!widtha<\@@ibafstand\relax
\interactiebalkf
\else
@@ -1721,17 +1515,17 @@
\bgroup
\ifbalksymbool
\setupsymbolset[\@@iasymboolset]%
- \setbox0=\hbox{\symbol[\v!vorige]}%
- \setbox2=\hbox{\symbol[\v!ergens]}%
- \setbox4=\hbox{\symbol[\v!volgende]}%
+ \setbox0\hbox{\symbol[\v!vorige]}%
+ \setbox2\hbox{\symbol[\v!ergens]}%
+ \setbox4\hbox{\symbol[\v!volgende]}%
\else
- \setbox0=\hbox
+ \setbox0\hbox
{\vrule
\!!height\@@ibhoogte
\!!depth\@@ibdiepte
\!!width\!!widtha}%
- \setbox2=\copy0
- \setbox4=\copy0
+ \setbox2\copy0
+ \setbox4\copy0
\fi
\startcolor[\locationcolor\@@ibkleur]%
\for\teller=1\to\nofsubpages\step1\do
@@ -1759,55 +1553,55 @@
\def\interactiebalkf% !! KAN WORDEN GECOMBINEERD MET D !!
{\iflocation\ifshowingsubpage
- \ifnum\nofsubpages>1
+ \ifnum\nofsubpages>\plusone
%\setupinteraction[\c!breedte=\!!zeropoint]%
\setinteractionparameter\c!breedte\!!zeropoint
\noindent
\hbox to \@@ibbreedte
\bgroup
- \!!countb=0
+ \!!countb\zerocount
\loop
- \advance\!!countb by 1
- \!!countc=\nofsubpages
- \divide\!!countc by \!!countb
- \advance\!!countc by 1
- \!!widthb=\@@ibafstand
- \multiply\!!widthb by \!!countc
- \advance\!!widthb by -\@@ibafstand
- \!!widtha=\@@ibbreedte
- \advance\!!widtha by -\!!widthb
- \divide\!!widtha by \!!countc
+ \advance\!!countb \plusone
+ \!!countc\nofsubpages
+ \divide\!!countc \!!countb
+ \advance\!!countc \plusone
+ \!!widthb\@@ibafstand
+ \multiply\!!widthb \!!countc
+ \advance\!!widthb -\@@ibafstand
+ \!!widtha\@@ibbreedte
+ \advance\!!widtha -\!!widthb
+ \divide\!!widtha \!!countc
\ifdim\!!widtha<\@@ibafstand\relax
\repeat
-\advance\!!countc by -2
-\!!widtha=-\@@ibafstand
+\advance\!!countc -2
+\!!widtha-\@@ibafstand
\!!widtha=\!!countc\!!widtha
-\advance\!!widtha by \@@ibbreedte
-\advance\!!countc by 1
-\divide\!!widtha by \!!countc
+\advance\!!widtha \@@ibbreedte
+\advance\!!countc \plusone
+\divide\!!widtha \!!countc
\ifbalksymbool
\setupsymbolset[\@@iasymboolset]%
- \setbox0=\hbox{\symbol[\v!vorige]}%
- \setbox4=\hbox{\symbol[\v!ergens]}%
- \setbox8=\hbox{\symbol[\v!volgende]}%
- \setbox2=\copy4
- \setbox6=\copy4
+ \setbox0\hbox{\symbol[\v!vorige]}%
+ \setbox4\hbox{\symbol[\v!ergens]}%
+ \setbox8\hbox{\symbol[\v!volgende]}%
+ \setbox2\copy4
+ \setbox6\copy4
\else
- \setbox0=\hbox
+ \setbox0\hbox
{\vrule
\!!height\@@ibhoogte
\!!depth\@@ibdiepte
\!!width\!!widtha}%
- \setbox4=\copy0
- \setbox8=\copy0
- \setbox2=\hbox
+ \setbox4\copy0
+ \setbox8\copy0
+ \setbox2\hbox
{\vrule
\!!height.5\ht0
\!!depth.5\dp0
\!!width\!!widtha}%
- \ht2=\ht0
- \dp2=\dp0
- \setbox6=\copy2
+ \ht2\ht0
+ \dp2\dp0
+ \setbox6\copy2
\fi
\def\gotox##1%
{\ifnum\teller=\realpageno
@@ -1817,15 +1611,15 @@
\else
\gotorealpage{}{}{\teller}{\copy##1}%
\fi
- \!!countf=0
+ \!!countf\zerocount
\hss}%
\startcolor[\locationcolor\@@ibkleur]%
- \!!countc=\realpageno \advance\!!countc by -2
- \!!countd=\realpageno \advance\!!countd by 2
- \!!countf=0
+ \!!countc\realpageno \advance\!!countc -2
+ \!!countd\realpageno \advance\!!countd 2
+ \!!countf\zerocount
\for\teller=\firstsubpage\to\lastsubpage\step1\do
{\!!doneafalse
- \advance\!!countf by 1
+ \advance\!!countf \plusone
\ifnum\teller=\firstsubpage\relax \!!doneatrue \fi
\ifnum\teller=\lastsubpage\relax \!!doneatrue \fi
\ifnum\teller>\!!countc \ifnum\teller<\!!countd \!!doneatrue \fi\fi
@@ -1872,19 +1666,19 @@
\def\checkinteractiebalk#1#2#3%
{\ifdim\@@ibbreedte=\zeropoint\def\@@ibbreedte{#1}\fi
- \doifnothing{\@@ibhoogte}{\def\@@ibhoogte{#2}}%
- \doifnothing{\@@ibdiepte}{\def\@@ibdiepte{#3}}}
+ \doifnothing\@@ibhoogte{\def\@@ibhoogte{#2}}%
+ \doifnothing\@@ibdiepte{\def\@@ibdiepte{#3}}}
\def\complexinteractiebalk[#1]%
- {\doifelse{#1}{\v!reset}
- {\global\setbox\meterbox=\box\voidb@x}%
+ {\doifelse{#1}\v!reset
+ {\global\setbox\meterbox\box\voidb@x}%
{\bgroup
\iflocation
\checksubpages % goes wrong / loads \numberofpages too
\getparameters[\??ib][#1]%
- \doif{\@@ibstatus}{\v!start}
+ \doif\@@ibstatus\v!start
{\startinteractie
- \processaction % breedte defaults !
+ \processaction % breedte defaults !
[\@@ibvariant]
[ c=>\checkinteractiebalk{.5em}\v!max \v!max,
d=>\checkinteractiebalk{.5em}{.5em} \!!zeropoint,
@@ -1892,8 +1686,8 @@
f=>\checkinteractiebalk{.5em}{.5em} \!!zeropoint,
\s!default=>\checkinteractiebalk{10em}\v!ruim\!!zeropoint,
\s!unknown=>\checkinteractiebalk{10em}\v!ruim\!!zeropoint]%
- \doifelse{\@@ibsymbool}{\v!ja}
- {\balksymbooltrue}{\balksymboolfalse}%
+ \doifelse\@@ibsymbool\v!ja
+ \balksymbooltrue\balksymboolfalse
\getvalue{interactiebalk\@@ibvariant}%
\stopinteractie}%
\fi
@@ -1931,8 +1725,8 @@
\def\profilepage{}
-\let\dosetprofilepage=\relax
-\let\dogetprofilepage=\relax
+\let\dosetprofilepage\relax
+\let\dogetprofilepage\relax
\def\processprofile#1[#2]%
{\iflocation
@@ -1950,7 +1744,7 @@
\else
\doendofprofile
\fi}}%
- \def\processedprofiles{}%
+ \let\processedprofiles\empty
\def\doprocessprofile##1%
{\doifelse{\@@pfoptie}{\v!test}%
{\goodbreak\blanko\nobreak\tt[\spatie
@@ -1983,12 +1777,12 @@
{\processprofile1[#1]%
\egroup}%
\def\next{\processprofile0[#1]}% % \DoAfterFi \processprofile0[#1]%
- \else % ^^^^^^^^^^ will be obsolete
- \let\next\relax % since ugly and never used
+ \else % ^^^^^^^^^^ will be obsolete
+ \let\next\relax % since ugly and never used
\fi
\next}
-\let\stopprofiel=\relax
+\let\stopprofiel\relax
\def\dovolgprofiel#1[#2]%
{\iflocation
@@ -2007,7 +1801,7 @@
\def\volgprofiel#1[#2]%
{\iflocation
- \doif{\@@pfoptie}{\v!test}{\pagereference[\c!profiel!!#2]}%
+ \doif\@@pfoptie\v!test{\pagereference[\c!profiel!!#2]}%
\dovolgprofiel{#1}[#2]%
\fi}
@@ -2094,10 +1888,10 @@
\def\checkrecentcontributions%
{\gettwopassdata{\s!versionbegin}%
\iftwopassdatafound
- \!!counta=\twopassdata\relax
+ \!!counta\twopassdata\relax
\gettwopassdata{\s!versionend}%
\iftwopassdatafound
- \!!countb=\twopassdata\relax
+ \!!countb\twopassdata\relax
\doglobal\increment\versionorder\relax
\writeutilitycommand%
{\twopassentry%
@@ -2111,12 +1905,12 @@
{\the\!!countb}}%
\for\teller=\!!counta\to\!!countb\step1\do%
{\@EA\doglobal\@EA\addtocommalist\@EA{\teller}{\recentcontributions}}%
- \let\next=\checkrecentcontributions
+ \let\next\checkrecentcontributions
\else
- \let\next=\relax
+ \let\next\relax
\fi
\else
- \let\next=\relax
+ \let\next\relax
\fi
\next}
@@ -2131,13 +1925,13 @@
\def\complexstartversie[#1]%
{\bgroup
- \doifelse{\actualprofile}{}%
+ \doifelsenothing\actualprofile
{\startprofiel[#1]}%
{\startprofiel[#1,\actualprofile]}%
\def\docomplexstartversie##1%
{\stripcharacter.\from##1\to\actualversion
- \ifnum\versionlevel>0\relax
- \ifnum\actualversion=0\relax
+ \ifnum\versionlevel>\zerocount\relax
+ \ifnum\actualversion=\zerocount
\setpageversion\actualversion % unknown version
\else
\ifnum\actualversion<\minimumversion\relax
@@ -2157,8 +1951,8 @@
\def\stopversie%
{\stopprofiel
\doglobal\decrement\versionlevel
- \ifnum\versionlevel<0\relax
- \showmessage{\m!versions}{1}{}%
+ \ifnum\versionlevel<\zerocount
+ \showmessage\m!versions1\empty
\else
\resetpageversion
\egroup
@@ -2178,28 +1972,28 @@
\fi\fi}}
\egroup
-\def\markeerversie%
- {\showmessage{\m!versions}{2}{}%
- \let\setpageversion=\dosetpageversion
- \let\resetpageversion=\relax
- \let\checkpageversion=\relax}
+\def\markeerversie
+ {\showmessage\m!versions2\empty
+ \let\setpageversion\dosetpageversion
+ \let\resetpageversion\relax
+ \let\checkpageversion\relax}
-\def\selecteerversie%
+\def\selecteerversie
{\checkrecentcontributions
- \showmessage{\m!versions}{3}{\recentcontributions}%
- \let\setpageversion=\gobbleoneargument
- \let\resetpageversion=\relax
- \let\checkpageversion=\docheckpageversion
+ \showmessage\m!versions3\recentcontributions
+ \let\setpageversio\gobbleoneargument
+ \let\resetpageversion\relax
+ \let\checkpageversion\docheckpageversion
\setversion}
\def\dodefinieerversie[#1][#2]%
{\setvalue{\c!versie!!#1}{#2}%
\definieerprofiel[#1][#2]}
-\def\definieerversie%
+\def\definieerversie
{\dodoubleargument\dodefinieerversie}
-\def\volgversie%
+\def\volgversie
{\volgprofiel}
\def\volgprofielversie#1[#2][#3]%
@@ -2217,16 +2011,16 @@
\def\dostelpaginaovergangenin[#1]%
{\doifelsenothing{#1}
- {\doifnot{\@@scwachttijd}{\v!geen}
+ {\doifnot\@@scwachttijd\v!geen
{\let\setpagetransition\setsomepagedelay}}
- {\doifelse{#1}{\v!start}
- {\doifnot{\@@scwachttijd}{\v!geen}
+ {\doifelse{#1}\v!start
+ {\doifnot\@@scwachttijd\v!geen
{\let\setpagetransition\setsomepagedelay}}
{\doglobal\newcounter\currentpagetransition
\doifinsetelse{#1}{\v!reset,\v!stop}
{\let\setpagetransition\relax}
{\let\setpagetransition\setsomepagetransition
- \doifinsetelse{\v!willekeurig}{#1}
+ \doifinsetelse\v!willekeurig{#1}
{\randomtransitionstrue}{\randomtransitionsfalse}%
\edef\userpagetransitions{#1}%
\@EA\removefromcommalist\@EA{\v!willekeurig}\userpagetransitions
@@ -2234,26 +2028,26 @@
\let\userpagetransitions\pagetransitions
\fi}}}}
-\def\setsomepagedelay%
+\def\setsomepagedelay
{\expanded{\dosetpagetransition{0}{\@@scwachttijd}}}
-\def\setsomepagetransition%
+\def\setsomepagetransition
{\iflocation
\ifrandomtransitions
\expanded{\getcommalistsize[\userpagetransitions]}%
- \getrandomnumber{\currentpagetransition}{1}{\commalistsize}%
+ \getrandomnumber\currentpagetransition1\commalistsize
\else
\doglobal\increment\currentpagetransition
\fi
\expanded{\getfromcommalist[\userpagetransitions][\currentpagetransition]}%
- \doifnumberelse{\commalistelement}
+ \doifnumberelse\commalistelement
{\expanded{\getfromcommalist[\pagetransitions][\commalistelement]}}
{}%
\ifx\commalistelement\empty
\doglobal\newcounter\currentpagetransition
\setsomepagetransition
\else
- \doifelse{\@@scwachttijd}{\v!geen}
+ \doifelse\@@scwachttijd\v!geen
{\expanded{\dosetpagetransition{\commalistelement}{0}}}
{\expanded{\dosetpagetransition{\commalistelement}{\@@scwachttijd}}}%
\fi
@@ -2295,19 +2089,19 @@
\def\horizontalgrowingbar\pos#1\min#2\max#3\height#4\depth#5\\%
{\hbox to \hsize
- {\scratchcounter=#1\relax
- \advance\scratchcounter by -#2\relax
- \advance\scratchcounter by 1\relax
+ {\scratchcounter#1%
+ \advance\scratchcounter -#2%
+ \advance\scratchcounter \plusone
\leaders\vrule\hskip\zeropoint\!!plus \scratchcounter\!!fill
- \vrule\!!width\zeropoint\!!height#4\!!depth#5\relax
+ \vrule\!!width\zeropoint\!!height#4\!!depth#5%
\hskip\zeropoint\!!plus #3\!!fill
\hskip\zeropoint\!!plus-#1\!!fill}}
\def\verticalgrowingbar\pos#1\min#2\max#3\width#4\\%
{\vbox to \vsize
- {\scratchcounter=#1\relax
- \advance\scratchcounter by -#2\relax
- \advance\scratchcounter by 1\relax
+ {\scratchcounter#1%
+ \advance\scratchcounter -#2%
+ \advance\scratchcounter \plusone
\leaders\hrule\vskip\zeropoint\!!plus\scratchcounter\!!fill
\hrule\!!width#4\!!height\zeropoint\!!depth\zeropoint
\vskip\zeropoint\!!plus #3\!!fill
@@ -2315,85 +2109,60 @@
\newbox\commentbox
-\def\doflushcommentanchors%
+\def\doflushcommentanchors
{\inmarge{\hbox{\raise\ht\strutbox\box\commentbox}}}
-\def\flushcommentanchors% in everypar so indirect
+\def\flushcommentanchors % in everypar so indirect
{\ifvoid\commentbox\else \doflushcommentanchors \fi}
-\def\stelcommentaarin%
+\def\stelcommentaarin
{\dodoubleargument\getparameters[\??cc]}
\setvalue{\e!start\e!commentaar}% the dummy triple gobbles trailing spaces
{\dotripleempty\dostartcommentaar}
-\def\commentaar%
+\def\commentaar
{\dodoubleempty\docommentaar}
\def\dodocommentaar#1%
{\!!widtha\@@ccbreedte
\!!heighta\@@cchoogte
- \doifelse{\@@ccoptie}{\v!max}
+ \doifelse\@@ccoptie\v!max
{\def\@@ccopen{1}}{\def\@@ccopen{0}}%
- \doifelse{\@@ccoptie}{\v!buffer}
+ \doifelse\@@ccoptie\v!buffer
{\def\@@cccollect{1}}{\def\@@cccollect{0}}%
\doinsertcomment
\@@cctitel\!!widtha\!!heighta
\@@cckleur\@@ccopen\@@ccsymbool
\@@cccollect{#1}}
-%\def\dopreparecommentaar#1#2%
-% {\doifassignmentelse{#1}
-% {\getparameters[\??cc][#1]}
-% {\getparameters[\??cc][\c!titel=#1,#2]}}
-%
-%\def\dostartcommentaar[#1][#2][#3]%
-% {\bgroup
-% \dopreparecommentaar{#1}{#2}%
-% \bgroup
-% \obeylines
-% \doif{\@@ccspatie}{\v!ja}{\obeyspaces}%
-% \long\def\docommando##1%
-% {\egroup
-% \global\setbox\commentbox=\hbox
-% {\dodocommentaar{##1}%
-% \hskip\ifvoid\commentbox\@@ccmarge\else\@@ccafstand\fi
-% \box\commentbox}%
-% \egroup}%
-% \grabuntil{\e!stop\e!commentaar}\docommando}
-%
-%\def\docommentaar[#1][#2]#3%
-% {\bgroup
-% \dopreparecommentaar{#1}{#2}%
-% \hbox to \zeropoint
-% {\hskip-\@@ccmarge
-% \raise\ht\strutbox\hbox{\dodocommentaar{#3}}}%
-% \egroup
-% \ignorespaces}
-
\def\dopreparecommentaar#1#2%
{\doifassignmentelse{#1}
{\getparameters[\??cc][#1]}
{\getparameters[\??cc][\c!titel=#1,#2]}%
\obeylines
- \doif{\@@ccspatie}{\v!ja}{\obeyspaces}}
+ \doif\@@ccspatie\v!ja\obeyspaces}
\def\dostartcommentaar[#1][#2][#3]%
{\bgroup
- \dopreparecommentaar{#1}{#2}%
- \long\def\docommando##1%
- {\global\setbox\commentbox=\hbox
- {\dodocommentaar{##1}%
- \hskip\ifvoid\commentbox\@@ccmarge\else\@@ccafstand\fi
- \box\commentbox}%
- \egroup}%
+ \doifelse\@@ccstatus\v!start
+ {\dopreparecommentaar{#1}{#2}%
+ \long\def\docommando##1%
+ {\global\setbox\commentbox\hbox
+ {\dodocommentaar{##1}%
+ \hskip\ifvoid\commentbox\@@ccmarge\else\@@ccafstand\fi
+ \box\commentbox}%
+ \egroup}}%
+ {\long\def\docommando##1%
+ {\egroup}}%
\grabuntil{\e!stop\e!commentaar}\docommando}
\def\docommentaar[#1][#2]#3%
- {\hbox to \!!zeropoint
- {\dopreparecommentaar{#1}{#2}%
- \hskip-\@@ccmarge
- \raise\ht\strutbox\hbox{\dodocommentaar{#3}}}%
+ {\doif\@@ccstatus\v!start
+ {\hbox to \zeropoint
+ {\dopreparecommentaar{#1}{#2}%
+ \hskip-\@@ccmarge
+ \raise\ht\strutbox\hbox{\dodocommentaar{#3}}}}%
\ignorespaces}
% \startcommentaar
@@ -2426,26 +2195,26 @@
% (actually not) documented? Anyhow, by providing this
% functionality we demonstrate that \pdfTeX\ can do it. By
% the way, it's funny that when in Acrobat we scale up the
-% text, the symbols scale down.
+% text, the symbols scale down.
% \stopcommentaar
% \definesymbol [comment-normal][{\externalfigure[koe.pdf]}]
% \definesymbol [comment-down] [{\externalfigure[koe.pdf]}]
-%
+%
% \def\CowSymbol#1#2%
% {\scale
% [\c!hoogte=#1]
% {\startMPcode
-% loadfigure "koe.mp" number 1 ;
-% refill currentpicture withcolor #2 ;
+% loadfigure "koe.mp" number 1 ;
+% refill currentpicture withcolor #2 ;
% \stopMPcode}}
-%
-% \definesymbol [comment-normal]
+%
+% \definesymbol [comment-normal]
% [\CowSymbol{4ex}{red}]
-%
-% \definesymbol [comment-down]
+%
+% \definesymbol [comment-down]
% [\CowSymbol{4ex}{green}]
-%
+%
% \setupcomment
% [\c!symbool={comment-normal,comment-down},
% \c!optie=\v!buffer]
@@ -2458,7 +2227,7 @@
% jammer, tussen/midden had erin gemoeten; \c!commando toevoegen
\def\registermenucommand#1%
- {{\textonly\noindent#1\space}} % no math switching
+ {{\textonly\noindent#1\space}} % no math switching
\def\doregistermenubuttons[#1][#2]% [menu id] [register]
{\bgroup
@@ -2474,10 +2243,10 @@
[\c!onbekendeverwijzing=\v!ja,\c!zelfdepagina=\v!ja]
{##1}[#1:##1]}}%
\fi
- \handletokens abcdefghijklmnopqrstuvwxyz\with\docommando % moet anders
+ \handletokens abcdefghijklmnopqrstuvwxyz\with\docommando % moet anders
\egroup}
-\def\registermenubuttons%
+\def\registermenubuttons
{\dodoubleempty\doregistermenubuttons}
\stelkoppelingenin
@@ -2560,19 +2329,19 @@
\def\plaatslinkerrandtekstblok % Is \hss/\hsize really needed here?
{\hbox to \linkerrandbreedte % (check outer level and settings)
- {\hsize\linkerrandbreedte
+ {\hsize\linkerrandbreedte
\hss
\interactiemenus[\v!links]}}
\def\plaatsrechterrandtekstblok % Is \hss/\hsize really needed here?
{\hbox to \rechterrandbreedte % (check outer level and settings)
- {\hsize\rechterrandbreedte
+ {\hsize\rechterrandbreedte
\interactiemenus[\v!rechts]%
\hss}}
\def\plaatsboventekstblok
{\vbox to \bovenhoogte
- {\vsize\bovenhoogte
+ {\vsize\bovenhoogte
% \getvalue{\??tk\v!boven\v!tekst\c!voor}
\getvalue{\??tk\v!boven\c!voor}
\interactiemenus[\v!boven]
@@ -2582,7 +2351,7 @@
\def\plaatsondertekstblok
{\vbox to \onderhoogte
- {\vsize\onderhoogte
+ {\vsize\onderhoogte
% \getvalue{\??tk\v!onder\v!tekst\c!voor}
\getvalue{\??tk\v!onder\c!voor}
\interactiemenus[\v!onder]
@@ -2597,8 +2366,8 @@
\appendtoks \plaatsboventekstblok \vskip-\bovenhoogte \to \toptextcontent
\appendtoks \plaatsondertekstblok \vskip-\onderhoogte \to \bottomtextcontent
-\fi
-
+\fi
+
\stelinteractieschermin
[\c!breedte=\printpapierbreedte,
\c!hoogte=\printpapierhoogte,
@@ -2664,7 +2433,8 @@
[\v!reset]
\stelcommentaarin
- [\c!marge=2.5em,
+ [\c!status=\v!start,
+ \c!marge=2.5em,
\c!afstand=1em,
\c!breedte=.3\tekstbreedte,
\c!hoogte=.2\teksthoogte,
diff --git a/tex/context/base/core-itm.tex b/tex/context/base/core-itm.tex
index 7659dd9c2..2f0185db4 100644
--- a/tex/context/base/core-itm.tex
+++ b/tex/context/base/core-itm.tex
@@ -90,7 +90,7 @@
\def\dolistreference
{\immediatewriteutilitycommand
- {\twopassentry%
+ {\twopassentry
{\s!list}%
{\currentlist}%
{\currentlist:\noflistelements}}}
@@ -131,7 +131,7 @@
\def\doitemreference#1,#2,#3\\%
{\ifnum\itemlevel>#1
- \ifnum#1>0 \tempsymbol \fi
+ \ifnum#1>\zerocount \tempsymbol \fi
\getvalue{\@@currentitemsymbol{#2}}%
\doitemreference#2,#3\\%
\fi}
@@ -140,7 +140,7 @@
{\expandafter\doitemreference\itemreferences,,\\}
\def\packitems
- {\ifnum\itemlevel=0 \else \packeditemstrue \fi}
+ {\ifcase\itemlevel \else \packeditemstrue \fi}
\def\dosetupitemgroupvariable[#1]% [#2]% niveau instellingen
{\doifelsenothing{#1}
@@ -259,7 +259,7 @@
% \fi}
\def\setitemlevel#1%
- {\ifnum\itemlevel>0\relax
+ {\ifnum\itemlevel>\zerocount
\firstlisttrue
\doifnotinset\v!verder{#1}
{\doifinset{0}{#1}{\setitemparameter\itemlevel\c!start{0}}%
@@ -267,7 +267,7 @@
{\setcounter{\@@itemcounter\itemlevel}{\getitemparameter\itemlevel\c!start}%
\minuscounter{\@@itemcounter\itemlevel}%
\letitemparameter\itemlevel\c!start\empty}}%
- \def\tempnumber%
+ \def\tempnumber
{\countervalue{\@@itemcounter\itemlevel}}%
\doifelse{\getitemparameter\itemlevel\c!plaatsafsluiter}\v!ja
{\def\tempsymbol{\getitemparameter\itemlevel\c!afsluiter}}
@@ -295,7 +295,7 @@
\doifsomething{\getitemparameter\itemlevel\c!linkertekst}
{\let\tempsymbol\empty}%
\fi
- \def\listitem%
+ \def\listitem
{\getitemparameter\itemlevel
{\iftextitems\c!linkertekst\else\c!links\fi}%
\getvalue{\@@localitemsymbol\itemlevel}\tempsymbol
@@ -306,7 +306,7 @@
\def\calculatelistwidth#1#2%
{#2=\getitemparameter{#1}\c!afstand\relax
- \ifnum\getitemparameter{#1}\c!factor>0
+ \ifnum\getitemparameter{#1}\c!factor>\zerocount
\ifdim#2=\zeropoint #2=.5em\fi
\fi
\multiply#2 \getitemparameter{#1}\c!factor
@@ -355,31 +355,31 @@
\doglobal\increment(\itemlevel,\itemincrement)%
\initializeitemgrouplevel\itemlevel % safeguard
\begingroup
- \ifnum\itemlevel=1 % NIEUW
+ \ifnum\itemlevel=\plusone % NIEUW
\doadaptleftskip{\getitemparameter1\c!marge}%
\fi
\dosetraggedcommand{\getitemparameter\itemlevel\c!uitlijnen}\raggedcommand
\doifsomething{\getitemparameter\itemlevel\c!inspringen}
{\expanded{\stelinspringenin[\getitemparameter\itemlevel\c!inspringen]}}%
\doifinset\v!kolommen{#1}%
- {\ifbinnenkolommen\else\ifnum\itemcolumndepth=0
- \global\let\itemcolumndepth\itemlevel
+ {\ifbinnenkolommen\else\ifnum\itemcolumndepth=\zerocount
+ \globallet\itemcolumndepth\itemlevel
\getitemparameter\itemlevel\c!voor
\processfirstactioninset
[#1]
- [ \v!een=>\!!counta=1\relax,
- \v!twee=>\!!counta=2\relax,
- \v!drie=>\!!counta=3\relax,
- \v!vier=>\!!counta=4\relax,
- \v!vijf=>\!!counta=5\relax,
+ [ \v!een=>\!!counta1\relax,
+ \v!twee=>\!!counta2\relax,
+ \v!drie=>\!!counta3\relax,
+ \v!vier=>\!!counta4\relax,
+ \v!vijf=>\!!counta5\relax,
\s!unknown=>\@EA\!!counta\getitemparameter\itemlevel\c!n]%
% new
\edef\columneditemleftskip{\the\leftskip}%
\def\postprocesscolumnbox##1%
- {\scratchdimen=\columneditemleftskip
+ {\scratchdimen\columneditemleftskip
\divide\scratchdimen \nofcolumns
\hbox{\hskip\columneditemleftskip\hbox{\box##1}}}%
- \scratchdimen=-\columneditemleftskip
+ \scratchdimen-\columneditemleftskip
\multiply\scratchdimen \nofcolumns
\advance\scratchdimen \columneditemleftskip
\advance\scratchdimen \hsize
@@ -401,14 +401,14 @@
\subitemfalse
\symbolitemfalse
\let\marsymbol\relax
- \global\let\somdestination\empty
+ \globallet\somdestination\empty
\let\symsymbol\empty
\the\itemgroupcommands
\setitemlevel{#1}%
\getitemparameter\itemlevel\empty
\doifelsenothing{#1} % iffirstargument
{\edef\@@opsymbool{\getitemparameter\itemlevel\c!symbool}%
- \global\letvalue{\@@globalitemsymbol\itemlevel}\empty
+ \letgvalueempty{\@@globalitemsymbol\itemlevel}%
\global\letitemparameter\itemlevel\v!verder\empty
\setitemmark\@@opsymbool
\dosetupitemgroupvariable[\itemlevel][#2]}
@@ -428,7 +428,7 @@
\itemintrotrue
\fi\fi
\ifparagraphitems
- \ifnum\itemlevel>1
+ \ifnum\itemlevel>\plusone
\letitemparameter\itemlevel\c!tussen\empty
\fi
\else\ifpackeditems
@@ -447,14 +447,14 @@
\else
\par
\fi
- \ifnum\itemcolumndepth=0 \dolistreference \fi % beware !
+ \ifnum\itemcolumndepth=\zerocount \dolistreference \fi % beware !
\iffirstlist \else \endgroup \fi % toegevoegd, eerste \som opent groep
\ifnum\itemcolumndepth=\itemlevel\relax
\stopkolommen
\doglobal\newcounter\itemcolumndepth
\getitemparameter\itemlevel\c!na
\else
- \ifnum\itemlevel=1
+ \ifnum\itemlevel=\plusone
\doitembreak\allowbreak % toegevoegd
\getitemparameter1\c!na
\doif\@@oospringvolgendein\v!nee\noindentation
@@ -502,7 +502,7 @@
\unskip}}
\def\itemgroupmargin#1%
- {\def\marsymbol%
+ {\def\marsymbol
{\llap
{\doitemattributes\itemlevel\c!marletter\c!markleur{#1}%
\hskip\leftskip\hskip\linkermargeafstand}}%
@@ -533,13 +533,13 @@
\fi
\ignorespaces
\increment\noflistelements
- \ifnum\itemcolumndepth=0 \ifoptimizeitems
- \ifnum\noflistelements=1 % tgv bv kolommen/nesting
+ \ifnum\itemcolumndepth=\zerocount \ifoptimizeitems
+ \ifnum\noflistelements=\plusone % tgv bv kolommen/nesting
\findtwopassdata\s!list{\noflists:}% % wordt soms de volgorde
\fi % verstoord, vandaar \find
-\iftwopassdatafound
- \ifcase0\twopassdata\relax \twopassdatafoundfalse \fi
-\fi
+ \iftwopassdatafound
+ \ifcase0\twopassdata\relax \twopassdatafoundfalse \fi
+ \fi
\iftwopassdatafound
\ifnum\twopassdata=3
\ifnum\noflistelements>1
@@ -573,7 +573,7 @@
\fi\fi}%
\doifsomething\somdestination
{\setbox8=\hbox{\naar{\box8}[\somdestination]}}%
- \global\let\somdestination\empty
+ \globallet\somdestination\empty
\dimen2=\getitemparameter\itemlevel\c!breedte\relax
% new, prevents loops when symbol is (not yet found) graphic
\ht8=\strutheight
@@ -597,9 +597,11 @@
\fi
\fi
\fi
+\forceunexpanded % needed for m conversion (\os) / i need to look into this
\setevalue{\@@currentitemsymbol\itemlevel}%
{\getvalue{\@@localitemsymbol\itemlevel}}% still problems with \uchar ?
%{\noexpand\getvalue{\@@localitemsymbol\itemlevel}}% no, spoils subrefs
+ \resetunexpanded
\headitemfalse
\subitemfalse
\symbolitemfalse
@@ -750,10 +752,10 @@
\setvalue{\e!start#1}{\startitemgroup[#1]}%
\setvalue{\e!stop#1}{\stopitemgroup}%
\setvalue{\e!stel#1\e!in}{\setupitemgroup[#1]}%
-\getparameters[\??ig#1][\c!niveaus=3,#2]%
-\ifnum\getvalue{\??ig#1\c!niveaus}<\maxitemlevel\relax
- \letvalue{\??ig#1\c!niveaus}\maxitemlevel
-\fi
+ \getparameters[\??ig#1][\c!niveaus=3,#2]%
+ \ifnum\getvalue{\??ig#1\c!niveaus}<\maxitemlevel\relax
+ \letvalue{\??ig#1\c!niveaus}\maxitemlevel
+ \fi
\dorecurse{\getvalue{\??ig#1\c!niveaus}}{\initializeitemgrouplevel\recurselevel}%
\popmacro\currentitemgroup}}
diff --git a/tex/context/base/core-job.tex b/tex/context/base/core-job.tex
index c986a5e56..9df225d31 100644
--- a/tex/context/base/core-job.tex
+++ b/tex/context/base/core-job.tex
@@ -35,22 +35,22 @@
\unprotect
-\def\currentproject {}
-\def\currentproduct {}
-\def\currentenvironment {}
-\def\currentcomponent {}
+\let \currentproject \empty
+\let \currentproduct \empty
+\let \currentenvironment \empty
+\let \currentcomponent \empty
-\def\loadedfiles {}
-\def\processedfiles {}
+\let \loadedfiles \empty
+\let \processedfiles \empty
-\let\geenfilesmeer=\relax
+\let \geenfilesmeer \relax
\newcounter\textlevel
\newcounter\fileprocesslevel
\setvalue{\c!file::0}{\jobname}
-\def\processedfile% is used in styles, don't change !
+\def\processedfile % is used in styles, don't change !
{\getvalue{\c!file::\fileprocesslevel}}
%\def\processfile#1%
@@ -64,7 +64,8 @@
{\doglobal\increment\fileprocesslevel
\setxvalue{\c!file::\fileprocesslevel}{#2}%
\@EA\doglobal\@EA\addtocommalist\@EA{#2}\processedfiles
- #1{#2}{}{}% #1=\readlocfile|\readsetfile{dir} #2=filename
+ % #1=\readlocfile|\readsetfile{dir} #2=filename
+ #1{#2}\donothing\donothing
\doglobal\decrement\fileprocesslevel}
\def\processfile#1%
@@ -92,57 +93,68 @@
\def\usepath[#1]%
{\def\docommando##1%
- {\doifelse{##1}{\v!reset}
+ {\doifelse{##1}\v!reset
{\let\allinputpaths\empty}
{\addtocommalist{##1}\allinputpaths}}%
\processcommalist[#1]\docommando}
+\def\usesubpath[#1]% new, see webschrift for usage
+ {\ifx\allinputpaths\empty
+ \edef\allinputpaths{#1}%
+ \else
+ \def\docommando##1%
+ {\def\dodocommando####1{\addtocommalist{##1/####1}\allinputpaths}%
+ \processcommalist[#1]\dodocommando}%
+ \processcommacommand[\allinputpaths]\docommando
+ \fi}
+
\def\registreerfileinfo[#1#2]#3% geen \showmessage ?
- {\writestatus{\m!systems}{#1#2 file #3 at line \the\inputlineno}%
+ {\writestatus\m!systems{#1#2 file #3 at line \the\inputlineno}%
\immediatewriteutility{f #1 {#3}}}
\doifundefined{preloadfonts} {\let\preloadfonts=\relax}
\doifundefined{preloadspecials} {\let\preloadspecials=\relax}
-% \def\loadsystemfiles%
+% \def\loadsystemfiles
% {\reportprotectionstate
-% \readsysfile{\f!newfilename}
-% {\showmessage{\m!systems}{2}{\f!newfilename}}{}%
-% \readsysfile{\f!oldfilename}
-% {\showmessage{\m!systems}{2}{\f!oldfilename}}{}%
-% \readsysfile{\f!filfilename}
-% {\showmessage{\m!systems}{2}{\f!filfilename}}{}%
-% \readsysfile{\f!sysfilename}
-% {\showmessage{\m!systems}{2}{\f!sysfilename}}{}}
+% \readsysfile\f!newfilename
+% {\showmessage\m!systems2\f!newfilename}\donothing
+% \readsysfile\f!oldfilename
+% {\showmessage\m!systems2\f!oldfilename}\donothing
+% \readsysfile\f!filfilename
+% {\showmessage\m!systems2\f!filfilename}\donothing
+% \readsysfile\f!sysfilename
+% {\showmessage\m!systems2\f!sysfilename}\donothing}
%
% test \@@svgebied
\def\loadallsystemfiles#1%
{\ifx\@@svgebied\empty
- \readsysfile{#1}{\showmessage{\m!systems}{2}{#1}}{}%
+ \readsysfile{#1}{\showmessage\m!systems2{#1}}\donothing
\else
\def\doloadsystemfile##1%
- {\readsetfile{##1}{#1}{\showmessage{\m!systems}{2}{#1}}{}}%
+ {\readsetfile{##1}{#1}{\showmessage\m!systems2{#1}}\donothing}%
\processcommacommand[\@@svgebied]\doloadsystemfile
\fi}
-\def\loadsystemfiles%
+\def\loadsystemfiles
{\reportprotectionstate
- \readsysfile{\f!newfilename}
- {\showmessage{\m!systems}{2}{\f!newfilename}}{}%
- \readsysfile{\f!oldfilename}
- {\showmessage{\m!systems}{2}{\f!oldfilename}}{}%
+ \readsysfile\f!newfilename
+ {\showmessage\m!systems2\f!newfilename}\donothing
+ \readsysfile\f!oldfilename
+ {\showmessage\m!systems2\f!oldfilename}\donothing
\loadallsystemfiles\f!filfilename
- \loadallsystemfiles\f!sysfilename}
+ \loadallsystemfiles\f!sysfilename
+ }%\loadallsystemfiles\f!modfilename}
%D Loading of \type {cont-usr.tex} (edited by the user)
%D and \type {cont-fmt.tex} (generated by texexec).
\def\loaduserspecifications
- {\readsysfile{\f!usrfilename}
- {\showmessage{\m!systems}{2}{\f!usrfilename}}{}%
- \readjobfile{\f!fmtfilename}
- {\showmessage{\m!systems}{2}{\f!fmtfilename}}{}}
+ {\readsysfile\f!usrfilename
+ {\showmessage\m!systems2\f!usrfilename}\donothing
+ \readjobfile\f!fmtfilename
+ {\showmessage\m!systems2\f!fmtfilename}\donothing}
%D We don't want multiple jobfiles to interfere.
@@ -151,11 +163,11 @@
\xdef\texcommentsymbol{%}
\egroup
-\def\loadoptionfile%
+\def\loadoptionfile
{\readjobfile{\jobname.\f!optionextension}
- {\showmessage{\m!systems}{2}{\jobname.\f!optionextension}}%
- %{\showmessage{\m!systems}{2}{\jobname.\f!optionextension}}}
- {\writestatus{\m!systems}{no \jobname.\f!optionextension}}}
+ {\showmessage\m!systems2{\jobname.\f!optionextension}}%
+ %{\showmessage\m!systems2{\jobname.\f!optionextension}}}
+ {\writestatus\m!systems {no \jobname.\f!optionextension}}}
% \newevery \everyjob \EveryJob
% \appendtoks ... \to \everyjob
@@ -190,21 +202,32 @@
\prependtoks \loadtwopassdata \to \everystarttext % moved 28-02-2002
\appendtoks \checkreferences \to \everystarttext % new 04-12-1999
-\def\doateverystarttext%
+% Most natural ...
+%
+% \def\doateverystarttext
+% {\the\everystarttext
+% \global\let\doateverystarttext\relax}
+%
+% ... most practical, since we can load env's in a
+% something.run file (nested \starttext's; see for
+% instance x-res-08, where we definitely want to
+% open the file!).
+
+\def\doateverystarttext
{\the\everystarttext
- \global\let\doateverystarttext\relax}
+ \global\everystarttext\emptytoks}
-\def\starttekst%
+\def\starttekst
{\doateverystarttext
- \ifnum\textlevel=0
- \registreerfileinfo[begin]{\jobname}%
- \expandafter\startcopyingblocks
+ \ifnum\textlevel=\zerocount
+ \registreerfileinfo[begin]{\jobname}%
+ \expandafter\startcopyingblocks
\fi
\doglobal\increment\textlevel\relax}
-\def\stoptekst%
+\def\stoptekst
{\doglobal\decrement\textlevel\relax
- \ifnum\textlevel>0 \else
+ \ifnum\textlevel>\zerocount \else
\the\everystoptext
%\the\everybye %
%\the\everygoodbye % == \end (new)
@@ -217,23 +240,23 @@
\let\normalend=\end
-\def\end%
- {\ifnum\textlevel>0 \else
+\def\end
+ {\ifnum\textlevel>\zerocount \else
\the\everybye
\the\everygoodbye
- \global\everygoodbye\emptytoks % rather unneeded
- \global\everybye\emptytoks % but for sure
+ \global\everybye \emptytoks % rather unneeded
+ \global\everygoodbye\emptytoks % but for sure
\expandafter\normalend
\fi}
\def\doexecutefileonce#1%
{\beforesplitstring#1\at.\to\currentfile
- \fullexpandtwoargsafter\doifnotinset{\currentfile}{\loadedfiles}%
- {\fullexpandoneargafter\addtocommalist{\currentfile}\loadedfiles
+ \fullexpandtwoargsafter\doifnotinset\currentfile\loadedfiles
+ {\fullexpandoneargafter\addtocommalist\currentfile\loadedfiles
\doexecutefile{#1}}}
\def\doexecutefile#1%
- {\registreerfileinfo[begin]{#1}
+ {\registreerfileinfo[begin]{#1}%
\processfile{#1}%
\registreerfileinfo[end]{#1}}
@@ -269,8 +292,8 @@
\increment\filelevel\relax
\fullexpandoneargafter\addtocommalist{#1}\loadedfiles}
-\def\doprevlevel%
- {\ifnum\filelevel=1
+\def\doprevlevel
+ {\ifnum\filelevel=\plusone
\expandafter\stoptekst
\else
\decrement\filelevel\relax
@@ -282,7 +305,7 @@
\donotexecutefile\doexecutefileonce
\doexecutefileonce\doexecutefile#1\\}
-\def\stopprojekt%
+\def\stopprojekt
{\doprevlevel}
\def\startprodukt #1 %
@@ -291,7 +314,7 @@
\doexecutefileonce\doexecutefileonce
\donotexecutefile\doexecutefile#1\\}
-\def\stopprodukt%
+\def\stopprodukt
{\doprevlevel}
\def\startonderdeel #1 %
@@ -300,7 +323,7 @@
\doexecutefileonce\doexecutefileonce
\donotexecutefile\doexecutefile#1\\}
-\def\stoponderdeel%
+\def\stoponderdeel
{\doprevlevel}
\def\startomgeving #1 %
@@ -308,17 +331,17 @@
\donotexecutefile\doexecutefileonce
\donotexecutefile\donotexecutefile#1\\}
-\def\stopomgeving%
+\def\stopomgeving
{\doprevlevel}
\def\startdeelomgeving[#1]%
{\let\loadedlocalenvironments\empty
\def\docommando##1%
{\beforesplitstring##1\at.\to\someevironment
- \fullexpandoneargafter\addtocommalist{\someevironment}\loadedlocalenvironments}%
+ \fullexpandoneargafter\addtocommalist\someevironment\loadedlocalenvironments}%
\processcommalist[#1]\docommando
\fullexpandtwoargsafter\doifcommonelse % no longer next needed
- {\currentproject,\currentproduct,
+ {\currentproject,\currentproduct,%
\currentcomponent,\currentenvironment}
{\loadedlocalenvironments}
{\letvalue{\e!stop\e!deelomgeving}\relax}
@@ -342,8 +365,8 @@
\long\def\startsetups#1 #2\stopsetups% for international purposes
{\long\setvalue{\??su#1}{#2}}
-\def\dodosetups#1%
- {\getvalue{\??su#1}}
+\def\setups
+ {\dosingleargument\dosetups}
\def\dosetups[#1]%
{\iffirstargument
@@ -352,8 +375,11 @@
\expandafter\dodosetups
\fi}
-\def\setups%
- {\dosingleargument\dosetups}
+\def\dodosetups#1%
+ {\getvalue{\??su#1}}
+
+\def\doifsetupselse#1%
+ {\doifdefinedelse{\??su#1}}
% Het <pagina>-karakter (FormFeed), wordt omgezet in \par
diff --git a/tex/context/base/core-lst.tex b/tex/context/base/core-lst.tex
index d103360d0..24c712337 100644
--- a/tex/context/base/core-lst.tex
+++ b/tex/context/base/core-lst.tex
@@ -96,7 +96,7 @@
{\begingroup
\convertargument#2\to\ascii
\makesectionformat
- \doifelse{\@@nmstatus}{\v!start}
+ \doifelse{\@@nmstatus}\v!start
{\def\dopaginanummer{\noexpand\pagenumber}}
{\def\dopaginanummer{0}}%
\edef\schrijfwegnaarlijst%
@@ -115,21 +115,29 @@
\def\listbetween#1%
{\executeifdefined{#1\c!tussen}\gobblethreearguments}
+%\def\@@livariantaa% nr - tit - pag
+% {\def\lijstfill{\hskip .5em}%
+% \def\lijstskip{0em}%
+% \def\lijstwidth{0pt}}
+
\def\@@livarianta% nr - tit - pag
- {\def\lijstfill{\hskip 1.25em}%
+% {\def\lijstfill{\hskip 1.75em}% was \hskip.5em\hskip 1.25em
+ {\def\lijstfill{\hskip .25em}% omdat nu check
\def\lijstskip{0em}%
\def\lijstwidth{2em}}
\def\@@livariantb% nr - tit - fill - pag
- {\def\lijstfill{\hfill}%
+ {\def\lijstfill{\hfill}% was \hskip.5em\hfill
\def\lijstskip{5em}%
\def\lijstwidth{2em}}
\def\@@livariantc% nr - tit - dots - pag
- {\def\lijstfill{\leaders\hbox to .5em{\hss.\hss}\hfill\hskip.5em}%
+ {\def\lijstfill{\hskip.5em\lijstdots\hskip.5em}%
\def\lijstskip{5em}%
\def\lijstwidth{0pt}}
+\def\lijstdots{\leaders\hbox to .5em{\hss.\hss}\hfill}
+
\def\@@livariant%
{\lijstvariantb}
@@ -154,7 +162,7 @@
\def\dodoresetlijst#1%
{\let\geenlijst\empty
\setvalue{#1\c!tussen}{\gobblefourarguments{#1}}%
- \setvalue{#1\c!lijst}{\gobblesixarguments{#1}}}
+ \setvalue{#1\c!lijst }{\gobblesixarguments{#1}}}
\let\geenlijst\empty
@@ -197,7 +205,6 @@
\c!scheider=\@@koscheider,
\c!afsluiter=,
\c!expansie=]%
-% \ConvertToConstant\doifinstringelse{=}{#2}
\doifassignmentelse{#2}
{\getparameters[\??li#1][#2]}
{\ConvertToConstant\doifnot{#2}{}
@@ -216,30 +223,45 @@
\setvalue{\s!reset#1}%
{\dodoresetlijst{#1}}}
-\def\definieerlijst%
+\def\definieerlijst
{\dotripleempty\dodefinieerlijst}
\def\iflijstgeplaatst{\ifutilitydone}
-\def\dobeginoflist%
+\def\plaatslijst
+ {\dodoubleempty\doplaatslijst}
+
+\def\plaatsruwelijst
+ {\dodoubleempty\doplaatsruwelijst}
+
+\def\dobeginoflist
{\begingroup
\startopelkaar[\v!blanko]}
-\def\doendoflist%
+\def\doendoflist
{\stopopelkaar
\endgroup}
\def\doplaatslijst[#1][#2]%
{\dobeginoflist
+ \plaatsruwelijst[#1][#2]%
+ \doendoflist}
+
+\def\plaatsruwelijst[#1][#2]%
+ {\begingroup
\dogetcommalistelement1\from#1\to\firstlistelement
\dostellijstin[#1][#2]%
- \doifvalue{\??li\firstlistelement\c!koppeling}{\v!aan}
+ \doifvalue{\??li\firstlistelement\c!koppeling}\v!aan
{\startlistreferences{#1}}%
- \dosettoclevel{\getvalue{\??li\firstlistelement\c!criterium}}%
- \doutilities{#1}{\jobname}{#1}{}{\par}%
+ \dosettoclevel\??li\firstlistelement
+ \honorlocalfilterlevel
+ \doutilities{#1}\jobname{#1}\relax\par
\stoplistreferences{#1}%
- \doendoflist
- \dosetlistmode}
+ \dosetlistmode
+ \endgroup}
+
+\def\dosettoclevel#1#2%
+ {\dosetfilterlevel{\getvalue{#1#2\c!criterium}}\empty}
\def\dosetlistmode
{\iflijstgeplaatst
@@ -248,9 +270,6 @@
\resetsystemmode\v!lijst
\fi}
-\def\plaatslijst
- {\dodoubleempty\doplaatslijst}
-
\def\dodovolledigelijst[#1][#2][#3]% enkelvoud, meervoud, instellingen
{\systemsuppliedtitle[#2]{\headtext{#2}}
\doplaatslijst[#1][#3]}
@@ -277,34 +296,43 @@
\def\dohandlelistnumber#1{\separatednumber{#1}}
+% new
+
+\let\currentlistsymbol\empty
+
+\def\listsymbol[#1]#2%
+ {{\dosetlistsymbol{#1}{#2}\currentlistsymbol}}
+
+%
+
\def\dosetlistsymbol#1#2% kan sneller, default case afvangen
{\processaction
[\getvalue{\??li#1\c!symbool}]
- [ \v!geen=>\def\listsymbol%
+ [ \v!geen=>\def\currentlistsymbol%
{\doassigndimen{\dimen0}{\getvalue{\??li#1\c!breedte}}{1.5em}%
\hbox to \dimen0{}},
- 1=>\def\listsymbol%
+ 1=>\def\currentlistsymbol%
{\strut$\bullet$},
- 2=>\def\listsymbol%
+ 2=>\def\currentlistsymbol%
{\vrule\!!width1em\!!height1ex\!!depth\zeropoint},
- 3=>\def\listsymbol% very slow
+ 3=>\def\currentlistsymbol% very slow
{{\doassigndimen{\dimen0}{\getvalue{\??li#1\c!breedte}}{1.5em}%
\doassigndimen{\dimen2}{\getvalue{\??li#1\c!hoogte}}{1ex}%
\doassigndimen{\dimen4}{\getvalue{\??li#1\c!diepte}}{0pt}%
\vrule\!!width\dimen0\!!height\dimen2\!!depth\dimen4}},
- \s!unknown=>\def\listsymbol{\getvalue{\??li#1\c!symbool}},
- \s!default=>\doifelsevalue{\??li#1\c!prefix}{\v!nee} % ook nog eerste
+ \s!unknown=>\def\currentlistsymbol{\getvalue{\??li#1\c!symbool}},
+ \s!default=>\doifelsevalue{\??li#1\c!prefix}\v!nee % ook nog eerste
{\edef\splitlistsymbol{\removefirstprefix{#2}}}
- {\doifelsevalue{\??li#1\c!prefix}{\v!geen}
+ {\doifelsevalue{\??li#1\c!prefix}\v!geen
{\edef\splitlistsymbol{\removeallprefixes{#2}}}%
{\def\splitlistsymbol{#2}}}% geen \edef ivm enz
- \def\listsymbol% kan iets efficienter met \ifdone
- {\doifvalue{\??li#1\c!label}{\v!ja}{\leftlabeltext{#1}}%
+ \def\currentlistsymbol% kan iets efficienter met \ifdone
+ {\doifvalue{\??li#1\c!label}\v!ja{\leftlabeltext{#1}}%
\strut
\def\numberseparator{\getvalue{\??li#1\c!scheider}}%
\@EA\dohandlelistnumber\@EA{\splitlistsymbol}%
\getvalue{\??li#1\c!afsluiter}%
- \doifvalue{\??li#1\c!label}{\v!ja}{\rightlabeltext{#1}}}]}
+ \doifvalue{\??li#1\c!label}\v!ja{\rightlabeltext{#1}}}]}
\def\@@dodolijstelement{dodolijstelement}
@@ -349,9 +377,9 @@
%\showcomposition
\let\@@iabreedte\!!zeropoint % moet boolean worden
\bgroup
- \edef\lijstelementen%
+ \edef\lijstelementen
{\getvalue{\??li#1\c!paginaovergangen}}%
- \ExpandBothAfter\doifinset{#3}{\lijstelementen}%
+ \ExpandBothAfter\doifinset{#3}\lijstelementen
{\showmessage{\m!systems}{14}{#3}%
\pagina}%
\egroup
@@ -363,14 +391,13 @@
\def\dolistattributes#1#2#3%
{\doifvaluesomething{\??li#1#3}
- %{\setupinteraction[\c!kleur=,\c!contrastkleur=]}%
{\resetinteractionparameter\c!kleur
\resetinteractionparameter\c!contrastkleur}%
\doattributes{\??li#1}{#2}{#3}}
\def\dodocommandlijstelement#1#2#3#4#5#6%
{\doifdefinedelse{\??li#1\c!commando}
- {\getvalue{\??li#1\c!commando}
+ {\getvalue{\??li#1\c!commando}%
{#3}{#4}{\paginaprefix\??li#1[#5]\translatednumber[#5]}}
{[#1: #3 - #4 - \paginaprefix\??li#1[#5]\translatednumber[#5]]}}
@@ -379,7 +406,7 @@
{\noindent % new and needed
\hbox
{\doifelsevalue{\??li#1\c!interactie}{##1} % \??li ipv \??ia
- {\setbox0=\hbox{\showcontrastlocation{\??li#1}{#6}{##2}}%
+ {\setbox0\hbox{\showcontrastlocation{\??li#1}{#6}{##2}}%
\linklisttoelement{#1}{#2}{#5}{#6}{\box0}}%{\copy0}}%
{##2}}}%
\getvalue{\??li#1\c!voor}% can be \hskip
@@ -396,13 +423,13 @@
\makelijstelement\v!alles
{\makelijstelement\v!sectienummer
{\dolistattributes{#1}\c!nummerletter\c!nummerkleur
- {\getvalue{\??li#1\c!nummercommando}{\listsymbol}}}%
+ {\getvalue{\??li#1\c!nummercommando}{\currentlistsymbol}}}%
\makelijstelement\v!tekst
{\dolistattributes{#1}\c!tekstletter\c!tekstkleur
{\let\\=\newlineinlist
\dontconvertfont
\getvalue{\??li#1\c!tekstcommando}{#4}}}%
- \doifvalue{\??li#1\c!paginanummer}{\v!ja}
+ \doifvalue{\??li#1\c!paginanummer}\v!ja
{\doifsomething{#5}
{\makelijstelement\v!paginanummer
{\dolistattributes{#1}\c!paginaletter\c!paginakleur
@@ -428,10 +455,10 @@
\leftskip\getvalue{\??li#1\c!marge}% na de \endgraf !
\getvalue{\??li#1\c!voor}%
\!!widthc\getvalue{\??li#1\c!afstand}%
- \doifelsevalue{\??li#1\c!breedte}{\v!passend}
+ \doifelsevalue{\??li#1\c!breedte}\v!passend
{\!!widtha\zeropoint}
{\doifelsenothing{#3}
- {\doifelsevalue{\??li#1\c!titeluitlijnen}{\v!ja}
+ {\doifelsevalue{\??li#1\c!titeluitlijnen}\v!ja
{\!!widtha\zeropoint
\!!widthc\zeropoint}
{\!!widtha\getvalue{\??li#1\c!breedte}}}
@@ -440,22 +467,22 @@
\endgraf
\def\makelijstelement##1##2%
{\doifelsevalue{\??li#1\c!interactie}{##1}
- {\setbox0=\hbox{\showcontrastlocation{\??ia}{#6}{##2}}%
+ {\setbox0\hbox{\showcontrastlocation\??ia{#6}{##2}}%
\linklisttoelement{#1}{#2}{#5}{#6}{\box0}}%{\copy0}}%
{\hbox{##2}}}%
- \doifvalue{\??li#1\c!interactie}{\v!tekst} % not supported
+ \doifvalue{\??li#1\c!interactie}\v!tekst % not supported
{\setlistparameter{#1}\c!interactie\v!alles}%
\makelijstelement\v!alles
{\hbox to \hsize
- {\dostartattributes{\??li#1}\c!letter\c!kleur{}% new
+ {\dostartattributes{\??li#1}\c!letter\c!kleur\empty
\!!widthb\hsize
- \setbox2=\hbox \ifdim\!!widtha>\zeropoint to \!!widtha \fi
+ \setbox2\hbox \ifdim\!!widtha>\zeropoint to \!!widtha \fi
{\makelijstelement\v!sectienummer
{\dolistattributes{#1}\c!nummerletter\c!nummerkleur
- {\getvalue{\??li#1\c!nummercommando}{\listsymbol}}%
+ {\getvalue{\??li#1\c!nummercommando}{\currentlistsymbol}}%
\hfill}}%
- \setbox4=\hbox
- {\doifvalue{\??li#1\c!paginanummer}{\v!ja}
+ \setbox4\hbox
+ {\doifvalue{\??li#1\c!paginanummer}\v!ja
{\doifsomething{#5} % \lijstwidth is new ; temp hack
{\hbox \ifdim\lijstwidth>\zeropoint to \lijstwidth\fi
{\hfill
@@ -466,13 +493,13 @@
\translatednumber[#5]}}}}}}}%
\vbox
{\hsize\!!widthb
-\expanded{\steluitlijnenin[\getvalue{\??li#1\c!uitlijnen}]}%
+ \expanded{\steluitlijnenin[\getvalue{\??li#1\c!uitlijnen}]}%
\ifdim\!!widtha<\hsize
\hangindent=\wd2
\dimen2=\!!widthc % \getvalue{\??li#1\c!afstand}%
- \advance\hangindent by \dimen2
+ \advance\hangindent \dimen2
\hangafter=1
-\doifvalue{\??li#1\c!hang}{\v!nee}{\hangafter=0 }%
+ \doifvalue{\??li#1\c!hang}\v!nee{\hangafter\zerocount}%
\ifdim\wd4=\zeropoint % \ifvoid4
% we kunnen gewoon afbreken aan het eind
\else
@@ -482,7 +509,7 @@
\fi
\fi
\else
- \dimen2=\zeropoint
+ \dimen2\zeropoint
\fi
\parindent\zeropoint\relax
\leavevmode
@@ -498,7 +525,7 @@
\ifdim\wd4=\zeropoint\relax % \ifvoid4
% \ifdim\!!widtha<\hsize \hfill\strut \fi % spoils align
\else
- \nobreak\hskip.5em\lijstfill
+ \nobreak\lijstfill
\box4\relax
\relax
\fi}%
@@ -521,35 +548,35 @@
\ifvmode
\noindent\leavevmode % leavevmode ? ? ?
\fi
- \doifvalue{\??li#1\c!interactie}{\v!tekst} % not supported
+ \doifvalue{\??li#1\c!interactie}\v!tekst % not supported
{\setlistparameter{#1}\c!interactie\v!sectienummer}%
- \doifvalue{\??li#1\c!interactie}{\v!alles} % not supported
+ \doifvalue{\??li#1\c!interactie}\v!alles % not supported
{\setlistparameter{#1}\c!interactie\v!sectienummer}%
\def\makelijstelement##1##2%
{\doifelsevalue{\??li#1\c!interactie}{##1}
- {\setbox0=\hbox{\showcontrastlocation{\??ia}{#6}{##2}}%
+ {\setbox0\hbox{\showcontrastlocation\??ia{#6}{##2}}%
\linklisttoelement{#1}{#2}{#5}{#6}{\box0}}%{\copy0}}%
{\hbox{##2}}}%
\setbox4=\hbox
- {\doifvalue{\??li#1\c!paginanummer}{\v!ja}
+ {\doifvalue{\??li#1\c!paginanummer}\v!ja
{\doifsomething{#5}
{\makelijstelement\v!paginanummer
{\dolistattributes{#1}\c!paginaletter\c!paginakleur
{\getvalue{\??li#1\c!paginacommando}
{\paginaprefix\??li#1[#5]%
\translatednumber[#5]}}}}}}%
-\donetrue
-\doifnothing{#3}{\doifvaluenothing{\??li#1\c!symbool}{\donefalse}}%
-\ifdone
- \hbox
- {\getvalue{\??li#1\c!links}%
- \makelijstelement\v!sectienummer
- {\dolistattributes{#1}\c!nummerletter\c!nummerkleur
- {\getvalue{\??li#1\c!nummercommando}{\listsymbol}}}%
- \getvalue{\??li#1\c!rechts}%
- \hskip.5em}%
- \nobreak
-\fi
+ \donetrue
+ \doifnothing{#3}{\doifvaluenothing{\??li#1\c!symbool}\donefalse}%
+ \ifdone
+ \hbox
+ {\getvalue{\??li#1\c!links}%
+ \makelijstelement\v!sectienummer
+ {\dolistattributes{#1}\c!nummerletter\c!nummerkleur
+ {\getvalue{\??li#1\c!nummercommando}{\currentlistsymbol}}}%
+ \getvalue{\??li#1\c!rechts}%
+ \hskip.5em}%
+ \nobreak
+ \fi
\tolerance3500 % niet zomaar veranderen
\dolistattributes{#1}\c!tekstletter\c!tekstkleur
{\let\\=\newlineinlist
@@ -592,9 +619,9 @@
\hbox
{#1% in case E nils the strut
\let\\=\newlineinlist
- \setbox0=\hbox
- {#2{\showcontrastlocation{\??ia}{#8}
- {\dostartattributes{\??li#3}\c!letter\c!kleur{}%
+ \setbox0\hbox
+ {#2{\showcontrastlocation\??ia{#8}%
+ {\dostartattributes{\??li#3}\c!letter\c!kleur\empty
\ignorespaces\dontconvertfont\setstrut
\begstrut
\doifelsenothing{\??li#3\c!maxbreedte}
@@ -659,9 +686,8 @@
\let\dolijstelement\dolijstelementX
\dostellijstin[#1][#2]%
\dogetcommalistelement1\from#1\to\commalistelement
- \dosettoclevel{\getvalue{\??li\commalistelement\c!criterium}}%
- \setbox0=\vbox
- {\doutilities{#1}{\jobname}{#1}{}{\par}}%
+ \dosettoclevel\??li\commalistelement
+ \setbox0\vbox{\doutilities{#1}\jobname{#1}\relax\par}%
\xdef\utilitylistheight{\the\ht0}%
\xdef\utilitylistwidth {\the\wd0}%
\endgroup
@@ -735,18 +761,18 @@
% \let\doschrijfnaarreferentielijst=\gobblethreearguments
\stelreferentielijstin[#1][#2,\c!status=\v!stop]%
\dogetcommalistelement1\from#1\to\commalistelement
- \dosettoclevel{\getvalue{\??rl\commalistelement\c!criterium}}%
- \doutilities{#1}{\jobname}{#1}{}{\par}%
+ \dosettoclevel\??rl\commalistelement
+ \doutilities{#1}\jobname{#1}\relax\par
\endgroup}
\def\plaatsreferentielijst%
{\dodoubleempty\doplaatsreferentielijst}
\def\doschrijfnaarreferentielijst#1#2#3%
- {\doifvalue{\??rl#1\c!status}{\v!start}
+ {\doifvalue{\??rl#1\c!status}\v!start
{\begingroup
\makesectionformat
- \doifelse{\@@nmstatus}{\v!start}
+ \doifelse{\@@nmstatus}\v!start
{\def\dopaginanummer{\noexpand\pagenumber}}
{\def\dopaginanummer{0}}%
\edef\schrijfwegnaarlijst%
@@ -772,7 +798,7 @@
\def\schrijfnaarreferentielijst[#1]#2% #1=class #2=data #3=visualization
{\dowithnextbox
- {\doifelsevalue{\??rl#1\c!status}{\v!start}
+ {\doifelsevalue{\??rl#1\c!status}\v!start
{\doglobal\increment\referencecounter % must be resolved due to #2
\referentiebutton
{\box\nextbox
@@ -822,48 +848,21 @@
\def\stelsamengesteldelijstin%
{\dodoubleargument\dostelsamengesteldelijstin}
-% \def\doplaatssamengesteldelijst[#1][#2]%
-% {\begingroup
-% \getparameters[\??ih#1][#2]%
-% \dosettoclevel{\getvalue{\??ih#1\c!criterium}}%
-% \edef\samengesteldelijst{\getvalue{\??ih#1\c!lijst}}% om voorlopig nog
-% \stripspaces\from\samengesteldelijst\to\samengesteldelijst % compatible te
-% \ExpandFirstAfter\doifnumberelse{\getvalue{\??ih#1\c!niveau}}% blijven
-% {\!!counta=\getvalue{\??ih#1\c!niveau}% met de vorige implementatie
-% \advance\!!counta by 1\relax% accepteren we ook nummers (0==deel)
-% \getfromcommacommand[\samengesteldelijst][\!!counta]%
-% \edef\maximumlijst{\commalistelement}}%
-% {\edef\maximumlijst{\getvalue{\??ih#1\c!niveau}}}%
-% \!!counta=\getvalue{\??se\getvalue{\??ko\maximumlijst \c!sectie}\c!niveau}%
-% \let\!!stringa=\samengesteldelijst
-% \let\samengesteldelijst=\empty
-% \def\docommando##1%
-% {\ifnum\getvalue{\??se\getvalue{\??ko##1\c!sectie}\c!niveau}>\!!counta
-% \else
-% \addtocommalist{##1}\samengesteldelijst
-% \fi}%
-% \processcommacommand[\!!stringa]\docommando
-% \doifvalue{\??ih#1\c!koppeling}{\v!aan}
-% {\startlistreferences{#1}}%
-% \ExpandFirstAfter\dodoplaatssamengesteldelijst[\samengesteldelijst][#2]%
-% \stoplistreferences{#1}%
-% \endgroup}
-
\def\doplaatssamengesteldelijst[#1][#2]%
{\begingroup
\getparameters[\??ih#1][#2]%
- \dosettoclevel{\getvalue{\??ih#1\c!criterium}}%
+ \dosettoclevel\??ih{#1}%
\edef\samengesteldelijst{\getvalue{\??ih#1\c!lijst}}%
%\stripspaces\from\samengesteldelijst\to\samengesteldelijst
- \doifelsevalue{\??ih#1\c!niveau}{\v!huidige} % criterium=vorige,niveau=huidige
+ \doifelsevalue{\??ih#1\c!niveau}\v!huidige % criterium=vorige,niveau=huidige
{\!!counta=0\@@koniveau} % hm: \@@koniveau
{\fullexpandoneargafter\doifnumberelse{\getvalue{\??ih#1\c!niveau}}% in verband
- {\!!counta=\getvalue{\??ih#1\c!niveau}% met de vorige implementatie
- \advance\!!counta by 1 % accepteren we ook nummers (0==deel)
+ {\!!counta\getvalue{\??ih#1\c!niveau}% met de vorige implementatie
+ \advance\!!counta \plusone % accepteren we ook nummers (0==deel)
\getfromcommacommand[\samengesteldelijst][\!!counta]%
\edef\maximumlijst{\commalistelement}}%
{\edef\maximumlijst{\getvalue{\??ih#1\c!niveau}}}%
- \!!counta=\getvalue{\??se\getvalue{\??ko\maximumlijst\c!sectie}\c!niveau}}%
+ \!!counta\getvalue{\??se\getvalue{\??ko\maximumlijst\c!sectie}\c!niveau}}%
\let\!!stringa\samengesteldelijst
\let\samengesteldelijst\empty
\def\docommando##1%
@@ -872,7 +871,7 @@
\addtocommalist{##1}\samengesteldelijst
\fi}%
\processcommacommand[\!!stringa]\docommando
- \doifvalue{\??ih#1\c!koppeling}{\v!aan}
+ \doifvalue{\??ih#1\c!koppeling}\v!aan
{\startlistreferences{#1}}%
\ExpandFirstAfter\dodoplaatssamengesteldelijst[\samengesteldelijst][#2]%
\stoplistreferences{#1}%
@@ -882,7 +881,7 @@
\def\dodoplaatssamengesteldelijst[#1][#2]%
{\dobeginoflist
\dostellijstin[#1][#2]%
- \doutilities{#1}{\jobname}{#1}{}{\par}%
+ \doutilities{#1}\jobname{#1}\relax\par
\doendoflist}
\def\dovolledigesamengesteldelijst[#1][#2]%
@@ -945,16 +944,16 @@
\def\showremaininglistlength%
{\bgroup
- \ifnum\listlengthcounter>1
- \scratchdimen=\pagetotal
- \setbox\scratchbox=\vbox
+ \ifnum\listlengthcounter>\plusone
+ \scratchdimen\pagetotal
+ \setbox\scratchbox\vbox
{\@@llvoor\par\hbox{\strut}\par\hbox{\strut}\par\@@llna}
- \advance\scratchdimen by \ht\scratchbox
- \advance\scratchdimen by \dp\scratchbox
+ \advance\scratchdimen \ht\scratchbox
+ \advance\scratchdimen \dp\scratchbox
\ifdim\scratchdimen>\pagegoal
\@@llvoor
\nobreak\hbox to \hsize
- {\doifnot{\@@llnummer}{\v!ja}{\let\listlengthcounter\empty}%
+ {\doifnot\@@llnummer\v!ja{\let\listlengthcounter\empty}%
\doattributes\??ll\c!letter\c!kleur{\@@lllinks\listlengthcounter\@@llrechts}}
\@@llna
\fi
@@ -964,5 +963,5 @@
\stelreferentielijstin
[\c!letter=\v!normaal]
-
+
\protect \endinput
diff --git a/tex/context/base/core-ltb.tex b/tex/context/base/core-ltb.tex
new file mode 100644
index 000000000..03d314a7e
--- /dev/null
+++ b/tex/context/base/core-ltb.tex
@@ -0,0 +1,742 @@
+%D \module
+%D [ file=core-ltb,
+%D version=2002.10.31,
+%D title=\CONTEXT\ Core Macros,
+%D subtitle=Line Tables,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\beginTEX
+ \expandafter \endinput
+\endTEX
+
+% Experimental, undocumented, and currently only ETeX.
+
+% \BH \BC .. \EC \BC .. \EC \EH % append
+% \BR \BC .. \EC \BC .. \EC \ER
+%
+% or
+%
+% \NC .. \NC .. \NC \NR (todo: optional last \NC)
+
+% alternative:
+%
+% (1) direct run, save content in macro, but only if needed
+%
+% todo
+%
+% (2) buffered table content
+%
+% \startbuffer
+% \startlinetablehead
+% \stoplinetablehead
+% \startlinetablebody
+% \stoplinetablebody
+% \stopbuffer
+%
+% \processlinetablebuffer[buffer]
+%
+% in buffer : head and body
+%
+% (3) unbuffered run, multipass
+%
+% - run with starting width zero / prev run
+% - clip on prev run
+% - flush real widths
+
+\writestatus{loading}{Context Core Macros / Line Tables}
+
+\unprotect
+
+\chardef\linetablesplitstatus\zerocount
+\chardef\linetableheadstatus \zerocount
+
+\edef\??ler{\??le:r:}
+\edef\??lec{\??le:c:}
+\edef\??lew{\??le:w:}
+
+\newif\iflinetablepreroll
+\newif\ifinlinetable
+
+\newcount\linetablecolumn
+\newcount\linetablesubcol
+\newdimen\linetablewidth
+\newdimen\linetableheight
+\newbox \linetablecell
+
+\let\noflinetablecolumns\!!zerocount
+\let\noflinetablerows \!!zerocount
+\let\noflinetablelines \!!zerocount
+\let\noflinetableparts \!!zerocount
+\let\linetablepart \!!plusone
+\let\linetablestep \!!plusone
+\let\linetableline \!!zerocount
+\let\linetablerow \!!zerocount
+\let\linetablerows \!!zerocount
+
+\initializetablebox \zerocount % holds repeater
+
+\chardef\linetablehmode \zerocount
+\chardef\linetablepage \zerocount
+\chardef\linetablerepeat\zerocount
+
+\def\setuplinetable
+ {\dotripleempty\dosetuplinetable}
+
+\def\dosetuplinetable[#1][#2][#3]%
+ {\ifthirdargument
+ \getparameters[\??le:#1:#2][#3]%
+ \else\ifsecondargument
+ \getparameters[\??lec#1][#2]%
+ \else
+ \getparameters[\??le][#1]%
+ \fi\fi}
+
+\setuplinetable
+ [\c!n=\!!maxcard,
+ \c!regels=\!!maxcard,
+ \c!nx=\plusone,
+ \c!nlinks=0,
+ \c!herhaal=\v!ja, % when \c!nlinks>0, repeat on both pages
+ \c!voor=,
+ \c!na=,
+ \c!tussen=\pagina,
+ \c!afstand=\zeropoint,
+ \c!rek=\v!nee,
+ \c!uitlijnen=\c!rechts,
+ \c!linkeroffset=.25ex,
+ \c!rechteroffset=\linetableparameter\c!linkeroffset,
+ \c!maxbreedte=\zeropoint,
+ \c!breedte=5em,
+ \c!hoogte=\v!passend, % \v!regel = faster
+ \c!achtergrond=,
+ \c!achtergrondkleur=]
+
+\def\linetableparameter#1%
+ {\csname\??le#1\endcsname}
+
+\def\doifelselinetablecparameter#1%
+ {\ifcsname\??lec\number\linetablecolumn#1\endcsname
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+\def\linetablecparameter#1%
+ {\csname
+ \ifcsname\??lec\number\linetablecolumn#1\endcsname
+ \??lec\number\linetablecolumn
+ \else
+ \??le
+ \fi
+ #1\endcsname}
+
+\def\linetablerparameter#1% faster, leaner and meaner
+ {\csname
+ \ifnum\linetablerow=\zerocount % geen ifcase
+ \ifcsname\??ler\v!hoofd#1\endcsname
+ \??ler\v!hoofd#1%
+ \else\ifcsname\??ler0#1\endcsname
+ \??ler0#1%
+ \else
+ \s!empty
+ \fi\fi
+ \else
+ \ifcsname\??ler\number\linetablerow#1\endcsname
+ \??ler\number\linetablerow#1%
+ \else\ifcsname\??ler\v!oddeven\linetablerow#1\endcsname
+ \??ler\v!oddeven\linetablerow#1%
+ \else
+ \s!empty
+ \fi\fi
+ \fi
+ \endcsname}
+
+\def\setnoftableslines
+ {\doifelse{\linetableparameter\c!regels}\v!passend
+ {% nearly the same as core-tab, so same bugs
+ \ifdim\pagegoal<\maxdimen
+ \scratchdimen\pagegoal
+ \advance\scratchdimen -\pagetotal
+ \else
+ \scratchdimen\teksthoogte
+ \fi
+ \advance\scratchdimen -\dp\strutbox
+ \ifdim\prevdepth<\maxdimen\ifdim\prevdepth>\zeropoint
+ \global\advance\scratchdimen -\dp\strutbox
+ \global\advance\scratchdimen -\parskip
+ \fi\fi
+ \getrawnoflines\scratchdimen
+ \xdef\noflinetablelines{\the\noflines}}
+ {\xdef\noflinetablelines{\linetableparameter\c!regels}}}
+
+\def\startlinetablecell
+ {\dosingleempty\dostartlinetablecell}
+
+\def\dostartlinetablecell[#1]%
+ {\global\setbox\linetablecell\hbox\bgroup
+ \iffirstargument
+ \getparameters[\??lec\number\linetablecolumn][#1]%
+ \fi
+ \xdef\linetablestep{\linetablecparameter\c!nx}%
+ \ifcase\linetablestep\or
+ \scratchdimen\linetablecparameter\c!breedte
+ \else
+ \scratchdimen\zeropoint
+ \scratchcounter\linetablecolumn
+ \dorecurse\linetablestep
+ {\advance\scratchdimen\linetablecparameter\c!breedte
+ \global\advance\linetablecolumn\plusone}%
+ \global\linetablecolumn\scratchcounter
+ \fi
+ \chardef\linetablemode
+ \iflinetablepreroll
+ \ifdim\scratchdimen>\zeropoint \zerocount \else \plustwo \fi
+ \else
+ \zerocount
+ \fi
+ \ifcase\linetablemode
+ \ifcase\linetablehmode
+ % nothing
+ \or
+ % fit, keep it simple
+ \or
+ \chardef\linetablemode\plusone % line
+ \else
+ % some already calculated height
+ \fi
+ \fi
+ \setbox\scratchbox\hbox
+ \bgroup
+ \dontcomplain
+ \hskip\linetablecparameter\c!linkeroffset\relax
+ % 0 = width, unknown height
+ % 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
+ \dosetraggedcommand{\linetablecparameter\c!uitlijnen}%
+ \vtop \ifdim\linetableheight>\zeropoint to\linetableheight \fi \bgroup
+ \hsize\scratchdimen
+ \raggedcommand
+ \else
+ \setalignmentswitch{\linetablecparameter\c!uitlijnen}%
+ \hbox \ifcase\linetablemode \or to\scratchdimen \fi \bgroup
+ \ifcase\alignmentswitch\hss\or\hss\fi
+ \fi
+ \dostartattributes{\??lec\number\linetablecolumn}\c!letter\c!kleur\empty
+ \begstrut \ignorespaces}
+
+\def\stoplinetablecell
+ {\unskip \endstrut
+ \dostopattributes
+ \ifcase\linetablemode
+ \endgraf
+ \else
+ \ifcase\alignmentswitch\else\hss\fi
+ \fi
+ \egroup
+ \hskip\linetablecparameter\c!rechteroffset
+ \egroup
+ \iflinetablepreroll
+ \box\scratchbox
+ \else
+ \doif{\linetablecparameter\c!achtergrond}\v!kleur
+ {\backgroundline[\linetablecparameter\c!achtergrondkleur]}%
+ {\box\scratchbox}%
+ \fi
+ \egroup}
+
+\def\savelinetablepart
+ {\global\setbox\tablebox\linetablepart
+ \ifnum\linetablepart=\zerocount
+ \box\scratchbox % just storing
+ \else
+ \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
+ \endgraf
+ \linetablerparameter\c!na}%
+ \fi}
+
+\def\flushlinetableparts
+ {\doglobal\increment\linetableline
+ \ifnum\linetableline<\noflinetablelines
+ % keep collecting
+ \else
+ \iflinetablepreroll
+ % forget about them
+ \else
+ \doifelse{\linetableparameter\c!regels}\v!passend
+ {\scratchdimen\pagetotal}
+ {\scratchdimen\zeropoint}%
+ \dorecurse\noflinetableparts
+ {\let\linetablepart\recurselevel
+ \ifdim\scratchdimen>\zeropoint
+ \ifnum\recurselevel>\plusone
+ \setbox\scratchbox\vbox to \scratchdimen{\vss}%
+ \dp\scratchbox\strutdepth
+ \wd\scratchbox\hsize
+ \box\scratchbox
+ \else
+ \obeydepth
+ \fi
+ \fi
+ \dp\tablebox\linetablepart\strutdepth
+ \hbox to \hsize{\box\tablebox\linetablepart\hss}%
+ \ifnum\linetablepart<\noflinetableparts\relax
+ \linetableparameter\c!tussen
+ \fi}%
+ \ifnum\linetablerows<\noflinetablerows\relax
+ \linetableparameter\c!tussen
+ \else
+ % after, later
+ \fi
+ \chardef\linetableheadstatus\plusthree
+ \global\setbox\tablebox\zerocount\emptybox % here
+ \fi
+ % 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
+ \ifdim\scratchdimen>\linetableparameter\c!rek\else
+ \setbox\scratchbox\hbox to \hsize{\unhbox\scratchbox}%
+ \fi
+ \fi
+ \fi}
+
+\def\checklinetablepart
+ {\global\advance\linetablewidth\wd\linetablecell
+ \global\advance\linetablecolumn\linetablestep
+ \global\advance\linetablesubcol\linetablestep
+ \relax
+ %\message{\the\linetablecolumn,\the\linetablesubcol}\wait
+ % from now on the column counter is already incremented
+ \ifcase\linetablesplitstatus
+ \iflinetablepreroll \else
+ \box\linetablecell
+ % the columncounter is one ahead !
+ \hskip\linetablecparameter\c!afstand
+ \fi
+%%%
+ \donefalse
+ \ifcase\linetablerepeat\else
+ % van te voren berekenen
+ \scratchcounter\linetablecolumn\advance\scratchcounter-2
+ \ifnum\linetablerepeat=\scratchcounter
+ \donetrue % collecting repeater
+ \fi
+ \fi
+%%%%
+ \ifdone
+ % collecting repeater
+ \else
+ \ifnum\linetablecolumn>\getvalue{\??le::\linetablepart}\relax
+ \donetrue
+ \fi
+ \fi
+ \ifdone
+ \stoplinetablepart
+ \iflinetablepreroll \else
+ \savelinetablepart
+ \fi
+ \ifcase\linetablepage \or
+ \global\chardef\linetablepage \plustwo
+ \else
+ \global\chardef\linetablepage \plusone
+ \fi
+ \doglobal\increment\linetablepart
+ \global\linetablewidth\wd\tablebox\zerocount
+ \startlinetablepart
+ \fi
+ \else
+ \donefalse
+\!!doneafalse
+ \ifcase\linetablerepeat\else
+ % van te voren berekenen
+ \scratchcounter\linetablecolumn \advance\scratchcounter-2
+ \ifnum\linetablerepeat=\scratchcounter
+ \donetrue % collecting repeater
+ \fi
+ \fi
+ \ifdone
+\!!doneatrue
+ % collecting repeater
+ \else\ifdim\linetablewidth>\hsize
+ \donetrue
+ \else
+ \global\advance\linetablewidth\linetablecparameter\c!afstand\relax
+ \ifdim\linetablewidth>\hsize % ?
+ \donetrue
+ \fi
+ \fi\fi
+ \ifdone
+ \stoplinetablepart
+ \savelinetablepart
+ \ifcase\linetablepage \or
+ \global\chardef\linetablepage \plustwo
+ \else
+ \global\chardef\linetablepage \plusone
+ \fi
+ \doglobal\increment\linetablepart
+ \ifnum\linetablepart>\noflinetableparts
+ \globallet\noflinetableparts\linetablepart
+ \initializetablebox\linetablepart
+ \fi
+ \global\linetablewidth\wd\linetablecell
+ \startlinetablepart
+ \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
+ \iflinetablepreroll\kern\wd\else\unhcopy\fi\tablebox\zerocount
+ \fi
+ \fi \fi
+ \fi
+ \iflinetablepreroll \else
+ \box\linetablecell
+ % the columncounter is one ahead !
+ \hskip\linetablecparameter\c!afstand
+ \hfill
+ \fi
+ \fi}
+
+% \linetableparameter\c!var -> \@@levar (when no classes)
+
+\def\startlinetablerun % to do: quit when nested
+ {\bgroup
+ \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=\zerocount]}]% max stretch
+ \chardef\linetablerepeat\linetableparameter\c!nlinks
+ \chardef\linetablesplitstatus % =
+ \ifdim\linetableparameter\c!maxbreedte>\zeropoint
+ \zerocount \else \plusone
+ \fi
+ % optional prevdepth correction
+ \iflinetablepreroll
+ \globallet\noflinetablerows\!!zerocount
+ \else
+ \linetableparameter\c!voor
+ \fi
+ \globallet\linetablerows\!!zerocount
+ \globallet\noflinetablecolumns\!!zerocount
+ \globallet\noflinetableparts\!!zerocount
+ \!!counta\zerocount
+ \def\docommando##1%
+ {\doglobal\increment\noflinetableparts
+ \advance\!!counta##1%
+ \setxvalue{\??le::\noflinetableparts}{\the\!!counta}}%
+ \processcommacommand[\linetableparameter\c!n]\docommando
+ \initializetableboxes\noflinetableparts
+ \ifcase\linetablerepeat
+ \globallet\linetablepart\!!plusone
+ \else
+ \globallet\linetablepart\!!zerocount % repeater
+ \fi
+ \globallet\linetablestep\!!plusone
+ \globallet\linetableline\!!zerocount
+ \globallet\linetablerow \!!zerocount
+ \global\linetablecolumn \zerocount
+ \global\linetablesubcol \zerocount
+ \global\linetablewidth \zeropoint
+ \setnoftableslines
+ \checklinetablepage
+ \let\BR\linetableBR
+ \let\ER\linetableER
+ \let\BH\linetableBR
+ \let\EH\linetableER
+ \let\BC\linetableBC
+ \let\EC\linetableEC
+ \let\NC\linetableNC
+ \let\NR\linetableNR
+ \flushlinetablehead}
+
+\def\stoplinetablerun
+ {\globallet\linetableline\!!maxcard
+ \chardef\linetableheadstatus\zerocount % blocked
+ \flushlinetableparts
+ \iflinetablepreroll \else
+ \linetableparameter\c!na
+ \fi
+ \globallet\linetablepart \!!zerocount
+ \globallet\noflinetableparts\!!zerocount
+ \egroup}
+
+\def\checklinecolumnwidth
+ {\ifundefined{\??lew\number\linetablecolumn}%
+ \donetrue
+ \else\ifdim\getvalue{\??lew\number\linetablecolumn}<\wd\linetablecell
+ \donetrue
+ \else
+ \donefalse
+ \fi\fi
+ \ifdone
+ \setxvalue{\??lew\number\linetablecolumn}{\the\wd\linetablecell}%
+ \fi}
+
+\def\checklinecolumnwidth
+ {\ifcsname\??lew\number\linetablecolumn\endcsname
+ \ifdim\csname\??lew\number\linetablecolumn\endcsname<\wd\linetablecell
+ \donetrue
+ \else
+ \donefalse
+ \fi
+ \else
+ \donetrue
+ \fi
+ \ifdone
+ \setxvalue{\??lew\number\linetablecolumn}{\the\wd\linetablecell}%
+ \fi}
+
+\def\checklinecolumnwidth
+ {\expandafter\xdef\csname\??lew\number\linetablecolumn\endcsname
+ {\expandafter\ifx\csname\??lew\number\linetablecolumn\endcsname\relax
+ \the\wd\linetablecell
+ \else\ifdim\csname\??lew\number\linetablecolumn\endcsname<\wd\linetablecell
+ \the\wd\linetablecell
+ \else
+ \csname\??lew\number\linetablecolumn\endcsname
+ \fi\fi}}
+
+\def\linetableER
+ {\dosingleempty\dolinetableBR}
+
+\def\dolinetableBR[#1]% #1 not yet implemented
+ {\ifnum\linetableheadstatus=1\else
+ \doglobal\increment\linetablerow
+ \doglobal\increment\linetablerows
+ \fi
+ \global\linetablecolumn\plusone
+ \global\linetablesubcol\plusone
+ \xdef\linetableheight{\linetablerparameter\c!hoogte}%
+%
+% \ifx\linetableheight\empty
+% % nothing
+% \else\ifx\linetableheight\v!passend
+% % keep it simple
+% \else\ifx\linetableheight\v!regel
+% \chardef\linetablemode\plusone
+% \else
+% \!!heighta\linetableheight
+% \advance\!!heighta-\strutdepth
+% \fi\fi\fi
+%
+ \linetableheight\zeropoint
+ \edef\!!stringa{\linetablerparameter\c!hoogte}%
+ \ifx\!!stringa\empty
+ \chardef\linetablehmode\zerocount
+ \else\ifx\!!stringa\v!passend
+ \chardef\linetablehmode\plusone
+ \else\ifx\!!stringa\v!regel
+ \chardef\linetablehmode\plustwo
+ \else
+ \linetableheight\!!stringa
+ \advance\linetableheight-\strutdepth
+ \fi\fi\fi
+%
+ \startlinetablepart}
+
+\def\linetableBC
+ {\startlinetablecell}
+
+\def\linetableEC
+ {\stoplinetablecell
+ \iflinetablepreroll
+ \checklinecolumnwidth
+ \fi
+ \checklinetablepart}
+
+\def\linetableER
+ {\stoplinetablecell
+ % no \box\linetablecell, i.e. dummy columnn, last \NC \NR
+ \stoplinetablepart
+ \savelinetablepart
+ \advance\linetablecolumn \minusone
+ \ifnum\linetablecolumn>\noflinetablecolumns
+ \xdef\noflinetablecolumns{\number\linetablecolumn}%
+ \fi
+ \flushlinetableparts
+ \global\linetablecolumn\zerocount
+ \global\linetablewidth \zeropoint
+ \ifcase\linetablerepeat
+ \globallet\linetablepart\!!plusone
+ \else
+ \globallet\linetablepart\!!zerocount % repeater
+ \fi
+ \checklinetablepage
+ \flushlinetablehead}
+
+\def\checklinetablepage
+ {\global\chardef\linetablepage\zerocount
+ \ifcase\linetablerepeat \else \ifcase\linetablepage
+ \doif{\linetableparameter\c!herhaal}\v!nee
+ {\global\chardef\linetablepage\doifoddpageelse\plusone\plustwo}%
+ \fi \fi}
+
+\def\flushlinetablehead
+ {\ifcase\linetableheadstatus
+ % 0 blocked
+ \or
+ % 1 doing head
+ \or
+ % 2 head done
+ \or
+ % 3 trigger flush
+ \chardef\linetableheadstatus\plusone
+ \the\@@linetablehead\relax
+ \chardef\linetableheadstatus\plustwo
+ \fi}
+
+\def\linetableNC % first time special treatment
+ {\relax
+ \ifcase\linetablecolumn
+ \linetableBR
+ \else
+ \linetableEC
+ \fi
+ \linetableBC}
+
+\def\linetableNR
+ {\linetableER}
+
+\def\startlinetable
+ {\startlinetablerun}
+
+\def\stoplinetable
+ {\stoplinetablerun}
+
+\def\startlinetableanalysis
+ {\bgroup
+ \linetableprerolltrue
+ \trialtypesettingtrue
+ \startlinetablerun}
+
+\def\stoplinetableanalysis
+ {\stoplinetablerun
+ \egroup
+ \globallet\noflinetablerows\linetablerows
+ \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
+
+\newtoks \@@linetablehead
+
+\long\def\startlinetablehead#1\stoplinetablehead
+ {\ifinlinetable
+ \@@linetablehead\emptytoks
+ \fi
+ \chardef\linetableheadstatus3 % full
+ \@@linetablehead{#1}%
+ \ifinlinetable
+ \flushlinetablehead
+ \fi}
+
+\def\linetableBH
+ {\ifx\EC\relax
+ % signal, grabbing lines
+ \else
+ \@@linetablehead\emptytoks
+ \fi
+ \pushmacro\BC
+ \pushmacro\EC
+ \def\BC##1\EC{\appendtoks##1\to\@@linetablehead}%
+ \let\EC\relax} % signal
+
+\def\linetableEH
+ {\popmacro\EC
+ \popmacro\BC
+ \@EA\startlinetablehead\the\@@linetablehead\stoplinetablehead}
+
+\let\startlinetablebody\donothing
+\let\stoplinetablebody \donothing
+
+\def\processlinetablebuffer
+ {\dosingleempty\doprocesslinetablebuffer}
+
+\def\doprocesslinetablebuffer[#1]%
+ {\bgroup
+ \let\startlinetable\donothing
+ \let\stoplinetable \donothing
+ \startlinetableanalysis\getbuffer[#1]\stoplinetableanalysis
+ \startlinetablerun \getbuffer[#1]\stoplinetablerun
+ \egroup}
+
+\def\processlinetablefile#1%
+ {\bgroup
+ \let\startlinetable\donothing
+ \let\stoplinetable \donothing
+ \startlinetableanalysis\readfile{#1}\donothing\donothing\stoplinetableanalysis
+ \startlinetablerun \readfile{#1}\donothing\donothing\stoplinetablerun
+ \egroup}
+
+\protect \endinput
+
+\doifnotmode{demo}{\endinput}
+
+\setuplinetable[n=6,m={2,2,2},regels=25]
+
+\setuplinetable[c][1][width=2cm,background=color,backgroundcolor=red]
+\setuplinetable[c][4][width=3cm,background=color,backgroundcolor=yellow]
+\setuplinetable[c][6][width=3cm,background=color,backgroundcolor=magenta]
+\setuplinetable[r][odd][background=color,backgroundcolor=gray]
+\setuplinetable[r][even][background=color,backgroundcolor=green]
+
+\starttext
+
+\showframe \showstruts
+
+\setupcolors[state=start]
+
+\setuppagenumbering[alternative=doublesided]\page[left]
+
+\startlinetable
+\NC aaa\crlf aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR
+\dorecurse{100}
+ {\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR}
+\stoplinetable
+
+\startlinetable
+\NC[style=slanted,color=green,background=color,backgroundcolor=darkred,nx=2,uitlijnen=middle] xxx
+ \NC yy \NC ddddd \NC eeee \NC ff \NC \NR
+\dorecurse{100}
+ {\NC aaa \NC bb \NC c \NC ddddd \NC eeee \NC ff \NC \NR}
+\stoplinetable
+
+\stoptext
diff --git a/tex/context/base/core-mak.tex b/tex/context/base/core-mak.tex
index 3f081f466..efc09452d 100644
--- a/tex/context/base/core-mak.tex
+++ b/tex/context/base/core-mak.tex
@@ -34,10 +34,10 @@
#2]%
\setvalue{\e!plaats#1}{\doplaats[\??pl#1]}}
-\def\definieerplaats%
+\def\definieerplaats
{\dodoubleempty\dodefinieerplaats}
-\def\doplaats%
+\def\doplaats
{\dodoubleempty\dodoplaats}
\def\dodoplaats[#1][#2]% correctie moet mooier
@@ -46,14 +46,14 @@
{\setlocalhsize
\getparameters[#1][#2]%
\getvalue{#1\c!voor}%
- \doifvalue{#1\c!regelcorrectie} {\v!aan} {\startbaselinecorrection}%
- \doifinset{\getvalue{#1\c!marge}}{\v!standaard,\v!ja}{\noindent}%
+ \doifvalue{#1\c!regelcorrectie}\v!aan \startbaselinecorrection
+ \doifinset{\getvalue{#1\c!marge}}{\v!standaard,\v!ja}\noindent
\hbox to \localhsize
{\getvalue{#1\c!links}%
\box\nextbox
\getvalue{#1\c!rechts}}%
- \doifvalue{#1\c!dieptecorrectie} {\v!aan} {\baselinecorrection}%
- \doifvalue{#1\c!regelcorrectie} {\v!aan} {\stopbaselinecorrection}%
+ \doifvalue{#1\c!dieptecorrectie}\v!aan\baselinecorrection
+ \doifvalue{#1\c!regelcorrectie }\v!aan\stopbaselinecorrection
\getvalue{#1\c!na}%
\egroup}
\vbox}
diff --git a/tex/context/base/core-mar.tex b/tex/context/base/core-mar.tex
index 4768caefe..84841cfae 100644
--- a/tex/context/base/core-mar.tex
+++ b/tex/context/base/core-mar.tex
@@ -15,8 +15,8 @@
\unprotect
-\prependtoks \getallmarks \to \everybeforepagebody % TEX
-\prependtoks \setallmarks \to \everyafterpagebody % ETEX
+\prependtoks \getallmarks \to \everybeforepagebody
+\prependtoks \setallmarks \to \everyafterpagebody % currently \relax
% voor 'interne' doeleinden zijn beschikbaar:
%
@@ -67,14 +67,14 @@
\def\doresetmarkering[#1]%
{\processcommalist[#1]\fastresetmarker}
-\def\resetmarkering%
+\def\resetmarkering
{\dosingleargument\doresetmarkering}
\def\dostelmarkeringin[#1][#2]%
{\def\docommando##1{\getparameters[\??mk##1][#2]}%
\processcommalist[#1]\docommando}
-\def\stelmarkeringin%
+\def\stelmarkeringin
{\dodoubleargument\dostelmarkeringin}
% betere protectie
@@ -92,14 +92,14 @@
\ontkoppelmarkering[#1]% % no coupling with sections
\setevalue{\??mk#1\c!koppeling}{#2}%
\expandafter\newmark\csname\??mk#2\endcsname
- \showmessage{\m!systems}{13}{#1,[#2]}}
+ \showmessage\m!systems{13}{#1,[#2]}}
\def\dodefinieermarkering[#1][#2]%
{\doifelsenothing{#2}
{\dododefinieermarkering[#1][#1]}
{\dododefinieermarkering[#1][#2]}}
-\def\definieermarkering%
+\def\definieermarkering
{\dodoubleempty\dodefinieermarkering}
\let\geenmarkering=\relax
@@ -143,7 +143,7 @@
\fetchtwomarks[#1]}
\def\dohaalmarkering[#1][#2]%
- {\doifvalue{\??mk#1\c!status}{\v!start}
+ {\doifvalue{\??mk#1\c!status}\v!start
{\bgroup
\def\geenmarkering##1{\unknown\ }%
\setfullsectionnumber{\??mk#1}%
@@ -189,7 +189,7 @@
\endETEX
-\def\marking%
+\def\marking
{\dosingleargument\domarking}
%D Used in placing text lines.
@@ -218,3 +218,34 @@
{\unhbox\collectedmarks\setmark{#1}{#2}}}
\protect \endinput
+
+% Pseudo marks: (for Hraban)
+%
+% \def\RegisterPageMark#1#2%
+% {\iftrialtypesetting \else
+% \doglobal\increment\NameCounter
+% \textreference[#1:t:\NameCounter]{#2}%
+% \doifreferencefoundelse{#1:t:\NameCounter}
+% {\doifundefined{#1:f:\currentrealreference}%
+% {\setxvalue{#1:f:\currentrealreference}%
+% {\noexpand\in[#1:t:\NameCounter]}}%
+% \setxvalue{#1:l:\currentrealreference}%
+% {\noexpand\in[#1:t:\NameCounter]}}%
+% {}%
+% \fi}
+%
+% \def\GetFirstOnPage#1{\getvalue{#1:f:\realfolio}}
+% \def\GetLastOnPage #1{\getvalue{#1:l:\realfolio}}
+%
+% \setupheadertexts[\GetFirstOnPage{Name}][\GetLastOnPage{Name}]
+%
+% \starttext
+%
+% \def\Name#1{\RegisterPageMark{Name}{#1}#1}
+% \def\TestLine#1{\NC test \NC \Name {test: #1} \NC \NR}
+%
+% \starttabulate
+% \dorecurse{100}{\expanded{\TestLine{\recurselevel}}}
+% \stoptabulate
+%
+% \stoptext
diff --git a/tex/context/base/core-mat.tex b/tex/context/base/core-mat.tex
index 4c85f1511..549218563 100644
--- a/tex/context/base/core-mat.tex
+++ b/tex/context/base/core-mat.tex
@@ -17,6 +17,17 @@
\unprotect
+\def\mathortext
+ {\ifmmode
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+% force text mode, will be overloaded later
+
+\ifx\text\undefined \let\text\hbox \fi
+
% will move to page-ini
\newevery \everybeginofpar \EveryBeginOfPar
@@ -84,10 +95,10 @@
\def\setdisplayskip#1#2#3% obsolete
{#1=#2\relax
- \advance#1 by -\parskip
- \advance#1 by -#3\relax}
+ \advance#1 -\parskip
+ \advance#1 -#3\relax}
-\def\setdisplayskips% obsolete
+\def\setdisplayskips % obsolete
{\setdisplayskip\abovedisplayskip \abovedisplayskipsize \!!zeropoint
\setdisplayskip\belowdisplayskip \belowdisplayskipsize \!!zeropoint
\setdisplayskip\abovedisplayshortskip\abovedisplayshortskipsize\baselineskip
@@ -95,11 +106,11 @@
% so far for unused stuff
-\def\forgetdisplayskips% to do
- {\abovedisplayskip \!!zeropoint
- \belowdisplayskip \!!zeropoint
- \abovedisplayshortskip\!!zeropoint
- \belowdisplayshortskip\!!zeropoint}
+\def\forgetdisplayskips % to do
+ {\abovedisplayskip \zeropoint
+ \belowdisplayskip \zeropoint
+ \abovedisplayshortskip\zeropoint
+ \belowdisplayshortskip\zeropoint}
\definieernummer % \doorlabelen
[\v!formule]
@@ -108,7 +119,7 @@
\c!blokwijze=\@@fmblokwijze,
\c!plaats=\v!intekst]
-\def\setupformulas%
+\def\setupformulas
{\dodoubleargument\getparameters[\??fm]}
\newconditional\handleformulanumber
@@ -121,18 +132,18 @@
\verhoognummer[\v!formule]%
\fi
\maakhetnummer[\v!formule]%
- \setbox0=\hbox{\ignorespaces#2\unskip}%
+ \setbox0\hbox{\ignorespaces#2\unskip}%
\ifdim\wd0>\zeropoint
\edef\hetsubnummer{#2}%
\else
\let\hetsubnummer\empty
\fi
\doifsomething{#1}{\rawreference{\s!for}{#1}{\hetnummer\hetsubnummer}}%
- \setbox0=\hbox{\ignorespaces#4\unskip}%
+ \setbox0\hbox{\ignorespaces#4\unskip}%
\ifdim\wd0>\zeropoint
\edef\hetsubnummer{#4}%
\fi
- \doifsomething{#3}{\rawreference{\s!for}{#3}{\hetnummer\hetsubnummer}}%
+ \doifsomething{#3}{\rawreference\s!for{#3}{\hetnummer\hetsubnummer}}%
\rm % nodig ?
\@@fmnummercommando
{\dostartattributes\??fm\c!nummerletter\c!nummerkleur
@@ -149,7 +160,7 @@
\def\dodoformulenummer[#1][#2][#3]%
{\doquadruplegroupempty\dododoformulenummer{#1}{#2}{#3}}
-\def\doformulenummer%
+\def\doformulenummer
{\dotripleempty\dodoformulenummer}
\setvalue{\e!start\e!formule}{\dostartformula{}}
@@ -167,12 +178,10 @@
\c!springvolgendein,\c!variant,
\c!strut,\c!uitlijnen,\c!afstand]%
\setupformulas[#1][#2]%
- \setvalue{\e!start#1\e!formule}%
- {\dostartformula{#1}}%
- \setvalue{\e!stop #1\e!formule}%
- {\dostopformula}}}
+ \setvalue{\e!start#1\e!formule}{\dostartformula{#1}}%
+ \setvalue{\e!stop #1\e!formule}{\dostopformula}}}
-\def\setupformulas%
+\def\setupformulas
{\dodoubleempty\dosetupformulas}
\def\dosetupformulas[#1][#2]%
@@ -211,16 +220,16 @@
\def\displaygridsnapping{\getvalue{\??fm\currentformula\c!grid}}
\def\beforedisplayspace
- {\doifnotvalue{\??fm\currentformula\c!voorwit}{\v!geen}
+ {\doifnotvalue{\??fm\currentformula\c!voorwit}\v!geen
{\blanko[\getvalue{\??fm\currentformula\c!voorwit}]}}
\def\afterdisplayspace
- {\doifnotvalue{\??fm\currentformula\c!nawit}{\v!geen}
+ {\doifnotvalue{\??fm\currentformula\c!nawit}\v!geen
{\blanko[\getvalue{\??fm\currentformula\c!nawit}]}}
\def\setpredisplaysize#1%
- {\predisplaysize=#1\relax
- \ifdim\predisplaysize>\!!zeropoint
+ {\predisplaysize#1\relax
+ \ifdim\predisplaysize>\zeropoint
\advance\predisplaysize \predisplaysizethreshhold
\fi
\advance\predisplaysize \displayindent % needed ?
@@ -228,11 +237,11 @@
\predisplaysize\hsize
\fi}
-\def\setdisplaydimensions%
- {\displayindent=\leftdisplayskip
+\def\setdisplaydimensions
+ {\displayindent\leftdisplayskip
\advance\displayindent\leftdisplaymargin
- \displaywidth=\hsize
- \ifdim\hangindent>\!!zeropoint
+ \displaywidth\hsize
+ \ifdim\hangindent>\zeropoint
\advance\displayindent\hangindent
\else
\advance\displaywidth\hangindent
@@ -243,8 +252,12 @@
\newif\ifoptimizedisplayspacing
-\def\dostartformula#1% setting leftskip adaption is slow !
+\def\dostartformula#1%
+ {\dodoubleempty\dodostartformula[#1]}
+
+\def\dodostartformula[#1][#2]% setting leftskip adaption is slow !
{\bgroup
+ \switchtoformulabodyfont[#2]%
\def\currentformula{#1}%
\doifvaluesomething{\??fm\currentformula\c!marge}% so we test first
{\dosetleftskipadaption{\getvalue{\??fm\currentformula\c!marge}}%
@@ -258,7 +271,7 @@
\forgetdisplayskips
\let\setdisplayskips\relax
\ifoptimizedisplayspacing
- \ifdim\lastlinewidth>\!!zeropoint\relax
+ \ifdim\lastlinewidth>\zeropoint
\abovedisplayshortskip-\ht\strutbox\relax
\fi
\else
@@ -266,57 +279,36 @@
\fi
\getvalue{\e!start\getvalue{\??fm\currentformula\c!variant}\e!formule}}
+\def\switchtoformulabodyfont{\switchtobodyfont}
+
+\setvalue{\e!formule}{\dosingleempty\doformula}
+
+\def\doformula[#1]#2%
+ {\begingroup
+ \switchtoformulabodyfont[#1]%
+ % not : \def\doformula[##1]##2{\mathematics{##2}}%
+ \mathematics{#2}%
+ \endgroup}
+
\let\doplaceformulanumber\empty
-\def\dostopformula%
+\def\dostopformula
{\doplaceformulanumber
\getvalue{\e!stop\getvalue{\??fm\currentformula\c!variant}\e!formule}%
- \egroup
- \resetlastlinewidth
- \nonoindentation
- \doifvalue{\??fm\currentformula\c!springvolgendein}{\v!nee}
- {\noindentation}}
+ \resetlastlinewidth
+ \nonoindentation
+ \doifvalue{\??fm\currentformula\c!springvolgendein}\v!nee\noindentation
+ \egroup}
\newif\ifinformula
-% \def\startdisplaymath%
-% {\ifgridsnapping
-% \beforedisplayspace
-% \snaptogrid[\displaygridsnapping]\vbox
-% \bgroup
-% \informulatrue
-% \forgetall
-% \else
-% \bgroup
-% \informulatrue
-% %\forgetall % otherwise backgrounds fail
-% \ifdim\lastskip<\!!zeropoint\else
-% \par\ifvmode\ifdim\parskip>\!!zeropoint\relax\vskip-\parskip\fi\fi
-% \fi
-% \beforedisplayspace
-% \par\ifvmode\vbox{\strut}\vskip-2\baselineskip\fi
-% \fi
-% $$\setdisplaydimensions
-% \setpredisplaysize\lastlinewidth
-% \startinnermath}
-%
-% \def\stopdisplaymath%
-% {\stopinnermath
-% $$%
-% \ifgridsnapping
-% \else
-% \par\ifvmode\ifdim\parskip>\zeropoint\vskip-\parskip\fi\fi
-% \fi
-% \afterdisplayspace
-% \egroup}
-
-\def\startdisplaymath%
+\def\startdisplaymath
{\ifgridsnapping
\beforedisplayspace
\snapmathtogrid\vbox
\bgroup
\informulatrue
- \forgetall
+ %\forgetall % breaks side floats
\else
\bgroup
\informulatrue
@@ -331,7 +323,7 @@
\setpredisplaysize\lastlinewidth
\startinnermath}
-\def\stopdisplaymath%
+\def\stopdisplaymath
{\stopinnermath
$$%
\ifgridsnapping
@@ -372,7 +364,7 @@
\def\moveformula
{\dosingleempty\domoveformula}
-\def\domoveformula[#1]%
+\def\domoveformula[#1]% brr gaat mogelijk fout
{\ifgridsnapping
\iffirstargument
\xdef\displaygridcorrection{#1}%
@@ -380,13 +372,13 @@
\gdef\displaygridcorrection{-\v!boven}% handy with short preline
\fi
\else
- \gdef\displaygridcorrection{\displaygridsnapping}
+ \gdef\displaygridcorrection{\displaygridsnapping}%
\fi}
\let\startinnermath\empty
\let\stopinnermath \empty
-\def\defineformulaalternative%
+\def\defineformulaalternative
{\dotripleargument\dodefineformulaalternative}
\def\dodefineformulaalternative[#1][#2][#3]%
@@ -415,14 +407,12 @@
\definieerformule
[mp]
- [%\c!voorwit=,\c!nawit=,
- \c!springvolgendein=\v!nee,
+ [\c!springvolgendein=\v!nee,
\c!variant=multi]
\definieerformule
[md]
- [%\c!voorwit=,\c!nawit=,
- \c!springvolgendein=\v!ja,
+ [\c!springvolgendein=\v!ja,
\c!variant=multi]
% in m-math
@@ -448,30 +438,61 @@
% \plaatsformule {f} \startspformule \fakespacingformula \stopspformule
% \fakewords{20}{40}
-\def\plaatsformule%
+% \convertcommand\next\to\ascii \getfirstcharacter\ascii
+% \ifx\firstcharacter\letterbackslash % a \cs
+
+\def\plaatsformule
{\settrue\incrementformulanumber
\dodoubleempty\doplaatsformule}
-\def\plaatssubformule%
+\def\plaatssubformule
{\setfalse\incrementformulanumber
\dodoubleempty\doplaatsformule}
+% \def\doplaatsformule[#1][#2]% #2 = dummy, gobbles spaces
+% {\def\redoplaatsformule
+% {\bgroup\def\dostartformula####1{\relax}%
+% \ifx\next\bgroup
+% \@EA\moreplaatsformule % [ref]{}
+% \else\if\next\relax % a \cs
+% \egroup \@EA\@EA\@EA\dodoplaatsformule % [ref]\start
+% \else
+% \egroup \@EA\@EA\@EA\dispplaatsformule % [ref]$$
+% \fi\fi
+% [#1]{}}%
+% \futurelet\next\redoplaatsformule}
+%
+% \long\def\moreplaatsformule[#1]#2#3#4% #2 dummy #4 gobbles spaces
+% {\def\redoplaatsformule%
+% {\if\next\relax % a \cs
+% \egroup \expandafter\dodoplaatsformule % [ref]{}\start
+% \else
+% \egroup \expandafter\dispplaatsformule % [ref]{}$$
+% \fi
+% [#1]{#3}}%
+% \futurelet\next\redoplaatsformule#4}
+
\def\doplaatsformule[#1][#2]% #2 = dummy, gobbles spaces
- {\def\redoplaatsformule%
+ {\def\redoplaatsformule
{\bgroup\def\dostartformula####1{\relax}%
\ifx\next\bgroup
\@EA\moreplaatsformule % [ref]{}
- \else\if\next\relax % a \cs
- \egroup \@EA\@EA\@EA\dodoplaatsformule % [ref]\start
\else
- \egroup \@EA\@EA\@EA\dispplaatsformule % [ref]$$
- \fi\fi
+ \convertcommand\next\to\ascii
+ \getfirstcharacter\ascii
+ \ifx\firstcharacter\letterbackslash % a \cs
+ \egroup \@EAEAEA\dodoplaatsformule % [ref]\start
+ \else
+ \egroup \@EAEAEA\dispplaatsformule % [ref]$$
+ \fi
+ \fi
[#1]{}}%
\futurelet\next\redoplaatsformule}
\long\def\moreplaatsformule[#1]#2#3#4% #2 dummy #4 gobbles spaces
- {\def\redoplaatsformule%
- {\if\next\relax % a \cs
+ {\def\redoplaatsformule
+ {\convertcommand\next\to\ascii \getfirstcharacter\ascii
+ \ifx\firstcharacter\letterbackslash % a \cs
\egroup \expandafter\dodoplaatsformule % [ref]{}\start
\else
\egroup \expandafter\dispplaatsformule % [ref]{}$$
@@ -492,15 +513,15 @@
{\setfalse\handleformulanumber}
{\settrue\handleformulanumber}}%
\ifconditional\handleformulanumber
- \def\formulenummer%
+ \def\formulenummer
{%\global\let\subformulenummer\doformulenummer % no, bug
\doformulenummer[#1][#2]}%
- \def\subformulenummer%
+ \def\subformulenummer
{\setfalse\incrementformulanumber
\formulenummer}%
- \gdef\doplaceformulanumber%
+ \gdef\doplaceformulanumber
{\global\let\doplaceformulanumber\empty
- \doifelse{\@@fmplaats}{\v!links}
+ \doifelse\@@fmplaats\v!links
{\normalleqno{\doformulenummer[#1][#2][]{}}}
{\normalreqno{\doformulenummer[#1][#2][]{}}}}%
\else
@@ -533,13 +554,13 @@
%D \type {\stopinnermath} can be overloaded in specialized
%D modules.
-\def\startinnermath%
+\def\startinnermath
{\getvalue{\e!start\??fm\getvalue{\??fm\currentformula\c!uitlijnen}}}
-\def\stopinnermath%
+\def\stopinnermath
{\getvalue{\e!stop \??fm\getvalue{\??fm\currentformula\c!uitlijnen}}}
-\def\mathinnerstrut%
+\def\mathinnerstrut
{\doifvalue{\??fm\currentformula\c!strut}{\v!ja}{\strut}}
\long\def\defineinnermathhandler#1#2#3%
@@ -548,7 +569,7 @@
\newif\iftracemath
-\def\mathhbox%
+\def\mathhbox
{\iftracemath\ruledhbox\else\hbox\fi}
\def\startmathbox#1#2%
@@ -725,6 +746,21 @@
%D We already redefined \type {\bordermatrix} in \type
%D {font-ini}.
+%D \macros
+%D {setuptextformulas}
+%D
+%D This command sets up in||line math. Most features deals
+%D with grid snapping and are experimental.
+
+\newevery \everysetuptextformulas \relax
+
+\def\setuptextformulas
+ {\dosingleempty\dosetuptextformulas}
+
+\def\dosetuptextformulas[#1]%
+ {\getparameters[\??mt][#1]%
+ \the\everysetuptextformulas}
+
%D \macros
%D {super, sub}
%D
@@ -740,7 +776,7 @@
\newevery\everysupersub \EverySuperSub
-\appendtoks \advance\supersubmode by 1 \to \everysupersub
+\appendtoks \advance\supersubmode \plusone \to \everysupersub
% \def\dodosuper#1{\normalsuper{\the\everysupersub#1}}
% \def\dodosuber#1{\normalsuber{\the\everysupersub#1}}
@@ -750,9 +786,101 @@
%
% \def\super{\futurelet\next\dosuper}
% \def\suber{\futurelet\next\dosuber}
+%
+% \def\super#1{\normalsuper{\the\everysupersub#1}}
+% \def\suber#1{\normalsuber{\the\everysupersub#1}}
+
+\appendtoks
+ \gridsupsubstyle
+\to \everysupersub
+
+\appendtoks
+ \doifelse\@@mtformaat\v!klein
+ {\let\gridsupsubstyle \scriptscriptstyle
+ \let\gridsupsubbodyfont \setsmallbodyfont}%
+ {\let\gridsupsubstyle \scriptstyle
+ \let\gridsupsubbodyfont \relax}%
+\to \everysetuptextformulas
+
+\setuptextformulas
+ [\c!formaat=\v!normaal]
+
+\def\dogridsupsub#1#2%
+ {\begingroup
+ \setbox\nextbox\iftracegridsnapping\ruledhbox\else\hbox\fi
+ {\gridsupsubbodyfont
+ $\strut^{\the\everysupersub#1}_{\the\everysupersub#2}$}%
+ \nextboxht\strutheight
+ \nextboxdp\strutdepth
+ \box\nextbox
+ \endgroup}
+
+\def\gridsupsub
+ {\ifconditional\crazymathsnapping
+ \ifgridsnapping
+ \@EAEAEA\dogridsupsub
+ \else
+ \@EAEAEA\normalsupsub
+ \fi
+ \else
+ \@EA\normalsupsub
+ \fi}
+
+\def\normalsupsub#1#2%
+ {^{\the\everysupersub#1}_{\the\everysupersub#2}}
-\def\super#1{\normalsuper{\the\everysupersub#1}}
-\def\suber#1{\normalsuber{\the\everysupersub#1}}
+\appendtoks
+ \let\gridsupsubstyle \relax
+ \let\gridsupsubbodyfont\relax
+ \let\gridsupsub \normalsupsub
+\to \everydisplay
+
+\def\super#1{^{\the\everysupersub#1}}
+\def\suber#1{_{\the\everysupersub#1}}
+\def\supsub#1#2{\super{#1}\suber{#2}}
+\def\subsup#1#2{\suber{#1}\super{#2}}
+
+%\def\super#1{\gridsupsub{#1}{}} %
+%\def\suber#1{\gridsupsub{}{#1}} %
+%
+%\def\supsub#1#2{\gridsupsub{#1}{#2}}
+%\def\subsup#1#2{\gridsupsub{#2}{#1}}
+
+\def\gridsuper#1{\gridsupsub{#1}{}}
+\def\gridsuber#1{\gridsupsub{}{#1}}
+
+% \let\sup\super % math char
+% \let\sub\suber
+
+% test set:
+%
+% \startbuffer
+% \sform{x\frac{1}{2}}
+% \sform{x\sup{\frac{1}{2}} + x\sup{2} + 2}
+% \sform{x\supsub{\frac{1}{2}}{\frac{1}{2}} + x\sup{2} + 2}
+% \stopbuffer
+%
+% \typebuffer
+%
+% \startlines
+% \getbuffer
+% \stoplines
+%
+% \startbuffer
+% $x\frac{1}{2}$
+% $x\sup{\frac{1}{2}} + x^2 + 2$
+% $x\supsub{\frac{1}{2}}{\frac{1}{2}} + x^2 + 2$
+% \stopbuffer
+%
+% \typebuffer
+%
+% \start
+% \enablesupersub
+% \enableautomath
+% \startlines
+% \getbuffer
+% \stoplines
+% \stop
%D \macros
%D {enablesupersub}
@@ -763,20 +891,267 @@
\bgroup
\catcode`\^=\@@active
\catcode`\_=\@@active
-\gdef\enablesupersub%
+\gdef\enablesupersub
{\catcode`\^=\@@active
\def^{\ifmmode\expandafter\super\else\expandafter\normalsuper\fi}%
\catcode`\_=\@@active
\def_{\ifmmode\expandafter\suber\else\expandafter\normalsuber\fi}}
\egroup
+%D \macros
+%D {enableautomath}
+%D
+%D The next one can be dangerous, but handy in controlled
+%D situations.
+
+\bgroup \catcode`\$=\active
+
+\gdef\enableautomath
+ {\catcode`\$=\active
+ \def$##1${\snappedinlineformula{##1}}}
+
+% \gdef\enableautomath
+% {\catcode`\$=\active
+% \def${\doifnextcharelse$\doautodmath\doautoimath}%
+% \def\doautoimath##1${\snappedinlineformula{##1}}%
+% \def\doautodmath$##1$${\startformula##1\stopformula}}
+
+\egroup
+
+%D \macros
+%D {...}
+%D
+%D New and experimental: snapping big inline math!
+
+\newconditional\halfcrazymathlines % \settrue\halfcrazymathlines
+\newconditional\crazymathsnapping % \settrue\crazymathsnapping
+
+\appendtoks
+ \doifelse\@@mtgrid\v!ja
+ {\settrue \crazymathsnapping }{\setfalse\crazymathsnapping}%
+ \doifelse\@@mtstap\v!halveregel
+ {\settrue \halfcrazymathlines}{\setfalse\halfcrazymathlines}%
+\to \everysetuptextformulas
+
+\setuptextformulas
+ [\c!grid=\v!ja,
+ \c!stap=\v!regel]
+
+\newcount\crazymathhack
+
+\let\lastcrazymathline \!!zeropoint
+\let\lastcrazymathpage \!!zerocount
+\let\lastcrazymathprelines \!!zerocount
+\let\lastcrazymathpostlines\!!zerocount
+
+\def\crazymathtag{amh:\the\crazymathhack}
+\def\crazytexttag{\v!tekst:\lastcrazymathpage}
+
+\def\crazymathindent{\hskip\MPx\crazymathtag\hskip-\MPx\crazytexttag}
+
+\def\flushcrazymathbox
+ {\nextboxht\strutheight
+ \nextboxdp\strutdepth
+ \hbox{\iftracegridsnapping\ruledhbox\fi{\flushnextbox}}}
+
+% possible pdftex bug:
+%
+% \dorecurse{100}{gest \vadjust {\strut} \par} \page
+% \dorecurse{100}{gest \vadjust pre {\strut} \par} \page
+%
+% duplicate depth compensation with pre
+
+\def\snappedinlineformula
+ {\dosingleempty\dosnappedinlineformula}
+
+\def\dosnappedinlineformula[#1]#2%
+ {\ifvmode\dontleavehmode\fi % tricky
+ \strut % prevents funny space at line break
+ \begingroup % interesting: \bgroup can make \vadjust disappear
+ \ifconditional\crazymathsnapping
+ \ifgridsnapping
+ \ifx\pdftexversion\undefined
+ \donefalse
+ \else
+ \checktextbackgrounds % we need pos tracking, to be made less redundant
+ \donetrue
+ \fi
+ \else
+ \donefalse
+ \fi
+ \else
+ \donefalse
+ \fi
+ \ifdone
+ \setbox\nextbox\hbox{$#2$}%
+ \ifdim\nextboxht>\strutheight\relax
+ \donetrue
+ \else\ifdim\nextboxdp>\strutdepth\relax
+ \donetrue
+ \else
+ \donefalse
+ \fi\fi
+ \fi
+ \ifdone
+ \ifdim\nextboxht<\lineheight\relax
+ \ifdim\nextboxdp<\strutheight\relax
+ \donetrue
+ \else
+ \donefalse
+ \fi
+ \else
+ \donefalse
+ \fi
+ \ifdone
+ \flushcrazymathbox
+ \else
+ \doif{#1}-{\settrue \halfcrazymathlines}%
+ \doif{#1}+{\setfalse\halfcrazymathlines}%
+ \global\advance\crazymathhack\plusone
+ \donefalse
+ \ifnum\MPp\crazymathtag=\lastcrazymathpage\relax
+ \ifdim\MPy\crazymathtag=\lastcrazymathline\relax
+ \donetrue
+ \fi
+ \fi
+ \ifnum\MPp\crazymathtag=\zerocount \donefalse \fi
+ \ifdim\MPy\crazymathtag=\zeropoint \donefalse \fi
+ \ifdone
+ % same page and same line
+ \else
+ \global\let\lastcrazymathprelines \!!zerocount
+ \global\let\lastcrazymathpostlines\!!zerocount
+ \xdef\lastcrazymathpage{\MPp\crazymathtag}%
+ \xdef\lastcrazymathline{\MPy\crazymathtag}%
+ \fi
+ \getrawnoflines\nextboxht
+ \scratchcounter\noflines
+ \advance\noflines-\lastcrazymathprelines\relax
+ \ifnum\noflines>\zerocount
+ \xdef\lastcrazymathprelines{\the\scratchcounter}%
+ \scratchdimen\noflines\lineheight
+ \ifconditional\halfcrazymathlines
+ \advance\scratchdimen-.5\lineheight
+ \fi
+ \advance\scratchdimen-\strutdepth
+ \setbox\scratchbox\null
+ \wd\scratchbox2\bodyfontsize
+ \ht\scratchbox\scratchdimen
+ \dp\scratchbox\strutdepth
+ % % correct for fuzzy top of page situations
+ % \scratchdimen\lastcrazymathprelines\lineheight
+ % \advance\scratchdimen\MPy\crazymathtag
+ % \advance\scratchdimen\lineheight
+ % \advance\scratchdimen\topskip
+ % \advance\scratchdimen-\strutheight
+ % \dimen0=\MPy\crazytexttag
+ % \advance\dimen0 \MPh\crazytexttag
+ % \advance\scratchdimen-\dimen0\relax
+ % % do we need correction at all
+ % \ifdim\scratchdimen>\strutdepth\relax
+ % \donefalse
+ % \else\ifdim\scratchdimen<\zeropoint
+ % \donefalse
+ % \else
+ % \donetrue
+ % \fi\fi
+ % % analysis done
+ % \donefalse
+ % \ifdone
+ % \edef\crazymathcorrection{\the\scratchdimen}%
+ % \advance\scratchdimen-\dp\scratchbox
+ % \dp\scratchbox-\scratchdimen
+ % \else
+ % \let\crazymathcorrection\zeropoint
+ % \fi
+ \normalvadjust pre
+ {%\allowbreak % sometimes breaks spacing
+ \forgetall
+ \crazymathindent
+ \iftracegridsnapping\ruledhbox\fi{\box\scratchbox}%
+ \endgraf
+ \nobreak}%
+ \else\ifnum\scratchcounter>\zerocount
+ \normalvadjust pre
+ {\nobreak}%
+ \fi\fi
+ \getrawnoflines\nextboxdp
+ \scratchcounter\noflines
+ \advance\noflines-\lastcrazymathpostlines\relax
+ \ifnum\noflines>\zerocount
+ \donetrue
+ \else\ifnum\lastcrazymathpostlines=\zerocount
+ \donetrue
+ \else
+ \donefalse
+ \fi\fi
+ \ifdone
+ \xdef\lastcrazymathpostlines{\the\scratchcounter}%
+ \ifnum\lastcrazymathpostlines=\zerocount
+ \global\let\lastcrazymathpostlines\!!plusone
+ \fi
+ \hbox{\setposition\crazymathtag\flushcrazymathbox}%
+ \scratchdimen\noflines\lineheight
+ \ifconditional\halfcrazymathlines
+ \advance\scratchdimen-.5\lineheight
+ \fi
+ \advance\scratchdimen+\strutheight
+ \setbox\scratchbox\null
+ \wd\scratchbox\bodyfontsize
+ \ht\scratchbox\scratchdimen
+ \dp\scratchbox\strutdepth
+ \normalvadjust
+ {\forgetall
+ \crazymathindent
+ \iftracegridsnapping\ruledhbox\fi{\box\scratchbox}%
+ \endgraf
+ \allowbreak}% else we stick below the text bottom
+ \else
+ \hbox{\setposition\crazymathtag\flushcrazymathbox}%
+ \fi
+ \fi
+ \else
+ \mathematics{#2}%
+ \fi
+ \endgroup}
+
+\let\tform\mathematics
+\let\gform\snappedinlineformula
+
+% test set:
+%
+% \startbuffer
+% Crazy math \sform {1+x} or \sform {\dorecurse {100} {1+} 1 =
+% 101} and even gore crazy \sform {2^{2^2}_{1_1}}
+% again\dorecurse {20} { and again} \sform {\sqrt {\frac
+% {x^{5^5}} {\frac {1} {2}}}} even gore\dorecurse {50} { and
+% gore} \iform {\dorecurse {12} {\sform {\sqrt {\frac
+% {x^{5^5}} {3}}}+\sform {\sqrt {\frac {x^{5^5}} {\frac {1}
+% {2}}}}+}x=10}\dorecurse{20} { super crazy math}: \iform
+% {\dorecurse {30} {\sform {\sqrt {\frac {x^{5^5}} {3}}}+
+% \sform {\sqrt {\frac {x^{5^5}} {\frac {1} {2}}}}+ }x = 10},
+% and we're\dorecurse {20} { done}!
+% \stopbuffer
+%
+% \setupcolors[state=start] \setuppapersize[S6][S6]
+%
+% \showgrid \tracegridsnappingtrue \showstruts
+%
+% \starttext
+% \setuplayout[grid=yes,lines=15]\getbuffer \page
+% \setuplayout[grid=yes,lines=16]\getbuffer \page
+% \setuplayout[grid=yes,lines=17]\getbuffer \page
+% \setuplayout[grid=yes,lines=18]\getbuffer \page
+% \setuplayout[grid=yes,lines=19]\getbuffer \page
+% \stoptext
+
%D \macro
%D {restoremathstyle}
%D
%D We can pick up the current math style by calling \type
%D {\restoremathstyle}.
-\def\restoremathstyle%
+\def\restoremathstyle
{\ifmmode
\ifcase\supersubmode
\textstyle
@@ -804,6 +1179,30 @@
{\scriptstyle #1}%
{\scriptscriptstyle#1}}
+%D Something similar can be used in the (re|)|definition
+%D of \type {\text}. This version is a variation on the one
+%D in the math module (see \type{m-math} and|/|or \type
+%D {m-newmat}).
+
+\unexpanded\def\mathtext
+ {\mathortext\domathtext\hbox}
+
+\def\domathtext#1%
+ {\mathchoice
+ {\dodomathtext\displaystyle\textface {#1}}%
+ {\dodomathtext\textstyle \textface {#1}}%
+ {\dodomathtext\textstyle \scriptface {#1}}%
+ {\dodomathtext\textstyle \scriptscriptface{#1}}}
+
+\def\dodomathtext#1#2#3% no \everymath !
+ %{\hbox{\everymath{#1}\switchtobodyfont [#2]#3}} % 15 sec
+ {\hbox{\everymath{#1}\setcurrentfontbody{#2}#3}} % 3 sec (no math)
+
+%D Because we may overload \type {\text} in other (structuring)
+%D macros, we say:
+
+\appendtoks \let\text\mathtext \to \everymath
+
%D \macros
%D {frac, xfrac, xxfrac}
%D
@@ -830,7 +1229,7 @@
%D \stoptypen
%D
%D The \type {\frac} macro kind of replaces the awkward \type
-%D {\over} primitive. Say that we habve the following formulas:
+%D {\over} primitive. Say that we have the following formulas:
%D
%D \startbuffer[sample]
%D test $\frac {1}{2}$ test $$1 + \frac {1}{2} = 1.5$$
@@ -875,9 +1274,27 @@
\def\dofrac#1#2#3{\relax\mathematics{{{#1{#2}}\over{#1{#3}}}}}
-\def\frac{\dofrac\mathstyle}
-\def\xfrac#1#2{\hbox{$\let\xfrac\xxfrac\dofrac\scriptstyle{#1}{#2}$}}
-\def\xxfrac#1#2{\hbox{$\dofrac\scriptscriptstyle{#1}{#2}$}}
+\def\frac {\dofrac\mathstyle}
+\def\xfrac #1#2{\begingroup
+ \let\xfrac\xxfrac
+ \dofrac\scriptstyle{#1}{#2}%
+ \endgroup}
+\def\xxfrac#1#2{\begingroup
+ \dofrac\scriptscriptstyle{#1}{#2}%
+ \endgroup}
+
+%D The \type {xx} variant looks still ugly, so maybe it's
+%D best to say:
+
+\def\xxfrac#1#2{\begingroup
+ \dofrac\scriptscriptstyle
+ {#1}{\raise.25ex\hbox{$\scriptscriptstyle#2$}}%
+ \endgroup}
+
+%D Something low level for scientific calculator notation:
+
+\def\scinot#1#2%
+ {#1\times10^{#2}}
%D The next macro, \type {\ch}, is \PPCHTEX\ aware. In
%D formulas one can therefore best use \type {\ch} instead of
diff --git a/tex/context/base/core-mis.tex b/tex/context/base/core-mis.tex
index b623961ea..b20f61b63 100644
--- a/tex/context/base/core-mis.tex
+++ b/tex/context/base/core-mis.tex
@@ -76,47 +76,47 @@
%D wouldn't you? It's there to warn \LATEX\ users that
%D something is wrong.
-\def\documentstyle%
- {\showmessage{\m!systems}{3}{}\stoptekst}
+\def\documentstyle
+ {\showmessage\m!systems3\empty\stoptekst}
\let\documentclass=\documentstyle
% THIS WAS MAIN-002.TEX
-%\def\checkinterlineskip%
+%\def\checkinterlineskip
% {\ifvmode
-% \ifdim\lastskip>\!!zeropoint\relax
+% \ifdim\lastskip>\zeropoint
% \nointerlineskip
-% \else\ifdim\lastkern>\!!zeropoint\relax
+% \else\ifdim\lastkern>\zeropoint
% \nointerlineskip
% \fi\fi
% \fi}
\def\horitems#1#2% #1=breedte #2=commandos
- {\dimen0=#1\relax
- \divide\dimen0 by \nofitems
- \!!counta=0\relax
+ {\scratchdimen#1%
+ \divide\scratchdimen \nofitems
+ \!!counta\zerocount
\def\docommando##1%
- {\advance\!!counta by 1\relax
+ {\advance\!!counta \plusone
\processaction
[\@@isuitlijnen]
- [ \v!links=>\hbox to \dimen0{\strut##1\hss},
- \v!rechts=>\hbox to \dimen0{\hss\strut##1},
- \v!midden=>\hbox to \dimen0{\hss\strut##1\hss},
- \v!marge=>\ifnum\!!counta=1\hss\else\hfill\fi
+ [ \v!links=>\hbox to \scratchdimen{\strut##1\hss},
+ \v!rechts=>\hbox to \scratchdimen{\hss\strut##1},
+ \v!midden=>\hbox to \scratchdimen{\hss\strut##1\hss},
+ \v!marge=>\ifnum\!!counta=\plusone\hss\else\hfill\fi
\strut##1%
\ifnum\!!counta=\nofitems\hss\else\hfill\fi,
- \s!default=>\hbox to \dimen0{\hss\strut##1\hss}, % midden
- \s!unknown=>\hbox to \dimen0{\strut##1\hss}]}% % links
+ \s!default=>\hbox to \scratchdimen{\hss\strut##1\hss}, % midden
+ \s!unknown=>\hbox to \scratchdimen{\strut##1\hss}]}% % links
\hbox to #1{\hss#2\hss}}
\def\veritems#1#2% #1=breedte #2=commandos
- {\dimen0=#1\relax
+ {\scratchdimen#1%
\def\docommando##1%
- {\ifdim\dimen0<\!!zeropoint\relax % the - was a signal
- \hbox to -\dimen0{\hss\strut##1}%
- \else\ifdim\dimen0>\!!zeropoint\relax
- \hbox to \dimen0{\strut##1\hss}%
+ {\ifdim\scratchdimen<\zeropoint % the - was a signal
+ \hbox to -\scratchdimen{\hss\strut##1}%
+ \else\ifdim\scratchdimen>\zeropoint
+ \hbox to \scratchdimen{\strut##1\hss}%
\else
\hbox{\strut##1}%
\fi\fi}%
@@ -124,35 +124,33 @@
\def\dostelitemsin[#1]%
{\getparameters[\??is][#1]%
- \doif{\@@isbreedte}{\v!onbekend}
+ \doif\@@isbreedte\v!onbekend
{\def\@@isbreedte{\hsize}}%
- \doifconversiondefinedelse{\@@issymbool}
+ \doifconversiondefinedelse\@@issymbool
{\def\doitembullet##1{\convertnumber{\@@issymbool}{##1}}}
- {\doifsymboldefinedelse{\@@issymbool}
+ {\doifsymboldefinedelse\@@issymbool
{\def\doitembullet##1{\symbol[\@@issymbool]}}{}}}
\def\makeitemsandbullets#1%
- {\doifelse{\@@isn}{\v!onbekend}
+ {\doifelse\@@isn\v!onbekend
{\getcommalistsize[#1]%
\edef\nofitems{\commalistsize}}
{\edef\nofitems{\@@isn}}%
- \setbox0=\hbox
- {\doitems
- {\@@isbreedte}
+ \setbox0\hbox
+ {\doitems \@@isbreedte
{\processcommalist[#1]\docommando}}%
- \setbox2=\hbox
- {\doitems
- {\@@isbulletbreedte}
- {\dorecurse{\nofitems}
- {\docommando{\strut\doitembullet{\herhaler}}}}}}
+ \setbox2\hbox
+ {\doitems \@@isbulletbreedte
+ {\dorecurse\nofitems
+ {\docommando{\strut\doitembullet\recurselevel}}}}}
\def\dostartitems#1#2#3%
- {\let\doitems=#2
+ {\let\doitems#2%
\def\@@isbulletbreedte{#3}%
\makeitemsandbullets{#1}%
\@@isvoor}
-\def\dostopitems%
+\def\dostopitems
{\@@isna
\egroup}
@@ -160,8 +158,8 @@
{\dostartitems{#1}\horitems\@@isbreedte
\noindent\vbox
{\forgetall
- \doifsomething{\@@issymbool}
- {\doifnot{\@@issymbool}{\v!geen}
+ \doifsomething\@@issymbool
+ {\doifnot\@@issymbool\v!geen
{\box2
\@@istussen
\nointerlineskip}}%
@@ -173,41 +171,42 @@
\noindent\vbox
{\forgetall
\box0
- \doifsomething{\@@issymbool}
+ \doifsomething\@@issymbool
{\@@istussen
\nointerlineskip
\box2}}%
\dostopitems}
\setvalue{doitems\v!inmarge}#1%
- {\dostartitems{#1}{\veritems}{-1.5em}% - is a signal
+ {\dostartitems{#1}\veritems{-1.5em}% - is a signal
\noindent\hbox{\llap{\box2\hskip\linkermargeafstand}\box0}%
\dostopitems}
\setvalue{doitems\v!links}#1%
- {\advance\hsize by -1.5em\relax
- \dostartitems{#1}{\veritems}{1.5em}%
+ {\advance\hsize -1.5em%
+ \dostartitems{#1}\veritems{1.5em}%
\noindent\hbox{\box2\box0}%
\dostopitems}
\setvalue{doitems\v!rechts}#1%
- {\dostartitems{#1}{\veritems}{0em}%
+ {\dostartitems{#1}\veritems{0em}%
\noindent\hbox{\box0\hskip-\wd2\box2}%
\dostopitems}
-\def\stelitemsin%
+\def\stelitemsin
{\dosingleargument\dostelitemsin}
\def\complexitems[#1]%
{\bgroup
\stelitemsin[#1]%
- \parindent=\!!zeropoint
+ \parindent\zeropoint
\setlocalhsize
- \hsize=\localhsize
+ \hsize\localhsize
\mindermeldingen
- \doifundefined{doitems\@@isplaats}%
- {\let\@@isplaats\v!links}%
- \getvalue{doitems\@@isplaats}}
+ %\doifundefined{doitems\@@isplaats}%
+ % {\let\@@isplaats\v!links}%
+ %\getvalue{doitems\@@isplaats}}
+ \executeifdefined{doitems\@@isplaats}{\let\@@isplaats\v!links}}
\definecomplexorsimpleempty\items
@@ -236,7 +235,7 @@
{\getvalue{#1}}%
\setvalue{\e!start#1}%
{\bgroup
- \setvalue{\s!do\s!next#1}{}%
+ \letvalue{\s!do\s!next#1}\empty
\setvalue{\e!stop#1}%
{\getvalue{#1}%
\egroup}%
@@ -290,17 +289,17 @@
{\dodoubleargument\dodefinieeralineas}
\def\dostelalineasin[#1][#2][#3]%
- {\doifelse{#2}{\v!elk}
+ {\doifelse{#2}\v!elk
{\dorecurse
{\getvalue{\??al#1\c!n}}
- {\getparameters[\??al#1\herhaler][#3]}}
+ {\getparameters[\??al#1\recurselevel][#3]}}
{\ConvertToConstant\doifelse{#3}{}
{\getparameters[\??al#1][#2]}
{\def\docommando##1%
{\getparameters[\??al#1##1][#3]}%
\processcommalist[#2]\docommando}}}
-\def\stelalineasin%
+\def\stelalineasin
{\dotripleempty\dostelalineasin}
\newcount\alteller
@@ -308,8 +307,8 @@
\newdimen\alhsize
\def\doalinealijn#1#2%
- {\doifelsevalue{\??al#2\the\alteller\c!lijn}{\v!aan}
- {\expandafter\dimen2=#1\relax
+ {\doifelsevalue{\??al#2\the\alteller\c!lijn}\v!aan
+ {\dimen2=#1\relax
\hskip.5\dimen2
\hskip-\linewidth
\vrule\!!width\linewidth
@@ -318,21 +317,21 @@
\def\dostartalinea#1%
{\doifelsevaluenothing{\??al#1\the\alteller\c!breedte}
- {\!!widtha=\alhsize\relax
- \divide\!!widtha by \alnsize}
- {\!!widtha=\getvalue{\??al#1\the\alteller\c!breedte}\relax}%
+ {\!!widtha\alhsize
+ \divide\!!widtha \alnsize}
+ {\!!widtha\getvalue{\??al#1\the\alteller\c!breedte}}%
\dostartattributes
{\??al#1\the\alteller}\c!letter\c!kleur
- {}%
- \doifelsevalue{\??al#1\the\alteller\c!hoogte}{\v!passend}
- {\setbox0=\vtop}
- {\setbox0=\vtop to \getvalue{\??al#1\the\alteller\c!hoogte}}%
+ \empty
+ \doifelsevalue{\??al#1\the\alteller\c!hoogte}\v!passend
+ {\setbox0\vtop}
+ {\setbox0\vtop to \getvalue{\??al#1\the\alteller\c!hoogte}}%
\bgroup
\blanko[\v!blokkeer]%
\forgetall
\getvalue{\??al#1\the\alteller\c!boven}%
\getvalue{\??al#1\c!binnen}%
- \hsize=\!!widtha % setting \wd afterwards removed
+ \hsize\!!widtha % setting \wd afterwards removed
\getvalue{\??al#1\the\alteller\c!binnen}%
\edef\!!stringa{\getvalue{\??al#1\the\alteller\c!uitlijnen}}% nodig?
\expandafter\steluitlijnenin\expandafter[\!!stringa]%
@@ -348,7 +347,7 @@
%
% Hier is \Everypar niet nodig.
%
- \everypar{\begstrut\everypar{}}%
+ \everypar{\begstrut\everypar\emptytoks}%
%
\ignorespaces\geenspatie % dubbel: \ignorespaces
\getvalue{\??al#1\the\alteller\c!commando}}
@@ -361,20 +360,25 @@
\fi
\getvalue{\??al#1\the\alteller\c!onder}%
\egroup
- \ifdim\wd0=\!!zeropoint % no data
- \wd0=\!!widtha
+ \ifdim\wd0=\zeropoint % no data
+ \wd0\!!widtha
\fi
\box0
\dostopattributes
+ %\ifnum\alteller<\getvalue{\??al#1\c!n}\relax
+ % \def\next{\doalinea{#1}}%
+ %\else
+ % \def\next{\dostopalineas{#1}}%
+ %\fi
+ %\next}
\ifnum\alteller<\getvalue{\??al#1\c!n}\relax
- \def\next{\doalinea{#1}}%
+ \@EA\doalinea
\else
- \def\next{\dostopalineas{#1}}%
- \fi
- \next}
+ \@EA\dostopalineas
+ \fi{#1}}
\def\doalinea#1%
- {\global\advance\alteller by 1\relax
+ {\global\advance\alteller \plusone
\doifelsevaluenothing{\??al#1\the\alteller\c!afstand}
{\doifnot{\the\alteller}{1}
{\hskip\getvalue{\??al#1\c!afstand}}}
@@ -385,25 +389,24 @@
\dostartalinea{#1}}
\def\dostartalineas#1%
- {\global\alteller=0\relax
- \parindent=\!!zeropoint
+ {\global\alteller\zerocount
+ \parindent\zeropoint
\setlocalhsize
- \alhsize=\localhsize
- \alnsize=\getvalue{\??al#1\c!n}\relax
+ \alhsize\localhsize
+ \alnsize\getvalue{\??al#1\c!n}\relax
\dorecurse
{\getvalue{\??al#1\c!n}}
{\doifelsevaluenothing{\??al#1\recurselevel\c!afstand}
{\doifnot{\recurselevel}{1}
- {\global\advance\alhsize by -\getvalue{\??al#1\c!afstand}\relax}}
- {\global\advance\alhsize by -\getvalue{\??al#1\recurselevel\c!afstand}\relax}%
+ {\global\advance\alhsize -\getvalue{\??al#1\c!afstand}\relax}}
+ {\global\advance\alhsize -\getvalue{\??al#1\recurselevel\c!afstand}\relax}%
\doifvaluesomething{\??al#1\recurselevel\c!breedte}
- {\global\advance\alnsize by -1\relax
- \global\advance\alhsize by -\getvalue{\??al#1\recurselevel\c!breedte}\relax}}%
+ {\global\advance\alnsize \minusone
+ \global\advance\alhsize -\getvalue{\??al#1\recurselevel\c!breedte}\relax}}%
%\witruimte % gaat fout bij \framed
\getvalue{\??al#1\c!voor}%
\leavevmode % gaat wel goed bij \framed
- \vbox\bgroup\hbox\bgroup
- \doalinea{#1}}
+ \vbox\bgroup\hbox\bgroup\doalinea{#1}}
\def\dostopalineas#1%
{\egroup
@@ -431,7 +434,7 @@
\c!voor=\@@tavoor,
\c!na=\@@tana]}
-\def\steltabin%
+\def\steltabin
{\dosingleargument\dosteltabin}
\steltabin
@@ -448,14 +451,14 @@
\doifundefined{@@chemieletter}{\def\@@chemieletter{\rm}}
-\def\beginlatexmathmodehack%
+\def\beginlatexmathmodehack
{\ifmmode
- \let\endlatexmathmodehack=\relax
+ \let\endlatexmathmodehack\relax
\else
\def\endlatexmathmodehack{$}$\@@chemieletter
\fi}
-\def\setsubscripts%
+\def\setsubscripts
{\beginlatexmathmodehack
\def\dosetsubscript##1##2##3%
{\dimen0=##3\fontdimen5##2%
@@ -465,13 +468,13 @@
{\dosetsubscript{##1}{\textfont2}{##2}%
\dosetsubscript{##1}{\scriptfont2}{##2}%
\dosetsubscript{##1}{\scriptscriptfont2}{##2}}%
- %\dodosetsubscript{\fontdimen14}{?}%
+ %\dodosetsubscript{\fontdimen14}{?}%
\dodosetsubscript{\fontdimen16}{.7}%
\dodosetsubscript{\fontdimen17}{.7}%
\global\loweredsubscriptstrue
\endlatexmathmodehack}
-\def\resetsubscripts%
+\def\resetsubscripts
{\ifloweredsubscripts
\beginlatexmathmodehack
\def\doresetsubscript##1##2%
@@ -481,7 +484,7 @@
{\doresetsubscript{##1}{\textfont2}%
\doresetsubscript{##1}{\scriptfont2}%
\doresetsubscript{##1}{\scriptscriptfont2}}%
- %\dodoresetsubscript{\fontdimen14}%
+ %\dodoresetsubscript{\fontdimen14}%
\dodoresetsubscript{\fontdimen16}%
\dodoresetsubscript{\fontdimen17}%
\global\loweredsubscriptsfalse
@@ -498,22 +501,10 @@
\resetsubscripts
\egroup}
-\def\celsius#1%
- {#1\mathematics{^\circ}C}
-
-\def\graden%
- {\mathematics{^\circ}}
-
-\def\inch%
- {\hbox{\rm\char125\relax}}
-
-\def\breuk#1#2%
- {\mathematics{#1\over#2}}
-
-% \def\bedrag#1%
-% {\mathematics{f~}\hbox{#1}}
-
-% \def\bedragprefix{\mathematics{f\normalfixedspace}}
+\def\celsius#1{#1\mathematics{^\circ}C}
+\def\graden {\mathematics{^\circ}}
+\def\inch {\hbox{\rm\char125\relax}}
+\def\breuk#1#2{\mathematics{#1\over#2}}
\def\bedragprefix {\euro\normalfixedspace}
\def\bedragsuffix {}
@@ -545,26 +536,23 @@
% \test hans \\ ton \\ \subtot{nihil,--} \\
% \stopopelkaar
-\def\doorsnede%
+\def\doorsnede
{\hbox{\rlap/$\circ$} }
-\def\complexpunten[#1]%
- {\dimen0=.5em\relax
- \multiply\dimen0 by #1\relax
- \hbox to \dimen0
- {\leaders\hbox to .5em{\hss.\hss}\hss}}
-
-\def\simplepunten%
- {\complexpunten[5]}
+\def\punten
+ {\dosingleempty\dopunten}
-\definecomplexorsimple\punten
+\def\dopunten[#1]%
+ {\scratchdimen.5em%
+ \hbox to \iffirstargument#1\else5\fi \scratchdimen
+ {\leaders\hbox to \scratchdimen{\hss.\hss}\hss}}
-\def\ongeveer%
- {\mathematics{\pm}}
+\def\ongeveer
+ {\mathematics\pm}
% for compatibility
-\def\unknown%
+\def\unknown
{\dontleavehmode\punten[3]}
\def\leftboundarycharacter#1#2%
@@ -609,30 +597,30 @@
\newsignal \subsentencesignal
\newcounter\subsentencelevel
-\def\beginofsubsentence%
+\def\beginofsubsentence
{\ifdim\lastkern=\subsentencesignal
\unskip
\kern\hspaceamount\currentlanguage{intersentence}%
\fi
\doglobal\increment\subsentencelevel
- \ifnum\subsentencelevel=1
+ \ifnum\subsentencelevel=\plusone
\leaveoutervmode
\fi
\symbol[\ifodd\subsentencelevel\c!leftsentence \else
\c!leftsubsentence\fi]%
\ignorespaces}
-\def\beginofsubsentencespacing%
+\def\beginofsubsentencespacing
{\kern\subsentencesignal\ignorespaces}
-\def\endofsubsentence%
+\def\endofsubsentence
{\symbol[\ifodd\subsentencelevel\c!rightsentence \else
\c!rightsubsentence\fi]%
\doglobal\decrement\subsentencelevel
\unskip
\kern\subsentencesignal}
-\def\endofsubsentencespacing%
+\def\endofsubsentencespacing
{\ifdim\lastkern=\subsentencesignal
\unskip
\hskip\hspaceamount\currentlanguage{intersentence}%
@@ -684,6 +672,16 @@
[\c!middlespeech]
[\leftboundarycharacter\c!middlespeech{speech}]
+%%%%% will be replaced by delimitedtext %%%%%
+
+\def\leftquotationmark
+ {\setbox\scratchbox\hbox{\symbol[\c!leftquotation]}%
+ \doif\@@ciplaats\v!marge{\hskip-\wd\scratchbox}%
+ \box\scratchbox}
+
+\def\rightquotationmark
+ {\hsmash{\symbol[\c!rightquotation]}}
+
\newsignal\quotationsignal
\def\stelciterenin
@@ -695,25 +693,17 @@
\def\startcitaat
{\bgroup\dosingleempty\dostartcitaat}
-\def\leftquotationmark
- {\setbox\scratchbox\hbox{\symbol[\c!leftquotation]}%
- \doif\@@ciplaats\v!marge{\hskip-\wd\scratchbox}%
- \box\scratchbox}
-
-\def\rightquotationmark
- {\hsmash{\symbol[\c!rightquotation]}}
-
\def\dostartcitaat[#1]%
{\@@civoor
\doifelsenothing{#1}
{\let\dostopcitaat\relax}
{\startsmaller[#1]%
\let\dostopcitaat\stopsmaller}%
- \dostartattributes\??ci\c!letter\c!kleur{}%
+ \dostartattributes\??ci\c!letter\c!kleur\empty
\leftquotationmark
\ignorespaces}
-\def\stopcitaat%
+\def\stopcitaat
{\removeunwantedspaces
\removelastskip
\rightquotationmark
@@ -743,12 +733,6 @@
{\dohandlequotation\c!leftquotation \relax}
{\dohandlequotation\c!rightquotation\removelastskip}}
-%\unexpanded\def\citeer
-% {\doifelse\@@ciletter\v!normaal
-% {\let\next\doquotedcite}
-% {\let\next\doattributedcite}%
-% \next}
-
\unexpanded\def\citeer
{\doifelse\@@ciletter\v!normaal\doquotedcite\doattributedcite}
@@ -766,13 +750,15 @@
%D we use the next alternative, where the first one is handled
%D outside group. Watch the strut.
-\unexpanded\def\citaat%
+\unexpanded\def\citaat
{\dohandlequotation\c!leftquotation\relax
- \groupedcommand{}{\dohandlequotation\c!rightquotation\removelastskip}}
+ \groupedcommand \donothing
+ {\dohandlequotation\c!rightquotation\removelastskip}}
-\def\doquotedcite%
+\def\doquotedcite
{\dohandlequotation\c!leftquote\relax
- \groupedcommand{}{\dohandlequotation\c!rightquote\removelastskip}}
+ \groupedcommand \donothing
+ {\dohandlequotation\c!rightquote\removelastskip}}
\stelciterenin
[\c!plaats=\v!marge,
@@ -789,6 +775,8 @@
%D closing symbols are defined per language. Italian is an
%D example of a language that has them set.
+%%%%% will be replaced by delimitedtext %%%%%
+
\newcounter\speechlevel \newconditional\insidespeech
\def\startspeech
@@ -816,13 +804,229 @@
\unexpanded\def\speech
{\doglobal\increment\speechlevel\relax
\dohandlequotation\c!leftspeech\relax
- \groupedcommand
- {\ignorespaces}
+ \groupedcommand \ignorespaces
{\dohandlequotation\c!rightspeech\removelastskip
\doglobal\decrement\speechlevel\relax}}
\appendtoks \dohandlespeech \to \everypar
+% this will replace the quotation and speed definitions
+
+\newsignal\delimitedtextignal
+
+\def\delimitedtextparameter#1%
+ {\csname\??ci
+ \ifundefined{\??ci\currentdelimitedtext#1}\else\currentdelimitedtext\fi
+ #1\endcsname}
+
+\def\definedelimitedtext
+ {\dodoubleempty\dodefinedelimitedtext}
+
+\def\dodefinedelimitedtext[#1][#2]%
+ {\doifassignmentelse{#2}
+ {\getparameters
+ [\??ci#1]
+ [\c!plaats=\v!marge, % \v!tekst \v!alinea
+ \c!voorwit=,
+ \c!nawit=\delimitedtextparameter\c!voorwit,
+ \c!letter=\v!normaal,
+ \c!kleur=,
+ \c!linkermarge=\zeropoint,
+ \c!rechtermarge=\delimitedtextparameter\c!linkermarge,
+ \c!springvolgendein=\v!ja,
+ \c!voor=,
+ \c!na=,
+ \c!links=,
+ \c!rechts=,
+ \c!niveau=0,
+ \c!herhaal=\v!nee,
+ #2]}%
+ {\doifdefined{#2}
+ {\copyparameters[\??ci#1][\??ci#2]
+ [\c!plaats,\c!voorwit,\c!nawit,\c!letter,\c!kleur,
+ \c!linkermarge,\c!rechtermarge,\c!springvolgendein,
+ \c!voor,\c!na,\c!links,\c!rechts]}}%
+ \doifsomething{#1}
+ {\unexpanded\setvalue{#1}{\delimitedtext[#1]}%
+ \setvalue{\e!start#1}{\startdelimitedtext[#1]}%
+ \setvalue{\e!stop#1}{\stopdelimitedtext}}}
+
+\def\setupdelimitedtext
+ {\dodoubleargument\dosetupdelimitedtext}
+
+\def\dosetupdelimitedtext[#1][#2]%
+ {\ifsecondargument
+ \getparameters[\??ci#1][#2]%
+ \else
+ \getparameters[\??ci][#1]%
+ \fi}
+
+\def\dorepeatdelimitedtext
+ {\relax\ifcase\delimitedtextparameter\c!niveau\else
+ \dohandledelimitedtext\c!midden
+ \fi}
+
+\def\startdelimitedtext[#1]%
+ {\bgroup
+ \def\currentdelimitedtext{#1}%
+ \doif{\delimitedtextparameter\c!herhaal}\v!ja
+ {\appendtoks \dorepeatdelimitedtext \to \everypar}%
+ \doifinsetelse{\delimitedtextparameter\c!plaats}{\v!alinea,\v!marge}%
+ {\dosingleempty\dostartdelimitedtextpar}\dostartdelimitedtexttxt}
+
+\def\dostartdelimitedtextpar[#1]%
+ {\let\dostopdelimitedtext\dostopdelimitedtextpar
+ \doifsomething{\delimitedtextparameter\c!voorwit}
+ {\blanko[\delimitedtextparameter\c!voorwit]}%
+ \delimitedtextparameter\c!voor
+ % nicer:
+ % \doadaptleftskip {\delimitedtextparameter\c!linkermarge}%
+ % \doadaptrightskip{\delimitedtextparameter\c!rechtermarge}%
+ % backward compatible:
+ \doifelsenothing{#1}
+ {\doadaptleftskip {\delimitedtextparameter\c!linkermarge}%
+ \doadaptrightskip{\delimitedtextparameter\c!rechtermarge}%
+ \let\dodostopdelimitedtextpar\endgraf}
+ {\startsmaller[#1]\let\dodostopdelimitedtextpar\stopsmaller}%
+ % so far
+ \doif{\delimitedtextparameter\c!springvolgendein}\v!nee\noindentation
+ \dostartattributes{\??ci\currentdelimitedtext}\c!letter\c!kleur\empty
+ \leftdelimitedtextmark
+ \doglobal\incrementvalue{\??ci\currentdelimitedtext\c!niveau}%
+ \ignorespaces}
+
+\def\dostopdelimitedtextpar
+ {\removeunwantedspaces
+ \removelastskip
+ \rightdelimitedtextmark
+ \dostopattributes
+ \dodostopdelimitedtextpar
+ \delimitedtextparameter\c!na
+ \doifsomething{\delimitedtextparameter\c!nawit}
+ {\blanko[\delimitedtextparameter\c!nawit]}}
+
+\def\dostartdelimitedtexttxt
+ {\let\dostopdelimitedtext\dostopdelimitedtexttxt
+ \dostartattributes{\??ci\currentdelimitedtext}\c!letter\c!kleur\empty
+ \dohandledelimitedtext\c!links
+ \ignorespaces}
+
+\def\dostopdelimitedtexttxt
+ {\removeunwantedspaces
+ \dohandledelimitedtext\c!rechts
+ \dostopattributes}
+
+\def\stopdelimitedtext
+ {\dostopdelimitedtext
+ \doglobal\decrementvalue{\??ci\currentdelimitedtext\c!niveau}%
+ \egroup}
+
+\def\delimitedtext[#1]%
+ {\pushmacro\currentdelimitedtext
+ \def\currentdelimitedtext{#1}%
+ \doifinsetelse{\delimitedtextparameter\c!plaats}{\v!alinea,\v!marge}%
+ \dodelimitedtextpar\dodelimitedtexttxt}
+
+% shortcuts
+
+\def\startdelimited{\startdelimitedtext}
+\def\stopdelimited {\stopdelimitedtext} % no let, dynamically assigned
+\def\delimited {\delimitedtext}
+
+\def\leftdelimitedtextmark
+ {\dontleavehmode
+ \setbox\scratchbox\hbox{\delimitedtextparameter\c!links}%
+ \doif{\delimitedtextparameter\c!plaats}\v!marge{\hskip-\wd\scratchbox}%
+ \box\scratchbox}
+
+\def\rightdelimitedtextmark
+ {\hsmash{\delimitedtextparameter\c!rechts}}
+
+\def\dohandledelimitedtext#1#2%
+ {\bgroup
+ \setbox\scratchbox\hbox{#1}%
+ \ifdim\wd\scratchbox>\zeropoint
+ \ifdim\lastskip=\delimitedtextignal
+ \unskip\hskip\hspaceamount\currentlanguage{interquotation}%
+ \else
+ #2%
+ \fi
+ \ifhmode % else funny pagebeaks
+ \penalty\!!tenthousand\hskip\zeropoint % == \prewordbreak
+ \fi
+ \strut % new, needed below
+ \delimitedtextparameter#1%
+ \penalty\!!tenthousand\hskip\delimitedtextignal % +- \prewordbreak
+ \fi
+ \egroup}
+
+\def\handledelimitedtext#1%
+ {\dohandledelimitedtext{#1}\relax}
+
+\unexpanded\def\dodelimitedtextpar
+ {\dohandledelimitedtext\c!links\relax
+ \groupedcommand
+ \donothing
+ {\dohandledelimitedtext\c!rechts\removelastskip}}
+
+\unexpanded\def\dodelimitedtexttxt
+ {\doifelse{\delimitedtextparameter\c!letter}\v!normaal
+ \doquoteddelimited\doattributeddelimited}
+
+\def\doquoteddelimited
+ {\dohandledelimitedtext\c!links\relax
+ \groupedcommand
+ \donothing
+ {\dohandledelimitedtext\c!rechts
+ \removelastskip
+ \popmacro\currentdelimitedtext}}
+
+\def\doattributeddelimited
+ {\groupedcommand
+ {\dostartattributes{\??ci\currentdelimitedtext}\c!letter\c!kleur}
+ {\dostopattributes
+ \popmacro\currentdelimitedtext}}
+
+% \definedelimitedtext
+% [\v!citaat]
+% [\c!links={\symbol[\c!leftquotation]},
+% \c!rechts={\symbol[\c!rightquotation]},
+% \c!linkermarge=\v!standaard]
+%
+% \definedelimitedtext
+% [\v!citeer][\v!citaat]
+%
+% \setupdelimitedtext
+% [\v!citeer]
+% [\c!plaats=\v!tekst,
+% \c!links={\symbol[\c!leftquote]},
+% \c!rechts={\symbol[\c!rightquote]}]
+%
+% \definedelimitedtext
+% [\v!spraak][\v!citaat]
+%
+% \setupdelimitedtext
+% [\v!spraak]
+% [\c!herhaal=\v!ja,
+% \c!links={\symbol[\c!leftspeech]},
+% \c!midden={\symbol[\c!middlespeech]},
+% \c!rechts={\symbol[\c!rightspeech]}]
+%
+% % how do we call an tight quote
+% %
+% % \definedelimitedtext
+% % [x\v!citaat][\v!citaat]
+% %
+% % \setupdelimitedtext
+% % [x\v!citaat]
+% % [\c!springvolgendein=\v!nee,
+% % \c!voorwit=\v!geenwit]
+%
+% \def\stelciterenin{\setupdelimitedtext[\v!citaat]}
+% \def\stelcitatenin{\setupdelimitedtext[\v!citeer]}
+
+% seldom used, move from kernel to run time module
+
% Tijden horen hier niet thuis en zullen in een aparte
% module worden ondergebracht. voorlopig handhaven we ze nog
% even. Een implementatie met \doordefinieren zou beter voldoen
@@ -843,23 +1047,30 @@
\def\activiteit#1#2%
{\sym{\tijdspan{#1}{#2}}}
+% seldom used, move from kernel to run time module
+
\def\dotoevoegen#1%
{\def\next{#1}%
- \dorecurse{#1}{\inlinker{\next~+}\def\next{}\crlf}}
+ \dorecurse{#1}{\inlinker{\next~+}\let\next\empty\crlf}}
\def\complextoevoegen[#1]%
{\blanko
\processaction
[#1]
- [ \v!klein=>\dotoevoegen{3},
- \v!middel=>\dotoevoegen{6},
- \v!groot=>\dotoevoegen{9},
- \s!default=>\dotoevoegen{6},
- \s!unknown=>\dotoevoegen{#1}]
+ [ \v!klein=>\dotoevoegen{3},
+ \v!middel=>\dotoevoegen{6},
+ \v!groot=>\dotoevoegen{9},
+ \s!default=>\dotoevoegen{6},
+ \s!unknown=>\dotoevoegen{#1}]
\blanko}
\definecomplexorsimpleempty\toevoegen
+% seldom used, move from kernel to run time module
+
+\def\rooster
+ {\dosingleempty\dorooster}
+
\def\dorooster[#1]%
{\begingroup
\getparameters[\??rt]
@@ -877,11 +1088,11 @@
\dimen0=\@@rtdx\@@rteenheid\relax
\dimen0=\@@rtschaal\dimen0\relax
\dimen0=\@@rtfactor\dimen0\relax
- \multiply\dimen0 by \@@rtnx\relax
+ \multiply\dimen0 \@@rtnx\relax
\dimen2=\@@rtdy\@@rteenheid\relax
\dimen2=\@@rtschaal\dimen2\relax
\dimen2=\@@rtfactor\dimen2\relax
- \multiply\dimen2 by \@@rtny\relax
+ \multiply\dimen2 \@@rtny\relax
\def\horline
{\vbox
{\hrule
@@ -902,7 +1113,7 @@
\dimen2=##2\@@rteenheid\relax
\dimen2=\@@rtschaal\dimen2\relax
\dimen2=\@@rtfactor\dimen2\relax
- \divide\dimen0 by \dimen2\relax
+ \divide\dimen0 \dimen2\relax
\xdef\@@roostere{\number\dimen0}%
\ifnum\@@roostere>50
\gdef\@@roostere{100}%
@@ -916,8 +1127,8 @@
\gdef\@@roostere{1}%
\fi\fi\fi\fi
\gdef\@@roosterd{0}%
- \def\legend%
- {\ifnum\@@roosterd=0\relax
+ \def\legend
+ {\ifnum\@@roosterd=\zerocount
\vbox
{\increment(\@@roosterc,##1)%
\hbox to 2em{\hss\@@roosterc\hss}}%
@@ -936,12 +1147,12 @@
\c!offset=\@@rtoffset,
\c!xoffset=##6,
\c!yoffset=##7]%
- \doifelse{##9}{\v!midden}
- {\scratchdimen=##3pt\scratchdimen=.5\scratchdimen
+ \doifelse{##9}\v!midden
+ {\scratchdimen##3pt\scratchdimen.5\scratchdimen
\edef\@@psxx{\withoutpt\the\scratchdimen}%
- \scratchdimen=##4pt\scratchdimen=.5\scratchdimen
+ \scratchdimen##4pt\scratchdimen.5\scratchdimen
\edef\@@psyy{\withoutpt\the\scratchdimen}%
- \scratchcounter=##2\advance\scratchcounter by -1
+ \scratchcounter##2\advance\scratchcounter -1
\edef\@@pszz{\the\scratchcounter}}
{\edef\@@psxx{0}\edef\@@psyy{0}\edef\@@pszz{##2}}%
\position(\@@psxx,\@@psyy){##1}%
@@ -953,23 +1164,20 @@
\c!factor=\@@rtfactor,
\c!offset=\@@rtoffset,
\c!eenheid=\@@rteenheid]%
- \dorecurse{\@@pszz}{\position(##3,##4){##5}}}%
+ \dorecurse\@@pszz{\position(##3,##4){##5}}}%
\draw
\verline\@@rtnx\@@rtdx0\verline\!!zeropoint\!!zeropoint\v!start\empty
\draw
\horline\@@rtny0\@@rtdy\horline\!!zeropoint\!!zeropoint\v!start\empty
\tfx
- \doifnot{\@@rtxstap}{0}
+ \doifnot\@@rtxstap{0}
{\setlegend\@@rtxstap\@@rtdx\@@rtx
\draw\legend\@@rtnx\@@rtdx0\legend{-1em}{-1.5em}\v!overlay\@@rtplaats}%
- \doifnot{\@@rtystap}{0}
+ \doifnot\@@rtystap{0}
{\setlegend\@@rtystap\@@rtdy\@@rty
\draw\legend\@@rtny0\@@rtdy\legend{-2em}{-.75ex}\v!overlay\@@rtplaats}%
\stoppositioning
\endgroup}
-
-\def\rooster%
- {\dosingleempty\dorooster}
% Dit wordt:
%
@@ -1005,29 +1213,29 @@
\def\stelpublicatiesin%
{\dosingleargument\dostelpublicatiesin}
-\def\apa@publicatie%
- {\doifsomething{\@@pb@naam}{\@@pb@naam,\spatie}%
- \doifsomething{\@@pb@titel}{{\sl\@@pb@titel}.\spatie}%
- \doifsomething{\@@pb@jaar}{(\@@pb@jaar).\spatie}%
- \doifsomething{\@@pb@plaats}{\@@pb@plaats\doifelsenothing{\@@pb@uitgever}{.}{:\spatie}}%
- \doifsomething{\@@pb@uitgever}{\@@pb@uitgever.}}
+\def\apa@publicatie
+ {\doifsomething\@@pb@naam {\@@pb@naam,\space}%
+ \doifsomething\@@pb@titel {{\sl\@@pb@titel}.\space}%
+ \doifsomething\@@pb@jaar {(\@@pb@jaar).\space}%
+ \doifsomething\@@pb@plaats {\@@pb@plaats\doifelsenothing\@@pb@uitgever{.}{:\space}}%
+ \doifsomething\@@pb@uitgever{\@@pb@uitgever.}}
-\def\normaal@publicatie%
+\def\normaal@publicatie
{\@@pb@naam, \@@pb@titel, \@@pb@jaar, \@@pb@pagina, \@@pb@plaats, \@@pb@uitgever.}
-\def\complexstartpublicatie[#1]#2\stoppublicatie%
- {\bgroup%
- \def\dosetpublicatie%
+\def\complexstartpublicatie[#1]#2\stoppublicatie
+ {\bgroup
+ \def\dosetpublicatie
{\processcommalist
[naam,titel,jaar,plaats,pagina,uitgever]
\setpublicatie
\ignorespaces}%
\def\setpublicatie##1%
- {\setvalue{\??pb @##1}{}%
+ {\letvalue{\??pb @##1}\empty
\setvalue{##1}####1{\setvalue{\??pb @##1}{####1}\ignorespaces}}%
\def\getpublicatie%
- {\doifsomething{\@@pbvariant}{\getvalue{\@@pbvariant @publicatie}}}%
- \doifelse{\@@pbnummeren}{\v!ja}%
+ {\doifsomething\@@pbvariant{\getvalue{\@@pbvariant @publicatie}}}%
+ \doifelse\@@pbnummeren\v!ja
{\@publicatie[#1]\dosetpublicatie#2\getpublicatie\par}%
{\@@pbvoor
\dosetpublicatie\ignorespaces#2\getpublicatie
@@ -1058,7 +1266,9 @@
\c!links={[},
\c!rechts={]}]
-\def\kenmerkdatum%
+% only used at pragma, move from kernel to run time module
+
+\def\kenmerkdatum
{\currentdate[\v!kenmerk]}
\def\dokenmerk[#1]%
@@ -1067,14 +1277,14 @@
\getparameters
[\??km]
[\c!bet=\unknown,\c!dat=\unknown,\c!ken=\unknown,
- \c!van=, \c!aan=, \c!ref=, #1]%
+ \c!van=,\c!aan=,\c!ref=,#1]%
% moet anders, hoort niet in 01b
- \assigntranslation[nl=referentie,en=reference,du=Referenz, sp=referencia]\to\@@@kmref
- \assigntranslation[nl=van, en=from, du=Von, sp=de]\to\@@@kmvan
- \assigntranslation[nl=aan, en=to, du=An, sp=a]\to\@@@kmaan
- \assigntranslation[nl=betreft, en=concerns, du=Betreff, sp=]\to\@@@kmbet
- \assigntranslation[nl=datum, en=date, du=Datum, sp=fecha]\to\@@@kmdat
- \assigntranslation[nl=kenmerk, en=mark, du=Kennzeichen,sp=]\to\@@@kmken
+ \assigntranslation[\s!nl=referentie,\s!en=reference,\s!de=Referenz,\s!sp=referencia]\to\@@@kmref
+ \assigntranslation[\s!nl=van,\s!en=from,\s!de=Von,\s!sp=de]\to\@@@kmvan
+ \assigntranslation[\s!nl=aan,\s!en=to,\s!de=An,\s!sp=a]\to\@@@kmaan
+ \assigntranslation[\s!nl=betreft,\s!en=concerns,\s!de=Betreff,\s!sp=]\to\@@@kmbet
+ \assigntranslation[\s!nl=datum,\s!en=date,\s!de=Datum,\s!sp=fecha]\to\@@@kmdat
+ \assigntranslation[\s!nl=kenmerk,\s!en=mark,\s!de=Kennzeichen,\s!sp=]\to\@@@kmken
%
\definetabulate[\s!dummy][|l|p|]
\startdummy
@@ -1082,13 +1292,13 @@
\NC\@@@kmdat\EQ\@@kmdat\NC\NR
\NC\@@@kmken\EQ\expanded{\kap{\@@kmken}}\NC\NR
\doifsomething{\@@kmvan\@@kmaan}{\NC\NC\NC\NR}%
- \doifsomething{\@@kmvan}{\NC\@@@kmvan\EQ\@@kmvan\NC\NR}%
- \doifsomething{\@@kmaan}{\NC\@@@kmaan\EQ\@@kmaan\NC\NR}%
- \doifsomething{\@@kmref}{\NC\NC\NC\NR\NC\@@@kmref\EQ\@@kmref\NC\NR}%
+ \doifsomething \@@kmvan {\NC\@@@kmvan\EQ\@@kmvan\NC\NR}%
+ \doifsomething \@@kmaan {\NC\@@@kmaan\EQ\@@kmaan\NC\NR}%
+ \doifsomething \@@kmref {\NC\NC\NC\NR\NC\@@@kmref\EQ\@@kmref\NC\NR}%
\stopdummy
\egroup}
-\def\kenmerk%
+\def\kenmerk
{\dosingleargument\dokenmerk}
% NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW NIEUW
@@ -1096,30 +1306,30 @@
\def\??ri{@@ri}
-\def\stelrijenin%
+\def\stelrijenin
{\dodoubleargument\getparameters[\??ri]}
\def\complexstartrijen[#1]%
{\bgroup
\stelrijenin[#1]%
- \let\do@@rionder=\relax
- \def\rij%
+ \let\do@@rionder\relax
+ \def\rij
{\do@@rionder
\egroup
- \dimen0=\vsize
- \divide\dimen0 by \@@rin
- \advance\dimen0 by -\lineskip
+ \dimen0\vsize
+ \divide\dimen0 \@@rin
+ \advance\dimen0 -\lineskip
\vbox to \dimen0
\bgroup
\@@riboven
- \let\do@@rionder=\@@rionder
+ \let\do@@rionder\@@rionder
\ignorespaces}%
\bgroup
\rij}
\definecomplexorsimpleempty\startrijen
-\def\stoprijen%
+\def\stoprijen
{\do@@rionder
\egroup
\egroup}
@@ -1179,10 +1389,10 @@
[\e!gegeven]
[\c!eenheid=.75em,\c!binnen=\setquicktabulate\geg,EQ={=}]
-\unexpanded\def\xbox%
+\unexpanded\def\xbox
{\bgroup\aftergroup\egroup\hbox\bgroup\tx\let\next=}
-\unexpanded\def\xxbox%
+\unexpanded\def\xxbox
{\bgroup\aftergroup\egroup\hbox\bgroup\txx\let\next=}
% \def\mrm#1%
@@ -1338,71 +1548,10 @@
%D \stopitemize}}
%D \stoptypen
-% \def\setuplegend%
-% {\dodoubleargument\getparameters[\??ld]}
-%
-% \setuplegend
-% [\c!n=1,
-% \c!afstand=1em,
-% \c!tussen={\blanko[\v!middel]},
-% \c!breedte=\hsize,
-% \c!hoogte=\vsize,
-% \c!korps=,
-% \c!plaats=\v!onder]
-%
-% \def\placelegend%
-% {\bgroup
-% \dosingleempty\doplacelegend}
-%
-% \def\doplacelegend[#1]% watch the hsize/vsize tricks
-% {\setuplegend[#1]% % and don't change them
-% \dowithnextbox
-% {\switchtobodyfont[\@@ldkorps]% split under same regime
-% \scratchdimen=\wd\nextbox
-% \doifelse{\@@ldplaats}{\v!rechts}
-% {\vsize=\ht\nextbox
-% \vsize=\@@ldhoogte
-% \hsize=\zetbreedte
-% \advance\hsize by -\scratchdimen
-% \advance\hsize by -\@@ldafstand
-% \plaatsnaastelkaar{\box\nextbox}\bgroup}
-% {\hsize\scratchdimen
-% \plaatsonderelkaar{\box\nextbox}\bgroup}%
-% \hsize\@@ldbreedte
-% \doif{\@@ldplaats}{\v!rechts}{\hskip\@@ldafstand}%
-% \ifnum\@@ldn>1
-% \setrigidcolumnhsize\hsize\@@ldafstand\@@ldn
-% \fi
-% \dowithnextbox
-% {\doifelse{\@@ldplaats}{\v!rechts}
-% {\vbox to \vsize
-% {\ifnum\@@ldn>1
-% \rigidcolumnbalance\nextbox
-% \else
-% \box\nextbox
-% \fi
-% \vfill}}
-% {\vbox
-% {\@@ldtussen
-% \ifnum\@@ldn>1
-% \rigidcolumnbalance\nextbox
-% \else
-% \box\nextbox
-% \fi}}%
-% \egroup\egroup}%
-% \vbox
-% \bgroup
-% \forgetall
-% \tolerantTABLEbreaktrue % hm.
-% \blanko[\v!blokkeer]%
-% \everypar{\begstrut}%
-% \let\next=}
-% \hbox}
-
\newbox\firstpairedbox
\newbox\secondpairedbox
-\def\definepairedbox%
+\def\definepairedbox
{\dodoubleempty\dodefinepairedbox}
\def\dodefinepairedbox[#1][#2]%
@@ -1424,13 +1573,13 @@
\setvalue{\e!stel#1\e!in}{\setuppairedbox[#1]}%
\setvalue{\e!plaats#1}{\placepairedbox[#1]}}
-\def\setuppairedbox%
+\def\setuppairedbox
{\dodoubleempty\dosetuppairedbox}
\def\dosetuppairedbox[#1]%
{\getparameters[\??ld#1]}
-\def\placepairedbox%
+\def\placepairedbox
{\bgroup\dodoubleempty\doplacepairedbox}
\def\doplacepairedbox[#1][#2]% watch the hsize/vsize tricks
@@ -1453,85 +1602,85 @@
\let\next=}
\hbox}
-\def\beforefirstpairedbox%
- {\chardef\pairedlocationa=1 % left
- \chardef\pairedlocationb=4 % middle
+\def\beforefirstpairedbox
+ {\chardef\pairedlocationa1 % left
+ \chardef\pairedlocationb4 % middle
\getfromcommacommand[\@@ldplaats][1]%
\processaction
[\commalistelement]
- [ \v!links=>\chardef\pairedlocationa=0,
- \v!rechts=>\chardef\pairedlocationa=1,
- \v!boven=>\chardef\pairedlocationa=2,
- \v!onder=>\chardef\pairedlocationa=3]%
+ [ \v!links=>\chardef\pairedlocationa0,
+ \v!rechts=>\chardef\pairedlocationa1,
+ \v!boven=>\chardef\pairedlocationa2,
+ \v!onder=>\chardef\pairedlocationa3]%
\getfromcommacommand[\@@ldplaats][2]%
\processaction
[\commalistelement]
- [ \v!links=>\chardef\pairedlocationb=0,
- \v!rechts=>\chardef\pairedlocationb=1,
- \v!hoog=>\chardef\pairedlocationb=2,
- \v!boven=>\chardef\pairedlocationb=2,
- \v!laag=>\chardef\pairedlocationb=3,
- \v!onder=>\chardef\pairedlocationb=3,
- \v!midden=>\chardef\pairedlocationb=4]}
-
-\def\betweenbothpairedboxes%
+ [ \v!links=>\chardef\pairedlocationb0,
+ \v!rechts=>\chardef\pairedlocationb1,
+ \v!hoog=>\chardef\pairedlocationb2,
+ \v!boven=>\chardef\pairedlocationb2,
+ \v!laag=>\chardef\pairedlocationb3,
+ \v!onder=>\chardef\pairedlocationb3,
+ \v!midden=>\chardef\pairedlocationb4]}
+
+\def\betweenbothpairedboxes
{\switchtobodyfont[\@@ldkorps]% split under same regime
- \setbox\firstpairedbox=\box\nextbox
+ \setbox\firstpairedbox\box\nextbox
\ifnum\pairedlocationa<2
\hsize\wd\firstpairedbox % trick
- \hsize=\@@ldbreedte
- \scratchdimen=\wd\firstpairedbox
- \advance\scratchdimen by \@@ldafstand
- \bgroup\advance\scratchdimen by \hsize
+ \hsize\@@ldbreedte
+ \scratchdimen\wd\firstpairedbox
+ \advance\scratchdimen \@@ldafstand
+ \bgroup\advance\scratchdimen \hsize
\ifdim\scratchdimen>\@@ldmaxbreedte\relax
\egroup
- \hsize=\@@ldmaxbreedte
- \advance\hsize by -\scratchdimen
+ \hsize\@@ldmaxbreedte
+ \advance\hsize -\scratchdimen
\else
\egroup
\fi
\else
\hsize\wd\firstpairedbox
\hsize\@@ldbreedte % can be \hsize
- \ifdim\hsize>\@@ldmaxbreedte\relax \hsize=\@@ldmaxbreedte \fi % can be \hsize
+ \ifdim\hsize>\@@ldmaxbreedte\relax \hsize\@@ldmaxbreedte \fi % can be \hsize
\fi
- \ifnum\@@ldn>1
+ \ifnum\@@ldn>\plusone
\setrigidcolumnhsize\hsize\@@ldafstand\@@ldn
\fi}
-\def\afterbothpairedboxes%
- {\setbox\secondpairedbox=\vbox
+\def\afterbothpairedboxes
+ {\setbox\secondpairedbox\vbox
{\ifnum\@@ldn>1 \rigidcolumnbalance\nextbox \else \box\nextbox \fi}%
\ifnum\pairedlocationa<2\hbox\else\vbox\fi\bgroup % hide vsize
\forgetall
\ifnum\pairedlocationa<2
- \scratchdimen=\maxoftwoboxdimens\ht\firstpairedbox\secondpairedbox
- \vsize=\scratchdimen
+ \scratchdimen\maxoftwoboxdimens\ht\firstpairedbox\secondpairedbox
+ \vsize\scratchdimen
\ifdim\scratchdimen<\@@ldhoogte\relax % can be \vsize
- \scratchdimen=\@@ldhoogte
+ \scratchdimen\@@ldhoogte
\fi
\ifdim\scratchdimen>\@@ldmaxhoogte\relax
- \scratchdimen=\@@ldmaxhoogte
+ \scratchdimen\@@ldmaxhoogte
\fi
\valignpairedbox\firstpairedbox \scratchdimen
\valignpairedbox\secondpairedbox\scratchdimen
\else
- \scratchdimen=\maxoftwoboxdimens\wd\firstpairedbox\secondpairedbox
+ \scratchdimen\maxoftwoboxdimens\wd\firstpairedbox\secondpairedbox
\halignpairedbox\firstpairedbox \scratchdimen
\halignpairedbox\secondpairedbox\scratchdimen
- \scratchdimen=\ht\secondpairedbox
- \vsize=\scratchdimen
+ \scratchdimen\ht\secondpairedbox
+ \vsize\scratchdimen
\ifdim\ht\secondpairedbox<\@@ldhoogte\relax % can be \vsize
- \scratchdimen=\@@ldhoogte\relax % \relax needed
+ \scratchdimen\@@ldhoogte\relax % \relax needed
\fi
\ifdim\scratchdimen>\@@ldmaxhoogte\relax % todo: totale hoogte
- \scratchdimen=\@@ldmaxhoogte\relax % \relax needed
+ \scratchdimen\@@ldmaxhoogte\relax % \relax needed
\fi
\ifdim\scratchdimen>\ht\secondpairedbox
\setbox\secondpairedbox\vbox to \scratchdimen
- {\ifnum\pairedlocationa=3 \vss\fi
+ {\ifnum\pairedlocationa=3 \vss\fi %
\box\secondpairedbox
- \ifnum\pairedlocationa=2 \vss\fi}%
+ \ifnum\pairedlocationa=2 \vss\fi}% \kern\zeropoint
\fi
\fi
\ifcase\pairedlocationa
@@ -1542,7 +1691,7 @@
\fi
\egroup}
-\def\insidesecondpairedbox%
+\def\insidesecondpairedbox
{\forgetall
\steluitlijnenin[\@@lduitlijnen]%
\tolerantTABLEbreaktrue % hm.
@@ -1553,131 +1702,225 @@
{#1\ifdim#1#2>#1#3 #2\else#3\fi}
\def\valignpairedbox#1#2%
- {\setbox#1=\vbox to #2
+ {\setbox#1\vbox to #2
{\ifcase\pairedlocationb\or\or\or\vss\or\vss\fi
\box#1\relax
\ifcase\pairedlocationb\or\or\vss\or\or\vss\fi}}
\def\halignpairedbox#1#2%
- {\setbox#1=\hbox to #2
+ {\setbox#1\hbox to #2
{\ifcase\pairedlocationb\or\hss\or\or\or\hss\fi
\box#1\relax
\ifcase\pairedlocationb\hss\or\or\or\or\hss\fi}}
\definepairedbox[\e!legenda]
-\newcount\horcombinatie % counter
-\newcount\totcombinatie
+\newcount\horcombination % counter
+\newcount\totcombination
+
+\def\definecombination
+ {\dodoubleempty\dodefinecombination}
+
+\def\definecombination[#1][#2]%
+ {\copyparameters
+ [\??co#1][\??co]
+ [\c!breedte,\c!hoogte,\c!afstand,\c!plaats,%
+ \c!voor,\c!tussen,\c!na,\c!uitlijnen]%
+ \getparameters
+ [\??co#1][#2]}
-\def\stelcombinatiesin%
+\def\setupcombinations
{\dodoubleargument\getparameters[\??co]}
-\long\def\dodostartcombinatie[#1*#2*#3]%
+\def\startcombination
+ {\dodoubleempty\dostartcombination}
+
+\def\dostartcombination[#1][#2]%
+ {\bgroup
+ \ifsecondargument
+ \def\combinationparameter##1{\csname\??co#1##1\endcsname}%
+ \else
+ \def\combinationparameter##1{\csname\??co ##1\endcsname}%
+ \fi
+ \forgetall
+ \doifelse{\combinationparameter\c!hoogte}\v!passend
+ {\vbox}{\vbox to \combinationparameter\c!hoogte}%
+ \bgroup
+ %\doifelsenothing{#1}
+ % {\dodostartcombination[2*1*]}
+ % {\doifelsenothing{#2}
+ % {\dodostartcombination[#1*1*]}
+ % {\dodostartcombination[#2*1*]}}}
+ \expanded{\dodostartcombination
+ [\ifsecondargument#2\else\iffirstargument#1\else2\fi\fi*1*]}}
+
+\long\def\dodostartcombination[#1*#2*#3]%
{\stelfractiesin
- [\c!n=\v!passend,
- \c!afstand=\@@coafstand]%
- \global\horcombinatie=#1\relax
- \global\totcombinatie=#2\relax
- \xdef\maxhorcombinatie{\the\horcombinatie}%
- \multiply\totcombinatie by \horcombinatie
+ [\c!n=\v!passend,\c!afstand=\combinationparameter\c!afstand]%
+ \global\horcombination#1%
+ \global\totcombination#2%
+ \global\setbox\combinationstack\emptybox
+ \xdef\maxhorcombination{\the\horcombination}%
+ \multiply\totcombination\horcombination
\tabskip\zeropoint
- \doifelse{\@@cobreedte}{\v!passend}
- {\halign}
- {\halign to \@@cobreedte}%
- \bgroup&\hfil##\hfil&\tabskip\!!zeropoint \!!plus 1fill##\cr
- \docombinatie}
-
-% \def\docombinatie%
-% {\dowithnextbox
-% {\setbox0=\box\nextbox
-% \dowithnextbox
-% {\setbox2=\box\nextbox
-% \dodocombinatie}
-% \hbox}
-% \hbox}
-
-\def\docombinatie% we want to add struts but still ignore an empty box
- {\dowithnextbox%
- {\setbox0=\box\nextbox
+ \doifelse{\combinationparameter\c!breedte}\v!passend
+ {\halign}{\halign to \combinationparameter\c!breedte}%
+ \bgroup&%
+ %\hfil##\hfil% now : location={left,top}
+ \ExpandBothAfter\doifnotinset\v!links{\combinationparameter\c!plaats}\hfil
+ ##%
+ \ExpandBothAfter\doifnotinset\v!rechts{\combinationparameter\c!plaats}\hfil
+ &\tabskip\zeropoint \!!plus 1fill##\cr
+ \docombination}
+
+\def\docombination % we want to add struts but still ignore an empty box
+ {\dowithnextbox
+ {\setbox0\box\nextbox
\dowithnextbox
- {\setbox2=\box\nextbox
- \dodocombinatie}
+ {\setbox2\box\nextbox
+ \dodocombination}%
\vtop\bgroup
- \def\next%
- {\futurelet\nexttoken\nextnext}
- \def\nextnext%
+ \def\next
+ {\futurelet\nexttoken\nextnext}%
+ \def\nextnext
{\ifx\nexttoken\egroup \else % the next box is empty
\hsize\wd0
- \steluitlijnenin[\@@couitlijnen]
+ \steluitlijnenin[\combinationparameter\c!uitlijnen]%
\bgroup
\aftergroup\endstrut
\aftergroup\egroup
\begstrut
- \fi}
+ \fi}%
\afterassignment\next\let\nexttoken=}
\hbox}
-\def\dodocombinatie%
+% stupid version, does not align top stuff when captions,
+% keep as example
+%
+% \def\dodocombination
+% {\vbox
+% {\forgetall % \stelwitruimtein[\v!geen]%
+% \let\next\vbox
+% \ExpandFirstAfter\processallactionsinset
+% [\combinationparameter\c!plaats]
+% [ \v!boven=>\let\next\tbox,
+% \v!midden=>\let\next\halfwaybox]%
+% \next{\copy0}%
+% \ifdim\ht2>\zeropoint % beter dan \wd2, nu \strut mogelijk
+% \@@cotussen
+% %\vtop % wrong code
+% % {\nointerlineskip % recently added
+% % \hsize\wd0
+% % \steluitlijnenin[\combinationparameter\c!uitlijnen]% % \raggedcenter
+% % \begstrut\unhbox2\endstrut}%
+% \box2
+% \fi}%
+% \ifnum\totcombination>\plusone
+% \global\advance\totcombination\minusone
+% \global\advance\horcombination\minusone
+% \ifnum\horcombination=\zerocount
+% \def\next
+% {\cr\noalign
+% {\forgetall % \stelwitruimtein[\v!geen]% no
+% \nointerlineskip
+% \combinationparameter\c!na
+% \combinationparameter\c!voor
+% \vss
+% \nointerlineskip}%
+% \global\horcombination\maxhorcombination\relax
+% \docombination}%
+% \else
+% \def\next
+% {&&&\hskip\combinationparameter\c!afstand&\docombination}%
+% \fi
+% \else
+% \def\next
+% {\cr\egroup}%
+% \fi
+% \next}
+
+\def\dodocombination
{\vbox
{\forgetall % \stelwitruimtein[\v!geen]%
- \vbox
- {\copy0}%
- \ifdim\ht2>\!!zeropoint\relax % beter dan \wd2, nu \strut mogelijk
- \@@cotussen
- %\vtop
- % {\nointerlineskip % recently added
- % \hsize\wd0
- % \steluitlijnenin[\@@couitlijnen]% % \raggedcenter
- % \begstrut\unhbox2\endstrut}%
- \box2
- \fi}%
- \ifnum\totcombinatie>1
- \global\advance\totcombinatie by -1
- \global\advance\horcombinatie by -1
- \ifnum\horcombinatie=0
- \def\next%
- {\cr\noalign
- {\forgetall %\stelwitruimtein[\v!geen]%
+ \let\next\vbox
+ \ExpandFirstAfter\processallactionsinset
+ [\combinationparameter\c!plaats]
+ [ \v!boven=>\let\next\tbox,
+ \v!midden=>\let\next\halfwaybox]%
+ \next{\copy0}%
+ % we need to save the caption for a next alignment line
+ \saveoncombinationstack2}%
+ \ifnum\totcombination>\plusone
+ \global\advance\totcombination\minusone
+ \global\advance\horcombination\minusone
+ \ifnum\horcombination=\zerocount
+ \def\next
+ {\cr
+ \flushcombinationstack
+ \noalign
+ {\forgetall % \stelwitruimtein[\v!geen]% no
+ \global\setbox\combinationstack\emptybox
\nointerlineskip
- \@@cona
- \@@covoor
+ \combinationparameter\c!na
+ \combinationparameter\c!voor
\vss
\nointerlineskip}%
- \global\horcombinatie=\maxhorcombinatie\relax
- \docombinatie}%
+ \global\horcombination\maxhorcombination\relax
+ \docombination}%
\else
- \def\next%
- {&&&\hskip\@@coafstand&\docombinatie}%
+ \def\next
+ {&&&\hskip\combinationparameter\c!afstand&\docombination}%
\fi
\else
- \def\next%
- {\cr\egroup}%
+ \def\next
+ {\cr
+ \flushcombinationstack
+ \egroup}%
\fi
\next}
-\def\complexdostartcombinatie[#1]%
- {\dodostartcombinatie[#1*1*]}
+\def\stopcombination
+ {\egroup
+ \egroup}
-\def\simpledostartcombinatie%
- {\complexdostartcombinatie[2]}
+\newbox\combinationstack
-\def\startcombinatie%
- {\bgroup
- \forgetall
- \doifelse{\@@cohoogte}{\v!passend}
- {\vbox}
- {\vbox to \@@cohoogte}%
- \bgroup
- \complexorsimple\dostartcombinatie}
+\def\saveoncombinationstack#1%
+ {\global\setbox\combinationstack\hbox
+ {\hbox{\box#1}\unhbox\combinationstack}}
-\def\stopcombinatie%
- {\egroup
- \egroup}
+\def\flushcombinationstack
+ {\noalign
+ {\ifdim\ht\combinationstack>\zeropoint
+ \@@cotussen
+ \global\horcombination\maxhorcombination
+ \globallet\doflushcombinationstack\dodoflushcombinationstack
+ \else
+ \global\setbox\combinationstack\emptybox
+ \globallet\doflushcombinationstack\donothing
+ \fi}%
+ \doflushcombinationstack\crcr}
+
+\gdef\dodoflushcombinationstack
+ {\global\setbox\combinationstack\hbox
+ {\unhbox\combinationstack
+ \global\setbox1\lastbox}%
+ \box1% \ruledhbox{\box1}%
+ \global\advance\horcombination\minusone\relax
+ \ifnum\horcombination>\zerocount
+ \def\next{&&&&\doflushcombinationstack}%
+ \else
+ \global\setbox\combinationstack\emptybox
+ %\let\next\relax
+ \@EA\gobbleoneargument
+ \fi
+ \next}
-\stelcombinatiesin
+\setupcombinations
[\c!breedte=\v!passend,
\c!hoogte=\v!passend,
\c!afstand=1em,
+ \c!plaats=\v!onder, % can be something {top,left}
\c!voor=\blanko,
\c!tussen={\blanko[\v!middel]},
\c!na=,
@@ -1697,10 +1940,10 @@
\aftergroup\doplaatsondernaastelkaar
\let\next=}
-\def\plaatsonderelkaar%
+\def\plaatsonderelkaar
{\plaatsondernaastelkaar\halign\hss}
-\def\plaatsnaastelkaar%
+\def\plaatsnaastelkaar
{\plaatsondernaastelkaar\valign\vss}
\def\dogebruikexternefiles[#1][#2]%
@@ -1711,7 +1954,7 @@
\c!optie=,
#2]}
-\def\gebruikexternefiles%
+\def\gebruikexternefiles
{\dodoubleargument\dogebruikexternefiles}
\def\dostelexternefilesin[#1][#2]%
@@ -1719,7 +1962,7 @@
{\gebruikexternefiles[#1][#2]}
{\getparameters[\??fi#1][#2]}}
-\def\stelexternefilesin%
+\def\stelexternefilesin
{\dodoubleargument\dostelexternefilesin}
\def\verwerkexternefile#1#2#3%
@@ -1728,8 +1971,8 @@
\doinputonce{\getvalue{\??fi#1\c!file}}%
\ExpandFirstAfter\switchtobodyfont[\getvalue{\??fi#1\c!korps}]%
\readsysfile{#2} % beter: loc of fix gebied
- {}
- {\showmessage{\m!systems}{41}{#2,#1}}%
+ \donothing
+ {\showmessage\m!systems{41}{#2,#1}}%
\egroup}
\def\dogebruikexternefile[#1][#2][#3][#4]%
@@ -1739,7 +1982,7 @@
{\setvalue{#3}{\verwerkexternefile{#1}{#3}{#4}}}
{\setvalue{#2}{\verwerkexternefile{#1}{#3}{#4}}}}
-\def\gebruikexternefile%
+\def\gebruikexternefile
{\doquadrupleargument\dogebruikexternefile}
\gebruikexternefiles
@@ -1814,15 +2057,15 @@
\def\dodostoprotate#1#2#3#4#5#6%
{\dontshowcomposition
-\scratchdimen\nextboxht\advance\scratchdimen\nextboxdp
-\doif\@@roplaats\v!hoog
- {\setbox\nextbox\vbox{\hbox{\raise\nextboxdp\box\nextbox}}}%
-\setbox\nextbox=\vbox to #1
+ \scratchdimen\nextboxht\advance\scratchdimen\nextboxdp
+ \doif\@@roplaats\v!hoog
+ {\setbox\nextbox\vbox{\hbox{\raise\nextboxdp\box\nextbox}}}%
+ \setbox\nextbox\vbox to #1
{#2\relax
\hbox to #4
{#5\relax % \number removes leading spaces too
\edef\@@rorotatie{\number\@@rorotatie}%
- \doifelsenothing{\@@rorotatie}
+ \doifelsenothing\@@rorotatie
{\dostartrotation{90}}
{\dostartrotation{\@@rorotatie}}%
\nextboxwd\zeropoint
@@ -1836,8 +2079,8 @@
\box\nextbox
\egroup}
-\def\dostoprotate%
- {\!!counta=\@@rorotatie
+\def\dostoprotate
+ {\!!counta\@@rorotatie
\divide\!!counta 90
\ifcase\!!counta
\dodostoprotate\nextboxht\relax\vfill\nextboxwd\relax\hfill
@@ -1888,25 +2131,28 @@
% schaal
\def\doscalelikeafigure
- {\doifsomething{\@@xyfactor\@@xyschaal\@@xyhfactor\@@xybreedte\@@xyhoogte}
+ {\doifsomething{\@@xyfactor\@@xyhfactor\@@xybfactor\@@xyschaal
+ \@@xybreedte\@@xyhoogte\@@xyregels}
{\let \@@efschaal \@@xyschaal
\let \@@effactor \@@xyfactor
\let \@@efbfactor\@@xybfactor
\let \@@efhfactor\@@xyhfactor
\let \@@efbreedte\@@xybreedte
\let \@@efhoogte \@@xyhoogte
+ \let \@@efregels \@@xyregels
\let \@@epx \!!zeropoint
\let \@@epy \!!zeropoint
\edef\@@epw {\the\wd\nextbox}%
\edef\@@eph {\the\ht\nextbox}%
+ \checkfiguresettings
\setfactorfiguresize
\setscalefiguresize
\setdimensionfiguresize
\convertfigureinsertscale\@@epx\figx\figxsca\scax
\convertfigureinsertscale\@@epy\figy\figysca\scay
- \scratchdimen=\scax pt \divide\scratchdimen by 100
+ \scratchdimen\scax\s!pt \divide\scratchdimen 100
\edef\@@xysx{\withoutpt\the\scratchdimen}%
- \scratchdimen=\scay pt \divide\scratchdimen by 100
+ \scratchdimen\scay\s!pt \divide\scratchdimen 100
\edef\@@xysy{\withoutpt\the\scratchdimen}}}
\def\doschaal[#1]%
@@ -1914,26 +2160,26 @@
\forgetall
\getparameters
[\??xy]
- [\c!schaal=,\c!breedte=,\c!hoogte=,
+ [\c!schaal=,\c!breedte=,\c!hoogte=,\c!regels=,
\c!factor=,\c!hfactor=,\c!bfactor=,
\c!sx=1,\c!sy=1,#1]%
\dowithnextbox
{\dontshowcomposition
-\ifdim\ht\nextbox>\zeropoint \ifdim\wd\nextbox>\zeropoint
- \doscalelikeafigure
- \dimen0=\@@xysy\ht\nextbox
- \dimen2=\@@xysy\dp\nextbox
- \dimen4=\@@xysx\wd\nextbox
- \dimen6=\dimen0\advance\dimen6 by \dimen2
- \setbox\nextbox=\vbox to \dimen6
- {\ht\nextbox=\zeropoint
- \dp\nextbox=\zeropoint
- \vfill % erbij
- \dostartscaling\@@xysx\@@xysy\box\nextbox\dostopscaling}%
- \ht\nextbox=\dimen0
- \dp\nextbox=\dimen2
- \wd\nextbox=\dimen4
-\fi \fi
+ \ifdim\ht\nextbox>\zeropoint \ifdim\wd\nextbox>\zeropoint
+ \doscalelikeafigure
+ \dimen0=\@@xysy\ht\nextbox
+ \dimen2=\@@xysy\dp\nextbox
+ \dimen4=\@@xysx\wd\nextbox
+ \dimen6=\dimen0\advance\dimen6 \dimen2
+ \setbox\nextbox\vbox to \dimen6
+ {\ht\nextbox\zeropoint
+ \dp\nextbox\zeropoint
+ \vfill % erbij
+ \dostartscaling\@@xysx\@@xysy\box\nextbox\dostopscaling}%
+ \ht\nextbox\dimen0
+ \dp\nextbox\dimen2
+ \wd\nextbox\dimen4
+ \fi \fi
\box\nextbox
\egroup}
\hbox}
@@ -1943,18 +2189,18 @@
% mirror
-\def\domirrorbox% \hbox/\vbox/\vtop
+\def\domirrorbox % \hbox/\vbox/\vtop
{\bgroup
\dowithnextbox
{\dontshowcomposition
- \dimen0=\wd\nextbox
- \setbox\nextbox=\vbox
+ \scratchdimen\wd\nextbox
+ \setbox\nextbox\vbox
{\dostartmirroring\hskip-\wd\nextbox\box\nextbox\dostopmirroring}%
- \wd\nextbox=\dimen0
+ \wd\nextbox\scratchdimen
\box\nextbox
\egroup}}
-\def\spiegel%
+\def\spiegel
{\domirrorbox\hbox}
%\setbox0=\hbox{gans}
@@ -1978,7 +2224,7 @@
\def\??fr{@@fr}
-\def\stelfractiesin%
+\def\stelfractiesin
{\dodoubleargument\getparameters[\??fr]}
\def\dodofractie[#1/#2,#3,#4,#5]%
@@ -1992,7 +2238,7 @@
{\!!widtha\zeropoint}
{\!!widtha\@@frafstand}}
{\!!widtha#4}%
- \advance\!!counta -1\relax
+ \advance\!!counta \minusone
\multiply\!!widtha \!!counta
\advance\hsize -\!!widtha
\divide\hsize #2\relax
@@ -2001,7 +2247,7 @@
\def\dofractie[#1]%
{\dodofractie[#1,,,,,,]}
-\def\fractie%
+\def\fractie
{\dosingleargument\dofractie}
\stelfractiesin
@@ -2100,8 +2346,8 @@
\let\serializedcommalist\empty
\scratchcounter\zerocount
\def\docommando##1%
- {\advance\scratchcounter 1
- \ifnum\scratchcounter=1
+ {\advance\scratchcounter \plusone
+ \ifnum\scratchcounter=\plusone
\scratchtoks{\handlecommalistsentence{##1}}%
\else
\ifnum\scratchcounter=\commalistsize
diff --git a/tex/context/base/core-nav.tex b/tex/context/base/core-nav.tex
index c15635fed..5f43da39b 100644
--- a/tex/context/base/core-nav.tex
+++ b/tex/context/base/core-nav.tex
@@ -136,13 +136,13 @@
\newif\iflocationstrut
\newif\iflocationsplit
-\def\resetgoto%
+\def\resetgoto
{\global\let\@@ia@@hoogte\!!zeropoint
\global\let\@@ia@@diepte\!!zeropoint}
\resetgoto
-\def\presetgoto%
+\def\presetgoto
{\iflocationstrut
\setstrut
\xdef\@@ia@@hoogte{\the\ht\strutbox}%
@@ -185,7 +185,7 @@
\hskip\dimen0#2#3}}% when visualizing things
\naturalhbox % needed for omega / moved from plus-omg
{\ifreversegoto
- \dimen0=\wd0\box0\kern-\dimen0\smashbox2\box2\kern\dimen0
+ \dimen0\wd0\box0\kern-\dimen0\smashbox2\box2\kern\dimen0
\else
\smashbox2\box2\box0
\fi}%
@@ -228,7 +228,7 @@
%D situations where the typeface is handled by the calling
%D macro.
-\def\interactioncolor%
+\def\interactioncolor
{\iflocation
\ifrealreferencepage
\@@iacontrastkleur
@@ -300,9 +300,9 @@
%D such, are visible on screen, but invisible on paper. Don't
%D trust this mechanism yet!
-\def\dostartinteractie%
+\def\dostartinteractie
{\bgroup
- \let\stopinteractie=\egroup
+ \let\stopinteractie\egroup
\dowithnextbox{\dostarthide\box\nextbox\dostophide\egroup}\hbox}
\let\startinteractie = \relax
@@ -315,7 +315,7 @@
% \getvalue{#1\c!print}=={\v!ja} enz. Consequent menubutton
% gebruiken!
-\def\@@iatimestamp%
+\def\@@iatimestamp
{\the\normalyear
\ifnum\normalmonth<10 0\fi\the\normalmonth
\ifnum\normalday <10 0\fi\the\normalday}
@@ -349,12 +349,10 @@
\c!breedte=1em,
\c!hoogte=\!!zeropoint,
\c!diepte=\!!zeropoint,
- \c!titel=,
+ \c!titel=\jobname, % needed for fdf/x
\c!subtitel=,
\c!auteur=,
\c!trefwoord=,
\c!datum=\@@iatimestamp]
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/core-new.tex b/tex/context/base/core-new.tex
index 05ffb0c11..0a3eb82e7 100644
--- a/tex/context/base/core-new.tex
+++ b/tex/context/base/core-new.tex
@@ -231,17 +231,17 @@
\newbox\nointerferencebox
-\def\startnointerference%
+\def\startnointerference
{\setbox\nointerferencebox\vbox
\bgroup}
-\def\stopnointerference%
+\def\stopnointerference
{\egroup
\setbox\nointerferencebox\box\voidb@x}
% will go to ...
-\def\alignedbox%
+\def\alignedbox
{\dodoubleempty\doalignedbox[]}
% \def\doalignedbox[#1][#2]%
@@ -299,7 +299,7 @@
\setvalue{\??ab\??ab tr}{\toprightbox}
\setvalue{\??ab\??ab br}{\bottomrightbox}
-\def\offsetbox%
+\def\offsetbox
{\dodoubleempty\dooffsetbox[]}
\def\dooffsetbox[#1][#2]%
@@ -318,7 +318,7 @@
\freezedimenmacro\@@oxdiepte
\setbox\nextbox\hbox
{\hskip\@@oxx\lower\@@oxy\hbox
- {\doifelsenothing{\@@oxplaats}
+ {\doifelsenothing\@@oxplaats
{\box\nextbox}
{\alignedbox[\@@oxplaats]\hbox{\box\nextbox}}}}%
\wd\nextbox\@@oxbreedte
@@ -376,7 +376,7 @@
% {\getvalue{#1\c!commandos}%
% \doattributes{#1}\c!letter\c!kleur{\getvalue{#1\c!commando}{#2}}}
-\def\defineshortcut%
+\def\defineshortcut
{\dotripleargument\dodefineshortcut}
\def\dodefineshortcut[#1][#2][#3]%
@@ -463,6 +463,8 @@
\def\setupenv{\dodoubleargument\rawgetparameters[\??en]}
\def\doifenvelse#1{\doifdefinedelse{\??en#1}} % speed up
+\def\doifenv #1{\doifdefined {\??en#1}} % speed up
+\def\doifnotenv #1{\doifundefined {\??en#1}} % speed up
\def\env#1{\csname\??en#1\endcsname}
diff --git a/tex/context/base/core-not.tex b/tex/context/base/core-not.tex
index cc5a055d0..28716b8ee 100644
--- a/tex/context/base/core-not.tex
+++ b/tex/context/base/core-not.tex
@@ -97,10 +97,10 @@
\newif\ifcleverfootnotes % being [plaats=kolommen]
-\def\setupfootnotes%
+\def\setupfootnotes
{\dosingleempty\dosetupfootnotes}
-\def\dodofootnoterule%
+\def\dodofootnoterule
{\ifvmode
\color
[\@@vnlijnkleur]
@@ -129,32 +129,32 @@
\v!streng=>\footnotepenalty9999,
\v!zeerstreng=>\footnotepenalty\maxdimen,
\s!default=>\footnotepenalty\zeropoint,
- \v!unknown=>\footnotepenalty\commalistelement]%
+ \s!unknown=>\footnotepenalty\commalistelement]%
\fi
\setfootnotedistance
- \count\footins=1000
- \ExpandBothAfter\doifinsetelse{\v!kolommen}{\@@vnplaats}
+ \count\footins1000
+ \ExpandBothAfter\doifinsetelse\v!kolommen\@@vnplaats
{\cleverfootnotestrue % global ?
- \ifnum\@@kln=0
- \scratchcounter=1
+ \ifnum\@@kln=\zerocount
+ \scratchcounter\plusone
\else
- \scratchcounter=\@@vnn\relax
+ \scratchcounter\@@vnn
\fi
\global\endnotesfalse
\global\bottomnotestrue
\setcleverfootnotes}
{\cleverfootnotesfalse
- \ifnum\@@vnn=0
+ \ifnum\@@vnn=\zerocount
\settextfootnotes
- \scratchcounter=1
+ \scratchcounter\plusone
\else
\setcolumnfootnotes
- \scratchcounter=\@@vnn\relax
+ \scratchcounter\@@vnn
\divide\count\footins \scratchcounter
\fi
- \ExpandBothAfter\doifinsetelse{\v!pagina}{\@@vnplaats}
+ \ExpandBothAfter\doifinsetelse\v!pagina\@@vnplaats
{\global\endnotesfalse
- \ExpandBothAfter\doifinsetelse{\v!hoog}{\@@vnplaats}
+ \ExpandBothAfter\doifinsetelse\v!hoog\@@vnplaats
{\global\bottomnotesfalse}
{\global\bottomnotestrue}}
{\global\endnotestrue
@@ -182,16 +182,16 @@
\fi
-\def\setcleverfootnotes%
+\def\setcleverfootnotes
{\def\startpushfootnote {\bgroup % wellicht ooit kopuitlijnen
\stelinmargein[\c!uitlijnen=\v!links]%
\getvalue{\e!start\??vn\??vn}}%
\def\stoppushfootnote {\getvalue{\e!stop\??vn\??vn}%
\egroup}%
- \def\startpopfootnotes {}%
- \def\stoppopfootnotes {}}
+ \let\startpopfootnotes \donothing
+ \let\stoppopfootnotes \donothing}
-\def\setcolumnfootnotes%
+\def\setcolumnfootnotes
{\def\startpushfootnote {\setfootnotehsize % possibly overloaded
\setrigidcolumnhsize\hsize\@@vnkolomafstand\@@vnn
\bgroup
@@ -202,32 +202,21 @@
\def\startpopfootnotes {\bgroup
\setfootnotehsize
\setrigidcolumnhsize\hsize\@@vnkolomafstand\@@vnn
- \setbox0=\vbox\bgroup}%
+ \setbox0\vbox\bgroup}%
\def\stoppopfootnotes {\egroup
- \setbox0=\vbox
+ \setbox0\vbox
{\unvbox0\setbox0\lastbox
\ifvbox0\unvbox\else\box\fi0}%
\rigidcolumnbalance0\egroup}}
-% \def\settextfootnotes%
-% {\def\startpushfootnote {\startvboxtohbox
-% \dostartattributes\??vn\c!letter\c!kleur{}}%
-% \def\stoppushfootnote {\hskip\@@vnkolomafstand % plus.5em minus.5em
-% \dostopattributes
-% \stopvboxtohbox}%
-% \def\startpopfootnotes {\vbox\bgroup % \doifdimenelse
-% \doifnotinset{\@@vnbreedte}{\v!passend,\v!ruim}
-% {\setfootnotehsize}}%
-% \def\stoppopfootnotes {\convertvboxtohbox\egroup}}
-
-\def\settextfootnotes%
+\def\settextfootnotes
{\def\startpushfootnote {\startvboxtohbox
\dostartattributes\??vn\c!letter\c!kleur{}}%
\def\stoppushfootnote {\hskip\@@vnkolomafstand % plus.5em minus.5em
\dostopattributes
\stopvboxtohbox}%
\def\startpopfootnotes {\vbox\bgroup
- \doifnotinset{\@@vnbreedte}{\v!passend,\v!ruim}
+ \doifnotinset\@@vnbreedte{\v!passend,\v!ruim}
{\setfootnotehsize}%
\beginofshapebox}%
\def\stoppopfootnotes {\endofshapebox
@@ -319,24 +308,6 @@
\unexpanded\def\footnote {\dodoubleempty\dofootnote[1]}
\unexpanded\def\footnotetext{\dodoubleempty\dofootnote[0]}
-%\def\dofootnote[#1][#2]%
-% {\unskip
-% \ifcase#1\relax
-% \global\footnotesymbolfalse
-% \else
-% \global\footnotesymboltrue
-% \fi
-% \ifvisible
-% \ifreshapingbox
-% \let\next\gobbletwoarguments
-% \else
-% \let\next\dodofootnote
-% \fi
-% \else
-% \let\next\gobbletwoarguments
-% \fi
-% \next{#2}}
-
\def\dofootnote[#1][#2]%
{\unskip
\ifcase#1\relax
@@ -387,32 +358,7 @@
{}
\fi}
-% \def\dodofootnote#1%
-% {\iffootnotesenabled
-% \doglobal\increment\internalfootreference
-% \doifelse{\@@vnwijze}{\v!per\v!pagina}
-% {\settrue\pagewisefootnotes}
-% {\setfalse\pagewisefootnotes}%
-% \doifelse{#1}{-}
-% {\let\footnotenumber\empty}
-% {\ifconditional\pagewisefootnotes
-% \doifreferencefoundelse{\s!fnt:t:\internalfootreference}
-% {\ifnum\currentrealreference>\lastfootnotepage\relax
-% \global\let\lastfootnotepage\currentrealreference
-% \resetnummer[\v!voetnoot]%
-% \fi}
-% {}%
-% \fi
-% \verhoognummer[\v!voetnoot]%
-% \maakhetnummer[\v!voetnoot]%
-% \rawreference{\s!fnt}{#1}{\hetnummer}%
-% \let\footnotenumber\hetnummer}%
-% \expandafter\dostartfootnote
-% \else
-% \expandafter\gobbleoneargument
-% \fi}
-
-\def\dodofootnote%
+\def\dodofootnote
{\iffootnotesenabled
\iftrialtypesetting
\@EAEAEA\nododofootnote
@@ -429,8 +375,8 @@
\def\dododofootnote#1%
{\doglobal\increment\internalfootreference
- \doifelse{\@@vnwijze}{\v!per\v!pagina}
- {\settrue\pagewisefootnotes}
+ \doifelse\@@vnwijze{\v!per\v!pagina}
+ {\settrue \pagewisefootnotes}
{\setfalse\pagewisefootnotes}%
\doifelse{#1}{-}
{\let\footnotenumber\empty}
@@ -444,7 +390,7 @@
\fi
\verhoognummer[\v!voetnoot]%
\maakhetnummer[\v!voetnoot]%
- \rawreference{\s!fnt}{#1}{\hetnummer}%
+ \rawreference\s!fnt{#1}{\hetnummer}%
\let\footnotenumber\hetnummer}%
\dostartfootnote}
@@ -503,7 +449,7 @@
\let\rechtermargeafstand\linkermargeafstand
\fi
\ifcase\@@vnn\relax % new 31-07-99 ; always ?
- \doifnotinset{\@@vnbreedte}{\v!passend,\v!ruim}
+ \doifnotinset\@@vnbreedte{\v!passend,\v!ruim}
{\setfootnotehsize}%
\fi
\startpushfootnote
@@ -521,9 +467,9 @@
\fi
\fi
\iflocation
- \rawreference{\s!fnt}{\s!fnt:t:\internalfootreference}{}%
+ \rawreference\s!fnt{\s!fnt:t:\internalfootreference}{}%
\else\ifconditional\pagewisefootnotes
- \rawreference{\s!fnt}{\s!fnt:t:\internalfootreference}{}%
+ \rawreference\s!fnt{\s!fnt:t:\internalfootreference}{}%
\fi\fi}%
\bgroup
\postponefootnotes
@@ -531,7 +477,7 @@
\begstrut
\let\next}
-\def\dostopfootnote%
+\def\dostopfootnote
{\endstrut
\stoppushfootnote
\egroup
@@ -550,11 +496,11 @@
\naarbox
{\high{\tx\footnotenumber\domovednote\v!vorigepagina\v!volgendepagina}}%
[\s!fnt:t:\internalfootreference]%
- \rawreference{\s!fnt}{\s!fnt:f:\internalfootreference}{}%
+ \rawreference\s!fnt{\s!fnt:f:\internalfootreference}{}%
\else
\high{\tx\footnotenumber\domovednote\v!vorigepagina\v!volgendepagina}%
\ifconditional\pagewisefootnotes
- \rawreference{\s!fnt}{\s!fnt:f:\internalfootreference}{}%
+ \rawreference\s!fnt{\s!fnt:f:\internalfootreference}{}%
\fi
\fi
\global\let\lastnotesymbol\relax}
@@ -596,15 +542,15 @@
\let\startpopfootnotes = \relax
\let\stoppopfootnotes = \relax
-\def\placefootnoteinserts%
+\def\placefootnoteinserts
{%\ifvoid\footins \else % unsafe, strange
- \ifdim\ht\footins>\!!zeropoint\relax
+ \ifdim\ht\footins>\zeropoint
\ifendnotes \else
\@@vnvoor
\dofootnoterule % alleen in ..mode
\bgroup
\setfootnotebodyfont
- \setbox0=\hbox
+ \setbox0\hbox
{\startpopfootnotes
\setfootnotebodyfont
% % this should be checked, smells like a mix-up
@@ -662,49 +608,44 @@
\newbox\postponedfootnotes
-\def\autopostponefootnotes%
-% {\gdef\localfootinsert%
- {\def\localfootinsert%
+\def\autopostponefootnotes
+ {\def\localfootinsert % not global
{\ifinner
%\message{[postponed footnote]}%
- \global\setbox\postponedfootnotes=\vbox\bgroup
+ \global\setbox\postponedfootnotes\vbox\bgroup
\ifvoid\postponedfootnotes\else
\unvbox\postponedfootnotes
\fi
- \let\next=\gobbletwoarguments
+ \expandafter\gobbletwoarguments
\else
%\message{[inserted footnote]}%
- \let\next=\insert
- \fi
- \next}}
+ \expandafter\insert
+ \fi}}
-\def\postponefootnotes%
- {\let\autopostponefootnotes=\postponefootnotes
+\def\postponefootnotes
+ {\let\autopostponefootnotes\postponefootnotes
\let\postponefootnotes\relax % prevent loops
-% \gdef\localfootinsert%
- \def\localfootinsert%
+ \def\localfootinsert % not global
{%\message{[postponed footnote]}%
\global\setbox\postponedfootnotes=\vbox\bgroup
\unvbox\postponedfootnotes
\gobbletwoarguments}}
-\def\doflushnotes% also called directly, \ifvoid is needed !
+\def\doflushnotes % also called directly, \ifvoid is needed !
{\ifendnotes \else
\ifvoid\postponedfootnotes
-% \global\let\localfootinsert=\insert
- \let\localfootinsert=\insert
+ \let\localfootinsert\insert % not global
\else
\bgroup
- \ifdim\ht\postponedfootnotes>\!!zeropoint
- \scratchdimen=\pagegoal
- \advance\scratchdimen by -\pagetotal
+ \ifdim\ht\postponedfootnotes>\zeropoint
+ \scratchdimen\pagegoal
+ \advance\scratchdimen -\pagetotal
\ifdim\scratchdimen<\ht\postponedfootnotes
\message{[moved footnote]}%
\fi
\fi
\egroup
-% \global\let\localfootinsert=\insert
- \let\localfootinsert=\insert
+ \let\localfootinsert\insert % not global
\insert\footins\bgroup\unvbox\postponedfootnotes\egroup
\fi
\fi}
@@ -744,12 +685,12 @@
\fi
\snaptogrid\hbox
{\setfootnotebodyfont
- \setbox0=\hbox
+ \setbox0\hbox
{\startpopfootnotes
\unvbox#1\endgraf\relax
\stoppopfootnotes}%
- \doif{\@@vnbreedte}{\v!passend} % new, auto width
- {\setbox0=\hbox % uggly but ok.
+ \doif\@@vnbreedte\v!passend % new, auto width
+ {\setbox0\hbox % uggly but ok.
{\beginofshapebox
\unhbox0\setbox0=\lastbox\unvbox0
\endofshapebox
@@ -761,7 +702,7 @@
\c!hoogte=\v!passend,
\c!strut=\v!nee,
\c!offset=\v!overlay]
- {\ifdim\dp0=\!!zeropoint % this hack is needed because \vadjust
+ {\ifdim\dp0=\zeropoint % this hack is needed because \vadjust
\hbox{\lower\dp\strutbox\box0}% % in margin number placement
\else % hides the (always) present depth
\box0
@@ -804,7 +745,7 @@
\def\collectlocalfootnotes%
{\def\localfootinsert##1% was \gdef, but never reset!
{%\message{[local footnote]}%
- \global\setbox\localpostponedfootnotes=\vbox\bgroup
+ \global\setbox\localpostponedfootnotes\vbox\bgroup
\ifvoid\localpostponedfootnotes \else
\unvbox\localpostponedfootnotes
\fi
@@ -813,18 +754,18 @@
\def\dostartlocalfootnotes[#1]%
{\let\autopostponefootnotes\postponefootnotes
\let\postponefootnotes\collectlocalfootnotes
- \def\defaultfootnotewidth%
+ \def\defaultfootnotewidth
{\ifdim\hsize<\zetbreedte\hsize\else\zetbreedte\fi}%
\setupfootnotes[#1]%
\savenumber[\v!voetnoot]%
\resetnummer[\v!voetnoot]%
\collectlocalfootnotes}
-\def\startlocalfootnotes%
+\def\startlocalfootnotes
{\bgroup % here because we support \vbox\startlocalfootnotes
\dosingleempty\dostartlocalfootnotes}
-\def\stoplocalfootnotes%
+\def\stoplocalfootnotes
{\restorenumber[\v!voetnoot]%
\egroup
\checknotes} % really needed, else wrong main settings
@@ -832,13 +773,13 @@
\def\doplacelocalfootnotes[#1]%
{\bgroup
\setupfootnotes[#1]%
- \ExpandBothAfter\doifinsetelse{\v!geen}{\@@vnplaats}
+ \ExpandBothAfter\doifinsetelse\v!geen\@@vnplaats
{\placefootnotesasnone\localpostponedfootnotes}%
{\placefootnotesintext\localpostponedfootnotes}%
\egroup
\checknotes}
-\def\placelocalfootnotes%
+\def\placelocalfootnotes
{\dosingleempty\doplacelocalfootnotes}
%D These commands can be used like:
@@ -876,7 +817,7 @@
%D
%D \showsetup{\y!placefootnotes}
-\def\placefootnotes%
+\def\placefootnotes
{\dosingleempty\doplacefootnotes}
\def\doplacefootnotes[#1]%
@@ -884,9 +825,8 @@
\ifendnotes
\ifinpagebody \else \ifdim\ht\postponedfootnotes>\zeropoint
\iffirstargument\setupfootnotes[#1,\c!hoogte=\teksthoogte]\fi
- \ExpandBothAfter\doifinsetelse{\v!geen}{\@@vnplaats}
- {\placefootnotesasnone\postponedfootnotes}%
- {\placefootnotesintext\postponedfootnotes}%
+ \ExpandBothAfter\doifinsetelse\v!geen\@@vnplaats
+ \placefootnotesasnone\placefootnotesintext\postponedfootnotes
\fi \fi
\else \ifdim\ht\footins>\zeropoint
\iffirstargument\setupfootnotes[#1,\c!hoogte=\teksthoogte]\fi
@@ -949,12 +889,7 @@
%D from the global document bodyfont size. In the previous macros
%D we already used a footnote specific font setting macro.
-%\def\setfootnotebodyfont%
-% {\let\setfootnotebodyfont\relax
-% \restoreglobalbodyfont
-% \switchtobodyfont[\@@vnkorps]}
-
-\def\setfootnotebodyfont%
+\def\setfootnotebodyfont
{\let\setfootnotebodyfont\relax
\restoreglobalbodyfont
\switchtobodyfont[\@@vnkorps]%
diff --git a/tex/context/base/core-ntb.tex b/tex/context/base/core-ntb.tex
index 0af157422..83085644d 100644
--- a/tex/context/base/core-ntb.tex
+++ b/tex/context/base/core-ntb.tex
@@ -38,7 +38,11 @@
%D
%D \bTH \eTH
%D \stoptypen
-
+
+% the section setup does not work yet, data needs to be stored,
+% i.e.each row should know if it's a head/body/foot, and there
+% should be \setupTABLE[head]... and alike
+
\unprotect
%D A simple way to force equal line spacing is to say:
@@ -51,10 +55,10 @@
%D However, the next alternative also takes care of preceding
%D and following white space.
-\def\bTBLCELL%
+\def\bTBLCELL
{\inhibitblank\doconvertfont\tbltblletter\empty\everypar{\begstrut}}
-\def\eTBLCELL%
+\def\eTBLCELL
{\ifhmode
\endstrut
\else
@@ -68,7 +72,6 @@
\newcounter\currenttbl
-%\def\@@tbl{tbl} \def\tblcell{m} \def\tblnone{n}
\def\@@tbl{tbl} \def\tblcell{1} \def\tblnone{2}
\def\@@tblprefix{tbl:} \let\@@rawtblprefix\@@tblprefix
@@ -82,12 +85,12 @@
\def\settblwd #1#2#3{\setxvalue{\@@tblprefix#1:#2:wd}{#3}} % global !
\def\settblht #1#2#3{\setxvalue{\@@tblprefix#1:#2:ht}{#3}} % global !
-\def\gettbltag#1#2{\getvalue{\@@tblprefix#1:#2:s}}
-\def\gettblcol#1#2{\getvalue{\@@tblprefix#1:#2:c}}
-\def\gettblrow#1#2{\getvalue{\@@tblprefix#1:#2:r}}
+\def\gettbltag#1#2{\csname\@@tblprefix#1:#2:s\endcsname}
+\def\gettblcol#1#2{\csname\@@tblprefix#1:#2:c\endcsname}
+\def\gettblrow#1#2{\csname\@@tblprefix#1:#2:r\endcsname}
-\def\gettblwd #1#2{\getvalue{\@@tblprefix#1:#2:wd}}
-\def\gettblht #1#2{\getvalue{\@@tblprefix#1:#2:ht}}
+\def\gettblwd #1#2{\csname\@@tblprefix#1:#2:wd\endcsname}
+\def\gettblht #1#2{\csname\@@tblprefix#1:#2:ht\endcsname}
\def\settblwid#1#2{\setxvalue{\@@tblprefix#1:w}{#2}} % global !
\def\settblhei#1#2{\setxvalue{\@@tblprefix#1:h}{#2}} % global !
@@ -95,7 +98,7 @@
\def\gettblwid#1{\ifundefined{\@@tblprefix#1:w}\!!zeropoint\else\getvalue{\@@tblprefix#1:w}\fi}
\def\gettblhei#1{\ifundefined{\@@tblprefix#1:h}\!!zeropoint\else\getvalue{\@@tblprefix#1:h}\fi}
-\def\gettblaut#1{\getvalue{\@@tblprefix#1:a}}
+\def\gettblaut#1{\csname\@@tblprefix#1:a\endcsname}
\def\doiftbltag #1#2{\doifdefined {\@@tblprefix#1:#2:s}}
\def\doifnottbltag #1#2{\doifundefined {\@@tblprefix#1:#2:s}}
@@ -105,7 +108,7 @@
\def\doifnottblcol #1#2{\doifundefined {\@@tblprefix#1:#2:c}}
\def\settbltxt#1#2{\long\setvalue{\@@tblprefix:#1:#2:t}}
-\def\gettbltxt#1#2{\getvalue {\@@tblprefix:#1:#2:t}}
+\def\gettbltxt#1#2{\csname\@@tblprefix:#1:#2:t\endcsname}
%\def\doiftbl #1#2#3{\ifcase0\getvalue{\@@tblprefix#1:#2:s}\relax \else#3\fi}
%\def\doifnottbl #1#2#3{\ifcase0\getvalue{\@@tblprefix#1:#2:s}\relax #3\fi}
@@ -126,9 +129,13 @@
\newif\ifautoTBLemptycell \autoTBLemptycelltrue
\newif\ifautoTBLcheckwidth \autoTBLcheckwidthtrue
\newif\ifappendTBLsetups \appendTBLsetupstrue
+\newif\ifenableTBLbreak \enableTBLbreakfalse
+\newif\ifmultipleTBLheads \multipleTBLheadsfalse
\newif\iftraceTABLE \traceTABLEfalse
+\def\noftblheadlines{0}
+
\presetlocalframed[\@@tbl\@@tbl]
\long\def\handleTBLcell#1#2[#3]{}
@@ -139,31 +146,31 @@
\let\getTABLEparameters\getparameters
-\unexpanded\def\setupTABLE%
+\unexpanded\def\setupTABLE
{\dotripleempty\dosetupTABLE}
\def\dosetupTABLE[#1][#2][#3]%
{\ifthirdargument
\processaction
[#1]
- [ \v!rij=>{\dosetupTABLExy[\c!y][#2][#3]},
- \v!kolom=>{\dosetupTABLExy[\c!x][#2][#3]},
- r=>{\dosetupTABLExy[\c!y][#2][#3]},
- c=>{\dosetupTABLExy[\c!x][#2][#3]},
- y=>{\dosetupTABLExy[\c!y][#2][#3]},
- x=>{\dosetupTABLExy[\c!x][#2][#3]},
- \v!start=>{\dosetupTABLExy[#1][#2][#3]},
+ [ \v!rij=>{\dosetupTABLExy[\c!y][#2][#3]},%
+ \v!kolom=>{\dosetupTABLExy[\c!x][#2][#3]},%
+ r=>{\dosetupTABLExy[\c!y][#2][#3]},%
+ c=>{\dosetupTABLExy[\c!x][#2][#3]},%
+ y=>{\dosetupTABLExy[\c!y][#2][#3]},%
+ x=>{\dosetupTABLExy[\c!x][#2][#3]},%
+ \v!start=>{\dosetupTABLExy[#1][#2][#3]},%
\s!unknown=>{\dosetupTABLEzz[#1][#2][#3]}]%
\else\ifsecondargument
\processaction
[#1]
- [ \v!rij=>{\dosetupTABLExy[\c!y][\v!elk][#2]},
- \v!kolom=>{\dosetupTABLExy[\c!x][\v!elk][#2]},
- r=>{\dosetupTABLExy[\c!y][\v!elk][#2]},
- c=>{\dosetupTABLExy[\c!x][\v!elk][#2]},
- y=>{\dosetupTABLExy[\c!y][\v!elk][#2]},
- x=>{\dosetupTABLExy[\c!x][\v!elk][#2]},
- \v!start=>{\dosetupTABLExy[#1][\v!elk][#2]},
+ [ \v!rij=>{\dosetupTABLExy[\c!y][\v!elk][#2]},%
+ \v!kolom=>{\dosetupTABLExy[\c!x][\v!elk][#2]},%
+ r=>{\dosetupTABLExy[\c!y][\v!elk][#2]},%
+ c=>{\dosetupTABLExy[\c!x][\v!elk][#2]},%
+ y=>{\dosetupTABLExy[\c!y][\v!elk][#2]},%
+ x=>{\dosetupTABLExy[\c!x][\v!elk][#2]},%
+ \v!start=>{\dosetupTABLExy[#1][\v!elk][#2]},%
\s!unknown=>{\dosetupTABLEzz[\c!x][#1][#2]}]%
\else
\getparameters[\@@tbl\@@tbl][#1]%
@@ -182,7 +189,7 @@
\processcommalist[#1]\dodosetupTABLE}
\def\nopTABLEparameters[#1][#2]%
- {\setvalue{\@@tblprefix#1}{}}
+ {\letvalue{\@@tblprefix#1}\empty}
\def\setTABLEparameters[#1][#2]%
{\pushTBLparameters
@@ -198,25 +205,66 @@
\fi
\popTBLparameters}
-\def\v!oddeven#1{\ifodd#1\v!oneven\else\v!even\fi}
-
\let\setupTBLsection\relax
-\def\setupTBLcell#1#2% cell over col over row
- {\setupTBLsection % here ?
+% \def\setupTBLcell#1#2% cell over col over row
+% {\setupTBLsection % already forgotten
+% \getvalue{\@@tblprefix\c!y\v!elk}%
+% \getvalue{\@@tblprefix\c!x\v!elk}%
+% \getvalue{\@@tblprefix\c!y\v!oddeven{#1}}%
+% \getvalue{\@@tblprefix\c!x\v!oddeven{#2}}%
+% \getvalue{\@@tblprefix\c!x\v!oddeven{#2}\c!y\v!oddeven{#1}}%
+% \ifnum#1=\plusone \getvalue{\@@tblprefix\c!y\v!eerste }\fi
+% \ifnum#2=\plusone \getvalue{\@@tblprefix\c!x\v!eerste }\fi
+% \ifnum#1=\maximumrow\relax\getvalue{\@@tblprefix\c!y\v!laatste}\fi
+% \ifnum#2=\maximumcol\relax\getvalue{\@@tblprefix\c!x\v!laatste}\fi
+% \ifnum#1=\maximumrow\relax\ifnum#2=\maximumcol\relax
+% \getvalue{\@@tblprefix\c!x\v!laatste\c!y\v!laatste}%
+% \fi\fi
+% \ifnum#1=\plusone \ifnum#2=\plusone
+% \getvalue{\@@tblprefix\c!x\v!eerste\c!y\v!eerste}%
+% \fi\fi
+% \getvalue{\@@tblprefix\c!y#1}%
+% \getvalue{\@@tblprefix\c!x#2}%
+% \getvalue{\@@tblprefix\c!x#2\c!y#1}\relax}
+
+\def\setupTBLcell#1#2% cell over col over row
+ {\setupTBLsection % already forgotten
\getvalue{\@@tblprefix\c!y\v!elk}%
\getvalue{\@@tblprefix\c!x\v!elk}%
\getvalue{\@@tblprefix\c!y\v!oddeven{#1}}%
\getvalue{\@@tblprefix\c!x\v!oddeven{#2}}%
\getvalue{\@@tblprefix\c!x\v!oddeven{#2}\c!y\v!oddeven{#1}}%
- \ifnum#1=1 \getvalue{\@@tblprefix\c!y\v!eerste }\fi
- \ifnum#2=1 \getvalue{\@@tblprefix\c!x\v!eerste }\fi
- \ifnum#1=\maximumrow\relax\getvalue{\@@tblprefix\c!y\v!laatste}\fi
- \ifnum#2=\maximumcol\relax\getvalue{\@@tblprefix\c!x\v!laatste}\fi
- \getvalue{\@@tblprefix\c!y#1}%
- \getvalue{\@@tblprefix\c!x#2}%
- \getvalue{\@@tblprefix\c!x#2\c!y#1}\relax}
-
+ \ifnum#1=\plusone
+ \getvalue{\@@tblprefix\c!y\v!eerste}%
+ \executeifdefined{\@@tblprefix\c!x#2\c!y\v!eerste}\donothing
+ \fi
+ \ifnum#2=\plusone
+ \getvalue{\@@tblprefix\c!x\v!eerste}%
+ \executeifdefined{\@@tblprefix\c!x\v!eerste\c!y#1}\donothing
+ \fi
+ \ifnum#1=\maximumrow\relax
+ \getvalue{\@@tblprefix\c!y\v!laatste}%
+ \executeifdefined{\@@tblprefix\c!x#2\c!y\v!laatste}\donothing
+ \fi
+ \ifnum#2=\maximumcol\relax
+ \getvalue{\@@tblprefix\c!x\v!laatste}%
+ \executeifdefined{\@@tblprefix\c!x\v!laatste\c!y#1}\donothing
+ \fi
+ \ifnum#1=\maximumrow\relax\ifnum#2=\maximumcol\relax
+ \getvalue{\@@tblprefix\c!x\v!laatste\c!y\v!laatste}%
+ \fi\fi
+ \ifnum#1=\plusone \ifnum#2=\plusone
+ \getvalue{\@@tblprefix\c!x\v!eerste\c!y\v!eerste}%
+ \fi\fi
+ %\getvalue{\@@tblprefix\c!y#1}%
+ %\getvalue{\@@tblprefix\c!x#2}%
+ %\getvalue{\@@tblprefix\c!x#2\c!y#1}\relax}
+ \executeifdefined{\@@tblprefix\c!y#1}\donothing
+ \executeifdefined{\@@tblprefix\c!x#2}\donothing
+ \executeifdefined{\@@tblprefix\c!x#2\c!y#1}\donothing
+ \relax}
+
%\long\def\parseTR[#1][#2]#3\eTR% [#2] is dummy that kills spaces
% {\def\currentcol{0}\increment\maximumrow#3}
@@ -224,40 +272,7 @@
{\def\currentcol{0}\increment\maximumrow
\setupTABLE[\v!rij][\maximumrow][#1]#3}
-% \long\def\parseTD[#1][#2]#3\eTD% [#2] is dummy that kills spaces
-% {\getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1]%
-% \let\row\maximumrow
-% \let\col\currentcol
-% % goto first cell
-% \doloop{\increment\col \doifnottbltag\row\col\exitloop}%
-% % fill r*c cells and set span
-% \let\currentcol\col
-% \let\currentrow\row
-% \dorecurse{\tblny}
-% {\let\col\currentcol
-% \settblcol\row\col\tblnx
-% \ifnum\tblnx>\maximumrowspan\relax
-% \let\maximumrowspan\tblnx
-% \fi
-% \dorecurse{\tblnx}
-% {\settbltag\row\col\tblnone
-% \increment\col}%
-% \increment\row}%
-% \decrement\row
-% % set values
-% \settbltag\maximumrow\currentcol\tblcell
-% \settblcol\maximumrow\currentcol\tblnx
-% \settblrow\maximumrow\currentcol\tblny
-% % save text
-% \edef\celltag{{\maximumrow}{\currentcol}}%
-% \@EA\settbltxt\@EA\maximumrow\@EA\currentcol\@EA
-% {\@EA\handleTBLcell\celltag[#1]{#3}}%
-% % check max column
-% \let\currentcol\col
-% \decrement\currentcol
-% \ifnum\currentcol>\maximumcol\let\maximumcol\currentcol\fi}
-
-\long\def\parseTD[#1][#2]#3\eTD% [#2] is dummy that kills spaces
+\long\def\parseTD[#1][#2]#3\eTD % [#2] is dummy that kills spaces
{\getparameters[\@@tbl][\c!ny=\tblnr,\c!nx=\tblnc,nc=1,nr=1,#1]%
% goto first cell
\doloop
@@ -266,13 +281,13 @@
% fill r*c cells and set span
\let\row\maximumrow
\let\col\currentcol
- \dorecurse{\tblny}
+ \dorecurse\tblny
{\let\col\currentcol
\settblcol\row\col\tblnx
\ifnum\tblnx>\maximumrowspan\relax
\let\maximumrowspan\tblnx
\fi
- \dorecurse{\tblnx}
+ \dorecurse\tblnx
{\settbltag\row\col\tblnone
\increment\col}%
\increment\row}%
@@ -290,9 +305,9 @@
\@EA\settbltxt\@EA\maximumrow\@EA\currentcol\@EA
{\@EA\handleTBLcell\celltag[#1]{#3}}}
-\long\def\parseTH[#1]#2\eTH%
-% {\parseTD[#1,\c!letter=\v!vet,\c!karakteruitlijnen=\v!nee]#2\eTD}
- {\parseTD[#1,\c!kleur=\tbltblkopkleur,\c!letter=\tbltblkopletter,%
+\long\def\parseTH[#1]#2\eTH
+ {\parseTD
+ [#1,\c!kleur=\tbltblkopkleur,\c!letter=\tbltblkopletter,%
\c!karakteruitlijnen=\v!nee]#2\eTD}
\newtoks\TBLhead
@@ -305,16 +320,16 @@
\long\def\bTABLEbody{\dosingleempty\doTABLEbody}
\long\def\bTABLEfoot{\dosingleempty\doTABLEfoot}
-\long\def\doTABLEhead[#1]#2\eTABLEhead%
+\long\def\doTABLEhead[#1]#2\eTABLEhead
{\appendtoks\doTABLEsection[#1]{#2}\to\TBLhead}
-\long\def\doTABLEbody[#1]#2\eTABLEbody%
+\long\def\doTABLEbody[#1]#2\eTABLEbody
{\appendtoks\doTABLEsection[#1]{#2}\to\TBLbody}
-\long\def\doTABLEfoot[#1]#2\eTABLEfoot%
+\long\def\doTABLEfoot[#1]#2\eTABLEfoot
{\appendtoks\doTABLEsection[#1]{#2}\to\TBLfoot}
-\long\def\doTABLEsection[#1]#2%
+\long\def\doTABLEsection[#1]#2%
{\def\setupTBLsection{\getparameters[\@@tbl\@@tbl][#1]}%
#2%
\let\setupTBLsection\relax}
@@ -329,24 +344,37 @@
\executeifdefined{\@@rawtblprefix\v!start\v!oddeven\TBLlevel}\relax
\executeifdefined{\@@rawtblprefix\v!start\number\TBLlevel}\relax}
-\def\bTABLE%
+\def\bTABLE
{\dosingleempty\dobTABLE}
\def\dobTABLE[#1]%
{\pushTBL
- \vbox\bgroup
- \localcolortrue
+ % box not here
+ \bgroup
\getparameters
[\@@tbl\@@tbl]
[\c!uitlijnen={\v!rechts,\v!ruim,\v!hoog},#1]%
+ \processaction
+ [\tbltblsplitsen]
+ [ \v!ja=>\enableTBLbreaktrue,
+ \v!herhaal=>\enableTBLbreaktrue\multipleTBLheadstrue]%
+ \ifnum\TBLlevel>\plusone
+ \vbox
+ \else\ifenableTBLbreak
+ % no \vbox
+ \else
+ \vbox
+ \fi\fi
+ \bgroup
+ \localcolortrue
\presetallTABLEparameters
\ExpandFirstAfter\processallactionsinset
[\tbltbloptie]
[\v!rek=>\autoTBLspreadtrue]%
- \linewidth=\tbltbllijndikte % needs to be frozen
+ \linewidth\tbltbllijndikte % needs to be frozen
\dontcomplain
- \def\currentcol{0}%
- \def\maximumrowspan{1}%
+ \let\currentcol\!!zerocount
+ \let\maximumrowspan\!!plusone
\let\maximumcol\currentcol
\let\maximumrow\currentcol
\def\bTR{\dodoubleempty\parseTR}%
@@ -354,12 +382,23 @@
\def\bTH{\dodoubleempty\parseTH}%
\endgraf}
+% permits \expanded{\bTD ... \eTD}
+
+\unexpanded\def\eTR{}
+\unexpanded\def\eTD{}
+\unexpanded\def\eTH{}
+
\def\eTABLE%
- {\the\TBLhead\the\TBLbody\the\TBLfoot\endgraf % tricky and dirty order -)
+ {% tricky and dirty order -)
+ \the\TBLhead
+ \edef\noftblheadlines{\number\maximumrow}%
+ \the\TBLbody
+ \the\TBLfoot
+ \endgraf
% finish cells
- \dorecurse{\maximumrow}
+ \dorecurse\maximumrow
{\let\row\recurselevel
- \dorecurse{\maximumcol}
+ \dorecurse\maximumcol
{\let\col\recurselevel \let\xxcol\col \let\xxrow\row
\doifnottbltag\row\col
{\let\xrow\row
@@ -380,9 +419,9 @@
\decrement(\xxcol,\col)\increment\xxcol
\doifnottbltag\row\col
{\let\xrow\row
- \dorecurse{\xxrow}
+ \dorecurse\xxrow
{\let\xcol\col \settblcol\xrow\xcol\xxcol
- \dorecurse{\xxcol}
+ \dorecurse\xxcol
{\settbltag\xrow\xcol\tblnone \increment\xcol}%
\increment\xrow}%
\settbltag\row\col\tblcell
@@ -394,45 +433,46 @@
{\@EA\handleTBLcell\celltag[]{\strut}}%
\fi}}}%
% to be sure
- \dorecurse{\maximumrow}
+ \dorecurse\maximumrow
{\let\row\recurselevel
- \dorecurse{\maximumcol}
+ \dorecurse\maximumcol
{\let\col\recurselevel
\doiftblrow\row\col
- {\scratchcounter=\maximumrow
- \advance\scratchcounter by -\row
- \advance\scratchcounter by 1
+ {\scratchcounter\maximumrow
+ \advance\scratchcounter -\row
+ \advance\scratchcounter \plusone
\ifnum\gettblrow\row\col>\scratchcounter
\settblrow\row\col{\the\scratchcounter}%
\fi}%
\settblht\row\col\!!zeropoint
\settblwd\row\col\!!zeropoint
- \doifnottblcol\row\col{\settblcol\row\col0}%
+ \doifnottblcol\row\col{\settblcol\row\col\!!zerocount}%
\doifnottbltag\row\col{\settbltag\row\col\tblnone}}}%
% check and do
\begTBL
- \dorecurse{\maximumrow}
+ \dorecurse\maximumrow
{\bTBL
\let\row\recurselevel
- \dorecurse{\maximumcol}
+ \dorecurse\maximumcol
{\let\col\recurselevel
\expanded{\doTBL{\row}{\col}}}%
\eTBL}%
\endTBL
-% wrong ! ! ! better to have an auto-offset-overlay
-% \ifnum\TBLlevel>1
-% \vskip-\dp\strutbox
-% \fi
+ % wrong ! ! ! better to have an auto-offset-overlay
+ % \ifnum\TBLlevel>1
+ % \vskip-\dp\strutbox
+ % \fi
+ \egroup
\egroup
\popTBL}
\def\spanTBL#1#2%
- {\scratchcounter=\gettblcol{#1}{#2}\relax
- \ifnum\scratchcounter>0
- \advance\scratchcounter -1
- \dorecurse{\scratchcounter}{\appendtoks\spantblcol\to\tbltoks}%
- \dorecurse{\scratchcounter}{\appendtoks\skiptblcol\to\tbltoks}%
- \appendtoks\nexttblcol\to\tbltoks
+ {\scratchcounter\gettblcol{#1}{#2}\relax
+ \ifnum\scratchcounter>\zerocount
+ \advance\scratchcounter \minusone
+ \dorecurse\scratchcounter{\appendtoks\spantblcol\to\tbltoks}%
+ \dorecurse\scratchcounter{\appendtoks\skiptblcol\to\tbltoks}%
+ \appendtoks\nexttblcol\to\tbltoks
\fi}
\def\bTBL{\appendtoks\begintblrow\to\tbltoks}
@@ -441,32 +481,43 @@
% We use aligments to handle the empty (skipped) columns, so
% that we don't have to (re|)|calculate these.
-\def\skiptblcol%
+\def\skiptblcol
{\doglobal\increment\colTBL}
-\def\nexttblcol%
+\def\nexttblcol
{\doglobal\increment\colTBL&}
-\def\spantblcol%
+\def\spantblcol
{\span}
-\def\begintblrow%
+\def\begintblrow
{\noalign
{\doglobal\increment\rowTBL
\doglobal\newcounter\colTBL}%
\nexttblcol}
-\def\endtblrow%
- {\crcr\noalign{\nointerlineskip}}
+\def\endtblrow
+ {\crcr
+ \noalign
+ {\nointerlineskip
+ \allowbreak
+ \bgroup
+ \increment\rowTBL\relax
+ \ifnum\rowTBL>\noftblheadlines\relax
+ \ifnum\rowTBL<\maximumrow\relax
+ \doifsomething\tbltbltussenwit{\blank[\tbltbltussenwit]}%
+ \fi
+ \fi
+ \egroup}}
-\def\begintbl%
+\def\begintbl
{\doglobal\newcounter\colTBL
\doglobal\newcounter\rowTBL
\doglobal\decrement\rowTBL
\tabskip\zeropoint
\halign\bgroup\ignorespaces##\unskip&&\ignorespaces##\unskip\cr}
-\def\endtbl%
+\def\endtbl
{\egroup}
\setvalue{\tblnone TBL}#1#2%
@@ -481,195 +532,188 @@
\def\doTBL#1#2%
{\getvalue{\gettbltag{#1}{#2}TBL}{#1}{#2}}
-\def\begTBL%
+\def\begTBL
{\doglobal\newcounter\rowTBL
\doglobal\newcounter\colTBL
- \chardef\TBLpass=0
+ \chardef\TBLpass\zerocount
\tbltoks\emptytoks
\appendtoks
\begintbl
\to\tbltoks}
-\def\endTBL%
+\def\endTBL
{\appendtoks
\endtbl
\to\tbltoks
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\localframed
[\@@tbl\@@tbl]
[\c!kader=\v!uit,\c!achtergrond=,\c!uitlijnen=\v!nee]
{\strut}}%
\edef\minimalcellheight{\the\ht\scratchbox}%
- \dorecurse{\maximumcol}
- {\settblaut\recurselevel\!!zeropoint
+ \dorecurse\maximumcol
+ {\settblaut\recurselevel\!!zeropoint % \zeropoint etc
% new
- \let\xcol\recurselevel
- \dorecurse{\maximumrow}
- {\settblwd \recurselevel\xcol\!!zeropoint
- \settblht \recurselevel\xcol\!!zeropoint}%
- % till here
- \settblwid\recurselevel\!!zeropoint}%
- \dorecurse{\maximumrow}
+ \let\xcol\recurselevel
+ \dorecurse\maximumrow
+ {\settblwd \recurselevel\xcol\!!zeropoint
+ \settblht \recurselevel\xcol\!!zeropoint}%
+ % till here
+ \settblwid\recurselevel\!!zeropoint}%
+ \dorecurse\maximumrow
{\settblhei\recurselevel\maxdimen}%
- \chardef\TBLpass=1
+ \chardef\TBLpass\plusone
\let\handleTBLcell\dohandleTBLcellA
\def\makeTBL##1##2%
- {\gettbltxt{##1}{##2}}%
+ {\gettbltxt{##1}{##2}}%
\def\inTBLcell##1##2%
- {\ExpandBothAfter\doifinsetelse{\localwidth}{\v!passend,\v!ruim} % user set
+ {\ExpandBothAfter\doifinsetelse\localwidth{\v!passend,\v!ruim} % user set
{}
- {\scratchdimen=\gettblaut\colTBL\relax
+ {\scratchdimen\gettblaut\colTBL\relax
\ifdim\localwidth>\scratchdimen
\settblaut\colTBL\localwidth
\fi}}%
- \setbox0=\vbox{\the\tbltoks}%
-\ifautoTBLspread
- % experimental, stretch non fixed cells to \hsize
- \checktblwidthsone % trial run
- \checktblwidthstwo % real run
- \let\handleTBLcell\dohandleTBLcellB
- \setbox\scratchbox=\vbox{\the\tbltoks}%
-\else
- \ifdim\wd0>\hsize
+ \setbox0\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \ifautoTBLspread
+ % experimental, stretch non fixed cells to \hsize
+ \checktblwidthsone % trial run
+ \checktblwidthstwo % real run
+ \let\handleTBLcell\dohandleTBLcellB
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \else\ifdim\wd0>\hsize
\ifautoTBLhsize
\checktblwidthsone % trial run
\checktblwidthstwo % real run
\let\handleTBLcell\dohandleTBLcellB
- \setbox\scratchbox=\vbox{\the\tbltoks}%
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
\fi
\else\ifautoTBLrowspan\ifnum\maximumrowspan>1 % max ?
-% added jan 2002 because nx=* did no longer work
- \checktblwidthsone % trial run
- \checktblwidthstwo % real run
-%
+ % added jan 2002 because nx=* did no longer work
+ \checktblwidthsone % trial run
+ \checktblwidthstwo % real run
+ %
\let\handleTBLcell\dohandleTBLcellC
- \setbox\scratchbox=\vbox{\the\tbltoks}%
- \fi\fi\fi
-\fi
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
+ \fi\fi\fi\fi
\let\handleTBLcell\dohandleTBLcellD
- \chardef\TBLpass=2
+ \chardef\TBLpass2
\def\makeTBL##1##2% meer in cellD
- {\dimen2=\zeropoint
+ {\dimen2\zeropoint
\pushmacro\colTBL
\dorecurse{\gettblcol{##1}{##2}}
- {\advance\dimen2 by \gettblwid\colTBL
+ {\advance\dimen2 \gettblwid\colTBL
\increment\colTBL}%
\edef\widthTBL{\the\dimen2}%
\popmacro\colTBL
- \setbox\scratchbox=\hbox{\gettbltxt{##1}{##2}}%
+ \setbox\scratchbox\hbox{\gettbltxt{##1}{##2}}%
\settblht{##1}{##2}{\the\ht\scratchbox}%
\settblwd{##1}{##2}{\the\wd\scratchbox}%
\ifdim\ht\scratchbox>\gettblhei{##1}\relax
\settblhei{##1}{\the\ht\scratchbox}%
\fi}%
- \setbox\scratchbox=\vbox{\the\tbltoks}%
+ \setbox\scratchbox\vbox{\trialtypesettingtrue \the\tbltoks}%
\checktblheightsone
\checktblheightstwo
\let\handleTBLcell\dohandleTBLcellE
- \chardef\TBLpass=3
+ \chardef\TBLpass3
\def\makeTBL##1##2%
{% height
\pushmacro\rowTBL
- \scratchdimen=\zeropoint
+ \scratchdimen\zeropoint
\def\rowTBL{##1}%
\ifnum\gettblcol{##1}{##2}=\maximumcol\relax
% case: nc=maxcolumns
\else
\dorecurse{\gettblrow{##1}{##2}}
- {\advance\scratchdimen by \gettblhei\rowTBL
+ {\advance\scratchdimen \gettblhei\rowTBL
\increment\rowTBL}%
\ifdim\scratchdimen<\gettblht{##1}{##2}\relax
- \scratchdimen=\gettblht{##1}{##2}\relax
+ \scratchdimen\gettblht{##1}{##2}\relax
\fi
\fi
\edef\heightTBL{\the\scratchdimen}%
\popmacro\rowTBL
% width
\pushmacro\colTBL
- \scratchdimen=\zeropoint
+ \scratchdimen\zeropoint
\dorecurse{\gettblcol{##1}{##2}}
- {\advance\scratchdimen by \gettblwid\colTBL
+ {\advance\scratchdimen \gettblwid\colTBL
\increment\colTBL}%
\edef\widthTBL{\the\scratchdimen}%
\popmacro\colTBL
% cell
- \setbox\scratchbox=\hbox{\gettbltxt{##1}{##2}}%
+ \setbox\scratchbox\hbox{\gettbltxt{##1}{##2}}%
\ifnum\gettblcol{##1}{##2}=\maximumcol\relax
% case: nc=maxcolumns
\else
- \scratchdimen=\gettblhei{##1}%
- \setbox\scratchbox=\hbox
+ \scratchdimen\gettblhei{##1}%
+ \setbox\scratchbox\hbox
{\lower\ht\scratchbox\hbox{\raise\scratchdimen\box\scratchbox}}%
- \ht\scratchbox=\scratchdimen
+ \ht\scratchbox\scratchdimen
\fi
- \dp\scratchbox=\zeropoint
+ \dp\scratchbox\zeropoint
\box\scratchbox}%
\iftraceTABLE\showtbltoks\fi
- \vbox{\the\tbltoks}}
+ \ifnum\TBLlevel>\plusone
+ \vbox{\the\tbltoks}%
+ \else\ifenableTBLbreak
+ \ifmultipleTBLheads
+ \setbox\scratchbox\vbox{\the\tbltoks}%
+ \splittblbox\scratchbox
+ \else
+ \the\tbltoks
+ \fi
+ \else
+ \vbox{\the\tbltoks}%
+ \fi\fi}
+
+\def\splittblbox#1% #1 <> 0/2
+ {\unvbox#1}
\def\checktblwidthsone{\dochecktblwidths0} % 0 = trial run
\def\checktblwidthstwo{\dochecktblwidths1} % 1 = real run
\def\dochecktblwidths#1%
{\iftraceTABLE\showtblwids{B#1}\fi
- \!!dimena=\hsize
- \!!counta=0
- \dorecurse{\maximumcol}
- {\scratchdimen=\gettblaut\recurselevel\relax
+ \!!dimena\hsize
+ \!!counta\zerocount
+ \dorecurse\maximumcol
+ {\scratchdimen\gettblaut\recurselevel\relax
\ifdim\scratchdimen>\zeropoint\relax
- \advance\!!dimena by -\scratchdimen
+ \advance\!!dimena -\scratchdimen
\else
- \scratchdimen=\gettblwid\recurselevel\relax
+ \scratchdimen\gettblwid\recurselevel\relax
\ifdim\scratchdimen>\tbltblmaxbreedte\relax
\ifcase#1\else\settblwid\recurselevel\!!zeropoint\fi
- \advance\!!counta by 1
+ \advance\!!counta \plusone
\else
\ifdim\scratchdimen>\zeropoint\relax
- \advance\!!dimena by -\scratchdimen
+ \advance\!!dimena -\scratchdimen
\else
% eigenlijk moet dit alleen als de kolom wordt overspannen door een
% vorige, maw extra dubbele loop en status var
- \advance\!!counta by 1
+ \advance\!!counta \plusone
\fi
\fi
\fi}%
- \ifcase\!!counta \else \divide\!!dimena by \!!counta \fi
- \dorecurse{\maximumcol}
- {\scratchdimen=\gettblwid\recurselevel\relax
+ \ifcase\!!counta \else \divide\!!dimena \!!counta \fi
+ \dorecurse\maximumcol
+ {\scratchdimen\gettblwid\recurselevel\relax
\ifcase#1\relax
- \ifdim\scratchdimen<\!!dimena % take natural width
+ \ifdim\scratchdimen<\!!dimena % take natural width
\settblaut\recurselevel{\the\scratchdimen}%
\fi
\else
- \ifdim\scratchdimen=\zeropoint\relax % auto set width
+ \ifdim\scratchdimen=\zeropoint % auto set width
\settblwid\recurselevel{\the\!!dimena}%
\fi
\fi}%
\iftraceTABLE\showtblwids{E#1}\fi}
-
-% \def\checktblwidthsXXX%
-% {\!!dimena=\hsize
-% \!!counta=0
-% \dorecurse{\maximumcol}
-% {\scratchdimen=\gettblaut\recurselevel\relax
-% \ifdim\scratchdimen>\zeropoint\relax
-% \advance\!!dimena by -\scratchdimen
-% \else
-% \advance\!!counta by 1
-% \fi}%
-% \ifcase\!!counta \else \divide\!!dimena by \!!counta \fi
-% \dorecurse{\maximumcol}
-% {\scratchdimen=\gettblaut\recurselevel\relax
-% \ifdim\scratchdimen=\zeropoint\relax
-% \settblaut\recurselevel{\the\!!dimena}%
-% \fi
-% \settblwid\recurselevel{\the\!!dimena}%
-% }}
-
-\def\checktblheightsone%
- {\dorecurse{\maximumrow}
+
+\def\checktblheightsone
+ {\dorecurse\maximumrow
{\let\xrowTBL\recurselevel
- \dorecurse{\maximumcol}
+ \dorecurse\maximumcol
{\let\xcolTBL\recurselevel
\count0=0\gettblrow\xrowTBL\xcolTBL\relax
% check row span
@@ -677,11 +721,11 @@
% current height in row
\dimen0=\gettblht\xrowTBL\xcolTBL
% find nearest height in row
- \dimen2=\!!zeropoint
- \dorecurse{\maximumcol}
+ \dimen2=\zeropoint
+ \dorecurse\maximumcol
{\ifnum\recurselevel=\xcolTBL\else
\count2=0\gettblrow\xrowTBL\recurselevel\relax
- \ifnum\count2=1
+ \ifnum\count2=\plusone
\dimen4=\gettblht\xrowTBL\recurselevel\relax
\ifdim\dimen2<\dimen4
\dimen2=\dimen4
@@ -693,20 +737,20 @@
\dimen4=\dimen2
\dorecurse{\count0}
{\ifnum\xxrowTBL=\xrowTBL\else
- \advance\dimen4 by \gettblhei\xxrowTBL
+ \advance\dimen4 \gettblhei\xxrowTBL
\fi
\increment\xxrowTBL}%
% distribute overshoot equally
\ifdim\dimen4<\dimen0
- \advance\dimen0 by -\dimen4
- \divide\dimen0 by \count0
+ \advance\dimen0 -\dimen4
+ \divide\dimen0 \count0
\let\xxrowTBL\xrowTBL
\settblhei\xrowTBL{\the\dimen2}%
\dorecurse{\count0}
- {\dorecurse{\maximumcol}
+ {\dorecurse\maximumcol
{\ifnum\recurselevel=\xcolTBL\else
- \scratchdimen=\gettblht\xxrowTBL\recurselevel
- \advance\scratchdimen by \dimen0
+ \scratchdimen\gettblht\xxrowTBL\recurselevel
+ \advance\scratchdimen \dimen0
\settblht\xxrowTBL\recurselevel{\the\scratchdimen}%
\ifdim\gettblhei\xxrowTBL<\scratchdimen
\settblhei\xxrowTBL{\the\scratchdimen}%
@@ -723,10 +767,11 @@
\def\showtblwids#1%
{\vbox
- {\forgetall\tttf
- [#1]\dorecurse{\maximumcol}{[\recurselevel:\gettblwid\recurselevel]}}}
+ {\forgetall\tttf[#1]\dorecurse\maximumcol
+ {\scratchdimen\gettblwid\recurselevel
+ [\recurselevel:\the\scratchdimen]}}}
-\def\showtbltoks%
+\def\showtbltoks
{\vbox
{\forgetall\tttf
\let\begintbl \relax \let\endtbl \relax
@@ -735,11 +780,9 @@
\def\makeTBL##1##2{[##1,##2]}
\the\tbltoks}}
-\def\TBLcharalign%
- {\doifelse{\tbltblkarakteruitlijnen}{\v!ja}
- {\let\next\doTBLcharalign}
- {\let\next\gobbleoneargument}%
- \next}
+\def\TBLcharalign
+ {\doifelse\tbltblkarakteruitlijnen\v!ja
+ \doTBLcharalign\gobbleoneargument}
\long\def\doTBLcharalign#1#2% column data
{\edef\alignmentclass{#1}%
@@ -747,54 +790,22 @@
\ifcase\TBLpass\or
\setfirstpasscharacteralign\checkalignment{\strut#2\unskip}%
\fi % force hsize, so always a second
- \setsecondpasscharacteralign\checkalignment{\strut#2\unskip}%
+ \setsecondpasscharacteralign \checkalignment{\strut#2\unskip}%
\ignorespaces}
-% \long\def\dohandleTBLcellA#1#2[#3]#4%
-% {\setbox\scratchbox=\hbox
-% {\setupTBLcell{#1}{#2}%
-% \localframed
-% [\@@tbl\@@tbl]
-% [#3,\c!achtergrond=,\c!kader=\v!uit]% 25% faster
-% {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL\inTBLcell{#1}{#2}}}%
-% \scratchdimen=\gettblwid\colTBL\relax
-% \ifdim\wd\scratchbox>\scratchdimen
-% \settblwid\colTBL{\the\wd\scratchbox}% auto set
-% \fi
-% \let\rowTBLx\rowTBL\increment\rowTBLx
-% \scratchdimen=\gettblhei\rowTBLx\relax
-% \ifdim\ht\scratchbox<\scratchdimen
-% \settblhei\rowTBLx{\the\ht\scratchbox}% auto set
-% \fi
-% \settblht{#1}{#2}{\the\ht\scratchbox}%
-% \settblwd{#1}{#2}{\the\wd\scratchbox}%
-% \ifdim\wd\scratchbox<.75\hsize
-% \ifdim\ht\scratchbox>2\openlineheight % honor width since this can be a
-% \scratchdimen=\gettblaut\colTBL\relax % figure or so
-% \ifdim\wd\scratchbox>\scratchdimen
-% \settblaut\colTBL{\the\wd\scratchbox}%
-% %\message{[forcing width of \colTBL\space(\the\wd\scratchbox/\the\hsize)]}%
-% \fi
-% \fi
-% \fi
-% \setbox2=\null
-% \wd2=\wd\scratchbox \ht2=\ht\scratchbox \dp2=\dp\scratchbox
-% \box2}
-
\long\def\dohandleTBLcellA#1#2[#3]#4%
- {\setbox\scratchbox=\hbox
+ {\setbox\scratchbox\hbox
{\setupTBLcell{#1}{#2}%
\localframed
[\@@tbl\@@tbl]
[#3,\c!achtergrond=,\c!kader=\v!uit]% 25% faster
- {\trialtypesettingtrue
- \bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL\inTBLcell{#1}{#2}}}%
- \scratchdimen=\gettblwid\colTBL\relax
+ {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL\inTBLcell{#1}{#2}}}%
+ \scratchdimen\gettblwid\colTBL\relax
\ifdim\wd\scratchbox>\scratchdimen
\settblwid\colTBL{\the\wd\scratchbox}% auto set
\fi
\let\rowTBLx\rowTBL\increment\rowTBLx
- \scratchdimen=\gettblhei\rowTBLx\relax
+ \scratchdimen\gettblhei\rowTBLx\relax
\ifdim\ht\scratchbox<\scratchdimen
\settblhei\rowTBLx{\the\ht\scratchbox}% auto set
\fi
@@ -803,48 +814,52 @@
\ifautoTBLcheckwidth
\ifdim\wd\scratchbox<.75\hsize
\ifdim\ht\scratchbox>2\openlineheight % honor width since this can be a
- \scratchdimen=\gettblaut\colTBL\relax % figure or so
- \ifdim\wd\scratchbox>\scratchdimen
+ \scratchdimen\gettblaut\colTBL\relax % figure or so
+ \ifdim\scratchdimen=\zeropoint
+ % side effect: when width is set to 0pt,
+ % we can force a span that fits the sum of spans widths
+ \settblaut\colTBL{\the\scratchdimen}%
+ \else\ifdim\wd\scratchbox>\scratchdimen
+% unless span
\settblaut\colTBL{\the\wd\scratchbox}%
% to be translated
- \writestatus{TABLE}{no auto width in (\number#1,\number#2)\space\the\wd\scratchbox/\the\hsize}%
- \fi
+ \writestatus\m!TABLE{no auto width in (\number#1,\number#2)\space\the\wd\scratchbox/\the\hsize}%
+ \fi\fi
\fi
\fi
\fi
- \setbox2=\null
- \wd2=\wd\scratchbox \ht2=\ht\scratchbox \dp2=\dp\scratchbox
+ \setbox2\null
+ \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox
\box2}
\long\def\dohandleTBLcellBC#1#2#3[#4]#5%
- {\setbox\scratchbox=\hbox
+ {\setbox\scratchbox\hbox
{\setupTBLcell{#2}{#3}%
\localframed
[\@@tbl\@@tbl]
[#4,#1,\c!kader=\v!uit,\c!achtergrond=]
- {\trialtypesettingtrue
- \bTBLCELL#5\eTBLCELL}}%
- \setbox2=\null
- \wd2=\wd\scratchbox \ht2=\ht\scratchbox \dp2=\dp\scratchbox
+ {\bTBLCELL#5\eTBLCELL}}%
+ \setbox2\null
+ \wd2\wd\scratchbox \ht2\ht\scratchbox \dp2\dp\scratchbox
\ifautoTBLrowspan
\let\rowTBLx\rowTBL\increment\rowTBLx
- \scratchdimen=\gettblhei\rowTBLx\relax
+ \scratchdimen\gettblhei\rowTBLx\relax
\ifnum\gettblrow\rowTBLx\colTBL>1 \ifdim\ht\scratchbox>\scratchdimen
- \scratchdimen=-\scratchdimen \advance\scratchdimen by -\ht\scratchbox
- \ht2=\scratchdimen
+ \scratchdimen-\scratchdimen \advance\scratchdimen -\ht\scratchbox
+ \ht2\scratchdimen
\fi \fi
\fi
\box2 }
\long\def\dohandleTBLcellB#1#2[#3]#4%
- {\scratchdimen=\gettblaut\colTBL\relax
+ {\scratchdimen\gettblaut\colTBL\relax
\ifdim\scratchdimen>\zeropoint\relax
\let\tblwidthkey\c!breedte \edef\tblwidth{\the\scratchdimen}%
\else
- \scratchdimen=\gettblwid\colTBL\relax
+ \scratchdimen\gettblwid\colTBL\relax
\ifdim\scratchdimen>\zeropoint\relax
\ifnum\gettblcol{#1}{#2}=\maximumcol\relax
- \scratchdimen=\hsize
+ \scratchdimen\hsize
\fi
\let\tblwidthkey\c!breedte \edef\tblwidth{\the\scratchdimen}%
\else
@@ -853,17 +868,18 @@
\fi
\dohandleTBLcellBC{\tblwidthkey=\tblwidth}{#1}{#2}[#3]{\TBLcharalign{#2}{#4}}}
-\long\def\dohandleTBLcellC%
+\long\def\dohandleTBLcellC
{\dohandleTBLcellBC{}}
\long\def\dohandleTBLcellD#1#2[#3]#4%
{\setupTBLcell{#1}{#2}%
+ \bgroup
\localframed
[\@@tbl\@@tbl]
[#3,\c!breedte=\widthTBL,
\c!achtergrond=,\c!kader=\v!uit]% 25% faster
- {\trialtypesettingtrue
- \bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}}
+ {\bTBLCELL\TBLcharalign{#2}{#4}\eTBLCELL}%
+ \egroup}
\long\def\dohandleTBLcellE#1#2[#3]#4%
{\setupTBLcell{#1}{#2}%
@@ -888,12 +904,14 @@
\c!kaderkleur=black,
\c!kleur=,
\c!letter=,
-\c!kopletter=\v!vet,
-\c!kopkleur=,
+ \c!kopletter=\v!vet,
+ \c!kopkleur=,
\c!strut=\v!nee,
\c!karakteruitlijnen=\v!nee,
\c!uitlijnkarakter={,},
-\c!optie=, % \v!rek
+ \c!optie=, % \v!rek
+ \c!splitsen=\v!nee,
+ \c!tussenwit=,
\c!maxbreedte=8em]
%D We have already prepared the previous macros for nesting,
@@ -917,23 +935,23 @@
%D New:
-\def\pushTBLparameters%
+\def\pushTBLparameters
{\pushmacro\TBLlevel
\ifcase\TBLpass
% we're just after \bTABLE
- \else\ifnum\TBLlevel>0
+ \else\ifnum\TBLlevel>\zerocount
\doglobal\increment\TBLlevel\relax
\fi\fi}
-\def\popTBLparameters%
+\def\popTBLparameters
{\popmacro\TBLlevel}
-\def\pushTBL%
- {\ifnum\TBLlevel=0
+\def\pushTBL
+ {\ifnum\TBLlevel=\zerocount
\doglobal\increment\currenttbl\relax
\fi
\doglobal\increment\TBLlevel\relax
- \ifnum\TBLlevel>1
+ \ifnum\TBLlevel>\plusone
\resetallTABLEparameters
\pushmacro\colTBL
\pushmacro\rowTBL
@@ -941,8 +959,8 @@
\global\intabletrue
\fi}
-\def\popTBL%
- {\ifnum\TBLlevel>1
+\def\popTBL
+ {\ifnum\TBLlevel>\plusone
\popmacro\rowTBL
\popmacro\colTBL
\else
@@ -953,7 +971,7 @@
\newconditional\resetTABLEmode \settrue\resetTABLEmode
\def\resetallTABLEparameters% moet genest wel werken
- {\ifnum\TBLlevel>1 % in ieder geval
+ {\ifnum\TBLlevel>\plusone % in ieder geval
\ifconditional\resetTABLEmode
\presetlocalframed % breedte hoogte diepte offset
[\@@tbl\@@tbl]% % achtergrond, achtergrondraster, achtergrondkleur
diff --git a/tex/context/base/core-num.tex b/tex/context/base/core-num.tex
index bcab02ef6..d9618c720 100644
--- a/tex/context/base/core-num.tex
+++ b/tex/context/base/core-num.tex
@@ -37,7 +37,7 @@
{\@EA\let\@EA\savedstartnumber\csname\@@thenumber{#1}\c!start\endcsname
\getparameters[\@@thenumber{#1}][\c!start=,#2]%
\doifelsevaluenothing{\@@thenumber{#1}\c!start}
- {\letvalue{\@@thenumber{#1}\c!start}=\savedstartnumber}
+ {\letvalue{\@@thenumber{#1}\c!start}\savedstartnumber}
{\setcounter{\@@thenumber{#1}}{\getvalue{\@@thenumber{#1}\c!start}}}}
\def\stelnummerin
@@ -66,7 +66,7 @@
\makecounter{\@@thenumber{#1}}%
\setcounter{\@@thenumber{#1}}{\getvalue{\@@thenumber{#1}\c!start}}}
-\def\definieernummer%
+\def\definieernummer
{\dodoubleempty\dodefinieernummer}
\def\setnummer[#1]#2%
@@ -81,7 +81,7 @@
\def\doreset[#1]%
{\processcommalist[#1]\dodoreset}
-\def\reset%
+\def\reset
{\dosingleargument\doreset}
%\def\verhoognummer[#1]%
@@ -140,11 +140,11 @@
\def\dostelnummerenin[#1]% globaal
{\getparameters[\??nr][#1]%
- \doifelse{\@@nrstatus}{\v!start}
+ \doifelse\@@nrstatus\v!start
{\global\nummerentrue}
{\global\nummerenfalse}}%
-\def\stelnummerenin%
+\def\stelnummerenin
{\dosingleargument\dostelnummerenin}
\stelnummerenin
diff --git a/tex/context/base/core-obj.tex b/tex/context/base/core-obj.tex
index 5e88eefc5..346a292cb 100644
--- a/tex/context/base/core-obj.tex
+++ b/tex/context/base/core-obj.tex
@@ -210,10 +210,10 @@
\newif\ifobjectreferencing \objectreferencingtrue
-\def\checkobjectreferences%
+\def\checkobjectreferences
{\startnointerference
\protectlabels
- \doutilities{objectreferences}\jobname\empty\empty\empty
+ \doutilities{objectreferences}\jobname\empty\relax\relax
\global\let\checkobjectreferences\relax
\stopnointerference}
@@ -222,7 +222,7 @@
{\ifundefined{\r!driver##1::##2}%
\setxvalue{\r!driver##1::##2}{##3}%
\else
- \showmessage{\m!references}{31}{[##1 ##2=>##3]}%
+ \showmessage\m!references{31}{[##1 ##2=>##3]}%
\fi}}
\def\resetobjectreferences
@@ -234,7 +234,7 @@
{\checkobjectreferences
\blabelgroup
\ifobjectreferencing
- \edef\dowritereference% why not immediate ?
+ \edef\dowritereference % why not immediate ?
{\writeutilitycommand{\objectreference{#1}{#2}{#3}}}%
\dowritereference
\else
@@ -249,7 +249,7 @@
{\checkobjectreferences
\blabelgroup
\ifundefined{\r!driver#1::#2}%
- \showmessage{\m!references}{30}{[#1 #2=>\defaultobjectreference{#1}{#2}]}%
+ \showmessage\m!references{30}{[#1 #2=>\defaultobjectreference{#1}{#2}]}%
\xdef#3{\defaultobjectreference{#1}{#2}}%
\else
\global\@EA\let\@EA#3\csname\r!driver#1::#2\endcsname
diff --git a/tex/context/base/core-par.tex b/tex/context/base/core-par.tex
index b67c1e4e1..0c68a1427 100644
--- a/tex/context/base/core-par.tex
+++ b/tex/context/base/core-par.tex
@@ -66,35 +66,35 @@
% voorlopig, wordt nog class
-\def\resetparagraphlines%
- {\global\linenumber=1\relax}
+\def\resetparagraphlines
+ {\global\linenumber\plusone}
-\def\numberparagraphs% instelbaar maken en slimmer ivm breedte regelnummer !!!!!
+\def\numberparagraphs % instelbaar maken en slimmer ivm breedte regelnummer !!!!!
{\processpreviousparagraphstrue
- \def\dosetparagraph%
+ \def\dosetparagraph
{\bgroup
\resetparagraphlines
\EveryPar
{\strut\inleftmargin{\tf{\tx\paragraphnumber}\kern2em}%
\ignorespaces}}%
- \def\doresetparagraph%
+ \def\doresetparagraph
{\resetparagraphlines
\egroup}}
-\def\numberparagraphlines%
+\def\numberparagraphlines
{\processpreviousparagraphstrue
- \def\dosetparagraph%
+ \def\dosetparagraph
{\resetparagraphlines}%
- \def\doresetparagraph%
+ \def\doresetparagraph
{\resetparagraphlines}%
- \def\dobeforeparagraph%
+ \def\dobeforeparagraph
{\startregelnummeren[\v!verder]}%
- \def\doafterparagraph%
+ \def\doafterparagraph
{\stopregelnummeren}%
- \def\dobeforeskipparagraph%
+ \def\dobeforeskipparagraph
{\stopregelnummeren
- \let\paragraphnumber=\relax}%
- \def\doafterskipparagraph%
+ \let\paragraphnumber\relax}%
+ \def\doafterskipparagraph
{\startregelnummeren[\v!verder]}}
\long\def\directpushparagraph#1%
@@ -110,41 +110,40 @@
\setgvalue{\paragraphprefix\totalnofparagraphs}{\skipparagraph#1\par}}
\def\dopushparagraphs#1%
- {\global\let\mostrecentparagraphtotal=\totalnofparagraphs
+ {\global\let\mostrecentparagraphtotal\totalnofparagraphs
\ifx#1\undefined
- \let#1=\relax
+ \let#1\relax
\fi
\convertargument#1\to\asciiA
- \convertargument{ }\to\asciiB % lege regel
- \def\dopushparagraph##1\par%
+ \convertargument{ }\to\asciiB % lege regel
+ \def\dopushparagraph##1\par
{\convertargument##1\to\asciiC
- \doifelse{\asciiC}{\asciiA}
- {\let\next=#1}
- {\doifnot{\asciiC}{} % lege paragraaf
- {\doifnot{\asciiC}{\asciiB}
+ \doifelse\asciiC\asciiA
+ {#1}
+ {\doifsomething\asciiC % lege paragraaf
+ {\doifnot\asciiC\asciiB
{\directpushparagraph{#1}}}%
- \let\next=\dopushparagraph}%
- \next}%
+ \dopushparagraph}}%
\dopushparagraph}
-\def\pushparagraphs%
+\def\pushparagraphs
{\doglobal\newcounter\totalnofparagraphs
\dopushparagraphs}
-\def\pushmoreparagraphs%
+\def\pushmoreparagraphs
{\dopushparagraphs}
\def\dododopopparagraph#1% no grouping, i.v.m. sidefloats
{\ifnum#1>\totalnofparagraphs\relax
\else
- \let\paragraphnumber=\globalparagraphnumber
+ \let\paragraphnumber\globalparagraphnumber
\decrement(\paragraphnumber,\discardedparagraphs)%
\dobeforeparagraph
\ifhmode\indentation\fi\getvalue{\paragraphprefix#1}\par
\doafterparagraph
\fi}
-\long\def\skipparagraph#1\par%
+\long\def\skipparagraph#1\par
{\doglobal\increment\discardedparagraphs
\ifprocessallparagraphs
\dobeforeskipparagraph
@@ -152,13 +151,13 @@
\doafterskipparagraph
\fi}
-\def\dodopopparagraph%
+\def\dodopopparagraph
{\dododopopparagraph}
\def\dodoprocessparagraph#1%
{\ifprocesspreviousparagraphs
\bgroup
- \setbox0=\vbox{\dododopopparagraph{#1}}%
+ \setbox0\vbox{\dododopopparagraph{#1}}%
\egroup
\fi}
@@ -166,9 +165,9 @@
{\ifprocesspreviousparagraphs
\bgroup
\getfromcommacommand[#1][1]% tzt snelle \..command.. testen
- \let\totalnofparagraphs=\commalistelement
+ \let\totalnofparagraphs\commalistelement
\decrement\totalnofparagraphs
- \let\dodopopparagraph=\dodoprocessparagraph
+ \let\dodopopparagraph\dodoprocessparagraph
\popparagraphs
\egroup
\fi}
@@ -181,10 +180,10 @@
\doifelse{#1}{}
{\processallparagraphstrue}
{\processallparagraphsfalse}%
- \def\dopopparagraph%
+ \def\dopopparagraph
{\doglobal\increment\globalparagraphnumber
\ifnum\globalparagraphnumber>\totalnofparagraphs\relax
- \let\dopopparagraph=\relax
+ \let\dopopparagraph\relax
\else\ifprocessallparagraphs
\ifnum\globalparagraphnumber>\mostrecentparagraphtotal\relax
\dodopopparagraph\globalparagraphnumber
@@ -192,7 +191,7 @@
\dodoprocessparagraph\globalparagraphnumber
\fi
\else
- \let\paragraphnumber=\globalparagraphnumber
+ \let\paragraphnumber\globalparagraphnumber
\decrement(\paragraphnumber,\discardedparagraphs)%
\ExpandBothAfter\doifinsetelse{\paragraphnumber}{#1}
{\dodopopparagraph\globalparagraphnumber}
@@ -202,12 +201,12 @@
\dopopparagraph
\doresetparagraph}}
-\def\popparagraphs%
+\def\popparagraphs
{\dosingleempty\dopopparagraphs}
-\def\countparagraphs%
+\def\countparagraphs
{\popparagraphs[\!!maxcard]%
- \global\let\nofparagraphs=\totalnofparagraphs
+ \global\let\nofparagraphs\totalnofparagraphs
\doglobal\decrement(\nofparagraphs,\discardedparagraphs)}
% \showframe
diff --git a/tex/context/base/core-pos.tex b/tex/context/base/core-pos.tex
index 2351fe77d..9565febdc 100644
--- a/tex/context/base/core-pos.tex
+++ b/tex/context/base/core-pos.tex
@@ -11,11 +11,21 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% shorter tags, ..:achtergrond:.. etc in pos actions
+
+% class pos -> als gelijk aan vorige, dan niet niet definieren
+% en erven, maw:
+%
+% 1 -> opslaan
+% 2 -> undef, dus == prev
+% 3 -> undef, dus == prev
+% 4 -> opslaan
+
\writestatus{loading}{Context Positioning Support}
% todo: topskip als optie voor eerste regel achtergrond
-
% todo: build pos layers on top of layers
+% todo: positionlayer pos van text-1 etc delen
%D Although \TEX\ has a rather powerful channel to the outside
%D world, called \type {\special}, real communication with
@@ -96,7 +106,7 @@
\let\pospxywhd \gobblesevenarguments
\let\pospxyplus\gobbleeightarguments}
-\def\setpositions%
+\def\setpositions
{\let\pospxy \setpospxy
\let\pospxywhd \setpospxywhd
\let\pospxyplus\setpospxyplus}
@@ -142,21 +152,39 @@
\savecurrentvalue\totalnofpositions\currentpositions
\to \everybye
+%D The next switch can be used to communicate a special
+%D situation. Positioning and associated actions can be
+%D executed any time. However, in for instance backgrounds
+%D they can be collected in a layer, for instance the text
+%D layer (especially the hidden text layer). In the case of
+%D floats, we run into problems, since the page information is
+%D not applicable when the content floats indeed. In such
+%D situations one can treat positions and graphics local.
+
+\newif\iflocalpositioning
+
+%D Watch out: sometimes a pagebreak occurs inside a float
+%D placement, so there we need to disable local mode.
+
+\appendtoks \localpositioningtrue \to \everyinsidefloat
+\appendtoks \localpositioningfalse \to \everypagebody
+
%D We save positionional information without dimensions, which
%D saves some bytes. The conversion too saves some bytes, but
%D is primarily needed because we want to pass those values to
%D \METAPOST\ too.
\def\dosetpositionpt#1#2%
- {\scratchdimen=#2sp\xdef#1{\@EA\withoutpt\the\scratchdimen}}
+ {\scratchdimen#2\s!sp
+ \xdef#1{\@EA\withoutpt\the\scratchdimen}}
\def\dosetpositionnm#1#2%
{\xdef#1{\number#2}}
-\def\checkpositions%
+\def\checkpositions
{\startnointerference
\protectlabels
- \doutilities{positions}{\jobname}{}{}{}%
+ \doutilities{positions}\jobname\empty\relax\relax
\global\let\checkpositions\relax
\stopnointerference}
@@ -339,41 +367,99 @@
\fi
\doglobal\increment\currentpositions}
+% \def\setposition#1%
+% {\initializenextposition
+% \dosetposition{#1}%
+% \dopositionaction{#1}}
+%
+% \def\setpositionbox#1%
+% {\dowithnextbox
+% {\hbox to \wd\nextbox
+% {\initializenextposition
+% \def\currentposition{#1}%
+% \dosetpositionwhd \currentposition
+% {\number\wd\nextbox}%
+% {\number\ht\nextbox}%
+% {\number\dp\nextbox}%
+% \traceposstring\llap\green{\currentposition>}%
+% \setbox\positionbox\box\nextbox
+% \dopositionaction\currentposition
+% \box\positionbox
+% \hss}}}
+%
+% \def\setpositionplus#1#2%
+% {\dowithnextbox
+% {\hbox to \wd\nextbox
+% {\initializenextposition
+% \def\currentposition{#1}%
+% \dosetpositionplus \currentposition
+% {\number\wd\nextbox}%
+% {\number\ht\nextbox}%
+% {\number\dp\nextbox}%
+% {#2}%
+% \traceposstring\rlap\magenta{<\currentposition}%
+% \setbox\positionbox\box\nextbox
+% \dopositionaction\currentposition
+% \box\positionbox
+% \hss}}}
+
+\def\setpositiononly#1%
+ {\iftrialtypesetting
+ % nothing
+ \else
+ \initializenextposition
+ \def\currentposition{#1}%
+ \dosetposition\currentposition
+ \fi}
+
\def\setposition#1%
- {\initializenextposition
- \dosetposition{#1}%
- \dopositionaction{#1}}
+ {\iftrialtypesetting
+ % nothing
+ \else
+ \initializenextposition
+ \def\currentposition{#1}%
+ \dosetposition\currentposition
+ \dopositionaction\currentposition
+ \fi}
\def\setpositionbox#1%
{\dowithnextbox
- {\hbox to \wd\nextbox
- {\initializenextposition
- \def\currentposition{#1}%
- \dosetpositionwhd
- {\currentposition}% {#1}%
- {\number\wd\nextbox}%
- {\number\ht\nextbox}%
- {\number\dp\nextbox}%
- \setbox\positionbox=\box\nextbox
- \dopositionaction\currentposition % {#1}%
- \box\positionbox
- \hss}}}
+ {\iftrialtypesetting
+ \box\nextbox
+ \else
+ \initializenextposition
+ \hbox to \wd\nextbox
+ {\def\currentposition{#1}%
+ \dosetpositionwhd\currentposition
+ {\number\wd\nextbox}%
+ {\number\ht\nextbox}%
+ {\number\dp\nextbox}%
+ \traceposstring\llap\green{\currentposition>}%
+ \setbox\positionbox\box\nextbox
+ \dopositionaction\currentposition
+ \box\positionbox
+ \hss}%
+ \fi}}
\def\setpositionplus#1#2%
{\dowithnextbox
- {\hbox to \wd\nextbox
- {\initializenextposition
- \def\currentposition{#1}%
- \dosetpositionplus
- {\currentposition}% {#1}%
- {\number\wd\nextbox}%
- {\number\ht\nextbox}%
- {\number\dp\nextbox}%
- {#2}%
- \setbox\positionbox=\box\nextbox
- \dopositionaction\currentposition % {#1}%
- \box\positionbox
- \hss}}}
+ {\iftrialtypesetting
+ \box\nextbox
+ \else
+ \initializenextposition
+ \hbox to \wd\nextbox
+ {\def\currentposition{#1}%
+ \dosetpositionplus\currentposition
+ {\number\wd\nextbox}%
+ {\number\ht\nextbox}%
+ {\number\dp\nextbox}%
+ {#2}%
+ \traceposstring\rlap\magenta{<\currentposition}%
+ \setbox\positionbox\box\nextbox
+ \dopositionaction\currentposition
+ \box\positionbox
+ \hss}%
+ \fi}}
\let\currentposition\s!unknown
@@ -396,17 +482,30 @@
\let\cleanuppositionaction\gobbleoneargument
+%D The next one will be overloaded later.
+
\def\dopositionaction#1% test saves hash entry in etex
- {\doifdefined{\POSactionprefix#1::}%
- {\bgroup
- \the\everyinsertpositionaction
- \the\everypositionaction
- \getvalue{\POSactionprefix#1::}%
- \cleanuppositionaction{#1}%
- \egroup}}
+ {\ifundefined{\POSactionprefix#1::}\else
+ \ifnum\MPp{#1}>\zerocount % new
+ \bgroup
+ \traceposstring\clap\red{<#1>}%
+ \the\everyinsertpositionaction
+ \the\everypositionaction
+ \getvalue{\POSactionprefix#1::}%
+ \cleanuppositionaction{#1}%
+ \egroup
+ \else
+ % shouldn't happen too often
+ \traceposstring\clap\cyan{<#1>}%
+ \fi
+ \fi}
\def\doifpositionaction#1%
- {\doifdefined{\POSactionprefix#1::}}
+ {\ifundefined{\POSactionprefix#1::}%
+ \@EA\gobblefirstargument
+ \else
+ \@EA\firstofoneargument
+ \fi}
%D We can copy a position with:
%D
@@ -420,8 +519,11 @@
{\bgroup
\edef\to {\POSprefix#1}%
\edef\from{\POSprefix#2}%
- \doifdefined\from
- {\global\@EA\@EA\@EA\let\@EA\csname\@EA\to\@EA\endcsname\csname\from\endcsname}%
+ %\doifdefined\from
+ % {\global\@EA\@EA\@EA\let\@EA\csname\@EA\to\@EA\endcsname\csname\from\endcsname}%
+ \ifundefined\from\else
+ \global\@EA\@EA\@EA\let\@EA\csname\@EA\to\@EA\endcsname\csname\from\endcsname
+ \fi
\egroup}
%D The fact that handling positions is a two pass operation, is
@@ -464,68 +566,41 @@
%D Each macro takes an identifier as argument, and the \type
%D {\hpos} and \type {\vpos} also expect box content.
-\def\xypos{\initializenextposition\dosetposition}
+% \def\xypos{\initializenextposition\dosetposition}
+
+\let\xypos\setpositiononly
\def\hpos#1{\dontleavehmode\setpositionbox{#1}\hbox}
\def\vpos#1{\setpositionbox{#1}\vbox}
-% \def\lpos#1{\lrpos{l:#1}{\kern\leftskip}}
-% \def\rpos#1{\lrpos{r:#1}{\hskip\hsize\hskip-\rightskip}}
-%
-% \def\lrpos#1#2%
-% {\dontleavehmode\vadjust % may disappear if buried
-% {\setbox0=\hbox{\raise\dp\strutbox\hbox{\hpos{#1}{\strut}}}%
-% \smashbox0
-% \rlap{#2\box0}}}
-
\def\bpos#1{\hpos{b:#1}{\strut}\ignorespaces}
\def\epos#1{\removelastspace\hpos{e:#1}{\strut}}
\def\fpos#1%
- {\setpositionplus{b:#1}{\parposcounter}\hbox{\strut}%
+ {\setpositionplus{b:#1}\parposcounter\hbox{\strut}%
\ignorespaces}
\def\tpos#1%
{\removelastspace
- \setpositionplus{e:#1}{\parposcounter}\hbox{\strut}}
-
-%\def\ffpos#1%
-% {\setpositionbox{b:#1}\hbox{\strut}\wpos{#1}%
-% \ignorespaces}
-%
-%\def\ttpos#1%
-% {\removelastspace
-% \setpositionbox{e:#1}\hbox{\strut}}
+ \setpositionplus{e:#1}\parposcounter\hbox{\strut}}
\def\ffpos#1%
- {\setpositionplus{b:#1}{\parposcounter}\hbox{\strut}\wpos{#1}%
+ {\setpositionplus{b:#1}\parposcounter\hbox{\strut}\wpos{#1}%
\ignorespaces}
\def\ttpos#1%
{\removelastspace
- \setpositionplus{e:#1}{\parposcounter}\hbox{\strut}}
-
-%\def\wpos#1%
-% {\dontleavehmode\vadjust % may disappear if buried
-% {\setbox0=\hbox{\raise\dp\strutbox\hbox{\hpos{w:#1}
-% {\strut
-% \hskip-\leftskip
-% \hskip\hsize
-% \hskip-\rightskip}}}%
-% \smashbox0
-% \rlap{\box0}}}
+ \setpositionplus{e:#1}\parposcounter\hbox{\strut}}
\def\wpos#1%
{\dontleavehmode\vadjust % may disappear if buried
{\setbox0\hbox{\raise\dp\strutbox\hbox{\rawwpos{#1}}}%
- \smashbox0
- \rlap{\box0}}}
+ \rlap{\smashedbox0}}}
-\def\wwpos#1%
+\def\wwpos#1% \hsmashed{\llap{\rawwpos{#1}}}
{\rlap
{\setbox0\hbox{\rawwpos{#1}}%
- \smashbox0
- \box0}}
+ \smashedbox0}}
\def\rawwpos#1%
{\hpos{w:#1}
@@ -563,24 +638,22 @@
% we can check for used entries, and if not, then not add one
-\def\registerparoptions%
- {\ifpositioningpar
- \ifpositioning
- \ifinpagebody \else
- \ifmmode \else
- \ifinformula \else
- \doregisterparoptions
- \fi
- \fi
+\def\registerparoptions
+ {\ifpositioningpar \ifpositioning \iftrialtypesetting \else
+ \ifinpagebody \else \ifmmode \else \ifinformula \else
+ \ifprocessingverbatim
+ \iflinepar \doregisterparoptions \fi
+ \else
+ \doregisterparoptions
\fi
- \fi
- \fi}
+ \fi \fi \fi
+ \fi \fi \fi}
-\def\doregisterparoptions%
+\def\doregisterparoptions
{\doglobal\increment\parposcounter
\bgroup
- \leftskip =1\leftskip
- \rightskip=1\rightskip
+ \leftskip 1\leftskip
+ \rightskip1\rightskip
\setpositionplus
{p:\parposcounter}% % identifier
{\efficientdimen\hsize ,% 1
@@ -589,14 +662,27 @@
\efficientdimen\hangindent,% 4
\the\hangafter ,% 5
\efficientdimen\parindent }% 6
- \hbox{\strut\registerparsymbol}%
- \egroup}
-
+ % no strut here ! (see stepcharts and pascal)
+ \normalhbox{\registerparsymbol}%
+ \egroup}
+
\newif\iftracepositions
+\def\traceposstring#1#2#3%
+ {\iftracepositions\smashedhbox{#1{\infofont#2#3}}\fi}
+
\def\registerparsymbol
{\iftracepositions
- \hbox to \zeropoint{\hss\blue\vrule\!!width4pt\!!height2pt\!!depth2pt\hss}%
+ \smashedhbox to \zeropoint
+ {\hss
+ \blue
+ \llap{\infofont\number\parposcounter}%
+ \scratchdimen\!!onepoint
+ \vrule
+ \!!width 4\scratchdimen
+ \!!height2\scratchdimen
+ \!!depth 2\scratchdimen
+ \hss}%
\fi}
\appendtoks \registerparoptions \to \everypar
@@ -658,10 +744,10 @@
\def\dodoifpositionsonsamepageelse#1#2#3#4%
{\bgroup
- \scratchcounter=#1\donefalse
+ \scratchcounter#1\donefalse
\def\docommando##1%
{\ifcase\scratchcounter
- \scratchcounter=\MPp{##1}\donetrue
+ \scratchcounter\MPp{##1}\donetrue
\else
\ifnum\scratchcounter=\MPp{##1}\relax\else\donefalse\fi
\fi}%
@@ -682,7 +768,7 @@
\def\textanchor{text:\realfolio}
-\def\placepositionanchors% todo : depth pagebox
+\def\placepositionanchors % todo : depth pagebox
{\ifpositioning
\setbox\scratchbox\vbox to \teksthoogte
{\topskipcorrection
@@ -690,6 +776,7 @@
\vfill
\hbox{\strut\dopositionaction\tailanchor}}%
\dp\scratchbox\zeropoint
+ \wd\scratchbox\zetbreedte % not \zeropoint, else wrong text backgrounds
\hpos\textanchor{\box\scratchbox}%
\else
\vskip\teksthoogte
@@ -825,10 +912,17 @@
\vfill}%
\fi}
+% \def\startpositionoverlay#1%
+% {\def\currentpositionoverlay{#1}}
+
\def\startpositionoverlay#1%
- {\def\currentpositionoverlay{#1}}
+ {\iftrialtypesetting % we don't want redundant entries in the list
+ \@EA\gobbleuntil\@EA\stoppositionoverlay
+ \else
+ \def\currentpositionoverlay{#1}%
+ \fi}
-\def\stoppositionoverlay%
+\def\stoppositionoverlay
{\let\currentpositionoverlay\empty}
\def\resetpositionoverlay#1%
@@ -844,10 +938,26 @@
\newtoks\everycleanpositionaction
\newtoks\everyinsertpositionaction
-\def\cleanuppositionaction#1%
- {\doifdefined{\POSactionprefix#1++}
- {\the\everycleanpositionaction
- \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}}}
+%\def\cleanuppositionaction#1%
+% {\doifdefined{\POSactionprefix#1++}
+% {\the\everycleanpositionaction
+% \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}}}
+
+%\def\cleanuppositionaction#1%
+% {\ifundefined{\POSactionprefix#1++}\else
+% \the\everycleanpositionaction
+% \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}%
+% \fi}
+
+\def\cleanuppositionaction#1% not in trialtypesetting
+ {\ifundefined{\POSactionprefix#1++}\else
+ \the\everycleanpositionaction
+ \iflocalpositioning
+ \letgvalue{\POSactionprefix#1++}\empty
+ \else
+ \setxvalue{\POSactionprefix#1++}{\getvalue{\POSactionprefix#1++}}%
+ \fi
+ \fi}
\def\handlepositionaction#1\with#2\on#3%
{\bgroup
@@ -859,9 +969,15 @@
\edef\!!stringc{\POSactionprefix\!!stringa++}%
\expanded{\dosetpositionaction{\!!stringa}{\noexpand\getvalue{\!!stringc}}}%
\global\let#1\relax
- \doifundefinedelse\!!stringc
- {\let\!!stringb\empty}
- {\edef\!!stringb{\getvalue\!!stringc}}%
+% \doifundefinedelse\!!stringc
+% {\let\!!stringb\empty}
+% {\edef\!!stringb{\getvalue\!!stringc}}%
+% \ifundefined\!!stringc
+% \let\!!stringb\empty
+% \else
+% \edef\!!stringb{\getvalue\!!stringc}%
+% \fi
+ \edef\!!stringb{\executeifdefined\!!stringc\empty}%
\setxvalue\!!stringc{\!!stringb#1#2}%
\egroup}
@@ -898,31 +1014,84 @@
\newbox\positiongraphicbox
-\def\startMPpositiongraphic% id setups
+\def\startMPpositiongraphic % id setups
{\dodoublegroupempty\dostartMPpositiongraphic}
-\long\def\dostartMPpositiongraphic#1#2#3\stopMPpositiongraphic%
+\long\def\dostartMPpositiongraphic#1#2#3\stopMPpositiongraphic
{\long\setgvalue{MPG:#1}% tag list mpcode
{\useMPpositiongraphic{#1}{#2}{#3}}}
-\def\prepareMPpositionvariables%
- {\doifundefined{\@@meta self}{\setvalue{\@@meta self}{\currentposition}}%
- \doifundefined{\@@meta from}{\setvalue{\@@meta from}{\currentposition}}}
+%\def\prepareMPpositionvariables
+% {\doifundefined{\@@meta self}{\setvalue{\@@meta self}{\currentposition}}%
+% \doifundefined{\@@meta from}{\setvalue{\@@meta from}{\currentposition}}}
+
+\def\prepareMPpositionvariables
+ {\ifundefined{\@@meta self}\setvalue{\@@meta self}{\currentposition}\fi
+ \ifundefined{\@@meta from}\setvalue{\@@meta from}{\currentposition}\fi}
+
+% \long\def\useMPpositiongraphic#1#2#3%
+% {\bgroup
+% \prepareMPvariables{#2}%
+% \prepareMPpositionvariables
+% \enableincludeMPgraphics
+% \startMPgraphic#3\stopMPgraphic
+% \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
+% \deallocateMPslot\currentMPgraphic
+% \placeMPgraphic
+% \egroup}
+
+\newif\ifcollectMPpositiongraphics
\long\def\useMPpositiongraphic#1#2#3%
{\bgroup
\prepareMPvariables{#2}%
\prepareMPpositionvariables
\enableincludeMPgraphics
- \startMPgraphic#3\stopMPgraphic
- \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
- \deallocateMPslot\currentMPgraphic
- \placeMPgraphic
+ \ifcollectMPpositiongraphics
+ \expanded{\startMPdrawing#3\noexpand\stopMPdrawing}%
+ \global\MPdrawingdonetrue
+ \else
+ \startMPgraphic#3\stopMPgraphic
+ \loadMPgraphic{\MPgraphicfile.\the\currentMPgraphic}{}%
+ \deallocateMPslot\currentMPgraphic
+ \placeMPgraphic
+ \fi
\egroup}
-\def\MPpositiongraphic%
- {\dodoublegroupempty\doMPpositiongraphic}
+% Now we need a adapted action handler:
+
+\def\dopositionaction#1% test saves hash entry in etex
+ {\ifundefined{\POSactionprefix#1::}\else
+ \ifnum\MPp{#1}>\zerocount % new
+ \bgroup
+ \traceposstring\clap\red{<#1>}%
+ \the\everyinsertpositionaction
+ \the\everypositionaction
+ \ifcollectMPpositiongraphics
+ % can save a lot of run time
+ \pushMPdrawing
+ \MPshiftdrawingtrue
+ \resetMPdrawing
+ \getvalue{\POSactionprefix#1::}%
+ \ifMPdrawingdone
+ \getMPdrawing
+ \fi
+ \resetMPdrawing
+ \popMPdrawing
+ \else
+ \getvalue{\POSactionprefix#1::}%
+ \fi
+ \cleanuppositionaction{#1}%
+ \egroup
+ \else
+ % shouldn't happen too often
+ \traceposstring\clap\cyan{<#1>}%
+ \fi
+ \fi}
+\def\MPpositiongraphic
+ {\dodoublegroupempty\doMPpositiongraphic}
+
\def\doMPpositiongraphic#1#2% tag setups
{\bgroup
\def\@@meta{#1:}%
@@ -930,10 +1099,10 @@
\prepareMPpositionvariables
\MPshiftdrawingtrue
\def\doMPpositiongraphic##1##2{\getvalue{MPG:##1}}% temp hack
- \setbox\positiongraphicbox=\hbox
- {\doifdefinedelse{MPM:#1} % method
- {\ignorespaces\getvalue{MPM:#1}\removelastspace}
- {\getvalue{MPG:#1}}}%
+ \setbox\positiongraphicbox\hbox
+ {\ignorespaces
+ \executeifdefined{MPM:#1}{\executeifdefined{MPG:#1}\donothing}%
+ \removelastspace}%
\smashbox\positiongraphicbox
\box\positiongraphicbox
\egroup}
@@ -943,7 +1112,7 @@
%D Simple one position graphics.
-\def\setMPpositiongraphic%
+\def\setMPpositiongraphic
{\dotriplegroupempty\dosetMPpositiongraphic}
\def\dosetMPpositiongraphic#1#2#3% pos tag vars
@@ -989,13 +1158,32 @@
\def\handlepositiongraphicsrange#1#2#3#4%
{\handlepositionaction\dohandleMPpositiongraphicrange\with{#1}{#2}{#3}{#4}\on{#2}}
+% \def\doinsertMPpositiongraphicrange#1#2#3#4% pos tag setups
+% {\donefalse
+% \ifnum\MPp{#1}=\realpageno\relax \donetrue
+% \else\ifnum\MPp{#2}=\realpageno\relax \donetrue
+% \else\ifnum\MPp{#1}<\realpageno\relax\ifnum\MPp{#2}>\realpageno\donetrue
+% \fi\fi\fi\fi \ifdone
+% \def\currentposition{#1}\MPpositiongraphic{#3}{#4}%
+% \fi}
+
\def\doinsertMPpositiongraphicrange#1#2#3#4% pos tag setups
- {\donefalse
- \ifnum\MPp{#1}=\realpageno\relax \donetrue
- \else\ifnum\MPp{#2}=\realpageno\relax \donetrue
- \else\ifnum\MPp{#1}<\realpageno\relax\ifnum\MPp{#2}>\realpageno\donetrue
- \fi\fi\fi\fi \ifdone
- \def\currentposition{#1}\MPpositiongraphic{#3}{#4}%
+ {\ifnum\MPp{#1}\MPp{#2}>\zerocount
+ \iflocalpositioning
+ \donetrue
+ \else
+ \donefalse
+ \ifnum\MPp{#1}=\realpageno
+ \donetrue
+ \else\ifnum\MPp{#2}=\realpageno
+ \donetrue
+ \else\ifnum\MPp{#1}<\realpageno\relax\ifnum\MPp{#2}>\realpageno
+ \donetrue
+ \fi\fi\fi\fi
+ \fi
+ \ifdone
+ \def\currentposition{#1}\MPpositiongraphic{#3}{#4}%
+ \fi
\fi}
\appendtoks
@@ -1076,6 +1264,7 @@
gridtype=0,
linetype=1,
filltype=1,
+ %snaptops=true, % not that nice: true/false
gridcolor=red,
linecolor=blue,
fillcolor=lightgray,
@@ -1085,7 +1274,7 @@
lineradius=.5\bodyfontsize]
\startuseMPgraphic{mpos:par:shape}
- draw_par ; \iftracepositions show_par ; \fi
+ \iftracepositions show_par \else draw_par \fi ;
\stopuseMPgraphic
\startuseMPgraphic{mpos:par:setup}
@@ -1099,6 +1288,12 @@
boxlinewidth := \MPvar{linewidth} ;
boxgridwidth := \MPvar{gridwidth} ;
boxlineradius := \MPvar{lineradius} ;
+ %snap_multi_par_tops := \MPvar{snaptops} ;
+\stopuseMPgraphic
+
+\startuseMPgraphic{mpos:par:extra}
+ % user stuff, like:
+ % snap_multi_par_tops := false ;
\stopuseMPgraphic
% \startMPpositionmethod{mpos:par}
@@ -1109,6 +1304,7 @@
% \MPpos{e:\MPvar{self}},
% \MPpos{w:\MPvar{self}}) ;
% \includeMPgraphic{mpos:par:setup} ;
+% \includeMPgraphic{mpos:par:extra} ;
% \includeMPgraphic{\MPvar{mp}} ; % \includeMPgraphic{mpos:par:shape} ;
% anchor_par(\MPanchor{b:\MPvar{self}}) ;
% \stopMPpositiongraphic}
@@ -1120,6 +1316,7 @@
% \MPpos{p:\MPparcounter},
% \MPvv {p:\MPparcounter}{0,0,0,0,0,0}) ;
% \includeMPgraphic{mpos:par:setup} ;
+% \includeMPgraphic{mpos:par:extra} ;
% \includeMPgraphic{\MPvar{mp}} ; % \includeMPgraphic{mpos:par:shape} ;
% anchor_par(\MPanchor{b:\MPvar{self}}) ;
% \stopMPpositiongraphic}%
@@ -1148,6 +1345,7 @@
\MPpos\MPeself,
\MPpos\MPwself) ;
\includeMPgraphic{mpos:par:setup} ;
+ \includeMPgraphic{mpos:par:extra} ;
\includeMPgraphic{\MPvar{mp}} ;
anchor_par(\MPanchor\MPbself) ;
\stopMPpositiongraphic}
@@ -1159,6 +1357,7 @@
\MPpos\MPparanchor,
\MPvv \MPparanchor{0,0,0,0,0,0}) ;
\includeMPgraphic{mpos:par:setup} ;
+ \includeMPgraphic{mpos:par:extra} ;
\includeMPgraphic{\MPvar{mp}} ;
anchor_par(\MPanchor\MPbself) ;
\stopMPpositiongraphic}%
@@ -1168,8 +1367,7 @@
%D The next alternative works in columnsets :
\startuseMPgraphic{mpos:par:columnset}
- draw_multi_pars ;
- \iftracepositions show_multi_pars ; \fi
+ \iftracepositions show_multi_pars \else draw_multi_pars \fi ;
\stopuseMPgraphic
\startMPpositionmethod{mpos:par:columnset}
@@ -1177,6 +1375,7 @@
\startMPpositiongraphic{mpos:par}%
{fillcolor,filloffset,linecolor,gridcolor,linewidth,gridwidth,lineradius}
\includeMPgraphic{mpos:par:setup} ;
+ \includeMPgraphic{mpos:par:extra} ;
prepare_multi_pars(\MPpos\MPbself,\MPpos\MPeself,\MPpos\MPwself,
\MPpos\MPparanchor,\MPvv\MPparanchor{0,0,0,0,0,0}) ;
relocate_multipars(-\MPxy\MPanchorid) ; % inside layerpos
@@ -1192,6 +1391,17 @@
%D methode=mpos:par:columnset]
%D \stoptypen
+%D We need to treat floats in a special way.
+
+\appendtoks
+ local_multi_par_area:=\iflocalpositioning true\else false\fi;
+\to \MPinitializations
+
+\def\textbackgroundoverlay#1%
+ {\iflocalpositioning\v!lokaal\else\v!tekst\fi#1}
+
+%D So far for the trickery.
+
\newcounter\textbackgrounddepth
\appendtoks
@@ -1242,7 +1452,7 @@
\setuptextbackground[#1][#2]%
\let\dodostarttextbackground\relax
\let\dodostoptextbackground \relax
- \doifvalue{\??td#1\c!status}{\v!start}
+ \doifvalue{\??td#1\c!status}\v!start
{\dopresettextbackground{#1}}%
\dodostarttextbackground}
@@ -1253,24 +1463,24 @@
\let\dodostoptextbackground \dostoptextbackgroundtxt,
\v!alinea=>\let\dodostarttextbackground\dostarttextbackgroundpar
\let\dodostoptextbackground \dostoptextbackgroundpar]%
- \ifnum\textbackgrounddepth>1 % new
+ \ifnum\textbackgrounddepth>\plusone % new
\let\dodostarttextbackground\dostarttextbackgroundtxt
\let\dodostoptextbackground \dostoptextbackgroundtxt
\fi
- \doifelsevalue{\??td#1\c!kader}{\v!aan}
- {\doifelsevalue{\??td#1\c!hoek}{\v!rond}
+ \doifelsevalue{\??td#1\c!kader}\v!aan
+ {\doifelsevalue{\??td#1\c!hoek}\v!rond
{\setvalue{\??td#1\c!kader}{2}}
{\setvalue{\??td#1\c!kader}{1}}}
{\setvalue{\??td#1\c!kader}{0}}%
- \doifelsevalue{\??td#1\c!achtergrond}{\v!kleur}
+ \doifelsevalue{\??td#1\c!achtergrond}\v!kleur
{\setvalue{\??td#1\c!achtergrond}{1}}
{\setvalue{\??td#1\c!achtergrond}{0}}%
- \startpositionoverlay{\v!tekst\getvalue{\??td#1\c!niveau}}%
+ %\startpositionoverlay{\v!tekst\getvalue{\??td#1\c!niveau}}%
+ \startpositionoverlay{\textbackgroundoverlay{\getvalue{\??td#1\c!niveau}}}%
\expanded
{\setMPpositiongraphicrange % moet veel efficienter
{b:\currentparbackground}%
{e:\currentparbackground}%
-% {mpos:par}%
{\getvalue{\??td#1\c!methode}}%
{self=\currentparbackground,
mp=\getvalue{\??td#1\c!mp},
@@ -1292,40 +1502,106 @@
\def\dostarttextbackgroundtxt
{\ifvmode \leavevmode \fi
- \dostartattributes{\??td\currenttextbackground}\c!letter\c!kleur{}%
+ \dostartattributes{\??td\currenttextbackground}\c!letter\c!kleur\empty
\fpos\currentparbackground\ignorespaces}
\def\dostoptextbackgroundtxt
{\tpos\currentparbackground
\dostopattributes}
+% keep this simple one, it's used in prikkels and alike
+%
+% \def\dostarttextbackgroundpar
+% {\endgraf % new
+% \getvalue{\??td\currenttextbackground\c!voor}%
+% \noindent\fpos\currentparbackground\ignorespaces
+% \bgroup
+% \nobreak \vskip-\lineheight \nobreak
+% \doassignsomeskip\getvalue{\??td\currenttextbackground\c!bovenoffset}\to\scratchskip
+% \kern\scratchskip\nobreak
+% \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!linkeroffset}}%
+% \advance\leftskip\leftskipadaption
+% \dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!rechteroffset}}%
+% \advance\rightskip\leftskipadaption
+% \dostartattributes{\??td\currenttextbackground}\c!letter\c!kleur{}%
+% \geenwitruimte
+% \seteffectivehsize
+% \par}
+%
+% \def\dostoptextbackgroundpar
+% {\par
+% \dostopattributes
+% \doassignsomeskip\getvalue{\??td\currenttextbackground\c!onderoffset}\to\scratchskip
+% \kern\scratchskip\nobreak
+% \nobreak \vskip-\lineheight \nobreak
+% \geenwitruimte
+% \egroup
+% \nobreak \noindent \strut \hfill \kern\zeropoint \tpos\currentparbackground
+% \endgraf % new
+% \getvalue{\??td\currenttextbackground\c!na}}
+
\def\dostarttextbackgroundpar
- {\getvalue{\??td\currenttextbackground\c!voor}%
-% {\forgetall\noindent\fpos\currentparbackground}\ignorespaces
- \noindent\fpos\currentparbackground\ignorespaces
+ {\endgraf % new
+ \getvalue{\??td\currenttextbackground\c!voor}%
+ \doassignsomeskip\getvalue{\??td\currenttextbackground\c!bovenoffset}\to\scratchskip
+ \xdef\textbackgroundskip{\the\scratchskip}%
+ \noindent
+ \ifgridsnapping
+ \ifdim\textbackgroundskip>\zeropoint
+ \struttedbox{\hbox{\raise\textbackgroundskip\hbox{\fpos\currentparbackground}}}%
+ \else
+ \fpos\currentparbackground
+ \fi
+ \else
+ \fpos\currentparbackground
+ \fi
\bgroup
\nobreak \vskip-\lineheight \nobreak
\doassignsomeskip\getvalue{\??td\currenttextbackground\c!bovenoffset}\to\scratchskip
- \kern\scratchskip\nobreak
+ \ifgridsnapping \else \ifdim\textbackgroundskip>\zeropoint
+ \kern\textbackgroundskip\nobreak
+ \fi \fi
\dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!linkeroffset}}%
\advance\leftskip\leftskipadaption
\dosetleftskipadaption{\getvalue{\??td\currenttextbackground\c!rechteroffset}}%
\advance\rightskip\leftskipadaption
- \dostartattributes{\??td\currenttextbackground}\c!letter\c!kleur{}%
+ \dostartattributes{\??td\currenttextbackground}\c!letter\c!kleur\empty
\geenwitruimte
+ \seteffectivehsize
+ \blanko[\v!blokkeer]% new
\par}
\def\dostoptextbackgroundpar
{\par
+ \removelastskip % new
\dostopattributes
\doassignsomeskip\getvalue{\??td\currenttextbackground\c!onderoffset}\to\scratchskip
- \kern\scratchskip\nobreak
+ \ifdim\lastskip>\zeropoint
+ \advance\scratchskip-\lastskip
+ \fi
+ \xdef\textbackgroundskip{\the\scratchskip}%
+ \ifgridsnapping \else \ifdim\textbackgroundskip>\zeropoint
+ \kern\scratchskip\nobreak
+ \fi \fi
\nobreak \vskip-\lineheight \nobreak
\geenwitruimte
\egroup
- \nobreak \noindent \strut \hfill \kern\zeropoint \tpos\currentparbackground
+\bgroup \forgeteverypar % NOT REALLY NEEDED, SAVES HASH/MEM
+ \nobreak \noindent \strut \hfill \kern\zeropoint
+ \ifgridsnapping % experimental, pascal (todo: topoffset in same way)
+ \ifdim\textbackgroundskip>\zeropoint
+ \struttedbox{\hbox{\lower\textbackgroundskip\hbox{\tpos\currentparbackground}}}%
+ \else
+ \tpos\currentparbackground
+ \fi
+ \else
+ \tpos\currentparbackground
+ \fi
+\egroup
+ \endgraf % new
\getvalue{\??td\currenttextbackground\c!na}}
+
\let\textparpages \!!zeropoint
\let\textparheight\!!zeropoint
\let\textparwidth \!!zeropoint
@@ -1354,11 +1630,11 @@
\ifcase\scratchcounter>2 \ifnum\scratchcounter<5
% more pages
\scratchdimen\teksthoogte
- \advance\scratchcounter -1
+ \advance\scratchcounter \minusone
\multiply\scratchdimen \scratchcounter
\else
% keep'm small
- \scratchdimen=5\teksthoogte
+ \scratchdimen5\teksthoogte
\fi \fi
\fi
\edef\textparheight{\the\scratchdimen}%
@@ -1398,7 +1674,7 @@
\fi
\fi}
-\def\definetextbackground%
+\def\definetextbackground
{\dodoubleempty\dodefinetextbackground}
\def\dodefinetextbackground[#1][#2]%
@@ -1406,18 +1682,18 @@
\copyparameters[\??td#1][\??td]
[\c!status,\c!plaats,\c!variant,\c!mp,\c!methode,
\c!achtergrond,\c!achtergrondkleur,\c!hoek,\c!niveau,
- \c!achtergrondoffset,
+ \c!achtergrondoffset,\c!voor,\c!na,
\c!straal,\c!kader,\c!kaderkleur,\c!lijndikte,
\c!linkeroffset,\c!rechteroffset,\c!bovenoffset,\c!onderoffset]%
\getparameters[\??td#1][#2]%
- \doifvalue{\??td#1\c!status}{\v!start}{\checktextbackgrounds}%
+ \doifvalue{\??td#1\c!status}\v!start\checktextbackgrounds
\unexpanded\setvalue{#1}%
{\groupedcommand{\starttextbackground[#1]}{\stoptextbackground}}%
\setvalue{\e!start#1}{\starttextbackground[#1]}%
\setvalue{\e!stop #1}{\stoptextbackground}%
\fi}
-\def\setuptextbackground%
+\def\setuptextbackground
{\dodoubleargument\dosetuptextbackground}
%\def\dosetuptextbackground[#1][#2]%
@@ -1441,12 +1717,15 @@
\def\dodosetuptextbackground#1#2%
{\getparameters[\??td#2][#1]%
\def\currenttextbackground{#2}%
- \doifvalue{\??td#2\c!status}{\v!start}{\checktextbackgrounds}}
+ \doifvalue{\??td#2\c!status}\v!start\checktextbackgrounds}
\let\currenttextbackground\empty
\def\checktextbackgrounds
- {\ifproductionrun \enablehiddenbackground \fi}
+ {\ifproductionrun
+ \enabletextarearegistration
+ \enablehiddenbackground
+ \fi}
\setuptextbackground
[\c!mp=mpos:par:shape,
@@ -1467,6 +1746,17 @@
\c!kader=\v!aan,
\c!kaderkleur=blue,
\c!lijndikte=\linewidth]
+
+%D As an example we define a grid background:
+
+\definetextbackground
+ [\v!grid]
+ [\c!status=\v!stop,
+ \c!plaats=\v!alinea,
+ \c!kader=\v!uit,
+ \c!kaderkleur=red,
+ \c!achtergrond=,
+ \c!variant=1]
% lelijk, aanpassen, opties
@@ -1517,7 +1807,6 @@
anchor_box(\MPanchor{\MPvar{self}}) ;
\stopMPpositiongraphic
-
%D \macros
%D {stackposdown, stackposup, stackposleft,stackposright}
%D
@@ -1588,20 +1877,21 @@
\ifrepositionmarginbox
\doglobal\increment\currentmarginpos
\setposition{\s!margin:\currentmarginpos}%
- \scratchdimen=\MPy{\s!margin:\currentmarginpos}%
+ \scratchdimen\MPy{\s!margin:\currentmarginpos}%
\doglobal\increment\currentmarginpos
- \advance\scratchdimen by -\MPy{\s!margin:\currentmarginpos}%
- \advance\scratchdimen by -\dp\strutbox
+ \advance\scratchdimen -\MPy{\s!margin:\currentmarginpos}%
+ \advance\scratchdimen -\dp\strutbox
% new
- \setbox#1=\hbox
+ \setbox#1\hbox
{\hskip-\MPx{\s!margin:\currentmarginpos}%
\hskip\MPx{head:\realfolio}%
\box#1}%
% so far
- \setbox#1=\hbox
- {\setposition{\s!margin:\currentmarginpos}\raise\scratchdimen\box#1}%
- \dp#1=\zeropoint
- \ht#1=\zeropoint
+ \setbox#1\hbox
+ {\setposition{\s!margin:\currentmarginpos}%
+ \raise\scratchdimen\box#1}%
+ \dp#1\zeropoint
+ \ht#1\zeropoint
\fi
\graphicvadjust{\box#1}%
\egroup}
@@ -1630,14 +1920,14 @@
% 0=notfound 1=found 2=currentpage
\def\do@@amposition#1#2#3%
- {\doifelsevalue{\??am#1\c!positie}{\v!ja}
+ {\doifelsevalue{\??am#1\c!positie}\v!ja
{\doglobal\increment\currentamposition
\doifnumberelse{#2}
{\docheckrealreferencepage{#2}%
- \global\chardef\currentamrealpage=\ifrealreferencepage2\else1\fi}
+ \global\chardef\currentamrealpage\ifrealreferencepage2\else1\fi}
{\doifreferencefoundelse{#2}
- {\global\chardef\currentamrealpage=\ifrealreferencepage2\else1\fi}
- {\global\chardef\currentamrealpage=0}}% % not found
+ {\global\chardef\currentamrealpage\ifrealreferencepage2\else1\fi}
+ {\global\chardef\currentamrealpage0}}% % not found
\expanded
{\doglobal\noexpand\appendtoks
#1_menu_button(\currentamposition,\the\currentamrealpage,\noexpand\MPpos{#1:\currentamposition}) ;
@@ -1736,22 +2026,22 @@
\let\tabulatepos\tablepos
-\def\tabulatenormalpos%
+\def\tabulatenormalpos
{\hss\tabulatepos\hss}
-\def\tabulateequalpos%
- {\setbox\scratchbox=\hbox{\tabulateEQ}%
- \hbox to \wd\scratchbox{\hss\kern\!!zeropoint\tabulatepos\hss}%
+\def\tabulateequalpos
+ {\setbox\scratchbox\hbox{\tabulateEQ}%
+ \hbox to \wd\scratchbox{\hss\kern\zeropoint\tabulatepos\hss}%
\hskip-\wd\scratchbox
\box\scratchbox}
\def\tabulatenormalcolumn#1% overloaded
{&\iftabulateequal\tabulateequalpos\else\tabulatenormalpos\fi
- &\global\chardef\tabulatetype=#1&}
+ &\global\chardef\tabulatetype#1&}
\def\tabulateequalcolumn#1% overloaded
{&\tabulateequalpos
- &\global\chardef\tabulatetype=#1&}
+ &\global\chardef\tabulatetype#1&}
\appendtoks
\doglobal\increment\noftabpositions
@@ -1894,41 +2184,40 @@
\copyposition{e:#1}{e:#2}%
\dosetpositionaction{b:#2}{\dopositionaction{b:#1}}}
-\def\definepositionframed%
+\def\definepositionframed
{\dodoubleargument\dodefinepositionframed}
\def\dodefinepositionframed[#1][#2]%
{\dosetpositionaction{b:#1}{\dopositionframed[#1][#2]}}
-\def\positionframed%
+\def\positionframed
{\dodoubleempty\dopositionframed}
\def\dopositionframed[#1][#2]%
{\bgroup
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\dimen0=\MPx{e:#1}%
- \advance\dimen0 by -\MPx{b:#1}%
+ \advance\dimen0 -\MPx{b:#1}%
\dimen2=\MPy{b:#1}%
- \advance\dimen2 by -\MPy{e:#1}%
- \advance\dimen2 by \MPd{e:#1}%
+ \advance\dimen2 -\MPy{e:#1}%
+ \advance\dimen2 \MPd{e:#1}%
\lower\dimen2\hbox
- {\advance\dimen2 by \MPh{b:#1}%
+ {\advance\dimen2 \MPh{b:#1}%
\framed
[\c!breedte=\dimen0,\c!hoogte=\dimen2,
\c!offset=\v!overlay,#2]{}}}%
- \smashbox\scratchbox
- \box\scratchbox
+ \smashedbox\scratchbox
\egroup}
% \def\sethdistances#1%
% {\hbox{\lpos{ml:#1}\hpos{mh:#1}{\strut}\rpos{mr:#1}}}
%
% \def\gethdistances#1%
-% {\scratchdimen=\MPx{mh:#1}%
-% \advance\scratchdimen by -\MPx{ml#1}%
+% {\scratchdimen\MPx{mh:#1}%
+% \advance\scratchdimen -\MPx{ml#1}%
% \edef\lefthdistance{\the\scratchdimen}%
-% \scratchdimen=\MPx{mr:#1}%
-% \advance\scratchdimen by -\MPx{mh:#1}%
+% \scratchdimen\MPx{mr:#1}%
+% \advance\scratchdimen -\MPx{mh:#1}%
% \edef\righthdistance{\the\scratchdimen}}
\protect \endinput
diff --git a/tex/context/base/core-ref.tex b/tex/context/base/core-ref.tex
index 5cd9b00d7..4546a927b 100644
--- a/tex/context/base/core-ref.tex
+++ b/tex/context/base/core-ref.tex
@@ -261,7 +261,7 @@
\def\dodowritereference#1#2#3\end#4#5#6%
{\bgroup
- \global\advance\crossreferencenumber 1
+ \global\advance\crossreferencenumber \plusone\relax
\if#1-\if#2:%
\let\referenceprefix\empty
\xdef\lastreference{#3}%
@@ -404,23 +404,16 @@
\egroup
\the\everycheckreferences}
-% \def\usereferences[#1]%
-% {\bgroup
-% \checkreferences % Load job ones first!
-% \setbox0=\hbox
-% {\doonlyonce{references:#1}{\doutilities{references}{#1}{}{}{}}}%
-% \egroup}
-
\def\usereferences[#1]%
{\startnointerference
\checkreferences
\doifparentfileelse{#1}
{\ifconditional\jobreferencesloaded\else
- \doutilities{references}{#1}{}{}{}%
+ \doutilities{references}{#1}\empty\relax\relax
\global\settrue\jobreferencesloaded
\fi}
{\ExpandBothAfter\doifnotinset{#1}{\loadedreferences}
- {\doutilities{references}{#1}{}{}{}%
+ {\doutilities{references}{#1}\empty\relax\relax
\ifx\fileprefix\empty\else
\doglobal\addtocommalist{#1}\loadedreferences
\fi}}
@@ -2239,7 +2232,7 @@
\ifx\@@rfprefix\empty
\let\referenceprefix\empty
\else\ifx\@@rfprefix\incrementreferenceprefix
- \advance\prefixcounter 1 % should be global
+ \advance\prefixcounter \plusone % should be global
\edef\referenceprefix{\the\prefixcounter:}%
\let\@@rfprefix\s!unknown
\else\ifx\@@rfprefix\decrementreferenceprefix
@@ -2589,6 +2582,7 @@
\def\dododododoinatreference#1#2[#3]%
{\bgroup
\forgetall
+\postponefootnotes
\leaveoutervmode
\doifreferencefoundelse{#3}
{\bgroup
@@ -2649,11 +2643,14 @@
\def\donaar#1[#2]%
{\dontleavehmode
%\leaveoutervmode
+\bgroup
+\postponefootnotes
\doifreferencefoundelse{#2}
{\doifelsenothing{#1}
{\dosymbolreference{}{}[#2]}
{\donaarspace{#1}[#2]}}
{\unknownreference{#2}#1\relax}% \relax catches lookahead
+\egroup
\referentieinfo{<}{#2}}
\unexpanded\def\naar#1#2%
@@ -3291,7 +3288,10 @@
{\global\utilitydonetrue %{Watch the braces here below!}
\setglobalcrossreference{{##1::\@@filterblocknumberpart[##5]}}{}{##6}{##2}}%
\def\usereferences[##1]%
- {\setbox0=\vbox{\doutilities{#3}{##1}{#3}{}{}}}%
+ %{\setbox0\vbox{\doutilities{#3}{##1}{#3}\relax\relax}}%
+ {\startnointerference
+ \doutilities{#3}{##1}{#3}\relax\relax
+ \stopnointerference}%
\dogebruikexterndocument[#1][#2][#4]%
\doglobal\addtocommalist{#1}\crossdocumentreferences
\def\docommando##1%
@@ -3424,7 +3424,7 @@
%D The symbols are derived from the symbols linked to the
%D entries.
-\def\interactiebuttons%
+\def\interactiebuttons
{\dodoubleempty\dointeractiebuttons}
\def\dointeractiebuttons[#1][#2]% er is een verdeel macro \fractie
diff --git a/tex/context/base/core-reg.tex b/tex/context/base/core-reg.tex
index 4f835faca..d90fc59d1 100644
--- a/tex/context/base/core-reg.tex
+++ b/tex/context/base/core-reg.tex
@@ -16,6 +16,7 @@
\newif \ifautoregisterhack % for the moment a private hack
% new: eigennummer=ja => eerste {} ipv pag nummer
+
\unprotect
%D Isolated but still indocumented.
@@ -64,7 +65,7 @@
\fi
\processcommalist[#1]\dodostelregisterin}
-\def\stelregisterin%
+\def\stelregisterin
{\dotripleempty\dostelregisterin}
\def\getlastregisterentry#1%
@@ -75,11 +76,12 @@
\def\doprocesspageregister[#1]#2#3% key altnum entry
{\begingroup
- \thisisnextinternal{\s!ind}%
+ \thisisnextinternal\s!ind
\ifduplicate\getlastregisterentry{#3}\fi
\convertexpanded{\??id\currentregister}{#3}\asciiregisterentry
\makesectionformat
- \doifelsevalue{\??id\currentregister\c!eigennummer}{\v!ja}{\donetrue}{\donefalse}%
+ \doifelsevalue{\??id\currentregister\c!eigennummer}\v!ja
+ \donetrue\donefalse
% the spaces between } { are essential for texutil's split
\edef\schrijfwegnaarregister%
{\writeutility%
@@ -97,9 +99,9 @@
\endgroup}
\def\doregister#1%
- {\chardef\registerpagestatus=1
+ {\chardef\registerpagestatus\plusone
\def\currentregister{#1}%
- \doifelsevalue{\??id\currentregister\c!eigennummer}{\v!ja}
+ \doifelsevalue{\??id\currentregister\c!eigennummer}\v!ja
{\dosingleempty\dodoregister}
{\dosingleempty\donoregister}}
@@ -114,7 +116,7 @@
\def\writetoregister[#1]% to be documented
{\doregister{#1}}
-\def\startregister%
+\def\startregister
{\dodoubleargument\dostartregister}
%\def\dostartregister[#1][#2]#3%
@@ -124,12 +126,12 @@
% \complexdoregister[#2]{#3}}
\def\dostartregister[#1][#2]#3%
- {\chardef\registerpagestatus=2
+ {\chardef\registerpagestatus2
\def\currentregister{#1}%
\setgvalue{\??id#1\??id#2}{\dodostopregister[#1][#2]{#3}}%
\donoregister[#2]{#3}}
-\def\stopregister%
+\def\stopregister
{\dodoubleargument\dostopregister}
\def\dostopregister[#1][#2]%
@@ -141,13 +143,13 @@
% \complexdoregister[#2]}
\def\dodostopregister[#1][#2]%
- {\chardef\registerpagestatus=3
+ {\chardef\registerpagestatus3
\def\currentregister{#1}%
\donoregister[#2]}
\def\complexdozieregister[#1]#2#3%
{\begingroup
- \thisisnextinternal{\s!ind}%
+ \thisisnextinternal\s!ind
\ifduplicate\getlastregisterentry{#2}\fi
\convertexpanded{\??id\currentregister}{#2}\asciiregisterentry
\makesectionformat
@@ -177,18 +179,19 @@
{\edef\currentregister{#1}% % om gebruik van \ExpandBothAfter
\doprocesspageregister{}} % mogelijk te maken
-\def\schrijfnaarregister%
+\def\schrijfnaarregister
{\dodoubleempty\doschrijfnaarregister}
\def\ifregistergeplaatst{\ifutilitydone}
\newif\iffirstregisterpage
+\newif\iffirstregisterentry
-\def\c!entrya{}
-\def\c!entryb{}
-\def\c!entryc{}
+\let\c!entrya\empty
+\let\c!entryb\empty
+\let\c!entryc\empty
-\def\nextregisterpage%
+\def\nextregisterpage
{\iffirstregisterpage
\doglobal\newcounter\registerpagenumber
\fi
@@ -199,7 +202,7 @@
\hbox to 1em{\hss\doregisterpagehowto{#1}{#2}\hss}}
\def\setregisterpage#1%
- {\let\registerpageseparator=\empty
+ {\let\registerpageseparator\empty
\processaction
[\getvalue{\??id#1\c!symbool}]
[ \c!n=>{\def\doregisterpage##1[##2]%
@@ -239,24 +242,24 @@
\getvalue{\??id#1\c!paginacommando}{#2}%
\dostopattributes}
-\def\registerentry #1{\executeifdefined{#1\s!entry}\gobbleoneargument}
-\def\registerentrya#1{\executeifdefined{#1\s!entrya}\gobbleoneargument}
-\def\registerentryb#1{\executeifdefined{#1\s!entryb}\gobbleoneargument}
-\def\registerentryc#1{\executeifdefined{#1\s!entryc}\gobbleoneargument}
-\def\registersee #1{\executeifdefined{#1\s!see}\gobblethrearguments}
-\def\registerpage #1{\executeifdefined{#1\s!page}\gobblefourarguments}
-\def\registerfrom #1{\executeifdefined{#1\s!from}\gobblefourarguments}
-\def\registerto #1{\executeifdefined{#1\s!to}\gobblefourarguments}
+\def\registerentry #1{\executeifdefined{#1\s!entry }\gobbleoneargument }
+\def\registerentrya#1{\executeifdefined{#1\s!entrya}\gobbleoneargument }
+\def\registerentryb#1{\executeifdefined{#1\s!entryb}\gobbleoneargument }
+\def\registerentryc#1{\executeifdefined{#1\s!entryc}\gobbleoneargument }
+\def\registersee #1{\executeifdefined{#1\s!see }\gobblethrearguments}
+\def\registerpage #1{\executeifdefined{#1\s!page }\gobblefourarguments}
+\def\registerfrom #1{\executeifdefined{#1\s!from }\gobblefourarguments}
+\def\registerto #1{\executeifdefined{#1\s!to }\gobblefourarguments}
\def\doresetregister#1%
- {\letvalue{#1\s!entrya}=\gobbleoneargument
- \letvalue{#1\s!entryb}=\gobbleoneargument
- \letvalue{#1\s!entryc}=\gobbleoneargument
- \letvalue {#1\s!see}=\gobblethreearguments
- \letvalue {#1\s!page}=\gobblefourarguments
- \letvalue {#1\s!from}=\gobblefourarguments
- \letvalue {#1\s!to}=\gobblefourarguments
- \letvalue {#1\s!entry}=\gobbleoneargument}
+ {\letvalue{#1\s!entrya}\gobbleoneargument
+ \letvalue{#1\s!entryb}\gobbleoneargument
+ \letvalue{#1\s!entryc}\gobbleoneargument
+ \letvalue{#1\s!see }\gobblethreearguments
+ \letvalue{#1\s!page }\gobblefourarguments
+ \letvalue{#1\s!from }\gobblefourarguments
+ \letvalue{#1\s!to }\gobblefourarguments
+ \letvalue{#1\s!entry }\gobbleoneargument}
\newif\iffirstsubentry
\newif\iffirstsubsubentry
@@ -287,7 +290,7 @@
\def\dohandleregisterentry##1%
{\bgroup
\if!!donea % \strut nieuw
- \setbox0=\hbox{\showlocation{\doregistertexthowto{#2}
+ \setbox0\hbox{\showlocation{\doregistertexthowto{#2}
{\strut\limitedregisterentry{#2}{##1}}}}%
\gotonextinternal{\s!ind}{#4}{#6}{\box0}%
\else
@@ -296,19 +299,20 @@
\egroup
\!!doneafalse}%
\!!doneafalse
- \doifelsevalue{\??id#2\c!interactie}{\v!tekst}
+ \doifelsevalue{\??id#2\c!interactie}\v!tekst
{\ifcase\currententrylevel \or
\!!doneatrue\c!entrya\c!entryb\c!entryc \or
\c!entrya\!!doneatrue\c!entryb\c!entryc \or
\c!entrya\c!entryb\!!doneatrue\c!entryc \fi}
{\c!entrya\c!entryb\c!entryc}%
- \global\let\c!entrya=\relax
- \global\let\c!entryb=\relax
- \global\let\c!entryc=\relax
- \global\let\c!entryletter=\relax
- \global\let\c!entryreference=\relax
+ \global\let\c!entrya\relax
+ \global\let\c!entryb\relax
+ \global\let\c!entryc\relax
+ \global\let\c!entryletter\relax
+ \global\let\c!entryreference\relax
+ % \global\firstregisterentrytrue
\iffirstregisterpage
- \global\chardef\lastregisterpagestatus=0
+ \global\chardef\lastregisterpagestatus\zerocount
\expandafter\hskip\getvalue{\??id#2\c!afstand}\relax
\donetrue
\else\ifnum#1=3
@@ -322,15 +326,15 @@
\donetrue
\fi\fi\fi
\ifdone
- \doifelsevalue{\??id#2\c!interactie}{\v!paginanummer}
+ \doifelsevalue{\??id#2\c!interactie}\v!paginanummer
{\bgroup
- \setbox0=\hbox
+ \setbox0\hbox
{\showlocation{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
\gotonextinternal{\s!ind}{#4}{#6}{\box0}%{\copy0}%
\egroup}
{\hbox{\doregisterpage{#2}[#5]\ifnum#1=2\/\fi}}%
\ignorespaces
- \global\chardef\lastregisterpagestatus=#1\relax
+ \global\chardef\lastregisterpagestatus#1\relax
\fi
\global\firstregisterpagefalse}
@@ -344,85 +348,126 @@
{#1\ifcase\currententrylevel\s!entrya\or\s!entryb\else\s!entryc\fi}%
{\doregisterpagehowto{#1}{\labeltexts{\v!zie}{#3}}}%
\c!entryletter\c!entrya\c!entryb\c!entryc
- \global\let\c!entrya=\relax
- \global\let\c!entryb=\relax
- \global\let\c!entryc=\relax
- \global\let\c!entryletter=\relax
- \global\let\c!entryreference=\relax
- \global\chardef\lastregisterpagestatus=0
+ \global\let\c!entrya\relax
+ \global\let\c!entryb\relax
+ \global\let\c!entryc\relax
+ \global\let\c!entryletter\relax
+ \global\let\c!entryreference\relax
+ \global\chardef\lastregisterpagestatus\zerocount
+ % \global\firstregisterentrytrue
\global\firstregisterpagefalse}}
{}}
+%D Extended with variant:
+
+\def\doregistercharacter[#1]#2%
+ {\global\firstregisterentrytrue
+ \doifelsevalue{\??id#1\c!aanduiding}\v!ja
+ {\executeifdefined
+ {\strippedcsname\doregistercharacter\getvalue{\??id#1\c!variant}}%
+ \doregistercharactera
+ [#1]{#2}}
+ {\noregistercharacter[#1]{#2}}}
+
+\def\noregistercharacter[#1]#2%
+ {\getvalue{\??id#1\c!voor}%
+ \goodbreak}
+
+% a = <before> <goodbreak> <character> <par> <after> <nobreak>
+
+\def\doregistercharactera[#1]#2%
+ {\getvalue{\??id#1\c!voor}%
+ \vskip\lineheight\goodbreak\vskip-\lineheight
+ \ifhmode\unskip\else\noindent\fi % brrr
+ \getvalue{\??id#1\c!commando}%
+ {\doattributes{\??id#1}\c!letter\c!kleur{\strut\ignorespaces#2}}%
+ \getvalue{\??id#1\c!na}%
+ \par\nobreak}
+
+% b = <goodbreak> <before> <character> <after> <nobreak>
+
+\def\doregistercharacterb[#1]#2% here no lineheight hackery ! ! !
+ {\getvalue{\??id#1\c!voor}%
+ \ifhmode\unskip\else\noindent\fi % brrr
+ \getvalue{\??id#1\c!commando}%
+ {\doattributes{\??id#1}\c!letter\c!kleur{\strut\ignorespaces#2}}%
+ \getvalue{\??id#1\c!na}%
+ \nobreak}
+
+%D Don't use \type{\string#2}; another hack isneeded, since
+%D \type {#2} can be \type {\string} itself.
+
+\def\doregisterreference[#1]#2%
+ {\doifvalue{\??id#1\c!refereren}\v!aan
+ {\pagereference[#1:#2]}}
+
\def\dosetpageregisterletter#1#2%
- {\gdef\c!entryreference%
- {\global\let\c!entryreference=\relax
- \doifvalue{\??id#1\c!refereren}{\v!aan}
- {\pagereference[#1:#2]}}%
- \gdef\c!entryletter%
- {\global\let\c!entryletter=\relax
- \global\utilitydonetrue
- \getvalue{\??id#1\c!voor}%
- \vskip\lineheight\goodbreak\vskip-\lineheight
- \doifelsevalue{\??id#1\c!aanduiding}{\v!ja}
- {\ifhmode\unskip\else\noindent\fi
- \getvalue{\??id#1\c!commando}% % needed
- {\doattributes{\??id#1}\c!letter\c!kleur{\strut\ignorespaces#2}}%
- \getvalue{\??id#1\c!na}%
- \par\nobreak} % don't use \string#2, other hack
- {\goodbreak}}} % needed #2 can be \string...
+ {\gdef\c!entryreference
+ {\global\let\c!entryreference\relax
+ \doregisterreference[#1]{#2}}%
+ \gdef\c!entryletter
+ {\global\utilitydonetrue
+ \global\let\c!entryletter\relax
+ \doregistercharacter[#1]{#2}}}
\def\dosetpageregisterentrya#1#2%
{\edef\currententrylevel{1}%
- \global\let\c!entryb=\relax
- \global\let\c!entryc=\relax
- \gdef\c!entrya%
- {\global\firstregisterpagetrue
- \endgraf
+ \global\let\c!entryb\relax
+ \global\let\c!entryc\relax
+ \gdef\c!entrya
+ {\iffirstregisterentry\else\endgraf\fi % new
+ \global\firstregisterpagetrue
\hangindent1em\noindent\c!entryreference
\dohandleregisterentry{#2}%
+ \global\firstregisterentryfalse
\global\firstsubentrytrue
\global\firstsubsubentrytrue}}
\def\dosetpageregisterentryb#1#2%
{\edef\currententrylevel{2}%
- \global\let\c!entryc=\relax
- \global\def\c!entryb%
- {\global\firstregisterpagetrue
- \global\let\c!entrya=\relax
- \endgraf
+ \global\let\c!entryc\relax
+ \global\def\c!entryb
+ {\iffirstregisterentry\else\endgraf\fi % new
+ \global\firstregisterpagetrue
+ \global\let\c!entrya\relax
\iffirstsubentry\nobreak\fi
\hangindent2em\noindent\c!entryreference\hskip1em\relax
\dohandleregisterentry{#2}%
+ \global\firstregisterentryfalse
\global\firstsubentryfalse
\global\firstsubsubentrytrue}}
\def\dosetpageregisterentryc#1#2%
{\edef\currententrylevel{3}%
- \gdef\c!entryc%
- {\global\firstregisterpagetrue
- \global\let\c!entrya=\relax
- \global\let\c!entryb=\relax
- \endgraf
+ \gdef\c!entryc
+ {\iffirstregisterentry\else\endgraf\fi % new
+ \global\firstregisterpagetrue
+ \global\let\c!entrya\relax
+ \global\let\c!entryb\relax
\iffirstsubsubentry\nobreak\fi
\hangindent3em\noindent\c!entryreference\hskip2em\relax
\dohandleregisterentry{#2}%
+ \global\firstregisterentryfalse
\global\firstsubsubentryfalse}}
\def\dosetpageregister#1% \currentregister gebruiken
- {\dosetreglevel{\getvalue{\??id#1\c!criterium}}%
+ {\dosetreglevel{#1}%
\global\let\currentregisterentry\empty
\global\firstsubentrytrue
\global\firstsubsubentrytrue
\setregisterpage{#1}%
- \chardef\lastregisterpagestatus=0
+ \chardef\lastregisterpagestatus\zerocount
\setvalue{#1\s!entrya}{\dosetpageregisterentrya {#1}}%
\setvalue{#1\s!entryb}{\dosetpageregisterentryb {#1}}%
\setvalue{#1\s!entryc}{\dosetpageregisterentryc {#1}}%
- \setvalue {#1\s!page}{\dosetpageregisterpage{1}{#1}}%
- \setvalue {#1\s!from}{\dosetpageregisterpage{2}{#1}}%
- \setvalue {#1\s!to}{\dosetpageregisterpage{3}{#1}}%
- \setvalue {#1\s!see}{\dosetpageregistersee {#1}}%
- \setvalue {#1\s!entry}{\dosetpageregisterletter {#1}}}
+ \setvalue{#1\s!page }{\dosetpageregisterpage{1}{#1}}%
+ \setvalue{#1\s!from }{\dosetpageregisterpage{2}{#1}}%
+ \setvalue{#1\s!to }{\dosetpageregisterpage{3}{#1}}%
+ \setvalue{#1\s!see }{\dosetpageregistersee {#1}}%
+ \setvalue{#1\s!entry }{\dosetpageregisterletter {#1}}}
+
+\def\dosetreglevel#1%
+ {\dosetfilterlevel{\getvalue{\??id#1\c!criterium}}\empty}
\def\getalllistreferences#1#2%
{\doglobal\convertexpanded{\??id#1}{#2}\currentregisterentry
@@ -435,7 +480,7 @@
\def\internallistreference{0}}}
\def\dosetlinkregister#1% is die page reference echt nodig?
- {\dosetreglevel{\getvalue{\??id#1\c!criterium}}%
+ {\dosetreglevel{#1}%
\setregisterpage{#1}%
\global\let\currentregisterentry\empty
\global\firstsubentrytrue % not needed
@@ -476,9 +521,9 @@
% aangepast
\def\dodocommando[##1-##2]%
{\gotonextinternal{\s!ind}{##1}{##2}{\box0}}%
- \doifelsevalue{\??id#1\c!interactie}{\v!paginanummer}
+ \doifelsevalue{\??id#1\c!interactie}\v!paginanummer
{\limitedregisterentry{#1}{#2}} % paginanummer
- {{\setbox0=\hbox{\limitedregisterentry{#1}{\begstrut#2}}%
+ {{\setbox0\hbox{\limitedregisterentry{#1}{\begstrut#2}}%
\ifx\firstlistreference\empty % tekst,alles
\ifx\midlistreference\empty
\box0
@@ -488,11 +533,11 @@
\else
\expandafter\dodocommando\expandafter[\firstlistreference]%
\fi}}%
- \doifvalue{\??id#1\c!nummer}{\v!ja}
+ \doifvalue{\??id#1\c!nummer}\v!ja
{\hskip\getvalue{\??id#1\c!afstand}(\commalistsize)}%
\doifnotvalue{\??id#1\c!interactie}{\v!tekst} % paginanummer,alles
{\def\docommando##1##2%
- {{\setbox0=\hbox{\showlocation{\hbox to 1em{\hss\symbol[##2]\hss}}}%
+ {{\setbox0\hbox{\showlocation{\hbox to 1em{\hss\symbol[##2]\hss}}}%
\ifx##1\empty
% \hskip\wd0 % (optioneel maken)
\else
@@ -508,13 +553,8 @@
\limitedregisterentry{#1}{#2}%
\fi}
-%\def\dosetregister#1%
-% {\doifelsevalue{\??id#1\c!koppeling}{\v!ja}
-% {\dosetlinkregister{#1}}
-% {\dosetpageregister{#1}}}
-
\def\dosetregister#1%
- {\doifelsevalue{\??id#1\c!koppeling}{\v!ja}
+ {\doifelsevalue{\??id#1\c!koppeling}\v!ja
{\ifautoregisterhack
\dosetautoregister{#1}%
\else
@@ -525,7 +565,7 @@
\newcounter\internallistreference
\def\doloadregisterlinks#1%
- {\dosetreglevel{\getvalue{\??id#1\c!criterium}}%
+ {\dosetreglevel{#1}%
\setregisterpage{#1}%
\global\let\currentregisterentry\empty
\global\firstregisterpagetrue
@@ -570,9 +610,9 @@
{\iflocation
\ifcase0\countervalue{autolink:#1}\relax % only once
\begingroup
- \let\dosetregister=\doloadregisterlinks
+ \let\dosetregister\doloadregisterlinks
\stelregisterin[#1][#2]%
- \doutilities{#1}{\jobname}{#1}{}{}%
+ \doutilities{#1}\jobname{#1}\relax\relax
\endgroup
\ifautoregisterhack
\doinitializeautoregister{#1}%
@@ -582,158 +622,9 @@
\fi
\fi}
-\def\koppelregister%
+\def\koppelregister
{\dodoubleempty\dokoppelregister}
-% \def\doprocesslinkregister[#1][#2]#3%
-% {\hbox
-% {\doprocesspageregister[#2]{#3}%
-% \let\firstlistreference=\empty
-% \let\lastlistreference=\empty
-% \let\selflistreference=\empty
-% \let\prevlistreference=\empty
-% \let\nextlistreference=\empty
-% \getalllistreferences{#1}{#3}%
-% \doifnot{\alllistreferences}{}
-% {\def\dodocommando[##1-##2]%
-% {\ifx\firstlistreference\empty
-% \def\firstlistreference{##1-##2}%
-% \fi
-% \def\lastlistreference{##1-##2}%
-% \ifnum##1<\nextinternalreference\relax
-% \def\prevlistreference{##1-##2}%
-% \else\ifnum##1>\nextinternalreference\relax
-% \def\nextlistreference{##1-##2}%
-% \def\dodocommando[####1-####2]%
-% {\def\lastlistreference{####1-####2}}%
-% \else
-% \def\selflistreference{##1-##2}%
-% \fi\fi}%
-% \def\docommando##1%
-% {\dodocommando[##1]}%
-% \processcommacommand[\alllistreferences]\docommando}%
-% \ifx\prevlistreference\empty
-% \let\prevlistreference=\lastlistreference
-% \fi
-% \ifx\nextlistreference\empty
-% \let\nextlistreference=\firstlistreference
-% \fi
-% \ifx\prevlistreference\selflistreference
-% \let\prevlistreference=\empty
-% \let\nextlistreference=\empty
-% \fi
-% \def\dodocommando[##1-##2]%
-% {\gotonextinternal{\s!ind}{##1}{##2}{\box0}}%{\copy0}}%
-% \def\docommando##1##2%
-% {\bgroup
-% \ifx##1\empty
-% \doifvalue{\??id#1\c!onbekendeverwijzing}{\v!leeg}
-% {\hskip1em}%
-% \else
-% \setbox0=\hbox to 1em{\hss\showlocation{\symbol[##2]}\hss}%
-% \expandafter\dodocommando\expandafter[##1]%
-% \fi
-% \egroup}%
-% \processaction
-% [\getvalue{\??id#1\c!plaats}]
-% [\v!midden=>\docommando\prevlistreference\v!vorige,
-% \v!links=>\docommando\prevlistreference\v!vorige
-% \docommando\nextlistreference\v!volgende]%
-% \doifreferencefoundelse{\s!lin:\internallistreference}
-% {\gotosomeinternal
-% {\s!lin}{\internallistreference}{\currentrealreference}
-% {\showlocation{\limitedregisterentry{#1}{#3}}}}
-% {\hbox{\limitedregisterentry{#1}{#3}}}%
-% \processaction
-% [\getvalue{\??id#1\c!plaats}]
-% [ \v!midden=>\docommando\nextlistreference\v!volgende,
-% \v!rechts=>\docommando\prevlistreference\v!vorige
-% \docommando\nextlistreference\v!volgende]}}
-%
-% \def\doprocesslinkregister[#1][#2]#3%
-% {\hbox
-% {\doprocesspageregister[#2]{}{#3}%
-% \let\firstlistreference=\empty
-% \let\lastlistreference=\empty
-% \let\selflistreference=\empty
-% \let\prevlistreference=\empty
-% \let\nextlistreference=\empty
-% \getalllistreferences{#1}{#3}%
-% \doifnot{\alllistreferences}{}
-% {\def\dodocommando[##1-##2]%
-% {\ifx\firstlistreference\empty
-% \def\firstlistreference{##1-##2}%
-% \fi
-% \def\lastlistreference{##1-##2}%
-% \ifnum##1<\nextinternalreference\relax
-% \def\prevlistreference{##1-##2}%
-% \else\ifnum##1>\nextinternalreference\relax
-% \def\nextlistreference{##1-##2}%
-% \def\dodocommando[####1-####2]%
-% {\def\lastlistreference{####1-####2}}%
-% \else
-% \def\selflistreference{##1-##2}%
-% \fi\fi}%
-% \def\docommando##1%
-% {\dodocommando[##1]}%
-% \processcommacommand[\alllistreferences]\docommando}%
-% \ifx\prevlistreference\empty
-% \let\prevlistreference=\lastlistreference
-% \fi
-% \ifx\nextlistreference\empty
-% \let\nextlistreference=\firstlistreference
-% \fi
-% \ifx\prevlistreference\selflistreference
-% \let\prevlistreference=\empty
-% \let\nextlistreference=\empty
-% \fi
-% \def\dodocommando[##1-##2]%
-% {\gotonextinternal{\s!ind}{##1}{##2}{\box0}}%{\copy0}}%
-% \def\docommando##1##2%
-% {\bgroup
-% \ifx##1\empty
-% \doifvalue{\??id#1\c!onbekendeverwijzing}{\v!leeg}
-% {\hskip1em}%
-% \else
-% \setbox0=\hbox to 1em{\hss\showlocation{\symbol[##2]}\hss}%
-% \expandafter\dodocommando\expandafter[##1]%
-% \fi
-% \egroup}%
-% \processaction
-% [\getvalue{\??id#1\c!plaats}]
-% [\v!midden=>\docommando\prevlistreference\v!vorige,
-% \v!links=>\docommando\prevlistreference\v!vorige
-% \docommando\nextlistreference\v!volgende]%
-% \doifreferencefoundelse{\s!lin:\internallistreference}
-% {\gotosomeinternal
-% {\s!lin}{\internallistreference}{\currentrealreference}
-% {\showlocation{\limitedregisterentry{#1}{#3}}}}
-% {\hbox{\limitedregisterentry{#1}{#3}}}%
-% \processaction
-% [\getvalue{\??id#1\c!plaats}]
-% [ \v!midden=>\docommando\nextlistreference\v!volgende,
-% \v!rechts=>\docommando\prevlistreference\v!vorige
-% \docommando\nextlistreference\v!volgende]}}
-%
-% better:
-
-% \def\dodocommandoprolinrefA[#1-#2]%
-% {\ifx\firstlistreference\empty
-% \def\firstlistreference{#1-#2}%
-% \fi
-% \def\lastlistreference{#1-#2}%
-% \ifnum#1<\nextinternalreference\relax
-% \def\prevlistreference{#1-#2}%
-% \else\ifnum#1>\nextinternalreference\relax
-% \def\nextlistreference{#1-#2}%
-% \def\dodocommandoprolinrefA[##1-##2]%
-% {\def\lastlistreference{##1-##2}}%
-% \else
-% \def\selflistreference{#1-#2}%
-% \fi\fi}
-%
-% more efficient :
-
\def\dodocommandoprolinrefAA[#1-#2]%
{\def\lastlistreference{#1-#2}}
@@ -762,51 +653,11 @@
\ifx#2\empty
\doifvalue{\??id#1\c!onbekendeverwijzing}\v!leeg{\hskip1em}%
\else
- \setbox0=\hbox to 1em{\hss\showlocation{\symbol[#3]}\hss}%
+ \setbox0\hbox to 1em{\hss\showlocation{\symbol[#3]}\hss}%
\expandafter\dodocommandoprolinrefB\expandafter[#2]%
\fi
\egroup}
-%\def\doprocesslinkregister[#1][#2]#3%
-% {\hbox
-% {\doprocesspageregister[#2]{}{#3}%
-% \let\firstlistreference\empty
-% \let\lastlistreference\empty
-% \let\selflistreference\empty
-% \let\prevlistreference\empty
-% \let\nextlistreference\empty
-% \getalllistreferences{#1}{#3}%
-% \ifx\alllistreferences\empty \else
-% \expanded{\rawprocesscommalist[\alllistreferences]}\docommandoprolinrefA
-% \fi
-% \ifx\prevlistreference\empty
-% \let\prevlistreference\lastlistreference
-% \fi
-% \ifx\nextlistreference\empty
-% \let\nextlistreference\firstlistreference
-% \fi
-% \ifx\prevlistreference\selflistreference
-% \let\prevlistreference\empty
-% \let\nextlistreference\empty
-% \fi
-% % can be a bit faster is one proces only
-% % can even be resolved at definition time
-% \processaction
-% [\getvalue{\??id#1\c!plaats}]
-% [\v!midden=>\docommandoprolinrefB{#1}\prevlistreference\v!vorige,
-% \v!links=>\docommandoprolinrefB{#1}\prevlistreference\v!vorige
-% \docommandoprolinrefB{#1}\nextlistreference\v!volgende]%
-% \doifreferencefoundelse{\s!lin:\internallistreference}
-% {\gotosomeinternal
-% {\s!lin}{\internallistreference}{\currentrealreference}
-% {\showlocation{\limitedregisterentry{#1}{#3}}}}
-% {\hbox{\limitedregisterentry{#1}{#3}}}%
-% \processaction
-% [\getvalue{\??id#1\c!plaats}]
-% [ \v!midden=>\docommandoprolinrefB{#1}\nextlistreference\v!volgende,
-% \v!rechts=>\docommandoprolinrefB{#1}\prevlistreference\v!vorige
-% \docommandoprolinrefB{#1}\nextlistreference\v!volgende]}}
-
\def\doprocesslinkregister[#1][#2]#3%
{\hbox
{\doprocesspageregister[#2]{}{#3}%
@@ -856,27 +707,9 @@
\docommandoprolinrefB{#1}\nextlistreference\v!volgende
\fi}}
-% \def\dodolinkedregister[#1][#2]#3% page auto link
-% {\bgroup
-% \chardef\registerpagestatus=1
-% \def\currentregister{#1}%
-% \iflocation
-% \ifautoregisterhack
-% \def\next{\doprocessautoregister[#1][#2]{#3}}%
-% \else
-% \def\next{\doprocesslinkregister[#1][#2]{#3}}%
-% \fi
-% \else
-% \def\next{\doprocesspageregister[#2]{#3}}%
-% \fi
-% \next
-% \egroup
-% \ifvmode\nobreak\fi
-% \GotoPar}
-
\def\dodolinkedregister[#1][#2]#3% page auto link
{\bgroup
- \chardef\registerpagestatus=1
+ \chardef\registerpagestatus\plusone
\def\currentregister{#1}%
\iflocation
\ifautoregisterhack
@@ -897,7 +730,7 @@
\def\dosetautoregister#1%
{\makecounter{autolink:#1}%
- \dosetreglevel{\getvalue{\??id#1\c!criterium}}%
+ \dosetreglevel{#1}%
\setregisterpage{#1}%
\global\let\currentregisterentry\empty
\global\firstsubentrytrue % not needed
@@ -919,7 +752,7 @@
%\setupinteraction[\c!kleur=,\c!contrastkleur=,\c!letter=]% kan sneller
\resetinteractionparameter\c!kleur
\resetinteractionparameter\c!contrastkleur
- \resetinteractionparameter\c!letterkleur
+ \resetinteractionparameter\c!letter
\naarbox
{\limitedregisterentry{#1}{\begstrut#2}}%
[JS(SetRegisterEntry{\v!register,\countervalue{autolink:#1},#2,{\alllistreferences}})]%
@@ -929,21 +762,12 @@
\limitedregisterentry{#1}{#2}%
\fi}
-% \def\doprocessautoregister[#1][#2]#3%
-% {\hbox
-% {\doprocesspageregister[#2]{#3}%
-% \doifreferencefoundelse{\s!lin:\internallistreference}
-% {\gotosomeinternal
-% {\s!lin}{\internallistreference}{\currentrealreference}
-% {\showlocation{\limitedregisterentry{#1}{#3}}}}
-% {\hbox{\limitedregisterentry{#1}{#3}}}}}
-
\def\doprocessautoregister[#1][#2]#3%
{\hbox
{\doprocesspageregister[#2]{}{#3}%
\doifreferencefoundelse{\s!lin:\internallistreference}
- {\gotosomeinternal
- {\s!lin}{\internallistreference}{\currentrealreference}
+ {\gotosomeinternal \s!lin
+ {\internallistreference}{\currentrealreference}
{\showlocation{\limitedregisterentry{#1}{#3}}}}
{\hbox{\limitedregisterentry{#1}{#3}}}}}
@@ -959,7 +783,7 @@
{\definefield[#1:\realfolio][line][\v!register]%
\field[#1:\realfolio]}
-\def\simpleregisterfield%
+\def\simpleregisterfield
{\complexregisterfield[\v!register]}
\definecomplexorsimple\registerfield
@@ -985,6 +809,15 @@
\def\doinitializelinkregister#1%
{}
+% todo ruwe register
+
+\def\plaatsregister
+ {\dosingleargument\doplaatsregister}
+
+\def\doplaatsregister[#1]%
+ {\def\currentregister{#1}%
+ \complexorsimpleempty\doplaatsregister}
+
\def\complexdoplaatsregister[#1]%
{\begingroup
\stelregisterin[\currentregister][#1]%
@@ -995,18 +828,11 @@
\c!uitlijnen=\getvalue{\??id\currentregister\c!uitlijnen}]%
\mindermeldingen
\startopelkaar[\v!blanko]%
- \doutilities{\currentregister}{\jobname}{\currentregister}{}{\par}%
+ \doutilities\currentregister\jobname\currentregister\relax\par
\stopopelkaar
\stopkolommen
\endgroup}
-\def\doplaatsregister[#1]%
- {\def\currentregister{#1}%
- \complexorsimpleempty\doplaatsregister}
-
-\def\plaatsregister%
- {\dosingleargument\doplaatsregister}
-
\def\complexdovolledigregister[#1]% \@EA's kunnen weg
{\@EA\plaatsvolledig\@EA{\@EA\systemsuppliedchapter\@EA}%
\@EA{\@EA\currentregister\@EA}%
@@ -1017,7 +843,7 @@
{\def\currentregister{#1}%
\complexorsimpleempty\dovolledigregister}
-\def\volledigregister%
+\def\volledigregister
{\dosingleargument\doplaatsregister}
\def\dodefinieerregister[#1][#2]%
@@ -1029,6 +855,7 @@
\c!na=,
\c!symbool=,
\c!interactie=\v!paginanummer,
+ \c!variant=\v!a,
\c!afstand=1em,
\c!letter=\v!vet,
\c!paginaletter=\v!schuin,
@@ -1065,14 +892,14 @@
\def\definieerregister%
{\dodoubleargument\dodefinieerregister}
-\def\registerlengte {\utilityregisterlength}
+\def\registerlengte{\utilityregisterlength}
-\def\utilityregisterlength {0}
+\def\utilityregisterlength{0}
\def\dobepaalregisterkenmerken[#1][#2]%
{\begingroup
\stelregisterin[#1][#2]%
- \dosetreglevel{\getvalue{\??id#1\c!criterium}}%
+ \dosetreglevel{#1}%
\setvalue{#1\s!from}%
{\getvalue{#1\s!page}}%
\setvalue{#1\s!page}##1##2##3##4%
@@ -1081,8 +908,8 @@
\global\utilitydonetrue}
{}}%
\doglobal\newcounter\utilityregisterlength
- \setbox0=\vbox
- {\doutilities{#1}{\jobname}{#1}{}{}}%
+ \setbox0\vbox
+ {\doutilities{#1}\jobname{#1}\relax\relax}%
\endgroup
\ifregistergeplaatst
\setsystemmode \v!register
@@ -1126,6 +953,4 @@
%
% \volledigeindex
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/core-rul.tex b/tex/context/base/core-rul.tex
index 81f6c822f..07a7b1f51 100644
--- a/tex/context/base/core-rul.tex
+++ b/tex/context/base/core-rul.tex
@@ -28,27 +28,27 @@
%D preset value of .4pt equals the default hard coded \TEX\
%D rule width.
-\newdimen\linewidth
+\newdimen\linewidth
\def\dosetuplinewidth[#1]%
{\assigndimension{#1}{\linewidth}{0.2pt}{0.4pt}{0.6pt}}
-\def\setuplinewidth%
+\def\setuplinewidth
{\dosingleargument\dosetuplinewidth}
% \def\dosetuprules[#1]%
% {\getparameters[\??ln][#1]%
% \setuplinewidth[\@@lndikte]}
%
-% \def\setuprules%
+% \def\setuprules
% {\dosingleargument\dosetuprules}
%D \macros
%D {ruledlinewidth, inheritruledlinewidth}
%D
-%D Inside framed boxed we will use a private dimensions. As
-%D an option one can let the linewidth inherit its value from
-%D this one.
+%D Inside framed boxed we will use a private dimensions. As
+%D an option one can let the linewidth inherit its value from
+%D this one.
\newdimen\ruledlinewidth \newif\ifinheritruledlinewidth
@@ -120,13 +120,13 @@
\dimen10=\!!onepoint
\dimen10=\@@rsfactor\dimen10
\dimen10=#5\dimen10
- \setbox2=\hbox to #2
+ \setbox2\hbox to #2
{\cleaders\hbox to 2\dimen10{#1\hss}\hss}%
\dimen12=#3%
- \advance\dimen12 by #4%
- \setbox0=\vbox to \dimen12
+ \advance\dimen12 #4%
+ \setbox0\vbox to \dimen12
{\cleaders\vbox to 2\dimen10{\box2\vss}\vss}%
- \setbox0=\hbox
+ \setbox0\hbox
{\hskip-.5\dimen10\lower0.5\dimen10\copy0
\hskip-\wd0\hskip\dimen10\lower1.5\dimen10\box0}%
\box0
@@ -202,19 +202,19 @@
\def\dofilledroundbox\width#1\height#2\depth#3\radius#4\\%
{\ovalbox{#1}{#2}{#3}{\ruledlinewidth}{#4}\v!uit\v!aan}
-\def\ovalbox#1#2#3#4#5#6#7% direct #1 etc passeren
+\def\ovalbox#1#2#3#4#5#6#7% direct #1 etc passeren
{\bgroup
\scratchdimen#1\edef\ovalwid{\the\scratchdimen}%
\scratchdimen#2\edef\ovalhei{\the\scratchdimen}%
\scratchdimen#3\edef\ovaldep{\the\scratchdimen}%
\scratchdimen#4\edef\ovallin{\the\scratchdimen}%
\scratchdimen#5\edef\ovalrad{\the\scratchdimen}%
- \doifelse{#6}\v!aan % will be a macro that handles
- {\def\ovalstr{1}} % start, stop, ja, nee, aan, uit
- {\def\ovalstr{0}}% % and something \doif
+ \doifelse{#6}\v!aan % will be a macro that handles
+ {\let\ovalstr\!!plusone} % start, stop, ja, nee, aan, uit
+ {\let\ovalstr\!!zerocount}% % and something \doif
\doifelse{#7}\v!aan
- {\def\ovalfil{1}}
- {\def\ovalfil{0}}%
+ {\let\ovalfil\!!plusone}
+ {\let\ovalfil\!!zerocount}%
\doovalbox\ovalwid\ovalhei\ovaldep\ovallin\ovalrad\ovalstr\ovalfil
\egroup}
@@ -303,25 +303,25 @@
%D
%D The resulting box is lowered to the right depth.
-\def\overlaywidth {\the\vsize\space} % We preset the variables
-\def\overlayheight {\the\hsize\space} % to some reasonable default
+\def\overlaywidth {\the\hsize\space} % We preset the variables
+\def\overlayheight {\the\vsize\space} % to some reasonable default
\let\overlaydepth \!!zeropoint % values. The attributes
\let\overlayoffset \!!zeropoint % of the frame can be (are)
\let\overlaycolor \empty % set somewhere else.
-\let\overlaylinewidth \!!zeropoint %
+\let\overlaylinewidth \!!zeropoint %
\let\overlaylinecolor \empty %
-%D The next register is used to initialize overlays.
+%D The next register is used to initialize overlays.
\newtoks\everyoverlay
%D An example of an initialization is the following (overlays
%D can contain text and be executed under an regime where
-%D interlineskip is off).
+%D interlineskip is off).
\appendtoks \oninterlineskip \to \everyoverlay
-\def\defineoverlay%
+\def\defineoverlay
{\dodoubleargument\dodefineoverlay}
\def\dodefineoverlay[#1][#2]%
@@ -329,37 +329,6 @@
{\setvalue{\??ov##1}{\executedefinedoverlay##1\\#2\\}}%
\processcommalist[#1]\docommando}
-% \long\def\executedefinedoverlay#1\\#2\\#3#4#5#6#7#8#9%
-% {\bgroup
-% \scratchdimen=#3%
-% \edef\overlaywidth{\the\scratchdimen\space}%
-% \scratchdimen=#4%
-% \advance\scratchdimen by #5%
-% \edef\overlayheight{\the\scratchdimen\space}%
-% \scratchdimen=#5%
-% \edef\overlaydepth{\the\scratchdimen\space}%
-% \edef\overlaycolor{#6}%
-% \edef\overlayoffset{\backgroundoffset\space}% we steal this one
-% \prependtoks
-% \hsize\overlaywidth
-% \vsize\overlayheight
-% \to\everyoverlay
-% %\writestatus
-% % {overlay}
-% % {#1\space w=\overlaywidth/h+d=\overlayheight/d=\overlaydepth]}%
-% \setbox0=\hbox{\lower\overlaydepth\hbox{\the\everyoverlay#2}}%
-% \dimen0=\wd0 \advance\dimen0 by -\overlaywidth
-% \dimen2=\ht0 \advance\dimen2 by -#4% not \overlayheight
-% \wd0=\overlaywidth
-% \ht0=\overlayheight
-% \dp0=\overlaydepth
-% \setbox0=\hbox{\hskip-.5\dimen0\raise-.5\dimen2\box0}%
-% \wd0=\overlaywidth
-% \ht0=\overlayheight
-% \dp0=\overlaydepth
-% \box0
-% \egroup}
-
\prependtoks
\hsize\overlaywidth
\vsize\overlayheight
@@ -435,18 +404,13 @@
{\bgroup
\def\currentbackground{#1}%
\the\everybackgroundbox
-% \setbox\extraframebox=\hbox
-% {\executeifdefined{\??ov\currentbackground}\gobblesevenarguments
-% {\dimen2}{\dimen4}{\dimen6}{#3}{#4}{#5}{#6}}%
-% \setbox\extraframebox=\hbox
-% {\vbox{\moveleft\dimen0\box\extraframebox}}%
- \setbox\extraframebox=\hbox
+ \setbox\extraframebox\hbox
{\vbox{\moveleft\dimen0\hbox
{\executeifdefined{\??ov\currentbackground}\gobblesevenarguments
{\dimen2}{\dimen4}{\dimen6}{#3}{#4}{#5}{#6}}}}%
- \wd\extraframebox=\zeropoint % \backgroundwidth
- \ht\extraframebox=\backgroundheight
- \dp\extraframebox=\backgrounddepth
+ \wd\extraframebox\zeropoint % \backgroundwidth
+ \ht\extraframebox\backgroundheight
+ \dp\extraframebox\backgrounddepth
\box\extraframebox % \hskip-\backgroundwidth
\egroup}
@@ -459,10 +423,10 @@
#6\radius#7\depth#8\\%
{\vbox
{\forgetall\boxmaxdepth\maxdimen
- \dimen0=#5\relax
- \dimen2=\wd#1\advance\dimen2 2\dimen0
- \dimen4=\ht#1\advance\dimen4 \dimen0
- \dimen6=\dp#1\advance\dimen6 \dimen0
+ \dimen0 #5\relax % space needed
+ \dimen2\wd#1\advance\dimen2 2\dimen0
+ \dimen4\ht#1\advance\dimen4 \dimen0
+ \dimen6\dp#1\advance\dimen6 \dimen0
\advance\dimen6 #8\relax
\edef\backgroundoffset{\the\dimen0}%
\edef\backgroundwidth {\the\wd#1}%
@@ -493,16 +457,16 @@
\def\dooutlinebox#1\color#2\offset#3\corner#4\radius#5\depth#6\toggle#7\\%
{\vbox % rules on top of box
- {\dimen0=#3\relax
- \dimen2=\wd#1\advance\dimen2 2\dimen0
- \dimen4=\ht#1\advance\dimen4 \dimen0
- \dimen6=\dp#1\advance\dimen6 \dimen0\advance\dimen6 by #6\relax
+ {\dimen0 #3\relax % space needed
+ \dimen2\wd#1\advance\dimen2 2\dimen0
+ \dimen4\ht#1\advance\dimen4 \dimen0
+ \dimen6\dp#1\advance\dimen6 \dimen0\advance\dimen6 #6\relax
\ifdim\dimen6<\zeropoint
- \advance\dimen4 \dimen6
- \dimen8=-\dimen6
- \dimen6=\zeropoint
+ \advance\dimen4 \dimen6
+ \dimen8-\dimen6
+ \dimen6\zeropoint
\else
- \dimen8=\zeropoint
+ \dimen8\zeropoint
\fi
\setbox\extraframebox\hbox
{\dostrokedbox\width\dimen2\height\dimen4\depth\dimen6%
@@ -539,8 +503,9 @@
\def\dostrokedlinedbox\width#1\height#2\depth#3\toggle
#4\left#5\right#6\top#7\bottom#8\\%
{\bgroup
- \setbox0=\null\wd0=#1\ht0=#2\dp0=#3%
- \setbox2=\vbox
+ \setbox0\null
+ \wd0=#1\ht0=#2\dp0=#3%
+ \setbox2\vbox
{\getvalue{t\@@frame@@#4#7}%
\hbox
{\getvalue{l\@@frame@@#4#5}%
@@ -590,6 +555,7 @@
\newif\ifboxhasformat
\newif\ifboxhasstrut
\newif\ifboxisoverlaid
+\newif\ifboxhasframe
%D We also need a few \DIMENSIONS:
@@ -636,7 +602,7 @@
{\copyparameters[#1][#3]%
[\c!breedte,\c!hoogte,\c!offset,\c!leeg,\c!lijndikte,%
\c!straal,\c!hoek,\c!diepte,\c!kader,\c!kaderkleur,%
- \c!voorgrondletter,\c!voorgrondkleur,%
+ \c!voorgrondletter,\c!voorgrondkleur,\c!regels,%
\c!bovenkader,\c!onderkader,\c!linkerkader,\c!rechterkader,%
\c!lijndikte,\c!kaderoffset,\c!achtergrond,%
\c!achtergrondoffset,\c!achtergrondraster,\c!achtergrondkleur,%
@@ -646,7 +612,7 @@
\copyparameters[#1\c!kader][#1]%
[\c!straal,\c!hoek,\c!diepte]}
-\def\setupframed%
+\def\setupframed
{\dodoubleargument\getparameters[\??oi]}
%D \macros
@@ -679,61 +645,71 @@
%D terms of the main offset. However, see for instance page
%D backgrounds, when \type {#2} sets the offset to \type
%D {overlay}, both offsets become invalid.
-%D
-%D Because it is used so often the he next macro is (and
+%D
+%D Because it is used so often the he next macro is (and
%D looks) rather optimized.
+\let\@@framed\s!unknown
+
+\def\framedparameter#1%
+ {\csname\@@framed#1\endcsname}
+
\def\startlocalframed[#1][#2]%
{\bgroup
\inframedtrue
\edef\@@framed{#1}%
% this piece of pre expansion is needed (sometimes used in frameoffset)
- % \doifvaluesomething{\@@framed\c!lijndikte} % obsolete
- % {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}}% obsolete
+ % \doifvaluesomething{\@@framed\c!lijndikte} % obsolete
+ % {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}}% obsolete
% this piece of pre expansion is needed (sometimes used circular)
- \scratchdimen\getvalue{\@@framed\c!kaderoffset}%
+ \scratchdimen\framedparameter\c!kaderoffset
\setevalue{\@@framed\c!kaderoffset}{\the\scratchdimen}%
\doifnotvalue{\@@framed\c!achtergrondoffset}\v!kader
- {\scratchdimen\getvalue{\@@framed\c!achtergrondoffset}%
+ {\scratchdimen\framedparameter\c!achtergrondoffset
\setevalue{\@@framed\c!achtergrondoffset}{\the\scratchdimen}}%
- % we need to register the (outer) color
- \startregistercolor[\getvalue{\@@framed\c!voorgrondkleur}]%
% to prevent deadlock in case of self refering
\ifsecondargument % faster
\getparameters[\@@framed][#2]% here !
\fi
+ % we need to register the (outer) color
+ \startregistercolor[\framedparameter\c!voorgrondkleur]%
% to get the right spacing
\doifvaluesomething{\@@framed\c!voorgrondletter}
{\@EA\doconvertfont\csname\@@framed\c!voorgrondletter\endcsname\empty}%
% beware, both the frame and background offset can be overruled
%
- % the next macros are visible
- \edef\localoffset{\getvalue{\@@framed\c!offset }}%
- \edef\localwidth {\getvalue{\@@framed\c!breedte }}%
- \edef\localheight{\getvalue{\@@framed\c!hoogte }}%
- \edef\localformat{\getvalue{\@@framed\c!uitlijnen}}%
- \edef\localstrut {\getvalue{\@@framed\c!strut }}%
- % these are not
- \edef\@@localframing {\getvalue{\@@framed\c!kader }}%
- \edef\@@locallocation{\getvalue{\@@framed\c!plaats}}%
+ % the next macros are visible
+ \edef\localoffset{\framedparameter\c!offset}%
+ \edef\localwidth {\framedparameter\c!breedte}%
+ \edef\localheight{\framedparameter\c!hoogte}%
+ \edef\localformat{\framedparameter\c!uitlijnen}%
+ \edef\localstrut {\framedparameter\c!strut}%
+ % these are not
+ \edef\@@localframing {\framedparameter\c!kader}%
+ \edef\@@locallocation{\framedparameter\c!plaats}%
%
- \ifx\@@localframing\v!overlay % no frame, no offset, no framewidth
- \linewidth\zeropoint
+ \ifx\@@localframing\v!overlay % no frame, no offset, no framewidth
+ \boxhasframefalse
\let\localoffset\v!overlay
\else\ifx\@@localframing\v!geen % no frame, no framewidth
- \linewidth\zeropoint
- \else % \v!ja or \v!nee % if no frame then still framewidth
+ \boxhasframefalse
+ \else
+ \boxhasframetrue
+ \fi\fi
+ \ifboxhasframe
\doifvaluesomething{\@@framed\c!lijndikte}
- {\ruledlinewidth\getvalue{\@@framed\c!lijndikte}\relax
+ {\ruledlinewidth\framedparameter\c!lijndikte\relax
\ifinheritruledlinewidth\linewidth\ruledlinewidth\fi}%
- \fi\fi
+ \else
+ \ruledlinewidth\zeropoint
+ \fi
\ifx\localformat\empty
\boxhasformatfalse
\else
\boxhasformattrue
\dosetraggedcommand\localformat
- \edef\dobeforeframedbox{\raggedtopcommand\getvalue{\@@framed\c!boven}}%
- \edef\doafterframedbox {\getvalue{\@@framed\c!onder}\raggedbottomcommand}%
+ \edef\dobeforeframedbox{\raggedtopcommand\framedparameter\c!boven}%
+ \edef\doafterframedbox {\framedparameter\c!onder\raggedbottomcommand}%
\fi
\ifx\localoffset\v!geen
\boxhasoffsetfalse
@@ -741,6 +717,7 @@
\boxisoverlaidfalse
\@@localoffset\ruledlinewidth
\else\ifx\localoffset\v!overlay
+ % \ifx\@@localframing\v!nee \boxhasframefalse \fi % test first
\boxhasoffsetfalse
\boxhasstrutfalse
\boxisoverlaidtrue
@@ -765,13 +742,20 @@
\else
\boxhaswidthfalse
\fi
+ \else\ifx\localwidth\v!vast % equals \v!ruim
+ \ifboxhasformat
+ \boxhaswidthtrue
+ \!!widtha\hsize
+ \else
+ \boxhaswidthfalse
+ \fi
\else\ifx\localwidth\v!ruim
\boxhaswidthtrue
\!!widtha\hsize
\else
\boxhaswidthtrue
\!!widtha\localwidth
- \fi\fi
+ \fi\fi\fi
\ifx\localheight\v!passend
\boxhasheightfalse % no longer: \boxhasstrutfalse
\else\ifx\localheight\v!ruim
@@ -780,11 +764,21 @@
\boxhasheighttrue
\!!heighta\localheight
\fi\fi
+ \ifboxhasheight
+ % obey user set height, also downward compatible
+ \else
+ \doifvaluesomething{\@@framed\c!regels}
+ {\!!heighta\framedparameter\c!regels\lineheight
+ \edef\localheight{\the\!!heighta}%
+ \boxhasheighttrue}%
+ \fi
+ % this should be an option ! ! ! !
\ifdim\!!widtha=\hsize
\parindent\zeropoint
\setlocalhsize
\!!widtha\localhsize
\fi
+ % i.e. disable (colsetbackgroundproblemintechniek)
\advance\!!widtha -2\@@localoffset
\advance\!!heighta -2\@@localoffset
\ifx\localstrut\v!nee
@@ -800,8 +794,8 @@
\let\localendstrut\pseudoendstrut % was: \relax
\let\localstrut \pseudostrut % was: \relax
%\ifboxhasheight\ifdim\!!heighta<\ht\strutbox % saveguard
- % \let\localbegstrut\relax % but not that
- % \let\localstrut \relax % save afterall
+ % \let\localbegstrut\relax % but not that
+ % \let\localstrut \relax % save afterall
%\fi\fi
\fi
\ifboxhasheight
@@ -838,28 +832,28 @@
\let\next\doformatboxNoSize
\fi
\fi
- \edef\framedwidth % a new feature, visible fo ruser
+ \edef\framedwidth % a new feature, visible for user
{\ifdim\!!widtha >\zeropoint\the\!!widtha \else\zeropoint\fi}%
- \edef\framedheight% a new feature, visible fo ruser
+ \edef\framedheight% a new feature, visible for user
{\ifdim\!!heighta>\zeropoint\the\!!heighta\else\zeropoint\fi}%
- % first alternative
+ % first alternative
%\def\dowithframedbox%
% {\let\postprocessframebox\undefined %new
% \aftergroup\stoplocalframed}%
% \afterassignment\dowithframedbox
% \setbox\framebox=\next}
- % second alternative
- %\dowithnextbox
+ % second alternative
+ %\dowithnextbox
% {\setbox\framebox=\box\nextbox
% \let\postprocessframebox\undefined %new
% \stoplocalframed}
% \next}
- % third alternative
+ % third alternative
\afterassignment\dodowithframebox
\setbox\framebox\next}
\def\dowithframebox
- {\let\postprocessframebox\undefined
+ {\let\postprocessframebox\undefined
\stoplocalframed}
\def\dodowithframebox
@@ -885,15 +879,17 @@
\newif\ifreshapeframebox \reshapeframeboxtrue
-\def\stoplocalframed%
+\def\stoplocalframed
{\dontshowcomposition
\ifboxhasformat
\ifx\localwidth\v!passend
\ifreshapeframebox\doreshapeframedbox\fi
\boxhaswidthfalse
+ \else\ifx\localwidth\v!vast
+ \boxhaswidthfalse
\else
\resetshapeframebox
- \fi
+ \fi\fi
\else
\resetshapeframebox
\fi
@@ -905,8 +901,8 @@
\fi
\doifvalue{\@@framed\c!leeg}\v!ja
{\setbox\scratchbox\null
- \wd\scratchbox\wd\framebox
- \ht\scratchbox\ht\framebox
+ \wd\scratchbox\wd\framebox
+ \ht\scratchbox\ht\framebox
\dp\scratchbox\dp\framebox
\setbox\framebox\box\scratchbox}%
\stopregistercolor
@@ -920,22 +916,19 @@
\ifx\postprocessframebox\undefined \else
\postprocessframebox\framebox
\fi
- \edef\overlaylinecolor{\getvalue{\@@framed\c!kaderkleur}}%
+ \edef\overlaylinecolor{\framedparameter\c!kaderkleur}%
\edef\overlaylinewidth{\the\ruledlinewidth}% \@@...
- \ifx\@@localframing\v!overlay
- % rather tight, not even linewidth as offset, can be
- % used with offset=0pt and auto strut
- \else\ifx\@@localframing\v!geen
- % idem
- \else
+ \ifboxhasframe % real or invisible frame
\doframedbox
- \fi\fi
+ \fi
\doifvaluesomething{\@@framed\c!achtergrond}\dobackedbox
\ifx\@@locallocation\v!laag
\doinlineframedbox
\else\ifx\@@locallocation\v!diepte
\doloweredframedbox
- \fi\fi
+ \else\ifx\@@locallocation\v!hangend
+ \dohangingframedbox
+ \fi\fi\fi
\box\framebox
\egroup
\egroup}
@@ -947,7 +940,7 @@
\def\doinframed[#1]% we could omit #1] but readibility ...
{\framed[\c!plaats=\v!laag,#1]}
-\unexpanded\def\inframed%
+\unexpanded\def\inframed
{\dosingleempty\doinframed}
%D When we set \type{\c!leeg} to \type{\v!ja}, we get
@@ -957,12 +950,12 @@
%D Because color marks and specials can interfere with
%D spacing, we provide a way to specify a foregroundcolor.
-\def\docolorframebox%
+\def\docolorframebox
{\doifvaluesomething{\@@framed\c!voorgrondkleur}
- {\doifcolorelse{\getvalue{\@@framed\c!voorgrondkleur}}
- {\setbox\framebox=\hbox
+ {\doifcolorelse{\framedparameter\c!voorgrondkleur}
+ {\setbox\framebox\hbox
{\localcolortrue
- \color[\getvalue{\@@framed\c!voorgrondkleur}]{\box\framebox}}}
+ \color[\framedparameter\c!voorgrondkleur]{\box\framebox}}}
{}}}
%D \macros
@@ -1054,10 +1047,10 @@
\fi
\endgroup}
-\def\mframed%
+\def\mframed
{\dodoubleempty\domframed[\donetrue]}
-\def\inmframed%
+\def\inmframed
{\dodoubleempty\domframed[\donefalse]}
%D So instead of the rather versatile \type {\framed}, we ue
@@ -1126,7 +1119,7 @@
%D text. Each step is handled by separate macros.
\def\dowidenframebox#1%
- {\setbox\framebox=\vbox
+ {\setbox\framebox\vbox
{\kern#1\hbox{\kern#1\box\framebox\kern#1}\kern#1}}
\def\dooffsetframebox{\dowidenframebox\localoffset}
@@ -1199,48 +1192,48 @@
%D additional offset capabilities. The lot of calls to other
%D macros makes this mechanism not that easy to comprehend.
-\def\doframedbox%
- {\setbox\framebox=\vbox
+\def\doframedbox
+ {\setbox\framebox\vbox
{\dooutlinebox\framebox
- \color \getvalue{\@@framed\c!kaderkleur}%
- \offset \getvalue{\@@framed\c!kaderoffset}%
- \corner \getvalue{\@@framed\c!kaderhoek}%
- \radius \getvalue{\@@framed\c!kaderstraal}%
- \depth \getvalue{\@@framed\c!kaderdiepte}%
- \toggle \getvalue{\@@framed\c!kader}%
- \left \getvalue{\@@framed\c!linkerkader}%
- \right \getvalue{\@@framed\c!rechterkader}%
- \top \getvalue{\@@framed\c!bovenkader}%
- \bottom \getvalue{\@@framed\c!onderkader}\\}}
+ \color \framedparameter\c!kaderkleur
+ \offset \framedparameter\c!kaderoffset
+ \corner \framedparameter\c!kaderhoek
+ \radius \framedparameter\c!kaderstraal
+ \depth \framedparameter\c!kaderdiepte
+ \toggle \framedparameter\c!kader
+ \left \framedparameter\c!linkerkader
+ \right \framedparameter\c!rechterkader
+ \top \framedparameter\c!bovenkader
+ \bottom \framedparameter\c!onderkader\\}}
%D Getting the backgrounds right takes less code. Again we
%D have to take care of additional offsets.
-\def\dobackedbox%
- {\doifelsevalue{\@@framed\c!achtergrondoffset}{\v!kader} % new
+\def\dobackedbox
+ {\doifelsevalue{\@@framed\c!achtergrondoffset}\v!kader % new
{\dodobackedbox\c!kaderoffset}
{\dodobackedbox\c!achtergrondoffset}}
\def\dodobackedbox#1%
- {\setbox\framebox=\vbox
+ {\setbox\framebox\vbox
{\dobackgroundbox\framebox
- \background \getvalue{\@@framed\c!achtergrond}%
- \color \getvalue{\@@framed\c!achtergrondkleur}%
- \raster \getvalue{\@@framed\c!achtergrondraster}%
- \offset \getvalue{\@@framed#1}%
- \corner \getvalue{\@@framed\c!achtergrondhoek}%
- \radius \getvalue{\@@framed\c!achtergrondstraal}%
- \depth \getvalue{\@@framed\c!achtergronddiepte}\\}}
+ \background \framedparameter\c!achtergrond
+ \color \framedparameter\c!achtergrondkleur
+ \raster \framedparameter\c!achtergrondraster
+ \offset \framedparameter{#1}%
+ \corner \framedparameter\c!achtergrondhoek
+ \radius \framedparameter\c!achtergrondstraal
+ \depth \framedparameter\c!achtergronddiepte\\}}
%D We handle left, right or middle alignment as well as fixed
%D or free widths and heights. Each combination gets its own
%D macro.
-\def\dopresetformatbox%
+\def\dopresetformatbox
{\forgetall
\oninterlineskip}
-\def\doformatboxSomeFormat%
+\def\doformatboxSomeFormat
{\vbox to \!!heighta
\bgroup
\dopresetformatbox
@@ -1255,7 +1248,7 @@
\aftergroup\egroup
\let\next=}
-\def\doformatboxNoFormat%
+\def\doformatboxNoFormat
{\vbox to \!!heighta
\bgroup
\dopresetformatbox
@@ -1270,7 +1263,7 @@
\aftergroup\egroup
\let\next=}
-\def\doformatboxHeight%
+\def\doformatboxHeight
{\vbox to \!!heighta
\bgroup
\dopresetformatbox
@@ -1283,7 +1276,7 @@
\localbegstrut
\let\next=}
-% \def\doformatboxWidth%
+% \def\doformatboxWidth
% {\vbox
% \bgroup
% \dopresetformatbox
@@ -1295,7 +1288,7 @@
% \aftergroup\egroup
% \let\next=}
-\def\doformatboxWidth%
+\def\doformatboxWidth
{\vbox
\bgroup
\dopresetformatbox
@@ -1309,7 +1302,7 @@
\aftergroup\egroup
\let\next=}
-\def\doformatboxVSize%
+\def\doformatboxVSize
{\vbox to \!!heighta
\bgroup
\forgetall
@@ -1324,7 +1317,7 @@
\localstrut
\let\next=}
-\def\doformatboxHSize%
+\def\doformatboxHSize
{\hbox to \!!widtha
\bgroup
\forgetall
@@ -1335,7 +1328,7 @@
\aftergroup\egroup
\let\next=}
-\def\doformatboxNoSize%
+\def\doformatboxNoSize
{\hbox
\bgroup
\localstrut
@@ -1348,7 +1341,7 @@
%D used \type {\showstruts}.}
%D
%D \startuitstellen
-%D \bgroup
+%D \bgroup
%D \showstruts
%D \mindermeldingen
%D \startregelcorrectie
@@ -1402,9 +1395,9 @@
\newcount\framednoflines
\newdimen\framedlastlength
-\def\resetshapeframebox%
- {\framednoflines=0
- \framedlastlength=\zeropoint}
+\def\resetshapeframebox
+ {\framednoflines\zerocount
+ \framedlastlength\zeropoint}
% \def\doreshapeframedbox%
% {\beginofshapebox
@@ -1444,41 +1437,41 @@
% better depth preserving, else problems with framed display
% math and auto width
-\def\doreshapeframedbox%
+\def\doreshapeframedbox
{\beginofshapebox
\unvcopy\framebox
\endofshapebox
- \global\@@globalwidth=\zeropoint
+ \global\@@globalwidth\zeropoint
\resetshapeframebox
\reshapebox
- {\setbox0=\hbox
+ {\setbox0\hbox
{\strut\ifhbox\shapebox\unhbox\else\box\fi\shapebox}%
- \global\advance\framednoflines by 1
+ \global\advance\framednoflines \plusone
\ifdim\framedlastlength>\zeropoint\else
- \global\framedlastlength=\wd0
+ \global\framedlastlength\wd0
\fi
\ifdim\wd0>\@@globalwidth
- \global\@@globalwidth=\wd0
+ \global\@@globalwidth\wd0
\fi}%
- \dosetraggedcommand{\localformat}%
+ \dosetraggedcommand\localformat
\raggedcommand
\ifboxhasheight
- \setbox\framebox=\vbox to \localheight
+ \setbox\framebox\vbox to \localheight
{\hsize\@@globalwidth
\reshapebox{\hbox to \hsize{\ifhbox\shapebox\unhbox\else\box\fi\shapebox}}%
\dobeforeframedbox
\innerflushshapebox
\doafterframedbox}%
\else
- \scratchdimen=\dp\framebox
- \setbox\framebox=\vbox to \ht\framebox
+ \scratchdimen\dp\framebox
+ \setbox\framebox\vbox to \ht\framebox
{\hsize\@@globalwidth
\reshapebox{\hbox to \hsize{\ifhbox\shapebox\unhbox\else\box\fi\shapebox}}%
\innerflushshapebox}%
- \dp\framebox=\scratchdimen % \dp\strutbox otherwise problem with math
+ \dp\framebox\scratchdimen % \dp\strutbox otherwise problem with math
\fi
- \ifdim\framedlastlength=\zeropoint\global\framednoflines=\wd\framebox\fi
- \ifcase\framednoflines\global\framednoflines=1\fi}
+ \ifdim\framedlastlength=\zeropoint\global\framednoflines\wd\framebox\fi
+ \ifcase\framednoflines\global\framednoflines\plusone\fi}
%D The two variables \type {\framednoflines} and \type
%D {\framedlastlength} can be used in a second pass to
@@ -1532,9 +1525,9 @@
%D \egroup
%D \stopbuffer
%D
-%D \haalbuffer \pagina
+%D \haalbuffer \pagina
%D
-%D {\setupframed[diepte=4pt]\haalbuffer} \pagina
+%D {\setupframed[diepte=4pt]\haalbuffer} \pagina
%D
%D \protect
%D \egroup
@@ -1543,24 +1536,11 @@
%D When typesetting the framed box inline, we have to keep the
%D baseline intact outside as well as inside the framed box.
-%\def\doinlineframedbox%
-% {\getboxheight\dimen2\of\box\framebox
-% \advance\dimen2 by -\ht\strutbox
-% \dimen0=.5\dimen2
-% \ifboxhasoffset
-% \advance\dimen0 by \getvalue{\@@framed\c!offset}%
-% \fi
-% \advance\dimen0 by 2\ruledlinewidth
-% \setbox\framebox=\hbox{\lower\dimen0\box\framebox}%
-% \ht\framebox\ht\strutbox
-% \dp\framebox\dp\strutbox
-% \box\framebox}
-
-\def\doinlineframedbox%
+\def\doinlineframedbox
{\scratchdimen\dp\strutbox
\advance\scratchdimen \ruledlinewidth
\ifboxhasoffset
- \advance\scratchdimen \getvalue{\@@framed\c!offset}%
+ \advance\scratchdimen \framedparameter\c!offset
\fi
\setbox\framebox\hbox{\lower\scratchdimen\box\framebox}%
\ht\framebox\ht\strutbox
@@ -1570,13 +1550,27 @@
%D We can also lower the box over the natural depth of the
%D line.
-\def\doloweredframedbox%
+\def\doloweredframedbox
{\getboxheight\scratchdimen\of\box\framebox
\advance\scratchdimen -\dp\strutbox
\ht\framebox\scratchdimen
\dp\framebox\dp\strutbox
\box\framebox}
+%D Hanging the content is mainly meant for cases like the
+%D following:
+%D
+%D \starttypen
+%D \framed[strut=no]
+%D {\framed[height=2cm,location=hanging]{test}%
+%D \framed[height=1cm,location=hanging]{test}}
+%D \stoptypen
+
+\def\dohangingframedbox % best with strut=no
+ {\getboxheight\scratchdimen\of\box\framebox
+ \ht\framebox\zeropoint
+ \dp\framebox\scratchdimen}
+
%D We can draw lines from left to right and top to bottom by
%D using the normal \type{\hairline} command. Both directions
%D need a different treatment.
@@ -1597,12 +1591,12 @@
%D possible to the circumstances and act as natural as
%D possible.
-\def\vboxedhairline%
+\def\vboxedhairline
{\bgroup
\dimen2=\ifboxhasoffset \localoffset \else \zeropoint \fi
\dimen4=\dimen2
\advance\dimen4 \ruledlinewidth
- \setbox0=\vbox
+ \setbox0\vbox
{\advance\hsize 2\dimen4
\vskip\dimen2
\hrule
@@ -1616,32 +1610,32 @@
\localbegstrut
\egroup}
-\def\hboxedhairline%
+\def\hboxedhairline
{\bgroup
\dimen2=\ifboxhasoffset \localoffset \else \zeropoint \fi
\ifboxhasheight
- \dimen4=\localheight \divide\dimen4 by 2
+ \dimen4=\localheight \divide\dimen4 2
\dimen6=\dimen4
- \advance\dimen4 \dp\strutbox
- \advance\dimen6 -\dp\strutbox
+ \advance\dimen4 \dp\strutbox
+ \advance\dimen6 -\dp\strutbox
\advance\dimen4 -2\ruledlinewidth
- \advance\dimen6 2\ruledlinewidth
+ \advance\dimen6 2\ruledlinewidth
\else
- \dimen4=\ht\strutbox
+ \dimen4\ht\strutbox
\advance\dimen4 \dimen2
- \dimen6=\dp\strutbox
+ \dimen6\dp\strutbox
\advance\dimen6 \dimen2
\fi
\unskip
- \setbox0=\hbox
+ \setbox0\hbox
{\hskip\dimen2
\vrule
\!!height\dimen4
\!!depth\dimen6
\!!width\ruledlinewidth
\hskip\dimen2}%
- \ht0=\ht\strutbox
- \dp0=\dp\strutbox
+ \ht0\ht\strutbox
+ \dp0\dp\strutbox
\box0
\ignorespaces
\egroup}
@@ -1650,10 +1644,10 @@
%D sort of newline signal. In horizontal boxes it expands to a
%D space.
-\def\vboxednewline%
+\def\vboxednewline
{\endgraf\ignorespaces}
-\def\hboxednewline%
+\def\hboxednewline
{\unskip\normalspace\ignorespaces}
%D We can set each rule on or off. The default setting is
@@ -1708,7 +1702,7 @@
%D
%D \showsetup{\y!setupblackrules}
-\def\setupblackrules%
+\def\setupblackrules
{\dodoubleargument\getparameters[\??bj]}
%D \macros
@@ -1736,7 +1730,7 @@
\localstopcolor
\egroup}
-\unexpanded\def\blackrule%
+\unexpanded\def\blackrule
{\dosingleempty\doblackrule}
%D \macros
@@ -1775,10 +1769,10 @@
\!!widthb\@@bjafstand
\doif\@@bjvariant\c!b
{\scratchcounter\@@bjn
- \ifnum\scratchcounter=1
+ \ifnum\scratchcounter=\plusone
\!!widthb\zeropoint
\else
- \advance\scratchcounter -1
+ \advance\scratchcounter \minusone
\advance\!!widtha -\scratchcounter\!!widthb
\divide \!!widtha \@@bjn
\fi}%
@@ -1802,13 +1796,13 @@
%D rather straightforward because we can use the commands that
%D put text in the margin.
-\def\dodrawmarginrule%
- {\setbox0=\hbox
+\def\dodrawmarginrule
+ {\setbox0\hbox
{\vrule\!!depth\strutdepth\!!height\strutheight\!!width\@@kadikte}%
- \smashbox0 % no \vsmash !!!
- \box0}
+ \smashbox0 % no \vsmash !!!
+ \box0}
-\def\drawmarginrule%
+\def\drawmarginrule
{\strut\inlinker{\dodrawmarginrule}}
%D \macros
@@ -1821,8 +1815,8 @@
\definecomplexorsimple\marginrule
-\def\simplemarginrule%
- {\let\processword=\drawmarginrule
+\def\simplemarginrule
+ {\let\processword\drawmarginrule
\processwords}
\def\complexmarginrule[#1]%
@@ -1859,22 +1853,22 @@
\def\simplestartmarginrule%
{\bgroup
- \let\drawmarginrule=\relax
- \let\stopmarginrule=\dostopmarginrule
+ \let\drawmarginrule\relax
+ \let\stopmarginrule\dostopmarginrule
\beginofshapebox}
\def\complexstartmarginrule[#1]%
{\bgroup
- \let\drawmarginrule=\relax
+ \let\drawmarginrule\relax
\ifnum#1<\@@kaniveau\relax
- \let\stopmarginrule=\egroup
+ \let\stopmarginrule\egroup
\else
\def\@@kadefaultwidth{#1}%
- \let\stopmarginrule=\dostopmarginrule
+ \let\stopmarginrule\dostopmarginrule
\expandafter\beginofshapebox
\fi}
-\def\dostopmarginrule%
+\def\dostopmarginrule
{\endofshapebox
\reshapebox
{\hbox{\inleftmargin{\dodrawmarginrule}\box\shapebox}}%
@@ -1930,13 +1924,13 @@
{\bgroup
\dimen0=#1\ht\strutbox
\dimen2=#1\dp\strutbox
- \setbox0=\hbox
+ \setbox0\hbox
{\vrule
- \!!width\linewidth
+ \!!width \linewidth
\!!height\dimen0
- \!!depth\dimen2}%
- \dp0=\dp\strutbox
- \ht0=\ht\strutbox
+ \!!depth \dimen2}%
+ \dp0\dp\strutbox
+ \ht0\ht\strutbox
\box0
\egroup}
@@ -1947,14 +1941,8 @@
\!!height\linewidth
\!!depth\zeropoint}}
-\def\simplevl%
- {\complexvl[1]}
-
-\def\simplehl%
- {\complexhl[1]}
-
-\definecomplexorsimple\vl
-\definecomplexorsimple\hl
+\definecomplexorsimple\vl \def\simplevl{\complexvl[1]}
+\definecomplexorsimple\hl \def\simplehl{\complexhl[1]}
%D \macros
%D {hairline, thinrule, thinrules, setupthinrules}
@@ -2037,43 +2025,43 @@
% \egroup
% \strut}
-\def\thinrule%
+\def\thinrule
{\strut
\bgroup
- \chardef\ruletype=1
+ \chardef\ruletype\plusone
\processaction
[\@@dlvariant]
- [ \v!a=>\chardef\ruletype=0,% no line
- %\v!b=>\chardef\ruletype=1,% height/depth
- \v!c=>\chardef\ruletype=2,% topheight/botdepth
- % 11=>\chardef\ruletype=1,% fallback for backgrounds
- 0=>\chardef\ruletype=0,% compatible with backgrounds
- % 1=>\chardef\ruletype=1,% compatible with backgrounds
- 2=>\chardef\ruletype=2]% compatible with backgrounds
- \doifsomething{\@@dllijndikte}
- {\linewidth=\@@dllijndikte}%
+ [ \v!a=>\chardef\ruletype0,% no line
+ %\v!b=>\chardef\ruletype1,% height/depth
+ \v!c=>\chardef\ruletype2,% topheight/botdepth
+ % 11=>\chardef\ruletype1,% fallback for backgrounds
+ 0=>\chardef\ruletype0,% compatible with backgrounds
+ % 1=>\chardef\ruletype1,% compatible with backgrounds
+ 2=>\chardef\ruletype2]% compatible with backgrounds
+ \doifsomething\@@dllijndikte
+ {\linewidth\@@dllijndikte}%
\ifdim\linewidth=\zeropoint
- \chardef\ruletype=0
+ \chardef\ruletype\zerocount
\else
- \doifnot{\@@dlkader}{\v!aan}{\chardef\ruletype=0\relax}%
+ \doifnot\@@dlkader\v!aan{\chardef\ruletype=0\relax}%
\fi
- \ifnum\ruletype=1
- \doif{\@@dlhoogte}{\v!max}{\def\@@dlhoogte{1}}%
- \doif{\@@dldiepte}{\v!max}{\def\@@dldiepte{1}}%
+ \ifnum\ruletype=\plusone
+ \doif\@@dlhoogte\v!max{\let\@@dlhoogte\!!plusone}%
+ \doif\@@dldiepte\v!max{\let\@@dldiepte\!!plusone}%
\else
- \def\@@dlhoogte{1}%
- \def\@@dldiepte{1}%
+ \let\@@dlhoogte\!!plusone
+ \let\@@dldiepte\!!plusone
\fi
\freezedimensionwithunit\@@dlhoogte{\ht\strutbox}%
\freezedimensionwithunit\@@dldiepte{\dp\strutbox}%
\divide\linewidth 2
- \doifelse{\@@dlachtergrond}{\v!kleur}
+ \doifelse\@@dlachtergrond\v!kleur
{\startcolor[\@@dlachtergrondkleur]%
\dimen0=\@@dlhoogte
\dimen2=\@@dldiepte
\ifnum\ruletype=2 % prevent overshoot due to rounding
- \advance\dimen0 by -.5\linewidth
- \advance\dimen2 by -.5\linewidth
+ \advance\dimen0 -.5\linewidth
+ \advance\dimen2 -.5\linewidth
\fi
\leaders\hrule\!!height\dimen0\!!depth\dimen2\hfill
\stopcolor
@@ -2100,7 +2088,7 @@
\strut
\carryoverpar\egroup}
-\def\hairline%
+\def\hairline
{\endgraf
\thinrule
\endgraf}
@@ -2108,7 +2096,7 @@
\def\dosetupthinrules[#1]%
{\getparameters[\??dl][#1]}
-\def\setupthinrules%
+\def\setupthinrules
{\dosingleargument\dosetupthinrules}
% \def\dothinrules[#1]%
@@ -2146,18 +2134,23 @@
{\bgroup
\dosetupthinrules[#1]%
\@@dlvoor
- \assignvalue{\@@dlinterlinie}{\@@dlinterlinie}{1.0}{1.5}{2.0}%
+ \assignvalue\@@dlinterlinie\@@dlinterlinie{1.0}{1.5}{2.0}%
\spacing\@@dlinterlinie
- \dorecurse
- {\@@dln}
+ \dorecurse\@@dln
{\ifnum\recurselevel=\@@dln \dothinrulesnobreak \else
\ifnum\recurselevel=2 \dothinrulesnobreak \fi\fi
\thinrule
- %\ifnum\recurselevel<\@@dln \endgraf \fi}%
- \ifnum\recurselevel<\@@dln \endgraf \geenwitruimte \@@dltussen \fi}%
-% \@@dlna
-% \egroup}
- \doifelsenothing{\@@dlna}
+ \ifnum\recurselevel<\@@dln\relax
+ % test needed, else messed up whitespace
+ \ifx\@@dltussen\empty
+ \softbreak
+ \else
+ \endgraf
+ \geenwitruimte
+ \@@dltussen
+ \fi
+ \fi}%
+ \doifelsenothing\@@dlna
{\carryoverpar\egroup}
{\@@dlna\egroup}}
@@ -2182,47 +2175,47 @@
%D \stopbuffer
%D
%D \typebuffer {\haalbuffer}
-%D
+%D
%D There are a couple of alternative ways to visualize rules
%D using backgrounds. At first sight these may look strange,
%D but they make sense in educational settings. The
%D alternatives are more or less compatible with the more
-%D advanced \METAPOST\ based implementation.
-%D
+%D advanced \METAPOST\ based implementation.
+%D
%D \startbuffer[a]
%D \steldunnelijnenin
%D [n=2,
%D achtergrondkleur=grijs,
%D lijndikte=1pt,
-%D kleur=donkerblauw,
+%D kleur=donkerblauw,
%D na=\blanko,
-%D voor=\blanko]
+%D voor=\blanko]
%D \stopbuffer
-%D
+%D
%D \typebuffer[a]
-%D
+%D
%D \startbuffer[b]
-%D \dunnelijnen[variant=a]
-%D \dunnelijnen[variant=b]
-%D \dunnelijnen[variant=c]
+%D \dunnelijnen[variant=a]
+%D \dunnelijnen[variant=b]
+%D \dunnelijnen[variant=c]
%D \stopbuffer
-%D
+%D
%D \typebuffer[b] \haalbuffer[a,b]
-%D
+%D
%D \startbuffer[b]
%D \dunnelijnen[variant=a,achtergrond=kleur]
%D \dunnelijnen[variant=b,achtergrond=kleur]
%D \dunnelijnen[variant=c,achtergrond=kleur]
%D \stopbuffer
-%D
+%D
%D \typebuffer[b] \haalbuffer[a,b]
-%D
+%D
%D \startbuffer[b]
-%D \dunnelijnen[variant=a,hoogte=.8,diepte=.8,achtergrond=kleur]
-%D \dunnelijnen[variant=b,hoogte=.8,diepte=.8,achtergrond=kleur]
-%D \dunnelijnen[variant=c,hoogte=.8,diepte=.8,achtergrond=kleur]
+%D \dunnelijnen[variant=a,hoogte=.8,diepte=.8,achtergrond=kleur]
+%D \dunnelijnen[variant=b,hoogte=.8,diepte=.8,achtergrond=kleur]
+%D \dunnelijnen[variant=c,hoogte=.8,diepte=.8,achtergrond=kleur]
%D \stopbuffer
-%D
+%D
%D \typebuffer[b] \haalbuffer[a,b]
%D \macros
@@ -2233,7 +2226,7 @@
\newif\ifoptimizethinrules \optimizethinrulestrue
-\def\dothinrulesnobreak%
+\def\dothinrulesnobreak
{\ifoptimizethinrules\penalty500\fi}
%D \macros
@@ -2379,106 +2372,30 @@
\getparameters[\??kd\v!framedtext][#1]%
\fi}
-\def\setupframedtexts%
+\def\setupframedtexts
{\dodoubleempty\dosetupframedtexts}
-\def\dostartframedtext%
+\def\dostartframedtext
{\bgroup\dotripleempty\dodostartframedtext}
\def\dodostartframedtext[#1][#2][#3]%
-% {\doifinstringelse{=}{#2}
{\doifassignmentelse{#2}
{\dododostartframedtext[#1][][#2]}
{\dododostartframedtext[#1][#2][#3]}}
-% \def\dododostartframedtext[#1][#2][#3]%
-% {\processaction
-% [#2]
-% [ \v!links=>\letvalue{\??kd#1\c!links }=\relax
-% \letvalue{\??kd#1\c!rechts}=\hfill,
-% \v!rechts=>\letvalue{\??kd#1\c!links }=\hfill
-% \letvalue{\??kd#1\c!rechts}=\relax,
-% \v!midden=>\letvalue{\??kd#1\c!links }=\hfill
-% \letvalue{\??kd#1\c!rechts}=\hfill,
-% \v!geen=>\letvalue{\??kd#1\c!links }=\relax % new
-% \letvalue{\??kd#1\c!rechts}=\relax]% new
-% \forgetparindent
-% \setbox\framebox=\vbox
-% \bgroup
-% % \insidefloattrue % ?
-% \expanded{\switchtobodyfont[\getvalue{\??kd#1\c!korps}]}%
-% \localframed[\??kd#1][\c!strut=\v!nee,#3]%
-% \bgroup
-% \blanko[\v!blokkeer]%
-% \let\\=\endgraf
-% \getvalue{\??kd#1\c!binnen}%
-% \dostartattributes{\??kd#1}\c!letter\c!kleur{}%
-% \def\dostopframedtext{\dodostopframedtext{#1}{#2}}}
-
-\ifx\checkframedtext\undefined \let\checkframedtext\relax \fi
-
-% \def\dododostartframedtext[#1][#2][#3]%
-% {\processaction
-% [#2]
-% [ \v!links=>\letvalue{\??kd#1\c!links }=\relax
-% \letvalue{\??kd#1\c!rechts}=\hfill,
-% \v!rechts=>\letvalue{\??kd#1\c!links }=\hfill
-% \letvalue{\??kd#1\c!rechts}=\relax,
-% \v!midden=>\letvalue{\??kd#1\c!links }=\hfill
-% \letvalue{\??kd#1\c!rechts}=\hfill,
-% \v!geen=>\letvalue{\??kd#1\c!links }=\relax % new
-% \letvalue{\??kd#1\c!rechts}=\relax]% new
-% % % removed 06/2001
-% % \forgetparindent
-% % added 06/2001 [see demo-bbv]
-% \localhsize\hsize \checkframedtext
-% % so far
-% \setbox\framebox=\vbox
-% \bgroup
-% \hsize\localhsize
-% % \insidefloattrue % ?
-% \expanded{\switchtobodyfont[\getvalue{\??kd#1\c!korps}]}%
-% \localframed[\??kd#1][\c!strut=\v!nee,#3]%
-% \bgroup
-% \blanko[\v!blokkeer]%
-% \let\\=\endgraf
-% % \getvalue{\??kd#1\c!binnen}%
-% \dostartattributes{\??kd#1}\c!letter\c!kleur{}%
-% \def\dostopframedtext{\dodostopframedtext{#1}{#2}}}
-
-% \def\dododostartframedtext[#1][#2][#3]%
-% {\processaction
-% [#2]
-% [ \v!links=>\letvalue{\??kd#1\c!links }\relax
-% \letvalue{\??kd#1\c!rechts}\hfill,
-% \v!rechts=>\letvalue{\??kd#1\c!links }\hfill
-% \letvalue{\??kd#1\c!rechts}\relax,
-% \v!midden=>\letvalue{\??kd#1\c!links }\hfill
-% \letvalue{\??kd#1\c!rechts}\hfill,
-% \v!geen=>\letvalue{\??kd#1\c!links }\relax % new
-% \letvalue{\??kd#1\c!rechts}\relax]% new
-% % removed 06/2001
-% % \forgetparindent
-% % added 06/2001 [see demo-bbv]
-% \localhsize\hsize \checkframedtext
-% % so far
-% \setbox\framebox=\vbox
-% \startboxedcontent
-% \hsize\localhsize
-% % \insidefloattrue % ? better
-% \expanded{\switchtobodyfont[\getvalue{\??kd#1\c!korps}]}%
-% \startcolor[\getvalue{\??kd#1\c!kleur}]%
-% \localframed[\??kd#1][\c!strut=\v!nee,#3]%
-% \bgroup
-% \let\\=\endgraf
-% \getvalue{\??kd#1\c!binnen}%
-% \doifvalue{\??kd#1\c!dieptecorrectie}{\v!aan} % new, inside box
-% {\bgroup
-% \vbox{\strut}
-% \vskip-\lineheight}%
-% \blanko[\v!blokkeer]% plaatst signal
-% \doconvertfont{\getvalue{\??kd#1\c!letter}}{}%
-% \def\dostopframedtext{\dodostopframedtext{#1}{#2}}}
+\def\checkframedtext
+ {\ifinsidefloat
+ \localhsize\hsize
+ \else\ifdim\sidefloatvsize>\zeropoint % will be proper handle
+ % \strut % rather clean way to invoke the sidefloat OTR
+ % \setbox0=\lastbox % and get the widths set, so from now on we
+ % \setlocalhsize % can have framed texts alongside sidefloats
+ \checksidefloat
+ \setlocalhsize
+ \advance\localhsize-\hangindent
+ \else
+ \localhsize\hsize
+ \fi\fi}
\def\dododostartframedtext[#1][#2][#3]%
{\doifsomething{#2}{\setvalue{\??kd#1\c!plaats}{#2}}%
@@ -2498,7 +2415,7 @@
% added 06/2001 [see demo-bbv]
\localhsize\hsize \checkframedtext
% so far
- \setbox\framebox=\vbox
+ \setbox\framebox\vbox
\startboxedcontent
\hsize\localhsize
% \insidefloattrue % ? better
@@ -2508,52 +2425,36 @@
\bgroup
\let\\=\endgraf
\getvalue{\??kd#1\c!binnen}%
- \doifvalue{\??kd#1\c!dieptecorrectie}{\v!aan} % new, inside box
+ \doifvalue{\??kd#1\c!dieptecorrectie}\v!aan % new, inside box
{\bgroup
- \vbox{\strut}
+ \verticalstrut
\vskip-\lineheight}%
\blanko[\v!blokkeer]% plaatst signal
- \doconvertfont{\getvalue{\??kd#1\c!letter}}{}%
+ \doconvertfont{\getvalue{\??kd#1\c!letter}}\empty
\def\dostopframedtext{\dodostopframedtext{#1}{#2}}}
%D The \type {none} option is handy for nested usage, as
%D in the presentation styles, where we don't want
%D interference.
-% \def\dodostopframedtext#1#2%
-% {\endgraf
-% \removelastskip
-% \dostopattributes
-% \doifvalue{\??kd#1\c!dieptecorrectie}{\v!aan} % new, inside box
-% {\baselinecorrection}%
-% \egroup
-% \egroup
-% \doif{#2}{\v!geen}{\insidefloattrue}% new
-% \ifinsidefloat
-% \box\framebox
-% \else
-% \doplaats[\??kd#1][]{\box\framebox}%
-% \fi
-% \egroup}
-
\def\dodostopframedtext#1#2% % no \baselinecorrection, see faq docs
{\endgraf
\removelastskip
- \doifvalue{\??kd#1\c!dieptecorrectie}{\v!aan} % local and global
+ \doifvalue{\??kd#1\c!dieptecorrectie}\v!aan % local and global
{\forgetall
\vskip-\lineheight
- \vbox{\strut}
+ \verticalstrut
\egroup
\forgetall
\vskip-\lineheight
-% will be an option
-\setbaselinecorrections
-\donegbotbaselinecorrection
- \vbox{\strut}}
+ % will be an option
+ \setbaselinecorrections
+ \donegbotbaselinecorrection
+ \verticalstrut}
\stopboxedcontent
\stopcolor
\egroup
- \doif{#2}{\v!geen}{\insidefloattrue}% new
+ \doif{#2}\v!geen\insidefloattrue % new
\ifinsidefloat
\box\framebox
\else
@@ -2564,7 +2465,7 @@
%D The simple brace (or group) delimited case is typeset
%D slightly different and is not aligned.
-\def\doframedtext%
+\def\doframedtext
{\bgroup\dodoubleempty\dodoframedtext}
\def\dodoframedtext[#1][#2]%
@@ -2573,13 +2474,13 @@
\bgroup
\blanko[\v!blokkeer]%
\let\\=\endgraf
- \getvalue{\??kd#1\c!binnen}%
- \dostartattributes{\??kd#1}\c!letter\c!kleur{}%
+ \getvalue{\??kd#1\c!binnen}% % kleur naar outer level
+ \dostartattributes{\??kd#1}\c!letter\c!kleur\empty
\bgroup
\aftergroup\docloseframedtext
\let\next=}
-\def\docloseframedtext%
+\def\docloseframedtext
{\removelastskip
\dostopattributes
\egroup
@@ -2592,7 +2493,7 @@
%D
%D \showsetup{\y!defineframed}
-\def\defineframed%
+\def\defineframed
{\dodoubleempty\dodefineframed}
\def\dodefineframed[#1][#2]%
@@ -2651,36 +2552,36 @@
%D The implementation looks a bit complicated due to the
%D optional arguments.
-\def\setuptextrules%
+\def\setuptextrules
{\dodoubleargument\getparameters[\??tl]}
\def\complextextrule[#1]%
{\processaction
[#1]
- [ \v!boven=>\let\next=\dotoptextrule,
- \v!onder=>\let\next=\dobottomtextrule,
- \s!default=>\let\next=\dobottomtextrule,
- \s!unknown=>\let\next=\dobottomtextrule]%
+ [ \v!boven=>\let\next\dotoptextrule,
+ \v!onder=>\let\next\dobottomtextrule,
+ \s!default=>\let\next\dobottomtextrule,
+ \s!unknown=>\let\next\dobottomtextrule]%
\dosinglegroupempty\next}
\definecomplexorsimple\textrule
-\def\simpletextrule%
+\def\simpletextrule
{\dosinglegroupempty\dounknowntextrule}
\def\docomplextextrule#1%
{\bgroup
- \advance\hsize by -\rightskip
- \advance\hsize by -\leftskip
- \setbox\scratchbox=\hbox to \hsize
+ \advance\hsize -\rightskip
+ \advance\hsize -\leftskip
+ \setbox\scratchbox\hbox to \hsize
{\dimen4=.5ex
\dimen6=-.5ex
- \advance\dimen4 by .5\linewidth
- \advance\dimen6 by .5\linewidth
+ \advance\dimen4 .5\linewidth
+ \advance\dimen6 .5\linewidth
\dimen8=\@@tlafstand
- \doifnothing{#1}{\firstargumentfalse}%
+ \doifnothing{#1}\firstargumentfalse
\iffirstargument
- \doifelse{\@@tlplaats}{\v!inmarge}%
+ \doifelse\@@tlplaats\v!inmarge
{\llap{\doattributes\??tl\c!letter\c!kleur{#1}\hskip\linkermargeafstand}}
{\color[\@@tllijnkleur]
{\vrule\!!height\dimen4\!!depth\dimen6\!!width\@@tlbreedte}%
@@ -2689,16 +2590,16 @@
\fi
\color[\@@tllijnkleur]
{\leaders\hrule\!!height\dimen4\!!depth\dimen6\hfill}}%
- \ht\scratchbox=\ht\strutbox
- \dp\scratchbox=\dp\strutbox
+ \ht\scratchbox\ht\strutbox
+ \dp\scratchbox\dp\strutbox
\noindent\box\scratchbox
-%\nobreak\vbox{\strut}\kern-\lineheight
+%\nobreak\verticalstrut\kern-\lineheight
% evt \witruimte
\egroup}
\def\dotoptextrule#1%
- {\pagina[\v!voorkeur] % interferes
- %\witruimte % no
+ {\pagina[\v!voorkeur] % interferes
+ %\witruimte % no
\@@tlvoor
\docomplextextrule{#1}%
\geenwitruimte
@@ -2709,19 +2610,19 @@
{\ifhmode
\endgraf
\fi
- \dimen0=\dp\strutbox
+ \dimen0\dp\strutbox
\ifdim\prevdepth<\dp\strutbox
\ifdim\prevdepth>\zeropoint
- \advance\dimen0 by -\prevdepth
+ \advance\dimen0 -\prevdepth
\fi
\fi
- \advance\dimen0 by .5ex
+ \advance\dimen0 .5ex
\vskip\dimen0
\@@tltussen
\doifelsenothing{#2}
{\bgroup
- \advance\hsize by -\rightskip
- \advance\hsize by -\leftskip
+ \advance\hsize -\rightskip
+ \advance\hsize -\leftskip
\nointerlineskip
\moveleft-\leftskip\vbox
{\color[\@@tllijnkleur]
@@ -2732,15 +2633,15 @@
#1%
\pagina[\v!voorkeur]}
-\def\dobottomtextrule%
+\def\dobottomtextrule
{\dodobottomtextrule\@@tlna}
-\def\domiddletextrule%
+\def\domiddletextrule
{\dodobottomtextrule\@@tltussen}
-\def\dounknowntextrule%
+\def\dounknowntextrule
{\iffirstargument
- \let\next=\dotoptextrule
+ \let\next\dotoptextrule
\else
\def\next{\dobottomtextrule{}}%
\fi
@@ -2753,9 +2654,9 @@
\def\dounknowntextrule{\domiddletextrule}
\dotoptextrule{#1}
\bgroup
- \doifsomething{\@@tlkorps}{\switchtobodyfont[\@@tlkorps]}}
+ \doifsomething\@@tlkorps{\switchtobodyfont[\@@tlkorps]}}
-\def\stoptextrule%
+\def\stoptextrule
{\par
\egroup
\dobottomtextrule{}%
@@ -2784,7 +2685,7 @@
%D \showsetup{\y!fillinrules}
%D \showsetup{\y!setupfillinrules}
-\def\setupfillinrules%
+\def\setupfillinrules
{\dodoubleargument\getparameters[\??il]}
\definecomplexorsimpleempty\fillinrules
@@ -2801,10 +2702,10 @@
\begingroup
\setupfillinrules[#1]%
\noindent
- \doifelse{\@@ilbreedte}{\v!passend}
- {\let\@@ilafstand=\!!zeropoint
+ \doifelse\@@ilbreedte\v!passend
+ {\let\@@ilafstand\!!zeropoint
\hbox}
- {\doifelse{\@@ilbreedte}{\v!ruim}
+ {\doifelse\@@ilbreedte\v!ruim
{\hbox}
{\hbox to \@@ilbreedte}}
\bgroup
@@ -2866,7 +2767,7 @@
%D \showsetup{\y!fillinline}
%D \showsetup{\y!setupfillinlines}
-\def\setupfillinlines%
+\def\setupfillinlines
{\dodoubleargument\getparameters[\??iv]}
\definecomplexorsimpleempty\fillinline
@@ -2876,19 +2777,19 @@
\@@ivvoor
\begingroup
\setupfillinlines[#1]%
- \advance\rightskip by \@@ivmarge
+ \advance\rightskip \@@ivmarge
\parfillskip\zeropoint
- \def\par % very dangerous
- {\let\par\endgraf % -)
+ \def\par % very dangerous
+ {\let\par\endgraf % -)
\unskip\hfill
\dimen0=\@@ivbreedte
- \advance\dimen0 by -\@@ivafstand
+ \advance\dimen0 -\@@ivafstand
\ifdim\dimen0>\@@ivmarge\else\expandafter\rlap\fi
{\kern\@@ivafstand
\vrule
- \!!width\dimen0
+ \!!width \dimen0
\!!height.5\linewidth
- \!!depth.5\linewidth}%
+ \!!depth .5\linewidth}%
\endgraf % !
\endgroup
\endgraf % !
@@ -2939,15 +2840,15 @@
\def\dosetupbackground[#1]%
{\getparameters[\??ag][#1]%
- \doifelse{\@@agstatus}{\v!start}
- {\let\startbackground=\dostartbackground
- \let\stopbackground =\dostopbackground
- \let\background =\dobackground}
- {\let\startbackground=\relax
- \let\stopbackground =\relax
- \let\background =\relax}}
-
-\def\setupbackground%
+ \doifelse\@@agstatus\v!start
+ {\let\startbackground\dostartbackground
+ \let\stopbackground \dostopbackground
+ \let\background \dobackground}
+ {\let\startbackground\relax
+ \let\stopbackground \relax
+ \let\background \relax}}
+
+\def\setupbackground
{\dosingleargument\dosetupbackground}
%D Actually typesetting the background is implemented rather
@@ -2965,14 +2866,14 @@
%D construction gives the first real line a decent height by
%D adding a dummy line.
-\def\dostartbackground%
+\def\dostartbackground
{\endgraf
\bgroup
- \setbox0=\vbox\bgroup
- \vbox to \lineheight{}\vskip\zeropoint
- \blanko[\v!blokkeer]
- \advance\hsize by -\@@aglinkeroffset
- \advance\hsize by -\@@agrechteroffset}
+ \setbox0\vbox\bgroup
+ \vbox to \lineheight{}\vskip\zeropoint
+ \blanko[\v!blokkeer]
+ \advance\hsize -\@@aglinkeroffset
+ \advance\hsize -\@@agrechteroffset}
%D This dummy line is removed by \type{\setbox2=\vsplit0 to
%D \lineheight}. That way \type{\topskip} takes care of the
@@ -2984,30 +2885,30 @@
\removelastskip
\egroup
\forgetall
- \splitmaxdepth=\boxmaxdepth
- \splittopskip=\topskip
- \setbox2=\vsplit0 to \lineheight % get rid of fake line
+ \splitmaxdepth\boxmaxdepth
+ \splittopskip\topskip
+ \setbox2\vsplit0 to \lineheight % get rid of fake line
\loop
\ifdim\pagetotal=\zeropoint % empty page
- \scratchdimen=\teksthoogte
- \chardef\backgroundsplit=1 % split to max height
+ \scratchdimen\teksthoogte
+ \chardef\backgroundsplit1 % split to max height
\else
- \scratchdimen=\pagegoal
- \setbox\scratchbox=\vbox{\@@agvoor}%
+ \scratchdimen\pagegoal
+ \setbox\scratchbox\vbox{\@@agvoor}%
\advance\scratchdimen -\ht\scratchbox
\advance\scratchdimen -\pagetotal
- \chardef\backgroundsplit=2 % split to partial height
+ \chardef\backgroundsplit2 % split to partial height
\fi
\advance\scratchdimen -\@@agbovenoffset
\advance\scratchdimen -\@@agonderoffset \relax
\ifdim\scratchdimen>2\lineheight\relax % reasonable, will be configurable
\ifdim\ht0>\scratchdimen % larger than page
- \setbox2=\vsplit0 to \scratchdimen
+ \setbox2\vsplit0 to \scratchdimen
\else
- \setbox2=\box0
- \chardef\backgroundsplit=0 % no split
+ \setbox2\box0
+ \chardef\backgroundsplit0 % no split
\fi
- \setbox2=\vbox \ifcase\backgroundsplit\or to \teksthoogte \fi % max split
+ \setbox2\vbox \ifcase\backgroundsplit\or to \teksthoogte \fi % max split
{\vskip\@@agbovenoffset
\popsplitcolor
\unvcopy2
@@ -3043,19 +2944,146 @@
%D
%D \showsetup{\y!background}
-\def\dobackground%
+\def\dobackground
{\bgroup
\dowithnextbox
- {\localframed
- [\??ag][\c!offset=\v!overlay]
- {\box\nextbox}%
- \egroup}
+ {\localframed[\??ag][\c!offset=\v!overlay]{\box\nextbox}\egroup}
\vbox}
%D \stopdocumentation
%D \stopachtergrond
%D \egroup
+%D New, for the moment private; let's see when GB finds out
+%D about this one and its obscure usage. It's used in:
+%D
+%D \startbuffer
+%D \defineframedtext
+%D [tabulateframe]
+%D [offset=overlay,
+%D backgroundoffset=3pt,
+%D background=color,
+%D backgroundcolor=green]
+%D
+%D \setuptabulate
+%D [tabulate]
+%D [frame=tabulateframe]
+%D
+%D \setuptables
+%D [frame=tabulateframe]
+%D
+%D \input tufte
+%D
+%D \starttabulate[|l|l|]
+%D \NC test \NC test \NC \NR \NC test \NC test \NC \NR
+%D \NC test \NC test \NC \NR \NC test \NC test \NC \NR
+%D \stoptabulate
+%D
+%D \input tufte
+%D
+%D \starttable[|l|l|]
+%D \NC test \NC test \NC \AR \NC test \NC test \NC \AR
+%D \NC test \NC test \NC \AR \NC test \NC test \NC \AR
+%D \stoptable
+%D \stopbuffer
+%D
+%D \typebuffer
+
+% test this on demo-bbv/demo-bbi !
+%
+% \def\startframedcontent[#1]%
+% {\bgroup
+% \doifelse{#1}\v!uit
+% {\let\stopframedcontent\egroup}
+% {\doifdefinedelse{\??kd#1\c!kader}
+% {\doifelsevalue{\??kd#1\c!regelcorrectie}\v!ja
+% {\ifinsidefloat % binnen \stopframedcontent
+% \def\stopframedcontent
+% {\framedtextparameter{#1}\c!rechts
+% \egroup
+% \egroup}%
+% \else
+% \def\stopframedcontent
+% {\framedtextparameter{#1}\c!rechts
+% \egroup
+% \stopbaselinecorrection
+% \egroup}%
+% \startbaselinecorrection
+% \fi}
+% {\def\stopframedcontent
+% {\framedtextparameter{#1}\c!rechts
+% \egroup
+% \egroup}}%
+% \doifvalue{\??kd#1\c!breedte}\v!passend
+% {\letvalue{\??kd#1\c!breedte}\v!vast}%
+% \doframedtext[#1][]\insidefloattrue
+% \framedtextparameter{#1}\c!links}
+% {\let\stopframedcontent\egroup}}}
+
+\def\defineframedcontent
+ {\dodoubleempty\dodefineframedcontent}
+
+\def\dodefineframedcontent[#1][#2]%
+ {\presetlocalframed[\??fc#1]%
+ \getparameters[\??fc#1]
+ [\c!linkeroffset=\zeropoint,
+ \c!rechteroffset=\getvalue{\??fc#1\c!linkeroffset},
+ \c!bovenoffset=\zeropoint,
+ \c!onderoffset=\getvalue{\??fc#1\c!bovenoffset},
+ \c!strut=\v!nee,
+ \c!offset=\v!overlay,
+ \c!regelcorrectie=\v!nee,
+ #2]}
+
+\def\setupframedcontent
+ {\dodoubleempty\dosetupframedcontent}
+
+\def\dosetupframedcontent[#1][#2]%
+ {\def\docommando##1{\getparameters[\??fc##1][#2]}%
+ \processcommacommand[#1]\docommando}
+
+\def\startframedcontent[#1]%
+ {\bgroup
+ \let\stopframedcontent\egroup
+ \doifnot{#1}\v!uit
+ {\doifdefined{\??fc#1\c!kader}
+ {\def\stopframedcontent{\dostopframedcontent{#1}}%
+ \dostartframedcontent{#1}}}}
+
+\def\dostartframedcontent#1%
+ {\setbox\framebox\hbox\bgroup
+ \setlocalhsize
+ \hsize\localhsize
+ \advance\hsize-\getvalue{\??fc#1\c!linkeroffset}%
+ \advance\hsize-\getvalue{\??fc#1\c!rechteroffset}%
+ \advance\vsize-\getvalue{\??fc#1\c!bovenoffset}%
+ \advance\vsize-\getvalue{\??fc#1\c!onderoffset}%
+ \hskip\getvalue{\??fc#1\c!linkeroffset}%
+ \vbox\bgroup
+ \vskip\getvalue{\??fc#1\c!bovenoffset}%
+ \vbox\bgroup
+ \forgetall
+ \blanko[\v!blokkeer]}
+
+\def\dostopframedcontent#1%
+ {\removelastskip
+ \egroup
+ \vskip\getvalue{\??fc#1\c!onderoffset}%
+ \egroup
+ \hskip\getvalue{\??fc#1\c!rechteroffset}%
+ \egroup
+ \doifvalue{\??fc#1\c!breedte}\v!passend
+ {\letvalue{\??fc#1\c!breedte}\v!vast}%
+ \ifinsidefloat
+ \donefalse
+ \else
+ \doifelsevalue{\??fc#1\c!regelcorrectie}\v!ja\donetrue\donefalse
+ \fi
+ \ifdone\startregelcorrectie\fi
+ \localframed[\??fc#1]{\box\framebox}%
+ \ifdone\stopregelcorrectie\fi
+ \egroup}
+
%D \macros
%D {encircled}
%D
@@ -3079,6 +3107,7 @@
\setupframed
[\c!breedte=\v!passend,
\c!hoogte=\v!ruim,
+ \c!regels=,
\c!offset=0.25ex, % \defaultframeoffset
\c!leeg=\v!nee,
\c!kader=\v!aan,
@@ -3184,6 +3213,4 @@
\c!voor=,
\c!na=]
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/core-sec.tex b/tex/context/base/core-sec.tex
index 288d01748..152ebe338 100644
--- a/tex/context/base/core-sec.tex
+++ b/tex/context/base/core-sec.tex
@@ -158,7 +158,7 @@
\def\domaakvoorafgaandenummer[#1]% will become ugly after speed up
{\bgroup % added
- \global\let\voorafgaandenummer\empty
+ \globallet\voorafgaandenummer\empty
\ifsectienummer
\doifvalue{\??sb\@@sectieblok\c!nummer}\v!ja % added
{\doifelsevalue{\@@thenumber{#1}\c!sectienummer}\v!ja
@@ -237,14 +237,14 @@
\makecounter{\??se\v!tekst}
-\letvalue{\??se\v!tekst\c!voor}\empty
-\letvalue{\??se\v!tekst\c!na }\empty
+\letvalueempty{\??se\v!tekst\c!voor}
+\letvalueempty{\??se\v!tekst\c!na }
-\setvalue{\v!tekst\c!nummer}{0}
-\letvalue{\v!tekst\s!format}\empty
+\setvalue {\v!tekst\c!nummer}{0}
+\letvalueempty{\v!tekst\s!format}
-\letvalue{\??sk\v!tekst}\empty
-\letvalue{\??sk }\empty
+\letvalueempty{\??sk\v!tekst}
+\letvalueempty{\??sk }
\letvalue{\??by }\v!tekst
\letvalue{\??by\v!tekst }\v!tekst
@@ -258,7 +258,7 @@
\def\dostelsectiein[#1][#2]%
{\getparameters[\??se#1][#2]%
- \doifelsevalue{\??se#1\c!vorigenummer}{\v!ja}
+ \doifelsevalue{\??se#1\c!vorigenummer}\v!ja
{\setvalue{#1\c!nummer}{\@@longsectionnumber{#1}}}
{\setvalue{#1\c!nummer}{\@@shortsectionnumber{#1}}}}
@@ -273,7 +273,7 @@
\else
\getparameters[\??se#1][#2]%
\fi
- \doifelsevalue{\??se#1\c!vorigenummer}{\v!ja}
+ \doifelsevalue{\??se#1\c!vorigenummer}\v!ja
{\setvalue{#1\c!nummer}{\@@longsectionnumber {#1}}}
{\setvalue{#1\c!nummer}{\@@shortsectionnumber{#1}}}}
@@ -294,7 +294,7 @@
\donexttracklevel{##1}}%
\donexttracklevel{\zerosection}}} % \firstsection
-\def\koppelmarkering%
+\def\koppelmarkering
{\dodoubleargument\dokoppelmarkering}
\def\ontkoppelmarkering[#1]%
@@ -302,46 +302,38 @@
\def\definieersectie[#1]%
{\doifundefined{\??se#1}
- {\doifelsenothing{\firstsection}
+ {\doifelsenothing\firstsection
{\def\firstsection{#1}%
\setevalue{\??se#1\c!voor}{\v!tekst}%
\setevalue{\??se\v!tekst\c!na}{#1}}
{\setevalue{\??se\commalistelement\c!na}{#1}%
\setevalue{\??se#1\c!voor}{\lastsection}%
\setevalue{\??se\lastsection\c!na}{#1}}%
- \advance\nofsections by 1
- \setevalue{\??se#1\c!niveau}%
- {\the\nofsections}%
- \setevalue{\??se#1\c!na}%
- {}%
- \setvalue{\e!volgende#1}%
- {\@@nextsectionnumber{#1}}%
- \setvalue{#1\c!nummer}%
- {\@@longsectionnumber{#1}}%
- \setvalue{#1\s!format}%
- {\@@longformatnumber{#1}}%
+ \advance\nofsections \plusone
+ \setevalue{\??se#1\c!niveau}{\the\nofsections}%
+ \letvalue{\??se#1\c!na}\empty
+ \setvalue{\e!volgende#1}{\@@nextsectionnumber{#1}}%
+ \setvalue{#1\c!nummer}{\@@longsectionnumber{#1}}%
+ \setvalue{#1\s!format}{\@@longformatnumber{#1}}%
\setevalue{\??by#1}{#1}%
\setevalue{\??by\v!per#1}{#1}%
\makecounter{\??se#1}%
\edef\lastsection{#1}%
- \setvalue{\??sk#1}%
- {#1}%
- \setvalue{\??se#1\c!markering}%
- {}%
- \stelsectiein[#1]
- [\c!vorigenummer=\v!ja]}}%
+ \setvalue{\??sk#1}{#1}%
+ \letvalue{\??se#1\c!markering}\empty
+ \stelsectiein[#1][\c!vorigenummer=\v!ja]}}%
\def\previoussection#1{\csname\??se#1\c!voor\endcsname}
\def\nextsection #1{\csname\??se#1\c!na \endcsname}
\def\@@setsectionnumber#1#2%
- {\setgvalue{\??se#1\s!start}{}% % signal i.p.v. boolean
+ {\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean
\setcounter{\??se#1}{#2}%
\resetsectioncounters{#1}%
\checkpagecounter}
\def\@@nextsectionnumber#1%
- {\setgvalue{\??se#1\s!start}{}% % signal i.p.v. boolean
+ {\letgvalueempty{\??se#1\s!start}% signal i.p.v. boolean
\pluscounter{\??se#1}%
\resetsectioncounters{#1}%
\checkpagecounter}
@@ -406,7 +398,7 @@
% not sure if the next one is better:
\def\doresetsectionmarks#1%
- {\ifundefined{\??se#1\c!markering} % skip zero level
+ {\ifundefined{\??se#1\c!markering}% skip zero level
\donexttracklevel{#1}%
\else
\fastresetmarkerlist[\csname\??se#1\c!markering\endcsname]%
@@ -429,7 +421,7 @@
% \donexttracklevel{#1}}
%
% nicer
-
+
\def\doresetsectioncounters#1%
{\resetcounter{\??se#1}%
\donexttracklevel{#1}}
@@ -453,103 +445,22 @@
{\dobacktrackcommando{\previoussection{#1}}}}
\def\donexttracklevel#1%
- {\doifnot{#1}{\lastsection}
+ {\doifnot{#1}\lastsection
{\donexttrackcommando{\nextsection{#1}}}}
\newif\ifalllevels
-% \def\dosetlevel#1% opvoeren met \ifcsname
-% {\bgroup
-% \doifelse{#1}{\v!vorige}
-% {\global\alllevelstrue
-% \global\let\currentlevel\empty
-% \def\dobacktrackcommando##1%
-% {\ifnum\countervalue{\??se##1}>0
-% \global\alllevelsfalse
-% \xdef\currentlevel{\getvalue{\previoussection{##1}\s!format}}%
-% \else
-% \dobacktracklevel{##1}%
-% \fi}%
-% \dobacktrackcommando\lastsection}
-% {\doifelse{\getvalue{\??by#1}}{\v!tekst}
-% {\global\alllevelstrue
-% \global\let\currentlevel\empty}
-% {\doifdefinedelse{\??ko#1\c!sectie} % beter alteratief: ook
-% {\edef\@@sectie{\getvalue{\??ko#1\c!sectie}}} % hoofdstuk\c!format
-% {\edef\@@sectie{#1}}%
-% \doifdefinedelse{\??se\@@sectie}
-% {\global\alllevelsfalse
-% \xdef\currentlevel{\getvalue{\@@sectie\s!format}}}
-% {\global\alllevelstrue
-% \global\let\currentlevel\empty
-% \def\dobacktrackcommando##1%
-% {\@EA\ifx\csname\??se##1\c!start\endcsname\relax
-% \dobacktracklevel{##1}%
-% \else
-% \ifnum\countervalue{\??se##1}>0
-% \global\alllevelsfalse
-% \xdef\currentlevel{\getvalue{##1\s!format}}%
-% \else
-% \dobacktracklevel{##1}%
-% \fi
-% \fi}%
-% \dobacktrackcommando\lastsection}}}%
-% \egroup}
-
\let\currentlevel\empty
-\def\dontsetlevel#1%
- {\let\currentlevel\somesavedlevel
- \alllevelsfalse}
-
-% \def\dosetlevel#1% opvoeren met \ifcsname
-% {\let\dosetlevel\dontsetlevel % local lists will be real local
-% \bgroup
-% \doifelse{#1}{\v!vorige}
-% {\global\alllevelstrue
-% \global\let\currentlevel\empty
-% \def\dobacktrackcommando##1%
-% {\ifnum\countervalue{\??se##1}>0
-% \global\alllevelsfalse
-% \xdef\currentlevel{\getvalue{\previoussection{##1}\s!format}}%
-% \else
-% \dobacktracklevel{##1}%
-% \fi}%
-% \dobacktrackcommando\lastsection}
-% {\doifelse{\getvalue{\??by#1}}{\v!tekst}
-% {\global\alllevelstrue
-% \global\let\currentlevel\empty}
-% {\doifdefinedelse{\??ko#1\c!sectie} % beter alteratief: ook
-% {\edef\@@sectie{\getvalue{\??ko#1\c!sectie}}} % hoofdstuk\c!format
-% {\edef\@@sectie{#1}}%
-% \doifdefinedelse{\??se\@@sectie}
-% {\global\alllevelsfalse
-% \xdef\currentlevel{\getvalue{\@@sectie\s!format}}}
-% {\global\alllevelstrue
-% \global\let\currentlevel\empty
-% \def\dobacktrackcommando##1%
-% {\@EA\ifx\csname\??se##1\c!start\endcsname\relax
-% \dobacktracklevel{##1}%
-% \else
-% \ifnum\countervalue{\??se##1}>0
-% \global\alllevelsfalse
-% \xdef\currentlevel{\getvalue{##1\s!format}}%
-% \else
-% \dobacktracklevel{##1}%
-% \fi
-% \fi}%
-% \dobacktrackcommando\lastsection}}}%
-% \egroup}
-
\def\dosetcurrentlevel#1%
{\global\alllevelsfalse
\xdef\currentlevel{\getvalue{\lastsection\s!format}}}
\def\dosetpreviouslevel#1%
{\global\alllevelstrue
- \global\let\currentlevel\empty
+ \globallet\currentlevel\empty
\def\dobacktrackcommando##1%
- {\ifnum\countervalue{\??se##1}>0
+ {\ifnum\countervalue{\??se##1}>\zerocount
\global\alllevelsfalse
\xdef\currentlevel{\getvalue{\previoussection{##1}\s!format}}%
\else
@@ -559,7 +470,7 @@
\def\dosettextlevel#1%
{\global\alllevelstrue
- \global\let\currentlevel\empty}
+ \globallet\currentlevel\empty}
\def\dosetotherlevel#1%
{\doifdefinedelse{\??ko#1\c!sectie} % beter alteratief: ook
@@ -569,12 +480,12 @@
{\global\alllevelsfalse
\xdef\currentlevel{\getvalue{\@@sectie\s!format}}}
{\global\alllevelstrue
- \global\let\currentlevel\empty
+ \globallet\currentlevel\empty
\def\dobacktrackcommando##1%
{\@EA\ifx\csname\??se##1\c!start\endcsname\relax
\dobacktracklevel{##1}%
\else
- \ifnum\countervalue{\??se##1}>0
+ \ifnum\countervalue{\??se##1}>\zerocount
\global\alllevelsfalse
\xdef\currentlevel{\getvalue{##1\s!format}}%
\else
@@ -583,26 +494,18 @@
\fi}%
\dobacktrackcommando\lastsection}}
-% \def\dosetlevel#1% opvoeren met \ifcsname
-% {\let\dosetlevel\dontsetlevel % local lists will be real local
-% \bgroup
-% \doifelse{#1}{\v!huidige}
-% {\dosetcurrentlevel{#1}}
-% {\doifelse{#1}{\v!vorige}
-% {\dosetpreviouslevel{#1}}
-% {\doifelsevalue{\??by#1}{\v!tekst}
-% {\dosettextlevel{#1}}
-% {\dosetotherlevel{#1}}}}%
-% \egroup}
-
-\def\dosetlevel#1% beware: this one is \let
- {\let\dosetlevel\dontsetlevel % local lists will be real local
- \bgroup
+\def\dosetfilterlevel#1#2% beware: this one is \let
+ {\bgroup
\edef\askedlevel{#1}%
+ \edef\askedfilter{#2}%
\ifx\askedlevel\v!huidige
\dosetcurrentlevel\askedlevel
\else\ifx\askedlevel\v!vorige
\dosetpreviouslevel\askedlevel
+ \else\ifx\askedlevel\v!alles
+ \global\alllevelstrue
+ \else\ifx\askedlevel\v!tekst
+ \global\alllevelstrue
\else
\edef\byaskedlevel{\csname\??by\askedlevel\endcsname}%
\ifx\byaskedlevel\v!tekst
@@ -610,16 +513,19 @@
\else
\dosetotherlevel\askedlevel
\fi
- \fi\fi
+ \fi\fi\fi\fi
+ % experiment
+ \ifx\askedfilter\empty \else
+ \xdef\currentlevel{\currentlevel\sectionseparator\askedfilter}%
+ \fi
\egroup}
-% \def\dosettoclevel{\dosetlevel}
-% \def\dosetreglevel{\dosetlevel}
-% \def\dosetblklevel{\dosetlevel}
+\def\dontsetfilterlevel#1%
+ {\let\currentlevel\somesavedlevel
+ \alllevelsfalse}
-\let\dosettoclevel\dosetlevel
-\let\dosetreglevel\dosetlevel
-\let\dosetblklevel\dosetlevel
+\def\honorlocalfilterlevel % local lists will be real local
+ {\let\dosetfilterlevel\dontsetfilterlevel}
% cleaner
%
@@ -759,6 +665,12 @@
%
% we want to be able to overload them globally
+% This will be reimplmented
+%
+% {nn}{xx}{yy}
+%
+% -> \scan{..}{..}{0} met 0 als sentinel
+
\def\doifnextlevelelse[#1]% !! this one is \let / uti seperator --
{\edef\somesavedlevel{\sectionseparator\@@filterlevelpart[#1]}%
\ifalllevels
@@ -807,7 +719,7 @@
\@@shortsectionnumber{#1}}
\def\@@longsectionnumber#1%
- {\ifnum\countervalue{\??se\previoussection{#1}}>0
+ {\ifnum\countervalue{\??se\previoussection{#1}}>\zerocount
\csname\previoussection{#1}\c!nummer\endcsname.%
\fi
\@@shortsectionnumber{#1}}
@@ -837,6 +749,10 @@
\edef\@@sectieblok {#2}%
\edef\@@sectieblokken{#3}}
+% beware, the \resetsectionmarks generates some nodes that
+% will result in an additional last page, which needs to be
+% captured at the end
+
\def\doaroundsectieblok#1%
{\doifvaluesomething{\??sb#1\c!pagina}
{\ExpandFirstAfter\pagina[\getvalue{\??sb#1\c!pagina}]}%
@@ -911,7 +827,7 @@
%\c!voor=,
%\c!na=,
#3]%
- \expandafter\newif\csname if#2\endcsname
+ \expandafter\newif\csname if#2\endcsname % better a mode
\doglobal\increment\currentsectionblock
\setsectieblokomgeving{#1}{}%
\setevalue{\??sb#1}%
@@ -921,7 +837,7 @@
\setvalue{\e!stop#2}%
{\dostopsectieblok}}
-\def\definieersectieblok%
+\def\definieersectieblok
{\dotripleargument\dodefinieersectieblok}
\def\sectiebloklabel#1#2%
@@ -959,11 +875,11 @@
\ifpaginageblokkeerd
\global\paginageblokkeerdfalse
\else
- \!!countb=\getvalue{\??se\@@sectie\c!niveau}\relax
+ \!!countb\getvalue{\??se\@@sectie\c!niveau}\relax
\ifnum\!!countb>\@@koniveau\relax
- \!!counta=20000
- \multiply\!!countb by 500
- \advance\!!counta by \!!countb
+ \!!counta20000
+ \multiply\!!countb 500
+ \advance\!!counta \!!countb
\dosomebreak{\penalty\!!counta}%
\else
\dosomebreak{\allowbreak}%
@@ -988,21 +904,21 @@
\def\dohandelpaginaafX#1% zie doordefinieren / boven
{\bgroup
- \!!countb=\@@koniveau
- \advance\!!countb by #1
- \multiply\!!countb by 500
- \!!counta=20000
- \advance\!!counta by \!!countb
+ \!!countb\@@koniveau
+ \advance\!!countb #1
+ \multiply\!!countb 500
+ \!!counta20000
+ \advance\!!counta \!!countb
\dosomebreak{\penalty\!!counta}%
\egroup}
\def\handelpaginaaf#1%
{\dohandelpaginaafAA{#1}%
- \ifnum\countervalue{\??se\previoussection\@@sectie}>0
- \ifnum\countervalue{\??se\@@sectie}>0
+ \ifnum\countervalue{\??se\previoussection\@@sectie}>\zerocount\relax
+ \ifnum\countervalue{\??se\@@sectie}>\zerocount
\dohandelpaginaafB{#1}%
\else
- \doifnotvalue{\??ko#1\c!doorgaan}{\v!ja}
+ \doifnotvalue{\??ko#1\c!doorgaan}\v!ja
{\dohandelpaginaafB{#1}}%
\fi
\else
@@ -1014,7 +930,7 @@
{\xdef\@@koniveau{\getvalue{\??se\@@sectie\c!niveau}}%
\nobreak}
-%\def\dolocalkopsetup#1% koppeling met standaard kopcommando / engels
+%\def\dolocalheadsetup#1% koppeling met standaard kopcommando / engels
% {\forgetall
% \doifvaluesomething{\??ko#1\c!uitlijnen}
% {\ExpandFirstAfter\steluitlijnenin[\getvalue{\??ko#1\c!uitlijnen}]}%
@@ -1022,7 +938,7 @@
% {\ExpandFirstAfter\steltolerantiein[\getvalue{\??ko#1\c!tolerantie}]}%
% \def\\{\crlf\strut\ignorespaces}}
-\def\dolocalkopsetup#1% koppeling met standaard kopcommando / engels
+\def\dolocalheadsetup#1% koppeling met standaard kopcommando / engels
{\forgetall % traag dus ...
\doifvaluesomething{\??ko#1\c!uitlijnen} % wordt al expanded in spa
{\expanded{\steluitlijnenin[\getvalue{\??ko#1\c!uitlijnen}]}}%
@@ -1030,17 +946,20 @@
{\expanded{\steltolerantiein[\getvalue{\??ko#1\c!tolerantie}]}}%
\def\\{\crlf\strut\ignorespaces}}
+\def\localkopsetup{\localheadsetup} % kan tzt weg
+
\newif\ifplaatskop
\newif\iflegekop
+\newif\ifnaarlijst
\newif\ifverhoognummer
\newif\ifkopnummer
\def\setsectieenkoppeling#1%
{\edef\@@koppeling{\getvalue{\??ko#1\c!koppeling}}%
\edef\@@sectie{\getvalue{\??ko#1\c!sectie}}%
- \doifnothing{\@@koppeling}
+ \doifnothing\@@koppeling
{\edef\@@koppeling{#1}}%
- \doifnothing{\@@sectie}
+ \doifnothing\@@sectie
{\edef\@@sectie{\getvalue{\??ko\@@koppeling\c!sectie}}}}
\newif\ifkopprefix
@@ -1055,10 +974,10 @@
% \hoofdstuk tekst
% \hoofdstuk <niets>
-\def\finalsectionnumber%
+\def\dofinalsectionnumber
{\ifundefined{\@@sectie\c!nummer}\else
\ifsomeheadconversion
- \@@shortsectionnumber{\@@sectie}%
+ \@@shortsectionnumber\@@sectie
\else
\getvalue{\@@sectie\c!nummer}%
\fi
@@ -1071,8 +990,7 @@
\def\dolijstelement##1##2##3##4##5##6%
{\doif{##1}{#1}
{\ConvertConstantAfter\doif{##4}{#3}
- {\wait
- \global\utilitydonetrue
+ {\global\utilitydonetrue
\scratchcounter=0\getvalue{\??se\@@sectie\c!niveau}%
%
%\advance\scratchcounter 2
@@ -1086,15 +1004,15 @@
%\do##5]}}}%
%
\def\do####1\relax % :/- clean
- {\advance\scratchcounter -1
+ {\advance\scratchcounter \minusone
\ifcase\scratchcounter
\xdef\foundsectionnumber{\@@filterheadpart[####1]}%
\else
\@EAEAEA\do\@@filtertailpart[####1]\relax
\fi}%
\@EA\do\@@filternumberpart[##5]\relax}}}%
- \setbox0=\vbox
- {\doutilities{#1}{#2}{#1}{}{}}%
+ \setbox0\vbox
+ {\doutilities{#1}{#2}{#1}\relax\relax}%
\endgroup
\doifnumberelse{\foundsectionnumber}
{\doif{\foundsectionnumber}{0}{\xdef\foundsectionnumber{1}}}
@@ -1106,7 +1024,7 @@
\def\setsomeheadconversion#1#2%
{\someheadconversionfalse
- \doifelsevalue{\??ko#1\c!eigennummer}{\v!ja}
+ \doifelsevalue{\??ko#1\c!eigennummer}\v!ja
{\def\someheadconversion{#2}}
{\bepaalkopnummer[#1]%
\@EA\ifx\csname\??se\@@sectie\@@sectieblok\c!kopconversie\endcsname\relax
@@ -1152,8 +1070,8 @@
{\convertnumber{#2}{#3}}
\def\setfullsectionnumber#1%
- {\doifelsevalue{#1\c!kopconversie}{\v!ja}
- {\doifelsevalue{#1\c!koplabel}{\v!ja}
+ {\doifelsevalue{#1\c!kopconversie}\v!ja
+ {\doifelsevalue{#1\c!koplabel}\v!ja
{\let\fullsectionnumber\naturalfullsectionnumber}
{\let\fullsectionnumber\limitedfullsectionnumber}}
{\let\fullsectionnumber\ignoredfullsectionnumber}}
@@ -1168,7 +1086,7 @@
\let\currentheadtext \empty
\def\dodosomekop#1[#2]#3% [ref] {title}
- {\doifelsevalue{\??ko#1\c!eigennummer}{\v!ja}
+ {\doifelsevalue{\??ko#1\c!eigennummer}\v!ja
{\doquadruplegroupempty\dododosomekop{#1}{#2}{#3}}
{\fourthargumentfalse \dododosomekop{#1}{#2}{#3}{}}}
@@ -1196,9 +1114,12 @@
\prevdepth\strutdepth
\fi}
+\let\localkopprefix\empty
+
\def\dodododosomekop#1[#2]#3#4% [ref] {number} {title}
{\def\currenthead{#1}%
- \unexpanded\def\\{\space}%
+\let\finalsectionnumber\dofinalsectionnumber % overloaded ungrouped -)
+ \unexpanded\def\\{\space}%
\def\numberseparator{\getvalue{\??ko\currenthead\c!scheider}}%
\flushingcolumnfloatsfalse % {number} can be \finalsectionnumber
\someheadconversionfalse
@@ -1213,19 +1134,23 @@
{\def\localkopprefix{+}}
{\def\localkopprefix{#2}}} % eigenlijk alleen eerste
{\edef\localkoprefix{\getvalue{\??ko#1\c!prefix}}}%
+ \else
+ \let\localkoprefix\empty
\fi
- \doifelsevalue{\??ko#1\c!plaatskop}{\v!ja}
- {\plaatskoptrue}
- {\plaatskopfalse}%
-\processaction
- [\getvalue{\??ko#1\c!plaatskop}]
- [ \v!ja=>\plaatskoptrue \legekopfalse,
- \v!leeg=>\plaatskoptrue \legekoptrue,
- \v!nee=>\plaatskopfalse\legekoptrue]%
+ \doifelsevalue{\??ko#1\c!plaatskop}\v!ja
+ \plaatskoptrue\plaatskopfalse
+ \processaction
+ [\getvalue{\??ko#1\c!plaatskop}]
+ [ \v!ja=>\plaatskoptrue \legekopfalse,
+ \v!leeg=>\plaatskoptrue \legekoptrue,
+ \v!nee=>\plaatskopfalse\legekoptrue]%
+ \naarlijstfalse
\processaction
[\getvalue{\??ko#1\c!verhoognummer}]
[ \v!ja=>\verhoognummertrue,
\v!nee=>\verhoognummerfalse,
+ \v!lijst=>\verhoognummerfalse
+ \naarlijsttrue,
\s!unknown=>{\ifx\currentproduct\empty
\findsectionnumber{#1}\commalistelement{#4}%
\fi
@@ -1234,9 +1159,10 @@
\edef\numberheadalternative{\getvalue{\??ko#1\c!variant}}%
\dostelkopvariantin[\numberheadalternative]%
\ifsectienummer
- \doifelsevalue{\??sb\@@sectieblok\c!nummer}{\v!ja}
- {\doifelsevalue{\??ko#1\c!nummer}{\v!ja}
- {\kopnummertrue}{\kopnummerfalse}}
+ \doifelsevalue{\??sb\@@sectieblok\c!nummer}\v!ja
+ {\doifelsevalue{\??ko#1\c!nummer}\v!ja
+ \kopnummertrue
+ \kopnummerfalse}
{\kopnummerfalse}%
\else
\kopnummerfalse
@@ -1244,7 +1170,7 @@
\convertexpanded{\??ko#1}{#4}\asciititle
%
\gdef\currentheadtext{#4}% scheelt args
- \global\let\currentheadnumber\empty
+ \globallet\currentheadnumber\empty
%
\ifverhoognummer
\ifplaatskop
@@ -1267,7 +1193,7 @@
{\setsectionlistreference{\@@sectie}{#1}%
\soortpagina[\@@koppeling]%
\let\fullsectionnumber\writtenfullsectionnumber
- \rawreference{\s!sec}{#2}{{\someheadconversion}{\asciititle}}%
+ \rawreference\s!sec{#2}{{\someheadconversion}{\asciititle}}%
\resetsectionmarks\@@sectie
\setlistparameter\@@koppeling\c!expansie{\getvalue{\??ko#1\c!expansie}}%
\let\fullsectionnumber\writtenfullsectionnumber
@@ -1284,14 +1210,14 @@
{#1}
{\setsectionlistreference{\@@sectie}{#1}%
\soortpagina[\@@koppeling]%
- \rawreference{\s!sec}{#2}{{#3}{\asciititle}}%
+ \rawreference\s!sec{#2}{{#3}{\asciititle}}%
\resetsectionmarks\@@sectie
\setlistparameter\@@koppeling\c!expansie{\getvalue{\??ko#1\c!expansie}}%
\doschrijfnaarlijst{\@@koppeling}{#3}{#4}{\v!kop}}
{\sectiebloklabel{#1}{\dohandleheadnumber{#3}}}% handle is new
{#4}
{\marking[#1]{#4}%
- \doifelsevalue{\??ko#1\c!eigennummer}{\v!ja} % rommelig omdat
+ \doifelsevalue{\??ko#1\c!eigennummer}\v!ja % rommelig omdat
{\edef\finalsectionnumber{#3}} % #3 al is toegekend
{\bepaalkopnummer[#1]}% migreert naar 3e argument
\expanded{\marking[#1\v!nummer]{\finalsectionnumber}}}%
@@ -1303,13 +1229,13 @@
{#1}
{\setsectionlistreference{\@@sectie}{#1}%
\soortpagina[\@@koppeling]%
- \rawreference{\s!sec}{#2}{{#3}{\asciititle}}%
+ \rawreference\s!sec{#2}{{#3}{\asciititle}}%
\resetsectionmarks\@@sectie
\setlistparameter\@@koppeling\c!expansie{\getvalue{\??ko#1\c!expansie}}%
\doschrijfnaarlijst{\@@koppeling}{}{#4}{\v!kop}}
{#4}
{\marking[#1]{#4}%
- \doifelsevalue{\??ko#1\c!eigennummer}{\v!ja} % brrr
+ \doifelsevalue{\??ko#1\c!eigennummer}\v!ja % brrr
{\edef\finalsectionnumber{#3}}
{\bepaalkopnummer[#1]}%
% todo : geen markering (leeg maken)
@@ -1345,22 +1271,23 @@
\xdef\currentheadnumber{\someheadconversion}%
\fi
\getvalue{\??ko#1\c!tussen}% documenteren, is enige hook
+ \bgroup
\setsectionlistreference{\@@sectie}{#1}%
\resetsectionmarks\@@sectie
\marking[#1]{#4}%
- \doifelsevalue{\??ko#1\c!eigennummer}{\v!ja}
+ \doifelsevalue{\??ko#1\c!eigennummer}\v!ja
{\edef\finalsectionnumber{#3}}
{\bepaalkopnummer[#1]}%
\expanded{\marking[#1\v!nummer]{\finalsectionnumber}}%
\soortpagina[\@@koppeling]%
- \bgroup
+% \bgroup
\setlistparameter\@@koppeling\c!expansie{\getvalue{\??ko#1\c!expansie}}%
\ifkopnummer
- \rawreference{\s!sec}{#2}{{#3}{\asciititle}}%
+ \rawreference\s!sec{#2}{{#3}{\asciititle}}%
\doschrijfnaarlijst{\@@koppeling}{#3}{#4}{\v!kop}%
\writesection{#1}{#3}{#4}%
\else
- \rawreference{\s!sec}{#2}{{#3}{\asciititle}}%
+ \rawreference\s!sec{#2}{{#3}{\asciititle}}%
\doschrijfnaarlijst{\@@koppeling}{}{#4}{\v!kop}%
\writesection{#1}{-}{#4}%
\fi
@@ -1370,13 +1297,15 @@
\fi
\fi
\else
+ % todo : ref prefix
\ifplaatskop
\checknexthead\handelpaginaaf{#1}%
\setsectieenkoppeling{#1}% can be changed when [voor=\somehead{..}...]
\getvalue{\??ko#1\c!tussen}%
\doplaatskoptekst
{#1}
- {\rawreference{\s!sec}{#2}{{#3}{\asciititle}}}
+ {\forcesectiontolist{#1}{#4}%
+ \rawreference\s!sec{#2}{{#3}{\asciititle}}} % #3 ?
{#4}
%{}% new:
{\marking[#1]{#4}%
@@ -1392,7 +1321,8 @@
\checknexthead\handelpaginaaf{#1}%
\setsectieenkoppeling{#1}% can be changed when [voor=\somehead{..}...]
\getvalue{\??ko#1\c!tussen}%
- \rawreference{\s!sec}{#2}{{#3}{\asciititle}}%
+ \forcesectiontolist{#1}{#4}%
+ \rawreference\s!sec{#2}{{#3}{\asciititle}}% #3 ?
\marking[#1]{#4}%
\marking[#1\v!nummer]{}%
\writesection{#1}{-}{#4}%
@@ -1403,6 +1333,19 @@
\let\fullsectionnumber\limitedfullsectionnumber
\ifdisplaysectionhead\else\expandafter\GotoPar\fi}
+\def\forcesectiontolist#1#2%
+ {\ifnaarlijst
+ % we need to make sure that there is a number set (non
+ % zero) else the list mechanism cannot determine the
+ % level
+ \bgroup
+ \stelkopnummerin[#1][+1]% traag, wordt \getvalue{\c!volgende...}
+ \setlistparameter\@@koppeling\c!expansie{\getvalue{\??ko#1\c!expansie}}%
+ \doschrijfnaarlijst{\@@koppeling}{}{#2}{\v!kop}%
+ \stelkopnummerin[#1][-1]% traag, wordt \getvalue{\c!vorige...}
+ \egroup
+ \fi}
+
\let\previoussectionformat\empty
\let\currentsectionformat \empty
@@ -1413,7 +1356,7 @@
{\ifnum\countervalue{\??se\previoussection{#1}}>0\relax
\xdef\previoussectionformat{\@@longformatnumber{\previoussection{#1}}}%
\else
- \global\let\previoussectionformat\empty
+ \globallet\previoussectionformat\empty
\fi
\xdef\currentsectionformat{\@@longformatnumber{#1}}}
@@ -1437,7 +1380,7 @@
\def\dostoplistreferences#1%
{\iflijstgeplaatst
\addtocommalist{#1}\updatedlistreferences % nog global (\doglobal)
- \global\let\updatedlistreferences\updatedlistreferences % een noodverbandje
+ \globallet\updatedlistreferences\updatedlistreferences % een noodverbandje
\gdef\updatelistreferences%
{\def\docommando####1%
%
@@ -1447,8 +1390,8 @@
% {\definereference[\e!vorige####1][\getvalue{\e!huidigelokale####1}]%
%
\processcommacommand[\updatedlistreferences]\docommando
- \global\let\updatelistreferences\relax
- \global\let\updatedlistreferences\empty}%
+ \globallet\updatelistreferences\relax
+ \globallet\updatedlistreferences\empty}%
\fi}
\def\stoplistreferences%
@@ -1562,9 +1505,9 @@
\edef\@@sectie{\??ko\iffifthargument#5\else#4\fi}%
\dostartattributes\@@sectie\c!letter\c!kleur\empty
\dontconvertfont
- \dostartattributes\@@sectie#1#2\empty
+ \dostartattributes\@@sectie{#1}{#2}\empty
\stelinterliniein % \setupinterlinespace
- \begstrut\getmarking[\hoofdmarkering{#4#3}]\endstrut
+ \begstrut\haalmarkering[\hoofdmarkering{#4#3}]\endstrut
\endgraf
\dostopattributes
\dostopattributes
@@ -1607,7 +1550,7 @@
\getvalue{\??ko#1\c!nacommando}%
\ifdisplaysectionhead\endgraf\fi
\dostopattributes
- \dostopattributes}}%
+ \dostopattributes}}%
\fi
\endheadplacement{#1}{#4}}
@@ -1658,7 +1601,7 @@
\fi
\getvalue{\??ko#1\c!nacommando}%
\ifdisplaysectionhead\endgraf\fi
- \dostopattributes
+ \dostopattributes
\dostopattributes}}%
\fi
\endheadplacement{#1}{#5}}
@@ -1686,25 +1629,56 @@
% \resetinteractionparameter\c!kleur
% \resetinteractionparameter\c!contrastkleur
% \strictouterreferencestrue % tzt instelling
-% \def\localkopsetup%
-% {\dolocalkopsetup{#1}}%
+% \def\localheadsetup%
+% {\dolocalheadsetup{#1}}%
+% \startsynchronisatie}
+
+% \def\beginheadplacement#1%
+% {\bgroup
+% \setsystemmode{#1}% to be documented
+% \ifgridsnapping\iftracegridsnapping\showstruts\fi\fi
+% \gdef\localheaddepth{\dp\strutbox}%
+% \everypar\emptytoks % needed indeed
+% \noindent % ipv \witruimte elders, na \forgetall !
+% \bgroup
+% \doifelsevalue{\??ko#1\c!titeluitlijnen}\v!ja % new
+% {\leftskip 1\leftskip
+% \rightskip1\rightskip
+% \edef\next{\leftskip\the\leftskip\rightskip\the\rightskip}%
+% \xdef\localheadskip{\the\leftskip}%
+% \expandafter\forgetall\next % now we may forget everything
+% \setlocalhsize\hsize\localhsize}
+% {\globallet\localheadskip\!!zeropoint
+% \forgetall}%
+% \mindermeldingen
+% \postponefootnotes
+% \iflocation\ifdisplaysectionhead\else\noninterferingmarks\fi\fi
+% \resetinteractionparameter\c!letter
+% \resetinteractionparameter\c!kleur
+% \resetinteractionparameter\c!contrastkleur
+% \strictouterreferencestrue % tzt instelling
+% \def\localheadsetup%
+% {\dolocalheadsetup{#1}}%
% \startsynchronisatie}
\def\beginheadplacement#1%
{\bgroup
-\ifgridsnapping\iftracegridsnapping\showstruts\fi\fi
+ \setsystemmode{#1}% to be documented
+ \ifgridsnapping\iftracegridsnapping\showstruts\fi\fi
\gdef\localheaddepth{\dp\strutbox}%
\everypar\emptytoks % needed indeed
\noindent % ipv \witruimte elders, na \forgetall !
\bgroup
- \doifelsevalue{\??ko#1\c!titeluitlijnen}{\v!ja} % new
- {\leftskip 1\leftskip
- \rightskip1\rightskip
- \edef\next{\leftskip\the\leftskip\rightskip\the\rightskip}%
- \xdef\localheadskip{\the\leftskip}%
- \expandafter\forgetall\next % now we may forget everything
- \setlocalhsize\hsize\localhsize}
- {\global\let\localheadskip\!!zeropoint
+ \doifelsevalue{\??ko#1\c!titeluitlijnen}\v!ja % new
+ {\skip0 1\leftskip
+ \skip2 1\rightskip
+ \xdef\localheadskip{\the\skip0}%
+ \forgetall
+ \leftskip\skip0
+ \rightskip\skip2
+ \setlocalhsize\hsize\localhsize
+ \forgetbothskips}
+ {\globallet\localheadskip\!!zeropoint
\forgetall}%
\mindermeldingen
\postponefootnotes
@@ -1713,12 +1687,13 @@
\resetinteractionparameter\c!kleur
\resetinteractionparameter\c!contrastkleur
\strictouterreferencestrue % tzt instelling
- \def\localkopsetup%
- {\dolocalkopsetup{#1}}%
+ \def\localheadsetup%
+ {\dolocalheadsetup{#1}}%
\startsynchronisatie}
+
\def\endheadplacement#1#2%
- {\doifelsevalue{\??rf#1\c!status}{\v!start}
+ {\doifelsevalue{\??rf#1\c!status}\v!start
{\doifvaluenothing{\??ko#1\c!file}{\autocrossdocumentfalse}}
{\autocrossdocumentfalse}%
% no message needed here, should be a proper switch
@@ -1755,11 +1730,11 @@
\xdef\headlastlinewidth{\the\lasthhboxwidth}%
\else
\unhbox0
- \global\let\headlastlinewidth\!!zeropoint
+ \globallet\headlastlinewidth\!!zeropoint
\fi
\else
\unhbox0
- \global\let\headlastlinewidth\!!zeropoint
+ \globallet\headlastlinewidth\!!zeropoint
\fi
#2%
\dimen0=\numberheaddistance
@@ -1777,7 +1752,7 @@
\egroup
\egroup
\ifdisplaysectionhead
- \doifvalue{\??ko#1\c!springvolgendein}{\v!nee}{\noindentation}%
+ \doifvalue{\??ko#1\c!springvolgendein}\v!nee\noindentation
\else
\nonoindentation % recently added, was a bug
\fi}
@@ -1802,15 +1777,15 @@
{\bgroup
\setsectieenkoppeling{#1}%
\doifinstringelse{#2}{+-}
- {\doifelse{#3}{}
- {\@@nextsectionnumber{\@@sectie}}
+ {\doifelsenothing{#3}
+ {\@@nextsectionnumber\@@sectie}
{\!!counta=#2#3\relax
- \advance\!!counta by \@@sectionvalue{\@@sectie}%
- \@@setsectionnumber{\@@sectie}{\!!counta}}}
- {\@@setsectionnumber{\@@sectie}{#2#3}}%
+ \advance\!!counta \@@sectionvalue\@@sectie
+ \@@setsectionnumber\@@sectie\!!counta}}
+ {\@@setsectionnumber\@@sectie{#2#3}}%
\egroup}
-\def\stelkopnummerin%
+\def\stelkopnummerin
{\dodoubleargument\dostelkopnummerin}
\def\huidigekopnummer{0}
@@ -1841,16 +1816,30 @@
\def\alinea%
{\par}
+% nice testcase
+%
+% \setupheads[aligntitle=yes]
+%
+% \startnarrower
+% \subject{\dorecurse{100}{x }}
+% \section{\dorecurse{100}{x }}
+% \input tufte \par
+% \setupheads[alternative=inmargin]
+% \subject{\dorecurse{100}{x }}
+% \section{\dorecurse{100}{x }}
+% \input tufte \par
+% \stopnarrower
+
\def\plaatskopalinea#1#2%
{\vbox
- {\localkopsetup
+ {\localheadsetup
\begstrut\ifheadnumbercontent#1\hskip\numberheaddistance\fi#2}}
\def\plaatskopnormaal#1#2%
{\ifheadnumbercontent
\setbox0=\hbox{{#1}\hskip\numberheaddistance}%
\vbox
- {\localkopsetup
+ {\localheadsetup
\hangindent 1\wd0
\hangafter 1
\noindent
@@ -1858,33 +1847,43 @@
#2}%
\else
\vbox
- {\localkopsetup\noindent#2}%
+ {\localheadsetup\noindent#2}%
\fi}
% \def\plaatskopinmarge#1#2%
% {\vbox
-% {\localkopsetup
+% {\localheadsetup
% \begstrut % but use one \strut here!
% \ifheadnumbercontent
% \llap{\hbox to 5em{\hfill{#1}\hskip\linkermargeafstand}}%
% \fi
% {#2}}}
+%\def\plaatskopinmarge#1#2%
+% {\vbox
+% {\scratchdimen\linkermargeafstand
+% \advance\scratchdimen\leftskip
+% \edef\plaatskopinmarge{\the\scratchdimen}% re-use saves hash entry
+% \localheadsetup
+% \begstrut % but use one \strut here!
+% \ifheadnumbercontent
+% \llap{\hbox to 5em{\hfill{#1}\hskip\plaatskopinmarge}}%
+% \fi
+% {#2}}}
+
\def\plaatskopinmarge#1#2%
{\vbox
- {\scratchdimen\linkermargeafstand
- \advance\scratchdimen\leftskip
- \edef\plaatskopinmarge{\the\scratchdimen}% re-use saves hash entry
- \localkopsetup
- \begstrut % but use one \strut here!
+ {\localheadsetup
+ \begstrut % use one \strut here!
\ifheadnumbercontent
- \llap{\hbox to 5em{\hfill{#1}\hskip\plaatskopinmarge}}%
+ \llap{\hbox to 5em{\hfill{#1}%
+ \hskip\localheadskip\hskip\linkermargeafstand}}%
\fi
{#2}}}
\def\plaatskopmidden#1#2%
{\vbox
- {\localkopsetup
+ {\localheadsetup
\veryraggedcenter
\let\\\endgraf
\let\crlf\endgraf
@@ -1892,7 +1891,7 @@
\def\plaatskopintekst#1#2%
{\bgroup
- \localkopsetup % no stretch in distance
+ \localheadsetup % no stretch in distance
\ifheadnumbercontent{#1}\kern\numberheaddistance\fi{\begstrut#2}%
\egroup}
@@ -1931,16 +1930,16 @@
\c!eigennummer=\v!nee,
\c!nummer=\v!ja,
\c!kleur=,
- \c!springvolgendein=\v!nee,
\c!doorgaan=\v!ja,
\c!plaatskop=\v!ja,
\c!verhoognummer=\v!ja,
\c!variant=\@@kovariant,
\c!commando=\@@plaatskop,
\c!scheider=\@@koscheider,
- \c!uitlijnen=,
- \c!titeluitlijnen=,
- \c!tolerantie=,
+ \c!uitlijnen=\@@kouitlijnen,
+ \c!titeluitlijnen=\@@kotiteluitlijnen,
+ \c!tolerantie=\@@kotolerantie,
+ \c!springvolgendein=\@@kospringvolgendein,
\c!file=,
\c!expansie=,
\c!grid=,
@@ -1950,8 +1949,7 @@
{\copyparameters
[\??ko#1][\??ko\getvalue{\??ko#1\c!default}]
[\c!voor,\c!na,\c!commando,\c!file,\c!pagina,\c!doorgaan,
- \c!hoofd,\c!tekst,\c!voet,
-\c!scheider,
+ \c!hoofd,\c!tekst,\c!voet,\c!scheider,
\c!nummer,\c!eigennummer,\c!plaatskop,\c!verhoognummer,
\c!letter,\c!kleur,\c!afstand,\c!variant,\c!springvolgendein,
%\c!nummerletter,\c!tekstletter,
@@ -1975,7 +1973,7 @@
[\??ko#1][\??ko#2]
[\c!niveau,\c!sectie,\c!koppeling,\c!prefix,
\c!voor,\c!na,\c!commando,\c!file,\c!pagina,\c!doorgaan,
-\c!scheider,
+ \c!scheider,
\c!hoofd,\c!tekst,\c!voet,
\c!nummer,\c!eigennummer,\c!plaatskop,\c!verhoognummer,
\c!letter,\c!kleur,\c!afstand,\c!variant,\c!springvolgendein,
@@ -2047,11 +2045,11 @@
\def\complexbijlage[#1]#2%
{\pagina[\v!rechts]
- \stelnummeringin[\c!status=\v!stop]
+ \setuppagenumbering[\c!status=\v!stop]
\systemsuppliedchapter[#1]{#2}
\pagina[\v!rechts]
- \stelnummeringin[\c!status=\v!start]
- \stelpaginanummerin[\c!nummer=1]}
+ \setuppagenumbering[\c!status=\v!start]
+ \setuppagenumbering[\c!nummer=1]}
\setvalue{\v!bijlage}%
{\complexorsimpleempty\bijlage}
@@ -2060,6 +2058,10 @@
[\c!variant=\v!normaal,
\c!sectienummer=\v!ja,
\c!scheider=.,
+ \c!uitlijnen=,
+ \c!titeluitlijnen=,
+ \c!tolerantie=,
+ \c!springvolgendein=\v!nee,
\c!commando=]
\definieersectieblok [\v!hoofdtekst] [\v!hoofdteksten] [\c!nummer=\v!ja]
@@ -2179,9 +2181,9 @@
\stelkopin
[\v!deel,\v!hoofdstuk]
- [\c!uitlijnen=,
+ [%\c!uitlijnen=,
+ %\c!springvolgendein=\v!nee,
\c!doorgaan=\v!nee,
- \c!springvolgendein=\v!nee,
\c!pagina=\v!rechts,
\c!hoofd=,
\c!letter=\tfc,
@@ -2191,10 +2193,10 @@
\stelkopin
[\v!paragraaf]
- [\c!uitlijnen=,
+ [%\c!uitlijnen=,
+ %\c!springvolgendein=\v!nee,
\c!letter=\tfa,
\c!afstand=.75em,
- \c!springvolgendein=\v!nee,
\c!voor={\blanko[2*\v!groot]},
\c!na=\blanko]
@@ -2237,10 +2239,11 @@
% hm
-\stelnummeringin % na instellen hoofdteksten !
+\setuppagenumbering % na instellen hoofdteksten !
[\c!variant=\v!enkelzijdig,
\c!plaats={\v!hoofd,\v!midden},
\c!conversie=\v!cijfers,
+ \c!breedte=, % in geval van \v!kantlijn
\c!links=,
\c!rechts=,
\c!wijze=\v!per\v!deel,
diff --git a/tex/context/base/core-spa.tex b/tex/context/base/core-spa.tex
index 9f2750b4d..042093968 100644
--- a/tex/context/base/core-spa.tex
+++ b/tex/context/base/core-spa.tex
@@ -13,7 +13,7 @@
\writestatus{loading}{Context Spacing Macros}
-\unprotect
+\unprotect
\newevery \everybodyfont \Everybodyfont % just to be sure
\newevery \everyfontswitch \EveryFontSwitch % just to be sure
@@ -32,27 +32,30 @@
\appendtoks \simplestelspatieringin \to \everybodyfont % nieuw
\appendtoks \setdisplayskips \to \everybodyfont % nieuw
-\appendtoks \updateraggedskips \to \everyfontswitch % under test
+\appendtoks \updateraggedskips \to \everyfontswitch % under test
\prependtoks \let\par\endgraf \to \everypagebody % see \fillinline
\appendtoks \simplestelspatieringin \to \everydefinedfont
-\def\stelfactorenin%
+\def\stelfactorenin
{\simplestelwitruimtein
\simplestelblankoin
\settopskip
\setmaxdepth}
+\def\softbreak
+ {\relax\ifhmode\hskip\parfillskip\break\fi}
+
%D The dreadful sequence \type {\bgroup} \unknown\
%D \type {\carryoverpar} \unknown\ \type {\egroup} is needed
%D when for instance sidefloats are used in combination with
%D something that starts with a group. This is because
%D otherwise the indentation as set (by the output routine)
-%D inside the group are forgotten afterwards. (I must
+%D inside the group are forgotten afterwards. (I must
%D not forget its existence).
-\global\let\carriedoverpar\relax
+\global\let\carriedoverpar\relax
\def\carryoverpar#1%
{\expanded
@@ -63,7 +66,7 @@
\leftskip \the\leftskip
\rightskip \the\rightskip}}
-%D A quick way to determine left|/|middle|/|right states
+%D A quick way to determine left|/|middle|/|right states
%D (experimental).
\setvalue{\??as\v!links }{0}
@@ -71,7 +74,7 @@
\setvalue{\??as\v!rechts}{2}
\def\setalignmentswitch#1%
- {\chardef\alignmentswitch=0\csname\??as#1\endcsname\relax}
+ {\chardef\alignmentswitch0\csname\??as#1\endcsname\relax}
%D There are two ways to influence the interline spacing. The
%D most general and often most consistent way is using
@@ -116,40 +119,50 @@
\def\presetnormallineheight%
{\edef\normallineheight{\@@itregel}%
\iflocalinterlinespace \else
- \doifdefined{\bodyfontinterlinespecs}
- {\doifsomething{\bodyfontinterlinespace}
+ \doifdefined\bodyfontinterlinespecs
+ {\doifsomething\bodyfontinterlinespace
{\edef\normallineheight{\bodyfontinterlinespace}}}%
\fi}
+\def\setupspecifiedinterlinespace[#1]%
+ {\getparameters[\??it][#1]%
+ \scratchdimen0\@@ithoogte\s!pt
+ \advance\scratchdimen 0\@@itdiepte\s!pt
+ \ifdim\scratchdimen>1\s!pt
+ \showmessage\m!layouts{10}{\@@ithoogte,\@@itdiepte}%
+ \let\@@ithoogte\strutheightfactor
+ \let\@@itdiepte\strutdepthfactor
+ \else
+ \let\strutheightfactor\@@ithoogte
+ \let\strutdepthfactor \@@itdiepte
+ \fi
+ \let\minimallinedistance\@@itafstand
+ \let\normallineheight\@@itregel % let ! ! ! ! ! ivm ex
+ \let\topskipfactor\@@itboven
+ \let\maxdepthfactor\@@itonder
+ \let\baselinegluefactor\@@itrek
+ \setfontparameters % redundant, can be \setstrut, test first
+ \updateraggedskips} % yes indeed
+
+\def\setuprelativeinterlinespace[#1]%
+ {\processallactionsinset % \regelwit = dummy !
+ [#1]
+ [ \v!aan=>\oninterlineskip,
+ \v!uit=>\offinterlineskip,
+ \v!reset=>\setfontparameters,% just \setstrut, test first
+ \s!unknown=>\assignvalue{#1}\regelwit{1.00}{1.25}{1.50}%
+ \spacing\regelwit]}
+
\def\complexstelinterliniein[#1]% \commalistelement ipv #1
{\doifassignmentelse{#1}
- {\getparameters[\??it][#1]%
- \scratchdimen=0\@@ithoogte pt
- \advance\scratchdimen by 0\@@itdiepte pt
- \ifdim\scratchdimen>1pt
- \showmessage{\m!layouts}{10}{\@@ithoogte,\@@itdiepte}%
- \let\@@ithoogte\strutheightfactor
- \let\@@itdiepte\strutdepthfactor
- \else
- \let\strutheightfactor\@@ithoogte
- \let\strutdepthfactor \@@itdiepte
- \fi
- \let\minimallinedistance\@@itafstand
- \let\normallineheight\@@itregel % let ! ! ! ! ! ivm ex
- \let\topskipfactor\@@itboven
- \let\maxdepthfactor\@@itonder
- \let\baselinegluefactor\@@itrek
- \setfontparameters % redundant, can be \setstrut, test first
- \updateraggedskips} % yes indeed
- {\processallactionsinset % \regelwit = dummy !
- [#1]
- [ \v!aan=>\oninterlineskip,
- \v!uit=>\offinterlineskip,
- \v!reset=>\setfontparameters,% just \setstrut, test first
- \s!unknown=>\assignvalue{#1}{\regelwit}{1.00}{1.25}{1.50}%
- \spacing{\regelwit}]}}
+ \setupspecifiedinterlinespace\setuprelativeinterlinespace[#1]}
+
+\def\setuplocalinterlinespace[#1]%
+ {\localinterlinespacetrue
+ \stelinterliniein[#1]%
+ \localinterlinespacefalse}
-\def\simplestelinterliniein%
+\def\simplestelinterliniein
{\localinterlinespacetrue
\setfontparameters
\updateraggedskips % funny one here
@@ -179,7 +192,7 @@
\def\skipfactor {.75}
\def\skipgluefactor{.25}
-\def\normalskipamount%
+\def\normalskipamount
{\openlineheight
\ifgridsnapping \else \ifblankoflexibel
\!!plus\skipgluefactor\openlineheight
@@ -191,44 +204,44 @@
\def\deblankoskip{\skipfactor\regelafstand}
-\def\laatsteblankoskip%
+\def\laatsteblankoskip
{\blankoskip}
-\def\geenblanko%
+\def\geenblanko
{\removelastskip}
-\def\currentblanko%
+\def\currentblanko
{\v!groot}
-
-\def\oldprevdepth {\prevdepth}%
+
+\def\oldprevdepth {\prevdepth}
\def\newprevdepth {-1001pt}
\def\mindimen {1sp} % was: 0.00002pt
-
+
\newif\iflokaalblankovast
\newif\iflokaalblankoflexibel
\newif\iffuzzyvskip
-%%%% pas op, wordt ook in core-pos gebruikt
+%%%% pas op, wordt ook in core-pos gebruikt
\def\doassignsomeskip#1\to#2% ook nog \v!halveregel+fuzzysnap
- {\doifelse{#1}{\v!regel}
+ {\doifelse{#1}\v!regel
{#2\openlineheight}
{\ifgridsnapping
\assigndimension{#1}{#2}%
- {.25\openlineheight}{.5\openlineheight}{\openlineheight}%
+ {.25\openlineheight}{.5\openlineheight}\openlineheight
\else
\assigndimension{#1}{#2}%
- {\smallskipamount}{\medskipamount}{\bigskipamount}%
+ \smallskipamount\medskipamount\bigskipamount
\fi}}
-%%%% dus niet weg
+%%%% dus niet weg
% replaced
%
-% \def\dosingleblanko#1%
-% {\doassignsomeskip#1\to\blankoskipamount
+% \def\dosingleblanko#1%
+% {\doassignsomeskip#1\to\blankoskipamount
% \global\advance\blankoskip \blankoskipamount}
-%
+%
% \def\doblanko#1%
% {\processallactionsinset % is maar een actie
% [#1]
@@ -248,7 +261,7 @@
% \v!halveregel=>\ifgridsnapping\global\fuzzyvskiptrue\fi
% \global\advance\blankoskip by .5\lineheight,
% \s!unknown=>\doindirectblanko{#1}]}
-%
+%
% \def\docomplexdoblanko[#1]% pas op \relax's zijn nodig ivm volgende \if
% {\global\blankoresetfalse
% \global\blankoblokkeerfalse
@@ -266,7 +279,7 @@
% \ifblankobuiten
% \else
% \par
-% \ifvmode %in pos fonts gaat dit mis
+% \ifvmode %in pos fonts gaat dit mis
% \ifblankoforceer%\ifdim\prevdepth>\zeropoint\else
% % -1000pt signals top of page or column (\ejectcolumn)
% \vbox{\strut}\kern-\lineheight
@@ -307,13 +320,13 @@
% \fi
% \fi
% \ifblankoflexibel \else
-% \blankoskip=1\blankoskip
+% \blankoskip=1\blankoskip
% \fi
-% \iflokaalblankovast
-% \blankoskip=1\blankoskip
+% \iflokaalblankovast
+% \blankoskip=1\blankoskip
% \fi
-% \iflokaalblankoflexibel
-% \blankoskip=1\blankoskip
+% \iflokaalblankoflexibel
+% \blankoskip=1\blankoskip
% \!!plus\skipgluefactor\blankoskip
% \!!minus\skipgluefactor\blankoskip
% \fi
@@ -338,7 +351,7 @@
% \fi
% \global\fuzzyvskipfalse
% \presetindentation}
-%
+%
% \def\complexdodoblanko[#1]%
% {\flushnotes
% \ifopelkaar
@@ -350,7 +363,7 @@
% \else
% \expanded{\docomplexdoblanko[#1]}% \expanded = nieuw
% \fi}
-%
+%
% % old
% %
% % \def\doindirectblanko#1%
@@ -367,7 +380,7 @@
% % {\expanded{\complexdodoblanko[#1]}}
% % {\doindirectblanko{#1}}}}
% %
-% % new, more robust
+% % new, more robust
% %
% % \def\doindirectblanko#1%
% % {\edef\ascii{#1}\convertcommand\ascii\to\ascii
@@ -376,9 +389,9 @@
% % \else
% % \expandafter\complexdoblanko\expandafter[\csname\??bo\ascii\endcsname]%
% % \fi}
-% %
+% %
% % even more robust
-%
+%
% \def\doindirectblanko#1%
% {\edef\ascii{#1}\convertcommand\ascii\to\ascii
% \ifundefined{\??bo\ascii}% <-etex \expandafter\ifx\csname\??bo#1\endcsname
@@ -389,15 +402,15 @@
% \def\TestBlank[#1]%
% {blank : {\convertargument#1\to\ascii\tttf\ascii}\blanko[#1]}
-%
+%
% \defineblank[whatever][2*big,2*big]
% \TestBlank[]
% \TestBlank[big]
% \TestBlank[2*big]
% \TestBlank[big,big,2*big]
% \TestBlank[big]
-% \TestBlank[whatever]
-% \TestBlank[2*big,whatever]
+% \TestBlank[whatever]
+% \TestBlank[2*big,whatever]
% \TestBlank[3\lineheight]
\def\addblankskip#1#2#3%
@@ -427,7 +440,7 @@
\defineblankmethod [\v!back ]{\geenblanko}
\defineblankmethod [\v!halveregel]{\ifgridsnapping\global\fuzzyvskiptrue\fi
\global\advance\blankoskip .5\lineheight}
-% happens often
+% happens often
\defineblankmethod [2*\v!groot]{\addblankskip+{2\bigskipamount}{2\openlineheight}}
@@ -438,9 +451,9 @@
\def\doblanko#1%
{\edef\ascii{#1}\convertcommand\ascii\to\ascii
\ifx\ascii\empty\else
- \ifcsname\??bo\??bo\ascii\endcsname % internal def
- \csname\??bo\??bo\ascii\endcsname
- \else\ifcsname\??bo\ascii\endcsname % user def / slow
+ \ifcsname\??bo\??bo\ascii\endcsname % internal def
+ \csname\??bo\??bo\ascii\endcsname
+ \else\ifcsname\??bo\ascii\endcsname % user def / slow
\@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblanko\relax
\else
\dorepeatwithcommand[#1]\redoblanko
@@ -450,9 +463,9 @@
\def\redoblanko#1%
{\edef\ascii{#1}\convertcommand\ascii\to\ascii
\ifx\ascii\empty\else
- \ifcsname\??bo\??bo\ascii\endcsname % internal def
- \csname\??bo\??bo\ascii\endcsname
- \else\ifcsname\??bo\ascii\endcsname % user def / slow
+ \ifcsname\??bo\??bo\ascii\endcsname % internal def
+ \csname\??bo\??bo\ascii\endcsname
+ \else\ifcsname\??bo\ascii\endcsname % user def / slow
\@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblanko\relax
\else
\global\advance\blankoskip#1\relax
@@ -461,7 +474,7 @@
\endETEX
-\beginTEX
+\beginTEX
\def\doblanko#1%
{\edef\ascii{#1}\convertcommand\ascii\to\ascii
@@ -472,8 +485,8 @@
\else
\@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblanko\relax
\fi
- \else
- \csname\??bo\??bo\ascii\endcsname
+ \else
+ \csname\??bo\??bo\ascii\endcsname
\fi
\fi}
@@ -487,7 +500,7 @@
\@EA\rawprocesscommalist\@EA[\csname\??bo\ascii\endcsname]\doblanko\relax
\fi
\else
- \csname\??bo\??bo\ascii\endcsname
+ \csname\??bo\??bo\ascii\endcsname
\fi
\fi}
@@ -513,10 +526,12 @@
\fi
\next}
-\def\nocomplexdoblanko[#1]%
- {% evt blokkeerfalse
+\def\nocomplexdoblanko[#1]%
+ {% evt blokkeerfalse
\ifmmode\else\par\fi}
+% Overloaded in cont-new!
+
\def\docomplexdoblanko[#1]% pas op \relax's zijn nodig ivm volgende \if
{\global\blankoresetfalse
\global\blankoblokkeerfalse
@@ -528,19 +543,20 @@
\blankobuitenfalse
\expanded{\rawprocesscommalist[#1]}\doblanko
\ifdim\blankoskip=\zeropoint\relax
- \iflokaalblankoflexibel
- \doglobal\advance\blankoskip \currentblanko
- \else\iflokaalblankovast
- \doglobal\advance\blankoskip \currentblanko
+ \iflokaalblankoflexibel
+ \doglobal\advance\blankoskip \currentblanko
+ \else\iflokaalblankovast
+ \doglobal\advance\blankoskip \currentblanko
\fi\fi
\fi
\ifblankobuiten
\else
\par
- \ifvmode %in pos fonts gaat dit mis
+ \ifvmode %in pos fonts gaat dit mis
\ifblankoforceer%\ifdim\prevdepth>\zeropoint\else
% -1000pt signals top of page or column (\ejectcolumn)
- \vbox{\strut}\kern-\lineheight
+ \verticalstrut
+ \kern-\lineheight
\fi
\ifblankoblokkeer
\global\doeblankofalse
@@ -578,17 +594,18 @@
\fi
\fi
\ifblankoflexibel \else
- \blankoskip1\blankoskip
+ \blankoskip1\blankoskip
\fi
- \iflokaalblankovast
- \blankoskip1\blankoskip
+ \iflokaalblankovast
+ \blankoskip1\blankoskip
\fi
- \iflokaalblankoflexibel
- \blankoskip1\blankoskip
+ \iflokaalblankoflexibel
+ \blankoskip1\blankoskip
\!!plus\skipgluefactor\blankoskip
\!!minus\skipgluefactor\blankoskip
\fi
\ifdim\prevdepth=\newprevdepth
+ % blokkeer
\else
\iffuzzyvskip
\removelastfuzzyvskip
@@ -610,39 +627,39 @@
\global\fuzzyvskipfalse
\presetindentation}
-%D For a long time we had:
+%D For a long time we had:
%D
-%D \starttypen
+%D \starttypen
%D \def\simpledoblanko%
%D {\doifelse{\currentwitruimte}{\v!geen}
%D {\blanko[\currentblanko]}
%D {\blanko[\currentwitruimte]}}
%D \stoptypen
%D
-%D But Berend de Boer wanted more control, so now we have:
+%D But Berend de Boer wanted more control, so now we have:
-\def\simpledoblanko % ...
+\def\simpledoblanko % ...
{\doifelse\currentwitruimte\v!geen
{\blanko[\currentblanko]}
{\blanko[\s!default]}}
%D Another useful definition would be:
%D
-%D \starttypen
+%D \starttypen
%D \definieerblanko
%D [\s!default]
%D [\v!groot]
%D \stoptypen
\def\dostelblankoin#1% amount are an plain inheritance
- {\bigskipamount=#1\relax
- \ifblankoflexibel \else
- \bigskipamount=1\bigskipamount
+ {\bigskipamount#1\relax
+ \ifblankoflexibel \else
+ \bigskipamount1\bigskipamount
\fi
\medskipamount \bigskipamount \divide\medskipamount 2
\smallskipamount\bigskipamount \divide\smallskipamount 4 }%
-\def\complexstelblankoin[#1]% more \let's
+\def\complexstelblankoin[#1]% more \let's
{\ifgridsnapping
\blankoflexibelfalse
\else
@@ -666,11 +683,11 @@
\edef\deblankoskip{\regelafstand}%
\dostelblankoin\deblankoskip
\fi
- \def\currentblanko{\v!groot}%
+ \let\currentblanko\v!groot % was \def, why ?
\let\deblanko\v!groot,
- \v!middel=>\def\currentblanko{\v!middel}%
+ \v!middel=>\let\currentblanko\v!middel % was \def, why ?
\let\deblanko\v!middel,
- \v!klein=>\def\currentblanko{\v!klein}%
+ \v!klein=>\let\currentblanko\v!klein % was \def, why ?
\let\deblanko\v!klein,
\v!normaal=>\dostelblankoin\deblankoskip
\let\deblanko\v!groot,
@@ -694,7 +711,7 @@
{\ifgridsnapping
\blankoflexibelfalse
\fi
- \dostelblankoin{\deblankoskip}%
+ \dostelblankoin\deblankoskip
\let\deblanko\v!groot
\simplestelwitruimtein}
@@ -712,9 +729,9 @@
\def\savecurrentblanko%
{\edef\restorecurrentblanko%
- {\bigskipamount=\the\bigskipamount
- \medskipamount=\the\medskipamount
- \smallskipamount=\the\smallskipamount
+ {\bigskipamount\the\bigskipamount
+ \medskipamount\the\medskipamount
+ \smallskipamount\the\smallskipamount
\noexpand\def\noexpand\currentblanko{\currentblanko}%
\ifblankoflexibel
\noexpand\blankoflexibeltrue
@@ -725,7 +742,7 @@
\def\inhibitblank% the fast, local way
{\endgraf\ifvmode\prevdepth\newprevdepth\fi}
-%D Now.
+%D Now.
\definieerblanko [\s!default] [\v!wit]
\definieerblanko [\v!hoogte] [\strutheight]
@@ -752,7 +769,7 @@
\simplestelinspringenin]}
\def\simplestelinspringenin
- {\assigndimension{\currentvoorwit}{\voorwit}{1em}{1.5em}{2em}%
+ {\assigndimension\currentvoorwit\voorwit{1em}{1.5em}{2em}%
\parindent\voorwit\relax}
\def\doinspringen[#1]% too many relaxes
@@ -780,11 +797,11 @@
\sfcode`\?#1 \sfcode`\!#1\relax
\sfcode`\:#1 \sfcode`\;#1\relax}
-\def\frenchspacing {\dofrenchspacing{1000}}
-\def\newfrenchspacing{\dofrenchspacing{1050}}
+\def\frenchspacing {\dofrenchspacing{1000}}
+\def\newfrenchspacing{\dofrenchspacing{1050}}
\def\nonfrenchspacing
- {\sfcode`\.3000 \sfcode`\,1250
+ {\sfcode`\.3000 \sfcode`\,1250
\sfcode`\?3000 \sfcode`\!3000
\sfcode`\:2000 \sfcode`\;1500 }
@@ -813,16 +830,16 @@
\def\fixedspace {\hskip.5em\relax}
\def\removelastspace {\ifhmode\unskip\fi}
\def\nospace {\removelastspace\ignorespaces}
-\def\removeunwantedspaces{\ifhmode\unskip\unskip\unskip\unskip\fi}
+\def\removeunwantedspaces{\ifhmode\unskip\unskip\unskip\unskip\unskip\fi}
-% better, but not done:
-%
+% better, but not done:
+%
% \def\removelastspace
% {\ifhmode \ifdim\lastskip=\spaceamount\relax
% \unskip
% \fi \fi}
%
-% due to backward compability
+% due to backward compability
\let\spatie \space
\let\hardespatie\fixedspace
@@ -835,7 +852,7 @@
{\nointerlineskip
\vskip#1 }
-%D A couple of plain macros:
+%D A couple of plain macros:
\ifx\thinspace\undefined
@@ -843,7 +860,7 @@
\def\negthinspace{\kern-.16667em }
\def\enspace {\kern .5em }
-\fi
+\fi
\ifx\quad\undefined
@@ -851,7 +868,9 @@
\def\quad {\hskip 1em\relax}
\def\qquad {\hskip 2em\relax}
-\fi
+\fi
+
+\let\emspace\quad
\ifx\smallskip\undefined
@@ -859,7 +878,7 @@
\def\medskip {\vskip\medskipamount}
\def\bigskip {\vskip\bigskipamount}
-\fi
+\fi
\ifx\allowbreak\undefined
@@ -869,7 +888,7 @@
\def\filbreak {\par\vfil\penalty-200\vfilneg}
\def\goodbreak {\par\penalty-500 }
-\fi
+\fi
%D Made slightly more readable:
@@ -877,35 +896,35 @@
\def\vglue {\afterassignment\dovglue\scratchskip=}
\def\hglue {\afterassignment\dohglue\scratchskip=}
- \def\topglue{\nointerlineskip\vglue-\topskip\vglue}
+ \def\topglue{\nointerlineskip\vglue-\topskip\vglue}
\def\dovglue
- {\par
- \scratchdimen\prevdepth
+ {\par
+ \scratchdimen\prevdepth
\hrule\!!height\zeropoint
- \nobreak\vskip\scratchskip
+ \nobreak\vskip\scratchskip
\prevdepth\scratchdimen}
\def\dohglue
- {\leavevmode
- \scratchcounter\spacefactor
+ {\leavevmode
+ \scratchcounter\spacefactor
\vrule\!!width\zeropoint
- \nobreak\hskip\scratchskip
+ \nobreak\hskip\scratchskip
\spacefactor\scratchcounter}
-\fi
+\fi
-\ifx\eject\undefined
+\ifx\eject\undefined
\def\eject{\par\break}
-\fi
+\fi
\ifx\supereject\undefined
\def\supereject{\par\penalty-\@MM}
-\fi
+\fi
\ifx\dosupereject\undefined
@@ -917,9 +936,9 @@
\vfill\supereject
\fi}
-\fi
+\fi
-%D We adapt plain's \type {\removelastskip} a bit:
+%D We adapt plain's \type {\removelastskip} a bit:
\ifx\removelastskip\undefined
@@ -928,7 +947,7 @@
\vskip-\lastskip
\fi \fi}
-\fi
+\fi
\ifx\smallbreak\undefined
@@ -956,7 +975,7 @@
\bigskip
\fi}
-\fi
+\fi
\newskip\tussenwit \tussenwit\zeropoint
@@ -997,14 +1016,14 @@
\fi}%
\ifgridsnapping
\witruimteflexibelfalse
- \tussenwit=1\tussenwit
+ \tussenwit1\tussenwit
\ifdim\tussenwit>\zeropoint
- \tussenwit=\baselineskip
+ \tussenwit\baselineskip
\fi
\else
- \ifwitruimteflexibel \else \tussenwit=1\tussenwit \fi
+ \ifwitruimteflexibel \else \tussenwit1\tussenwit \fi
\fi
- \parskip=\tussenwit}
+ \parskip\tussenwit}
\def\simplestelwitruimtein% == snelle \stelwitruimtein[\s!default]
{\doifnot\currentwitruimte\v!geen\stelwitruimteopnieuwin
@@ -1020,8 +1039,8 @@
\def\savecurrentwitruimte%
{\edef\restorecurrentwitruimte%
- {\tussenwit=\the\tussenwit
- \parskip=\the\parskip
+ {\tussenwit\the\tussenwit
+ \parskip\the\parskip
\noexpand\def\noexpand\currentwitruimte{\currentwitruimte}%
\ifwitruimteflexibel
\noexpand\witruimteflexibeltrue
@@ -1064,47 +1083,47 @@
\def\noparskipsignal {0.00001pt}
\def\lastdoneparskip {0pt}
-\def\startopelkaar%
+\def\startopelkaar
{\dosingleempty\dostartopelkaar}
\def\dostartopelkaar[#1]% nesting afvangen
{\par
\ifvmode
- \edef\lastdoneparskip{\the\lastskip}%
-\edef\lastdoneprevdepth{\the\prevdepth}% zeer recent toegevoegd
- \ifdim\prevdepth=-1000pt % toegevoegd omdat binnen
- \else % een vbox een extra skip
- \witruimte % ongewenst is; dit kan
-\baselinecorrection %% zie in \plaatsregister[n=1]
+ \edef\lastdoneparskip {\the\lastskip}%
+ \edef\lastdoneprevdepth{\the\prevdepth}% zeer recent toegevoegd
+ \ifdim\prevdepth=-\thousandpoint % toegevoegd omdat binnen
+ \else % een vbox een extra skip
+ \witruimte % ongewenst is; dit kan
+ \baselinecorrection %% zie in \plaatsregister[n=1]
\vskip\noparskipsignal % waarschijnlijk ook in
\fi % blanko blokkeer
\bgroup
\doifelse{#1}\v!blanko
\opelkaarfalse
\opelkaartrue
- \blanko[\v!blokkeer]
- \stelwitruimtein[\v!geen]
+ \blanko[\v!blokkeer] % dit is nog niet ok, gaat fout
+ \stelwitruimtein[\v!geen] % bovenin vtop (dwz, baseline)
\fi}
-\def\stopopelkaar%
+\def\stopopelkaar
{\par
-\ifvmode
- \egroup
- \ifdim\lastskip=\noparskipsignal\relax
- \removelastskip
- \geenwitruimte
- \vskip-\lastdoneparskip
- \vskip+\lastdoneparskip
-\prevdepth-\lastdoneprevdepth % zeer recent toegevoegd
- \fi
-\fi}
+ \ifvmode
+ \egroup
+ \ifdim\lastskip=\noparskipsignal\relax
+ \removelastskip
+ \geenwitruimte
+ \vskip-\lastdoneparskip
+ \vskip+\lastdoneparskip
+ \prevdepth-\lastdoneprevdepth % zeer recent toegevoegd
+ \fi
+ \fi}
-\def\startvanelkaar%
+\def\startvanelkaar
{\blanko
\leavevmode
\bgroup}
-\def\stopvanelkaar%
+\def\stopvanelkaar
{\egroup
\blanko}
@@ -1125,25 +1144,27 @@
{\bgroup
\processaction
[#1]
- [ \v!blanko=>\let\dorondomregelcorrectie=\blanko,
- \s!default=>\let\dorondomregelcorrectie=\relax,
+ [ \v!blanko=>\let\dorondomregelcorrectie\blanko,
+ \s!default=>\let\dorondomregelcorrectie\relax,
\s!unknown=>{\def\dorondomregelcorrectie{\blanko[#1]}}]%
\dorondomregelcorrectie
\startbaselinecorrection
\offbaselinecorrection}
-\def\stopregelcorrectie%
+\def\stopregelcorrectie
{\stopbaselinecorrection
\dorondomregelcorrectie
\egroup}
-\def\corrigeerwitruimte%
+\def\corrigeerwitruimte
{\dowithnextbox
{\startbaselinecorrection
\box\nextbox
\stopbaselinecorrection}%
\vbox}
+\def\verticalstrut{\vbox{\hsize\zeropoint\strut}}
+
\def\showstruts%
{\setteststrut}
@@ -1199,7 +1220,7 @@
\def\baselinegluefactor {0}
\def\normallineheight {\baselinefactor ex}
-\def\minimallinedistance {\lineskip}
+\def\minimallinedistance {\lineskip}
\def\strutheight {0pt}
\def\strutdepth {0pt}
@@ -1219,6 +1240,7 @@
\newdimen\globalbodyfontsize
\globalbodyfontsize=12pt
\fi
+
\ifx\normalizedbodyfontsize\undefined
\def\normalizedbodyfontsize{12pt}
\fi
@@ -1227,16 +1249,16 @@
% korpsgrootte 12pt is en (2) de fonts nog niet geladen zijn
% en de instellingen bij het laden nogmaals plaatsvinden.
-\def\topskipcorrection%
+\def\topskipcorrection
{\ifdim\topskip>\openstrutheight
- % == \vskip\topskipgap
+ % == \vskip\topskipgap
\vskip\topskip
\vskip-\openstrutheight
\fi
- \vbox{\strut}
+ \verticalstrut
\vskip-\openlineheight}
-\def\settopskip% the extra test is needed for the lbr family
+\def\settopskip % the extra test is needed for the lbr family
{\topskip\systemtopskipfactor\globalbodyfontsize
\ifgridsnapping \else
\ifr@ggedbottom\!!plus5\globalbodyfontsize\fi
@@ -1248,16 +1270,18 @@
\topskip\strutheightfactor\openlineheight\relax
\fi}
-\def\setmaxdepth%
+\def\setmaxdepth
{\maxdepth\systemmaxdepthfactor\globalbodyfontsize}
-\def\normalbaselines%
+\def\normalbaselines
{\baselineskip\normalbaselineskip
\lineskip\normallineskip
\lineskiplimit\normallineskiplimit}
-\def\setnormalbaselines%
- {\lineheight\normallineheight
+\def\setnormalbaselines
+ {\ifdim\normallineheight>\zeropoint
+ \lineheight\normallineheight
+ \fi
\openlineheight\spacingfactor\lineheight
\openstrutheight\strutheightfactor\openlineheight
\openstrutdepth \strutdepthfactor \openlineheight
@@ -1275,8 +1299,8 @@
\def\spacing#1%
{\ifgridsnapping
- %\doifnot{#1}{1}{\showmessage{\m!layouts}{11}{#1}}%
- \ifdim#1pt=1pt\else\showmessage{\m!layouts}{11}{#1}\fi
+ %\doifnot{#1}{1}{\showmessage\m!layouts{11}{#1}}%
+ \ifdim#1\s!pt=1\s!pt\else\showmessage\m!layouts{11}{#1}\fi
\edef\spacingfactor{1}%
\else
\edef\spacingfactor{#1}%
@@ -1296,12 +1320,12 @@
%
% \def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
%
-% could be:
+% could be:
%
% \def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
-\ifx\strutbox\undefined
-
+\ifx\strutbox\undefined
+
\newbox\strutbox
\setbox\strutbox=\hbox{\vrule height8.5pt depth3.5pt width\z@}
@@ -1309,9 +1333,9 @@
%\def\strut{\relax\ifmmode\copy\strutbox\else\unhcopy\strutbox\fi}
\def\strut{\relax\ifmmode\copy\else\unhcopy\fi\strutbox}
-\fi
+\fi
-\let\normalstrut=\strut
+\let\normalstrut=\strut
% The double \hbox construction enables us to \backtrack
% boxes.
@@ -1328,27 +1352,30 @@
% \!!depth \strutdepth
% \normalkern-\strutwidth}}}
-\def\setstrut%
+\def\setstrut
{\setstrutdimen\strutheight\strutheightfactor\spacingfactor
\setstrutdimen\strutdepth \strutdepthfactor \spacingfactor
\dosetstrut}
\def\setcharstrut#1%
- {\setbox\strutbox\hbox{#1}%
+ {\setbox\strutbox\hbox{#1}%
\edef\strutheight{\the\ht\strutbox}%
\edef\strutdepth {\the\dp\strutbox}%
\dosetstrut}
+\def\setfontstrut
+ {\setcharstrut{(}}
+
\def\setcapstrut% could be M, but Q has descender
- {\setcharstrut{Q}}
+ {\setcharstrut{Q}}
-%D Centered looks nicer:
+%D Centered looks nicer:
\def\dosetstrut%
{\let\strut\normalstrut
\setbox\strutbox\normalhbox
{\normalhbox to \zeropoint
- {% \hss % new, will be option
+ {% \hss % new, will be option
\vrule
\!!width \strutwidth
\!!height\strutheight
@@ -1358,24 +1385,26 @@
%D Sometimes a capstrut comes in handy
%D
%D \starttabulatie[|Tl|l|l|]
-%D \NC yes \NC normal strut \NC {\showstruts\setupstrut[ja]\strut} \NC \NR
-%D \NC no \NC no strut \NC {\showstruts\setupstrut[nee]\strut} \NC \NR
-%D \NC kap \NC a capital strut (i.e. Q) \NC {\showstruts\setupstrut[kap]\strut} \NC \NR
-%D \NC A B \unknown \NC a character strut (e.g. A) \NC {\showstruts\setupstrut[A]\strut} \NC \NR
-%D \NC \NC a normal strut \NC {\showstruts\setupstrut\strut} \NC \NR
+%D \NC yes \NC normal strut \NC {\showstruts\setupstrut[ja]\strut} \NC \NR
+%D \NC no \NC no strut \NC {\showstruts\setupstrut[nee]\strut} \NC \NR
+%D \NC kap \NC a capital strut (i.e. Q) \NC {\showstruts\setupstrut[kap]\strut} \NC \NR
+%D \NC A B \unknown \NC a character strut (e.g. A) \NC {\showstruts\setupstrut[A]\strut} \NC \NR
+%D \NC \NC a normal strut \NC {\showstruts\setupstrut\strut} \NC \NR
%D \stoptabulatie
\def\setupstrut%
{\dosingleempty\dosetupstrut}
-\def\dosetupstrut[#1]% yet undocumented
+\def\dosetupstrut[#1]% yet undocumented, todo: fontstrut
{\processaction
[#1]
[ \v!ja=>\setstrut,
\v!nee=>\setnostrut,
\v!kap=>\setcapstrut,
+ \v!passend=>\setfontstrut,
+ \v!regel=>\setstrut,
\s!default=>\setstrut,
- \s!unknown=>\setcharstrut{\commalistelement}]}
+ \s!unknown=>\setcharstrut\commalistelement]}
\def\setteststrut%
{\def\strutwidth{.8pt}%
@@ -1383,16 +1412,16 @@
\def\begstrut%
{%relax\ifdim\ht\strutbox=\zeropoint\else
- \relax\ifcase\ht\strutbox\else
+ \relax\ifcase\ht\strutbox\else
\strut
\normalpenalty\@M % \!!tenthousand
\normalhskip\zeropoint
\ignorespaces
\fi}
-\def\endstrut%
+\def\endstrut
{%relax\ifhmode\ifdim\ht\strutbox=\zeropoint\else
- \relax\ifhmode\ifcase\ht\strutbox\else
+ \relax\ifhmode\ifcase\ht\strutbox\else
\removeunwantedspaces
\normalpenalty\@M % \!!tenthousand
\normalhskip\zeropoint
@@ -1401,8 +1430,8 @@
\newbox\nostrutbox \setbox\nostrutbox\normalhbox{\normalhbox{}}
-\def\setnostrut%
- {\setbox\strutbox\copy\nostrutbox
+\def\setnostrut
+ {\setbox\strutbox\copy\nostrutbox
\let\strut\empty
\let\endstrut\empty
\let\begstrut\empty}
@@ -1430,7 +1459,7 @@
\let\pseudoendstrut\removeunwantedspaces
-\def\resetteststrut%
+\def\resetteststrut
{\let\strutwidth\!!zeropoint
\setstrut}
@@ -1438,7 +1467,7 @@
\def\setfontparameters{\the\everybodyfont}
\fi
-%D Handy:
+%D Handy:
\def\baselinedistance{\the\lineheight}
@@ -1447,7 +1476,7 @@
%D why|>| this assignment gives troubles in for instance the
%D visual debugger.
-%D The plain ones:
+%D The plain ones:
\def\offinterlineskip
{\baselineskip-1000\p@
@@ -1459,11 +1488,11 @@
\let\normaloffinterlineskip=\offinterlineskip % knuth's original
-%D My own one:
+%D My own one:
-\def\offinterlineskip%
+\def\offinterlineskip
{\ifdim\baselineskip>\zeropoint
- \edef\oninterlineskip%
+ \edef\oninterlineskip
{\baselineskip\the\baselineskip
\lineskip\the\lineskip
\lineskiplimit\the\lineskiplimit
@@ -1475,7 +1504,7 @@
\let\oninterlineskip=\relax
-\def\leaveoutervmode%
+\def\leaveoutervmode
{\ifvmode\ifinner\else
\leavevmode
\fi\fi}
@@ -1516,6 +1545,7 @@
[ \v!links=>\global\advance\linkssmaller \@@sllinks,
\v!midden=>\global\advance\middensmaller \@@slmidden,
\v!rechts=>\global\advance\rechtssmaller \@@slrechts,
+ \v!geen=>,
\s!unknown=>\global\advance\middensmaller \commalistelement]}
\def\dosmaller[#1]%
@@ -1524,6 +1554,7 @@
[ \v!links=>\global\advance\linkssmaller \@@sllinks,
\v!midden=>\global\advance\middensmaller \@@slmidden,
\v!rechts=>\global\advance\rechtssmaller \@@slrechts,
+ \v!geen=>,% handy for delimitedtexts
\s!unknown=>{\herhaalmetcommando[#1]\dosinglesmaller}]}
\def\complexstartsmaller[#1]%
@@ -1536,20 +1567,34 @@
\advance\leftskip \linkssmaller
\advance\rightskip \rechtssmaller
\advance\leftskip \middensmaller
- \advance\rightskip \middensmaller}
+ \advance\rightskip \middensmaller
+ \seteffectivehsize}
-\def\simplestartsmaller%
+\def\simplestartsmaller
{\startsmaller[\v!midden]}
\definecomplexorsimple\startsmaller
-\def\stopsmaller%
+\def\stopsmaller
{\par % else skips forgotten
\egroup}
-\def\stelsmallerin%
+\def\stelsmallerin
{\dodoubleargument\getparameters[\??sl]}
+\newdimen\@@effectivehsize \def\effectivehsize {\hsize}
+\newdimen\@@effectiveleftskip \def\effectiveleftskip {\leftskip}
+\newdimen\@@effectiverightskip \def\effectiverightskip{\rightskip}
+
+\def\seteffectivehsize
+ {\setlocalhsize
+ \@@effectivehsize \localhsize
+ \@@effectiveleftskip \leftskip
+ \@@effectiverightskip \rightskip
+ \let\effectivehsize \@@effectivehsize
+ \let\effectiveleftskip \@@effectiveleftskip
+ \let\effectiverightskip\@@effectiverightskip}
+
\def\dodefinieerhbox[#1][#2]%
{\setvalue{hbox#1}##1%
{\hbox to #2{\begstrut##1\endstrut\hss}}}
@@ -1562,14 +1607,9 @@
\let\\=\endgraf
\forgetall#1\let\next=}
-\def\lbox%
- {\lrcbox\raggedleft}
-
-\def\rbox%
- {\lrcbox\raggedright}
-
-\def\cbox%
- {\lrcbox\raggedcenter}
+\def\lbox{\lrcbox\raggedleft}
+\def\rbox{\lrcbox\raggedright}
+\def\cbox{\lrcbox\raggedcenter}
\def\dosetraggedvbox#1%
{\processaction
@@ -1602,10 +1642,10 @@
% \s!default=>\def\raggedcommand{\raggedcenter},
% \s!unknown=>\let\raggedcommand\relax]}
-\def\dosetraggedcommand#1%
+\def\dosetraggedcommand#1%
{\expanded{\dodosetraggedcommand{#1}}}
-
-% \def\dodosetraggedcommand#1%
+
+% \def\dodosetraggedcommand#1%
% {\doifinsetelse{\v!ruim} {#1}{\!!doneatrue}{\!!doneafalse}%
% \doifinsetelse{\v!breed}{#1}{\!!donebtrue}{\!!donebfalse}%
% \let\raggedcommand\relax
@@ -1629,17 +1669,17 @@
% \fi\fi
% \!!donecfalse % {\v!midden,\v!midden}
% \else
-% \let\raggedbottomcommand\vfilll % bonus, pretty strong
-% \let\raggedtopcommand \vfilll % used with \framed for
+% \let\raggedbottomcommand\vfilll % bonus, pretty strong
+% \let\raggedtopcommand \vfilll % used with \framed for
% \fi, % instance in tables
-% \v!hoog=>\let\raggedbottomcommand\vfilll, % and since we lack a
+% \v!hoog=>\let\raggedbottomcommand\vfilll, % and since we lack a
% \v!laag=>\let\raggedtopcommand \vfilll, % proper keyword, but
-% \v!laho=>\let\raggedbottomcommand\vfilll % we do support the
+% \v!laho=>\let\raggedbottomcommand\vfilll % we do support the
% \let\raggedtopcommand \vfilll, % ugly laho (lohi)
% \v!nee=>\def\raggedcommand{\raggedright},
% \v!ja=>\let\raggedcommand\notragged, % was \relax
% \v!normaal=>\let\raggedcommand\notragged]} % was \relax
-%
+%
% much faster and important since TABLE uses them a lot:
\def\dodosetraggedcommand#1% beware: #1=empty is ignored, keep that!
@@ -1722,7 +1762,7 @@
% Om ongewenste witruimte te voorkomen kan met \dosomebreak{\break}
% een \penalty v¢¢r witruimte worden geplaatst.
-\def\removelastskip% a redefinition of plain
+\def\removelastskip% a redefinition of plain
{\ifvmode\ifdim\lastskip=\zeropoint\else\vskip-\lastskip\fi\fi}
\def\dosomebreak#1%
@@ -1789,10 +1829,10 @@
\def\indentation%
{\ifvmode \ifdim\parindent=\zeropoint \else
- % was : \hskip\parindent
- % can be: \indent
- % but we test:
- \noindent\hskip\parindent
+ % was : \hskip\parindent
+ % can be: \indent
+ % but we test:
+ \noindent\hskip\parindent
\fi \fi}
% vergeten
@@ -1818,26 +1858,29 @@
\voorwit\zeropoint
\parindent\zeropoint\relax}
-\def\forgetparskip%
+\def\forgetparskip
{\let\currentwitruimte\v!geen
\tussenwit\zeropoint
\parskip\zeropoint\relax}
-\def\forgetbothskips%
- {\tolerance=1500
+\def\forgetbothskips
+ {\tolerance1500
\leftskip\zeropoint
\rightskip\zeropoint\relax}
-\def\forgetspacing%
+\def\forgetspacing
{\emergencystretch\zeropoint}
-\def\forgetall%
+\def\forgetall
{\the\everyforgetall}
-\appendtoks \forgetragged \to \everyforgetall
-\appendtoks \forgetparskip \to \everyforgetall
-\appendtoks \forgetparindent \to \everyforgetall
-\appendtoks \forgetbothskips \to \everyforgetall
+\newif\ifforgotten % rather good signal for inner
+
+\appendtoks \forgottentrue \to \everyforgetall
+\appendtoks \forgetragged \to \everyforgetall
+\appendtoks \forgetparskip \to \everyforgetall
+\appendtoks \forgetparindent \to \everyforgetall
+\appendtoks \forgetbothskips \to \everyforgetall
\appendtoks \forgetspacing \to \everyforgetall % i.v.m. funny spacing in pagebody
\appendtoks \everypar\emptytoks \to \everyforgetall % indeed!
@@ -1845,7 +1888,7 @@
{\vbox#1\bgroup
\forgetparskip
\setlocalhsize
- \hsize=\localhsize
+ \hsize\localhsize
\forgetparindent
\forgetbothskips
\forgeteverypar
@@ -1863,25 +1906,27 @@
% {\let\colorattribute=\empty}%
% \startcolor[\colorattribute]%
% \@EA\doconvertfont\@EA{\fontattribute}}
-%
+%
% \unexpanded\def\dostopattributes%
% {\stopcolor
% \endgroup}
-%
+%
% \unexpanded\def\doattributes#1#2#3#4%
% {\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes}
-%D A hardly faster implementation follows. We cannot use
-%D \type {csname} testing since the first argument can be
-%D anything, even a raw fontswitch. No a real improvement
-%D (some 5 seconds on 260 seconds for the maps bibliography).
+%D A hardly faster implementation follows. We cannot use
+%D \type {csname} testing since the first argument can be
+%D anything, even a raw fontswitch. No a real improvement
+%D (some 5 seconds on 260 seconds for the maps bibliography).
-\beginTEX
+\let\dostopattributes\relax % in case these commands end up in an edef
+
+\beginTEX
\unexpanded\def\dostartattributes#1#2#3%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
\@EA\ifx\csname#1#3\endcsname\relax
- \let\dostopattributes\endgroup
+ \let\dostopattributes\@@nostopattributes
\else
\let\dostopattributes\@@dostopattributes
\startcolor[\csname#1#3\endcsname]%
@@ -1901,8 +1946,8 @@
\ifcsname#1#3\endcsname
\let\dostopattributes\@@dostopattributes
\startcolor[\csname#1#3\endcsname]%
- \else
- \let\dostopattributes\endgroup
+ \else
+ \let\dostopattributes\@@nostopattributes
\fi
\ifcsname#1#2\endcsname
\expandafter\doconvertfont
@@ -1912,14 +1957,17 @@
\endETEX
-\unexpanded\def\@@dostopattributes%
+\unexpanded\def\@@dostopattributes
{\stopcolor
\endgroup}
+\unexpanded\def\@@nostopattributes
+ {\endgroup}
+
\unexpanded\def\doattributes#1#2#3#4%
{\dostartattributes{#1}{#2}{#3}{#4}\dostopattributes}
-% An even faster \ETEX\ version:
+% An even faster \ETEX\ version:
\beginETEX
@@ -1929,15 +1977,18 @@
% \let\dostopattributes\@@dostopattributes
% \startcolor[\csname#1#3\endcsname]%
% \else
-% \let\dostopattributes\endgroup
+% \let\dostopattributes\@@nostopattributes
% \fi
% \ifcsname#1#2\endcsname
% \@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
% \fi}
-%
+%
% \unexpanded\def\@@dostopattributes%
% {\stopcolor
% \endgroup}
+%
+% \unexpanded\def\@@nostopattributes%
+% {\endgroup}
\unexpanded\def\dostartattributes#1#2#3%
{\begingroup % geen \bgroup, anders in mathmode lege \hbox
@@ -1946,22 +1997,25 @@
\let\dostopattributes\@@dostopattributes
\doglobalstartcolor[\csname#1#3\endcsname]%
\else
- \let\dostopattributes\endgroup
+ \let\dostopattributes\@@nostopattributes
\fi
\else
- \let\dostopattributes\endgroup
+ \let\dostopattributes\@@nostopattributes
\fi
\ifcsname#1#2\endcsname
\@EAEAEA\doconvertfont\@EA\@EA\csname#1#2\endcsname
\fi}
-\unexpanded\def\@@dostopattributes%
+\unexpanded\def\@@dostopattributes
{\doglobalstopcolor
\endgroup}
+\unexpanded\def\@@nostopattributes
+ {\endgroup}
+
\endETEX
-%D Bonus macro, see core-sec.tex
+%D Bonus macro, see core-sec.tex
\beginTEX
@@ -1981,7 +2035,7 @@
\endETEX
-%D Since this happens a lot, and sometimes large arguments
+%D Since this happens a lot, and sometimes large arguments
%D are passed in \type {#4}, we just copy some code:
\beginETEX \ifcsname
@@ -2009,28 +2063,41 @@
% Kan vaker worden toegepast en moet bovendien sneller!
\newskip\leftskipadaption
+\newskip\rightskipadaption
\def\doadaptleftskip#1%
{\dosetleftskipadaption{#1}%
- \advance\leftskip by \leftskipadaption}
+ \advance\leftskip \leftskipadaption}
+
+\def\doadaptrightskip#1%
+ {\dosetrightskipadaption{#1}%
+ \advance\rightskip \rightskipadaption}
\beginTEX
\def\dosetleftskipadaption#1%
{\leftskipadaption\zeropoint
- \processaction[#1] % \ExpandFirstAfter
- [\v!standaard=>\leftskipadaption=
+ \processaction[#1]
+ [\v!standaard=>\leftskipadaption
\ifdim\voorwit=\zeropoint\@@sllinks\else\voorwit\fi,
- \v!ja=>\leftskipadaption=
+ \v!ja=>\leftskipadaption
\ifdim\voorwit=\zeropoint\@@sllinks\else\voorwit\fi,
\v!nee=>,
- \s!unknown=>\leftskipadaption=#1]}
+ \s!unknown=>\leftskipadaption#1]}
+
+\def\dosetrightskipadaption#1%
+ {\rightskipadaption\zeropoint
+ \processaction[#1]
+ [\v!standaard=>\rightskipadaption\@@slrechts,
+ \v!ja=>\rightskipadaption\@@slrechts,
+ \v!nee=>,
+ \s!unknown=>\rightskipadaption#1]}
\endTEX
\beginETEX
-% installation
+% installation
\setvalue{@lsa@\v!standaard}%
{\ifdim\voorwit=\zeropoint\@@sllinks\else\voorwit\fi}
@@ -2038,11 +2105,13 @@
\setvalue{@lsa@\v!ja}%
{\ifdim\voorwit=\zeropoint\@@sllinks\else\voorwit\fi}
-\setvalue{@lsa@\v!nee}%
- {\zeropoint}
+\letvalue{@lsa@\v!nee }\zeropoint
+\letvalue{@lsa@\empty }\zeropoint
-\setvalue{@lsa@\empty}%
- {\zeropoint}
+\setvalue{@rsa@\v!standaard}{\@@slrechts}
+\setvalue{@rsa@\v!ja }{\@@slrechts}
+\letvalue{@rsa@\v!nee }\zeropoint
+\letvalue{@rsa@\empty }\zeropoint
% not safe for 2\parindent
%
@@ -2050,7 +2119,7 @@
% {\leftskipadaption
% \ifcsname @lsa@#1\endcsname
% \csname @lsa@#1\endcsname
-% \else
+% \else
% #1%
% \fi
% \relax}
@@ -2061,11 +2130,21 @@
\leftskipadaption
\ifcsname\ascii\endcsname
\csname\ascii\endcsname
- \else
+ \else
#1%
\fi
\relax}
+\def\dosetrightskipadaption#1%
+ {\edef\ascii{@rsa@#1}%
+ \convertcommand\ascii\to\ascii
+ \rightskipadaption
+ \ifcsname\ascii\endcsname
+ \csname\ascii\endcsname
+ \else
+ #1%
+ \fi
+ \relax}
\endETEX
@@ -2143,28 +2222,28 @@
% \else
% #1% was #2
% \fi}
-%
+%
% better :
\def\doifrightpageelse % watch out: other default ! ! !
{\ifinpagebody
\ifdubbelzijdig
- \ifodd\twopassdata\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \ifodd\twopassdata\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
\fi
\else
\twopassdatafoundtrue
\fi
- \else
+ \else
\ifdubbelzijdig
\gettwopassdata\s!paragraph
\iftwopassdatafound
- \ifodd\twopassdata\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \ifodd\twopassdata\relax
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
\fi
\else
\ifodd\realpageno\relax
- \twopassdatafoundtrue \else \twopassdatafoundfalse
+ \twopassdatafoundtrue \else \twopassdatafoundfalse
\fi
\fi
\else
@@ -2172,9 +2251,9 @@
\fi
\fi
\iftwopassdatafound
- \@EA\firstoftwoarguments
+ \@EA\firstoftwoarguments
\else
- \@EA\secondoftwoarguments
+ \@EA\secondoftwoarguments
\fi}
\def\signalrightpage
@@ -2200,7 +2279,7 @@
%
% en worden hieronder wat aangepast.
-% the three boolean will become obsolete some day in favour
+% the three boolean will become obsolete some day in favour
% of \bottomraggedness
\chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline
@@ -2213,24 +2292,24 @@
\def\normalbottom%
{% \topskip 10pt
- \r@ggedbottomfalse}
+ \r@ggedbottomfalse}
-\def\raggedbottom%
- {\chardef\bottomraggedness=0
+\def\raggedbottom
+ {\chardef\bottomraggedness0
\n@rmalbottomfalse
\r@ggedbottomtrue
\b@selinebottomfalse
\settopskip}
-\def\alignbottom%
- {\chardef\bottomraggedness=1
+\def\alignbottom
+ {\chardef\bottomraggedness1
\n@rmalbottomtrue
\r@ggedbottomfalse
\b@selinebottomfalse
\settopskip}
-\def\baselinebottom%
- {\chardef\bottomraggedness=2
+\def\baselinebottom
+ {\chardef\bottomraggedness2
\n@rmalbottomfalse
\r@ggedbottomfalse
\b@selinebottomtrue
@@ -2239,11 +2318,11 @@
\let\normalbottom=\alignbottom % downward compatible
% so, the new one will be
-%
+%
% \chardef\bottomraggedness=0 % 0=ragged 1=normal/align 2=baseline
-%
-% \def\bottomalignlimit{3\lineheight} % will be settable
-%
+%
+% \def\bottomalignlimit{3\lineheight} % will be settable
+%
% \def\raggedbottom {\chardef\bottomraggedness=0 \settopskip}
% \def\alignbottom {\chardef\bottomraggedness=1 \settopskip}
% \def\baselinebottom{\chardef\bottomraggedness=2 \settopskip}
@@ -2254,18 +2333,18 @@
% \tolerance >= 1500 % was 200
% \raggedness = 2 .. 6\korpsgrootte
-\chardef\raggedstatus=0 % normal left center right
+\chardef\raggedstatus=0 % normal left center right
\def\leftraggedness {2\bodyfontsize}
\def\rightraggedness {2\bodyfontsize}
\def\middleraggedness {6\bodyfontsize}
-%D More hyphenation control, will be combined with align
-%D setup.
+%D More hyphenation control, will be combined with align
+%D setup.
-\def\nohyphens%
+\def\nohyphens
{\ifx\dohyphens\relax
- \edef\dohyphens%
+ \edef\dohyphens
{\hyphenpenalty\the\hyphenpenalty
\exhyphenpenalty\the\exhyphenpenalty\relax}%
\fi
@@ -2274,19 +2353,19 @@
\let\dohyphens\relax
-%D To prevent unwanted side effects, we also have to check
-%D for hyphens here:
+%D To prevent unwanted side effects, we also have to check
+%D for hyphens here:
\def\setraggedness#1%
- {\ifnum\tolerance<1500\relax % small values have
- \tolerance=1500\relax % unwanted side effects
- \fi
- \spaceskip=2.5\hsize % we misuse these registers
- \xspaceskip=#1\relax % for temporary storage;
- \divide\spaceskip by \xspaceskip % they are changed anyway
- \ifx\dohyphens\relax
- \hyphenpenalty=\spaceskip % \else no hyphens is active
- \fi}
+ {\ifnum\tolerance<1500\relax % small values have
+ \tolerance1500\relax % unwanted side effects
+ \fi
+ \spaceskip2.5\hsize % we misuse these registers
+ \xspaceskip#1\relax % for temporary storage;
+ \divide\spaceskip \xspaceskip % they are changed anyway
+ \ifx\dohyphens\relax
+ \hyphenpenalty\spaceskip % \else no hyphens is active
+ \fi}
\let\updateraggedskips\relax
@@ -2296,9 +2375,9 @@
\updateraggedskips}
\def\dosetraggedskips#1#2#3#4#5#6#7%
- {\chardef\raggedstatus=#1\relax
- \leftskip=1\leftskip\!!plus#2\relax % zie: Tex By Topic 8.1.3
- \rightskip=1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
+ {\chardef\raggedstatus#1\relax
+ \leftskip1\leftskip\!!plus#2\relax % zie: Tex By Topic 8.1.3
+ \rightskip1\rightskip\!!plus#3\relax % zie: Tex By Topic 8.1.3
\spaceskip#4\relax
\xspaceskip#5\relax
\parfillskip\zeropoint\!!plus#6\relax
@@ -2307,41 +2386,52 @@
% \def\notragged%
% {\setraggedskips{0}{0em}{0em}{0em}{0em}{1fil}{\parindent}}
+% todo
+
+\def\raggedfillamount {1fil}
+\def\raggedhalffillamount{.5fil}
+\def\raggedspaceamount {.3333em}
+\def\raggedxspaceamount {.5em}
+
\def\notragged
- {\chardef\raggedstatus=0
+ {\chardef\raggedstatus\zerocount
\leftskip1\leftskip
\rightskip1\rightskip
\spaceskip\zeropoint
\xspaceskip\zeropoint
- \parfillskip\zeropoint\!!plus1fil\relax
- \let\updateraggedskips\relax} % new
+ \parfillskip\zeropoint\!!plus\raggedfillamount\relax
+ \let\updateraggedskips\relax} % new
\let\forgetragged\notragged
-\def\raggedleft%
+\def\raggedleft
{\setraggedness\leftraggedness
- \setraggedskips{1}{\leftraggedness}{0em}{.3333em}{.5em}{0em}{0em}}
+ \setraggedskips1\leftraggedness\zeropoint\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
-\def\raggedcenter%
+\def\raggedcenter
{\setraggedness\middleraggedness
- \setraggedskips{2}{\middleraggedness}{\middleraggedness}{.3333em}{.5em}{0em}{0em}}
+ \setraggedskips2\middleraggedness\middleraggedness\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
%D We used to have:
%D
%D \starttypen
-%D \def\raggedright%
+%D \def\raggedright
%D {\setraggedness\rightraggedness
%D \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{0em}{\parindent}}
%D \stoptypen
%D
%D However, the next alternative, suggested by Taco, is better.
-\def\raggedright%
+\def\raggedright
{\setraggedness\rightraggedness
- \setraggedskips{3}{0em}{\rightraggedness}{.3333em}{.5em}{1fil}{\parindent}}
+ \setraggedskips3\zeropoint\rightraggedness\raggedspaceamount
+ \raggedxspaceamount\raggedfillamount\parindent}
-\def\veryraggedleft%
- {\setraggedskips{1}{1fil}{0em}{.3333em}{.5em}{0em}{0em}}
+\def\veryraggedleft
+ {\setraggedskips1\raggedfillamount\zeropoint\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
%D When we want the last line to have a natural width:
%D
@@ -2352,27 +2442,31 @@
%D
%D but this one is not accepted by the macros.
-\def\veryraggedcenter%
- {\setraggedskips{2}{1fil}{1fil}{.3333em}{.5em}{0em}{0em}}
+\def\veryraggedcenter
+ {\setraggedskips2\raggedfillamount\raggedfillamount\raggedspaceamount
+ \raggedxspaceamount\zeropoint\zeropoint}
-\def\veryraggedright%
- {\setraggedskips{3}{0em}{1fil}{.3333em}{.5em}{0em}{\parindent}}
+\def\veryraggedright
+ {\setraggedskips3\zeropoint\raggedfillamount\raggedspaceamount
+ \raggedxspaceamount\zeropoint\parindent}
-\def\ttraggedright%
+\def\ttraggedright
{\tttf
- \setraggedskips{3}{0em}{\rightraggedness}{0em}{0em}{0em}{\parindent}} % {\voorwit}}
+ \setraggedskips3\zeropoint\rightraggedness
+ \zeropoint\zeropoint\zeropoint\parindent} % \voorwit
%D A bonus one:
-\def\raggedwidecenter%
+\def\raggedwidecenter
{\setraggedness\middleraggedness
- \setraggedskips{2}{.5fil}{.5fil}{.3333em}{.5em}{0em}{0em}}
+ \setraggedskips2\raggedhalffillamount\raggedhalffillamount
+ \raggedspaceamount\raggedxspaceamount\zeropoint\zeropoint}
-\newif\if@@asragged \@@asraggedtrue % old method
+\newif\if@@asragged \@@asraggedtrue % old method
\def\dodosteluitlijnenin[#1]%
- {\doifinsetelse{\v!ruim} {#1}{\!!doneatrue}{\!!doneafalse}%
- \doifinsetelse{\v!breed}{#1}{\!!donebtrue}{\!!donebfalse}%
+ {\doifinsetelse\v!ruim {#1}\!!doneatrue\!!doneafalse
+ \doifinsetelse\v!breed{#1}\!!donebtrue\!!donebfalse
\ExpandFirstAfter\processallactionsinset
[#1]
[ \v!regel=>\baselinebottom,
@@ -2402,10 +2496,10 @@
\def\dosteluitlijnenin[#1]%
{\expanded{\dodosteluitlijnenin[#1]}}
-\def\steluitlijnenin%
+\def\steluitlijnenin
{\dosingleargument\dosteluitlijnenin}
-\def\startuitlijnen%
+\def\startuitlijnen
{\bgroup
\steluitlijnenin}
@@ -2413,18 +2507,19 @@
{\par
\egroup}
-\def\doalignline#1#2% \\ == newline
+\def\doalignline#1#2% \\ == newline
{\bgroup
+ \setlocalhsize % new
\def\\{\egroup\par\doalignline{#1}{#2}\bgroup}%
\dowithnextbox
- {\noindent\hbox to \hsize{\strut#1\unhbox\nextbox#2}\egroup}
+ {\noindent\hbox to \localhsize{\strut#1\unhbox\nextbox#2}\egroup}
\hbox}
% directe commando's
\def\regellinks {\doalignline \relax \hss }
-\def\regelrechts{\doalignline \hss \relax}
\def\regelmidden{\doalignline \hss \hss }
+\def\regelrechts{\doalignline \hss \relax}
\def\regelbegrensd#1{\limitatetext{#1}{\hsize}{\unknown}}
@@ -2437,13 +2532,14 @@
\def\doregelplaats#1%
{\getvalue{\s!do\v!regel#1}}
-%D Experimental:
+%D Experimental:
\def\doxalignline#1#2%
{\bgroup
+ \setlocalhsize
\def\\{\egroup\par\doxalignline{#1}{#2}\bgroup}% inefficient
\dowithnextbox
- {\noindent\hbox to \hsize
+ {\noindent\hbox to \localhsize
{\strut\signalrightpage
\doifrightpageelse{#1\unhbox\nextbox#2}{#2\unhbox\nextbox#1}}%
\egroup}
@@ -2452,12 +2548,12 @@
\setvalue{\s!do\v!regel\v!binnen}{\doxalignline\relax\hss}
\setvalue{\s!do\v!regel\v!buiten}{\doxalignline\hss\relax}
-%D Better:
+%D Better:
\def\doregelplaats#1%
{\getvalue{\s!do\v!regel#1}}
-\def\alignedline#1#2% setting default
+\def\alignedline#1#2% setting default
{\csname
\s!do\v!regel
\ifundefined{\s!do\v!regel#1}#2\else#1\fi
@@ -2466,10 +2562,10 @@
% \def\doregelplaats#1%
% {\alignedline{#1}\v!links}
-%D ...
+%D ...
\def\dosteltolerantiein[#1]%
- {\doifinsetelse{\v!vertikaal}{#1}%
+ {\doifinsetelse\v!vertikaal{#1}%
{\ExpandFirstAfter\processallactionsinset
[#1]
[\v!zeerstreng=>\def\bottomtolerance{},
@@ -2478,12 +2574,12 @@
\v!zeersoepel=>\def\bottomtolerance{.100}]}%
{\ExpandFirstAfter\processallactionsinset
[#1]
- [ \v!rek=>\emergencystretch=\bodyfontsize,
+ [ \v!rek=>\emergencystretch\bodyfontsize,
\v!spatie=>\spaceskip.5em\!!plus.25em\!!minus.25em\relax,
- \v!zeerstreng=>\tolerance=200,
- \v!streng=>\tolerance=1500,
- \v!soepel=>\tolerance=3000,
- \v!zeersoepel=>\tolerance=4500]}}
+ \v!zeerstreng=>\tolerance 200,
+ \v!streng=>\tolerance1500,
+ \v!soepel=>\tolerance3000,
+ \v!zeersoepel=>\tolerance4500]}}
\def\steltolerantiein
{\dosingleargument\dosteltolerantiein}
@@ -2503,15 +2599,15 @@
{\bgroup
\ifhmode
\unskip
- \setbox\indentationboxA=\lastbox % get \strut if present
+ \setbox\indentationboxA\lastbox % get \strut if present
\unskip
- \setbox\indentationboxB=\lastbox % get \indent generated box
+ \setbox\indentationboxB\lastbox % get \indent generated box
\unskip
\else
- \hskip\zeropoint % switch to horizontal mode
+ \hskip\zeropoint % switch to horizontal mode
\unskip
- \setbox\indentationboxA=\lastbox % get \indent generated box
- \setbox\indentationboxB=\box\voidb@x
+ \setbox\indentationboxA\lastbox % get \indent generated box
+ \setbox\indentationboxB\box\voidb@x
\fi}
\def\popindentation%
@@ -2559,7 +2655,7 @@
\def\definehspace
{\dotripleempty\dodefinehspace}
-\def\dodefinehspace[#1][#2][#3]% #1 = optional namespace
+\def\dodefinehspace[#1][#2][#3]% #1 = optional namespace
{\ifthirdargument
\setvalue{\??hs#1:#2}{#3}%
\else
@@ -2579,7 +2675,7 @@
% \hspaceamount\empty{\iffirstargument#1\else\s!default\fi}%
% \fi
% \expandafter\ignorespaces
-% \fi}
+% \fi}
\def\dohspace[#1][#2]%
{\ifsecondargument
@@ -2588,7 +2684,7 @@
\hspace[][#1]%
\else
\hspace[][\s!default]%
- \fi\fi}
+ \fi\fi}
\def\dodohspace[#1][#2#3]%
{\ifhmode
@@ -2608,16 +2704,16 @@
\definehspace [\v!klein] [.25\emspaceamount]
\definehspace [\v!middel] [.5\emspaceamount]
\definehspace [\v!groot] [1\emspaceamount]
-\definehspace [\v!normaal] [1\spaceamount]
+\definehspace [\v!normaal] [1\spaceamount]
\definehspace [\v!default] [\spaceamount]
-%D Taken from Taco's math module (cq. \AMS\ macros), but
-%D adapted to \type {\hspace}:
+%D Taken from Taco's math module (cq. \AMS\ macros), but
+%D adapted to \type {\hspace}:
\unexpanded\def\textormathspace#1#2#3%
{\ifmmode\mskip#1#2\else\kern#1\hspaceamount\empty{#3}\fi\relax}
-\def\thinspace {\textormathspace+\thinmuskip 1}
+\def\thinspace {\textormathspace+\thinmuskip 1}
\def\medspace {\textormathspace+\medmuskip 2}
\def\thickspace {\textormathspace+\thickmuskip3}
\def\negthinspace {\textormathspace-\thinmuskip 1}
@@ -2633,23 +2729,18 @@
\definehspace[2][.2222em]
\definehspace[3][.2777em]
-% Very nasty but needed for margin stuff inside colored
-% paragraphs.
+% Very nasty but needed for margin stuff inside colored
+% paragraphs.
\let\normalvadjust\vadjust
-\def\graphicvadjust % bad, those low level color calls here
+\def\graphicvadjust % bad, those low level color calls here
{\dowithnextbox
{\normalvadjust
{\dostartgraphicgroup
- \ifx\maintextcolor\empty
- \stopcolormode
- \unvbox\nextbox
- \else
- \startcolormode\maintextcolor
- \unvbox\nextbox
- \stopcolormode
- \fi
+ \localstarttextcolor
+ \unvbox\nextbox
+ \localstoptextcolor
\dostopgraphicgroup}}%
\vbox}
@@ -2712,4 +2803,4 @@
\stelspatieringin
[\v!opelkaar]
-\protect \endinput
+\protect \endinput
diff --git a/tex/context/base/core-syn.tex b/tex/context/base/core-syn.tex
index a9153089a..1791899fb 100644
--- a/tex/context/base/core-syn.tex
+++ b/tex/context/base/core-syn.tex
@@ -31,11 +31,11 @@
\def\dostelsynoniemenin[#1][#2]%
{\getparameters[\??sm#1][#2]}
-\def\stelsynoniemenin%
+\def\stelsynoniemenin
{\dodoubleargument\dostelsynoniemenin}
\def\doresetsynonym#1%
- {\letvalue{#1\s!entry}=\gobblethreearguments}
+ {\letvalue{#1\s!entry}\gobblethreearguments}
\def\dohandlesynonymentry#1#2#3#4%
{\bgroup
@@ -77,7 +77,7 @@
\c!letter=]%
%
\stelwitruimtein[\v!geen]%
- \doutilities{#1}{\jobname}{#2}{}{\par}%
+ \doutilities{#1}\jobname{#2}\relax\par
\endgroup
\ifutilitydone\else\geenwitruimte\fi}
@@ -100,13 +100,13 @@
%\def\getsynonymmeaning#1#2#3%
% {\doifdefinedelse{#2#3}
% {{\synonymmeaningtrue\getvalue{#2#3}}}
-% {{\showmessage{\m!systems}{18}{#1,#3}}}}
+% {{\showmessage\m!systems{18}{#1,#3}}}}
\def\getsynonymmeaning#1#2#3%
{\bgroup
\doifundefined{#2#3}
{\setgvalue{#2#3}{{\tt[#3]}}%
- \showmessage{\m!systems}{18}{#1,#3}}%
+ \showmessage\m!systems{18}{#1,#3}}%
\synonymmeaningtrue
\getvalue{#2#3}%
\egroup}
@@ -144,19 +144,19 @@
\def\dolaadsynoniemen#1#2%
{\bgroup
- \let\dosetsynonym=\doloadsynonym
- \showmessage{\m!systems}{19}{#2}%
- \doutilities{#1}{\jobname}{}{}{}%
+ \let\dosetsynonym\doloadsynonym
+ \showmessage\m!systems{19}{#2}%
+ \doutilities{#1}\jobname\empty\relax\relax
\egroup
\setvalue{\s!check#1}##1{}}
\def\dodocomplexsynonym[#1][#2]#3#4%
{\doifsomething{#2}
{\getvalue{\s!check#1}{#2}%
- \doifelsevalue{\??sm#1\c!conversie}{\v!ja}
+ \doifelsevalue{\??sm#1\c!conversie}\v!ja
{\unexpanded\setgvalue{#2}{\expandsynonym{#1}{#2}{#3}{#4}}}
- {\doifelsevalue{\??sm#1\c!status}{\v!start}
- {\doifelsevalue{\??sm#1\c!criterium}{\v!alles}
+ {\doifelsevalue{\??sm#1\c!status}\v!start
+ {\doifelsevalue{\??sm#1\c!criterium}\v!alles
{\preexecutesynonym{#1}{#2}{#3}{#4}}
{\unexpanded\setgvalue{#2}{\executesynonym{#1}{#2}{#3}{#4}}}}
{\unexpanded\setgvalue{#2}{\processsynonym{#1}{#3}{#4}}}}}}
@@ -221,7 +221,7 @@
\setvalue{\e!volledige\e!lijstmet#2}%
{\dovolledigelijstmetsynoniemen{#1}{#2}}}
-\def\definieersynoniemen%
+\def\definieersynoniemen
{\doquadrupleempty\dodefinieersynoniemen}
% Formaat tex-utility-input-file <jobname.tui>:
@@ -236,11 +236,11 @@
\def\dostelsorterenin[#1][#2]%
{\getparameters[\??so#1][#2]}
-\def\stelsorterenin%
+\def\stelsorterenin
{\dodoubleargument\dostelsorterenin}
\def\doresetsorteren#1%
- {\letvalue{#1\s!entry}=\gobblethreearguments}
+ {\letvalue{#1\s!entry}\gobblethreearguments}
\def\dosetsorteren#1%
{\setvalue{#1\s!entry}##1##2##3%
@@ -258,7 +258,7 @@
{\witruimte % ZONDER WITRUIMTE ETC ETC
\begingroup
\stelwitruimtein[\v!geen]%
- \doutilities{#1}{\jobname}{#1}{}{\par}%
+ \doutilities{#1}\jobname{#1}\relax\par
\endgroup
\ifutilitydone\else\geenwitruimte\fi}
@@ -308,17 +308,17 @@
\def\dolaadsorteren#1#2%
{\bgroup
- \let\dosetsorteren=\doloadsort
- \showmessage{\m!systems}{20}{#2}%
- \doutilities{#1}{\jobname}{}{}{}%
+ \let\dosetsorteren\doloadsort
+ \showmessage\m!systems{20}{#2}%
+ \doutilities{#1}\jobname\empty\relax\relax
\egroup
\setvalue{\s!check#1}##1{}}
\def\dodocomplexsort[#1][#2]#3%
{\doifsomething{#2}
{\getvalue{\s!check#1}{#2}%
- \doifelsevalue{\??so#1\c!status}{\v!start}
- {\doifelsevalue{\??so#1\c!criterium}{\v!alles}
+ \doifelsevalue{\??so#1\c!status}\v!start
+ {\doifelsevalue{\??so#1\c!criterium}\v!alles
{\preexecutesort{#1}{#2}{#3}}
{\unexpanded\setgvalue{#2}{\executesort{#1}{#2}{#3}}}}
{\unexpanded\setgvalue{#2}{\processsort{#1}{#3}{#2}}}}}
@@ -345,7 +345,7 @@
\setvalue{\e!stel#2\e!in}[##1]% vervalt tzt, soort oo-mode
{\getparameters[\??so#1][##1]}%
\ifthirdargument
- \ConvertConstantAfter\doifnot{#3}{\v!geen}
+ \ConvertConstantAfter\doifnot{#3}\v!geen
{\ifx#3\relax \else
\def#3##1{\getvalue{\??so:#1:##1}}
\fi}%
diff --git a/tex/context/base/core-sys.tex b/tex/context/base/core-sys.tex
index 942f0c310..d233225fa 100644
--- a/tex/context/base/core-sys.tex
+++ b/tex/context/base/core-sys.tex
@@ -23,8 +23,10 @@
%\beforesplitstring\ascii\at.\to\jobfilename
%\aftersplitstring \ascii\at.\to\jobfilesuffix
\splitstring\ascii\at.\to\jobfilename\and\jobfilesuffix
+ \lowercasestring\jobfilesuffix\to\jobfilesuffix
\doifnothing\jobfilename {\let\jobfilename \jobname}%
- \doifnothing\jobfilesuffix{\let\jobfilesuffix\c!tex}}
+ \doifnothing\jobfilesuffix{\let\jobfilesuffix\c!tex}%
+ \setsystemmode{suffix-\jobfilesuffix}}
\appendtoks \splitjobfilename \to \everyjob
@@ -35,7 +37,7 @@
\let\outputresolution\@@svresolutie
\splitjobfilename}
-\def\setupsystem%
+\def\setupsystem
{\dosingleargument\dosetupsystem}
\def\setuprandomize[#1]%
@@ -66,15 +68,15 @@
\def\dostartglobaldefs#1#2%
{\edef\!!stringa{\the\globaldefs}%
\ifnum\globaldefs#10
- \globaldefs=-\globaldefs
+ \globaldefs-\globaldefs
\fi
- \advance\globaldefs by #21
+ \advance\globaldefs #21
\setevalue{@gd@\the\globaldefs}{\!!stringa}}
-\def\dostopglobaldefs%
+\def\dostopglobaldefs
{\doifdefinedelse{@gd@\the\globaldefs}
- {\globaldefs=\getvalue{@gd@\the\globaldefs}\relax}
- {\globaldefs=0\relax}}
+ {\globaldefs\getvalue{@gd@\the\globaldefs}\relax}
+ {\globaldefs\zerocount}}
\def\startlocal {\dostartglobaldefs>-}
\def\stoplocal {\dostopglobaldefs}
@@ -84,8 +86,8 @@
\def\complexstart[#1]{\bgroup\getvalue{\e!start#1}}
\def\complexstop [#1]{\getvalue{\e!stop #1}\egroup}
-\def\simplestart{\bgroup}
-\def\simplestop {\egroup}
+\let\simplestart\bgroup
+\let\simplestop \egroup
\definecomplexorsimple\start
\definecomplexorsimple\stop
@@ -107,7 +109,7 @@
{\getvalue{\??be#1\c!voor}%
\bgroup
\getvalue{\??be#1\c!commandos}%
- \dostartattributes{\??be#1}\c!letter\c!kleur{}}%
+ \dostartattributes{\??be#1}\c!letter\c!kleur\empty}%
\setvalue{\e!stop#1}%
{\dostopattributes
\egroup
@@ -161,7 +163,7 @@
\def\complexdefinieer[#1]#2#3%
{\ifx#2\undefined
\else
- \showmessage{\m!systems}{4}{\string#2}%
+ \showmessage\m!systems4{\string#2}%
\fi
\ifcase0#1\def#2{#3}%
\or\def#2##1{#3}%
@@ -183,7 +185,7 @@
\def\gebruikcommandos#1%
{\bgroup
- \def\docommando##1{\setbox0=\hbox{\getvalue{\string##1}##1}}%
+ \def\docommando##1{\setbox0\hbox{\getvalue{\string##1}##1}}%
\processcommalist[#1]\docommando
\egroup}
diff --git a/tex/context/base/core-tab.tex b/tex/context/base/core-tab.tex
index 978d2fc68..ab7a0df58 100644
--- a/tex/context/base/core-tab.tex
+++ b/tex/context/base/core-tab.tex
@@ -18,7 +18,7 @@
% \xhrule : calls for 'special' with width
% BUG:
%
-% \starttabel[|l|l|]
+% \starttable[|l|l|]
% \HL
% \RL\FR \VL Head 1 \VL Head 2 \VL\FR
% \RL\LR \VL Head A \VL Head B \VL\LR % niet grijs ??
@@ -26,7 +26,7 @@
% \VL 1 \VL 2 \VL\FR
% \VL a \VL b \VL\LR
% \HL
-% \stoptabel
+% \stoptable
% melden als in kleur conflict, uitgestelde test op \SR\SR
@@ -102,7 +102,7 @@
%D the basic table typesetting commands.
%D
%D \startbuffer
-%D \starttabel[|||]
+%D \starttable[|||]
%D \HL
%D \VL first \VL second \VL\AR
%D \HL
@@ -110,10 +110,10 @@
%D \VL beta \VL 2 \VL\AR
%D \VL gamma \VL 3 \VL\AR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
-%D \startcombinatie[2]
+%D \startcombinatie
%D {\tracetablesfalse\haalbuffer} {\type{\tracetablesfalse}}
%D {\tracetablestrue\haalbuffer} {\type{\tracetablestrue}}
%D \stopcombinatie
@@ -129,7 +129,7 @@
%D \type {\LR} commands.
%D
%D \startbuffer
-%D \starttabellen[|||]
+%D \starttables[|||]
%D \HL
%D \VL first \VL second \VL\AR
%D \HL
@@ -137,7 +137,7 @@
%D \VL beta \VL 2 \VL\AR
%D \VL gamma \VL 3 \VL\AR
%D \HL
-%D \stoptabellen
+%D \stoptable
%D \stopbuffer
%D
%D When we use the split table feature, we get a bit more
@@ -150,7 +150,7 @@
%D table definition is wrong.
%D
%D \startbuffer
-%D \starttabel[||||]
+%D \starttable[||||]
%D \HL
%D \VL first second \VL third \VL\AR
%D \HL
@@ -158,7 +158,7 @@
%D \VL beta \VL 2 \VL b \VL
%D \VL gamma \VL \THREE{3} c \VL\AR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \typebuffer
@@ -194,7 +194,7 @@
%D \stopfiguurtekst}
%D
%D \startbuffer
-%D \starttabel[|c|c|]
+%D \starttable[|c|c|]
%D \HL
%D \BL[2] \SR
%D \VL test \VL test \VL\SR
@@ -203,7 +203,7 @@
%D \VL test \VL test \VL\MR
%D \VL test \VL test \VL\LR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
@@ -213,56 +213,56 @@
%D the commands used.
%D
%D \startbuffer
-%D \starttabel[|c|c|c|]
+%D \starttable[|c|c|c|]
%D \HL
%D \BL[3] \SR
%D \VL test \VL test \VL test \VL\SR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
%D
%D \startbuffer
-%D \starttabel[|c|c|c|]
+%D \starttable[|c|c|c|]
%D \HL
%D \BC \BL[2] \SR
%D \VL test \VL test \VL test \VL\SR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
%D
%D \startbuffer
-%D \starttabel[|c|c|c|]
+%D \starttable[|c|c|c|]
%D \HL
%D \BC \BC \BL \SR
%D \VL test \VL test \VL test \VL\SR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
%D
%D \startbuffer
-%D \starttabel[|c|c|c|]
+%D \starttable[|c|c|c|]
%D \HL
%D \BC \BL \SR
%D \VL test \VL test \VL test \VL\SR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
%D
%D \startbuffer
-%D \starttabel[|c|c|c|]
+%D \starttable[|c|c|c|]
%D \BL \BL \SR
%D \HL
%D \VL test \VL test \VL test \VL\SR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
@@ -273,7 +273,7 @@
%D specification later on:
%D
%D \startbuffer
-%D \starttabel[|c|c|c|]
+%D \starttable[|c|c|c|]
%D \BC \BL \SR
%D \HL
%D \VL test \VL test \VL test \VL\SR
@@ -285,7 +285,7 @@
%D \BR\LR
%D \VL test \VL test \VL test \VL\LR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
@@ -313,7 +313,8 @@
%D Nog vervangen:
-\def\c!Table {Table}
+\def\c!Table{Table}
+\def\m!TABLE{TABLE}
%D We already saw that the table macros report errors and
%D provide automatic spacing. These features can only be
@@ -369,7 +370,7 @@
\catcode`\|=\@@active
\catcode`\"=\@@active
-\gdef\pushouterbarandquote%
+\gdef\pushouterbarandquote
{\ifForgetTableBarAndQuote
\ifnum\catcode`\|=\@@active \else
\catcode`\|=\@@active
@@ -383,15 +384,15 @@
\let\outertablequote="%
\fi}
-\gdef\popouterbarandquote%
+\gdef\popouterbarandquote
{\ifForgetTableBarAndQuote
- \let|=\outertablebar
- \let"=\outertablequote
+ \let|\outertablebar
+ \let"\outertablequote
\else
\redefinetablebarandquote
\fi}
-\gdef\ObeyTableBarAndQuote%
+\gdef\ObeyTableBarAndQuote
{\ForgetTableBarAndQuotefalse
\ifintable
\redefinetablebarandquote
@@ -430,7 +431,7 @@
%D The next hack is dedicated to Tobias, who found out that
%D paragraph entries don't break well.
-\def\TABLEhack{\hskip\!!zeropoint}
+\def\TABLEhack{\hskip\zeropoint}
%D The first attemp to solve this problem was:
%D
@@ -463,45 +464,32 @@
\newdimen\TABLEparheight
\def\BeginTableParBox#1%
- {\setbox\scratchbox=\vtop\bgroup % \setbox added
- \hsize=#1\relax
+ {\setbox\scratchbox\vtop\bgroup % \setbox added
+ \hsize#1\relax
\normalbaselines
- \let~=\!ttTie
- \let\-=\!ttDH
+ \let~\!ttTie
+ \let\-\!ttDH
\blanko[\v!blokkeer]% % added
\the\EveryTableParBox}
-% \def\EndTableParBox%
-% {\removelastskip % added
-% %\MakeStrut{0pt}{\StrutDepthFactor\StrutUnit} % removed
-% \par
-% \ifnum\prevgraf>0
-% \strut \geenwitruimte \vskip-\lineheight % added
-% \fi
-% \egroup % finishes the \vtop begun by \BeginTableParbox
-% \getboxheight\scratchdimen\of\box\scratchbox\relax % added
-% \ifdim\scratchdimen>\TABLEparheight % added
-% \global\TABLEparheight=\scratchdimen % added
-% \fi % added
-% \box\scratchbox}
-
\def\EndTableParBox
{\removelastskip % itemize or so
\par
- \ifnum\prevgraf>0 % we want at least
+ \ifnum\prevgraf>\zerocount % we want at least
\strut \geenwitruimte \vskip-\lineheight % one line of text
\egroup
\ifdim\dp\scratchbox>\lineheight % see (*) for an
\getnoflines{\dp\scratchbox}% % example of where
- \dp\scratchbox=\zeropoint % saving can go
- \vtop to \noflines\lineheight{\box\scratchbox}% terrible wrong
+ \dp\scratchbox\zeropoint % saving can go
+ \setbox\scratchbox % terrible wrong
+ \vtop to \noflines\lineheight{\box\scratchbox}%
\fi % esp between rows
\else % of paragraphs
\egroup
\fi
\getboxheight\scratchdimen\of\box\scratchbox\relax% compensate for
\ifdim\scratchdimen>\TABLEparheight % funny depth of
- \global\TABLEparheight=\scratchdimen % multi-line box
+ \global\TABLEparheight\scratchdimen % multi-line box
\fi % i.e. vtop
\box\scratchbox}
@@ -553,12 +541,12 @@
%D format.
%D
%D \startbuffer
-%D \starttabel{|q[00,000]|Q[00,00]|}
+%D \starttable{|q[00,000]|Q[00,00]|}
%D \HL
%D \VL -1,2 \VL 12,35 \VL\FR
%D \VL 11,203 \VL 2,4 \VL\LR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
@@ -576,7 +564,7 @@
%D \em Key \type{q}: quantity item, non||math mode.
\NewFormatKey q%
- {\def\!tqStyle{}%
+ {\letempty\!tqStyle
\futurelet\!tnext\!tqTestForBracket}
%D \em Key \type{Q}: quantity item, math mode.
@@ -617,9 +605,9 @@
\aftergroup[%
\!taCountA #1
\!thLoop
- \ifnum \!taCountA>0
- \advance\!taCountA -1
- \aftergroup0
+ \ifnum \!taCountA>\zerocount
+ \advance\!taCountA \minusone
+ \aftergroup0
\repeat
\def\!ttemp{#3}%
\ifx\!ttemp\empty
@@ -627,9 +615,9 @@
\aftergroup,
\!taCountA #2
\!thLoop
- \ifnum\!taCountA>0
- \advance\!taCountA -1
- \aftergroup0
+ \ifnum\!taCountA>\zerocount
+ \advance\!taCountA \minusone
+ \aftergroup0
\repeat
\fi
\aftergroup]\aftergroup}%
@@ -650,15 +638,15 @@
\def\!tqMakeQuantityTemplate#1#2,#3,#4!% #1=<empty> or $
{\def\!ttemp{#4}%
\ifx\!ttemp\empty
- \!taDimenC=0pt
+ \!taDimenC\zeropoint
\else
- \setbox0=\hbox{\m@th #1,#3#1}%
- \!taDimenC=\wd0
+ \setbox0\hbox{\m@th #1,#3#1}%
+ \!taDimenC\wd0
\fi
- \setbox0=\hbox{\m@th #1#2#1}%
- \!thToksEdef\!taDataColumnTemplate=
- {\noexpand\!tqSetQuantityItem{\the\wd0 }{\the\!taDimenC}{#1}%
- \the\!taDataColumnTemplate}%
+ \setbox0\hbox{\m@th #1#2#1}%
+ \!thToksEdef\!taDataColumnTemplate
+ ={\noexpand\!tqSetQuantityItem{\the\wd0 }{\the\!taDimenC}{#1}%
+ \the\!taDataColumnTemplate}%
\ReadFormatKeys}
%D \em Set numeric item.
@@ -667,16 +655,9 @@
{\!tqSetQuantityItemA{#1}{#2}{#3}#4,,!}
\def\!tqSetQuantityItemA #1#2#3#4,#5,#6!%
- {\def\!ttemp%
- {#6}%
- \hbox to #1
- {\hss\m@th#3#4#3}%
- \hbox to #2
- {\ifx\!ttemp\empty
- \else
- \m@th#3,#5#3%
- \fi
- \hss}}
+ {\def\!ttemp{#6}%
+ \hbox to #1{\hss\m@th#3#4#3}%
+ \hbox to #2{\ifx\!ttemp\empty\else\m@th#3,#5#3\fi\hss}}
%D Here ends the Q||extension. Did you watch the clever use
%D of aftergroup in \type{\!tqConvertCode}.
@@ -696,9 +677,9 @@
%D centering}.
%D
%D \startbuffer
-%D \starttabel[|C{red}|C{green}|C{blue}|]
+%D \starttable[|C{red}|C{green}|C{blue}|]
%D \VL R(ed) \VL G(reen) \VL B(lue) \VL\SR
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \ShowExample
@@ -710,7 +691,7 @@
%D So now we have three new keys:
%D
-%D \starttabel[|||]
+%D \starttable[|||]
%D \HL
%D \NC \bf key \NC \bf meaning \NC\AR
%D \HL
@@ -718,7 +699,7 @@
%D \NC q[x,y] \NC text mode formatted numbers \NC\AR
%D \NC C{identifier} \NC column entry color \NC\AR
%D \HL
-%D \stoptabel
+%D \stoptable
%D To be compatible with the tabulate environment, we also
%D support the \type {l}, \type {c} and \type {r} keys for
@@ -752,7 +733,7 @@
%D slightly adapted, i.c. the penalty is removed. We also
%D add basic color support.
-\def\!ttFullHruleA%
+\def\!ttFullHruleA
{\!ttGetHalfRuleThickness
\startglobalTABLEcolor % added
\hrule\!thHeight\dimen0\!thDepth\dimen0
@@ -766,15 +747,15 @@
%D hooks. One thing to keep in mind is that \type{&} keeps
%D assignments local. Again, we add basic color support.
-\let\TABLEbeforebar=\empty
-\let\TABLEafterbar =\empty
+\let\TABLEbeforebar\empty
+\let\TABLEafterbar \empty
-\def\!ttInsertVrule%
+\def\!ttInsertVrule
{\hfil
\TABLEbeforebar % added
\startglobalTABLEcolor % added
\vrule \!thWidth
- \ifnum\!tgCode=1
+ \ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
\LineThicknessFactor
\else
@@ -792,13 +773,13 @@
%D The next two macros are only adapted to basis rule
%D color support.
-\def\!tfSetVrule%
+\def\!tfSetVrule
{\!thToksEdef\!taRuleColumnTemplate=
{\noexpand\hfil
\noexpand\startglobalTABLEcolor % added
\noexpand\vrule
\noexpand\!thWidth
- \ifnum\!tgCode=1
+ \ifnum\!tgCode=\plusone
\ifx\!tgValue\empty
\the\LineThicknessFactor
\else
@@ -814,7 +795,7 @@
\the\!taRuleColumnTemplate}%
\!tfAdjoinPriorColumn}
-\def\!ttShortHruleA%
+\def\!ttShortHruleA
{\!ttGetHalfRuleThickness
\startglobalTABLEcolor % added
\leaders\hrule\!thHeight\dimen0\!thDepth\dimen0\hfill
@@ -834,23 +815,25 @@
%D extensions concern the second level check, the first
%D subbranch and advancing the column.
+\ifx\mscount\undefined \newcount\mscount \fi
+
\def\!ttuse#1%
- {\ifnum#1>\@ne
+ {\ifnum#1>\plusone
\omit
- \scratchcounter=\currentTABLEcolumn % added
- \advance\scratchcounter by #1% % added
- \advance\scratchcounter by -1 % added
- \ifnum\scratchcounter>\maxTABLEcolumn % added
- \def\next% % added
- {\setTABLEerror\TABLEspanoverflow % added
- \handleTABLEerror}% % added
- \else % added
- \def\next% % added
- {\global\advance\currentTABLEcolumn by #1% % added
- \global\advance\currentTABLEcolumn by -1 % added
- \mscount=#1% \mscount is in Plain
- \advance\mscount by \m@ne
- \advance\mscount by \mscount
+ \scratchcounter\currentTABLEcolumn % added
+ \advance\scratchcounter #1% % added
+ \advance\scratchcounter \minusone % added
+ \ifnum\scratchcounter>\maxTABLEcolumn % added
+ \def\next % added
+ {\setTABLEerror\TABLEspanoverflow % added
+ \handleTABLEerror}% % added
+ \else % added
+ \def\next % added
+ {\global\advance\currentTABLEcolumn #1% % added
+ \global\advance\currentTABLEcolumn \minusone % added
+ \mscount#1% \mscount is in Plain
+ \advance\mscount \m@ne
+ \advance\mscount \mscount
\!thLoop
\ifnum\mscount>\@ne
\sp@n % from Plain (\span\omit \advance\mscount\m@ne)
@@ -858,8 +841,8 @@
\span}%
\fi % added
\else % added
- \def\next% conflicts with possible next \omit % added
- {\global\advance\currentTABLEcolumn by 1 }% % added
+ \def\next % conflicts with possible next \omit % added
+ {\global\advance\currentTABLEcolumn \plusone}% % added
\fi
\next} % added
@@ -871,8 +854,8 @@
%D such hacks become a second nature. However, redefining \type
%D {\omit} and \type{\span} is not that easy.}
-\def\TABLEnoalign%
- {\noalign\bgroup\let\noalign=\relax\let\next=}
+\def\TABLEnoalign
+ {\noalign\bgroup\let\noalign\relax\let\next=}
%D \macros
%D {starttable}
@@ -896,29 +879,31 @@
%D
%D \showsetup{starttable}
-\def\starttabel%
+\def\starttable
{\bgroup
- \ifinsidefloat\else
- \startbaselinecorrection % \outer..
- \fi
+ \doifelsenothing\@@tikader
+ {\ifinsidefloat\else\startbaselinecorrection\fi}
+ {\startframedcontent[\@@tikader]}%
\postponefootnotes
\firststagestartTABLE}
-\def\stoptabel%
+\def\stoptable
{\TABLEtail
- \global\let\@@TABLEhead\empty
- \global\let\@@TABLEtail\empty
+ \globalletempty\@@TABLEhead
+ \globalletempty\@@TABLEtail
\finishTABLE
- \ifinsidefloat\else
- \stopbaselinecorrection % \outer..
- \goodbreak % compensates all the nobreaks
- \fi
+ \doifelsenothing\@@tikader
+ {\ifinsidefloat\else
+ \stopbaselinecorrection
+ \goodbreak % compensates all the nobreaks
+ \fi}
+ {\stopframedcontent}%
\egroup}
%D Before we can grab the argument, we have to make sure that
%D the \CATCODES\ are set. The first stage takes care of that.
-\def\firststagestartTABLE%
+\def\firststagestartTABLE
{\bgroup % kan-ie weg?
\global\intabletrue
\pushouterbarandquote
@@ -937,11 +922,11 @@
%D \starttypen
%D \definetabletemplate[test][|||]
%D
-%D \starttabel[test]
+%D \starttable[test]
%D \VL test \VL test \VL\AR
%D \VL test \VL test \VL\AR
%D \VL test \VL test \VL\AR
-%D \stoptabel
+%D \stoptable
%D \stoptypen
%D
%D The implementation of the definition macro is not that
@@ -967,7 +952,7 @@
\fi
\egroup}
-\def\definetabletemplate%
+\def\definetabletemplate
{\bgroup
\catcode`\|=\@@other
\doquadrupleempty\dodefinetabletemplate}
@@ -1011,16 +996,16 @@
\def\complexsecondstagestartTABLE#1[#2]%
{\convertargument|\to\asciiA
\convertargument#2\to\asciiB
- \doifinstringelse{\asciiA}{\asciiB}
- {\gdef\restartTABLE%
+ \doifinstringelse\asciiA\asciiB
+ {\gdef\restartTABLE
{\gdef\restartTABLE{\thirdstagestartTABLE{#2}}%
\prepareTABLEsplitting
\restartTABLE
\TABLEhead}}
{\doifdefinedelse{\c!Table#2}
- {\gdef\restartTABLE%
+ {\gdef\restartTABLE
{\getvalue{\c!Table#2}}}
- {\gdef\restartTABLE%
+ {\gdef\restartTABLE
{\gdef\restartTABLE{\getvalue{#2}}%
\prepareTABLEsplitting
\restartTABLE
@@ -1037,12 +1022,12 @@
\setTABLEaction\TABLEunknown
\setTABLEforce\TABLEunknown
\setTABLEerror\TABLEunknown
- \global\let\TABLEgrayline=\empty
- \global\let\nextTABLEgrayline=\empty
\global\TABLEgraylinefalse
\global\TABLEgraydonefalse
- \global\let\TABLEgraylineerror =\empty
- \global\let\TABLEgraylinestatus=\empty
+ \globalletempty\TABLEgrayline
+ \globalletempty\nextTABLEgrayline
+ \globalletempty\TABLEgraylineerror
+ \globalletempty\TABLEgraylinestatus
\resetVLvalues
\appendtoks\popouterbarandquote\to\EveryTable
\appendtoks\localTABLEsetup\to\EveryTable
@@ -1057,10 +1042,10 @@
\forgetall % added
\doifsomething{#1}
{\def\TABLEformat{#1}%
- \expandafter\getTABLEnofcolumns\expandafter{\TABLEformat}%
+ %\expandafter\getTABLEnofcolumns\expandafter{\TABLEformat}%
\expandafter\BeginFormat\TABLEformat\EndFormat}}
-\def\finishTABLE%
+\def\finishTABLE
{\chuckTABLEautorow
\unskip\crcr
\EndTable
@@ -1076,34 +1061,34 @@
%D support captions too, we will also reserve some space for
%D those later on.
-\def\prepareTABLEsplitting%
- {\global\TABLEheight=\!!zeropoint
+\def\prepareTABLEsplitting
+ {\global\TABLEheight\zeropoint
\ifsplittables
\ifx\TABLEhead\empty
- \global\TABLEheadheight=\!!zeropoint
+ \global\TABLEheadheight\zeropoint
\else
- \setbox0=\vbox
+ \setbox0\vbox
\bgroup
\def\doEndOfTableLine##1##2##3{\normalTABLElineformat##2##3}%
\restartTABLE\TABLEhead
\finishTABLE
- \global\TABLEheadheight=\ht0
+ \global\TABLEheadheight\ht0
\fi
\ifx\TABLEtail\empty
- \global\TABLEtailheight=\!!zeropoint
+ \global\TABLEtailheight\zeropoint
\else
- \setbox0=\vbox
+ \setbox0\vbox
\bgroup
\def\doEndOfTableLine##1##2##3{\normalTABLElineformat##2##3}%
\restartTABLE\TABLEtail
\finishTABLE
- \global\TABLEtailheight=\ht0
+ \global\TABLEtailheight\ht0
\fi
\else
- \global\TABLEheadheight=\!!zeropoint
- \global\TABLEtailheight=\!!zeropoint
+ \global\TABLEheadheight\zeropoint
+ \global\TABLEtailheight\zeropoint
\fi
- \global\TABLEheight=\!!zeropoint
+ \global\TABLEheight\zeropoint
\calculatemaxTABLEheight\docalculatemaxTABLEheight}
%D \macros
@@ -1117,17 +1102,17 @@
%D For example:
%D
%D \starttypen
-%D \starttabellen[|||]
+%D \starttables[|||]
%D \HL
%D \VL element \VL atom weight \VL\AR
%D \HL
%D \VL ....... \VL ........... \VL\AR
%D \VL ....... \VL ........... \VL\AR
%D \HL
-%D \stoptabellen
+%D \stoptables
%D \stoptypen
-\def\starttabellen%
+\def\starttables
{\bgroup
\ifinsidefloat\else
\baselinecorrection
@@ -1135,12 +1120,12 @@
\topbaselinecorrection
\fi
\forgetall
- \global\let\absmaxTABLEheight=\!!zeropoint
+ \globallet\absmaxTABLEheight\zeropoint
\splittablestrue
\global\TABLEinbreakfalse
\firststagestartTABLE}
-\def\stoptabellen%
+\def\stoptables
{\TABLEtail
\finishTABLE
\ifinsidefloat\else
@@ -1154,20 +1139,20 @@
%D something like:
%D
%D \starttypen
-%D \starttabelkop
+%D \starttablekop
%D \HL
%D \VL element \VL atom weight \VL\AR
%D \HL
-%D \stoptabelkop
+%D \stoptablekop
%D
-%D \starttabelstaart
+%D \starttablestaart
%D \HL
-%D \stoptabelstaart
+%D \stoptablestaart
%D
-%D \starttabellen[|||]
+%D \starttables[|||]
%D \VL ....... \VL ........... \VL\AR
%D \VL ....... \VL ........... \VL\AR
-%D \stoptabellen
+%D \stoptables
%D \stoptypen
%D
%D This time each split table gets a head line and ends with
@@ -1180,17 +1165,17 @@
\let\@@TABLEhead\empty \def\TABLEhead{\@@TABLEhead}
\let\@@TABLEtail\empty \def\TABLEtail{\@@TABLEtail}
-\letvalue{\e!start \e!tabelkop}=\undefined
-\letvalue{\e!stop \e!tabelkop}=\undefined
-\letvalue{\e!start\e!tabelstaart}=\undefined
-\letvalue{\e!stop \e!tabelstaart}=\undefined
+\letvalue{\e!start\e!tablehead}=\undefined
+\letvalue{\e!stop \e!tablehead}=\undefined
+\letvalue{\e!start\e!tabletail}=\undefined
+\letvalue{\e!stop \e!tabletail}=\undefined
\expanded
- {\def\csname\e!start\e!tabelkop\endcsname##1\csname\e!stop\e!tabelkop\endcsname%
+ {\def\csname\e!start\e!tablehead\endcsname##1\csname\e!stop\e!tablehead\endcsname%
{\noexpand\setTABLEhead##1\noexpand\end}}
\expanded
- {\def\csname\e!start\e!tabelstaart\endcsname##1\csname\e!stop\e!tabelstaart\endcsname%
+ {\def\csname\e!start\e!tabletail\endcsname##1\csname\e!stop\e!tabletail\endcsname%
{\noexpand\setTABLEtail##1\noexpand\end}}
%D The second argument is a dummy one, by scanning for it, we
@@ -1210,36 +1195,36 @@
%D algoritm evolved during the development of the split option
%D and will probably be improved bit by bit.
-\def\docalculatemaxTABLEheight%
+\def\docalculatemaxTABLEheight
{\ifbinnenkolommen
\getcolumnstatus\column\scratchcounter\total\dimen0\goal\dimen2\\%
\else
\ifdim\pagegoal<\maxdimen
- \dimen0=\pagetotal
- \dimen2=\pagegoal
+ \dimen0\pagetotal
+ \dimen2\pagegoal
\else
- \dimen0=\!!zeropoint
- \dimen2=\teksthoogte
+ \dimen0\zeropoint
+ \dimen2\teksthoogte
\fi
\fi
- \advance\dimen2 by -\dimen0
- \global\TABLEmaxheight=\dimen2
- \global\advance\TABLEmaxheight by -\dp\strutbox
- \ifdim\prevdepth<\maxdimen\ifdim\prevdepth>\!!zeropoint
- \global\advance\TABLEmaxheight by -\dp\strutbox
- \global\advance\TABLEmaxheight by -\parskip
+ \advance\dimen2 -\dimen0
+ \global\TABLEmaxheight\dimen2
+ \global\advance\TABLEmaxheight -\dp\strutbox
+ \ifdim\prevdepth<\maxdimen\ifdim\prevdepth>\zeropoint
+ \global\advance\TABLEmaxheight -\dp\strutbox
+ \global\advance\TABLEmaxheight -\parskip
\fi\fi}
-\def\nocalculatemaxTABLEheight%
+\def\nocalculatemaxTABLEheight
{\ifbinnenkolommen
\getcolumnstatus\column\scratchcounter\total\dimen0\goal\dimen2\\%
\else
- \dimen0=\!!zeropoint
- \dimen2=\teksthoogte
+ \dimen0\zeropoint
+ \dimen2\teksthoogte
\fi
- \advance\dimen2 by -\dimen0
- \global\TABLEmaxheight=\dimen2
- \global\advance\TABLEmaxheight by -\dp\strutbox}
+ \advance\dimen2 -\dimen0
+ \global\TABLEmaxheight\dimen2
+ \global\advance\TABLEmaxheight -\dp\strutbox}
\def\calculatemaxTABLEheight#1%
{\ifsplittables
@@ -1256,20 +1241,20 @@
\nocalculatemaxTABLEheight
\fi
\ifdim\TABLEmaxheight<\absmaxTABLEheight % forces equal columns
- \global\TABLEmaxheight=\absmaxTABLEheight
+ \global\TABLEmaxheight\absmaxTABLEheight
\else
\xdef\absmaxTABLEheight{\the\TABLEmaxheight}%
\fi
- \global\TABLEheight=\!!zeropoint
+ \global\TABLEheight\zeropoint
\else
- \global\TABLEmaxheight=\maxdimen
+ \global\TABLEmaxheight\maxdimen
\fi}
%D When splitting tables, we have to remove the top skip when
%D we're in the main vertical list, else we remove whatever
%D skip \TEX\ adds.
-\def\removeTABLEtopskip%
+\def\removeTABLEtopskip
{\ifinsidefloat
\hbox{\strut}\kern-\lineheight
\else
@@ -1299,37 +1284,37 @@
%D screen and log file as well as visualized in the table in
%D teletype.
-\def\handleTABLEerror%
+\def\handleTABLEerror
{\ifTABLEgrayline \else
\ifnum\TABLEerror=\TABLEunknown \else
\setTABLEaction\TABLEunknown
- \global\let\checkTABLEautorow=\empty
- \global\let\chuckTABLEautorow=\empty
+ \globalletempty\checkTABLEautorow
+ \globalletempty\chuckTABLEautorow
\fi
\ifcase\TABLEerror
% no error
\or
% \TABLEmissingrow
\tttf [missing row]%
- \writestatus{TABLE}{missing row}%
+ \writestatus\m!TABLE{missing row}%
\SR
\or
% \TABLEmissingcolumn
\fillTABLEcolumns
\tttf [missing column]%
- \writestatus{TABLE}{missing column}%
+ \writestatus\m!TABLE{missing column}%
\SR
\or
% \TABLEspanoverflow
\fillTABLEcolumns
\tttf [columnspan too large]%
- \writestatus{TABLE}{columnspan too large}%
+ \writestatus\m!TABLE{columnspan too large}%
\SR
\or
% \TABLEdivisionoverflow
\fillTABLEcolumns
\tttf [division line too long]%
- \writestatus{TABLE}{division line too long}%
+ \writestatus\m!TABLE{division line too long}%
\SR
\fi
\fi
@@ -1337,19 +1322,19 @@
\finishTABLErow
\fi}
-\def\finishTABLErow%
+\def\finishTABLErow
{\crcr
\TABLEnoalign
{\nobreak
\setTABLEaction\TABLEunknown
\setTABLEerror\TABLEunknown
- \global\let\checkTABLEautorow=\empty
- \global\let\chuckTABLEautorow=\empty
- \global\currentTABLEcolumn=0 }}
+ \globalletempty\checkTABLEautorow
+ \globalletempty\chuckTABLEautorow
+ \global\currentTABLEcolumn\zerocount}}
-\def\fillTABLEcolumns%
+\def\fillTABLEcolumns
{\ifnum\currentTABLEcolumn>\maxTABLEcolumn \else
- \global\advance\currentTABLEcolumn by 1
+ \global\advance\currentTABLEcolumn \plusone
\normalTABLEquote
\expandafter\fillTABLEcolumns
\fi}
@@ -1376,7 +1361,7 @@
%D itself into one of the other types.
%D
%D \starttypen
-%D \starttabel[||]
+%D \starttable[||]
%D \HL
%D \VL a separate row \VL\SR
%D \HL
@@ -1384,7 +1369,7 @@
%D \VL a mid row \VL\MR
%D \VL a last row \VL\LR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stoptypen
%D
%D In this example we could have used \type{\AR} without
@@ -1405,60 +1390,60 @@
\convertargument #1\to\asciiA
\convertcommand\TABLEendBCL\to\asciiB
\ifx\asciiA\asciiB \else
- \writestatus{TABLE}{confusing \asciiA\space and \asciiB}%
+ \writestatus\m!TABLE{confusing \asciiA\space and \asciiB}%
\gdef\TABLEgraylineerror%
- {\global\let\TABLEgraylineerror=\empty
+ {\globalletempty\TABLEgraylineerror
[\asciiA\unskip<->\asciiB\unskip]}%
\fi
\global\TABLEgraydonefalse
\fi}
-\def\defineTABLEendings%
- {\let\SR=\TableSR
- \let\FR=\TableFR
- \let\MR=\TableMR
- \let\LR=\TableLR
- \let\AR=\TableAR}
+\def\defineTABLEendings
+ {\let\SR\TableSR
+ \let\FR\TableFR
+ \let\MR\TableMR
+ \let\LR\TableLR
+ \let\AR\TableAR}
-\def\TableSR%
+\def\TableSR
{\ifTABLEgrayline \else
\ifnum\TABLEaction=\TABLEfirstrow
- \writestatus{TABLE}{change \string\SR\space into \string\MR/\string\LR}%
+ \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}%
\else\ifnum\TABLEaction=\TABLEmidrow
- \writestatus{TABLE}{change \string\SR\space into \string\MR/\string\LR}%
+ \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}%
\else\ifnum\TABLEaction=\TABLEmidrow
- \writestatus{TABLE}{change \string\SR\space into \string\MR/\string\LR}%
+ \writestatus\m!TABLE{change \string\SR\space into \string\MR/\string\LR}%
\fi\fi\fi
\fi
\checkTABLErow\SR
\endTABLErow\TABLEseparaterow\TABLErowfactor\TABLErowfactor}
-\def\TableFR%
+\def\TableFR
{\ifTABLEgrayline \else
\ifnum\TABLEaction=\TABLEmidrow
- \writestatus{TABLE}{change \string\FR\space into \string\MR/\string\LR}%
+ \writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}%
\else\ifnum\TABLEaction=\TABLElastrow
- \writestatus{TABLE}{change \string\FR\space into \string\MR/\string\LR}%
+ \writestatus\m!TABLE{change \string\FR\space into \string\MR/\string\LR}%
\fi\fi
\fi
\checkTABLErow\FR
\endTABLErow\TABLEfirstrow\TABLErowfactor\TABLErowzero}
-\def\TableMR%
+\def\TableMR
{\ifTABLEgrayline \else
\ifnum\TABLEaction=\TABLErule
- \writestatus{TABLE}{change \string\MR\space into \string\FR/\string\SR}%
+ \writestatus\m!TABLE{change \string\MR\space into \string\FR/\string\SR}%
\else\ifnum\TABLEaction=\TABLElastrow
- \writestatus{TABLE}{change \string\MR\space into \string\FR}%
+ \writestatus\m!TABLE{change \string\MR\space into \string\FR}%
\fi\fi
\fi
\checkTABLErow\MR
\endTABLErow\TABLEmidrow00}
-\def\TableLR%
+\def\TableLR
{\ifTABLEgrayline \else
\ifnum\TABLEaction=\TABLErule
- \writestatus{TABLE}{change \string\LR\space into \string\FR/\string\SR}%
+ \writestatus\m!TABLE{change \string\LR\space into \string\FR/\string\SR}%
\fi
\fi
\checkTABLErow\LR
@@ -1477,8 +1462,8 @@
\newif\ifcheckTABLEcolumns
-\let\beforeTABLEline=\empty
-\let\afterTABLEline =\empty
+\let\beforeTABLEline\empty
+\let\afterTABLEline \empty
\def\doendTABLErow#1#2#3%
{\handleTABLEbreak#2#3%
@@ -1502,7 +1487,7 @@
\fi
\TABLEnoalign
{\setTABLEforce\TABLEunknown
- \global\currentTABLEcolumn=0 }%
+ \global\currentTABLEcolumn\zerocount}%
\afterTABLEline}
\def\endTABLErow#1#2#3%
@@ -1524,30 +1509,30 @@
%D check takes care of the first and mid rows, the chuck macro
%D |<|how about that name|>| handles the last row.
-\def\TableAR%
+\def\TableAR
{\ifTABLEgraydone
- \global\let\checkTABLEautorow=\empty
- \global\let\chuckTABLEautorow=\empty
+ \globalletempty\checkTABLEautorow
+ \globalletempty\chuckTABLEautorow
\global\TABLEgraydonefalse
\TABLEendBCL
\else
- \global\let\checkTABLEautorow=\docheckTABLEautorow
- \global\let\chuckTABLEautorow=\dochuckTABLEautorow
+ \globallet\checkTABLEautorow\docheckTABLEautorow
+ \globallet\chuckTABLEautorow\dochuckTABLEautorow
\fi}
-\let\checkTABLEautorow=\empty
-\let\chuckTABLEautorow=\empty
+\let\checkTABLEautorow\empty
+\let\chuckTABLEautorow\empty
-\def\docheckTABLEautorow%
- {\global\let\checkTABLEautorow=\empty
+\def\docheckTABLEautorow
+ {\globallet\checkTABLEautorow\empty
\ifnum\TABLEaction=\TABLErule \FR
\else\ifnum\TABLEaction=\TABLEunknown \FR
\else \MR
\fi\fi}
-\def\dochuckTABLEautorow%
- {\global\let\checkTABLEautorow=\empty
- \global\let\chuckTABLEautorow=\empty
+\def\dochuckTABLEautorow
+ {\globalletempty\checkTABLEautorow
+ \globalletempty\chuckTABLEautorow
\ifnum\TABLEaction=\TABLErule \SR
\else\ifnum\TABLEaction=\TABLEunknown \SR
\else \LR
@@ -1558,28 +1543,32 @@
\def\handleTABLEbreak#1#2%
{\ifsplittables
- \setbox0=\hbox{\AugmentedTableStrut{#1}{#2}}%
- \getboxheight\dimen0\of\box0\relax
+ \setbox0\hbox{\AugmentedTableStrut{#1}{#2}}%
+ \getboxheight\dimen0\of\box0\relax
\ifdim\TABLEparheight>\dimen0 % new
- \dimen0=\TABLEparheight % new
- \global\TABLEparheight=\!!zeropoint % new
+ \advance\dimen0-\lineheight % newer
+ \ifdim\dimen0<\zeropoint % newer
+ \dimen2\zeropoint % newer
+ \fi % newer
+ \advance\dimen0 \TABLEparheight % new
+ \global\TABLEparheight\zeropoint % new
\fi % new
\ifTABLEgrayline \else
- \global\advance\TABLEheight by \dimen0
+ \global\advance\TABLEheight\dimen0
\fi
\ifTABLEinbreak
- \global\let\beforeTABLEline=\empty
+ \globalletempty\beforeTABLEline
\gdef\afterTABLEline{\TABLEnoalign{\nobreak}}%
\else
\dimen2=\TABLEheight
- \advance\dimen2 by \dp\strutbox
- \advance\dimen2 by \TABLEtailheight
- \advance\dimen2 by \TABLEcaptionheight
- \advance\dimen2 by \lineheight % we're ahead
+ \advance\dimen2 \dp\strutbox
+ \advance\dimen2 \TABLEtailheight
+ \advance\dimen2 \TABLEcaptionheight
+ \advance\dimen2 \lineheight % we're ahead
\ifdim\dimen2>\TABLEmaxheight
- \gdef\beforeTABLEline%
+ \gdef\beforeTABLEline
{\setTABLEforce\TABLEforcelastrow}%
- \gdef\afterTABLEline%
+ \gdef\afterTABLEline
{\TABLEnoalign
{\nobreak
\global\TABLEinbreaktrue}%
@@ -1596,12 +1585,12 @@
\global\TABLEinbreakfalse
\setTABLEforce\TABLEforcefirstrow}}%
\else
- \global\let\beforeTABLEline=\empty
+ \globalletempty\beforeTABLEline
\gdef\afterTABLEline{\TABLEnoalign{\nobreak}}%
\fi
\fi
\else
- \global\let\beforeTABLEline=\empty
+ \globalletempty\beforeTABLEline
\gdef\afterTABLEline{\TABLEnoalign{\nobreak}}%
\fi}
@@ -1610,7 +1599,7 @@
\def\endofTABLEline[#1][#2->#3]#4#5%
{\ifx#2#3\else
- \writestatus{TABLE}{\string#2\space changed into \string#3}%
+ \writestatus\m!TABLE{\string#2\space changed into \string#3}%
\fi
\iftracetables
\bgroup
@@ -1633,8 +1622,8 @@
% \tttf\space\TABLEgraylineerror
% \egroup
\fi\fi
- \global\let\TABLEgraylinestatus=\empty
- \global\let\TABLEgraylineerror =\empty
+ \globalletempty\TABLEgraylinestatus
+ \globalletempty\TABLEgraylineerror
\expandafter\normalTABLElineformat#4#5\crcr % \crcr nodig ?
\TABLEnoalign{\nobreak\global\setTABLEactiontrue}}
@@ -1655,15 +1644,26 @@
%D \TABLE\ changes the catcode when needed.}
\bgroup
-\catcode`\|=\@@other
+\catcode`\&=\@@other
\gdef\getTABLEnofcolumns#1%
{\bgroup
\convertargument#1\to\ascii
- \@EA\doglobal\@EA\counttoken\@EA|\@EA\in\ascii\to\maxTABLEcolumn
- \global\advance\maxTABLEcolumn by -1
+ \@EA\doglobal\@EA\counttoken\@EA&\@EA\in\ascii\to\maxTABLEcolumn
+ \global\advance\maxTABLEcolumn \minusone
+ \global\divide\maxTABLEcolumn 2
\egroup}
\egroup
+\def\!ttDoHalign
+ {\baselineskip \zeropoint
+ \lineskiplimit\zeropoint
+ \lineskip \zeropoint
+ \tabskip \zeropoint
+ \expanded{\getTABLEnofcolumns{\the\!taPreamble}}% added
+ \halign \the\!taTableSpread \bgroup
+ \span\the\!taPreamble
+ \ifx \!tfRowOfWidths \empty \else \!tfRowOfWidths \cr \fi}
+
%D \startopsomming[3*ruim]
%D \sym{\type{\VL}} a vertical line
%D \sym{\type{\VC}} a vertical colored line
@@ -1671,76 +1671,69 @@
%D \sym{\type{\HC}} a horizontal colored line
%D \stopopsomming
-\def\defineTABLErules%
- {\let\VL=\TableVL
- \let\VC=\TableVC
- \let\HL=\TableHL
- \let\HC=\TableHC}
+\def\defineTABLErules
+ {\let\VL\TableVL
+ \let\VC\TableVC
+ \let\HL\TableHL
+ \let\HC\TableHC}
-\def\TableVL%
+\def\TableVL
{\checkTABLEautorow
\nextTABLEgrayline
\ifnum\currentTABLEcolumn>\maxTABLEcolumn
\setTABLEerror\TABLEmissingrow
\handleTABLEerror
\else
- \global\advance\currentTABLEcolumn by 1
+ \global\advance\currentTABLEcolumn \plusone
\expandafter\doTableVL
\fi}
-%\def\doTableVL%
-% {\complexorsimpleTable{VL}}
-
-\def\doTableVL%
+\def\doTableVL
{\futurelet\next\dodoTableVL}
-\def\dodoTableVL%
+\def\dodoTableVL
{\docomplexorsimpleTable\complexTableVL\simpleTableVL}
\def\complexTableVL[#1]%
{\scratchcounter=0#1%
- \multiply\scratchcounter by \@@tiVLwidth
+ \multiply\scratchcounter \@@tiVLwidth
\setxvalue{wVL\the\currentTABLEcolumn}{\the\scratchcounter}%
\simpleTableVL}
-\def\simpleTableVL%
+\def\simpleTableVL
{\doifundefined{wVL\the\currentTABLEcolumn}%
{\setgvalue{wVL\the\currentTABLEcolumn}{\@@tiVLwidth}}%
- \gdef\TABLEbeforebar%
+ \gdef\TABLEbeforebar
{\getvalue{bVL\the\currentTABLEcolumn}%
- \global\letvalue{bVL\the\currentTABLEcolumn}=\empty}%
- \gdef\TABLEafterbar%
+ \letgvalueempty{bVL\the\currentTABLEcolumn}}%
+ \gdef\TABLEafterbar
{\getvalue{eVL\the\currentTABLEcolumn}%
- \global\letvalue{eVL\the\currentTABLEcolumn}=\empty}%
+ \letgvalueempty{eVL\the\currentTABLEcolumn}}%
\edef\@@tiVLwidth{\getvalue{wVL\the\currentTABLEcolumn}}%
\expanded{\normalTABLEcomplexbar\@@tiVLwidth\space}}% \relax breaks \use
-
-\def\resetVLvalues%
- {\dostepwiserecurse{0}{\maxTABLEcolumn}{1}
- {\global\setvalue{wVL\recurselevel}{\@@tiVLwidth}%
- \global\letvalue{bVL\recurselevel}=\empty
- \global\letvalue{eVL\recurselevel}=\empty}%
- \global\currentTABLEcolumn=0 }
-
-\def\TableVC%
+\def\resetVLvalues
+ {\dostepwiserecurse\zerocount\maxTABLEcolumn\plusone
+ {\setgvalue{wVL\recurselevel}{\@@tiVLwidth}%
+ \letgvalueempty{bVL\recurselevel}%
+ \letgvalueempty{eVL\recurselevel}}%
+ \global\currentTABLEcolumn\zerocount}
+
+\def\TableVC
{\checkTABLEautorow
\nextTABLEgrayline
\ifnum\currentTABLEcolumn>\maxTABLEcolumn
\setTABLEerror\TABLEmissingrow
\handleTABLEerror
\else
- \global\advance\currentTABLEcolumn by 1
+ \global\advance\currentTABLEcolumn \plusone
\expandafter\doTableVC
\fi}
-%\def\doTableVC%
-% {\complexorsimpleTable{VC}}
-
-\def\doTableVC%
+\def\doTableVC
{\futurelet\next\dodoTableVC}
-\def\dodoTableVC%
+\def\dodoTableVC
{\docomplexorsimpleTable\complexTableVC\simpleTableVC}
\def\complexTableVC[#1]%
@@ -1750,21 +1743,21 @@
{\localstopcolor}%
\simpleTableVC}
-\def\simpleTableVC%
+\def\simpleTableVC
{\global\setvalue{bVL\the\currentTABLEcolumn}%
{\getvalue{bVC\the\currentTABLEcolumn}}%
\global\setvalue{eVL\the\currentTABLEcolumn}%
{\getvalue{eVC\the\currentTABLEcolumn}}%
\doTableVL}
-\def\TableHL%
+\def\TableHL
{\ifnum\currentTABLEcolumn>\maxTABLEcolumn
\chuckTABLEautorow
- \else\ifnum\currentTABLEcolumn=0
+ \else\ifnum\currentTABLEcolumn=\zerocount
%\chuckTABLEautorow
\TABLEnoalign
- {\global\let\checkTABLEautorow=\empty
- \global\let\chuckTABLEautorow=\empty}%
+ {\globalletempty\checkTABLEautorow
+ \globalletempty\chuckTABLEautorow}%
\else
\setTABLEerror\TABLEmissingcolumn
\handleTABLEerror
@@ -1774,35 +1767,35 @@
\def\complexTableHL[#1]%
{\TABLEnoalign
{\scratchcounter=0#1%
- \multiply\scratchcounter by \@@tiHLheight
+ \multiply\scratchcounter \@@tiHLheight
\edef\@@tiHLheight{\the\scratchcounter}%
\simpleTableHL}}
-\def\simpleTableHL%
+\def\simpleTableHL
{\TABLEnoalign
{\nobreak
\ifnum\TABLEaction=\TABLErule
- \writestatus{TABLE}{skipping \string\HL}% \statusmessage
+ \writestatus\m!TABLE{skipping \string\HL}% \statusmessage
\else
\ifnum\TABLEaction=\TABLEmidrow
- \writestatus{TABLE}{change \string\MR\space into \string\LR/\string\SR}%
+ \writestatus\m!TABLE{change \string\MR\space into \string\LR/\string\SR}%
\else\ifnum\TABLEaction=\TABLEfirstrow
- \writestatus{TABLE}{change \string\MR\space into \string\SR}%
+ \writestatus\m!TABLE{change \string\MR\space into \string\SR}%
\fi\fi
\startHLcommand
\expandafter\normalTABLEfullrule\@@tiHLheight
\stopHLcommand
- \global\let\startHLcommand=\empty
- \global\let\stopHLcommand =\empty
+ \globalletempty\startHLcommand
+ \globalletempty\stopHLcommand
\accountTABLElinewidth
\fi
\setTABLEaction\TABLErule
\nobreak}}
-\let\startHLcommand=\empty
-\let\stopHLcommand =\empty
+\let\startHLcommand\empty
+\let\stopHLcommand \empty
-\def\TableHC%
+\def\TableHC
{\complexorsimpleTable{HC}}
\def\complexTableHC[#1]%
@@ -1811,10 +1804,10 @@
\gdef\stopHCcommand {\localstopcolor}}%
\simpleTableHC}
-\def\simpleTableHC%
+\def\simpleTableHC
{\TABLEnoalign
- {\global\let\startHLcommand=\startHCcommand
- \global\let\stopHLcommand =\stopHCcommand}%
+ {\globallet\startHLcommand\startHCcommand
+ \globallet\stopHLcommand \stopHCcommand}%
\HL}
%D \startopsomming[3*ruim]
@@ -1828,15 +1821,15 @@
% n+1 uitleggen
-\def\defineTABLEsteps%
- {\let\NL=\TableNL
- \let\NR=\TableNR
- \let\NC=\TableNC
- \let\FC=\TableNC
- \let\MC=\TableNC
- \let\LC=\TableNC}
+\def\defineTABLEsteps
+ {\let\NL\TableNL
+ \let\NR\TableNR
+ \let\NC\TableNC
+ \let\FC\TableNC
+ \let\MC\TableNC
+ \let\LC\TableNC}
-\def\TableNL%
+\def\TableNL
{\complexorsimpleTable{NL}}
\def\complexTableNL[#1]%
@@ -1844,17 +1837,17 @@
{\edef\@@tiNL{#1}%
\simpleTableNL}}%
-\def\simpleTableNL%
+\def\simpleTableNL
{\TABLEnoalign
{\nobreak
- \setbox0=\vbox{\blanko[\@@tiNL]}%
- \global\advance\TABLEheight by \ht0
+ \setbox0\vbox{\blanko[\@@tiNL]}%
+ \global\advance\TABLEheight \ht0
\vskip\ht0
\nobreak}}
-\def\TableNR%
+\def\TableNR
{\ifnum\currentTABLEcolumn>\maxTABLEcolumn
- \global\currentTABLEcolumn=0
+ \global\currentTABLEcolumn\zerocount
\normalTABLElineending
\else
\setTABLEerror\TABLEmissingcolumn
@@ -1864,14 +1857,14 @@
{\nobreak
\setTABLEaction\TABLEunknown}}
-\def\TableNC%
+\def\TableNC
{\checkTABLEautorow
\nextTABLEgrayline
\ifnum\currentTABLEcolumn>\maxTABLEcolumn
\setTABLEerror\TABLEmissingrow
\handleTABLEerror
\else
- \global\advance\currentTABLEcolumn by 1
+ \global\advance\currentTABLEcolumn \plusone
\normalTABLEquote
\fi}
@@ -1893,36 +1886,36 @@
\newif\ifTABLEdivision
-\def\defineTABLEdivisions%
+\def\defineTABLEdivisions
{\global\TABLEdivisionfalse % in start
- \let\DL=\TableDL
- \let\DC=\TableDC
- \let\DV=\TableDV
- \let\VD=\TableDV
- \let\DR=\TableDR}
+ \let\DL\TableDL
+ \let\DC\TableDC
+ \let\DV\TableDV
+ \let\VD\TableDV
+ \let\DR\TableDR}
-\def\checkTABLEdivision%
+\def\checkTABLEdivision
{\ifTABLEdivision \else
\chuckTABLEautorow
- \global\currentTABLEcolumn=0
+ \global\currentTABLEcolumn\zerocount
\global\TABLEdivisiontrue
\fi}
-\def\TableDL%
+\def\TableDL
{\checkTABLEdivision
\complexorsimpleTable{DL}}
-\def\simpleTableDL%
+\def\simpleTableDL
{\complexTableDL[1]}
\def\complexTableDL[#1]%
{\ifnum\TABLEaction=\TABLErule
- \writestatus{TABLE}{skipping \string\DL}%
+ \writestatus\m!TABLE{skipping \string\DL}%
\else
\ifnum\TABLEaction=\TABLEmidrow
- \writestatus{TABLE}{change \string\MR\space into \string\LR/\string\SR}%
+ \writestatus\m!TABLE{change \string\MR\space into \string\LR/\string\SR}%
\else\ifnum\TABLEaction=\TABLEfirstrow
- \writestatus{TABLE}{change \string\MR\space into \string\SR}%
+ \writestatus\m!TABLE{change \string\MR\space into \string\SR}%
\fi\fi
\setTABLEaction=\TABLEunknown
\ifnum\currentTABLEcolumn>\maxTABLEcolumn
@@ -1930,28 +1923,28 @@
\handleTABLEerror
\fi
%\startHLcommand
- \ifnum#1=1
- \global\advance\currentTABLEcolumn by 2
- \let\next=\normalTABLEsinglerule
+ \ifnum#1=\plusone
+ \global\advance\currentTABLEcolumn 2
+ \let\next\normalTABLEsinglerule
\else
\ifnum#1<\maxTABLEcolumn
- \global\advance\currentTABLEcolumn by 1 % was 2
+ \global\advance\currentTABLEcolumn \plusone
\def\next{\normalTABLEmultirule{#1}}%
\else
\setTABLEerror\TABLEdivisionoverflow
- \let\next=\handleTABLEerror
+ \let\next\handleTABLEerror
\fi
\fi
\next
%\stopHLcommand
- %\global\let\startHLcommand=\empty
- %\global\let\stopHLcommand =\empty
+ %\globalletempty\startHLcommand
+ %\globalletempty\stopHLcommand
\fi}
-\def\TableDV%
+\def\TableDV
{\TableDCV\normalTABLEsimplebar}
-\def\TableDC%
+\def\TableDC
{\TableDCV\normalTABLEquote}
\def\TableDCV#1%
@@ -1961,31 +1954,17 @@
\setTABLEerror\TABLEmissingrow
\handleTABLEerror
\else
- \global\advance\currentTABLEcolumn by 1
+ \global\advance\currentTABLEcolumn \plusone
#1%
\fi}
-%\def\TableDR%
-% {\ifnum\currentTABLEcolumn<\maxTABLEcolumn % silent recovery
-% \setTABLEerror\TABLEmissingcolumn % some day warning
-% \handleTABLEerror
-% \else
-% \global\currentTABLEcolumn=0 % nog check
-% \normalTABLElineending
-% \fi
-% \TABLEnoalign
-% {\nobreak
-% \global\TABLEdivisionfalse
-% \accountTABLElinewidth % temporary solution
-% \setTABLEaction\TABLErule}}
-
-\def\TableDR%
+\def\TableDR
{\ifnum\currentTABLEcolumn<\maxTABLEcolumn % silent recovery
%\setTABLEerror\TABLEmissingcolumn % some day warning
%\handleTABLEerror
\finishTABLErow
\else
- \global\currentTABLEcolumn=0 % nog check
+ \global\currentTABLEcolumn\zerocount % nog check
\normalTABLElineending
\fi
\TABLEnoalign
@@ -1994,9 +1973,9 @@
\accountTABLElinewidth % temporary solution
\setTABLEaction\TABLErule}}
-\def\accountTABLElinewidth%
- {\scratchdimen=\LineThicknessUnit
- \global\advance\TABLEheight by \@@tiHLheight\scratchdimen}
+\def\accountTABLElinewidth
+ {\scratchdimen\LineThicknessUnit
+ \global\advance\TABLEheight \@@tiHLheight\scratchdimen}
%D \startopsomming[3*ruim]
%D \sym{\type{\BC}}
@@ -2014,51 +1993,51 @@
% definieer: \CL \RL (eerste \CL[green] = hele row! / \CL[1,green])
% dus: \CL en \RL mix tussen \HL en \BL
-\def\defineTABLEbackgrounds%
- {\let\BC =\TableBC
- \let\BL =\TableBL
- \let\BR =\TableBR
- \let\BACKGROUND=\TableBR
- \let\CL =\TableCL
- \let\RL =\TableRL
- \let\COLOR =\TableCOLOR
- \let\RASTER =\TableRASTER
- \global\let\lastTABLEc=\@@tiachtergrondkleur
- \global\let\lastTABLEr=\@@tiachtergrondraster
- \doifinsetelse{\@@tiachtergrond}{c,color}
- {\global\chardef\TABLEcr=1}
- {\global\chardef\TABLEcr=2}}
-
-\def\TableBC%
+\def\defineTABLEbackgrounds
+ {\let\BC \TableBC
+ \let\BL \TableBL
+ \let\BR \TableBR
+ \let\BACKGROUND\TableBR
+ \let\CL \TableCL
+ \let\RL \TableRL
+ \let\COLOR \TableCOLOR
+ \let\RASTER \TableRASTER
+ \globallet\lastTABLEc\@@tiachtergrondkleur
+ \globallet\lastTABLEr\@@tiachtergrondraster
+ \doifinsetelse\@@tiachtergrond{c,color}
+ {\global\chardef\TABLEcr1 }
+ {\global\chardef\TABLEcr2 }}
+
+\def\TableBC
{\ifTABLEgrayline
\normalTABLEquote
\else
\TABLEnoalign\bgroup
- \global\let\nextTABLEgrayline=\executeTABLEgrayline
- \global\let\TABLEgrayline\empty % new
- \let\BL=\doTableBL
- \let\BC=\doTableBC
+ \globallet\nextTABLEgrayline\executeTABLEgrayline
+ \globalletempty\TABLEgrayline % new
+ \let\BL\doTableBL
+ \let\BC\doTableBC
\expandafter\doTableBC
\fi}
-\def\doTableBC%
+\def\doTableBC
{\addtoTABLEgrayline{\BC}%
\gobbleTableBCL}
-\def\TableBL%
+\def\TableBL
{\TABLEnoalign\bgroup
- \global\let\nextTABLEgrayline=\executeTABLEgrayline
- \global\let\TABLEgrayline\empty % new
- \let\BL=\doTableBL
- \let\CL=\doTableCL
- \let\RL=\doTableRL
- \let\BC=\doTableBC
+ \globallet\nextTABLEgrayline\executeTABLEgrayline
+ \globalletempty\TABLEgrayline % new
+ \let\BL\doTableBL
+ \let\CL\doTableCL
+ \let\RL\doTableRL
+ \let\BC\doTableBC
\doTableBL}
-\def\doTableBL%
+\def\doTableBL
{\complexorsimpleTable{BL}}
-\def\simpleTableBL%
+\def\simpleTableBL
{\complexTableBL[,]}
\def\complexTableBL[#1]%
@@ -2067,7 +2046,7 @@
\def\TableBR#1%
{\TABLEnoalign
- {\global\let\nextTABLEgrayline=\executeTABLEgrayline
+ {\globallet\nextTABLEgrayline\executeTABLEgrayline
\checkTABLEgrayline#1\BR
\global\TABLEgraylinetrue}}
@@ -2080,20 +2059,20 @@
{\dodoanalyzeTABLEcr[1,#1,#2]}}
\def\dodoanalyzeTABLEcr[#1,#2,#3]%
- {\global\chardef\TABLEn=#1\relax
+ {\global\chardef\TABLEn#1\relax
\processaction
[#2]
- [ c=>\global\chardef\TABLEcr=1,
- color=>\global\chardef\TABLEcr=1,
- r=>\global\chardef\TABLEcr=2,
- raster=>\global\chardef\TABLEcr=2]%
+ [ c=>\global\chardef\TABLEcr1,%
+ color=>\global\chardef\TABLEcr1,%
+ r=>\global\chardef\TABLEcr2,%
+ raster=>\global\chardef\TABLEcr2]%
\ifcase\TABLEcr \or
- \doifnot{#3}{}{\xdef\lastTABLEc{#3}}%
+ \doifsomething{#3}{\xdef\lastTABLEc{#3}}%
\or
- \doifnot{#3}{}{\xdef\lastTABLEr{#3}}%
+ \doifsomething{#3}{\xdef\lastTABLEr{#3}}%
\fi}
-\def\handleTABLEcr%
+\def\handleTABLEcr
{\relax % else funny side effect
\ifcase\TABLEcr
% Can't happen!
@@ -2112,17 +2091,17 @@
{\dodoanalyzeTABLEcr[#2,#1,#3]}
{\dodoanalyzeTABLEcr[\ifTABLEgrayline1\else\maxTABLEcolumn\fi,#1,#2]}}
-\def\TableCL%
+\def\TableCL
{\TABLEnoalign\bgroup
- \global\let\nextTABLEgrayline=\executeTABLEgrayline
- \global\let\TABLEgrayline\empty % new
- \let\BL=\doTableBL
- \let\CL=\doTableCL
- \let\RL=\doTableRL
- \let\BC=\doTableBC
+ \globallet\nextTABLEgrayline\executeTABLEgrayline
+ \globalletempty\TABLEgrayline % new
+ \let\BL\doTableBL
+ \let\CL\doTableCL
+ \let\RL\doTableRL
+ \let\BC\doTableBC
\doTableCL}
-\def\doTableCL%
+\def\doTableCL
{\complexorsimpleTable{CL}}
\def\simpleTableCL% nog eens \'e\'en lijn van maken
@@ -2132,20 +2111,20 @@
{\analyzeTABLEcrl{c}[#1]%
\handleTABLEcr}
-\def\TableRL%
+\def\TableRL
{\TABLEnoalign\bgroup
- \global\let\nextTABLEgrayline=\executeTABLEgrayline
- \global\let\TABLEgrayline\empty % new
- \let\BL=\doTableBL
- \let\CL=\doTableCL
- \let\RL=\doTableRL
- \let\BC=\doTableBC
+ \globallet\nextTABLEgrayline\executeTABLEgrayline
+ \globalletempty\TABLEgrayline % new
+ \let\BL\doTableBL
+ \let\CL\doTableCL
+ \let\RL\doTableRL
+ \let\BC\doTableBC
\doTableRL}
-\def\doTableRL%
+\def\doTableRL
{\complexorsimpleTable{RL}}
-\def\simpleTableRL%
+\def\simpleTableRL
{\BL[\the\maxTABLEcolumn,r,\lastTABLEr]}
\def\complexTableRL[#1]%
@@ -2160,14 +2139,14 @@
\!!doneafalse
\fi\fi\fi\fi\fi
\if!!donea
- \gdef\TABLEgraylinestatus%
+ \gdef\TABLEgraylinestatus
{[\string#1]}%
- \gdef\TABLEendBCL%
+ \gdef\TABLEendBCL
{#1}%
\else
- \gdef\TABLEgraylineerror%
+ \gdef\TABLEgraylineerror
{[\string#2\string#1->\string#2\string\SR]}%
- \gdef\TABLEendBCL%
+ \gdef\TABLEendBCL
{\SR}%
\fi}
@@ -2193,15 +2172,15 @@
\def\doPreTableGL#1#2% betere namen
{\xdef\OldLineThicknessFactor{\the\LineThicknessFactor}%
\xdef\OldLineThicknessUnit{\the\LineThicknessUnit}%
- \global\LineThicknessFactor=1
- \setbox0=\hbox{\AugmentedTableStrut{#1}{#2}}%
+ \global\LineThicknessFactor\plusone
+ \setbox0\hbox{\AugmentedTableStrut{#1}{#2}}%
\getboxheight\dimen0\of\box0\relax
\xdef\TABLEgraylineHeight{\the\dimen0}%
- \global\LineThicknessUnit=\TABLEgraylineHeight}
+ \global\LineThicknessUnit\TABLEgraylineHeight}
-\def\doPostTableGL%
- {\global\LineThicknessFactor=\OldLineThicknessFactor
- \global\LineThicknessUnit =\OldLineThicknessUnit}
+\def\doPostTableGL
+ {\global\LineThicknessFactor\OldLineThicknessFactor
+ \global\LineThicknessUnit \OldLineThicknessUnit}
% kan simpeler
@@ -2216,8 +2195,8 @@
\def\dodocomplexTableGL#1#2[#3,#4,#5,#6]%
{\doifelsenothing{#4}{#1[#5]}{#1[#4]}%
\doPreTableGL\TABLEendofrowheight\TABLEendofrowdepth
- \ifnum#3=1 % else conflict with \omit in \=
- \let\next=\normalTABLEsinglerule
+ \ifnum#3=\plusone % else conflict with \omit in \=
+ \let\next\normalTABLEsinglerule
\else
\def\next{\normalTABLEmultirule{#3}}%
\fi
@@ -2225,7 +2204,7 @@
\doPostTableGL
#2}
-\def\TableBACKGROUND%
+\def\TableBACKGROUND
{\TableBR}
\def\simpleTableRASTER#1%
@@ -2234,20 +2213,20 @@
\def\complexTableRASTER[#1]%
{\docomplexTableRASTER[#1]}
-\def\simpleTableCOLOR%
+\def\simpleTableCOLOR
{\docomplexTableCOLOR[1]}
\def\complexTableCOLOR[#1]%
{\docomplexTableCOLOR[#1]}
-\def\TableRASTER%
+\def\TableRASTER
{\complexorsimpleTable{RASTER}}
-\def\TableCOLOR%
+\def\TableCOLOR
{\complexorsimpleTable{COLOR}}
\def\addtoTABLEgrayline#1%
- {\TABLEgraytoks=\expandafter{\TABLEgrayline}%
+ {\TABLEgraytoks\expandafter{\TABLEgrayline}%
\xdef\TABLEgrayline{\the\TABLEgraytoks\noexpand#1}}
\def\setTableBCL#1#2%
@@ -2262,69 +2241,69 @@
\fi}
\def\gobbleTableBCL#1%
- {\ifx#1\BC \let\next=\doTableBC \else
- \ifx#1\BL \let\next=\doTableBL \else
- \ifx#1\SR \setTableBCL\SR\SR \let\next=\egroup \else
- \ifx#1\FR \setTableBCL\FR\FR \let\next=\egroup \else
- \ifx#1\MR \setTableBCL\MR\MR \let\next=\egroup \else
- \ifx#1\LR \setTableBCL\LR\LR \let\next=\egroup \else
- \setTableBCL #1\SR \let\next=\egroup
+ {\ifx#1\BC \let\next\doTableBC \else
+ \ifx#1\BL \let\next\doTableBL \else
+ \ifx#1\SR \setTableBCL\SR\SR \let\next\egroup \else
+ \ifx#1\FR \setTableBCL\FR\FR \let\next\egroup \else
+ \ifx#1\MR \setTableBCL\MR\MR \let\next\egroup \else
+ \ifx#1\LR \setTableBCL\LR\LR \let\next\egroup \else
+ \setTableBCL #1\SR \let\next\egroup
\fi\fi\fi\fi\fi\fi
\next}
-\def\executeTABLEgrayline%
+\def\executeTABLEgrayline
{\TABLEnoalign
- {\def\BC%
- {\advance\currentTABLEcolumn by 1 }%
+ {\def\BC
+ {\advance\currentTABLEcolumn \plusone}%
\def\dodocomplexTableGL##1##2[##3,##4,##5,##6]%
- {\BC\advance\currentTABLEcolumn by ##3 }%
- \let\endTABLErow=\endTABLEgrayrow
- \currentTABLEcolumn=0
+ {\BC\advance\currentTABLEcolumn ##3 }%
+ \let\endTABLErow\endTABLEgrayrow
+ \currentTABLEcolumn\zerocount
\TABLEgrayline\TABLEendBCL % determine n of columns and height
- \advance\currentTABLEcolumn by -1
+ \advance\currentTABLEcolumn \minusone
\ifnum\currentTABLEcolumn>\maxTABLEcolumn
% error message too long line
- \global\let\TABLEgrayline=\empty
+ \globalletempty\TABLEgrayline
\else
% \message{n of color columns: \the\currentTABLEcolumn}\wait
\global\TABLEgraylinetrue % vanaf hier nog checken
\fi
- \global\currentTABLEcolumn=0}%
+ \global\currentTABLEcolumn\zerocount}%
\unskip\TABLEgrayline\TABLEendBCL
\TABLEnoalign
{\nobreak
\vskip-\TABLEgraylineHeight
\nobreak
\global\setTABLEactiontrue
- \global\currentTABLEcolumn=0
- \global\let\nextTABLEgrayline=\empty
+ \global\currentTABLEcolumn\zerocount
+ \globalletempty\nextTABLEgrayline
\global\TABLEgraydonetrue
\global\TABLEgraylinefalse}}
\def\endTABLEgrayrow#1#2#3%
{\ifcase#1\relax
- \global\chardef\TABLEendofrowheight=\TABLErowfactor
- \global\chardef\TABLEendofrowdepth =\TABLErowfactor
+ \global\chardef\TABLEendofrowheight\TABLErowfactor
+ \global\chardef\TABLEendofrowdepth \TABLErowfactor
\or
- \global\chardef\TABLEendofrowheight=\TABLErowfactor
- \global\chardef\TABLEendofrowdepth =\TABLErowfactor
+ \global\chardef\TABLEendofrowheight\TABLErowfactor
+ \global\chardef\TABLEendofrowdepth \TABLErowfactor
\or
- \global\chardef\TABLEendofrowheight=\TABLErowfactor
- \global\chardef\TABLEendofrowdepth =\TABLErowzero
+ \global\chardef\TABLEendofrowheight\TABLErowfactor
+ \global\chardef\TABLEendofrowdepth \TABLErowzero
\or
\ifnum\TABLEforce=\TABLEforcelastrow
- \global\chardef\TABLEendofrowheight=\TABLErowzero
- \global\chardef\TABLEendofrowdepth =\TABLErowfactor
+ \global\chardef\TABLEendofrowheight\TABLErowzero
+ \global\chardef\TABLEendofrowdepth \TABLErowfactor
\else\ifnum\TABLEforce=\TABLEforcefirstrow
- \global\chardef\TABLEendofrowheight=\TABLErowfactor
- \global\chardef\TABLEendofrowdepth =\TABLErowzero
+ \global\chardef\TABLEendofrowheight\TABLErowfactor
+ \global\chardef\TABLEendofrowdepth \TABLErowzero
\else
- \global\chardef\TABLEendofrowheight=\TABLErowzero
- \global\chardef\TABLEendofrowdepth =\TABLErowzero
+ \global\chardef\TABLEendofrowheight\TABLErowzero
+ \global\chardef\TABLEendofrowdepth \TABLErowzero
\fi\fi
\or
- \global\chardef\TABLEendofrowheight=\TABLErowzero
- \global\chardef\TABLEendofrowdepth =\TABLErowfactor
+ \global\chardef\TABLEendofrowheight\TABLErowzero
+ \global\chardef\TABLEendofrowdepth \TABLErowfactor
\fi}
\def\defineTABLEshorthands%
@@ -2336,33 +2315,32 @@
\def\SIX {\use{6}}%
\def\REF {\ReFormat}}
-\def\defineTABLEunits%
+\def\defineTABLEunits
{\processaction
[\@@tiafstand]
- [ \v!geen=>\OpenUp{0}{0}\def\LOW{\Lower6 },
- \v!klein=>\OpenUp{0}{0}\def\LOW{\Lower6 }, % == baseline
- \v!middel=>\OpenUp{1}{1}\def\LOW{\Lower7 },
- \v!groot=>\OpenUp{2}{2}\def\LOW{\Lower8 }]%
- \doifelse{\@@tiafstand}{\v!geen}
- {\chardef\TABLErowfactor=0 }
- {\chardef\TABLErowfactor=2 }}
+ [ \v!geen=>\OpenUp{0}{0}\def\LOW{\Lower6 },
+ \v!klein=>\OpenUp{0}{0}\def\LOW{\Lower6 }, % == baseline
+ \v!middel=>\OpenUp{1}{1}\def\LOW{\Lower7 },
+ \v!groot=>\OpenUp{2}{2}\def\LOW{\Lower8 }]%
+ \doifelse\@@tiafstand\v!geen
+ {\chardef\TABLErowfactor0 }
+ {\chardef\TABLErowfactor2 }}
-\def\dohandlebar%
+\def\dohandlebar
{\ifmmode
- \let\next=\domathmodebar
+ \@EA\domathmodebar
\else\ifintable
- \let\next=\domathmodebar
+ \@EAEAEA\domathmodebar
\else
- \let\next=\dotextmodebar
- \fi\fi
- \next}
+ \@EAEAEA\dotextmodebar
+ \fi\fi}
% De macro's t.b.v. instellingen.
-\def\steltabellenin%
- {\dosingleargument\dosteltabellenin}
+\def\setuptables
+ {\dosingleargument\dosetuptables}
-\def\dosteltabellenin[#1]%
+\def\dosetuptables[#1]%
{\getparameters[\??ti][#1]%
\processaction
[\@@tiuitlijnen]
@@ -2371,17 +2349,17 @@
\v!midden=>\def\TABLEparalignment{\raggedcenter},
\s!default=>\def\TABLEparalignment{\notragged},
\s!unknown=>\def\TABLEparalignment{\notragged}]%
- \assignalfadimension{\@@tiVL}{\@@tiVLwidth} {2}{4}{6}%
- \assignalfadimension{\@@tiHL}{\@@tiHLheight}{2}{4}{6}}
+ \assignalfadimension\@@tiVL\@@tiVLwidth 246%
+ \assignalfadimension\@@tiHL\@@tiHLheight246}
-\def\localTABLEsetup%
+\def\localTABLEsetup
{\@@ticommandos\relax
\expanded{\switchtobodyfont[\@@tikorps]}%
- \StrutHeightFactor =8
- \StrutDepthFactor =4
- \LineThicknessFactor=4
- \NormalTLTU ={.1pt}%
- \NormalTSU ={\normalbaselineskip\divide\StrutUnit by 12 }%
+ \StrutHeightFactor 8
+ \StrutDepthFactor 4
+ \LineThicknessFactor4
+ \NormalTLTU {.1pt}%
+ \NormalTSU {\normalbaselineskip\divide\StrutUnit 12 }%
\NormalTableUnits}
%D And then I wrote the tabulate environment. That
@@ -2391,52 +2369,52 @@
\let\startglobalTABLEcolor\empty
\let\stopglobalTABLEcolor \empty
-\def\localTABLEsetup%
+\def\localTABLEsetup
{\@@ticommandos\relax
% bodyfont
\expanded{\switchtobodyfont[\@@tikorps]}%
% linecolor
- \doifsomething{\@@tilijnkleur}
+ \doifsomething\@@tilijnkleur
{\def\startglobalTABLEcolor{\localstartcolor[\@@tilijnkleur]}%
\def\stopglobalTABLEcolor {\localstopcolor}}%
% linethickness
- \LineThicknessFactor=4
- \scratchdimen=\@@tilijndikte
- \divide\scratchdimen by \LineThicknessFactor
- \expanded{\NormalTLTU={\the\scratchdimen}}%
+ \LineThicknessFactor4
+ \scratchdimen\@@tilijndikte
+ \divide\scratchdimen \LineThicknessFactor
+ \expanded{\NormalTLTU{\the\scratchdimen}}%
% spacing, was depth=4 height=8 (counters, sigh, now macros)
- \doifelse{\@@tihoogte}{\v!strut}
+ \doifelse\@@tihoogte\v!strut
{\let\StrutHeightFactor\@@ithoogte}
{\let\StrutHeightFactor\@@tihoogte}%
- \doifelse{\@@tidiepte}{\v!strut}
+ \doifelse\@@tidiepte\v!strut
{\let\StrutDepthFactor\@@itdiepte}
{\let\StrutDepthFactor\@@tidiepte}%
- \scratchdimen=\StrutHeightFactor pt \multiply\scratchdimen by 10
+ \scratchdimen\StrutHeightFactor \s!pt \multiply\scratchdimen 10%
\edef\StrutHeightFactor{\@EA\withoutpt\the\scratchdimen}%
- \scratchdimen=\StrutDepthFactor pt \multiply\scratchdimen by 10
+ \scratchdimen\StrutDepthFactor \s!pt \multiply\scratchdimen 10%
\edef\StrutDepthFactor{\@EA\withoutpt\the\scratchdimen}%
% units
- \NormalTSU={\normalbaselineskip\divide\StrutUnit by 12 }%
+ \NormalTSU{\normalbaselineskip\divide\StrutUnit 12 }%
\NormalTableUnits}
\def\OpenUp#1#2%
- {\scratchdimen=\StrutHeightFactor pt \advance\scratchdimen by #1pt
+ {\scratchdimen\StrutHeightFactor \s!pt \advance\scratchdimen #1\s!pt
\edef\StrutHeightFactor{\@EA\withoutpt\the\scratchdimen}%
- \scratchdimen=\StrutDepthFactor pt \advance\scratchdimen by #2pt
+ \scratchdimen\StrutDepthFactor \s!pt \advance\scratchdimen #2\s!pt
\edef\StrutDepthFactor{\@EA\withoutpt\the\scratchdimen}}
%D As one can see, we didn't only add color, but also more
%D control over spacing.
%D
%D \startbuffer[a]
-%D \starttabel[|c|]
+%D \starttable[|c|]
%D \HL
%D \VL \strut test \VL \FR
%D \VL \strut test \VL \MR
%D \VL \strut test \VL \MR
%D \VL \strut test \VL \LR
%D \HL
-%D \stoptabel
+%D \stoptable
%D \stopbuffer
%D
%D \startbuffer[b]
@@ -2464,21 +2442,22 @@
%D happens when we set the values to zero. The rightmost table
%D is typeset using the tabulate environment.
%D
-%D \startcombinatie
+%D \startcombinatie[4*1]
%D {$\vcenter{\haalbuffer[a]}$}
-%D {h=.8 d=.4}
-%D {\steltabellenin[hoogte=strut,diepte=strut]$\vcenter{\haalbuffer[a]}$}
-%D {h=d=\type{strut}}
-%D {\steltabellenin[hoogte=0,diepte=0]$\vcenter{\haalbuffer[a]}$}
-%D {h=d=0}
+%D {\hbox{h=.8 d=.4}}
+%D {\setuptables[hoogte=strut,diepte=strut]$\vcenter{\haalbuffer[a]}$}
+%D {\hbox{h=d=\type{strut}}}
+%D {\setuptables[hoogte=0,diepte=0]$\vcenter{\haalbuffer[a]}$}
+%D {\hbox{h=d=0}}
%D {$\vcenter{\haalbuffer[b]}$}
-%D {tabulate}
+%D {\hbox{tabulate}}
%D \stopcombinatie
-\steltabellenin
+\setuptables
[HL=\v!middel,
VL=\v!middel,
NL=\v!klein,
+ \c!kader=,
\c!uitlijnen=\v!rechts,
\c!diepte=.40, % \v!strut
\c!hoogte=.80, % \v!strut
diff --git a/tex/context/base/core-tbl.tex b/tex/context/base/core-tbl.tex
index eb2b19e30..2bf47a88d 100644
--- a/tex/context/base/core-tbl.tex
+++ b/tex/context/base/core-tbl.tex
@@ -22,6 +22,16 @@
% |p2|p3| 2:3
% spanning
+% Be careful with changing the hsize calculation in p mode;
+% the following code works quite well:
+%
+% \setupfield [line][location=low,height=1.2\lineheight,width=\hsize]
+% \definefield [test] [line] [line] []
+%
+% \starttabulate[|l|p|]
+% \NC test \NC \field [test] \NC \NR
+% \stoptabulate
+
% In-text tabbing environment
%
% \starttabulate[| separated template] % eg [|l|p|] or [|l|p|p|]
@@ -70,7 +80,7 @@
% 10 evt auto stack; dan wel andere signal dan void nodig
-% present but not yet 100% ok
+% present but not yet 100% ok
%
% \FL top hrule
% \ML mid hrule (with auto split)
@@ -85,6 +95,8 @@
%
% \NR
+% \HR : rule with lineheight
+
% tricky: align scans ahead, over # and expands ones before
% while doing
@@ -129,8 +141,8 @@
\newtoks \tabulatesettings
\newtoks \tabulatedummy
-\newcount \nofautotabulate % \newcounter \nofautotabulate
-\newcount \tabulatecolumns % \newcounter \tabulatecolumns
+\newcount \nofautotabulate % \newcounter \nofautotabulate
+\newcount \tabulatecolumns % \newcounter \tabulatecolumns
\newcounter \tabulateminplines
\newcounter \tabulatemaxplines
@@ -140,6 +152,7 @@
\newif \ifhandletabulatepbreak \handletabulatepbreaktrue
\newif \iftabulateequal
\newif \iftracetabulate
+\newif \ifframedtabulate
\newdimen \tabulatepwidth
\newdimen \tabulatewidth
@@ -164,10 +177,30 @@
\def\@@tabhook@@ {@@tabhook@}
\def\@@tabalign@@{@@tabalign@}
-\dorecurse\noftabcolumns % quick and dirty stack
- {\@EA\newbox\csname\@@tabbox@@\recurselevel\endcsname}
+% \dorecurse\noftabcolumns % quick and dirty stack
+% {\@EA\newbox\csname\@@tabbox@@\recurselevel\endcsname}
+
+\def\tablebox#1%
+ {\csname\@@tabbox@@\number#1\endcsname}
-\def\dotabulatenobreak%
+\def\checktablebox#1%
+ {\ifundefinedelse{\@@tabbox@@\number#1}%
+ \expandafter\newbox\csname\@@tabbox@@\number#1\endcsname
+ \fi}
+
+\def\initializetablebox#1%
+ {\ifundefined{\@@tabbox@@\number#1}
+ \expandafter\newbox\csname\@@tabbox@@\number#1\endcsname
+ \else
+ \global\setbox\csname\@@tabbox@@\number#1\endcsname\box\voidb@x
+ \fi}
+
+\def\initializetableboxes#1%
+ {\dorecurse#1{\initializetablebox\recurselevel}}
+
+\initializetableboxes\noftabcolumns
+
+\def\dotabulatenobreak
{\noalign
{\nobreak
\iftracetabulate
@@ -179,11 +212,11 @@
\let\notabulatehook\empty
-\def\checktabulatehook%
+\def\checktabulatehook
{\ifnum\tabulatetype<2
%\global\let\tabulatehook\relax
\global\let\tabulatehook\notabulatehook
-\else
+ \else
\global\let\tabulatehook\dotabulatehook
\fi}
@@ -215,12 +248,13 @@
% 1 = RC column raw RQ equal column raw
% 2 = HC column hook HQ equal column hook
\@EA\appendtoks \@EA&\@EA\hskip\pretabskip##&\to\!!toksa
+\appendtoks\ignorespaces\to\!!toksa
%\@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\tabulatecolumns}\to\!!toksa
\@EA\appendtoks\@EA\xdef\@EA\tabulatecolumn\@EA{\the\tabulatecolumns}\to\!!toksa
\appendtoks \checktabulatehook\to\!!toksa
\@EA\appendtoks \preamblebox\to\!!toksa
\appendtoks \bgroup\bbskip\bgroup#1\to\!!toksa
- \appendtoks\ifnum\tabulatetype=1 \else \to\!!toksa
+ \appendtoks\ifnum\tabulatetype=\plusone \else \to\!!toksa
\@EA\appendtoks \the\tabulatebmath\to\!!toksa
\@EA\appendtoks \the\tabulatefont\to\!!toksa
\@EA\appendtoks \the\tabulatesettings\to\!!toksa
@@ -251,15 +285,15 @@
\let\gettabulateexit\dogettabulateexit
\tabulatewidth\zeropoint}
-\def\dosettabulatepreamble%
+\def\dosettabulatepreamble
{\ifx\next\relax
\let\nextnext\relax
\else
\let\nextnext\settabulatepreamble
- \ifx x\next \chardef\tabulatealign=0
- \else\ifx l\next \chardef\tabulatealign=1
- \else\ifx r\next \chardef\tabulatealign=2
- \else\ifx c\next \chardef\tabulatealign=3
+ \ifx x\next \chardef\tabulatealign\zerocount
+ \else\ifx l\next \chardef\tabulatealign\plusone
+ \else\ifx r\next \chardef\tabulatealign\plustwo
+ \else\ifx c\next \chardef\tabulatealign\plusthree
\else\ifx p\next \let\nextnext\gettabulateparagraph
\else\ifx w\next \let\nextnext\gettabulatewidth
\else\ifx f\next \let\nextnext\gettabulatefont
@@ -288,7 +322,7 @@
\fi
\nextnext}
-\def\dogettabulateexit%
+\def\dogettabulateexit
{\let\postabskip\!!zeropoint
\settabulatepreamble}
@@ -316,15 +350,13 @@
\edef\pretabskip{\the\scratchdimen}%
\let\postabskip\pretabskip
\let\gettabulateexit\settabulatepreamble
- \@EA\settabulatepreamble\next}
+ \@EA\settabulatepreamble\next}
\def\gettabulatehook#1%
- %{\setvalue{\@@tabhook@@\tabulatecolumns}{#1}%
{\setvalue{\@@tabhook@@\the\tabulatecolumns}{#1}%
\settabulatepreamble}
\def\gettabulatealign#1%
- %{\setvalue{\@@tabalign@@\tabulatecolumns}{#1}%
{\setvalue{\@@tabalign@@\the\tabulatecolumns}{#1}%
\settabulatepreamble}
@@ -340,40 +372,40 @@
{\tabulatefont{#1}%
\settabulatepreamble}
-\def\gettabulatewidth%
- {\chardef\tabulatemodus0
- \chardef\tabulatedimen0
+\def\gettabulatewidth
+ {\chardef\tabulatemodus\zerocount
+ \chardef\tabulatedimen\zerocount
\doifnextcharelse(\dogettabulatewidth\settabulatepreamble}
-\def\gettabulateparagraph%
+\def\gettabulateparagraph
{\doifnextcharelse{(}
- {\chardef\tabulatemodus1
- \chardef\tabulatedimen1
+ {\chardef\tabulatemodus\plusone
+ \chardef\tabulatedimen\plusone
\dogettabulatewidth}
- {\chardef\tabulatemodus2
- \chardef\tabulatedimen0
+ {\chardef\tabulatemodus\plustwo
+ \chardef\tabulatedimen\zerocount
\settabulatepreamble}}
\def\dogettabulatewidth(#1)%
{\tabulatewidth#1\relax
- \ifnum\tabulatedimen=1
+ \ifnum\tabulatedimen=\plusone
\global\advance\tabulatepwidth\tabulatewidth
\fi
\settabulatepreamble}
-\def\settabulatepreamble%
+\def\settabulatepreamble
{\afterassignment\dosettabulatepreamble\let\next=}
-\def\tabulateraggedright {\ifnum\tabulatetype=1 \else\raggedright \fi}
-\def\tabulateraggedcenter{\ifnum\tabulatetype=1 \else\raggedcenter\fi}
-\def\tabulateraggedleft {\ifnum\tabulatetype=1 \else\raggedleft \fi}
-\def\tabulatenotragged {\ifnum\tabulatetype=1 \else\notragged \fi}
-\def\tabulatehss {\ifnum\tabulatetype=1 \else\hss \fi}
+\def\tabulateraggedright {\ifnum\tabulatetype=\plusone \else\raggedright \fi}
+\def\tabulateraggedcenter{\ifnum\tabulatetype=\plusone \else\raggedcenter\fi}
+\def\tabulateraggedleft {\ifnum\tabulatetype=\plusone \else\raggedleft \fi}
+\def\tabulatenotragged {\ifnum\tabulatetype=\plusone \else\notragged \fi}
+\def\tabulatehss {\ifnum\tabulatetype=\plusone \else\hss \fi}
\def\nexttabulate#1|%
{\chardef\tabulatealign\@@tabulatealign
- \chardef\tabulatemodus0
- \chardef\tabulatedimen0
+ \chardef\tabulatemodus\zerocount
+ \chardef\tabulatedimen\zerocount
\tabulatebefore \emptytoks
\tabulateafter \emptytoks
\tabulatebmath \emptytoks
@@ -396,8 +428,8 @@
\dodosettabulatepreamble{\bskip\tabulateraggedleft }\eskip \or
\dodosettabulatepreamble{\bskip\tabulateraggedcenter}\eskip \fi
\or % auto width
- %\doglobal\increment\nofautotabulate\relax
- \global\advance\nofautotabulate\plusone\relax
+ %\doglobal\increment\nofautotabulate
+ \global\advance\nofautotabulate\plusone
\ifcase\tabulatealign\relax
\dodosettabulatepreamble \bskip \eskip \or
\dodosettabulatepreamble{\bskip\tabulateraggedright }\eskip \or
@@ -406,47 +438,45 @@
\fi
\futurelet\next\donexttabulate}
-\def\donexttabulate%
+\def\donexttabulate
{\ifx\next\relax\else
\expandafter\nexttabulate
\fi}
-\def\splitofftabulatebox%
+\def\splitofftabulatebox
{\dontcomplain
-% \global\@EA\setbox\@EA\tabulatebox\@EA
-% \vsplit\csname\@@tabbox@@\tabulatecolumn\endcsname to \lineheight
\global\setbox\tabulatebox
- \vsplit\csname\@@tabbox@@\tabulatecolumn\endcsname to \lineheight
- \setbox\tabulatebox=\vbox
+ \vsplit\tablebox\tabulatecolumn to \lineheight
+ \setbox\tabulatebox\vbox
{\unvbox\tabulatebox}%
- \setbox\tabulatebox=\hbox to \wd\tabulatebox
+ \setbox\tabulatebox\hbox to \wd\tabulatebox
{\hss\dotabulatehook{\box\tabulatebox}\hss}%
\ht\tabulatebox\ht\strutbox
\dp\tabulatebox\dp\strutbox
\box\tabulatebox}
-\def\dotabulatehook%
+\def\dotabulatehook
{\getvalue{\@@tabhook@@\tabulatecolumn}}
-\def\dotabulatealign%
+\def\dotabulatealign
{\getvalue{\@@tabalign@@\tabulatecolumn}}
-\def\resettabulatepheight%
- {\xdef\tabulateminplines{1}%
+\def\resettabulatepheight
+ {\globallet\tabulateminplines\!!plusone
\getnoflines\tabulatemaxpheight
\xdef\tabulatemaxplines{\the\noflines}%
\global\tabulatemaxpheight\zeropoint}
-\def\settabulatepheight%
- {\scratchdimen\ht\csname\@@tabbox@@\tabulatecolumn\endcsname\relax
+\def\settabulatepheight
+ {\scratchdimen\ht\tablebox\tabulatecolumn\relax
\ifdim\scratchdimen>\tabulatemaxpheight
\global\tabulatemaxpheight\scratchdimen
\fi}
-\def\handletabulatepbreak%
+\def\handletabulatepbreak
{\TABLEnoalign
- {\ifhandletabulatepbreak \ifnum\tabulatemaxplines>1
- \ifnum\tabulateminplines=1
+ {\ifhandletabulatepbreak \ifnum\tabulatemaxplines>\plusone
+ \ifnum\tabulateminplines=\plusone
\dotabulatenobreak
\fi
\doglobal\increment\tabulateminplines
@@ -486,7 +516,7 @@
% \starttabulate[preamble]
% \starttabulate -> \starttabulate[|l|p|]
-\def\definetabulate%
+\def\definetabulate
{\dotripleempty\dodefinetabulate}
\def\dodefinetabulate[#1][#2][#3]%
@@ -494,11 +524,13 @@
\doifundefined{\??tt#1::\c!eenheid}
{\copyparameters
[\??tt#1::][\??tt\e!tabulate::]%
- [\c!afstand,\c!eenheid,\c!voor,\c!korps,\c!na,\c!binnen,\c!inspringen,
- \c!marge,\c!uitlijnen,\c!lijnkleur,\c!lijndikte,EQ]}%
+ [\c!kader,\c!afstand,\c!eenheid,\c!voor,\c!korps,\c!na,
+ \c!binnen,\c!inspringen,\c!marge,\c!uitlijnen,
+ \c!lijnkleur,\c!lijndikte,EQ]}%
\copyparameters
[\??tt#1::#2][\??tt#1::]%
- [\c!eenheid,\c!afstand,\c!voor,\c!korps,\c!na,\c!binnen,\c!inspringen,
+ [\c!eenheid,\c!afstand,\c!voor,\c!korps,\c!na,
+ \c!binnen,\c!inspringen,\c!kader,
\c!marge,\c!uitlijnen,\c!lijnkleur,\c!lijndikte,EQ]%
\setvalue{\e!start#1::#2}{\dofinalstarttabulate[#1][#2][#3]}%
\setvalue{\e!start#1}{\bgroup\dosubstarttabulate[#1]}%
@@ -513,24 +545,6 @@
\let\tabulateheadcontent\empty
\let\tabulatetailcontent\empty
-% \def\checkfulltabulatecontent
-% {\doifdefinedelse{\??tt\currenttabulate\v!hoofd}
-% {\@EA\let\@EA\tabulateheadcontent\csname\??tt\currenttabulate\v!hoofd\endcsname}
-% {\let\tabulateheadcontent\empty}%
-% \doifdefinedelse{\??tt\currenttabulate\v!voet}
-% {\@EA\let\@EA\tabulatetailcontent\csname\??tt\currenttabulate\v!voet\endcsname}
-% {\let\tabulatetailcontent\empty}}
-
-% \def\checkfulltabulatecontent
-% {\doifdefinedelse{\??tt\currenttabulate\v!hoofd}
-% {\@EA\let\@EA\tabulateheadcontent
-% \csname\??tt\currenttabulate\v!hoofd\endcsname}
-% {\let\tabulateheadcontent\empty}%
-% \doifdefinedelse{\??tt\currenttabulate\v!voet}
-% {\@EA\let\@EA\tabulatetailcontent
-% \csname\??tt\currenttabulate\v!voet\endcsname}
-% {\let\tabulatetailcontent\empty}}
-
\def\checkfulltabulatecontent
{\ifundefined{\??tt\currenttabulate\v!hoofd}%
\let\tabulateheadcontent\empty
@@ -556,7 +570,7 @@
\tabulateheadcontent
\TABLEnoalign{\global\setfalse\tabulatesomeamble}%
\fi
- \tabulatecontent
+ \ignorespaces\tabulatecontent
\ifx\tabulatetailcontent\empty\else
\TABLEnoalign{\global\settrue\tabulatesomeamble}%
\tabulatetailcontent
@@ -576,7 +590,7 @@
{\processcontent{\e!stop\e!tabulatetail}\next
{\letvalue{\??tt\iffirstargument#1\else\e!tabulate\fi::\v!voet}\next}}
-\def\dosubstarttabulate%
+\def\dosubstarttabulate
{\dodoubleempty\dodosubstarttabulate}
\def\dodosubstarttabulate[#1][#2]%
@@ -612,22 +626,22 @@
{\expanded{\switchtobodyfont
[\getvalue{\??tt\currenttabulate\c!korps}]}}%
\postponefootnotes % new, to be tested
- \chardef\tabulatepass=1
- \widowpenalty=0 % otherwise lines are not broken
- \clubpenalty =0 % but overlap in funny ways
+ \chardef\tabulatepass\plusone
+ \widowpenalty\zerocount % otherwise lines are not broken
+ \clubpenalty \zerocount % but overlap in funny ways
\the\everytabulate
\getvalue{\??tt\currenttabulate\c!binnen}%
- \scratchdimen=\leftskip
- \advance\scratchdimen by \hangindent
- \doifvalue{\??tt\currenttabulate\c!inspringen}{\v!ja}
- {\advance\scratchdimen by \parindent}% \voorwit
+ \scratchdimen\leftskip
+ \advance\scratchdimen \hangindent
+ \doifvalue{\??tt\currenttabulate\c!inspringen}\v!ja
+ {\advance\scratchdimen \parindent}% \voorwit
\edef\tabulateindent{\the\scratchdimen}%
\!!toksb\emptytoks
\def\dorepeat*##1##2%
{\dorecurse{##1}{\appendtoks##2\to\!!toksb}\do}%
- \def\do%
+ \def\do
{\futurelet\next\dodo}%
- \def\dodo%
+ \def\dodo % \@EAEAEA gebruiken
{\ifx\next\relax
% exit
\else\ifx*\next
@@ -642,7 +656,7 @@
{\appendtoks{##1}\to\!!toksb\do}%
\def\dodododo##1%
{\appendtoks##1\to\!!toksb\do}%
- \xdef\tabulatecolumn{0}%
+ \globallet\tabulatecolumn\!!zerocount
\do#3\relax
\processcontent
{\e!stop#1}% \currenttabulate}
@@ -657,7 +671,7 @@
\newif\iftabulatefirstflushed
-\def\tabulateEQ%
+\def\tabulateEQ
{\iftabulatefirstflushed\else\getvalue{\??tt\currenttabulate EQ}\fi
\global\tabulateequalfalse}
@@ -667,8 +681,8 @@
\def\tabulateequalcolumn#1%
{&\tabulateEQ&\global\chardef\tabulatetype#1&}
-\def\tabulateautocolumn%
- {\tabulatenormalcolumn0\relax
+\def\tabulateautocolumn
+ {\tabulatenormalcolumn\zerocount
\ifnum\tabulatecolumn>\tabulatecolumns\relax
\expandafter\NR
\else
@@ -684,30 +698,54 @@
\def\tabulateruleseperator%
{\bgroup
- \def\factor{1}%
+ \let\factor\!!plusone
\scratchskip\dp\strutbox
\ExpandFirstAfter\processallactionsinset
[\getvalue{\??tt\currenttabulate\c!afstand}]
- [ \v!blanko=>\scratchskip=\bigskipamount,
- \v!diepte=>\scratchskip=\dp\strutbox,
+ [ \v!blanko=>\scratchskip\bigskipamount,
+ \v!diepte=>\scratchskip\dp\strutbox,
\v!klein=>\def\factor{.25},
\v!middel=>\def\factor{.5},
\v!groot=>,
- \v!geen=>\scratchskip=\zeropoint\def\factor{0},
- \v!grid=>\scratchskip=\zeropoint\def\factor{0},
- \s!unknown=>\scratchskip=\commalistelement]%
- \scratchdimen=\factor\scratchskip
+ \v!geen=>\scratchskip\zeropoint\def\factor{0},
+ \v!grid=>\scratchskip\zeropoint\def\factor{0},
+ \s!unknown=>\scratchskip\commalistelement]%
+ \scratchdimen\factor\scratchskip
\ifconditional\tabulatesomeamble\kern\else\vskip\fi\scratchdimen % new
\egroup}
-\def\tabulaterule%
+% \def\tabulaterule
+% {\color
+% [\getvalue{\??tt\currenttabulate\c!lijnkleur}]
+% {\scratchdimen\getvalue{\??tt\currenttabulate\c!lijndikte}%
+% \hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax
+% \doifvalue{\??tt\currenttabulate\c!afstand}\v!grid
+% {\kern-\scratchdimen}}} % experimental tm-prikkels
+
+\def\dotabulaterule#1%
{\color
[\getvalue{\??tt\currenttabulate\c!lijnkleur}]
- {\scratchdimen=\getvalue{\??tt\currenttabulate\c!lijndikte}%
- \hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax
- \doifvalue{\??tt\currenttabulate\c!afstand}{\v!grid}
+ {\scratchdimen\getvalue{\??tt\currenttabulate\c!lijndikte}#1}}
+
+\def\tabulaterule
+ {\dotabulaterule
+ {\hrule\!!height.5\scratchdimen\!!depth.5\scratchdimen\relax
+ \doifvalue{\??tt\currenttabulate\c!afstand}\v!grid
{\kern-\scratchdimen}}} % experimental tm-prikkels
+\def\tabulateline
+ {\multispan\totaltabulatecolumns % \multispan is a plain macro
+ % for the moment this one
+ \strut\hskip\getvalue{\??tt\currenttabulate\c!marge}%
+ % neg values are ok !
+ \dotabulaterule
+ {\!!heighta.5\lineheight
+ \advance\!!heighta-\strutdepth
+ \!!deptha-\!!heighta
+ \advance\!!deptha\scratchdimen
+ \leaders\hrule\!!height\!!heighta\!!depth\!!deptha\hfill}%
+ \cr}
+
%D When set to true, no (less) break optimization is done.
\newif\iftolerantTABLEbreak
@@ -718,7 +756,8 @@
\def\doregistertabulateparoptions
{\ifinsidefloat \else \iftrialtypesetting \else
\registerparoptions
- \global\let\registertabulateparoptions\empty
+% unsafe in crossing pages, at each b...
+% \global\let\registertabulateparoptions\empty
\fi \fi}
\appendtoks
@@ -731,239 +770,33 @@
\registertabulateparoptions
\to \everytabulaterow
-% keep for a while ! ! !
-%
-% \def\processtabulate[|#1|]% in the process of optimizing
-% {\tabulateunit=\getvalue{\??tt\currenttabulate\c!eenheid}%
-% \checkfulltabulatecontent
-% \ExpandFirstAfter\processaction % use \setalignmentswitch instead
-% [\getvalue{\??tt\currenttabulate\c!uitlijnen}]
-% [\v!normaal=>\def\@@tabulatealign{0}, % = default value
-% \v!rechts=>\def\@@tabulatealign{1},
-% \v!links=>\def\@@tabulatealign{2},
-% \v!midden=>\def\@@tabulatealign{3},
-% \s!default=>\def\@@tabulatealign{0},
-% \s!unknown=>\def\@@tabulatealign{0}]%
-% \let\pretabskip\!!zeropoint
-% \def\postabskip{.5\tabulateunit}%
-% %\doglobal\newcounter\tabulatecolumns
-% %\doglobal\newcounter\nofautotabulate
-% \global\tabulatecolumns\zerocount
-% \global\nofautotabulate\zerocount
-% \doglobal\newcounter\noftabulatelines
-% \let\totalnoftabulatelines\noftabulatelines
-% \let\minusnoftabulatelines\noftabulatelines
-% \global\tabulatepwidth\zeropoint
-% \global\tabulateequalfalse
-% \resettabulatepheight
-% \def\NC{\tabulatenormalcolumn0}%
-% \def\RC{\tabulatenormalcolumn1}%
-% \def\HC{\tabulatenormalcolumn2}%
-% \def\EQ{\tabulateequalcolumn 0}%
-% \def\RQ{\tabulateequalcolumn 1}%
-% \def\HQ{\tabulateequalcolumn 2}%
-% \def\NG{\NC\handletabulatecharalign}%
-% \def\NR% next row
-% {\doglobal\increment\noftabulatelines
-% \global\tabulatefirstflushedfalse
-% \global\tabulateequalfalse
-% \xdef\tabulatecolumn{0}%
-% \resettabulatepheight
-% \unskip\unskip\crcr\flushtabulated
-% \TABLEnoalign
-% {\iftolerantTABLEbreak\else
-% \ifnum\noftabulatelines=1
-% \dotabulatenobreak
-% \else\ifnum\noftabulatelines=\minusnoftabulatelines
-% \ifnum\tabulatemaxplines<2
-% \dotabulatenobreak
-% \fi
-% \fi\fi
-% \fi
-% \global\tabulatefirstflushedfalse}}%
-% \let\HL\empty \let\SR\NR \let\AR\NR
-% \let\FL\empty \let\FR\NR
-% \let\ML\empty \let\MR\NR
-% \let\LL\empty \let\LR\NR
-% \global\let\flushtabulated\empty
-% \let\savedbar=|\let|=\nexttabulate
-% \tabskip\zeropoint
-% \ifdim\getvalue{\??tt\currenttabulate\c!marge}>\zeropoint
-% \!!toksa{&\hbox to \tabulateindent{\the\everytabulaterow\hss}##%
-% \tabskip\getvalue{\??tt\currenttabulate\c!marge}\strut
-% &##\tabskip\zeropoint}%
-% \else
-% \!!toksa{&\hbox to \tabulateindent{\the\everytabulaterow\hss}##\strut&##}%
-% \fi
-% \tabulatewidth\zeropoint
-% |#1X|\relax
-% \tabulatewidth\zeropoint
-% \dorecurse\tabulatecolumns % can be made faster
-% {\doifundefinedelse{\@@tabbox@@\recurselevel}
-% {\expandafter\newbox\csname\@@tabbox@@\recurselevel\endcsname}%
-% {\global\setbox\csname\@@tabbox@@\recurselevel\endcsname\box\voidb@x}}%
-% \appendtoks&##\to\!!toksa
-% \appendtoks\doglobal\increment\tabulatecolumn\to\!!toksa
-% \appendtoks\NC\unskip\unskip\crcr\flushtabulated\to\tabulatedummy % no count
-% \xdef\tabulatecolumn{0}%
-% \resettabulatepheight
-% \def\bskip%
-% {\setbox\tabulatebox=\vbox\bgroup
-% \global\let\tabulatehook\notabulatehook}%
-% \def\eskip
-% {\par\egroup
-% \global\let\tabulatehook\dotabulatehook}%
-% \let|\savedbar
-% \global\let\tabulatehook\dotabulatehook
-% \doifvalue{\??tt\currenttabulate\c!inspringen}{\v!nee}
-% {\forgetparindent}%
-% \ifinsidefloat
-% \let\tabulateindent\!!zeropoint
-% \else
-% \setlocalhsize \hsize\localhsize
-% \fi
-% \dontcomplain
-% \forgetall
-% \setbox0=\vbox % outside if because of line counting
-% {\footnotesenabledfalse
-% \let\tabulateindent\!!zeropoint
-% \trialtypesettingtrue % very important
-% \@EA\halign\@EA{\the\!!toksa\cr\fulltabulatecontent\crcr}}%
-% \ifnum\nofautotabulate>0
-% \tabulatewidth\hsize
-% \advance\tabulatewidth -\wd0
-% \advance\tabulatewidth -\tabulatepwidth
-% \ifnum\nofautotabulate>0
-% \divide\tabulatewidth \nofautotabulate\relax
-% \fi
-% \fi
-% \ifsplittabulate
-% \splittopskip\ht\strutbox
-% \global\let\flushtabulatedindeed\empty
-% \long\def\bbskip%
-% {\ifvoid\csname\@@tabbox@@\tabulatecolumn\endcsname
-% \ifx\flushtabulatedindeed\empty\else
-% \setbox0\hbox
-% \fi
-% \fi}%
-% \def\bskip%
-% {\ifvoid\csname\@@tabbox@@\tabulatecolumn\endcsname
-% \global\setbox\csname\@@tabbox@@\tabulatecolumn\endcsname=\vbox
-% \bgroup
-% \global\let\tabulatehook\notabulatehook
-% \ifautotabulate\hsize\tabulatewidth\fi
-% %\begstrut % interferes with pre-\pars
-% \ignorespaces
-% \def\eskip%
-% {\par\egroup
-% \settabulatepheight
-% \global\let\tabulatehook\dotabulatehook
-% \splitofftabulatebox}%
-% \else
-% \let\eskip\empty
-% \dontcomplain
-% \global\let\tabulatehook\dotabulatehook
-% \expandafter\splitofftabulatebox
-% \fi}%
-% \gdef\flushtabulated%
-% {\TABLEnoalign % noalign % no interference !
-% {\global\let\flushtabulatedindeed\empty
-% \handletabulatepbreak
-% \dorecurse\tabulatecolumns % was: \noftabcolumns
-% {\ifvoid\csname\@@tabbox@@\recurselevel\endcsname\else
-% \gdef\flushtabulatedindeed{\the\tabulatedummy}%
-% \fi}%
-% \global\tabulatefirstflushedtrue}%
-% \flushtabulatedindeed}%
-% \else
-% % tabhook op alles ?
-% \def\bskip%
-% {\vtop\bgroup
-% \ifautotabulate\hsize\tabulatewidth\fi
-% %\begstrut % interferes with pre-\pars
-% \ignorespaces}%
-% \def\eskip%
-% {\par\egroup}%
-% \fi
-% \let\totalnoftabulatelines\noftabulatelines
-% \let\minusnoftabulatelines\noftabulatelines
-% \decrement\minusnoftabulatelines
-% \doglobal\newcounter\noftabulatelines
-% \def\HL{\TABLEnoalign
-% {\ifnum\noftabulatelines=0 \FL
-% \else\ifnum\noftabulatelines<\totalnoftabulatelines\relax \ML
-% \else \LL
-% \fi\fi}}%
-% \def\tablebaselinecorrection
-% {\def\dobaselinecorrection
-% {\vskip-\prevdepth
-% \vskip\dp\strutbox
-% \vskip\dp\strutbox}%
-% \baselinecorrection}%
-% \def\FL{\TABLEnoalign
-% {\ifinsidefloat\else
-% \doifemptyvalue{\??tt\currenttabulate\c!voor} % no expansion
-% {\tablebaselinecorrection}%
-% \fi
-% \tabulaterule
-% \dotabulatenobreak
-% \tabulateruleseperator
-% \prevdepth\dp\strutbox
-% \dotabulatenobreak}}%
-% \def\ML{\TABLEnoalign
-% {\tabulateruleseperator
-% \tabulaterule
-% \ifnum\noftabulatelines>1 \ifnum\noftabulatelines<\minusnoftabulatelines
-% \vskip\topskip\allowbreak\vskip-\topskip
-% \vskip-\getvalue{\??tt\currenttabulate\c!lijndikte}%
-% \tabulaterule
-% \fi\fi
-% \tabulateruleseperator}}%
-% \def\LL{\TABLEnoalign
-% {\dotabulatenobreak
-% \tabulateruleseperator
-% \dotabulatenobreak
-% \tabulaterule
-% \ifinsidefloat\else
-% \doifemptyvalue{\??tt\currenttabulate\c!na} % no expansion
-% {\vskip\dp\strutbox
-% \vbox{\strut}%
-% \vskip-\lineheight}%
-% \fi}}%
-% \chardef\tabulatepass=2
-% \@EA\halign\@EA{\the\!!toksa\cr\fulltabulatecontent\crcr}%
-% \prevdepth\dp\strutbox % nog eens beter, temporary hack
-% \doifvalue{\??tt\currenttabulate\c!afstand}{\v!grid}
-% {\vskip-\dp\strutbox}% experimental tm-prikkels
-% \egroup
-% \ifinsidefloat \else
-% \getvalue{\??tt\currenttabulate\c!na}%
-% \fi
-% \egroup}
-
\def\flushtabulateindent
- {\ifnum\tabulatecolumn=0
+ {\ifnum\tabulatecolumn=\zerocount
\hbox to \tabulateindent
{% we now have a local hsize, and since we want to
% register positional info (i.e. real hsizes) we
% need to reconstitute the original hsize
\advance\hsize\tabulateindent
- % this is indeed rtaher messy and took a few hours
+ % this is indeed rather messy and took a few hours
% to dis/uncover
\the\everytabulaterow
\hss}%
\fi}
+\def\totaltabulatecolumns{0}
+
+\def\handletabulatedigits{\digits}
+
\def\processtabulate[|#1|]% in the process of optimizing
- {\tabulateunit=\getvalue{\??tt\currenttabulate\c!eenheid}%
+ {\tabulateunit\getvalue{\??tt\currenttabulate\c!eenheid}%
\checkfulltabulatecontent
\ExpandFirstAfter\processaction % use \setalignmentswitch instead
[\getvalue{\??tt\currenttabulate\c!uitlijnen}]
- [\v!normaal=>\def\@@tabulatealign{0}, % = default value
- \v!rechts=>\def\@@tabulatealign{1},
- \v!links=>\def\@@tabulatealign{2},
- \v!midden=>\def\@@tabulatealign{3},
- \s!default=>\def\@@tabulatealign{0},
+ [\v!normaal=>\def\@@tabulatealign{0},% = default value
+ \v!rechts=>\def\@@tabulatealign{1},% chardefs gebruiken
+ \v!links=>\def\@@tabulatealign{2},%
+ \v!midden=>\def\@@tabulatealign{3},%
+ \s!default=>\def\@@tabulatealign{0},%
\s!unknown=>\def\@@tabulatealign{0}]%
\let\pretabskip\!!zeropoint
\def\postabskip{.5\tabulateunit}%
@@ -984,16 +817,31 @@
\def\RQ{\tabulateequalcolumn 1}%
\def\HQ{\tabulateequalcolumn 2}%
\def\NG{\NC\handletabulatecharalign}%
- \def\NR% next row
+ \def\ND{\NC\handletabulatedigits}% new, undocumented, test first
+ \def\HR % horizontal rule line (break untested)
+ {\TABLEnoalign
+ {\ifnum\noftabulatelines=\totalnoftabulatelines
+ \@EA\dotabulatenobreak
+ \else
+ \@EA\allowbreak
+ \fi}%
+ \tabulateline
+ \TABLEnoalign
+ {\ifnum\noftabulatelines=\zerocount
+ \@EA\dotabulatenobreak
+ \else
+ \@EA\allowbreak
+ \fi}}%
+ \def\NR % next row
{\doglobal\increment\noftabulatelines
\global\tabulatefirstflushedfalse
\global\tabulateequalfalse
- \xdef\tabulatecolumn{0}%
+ \globallet\tabulatecolumn\!!zerocount
\resettabulatepheight
\unskip\unskip\crcr\flushtabulated
\TABLEnoalign
{\iftolerantTABLEbreak\else
- \ifnum\noftabulatelines=1
+ \ifnum\noftabulatelines=\plusone
\dotabulatenobreak
\else\ifnum\noftabulatelines=\minusnoftabulatelines
\ifnum\tabulatemaxplines<2
@@ -1003,42 +851,46 @@
\fi
\global\tabulatefirstflushedfalse}}%
\let\HL\empty \let\SR\NR \let\AR\NR
- \let\FL\empty \let\FR\NR
+ \let\FL\empty \let\FR\NR
\let\ML\empty \let\MR\NR
\let\LL\empty \let\LR\NR
\global\let\flushtabulated\empty
- \let\savedbar=|\let|=\nexttabulate
+ \let\savedbar|\let|\nexttabulate
\tabskip\zeropoint
-\ifdim\getvalue{\??tt\currenttabulate\c!marge}>\zeropoint
- \!!toksa{&\flushtabulateindent\strut##%
- \tabskip\getvalue{\??tt\currenttabulate\c!marge}\strut
- &##\tabskip\zeropoint}%
-\else
- \!!toksa{&\flushtabulateindent\strut##%
- &##\tabskip\zeropoint}%
-\fi
+ \ifdim\getvalue{\??tt\currenttabulate\c!marge}>\zeropoint
+ \!!toksa{&\flushtabulateindent\strut##%
+ \tabskip\getvalue{\??tt\currenttabulate\c!marge}\strut
+ &##\tabskip\zeropoint}%
+ \else
+ \!!toksa{&\flushtabulateindent\strut##%
+ &##\tabskip\zeropoint}%
+ \fi
\tabulatewidth\zeropoint
|#1X|\relax
+ \scratchcounter\tabulatecolumns
+ \multiply\scratchcounter3%
+ \advance\scratchcounter4%
+ \edef\totaltabulatecolumns{\the\scratchcounter}%
\tabulatewidth\zeropoint
- \dorecurse\tabulatecolumns % can be made faster
- {\doifundefinedelse{\@@tabbox@@\recurselevel}
- {\expandafter\newbox\csname\@@tabbox@@\recurselevel\endcsname}%
- {\global\setbox\csname\@@tabbox@@\recurselevel\endcsname\box\voidb@x}}%
+ % \dorecurse\tabulatecolumns % can be made faster
+ % {\doifundefinedelse{\@@tabbox@@\recurselevel}
+ % {\expandafter\newbox\csname\@@tabbox@@\recurselevel\endcsname}%
+ % {\global\setbox\csname\@@tabbox@@\recurselevel\endcsname\box\voidb@x}}%
+ \initializetableboxes\tabulatecolumns
\appendtoks&##\to\!!toksa
\appendtoks\doglobal\increment\tabulatecolumn\to\!!toksa
\appendtoks\NC\unskip\unskip\crcr\flushtabulated\to\tabulatedummy % no count
- \xdef\tabulatecolumn{0}%
+ \globallet\tabulatecolumn\!!zerocount
\resettabulatepheight
- \def\bskip%
- {\setbox\tabulatebox=\vbox\bgroup
+ \def\bskip
+ {\setbox\tabulatebox\vbox\bgroup
\global\let\tabulatehook\notabulatehook}%
\def\eskip
{\par\egroup
\global\let\tabulatehook\dotabulatehook}%
\let|\savedbar
\global\let\tabulatehook\dotabulatehook
- \doifvalue{\??tt\currenttabulate\c!inspringen}{\v!nee}
- {\forgetparindent}%
+ \doifvalue{\??tt\currenttabulate\c!inspringen}\v!nee\forgetparindent
\ifinsidefloat
\let\tabulateindent\!!zeropoint
\else
@@ -1046,37 +898,39 @@
\fi
\dontcomplain
\forgetall
- \setbox0=\vbox % outside if because of line counting
+ \setbox0\vbox % outside if because of line counting
{\footnotesenabledfalse
\let\tabulateindent\!!zeropoint
\trialtypesettingtrue % very important
\@EA\halign\@EA{\the\!!toksa\crcr\fulltabulatecontent\crcr}}%
- \ifnum\nofautotabulate>0
+ \ifnum\nofautotabulate>\zerocount
+ % so, even if the natural size is larger, in the final
+ % run, we force the calculated width
\tabulatewidth\hsize
\advance\tabulatewidth -\wd0
\advance\tabulatewidth -\tabulatepwidth
- \ifnum\nofautotabulate>0
+ \ifnum\nofautotabulate>\zerocount
\divide\tabulatewidth \nofautotabulate\relax
\fi
\fi
\ifsplittabulate
\splittopskip\ht\strutbox
\global\let\flushtabulatedindeed\empty
- \long\def\bbskip%
- {\ifvoid\csname\@@tabbox@@\tabulatecolumn\endcsname
+ \long\def\bbskip
+ {\ifvoid\tablebox\tabulatecolumn
\ifx\flushtabulatedindeed\empty\else
\setbox0\hbox
\fi
\fi}%
- \def\bskip%
- {\ifvoid\csname\@@tabbox@@\tabulatecolumn\endcsname
- \global\setbox\csname\@@tabbox@@\tabulatecolumn\endcsname=\vbox
+ \def\bskip
+ {\ifvoid\tablebox\tabulatecolumn
+ \global\setbox\tablebox\tabulatecolumn\vbox
\bgroup
\global\let\tabulatehook\notabulatehook
\ifautotabulate\hsize\tabulatewidth\fi
- %\begstrut % interferes with pre-\pars
+ % \begstrut % interferes with pre-\pars
\ignorespaces
- \def\eskip%
+ \def\eskip
{\par\egroup
\settabulatepheight
\global\let\tabulatehook\dotabulatehook
@@ -1087,25 +941,25 @@
\global\let\tabulatehook\dotabulatehook
\expandafter\splitofftabulatebox
\fi}%
- \gdef\flushtabulated%
+ \gdef\flushtabulated
{\TABLEnoalign % noalign % no interference !
{\global\let\flushtabulatedindeed\empty
-\xdef\tabulatecolumn{0}%
+ \globallet\tabulatecolumn\!!zerocount
\handletabulatepbreak
\dorecurse\tabulatecolumns % was: \noftabcolumns
- {\ifvoid\csname\@@tabbox@@\recurselevel\endcsname\else
+ {\ifvoid\tablebox\recurselevel\else
\gdef\flushtabulatedindeed{\the\tabulatedummy}%
\fi}%
\global\tabulatefirstflushedtrue}%
\flushtabulatedindeed}%
\else
% tabhook op alles ?
- \def\bskip%
+ \def\bskip
{\vtop\bgroup
\ifautotabulate\hsize\tabulatewidth\fi
- %\begstrut % interferes with pre-\pars
+ % \begstrut % interferes with pre-\pars
\ignorespaces}%
- \def\eskip%
+ \def\eskip
{\par\egroup}%
\fi
\let\totalnoftabulatelines\noftabulatelines
@@ -1113,10 +967,11 @@
\decrement\minusnoftabulatelines
\doglobal\newcounter\noftabulatelines
\def\HL{\TABLEnoalign
- {\ifnum\noftabulatelines=0 \FL
- \else\ifnum\noftabulatelines<\totalnoftabulatelines\relax \ML
- \else \LL
- \fi\fi}}%
+ {\ifnum\noftabulatelines=\zerocount \@EA \FL\else
+ \ifnum\noftabulatelines<\totalnoftabulatelines\relax\@EAEAEA\ML\else
+ \@EAEAEA\LL\fi\fi}}%
+ \doifvalue{\??tt\currenttabulate\c!lijn}\v!regel
+ {\let\HL\HR}%
\def\tablebaselinecorrection
{\def\dobaselinecorrection
{\vskip-\prevdepth
@@ -1136,11 +991,13 @@
\def\ML{\TABLEnoalign
{\tabulateruleseperator
\tabulaterule
- \ifnum\noftabulatelines>1 \ifnum\noftabulatelines<\minusnoftabulatelines
- \vskip\topskip\allowbreak\vskip-\topskip
- \vskip-\getvalue{\??tt\currenttabulate\c!lijndikte}%
- \tabulaterule
- \fi\fi
+ \ifnum\noftabulatelines>\plusone
+ \ifnum\noftabulatelines<\minusnoftabulatelines
+ \vskip\topskip\allowbreak\vskip-\topskip
+ \vskip-\getvalue{\??tt\currenttabulate\c!lijndikte}%
+ \tabulaterule
+ \fi
+ \fi
\tabulateruleseperator}}%
\def\LL{\TABLEnoalign
{\dotabulatenobreak
@@ -1153,18 +1010,63 @@
\vbox{\strut}%
\vskip-\lineheight}%
\fi}}%
- \chardef\tabulatepass=2
+ \startframedcontent[\getvalue{\??tt\currenttabulate\c!kader}]%
+ %
+ \chardef\tabulatepass2
\@EA\halign\@EA{\the\!!toksa\crcr\fulltabulatecontent\crcr}%
\prevdepth\dp\strutbox % nog eens beter, temporary hack
- \doifvalue{\??tt\currenttabulate\c!afstand}{\v!grid}
+ \doifvalue{\??tt\currenttabulate\c!afstand}\v!grid
{\vskip-\dp\strutbox}% experimental tm-prikkels
+ %
+ \stopframedcontent
+ %
\egroup
\ifinsidefloat \else
\getvalue{\??tt\currenttabulate\c!na}%
\fi
\egroup}
-
-\def\setuptabulate%
+
+% \starttabulatie[|mc|]
+% \NC \digits{100.000,00} \NC\NR
+% \NC \digits{@10.000,00} \NC\NR
+% \NC \digits{@@@.100,00} \NC\NR
+% \NC \digits{@@@.@10,@@} \NC\NR
+% \NC \digits{@@@.@@1,@@} \NC\NR
+% \stoptabulatie
+%
+% \starttabulatie[|mc|]
+% \ND 100.000,00 \NC\NR
+% \ND @10.000,00 \NC\NR
+% \ND @@@.100,00 \NC\NR
+% \ND @@@.@10,@@ \NC\NR
+% \ND @@@.@@1,@@ \NC\NR
+% \stoptabulatie
+%
+% \starttabulatie[|c|]
+% \ND $100.000,00$ \NC\NR
+% \ND $@10.000,00$ \NC\NR
+% \ND $@@@.100,00$ \NC\NR
+% \ND $@@@.@10,@@$ \NC\NR
+% \ND $@@@.@@1,@@$ \NC\NR
+% \stoptabulatie
+%
+% \starttabulatie[|c|]
+% \NC $\digits 100.000,00 $ \NC\NR
+% \NC $\digits @10.000,00 $ \NC\NR
+% \NC $\digits @@@.100,00 $ \NC\NR
+% \NC $\digits @@@.@10,@@ $ \NC\NR
+% \NC $\digits @@@.@@1,@@ $ \NC\NR
+% \stoptabulatie
+%
+% \starttabulatie[|c|]
+% \NC \digits $100.000,00$ \NC\NR
+% \NC \digits $@10.000,00$ \NC\NR
+% \NC \digits $@@@.100,00$ \NC\NR
+% \NC \digits $@@@.@10,@@$ \NC\NR
+% \NC \digits $@@@.@@1,@@$ \NC\NR
+% \stoptabulatie
+
+\def\setuptabulate
{\dotripleempty\dosetuptabulate}
\def\dosetuptabulate[#1][#2][#3]%
@@ -1179,7 +1081,9 @@
\setuptabulate
[\c!eenheid=1em,
EQ={:},
+\c!kader=\v!uit,
\c!korps=,
+ \c!lijn=\v!normaal,
\c!lijnkleur=,
\c!lijndikte=\linewidth,
\c!binnen=,
diff --git a/tex/context/base/core-uti.tex b/tex/context/base/core-uti.tex
index 25e05b560..54830c523 100644
--- a/tex/context/base/core-uti.tex
+++ b/tex/context/base/core-uti.tex
@@ -45,23 +45,21 @@
\newwrite\uti
\newif\ifutilitydone
-\def\@@utilityerrormessage%
- {\showmessage\m!systems{8}{}%
- \global\let\@@utilityerrormessage\relax}
+\def\@@utilityerrormessage
+ {\showmessage\m!systems8\empty
+ \globallet\@@utilityerrormessage\relax}
\def\thisisutilityversion#1%
{\doifelse\utilityversion{#1}%
{\checksectionseparator}
- {\@@utilityerrormessage
- \resetutilities
- \endinput}}
+ {\@@utilityerrormessage\resetutilities\endinput}}
\def\checksectionseparator % catches backward compatibility conflict
{\doifnot\sectionseparator:\endinput}
\def\thisissectionseparator#1%
{\bgroup
- \global\let\checksectionseparator\relax
+ \globallet\checksectionseparator\relax
\convertcommand \sectionseparator\to\asciiA
\convertargument #1\to\asciiB
\ifx\asciiA\asciiB
@@ -73,17 +71,11 @@
\endinput
\fi}
-\def\writeutility%
- {\write\uti}
+\def\writeutility {\write\uti}
+\def\writeutilitycommand#1{\write\uti{c \string#1}}
-\def\immediatewriteutility%
- {\immediate\write\uti}
-
-\def\writeutilitycommand#1%
- {\write\uti{c \string#1}}
-
-\def\immediatewriteutilitycommand#1%
- {\immediate\write\uti{c \string#1}}
+\def\immediatewriteutility {\immediate\writeutility}
+\def\immediatewriteutilitycommand{\immediate\writeutilitycommand}
%\def\openutilities%
% {\immediate\openout\uti=\jobname.\f!inputextension
@@ -94,27 +86,29 @@
\immediatewriteutilitycommand{\thisissectionseparator{\sectionseparator}}%
\immediatewriteutilitycommand{\thisisutilityversion {\utilityversion}}}
-\def\closeutilities%
+\def\closeutilities
{%\savenofsubpages
%\savenofpages
- \immediate\closeout\uti
+ \immediate\closeout\uti % niet echt nodig
\reportutilityproblems
% should be a message :
+ \let\writeutilitycommand \gobbleoneargument
+ \let\writeutility \gobbleoneargument
\let\immediatewriteutilitycommand\gobbleoneargument
- \let\immediatewriteutility\gobbleoneargument}
+ \let\immediatewriteutility \gobbleoneargument}
\def\reopenutilities
{\immediate\closeout\uti
\openutilities}
-\def\abortutilitygeneration%
- {\immediatewriteutilitycommand{\utilitygenerationaborted}%
+\def\abortutilitygeneration
+ {\immediatewriteutilitycommand\utilitygenerationaborted
\immediatewriteutility{q {quit}}}
-\def\utilitygenerationaborted%
- {\showmessage{\m!systems}{21}{}%
- \global\let\utilitygenerationaborted=\endinput
- \gdef\reportutilityproblems{\showmessage{\m!systems}{22}{}}%
+\def\utilitygenerationaborted
+ {\showmessage\m!systems{21}\empty
+ \globallet\utilitygenerationaborted\endinput
+ \gdef\reportutilityproblems{\showmessage\m!systems{22}\empty}%
\endinput}
\def\savecurrentvalue#1#2%
@@ -122,8 +116,8 @@
\let\initializevariable\gdef
-\def\disableinitializevariables%
- {\global\let\initializevariable\gobbletwoarguments}
+\def\disableinitializevariables
+ {\globallet\initializevariable\gobbletwoarguments}
\let\reportutilityproblems=\relax
@@ -156,7 +150,7 @@
\def\addutilityreset#1%
{\@EA\appendtoks\csname\s!reset#1\endcsname\to\utilityresetlist}
-\def\resetutilities%
+\def\resetutilities
{\the\utilityresetlist}
% #1=type
@@ -178,7 +172,7 @@
%
% \def\utilitycheckmessage%
% {\showmessage{\m!systems}{12}{}%
-% \global\let\utilitycheckmessage=\relax}
+% \globallet\utilitycheckmessage=\relax}
%
% \def\saveutilityline#1 #2\txen% tricky maar ok, want achter \command
% {\if #1c% commands % in \ascii staat een spatie; #1 kan
@@ -241,7 +235,7 @@
\fi
#4%
\the\everybeforeutilityread
- \readjobfile{#2.\f!outputextension}{}{}%
+ \readjobfile{#2.\f!outputextension}\donothing\donothing
\the\everyafterutilityread
#5%
\relax
@@ -251,7 +245,7 @@
\popendofline
\ifutilitydone\else
\doifsomething{#3}
- {\showmessage{\m!systems}{9}{{#3}}%
+ {\showmessage\m!systems9{{#3}}%
\ifvoorlopig
\blanko
\type{[\currentmessagetext]}%
@@ -264,15 +258,14 @@
% Saving the sort vector:
\def\savesortkeys%
- {\setbox\scratchbox=\hbox
- \bgroup
- \def\flushsortkey##1##2##3##4%
- {\convertargument{##1}{##2}{##3}{##4}\to\ascii
- \immediatewriteutility{k {\currentlanguage}{\currentencoding}\ascii}}%
- \let\definesortkey\flushsortkey
- \flushsortkeys
- \egroup
- \global\let\savesortkeys\relax}
+ {\startnointerference
+ \def\flushsortkey##1##2##3##4%
+ {\convertargument{##1}{##2}{##3}{##4}\to\ascii
+ \immediatewriteutility{k {\currentlanguage}{\currentencoding}\ascii}}%
+ \let\definesortkey\flushsortkey
+ \flushsortkeys
+ \globallet\savesortkeys\relax
+ \stopnointerference}
\prependtoks \savesortkeys \to \everystarttext
@@ -319,31 +312,20 @@
{\@EA\ifx\csname#1:\s!list\endcsname\empty \else
\csname#1:\s!list\endcsname,\fi#3}}
-%\def\dodefinetwopasslist#1%
-% {\doifundefined{#1:\s!list}
-% {%\debuggerinfo{\m!systems}{defining twopass class #1}%
-% \doglobal\addutilityreset{#1\s!pass}%
-% \setgvalue{\s!set#1\s!pass}%
-% {\global\letvalue{\s!set#1\s!pass}\gobbletwoarguments
-% \setgvalue{@@#1\s!pass}{\appendtwopasselement{#1}}}%
-% \setgvalue{\s!reset#1\s!pass}%
-% {\global\letvalue{@@#1\s!pass}\gobbletwoarguments}%
-% \getvalue{\s!reset#1\s!pass}}}
-
\def\dodefinetwopasslist#1%
{\doifundefined{#1:\s!list}
- {%\debuggerinfo{\m!systems}{defining twopass class #1}%
+ {%\debuggerinfo\m!systems{defining twopass class #1}%
\doglobal\addutilityreset{#1\s!pass}%
\setgvalue{\s!set #1\s!pass}{\dosettwopasslist {#1}}%
\setgvalue{\s!reset#1\s!pass}{\doresettwopasslist{#1}}%
\getvalue {\s!reset#1\s!pass}}}
\def\dosettwopasslist#1%
- {\global\letvalue{\s!set#1\s!pass}\gobbletwoarguments
+ {\letgvalue{\s!set#1\s!pass}\gobbletwoarguments
\setgvalue{@@#1\s!pass}{\appendtwopasselement{#1}}}
\def\doresettwopasslist#1%
- {\global\letvalue{@@#1\s!pass}\gobbletwoarguments}
+ {\letgvalue{@@#1\s!pass}\gobbletwoarguments}
\def\definetwopasslist#1%
{\expanded{\dodefinetwopasslist{#1}}%
@@ -356,9 +338,9 @@
\def\doloadtwopassdata#1%
{\doifundefined{#1:\s!list}
{\startnointerference
- \global\letvalue{#1:\s!list}\empty
+ \letgvalueempty{#1:\s!list}%
\protectlabels
- \doutilities{#1\s!pass}{\jobname}{}{}{}%
+ \doutilities{#1\s!pass}\jobname\empty\relax\relax
\ifx\twopassdata\empty\else
\appendtwopasselement{#1}{0}\twopassdata
\fi
@@ -368,12 +350,12 @@
{\ifx\alltwopasslists\empty\else
\def\twopassdata{0,0}% end condition
\processcommacommand[\alltwopasslists]\doloadtwopassdata
- \global\let\alltwopassdata\empty
+ \globallet\alltwopassdata\empty
\fi
\ifx\allrawpasslists\empty\else
\let\twopassdata\empty
\processcommacommand[\allrawpasslists]\doloadtwopassdata
- \global\let\allrawpassdata\empty
+ \globallet\allrawpassdata\empty
\fi}
\def\moverawpasslist#1#2% erases the old one, like the others do
@@ -503,13 +485,13 @@
{\edef\nexttwopassdata{#1}%
\ifx\nexttwopassdata\notwopassdata \else
\let\twopassdata\nexttwopassdata
- \advance\scratchcounter 1
+ \advance\scratchcounter \plusone
\twopassdatafoundtrue
\fi}
\def\getlasttwopassdata#1%
{\loadtwopassdata
- \scratchcounter0
+ \scratchcounter\zerocount
\@EAEAEA\rawprocesscommalist\@EA\@EA\@EA[\csname#1:\s!list\endcsname]\dogetlasttwopassdata
\edef\noftwopassitems{\the\scratchcounter}%
\iftwopassdatafound\else
@@ -557,7 +539,7 @@
{\writeutility{p u {#1} #2}}
\def\loadplugindata#1%
- {\doutilities{#1}{\jobname}{}{}{}{}}
+ {\doutilities{#1}\jobname\empty\relax\relax}
% \plugincommand{\command{}{}{}}
%
diff --git a/tex/context/base/core-var.tex b/tex/context/base/core-var.tex
index d8105611f..1be0ad723 100644
--- a/tex/context/base/core-var.tex
+++ b/tex/context/base/core-var.tex
@@ -42,6 +42,31 @@
\def\cleanupfeatures{\the\everycleanupfeatures}
+\newevery \everyinsidefloat \relax
+
+%D \macros
+%D {trialtypesetting}
+%D
+%D We disable trial typesetting in the output routine,
+%D just to be sure.
+
+\prependtoks
+ \trialtypesettingfalse
+\to \everybeforepagebody
+
+%D \macros
+%D {starttextdata}
+
+\newtoks \collectedtextdata
+
+\long\def\starttextdata#1\stoptextdata
+ {\doglobal\appendtoks#1\to\collectedtextdata}
+
+\def\flushtextdata
+ {\vsmash{\the\collectedtextdata}%
+ \global\collectedtextdata\emptytoks
+ \globallet\flushtextdata\donothing}
+
%D \macros
%D {ifprocessingXML}
%D
@@ -84,11 +109,11 @@
\newif\iffastmode
-\def\fastmode%
+\def\fastmode
{\fastmodetrue
\the\everyfastmode}
-\def\silentmode% ook hier \everysilentmode net als \fastmode
+\def\silentmode % ook hier \everysilentmode net als \fastmode
{\showmessagesfalse
\showwarningsfalse
\let\writestatus\gobbletwoarguments}
diff --git a/tex/context/base/core-ver.tex b/tex/context/base/core-ver.tex
index d82dc3bf2..ee3c057fd 100644
--- a/tex/context/base/core-ver.tex
+++ b/tex/context/base/core-ver.tex
@@ -76,11 +76,11 @@
\else\getvalue{\??ty\??ty\ascii}\fi}%
\doifundefined{setuppretty\prettyidentifier type}%
{\bgroup
- \setbox0=\hbox % get rid of spaces when in-line \newpretty loading
+ \setbox0\hbox % get rid of spaces when in-line \newpretty loading
{\restorecatcodes % also needed when loading during \newpretty
\startreadingfile % restore < and > if needed
\lowercasestring verb-\prettyidentifier.tex\to\filename
- \readsysfile{\filename}{}{}%
+ \readsysfile\filename\donothing\donothing
\stopreadingfile}%
\egroup}%
\doifdefinedelse{setuppretty\prettyidentifier type}%
@@ -128,20 +128,23 @@
\installnewpretty I {\setupprettiesintype{EIF}\setupprettytype} % E taken
\installnewpretty X {\setupprettiesintype{XML}\setupprettytype}
-\def\setupcommonverbatim#1%
+ \def\setupcommonverbatim#1%
{\eightbitcharactersfalse % obey regime / encoding
%
\def\prettyidentifier{TEX}%
%
- \doifelsevalue{#1\c!tekst}{\v!ja}
- {\naturaltextexttrue}{\naturaltextextfalse}%
+ \doifelsevalue{#1\c!tekst}\v!ja
+ \naturaltextexttrue
+ \naturaltextextfalse
\def\prettyidentifierfont{\getvalue{#1\c!icommando}}%
\def\prettyvariablefont {\getvalue{#1\c!vcommando}}%
\def\prettynaturalfont {\getvalue{#1\c!ccommando}}%
%
- \doifvalue{#1\c!spatie}{\v!aan}{\def\obeyspaces{\setcontrolspaces}}%
- \doifvalue{#1\c!tab} {\v!aan}{\def\obeytabs {\settabskips}}%
- \doifvalue{#1\c!pagina}{\v!nee}{\def\obeypages {\ignorepages}}%
+ \doifvalue{#1\c!spatie}\v!aan{\def\obeyspaces{\setcontrolspaces}}%
+ %doifvalue{#1\c!tab} \v!aan{\def\obeytabs {\settabskips}}%
+ \doifnotvalue{#1\c!tab}\v!uit{\def\obeytabs {\settabskips}}%
+ \doifvalue{#1\c!tab} \s!ascii{\chardef\tabskipmode2}% quit on >127
+ \doifvalue{#1\c!pagina}\v!nee{\def\obeypages {\ignorepages}}%
%
\ExpandFirstAfter\processaction
[\getvalue{#1\c!regels}]
@@ -150,18 +153,18 @@
%
\ExpandFirstAfter\processaction
[\getvalue{#1\c!optie}]
- [ \v!geen=>\let\obeycharacters=\relax,
+ [ \v!geen=>\let\obeycharacters\relax,
\v!kleur=>\setupprettiesintype{TEX}%
- \let\obeycharacters=\setupprettytype
- \let\obeytabs=\ignoretabs,
- \v!normaal=>\let\obeycharacters=\setupgroupedtype,
+ \let\obeycharacters\setupprettytype
+ \let\obeytabs\ignoretabs,
+ \v!normaal=>\let\obeycharacters\setupgroupedtype,
\v!commandos=>\def\obeycharacters{\setupcommandsintype{#1}}%
- \let\obeytabs=\ignoretabs,
- \v!schuin=>\let\obeycharacters=\setupslantedtype
- \let\obeytabs=\ignoretabs,
+ \let\obeytabs\ignoretabs,
+ \v!schuin=>\let\obeycharacters\setupslantedtype
+ \let\obeytabs\ignoretabs,
\s!unknown=>\setupprettiesintype{\getvalue{#1\c!optie}}%
- \let\obeycharacters=\setupprettytype
- \let\obeytabs=\ignoretabs]%
+ \let\obeycharacters\setupprettytype
+ \let\obeytabs\ignoretabs]%
\def\verbatimfont{\getvalue{#1\c!letter}}%
\setupverbatimcolor{#1}}
@@ -292,7 +295,7 @@
\verbatimcolor
\afterassignment\protectfirsttype\let\next=}
-\def\dodotypeB%
+\def\dodotypeB
{\initializetype
\setupnotypegrouping
\verbatimcolor
@@ -314,7 +317,7 @@
{\ifx\next\bgroup
\@EA\dodotypeA
\else\if\next<%
- \doifelsevalue{\??ty\@@currenttype\c!optie}{\v!geen}
+ \doifelsevalue{\??ty\@@currenttype\c!optie}\v!geen
{\@EAEAEA\dodotypeB}{\@EAEAEA\dodotypeC}%
\else
\@EAEAEA\dodotypeD
@@ -342,17 +345,14 @@
\bgroup
\catcode`\<=\@@active
\catcode`\>=\@@active
-\gdef\setupalternativetypegrouping%
+\gdef\setupalternativetypegrouping
{\catcode`\<=\@@active
\catcode`\>=\@@active
- \def<%
- {\bgroup
- \switchslantedtype}%
- \def>%
- {\egroup}}
+ \def<{\bgroup\switchslantedtype}%
+ \def>{\egroup}}
\egroup
-\def\setupnotypegrouping%
+\def\setupnotypegrouping
{\catcode`\<=\@@begingroup
\catcode`\>=\@@endgroup}
@@ -396,16 +396,16 @@
%D {\hbox{}} prevents ligatures, which unfortunately turn up
%D in Lucida fonts.
-\def\doenterdoublelesstype%
+\def\doenterdoublelesstype
{\ifx\next\egroup
\lesscharacter\hbox{}\lesscharacter
\else
\bgroup\switchslantedtype
- \let\doenterdoublemoretype=\egroup
+ \let\doenterdoublemoretype\egroup
\fi}
-\def\doenterdoublemoretype%
- {\def\doenterdoubletype%
+\def\doenterdoublemoretype
+ {\def\doenterdoubletype
{\ifx\next\egroup
\morecharacter\hbox{}\morecharacter
\fi}}
@@ -413,13 +413,13 @@
\bgroup
\catcode`\<=\@@active
\catcode`\>=\@@active
-\gdef\setupgroupedtype%
+\gdef\setupgroupedtype
{\catcode`\<=\@@active
\catcode`\>=\@@active
- \def\doless%
+ \def\doless
{\ifx<\next
- \def\next%
- {\def\enterdoubletype%
+ \def\next
+ {\def\enterdoubletype
{\futurelet\next\doenterdoublelesstype}%
\afterassignment\enterdoubletype
\let\next=}%
@@ -427,15 +427,15 @@
\let\next=\lesscharacter
\fi
\next}%
- \def\domore%
+ \def\domore
{\ifx>\next
- \def\next%
- {\def\enterdoubletype%
+ \def\next
+ {\def\enterdoubletype
{\futurelet\next\doenterdoublemoretype}%
\afterassignment\enterdoubletype
\let\next=}%
\else
- \let\next=\morecharacter
+ \let\next\morecharacter
\fi
\next}%
\def<{\futurelet\next\doless}%
@@ -445,7 +445,7 @@
\newif\ifslantedtypeactivated
\newif\ifslantedtypepermitted
-\def\switchslantedtype%
+\def\switchslantedtype
{\ifslantedtypepermitted
\ifslantedtypeactivated
\slantedtypeactivatedfalse\tttf
@@ -485,24 +485,24 @@
%D
%D \typebuffer
-\def\setupslantedtype%
+\def\setupslantedtype
{\setupgroupedtype
\slantedtypepermittedtrue}
\bgroup
\catcode`\<=\active
\catcode`\>=\active
-\gdef\doprotectfirsttype%
+\gdef\doprotectfirsttype
{\ifx\next<%
- \let\next=\relax
+ \let\next\relax
\else\ifx\next\bgroup
- \let\next=\relax
+ \let\next\relax
\else\ifx\next\egroup % takes care of \type{}
- \let\next=\relax
+ \let\next\relax
\else\ifx\next\activeleftargument
- \let\next=\relax
+ \let\next\relax
\else
- \let\next=\string
+ \let\next\string
\fi\fi\fi\fi
\next}
\egroup
@@ -521,8 +521,8 @@
\let\@@currenttype\empty
-\def\initializetype%
- {\let\obeylines=\ignorelines
+\def\initializetype
+ {\let\obeylines\ignorelines
\setupcommonverbatim{\??ty\@@currenttype}%
\setupinlineverbatim}
@@ -534,7 +534,7 @@
%\def\setuptype%
% {\dodoubleargument\getparameters[\??ty]}
-\def\setuptype%
+\def\setuptype
{\dodoubleempty\dosetuptype}
\def\dosetuptype[#1][#2]%
@@ -564,7 +564,7 @@
%D implementation works all right, but a decent hyphenation
%D support of \type{\tt} text will be implemented soon.
-\def\obeyhyphens%
+\def\obeyhyphens
{\def\obeyedspace{\hskip\spaceskip}%
\edef\savedfont{\the\font}%
\ttsl\hyphenchar\font=45
@@ -572,17 +572,17 @@
\savedfont
\spaceskip.5em\!!plus.25em\!!minus.25em\relax}
-\def\obeybreakpoints%
+\def\obeybreakpoints
{\def\obeyedspace{\hskip\spaceskip}%
\spaceskip.5em
\veryraggedright}
-%\unexpanded\def\typ%
+%\unexpanded\def\typ
% {\bgroup
% \obeyhyphens
% \futurelet\next\dotype}
-\unexpanded\def\typ%
+\unexpanded\def\typ
{\bgroup
\obeyhyphens
\futurelet\next\dodotype}
@@ -651,7 +651,7 @@
%D But since \type{\groupedcommand} became available, we use
%D however
-\def\setgroupedtype%
+\def\setgroupedtype
{\initializetype
\catcode`\{=\@@begingroup
\catcode`\}=\@@endgroup}
@@ -672,19 +672,19 @@
\def\initializetyping#1%
{%\donefalse
-\switchtobodyfont[\getvalue{\??tp#1\c!korps}]%
+ \switchtobodyfont[\getvalue{\??tp#1\c!korps}]%
\donefalse
- \scratchskip=\getvalue{\??tp#1\c!onevenmarge}\relax
+ \scratchskip\getvalue{\??tp#1\c!onevenmarge}\relax
\ifzeropt\scratchskip\else\donetrue\fi
- \scratchskip=\getvalue{\??tp#1\c!evenmarge}\relax
+ \scratchskip\getvalue{\??tp#1\c!evenmarge}\relax
\ifzeropt\scratchskip\else\donetrue\fi
\ifdone
\def\doopenupverbatimline%
{\getpagestatus
\ifrightpage
- \hskip \getvalue{\??tp#1\c!onevenmarge}\relax
+ \hskip\getvalue{\??tp#1\c!onevenmarge}\relax
\else
- \hskip \getvalue{\??tp#1\c!evenmarge}\relax
+ \hskip\getvalue{\??tp#1\c!evenmarge}\relax
\fi}%
\else
\doadaptleftskip{\getvalue{\??tp#1\c!marge}}%
@@ -694,14 +694,14 @@
{\edef\!!stringa{\csname\??tp#1\c!blanko\endcsname}}%
\processaction
[\!!stringa]
- [\v!standaard=>\scratchskip=\tussenwit,
- \v!klein=>\scratchskip=\blankokleinmaat,
- \v!middel=>\scratchskip=\blankomiddelmaat,
- \v!groot=>\scratchskip=\blankogrootmaat,
- \v!halveregel=>\scratchskip=.5\baselineskip,
- \v!regel=>\scratchskip=\baselineskip,
- \v!geen=>\scratchskip=\zeropoint,
- \s!unknown=>\scratchskip=\commalistelement]%
+ [\v!standaard=>\scratchskip\tussenwit,
+ \v!klein=>\scratchskip\blankokleinmaat,
+ \v!middel=>\scratchskip\blankomiddelmaat,
+ \v!groot=>\scratchskip\blankogrootmaat,
+ \v!halveregel=>\scratchskip.5\baselineskip,
+ \v!regel=>\scratchskip\baselineskip,
+ \v!geen=>\scratchskip\zeropoint,
+ \s!unknown=>\scratchskip\commalistelement]%
\ifgridsnapping
\ifdim\scratchskip=.5\baselineskip\relax
\edef\verbatimbaselineskip{\the\scratchskip}% new
@@ -728,7 +728,7 @@
{\stopverbatimcolor
\stopopelkaar % includes \egroup
\getvalue{\??tp#1\c!na}%
- \doifvalue{\??tp#1\c!springvolgendein}{\v!nee}{\noindentation}}
+ \doifvalue{\??tp#1\c!springvolgendein}\v!nee\noindentation}
%D \macros
%D {setuptyping}
@@ -759,7 +759,7 @@
\getparameters[\??tp][#1]%
\fi}
-\def\setuptyping%
+\def\setuptyping
{\dodoubleempty\dosetuptyping}
%D The setups for display verbatim and file verbatim are
@@ -788,6 +788,7 @@
\c!onevenmarge=\!!zeropoint,
\c!blanko=\v!regel,
\c!escape=/, % beware \string\ , should also be accepted
+ \c!nummeren=\v!nee,
\c!regels=]
%D \macros
@@ -829,17 +830,17 @@
[\c!voor,\c!na,\c!spatie,\c!pagina,\c!tab,\c!kleur,\c!letter,
\c!tekst,\c!icommando,\c!vcommando,\c!ccommando,\c!korps,
\c!optie,\c!palet,\c!marge,\c!evenmarge,\c!onevenmarge,
- \c!springvolgendein,\c!blanko,\c!escape,\c!regels]%
+ \c!springvolgendein,\c!blanko,\c!escape,\c!regels,\c!nummeren]%
\getparameters
[\??tp#1]
[#2]}
\def\dodefinetyping[#1][#2]%
{\setvalue{\e!start#1}{\dostarttyping{#1}}%
- \setvalue{\e!stop#1}{\dostoptyping{#1}}%
+ \setvalue{\e!stop #1}{\dostoptyping {#1}}%
\presettyping[#1][#2]}
-\def\definetyping%
+\def\definetyping
{\dodoubleempty\dodefinetyping}
\definetyping[\v!typen]
@@ -929,7 +930,7 @@
\def\setupverbatimcolor#1% fast and local versus slow and global
{\doifelsevaluenothing{#1\c!kleur}
{\def\beginofpretty[##1]{\startcolormode{\prettypalet:##1}}%
- \let\endofpretty \stopcolormode
+ \let\endofpretty \restorecolormode % \stopcolormode
\let\startverbatimcolor \relax
\let\stopverbatimcolor \relax
\let\verbatimcolor \relax}
@@ -1087,9 +1088,9 @@
{\startopelkaar % includes \bgroup
\doifinset{\getvalue{\??tp#1\c!optie}}{\v!commandos,\v!schuin,\v!normaal}
{\setuptyping[#1][\c!optie=\v!geen]}%
- \doifvalue{\??tp#1\c!optie}{\v!kleur}
+ \doifvalue{\??tp#1\c!optie}\v!kleur
{\expandafter\aftersplitstring#2\at.\to\prettyidentifier
- \letvalue{\??tp#1\c!optie}=\prettyidentifier}%
+ \letvalue{\??tp#1\c!optie}\prettyidentifier}%
\initializetyping{#1}%
\startverbatimcolor
\makelocreadfilename{#2}%
@@ -1099,8 +1100,8 @@
\stopopelkaar} % includes \egroup
{\bgroup
\expanded{\convertargument#2}\to\ascii
- \tttf[\makemessage{\m!verbatims}{1}\ascii]%
- \showmessage{\m!verbatims}{1}\ascii
+ \tttf[\makemessage\m!verbatims1\ascii]%
+ \showmessage\m!verbatims1\ascii
\egroup}%
\getvalue{\??tp#1\c!na}}
@@ -1115,7 +1116,7 @@
%D
%D The definition is not that spectacular.
-\def\filename#1{{\tttf\hyphenatedfile{#1}}}
+\unexpanded\def\filename#1{{\tttf\hyphenatedfile{#1}}}
%D This leaves some settings:
@@ -1124,9 +1125,6 @@
%D And a bonus macro:
-\def\verbatim#1%
- {\convertargument#1\to\ascii\ascii}
-
-\protect
+\def\verbatim#1{\convertargument#1\to\ascii\ascii}
-\endinput
+\protect \endinput
diff --git a/tex/context/base/core-vis.tex b/tex/context/base/core-vis.tex
index c23d1044c..a61b00eaf 100644
--- a/tex/context/base/core-vis.tex
+++ b/tex/context/base/core-vis.tex
@@ -59,81 +59,79 @@
\scratchdimen#1\relax
\dontinterfere
\dontcomplain
- \boxrulewidth=5\testrulewidth
+ \boxrulewidth5\testrulewidth
#3#4\relax
- \setbox0=\normalhbox to \scratchdimen
+ \setbox0\normalhbox to \scratchdimen
{#2{\ruledhbox to \scratchdimen
- {\vrule
- #5 20\testrulewidth
- \!!width \!!zeropoint
+ {\vrule #5 20\testrulewidth \!!width \zeropoint
\normalhss}}}%
\smashbox0
\normalpenalty\!!tenthousand
\box0
\egroup}
-\def\ruledhanging%
- {\ifdim\hangindent>\!!zeropoint\relax
- \ifnum\hangafter<0
+\def\ruledhanging
+ {\ifdim\hangindent>\zeropoint
+ \ifnum\hangafter<\zerocount
\normalhbox
- {\boxrulewidth=5\testrulewidth
- \setbox0=\ruledhbox to \hangindent
- {\scratchdimen=\ht\strutbox
- \advance\scratchdimen by \dp\strutbox
+ {\boxrulewidth5\testrulewidth
+ \setbox0\ruledhbox to \hangindent
+ {\scratchdimen\ht\strutbox
+ \advance\scratchdimen \dp\strutbox
\vrule
- \!!width\!!zeropoint
- \!!height\!!zeropoint
- \!!depth-\hangafter\scratchdimen}%
+ \!!width \zeropoint
+ \!!height \zeropoint
+ \!!depth -\hangafter\scratchdimen}%
\normalhskip-\hangindent
\smashbox0
\raise\ht\strutbox\box0}%
\fi
\fi}
-\def\ruledparagraphcues%
+\def\ruledparagraphcues
{\bgroup
\dontcomplain
- \normalhbox to \!!zeropoint
- {\ifdim\leftskip>\!!zeropoint\relax
+ \normalhbox to \zeropoint
+ {\ifdim\leftskip>\zeropoint\relax
\showparagraphcue\leftskip\llap\relax\relax\!!depth
\normalhskip-\leftskip
\fi
\ruledhanging
\normalhskip\hsize
- \ifdim\rightskip>\!!zeropoint\relax
+ \ifdim\rightskip>\zeropoint\relax
\normalhskip-\rightskip
\showparagraphcue\rightskip\relax\relax\relax\!!depth
\fi}%
\egroup}
-\def\ruledpar%
+\def\ruledpar
{\relax
\ifhmode
\showparagraphcue{40\testrulewidth}\relax\rightrulefalse\relax\!!height
\fi
\normalpar}
-\def\rulednoindent%
+\def\rulednoindent
{\relax
\normalnoindent
\ruledparagraphcues
\showparagraphcue{40\testrulewidth}\llap\leftrulefalse\relax\!!height}
-\def\ruledindent%
+\def\ruledindent
{\relax
\normalnoindent
\ruledparagraphcues
- \ifdim\parindent>\!!zeropoint\relax
+ \ifdim\parindent>\zeropoint
\showparagraphcue\parindent\relax\relax\relax\!!height
\else
\showparagraphcue{40\testrulewidth}\llap\relax\relax\!!height
\fi
\normalhskip\parindent}
-\def\ruledleavevmode%
+\def\ruledleavevmode
{\relax
\normalleavevmode
- \ifdim\parindent>\!!zeropoint\relax
+ \ifdim\parindent>\zeropoint
\normalhskip-\parindent
\ruledparagraphcues
\showparagraphcue\parindent\relax\leftrulefalse\rightrulefalse\!!height
@@ -143,18 +141,18 @@
\showparagraphcue{40\testrulewidth}\llap\leftrulefalse\rightrulefalse\!!height
\fi}
-\def\dontshowimplicits%
- {\let\noindent = \normalnoindent
- \let\indent = \normalindent
- \let\leavevmode = \normalleavevmode
- \let\par = \normalpar}
+\def\dontshowimplicits
+ {\let\noindent \normalnoindent
+ \let\indent \normalindent
+ \let\leavevmode \normalleavevmode
+ \let\par \normalpar}
-\def\showimplicits%
- {\testrulewidth = \defaulttestrulewidth
- \let\noindent = \rulednoindent
- \let\indent = \ruledindent
- \let\leavevmode = \ruledleavevmode
- \let\par = \ruledpar}
+\def\showimplicits
+ {\testrulewidth \defaulttestrulewidth
+ \let\noindent \rulednoindent
+ \let\indent \ruledindent
+ \let\leavevmode \ruledleavevmode
+ \let\par \ruledpar}
%D The next few||line examples show the four cues. Keep in
%D mind that we only see them when we explicitly open or close
@@ -203,13 +201,13 @@
{\ttxx#1}%
\fi}
-\def\ruledbaseline%
- {\vrule \!!width \!!zeropoint
+\def\ruledbaseline
+ {\vrule \!!width \zeropoint
\bgroup
\dontinterfere
\doglobal\increment\ruledbaselines
- \scratchdimen=\nofruledbaselines\baselineskip
- \setbox\scratchbox=\normalvbox to 2\scratchdimen
+ \scratchdimen\nofruledbaselines\baselineskip
+ \setbox\scratchbox\normalvbox to 2\scratchdimen
{\leaders
\normalhbox
{\strut
@@ -219,8 +217,8 @@
\!!width 120pt}
\normalvfill}%
\smashbox\scratchbox
- \advance\scratchdimen by \strutheightfactor\baselineskip
- \setbox\scratchbox=\normalhbox
+ \advance\scratchdimen \strutheightfactor\baselineskip
+ \setbox\scratchbox\normalhbox
{\normalhskip -48pt
\normalhbox to 24pt
{\normalhss\debuggertext\ruledbaselines\normalhskip6pt}%
@@ -229,8 +227,8 @@
\box\scratchbox
\egroup}
-\def\showbaselines%
- {\testrulewidth=\defaulttestrulewidth
+\def\showbaselines
+ {\testrulewidth\defaulttestrulewidth
\EveryPar{\ruledbaseline}}
%D \macros
@@ -239,14 +237,14 @@
%D The next tracing option probaly is only of use to me and a
%D few \CONTEXT\ hackers.
-\def\showpagebuilder%
+\def\showpagebuilder
{\EveryPar{\doshowpagebuilder}}
-\def\doshowpagebuilder%
- {\strut\llap{\tt\blue \vl
- \high{\txx v:\the\vsize }\vl
- \high{\txx g:\the\pagegoal }\vl
- \high{\txx t:\the\pagetotal}\vl}}
+\def\doshowpagebuilder
+ {\strut\llap{\blue \vl
+ \high{\infofont v:\the\vsize }\vl
+ \high{\infofont g:\the\pagegoal }\vl
+ \high{\infofont t:\the\pagetotal}\vl}}
%D \macros
%D {makecutbox, cuthbox, cutvbox, cutvtop}
@@ -289,42 +287,42 @@
\chardef\cutmarkoffset = 1
\let\cutmarksymbol = \relax
-\def\horizontalcuts%
+\def\horizontalcuts
{\normalhbox to \ruledwidth
- {\dorecurse{\horizontalcutmarks}
+ {\dorecurse\horizontalcutmarks
{\vrule\!!width\boxrulewidth\!!height\cutmarklength\normalhfill}%
\unskip}}
-\def\verticalcuts%
- {\scratchdimen=\ruledheight
- \advance\scratchdimen by \ruleddepth
+\def\verticalcuts
+ {\scratchdimen\ruledheight
+ \advance\scratchdimen \ruleddepth
\normalvbox to \scratchdimen
{\hsize\cutmarklength
- \dorecurse{\verticalcutmarks}
+ \dorecurse\verticalcutmarks
{\vrule\!!height\boxrulewidth\!!width\hsize\normalvfill}%
\unskip}}
-\def\baselinecuts%
- {\ifdim\ruleddepth>\!!zeropoint
- \scratchdimen=\ruledheight
- \advance\scratchdimen by \ruleddepth
+\def\baselinecuts
+ {\ifdim\ruleddepth>\zeropoint
+ \scratchdimen\ruledheight
+ \advance\scratchdimen \ruleddepth
\normalvbox to \scratchdimen
- {\scratchdimen=\cutmarklength
- \divide\scratchdimen by 2
+ {\scratchdimen\cutmarklength
+ \divide\scratchdimen 2
\hsize\scratchdimen
- \normalvskip\!!zeropoint\!!plus\ruledheight
+ \normalvskip\zeropoint\!!plus\ruledheight
\vrule\!!height\boxrulewidth\!!width\hsize
- \normalvskip\!!zeropoint\!!plus\ruleddepth}%
+ \normalvskip\zeropoint\!!plus\ruleddepth}%
\fi}
-\def\cutmarksymbols%
- {\setbox\scratchbox=\normalvbox to \cutmarklength
+\def\cutmarksymbols
+ {\setbox\scratchbox\normalvbox to \cutmarklength
{\normalvfill
\normalhbox to \cutmarklength
{\normalhfill\ssxx\cutmarksymbol\normalhfill}%
\normalvfill}%
\normalhbox to \ruledwidth
- {\scratchdimen=\cutmarklength
+ {\scratchdimen\cutmarklength
\divide\scratchdimen 2
\llap{\copy\scratchbox\normalhskip\cutmarkoffset\scratchdimen}%
\normalhfill
@@ -334,25 +332,25 @@
{\edef\ruledheight{\the\ht#1}%
\edef\ruleddepth {\the\dp#1}%
\edef\ruledwidth {\the\wd#1}%
- \setbox#1=\normalhbox
+ \setbox#1\normalhbox
{\dontcomplain
\forgetall
\boxmaxdepth\maxdimen
\offinterlineskip
- \scratchdimen=\cutmarklength
- \divide\scratchdimen by 2
+ \scratchdimen\cutmarklength
+ \divide\scratchdimen 2
\hsize\ruledwidth
- \setbox\scratchbox=\normalvbox
- {\setbox\scratchbox=\normalhbox{\horizontalcuts}%
+ \setbox\scratchbox\normalvbox
+ {\setbox\scratchbox\normalhbox{\horizontalcuts}%
\normalvskip-\cutmarkoffset\scratchdimen
\normalvskip-2\scratchdimen
\copy\scratchbox
\normalvskip\cutmarkoffset\scratchdimen
\hbox to \ruledwidth
- {\setbox\scratchbox=\normalhbox{\verticalcuts}%
+ {\setbox\scratchbox\normalhbox{\verticalcuts}%
\llap{\copy\scratchbox\normalhskip\cutmarkoffset\scratchdimen}%
\bgroup
- \setbox\scratchbox=\normalhbox{\baselinecuts}%
+ \setbox\scratchbox\normalhbox{\baselinecuts}%
\llap{\copy\scratchbox\normalhskip\cutmarkoffset\scratchdimen}%
\normalhfill
\rlap{\normalhskip\cutmarkoffset\scratchdimen\copy\scratchbox}%
@@ -360,13 +358,15 @@
\rlap{\normalhskip\cutmarkoffset\scratchdimen\copy\scratchbox}}%
\normalvskip\cutmarkoffset\scratchdimen
\copy\scratchbox}%
- \ht\scratchbox=\ruledheight
- \dp\scratchbox=\ruleddepth
- \wd\scratchbox=\!!zeropoint
+ \ht\scratchbox\ruledheight
+ \dp\scratchbox\ruleddepth
+ \wd\scratchbox\zeropoint
+ \resetcolorseparation
+ \localstartcolor[\defaulttextcolor]%
\box\scratchbox
\ifx\cutmarksymbol\relax \else
- \setbox\scratchbox=\normalvbox
- {\setbox\scratchbox=\normalhbox{\cutmarksymbols}%
+ \setbox\scratchbox\normalvbox
+ {\setbox\scratchbox\normalhbox{\cutmarksymbols}%
\vskip-\cutmarkoffset\scratchdimen
\vskip-\cutmarklength
\copy\scratchbox
@@ -375,33 +375,31 @@
\vskip\ruleddepth
\vskip\cutmarkoffset\scratchdimen
\copy\scratchbox}%
- \ht\scratchbox=\ruledheight
- \dp\scratchbox=\ruleddepth
- \wd\scratchbox=\!!zeropoint
+ \ht\scratchbox\ruledheight
+ \dp\scratchbox\ruleddepth
+ \wd\scratchbox\zeropoint
\box\scratchbox
\fi
+ \localstopcolor
\box#1}%
\wd#1=\ruledwidth
\ht#1=\ruledheight
\dp#1=\ruleddepth}
-\def\cuthbox%
+\def\cuthbox
{\normalhbox\bgroup
- \dowithnextbox{\makecutbox\nextbox\box\nextbox\egroup}%
- \normalhbox}
+ \dowithnextbox{\makecutbox\nextbox\box\nextbox\egroup}\normalhbox}
-\def\cutvbox%
+\def\cutvbox
{\normalvbox\bgroup
- \dowithnextbox{\makecutbox\nextbox\box\nextbox\egroup}%
- \normalvbox}
+ \dowithnextbox{\makecutbox\nextbox\box\nextbox\egroup}\normalvbox}
-\def\cutvtop%
+\def\cutvtop
{\normalvtop\bgroup
- \dowithnextbox{\makecutbox\nextbox\box\nextbox\egroup}%
- \normalvtop}
+ \dowithnextbox{\makecutbox\nextbox\box\nextbox\egroup}\normalvtop}
%D \macros
-%D {colormarkbox}
+%D {colormarkbox,rastermarkbox}
%D
%D This macro is used in the pagebody routine. No other use
%D is advocated here.
@@ -415,7 +413,7 @@
\def\colorrangeA#1#2#3#4%
{\vbox
- {\scratchdimen=-\colormarklength
+ {\scratchdimen-\colormarklength
\multiply\scratchdimen 4
\advance\scratchdimen \ruledheight
\advance\scratchdimen \ruleddepth
@@ -440,7 +438,11 @@
\vbox to \scratchdimen
{\vss
\hbox to 3em
- {\hss\ifdim##1pt=0pt#1\else##1\fi\hss}%
+ {\hss
+ \localstartcolor[white]%
+ \ifdim##1\s!pt=\zeropoint#1\else##1\fi
+ \localstopcolor
+ \hss}%
\vss}%
\fi}}%
\offinterlineskip
@@ -448,7 +450,7 @@
\def\colorrangeB
{\hbox
- {\scratchdimen=-\colormarklength
+ {\scratchdimen-\colormarklength
\multiply\scratchdimen 2
\advance\scratchdimen \ruledwidth
\divide\scratchdimen 11
@@ -470,7 +472,11 @@
\vbox to \colormarklength
{\vss
\hbox to \scratchdimen
- {\hss\ifdim##2pt=.5pt##2~\fi##1\hss}
+ {\hss
+ \localstartcolor[white]%
+ \ifdim##2\s!pt=.5\s!pt##2~\fi##1%
+ \localstopcolor
+ \hss}
\vss}%
\fi}%
\docommando C .5 \iftrue \iffalse\iffalse\iffalse
@@ -487,76 +493,87 @@
\def\colorrangeC
{\hbox
- {\scratchdimen=-\colormarklength
- \multiply\scratchdimen by 2
- \advance\scratchdimen by \ruledwidth
- \divide\scratchdimen by 14
+ {\resetcolorseparation
+ \scratchdimen-\colormarklength
+ \multiply\scratchdimen 2
+ \advance\scratchdimen \ruledwidth
+ \divide\scratchdimen 14
\def\docommando##1%
{\definecolor[\s!dummy][\c!s=##1]%
\localstartcolor[\s!dummy]%
\vrule
\!!width \scratchdimen
\!!height \colormarklength
- \!!depth \!!zeropoint
+ \!!depth \zeropoint
\localstopcolor
\ifdim\scratchdimen>2em
\hskip-\scratchdimen
\vbox to \colormarklength
- {\vss\hbox to \scratchdimen{\hss##1\hss}\vss}%
+ {\vss
+ \localstartcolor[white]%
+ \hbox to \scratchdimen{\hss##1\hss}
+ \localstopcolor
+ \vss}%
\fi}%
\processcommalist
- [1.00,0.95,0.90,0.85,0.80,0.75,
- 0.70,0.60,0.50,0.40,0.30,0.20,0.10,0.00]\docommando}}
-
-\def\docolormarkbox#1%
- {\edef\ruledheight{\the\ht#1}%
- \edef\ruleddepth {\the\dp#1}%
- \edef\ruledwidth {\the\wd#1}%
- \setbox#1=\hbox
- {\scratchdimen=\colormarklength
- \divide\scratchdimen by 2
+ [1.00,0.95,0.90,0.85,0.80,0.75,0.70,%
+ 0.60,0.50,0.40,0.30,0.20,0.10,0.00]\docommando}}
+
+\def\docolormarkbox#1#2%
+ {\edef\ruledheight{\the\ht#2}%
+ \edef\ruleddepth {\the\dp#2}%
+ \edef\ruledwidth {\the\wd#2}%
+ \setbox#2\hbox
+ {\scratchdimen\colormarklength
+ \divide\scratchdimen 2
\forgetall
\ssxx
- \setbox\scratchbox=\vbox
+ \setbox\scratchbox\vbox
{\offinterlineskip
\vskip-\colormarkoffset\scratchdimen
- \vskip-2\scratchdimen
- \hbox to \ruledwidth
- {\hss\hbox{\colorrangeB}\hss}%
- \vskip\colormarkoffset\scratchdimen
- \vbox to \ruledheight
- {\vss
- \hbox to \ruledwidth
- {\llap{\colorrangeA C\iftrue\iffalse\iffalse\hskip\colormarkoffset\scratchdimen}%
- \hfill
- \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA R\iffalse\iftrue\iftrue}}%
- \vss
- \hbox to \ruledwidth
- {\llap{\colorrangeA M\iffalse\iftrue\iffalse\hskip\colormarkoffset\scratchdimen}%
- \hfill
- \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA G\iftrue\iffalse\iftrue}}%
- \vss
- \hbox to \ruledwidth
- {\llap{\colorrangeA Y\iffalse\iffalse\iftrue\hskip\colormarkoffset\scratchdimen}%
- \hfill
- \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA B\iftrue\iftrue\iffalse}}%
- \vss}
+ \vskip-2\scratchdimen\relax % relax needed
+ % beware: no \ifcase, due to nested \iftrue/\iffalse
+ % and lacking \fi's
+ \doifelse{#1}{0}%
+ {\vskip\colormarklength
+ \vskip\colormarkoffset\scratchdimen
+ \vskip\ruledheight}
+ {\hbox to \ruledwidth{\hss\hbox{\colorrangeB}\hss}%
+ \vskip\colormarkoffset\scratchdimen
+ \vbox to \ruledheight
+ {\vss
+ \hbox to \ruledwidth
+ {\llap{\colorrangeA C\iftrue\iffalse\iffalse\hskip\colormarkoffset\scratchdimen}%
+ \hfill
+ \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA R\iffalse\iftrue\iftrue}}%
+ \vss
+ \hbox to \ruledwidth
+ {\llap{\colorrangeA M\iffalse\iftrue\iffalse\hskip\colormarkoffset\scratchdimen}%
+ \hfill
+ \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA G\iftrue\iffalse\iftrue}}%
+ \vss
+ \hbox to \ruledwidth
+ {\llap{\colorrangeA Y\iffalse\iffalse\iftrue\hskip\colormarkoffset\scratchdimen}%
+ \hfill
+ \rlap{\hskip\colormarkoffset\scratchdimen\colorrangeA B\iftrue\iftrue\iffalse}}%
+ \vss}}%
\vskip\colormarkoffset\scratchdimen
\hbox to \ruledwidth
{\hss\lower\ruleddepth\hbox{\colorrangeC}\hss}}%
- \ht\scratchbox=\ruledheight
- \dp\scratchbox=\ruleddepth
- \wd\scratchbox=\!!zeropoint
+ \ht\scratchbox\ruledheight
+ \dp\scratchbox\ruleddepth
+ \wd\scratchbox\zeropoint
\box\scratchbox
- \box#1}%
- \wd#1=\ruledwidth
- \ht#1=\ruledheight
- \dp#1=\ruleddepth}
+ \box#2}%
+ \wd#2=\ruledwidth
+ \ht#2=\ruledheight
+ \dp#2=\ruleddepth}
-\def\colormarkbox#1%
- {\ifincolor
- \docolormarkbox{#1}%
- \fi}
+\def\colormarkbox % #1
+ {\ifincolor\@EA\docolormarkbox\else\@EA\gobbletwoarguments\fi1}
+
+\def\rastermarkbox % #1
+ {\ifincolor\@EA\docolormarkbox\else\@EA\gobbletwoarguments\fi0}
%D \macros
%D {showwhatsits, dontshowwhatsits}
@@ -589,25 +606,25 @@
\let\supernormalmark \normalmark % mark may already superseded
\let\supernormalmarks \normalmarks % mark may already superseded
- \def\showwhatsits%
+ \def\showwhatsits
{\protected\def\normalmark {\visualwhatsit100+m\supernormalmark }%
\protected\def\normalmarks{\visualwhatsit100+m\supernormalmarks}%
\protected\def\special {\visualwhatsit0100s\normalspecial }%
\protected\def\write {\visualwhatsit001-w\normalwrite }%
- \let\immediate=\immediatewhatsit
+ \let\immediate\immediatewhatsit
\appendtoks\dontshowwhatsits\to\everystoptext}
- \def\immediatewhatsit%
- {\bgroup\futurelet\next\doimmediatewhatsit}%
+ \def\immediatewhatsit
+ {\bgroup\futurelet\next\doimmediatewhatsit}
- \def\doimmediatewhatsit%
+ \def\doimmediatewhatsit
{\ifx\next\write
\egroup\immediatewritetrue
\else
\egroup\expandafter\normalimmediate
\fi}
- \def\dontshowwhatsits%
+ \def\dontshowwhatsits
{\let\immediate \normalimmediate
\let\normalmark\supernormalmark
\let\special \normalspecial
@@ -622,19 +639,19 @@
\dontshowwhatsits
\ttx
\ifvmode\donetrue\else\donefalse\fi
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\ifdone\dostartgraycolormode0\else\dostartrgbcolormode#1#2#3\fi
#5\dostopcolormode}%
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\ifdone\dostartrgbcolormode#1#2#3\else\dostartgraycolormode0\fi
\vrule\!!width\wd\scratchbox\dostopcolormode
\hskip-\wd\scratchbox\box\scratchbox}%
- \scratchdimen=1ex
+ \scratchdimen1ex
\ifdone
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\hskip#4\scratchdimen\box\scratchbox}%
\else
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\raise#4\scratchdimen\box\scratchbox}%
\fi
\smashbox\scratchbox
@@ -648,7 +665,7 @@
\expandafter\normalimmediate
\fi}
- \def\pushwhatsit%
+ \def\pushwhatsit
{\ifzeropt\lastskip
\ifcase\lastpenalty
\ifzeropt\lastkern
@@ -688,7 +705,7 @@
%D The next macro can be used to keep track of classes of
%D boxes (handy for development cq.\ tracing).
-\def\dodotagbox#1#2#3%
+\def\dodotagbox#1#2#3% can be reimplemented
{\def\next##1##2##3##4%
{\vbox to \ht#2{##3\hbox to \wd#2{##1#3##2}##4}}%
\processaction
diff --git a/tex/context/base/enco-ini.tex b/tex/context/base/enco-ini.tex
index 117e20ee4..d0e027419 100644
--- a/tex/context/base/enco-ini.tex
+++ b/tex/context/base/enco-ini.tex
@@ -133,10 +133,11 @@
\def\setregimecode#1#2%
{\ifprotectregime\ifnum\catcode#1=\active\else
- \catcode#1=#2\relax
+ \catcode#1=#2%\relax
\fi\else
- \catcode#1=#2\relax
- \fi}
+ \catcode#1=#2%\relax
+ \fi
+ \relax}
%D \macros
%D {startregime, enableregime}
@@ -161,16 +162,20 @@
\def\startregime[#1]%
{\localpushmacro\characterregime
\edef\characterregime{@#1@}%
- \doifundefined{\@reg@\characterregime}
+ \checkregimetoks}
+
+\def\checkregimetoks
+ {\doifundefined{\@reg@\characterregime}
{\@EA\newtoks\csname\@reg@\characterregime\endcsname}}
-\def\stopregime%
+\def\stopregime
{\localpopmacro\characterregime}
%\long\def\startregime[#1]#2\stopregime{}
-\def\setregimetoks%
- {\@EA\let\@EA\regimetoks\csname\@reg@\characterregime\endcsname}
+\def\setregimetoks
+ {\checkregimetoks
+ \@EA\let\@EA\regimetoks\csname\@reg@\characterregime\endcsname}
\let\enabledregime\empty
@@ -221,13 +226,17 @@
\long\def\defineactivedecimals#1 to #2 as #3 %
{\setregimetoks
- \dostepwiserecurse{#1}{#2}{1}
+ \dostepwiserecurse{#1}{#2}\plusone
{\@EA\appendtoks\@EA\dodefineactivedecimal\@EA{\recurselevel}{#3}\to\regimetoks}}
\long\def\defineactivetoken #1 #2% watch the {}
{\setregimetoks
\appendtoks\defineactivecharacter#1 {#2{}}\to\regimetoks}
+\long\def\defineactiveinspector #1 #2% watch the missing {}
+ {\setregimetoks
+ \appendtoks\defineactivecharacter#1 {#2}\to\regimetoks}
+
%D ....
\edef\nocharacterregime{@\s!default @}
@@ -261,8 +270,9 @@
\def\doautosetregime#1#2%
{\ifnum#2>127
- \def\!!stringa{#2 }%
- \@EA\@EA\@EA\defineactivetoken\@EA\!!stringa\@EA{\csname#1\endcsname}%
+% \def\!!stringa{#2 }%
+% \@EA\@EA\@EA\defineactivetoken\@EA\!!stringa\@EA{\csname#1\endcsname}%
+\expanded{\defineactivetoken #2 \@EA\noexpand\csname#1\endcsname}%
\fi}
%D \macros
@@ -271,7 +281,7 @@
%D The following setup command is used to tune encoding
%D handling.
-\def\setupencoding%
+\def\setupencoding
{\dosingleargument\dosetupencoding}
\def\dosetupencoding[#1]%
@@ -292,9 +302,9 @@
{\setvalue{\c!file\f!encodingprefix#1}{}%
\makeshortfilename[\f!encodingprefix#1]%
\startreadingfile
- \readsysfile{\shortfilename}
- {\showmessage{\m!encodings}{2}{#1}}
- {\showmessage{\m!encodings}{3}{#1}}%
+ \readsysfile\shortfilename
+ {\showmessage\m!encodings2{#1}}
+ {\showmessage\m!encodings3{#1}}%
\stopreadingfile}}
\def\useencoding[#1]%
@@ -332,7 +342,7 @@
\def\stopmapping
{\popmacro\charactermapping}
-\def\setmappingtoks%
+\def\setmappingtoks
{\@EA\let\@EA\mappingtoks\csname\@map@\charactermapping\endcsname}
\def\definecasemap #1 #2 #3 % code lower upper
@@ -364,7 +374,7 @@
%D and saves a lot of typing (copying).
\def\presetcaserange#1#2%
- {\dostepwiserecurse{#1}{#2}{1}
+ {\dostepwiserecurse{#1}{#2}\plusone
{\setregimecode\recurselevel\@@letter
\lccode \recurselevel=\recurselevel
\uccode \recurselevel=\recurselevel}}
@@ -436,8 +446,8 @@
%D and~\type{^}, so let us define ourselve some handy macros
%D first.
-\def\protectfontcharacters%
- {\edef\unprotectfontcharacters%
+\def\protectfontcharacters
+ {\edef\unprotectfontcharacters
{\catcode`\noexpand ~=\the\catcode`~\relax
\catcode`\noexpand _=\the\catcode`_\relax
\catcode`\noexpand ^=\the\catcode`^\relax}%
@@ -553,7 +563,7 @@
\csname\characterencoding#1\endcsname
\fi}
-\def\enableencoding%
+\def\enableencoding
{\dodoubleempty\doenableencoding}
\def\doenableencoding[#1][#2]% main fallback
@@ -573,30 +583,29 @@
{\edef\characterencoding{@#1@}%
\let\nocharacterencoding\xnocharacterencoding}
-\def\startencoding%
+\def\startencoding
{\dodoubleempty\dostartencoding}
\def\dostartencoding[#1][#2]% encoding regime
{\doifelsenothing{#1}
{\let\stopencoding\relax}
{%\protectfontcharacters % problematic in language loading
- \showmessage{\m!encodings}{1}{#1}%
+ \showmessage\m!encodings1{#1}%
\pushmacro\dohandleaccent
\pushmacro\dohandlecommand
\pushmacro\definesortkey
- \pushmacro\currentcharacterregime
- \pushmacro\dosetautoregime
+ \pushmacro\characterregime
+ \pushmacro\doautosetregime
\let\dohandleaccent\donthandleaccent
\let\dohandlecommand\donthandlecommand
\let\definesortkey\savesortkey
\doifelsenothing{#2}%
- {% message
- \let\doautosetregime\gobbletwoarguments}
- {\def\currentcharacterregime{@#2@}}%
+ {\let\doautosetregime\gobbletwoarguments}
+ {\def\characterregime{@#2@}}%
\enableencoding[#1]%
\def\stopencoding%
- {\popmacro\dosetautoregime
- \popmacro\currentcharacterregime
+ {\popmacro\doautosetregime
+ \popmacro\characterregime
\popmacro\definesortkey
\popmacro\dohandlecommand
\popmacro\dohandleaccent
@@ -635,7 +644,7 @@
%D argument determines the sort order given the replacement.
%D The last argument is used as entry in the index (a, b, etc).
%D
-%D The keys can be flished using \type {\flushsortkeys}
+%D The keys can be flushed using \type {\flushsortkeys}
%D which in turn results in a sequence of calls to \type
%D {\flushsortkey}, a macro taking 4~arguments.
%D
@@ -657,7 +666,7 @@
\def\definesortkey#1#2#3#4%
{}
-\def\flushsortkeys%
+\def\flushsortkeys
{\enablelanguagespecifics[\currentlanguage]%
\getvalue{sort:\characterencoding}}
@@ -669,7 +678,7 @@
%D The actual definition of accents, special characters and
%D commands is done with the next three commands.
-\def\defineaccent%
+\def\defineaccent
{\protectfontcharacters
\dodefineaccent}
@@ -677,21 +686,11 @@
{\unprotectfontcharacters
\dododefineaccent#1 #2 }
-% obsolete
-%
-% \def\dododefineaccent#1 #2 #3 %
-% {\redefineaccent #1 % just to be sure
-% \doifnumberelse{\string#3}
-% {\setvalue{\characterencoding#1\string#2}{\char#3 }} % space added
-% {\setvalue{\characterencoding#1\string#2}{#3}}%
-% \unprotectfontcharacters}
-
\def\dododefineaccent#1 #2 #3 %
{\setvalue{#1}{\dohandleaccent{#1}}%
\doifnumberelse{\string#3}
{\setvalue{\characterencoding#1\string#2}{\char#3 }} % space added
- {\setvalue{\characterencoding#1\string#2}{#3}}%
- \unprotectfontcharacters}
+ {\setvalue{\characterencoding#1\string#2}{#3}}}
\beginTEX
@@ -740,12 +739,12 @@
\def\patternchar#1 {\rawcharacter{#1}}
-\def\startpatternaccents%
+\def\startpatternaccents
{\let\savedpatternchar\char
\let\char\patternchar
\let\dohandleaccent\normaldohandleaccent}
-\def\stoppatternaccents%
+\def\stoppatternaccents
{\let\char\savedpatternchar}
\def\definecharacter#1 #2 %
@@ -863,7 +862,7 @@
%D \defineaccentcommand " 127 % "7F
%D \stoptypen
-\def\defineaccentcommand%
+\def\defineaccentcommand
{\protectfontcharacters
\dodefineaccentcommand}
@@ -1278,7 +1277,7 @@
\let\normalmathaccent\mathaccent
\let\normalchar \char
-\def\buildtextaccent%
+\def\buildtextaccent
{\ifignoreaccent
\expandafter\nobuildtextaccent
\else
@@ -1327,7 +1326,7 @@
% some fake ones, name will change into build
-\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char
+\unexpanded\def\bottomaccent#1#2#3#4#5% down right slantcorrection accent char
{\leavevmode
\vtop
{\forgetall
@@ -1336,7 +1335,7 @@
\everycr\emptytoks
\tabskip\zeropoint
\lineskiplimit\zeropoint
- \setbox0=\hbox{#4}%
+ \setbox0\hbox{#4}%
\halign
{##\crcr#5\crcr
\hidewidth
@@ -1423,6 +1422,28 @@
\def\donthandlecommand #1{\expandafter\string\csname#1\endcsname\space}
\def\donthandlecharacter#1{\expandafter\string\csname#1\endcsname\space}
+\def\keepencodedtokens
+ {\let\dohandleaccent \keephandleaccent
+ \let\dohandlecommand \keephandlecommand
+ \let\dohandlecharacter\keephandlecharacter}
+
+\def\keephandleaccent #1{\expandafter\noexpand\csname#1\endcsname}
+\def\keephandlecommand #1{\expandafter\noexpand\csname#1\endcsname}
+\def\keephandlecharacter#1{\expandafter\noexpand\csname#1\endcsname}
+
+\def\handleaccent #1{\csname#1\endcsname}
+\def\handlecommand #1{\csname#1\endcsname}
+\def\handlecharacter#1{\csname#1\endcsname}
+
+\unexpanded\def\uhandleaccent #1{\csname#1\endcsname}
+\unexpanded\def\uhandlecommand #1{\csname#1\endcsname}
+\unexpanded\def\uhandlecharacter#1{\csname#1\endcsname}
+
+\def\dontexpandencodedtokens
+ {\def\dohandleaccent {\uhandleaccent}%
+ \def\dohandlecommand {\uhandlecommand}%
+ \def\dohandlecharacter{\uhandlecharacter}}
+
%D Still valid? To be checked:
\def\ignoreencoding
@@ -1440,7 +1461,7 @@
%D We preload several encodings:
-\useencoding[def,acc,raw,com,cas,mis]
+\useencoding[def,acc,raw,com,cas,mis]
\useencoding[ans,il2,ec,tbo,pdf,uc,pol,x5]
diff --git a/tex/context/base/enco-mis.tex b/tex/context/base/enco-mis.tex
index 20aae235a..3ab1ad432 100644
--- a/tex/context/base/enco-mis.tex
+++ b/tex/context/base/enco-mis.tex
@@ -33,26 +33,26 @@
\unprotect
-\def\pseudoencodeddj% like in babel
+\def\pseudoencodeddj % like in babel
{\leavevmode\hbox\bgroup
- \setbox0=\hbox{d}%
+ \setbox0\hbox{d}%
\dimen0=\ht0
- \advance\dimen0 by 1ex
+ \advance\dimen0 1ex
\dimen0=.45\dimen0
\dimen2\expandafter\withoutpt\the\fontdimen1\font\dimen0
- \advance\dimen2 by .5ex
+ \advance\dimen2 .5ex
\rlap{\raise\dimen0\hbox{\kern\dimen2\vbox{\hrule\!!height0.1ex\!!width0.3em}}}%
\box0
\egroup}
-\def\pseudoencodedDJ% like in babel
+\def\pseudoencodedDJ % like in babel
{\leavevmode
\hbox\bgroup
- \setbox0=\hbox{D}%
+ \setbox0\hbox{D}%
\dimen0=.55\ht0
\dimen2\expandafter\withoutpt\the\fontdimen1\font\dimen0
- \advance\dimen2 by .15ex
- \advance\dimen2 by -.15\fontdimen7\font
+ \advance\dimen2 .15ex
+ \advance\dimen2 -.15\fontdimen7\font
\dimen4\expandafter\withoutpt\the\fontdimen7\font\dimen0
\rlap{\raise\dimen0\hbox{\kern\dimen2\vbox{\hrule\!!height0.1ex\!!width0.33em}}}%
\box0
@@ -109,7 +109,7 @@
\def\fakepermine
{\dontleavehmode
\bgroup
- \setbox0=\hbox
+ \setbox0\hbox
{\mathematics{+}}%
\hbox to \wd0
{\hss
@@ -173,7 +173,6 @@
\def\_{\ifmmode\mathunderscore\else\textunderscore\fi}
-
%D Handy:
\def\missingglyph{\ruledhbox{?}}
diff --git a/tex/context/base/enco-pol.tex b/tex/context/base/enco-pol.tex
index ecc9ee8b1..36336c03a 100644
--- a/tex/context/base/enco-pol.tex
+++ b/tex/context/base/enco-pol.tex
@@ -11,7 +11,8 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-%D Polish native encoding.
+%D Polish native encoding; normally polish users will use
+%D translate=cp1250pl in combination with ec encoding.
\startmapping[pl0]
diff --git a/tex/context/base/font-chi.tex b/tex/context/base/font-chi.tex
index 267e75563..fa9e940f7 100644
--- a/tex/context/base/font-chi.tex
+++ b/tex/context/base/font-chi.tex
@@ -125,7 +125,7 @@
\sfcode`(=2000 % a temporary hack
-\def\chinesenobreak%
+\def\chinesenobreak
{\relax
\iftracechinese
\nobreak
@@ -137,15 +137,15 @@
\newif\ifcorrectchineseboundarychars
-\def\chineseunskip%
+\def\chineseunskip
{\unskip\unskip\unskip\unskip}
-\def\insertchineseglyph%
+\def\insertchineseglyph
{\iftracechinese\tracedchineseglyph\else\insertunicodeglyph\fi}
\newif\ifverticalchinese
-\def\handlechineseunicodeglyph%
+\def\handlechineseunicodeglyph
{\ifinpagebody
\horizontalchineseunicodeglyph
\else\ifverticalchinese
@@ -259,7 +259,7 @@
\fi\fi\fi
\fi\fi\fi}
-\def\horizontalchineseunicodeglyph%
+\def\horizontalchineseunicodeglyph
{\relax
\ifhmode\else\dontleavehmode\fi % added
\setunicodescale\chineseunicodescale
@@ -340,7 +340,7 @@
\aftergroup\ignorespaces % watch this
\fi}
-\def\verticalchineseunicodeglyph%
+\def\verticalchineseunicodeglyph
{\relax
\ifprocessingverbatim % to do
\horizontalchineseunicodeglyph
@@ -348,17 +348,17 @@
\setunicodescale\chineseunicodescale
\setunicodestrut\chineseunicodeheight\chineseunicodedepth
\analyzechineseunicodeglyph
- \setbox\scratchbox=\hbox to \hsize
+ \setbox\scratchbox\hbox to \hsize
{\hss
\ifcase\chineseSstatus\relax
\insertchineseglyph
\else % left / right
- \setbox\scratchbox=\hbox{\insertchineseglyph}%
+ \setbox\scratchbox\hbox{\insertchineseglyph}%
\rotate[\c!rotatie=270]{\box\scratchbox}%
\fi
\hss}%
- \ht\scratchbox=\unicodeheight\ht\strutbox
- \dp\scratchbox=\unicodedepth \dp\strutbox
+ \ht\scratchbox\unicodeheight\ht\strutbox
+ \dp\scratchbox\unicodedepth \dp\strutbox
\ifvmode % catches \hbox{...}, actually \hbox should be \vbox -)
\nointerlineskip
\fi
@@ -369,7 +369,7 @@
\or % right
\ifnum\chineseSstatus=2 \par\nobreak\else\allowbreak\fi
\fi
- \global\chardef\prevchineseSstatus=\chineseSstatus % pagebody ...
+ \global\chardef\prevchineseSstatus\chineseSstatus % pagebody ...
\box\scratchbox\par
\aftergroup\ignorespaces % watch this
\fi}
@@ -381,10 +381,10 @@
%D vertical typesetting. Vertical typesetting is implemented
%D on top of the multi||column routines.
-\def\setupchinese%
+\def\setupchinese
{\dodoubleargument\getparameters[\??vt]}
-\def\startvertical%
+\def\startvertical
{\dosingleempty\dostartvertical}
\def\dostartvertical[#1]%
@@ -392,13 +392,13 @@
\def\maxnofcolumns{25}%
\verticalchinesetrue
\global\chardef\prevchineseSstatus=0
- \let\nochinese=\nochineseinvertical
- \doif{\@@vtn}{\v!passend}
+ \let\nochinese\nochineseinvertical
+ \doif\@@vtn\v!passend
{\dimen0=\textwidth
- \advance\dimen0 by \@@vtafstand
+ \advance\dimen0 \@@vtafstand
\dimen2=\bodyfontsize
- \advance\dimen2 by \@@vtafstand
- \divide\dimen0 by \number\dimen2
+ \advance\dimen2 \@@vtafstand
+ \divide\dimen0 \number\dimen2
\edef\@@vtn{\number\dimen0}}%
\startkolommen
[\c!richting=\@@vtrichting,
@@ -407,7 +407,7 @@
\c!n=\@@vtn,
#1]}
-\def\stopvertical%
+\def\stopvertical
{\stopkolommen
\egroup}
@@ -427,9 +427,9 @@
\def\nochineseinvertical#1%
{\par
- \setbox\scratchbox=\hbox{\strut#1}
+ \setbox\scratchbox\hbox{\strut#1}
\getnoflines{\wd\scratchbox}
- \setbox\scratchbox=\hbox to \noflines\openlineheight
+ \setbox\scratchbox\hbox to \noflines\openlineheight
{\hss\box\scratchbox\hss}
\hbox to \hsize
{\hss
@@ -978,20 +978,20 @@
\definefontsynonym [SimplifiedChineseKaiTiBold] [gbkai] [encoding=gbk]
\definefontsynonym [SimplifiedChineseKaiTiBoldSlanted] [gbkaisl] [encoding=gbk]
-\definefontsynonym [TraditionalChineseKaiTiRegular] [b5kai] [encoding=big5]
-\definefontsynonym [TraditionalChineseKaiTiSlanted] [b5kaisl] [encoding=big5]
-\definefontsynonym [TraditionalChineseKaiTiBold] [b5kai] [encoding=big5]
-\definefontsynonym [TraditionalChineseKaiTiBoldSlanted][b5kaisl] [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiRegular] [b5kai] [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiSlanted] [b5kaisl] [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiBold] [b5kai] [encoding=big5]
+\definefontsynonym [TraditionalChineseKaiTiBoldSlanted] [b5kaisl] [encoding=big5]
-\definefontsynonym [SimplifiedChineseFangSongRegular] [gbfs] [encoding=gbk]
-\definefontsynonym [SimplifiedChineseFangSongSlanted] [gbfssl] [encoding=gbk]
-\definefontsynonym [SimplifiedChineseFangSongBold] [gbfs] [encoding=gbk]
-\definefontsynonym [SimplifiedChineseFangSongBoldSlanted][gbfssl] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongRegular] [gbfs] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongSlanted] [gbfssl] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongBold] [gbfs] [encoding=gbk]
+\definefontsynonym [SimplifiedChineseFangSongBoldSlanted] [gbfssl] [encoding=gbk]
-\definefontsynonym [TraditionalChineseFangSongRegular] [b5fs] [encoding=big5]
-\definefontsynonym [TraditionalChineseFangSongSlanted] [b5fssl] [encoding=big5]
-\definefontsynonym [TraditionalChineseFangSongBold] [b5fs] [encoding=big5]
-\definefontsynonym [TraditionalChineseFangSongBoldSlanted][b5fssl] [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongRegular] [b5fs] [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongSlanted] [b5fssl] [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongBold] [b5fs] [encoding=big5]
+\definefontsynonym [TraditionalChineseFangSongBoldSlanted] [b5fssl] [encoding=big5]
\definefontsynonym [SimplifiedChineseLiShuRegular] [gbli] [encoding=gbk]
\definefontsynonym [SimplifiedChineseLiShuSlanted] [gblisl] [encoding=gbk]
diff --git a/tex/context/base/font-ini.tex b/tex/context/base/font-ini.tex
index 4af5532ee..3e7534bdc 100644
--- a/tex/context/base/font-ini.tex
+++ b/tex/context/base/font-ini.tex
@@ -18,7 +18,7 @@
% adapted, else wrong interlinespace
-\def\setfontparameters%
+\def\setfontparameters
{\synchronizefontsfalse
\the\everybodyfont
\synchronizefontstrue}
@@ -57,15 +57,21 @@
% new
-\newevery \everydefinedfont \relax
+\newevery \everydefinedfont \relax
\def\dodefinedfont[#1]%
{\iffirstargument\definefont[\string\definedfont][#1]\fi
\csname\string\definedfont\endcsname
\the\everydefinedfont}
-\unexpanded\def\definedfont%
+\unexpanded\def\definedfont
{\dosingleempty\dodefinedfont}
+
+\unexpanded\def\startfont
+ {\bgroup\definedfont}
+
+\def\stopfont
+ {\egroup}
%%% message 14 added
@@ -489,7 +495,7 @@
%D \type{\bf}, \type{\sl} etc. but by default it equals
%D \type{\tf}:
-\unexpanded\def\mf%
+\unexpanded\def\mf
{\dodosetmathfont\fontalternative
\csname\fontalternative\endcsname}
@@ -539,7 +545,7 @@
\let\normalmathop=\mathop
-\def\mathop%
+\def\mathop
{\normalmathop
\bgroup
\let\rm\mf
@@ -589,19 +595,19 @@
%D although for instance unboxing goes ok. Therefore we
%D introduce:
-\def\normalmbox%
+\def\normalmbox
{\normalhbox\bgroup\mf
\dowithnextbox{\box\nextbox\egroup}\normalhbox}
% to test:
%
-% \def\normalmbox%
-% {\dowithnextboxcontent{\mf}{\box\nextbox}\normalhbox}
+% \def\normalmbox
+% {\dowithnextboxcontent\mf\flushnextbox\normalhbox}
-\def\mbox%
+\def\mbox
{\ifmmode\normalmbox\else\normalhbox\fi}
-\def\enablembox%
+\def\enablembox
{\appendtoks
\ifx\normalhbox\undefined\let\normalhbox\hbox\fi
\let\hbox\mbox
@@ -767,7 +773,7 @@
\dosettextfamily\c!sc
\to \textstrategies
-\def\dosettextfamily#1%
+\def\dosettextfamily#1% better pass fontbody to dodoset
{\let\savedfontbody\fontbody
\let\fontfamily#1%
\let\fontbody\scriptscriptface\dodosettextfamily\scriptscriptfont
@@ -1059,13 +1065,13 @@
\def\magstep#1% \relax removed, otherwise space after it sticks, else added
{\ifcase#1 \@m\or1200\or1440\or1728\or2074\or2488\or\@m\fi}
-\def\magstephalf%
+\def\magstephalf
{1095}
\def\magfactor#1%
{\ifcase#1 1.000\or1.200\or1.440\or1.728\or2.074\or2.488\or1\fi}
-\def\magfactorhalf%
+\def\magfactorhalf
{1.095}
%D These macros enable the use of definitions like \type{sa
@@ -1080,50 +1086,53 @@
%D We could instead have used dirty grouping tricks, but this
%D one works too.
-\def\norelativefontsize{1}
-\def\dorelativefontsize{1}
-\def\relativefontsize {1}
+\def\defaultrelativefontsize{1}
+\def\localrelativefontsize {1}
+\def\localabsolutefontsize {\fontbody}
-\def\s!rscale{rscale}
+\let\relativefontsize \defaultrelativefontsize
-\def\dostorerelativefontsize#1%
- {\ifx\fontclass\empty\else\global\fi
- \letvalue{#1\s!rscale}\relativefontsize}
+\def\saverelativefontsize#1#2% #1=rm|ss|.. #2=waarde
+ {\setxvalue{\fontclass#1\s!rscale}{#2}}
-\beginTEX
+\beginTEX
-\def\dosetrelativefontsize#1%
- {\expandafter\ifx\csname#1\s!rscale\endcsname\relax
- \let\dorelativefontsize\norelativefontsize
- \else
- %\edef\dorelativefontsize{\csname#1\s!rscale\endcsname}%
- \@EA\let\@EA\dorelativefontsize\csname#1\s!rscale\endcsname
- \fi}
+\def\checkrelativefontsize#1%
+ {\edef\relativefontsize
+ {\@EA\ifx\csname\fontclass#1\s!rscale\endcsname\relax
+ \defaultrelativefontsize
+ \else
+ \csname\fontclass#1\s!rscale\endcsname
+ \fi}}
\endTEX
\beginETEX \ifcsname
-\def\dosetrelativefontsize#1%
- {\ifcsname#1\s!rscale\endcsname
- %\edef\dorelativefontsize{\csname#1\s!rscale\endcsname}%
- \@EA\let\@EA\dorelativefontsize\csname#1\s!rscale\endcsname
- \else
- \let\dorelativefontsize\norelativefontsize
- \fi}
+\def\checkrelativefontsize#1%
+ {\edef\relativefontsize
+ {\ifcsname\fontclass#1\s!rscale\endcsname
+ \csname\fontclass#1\s!rscale\endcsname
+ \else
+ \defaultrelativefontsize
+ \fi}}
\endETEX
-\def\doresetrelativefontsize%
- {\let\dorelativefontsize\norelativefontsize}
-
\newdimen\scaledfont
\def\@fs@{@fs@}
+% \def\parsefontspec#1%
+% {\edef\somefontspec{#1\space\relax}%
+% \@EA\doparsefontspec\somefontspec]% =>#1 \relax]
+% \donoparsefontspec}
+%
+% but, better:
+
\def\parsefontspec#1%
- {\edef\somefontspec{#1\space\relax}%
- \@EA\doparsefontspec\somefontspec]%
+ {\edef\somefontspec{#1\space}%
+ \@EA\doparsefontspec\somefontspec\relax]% =>#1 \relax]
\donoparsefontspec}
\def\doparsefontspec#1 #2%
@@ -1138,44 +1147,49 @@
#2}
\def\setnaturalfontspec#1]%
- {\@fs@scaled\!!thousand}
+ {\@fs@scaled\!!thousand\relax}
\def\setforcedfontspec#1 #2\relax]%
- {\csname\@fs@#1\endcsname{#2}}
+ {\csname\@fs@#1\endcsname#2\relax}
+
+\def\@fs@scaled
+ {\afterassignment\do@fs@scaled\scratchcounter}
-\def\@fs@scaled#1%
- {\scaledfont#1pt%
- \scaledfont\dorelativefontsize\scaledfont
+\def\do@fs@scaled#1\relax
+ {\scaledfont\number\scratchcounter\s!pt
+ \scaledfont\localrelativefontsize\scaledfont
\ifautofontsize\scaledfont\currentfontbodyscale\scaledfont\fi
\scratchcounter\scaledfont % \scaledfont is now pretty large
\advance\scratchcounter \medcard
\divide\scratchcounter \maxcard
\edef\somefontspec{ scaled \the\scratchcounter}}
-\def\@fs@at#1%
- {\scaledfont#1%
- \scaledfont\dorelativefontsize\scaledfont
+\def\@fs@at
+ {\afterassignment\do@fs@at\scaledfont}
+
+\def\do@fs@at#1\relax
+ {\scaledfont\localrelativefontsize\scaledfont
\ifautofontsize\scaledfont\currentfontbodyscale\scaledfont\fi
- \def\somefontspec{ at \scaledfont}}
+ \edef\somefontspec{ at \the\scaledfont}}
-\def\@fs@sa%
- {\scaledfont\fontbody
+\def\@fs@sa
+ {\scaledfont\localabsolutefontsize
\setsamofontspec}
-\def\@fs@mo%
- {\scaledfont\setmappedfontsize\fontbody
+\def\@fs@mo
+ {\scaledfont\setmappedfontsize\localabsolutefontsize
\setsamofontspec}
-\def\setsamofontspec#1%
+\def\setsamofontspec#1\relax
{\checkfontscale#1\end\scaledfont
- \scaledfont\dorelativefontsize\scaledfont
- \edef\somefontspec
- { at \ifautofontsize\currentfontbodyscale\fi\scaledfont}}
+ \scaledfont\localrelativefontsize\scaledfont
+ \ifautofontsize\scaledfont\currentfontbodyscale\scaledfont\fi
+ \edef\somefontspec{ at \the\scaledfont}}
-\def\getfontparameters%
+\def\getfontparameters
{\expandafter\setfontparameter\@@fontdata,]=,}
-\def\getglobalfontparameters%
+\def\getglobalfontparameters
{\expandafter\setglobalfontparameter\@@fontdata,]=,}
\def\setfontparameter#1=#2,%
@@ -1201,14 +1215,52 @@
\newif\ifskipfontcharacteristics \skipfontcharacteristicstrue
-\def\donoparsefontspec#1%
+%D When fontclasses are used, we define the font global,
+%D since namespaces are used. Otherwise we parse the specs
+%D each time.
+
+% wrong: this way we cannot set encoding etc
+%
+% \def\donoparsefontspec#1%
+% {\edef\fontfile{\truefontname\somefontname}%
+% \ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi
+% \edef\lastfontname{\fontfile\somefontspec}%
+% \ifx\fontclass\empty\else\global\fi
+% \expandafter\font\csname#1\endcsname\lastfontname\relax
+% \relax}
+
+\def\donoparsefontspec % #1 == \cs
{\edef\fontfile{\truefontname\somefontname}%
\ifx\fontfile\s!unknown \let\fontfile\defaultfontfile \fi
\edef\lastfontname{\fontfile\somefontspec}%
- \ifx\fontclass\empty\else\global\fi
- \expandafter\font\csname#1\endcsname\lastfontname\relax
- %\the\everyfont
- \relax}
+ \ifx\fontclass\empty
+ \expandafter\definefontlocal
+ \else
+ \expandafter\definefontglobal
+ \fi} % #1 == \cs
+
+\def\definefontlocal#1%
+ {\expandafter\font\csname#1\endcsname\lastfontname\relax}
+
+\def\definefontglobal#1% stores \somefontname=Mono and \fontfile=cmtt10
+ {\expandafter\xdef\csname#1\endcsname
+ {\noexpand\csname#1:\endcsname
+ \noexpand\reactivatefont{\somefontname}{\fontfile}}%
+ \global\expandafter\font\csname#1:\endcsname\lastfontname}
+
+\def\reactivatefont#1%#2%
+ {\def\somefontname{#1}\def\fontfile}%{#2}}
+
+% can be handy for tracing purposes
+%
+% \def\reportfontdefinition
+% {\bgroup
+% \expanded{\infofont
+% [\lastfontidentifier
+% ->\newfontidentifier
+% ->\fontname\csname\newfontidentifier\endcsname]}%
+% \endgraf
+% \egroup}
%D An additional the second \type {\font} definition can
%D prevent fuzzy font refs
@@ -1291,7 +1343,7 @@
%D data: \type {\truefontdata{\truefontname{Lucida-Bright}}}
%D \stopregels
-\def\definefontsynonym%
+\def\definefontsynonym
{\dotripleempty\dodefinefontsynonym}
\def\dodefinefontsynonym[#1][#2][#3]%
@@ -1308,9 +1360,9 @@
\fi
\fi}
-\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater
+\let\definefontfile\definefontsynonym % dedicated to Taco Hoekwater
-\def\setupfontsynonym%
+\def\setupfontsynonym
{\dodoubleempty\dosetupfontsynonym}
\def\dosetupfontsynonym[#1][#2]%
@@ -1326,11 +1378,11 @@
\beginTEX
-\def\truefontdata#1#2%
+\def\truefontdata#1#2%
{\expandafter\ifx\csname\??ff#1#2\endcsname\relax
\expandafter\ifx\csname\??ff\fontclass#1\endcsname\relax
\expandafter\ifx\csname\??ff#1\endcsname\relax
- \expandafter\ifx\csname\??ff#2\endcsname\relax
+ \expandafter\ifx\csname\??ff#2\endcsname\relax
\else
% raw(key)
\csname\??ff#2\endcsname
@@ -1340,11 +1392,11 @@
\expandafter\truefontdata\csname\??ff#1\endcsname#2%
\fi
\else
- % exp(palatino Regular) raw(key)
+ % exp(palatino Regular) raw(key)
\expandafter\truefontdata\csname\??ff\fontclass#1\endcsname#2%
\fi
\else
- % raw(Regular) raw(key)
+ % raw(Regular) raw(key)
\csname\??ff#1#2\endcsname
\fi}
@@ -1365,10 +1417,10 @@
\def\truefontdata#1#2%
{\ifcsname\??ff#1#2\endcsname
- % raw(Regular) raw(key)
+ % raw(Regular) raw(key)
\csname\??ff#1#2\endcsname
\else\ifcsname\??ff\fontclass#1\endcsname
- % exp(palatino Regular) raw(key)
+ % exp(palatino Regular) raw(key)
\expandafter\truefontdata\csname\??ff\fontclass#1\endcsname#2%
\else\ifcsname\??ff#1\endcsname
% exp(Regular) raw(key)
@@ -1479,13 +1531,55 @@
%D
%D The implementation one looks familiar:
-\def\definefont%
- {\dodoubleargument\dodefinefont}
-
-\def\dodefinefont[#1][#2]%
+% The simple implementation is:
+%
+% \def\definefont
+% {\dodoubleargument\dodefinefont}
+%
+% \def\dodefinefont[#1][#2]%
+% {\doifinstringelse{ }{#2}
+% {\unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}}
+% {\dodefinefont[#1][#2 sa 1]}}
+
+\def\definefont
+ {\dotripleempty\dodefinefont}
+
+\def\dodefinefont[#1][#2][#3]% [name][spec][1.6 | line=10pt | setup_id]
{\doifinstringelse{ }{#2}
- {\unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}}
- {\dodefinefont[#1][#2 sa 1]}}
+ {\ifthirdargument
+ \unexpanded\setvalue{#1}{\redodefinefont{#1}{#2}{#3}}%
+ \else
+ \unexpanded\setvalue{#1}{\dododefinefont{#1}{#2}}%
+ \fi}
+% {\definefont[#1][#2 sa 1][#3]}}
+ {\definefont[#1][#2 sa *][#3]}}
+
+%\def\redodefinefont#1#2#3%
+% {\dododefinefont{#1}{#2}%
+% \doifnumberelse{#3}
+% {\stelinterliniein[#3]\stelspatieringin}
+% {\doifassignmentelse{#3}
+% {\stelinterliniein[#3]\stelspatieringin}
+% {\setups[#3]}}} % so, we can have setups associated to fonts !
+
+\def\redodefinefont#1#2#3%
+ {\dododefinefont{#1}{#2}%
+ \doifsetupselse{#3}
+ {\setups[#3]} % don't forget to document this !
+ {\setuplocalinterlinespace[#3]%
+ \stelspatieringin}} % needed ?
+
+% \def\defineclassfont
+% {\doquadrupleempty\dodefineclassfont}
+%
+% \def\dodefineclassfont[#1][#2][#3][#4]% #2 = class
+% {\iffourthargument
+% \definefont[#1][#2#3][#4]%
+% %\else\ifthirdargument
+% % \definefont[#1][#2#3]%
+% \else
+% \definefont[#1][#2]%
+% \fi}
%D The \type {*} makes the switch local, so that we can redefine a
%D logical name and/or change the size in between.
@@ -1499,9 +1593,10 @@
\def\dododefinefont#1#2%
{\edef\lastfontidentifier{#1}%
- \dosetrelativefontsize\lastfontidentifier
+ \let\localrelativefontsize\defaultrelativefontsize
+ \let\localabsolutefontsize\fontbody
\parsefontspec{#2}\rawfontidentifier
- \doresetrelativefontsize
+ \let\localrelativefontsize\defaultrelativefontsize % not needed
\csname\rawfontidentifier\endcsname
\autofontsizefalse
\setfontcharacteristics
@@ -1509,34 +1604,37 @@
\beginTEX
-\def\xxdododefinefont#1#2% \autofontsizetrue is set by calling routine
- {\edef\lastfontidentifier{#1}%
+\def\xxdododefinefont#1#2#3#4% \autofontsizetrue is set by calling routine
+ {\edef\lastfontidentifier{#3}%
\@EA\ifx\csname\newfontidentifier\endcsname\relax
- \dosetrelativefontsize{\fontclass\lastfontidentifier}% dangerous with fallback
- \parsefontspec{#2}\newfontidentifier
- \doresetrelativefontsize
+ \def\localrelativefontsize{#1}%
+ \def\localabsolutefontsize{#2}%
+ \parsefontspec{#4}\newfontidentifier
+ \let\localrelativefontsize\defaultrelativefontsize % not needed
\fi
\csname\newfontidentifier\endcsname
\autofontsizefalse
- %\edef\lastfontidentifier{#1}%
+ %\edef\lastfontidentifier{#3}%
\ifskipfontcharacteristics \else
\setfontcharacteristics
\the\everyfontswitch
\fi}
+
\endTEX
\beginETEX \ifcsname
-\def\xxdododefinefont#1#2% \autofontsizetrue is set by calling routine
- {\edef\lastfontidentifier{#1}%
+\def\xxdododefinefont#1#2#3#4% \autofontsizetrue is set by calling routine
+ {\edef\lastfontidentifier{#3}%
\ifcsname\newfontidentifier\endcsname\else
- \dosetrelativefontsize{\fontclass\lastfontidentifier}% dangerous with fallback
- \parsefontspec{#2}\newfontidentifier
- \doresetrelativefontsize
+ \def\localrelativefontsize{#1}%
+ \def\localabsolutefontsize{#2}%
+ \parsefontspec{#4}\newfontidentifier
+ \let\localrelativefontsize\defaultrelativefontsize % not needed
\fi
\csname\newfontidentifier\endcsname
\autofontsizefalse
- %\edef\lastfontidentifier{#1}%
+ %\edef\lastfontidentifier{#3}%
\ifskipfontcharacteristics \else
\setfontcharacteristics
\the\everyfontswitch
@@ -1577,7 +1675,7 @@
%D \haalbuffer
%D \stopopelkaar
-\def\mapfontsize%
+\def\mapfontsize
{\dodoubleargument\domapfontsize}
\def\domapfontsize[#1][#2]%
@@ -1620,7 +1718,7 @@
\let\sizelist\empty
-\def\definefontsize[#1]%
+\def\definefontsize[#1]% sneller met toks
{\addtocommalist{#1}\sizelist
\def\docommando##1%
{\def\dodocommando####1%
@@ -1764,17 +1862,17 @@
\newcount\@@fontdefhack
-\def\@@beginfontdef%
+\def\@@beginfontdef
{\ifcase\@@fontdefhack
\let\k!savedtext \k!text \let\k!text \s!text
- \let\k!k!savedtext \k!k!text \def\k!k!text {1}%
+ \let\k!k!savedtext \k!k!text \let\k!k!text \!!plusone
\let\k!saveddefault \k!default \let\k!default \s!default
- \let\k!k!saveddefault\k!k!default \def\k!k!default {1}%
+ \let\k!k!saveddefault\k!k!default \let\k!k!default \!!plusone
\fi
- \advance\@@fontdefhack 1 }
+ \advance\@@fontdefhack \plusone }
-\def\@@endfontdef%
- {\advance\@@fontdefhack -1
+\def\@@endfontdef
+ {\advance\@@fontdefhack \minusone
\ifcase\@@fontdefhack
\let\k!k!default\k!k!saveddefault
\let\k!default \k!saveddefault
@@ -1782,13 +1880,13 @@
\let\k!text \k!savedtext
\fi}
-\def\definebodyfontenvironment%
+\def\definebodyfontenvironment
{\dotripleempty\dodefinebodyfontenvironment}
\def\dodefinebodyfontenvironment[#1][#2][#3]% class size settings
{\ifthirdargument
\@@beginfontdef
- \doifelse{#2}{\s!default}
+ \doifelse{#2}\s!default
{\getparameters[\??ft\s!default][#3]}
{\normalizebodyfontsize#2\to\tempbodyfontsize
\addtocommalist\tempbodyfontsize\bodyfontenvironmentlist
@@ -1802,8 +1900,8 @@
{\@@beginfontdef
\doifundefined{\??ft#2#1\c!em} % \s!text goes wrong in testing because
{\def\docommando##1% % the 12pt alternative will called when
- {\scratchdimen=#1\relax % typesetting the test (or so)
- \scratchdimen=\csname\??ft\s!default##1\endcsname\scratchdimen
+ {\scratchdimen#1\relax % typesetting the test (or so)
+ \scratchdimen\csname\??ft\s!default##1\endcsname\scratchdimen
\normalizebodyfontsize\scratchdimen\to\tempbodyfontsize
\setevalue{\??ft#2#1##1}{\tempbodyfontsize}}%
\processcommalist
@@ -1962,7 +2060,7 @@
%D user definitions like \type{\tfw} or \type{\bfq} for real
%D large alternatives.
-\def\definebodyfont%
+\def\definebodyfont
{\doquadrupleempty\redefinebodyfont}
\def\redefinebodyfont[#1][#2][#3][#4]%
@@ -1974,7 +2072,7 @@
\def\reredefinebodyfont[#1][#2][#3]#4%
{\pushmacro\fontclass
- \doifelse{#4}{\s!default}
+ \doifelse{#4}\s!default
{\let\fontclass\empty}
{\def\fontclass{#4}}%
\definebodyfont[#1][#2][#3]%
@@ -2000,26 +2098,12 @@
{\definebodyfont[#1][\c!rm][]}% make sure some basics are set up.
\fi\fi}
-% nested
-%
-% \def\xdodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier
-% {%\writestatus{[#1]}{[#2][#3]}%
-% \doifnumberelse{#1}
-% {\doifassignmentelse{#3}
-% {% [12pt] [style] [settings]
-% \doifundefined{#2}{\expanded{\definefontstyle[#2][#2]}}% new
-% \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}}
-% {% [12pt] [style] [identifier]
-% \dodefinedefaultbodyfont[#1][#2][#3]}} % body style identifier
-% {% [identifier] [style] [settings]
-% \setvalue{\s!default#1#2}##1##2{\expanded{\xdodefinebodyfont[##1][##2][#3]}}}}
-%
-% faster
-
\def\xdodefinebodyfont[#1][#2][#3]% body|identifier style defs|identifier
{%\writestatus{[#1]}{[#2][#3]}%
+ \checkrelativefontsize{#2}% rather new, inherit from other defs
\ifundefined{#2}\expanded{\definefontstyle[#2][#2]}\fi % new
- \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}}
+ \processcommalist[#1]{\dododefinebodyfont{#2}{#3}}%
+ \let\relativefontsize\defaultrelativefontsize}
\def\dododefinebodyfont#1#2#3% style defs body
{\checkbodyfontenvironment[#3]% just to be sure.
@@ -2034,29 +2118,28 @@
\def\iflocalclassfonts{\ifx\fontclass\empty}
-% \let\iflocalclassfonts\iffalse
-
\def\dododododefinebodyfont#1#2[#3#4#5=#6]% style body def
{\ifundefined{#1#3#4#5}%
\checkbodyfont{#2}{#1}{#3#4}{#5}% not \definefontsize[#5]
\fi
- \dostorerelativefontsize{\fontclass#2#1#3#4#5}%
\iflocalclassfonts
\letbeundefined{*\fontclass#2#1#3#4#5*}%
- \unexpanded
- \setvalue{#2#1#3#4#5}{\xxdododefinefont
- {#2#1#3#4#5}{#6}}%
+ \scratchtoks{#6}%
+ \expanded{\unexpanded\noexpand\setvalue{#2#1#3#4#5}%
+ {\noexpand\xxdododefinefont{\relativefontsize}{#2}%
+ {#2#1#3#4#5}{\the\scratchtoks}}}%
\else
%\expanded{\writestatus{defining}{[\fontclass][#2#1#3#4#5] \resolvefontname#6 }}%
\global\letbeundefined{*\fontclass#2#1#3#4#5*}%
\ifresolvefontfile
- \unexpanded
- \setxvalue{\fontclass#2#1#3#4#5}{\noexpand\xxdododefinefont
- {#2#1#3#4#5}{\resolvefontname#6 }}%
+ \unexpanded\setxvalue{\fontclass#2#1#3#4#5}%
+ {\noexpand\xxdododefinefont{\relativefontsize}{#2}%
+ {#2#1#3#4#5}{\resolvefontname#6 }}%
\else
- \unexpanded
- \setgvalue{\fontclass#2#1#3#4#5}{\xxdododefinefont
- {#2#1#3#4#5}{#6}}%
+ \scratchtoks{#6}%
+ \expanded{\unexpanded\noexpand\setgvalue{\fontclass#2#1#3#4#5}%
+ {\noexpand\xxdododefinefont{\relativefontsize}{#2}%
+ {#2#1#3#4#5}{\the\scratchtoks}}}%
\fi
\fi}
@@ -2103,8 +2186,8 @@
\def\docommando##1%
{\doifdefined{\??ft\s!default##1}
{\donetrue
- \scratchdimen=#1\relax
- \scratchdimen=\csname\??ft\s!default##1\endcsname\scratchdimen
+ \scratchdimen#1\relax
+ \scratchdimen\csname\??ft\s!default##1\endcsname\scratchdimen
\normalizebodyfontsize\scratchdimen\to\!!stringa
\letvalue{\??ft#1##1}\!!stringa}}%
\processcommalist
@@ -2135,7 +2218,7 @@
\fi
\fi
\ifdone
- \showmessage{\m!fonts}{14}{#1}%
+ \showmessage\m!fonts{14}{#1}%
\fi
\fi}
@@ -2237,22 +2320,38 @@
\chardef\fontdigits=1
+% \def\donormalizedbodyfontsize#1.#2#3#4\to#5%
+% {\edef#5%
+% {#1%
+% \ifcase\fontdigits\space
+% \or
+% \ifcase#2 \else.#2\fi % and not: \ifcase#2\else ...
+% \else
+% \ifcase#2#3 \else.#2\ifcase#3 \else#3\fi\fi % not: \ifcase#2#3\else ...
+% \fi
+% pt}}
+%
+% \def\normalizebodyfontsize#1\to#2%
+% {\scratchdimen#1\relax
+% \@EA\@EA\@EA\donormalizedbodyfontsize
+% \@EA\WITHOUTPT\the\scratchdimen00\to#2}
+
+\def\normalizebodyfontsize#1\to#2%
+ {\scratchdimen#1\relax
+ \ifcase\fontdigits\advance\scratchdimen.5\s!pt\fi
+ \@EA\@EA\@EA\donormalizedbodyfontsize
+ \@EA\WITHOUTPT\the\scratchdimen00\to#2}
+
\def\donormalizedbodyfontsize#1.#2#3#4\to#5%
{\edef#5%
{#1%
- \ifcase\fontdigits\space
- \or
+ \ifcase\fontdigits\or
\ifcase#2 \else.#2\fi % and not: \ifcase#2\else ...
\else
\ifcase#2#3 \else.#2\ifcase#3 \else#3\fi\fi % not: \ifcase#2#3\else ...
\fi
- pt}}
-
-\def\normalizebodyfontsize#1\to#2%
- {\scratchdimen=#1\relax
- \@EA\@EA\@EA\donormalizedbodyfontsize
- \@EA\WITHOUTPT\the\scratchdimen00\to#2}
-
+ \s!pt}}
+
\normalizebodyfontsize\bodyfontsize\to\normalizedglobalbodyfontsize
\normalizebodyfontsize\bodyfontsize\to\normalizedlocalbodyfontsize
\normalizebodyfontsize\bodyfontsize\to\normalizedbodyfontsize
@@ -2277,9 +2376,13 @@
%D etc. is also available in a macro in \type{rm}, \type{ss}
%D etc. form:
-\let\fontalternative = \c!tf
-\let\fontstyle = \empty
-\let\fontsize = \empty
+\let\defaultfontalternative = \c!tf
+\let\defaultfontstyle = \empty
+\let\defaultfontsize = \empty
+
+\let\fontalternative = \defaultfontalternative
+\let\fontstyle = \defaultfontstyle
+\let\fontsize = \defaultfontsize
%D All things related to fonts are grouped into files with
%D names like \type{font-cmr}. These files are loaded by:
@@ -2296,11 +2399,11 @@
\fi
\startreadingfile
\readsysfile{\truefilename{\f!fontprefix#2}}
- {\showmessage{\m!fonts}{2}{#2}}
+ {\showmessage\m!fonts2{#2}}
{\makeshortfilename[\truefilename{\f!fontprefix#2}]%
\readsysfile{\shortfilename}
- {\showmessage{\m!fonts}{2}{#2}}
- {\showmessage{\m!fonts}{3}{#2}}}%
+ {\showmessage\m!fonts2{#2}}
+ {\showmessage\m!fonts3{#2}}}%
\stopreadingfile}}
%D When \type {\loadfontfileoncetrue}, such files are
@@ -2315,15 +2418,15 @@
{\expanded{\dodoswitchpoints{#1}}}
\def\dodoswitchpoints#1%
- {\doifundefined{\@size@#1}
- {\defineunknownfont{#1}}%
+ {\doifundefined{\@size@#1}
+ {\defineunknownfont{#1}}%
%\defineunknownfontstyles{#1}%
\doifdefinedelse{\@size@#1}
{\getvalue{\@size@#1}%
\localbodyfontsize#1\relax
\normalizebodyfontsize\localbodyfontsize\to\normalizedbodyfontsize
\checkbodyfontenvironment[\normalizedbodyfontsize]}
- {\showmessage{\m!fonts}{4}{#1}}}
+ {\showmessage\m!fonts4{#1}}}
\unprotected \def\doswitchstyle[#1]%
{\doifdefinedelse{\@style@#1}
@@ -2331,7 +2434,7 @@
\edef\fontstyle{#1}%
\ifmmode\mr\fi % in order to be compatible with \rm in math mode
}% \the\everybodyfont} % cleaner, in setting size as well as style
- {\showmessage{\m!fonts}{5}{#1}}}
+ {\showmessage\m!fonts5{#1}}}
%D \TEX\ loads font metric files like \type{cmr10.tfm} and
%D \type{tir.tfm} only once. In \PLAIN\ \TEX\ some font files
@@ -2385,45 +2488,51 @@
%D macro relaxes itself and reset the signal.
\def\preloadfonts%
- {\showmessage{\m!fonts}{6}{\normalizedbodyfontsize\normalspace\fontstyle}%
+ {\showmessage\m!fonts6{\normalizedbodyfontsize\normalspace\fontstyle}%
\global\loadingfontsfalse
\doswitchpoints[\normalizedbodyfontsize]%
\doswitchstyle[\fontstyle]%
-\the\everybodyfont
- \global\let\preloadfonts=\relax}
+ \the\everybodyfont
+ \global\let\preloadfonts\relax}
%D Here comes the main font switching macros. These macros
%D handle changes in size as well as returning to the global
%D bodyfont size.
\def\dosetfont#1#2% #1 = set/switch state
- {\doifelse{#2}{\v!globaal}
+ {\doifelse{#2}\v!globaal
{\restoreglobalbodyfont}
{\processcommacommand[#2]{\dodosetfont{#1}}% ##1 get also passed
\ifloadingfonts\else
\doswitchpoints[\normalizedbodyfontsize]%
\doswitchstyle[\fontstyle]%
\fi}%
- \chardef\currentxfontsize0\relax}
+ \chardef\currentxfontsize\zerocount}
\def\dodosetfont#1#2% #1 = set/switch state
- {\dododosetfont{#1}{#2}{\showmessage{\m!fonts}{4}{#2}}}
+ {\dododosetfont{#1}{#2}{\showmessage\m!fonts4{#2}}}
\def\dododosetfont#1#2#3% #1 = set/switch state
{\doifnumberelse{#2}
- {\scratchdimen=#2\relax
- \normalizebodyfontsize\scratchdimen\to\normalizedsetfont
- \doifundefined{\@size@\normalizedsetfont}
- {\defineunknownfont{#2}}%
- \doifdefinedelse{\@size@\normalizedsetfont}
- {\localbodyfontsize\normalizedsetfont
- \let\normalizedbodyfontsize\normalizedsetfont}
- {#3\dosetsubstitutefont{#1}{#2}}}
- {\doifelse{#2}{\v!reset}
- {\let\fontsize\empty}
- {\doifdefinedelse{\@style@#2}
- {\edef\fontstyle{#2}}
- {\doreadfontdefinitionfile{#1}{#2}}}}}
+ {\dodododosetfont{#1}{#2}{#3}}
+ {\doifdefinedelse{\??ft\normalizedbodyfontsize\interfaced{#2}}
+ {\edef\fontstep{\bodyfontcsname\normalizedbodyfontsize\interfaced{#2}\endcsname}%
+ \expanded{\dodododosetfont{#1}{\fontstep}}{#3}}
+ {\doifelse{#2}\v!reset
+ {\let\fontsize\empty}
+ {\doifdefinedelse{\@style@#2}
+ {\edef\fontstyle{#2}}
+ {\doreadfontdefinitionfile{#1}{#2}}}}}}
+
+\def\dodododosetfont#1#2#3% #1 = set/switch state
+ {\scratchdimen#2\relax
+ \normalizebodyfontsize\scratchdimen\to\normalizedsetfont
+ \doifundefined{\@size@\normalizedsetfont}
+ {\defineunknownfont{#2}}%
+ \doifdefinedelse{\@size@\normalizedsetfont}
+ {\localbodyfontsize\normalizedsetfont
+ \let\normalizedbodyfontsize\normalizedsetfont}
+ {#3\dosetsubstitutefont{#1}{#2}}}
%D In the previous macros we use \type{\currentxfontsize} to
%D hold the current x||size of the font. This enables us to
@@ -2440,10 +2549,10 @@
%D smaller than half a point, we can use the next method.
\def\dosetsubstitutefont#1#2% #1 = set/switch state
- {\scratchdimen=#2\relax
- \advance\scratchdimen by .499pt
+ {\scratchdimen#2\relax
+ \advance\scratchdimen .499pt
\dimensiontocount\scratchdimen\scratchcounter
- \advance\scratchcounter by -1
+ \advance\scratchcounter -1
\ifnum\scratchcounter>3
\dododosetfont{#1}{\the\scratchcounter pt}{}%
\fi}
@@ -2457,14 +2566,15 @@
% \let\fontalternative\empty % tf bf sl it bs bi sc ...
% \let\fontsize \empty % xy-abcd ...
-\def\fontbody{\normalizedbodyfontsize}
+\def\defaultfontbody{\normalizedbodyfontsize}
+
+\let\fontbody\defaultfontbody
\let\fontclass\empty \let\globalfontclass\fontclass
\def\setcurrentfontclass#1%
{\edef\fontclass{#1}}
-\let\defaultfontbody \!!twelvepoint
\let\defaultfontstyle \c!rm
\let\defaultfontalternative \c!tf
\let\defaultfontsize \empty
@@ -2490,8 +2600,8 @@
\fi
\to \everymath
-\def\nobigmath{\chardef\synchronizebigmathflag =0 }
-\def\bigmath {\chardef\synchronizebigmathflag =2 \synchronizebigmath}
+\def\nobigmath{\chardef\synchronizebigmathflag 0 }
+\def\bigmath {\chardef\synchronizebigmathflag 2 \synchronizebigmath}
\let\bigmathfontsize\empty
@@ -2677,7 +2787,7 @@
\beginTEX
\def\dosetcurrentfontxxxalternative#1#2#3#4%
- {\chardef\currentxfontsize#2
+ {\chardef\currentxfontsize#2\relax
\ifmmode
#4%
\else\expandafter\ifx\csname\bodyfontvariable{\normalizedbodyfontsize#3}\endcsname\relax\else
@@ -2689,7 +2799,7 @@
\beginETEX \ifcsname
\def\dosetcurrentfontxxxalternative#1#2#3#4%
- {\chardef\currentxfontsize#2
+ {\chardef\currentxfontsize#2\relax
\ifmmode
#4%
\else\ifcsname\bodyfontvariable{\normalizedbodyfontsize#3}\endcsname
@@ -2756,29 +2866,29 @@
\def\dodefinefontstyle[#1][#2]%
{\rawdoifinsetelse{#2}{\stylelist}
- {}%\debuggerinfo{\m!fonts}{unknown style #2}}
+ {}%\debuggerinfo\m!fonts{unknown style #2}}
{\addtocommalist{#2}\stylelist
- \showmessage{\m!fonts}{8}{#2 (#1)}}%
+ \showmessage\m!fonts8{#2 (#1)}}%
% check kan hier
\def\docommando##1%
{\setvalue{\@shortstyle@##1}{#2}%
\setvalue{\@style@##1}{\csname#2\endcsname}}%
\processcommalist[#1]\docommando}
-\def\definefontstyle%
+\def\definefontstyle
{\dodoubleargument\dodefinefontstyle}
\def\setfontstyle#1#2% #1:name (roman, romaan) #2:style (rm)
{\edef\fontstyle{#1}%
- \setcurrentfontstyle{\normalizedbodyfontsize}}
+ \setcurrentfontstyle\normalizedbodyfontsize}
\chardef\defaultskewcharmi='177
\chardef\defaultskewcharsy='60
\def\dosetskewchar#1%
- %{\skewchar\font=\ifundefined{\purefontname\font\s!skewchar}%
+ %{\skewchar\font\ifundefined{\purefontname\font\s!skewchar}%
% #1\else\csname\purefontname\font\s!skewchar\endcsname\fi}
- {\skewchar\font=\ifx\@@fontskewchar\empty#1\else\@@fontskewchar\fi}
+ {\skewchar\font\ifx\@@fontskewchar\empty#1\else\@@fontskewchar\fi}
%D The previous macros show that it's is not always
%D neccessary to define the whole bunch of fonts, take for
@@ -2871,8 +2981,7 @@
\unexpanded\def\switchtobodyfont[#1]%
{\doifsomething{#1}
{\doifdefinedelse{\??ft\normalizedbodyfontsize\interfaced{#1}}
- {\doswitchpoints[\getvalue{\??ft\normalizedbodyfontsize\interfaced{#1}}]%
- \doswitchstyle[\fontstyle]}
+ {\setbodyfontstep{#1}} % so we have a fast [small] switch
{\dosetfont0{#1}}%
\the\everybodyfont}} % indeed needed in case nothing is executed
@@ -2882,10 +2991,10 @@
\beginTEX
\def\fastswitchtobodyfont#1%
- {\ifcsname\??ft\normalizedbodyfontsize#1\endcsname
+ {\@EA\ifx\csname\??ft\normalizedbodyfontsize#1\endcsname\else
\edef\futurebodyfontsize
{\csname\??ft\normalizedbodyfontsize#1\endcsname}%
- \ifcsname\@size@\futurebodyfontsize\endcsname
+ \@EA\ifx\csname\@size@\futurebodyfontsize\endcsname\else
\csname\@size@\futurebodyfontsize\endcsname
\localbodyfontsize\futurebodyfontsize\relax
\fi
@@ -2926,21 +3035,21 @@
\def\domffam#1%
{\csname\ifundefined{#1\s!fam}\c!nn\else#1\fi\s!fam\endcsname}
-\def\mffam%
+\def\mffam
{\domffam\fontalternative}
-\def\dosetmathfont%
+\def\dosetmathfont
{\def\rm{\fam\mrfam}\dodosetmathfont}
%D The font specific features are bound to the filename.
-\def\updatefontparameters%
+\def\updatefontparameters
{\edef\@@fontencoding{\truefontdata\fontfile \s!encoding}%
\edef\@@fontmapping {\truefontdata\fontfile \s!mapping }%
\edef\@@fonthandling{\truefontdata\somefontname\s!handling}%
\edef\@@fontskewchar{\truefontdata\fontfile \s!skewchar}}
-\def\setfontcharacteristics%
+\def\setfontcharacteristics
{\updatefontparameters
\fastenableencoding
{\ifx\@@fontencoding\empty
@@ -3006,26 +3115,35 @@
%D {frak, goth, cal}
%D
%D On behalf of {\frac Tobias Burnus}, we define some more of
-%D these:
+%D these. Later we will link these names to real file names.
-\definefont [frak] [Fraktur sa *] % \currentfontscale]
-\definefont [goth] [Gothic sa *] % \currentfontscale]
-\definefont [cal] [Calligraphic sa *] % \currentfontscale]
+\definefont [frak] [Fraktur sa *]
+\definefont [goth] [Gothic sa *]
+\definefont [cal] [Calligraphic sa *]
+\definefont [bbd] [Blackboard sa *]
\definefontsynonym [Fraktur] [Serif]
\definefontsynonym [Gothic] [Serif]
\definefontsynonym [Calligraphic] [Serif]
+\definefontsynonym [Blackboard] [Serif]
%D \macros
-%D {fraktur, gothic, calligraphic}
+%D {fraktur, gothic, calligraphic, blackboard}
%D
-%D For Tobias and friends:
+%D These macros assume that we use text fonts, and not math
+%D families.
+
+% \def\fraktur #1{\mathematics{\frak#1}}
+% \def\gothic #1{\mathematics{\goth#1}}
+% \def\calligraphic#1{\mathematics{\cal #1}}
+% \def\blackboard #1{\mathematics{\bbd #1}}
-\def\fraktur #1{\ifmmode\hbox\fi{\frak#1}}
-\def\gothic #1{\ifmmode\hbox\fi{\goth#1}}
-\def\calligraphic#1{\ifmmode\hbox\fi{\cal #1}}
+\ifx\mathtext\undefined \let\mathtext\hbox \fi
-%D In \type {font-cmr} we will link these to real file names.
+\def\fraktur #1{\mathortext\mathtext\donothing{\frak#1}}
+\def\gothic #1{\mathortext\mathtext\donothing{\goth#1}}
+\def\caligraphic#1{\mathortext\mathtext\donothing{\cal #1}}
+\def\blackboard #1{\mathortext\mathtext\donothing{\bbd #1}}
%D \macros
%D {definebodyfontswitch}
@@ -3058,16 +3176,15 @@
%D The three alternatives can be activated by the next three
%D system calls and are defined by the bodyfontenvironment.
-\let\fontstep\empty
+\let\fontstep\empty % we can use \fontstep for tracing purposes
\def\setbodyfontstep#1%
- {\edef\fontstep{\bodyfontcsname\normalizedbodyfontsize\interfaced#1\endcsname}%
+ {\edef\fontstep{\bodyfontcsname\normalizedbodyfontsize\interfaced{#1}\endcsname}%
\doswitchpoints[\fontstep]%
- \doswitchstyle[\fontstyle]%
- \the\everybodyfont}
+ \doswitchstyle[\fontstyle]}
-\unexpanded\def\setsmallbodyfont{\setbodyfontstep\v!klein}
-\unexpanded\def\setbigbodyfont {\setbodyfontstep\v!groot}
+\unexpanded\def\setsmallbodyfont{\setbodyfontstep\v!klein\the\everybodyfont}
+\unexpanded\def\setbigbodyfont {\setbodyfontstep\v!groot\the\everybodyfont}
\unexpanded\def\setmainbodyfont%
{\doswitchpoints[\normalizedbodyfontsize]%
@@ -3085,7 +3202,9 @@
\let\mainfontclass\empty
\def\fullrestoreglobalbodyfont
- {\let\fontsize\empty
+ {\let\fontsize\defaultfontsize
+ \let\fontbody\defaultfontbody
+ \chardef\currentxfontsize\zerocount
\let\fontclass\globalfontclass
\doswitchpoints[\normalizedglobalbodyfontsize]%
\doswitchstyle[\globalfontstyle]%
@@ -3093,7 +3212,9 @@
\tf \the\everybodyfont}
\def\partialrestoreglobalbodyfont
- {\let\fontsize\empty
+ {\let\fontsize\defaultfontsize
+ \let\fontbody\defaultfontbody
+ \chardef\currentxfontsize\zerocount
\redoconvertfont
\tf}
@@ -3255,10 +3376,10 @@
%D Extras:
-\unexpanded\def\dontconvertfont%
+\unexpanded\def\dontconvertfont
{\let\doconvertfont\noconvertfont}
-\unexpanded\def\redoconvertfont%
+\unexpanded\def\redoconvertfont
{\let\doconvertfont\dodoconvertfont}
%D These commands are not grouped! Grouping is most probably
@@ -3302,7 +3423,7 @@
\newconditional\emneeded
-\unexpanded\def\em%
+\unexpanded\def\em
{\relax
\ifdim\fontdimen1\font>\zeropoint
\settrue\emneeded
@@ -3332,10 +3453,10 @@
%D The next feature was not present in previous versions. It
%D takes care of \type {\em \bf ...} sitiations.
-\def\setemphasisboldface%
+\def\setemphasisboldface
{\let\normalbf\bf
\let\setemphasisboldface\relax
- \unexpanded\def\bf%
+ \unexpanded\def\bf
{%\relax
\let\bf\relax % new
\ifx\fontalternative\c!it % \ifnum\fam=\itfam
@@ -3352,36 +3473,36 @@
%D look for something that looks like a dash, in which case we
%D don't correct.
-\def\emphasiscorrection%
+\def\emphasiscorrection
{\ifhmode
\expandafter\emphasislook
\fi}
-\def\emphasislook%
+\def\emphasislook
{\begingroup
\beginrobusttest
\futurelet\next\emphasistest}
-\def\emphasistest%
+\def\emphasistest
{\normalifcat\noexpand\next,%
\endrobusttest\expandafter\doemphasiscorrection
\normalelse
\endrobusttest\expandafter\dododoemphasiscorrection
\normalfi}
-\def\doemphasiscorrection%
+\def\doemphasiscorrection
{\futurelet\next\dodoemphasiscorrection}
-\def\dodoemphasiscorrection%
- {\setbox\scratchbox=\hbox{\next}%
+\def\dodoemphasiscorrection
+ {\setbox\scratchbox\hbox{\next}%
\ifdim\ht\scratchbox<.3ex
\expandafter\endgroup
\else
\expandafter\dododoemphasiscorrection
\fi}
-\def\dododoemphasiscorrection%
- {\scratchskip=\lastskip
+\def\dododoemphasiscorrection
+ {\scratchskip\lastskip
\ifdim\scratchskip=\zeropoint\relax
\/\relax
\else
@@ -3481,7 +3602,20 @@
%D The implementation is rather straightforward in using
%D \type{\halign}.
-\fetchruntimecommand \showbodyfont {\f!fontprefix\s!run}
+\fetchruntimecommand \showbodyfont {\f!fontprefix\s!run}
+
+%D \macros
+%D {showfontstrip, testminimalbaseline, showminimalbaseline}
+%D
+%D The next command can come in handy when combining
+%D different fonts into a collection (typeface) and
+%D determining optimal baseline distances.
+%D
+%D \showfontstrip \blank \showminimalbaseline
+
+\fetchruntimecommand \showfontstrip {\f!fontprefix\s!run}
+\fetchruntimecommand \testminimalbaseline {\f!fontprefix\s!run}
+\fetchruntimecommand \showminimalbaseline {\f!fontprefix\s!run}
%D \macros
%D {showbodyfontenvironment}
@@ -3607,12 +3741,12 @@
\currentfontbodyscale\scaledfont
\definedfont}
-\def\getglyph#1#2% slow, faster, much faster
+\unexpanded\def\getglyph#1#2% slow, faster, much faster
%{{\definefont[\s!dummy][\glyphfontfile{#1} sa \currentfontscale]\dummy#2}}
%{{\definefont[\s!dummy][\glyphfontfile{#1} sa *]\dummy#2}}
{{\symbolicfont{#1}#2}}
-\def\getrawglyph#1#2% for simple symbols
+\unexpanded\def\getrawglyph#1#2% for simple symbols
{{\scaledfont\fontbody
\font\definedfont=#1 at \currentfontbodyscale\scaledfont
\definedfont#2}}
@@ -3660,8 +3794,8 @@
\def\bordermatrix%
{\bgroup
- \setbox0=\hbox{\getvalue{\textface\c!mm\c!ex}B}%
- \global\p@renwd=\wd0\relax
+ \setbox0\hbox{\getvalue{\textface\c!mm\c!ex}B}%
+ \global\p@renwd\wd0\relax
\egroup
\normalbordermatrix}
@@ -3722,8 +3856,8 @@
{\dontleavehmode
\bgroup
\setbox\scratchbox\hbox{#1}%
- \ifdim\ht\scratchbox>\strutheight \ht\scratchbox\strutheight \fi
- \ifdim\dp\scratchbox>\strutdepth \dp\scratchbox\strutdepth \fi
+ \ifdim\ht\scratchbox>\strutheight\relax\ht\scratchbox\strutheight\fi
+ \ifdim\dp\scratchbox>\strutdepth \relax\dp\scratchbox\strutdepth \fi
\box\scratchbox
\egroup}
@@ -3760,8 +3894,8 @@
\def\moveaccent#1#2%
{\smashaccent
- {\dimen0=\fontdimen5\font
- \dimen2=\dimen0
+ {\dimen0\fontdimen5\font
+ \dimen2\dimen0
\advance\dimen2 -#1%
\fontdimen5\font\dimen2
#2\relax
diff --git a/tex/context/base/font-run.tex b/tex/context/base/font-run.tex
index 0770b5d98..dd13fea2b 100644
--- a/tex/context/base/font-run.tex
+++ b/tex/context/base/font-run.tex
@@ -66,7 +66,7 @@
\noalign{\hrule}}}
\ifinsidefloat\else\stopbaselinecorrection\fi}
-\gdef\showbodyfontenvironment%
+\gdef\showbodyfontenvironment
{\dosingleempty\doshowbodyfontenvironment}
\gdef\doshowbodyfontenvironment[#1]%
@@ -235,4 +235,66 @@
\stoptabulate
\egroup}
+\gdef\showfontstrip
+ {\dosingleempty\doshowfontstrip}
+
+\gdef\doshowfontstrip[#1]%
+ {\bgroup
+ \def\dofontstripa##1##2%
+ {\tttf\string##1}
+ \def\dofontstripb##1##2%
+ {\ruledhbox{\switchtobodyfont[#1]##1{##2}}}
+ \def\dofontstripc##1##2%
+ {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
+ \tt\tfx\the\ht\scratchbox}%
+ \def\dofontstripd##1##2%
+ {\setbox\scratchbox\hbox{\switchtobodyfont[#1]##1{##2}}%
+ \tt\tfx\the\wd\scratchbox}%
+ \def\fontstrip##1##2##3%
+ {\NC##2\rm{##3}\NC
+ ##2\ss{##3}\NC
+ ##2\tt{##3}\NC
+ ##2\mathematics{##3}\NC
+ \tttf##1\NR}
+ \starttabulate[|c|c|c|c|c|]
+ \fontstrip\relax\dofontstripa\empty
+ \TB
+ \fontstrip\relax\dofontstripb{xxxx}
+ \fontstrip\relax\dofontstripb{12345}
+ \fontstrip\relax\dofontstripb{(Agw)}
+ \TB
+ \fontstrip{(x height)}\dofontstripc{x}
+ \fontstrip{(m width)}\dofontstripd{m}
+ \stoptabulate
+ \egroup}
+
+\ifx\databox\undefined \newbox\databox \fi
+
+\gdef\testminimalbaseline#1%
+ {\setbox\databox\ruledhbox{#1}%
+ \scratchdimen\ht\databox
+ \advance\scratchdimen\dp\databox
+ \scratchtoks{#1}%
+ \expanded
+ {\NC \ruledhbox{\the\scratchtoks}
+ \noexpand \NC ->
+ \noexpand \NC \the\scratchdimen
+ \noexpand \NC =
+ \noexpand \NC \the\ht\databox
+ \noexpand \NC +
+ \noexpand \NC \the\dp\databox
+ \noexpand \NC \ifdim\scratchdimen<\baselineskip <
+ \else\ifdim\scratchdimen=\baselineskip =
+ \else > \fi\fi
+ \noexpand \NC \the\baselineskip
+ \noexpand \NC (\ifdim\scratchdimen>\baselineskip not \fi ok)
+ \noexpand \NC \noexpand \NR }}
+
+\gdef\showminimalbaseline
+ {\starttabulate[||T|T|T|T|T|T|T|T|T|]
+ \testminimalbaseline{\hbox to 1em{\hss\showstruts\strut\hss}}%
+ \testminimalbaseline{(/)}%
+ \testminimalbaseline{$\frac{1}{2}x^2_3$}
+ \stoptabulate}
+
\protect \endinput
diff --git a/tex/context/base/font-uni.tex b/tex/context/base/font-uni.tex
index 633383544..a114c0882 100644
--- a/tex/context/base/font-uni.tex
+++ b/tex/context/base/font-uni.tex
@@ -92,7 +92,7 @@
%D finally does some finishing:
%D
%D \starttyping
-%D \def\handleunicodeglyph%
+%D \def\handleunicodeglyph
%D {take actions based on \unicodeone-two-position cq. \nextglyph
%D redefine \unicodecharcommand if needed
%D expand \insertunicodeglyph
@@ -137,18 +137,36 @@
%D token, since this token can have any value and any
%D catcode.
-\def\handleunicodeflowglyph#1%
+%\def\handleunicodeflowglyph#1%
+% {\bgroup
+% \edef\unicodeone{#1}%
+% \@EA\afterassignment\@EA\dohandleunicodeflowglyph
+% \@EA\chardef\@EA\nexttoken\@EA`\string}
+%
+%\def\dohandleunicodeflowglyph
+% {\futurelet\nextglyph\dodohandleunicodeflowglyph}
+%
+%\def\dodohandleunicodeflowglyph%
+% {\edef\unicodetwo{\the\nexttoken}%
+% \unicodeposition\unicodeone\unicodetwo\relax
+% \handleunicodeglyph
+% \egroup}
+
+% the \relax trick prevents eating up the space (needed for
+% korean
+
+\def\handleunicodeflowglyph#1#2%
{\bgroup
\edef\unicodeone{#1}%
\@EA\afterassignment\@EA\dohandleunicodeflowglyph
- \@EA\chardef\@EA\nexttoken\@EA=\@EA`\string}
+ \@EA\chardef\@EA\nexttoken\@EA`\string#2\relax}
-\def\dohandleunicodeflowglyph%
+\def\dohandleunicodeflowglyph\relax
{\futurelet\nextglyph\dodohandleunicodeflowglyph}
-\def\dodohandleunicodeflowglyph%
- {\edef\unicodetwo{\the\nexttoken}%
- \unicodeposition=\unicodeone\unicodetwo\relax
+\def\dodohandleunicodeflowglyph
+ {\edef\unicodetwo{\the\nexttoken}%
+ \unicodeposition\unicodeone\unicodetwo\relax
\handleunicodeglyph
\egroup}
@@ -157,12 +175,14 @@
\let\nextglyph\relax
\edef\unicodeone{#1}%
\edef\unicodetwo{#2}%
- \unicodeposition=\unicodeone\unicodetwo\relax
+% \unicodeposition=\unicodeone\unicodetwo\relax
+ \unicodeposition\unicodeone\unicodetwo\relax
\handleunicodeglyph
\egroup}
-\def\dohandleucflowglyph%
- {\unicodeposition=\unicodeone\unicodetwo\relax
+\def\dohandleucflowglyph
+% {\unicodeposition=\unicodeone\unicodetwo\relax
+ {\unicodeposition\unicodeone\unicodetwo\relax
\handleunicodeglyph
\egroup}
@@ -214,7 +234,7 @@
% else
% { return "$a$b" } }
-\def\insertunicodeglyph%
+\def\insertunicodeglyph
{\unicodeglyph\unicodeone\unicodetwo}
\let\handleunicodeglyph=\insertunicodeglyph
@@ -265,7 +285,7 @@
%D The command \type {\unicodecharcommand} can be used to
%D handle special cases. At that moment \type {1em} is known.
-\def\unicodestyle%
+\def\unicodestyle
{\truefontname\s!Unicode\fontstylesuffix}
\let\unicodecharcommand\firstofoneargument
@@ -281,7 +301,7 @@
\unexpanded\def\unicodeglyph#1#2% watch the double mapping
{\bgroup
\getvalue{@@\currentucharmapping\strippedcsname\uchar}{#1}{#2}%
- \bodyfontsize=\unicodescale\bodyfontsize
+ \bodyfontsize\unicodescale\bodyfontsize
\font\unicodefont=\truefontname{\truefontname\unicodestyle\unicodeone}
at \currentfontscale\bodyfontsize
\unicodestrut\unicodefont\unicodecharcommand{\char\unicodetwo\relax}%
@@ -318,7 +338,7 @@
%D This maps the GBK vector onto a compact GBK one. The
%D auxiliary macro is defined here as a goody.
-\def\dorepositionunicode%
+\def\dorepositionunicode
{\DoDiv\unicodeposition by256to\scratchcounter
\advance\scratchcounter 1
\edef\unicodeone{\ifnum\scratchcounter<10 0\fi\the\scratchcounter}%
@@ -350,17 +370,17 @@
{\def\unicodescale{#1}}
\def\dosetunicodestrut#1#2% height depth
- {\def\unicodestrut%
+ {\def\unicodestrut
{\vrule
- \!!width\!!zeropoint
+ \!!width\zeropoint
\!!height#1\ht\strutbox
\!!depth#2\dp\strutbox
\relax}}
\def\setunicodestrut#1#2% height depth
- {\ifdim#1\ht\strutbox>\!!zeropoint
+ {\ifdim#1\ht\strutbox>\zeropoint
\dosetunicodestrut{#1}{#2}%
- \else\ifdim#1\dp\strutbox>\!!zeropoint
+ \else\ifdim#1\dp\strutbox>\zeropoint
\dosetunicodestrut{#1}{#2}%
\else
\let\unicodestrut\empty
@@ -413,8 +433,8 @@
\beginTEX
- \def\unicodeTEXwarning%
- {\writeline\showmessage{\m!fonts}{21}{}\writeline
+ \def\unicodeTEXwarning
+ {\writeline\showmessage\m!fonts{21}\empty\writeline
\global\let\unicodeTEXwarning\relax}
\endTEX
@@ -426,17 +446,19 @@
\endETEX
-\def\defineunicodefont%
+\def\defineunicodefont
{\dotripleempty\dodefineunicodefont}
\def\dodefineunicodefont[#1][#2][#3]%
{\unicodeTEXwarning
- \doifinstringelse{=}{#3}
+ \doifassignmentelse{#3}
{\setupunicodefont[#1][#3]}
- {\copyparameters
- [\??uc#1][\??uc#3]
- [\c!hoogte,\c!diepte,\c!schaal,\c!commandos,
- \c!interlinie,\c!commando,\c!conversie]}%
+ {\doifelsenothing{#3}
+ {\setupunicodefont[#1][#3]}
+ {\copyparameters
+ [\??uc#1][\??uc#3]
+ [\c!hoogte,\c!diepte,\c!schaal,\c!commandos,
+ \c!interlinie,\c!commando,\c!conversie]}}%
\doifelsenothing{#2}
{\setvalue{#1}{[uc font #1 undefined]}}
{\setvalue{\??uc#1\c!file}{#2}%
@@ -448,10 +470,10 @@
\definefontsynonym[#2\s!BoldItalic] [#2\s!Italic]}%
\unexpanded\setvalue{#1}{\enableunicodefont{#1}}}}
-\def\setupunicodefont%
+\def\setupunicodefont
{\dodoubleempty\dosetupunicodefont}
-\def\dosetupunicodefont[#1][#2]%
+\def\dosetupunicodefont[#1][#2]% also predefines
{\doifundefined{\??uc#1\c!commando}
{\copyparameters
[\??uc#1][\??uc\s!default]
@@ -467,8 +489,7 @@
\def\unicodedigits {\getvalue{\??uc#1\c!conversie}}%
\def\handleunicodeglyph {\getvalue{\??uc#1\c!commando}}%
\enableregime[unicode]%
- \doifvalue{\??uc#1\c!interlinie}{\v!ja}
- {\stelinterliniein\relax}%
+ \doifvalue{\??uc#1\c!interlinie}\v!ja{\stelinterliniein\relax}%
\getvalue{\??uc#1\c!commandos}\relax}
%D \macros
diff --git a/tex/context/base/font-unk.tex b/tex/context/base/font-unk.tex
index 2f2cf1695..993fd5c92 100644
--- a/tex/context/base/font-unk.tex
+++ b/tex/context/base/font-unk.tex
@@ -140,8 +140,7 @@
mc=MathGamma mo 1,
md=MathDelta mo 1]
-\definebodyfont
- [boldmath] [mm]
+\definebodyfont [bfmath] [mm]
[mrbf=MathRomanBold mo 1,
exbf=MathExtensionBold mo 1,
mibf=MathItalicBold mo 1,
diff --git a/tex/context/base/java-fld.tex b/tex/context/base/java-fld.tex
index 4074cb2b5..37175f84e 100644
--- a/tex/context/base/java-fld.tex
+++ b/tex/context/base/java-fld.tex
@@ -144,7 +144,7 @@ function Hide_Field ( Name )
v.readonly = true ;
this.dirty = false } }
-function Do_Vide_Field ( Name,Closable )
+function Do_Vide_Field ( Name, Closable )
{ var v = this.getField(Name) ;
if (v)
{ ++visible_fields ;
diff --git a/tex/context/base/java-ini.tex b/tex/context/base/java-ini.tex
index 666a1c89e..85f4a8876 100644
--- a/tex/context/base/java-ini.tex
+++ b/tex/context/base/java-ini.tex
@@ -200,16 +200,15 @@
%D \stopJScode
%D \stoptypen
-\long\gdef\startJScode#1 #2
+\long\def\startJScode#1 #2
{\doifelse{#2}{uses}
- {\def\next{\dostartJScodeA{#1}}}
- {\def\next{\dostartJScodeB{#1} #2 }}%
- \next}
+ {\dostartJScodeA{#1}}
+ {\dostartJScodeB{#1} #2 }}
-\long\gdef\dostartJScodeA#1#2 #3\stopJScode%
+\long\def\dostartJScodeA#1#2 #3\stopJScode
{\long\setgvalue{\r!java#1}{\do{#2}{#3}}}
-\long\gdef\dostartJScodeB#1#2\stopJScode%
+\long\def\dostartJScodeB#1#2\stopJScode
{\long\setgvalue{\r!java#1}{\do{}{#2}}}
\let\stopJScode\relax
@@ -232,7 +231,7 @@
\def\setverbosecscharacter#1%
{\edef#1{\string#1}}
-\def\setverbosecscharacters% temporary hack
+\def\setverbosecscharacters % temporary hack
{\setverbosecscharacter |\setverbosecscharacter ~%
\setverbosecscharacter\:\setverbosecscharacter\;%
\setverbosecscharacter\+\setverbosecscharacter\-%
@@ -251,10 +250,10 @@
\def\presetJScode#1#2% #1=operation #2=arguments
{\setverbosecscharacters
\def\par{\delcharacter}% was: { }
- \scratchcounter=0
- \global\let\JScode=\empty
+ \scratchcounter\zerocount
+ \globallet\JScode\empty
\def\do##1##2%
- {\doifelse{##2}{!}{\directJScodetrue}{\directJScodefalse}}%
+ {\doifelse{##2}{!}\directJScodetrue\directJScodefalse}%
\getvalue{\r!java#1}%
\edef\!!stringa{#2}%
\ifx\!!stringa\empty \else
@@ -262,7 +261,7 @@
\fi
\def\docommando##1%
{\doifundefinedelse{\r!java\r!java##1}
- {\showmessage{\m!javascript}{2}{##1}}
+ {\showmessage\m!javascript2{##1}}
{\useJSpreamblenow{##1}}}%
% {\doglobal\increment\currentJSpreamble
% \doglobal\addtocommalist{##1}\allJSpreambles}}%
@@ -273,20 +272,17 @@
\getvalue{\r!java#1}}
\def\dopresetJSvariables#1%
- {\advance\scratchcounter 1
+ {\advance\scratchcounter \plusone
\donefalse
\dodopresetJSvariables#1\end}%
-\def\dodopresetJSvariables%
- {\doifnextcharelse{R}
- {\dodopresetJSrefvariables}
- {\doifnextcharelse{V}
- {\dodopresetJSvervariables}
- {\doifnextcharelse{S}
- {\dodopresetJSstrvariables}
- {\dodopresetJSrawvariables}}}}
+\def\dodopresetJSvariables
+ {\doifnextcharelse{R}\dodopresetJSrefvariables
+ {\doifnextcharelse{V}\dodopresetJSvervariables
+ {\doifnextcharelse{S}\dodopresetJSstrvariables
+ \dodopresetJSrawvariables}}}
-\def\dodopresetJSrefvariables R#1\end%
+\def\dodopresetJSrefvariables R#1\end
{\doifreferencefoundelse{#1}
{\donetrue \dododopresetJSvariables R{\referenceprefix#1}%
\donefalse\dododopresetJSvariables P{\currentrealreference}}
@@ -295,16 +291,16 @@
\donetrue\dododopresetJSvariables S{#1}%
\fi}
-\def\dodopresetJSvervariables V#1\end%
+\def\dodopresetJSvervariables V#1\end
{\donefalse\dododopresetJSvariables V{#1}%
\ifminimalizeJScode \else
\donetrue\dododopresetJSvariables S{#1}%
\fi}
-\def\dodopresetJSstrvariables S#1\end%
+\def\dodopresetJSstrvariables S#1\end
{\donetrue\dododopresetJSvariables S{#1}}
-\def\dodopresetJSrawvariables #1\end%
+\def\dodopresetJSrawvariables #1\end
{\donetrue\dododopresetJSvariables S{#1}}
\def\JSprefix#1%
@@ -363,17 +359,16 @@
{\bgroup % we need to restore the catcodes
\popendofline % just in case it happens while reading lists
\doifelse{#2}{used}
- {\def\next{\dostartJSpreamble#1 }}
- {\def\next{\dostartJSpreamble#1 now #2 }}%
- \next}
+ {\dostartJSpreamble#1 }
+ {\dostartJSpreamble#1 now #2 }}
\long\def\dostartJSpreamble#1 #2 #3\stopJSpreamble%
{\processaction
[#2]
- [ later=>\chardef\JSstatus=0,
- now=>\chardef\JSstatus=1,
- \s!default=>\chardef\JSstatus=2,
- \s!unknown=>\chardef\JSstatus=2]%
+ [ later=>\chardef\JSstatus0,%
+ now=>\chardef\JSstatus1,%
+ \s!default=>\chardef\JSstatus2,%
+ \s!unknown=>\chardef\JSstatus2]%
\presetJSfunctions #3function ()\end
\long\setgvalue{\r!java\r!java#1}{#3}%
\ifcase\JSstatus \else
@@ -425,12 +420,12 @@
\def\getJSpreamble#1%
{\getvalue{\r!java\r!java#1}}
-\def\presetJSpreamble%
+\def\presetJSpreamble
{\ifx\allJSpreambles\empty\else
\bgroup
\setverbosecscharacters
\def\par{\delcharacter}% was: { }
- \global\let\JSpreamble=\empty
+ \globallet\JSpreamble\empty
\def\@@collectedJSpreamble{\r!java\r!java collected}%
\letvalue{\@@collectedJSpreamble}=\empty
\def\docommando##1%
@@ -446,18 +441,18 @@
\ifoneJSpreamble
\gdef\allJSpreambles{collected}%
\fi
- \global\let\presetJSpreamble\relax
+ \globallet\presetJSpreamble\relax
\egroup
\fi}
-\def\flushJSpreamble%
+\def\flushJSpreamble
{\iflocation\ifx\allJSpreambles\empty\else
\ifcase\nofJSpreambles\else\ifnum\nofJSpreambles=\currentJSpreamble
\bgroup
\presetJSpreamble
\expanded{\doflushJSpreamble{\allJSpreambles}}%
- \global\let\flushJSpreamble\relax
- \global\let\allJSpreambles\empty
+ \globallet\flushJSpreamble\relax
+ \globallet\allJSpreambles\empty
\egroup
\fi\fi
\fi\fi}
@@ -467,7 +462,7 @@
\flushJSpreamble
\ifcase\currentJSpreamble\relax\else
\savecurrentvalue\nofJSpreambles\currentJSpreamble
- \global\let\currentJSpreamble\nofJSpreambles
+ \globallet\currentJSpreamble\nofJSpreambles
\fi
\fi}
@@ -484,7 +479,7 @@
\def\doPSsanitizeJScode#1\to#2%
{\begingroup
- \scratchcounter=0 % \aftergroup counter
+ \scratchcounter\zerocount % \aftergroup counter
\aftergroup\xdef
\aftergroup#2%
\aftergroup{%
@@ -526,15 +521,15 @@
\newif\ifaddJSlinebreaks
-\def\flushJSisTEX%
+\def\flushJSisTEX
{\ifcase\JSisTEX
\or \aftergroup T%
\or \aftergroup T\aftergroup E%
\or \aftergroup T\aftergroup E\aftergroup X%
\fi
- \chardef\JSisTEX=0 }
+ \chardef\JSisTEX0 }
-\def\doJSlinebreak%
+\def\doJSlinebreak
{\ifaddJSlinebreaks
\aftergroup\string\aftergroup\n%
\fi}
@@ -542,18 +537,18 @@
\def\dodoPSsanitizeJScode#1% % input stack>500 & TEX check
{\if#1/%
\ifnum\JScomment=0
- \chardef\JScomment=1
+ \chardef\JScomment1
\else\ifnum\JScomment=1
- \chardef\JScomment=2
+ \chardef\JScomment2
\fi\fi
\else
\ifnum\JScomment=1
\aftergroup/%
- \chardef\JScomment=0
+ \chardef\JScomment0
\fi
\ifnum\JScomment=2
\if#1\delcharacter
- \chardef\JScomment=0
+ \chardef\JScomment0
\fi
\else
\if#1\delcharacter
@@ -565,13 +560,13 @@
\else\if#1;%
\flushJSisTEX\aftergroup;\doJSlinebreak
\else\if#1T%
- \ifnum\JSisTEX=0 \chardef\JSisTEX=1 \else\flushJSisTEX\aftergroup T\fi
+ \ifnum\JSisTEX=0 \chardef\JSisTEX1 \else\flushJSisTEX\aftergroup T\fi
\else\if#1E%
- \ifnum\JSisTEX=1 \chardef\JSisTEX=2 \else\flushJSisTEX\aftergroup E\fi
+ \ifnum\JSisTEX=1 \chardef\JSisTEX2 \else\flushJSisTEX\aftergroup E\fi
\else\if#1X%
- \ifnum\JSisTEX=2 \chardef\JSisTEX=3 \else\flushJSisTEX\aftergroup X\fi
+ \ifnum\JSisTEX=2 \chardef\JSisTEX3 \else\flushJSisTEX\aftergroup X\fi
\else\if#1\normalspace
- \ifnum\JSisTEX=3 \chardef\JSisTEX=0 \else\flushJSisTEX\aftergroup#1\fi
+ \ifnum\JSisTEX=3 \chardef\JSisTEX0 \else\flushJSisTEX\aftergroup#1\fi
\else
\flushJSisTEX\aftergroup\string\expandafter\aftergroup#1%
\fi\fi\fi\fi\fi\fi\fi\fi
@@ -589,15 +584,15 @@
%\beginTEX
-\def\dododoPSsanitizeJScode%
+\def\dododoPSsanitizeJScode
{\ifcase\JSisTEX\ifcase\JScomment
- \advance\scratchcounter by 1
+ \advance\scratchcounter \plusone
\fi\fi
\ifnum\scratchcounter=500
\expandafter\dodododoPSsanitizeJScode
\fi}
-\def\dodododoPSsanitizeJScode%
+\def\dodododoPSsanitizeJScode
{\let\next={%
\aftergroup}%
\endgroup
@@ -631,19 +626,19 @@
\definespeciallocation{JS}#1#2%
{\iflocation
\bgroup
-\bgroup
- \presetJScode
- \currentreferenceoperation
- \currentreferencearguments
-\egroup
- \dostartgoto
- \data
- {#2}%
- \start
- \dostartgotoJS\buttonwidth\buttonheight\JScode
- \stop
- \dostopgotoJS
- \dostopgoto
+ \bgroup
+ \presetJScode
+ \currentreferenceoperation
+ \currentreferencearguments
+ \egroup
+ \dostartgoto
+ \data
+ {#2}%
+ \start
+ \dostartgotoJS\buttonwidth\buttonheight\JScode
+ \stop
+ \dostopgotoJS
+ \dostopgoto
\egroup
\else
{#2}%
@@ -665,26 +660,23 @@
%D The not so complicated implementation of this macro is:
\def\dodouseJSscripts#1%
- {\doifelse{#1}{\v!reset}
- {\let\allJSpreambles=\empty}
+ {\doifelse{#1}\v!reset
+ {\let\allJSpreambles\empty}
{\doifundefined{\c!file\f!javascriptprefix#1}
- {\bgroup
- \setbox0=\hbox % forget spaces and worse
- {\setgvalue{\c!file\f!javascriptprefix#1}{}%
- \makeshortfilename[\f!javascriptprefix#1]%
- \showmessage{\m!javascript}{1}{#1}%
- \startreadingfile
- \readsysfile{\shortfilename}{}{}%
- \stopreadingfile}%
- \egroup}}}
+ {\startnointerference
+ \letgvalueempty{\c!file\f!javascriptprefix#1}%
+ \makeshortfilename[\f!javascriptprefix#1]%
+ \showmessage\m!javascript1{#1}%
+ \startreadingfile
+ \readsysfile\shortfilename\donothing\donothing
+ \stopreadingfile
+ \stopnointerference}}}
\def\douseJSscripts[#1][#2]%
{\processcommalist[#1]\dodouseJSscripts
\processcommalist[#2]\useJSpreamblenow}
-\def\useJSscripts%
+\def\useJSscripts
{\dodoubleempty\douseJSscripts}
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/lang-chi.tex b/tex/context/base/lang-chi.tex
index 9367e2fd4..51a018e9b 100644
--- a/tex/context/base/lang-chi.tex
+++ b/tex/context/base/lang-chi.tex
@@ -1,11 +1,10 @@
%D \module
%D [ file=lang-chi,
-%D version=1998.10.10,
+%D version=2002.06.25, % 1998.10.10,
%D title=\CONTEXT\ Language Macros,
%D subtitle=Chinese,
-%D author=Hans Hagen,
+%D author={Hans Hagen \& Wang Lei},
%D date=\currentdate,
-%D suggestions=Wang Lei,
%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
@@ -22,20 +21,31 @@
\definesystemconstant {chinese} \definesystemconstant {cn}
-\installlanguage[\s!cn][\c!status=\v!start]
-
-\setupheadtext [\s!cn] [\v!inhoud={\cnencodecontents}]
-\setupheadtext [\s!cn] [\v!tabellen={\cnencodetables}]
-\setupheadtext [\s!cn] [\v!figuren={\cnencodefigures}]
+\installlanguage
+ [\s!cn]
+ [\c!leftsentence=\cnencoding\cnleftsentence,
+ \c!rightsentence=\cnencoding\cnrightsentence,
+ \c!leftsubsentence=\cnencoding\cnleftsubsentence,
+ \c!rightsubsentence=\cnencoding\cnrightsubsentence,
+ \c!leftquote=\cnencoding\cnupperleftsinglequote,
+ \c!rightquote=\cnencoding\cnupperrightsinglequote,
+ \c!leftquotation=\cnencoding\cnupperleftdoublequote,
+ \c!rightquotation=\cnencoding\cnupperrightdoublequote,
+ \c!datum={\v!maand,\ ,\v!dag,{,\ },\v!jaar},
+ \c!status=\v!start]
+
+\setupheadtext [\s!cn] [\v!inhoud={\cnencoding\cnencodedcontents}]
+\setupheadtext [\s!cn] [\v!tabellen={\cnencoding\cnencodedtables}]
+\setupheadtext [\s!cn] [\v!figuren={\cnencoding\cnencodedfigures}]
\setupheadtext [\s!cn] [\v!grafieken=Graphics]
\setupheadtext [\s!cn] [\v!intermezzos=Intermezzos]
-\setupheadtext [\s!cn] [\v!index={\cnencodeindex}]
-\setupheadtext [\s!cn] [\v!afkortingen={\cnencodeabbreviations}]
-\setupheadtext [\s!cn] [\v!logos={\cnencodelogos}]
-\setupheadtext [\s!cn] [\v!eenheden={\cnencodeunits}]
+\setupheadtext [\s!cn] [\v!index={\cnencoding\cnencodedindex}]
+\setupheadtext [\s!cn] [\v!afkortingen={\cnencoding\cnencodedabbreviations}]
+\setupheadtext [\s!cn] [\v!logos={\cnencoding\cnencodedlogos}]
+\setupheadtext [\s!cn] [\v!eenheden={\cnencoding\cnencodedunits}]
-\setuplabeltext [\s!cn] [\v!tabel={\cnencodetable}]
-\setuplabeltext [\s!cn] [\v!figuur={\cnencodefigure}]
+\setuplabeltext [\s!cn] [\v!tabel={\cnencoding\cnencodedtable}]
+\setuplabeltext [\s!cn] [\v!figuur={\cnencoding\cnencodedfigure}]
\setuplabeltext [\s!cn] [\v!intermezzo=Intermezzo ]
\setuplabeltext [\s!cn] [\v!grafiek=Illustration ]
\setuplabeltext [\s!cn] [\v!bijlage=]
@@ -49,6 +59,35 @@
\setuplabeltext [\s!cn] [\v!sub\v!sub\v!paragraaf=]
\setuplabeltext [\s!cn] [\v!sub\v!sub\v!sub\v!paragraaf=]
+%D From this definition one can deduce that language, input
+%D encoding, font encoding, and glyph meaning form a pretty
+%D complex four dimensional space.
+
+\startlanguagespecifics[\s!cn]
+
+\setuplabeltext [\s!cn] [\v!january=\cnencoding\cnencodedjanuary ]
+\setuplabeltext [\s!cn] [\v!february=\cnencoding\cnencodedfebrary ]
+\setuplabeltext [\s!cn] [\v!march=\cnencoding\cnencodedmarch ]
+\setuplabeltext [\s!cn] [\v!april=\cnencoding\cnencodedapril ]
+\setuplabeltext [\s!cn] [\v!may=\cnencoding\cnencodedmay ]
+\setuplabeltext [\s!cn] [\v!june=\cnencoding\cnencodedjune ]
+\setuplabeltext [\s!cn] [\v!july=\cnencoding\cnencodedjuly ]
+\setuplabeltext [\s!cn] [\v!august=\cnencoding\cnencodedaugust ]
+\setuplabeltext [\s!cn] [\v!september=\cnencoding\cnencodedseptember]
+\setuplabeltext [\s!cn] [\v!october=\cnencoding\cnencodedoctober ]
+\setuplabeltext [\s!cn] [\v!november=\cnencoding\cnencodednovember ]
+\setuplabeltext [\s!cn] [\v!december=\cnencoding\cnencodeddecember ]
+
+\setuplabeltext [\s!cn] [\v!sunday=\cnencoding\cnencodedsunday ]
+\setuplabeltext [\s!cn] [\v!monday=\cnencoding\cnencodedmonday ]
+\setuplabeltext [\s!cn] [\v!tuesday=\cnencoding\cnencodedtuesday ]
+\setuplabeltext [\s!cn] [\v!wednesday=\cnencoding\cnencodedwednesday]
+\setuplabeltext [\s!cn] [\v!thursday=\cnencoding\cnencodedthursday ]
+\setuplabeltext [\s!cn] [\v!friday=\cnencoding\cnencodedfriday ]
+\setuplabeltext [\s!cn] [\v!saturday=\cnencoding\cnencodedsaturday ]
+
+\stoplanguagespecifics
+
%D One can specify a split labeltext, as demonstrated in
%D the definition of the \type {part} label. Unfortunately
%D the glyphs of both part depend on the encoding. Therefore,
@@ -57,93 +96,97 @@
\def\cnencoding{\enableencoding[\chineseencoding]} % ugly and temporary
\startencoding[gbk]
- \definecommand cnencodecontents {\uchar{196}{191}\uchar{194}{188}}
- \definecommand cnencodetables {\uchar{177}{237}\uchar{184}{241}}
- \definecommand cnencodefigures {\uchar{205}{188}\uchar{208}{206}}
- \definecommand cnencodeindex {\uchar{203}{247}\uchar{210}{253}}
- \definecommand cnencodeabbreviations {\uchar{203}{245}\uchar{194}{212}\uchar{211}{239}}
- \definecommand cnencodelogos {\uchar{187}{213}\uchar{177}{225}}
- \definecommand cnencodeunits {\uchar{188}{198}\uchar{193}{191}\uchar{181}{165}\uchar{206}{187}}
- \definecommand cnencodetable {\uchar{177}{237}}
- \definecommand cnencodefigure {\uchar{205}{188}}
- \definecommand cnencodedintro {\uchar{181}{218}}
- \definecommand cnencodedpart {\uchar{178}{191}\uchar{183}{214}}
- \definecommand cnencodedchapter {\uchar{213}{194}}
- \definecommand cnencodedsection {\uchar{189}{218}}
-\stopencoding
-
-\startencoding[big5]
- \definecommand cnencodecontents {\uchar{165}{216}\uchar{191}{253}}
- \definecommand cnencodetables {\uchar{170}{237}\uchar{174}{230}}
- \definecommand cnencodefigures {\uchar{185}{207}\uchar{167}{206}}
- \definecommand cnencodeindex {\uchar{175}{193}\uchar{174}{222}}
- \definecommand cnencodeabbreviations {\uchar{191}{89}\uchar{178}{164}\uchar{187}{121}}
- \definecommand cnencodelogos {\uchar{192}{178}\uchar{188}{208}}
- \definecommand cnencodeunits {\uchar{173}{112}\uchar{182}{113}\uchar{179}{230}\uchar{166}{236}}
- \definecommand cnencodetable {\uchar{170}{237}}
- \definecommand cnencodefigure {\uchar{185}{207}}
- \definecommand cnencodedintro {\uchar{178}{196}}
- \definecommand cnencodedpart {\uchar{179}{161}\uchar{164}{192}}
- \definecommand cnencodedchapter {\uchar{179}{185}}
- \definecommand cnencodedsection {\uchar{184} {96}}
-\stopencoding
-
-%D From this definition one can deduce that language, input
-%D encoding, font encoding, and glyph meaning form a pretty
-%D complex four dimensional space.
-
-\startlanguagespecifics[\s!cn]
-
-\startencoding[gbk]
-
-\setuplabeltext [\s!cn] [\v!january=\uchar{210}{187}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!february=\uchar{182}{254}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!march=\uchar{200}{253}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!april=\uchar{203}{196}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!may=\uchar{206}{229}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!june=\uchar{193}{249}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!july=\uchar{198}{223}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!august=\uchar{176}{203}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!september=\uchar{190}{197}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!october=\uchar{202}{174}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!november=\uchar{202}{174}\uchar{210}{187}\uchar{212}{194}]
-\setuplabeltext [\s!cn] [\v!december=\uchar{202}{174}\uchar{182}{254}\uchar{212}{194}]
-
-\setuplabeltext [\s!cn] [\v!sunday=\uchar{208}{199}\uchar{198}{218}\uchar{200}{213}]
-\setuplabeltext [\s!cn] [\v!monday=\uchar{208}{199}\uchar{198}{218}\uchar{210}{187}]
-\setuplabeltext [\s!cn] [\v!tuesday=\uchar{208}{199}\uchar{198}{218}\uchar{182}{254}]
-\setuplabeltext [\s!cn] [\v!wednesday=\uchar{208}{199}\uchar{198}{218}\uchar{200}{253}]
-\setuplabeltext [\s!cn] [\v!thursday=\uchar{208}{199}\uchar{198}{218}\uchar{203}{196}]
-\setuplabeltext [\s!cn] [\v!friday=\uchar{208}{199}\uchar{198}{218}\uchar{206}{229}]
-\setuplabeltext [\s!cn] [\v!saturday=\uchar{208}{199}\uchar{198}{218}\uchar{193}{249}]
-
+ \definecommand cnleftsentence {\uchar{161}{170}\uchar{161}{170}}
+ \definecommand cnrightsentence {\uchar{161}{170}\uchar{161}{170}}
+ \definecommand cnleftsubsentence {\uchar{161}{170}\uchar{161}{170}}
+ \definecommand cnrightsubsentence {\uchar{161}{170}\uchar{161}{170}}
+ \definecommand cnupperleftsinglequote {\uchar{161}{174}}
+ \definecommand cnupperrightsinglequote {\uchar{161}{175}}
+ \definecommand cnupperleftdoublequote {\uchar{161}{176}}
+ \definecommand cnupperrightdoublequote {\uchar{161}{177}}
+ \definecommand cnupperleftsinglequote-v {\uchar{161}{184}}
+ \definecommand cnupperrightsinglequote-v {\uchar{161}{185}}
+ \definecommand cnupperleftdoublequote-v {\uchar{161}{186}}
+ \definecommand cnupperrightdoublequote-v {\uchar{161}{187}}
+ \definecommand cnencodedcontents {\uchar{196}{191}\uchar{194}{188}}
+ \definecommand cnencodedtables {\uchar{177}{237}\uchar{184}{241}}
+ \definecommand cnencodedfigures {\uchar{205}{188}\uchar{208}{206}}
+ \definecommand cnencodedindex {\uchar{203}{247}\uchar{210}{253}}
+ \definecommand cnencodedabbreviations {\uchar{203}{245}\uchar{194}{212}\uchar{211}{239}}
+ \definecommand cnencodedlogos {\uchar{187}{213}\uchar{177}{225}}
+ \definecommand cnencodedunits {\uchar{188}{198}\uchar{193}{191}\uchar{181}{165}\uchar{206}{187}}
+ \definecommand cnencodedtable {\uchar{177}{237}}
+ \definecommand cnencodedfigure {\uchar{205}{188}}
+ \definecommand cnencodedintro {\uchar{181}{218}}
+ \definecommand cnencodedpart {\uchar{178}{191}\uchar{183}{214}}
+ \definecommand cnencodedchapter {\uchar{213}{194}}
+ \definecommand cnencodedsection {\uchar{189}{218}}
+ \definecommand cnencodedjanuary {\uchar{210}{187}\uchar{212}{194}}
+ \definecommand cnencodedfebrary {\uchar{182}{254}\uchar{212}{194}}
+ \definecommand cnencodedmarch {\uchar{200}{253}\uchar{212}{194}}
+ \definecommand cnencodedapril {\uchar{203}{196}\uchar{212}{194}}
+ \definecommand cnencodedmay {\uchar{206}{229}\uchar{212}{194}}
+ \definecommand cnencodedjune {\uchar{193}{249}\uchar{212}{194}}
+ \definecommand cnencodedjuly {\uchar{198}{223}\uchar{212}{194}}
+ \definecommand cnencodedaugust {\uchar{176}{203}\uchar{212}{194}}
+ \definecommand cnencodedseptember {\uchar{190}{197}\uchar{212}{194}}
+ \definecommand cnencodedoctober {\uchar{202}{174}\uchar{212}{194}}
+ \definecommand cnencodednovember {\uchar{202}{174}\uchar{210}{187}\uchar{212}{194}}
+ \definecommand cnencodeddecember {\uchar{202}{174}\uchar{182}{254}\uchar{212}{194}}
+ \definecommand cnencodedsunday {\uchar{208}{199}\uchar{198}{218}\uchar{200}{213}}
+ \definecommand cnencodedmonday {\uchar{208}{199}\uchar{198}{218}\uchar{210}{187}}
+ \definecommand cnencodedtuesday {\uchar{208}{199}\uchar{198}{218}\uchar{182}{254}}
+ \definecommand cnencodedwednesday {\uchar{208}{199}\uchar{198}{218}\uchar{200}{253}}
+ \definecommand cnencodedthursday {\uchar{208}{199}\uchar{198}{218}\uchar{203}{196}}
+ \definecommand cnencodedfriday {\uchar{208}{199}\uchar{198}{218}\uchar{206}{229}}
+ \definecommand cnencodedsaturday {\uchar{208}{199}\uchar{198}{218}\uchar{193}{249}}
\stopencoding
\startencoding[big5]
-
-\setuplabeltext [\s!cn] [\v!january=\uchar{164} {64}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!february=\uchar{164} {71}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!march=\uchar{164} {84}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!april=\uchar{165}{124}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!may=\uchar{164}{173}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!june=\uchar{164}{187}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!july=\uchar{164} {67}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!august=\uchar{164} {75}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!september=\uchar{164} {69}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!october=\uchar{164} {81}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!november=\uchar{164} {81}\uchar{164} {64}\uchar{164}{235}]
-\setuplabeltext [\s!cn] [\v!december=\uchar{164} {81}\uchar{164} {71}\uchar{164}{235}]
-
-\setuplabeltext [\s!cn] [\v!sunday=\uchar{172} {80}\uchar{180}{193}\uchar{164}{233}]
-\setuplabeltext [\s!cn] [\v!monday=\uchar{172} {80}\uchar{180}{193}\uchar{164}{64}]
-\setuplabeltext [\s!cn] [\v!tuesday=\uchar{172} {80}\uchar{180}{193}\uchar{164}{71}]
-\setuplabeltext [\s!cn] [\v!wednesday=\uchar{172} {80}\uchar{180}{193}\uchar{164}{84}]
-\setuplabeltext [\s!cn] [\v!thursday=\uchar{172} {80}\uchar{180}{193}\uchar{165}{124}]
-\setuplabeltext [\s!cn] [\v!friday=\uchar{172} {80}\uchar{180}{193}\uchar{164}{173}]
-\setuplabeltext [\s!cn] [\v!saturday=\uchar{172} {80}\uchar{180}{193}\uchar{164}{187}]
-
+ \definecommand cnleftsentence {\uchar{162}{119}\uchar{162}{119}}
+ \definecommand cnrightsentence {\uchar{162}{119}\uchar{162}{119}}
+ \definecommand cnleftsubsentence {\uchar{162}{119}\uchar{162}{119}}
+ \definecommand cnrightsubsentence {\uchar{162}{119}\uchar{162}{119}}
+ \definecommand cnupperleftsinglequote {\uchar{161}{165}}
+ \definecommand cnupperrightsinglequote {\uchar{161}{166}}
+ \definecommand cnupperleftdoublequote {\uchar{161}{167}}
+ \definecommand cnupperrightdoublequote {\uchar{161}{168}}
+ \definecommand cnupperleftsinglequote-v {\uchar{161}{117}}
+ \definecommand cnupperrightsinglequote-v {\uchar{161}{118}}
+ \definecommand cnupperleftdoublequote-v {\uchar{161}{121}}
+ \definecommand cnupperrightdoublequote-v {\uchar{161}{122}}
+ \definecommand cnencodecontents {\uchar{165}{216}\uchar{191}{253}}
+ \definecommand cnencodetables {\uchar{170}{237}\uchar{174}{230}}
+ \definecommand cnencodefigures {\uchar{185}{207}\uchar{167}{206}}
+ \definecommand cnencodeindex {\uchar{175}{193}\uchar{174}{222}}
+ \definecommand cnencodeabbreviations {\uchar{191}{89}\uchar{178}{164}\uchar{187}{121}}
+ \definecommand cnencodelogos {\uchar{192}{178}\uchar{188}{208}}
+ \definecommand cnencodeunits {\uchar{173}{112}\uchar{182}{113}\uchar{179}{230}\uchar{166}{236}}
+ \definecommand cnencodetable {\uchar{170}{237}}
+ \definecommand cnencodefigure {\uchar{185}{207}}
+ \definecommand cnencodedintro {\uchar{178}{196}}
+ \definecommand cnencodedpart {\uchar{179}{161}\uchar{164}{192}}
+ \definecommand cnencodedchapter {\uchar{179}{185}}
+ \definecommand cnencodedsection {\uchar{184} {96}}
+ \definecommand cnencodedjanuary {\uchar{164} {64}\uchar{164}{235}}
+ \definecommand cnencodedfebrary {\uchar{164} {71}\uchar{164}{235}}
+ \definecommand cnencodedmarch {\uchar{164} {84}\uchar{164}{235}}
+ \definecommand cnencodedapril {\uchar{165}{124}\uchar{164}{235}}
+ \definecommand cnencodedmay {\uchar{164}{173}\uchar{164}{235}}
+ \definecommand cnencodedjune {\uchar{164}{187}\uchar{164}{235}}
+ \definecommand cnencodedjuly {\uchar{164} {67}\uchar{164}{235}}
+ \definecommand cnencodedaugust {\uchar{164} {75}\uchar{164}{235}}
+ \definecommand cnencodedseptember {\uchar{164} {69}\uchar{164}{235}}
+ \definecommand cnencodedoctober {\uchar{164} {81}\uchar{164}{235}}
+ \definecommand cnencodednovember {\uchar{164} {81}\uchar{164} {64}\uchar{164}{235}}
+ \definecommand cnencodeddecember {\uchar{164} {81}\uchar{164} {71}\uchar{164}{235}}
+ \definecommand cnencodedsunday {\uchar{172} {80}\uchar{180}{193}\uchar{164}{233}}
+ \definecommand cnencodedmonday {\uchar{172} {80}\uchar{180}{193}\uchar{164} {64}}
+ \definecommand cnencodedtuesday {\uchar{172} {80}\uchar{180}{193}\uchar{164} {71}}
+ \definecommand cnencodedwednesday {\uchar{172} {80}\uchar{180}{193}\uchar{164} {84}}
+ \definecommand cnencodedthursday {\uchar{172} {80}\uchar{180}{193}\uchar{165}{124}}
+ \definecommand cnencodedfriday {\uchar{172} {80}\uchar{180}{193}\uchar{164}{173}}
+ \definecommand cnencodedsaturday {\uchar{172} {80}\uchar{180}{193}\uchar{164}{187}}
\stopencoding
-\stoplanguagespecifics
-
\protect \endinput
diff --git a/tex/context/base/lang-ger.tex b/tex/context/base/lang-ger.tex
index 82b5132fa..995986e26 100644
--- a/tex/context/base/lang-ger.tex
+++ b/tex/context/base/lang-ger.tex
@@ -88,15 +88,15 @@
\installlanguage
[\s!sv]
[\c!spatiering=\v!opelkaar,
- \c!leftsentence=---,
- \c!rightsentence=---,
- \c!leftsubsentence=---,
- \c!rightsubsentence=---,
- \c!leftquote=\upperleftsinglesixquote,
+ \c!leftsentence={\hbox{--~}},
+ \c!rightsentence={\hbox{~--}},
+ \c!leftsubsentence={--},
+ \c!rightsubsentence={--},
+ \c!leftquote=\upperrightsingleninequote,
\c!rightquote=\upperrightsingleninequote,
- \c!leftquotation=\upperleftdoublesixquote,
+ \c!leftquotation=\upperrightdoubleninequote,
\c!rightquotation=\upperrightdoubleninequote,
- \c!datum={\v!jaar,\ ,\v!maand,\ ,\v!dag},
+ \c!datum={\v!dag,\ ,\v!maand,\ ,\v!jaar},
\c!status=\v!stop]
\installlanguage
diff --git a/tex/context/base/lang-ini.tex b/tex/context/base/lang-ini.tex
index ed5126a76..1cda3ce7c 100644
--- a/tex/context/base/lang-ini.tex
+++ b/tex/context/base/lang-ini.tex
@@ -194,7 +194,7 @@
\def\dodoinstalllanguage#1#2% #2 added
{\doifundefined{#1}{\setvalue{#1}{\complexlanguage[#2]}}%
\expanded{\noexpand\uppercase{\noexpand\edef\noexpand\ascii{#1}}}%
- \doifundefined{\ascii}{\setvalue{\ascii}{\complexlanguage[#2]}}}
+ \doifundefined\ascii{\setvalue{\ascii}{\complexlanguage[#2]}}}
%D \macros
%D {preloadlanguages}
@@ -212,9 +212,11 @@
-#1-%
\getvalue{\??la#1\s!righthyphenmin} }
-\def\preloadlanguages%
- {\doifsomething{\preloadedpatterns}
- {\showmessage{\m!linguals}{10}{\preloadedpatterns}}}
+\def\preloadlanguages
+ {\doifsomething\preloadedpatterns
+ {\showmessage\m!linguals{10}\preloadedpatterns}}
+
+\let\installedlanguages\empty
\def\doinstalllanguage[#1][#2]%
{%\ConvertConstantAfter\doifinstringelse{=}{#2}
@@ -222,6 +224,7 @@
{\doifdefinedelse{\??la#1\c!status}
{\getparameters[\??la#1][#2]}
{\setvalue{\l!prefix!#1}{#1}%
+ \addtocommalist{#1}\installedlanguages
\dodoinstalllanguage{#1}{#1}%
\getparameters
[\??la#1]
@@ -274,28 +277,34 @@
% loop in deo
% \doifvalue{\??la#1\s!patterns}{#1}{\letvalue{\??la#1\c!default}\empty}%
%
- \doifelsevalue{\??la#1\c!status}{\v!start}
+ \doifelsevalue{\??la#1\c!status}\v!start
{\doifelsevaluenothing{\??la#1\s!patterns}
{\edef\languagesuffix{#1}}
{\edef\languagesuffix{\getvalue{\??la#1\s!patterns}}}%
- %\doifundefinedelse{\??la\??la\languagesuffix}
\doifundefinedelse{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}
{\doloadpatterns{#1}{\languagesuffix}}
{\bgroup
- %\edef\loadedlanguage{\getvalue{\??la\??la\languagesuffix}}%
\edef\loadedlanguage{\getvalue{\??la\??la:\currentencoding:\currentmapping:\languagesuffix}}%
- \showmessage{\m!linguals}{1}{\languagesuffix,#1,\loadedlanguage}%
- \showmessage{\m!linguals}{3}{\languagesuffix,#1,\loadedlanguage}%
+ \showmessage\m!linguals1{\languagesuffix,#1,\loadedlanguage}%
+ \showmessage\m!linguals3{\languagesuffix,#1,\loadedlanguage}%
\egroup}}
- {\showmessage{\m!linguals}{5}{#1}}}
+ {\showmessage\m!linguals5{#1}}}
{\setvalue{\l!prefix!#1}{#2}%
\dodoinstalllanguage{#1}{#2}}}
% ^^ \language[#1] gave unwanted side effect of loading language specifics
-\def\installlanguage%
+\def\installlanguage
{\dodoubleargument\doinstalllanguage}
+%D Handy
+
+\def\preloadallpatterns
+ {\gdef\preloadallpatterns##1%
+ {\installlanguage[##1][\c!status=\v!start]}%
+ \processcommacommand[\installedlanguages]\preloadallpatterns
+ \global\let\preloadallpatterns\relax}
+
%D When the second argument is a language identifier, a
%D synonym is created. This feature is present because we
%D used dutch mnemonics in the dutch version, but nowadays
@@ -307,7 +316,7 @@
\def\doloadpatterns#1#2%
{\expanded{\getcommacommandsize[\getvalue{\??la#2\s!encoding}]}%
\ifnum\commalistsize>0
- %\message{[nofpatterns #2: \commalistsize/\getvalue{\??la#2\s!encoding}]}%
+ %\message{[nofpatterns #2: \commalistsize/\getvalue{\??la#2\s!encoding}]}%
\dorecurse\commalistsize
{\expanded{\getfromcommacommand[\getvalue{\??la#2\s!encoding}][\recurselevel]}%
\let\patternencoding\commalistelement
@@ -324,38 +333,38 @@
\def\dodoloadpatterns#1#2#3#4% beware, loaded language also incr
{\normallanguage\loadedlanguage % when not really needed
-% \letvalue{\??la\??la#2}\loadedlanguage
+ %\letvalue{\??la\??la#2}\loadedlanguage
\bgroup
\scratchtoks\everyjob % we don't want additional junk put there
\let\showpatterns\relax
\startencoding[#3]%
\enablemapping[#4]%
- \doifnothing{\currentencoding}{\let\currentencoding\s!default}%
- \doifnothing{\currentmapping }{\let\currentmapping \s!default}%
- \global\letvalue{\??la\??la:\currentencoding:\currentmapping:#2}=\loadedlanguage
+ \doifnothing\currentencoding{\let\currentencoding\s!default}%
+ \doifnothing\currentmapping {\let\currentmapping \s!default}%
+ \letgvalue{\??la\??la:\currentencoding:\currentmapping:#2}\loadedlanguage
\startreadingfile
\startpatternaccents
-%\def\patterns##1{\message{#1/#2/#3/#4/##1}\normalpatterns{##1}}%
+ %\def\patterns##1{\message{#1/#2/#3/#4/##1}\normalpatterns{##1}}%
\readsysfile{\truefilename{\f!languageprefix#2.\f!patternsextension}}
{\setxvalue{\??la#1\s!patterns}{#2}%
\xdef\preloadedpatterns
{\preloadedpatterns
\number\normallanguage:\showpatterns{#2}}%
- \showmessage{\m!linguals}{1}{#2,#1,\loadedlanguage}}
+ \showmessage\m!linguals1{#2,#1,\loadedlanguage}}
{\readsysfile{\f!languageprefix#2.\f!patternsextension}
{\setxvalue{\??la#1\s!patterns}{#2}%
\xdef\preloadedpatterns{\preloadedpatterns\showpatterns{#2}}%
- \showmessage{\m!linguals}{1}{#2,#1,\loadedlanguage}}
- {\showmessage{\m!linguals}{2}{#2,#1,\loadedlanguage}}}%
+ \showmessage\m!linguals1{#2,#1,\loadedlanguage}}
+ {\showmessage\m!linguals2{#2,#1,\loadedlanguage}}}%
\readsysfile{\truefilename{\f!languageprefix#2.\f!hyphensextension}}
- {\showmessage{\m!linguals}{3}{#2,#1,\loadedlanguage}}
+ {\showmessage\m!linguals3{#2,#1,\loadedlanguage}}
{\readsysfile{\f!languageprefix#2.\f!hyphensextension}
- {\showmessage{\m!linguals}{3}{#2,#1,\loadedlanguage}}
- {\showmessage{\m!linguals}{4}{#2,#1,\loadedlanguage}}}%
+ {\showmessage\m!linguals3{#2,#1,\loadedlanguage}}
+ {\showmessage\m!linguals4{#2,#1,\loadedlanguage}}}%
\stoppatternaccents
\stopreadingfile
\stopencoding
- \global\everyjob=\scratchtoks
+ \global\everyjob\scratchtoks
\egroup
\increment\loadedlanguage}
@@ -366,12 +375,12 @@
%D
%D \showsetup{\y!setuplanguage}
-\def\setuplanguage%
+\def\setuplanguage
{\dodoubleargument\dosetuplanguage}
\def\dosetuplanguage[#1][#2]%
{\getparameters[\??la#1][#2]%
- \doif{#1}{\currentlanguage}{\docomplexlanguage}}
+ \doif{#1}\currentlanguage\docomplexlanguage}
%D The values \type {\c!leftsentence} and \type
%D {\c!rightsentence} can be (and are) used to implement
@@ -387,8 +396,8 @@
%D Just to make things easy we can ask for the current date
%D specification by saying:
-\def\currentdatespecification%
- {\getvalue{\??la\currentlanguage\c!datum}}
+\def\currentdatespecification
+ {\csname\??la\currentlanguage\c!datum\endcsname}
%D This command is not meant for users.
@@ -811,6 +820,6 @@
\appendtoks\mainlanguage[\currentlanguage]\to\everyjob
-\appendtoks\showmessage{\m!linguals}{9}{\currentlanguage}\to\everyjob
+\appendtoks\showmessage\m!linguals9\currentlanguage\to\everyjob
\protect \endinput
diff --git a/tex/context/base/lang-ita.tex b/tex/context/base/lang-ita.tex
index 365c77cbe..5094d27b5 100644
--- a/tex/context/base/lang-ita.tex
+++ b/tex/context/base/lang-ita.tex
@@ -444,7 +444,7 @@
%D Ordinal converters:
\def\frordinaldaynumber#1% date is masculine
- {#1\ifcase#1\or
+ {\number#1\ifcase#1\or
\highordinalstr{er}%
\fi}
diff --git a/tex/context/base/lang-lab.tex b/tex/context/base/lang-lab.tex
index 167b0a956..6711490f8 100644
--- a/tex/context/base/lang-lab.tex
+++ b/tex/context/base/lang-lab.tex
@@ -101,14 +101,20 @@
\unexpanded\def\headtext
{\let\handletextprefix\firstoftwoarguments
+ \let\reporttextprefixerror\doreporttextprefixerror
+ \global\labeltextdonetrue
\dogetupsometextprefix\headlanguage\c!titel}
\unexpanded\def\leftlabeltext
{\let\handletextprefix\firstoftwoarguments
+ \let\reporttextprefixerror\doreporttextprefixerror
+ \global\labeltextdonetrue
\dogetupsometextprefix\labellanguage\c!label}
\unexpanded\def\rightlabeltext
{\let\handletextprefix\secondoftwoarguments
+ \let\reporttextprefixerror\doreporttextprefixerror
+ \global\labeltextdonetrue
\dogetupsometextprefix\labellanguage\c!label}
\unexpanded\def\LEFTLABELTEXT
@@ -120,6 +126,8 @@
\def\DOLABELTEXT#1%
{\bgroup
\the\everyuppercase
+ \let\reporttextprefixerror\doreporttextprefixerror
+ \global\labeltextdonetrue
\dogetupsometextprefix\labellanguage\c!label{#1}% not \labeltext (see \MONTH)
\egroup}
@@ -132,80 +140,26 @@
\newif\iflabeltextdone % needs to be reset elsewhere
\newif\iftracinglabels % shows missing labels
-% \def\dodogetupsometextprefix#1#2#3#4%
-% {\doifdefinedelse{#2#1#3}
-% {\getvalue{#2#1#3}}
-% {\doifdefinedelse{#2#3} % was bug: #1#3
-% {\getvalue{#2#3}}
-% {#4}}}
-%
-% \unexpanded\def\dogetupsometextprefix#1#2#3%
-% {\global\labeltextdonetrue
-% \dodogetupsometextprefix{#1}{#2}{#3}
-% {\dodogetupsometextprefix{\defaultlanguage{#1}}{#2}{#3}
-% {\dodogetupsometextprefix{\s!en}{#2}{#3}
-% {\dodogetupsometextprefix{\s!nl}{#2}{#3}
-% {\iftracinglabels{\tttf[#2:~#3/#1]~}\fi}}}}}
-%
-% \beginETEX
-%
-% \def\dodogetupsometextprefix#1#2#3#4%
-% {\ifcsname#2#1#3\endcsname
-% \csname#2#1#3\endcsname
-% \else\ifcsname#2#3\endcsname
-% \csname#2#3\endcsname
-% \else
-% #4%
-% \fi\fi}
-%
-% this can be reduced to:
-%
-% \def\dodogetupsometextprefix#1#2#3%
-% {\ifcsname#2#1#3\endcsname
-% \csname#2#1#3\endcsname
-% \@EA\gobbleoneargument
-% \else\ifcsname#2#3\endcsname
-% \csname#2#3\endcsname
-% \@EAEAEA\gobbleoneargument
-% \else
-% \@EAEAEA\firstofoneargument
-% \fi\fi}
-%
-% \endETEX
-%
-% \beginTEX
-%
-% \def\dodogetupsometextprefix#1#2#3%
-% {\@EA\ifx\csname#2#1#3\endcsname\relax
-% \@EA\ifx\csname#2#3\endcsname\relax
-% \@EAEAEA\firstofoneargument
-% \else
-% \csname#2#3\endcsname
-% \@EAEAEA\gobbleoneargument
-% \fi
-% \else
-% \csname#2#1#3\endcsname
-% \@EA\gobbleoneargument
-% \fi}
-%
-% \endTEX
-%
-% \unexpanded\def\dogetupsometextprefix#1#2#3%
-% {\global\labeltextdonetrue
-% \dodogetupsometextprefix{#1}{#2}{#3}
-% {\dodogetupsometextprefix{\defaultlanguage{#1}}{#2}{#3}
-% {\dodogetupsometextprefix\s!en{#2}{#3}
-% {\dodogetupsometextprefix\s!nl{#2}{#3}
-% {\reporttextprefixerror{#1}{#2}{#3}}}}}}
-
-\def\reporttextprefixerror#1#2#3%
+\def\doreporttextprefixerror#1#2#3%
{\iftracinglabels{\tttf[#2:~#3/#1]~}\fi}
+\def\dosetexpandedheadlabeltext#1#2#3%
+ {\bgroup
+ \let\handletextprefix\firstoftwoarguments
+ \let\reporttextprefixerror\gobblethreearguments
+ \keepencodedtokens % test on multilingual pascal, ok in stretched
+ %\dontexpandencodedtokens % not usable in token handler
+ \expanded
+ {\egroup\noexpand\def\noexpand#2% watch out, no \edef
+ {\dogetupsometextprefix{\headlanguage}{#1}{#3}}}}
+
+\def\setexpandedheadtext {\dosetexpandedheadlabeltext\c!titel}
+\def\setexpandedlabeltext{\dosetexpandedheadlabeltext\c!label}
+
\beginETEX \ifcsname
-\unexpanded\def\dogetupsometextprefix#1#2#3%
- {\global\labeltextdonetrue
- \ifcsname#2#1#3\endcsname
+\def\dogetupsometextprefix#1#2#3%
+ {\ifcsname#2#1#3\endcsname
\csname#2#1#3\endcsname \else
\ifcsname#2#3\endcsname
\csname#2#3\endcsname \else
@@ -222,9 +176,8 @@
\beginTEX
-\unexpanded\def\dogetupsometextprefix#1#2#3%
- {\global\labeltextdonetrue
- \@EA\ifx\csname#2#1#3\endcsname\relax
+\def\dogetupsometextprefix#1#2#3%
+ {\@EA\ifx\csname#2#1#3\endcsname\relax
\@EA\ifx\csname#2#3\endcsname\relax
\@EA\ifx\csname#2\defaultlanguage{#1}#3\endcsname\relax
\@EA\ifx\csname#2\s!en#3\endcsname\relax
diff --git a/tex/context/base/lang-spe.tex b/tex/context/base/lang-spe.tex
index bd34674b2..30180e671 100644
--- a/tex/context/base/lang-spe.tex
+++ b/tex/context/base/lang-spe.tex
@@ -29,7 +29,7 @@
{\ifcase\protectionlevel
\the\everyresetlanguagespecifics
\else % to be translated
- \writestatus{system}{don't change language in unprotected mode!}%
+ \writestatus\m!systems{don't change language in unprotected mode!}%
\fi}
\appendtoks
@@ -159,7 +159,7 @@
\def\deactivatelanguagespecific#1%
{\ifundefined{l g s \string#1}%
- \global\letvalue{l g s \string#1}\empty % signal to prevent dup def
+ \letgvalueempty{l g s \string#1}% signal to prevent dup def
\bgroup
\catcode`#1=\@@active
\uccode`~=`#1
diff --git a/tex/context/base/m-chart.tex b/tex/context/base/m-chart.tex
index 0a30652da..1e3f23d13 100644
--- a/tex/context/base/m-chart.tex
+++ b/tex/context/base/m-chart.tex
@@ -13,6 +13,8 @@
% to do: \localpushmacro/\localpopmacro (dohandleflowchart etc)
+% will be redone with layers
+
%D This is an experimental module. Pieces of code will be moved
%D to other modules. More features are possible but will be
%D interfaces later.
@@ -174,7 +176,10 @@
\def\doFLOWhelp#1%
{\gdef\FLOWhelp{#1}\ignorespaces}
-\def\doFLOWconnection[#1]#2%
+\def\doFLOWconnection
+ {\dodoubleempty\dodoFLOWconnection}
+
+\def\dodoFLOWconnection[#1][#2]#3%
{\ignorespaces}
\def\doFLOWconnect%
@@ -404,20 +409,20 @@
\dimen0=\@@FLOWmaxbreedte
\dimen2=\@@FLOWbreedte
\dimen4=\@@FLOWdx
- \advance\dimen2 by 2\dimen4
+ \advance\dimen2 2\dimen4
\dimen2=\@@FLOWnx\dimen2
- \advance\dimen2 by 2\dimen4
+ \advance\dimen2 2\dimen4
\ifdim\dimen2>\dimen0
- \advance\scratchcounter by -1
+ \advance\scratchcounter \minusone
\else
\dimen0=\@@FLOWmaxhoogte
\dimen2=\@@FLOWhoogte
\dimen4=\@@FLOWdy
- \advance\dimen2 by 2\dimen4
+ \advance\dimen2 2\dimen4
\dimen2=\@@FLOWny\dimen2
- \advance\dimen2 by 2\dimen4
+ \advance\dimen2 2\dimen4
\ifdim\dimen2>\dimen0
- \advance\scratchcounter by -1
+ \advance\scratchcounter \minusone
\else
\exitloop
\fi
@@ -506,14 +511,14 @@
reverse_y := true ;
chart_offset := \@@FLOW@@offset ;
\stopMPdrawing
- \doifelsenothing{\@@FLOWachtergrondkleur}
+ \doifelsenothing\@@FLOWachtergrondkleur
{\startMPdrawing
chart_background_color := white ;
\stopMPdrawing}
{\startMPdrawing
chart_background_color := \MPcolor{\@@FLOWachtergrondkleur} ;
\stopMPdrawing}%
- \doif{\@@FLOWoptie}{\v!test}
+ \doif\@@FLOWoptie\v!test
{\startMPdrawing
show_con_points := true ;
show_mid_points := true ;
@@ -572,7 +577,7 @@
\setbox4=\hbox
{\hskip\@@FLOW@@offset\lower\@@FLOW@@offset\box4}%
\wd4=\wd0\ht4=\ht0\dp4=\dp0
- \doifelse{\@@FLOWoptie}{\v!test}
+ \doifelse\@@FLOWoptie\v!test
{\setbox6=\vbox
{\forgetall
\vskip\@@FLOW@@offset
@@ -586,12 +591,12 @@
\setbox8=\vbox
{\forgetall\offinterlineskip
\vskip\@@FLOW@@offset
- \dostepwiserecurse{\@@FLOWy}{\@@FLOWny}{1}
+ \dostepwiserecurse\@@FLOWy\@@FLOWny\plusone
{\vbox to \FLOWgridheight
{\vfill
\hskip\@@FLOW@@offset
\hbox
- {\dostepwiserecurse{\@@FLOWx}{\@@FLOWnx}{1}
+ {\dostepwiserecurse\@@FLOWx\@@FLOWnx\plusone
{\hbox to \FLOWgridwidth
{\hfill
\framed
@@ -640,19 +645,19 @@
\ifx\FLOWshape\empty
\global\let\FLOWshape\@@FLOSdefault
\fi
- \doifnot{\FLOWshape}{none} % {\v!geen}
+ \doifnot\FLOWshape{none} % {\v!geen}
{\ExpandBothAfter\doifinsetelse{\FLOWshape}{\FLOWshapes}
{\edef\FLOWshapetag{shape_\FLOWshape}% beter \expanded
\@EA\setFLOWname\@EA\FLOWshapetag\@EA{\FLOWshapetag}}
- {\doifnumberelse{\FLOWshape}
+ {\doifnumberelse\FLOWshape
{\let\FLOWshapetag\FLOWshape}
{\let\FLOWshapetag\empty}}%
\ifx\FLOWshapetag\empty \else
\ExpandBothAfter\doifinsetelse{\FLOWshape}{\FLOWlines}
- {\chardef\FLOWstate=0 }
+ {\chardef\FLOWstate0 }
{\ExpandBothAfter\doifcommonelse{\FLOWcell,\FLOWfocus}{\@@FLOWfocus}
- {\chardef\FLOWstate=1 }
- {\chardef\FLOWstate=2 }}%
+ {\chardef\FLOWstate1 }
+ {\chardef\FLOWstate2 }}%
\startMPdrawing
begin_sub_chart ;
\ifcase\FLOWstate
@@ -694,9 +699,15 @@
\def\FLOWorigin{0,0}
-\def\doFLOWconnectionC[#1]#2%
+\def\doFLOWdisplace[#1,#2,#3]% experiment
+ {dsp_x := #1 ; dsp_y := #2 ;}
+
+\def\doFLOWconnectionC
+ {\dodoubleempty\dodoFLOWconnectionC}
+
+\def\dodoFLOWconnectionC[#1][#2]#3%
{\doglobal\increment\FLOWcomment
- \setFLOWname\otherFLOWname{name_#2}%
+ \setFLOWname\otherFLOWname{name_#3}%
\doifdefinedelse{\@FLOC@-\FLOWname}
{\edef\FLOWfrom{\getvalue{\@FLOC@-\FLOWname}}}
{\let \FLOWfrom \FLOWorigin}%
@@ -707,22 +718,28 @@
\ifx\FLOWto\FLOWorigin \else
\FLOWsetconnect{#1}%
\ifx\cFLOWfrom\empty \else
- \doifelse{\@@FLOLhoek}{\v!rond}
+ \doifelse\@@FLOLhoek\v!rond
{\startMPdrawing smooth := true ; \stopMPdrawing}
{\startMPdrawing smooth := false ; \stopMPdrawing}%
- \doifelse{\@@FLOLstreep}{\v!ja}
+ \doifelse\@@FLOLstreep\v!ja
{\startMPdrawing dashline := true ; \stopMPdrawing}
{\startMPdrawing dashline := false ; \stopMPdrawing}%
- \doifelse{\@@FLOLpijl}{\v!ja}
+ \doifelse\@@FLOLpijl\v!ja
{\startMPdrawing arrowtip := true ; \stopMPdrawing}
{\startMPdrawing arrowtip := false ; \stopMPdrawing}%
- \doifelse{\@@FLOLoffset}{\v!geen}
+ \doifelse\@@FLOLoffset\v!geen
{\startMPdrawing touchshape := true ; \stopMPdrawing}
{\startMPdrawing touchshape := false ; \stopMPdrawing}%
+%\doifsomething{#2}
+% {\startMPdrawing
+% \doFLOWdisplace[0#2,0,0]%
+% \stopMPdrawing}%
\startMPdrawing
+\doFLOWdisplace[0#2,0,0]%
connection_line_color := \MPcolor{\@@FLOLkleur} ;
connection_line_width := \@@FLOLlijndikte ;
connect_\cFLOWfrom_\cFLOWto (\FLOWfrom,\zFLOWfrom) (\FLOWto,\zFLOWto) ;
+\doFLOWdisplace[0,0,0]%
\stopMPdrawing
\fi
\fi
@@ -744,7 +761,10 @@
\let\comment\doFLOWcommentD
\ignorespaces#1\unskip\ignorespaces}
-\def\doFLOWconnectionD[#1]#2%
+\def\doFLOWconnectionD
+ {\dodoubleempty\dodoFLOWconnectionD}
+
+\def\dodoFLOWconnectionD[#1][#2]#3%
{\doglobal\increment\FLOWcomment
\ignorespaces}
@@ -767,16 +787,16 @@
%\ifdefined{FLOW#1}%
\ifcase0\getvalue{\@@MPx\FLOWcomment}\getvalue{\@@MPy\FLOWcomment}\relax
\else
- \ifdim\getvalue{\@@MPx\FLOWcomment}bp<\areaMPllx\relax\else
- \ifdim\getvalue{\@@MPx\FLOWcomment}bp>\areaMPurx\relax\else
- \ifdim\getvalue{\@@MPy\FLOWcomment}bp<\areaMPlly\relax\else
- \ifdim\getvalue{\@@MPy\FLOWcomment}bp>\areaMPury\relax\else
- \dimen0=\getvalue{\@@MPx\FLOWcomment}bp
+ \ifdim\getvalue{\@@MPx\FLOWcomment}\s!bp<\areaMPllx\relax\else
+ \ifdim\getvalue{\@@MPx\FLOWcomment}\s!bp>\areaMPurx\relax\else
+ \ifdim\getvalue{\@@MPy\FLOWcomment}\s!bp<\areaMPlly\relax\else
+ \ifdim\getvalue{\@@MPy\FLOWcomment}\s!bp>\areaMPury\relax\else
+ \dimen0=\getvalue{\@@MPx\FLOWcomment}\s!bp
\advance\dimen0 -\@@FLOW@@offset
\advance\dimen0 -\clipMPllx
\dimen2=\clipMPury
\advance\dimen2 -\@@FLOW@@offset
- \advance\dimen2 -\getvalue{\@@MPy\FLOWcomment}bp
+ \advance\dimen2 -\getvalue{\@@MPy\FLOWcomment}\s!bp
\setbox0=\hbox{\strut#2}%
\boxoffset=.5\bodyfontsize
\setbox0=\hbox
@@ -807,15 +827,15 @@
\else\ifnum\!!countb>\!!countd \donefalse
\else \donetrue
\doglobal\addtocommalist\FLOWcell\FLOWcells
- \advance\!!counta by -\@@FLOWx\advance\!!counta by 1
- \advance\!!countb by -\@@FLOWy\advance\!!countb by 1
+ \advance\!!counta -\@@FLOWx\advance\!!counta \plusone
+ \advance\!!countb -\@@FLOWy\advance\!!countb \plusone
\dimen0=\FLOWgridwidth\dimen0=\!!counta\dimen0
- \advance\dimen0 by -\FLOWgridwidth
- \dimen4=\FLOWgridwidth\advance\dimen4 by -\FLOWshapewidth
- \advance\dimen0 by .5\dimen4
+ \advance\dimen0 -\FLOWgridwidth
+ \dimen4=\FLOWgridwidth\advance\dimen4 -\FLOWshapewidth
+ \advance\dimen0 .5\dimen4
\dimen2=\FLOWgridheight\dimen2=\!!countb\dimen2
- \dimen4=\FLOWgridheight\advance\dimen4 by -\FLOWshapeheight
- \advance\dimen2 by -.5\dimen4
+ \dimen4=\FLOWgridheight\advance\dimen4 -\FLOWshapeheight
+ \advance\dimen2 -.5\dimen4
\setbox0=\hbox
{\ifx\FLOWalign\empty\else
\setupframed
@@ -829,11 +849,13 @@
m=>{\setupframed[\c!uitlijnen=\v!midden]},
c=>{\setupframed[\c!uitlijnen=\v!midden]}]%
\fi
- \doifelse{\FLOWshape}{none} % {\v!geen}
+ \doifelse\FLOWshape{none} % {\v!geen}
{\setupframed[\c!offset=\v!overlay]}
- {\setupframed[\c!offset=.5\bodyfontsize]}%
+ %{\setupframed[\c!offset=.5\bodyfontsize]}%
+ {\setupframed[\c!offset=\@@FLOSoffset]}%
\framed
- [\c!kader=\v!uit,\c!breedte=\FLOWshapewidth,\c!hoogte=\FLOWshapeheight]
+ [\c!kader=\v!uit,
+ \c!breedte=\FLOWshapewidth,\c!hoogte=\FLOWshapeheight]
{\FLOWtext}}%
\showFLOWhelp0
\ifx\FLOWdestination\empty\else
@@ -852,17 +874,17 @@
\hbox{\raise\dimen4\hbox{##1{\strut##3}}}}%
\positionFLOWzero}%
\def\doFLOWblabel##1##2##3%
- {\scratchdimen=\ifcase##2 \!!zeropoint\else\@@FLOWdy\fi
+ {\scratchdimen=\ifcase##2 \zeropoint\else\@@FLOWdy\fi
\setbox0=\hbox{\hskip\dimen2\raise-\scratchdimen
\hbox{##1{\strut##3}}}%
\positionFLOWzero}%
\def\doFLOWllabel##1##2##3%
- {\scratchdimen=\ifcase##2 \!!zeropoint\else\@@FLOWdx\fi
+ {\scratchdimen=\ifcase##2 \zeropoint\else\@@FLOWdx\fi
\setbox0=\hbox{\hskip-\scratchdimen\raise\dimen6
\hbox{##1{\strut##3}}}%
\positionFLOWzero}%
\def\doFLOWrlabel##1##2##3%
- {\scratchdimen=\ifcase##2 \!!zeropoint\else\@@FLOWdx\fi
+ {\scratchdimen=\ifcase##2 \zeropoint\else\@@FLOWdx\fi
\setbox0=\hbox{\hskip\dimen0\hskip\scratchdimen
\hbox{\raise\dimen6\hbox{##1{\strut##3}}}}%
\positionFLOWzero}%
@@ -900,8 +922,8 @@
\!!countd=\@@FLOWy
\advance\!!countc \@@FLOWnx
\advance\!!countd \@@FLOWny
- \advance\!!countc -1
- \advance\!!countd -1
+ \advance\!!countc \minusone
+ \advance\!!countd \minusone
\ifnum\!!counta<\@@FLOWx\relax
\donefalse
\else\ifnum\!!counta>\!!countc
@@ -914,15 +936,15 @@
\donetrue
\fi\fi\fi\fi
\ifdone
- \advance\!!counta by -\@@FLOWx\advance\!!counta by 1
- \advance\!!countb by -\@@FLOWy\advance\!!countb by 1
+ \advance\!!counta -\@@FLOWx\advance\!!counta \plusone
+ \advance\!!countb -\@@FLOWy\advance\!!countb \plusone
\dimen0=\FLOWgridwidth\dimen0=\!!counta\dimen0
- \advance\dimen0 by -\FLOWgridwidth
- \dimen4=\FLOWgridwidth\advance\dimen4 by -\FLOWshapewidth
- \advance\dimen0 by .5\dimen4
+ \advance\dimen0 -\FLOWgridwidth
+ \dimen4=\FLOWgridwidth\advance\dimen4 -\FLOWshapewidth
+ \advance\dimen0 .5\dimen4
\dimen2=\FLOWgridheight\dimen2=\!!countb\dimen2
- \dimen4=\FLOWgridheight\advance\dimen4 by -\FLOWshapeheight
- \advance\dimen2 by -.5\dimen4
+ \dimen4=\FLOWgridheight\advance\dimen4 -\FLOWshapeheight
+ \advance\dimen2 -.5\dimen4
\edef\FLOWdx{\the\dimen0}%
\edef\FLOWdy{\the\dimen2}%
\setbox0=\hbox
@@ -975,7 +997,7 @@
\def\dodoFLOWlocationF#1#2#3#4%
{\ifnum#1#2#4\relax
- \!!counta=#1\advance\!!counta by #31\relax
+ \!!counta=#1\advance\!!counta #31\relax
\edef#4{\ifnum\!!counta<1 1\else\the\!!counta\fi}%
\fi}
@@ -983,7 +1005,7 @@
{\ifdone
\let#1=#2%
\!!counta=#3%
- \advance\!!counta 1\advance\!!counta -#2\relax
+ \advance\!!counta \plusone\advance\!!counta -#2\relax
\ifnum\!!counta<1 \!!counta=1 \fi
\edef#4{\the\!!counta}%
\else
@@ -1029,7 +1051,7 @@
%D A hook into the help system.
\def\showFLOWhelp#1%
- {\doifhelpinfo{\FLOWhelp}
+ {\doifhelpinfo\FLOWhelp
{\setbox#1=\hbox
{\setbox\scratchbox=\hbox{\lower\@@FLOWdy\hbox
{\helpbutton
@@ -1101,13 +1123,13 @@
\global\let\FLOWsplity\@@FLOTy
\doloop
{\bgroup
- \scratchcounter=\FLOWmaxwidth
- \advance\scratchcounter by -\@@FLOTx
- \advance\scratchcounter by 1
+ \scratchcounter\FLOWmaxwidth
+ \advance\scratchcounter -\@@FLOTx
+ \advance\scratchcounter \plusone
\ifnum\scratchcounter<\@@FLOTnx\edef\@@FLOTnx{\the\scratchcounter}\fi
- \scratchcounter=\FLOWmaxheight
- \advance\scratchcounter by -\@@FLOTy
- \advance\scratchcounter by 1
+ \scratchcounter\FLOWmaxheight
+ \advance\scratchcounter -\@@FLOTy
+ \advance\scratchcounter \plusone
\ifnum\scratchcounter<\@@FLOTny\edef\@@FLOTny{\the\scratchcounter}\fi
#1% does something with the float, or not
\egroup
@@ -1129,7 +1151,7 @@
\def\dododoFLOWcharts[#1][#2]%
{\bgroup
\@@FLOTvoor
- \doifnot{\@@FLOTmarkering}{\v!aan}{\let\cuthbox\hbox}%
+ \doifnot\@@FLOTmarkering\v!aan{\let\cuthbox\hbox}%
\cuthbox
{\@@FLOTcommando
{\FLOWchart[#1][#2,
@@ -1188,7 +1210,7 @@
%D \def\Whow#1%
%D {\ifnum\currentFLOWset=1 \framed{Some Chart}\fi}
%D
-%D \handleFLOWset[convert-en] % [tag]
+%D \FLOWset[convert-en] % [tag]
%D
%D \def\Whow#1%
%D {\setuphead[status=hoog]
@@ -1196,13 +1218,13 @@
%D \centerbox{#1}
%D \stopstandardmakeup}
%D
-%D \handleFLOWset[convert-en] % [tag]
+%D \FLOWset[convert-en] % [tag]
%D \stoptypen
-\def\startFLOWset%
+\def\startFLOWset
{\dodoubleempty\dostartFLOWset}
-\def\dostartFLOWset[#1][#2]#3\stopFLOWset% tag name data
+\def\dostartFLOWset[#1][#2]#3\stopFLOWset % tag name data
{\ifsecondargument
\long\setvalue{\@FLOX@#1}{\dohandleFLOWset{#1}{#2}{#3}}%
\else
@@ -1211,7 +1233,7 @@
\long\def\dohandleFLOWset#1#2#3% tag name data
{\bgroup
- \def\subFLOWchart%
+ \def\subFLOWchart
{\dodoubleempty\dosubFLOWchart}%
\def\dosubFLOWchart[##1][##2]% subtag settings
{\ifsecondargument
diff --git a/tex/context/base/m-graph.tex b/tex/context/base/m-graph.tex
new file mode 100644
index 000000000..9b22ac078
--- /dev/null
+++ b/tex/context/base/m-graph.tex
@@ -0,0 +1,232 @@
+%D \module
+%D [ file=m-graph,
+%D version=2000.08.06,
+%D title=\CONTEXT\ Extra Modules,
+%D subtitle=\METAPOST\ graph module support,
+%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.
+
+%D I finally finished graph support, if only because I could
+%D not stand the idea that Karel Wesseling would revert to
+%D \PiCTeX.
+
+% pre 2000.08.06 version
+%
+% \forceMPTEXgraphictrue
+%
+% \appendtoks
+% initialize_numbers ; % make sure that pseudo typesetting is set up
+% input graph ; % load the graph package
+% Autoform := "@g" ; % change the % template char into @
+% \to \MPinitializations
+
+%D The latest version does things more automatically (and
+%D efficiently when no text processing is needed). For
+%D definitions embedded in your document, you need to
+%D use \type {@} as template character, in external files,
+%D \type {%} is also supported.
+
+\appendtoks input graph ; \to \MPinitializations
+
+%D Graphics that have \type {begingraph} in them are
+%D recognized as such and force handling of embedded \TEX\
+%D code.
+
+\forceMPTEXcheck{begingraph}
+
+%D If you run into troubles, try:
+%D
+%D \starttypen
+%D \forceMPTEXgraphictrue
+%D \stoptypen
+%D
+%D A demo can be run with:
+%D
+%D \starttypen
+%D texexec --mode=demo --pdf m-graph
+%D \stoptypen
+
+% No longer needed, since John will fix it.
+%
+% %D For the moment we need the following patch. Adam T. Lindsay
+% %D found out that the following code produced an error:
+% %D
+% %D \starttypen
+% %D \startMPcode
+% %D draw begingraph(130mm,35mm);
+% %D setrange(0,0,10,22000);
+% %D glabel.lft(btex {correct 0--22000} etex rotated 90, OUT);
+% %D autogrid(itick.bot,grid.lft) withcolor .75white ;
+% %D endgraph;
+% %D \stopMPcode
+% %D
+% %D \startMPcode
+% %D draw begingraph(130mm,35mm);
+% %D setrange(0,50,10,22000);
+% %D glabel.lft(btex {wrong 50--22000} etex rotated 90, OUT);
+% %D autogrid(itick.bot,grid.lft) withcolor .75white ;
+% %D endgraph;
+% %D \stopMPcode
+% %D
+% %D \startMPcode
+% %D draw begingraph(130mm,35mm);
+% %D setrange(0,110,10,30000);
+% %D glabel.lft(btex {failed 110--22000} etex rotated 90, OUT);
+% %D autogrid(itick.bot,grid.lft) withcolor .75white ;
+% %D endgraph;
+% %D \stopMPcode
+% %D \stoptypen
+% %D
+% %D The bug is a rather nasty one and needs some tweaking in
+% %D the low level graph code. John Hobby suggested for the
+% %D moment to initialize \type {setrange} as follows:
+% %D
+% %D \starttypen
+% %D setrange(0,0,"22000","22000")
+% %D \stoptypen
+% %D
+% %D Folowing this suggesion, I provide the following
+% %D extension:
+%
+% % \appendtoks
+% def begingraph(expr w, h) =
+% begingroup
+% save X_, Y_, Gfin_, Gcur_, Gcbb_, Gneedgr_, Gneedfr_, Gdidsc_;
+% save Gdpic_, Gppic_, Ggl_, Garw_;
+% picture Gfin_, Gcur_, Gcbb_, Gdpic_, Gppic_, Ggl_[];
+% boolean Gneedgr_, Gneedfr_, Gdidsc_;
+% Gfin_ = nullpicture;
+% Gcur_ = nullpicture;
+% Gcbb_ = nullpicture;
+% X_.ctyp = Y_.ctyp = linear;
+% Z_.gdim = (w,h);
+% X_.sc = Y_.sc = 0;
+% Gneedgr_ = true;
+% Gneedfr_ = true;
+% Gdidsc_ = false;
+% Gdpic_ = nullpicture;
+% Garw_ = 0;
+% scantokens everybegingraph ;
+% enddef;
+%
+% boolean fixsetrange ; fixsetrange := true ;
+%
+% vardef dosetrange(text t) =
+% interim warningcheck:=0;
+% save r_; r_=0;
+% string r_[]s;
+% for x_=
+% for p_=t: if pair p_: xpart p_, ypart fi p_, endfor:
+% r_[incr r_] if string x_: s fi = x_;
+% if r_>2:
+% Gsetr_ if r_=3: X_(Gxcvlin_) else: Y_(Gycvlin_) fi(
+% r_[r_-2] if unknown r_[r_-2]: s fi, x_);
+% fi
+% exitif r_=4;
+% endfor
+% enddef;
+%
+% vardef setrange(text t) =
+% if fixsetrange : dosetrange(0,0,20000,20000) ; fi ;
+% dosetrange(t) ;
+% enddef ;
+%
+% if unknown everybegingraph :
+% string everybegingraph ;
+% % everybegingraph := "setrange(0,0,20000,20000)" ;
+% fi ;
+% \to \MPinitializations
+
+\appendtoks
+ % @# is X_ or Y_; $ is Gxcvlin_ or Gycvlin_; l and h are numeric or string
+ % It would not be OK to set (@#low,@#high) to a pair expression because $ might
+ % try to rescale @#low when evaluating the right-hand side for @#high.
+ vardef Gsetr_@#(suffix $)(expr l, h) =
+ Gclbnds_@# ;
+ if @#ctyp>0 :
+ @#low = if abs @#ctyp<>log: $ fi Mlog_Str l ;
+ @#high = if abs @#ctyp<>log: $ fi Mlog_Str h ;
+ else :
+ -@#high = if abs @#ctyp<>log: $ fi Mlog_Str l ;
+ -@#low = if abs @#ctyp<>log: $ fi Mlog_Str h ;
+ fi
+ enddef ;
+\to \MPinitializations
+
+\doifnotmode {demo} {\endinput}
+
+%D You need to have the data files in your path,
+%D otherwise the run is aborted.
+
+\doiffileelse {agepop91.d}
+ {} {\writestatus{graph}{no data files found}\wait\end}
+
+%D The test:
+
+\starttext
+
+\startMPpage
+draw begingraph(3in,2in);
+ gdraw "agepop91.d";
+ endgraph;
+\stopMPpage
+
+\startMPpage
+draw begingraph(3in,2in);
+ gdraw "agepop91.d" plot btex$\bullet$etex;
+ endgraph;
+\stopMPpage
+
+\startMPpage
+draw begingraph(3in,2in);
+ glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT);
+ glabel.bot(btex Age in years etex, OUT);
+ gdraw "agepopm.d";
+ endgraph;
+\stopMPpage
+
+\startMPpage
+draw begingraph(3in,2in);
+ glabel.lft(btex \vbox{\hbox{Population} \hbox{in millions}} etex, OUT);
+ glabel.bot(btex Age in years etex, OUT);
+ setrange(origin, whatever,whatever);
+ gdraw "agepopm.d";
+ endgraph;
+\stopMPpage
+
+\startMPpage
+draw begingraph(2.3in,2in);
+ setcoords(log,log);
+ glabel.lft(btex Seconds etex,OUT);
+ glabel.bot(btex Matrix size etex,
+ OUT);
+ gdraw "matmul.d" dashed evenly;
+ glabel.ulft(btex Standard etex,8);
+ gdraw "matmul.d";
+ glabel.lrt(btex Strassen etex,7);
+ endgraph;
+\stopMPpage
+
+\startMPpage
+draw begingraph(6.5cm,4.5cm);
+ setrange(80,0, 90,whatever);
+ glabel.bot(btex Year etex, OUT);
+ glabel.lft(btex \vbox{\hbox{Emissions in} \hbox{thousands of}
+ \hbox{metric tons} \hbox{(heavy line)}}etex, OUT);
+ gdraw "lead.d" withpen pencircle scaled 1.5pt;
+ autogrid(,otick.lft);
+ setcoords(linear,linear);
+ setrange(80,0, 90,whatever);
+ glabel.rt(btex \vbox{\hbox{Micrograms} \hbox{per cubic}
+ \hbox{meter of air} \hbox{(thin line)}}etex, OUT);
+ gdraw "lead.d";
+ autogrid(otick.bot,otick.rt);
+ endgraph;
+\stopMPpage
+
+\stoptext
diff --git a/tex/context/base/m-newmat.tex b/tex/context/base/m-newmat.tex
index 0dd3095e2..8179af432 100644
--- a/tex/context/base/m-newmat.tex
+++ b/tex/context/base/m-newmat.tex
@@ -69,7 +69,7 @@
%D be a control sequence like \type {\over}.
\unexpanded\def\genfrac#1#2#3#4%
- {\def\!!stringa
+ {\edef\!!stringa
{#1#2}%
\expanded
{\dogenfrac{#4}%
@@ -98,6 +98,10 @@
%D
%D [TH] No need to make these \type {\unexpanded} as well.
+%\def\dfrac {\genfrac\empty\empty\empty\displaystyle}
+%\def\tfrac {\genfrac\empty\empty\empty\textstyle}
+%\def\frac {\genfrac\empty\empty\empty\donothing}
+
\def\dfrac {\genfrac{}{}{}\displaystyle}
\def\tfrac {\genfrac{}{}{}\textstyle}
\def\frac {\genfrac{}{}{}\donothing}
@@ -106,6 +110,13 @@
\def\tbinom{\genfrac()\zeropoint\textstyle}
\def\binom {\genfrac()\zeropoint\donothing}
+\def\xfrac {\genfrac{}{}{}\scriptstyle}
+\def\xxfrac{\genfrac{}{}{}\scriptscriptstyle}
+
+%D Better:
+
+\def\frac#1#2{\mathematics{\genfrac{}{}{}\donothing{#1}{#2}}}
+
%D [HH] This shows up as:
%D
%D \startbuffer
@@ -118,7 +129,7 @@
%D \getbuffer
%D \macros
-%D {text}
+%D {text}
%D
%D [TH] \type {\text} is a command to typeset more or less
%D ordinary text inside of super- and sub|-|scripts. It has to
@@ -126,23 +137,35 @@
%D quite slow. \type {\text} kind of replaces \CONTEXT's \type
%D {\mathstyle} command.
-\unexpanded\def\text
- {\ifmmode\@EA\dotext\else\@EA\hbox\fi}
-
-\def\dotext#1%
- {\mathchoice
- {\dodotext\displaystyle\textface {#1}}%
- {\dodotext\textstyle \textface {#1}}%
- {\dodotext\textstyle \scriptface {#1}}%
- {\dodotext\textstyle \scriptscriptface{#1}}}
-
-\def\dodotext#1#2#3% no \everymath !
- %{\hbox{\everymath{#1}\switchtobodyfont [#2]#3}} % 15 sec
- %{\hbox{\everymath{#1}\setcurrentfontbody {#2}#3}} % 3 sec (no math)
- {\hbox{\everymath{#1}\fastswitchtobodyfont{#2}#3}} % 10 sec
+%D [HH] This macro is now also moved to the core, but we
+%D keep it here as well for completeness.
+%D
+%D \startypen
+%D \unexpanded\def\mathtext
+%D {\mathortext\domathtext\hbox} % {\ifmmode\@EA\dotext\else\@EA\hbox\fi}
+%D
+%D \def\domathtext#1%
+%D {\mathchoice
+%D {\dodomathtext\displaystyle\textface {#1}}%
+%D {\dodomathtext\textstyle \textface {#1}}%
+%D {\dodomathtext\textstyle \scriptface {#1}}%
+%D {\dodomathtext\textstyle \scriptscriptface{#1}}}
+%D
+%D \def\dodomathtext#1#2#3% no \everymath !
+%D %{\hbox{\everymath{#1}\switchtobodyfont [#2]#3}} % 15 sec
+%D {\hbox{\everymath{#1}\setcurrentfontbody{#2}#3}} % 3 sec (no math)
+%D \stoptypen
+
+%D [HH] We use the following indirectness because \type {\text}
+%D is a natural candidate for user macros (actually, it is
+%D used in some modules).
+%D
+%D \starttypen
+%D \let\text\mathtext
+%D \stoptypen
-%D [HH] Actually, this switch is not that slow when typefaces
-%D are used. If needed this macro can be sped up.
+%D [HH] Actually, the font switch is not that slow when
+%D typefaces are used. If needed this macro can be sped up.
%D
%D \startbuffer
%D ordinary text $x^{\text{extra ordinary text}}$
@@ -159,7 +182,7 @@
%D defined in Plain \TEX). It allows to get a math character
%D inserted as if it was a text character.
-\gdef\mathhexbox#1#2#3{\text{$\m@th\mathchar"#1#2#3$}}
+\gdef\mathhexbox#1#2#3{\mathtext{$\m@th\mathchar"#1#2#3$}}
%D \macros
%D {boxed}
@@ -221,16 +244,6 @@
%D
%D \getbuffer
-%D \macros
-%D {fraktur, gothic, caligraphic}
-%D
-%D [TH] A redefinition that uses \type {\text} instead of
-%D \type {\hbox}, adding auto||scaling in super- and subscripts
-
-\def\fraktur #1{\ifmmode\@EA\text\fi{{\frak#1}}}
-\def\gothic #1{\ifmmode\@EA\text\fi{{\goth#1}}}
-\def\caligraphic#1{\ifmmode\@EA\text\fi{{\cal #1}}}
-
\protect \endinput
%D \macros
@@ -241,7 +254,7 @@
%D support an optional argument between either \type {{}} or
%D \type {[]}.
-\def\startsubarray%
+\def\startsubarray
{\doifnextcharelse\bgroup
\simplestartsubarray{\dosingleempty\complexstartsubarray}}
@@ -256,11 +269,11 @@
\lineskiplimit\lineskip
\ialign\bgroup\ifx c#1\hfil\fi$\m@th\scriptstyle##$\hfil\crcr}
-\def\stopsubarray%
+\def\stopsubarray
{\crcr\egroup
\egroup}
-\def\startsubstack%
+\def\startsubstack
{\doifnextcharelse\bgroup
\simplestartsubstack{\dosingleempty\complexstartsubstack}}
diff --git a/tex/context/base/m-pictex.tex b/tex/context/base/m-pictex.tex
index db06ffd5c..85ae90118 100644
--- a/tex/context/base/m-pictex.tex
+++ b/tex/context/base/m-pictex.tex
@@ -102,11 +102,11 @@
%D \DIMENSIONS !
%D
%D \starttypen
-%D \def\newdimen%
+%D \def\newdimen
%D {\ifnum\count11>\count12
-%D \let\next=\temporarynewskip
+%D \let\next\temporarynewskip
%D \else
-%D \let\next=\temporarynewdimen
+%D \let\next\temporarynewdimen
%D \fi
%D \next}
%D \stoptypen
diff --git a/tex/context/base/m-steps.tex b/tex/context/base/m-steps.tex
index 00a8c1ae3..b69aa7ecc 100644
--- a/tex/context/base/m-steps.tex
+++ b/tex/context/base/m-steps.tex
@@ -391,11 +391,12 @@
\newcounter\cellcounter
\newcounter\textcounter
-\def\startSTEPchart%
+\def\startSTEPchart
{\dosingleempty\dostartSTEPchart}
\long\def\dostartSTEPchart[#1]#2\stopSTEPchart
- {\ifinsidefloat \else
+ {\ifinsidefloat
+ \else
\witruimte
\@@STPCvoor
\startbaselinecorrection
@@ -414,14 +415,10 @@
\stopMPdrawing
\initializeSTEP
\initializeSTPC
-\global
- \chardef\somestepboxone=1
-\global
- \chardef\sometextboxone=1
-\global
- \chardef\somestepboxtwo\somestepboxone
-\global
- \chardef\sometextboxtwo\sometextboxone
+ \global\chardef\somestepboxone\plusone
+ \global\chardef\sometextboxone\plusone
+ \global\chardef\somestepboxtwo\somestepboxone
+ \global\chardef\sometextboxtwo\sometextboxone
\def\startlines{\bgroup\setupSTEPlines}%
\def\stoplines {\egroup}%
\def\cells{\dosingleempty\dostepchartcells}
@@ -430,10 +427,8 @@
\def\text {\dosingleempty\dotext}%
\def\docell[##1]{\dostepchartcells[##1]{}}%
\def\dotext[##1]{\dostepcharttexts[##1]{}}
-\doglobal
- \newcounter\cellcounter
-\doglobal
- \newcounter\textcounter
+ \doglobal\newcounter\cellcounter
+ \doglobal\newcounter\textcounter
\let\dostepchartcells\doSTEPchartcellsA
\let\dostepcharttexts\doSTEPcharttextsA
{#2} % pass one: cells and texts {} keeps setting local
@@ -441,10 +436,8 @@
nofcells := \cellcounter ;
analyze_step_chart ;
\stopMPdrawing
-\doglobal
- \newcounter\cellcounter
-\doglobal
- \newcounter\textcounter
+ \doglobal\newcounter\cellcounter
+ \doglobal\newcounter\textcounter
\let\dostepchartcells\doSTEPchartcellsB
\let\dostepcharttexts\doSTEPcharttextsB
{#2} % pass two: lines
@@ -457,11 +450,13 @@
anchor_box(\MPpos{\stepchartprefix origin}) ;
\stopMPdrawing
\MPdrawingdonetrue
- \setbox0=\vbox{\MPstaticgraphictrue\getMPdrawing}%
+ \doifelse\@@STPCmethode{0}
+ {\setbox0\null}
+ {\setbox0\vbox{\MPstaticgraphictrue\getMPdrawing}}%
\resetMPdrawing
- \setbox2=\vbox
+ \setbox2\vbox
{\offinterlineskip
- \scratchdimen=\@@STPChoogte
+ \scratchdimen\@@STPChoogte
\advance\scratchdimen\@@STPCoffset
\advance\scratchdimen\@@STPCoffset
\ifcase\sometextboxone \box\textboxone \vskip\scratchdimen \fi
@@ -470,7 +465,7 @@
\ifcase\sometextboxtwo \box\textboxtwo \vskip\@@STPCvoffset \fi
\global\resetbox\stepboxone \global\resetbox\stepboxtwo % needed indeed
\global\resetbox\textboxone \global\resetbox\textboxtwo % needed indeed
-% \kern-\scratchdimen}%
+ %\kern-\scratchdimen % no, instead:
\vskip-\lastskip}
\hbox
{\scratchdimen\wd0
@@ -491,24 +486,23 @@
{% synchronize texts
\doSTEPchartcellsAB[#1]{#2}{#3}%
% package steps
- \setbox0=\hbox{\doifsomething{#2}{\@@stepcell{#2}}}%
- \setbox2=\hbox{\doifsomething{#3}{\@@stepcell{#3}}}%
+ \setbox0\hbox{\doifsomething{#2}{\@@stepcell{#2}}}%
+ \setbox2\hbox{\doifsomething{#3}{\@@stepcell{#3}}}%
\ifdim\wd0>\zeropoint \!!doneafalse \else \!!doneatrue \fi
\ifdim\wd2>\zeropoint \!!donebfalse \else \!!donebtrue \fi
\ifdim\wd0>\wd2
- \setbox2=\hbox to \wd0{\hss\box2\hss}%
+ \setbox2\hbox to \wd0{\hss\box2\hss}%
\else
- \setbox0=\hbox to \wd2{\hss\box0\hss}%
+ \setbox0\hbox to \wd2{\hss\box0\hss}%
\fi
\if!!donea
\startMPdrawing
cells[t][\cellcounter] := nullpicture ;
\stopMPdrawing
\else
-\global
- \chardef\somestepboxone=0
+ \global\chardef\somestepboxone\zerocount
\edef\stepidentifier{\stepchartprefix\cellcounter-t-c}%
- \setbox0=\hbox{\hpos{\stepidentifier}{\box0}}%
+ \setbox0\hbox{\hpos{\stepidentifier}{\box0}}%
\bgroup
\iffirstargument\setupSTEPcells[#1]\fi\initializeSTEC
\startMPdrawing
@@ -522,10 +516,9 @@
cells[b][\cellcounter] := nullpicture ;
\stopMPdrawing
\else
-\global
- \chardef\somestepboxtwo=0
+ \global\chardef\somestepboxtwo\zerocount
\edef\stepidentifier{\stepchartprefix\cellcounter-b-c}%
- \setbox2=\hbox{\hpos{\stepidentifier}{\box2}}%
+ \setbox2\hbox{\hpos{\stepidentifier}{\box2}}%
\bgroup
\iffirstargument\setupSTEPcells[#1]\fi\initializeSTEC
\startMPdrawing
@@ -534,13 +527,11 @@
\stopMPdrawing
\egroup
\fi
-\global
- \setbox\stepboxone=\hbox
+ \global\setbox\stepboxone\hbox
{\ifdim\wd\stepboxone>\zeropoint
\box\stepboxone\hskip\@@STPChoffset\else
\fi\box0}%
-\global
- \setbox\stepboxtwo=\hbox
+ \global\setbox\stepboxtwo\hbox
{\ifdim\wd\stepboxtwo>\zeropoint
\box\stepboxtwo\hskip\@@STPChoffset\else
\fi\box2}%
@@ -556,10 +547,9 @@
{\ifnum\cellcounter>\textcounter
\texts{}{}\else\exitloop
\fi}%
-\doglobal
- \increment\cellcounter}
+ \doglobal\increment\cellcounter}
-\def\doSTEPchartcellsBA%
+\def\doSTEPchartcellsBA
{\scratchtoks\stepchartbuffer
\stepchartbuffer\emptytoks
\the\scratchtoks}
@@ -584,23 +574,21 @@
\def\dodoSTEPcharttextsA#1#2#3#4% #1=number #2=setup
{\dodoSTEPcharttextsAB{#1}{#2}{#3}{#4}\dodoSTEPcharttextsA
\ifnum\textcounter>\cellcounter\relax
-\doglobal
- \decrement\textcounter\relax
+ \doglobal\decrement\textcounter\relax
\else
- \setbox0=\hbox{\doifsomething{#3}{\@@steptext{#3}}}%
- \setbox2=\hbox{\doifsomething{#4}{\@@steptext{#4}}}%
+ \setbox0\hbox{\doifsomething{#3}{\@@steptext{#3}}}%
+ \setbox2\hbox{\doifsomething{#4}{\@@steptext{#4}}}%
\ifdim\wd0>\zeropoint \!!doneafalse \else \!!doneatrue \fi
\ifdim\wd2>\zeropoint \!!donebfalse \else \!!donebtrue \fi
\if!!donea
- \setbox0=\hbox to \@@STPChoffset{\hss}%
+ \setbox0\hbox to \@@STPChoffset{\hss}%
\startMPdrawing
texts[t][#1][\textcounter] := nullpicture ;
\stopMPdrawing
- \else
-\global
- \chardef\sometextboxone=0
+ \else
+ \global\chardef\sometextboxone\zerocount
\edef\stepidentifier{\stepchartprefix#1-\textcounter-t-t}%
- \setbox0=\hbox to \@@STPChoffset
+ \setbox0\hbox to \@@STPChoffset
{\hss\hpos{\stepidentifier}{\box0}\hss}%
\bgroup
\setupSTEPtexts[#2]\initializeSTET
@@ -611,15 +599,14 @@
\egroup
\fi
\if!!doneb
- \setbox2=\hbox to \@@STPChoffset{\hss}%
+ \setbox2\hbox to \@@STPChoffset{\hss}%
\startMPdrawing
texts[b][#1][\textcounter] := nullpicture ;
\stopMPdrawing
\else
-\global
- \chardef\sometextboxtwo=0
+ \global\chardef\sometextboxtwo\zerocount
\edef\stepidentifier{\stepchartprefix#1-\textcounter-b-t}%
- \setbox2=\hbox to \@@STPChoffset
+ \setbox2\hbox to \@@STPChoffset
{\hss\hpos{\stepidentifier}{\box2}\hss}%
\bgroup
\setupSTEPtexts[#2]\initializeSTET
@@ -629,11 +616,9 @@
\stopMPdrawing
\egroup
\fi
-\global
- \setbox\textboxone=\hbox
+ \global\setbox\textboxone\hbox
{\hbox to \wd\stepboxone{\box\textboxone\hss}\box0}
-\global
- \setbox\textboxtwo=\hbox
+ \global\setbox\textboxtwo\hbox
{\hbox to \wd\stepboxtwo{\box\textboxtwo\hss}\box2}
\fi}
@@ -643,8 +628,7 @@
\def\dodoSTEPcharttextsB#1#2#3#4% #1=number #2=setup
{\dodoSTEPcharttextsAB{#1}{#2}{#3}{#4}\dodoSTEPcharttextsB
\ifnum\textcounter>\cellcounter\relax
-\doglobal
- \decrement\textcounter\relax
+ \doglobal\decrement\textcounter\relax
\else
\bgroup
\initializeSTEL
@@ -656,46 +640,43 @@
\fi}
\def\dodoSTEPcharttextsAB#1#2#3#4#5% #1=number #2=setup
- {%
-\doglobal
- \increment\textcounter\relax
+ {\doglobal\increment\textcounter\relax
\ifnum\textcounter>\cellcounter\relax
\@EA\appendtoks\@EA#5\@EA{#1}{#2}{#3}{#4}\to\stepchartbuffer
\fi}
\def\MPtextsgraphic
- {image ( drawshape (
+ {image(drawshape(
\@@STETvariant, pxy enlarged (-.5*\@@STEToffset),
\@@STETlijndikte, \MPcolor{\@@STETkaderkleur},
\MPcolor{\@@STETachtergrondkleur} ) )}
\def\MPcharttoplinesgraphic#1#2%
- {image ( drawline (
+ {image(drawline(
\@@STELvariant, get_step_chart_top_line(#1,#2),
\@@STELlijndikte, \MPcolor{\@@STELkleur} ) )}
\def\MPchartbotlinesgraphic#1#2%
- {image ( drawline (
+ {image(drawline(
\@@STELvariant, get_step_chart_bot_line(#1,#2),
\@@STELlijndikte, \MPcolor{\@@STELkleur} ) )}
%D \XML\ coupling.
-\defineXMLpickup
- [stepchart] [@@STPC]
+\defineXMLpickup[stepchart][@@STPC]
{\bgroup
\defineXMLpush[top]%
\defineXMLpush[bot]%
- \defineXMLenvironment [lines] [@@STEL]
+ \defineXMLenvironment[lines][@@STEL]
{\expanded{\startlines[\theXMLarguments{@@STEL}]}}
{\stoplines}%
- \defineXMLenvironment [cells] [@@STEC]
+ \defineXMLenvironment[cells][@@STEC]
{\XMLerase{top}\XMLerase{bot}}
{\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{top}}{\XMLpop{bot}}}}%
- \defineXMLenvironment [texts] [@@STET]
+ \defineXMLenvironment[texts][@@STET]
{\XMLerase{top}\XMLerase{bot}}
{\expanded{\texts[\theXMLarguments{@@STET}]{\XMLpop{top}}{\XMLpop{bot}}}}%
- \defineXMLenvironmentpush [cell] [@@STEC]
+ \defineXMLenvironmentpush[cell][@@STEC]
{\XMLerase{cell}}
{\expanded{\cell [\theXMLarguments{@@STEC}]{\XMLpop{cell}}}}%
\defineXMLenvironmentpush [text] [@@STET]
@@ -721,7 +702,14 @@
{\dodoubleempty\dostartSTEPaligntable[1]}
\def\dostartSTEPaligntable[#1][#2]#3\stopSTEPaligntable % flag settings data
- {\ifinsidefloat \else \witruimte \@@STPTvoor \startbaselinecorrection \fi
+ {\ifinsidefloat
+ \else
+ \witruimte
+ \@@STPTvoor
+ \startbaselinecorrection
+ \setlocalhsize
+ \noindent
+ \fi
\vbox\bgroup
\setupSTEPtables[#2]%
\forgetall
@@ -740,9 +728,9 @@
\def\cells {\dosingleempty\docells}%
\def\text {\dosingleempty\dotext}%
% first graphic pass, also trial pass
- \global\dimen1=\zeropoint
- \global\dimen3=\zeropoint
- \global\dimen5=\zeropoint
+ \global\dimen1\zeropoint
+ \global\dimen3\zeropoint
+ \global\dimen5\zeropoint
\def\docell[##1]%
{\docells[##1]{}{}}%
\def\docells[##1]##2##3##4%
@@ -758,7 +746,7 @@
\stopMPdrawing
\egroup
\def\do####1####2%
- {\setbox\scratchbox=\hbox{\@@stepfake{####2}}%
+ {\setbox\scratchbox\hbox{\@@stepfake{####2}}%
\ifdim\wd\scratchbox>\dimen####1\global\dimen####1=\wd\scratchbox\fi}%
\ifcase#1\else\do1{##2}\do3{##3}\fi\do5{##4}}%
\def\dotext[##1]##2%
@@ -791,7 +779,9 @@
anchor_box(\MPpos{\steptableprefix origin}) ;
\stopMPdrawing
\MPdrawingdonetrue
- \setbox0=\vbox{\MPstaticgraphictrue\getMPdrawing}%
+ \doifelse\@@STPTmethode{0}
+ {\setbox0\null}
+ {\setbox0\vbox{\MPstaticgraphictrue\getMPdrawing}}%
\resetMPdrawing
% typesetting pass
\dimen6=\@@STPTafstand \dimen6=2\dimen6
@@ -809,7 +799,7 @@
{\doglobal\increment\cellcounter
\def\do####1####2####3####4% % strut really needed there !
{\hbox to \dimen####1{####2\@@stepfake{####3}\strut####4}}%
- \setbox8=\hbox
+ \setbox8\hbox
{\ifcase#1\else
\do1\hss{##2}\relax \hskip\@@STPTafstand
\do3\hss{##3}\hss \hskip\@@STPTafstand
@@ -824,7 +814,7 @@
\hskip\dimen8
\advance\hsize-\dimen8
\advance\hsize-\dimen6 % twice the offset
- \setbox0=\hbox{\@@steptext{##2}}%
+ \setbox0\hbox{\@@steptext{##2}}%
% to do
% \ifdim\wd0>\hsize
% \setbox0=\vbox{\@@steptext{##2}}%
@@ -835,7 +825,7 @@
\egroup
\nointerlineskip
\kern\@@STPTvoffset}
- \setbox2=\vbox
+ \setbox2\vbox
{\doglobal\newcounter\cellcounter
#3\kern-\@@STPTvoffset}
\hbox
@@ -853,35 +843,33 @@
\@@STELvariant, get_step_table_line(\cellcounter),
\@@STELlijndikte, \MPcolor{\@@STELkleur} ) )}
-\defineXMLpickup
- [steptable] [@@STPT]
+\defineXMLpickup[steptable][@@STPT]
{\bgroup
- \defineXMLenvironment [lines] [@@STEL]
+ \defineXMLenvironment[lines][@@STEL]
{\expanded{\startlines[\theXMLarguments{@@STEL}]}}
{\stoplines}%
- \defineXMLargument [cell] [@@STEC]
+ \defineXMLargument[cell][@@STEC]
{\expanded{\cell[\theXMLarguments{@@STEC}]}}%
- \defineXMLargument [text] [@@STET]
+ \defineXMLargument[text][@@STET]
{\expanded{\text[\theXMLarguments{@@STET}]}}%
- \defineXMLargument [prep]
+ \defineXMLargument[prep]
{\prep}%
\expanded{\startSTEPtable[\theXMLarguments{@@STPT}]}}
{\stopSTEPtable
\egroup}
-\defineXMLpickup
- [stepaligntable] [@@STPT]
+\defineXMLpickup[stepaligntable][@@STPT]
{\bgroup
- \defineXMLenvironment [lines] [@@STEL]
+ \defineXMLenvironment[lines][@@STEL]
{\expanded{\setupSTEPlines[\theXMLarguments{@@STEL}]}}
{}%
\defineXMLpush[c1]\defineXMLpush[c2]\defineXMLpush[c3]%
- \defineXMLenvironment [cells] [@@STEC]
+ \defineXMLenvironment[cells][@@STEC]
{\XMLerase{c1}\XMLerase{c1}\XMLerase{c3}}
{\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{c1}}{\XMLpop{c2}}{\XMLpop{c3}}}}%
- \defineXMLargument [text] [@@STET]
+ \defineXMLargument[text][@@STET]
{\expanded{\text[\theXMLarguments{@@STET}]}}%
- \defineXMLargument [prep]
+ \defineXMLargument[prep]
{\prep}%
\expanded{\startSTEPaligntable[\theXMLarguments{@@STPT}]}}
{\stopSTEPaligntable
diff --git a/tex/context/base/math-ams.tex b/tex/context/base/math-ams.tex
index 55e5596d9..6bdea52a5 100644
--- a/tex/context/base/math-ams.tex
+++ b/tex/context/base/math-ams.tex
@@ -15,7 +15,7 @@
% maybe we should just include these into the default tex one
-\definefamilysynonym [ams] [blackboard] [mb]
+%definefamilysynonym [ams] [blackboard] [mb]
\startmathcollection [default] % [ams]
@@ -33,7 +33,7 @@
\stopmathcollection
-\startmathcollection[default]
+\startmathcollection[default] % [ams]
\definemathsymbol [internalAnd] [rel] [operators] ["26]
@@ -181,6 +181,17 @@
\startmathcollection [default] % [ams]
+\definemathcommand [integers] {\blackboard{Z}}
+\definemathcommand [reals] {\blackboard{R}}
+\definemathcommand [rationals] {\blackboard{Q}}
+\definemathcommand [naturalnumbers] {\blackboard{N}}
+\definemathcommand [complexes] {\blackboard{C}}
+\definemathcommand [primes] {\blackboard{P}}
+
+\stopmathcollection
+
+\startmathcollection [default] % [ams]
+
\definemathsymbol [lvertneqq] [rel] [mb] ["00]
\definemathsymbol [gvertneqq] [rel] [mb] ["01]
\definemathsymbol [nleq] [rel] [mb] ["02]
diff --git a/tex/context/base/math-ini.tex b/tex/context/base/math-ini.tex
index eae2b41ef..009c33df0 100644
--- a/tex/context/base/math-ini.tex
+++ b/tex/context/base/math-ini.tex
@@ -25,12 +25,11 @@
\unprotect
-\def\@mt@{@mt@} % math token
-\def\@mt@{@mc@} % math character
-\def\@mh@{@mh@} % math handler
+\def\@ml@{@ml@} % math list (used for collection)
\def\@mf@{@mf@} % math family
-\def\@mc@{@mc@} % math class
-\def\@ml@{@mc@} % math list
+%def\@mh@{@mh@} % math handler (not used)
+\def\@mt@{@mt@} % math token
+\def\@mc@{@mc@} % math collection
\def\@@mathlimopcomm#1{\mathop{#1}\limits}
\def\@@mathnolopcomm#1{\mathop{#1}\nolimits}
@@ -158,7 +157,7 @@
\let\dohandlecommand\dohandlemathtoken
-\def\definefamilysynonym%
+\def\definefamilysynonym
{\dotripleempty\dodefinefamilysynonym}
\def\dodefinefamilysynonym[#1][#2][#3]% [mathcollection] [] []
@@ -251,8 +250,8 @@
{\setmathtoks
\ifdynamicmathfamilies \let\purefamilyhex\relax \fi
\doifnumberelse{#1}
- {\scratchcounter=#1}
- {\scratchcounter=\@EA`\string#1}%
+ {\scratchcounter#1}
+ {\scratchcounter\@EA`\string#1}%
\expanded
{\appendtoks
\ifsixthargument
@@ -311,29 +310,26 @@
\doifundefined{\@ml@\mathcollection}
{\expandafter\newtoks\csname\@ml@\mathcollection\endcsname}}
-\def\stopmathcollection%
+\def\stopmathcollection
{\popmacro\mathcollection}
\def\startrawmathcollection%
- {%\pushmacro\iftracemathcollection % does not work in new push
- %\tracemathcollectionfalse
- \startmathcollection}
+ {\startmathcollection}
\def\stoprawmathcollection%
- {%\popmacro\iftracemathcollection
- \stopmathcollection}
+ {\stopmathcollection}
\newtoks\mathtoks
-\def\setmathtoks%
+\def\setmathtoks
{\@EA\let\@EA\mathtoks\csname\@ml@\mathcollection\endcsname}
\def\currentmathcollection{\mathcollection}
-\def\nomathcollection{\s!default}
+\let\nomathcollection\s!default
\def\enablemathcollection[#1]%
- {\doifnot{#1}{\s!default}
+ {\doifnot{#1}\s!default
{\setmathcollection\s!default
\the\csname\@ml@\mathcollection\endcsname}%
\setmathcollection{#1}%
@@ -355,6 +351,7 @@
\appendtoks\autoenablemathcollection\to\mathstrategies
\fetchruntimecommand \showmathcharacters {\f!mathprefix\s!run}
+\fetchruntimecommand \showmathtoken {\f!mathprefix\s!run}
%D \macros
%D {ifmathpunctuation, enablemathpunctuation,
@@ -381,7 +378,6 @@
\fi}
\unexpanded\def\dohandlemathpunctuation#1#2% \if fails in mathml interval
-% {\def\next{\csname\if\space\nexttoken#2\else#1\fi\endcsname}%
{\def\next{\csname\ifx\space\nexttoken#2\else#1\fi\endcsname}%
\futurelet\nexttoken\next}
@@ -393,6 +389,10 @@
%D
%D \blanko{\getbuffer}\blanko
+%D needed for sin, cos etc
+
+\def\mfunction#1{{\mr#1}}
+
\edef\hexmrfam {0} \edef\hexbsfam {8}
\edef\hexmifam {1} \edef\hexbifam {9}
\edef\hexsyfam {2} \edef\hexscfam {A}
@@ -423,6 +423,29 @@
\def\Angstrom{\nomathematics{\Aring}}
+%D Bold math:
+%D
+%D \starttypen
+%D \usetypescript [lucida] [texnansi]
+%D
+%D \definetypeface [boldmath] [rm] [serif]
+%D [lucida] [default] [encoding=texnansi]
+%D \definetypeface [boldmath] [tt] [mono]
+%D [lucida] [default] [encoding=texnansi]
+%D \definetypeface [boldmath] [ss] [sans]
+%D [lucida] [default] [encoding=texnansi]
+%D \definetypeface [boldmath] [mm] [boldmath]
+%D [lucida] [default] [encoding=texnansi]
+%D
+%D \switchtobodyfont[lucida,10pt]
+%D
+%D \showmathtoken{Gamma} $\Gamma \Delta \alpha \delta \zeta$
+%D
+%D \switchtobodyfont[boldmath,10pt]
+%D
+%D \showmathtoken{Gamma} $\Gamma \Delta \alpha \delta \zeta$
+%D \stoptypen
+
\protect \endinput
\tracemathcollectiontrue
diff --git a/tex/context/base/math-lbr.tex b/tex/context/base/math-lbr.tex
index c93f81cc2..45bfcba0a 100644
--- a/tex/context/base/math-lbr.tex
+++ b/tex/context/base/math-lbr.tex
@@ -39,6 +39,13 @@
\stopmathcollection
+% \startmathcollection[lbr]
+%
+% \definemathcharacter [:] [punct] [tf] ["3A] % unbelievable
+% \definemathcharacter [;] [punct] [tf] ["3B] % unbelievable
+%
+% \stopmathcollection
+
\startmathcollection[lbr]
\definemathsymbol [ldbrack] [open] [mi] ["82] [ex] ["82]
@@ -84,22 +91,34 @@
\stopmathcollection
-\definefamilysynonym [lbr] [ucgreek] [ex]
+\definefamilysynonym [lbr] [ucgreek] [mb]
\definefamilysynonym [lbr] [vargreek] [mi]
\startmathcollection[lbr]
-\definemathsymbol [Gamma] [alpha] [ucgreek] ["D0]
-\definemathsymbol [Delta] [alpha] [ucgreek] ["D1]
-\definemathsymbol [Theta] [alpha] [ucgreek] ["D2]
-\definemathsymbol [Lambda] [alpha] [ucgreek] ["D3]
-\definemathsymbol [Xi] [alpha] [ucgreek] ["D4]
-\definemathsymbol [Pi] [alpha] [ucgreek] ["D5]
-\definemathsymbol [Sigma] [alpha] [ucgreek] ["D6]
-\definemathsymbol [Upsilon] [alpha] [ucgreek] ["D7]
-\definemathsymbol [Phi] [alpha] [ucgreek] ["D8]
-\definemathsymbol [Psi] [alpha] [ucgreek] ["D9]
-\definemathsymbol [Omega] [alpha] [ucgreek] ["DA]
+%\definemathsymbol [Gamma] [alpha] [ucgreek] ["D0]
+%\definemathsymbol [Delta] [alpha] [ucgreek] ["D1]
+%\definemathsymbol [Theta] [alpha] [ucgreek] ["D2]
+%\definemathsymbol [Lambda] [alpha] [ucgreek] ["D3]
+%\definemathsymbol [Xi] [alpha] [ucgreek] ["D4]
+%\definemathsymbol [Pi] [alpha] [ucgreek] ["D5]
+%\definemathsymbol [Sigma] [alpha] [ucgreek] ["D6]
+%\definemathsymbol [Upsilon] [alpha] [ucgreek] ["D7]
+%\definemathsymbol [Phi] [alpha] [ucgreek] ["D8]
+%\definemathsymbol [Psi] [alpha] [ucgreek] ["D9]
+%\definemathsymbol [Omega] [alpha] [ucgreek] ["DA]
+
+\definemathsymbol [Gamma] [alpha] [ucgreek] ["00]
+\definemathsymbol [Delta] [alpha] [ucgreek] ["01]
+\definemathsymbol [Theta] [alpha] [ucgreek] ["02]
+\definemathsymbol [Lambda] [alpha] [ucgreek] ["03]
+\definemathsymbol [Xi] [alpha] [ucgreek] ["04]
+\definemathsymbol [Pi] [alpha] [ucgreek] ["05]
+\definemathsymbol [Sigma] [alpha] [ucgreek] ["06]
+\definemathsymbol [Upsilon] [alpha] [ucgreek] ["07]
+\definemathsymbol [Phi] [alpha] [ucgreek] ["08]
+\definemathsymbol [Psi] [alpha] [ucgreek] ["09]
+\definemathsymbol [Omega] [alpha] [ucgreek] ["0A]
\definemathsymbol [varGamma] [ord] [vargreek] ["00]
\definemathsymbol [varDelta] [ord] [vargreek] ["01]
@@ -115,6 +134,25 @@
\stopmathcollection
+% we define the whole lot, although only a few differ (esp dot)
+
+\startmathcollection[lbr]
+
+\definemathsymbol [acute] [accent] [tf] ["13] % mr -> tf
+\definemathsymbol [grave] [accent] [tf] ["12] % mr -> tf
+\definemathsymbol [ddot] [accent] [tf] ["7F] % mr -> tf
+\definemathsymbol [tilde] [accent] [tf] ["7E] % mr -> tf
+\definemathsymbol [bar] [accent] [tf] ["16] % mr -> tf
+\definemathsymbol [breve] [accent] [tf] ["15] % mr -> tf
+\definemathsymbol [check] [accent] [tf] ["14] % mr -> tf
+\definemathsymbol [hat] [accent] [tf] ["5E] % mr -> tf
+\definemathsymbol [vec] [accent] [mi] ["7E] % [ord]
+\definemathsymbol [dot] [accent] [tf] ["05] % mr -> tf, 5F -> 05
+\definemathsymbol [widetilde] [accent] [ex] ["65] % [ord]
+\definemathsymbol [widehat] [accent] [ex] ["62] % [ord]
+
+\stopmathcollection
+
\def\LBRroot#1#2%
{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}
\dimen@\ht\z@ \advance\dimen@-\dp\z@
diff --git a/tex/context/base/math-pln.tex b/tex/context/base/math-pln.tex
index af0d42bdb..7c8d902f2 100644
--- a/tex/context/base/math-pln.tex
+++ b/tex/context/base/math-pln.tex
@@ -204,10 +204,10 @@
\def\buildrel#1\over#2%
{\mathrel{\mathop{\kern\z@#2}\limits^{#1}}}
-\def\doteq%
+\def\doteq
{\buildrel\textstyle.\over=}
-\def\bmod%
+\def\bmod
{\nonscript
\mskip-\medmuskip
\mkern5mu
@@ -289,7 +289,7 @@
\newif\ifdt@p
-\def\displ@y%
+\def\displ@y
{\global\dt@ptrue
\openup\jot\m@th
\everycr
diff --git a/tex/context/base/math-run.tex b/tex/context/base/math-run.tex
index 4f0f61f4e..3e1cdbf6a 100644
--- a/tex/context/base/math-run.tex
+++ b/tex/context/base/math-run.tex
@@ -72,4 +72,20 @@
% \definecolor[math \purefamilyhex{mc}] [lightblue]
% \definecolor[math \purefamilyhex{md}] [lightmagenta]
+\gdef\showmathtoken#1%
+ {\starttabulate[|lT|lT|lT|l|]
+ \NC token \NC #1 \NC \NR
+ \NC collection \NC \ifcsname\@mt@\mathcollection#1\endcsname
+ \mathcollection
+ \else\ifcsname\@mt@\nomathcollection#1\endcsname
+ \nomathcollection
+ \else
+ ?%
+ \fi\fi \NC \NR
+ \NC visualization \NC \mathematics{\getvalue{#1}} \NC \NR
+ \NC definition \NC \tttf \@EA\convertcommand
+ \csname\@mt@\mathcollection#1\endcsname
+ \to \ascii \ascii \NC \NR
+ \stoptabulate}
+
\protect \endinput
diff --git a/tex/context/base/math-tex.tex b/tex/context/base/math-tex.tex
index 98680895f..602b7ec41 100644
--- a/tex/context/base/math-tex.tex
+++ b/tex/context/base/math-tex.tex
@@ -18,7 +18,7 @@
\definefamilysynonym [default] [lcgreek] [mi]
\definefamilysynonym [default] [ucgreek] [mr]
\definefamilysynonym [default] [vargreek] [mi]
-\definefamilysynonym [default] [blackboard] [mr]
+%definefamilysynonym [default] [blackboard] [mb] % extra font
\startmathcollection [default]
@@ -89,45 +89,57 @@
\stopmathcollection
-% The \mbox macro is an alternative for \hbox with a
+% The \mfunction macro is an alternative for \hbox with a
% controlable font switch.
\startmathcollection[default]
-\definemathcommand [arccos] [nolop] {\mbox{arccos}}
-\definemathcommand [arcsin] [nolop] {\mbox{arcsin}}
-\definemathcommand [arctan] [nolop] {\mbox{arctan}}
-\definemathcommand [arg] [nolop] {\mbox{arg}}
-\definemathcommand [cosh] [nolop] {\mbox{cosh}}
-\definemathcommand [cos] [nolop] {\mbox{cos}}
-\definemathcommand [coth] [nolop] {\mbox{coth}}
-\definemathcommand [cot] [nolop] {\mbox{cot}}
-\definemathcommand [csc] [nolop] {\mbox{csc}}
-\definemathcommand [deg] [nolop] {\mbox{deg}}
-\definemathcommand [det] [limop] {\mbox{det}}
-\definemathcommand [dim] [nolop] {\mbox{dim}}
-\definemathcommand [exp] [nolop] {\mbox{exp}}
-\definemathcommand [gcd] [limop] {\mbox{gcd}}
-\definemathcommand [hom] [nolop] {\mbox{hom}}
-\definemathcommand [inf] [limop] {\mbox{inf}}
-\definemathcommand [injlim] [limop] {\mbox{inj\,lim}}
-\definemathcommand [ker] [nolop] {\mbox{ker}}
-\definemathcommand [lg] [nolop] {\mbox{lg}}
-\definemathcommand [liminf] [limop] {\mbox{lim\,inf}}
-\definemathcommand [limsup] [limop] {\mbox{lim\,sup}}
-\definemathcommand [lim] [limop] {\mbox{lim}}
-\definemathcommand [ln] [nolop] {\mbox{ln}}
-\definemathcommand [log] [nolop] {\mbox{log}}
-\definemathcommand [max] [limop] {\mbox{max}}
-\definemathcommand [min] [limop] {\mbox{min}}
-\definemathcommand [projlim] [limop] {\mbox{proj\,lim}}
-\definemathcommand [Pr] [limop] {\mbox{Pr}}
-\definemathcommand [sec] [nolop] {\mbox{sec}}
-\definemathcommand [sinh] [nolop] {\mbox{sinh}}
-\definemathcommand [sin] [nolop] {\mbox{sin}}
-\definemathcommand [sup] [limop] {\mbox{sup}}
-\definemathcommand [tanh] [nolop] {\mbox{tanh}}
-\definemathcommand [tan] [nolop] {\mbox{tan}}
+\definemathcommand [arccos] [nolop] {\mfunction{arccos}}
+\definemathcommand [arcsin] [nolop] {\mfunction{arcsin}}
+\definemathcommand [arctan] [nolop] {\mfunction{arctan}}
+\definemathcommand [arg] [nolop] {\mfunction{arg}}
+\definemathcommand [cosh] [nolop] {\mfunction{cosh}}
+\definemathcommand [cos] [nolop] {\mfunction{cos}}
+\definemathcommand [coth] [nolop] {\mfunction{coth}}
+\definemathcommand [cot] [nolop] {\mfunction{cot}}
+\definemathcommand [csc] [nolop] {\mfunction{csc}}
+\definemathcommand [deg] [nolop] {\mfunction{deg}}
+\definemathcommand [det] [limop] {\mfunction{det}}
+\definemathcommand [dim] [nolop] {\mfunction{dim}}
+\definemathcommand [exp] [nolop] {\mfunction{exp}}
+\definemathcommand [gcd] [limop] {\mfunction{gcd}}
+\definemathcommand [hom] [nolop] {\mfunction{hom}}
+\definemathcommand [inf] [limop] {\mfunction{inf}}
+\definemathcommand [injlim] [limop] {\mfunction{inj\,lim}}
+\definemathcommand [ker] [nolop] {\mfunction{ker}}
+\definemathcommand [lg] [nolop] {\mfunction{lg}}
+\definemathcommand [liminf] [limop] {\mfunction{lim\,inf}}
+\definemathcommand [limsup] [limop] {\mfunction{lim\,sup}}
+\definemathcommand [lim] [limop] {\mfunction{lim}}
+\definemathcommand [ln] [nolop] {\mfunction{ln}}
+\definemathcommand [log] [nolop] {\mfunction{log}}
+\definemathcommand [median] [limop] {\mfunction{median}}
+\definemathcommand [max] [limop] {\mfunction{max}}
+\definemathcommand [min] [limop] {\mfunction{min}}
+\definemathcommand [projlim] [limop] {\mfunction{proj\,lim}}
+\definemathcommand [Pr] [limop] {\mfunction{Pr}}
+\definemathcommand [sec] [nolop] {\mfunction{sec}}
+\definemathcommand [sinh] [nolop] {\mfunction{sinh}}
+\definemathcommand [sin] [nolop] {\mfunction{sin}}
+\definemathcommand [sup] [limop] {\mfunction{sup}}
+\definemathcommand [tanh] [nolop] {\mfunction{tanh}}
+\definemathcommand [tan] [nolop] {\mfunction{tan}}
+
+\stopmathcollection
+
+\startmathcollection[default]
+
+\definemathcommand [integers] {\mfunction{Z}}
+\definemathcommand [reals] {\mfunction{R}}
+\definemathcommand [rationals] {\mfunction{Q}}
+\definemathcommand [naturalnumbers] {\mfunction{N}}
+\definemathcommand [complexes] {\mfunction{C}}
+\definemathcommand [primes] {\mfunction{P}}
\stopmathcollection
@@ -309,6 +321,9 @@
\definemathcommand [ne] {\neq}
\definemathcommand [le] {\leq}
\definemathcommand [ge] {\geq}
+\definemathcommand [eq] {=}
+\definemathcommand [gt] {>}
+\definemathcommand [lt] {<}
\definemathcommand [gets] {\leftarrow}
\definemathcommand [owns] {\ni}
\definemathcommand [to] {\rightarrow}
@@ -497,9 +512,12 @@
\def\{{\lbrace}
\def\}{\rbrace}
-\def\Bbb#1{{\fam\purefamily{blackboard}\relax#1}}
-\def\mit {\fam\purefamily{mitfamily}}
-\def\cal {\fam\purefamily{calfamily}}
+%def\bbd{\fam\purefamily{blackboard}}
+%def\cal{\fam\purefamily{calfamily}}
+
+\def\mit{\fam\purefamily{mitfamily}}
+
+\def\Bbb{\blackboard} % conforming amstex
\startmathcollection[default]
diff --git a/tex/context/base/meta-ini.tex b/tex/context/base/meta-ini.tex
index 30d10054c..fef55e603 100644
--- a/tex/context/base/meta-ini.tex
+++ b/tex/context/base/meta-ini.tex
@@ -97,12 +97,12 @@
%D We save the number of graphics for the sake of \TEXEXEC.
-\newcounter\totalnumberofMPgraphics
+\newcounter\totalnofMPgraphics
\def\thenofMPgraphics{\the\nofMPgraphics} % from supp-mps
\appendtoks
- \savecurrentvalue\totalnumberofMPgraphics\thenofMPgraphics
+ \savecurrentvalue\totalnofMPgraphics\thenofMPgraphics
\to \everybye
%D \macros
@@ -121,7 +121,7 @@
\def\@@meta{meta:}
-\def\setupMPvariables%
+\def\setupMPvariables
{\dodoubleempty\dosetupMPvariables}
\def\dosetupMPvariables[#1][#2]%
@@ -341,15 +341,15 @@
{\setevalue{#1}{\MPcolor{black}}}
{\edef\!!stringa{\getvalue{#1}}%
\convertcommand\!!stringa\to\ascii % otherwise problems
- \doifcolorelse{\ascii} % with 2\bodyfontsize
+ \doifcolorelse \ascii % with 2\bodyfontsize
{\setevalue{#1}{\MPcolor{\getvalue{#1}}}}
{% can be aux macro
- \setbox\scratchbox=\hbox{\scratchdimen=\getvalue{#1}sp}%
+ \setbox\scratchbox\hbox{\scratchdimen\getvalue{#1}sp}%
\ifdim\wd\scratchbox=\zeropoint
- \scratchcounter=\getvalue{#1}\relax
+ \scratchcounter\getvalue{#1}\relax
\setevalue{#1}{\the\scratchcounter}%
\else
- \scratchdimen=\getvalue{#1}\relax
+ \scratchdimen\getvalue{#1}\relax
\setevalue{#1}{\the\scratchdimen}%
\fi}}}
@@ -463,14 +463,14 @@
{\dodoubleempty\dostartMPenvironment} % that reset gives \emptytoks
\long\def\dostartMPenvironment[#1][#2]#3\stopMPenvironment%
- {\doif{#1}{\s!reset}{\resetMPenvironment}% % reset mp toks
- \doif{#1}{\v!globaal}{#3}% % use in main doc too
- \doif{#1}{+}{#3}% % use in main doc too
+ {\doif{#1}\s!reset\resetMPenvironment % reset mp toks
+ \doif{#1}\v!globaal{#3}% % use in main doc too
+ \doif{#1}+{#3}% % use in main doc too
\convertargument#3\to\ascii
\expandafter\appendtoks\ascii\to\everyMPTEXgraphic}
-\def\resetMPenvironment%
- {\everyMPTEXgraphic=\emptytoks % = is really needed !
+\def\resetMPenvironment
+ {\everyMPTEXgraphic\emptytoks % = is really needed !
\startMPenvironment
\global\loadfontfileoncetrue
\stopMPenvironment}
@@ -516,7 +516,7 @@
\immediate\write\scratchwrite{end.}%
\immediate\closeout\scratchwrite}
-\def\initializeMPgraphics%
+\def\initializeMPgraphics
{\bgroup
\initializeMPgraphicfile
\ifx\bufferprefix\empty\else
@@ -530,11 +530,11 @@
\def\douseMPlibrary#1%
{\doifundefined{\c!file\f!javascriptprefix#1}
- {\setvalue{\c!file\f!javascriptprefix#1}{}
+ {\letvalueempty{\c!file\f!javascriptprefix#1}%
\makeshortfilename[\f!metapostprefix#1]
- \showmessage{\m!metapost}{1}{#1}
+ \showmessage\m!metapost1{#1}
\startreadingfile
- \readsysfile{\shortfilename}{}{}
+ \readsysfile\shortfilename\donothing\donothing
\stopreadingfile}}
\def\useMPlibrary[#1]%
@@ -561,20 +561,22 @@
\def\setMPtext#1#2% todo : #1 must be made : safe
{%\forceMPTEXgraphic
\convertargument#2\to\ascii
- \setevalue{\@@MPT#1}{\ascii}}
+ \dodoglobal\letvalue{\@@MPT#1}\ascii}
-\def\MPtext #1{\getvalue{\@@MPT#1}}
-\def\MPstring#1{"\getvalue{\@@MPT#1}"}
+\def\MPtext #1{\getvalue{\@@MPT#1}}
+\def\MPstring #1{"\getvalue{\@@MPT#1}"}
\def\MPbetex #1{btex \getvalue{\@@MPT#1} etex}
%D Unfortunately \METAPOST\ does not have \CMYK\ support
%D built in, but by means of specials we can supply the
%D information needed to handle them naturaly.
-\newif\ifMPcmyk \MPcmyktrue
+\newif\ifMPcmykcolors \MPcmykcolorstrue
+\newif\ifMPspotcolors \MPspotcolorstrue
\appendtoks
- cmykcolors := \ifMPcmyk true \else false \fi ;
+ cmykcolors := \ifMPcmykcolors true \else false \fi ;
+ spotcolors := \ifMPspotcolors true \else false \fi ;
\to \MPinitializations
%D In order to communicate conveniently with the \TEX\
@@ -618,6 +620,7 @@
\appendtoks
\baselineskip1\baselineskip
\lineheight 1\lineheight
+ \topskip 1\topskip
\to \everyMPgraphic
% this will become (more efficient)
diff --git a/tex/context/base/meta-pag.tex b/tex/context/base/meta-pag.tex
index afc08750e..711111812 100644
--- a/tex/context/base/meta-pag.tex
+++ b/tex/context/base/meta-pag.tex
@@ -63,6 +63,14 @@
RightMarginWidth := \the\rechtermargebreedte ;
RightEdgeDistance := \@the\rechterrandafstand ;
RightEdgeWidth := \the\rechterrandbreedte ;
+ InnerMarginDistance := \@the\innermargindistance ;
+ InnerMarginWidth := \the\innermarginwidth ;
+ OuterMarginDistance := \@the\outermargindistance ;
+ OuterMarginWidth := \the\outermarginwidth ;
+ InnerEdgeDistance := \@the\inneredgedistance ;
+ InnerEdgeWidth := \the\inneredgewidth ;
+ OuterEdgeDistance := \@the\outeredgedistance ;
+ OuterEdgeWidth := \the\outeredgewidth ;
PageOffset := \the\pageoffset ;
PageDepth := \the\pagedepth ;
enddef ;
@@ -143,19 +151,45 @@
\newtoks\MPsavedtextareadata
\newtoks\MPtextareadata
+\newtoks\MPlocaltextareadata
+
+% optimaliseren voor herhaling
\def\registerMPtextarea#1%
- {\bgroup
- \doglobal\increment\currentMPtextareadata
- \hpos{gbd:\currentMPtextareadata}{#1}%
- \edef\!!stringa{gbd:\currentMPtextareadata}%
- \edef\!!stringa{RegisterTextArea(%
- \MPx\!!stringa,\MPy\!!stringa,\MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}%
- \@EA \doglobal \@EA \appendtoks \!!stringa \to \MPtextareadata
- \egroup}
+ {\ifpositioning
+ \bgroup
+ \doglobal\increment\currentMPtextareadata
+ \hpos{gbd:\currentMPtextareadata}{#1}%
+ \edef\!!stringa{gbd:\currentMPtextareadata}%
+ \edef\!!stringa{RegisterTextArea(%
+ \MPx\!!stringa,\MPy\!!stringa,%
+ \MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}%
+ \@EA \doglobal \@EA \appendtoks \!!stringa \to \MPtextareadata
+ \egroup
+ \else
+ \hbox{#1}%
+ \fi}
+
+\def\registerMPlocaltextarea#1%
+ {\ifpositioning
+ \bgroup
+ \doglobal\increment\currentMPtextareadata
+ \hpos{gbd:\currentMPtextareadata}{#1}%
+ \edef\!!stringa{gbd:\currentMPtextareadata}%
+ \edef\!!stringa{RegisterLocalTextArea(%
+ \MPx\!!stringa,\MPy\!!stringa,%
+ \MPw\!!stringa,\MPh\!!stringa,\MPd\!!stringa);}%
+ \global\MPlocaltextareadata\@EA{\!!stringa}%
+ \egroup
+ \else
+ \hbox{#1}%
+ \fi}
+
+\def\resetMPlocaltextarea
+ {\global\MPlocaltextareadata\emptytoks}
\appendtoks
- \includeMPgraphic{area data}
+ \includeMPgraphic{area data}%
\to \MPinitializations
\startuseMPgraphic{area data}
@@ -164,11 +198,13 @@
SaveTextAreas ;
ResetTextAreas ;
\the\MPtextareadata
+ \the\MPlocaltextareadata
\stopuseMPgraphic
\appendtoks
\global\MPsavedtextareadata\MPtextareadata
- \global\MPtextareadata \emptytoks
+ \global\MPtextareadata\emptytoks
+ \global\MPlocaltextareadata\emptytoks
\to \everyshipout
\protect \endinput
diff --git a/tex/context/base/meta-xml.tex b/tex/context/base/meta-xml.tex
new file mode 100644
index 000000000..5024165d7
--- /dev/null
+++ b/tex/context/base/meta-xml.tex
@@ -0,0 +1,30 @@
+%D \module
+%D [ file=meta-xml,
+%D version=2002.11.27,
+%D title=\METAPOST\ Graphics,
+%D subtitle=XML Hacks,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{MetaPost Graphics / XML Hacks}
+
+%D When we are dealing with XML, we need to make sure that
+%D \METAPOST\ knows about it. The next macro expands its
+%D argument (think of widget XFDF) into \type {\getXMLentity}
+%D calls.
+
+\unprotect
+
+\def\setMPtextXML#1#2%
+ {\bgroup
+ \enableXML
+ \expanded{\convertcommand#2}\to\ascii
+ \expanded{\egroup
+ \noexpand\dodoglobal\noexpand\setvalue{\@@MPT#1}{\ascii}}}
+
+\protect \endinput
diff --git a/tex/context/base/mult-com.tex b/tex/context/base/mult-com.tex
index 1b7daad8e..bd9fedb34 100644
--- a/tex/context/base/mult-com.tex
+++ b/tex/context/base/mult-com.tex
@@ -502,6 +502,13 @@
inrightside: inrechterrand inrightside
imrechtenrand napravo
inlatodestro inparteadreapta
+ atleftmargin: oplinkermarge atleftmargin
+ atleftmargin atleftmargin
+ atleftmargin atleftmargin
+atrightmargin: oprechtermarge atrightmargin
+ atrightmargin atrightmargin
+ atrightmargin atrightmargin
+
woordrechts: woordrechts wordright
wortrechts slovovpravo
paroladestra cuvantdreapta
@@ -607,6 +614,9 @@
crlf: crlf crlf
crlf crlf
crlf crlf
+emptylines: legeregels emptylines
+ emptylines emptylines
+ emptylines emptylines
stelregelsin: stelregelsin setuplines
stellezeilenein nastavradky
impostarighe seteazalinii
@@ -625,25 +635,25 @@
setuptabulate: steltabulatiein setuptabulate
stelletabulatorein nastavtabelaci
impostatabulato seteazatabulatori
- starttabel: starttabel starttable
+ starttable: starttabel starttable
starttabelle starttabulka
iniziatabella starttabel
- stoptabel: stoptabel stoptable
+ stoptable: stoptabel stoptable
stoptabelle stoptabulka
terminatabella stoptabel
- starttabellen: starttabellen starttables
+ starttables: starttabellen starttables
starttabellen starttabulky
iniziatabelle starttabele
- stoptabellen: stoptabellen stoptables
+ stoptables: stoptabellen stoptables
stoptabellen stoptabulky
terminatabelle stoptabele
- steltabellenin: steltabellenin setuptables
+ setuptables: steltabellenin setuptables
stelletabellenein nastavtabulky
impostatabelle seteazatabele
definetabletemplate: definieertabelvorm definetabletemplate
definieretabellenvorlage definujsablonutabulky
definiscimodellotabella definestesablontabel
- pagina: pagina page
+ page: pagina page
seite strana
pagina pagina
koppelpagina: koppelpagina couplepage
@@ -694,7 +704,7 @@
setupheadertexts: stelhoofdtekstenin setupheadertexts
stellekopfzeilentextein nastavtextyzahlavi
impostatestiintestazioni seteazatexteantet
- stelnummeringin: stelnummeringin setuppagenumbering
+ setuppagenumbering: stelpaginanummeringin setuppagenumbering
stelleseitennummeriernungein nastavcislovanistran
impostanumerazionepagina seteazanumerotarepagina
stelnummerin: stelnummerin setupnumber
@@ -760,7 +770,7 @@ stelnummerin: stelnummerin setupnumber
stelkolommenin: stelkolommenin setupcolumns
stellespaltenein nastavsloupce
impostacolonne seteazacoloane
- kolom: kolom column
+ column: kolom column
spalte sloupec
colonna coloana
head: kop head
@@ -896,6 +906,9 @@ stelnummerin: stelnummerin setupnumber
setuppapersize: stelpapierformaatin setuppapersize
stellepapierformatein nastavvelikostpapiru
impostadimensionicarta seteazadimensiunihartie
+setuppaper: stelpapierin setuppaper
+ setuppaper setuppaper
+ setuppaper setuppaper
setuparranging: stelarrangerenin setuparranging
stelleanordnenein nastavusporadani
impostaparranging seteazaaranjareapag
@@ -923,6 +936,9 @@ stelnummerin: stelnummerin setupnumber
blokkeerinteractiemenu: blokkeerinteractiemenu disableinteractionmenu
inaktiviereinteraktionsmenue zablokujinterakcnimenu
disabilitamenuinterazione dezactiveazameniuinteractiune
+ interactiemenu: interactiemenu interactionmenu
+ interaktionsmenue interaktivnimenu
+ menuinterattivo meniuinteractiune
interactiebuttons: interactiebuttons interactionbuttons
interaktionsknopfe interakcnitlacitka
pulsantinterazione butoaneinteractiune
@@ -950,6 +966,9 @@ stelnummerin: stelnummerin setupnumber
definecolor: definieerkleur definecolor
definierefarbe definujbarvu
definiscicolore definesteculoare
+%definespotcolor: definespotcolor definespotcolor
+% definespotcolor definespotcolor
+% definespotcolor definespotcolor
definecolorgroup: definieerkleurgroep definecolorgroup
definierefarbengruppe definujskupinubarev
definiscigruppocolori definestegrupculori
@@ -1040,9 +1059,15 @@ stelnummerin: stelnummerin setupnumber
definieersamengesteldelijst: definieersamengesteldelijst definecombinedlist
definierezusammengestellteliste definujkombinovanyseznam
definiscielencocombinato definestelistacombinata
+listsymbol: lijstsymbool listsymbol
+ listsymbol listsymbol
+ listsymbol listsymbol
plaatslijst: plaatslijst placelist
platziereliste umistiseznam
mettielenco punelista
+ plaatsruwelijst: plaatslruweijst placerawlist
+ placerawlist placerawlist
+ placerawlist placerawlist
plaatssamengesteldelijst: plaatssamengesteldelijst placecombinedlist
platzierezusammengestellteliste umistikombinovanyseznam
mettielencocombinato punelistacombinata
@@ -1103,10 +1128,16 @@ stelnummerin: stelnummerin setupnumber
placefloat: plaatsplaatsblok placefloat
placefloat placefloat
placefloat placefloat %%%
- startcombinatie: startcombinatie startcombination
+movesidefloat: verplaatszijblok movesidefloat
+ movesidefloat movesidefloat
+ movesidefloat movesidefloat
+ definecombination: definieercombinatie definecombination
+ definecombination definecombination
+ definecombination definecombination
+ startcombination: startcombinatie startcombination
startkombination startspojeni
iniziacombinazione startcombinare
- stopcombinatie: stopcombinatie stopcombination
+ stopcombination: stopcombinatie stopcombination
stopkombination stopspojeni
terminacombinazione stopcombinare
plaatsnaastelkaar: plaatsnaastelkaar placesidebyside
@@ -1121,7 +1152,7 @@ stelnummerin: stelnummerin setupnumber
stelblokkopjesin: stelblokkopjesin setupcaptions
stellebilderunterschriftein nastavpopisky
impostacaptions seteazalegendele % GB
- stelcombinatiesin: stelcombinatiesin setupcombinations
+ setupcombinations: stelcombinatiesin setupcombinations
stellekombinationein nastavspojeni
impostacombinazioni seteazacombinari
startoverlay: startoverlay startoverlay
@@ -1746,13 +1777,20 @@ moveformula: verplaatsformule moveformula
switchtorawfont switchtorawfont
passaafontgrezzo trecilafontraw
- placeheadtext: plaatskoptekst placeheadtext
- placeheadtext placeheadtext
- posizionatestotesta placeheadtext
+ placeheadtext: plaatskoptekst placeheadtext
+ placeheadtext placeheadtext
+ posizionatestotesta placeheadtext
+
+placeheadnumber: plaatskopnummer placeheadnumber
+ placeheadnumber placeheadnumber
+ posizionanumerotesta placeheadnumber
-placeheadnumber: plaatskopnummer placeheadnumber
- placeheadnumber placeheadnumber
- posizionanumerotesta placeheadnumber
+ definepagebreak: definieerpaginaovergang definepagebreak
+ definepagebreak definepagebreak
+ definepagebreak definepagebreak
+definecolumnbreak: definieerkolomovergang definecolumnbreak
+ definecolumnbreak definecolumnbreak
+ definecolumnbreak definecolumnbreak
\stopcommands
@@ -1833,6 +1871,30 @@ placeheadnumber: plaatskopnummer placeheadnumber
rechterrandafstand: rechterrandafstand rightedgedistance
abstandrechterrand vzdalenostpravehookraje
distanzabordodestro distantacoltdreapta
+ innermarginwidth: binnenmargebreedte innermarginwidth
+ innermarginwidth innermarginwidth
+ innermarginwidth innermarginwidth
+ outermarginwidth: buitenmargebreedte outermarginwidth
+ outermarginwidth outermarginwidth
+ outermarginwidth outermarginwidth
+innermargindistance: binnenmargeafstand innermargindistance
+ innermargindistance innermargindistance
+ innermargindistance innermargindistance
+outermargindistance: buitenmargeafstand outermargindistance
+ outermargindistance outermargindistance
+ outermargindistance outermargindistance
+ inneredgewidth: binnenrandbreedte inneredgewidth
+ inneredgewidth inneredgewidth
+ inneredgewidth inneredgewidth
+ outeredgewidth: buitenrandbreedte outeredgewidth
+ outeredgewidth outeredgewidth
+ outeredgewidth outeredgewidth
+ inneredgedistance: binnenrandafstand inneredgedistance
+ inneredgedistance inneredgedistance
+ inneredgedistance inneredgedistance
+ outeredgedistance: buitenrandafstand outeredgedistance
+ outeredgedistance outeredgedistance
+ outeredgedistance outeredgedistance
tekstbreedte: tekstbreedte textwidth
textbreite sirkatextu
ampiezzatesto latimetext
@@ -1886,19 +1948,23 @@ placeheadnumber: plaatskopnummer placeheadnumber
useXMLfilter useXMLfilter
useXMLfilter useXMLfilter
-definecolumnset: definieerkolomgroep definecolumnset
- definecolumnset definecolumnset
+definecolumnset: definieerkolomgroep definecolumnset
+ definecolumnset definecolumnset
definiscigruppocolonne definecolumnset
- setupcolumnset: stelkolomgroepin setupcolumnset
- setupcolumnset setupcolumnset
- impostagruppocolonne setupcolumnset
- startcolumnset: startkolomgroep startcolumnset
- startcolumnset startcolumnset
- iniziagruppocolonne startcolumnset
- stopcolumnset: stopkolomgroep stopcolumnset
- stopcolumnset stopcolumnset
+ setupcolumnset: stelkolomgroepin setupcolumnset
+ setupcolumnset setupcolumnset
+ impostagruppocolonne setupcolumnset
+ startcolumnset: startkolomgroep startcolumnset
+ startcolumnset startcolumnset
+ iniziagruppocolonne startcolumnset
+ stopcolumnset: stopkolomgroep stopcolumnset
+ stopcolumnset stopcolumnset
terminagruppocolonne stopcolumnset
+ usetypescript: gebruiktypescript usetypescript
+ usetypescript usetypescript
+ usetypescript usetypescript
+
\stopcommands
%D \stopcompressdefinitions
diff --git a/tex/context/base/mult-con.tex b/tex/context/base/mult-con.tex
index fab93c462..08bb3daed 100644
--- a/tex/context/base/mult-con.tex
+++ b/tex/context/base/mult-con.tex
@@ -304,6 +304,18 @@
umrahmtertext oramovanytext
testoincorniciato textinconjurat
+ citaat: citaat quotation
+ zitat citace
+ citazione citat
+
+ citeer: citeer quote
+ zitieren citovat
+ menzione minicitat
+
+ spraak: spraak speech
+ speech speech
+ speech speech
+
\stopvariables
%D \stopcompressdefinitions
@@ -360,6 +372,9 @@
voorwit: voorwit spacebefore
vorspatium mezerapred
spazioprima spatiuinainte
+ tussenwit: tussenwit spaceinbetween
+ spaceinbetween spaceinbetween
+ spaceinbetween spaceinbetween
nawit: nawit spaceafter
nachspatium mezeraza
spaziodopo spatiudupa
@@ -384,6 +399,9 @@
achtergrondhoek: achtergrondhoek backgroundcorner
hintergrundwinkel rohpozadi
angolosfondo coltfundal
+splitskleur: splitskleur splitcolor
+ splitcolor splitcolor
+ splitcolor splitcolor
achtergrondkleur: achtergrondkleur backgroundcolor
hintergrundfarbe barvapozadi
coloresfondo culoarefundal
@@ -393,6 +411,9 @@
voorgrondletter: voorgrondletter foregroundstyle
foregroundstyle foregroundstyle
foregroundstyle foregroundstyle
+clipoffset: clipoffset clipoffset
+ clipoffset clipoffset
+ clipoffset clipoffset
achtergrondoffset: achtergrondoffset backgroundoffset
hintergrundoffset offsetpozadi
offsetsfondo offsetfundal
@@ -651,6 +672,9 @@
kolom: kolom column
spalte sloupec
colonna coloana
+ kolommen: kolommen columns
+ spalten sloupce
+ colonne coloane
kolomafstand: kolomafstand columndistance
spaltenabstand vzdalenostsloupcu
distanzacolonne distantacoloane
@@ -909,6 +933,12 @@
preview: preview preview
vorschau nahled
anteprima previzualizare
+proces: proces process
+ process process
+ process process
+ spot: spot spot
+ spot spot
+ spot spot
punt: punt dot
punkt tecka
punto punct
@@ -1288,11 +1318,16 @@
tekstafstand: tekstafstand textdistance
textdistance textdistance
distanzatesto textdistance % TB TH
+ tekstmarge: tekstmarge textmargin
+ textmargin textmargin
+ textmargin textmargin % TB TH
trefwoord: trefwoord keyword
keyword keyword
parolachiave keyword
+
+
\stopconstants
%D \stopcompressdefinitions
@@ -1760,6 +1795,12 @@ trefwoord: trefwoord keyword
programma: programma program
programm program
programma program
+proces: proces process
+ process process
+ process process
+ spot: spot spot
+ spot spot
+ spot spot
punt: punt dot
punkt tecka
punto punct
@@ -1991,6 +2032,9 @@ trefwoord: trefwoord keyword
laatstepagina: laatstepagina lastpage
letzteseite poslednistrana
ultimapagina ultimapagina
+ laatpagenumber: laatstepaginanummer lastpagenumber
+ lastpagenumber lastpagenumber
+ lastpagenumber lastpagenumber
eerstesubpagina: eerstesubpagina firstsubpage
ersteunterseite prvnipodstranka
primasottopagina primasubpagina
@@ -2124,6 +2168,7 @@ geencontrole: geencontrole nocheck
nx: nx
ny: ny
nr: nr
+ nl: nl
nc: nc
sx: sx
sy: sy
@@ -2337,10 +2382,10 @@ geencontrole: geencontrole nocheck
stop: stop stop
stop stop
termina stop
- tabelkop: tabelkop tablehead
+ tablehead: tabelkop tablehead
tabellenueberschrift zahlavitabulky
testatabella antettabel
- tabelstaart: tabelstaart tabletail
+ tabletail: tabelstaart tabletail
tabellenende konectabulky
codatabella subsoltabel
tabulate: tabulatie tabulate
diff --git a/tex/context/base/mult-ini.tex b/tex/context/base/mult-ini.tex
index 98af68127..6928f13d2 100644
--- a/tex/context/base/mult-ini.tex
+++ b/tex/context/base/mult-ini.tex
@@ -172,9 +172,9 @@
%D \definesystemvariable {name}
%D \stoptypen
-\def\definesystemvariable #1{\setevalue{\??prefix#1}{\@@prefix#1}}
+\def\definesystemvariable#1{\setevalue{\??prefix#1}{\@@prefix#1}}
-\definesystemvariable {ms}
+\definesystemvariable{ms}
%D \macros
%D {selectinterface,
@@ -209,10 +209,10 @@
\def\selectinterface%
{\def\docommando##1##2%
{\bgroup
- \endlinechar=-1
+ \endlinechar\minusone
\global\read16 to ##1
\egroup
- \doif{\currentinterface}{}{\let##1=##2}%
+ \doifnothing\currentinterface{\let##1=##2}%
\doifundefined{\s!prefix!##1}{\let##1=##2}}%
\docommando\currentinterface\defaultinterface
\writestatus{interface}{defining \currentinterface\space interface}%
@@ -251,11 +251,14 @@
%D \stopinterface
%D \stoptypen
+%\def\startinterface #1
+% {\doifinsetelse{\currentinterface}{#1}
+% {\let\next\relax}
+% {\long\def\next##1\stopinterface{}}%
+% \next}
+
\def\startinterface #1
- {\doifinsetelse{\currentinterface}{#1}
- {\let\next\relax}
- {\long\def\next##1\stopinterface{}}%
- \next}
+ {\doifnotinset\currentinterface{#1}{\gobbleuntil\stopinterface}}
\let\stopinterface=\relax
@@ -384,7 +387,7 @@
\def\doaddinterfacemessage#1#2%
{\findinterfacemessage{#1}\currentmessagetext
- \doifelse{\currentmessagetext}{}
+ \doifelsenothing\currentmessagetext
{\setxvalue{\??ms\currentmessagelibrary}%
{\getvalue{\??ms\currentmessagelibrary} #1: #2\relax}}
{\debuggerinfotrue % we consider this an important error
@@ -401,7 +404,7 @@
{\doaddinterfacemessage{#1}{#2}}%
\egroup
-\def\getinterfacemessage%
+\def\getinterfacemessage
{\ifx\next\stopmessages
\egroup\expandafter\gobbleoneargument
\else
@@ -413,10 +416,10 @@
\bgroup
\obeylines
\doifinsetelse{#1}{\currentresponses,all}
- {\def\next%
+ {\def\next
{\def\currentmessagelibrary{#2}%
\doifundefined{\??ms\currentmessagelibrary}
- {\setgvalue{\??ms\currentmessagelibrary}{}}%
+ {\letgvalueempty{\??ms\currentmessagelibrary}}%
\futurelet\next\getinterfacemessage}}
{\long\def\next##1\stopmessages{\egroup}}%
\next}
@@ -435,7 +438,7 @@
\bgroup
\obeylines
\doifinsetelse{#1}{\currentresponses,all}
- {\def\next%
+ {\def\next
{\def\currentmessagelibrary{#2}%
\futurelet\next\getinterfacemessage}}
{\long\def\next##1\stopmessages{\egroup}}%
@@ -475,14 +478,14 @@
\let\normalshowmessage=\showmessage
-\def\showwarning%
+\def\showwarning
{\ifshowwarnings
\expandafter\showmessage
\else
\expandafter\gobblethreearguments
\fi}
-\def\showmessage%
+\def\showmessage
{\ifshowmessages
\expandafter\normalshowmessage
\else
@@ -791,9 +794,9 @@
%D We can now redefine some messages that will be
%D introduced in the multi||lingual system module.
-\def\showassignerror #1#2{\showmessage{\m!check}{1}{#1,#2}}
-\def\showargumenterror#1#2{\showmessage{\m!check}{2}{#1,#2}}
-\def\showdefinederror #1#2{\showmessage{\m!check}{3}{#1,#2}}
+\def\showassignerror #1#2{\showmessage\m!check1{#1,#2}\waitonfatalerror}
+\def\showargumenterror#1#2{\showmessage\m!check2{#1,#2}\waitonfatalerror}
+\def\showdefinederror #1#2{\showmessage\m!check3{#1,#2}\waitonfatalerror}
%D \CONTEXT\ is a parameter driven package. This means that
%D users instruct the system by means of variables, values and
@@ -1084,7 +1087,7 @@
\newif\iflogginginterface
-\def\flushinterfaceelementline%
+\def\flushinterfaceelementline
{\iflogginginterface
\immediate\write\scratchwrite{\interfaceelementline}%
\let\interfaceelementline\empty
@@ -1100,7 +1103,7 @@
\let\interfaceelementline\empty
\immediate\openout\scratchwrite=./#1\relax}
-\def\stoplogginginterface%
+\def\stoplogginginterface
{\flushinterfaceelementline
\immediate\closeout\scratchwrite
\logginginterfacefalse}
@@ -1115,10 +1118,10 @@
\def\nointerfaceobject{-}
\def\startinterfaceobjects#1#2%
- {\!!counta=1
+ {\!!counta\plusone
\let\dogetinterfaceobject\dogetinterfacetemplate
\let\dowithinterfaceelement#1%
- \def\dodogetinterfaceobjects%
+ \def\dodogetinterfaceobjects
{\ifx\next#2%
\flushinterfaceelementline
\flushinterfaceelementline
@@ -1135,7 +1138,7 @@
\dogetinterfaceobjects}%
\fi\fi\fi
\next}%
- \def\dogetinterfaceobjects%
+ \def\dogetinterfaceobjects
{\futurelet\next\dodogetinterfaceobjects}%
\dogetinterfaceobjects}
@@ -1143,7 +1146,7 @@
{\saveinterfaceelementline{#1}%
\doifinsetelse{#1}{\currentinterface,all}
{\let\dogetinterfaceobject\doskipinterfaceobject}
- {\advance\!!counta by 1\relax}}
+ {\advance\!!counta\plusone}}
\def\doskipinterfaceobject[#1:#2#3]%
{\if#2:%
@@ -1157,11 +1160,11 @@
\def\dogetinterfaceelement[#1:#2#3]%
{\ifx#2:%
- \!!countb=0
+ \!!countb\zerocount
\def\!!stringa{#1}%
\flushinterfaceelementline
\else
- \advance\!!countb by 1
+ \advance\!!countb\plusone
\saveinterfaceelementline{#1}%
\ifnum\!!countb=\!!counta
\@EA\dowithinterfaceelement\@EA{\!!stringa}{#1}%
@@ -1185,7 +1188,7 @@
\def\setinterfaceconstant#1#2%
{\setvalue{\c!prefix!#1}{\c!internal!#1}%
- \doifelse{#2}{\nointerfaceobject}
+ \doifelse{#2}\nointerfaceobject
{\debuggerinfo{constant}{#1 defined as #1 by default}%
\setvalue{\k!prefix!#2}{#1}}
{\debuggerinfo{constant}{#1 defined as #2}%
@@ -1196,7 +1199,7 @@
\setvalue{\k!prefix!#2}{#1}}}
\def\setinterfacevariable#1#2%
- {\doifelse{#2}{\nointerfaceobject}
+ {\doifelse{#2}\nointerfaceobject
{\debuggerinfo{variable}{#1 defined as #1 by default}%
\checksetvalue{\v!prefix!#1}{#1}%
\setvalue{\v!prefix!#1}{#1}}
@@ -1208,10 +1211,10 @@
{\doifdefined{#1}{\doifvaluesomething{#1}{\doifnotvalue{#1}{#2}
{\writestatus{problems}{set #1 to #2 overloads \getvalue{#1}}}}}}
-\def\startvariables%
+\def\startvariables
{\startinterfaceobjects\setinterfacevariable\stopvariables}
-\def\startconstants%
+\def\startconstants
{\startinterfaceobjects\setinterfaceconstant\stopconstants}
%D \macros
@@ -1248,12 +1251,12 @@
\def\setinterfacesetupvariable#1#2%
{\ifinterfacetranslation
- \doifelse{#2}{\nointerfaceobject}
+ \doifelse{#2}\nointerfaceobject
{\setvalue{\y!prefix!#1}{#1}}
{\setvalue{\y!prefix!#1}{#2}}%
\fi}
-\def\startsetupvariables%
+\def\startsetupvariables
{\startinterfaceobjects\setinterfacesetupvariable\stopsetupvariables}
%D \macros
@@ -1293,22 +1296,21 @@
%D Element translation is realized by means of:
\def\setinterfaceelement#1#2%
- {\doifelse{#2}{\nointerfaceobject}
+ {\doifelse{#2}\nointerfaceobject
{\debuggerinfo{element}{#1 defined as <empty>}%
\resetvalue{\e!prefix!#1}}
{\doifdefinedelse{\e!prefix!#1}
- {\doifnot{\getvalue{\e!prefix!#1}}{#2}
+ {\doifnotvalue{\e!prefix!#1}{#2}
{\debuggerinfo{element}{#1 redefined as #2}%
\setvalue{\e!prefix!#1}{#2}}}
{\debuggerinfo{element}{#1 defined as #2}%
\setvalue{\e!prefix!#1}{#2}}}}
-\def\startelements%
+\def\startelements
{\startinterfaceobjects\setinterfaceelement\stopelements}
%D \macros
%D {startcommands}
-%D {}
%D
%D The last setup has to do with the commands themselve.
%D Commands are defined as:
@@ -1328,7 +1330,7 @@
%D needed for reference cards.
\def\setinterfacecommand#1#2%
- {\doifelse{#2}{\nointerfaceobject}
+ {\doifelse{#2}\nointerfaceobject
{\debuggerinfo{command}{no link to #1}%
\setinterfacesetupvariable{#1}{#1}}
{\doifelse{#1}{#2}
@@ -1340,12 +1342,11 @@
\@EA{\csname#1\endcsname}}%
\setinterfacesetupvariable{#1}{#2}}}
-\def\startcommands%
+\def\startcommands
{\startinterfaceobjects\setinterfacecommand\stopcommands}
%D \macros
%D {getinterfaceconstant, getinterfacevariable}
-%D {}
%D
%D Generating the interface translation macro's that are used
%D in the reference lists, is enabled by setting the boolean:
@@ -1430,17 +1431,17 @@
%D Out of convenience we define the banners here.
-\edef\contextbanner%
+\edef\contextbanner
{ConTeXt \space
ver: \noexpand \contextversion \space \space
fmt: \noexpand \formatversion \space \space
int: \noexpand \currentinterface \space \space
mes: \noexpand \currentresponses}
-\def\showcontextbanner%
+\def\showcontextbanner
{\writeline\writestring{\contextbanner}\writeline}
-\edef\formatversion%
+\edef\formatversion
{\ifx\normalyear \undefined\the\year \else\the\normalyear \fi.%
\ifx\normalmonth\undefined\the\month\else\the\normalmonth\fi.%
\ifx\normalday \undefined\the\day \else\the\normalday \fi}
diff --git a/tex/context/base/mult-sys.tex b/tex/context/base/mult-sys.tex
index bc33cb955..9cb6ffcf6 100644
--- a/tex/context/base/mult-sys.tex
+++ b/tex/context/base/mult-sys.tex
@@ -132,6 +132,7 @@
\definesystemconstant {next}
\definesystemconstant {pickup}
+\definesystemconstant {ascii}
\definesystemconstant {default}
\definesystemconstant {unknown}
@@ -175,6 +176,7 @@
\definesystemconstant {encoding}
\definesystemconstant {mapping}
\definesystemconstant {patterns}
+\definesystemconstant {rscale}
\definesystemconstant {handling}
\definesystemconstant {ucmap}
@@ -186,6 +188,7 @@
\definesystemconstant {mm}
\definesystemconstant {pt}
\definesystemconstant {sp}
+\definesystemconstant {bp}
\definesystemconstant {in}
%D These constants are used for internal and utility
@@ -226,6 +229,8 @@
\definesystemconstant {figurepreset}
+\definesystemconstant {empty}
+
%D Some \CONTEXT\ commands take a two||pass aproach to
%D optimize the typesetting. Each two||pass object has its
%D own tag.
@@ -326,6 +331,10 @@
\newcount\medcard \medcard\!!medcard % used in font module
\newcount\maxcard \maxcard\!!maxcard % used in font module
+\ifx\thousandpoint\undefined \newdimen\thousandpoint \fi
+
+\thousandpoint=1000pt
+
%D Variables are composed of a command specific tag and a user
%D supplied variable (system constant). The first tag \type{ag}
%D for instance is available as \type{\??ag} and expands to
@@ -355,9 +364,11 @@
\definesystemvariable {cc} % Comment
\definesystemvariable {ci} % CItaat
\definesystemvariable {cl} % kleur (CoLor setup)
+\definesystemvariable {cn} % CollumN
\definesystemvariable {co} % COmbinaties
\definesystemvariable {cp} % CliP
\definesystemvariable {cr} % kleur (ColoR)
+\definesystemvariable {cs} % kleur (ColorSeparation
\definesystemvariable {cv} % ConVersie
\definesystemvariable {da} % DAte
\definesystemvariable {dc} % DroppedCaps
@@ -375,6 +386,7 @@
\definesystemvariable {er} % external resources
\definesystemvariable {ex} % ExterneFiguren
\definesystemvariable {ht} % HiddenText
+\definesystemvariable {fc} % FramedContent
\definesystemvariable {fd} % FielD
\definesystemvariable {ff} % FontFile
\definesystemvariable {fg} % FiGuurmaten
@@ -414,9 +426,11 @@
\definesystemvariable {la} % LAnguage
\definesystemvariable {lb} % LaBels
\definesystemvariable {ld} % LegenDa
+\definesystemvariable {le} % LinetablE
\definesystemvariable {lg} % taal (LanGuage)
\definesystemvariable {li} % LIjst
\definesystemvariable {ll} % Layers
+\definesystemvariable {lx} % LayerteXt
\definesystemvariable {ln} % LijNen
\definesystemvariable {lo} % LOgos
\definesystemvariable {lt} % LiTeratuur
@@ -425,6 +439,7 @@
\definesystemvariable {mb} % MargeBlokken
\definesystemvariable {mg} % Metapost paGe
\definesystemvariable {mk} % MarKering
+\definesystemvariable {mt} % inline MaTh
\definesystemvariable {mo} % Math Options
\definesystemvariable {nm} % Nummering
\definesystemvariable {np} % NaastPlaatsen
@@ -443,6 +458,7 @@
\definesystemvariable {pa} % PAlet
\definesystemvariable {pb} % PuBlicatie
\definesystemvariable {pc} % PageComment
+\definesystemvariable {pe} % PagEhandler
\definesystemvariable {pf} % ProFiel
\definesystemvariable {pg} % KoppelPagina
\definesystemvariable {ph} % ParagrapH
@@ -451,6 +467,7 @@
\definesystemvariable {pp} % PaPier
\definesystemvariable {pr} % PRogrammas
\definesystemvariable {ps} % PoSitioneren
+\definesystemvariable {pt} % PageshifT
\definesystemvariable {rf} % ReFereren
\definesystemvariable {rg} % ReGel
\definesystemvariable {rl} % ReferentieLijst
@@ -465,6 +482,7 @@
\definesystemvariable {sc} % SCherm
\definesystemvariable {sd} % SounD
\definesystemvariable {se} % SEctie
+\definesystemvariable {sf} % SpeciFics
\definesystemvariable {sg} % SpacinG
\definesystemvariable {sh} % ShapeText
\definesystemvariable {si} % SplIt
@@ -524,6 +542,7 @@
\defineinterfaceconstant {d} {d} % kunnen weg
\defineinterfaceconstant {e} {e} % kunnen weg
+\defineinterfaceconstant {s} {s}
\defineinterfaceconstant {r} {r}
\defineinterfaceconstant {g} {g}
\defineinterfaceconstant {b} {b}
@@ -531,15 +550,14 @@
\defineinterfaceconstant {m} {m}
\defineinterfaceconstant {y} {y}
\defineinterfaceconstant {k} {k}
-\defineinterfaceconstant {s} {s}
-
+\defineinterfaceconstant {a} {a} % alternative
+\defineinterfaceconstant {t} {t} % transparency
+\defineinterfaceconstant {p} {p} % percentage
+
\defineinterfaceconstant {t} {t}
\defineinterfaceconstant {h} {h}
\defineinterfaceconstant {b} {b}
-\defineinterfaceconstant {t} {t} % transparency
-\defineinterfaceconstant {a} {a} % alternative
-
\defineinterfaceconstant {rgb} {rgb}
\defineinterfacevariable {rgb} {rgb}
@@ -582,6 +600,7 @@
\definefileconstant {oldfilename} {cont-old}
\definefileconstant {newfilename} {cont-new}
\definefileconstant {filfilename} {cont-fil}
+\definefileconstant {modfilename} {cont-mod}
%D The next two files specify user settings as well as
%D \TEXEXEC\ settings when generating a format.
@@ -685,18 +704,20 @@
\startmessages dutch library: check
title: controle
- 1: '=' ontbreekt na '--' in regel --
+ 1: '=' ontbreekt of zonder {} na '--' in regel --
2: -- argument(en) verwacht in regel --
3: -- -- vervangt een macro, gebruik HOOFDLETTERS!
\stopmessages
\startmessages english library: check
title: check
- 1: missing '=' after '--' in line --
+ 1: missing or ungrouped '=' after '--' in line --
2: -- argument(s) expected in line --
3: -- -- replaces a macro, use CAPITALS!
\stopmessages
+% 1: to be adapted
+
\startmessages german library: check
title: check
1: Fehlendes '=' nach '--' in Zeile --
@@ -713,7 +734,7 @@
\startmessages italian library: check
title: controllo
- 1: '=' mancante dopo '--' alla riga --
+ 1: '=' mancante o non raggruppato dopo '--' alla riga --
2: -- argomento/i attesi alla riga --
3: -- -- sostituisce una macro, usare le MAIUSCOLE!
\stopmessages
diff --git a/tex/context/base/page-app.tex b/tex/context/base/page-app.tex
index 8f93858a9..04df66168 100644
--- a/tex/context/base/page-app.tex
+++ b/tex/context/base/page-app.tex
@@ -19,48 +19,59 @@
\def\dostartfittingpage[#1][#2]%
{\pagina
\bgroup
- \setbox\scratchbox=\hbox
+ \dontcomplain
+ \setbox\scratchbox\hbox
\bgroup
\getparameters[#1][#2]%
\schaal[\c!schaal=\getvalue{#1\c!schaal}]\bgroup\localframed[#1]\bgroup}
-\def\dostopfittingpage%
+\definepapersize
+ [\??fp\s!dummy]
+ [\c!breedte=\fittingwd,
+ \c!hoogte=\fittinght]
+
+\definelayout
+ [\??fp\s!dummy]
+ [\c!breedte=\fittingwd,\c!hoogte=\fittinght,\c!plaats=\v!midden,
+ \c!kopwit=\!!zeropoint,\c!rugwit=\!!zeropoint,
+ \c!snijwit=\!!zeropoint,\c!bodemwit=\!!zeropoint,
+ \c!tekstafstand=\!!zeropoint,\c!regels=0,\c!grid=\v!nee,
+ \c!hoofd=\!!zeropoint,\c!voet=\!!zeropoint]
+
+\def\dostopfittingpage
{\egroup\egroup\egroup
\edef\fittingwd{\the\wd\scratchbox}%
\edef\fittinght{\the\ht\scratchbox}%
- \definepapersize
- [\s!dummy]
- [\c!breedte=\fittingwd,
- \c!hoogte=\fittinght]%
- \startlocal % keep settings as local as can be
- \setuppapersize
- [\s!dummy][\s!dummy]%
- \stellayoutin
- [\c!breedte=\fittingwd,\c!hoogte=\fittinght,\c!plaats=\v!midden,
- \c!kopwit=\!!zeropoint,\c!rugwit=\!!zeropoint,
- \c!snijwit=\!!zeropoint,\c!bodemwit=\!!zeropoint,
- \c!tekstafstand=\!!zeropoint,
- \c!hoofd=\!!zeropoint,\c!voet=\!!zeropoint]%
- \stoplocal % which saves us the trouble of push/pop
+ \startlocallayout
+ \ifdim\fittinght<\lineheight
+ % write status : too small
+ \setbox\scratchbox\vbox to \lineheight{\vss\box\scratchbox\vss}%
+ \edef\fittinght{\the\lineheight}%
+ \fi
+ \setuppapersize
+ [\??fp\s!dummy][\??fp\s!dummy]%
+ \stellayoutin
+ [\??fp\s!dummy]%
\startmakeup[\v!standaard][\c!tekststatus=\v!leeg,\c!dubbelzijdig=\v!nee,\c!pagina=]%
\centerbox{\box\scratchbox}%
\stopmakeup
+ \stoplocallayout
\egroup}
%D \TEX\ pages (for \METAPOST\ pages, see \type {meta-fig}):
\presetlocalframed[\??tg]
-\def\setupTEXpage%
+\def\setupTEXpage
{\dodoubleargument\getparameters[\??tg]}
-\def\startTEXpage%
+\def\startTEXpage
{\dosingleempty\dostartTEXpage}
\def\dostartTEXpage[#1]%
{\dostartfittingpage[\??tg][#1]\gobblespacetokens}
-\def\stopTEXpage%
+\def\stopTEXpage
{\removelastspace
\dostopfittingpage}
@@ -98,7 +109,7 @@
\starttext
#2% preamble
\startTEXpage[#1]%
- \setbox\scratchbox=\hbox{#3}%
+ \setbox\scratchbox\hbox{#3}%
\saveTEXapplication02% dimensions
\box\scratchbox
\stopTEXpage
@@ -114,11 +125,11 @@
\executesystemcommand{ps2pdf \bufferprefix\@@texapp.ps \bufferprefix\@@texapp.pdf}%
\fi
\restoreTEXapplication % dimensions
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\expanded{\externalfigure
[\bufferprefix\@@texapp.\ifdone eps\else pdf\fi]
[\c!object=\v!nee]}}%
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\lower\ht\scratchbox\hbox{\raise\dimen2\box\scratchbox}}%
\wd\scratchbox\dimen0
\ht\scratchbox\dimen2
diff --git a/tex/context/base/page-bck.tex b/tex/context/base/page-bck.tex
index 5c4772b05..e0cba9eb6 100644
--- a/tex/context/base/page-bck.tex
+++ b/tex/context/base/page-bck.tex
@@ -131,11 +131,11 @@
\def\addsomebackground#1#2#3#4% area box width height / zero test added
{\ifdim#3>\zeropoint\ifdim#4>\zeropoint\ifsomebackgroundfound#1%
- \setbox#2=\vbox\localframed
+ \setbox#2\vbox\localframed
[\??ma#1]
[\c!strut=\v!nee,\c!offset=\v!overlay,
\c!breedte=#3,\c!hoogte=#4]
- {\dp#2=\zeropoint\box#2}%
+ {\dp#2\zeropoint\box#2}%
\fi\fi\fi}
%D There are quite some backgrounds. At the bottom layer,
@@ -172,7 +172,7 @@
\def\addmainbackground#1% todo: dimension spec
{\ifsomebackground
\ifnewbackground \setbackgroundboxes \fi
- \setbox#1=\vbox
+ \setbox#1\vbox
{\offinterlineskip
\doifmarginswapelse
{\copy\leftbackground}
@@ -188,7 +188,7 @@
\def\addtextbackground#1%
{\ifconditional\hiddenbackgroundenabled
- \addsomebackground\v!verborgen#1\zetbreedte\teksthoogte % mine !
+ \addsomebackground\v!verborgen#1\zetbreedte\teksthoogte % mine !
\fi
\addsomebackground\v!tekst#1\zetbreedte\teksthoogte}
@@ -217,12 +217,12 @@
\let\pagebackgrounddepth = \!!zeropoint
% \def\setbackgroundboxes
-% {\showmessage{\m!layouts}{8}\empty
+% {\showmessage\m!layouts8\empty
% \setbackgroundbox\leftbackground\relax
% \ifdubbelzijdig
% \setbackgroundbox\rightbackground\doswapmargins
% \fi
-% \doifnot{\@@mastatus}{\v!herhaal}{\global\newbackgroundfalse}}
+% \doifnot\@@mastatus\v!herhaal{\global\newbackgroundfalse}}
%D We need a bit more clever mechanism in order to handle
%D layers well. This means that we cannot calculate both
@@ -237,8 +237,8 @@
\def\setbackgroundboxes
{\ifnewbackground
- \global\chardef\newrightbackground1
- \global\chardef\newleftbackground1
+ \global\chardef\newrightbackground\plusone
+ \global\chardef\newleftbackground\plusone
\global\setbox\leftbackground\emptybox
\global\setbox\rightbackground\emptybox
\fi
@@ -246,21 +246,21 @@
\ifcase\newleftbackground \else
\showmessage\m!layouts8\empty
\setbackgroundbox\leftbackground\relax
- \global\chardef\newleftbackground0
- \global\chardef\newrightbackground0
+ \global\chardef\newleftbackground\zerocount
+ \global\chardef\newrightbackground\zerocount
\fi
\orsideone
\ifcase\newleftbackground \else
\showmessage\m!layouts8\empty
\setbackgroundbox\leftbackground\relax
- \global\chardef\newleftbackground0
- %\global\chardef\newrightbackground0
+ \global\chardef\newleftbackground\zerocount
+ %\global\chardef\newrightbackground\zerocount
\fi
\orsidetwo
\ifcase\newrightbackground \else
\showmessage\m!layouts8\empty
\setbackgroundbox\rightbackground\doswapmargins
- \global\chardef\newrightbackground0
+ \global\chardef\newrightbackground\zerocount
\fi
\od
\ifx\@@mastatus\v!herhaal\else\global\newbackgroundfalse\fi}
@@ -268,7 +268,7 @@
\def\addmainbackground#1% todo: dimension spec
{\ifsomebackground
\setbackgroundboxes
- \setbox#1=\vbox
+ \setbox#1\vbox
{\offinterlineskip
\doifmarginswapelse
{\copy\leftbackground}
@@ -301,7 +301,7 @@
\appendtoks \setbackgroundoffsets \to \everybeforepagebody
\def\setbackgroundbox#1#2%
- {\global\setbox#1=\vbox
+ {\global\setbox#1\vbox
{\dontcomplain
\calculatereducedvsizes
\offinterlineskip
@@ -322,7 +322,7 @@
\def\dodopagebodybackground#1#2%
{\ifdim#2>\zeropoint % added, faster
- \setbox\scratchbox=\vbox to #2
+ \setbox\scratchbox\vbox to #2
\bgroup\hbox\bgroup
\swapmargins
\goleftonpage
@@ -336,7 +336,7 @@
\hskip\rechterrandafstand
\dododopagebodybackground\rechterrandbreedte #2#1\v!rechterrand
\egroup\egroup
- \wd\scratchbox=\zeropoint
+ \wd\scratchbox\zeropoint
\box\scratchbox\relax
\fi}
@@ -355,7 +355,7 @@
\hskip#1%
\fi
\else
- \hskip#1%
+ \hskip#1%
\fi}
%D The background mechanism is quite demanding in terms or
@@ -374,7 +374,7 @@
%D Because the number of arguments runs from one to three,
%D we need to check for it.
-\def\setupbackgrounds%
+\def\setupbackgrounds
{\dotripleempty\dosetupbackgrounds}
\def\dosetupbackgrounds[#1][#2][#3]%
@@ -551,6 +551,56 @@
[\v!verborgen]
[\c!achtergrond=\hiddenbackground]
+% The next series is used in local (for instance floating)
+% backgrounds.
+
+\presetlocalframed
+ [\??ma\v!lokaal]
+
+\def\localbackground
+ {\v!lokaal-2,\v!lokaal-1,\v!voorgrond,\v!lokaal+1,\v!lokaal+2}
+
+\defineoverlay[\v!lokaal-2][\positionoverlay{\v!lokaal-2}]
+\defineoverlay[\v!lokaal-1][\positionoverlay{\v!lokaal-1}]
+\defineoverlay[\v!lokaal+1][\positionoverlay{\v!lokaal+1}]
+\defineoverlay[\v!lokaal+2][\positionoverlay{\v!lokaal+2}]
+
+\def\addlocalbackgroundtobox
+ {\ifconditional\hiddenbackgroundenabled
+ \expandafter\doaddlocalbackground
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+\def\doaddlocalbackground#1%
+ {\scratchdimen\dp#1%
+ \edef\next
+ {\noexpand\redoglobal\wd#1\the\wd#1%
+ \noexpand\redoglobal\ht#1\the\ht#1%
+ \noexpand\dodoglobal\dp#1\the\dp#1}%
+ \dp#1\zeropoint
+ \setbox#1\hbox
+ {\localframed
+ [\??ma\v!lokaal]
+ [\c!kader=\v!uit,
+ \c!offset=\v!overlay,
+ \c!achtergrond=\localbackground]%
+ {\registerMPlocaltextarea{\box#1}}}%
+ \ifdim\naturalfloatdepth>\zeropoint % maybe take difference
+ \redoglobal\setbox#1\hbox{\lower\scratchdimen\box#1}%
+ \fi
+ \next}
+
+% Test how previous macro behaves with depth:
+%
+% \startcolumnset
+% \input tufte
+% \placefigure{none}{\framed[lines=5]{xxx}}
+% \input tufte
+% \placefigure{none}{\starttabulate\NC test\nc test\NC\NR\stoptabulate}
+% \input tufte
+% \stopcolumnset
+
%D Because we haven't really set up backgrounds yet, we set
%D the main efficiency switch to false.
diff --git a/tex/context/base/page-flt.tex b/tex/context/base/page-flt.tex
index 2f7b98ac2..376c98eb7 100644
--- a/tex/context/base/page-flt.tex
+++ b/tex/context/base/page-flt.tex
@@ -25,15 +25,15 @@
\def\spreadhbox#1% rebuilds \hbox{<box><hss><box><hss><box>}
{\bgroup
\ifhbox#1\relax
- \setbox2=\voidbox
+ \setbox2\voidbox
\unhbox#1%
\doloop
{\unpenalty\unskip\unpenalty\unskip\unpenalty\unskip
- \setbox0=\lastbox
+ \setbox0\lastbox
\ifvoid0
\exitloop
\else
- \setbox2=\hbox
+ \setbox2\hbox
{\ifhbox0 \spreadhbox0\else\box0\fi
\ifvoid2 \else\hss\unhbox2\fi}%
\fi}%
@@ -161,7 +161,7 @@
{\dodoubleargument\getparameters[\??bk]}
\def\stelblokkopjesin
- {\dodoubleargument\getparameters[\??kj]}%
+ {\dodoubleargument\getparameters[\??kj]}
\def\dostelplaatsblokin[#1][#2]%
{\def\docommando##1{\getparameters[\??fl##1][#2]}%
@@ -180,7 +180,7 @@
\def\doleegblok#1%
{\localframed
[\??fl#1][\c!kader=\v!aan]%
- {\getmessage{\m!floatblocks}{12}}}
+ {\getmessage\m!floatblocks{12}}}
\def\docomplexplaatsblok[#1][#2]% [#3]#4%
{\doifelsenothing{#1}
@@ -191,33 +191,6 @@
{\edef\floatlocation{#2}}%
\expanded{\dodocomplexplaatsblok[\floattype][\floatlocation]}}
-% \def\dodocomplexplaatsblok[#1][#2][#3]#4%
-% {\flushnotes
-% \ifsomefloatwaiting
-% % this was \checkwaitingfloats spread all over
-% \doifinsetelse{\v!altijd}{#2}
-% {\showmessage{\m!floatblocks}{5}{}}
-% {\doifcommonelse
-% {#2}
-% {\v!tekst,\v!naast,% \v!pagina,
-% \v!links,\v!rechts,\v!inlinker,\v!inrechter,%
-% \v!inmarge}
-% {\doflushfloats}
-% {}}%
-% % but which should be done before using box \floatbox
-% \fi
-% \ifmargeblokken
-% \doifinset{\v!marge}{#2}
-% {\bgroup\everypar{\egroup\the\everypar}%
-% \hsize\@@mbbreedte}%
-% \fi
-% \global\insidefloattrue
-% \let\@@extrafloat\empty
-% \dowithnextboxcontent % better a \the\everyfloattoks
-% {\postponefootnotes} % new
-% {\xdocompletefloat{#1}{#3}{#1}{#2}{#1}{#4}}%
-% \vbox}
-
\def\presetfloatvariables#1#2#3#4%
{\doifcommonelse
{#2}
@@ -230,32 +203,59 @@
\fi
\calculatefloatskips{#1}%
\ifparfloat
- \doifinset{\v!hoog}{#2}
- {\global\sidefloattopskip \zeropoint}%
- \doifinset{\v!laag}{#2}
- {\global\sidefloatbottomskip\zeropoint}%
- \doifinset{\v!passend}{#2}
+ \doifinset\v!hoog{#2}{\global\sidefloattopskip \zeropoint}%
+ \doifinset\v!laag{#2}{\global\sidefloatbottomskip\zeropoint}%
+ \doifinset\v!passend{#2}
{\global\sidefloattopskip \zeropoint
\global\sidefloatbottomskip\zeropoint
\global\floatsideskip \zeropoint}%
\fi
- \doifinsetelse{\v!geennummer}{#2}
- {\doifelsevalue{\??kj#1\c!nummer}{\v!ja}
- {\global\nofloatnumbertrue}
- {\global\nofloatnumberfalse}}
- {\global\nofloatnumberfalse}%
- \doifinsetelse{\v!geen}{#2}
+ \doifinsetelse\v!geennummer{#2}
+ {\global\nofloatnumbertrue}
+ {\doifelsevalue{\??kj#1\c!nummer}\v!ja
+ {\global\nofloatnumberfalse}
+ {\global\nofloatnumbertrue}}%
+ \ConvertToConstant\doifelse{#4}{}
+ {\global\emptyfloatcaptiontrue}
+ {\global\emptyfloatcaptionfalse}%
+ \doifinsetelse\v!geen{#2}
{\global\nofloatcaptiontrue}
- {\ConvertToConstant\doifelse{#4}{\v!geen}
+ {\ConvertToConstant\doifelse{#4}\v!geen
{\global\nofloatcaptiontrue}
- {\global\nofloatcaptionfalse}}}
+ {\global\nofloatcaptionfalse}}%
+ \ifemptyfloatcaption \ifnofloatnumber
+ \global\nofloatcaptiontrue
+ \fi \fi}
+
+\def\presetmorefloatvariables#1%
+ {\doifelse\@@bklokaal\v!ja % fout keyword
+ \globalcenterfloatboxtrue
+ \globalcenterfloatboxfalse
+ \ifglobalcenterfloatbox
+ \localcenterfloatboxtrue
+ \else
+ \doifinsetelse\v!lokaal{#1}
+ \localcenterfloatboxtrue
+ \localcenterfloatboxfalse
+ \fi
+ \doifnotinset\v!altijd{#1}
+ {\globalcenterfloatboxfalse
+ \localcenterfloatboxfalse}}
+
+\def\setlocalfloathsize
+ {\iflocalcenterfloatbox
+ \seteffectivehsize
+ \hsize\localhsize
+ \fi}
+
+\newevery \everyinsidefloat \relax
\def\dodocomplexplaatsblok[#1][#2][#3]#4%
{\flushnotes
\ifsomefloatwaiting
% this was \checkwaitingfloats spread all over
- \doifinsetelse{\v!altijd}{#2}
- {\showmessage{\m!floatblocks}{5}{}}
+ \doifinsetelse\v!altijd{#2}
+ {\showmessage\m!floatblocks5\empty}
{\doifcommonelse
{#2}
{\v!tekst,\v!naast,% \v!pagina,
@@ -266,26 +266,67 @@
% but which should be done before using box \floatbox
\fi
\ifmargeblokken
- \doifinset{\v!marge}{#2}
+ \doifinset\v!marge{#2}
{\bgroup\everypar{\egroup\the\everypar}%
\hsize\@@mbbreedte}%
\fi
\global\insidefloattrue
+\begingroup
+\the\everyinsidefloat
\let\@@extrafloat\empty
+ \presetmorefloatvariables{#2}%
\dowithnextboxcontent % better a \the\everyfloattoks
- {\postponefootnotes} % new
- {\xdocompletefloat{#1}{#3}{#1}{#2}{#1}{#4}}
- \vbox}
-
+ {\setlocalfloathsize
+ \postponefootnotes} % new
+ {\xdocompletefloat{#1}{#3}{#1}{#2}{#1}{#4}%
+\endgroup}
+ \vbox}
+
\def\xxdocompletefloat#1#2%
{\setbox\nextbox\hbox{\signalrightpage\box\nextbox}%
\doifrightpageelse{\let\@@extrafloat#1}{\let\@@extrafloat#2}}
\newif\ifextrafloatactions \extrafloatactionstrue
+% \let\movesidefloat\gobbleoneargument
+
+% new : \placefloat[leftmargin,-2*line]
+
+\def\movesidefloat[#1]%
+ {\bgroup
+ \donefalse
+ \def\movesidefloat##1%
+ {\ifdone \else
+ \global\sidefloatdownshift\zeropoint
+ \donetrue
+ \fi
+ \global\advance\sidefloatdownshift##1\lineheight}%
+ \expanded{\dorepeatwithcommand[#1]}\domovesidefloat
+ \egroup}
+
+% or cleaner be longer:
+%
+% \def\movesidefloat[#1]%
+% {\bgroup
+% \def\movesidefloat##1%
+% {\global\sidefloatdownshift\zeropoint
+% \def\movesidefloat####1%
+% {\global\advance\sidefloatdownshift####1\lineheight}%
+% \movesidefloat##1}%
+% \expanded{\dorepeatwithcommand[#1]}\domovesidefloat
+% \egroup}
+
+\def\domovesidefloat#1%
+ {\processaction
+ [#1]%
+ [ \v!regel=>\movesidefloat+,%
+ -\v!regel=>\movesidefloat-]}
+
\def\xdocompletefloat#1#2#3#4#5#6%
{\ifextrafloatactions
\let\@@extrafloat\empty
+ % \sidefloatdownshift will be reset afterwards, and can
+ % already be set at this point
\processallactionsinset
[#4]
[\v!binnen=>\xxdocompletefloat\v!links \v!rechts,
@@ -296,7 +337,8 @@
\v!buitenrand=>\xxdocompletefloat\v!rechterrand \v!linkerrand,
% for old times sake
ininner=>\xxdocompletefloat\v!inlinker \v!inrechter,
- inouter=>\xxdocompletefloat\v!inrechter \v!inlinker]%
+ inouter=>\xxdocompletefloat\v!inrechter \v!inlinker,
+ \s!unknown=>{\movesidefloat[\commalistelement]}]%
\ifx\@@extrafloat\empty
\setlocalfloatdimensions{#1}{#4}%
\docompletefloat{#1}{#2}{#3}{#4}{#5}{#6}{\box\nextbox}%
@@ -312,14 +354,16 @@
\def\setlocalfloatdimensions#1#2% experimental ! ! ! !
{\doifvaluesomething{\??fl#1\c!maxbreedte}
- {\scratchdimen=\getvalue{\??fl#1\c!maxbreedte}\relax
+ {\scratchdimen\getvalue{\??fl#1\c!maxbreedte}\relax
\ifdim\wd\nextbox>\scratchdimen
- \setbox\nextbox=\hbox to \scratchdimen
- {\doifnotcommon
- {\v!rechts,\v!inrechter,\v!rechtermarge,\v!rechterrand}{#2}\hss
- \box\nextbox
- \doifnotcommon
- {\v!links,\v!inlinker,\v!linkermarge,\v!linkerrand}{#2}\hss}%
+ \setbox\nextbox\hbox to \scratchdimen
+ {\doifcommonelse{\v!rechts,\v!inrechter,\v!links,\v!inlinker}{#2}
+ {\doifnotcommon{\v!rechts,\v!inrechter}{#2}\hss
+ \box\nextbox
+ \doifnotcommon{\v!links ,\v!inlinker }{#2}\hss}%
+ {\doifvalue{\??fl#1\c!plaats}\v!rechts\hss
+ \box\nextbox
+ \doifvalue{\??fl#1\c!plaats}\v!links \hss}}%
\fi}}
\def\docomplexstarttekstblok[#1][#2][#3]%
@@ -357,6 +401,8 @@
\c!zijvoorwit=\@@bkzijvoorwit,
\c!zijnawit=\@@bkzijnawit,
\c!marge=\@@bkmarge,
+ \c!linkermargeafstand=\@@bklinkermargeafstand,
+ \c!rechtermargeafstand=\@@bkrechtermargeafstand,
\c!kader=\@@bkkader,
\c!straal=\@@bkstraal,
\c!hoek=\@@bkhoek,
@@ -370,6 +416,7 @@
\c!linkerkader=\@@bklinkerkader,
\c!rechterkader=\@@bkrechterkader,
\c!kaderoffset=\@@bkkaderoffset,
+ %\c!lokaal=\@@bklokaal,
\c!paginaovergangen=,
\c!default=]%
\stelblokkopjein
@@ -427,13 +474,16 @@
\setvalue{\e!leeg#1}%
{\doleegblok{#1}}}
+% \setupfloat[...][leftmargindistance=1cm,default={left,none}]
+
\def\redodefinieerplaatsblok[#1][#2][#3]% same label/number
{\presetlocalframed[\??fl#1]%
\copylocalframed[\??fl#1][\??fl#3]%
\copyparameters[\??fl#1][\??fl#3]
- [\c!breedte,\c!hoogte,
+ [\c!breedte,\c!hoogte,%\c!lokaal,
\c!maxbreedte,\c!maxhoogte,\c!marge,\c!zijvoorwit,\c!zijnawit,
- \c!kader,\c!straal,\c!hoek,\c!plaats,\c!achtergrond,
+ \c!linkermargeafstand,\c!rechtermargeafstand,
+ \c!kader,\c!straal,\c!hoek,\c!plaats,\c!achtergrond,\c!kaderkleur,
\c!achtergrondraster,\c!achtergrondkleur,\c!achtergrondoffset,
\c!bovenkader,\c!onderkader,\c!linkerkader,\c!rechterkader,
\c!kaderoffset,\c!paginaovergangen,\c!default]%
@@ -483,13 +533,13 @@
% Daarbij wordt gebruik gemaakt van de opgeslagen nummers en
% volgorde.
-\definetwopasslist{\s!float}
+\definetwopasslist\s!float
-\def\dofloatreference%
+\def\dofloatreference
{\doglobal\increment\numberedfloat
- \edef\dodofloatreference%
- {\writeutilitycommand%
- {\twopassentry%
+ \edef\dodofloatreference
+ {\writeutilitycommand
+ {\twopassentry
{\s!float}%
{\numberedfloat}%
{\hetnummer}}}%
@@ -497,14 +547,12 @@
\def\redofloatorder#1%
{\doglobal\increment\nofplacedfloats\relax
- \gettwopassdata{\s!float}%
+ \gettwopassdata\s!float
\iftwopassdatafound
- \doifnot{\hetnummer}{\twopassdata}
+ \doifnot\hetnummer\twopassdata
{\edef\oldhetnummer{\hetnummer}%
\xdef\hetnummer{\twopassdata}%
- \showmessage
- {\m!floatblocks}{1}
- {\nofplacedfloats,#1 \oldhetnummer,\hetnummer}}%
+ \showmessage\m!floatblocks1{\nofplacedfloats,#1 \oldhetnummer,\hetnummer}}%
\fi}
% In \dofloatinfomessage wordt {{ }} gebruikt omdat anders
@@ -513,115 +561,55 @@
\def\dofloatinfomessage#1#2#3%
{\bgroup
- \showmessage{\m!floatblocks}{#2}{#3}%
+ \showmessage\m!floatblocks{#2}{#3}%
\@EA\floatinfo\@EA#1\@EA{\currentmessagetext}%
\egroup}
-\def\dosavefloatinfo%
+\def\dosavefloatinfo
{\dofloatinfomessage{>}{2}{\the\totalnoffloats}}
-\def\dofloatflushedinfo%
+\def\dofloatflushedinfo
{\bgroup
- \!!counta=\totalnoffloats
- \advance\!!counta by -\savednoffloats
+ \!!counta\totalnoffloats
+ \advance\!!counta -\savednoffloats
\dofloatinfomessage{<}{3}{\the\!!counta}%
\egroup}
-\def\doinsertfloatinfo%
+\def\doinsertfloatinfo
{\dofloatinfomessage{<}{4}{\the\totalnoffloats}}
-
-% ook voetnoten saven
-
-% \def\dogetfloat%
-% {\ifsomefloatwaiting
-% \global\setbox\floatlist=\vbox
-% {\unvbox\floatlist
-% \global\setbox\globalscratchbox=\lastbox}%
-% \setbox\floatbox=\box\globalscratchbox % local !
-% \global\advance\savednoffloats by -1\relax
-% \ifnum\savednoffloats=0
-% \global\somefloatwaitingfalse
-% \fi
-% \else
-% \global\savednoffloats=0
-% \global\setbox\floatbox=\box\voidb@x
-% \fi}
-%
-% \def\dosavefloat%
-% {\global\setbox\floatlist=\vbox
-% {\nointerlineskip
-% \box\floatbox
-% \unvbox\floatlist}%
-% \global\advance\savednoffloats by 1
-% \global\somefloatwaitingtrue
-% \dosavefloatinfo
-% \nonoindentation}
-%
-% \def\doresavefloat%
-% {\global\setbox\floatlist=\vbox
-% {\nointerlineskip
-% \unvbox\floatlist
-% \box\floatbox}%
-% \global\advance\savednoffloats by 1
-% \global\somefloatwaitingtrue}
-%
-% \def\doreversesavefloat%
-% {\global\setbox\floatlist=\vbox
-% {\nointerlineskip
-% \unvbox\floatlist
-% \box\floatbox}%
-% \global\advance\savednoffloats by 1
-% \global\somefloatwaitingtrue
-% \dosavefloatinfo}
-
-% \def\Xdogetfloat%
-% {\ifcase\savednoffloats\global\somefloatwaitingfalse\fi
-% \ifsomefloatwaiting
-% \global\setbox\floatlist=\vbox
-% {\unvbox\floatlist
-% \global\setbox\globalscratchbox=\lastbox}%
-% \global\advance\savednoffloats by -1
-% \global\setbox\floatbox=\box\globalscratchbox
-% % \ifnum\savednoffloats=0
-% % \global\somefloatwaitingfalse
-% % \fi
-% \else
-% \global\savednoffloats=0
-% \global\setbox\floatbox=\box\voidb@x
-% \fi}
-\def\dogetfloat%
+\def\dogetfloat
{\ifsomefloatwaiting
- \global\setbox\floatlist=\vbox
+ \global\setbox\floatlist\vbox
{\unvbox\floatlist
- \global\setbox\globalscratchbox=\lastbox}%
+ \global\setbox\globalscratchbox\lastbox}%
\ifcenterfloatbox
\ifdim\wd\globalscratchbox<\hsize
- \setbox\floatbox=\hbox to \hsize{\hss\box\globalscratchbox\hss}%
+ \setbox\floatbox\hbox to \hsize{\hss\box\globalscratchbox\hss}%
\else
- \setbox\floatbox=\box\globalscratchbox % local !
+ \setbox\floatbox\box\globalscratchbox % local !
\fi
\else
- \setbox\floatbox=\box\globalscratchbox % local !
+ \setbox\floatbox\box\globalscratchbox % local !
\fi
- \global\advance\savednoffloats by -1\relax
- \ifnum\savednoffloats=0
+ \global\advance\savednoffloats \minusone
+ \ifcase\savednoffloats
\global\somefloatwaitingfalse
\fi
\else
- \global\savednoffloats=0
- \global\setbox\floatbox=\box\voidb@x
+ \global\savednoffloats\zerocount
+ \global\setbox\floatbox\box\voidb@x
\fi}
-\def\uncenteredfloatbox%
+\def\uncenteredfloatbox
{\ifcenterfloatbox
\ifhbox\floatbox\relax % remove centering
\ifdim\wd\floatbox=\hsize
\ifhbox\floatbox
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\unhbox\floatbox
\unskip\unskip
- \global\setbox\globalscratchbox=\lastbox}%
+ \global\setbox\globalscratchbox\lastbox}%
\box\globalscratchbox
\else
\box\floatbox
@@ -636,40 +624,40 @@
\box\floatbox
\fi}
-\def\dosavefloat%
- {\global\setbox\floatlist=\vbox
+\def\dosavefloat
+ {\global\setbox\floatlist\vbox
{\nointerlineskip
\uncenteredfloatbox
\unvbox\floatlist}%
- \global\advance\savednoffloats 1
+ \global\advance\savednoffloats \plusone
\global\somefloatwaitingtrue
\dosavefloatinfo
\nonoindentation}
-\def\doresavefloat%
- {\global\setbox\floatlist=\vbox
+\def\doresavefloat
+ {\global\setbox\floatlist\vbox
{\nointerlineskip
\unvbox\floatlist
\uncenteredfloatbox}%
- \global\advance\savednoffloats 1
+ \global\advance\savednoffloats \plusone
\global\somefloatwaitingtrue}
-\def\doreversesavefloat%
- {\global\setbox\floatlist=\vbox
+\def\doreversesavefloat
+ {\global\setbox\floatlist\vbox
{\nointerlineskip
\unvbox\floatlist
\uncenteredfloatbox}%
- \global\advance\savednoffloats 1
+ \global\advance\savednoffloats \plusone
\global\somefloatwaitingtrue
\dosavefloatinfo}
-\def\dosavefloatstatus%
+\def\dosavefloatstatus
{\global\setbox\savedfloatlist\copy\floatlist
\global\setbox\savedfloatbox \copy\floatbox
- \xdef\dorestorefloatstatus%
+ \xdef\dorestorefloatstatus
{\global\setbox\floatlist\box\savedfloatlist
\global\setbox\floatbox \box\savedfloatbox
- \savednoffloats\the\savednoffloats}}
+ \global\savednoffloats\the\savednoffloats}}
\let\dorestorefloatstatus\relax
@@ -685,15 +673,17 @@
\newif\iftopofinsert
\newif\iftestfloatbox
-\newif\ifcenterfloatbox \centerfloatboxtrue
+\newif\ifcenterfloatbox \centerfloatboxtrue
+\newif\iflocalcenterfloatbox \localcenterfloatboxfalse
+\newif\ifglobalcenterfloatbox \globalcenterfloatboxfalse
% beter de laatste skip buiten de \insert uitvoeren,
% bovendien bij volle flush onder baseline.
\def\betweenfloatblanko% assumes that \@@bknawit is present
{\bgroup
- \setbox0=\vbox{\strut\blanko[\@@bkvoorwit]\strut}%
- \setbox2=\vbox{\strut\blanko[\@@bknawit ]\strut}%
+ \setbox0\vbox{\strut\blanko[\@@bkvoorwit]\strut}%
+ \setbox2\vbox{\strut\blanko[\@@bknawit ]\strut}%
\ifdim\ht0>\ht2
\blanko[-\@@bknawit,\@@bkvoorwit]
\fi
@@ -718,36 +708,36 @@
\def\somepagefloat[#1]% links, rechts, midden, hoog, midden, laag
{%\checkwaitingfloats{#1}%
- \global\setbox\collectedpagefloats=\vbox
+ \global\setbox\collectedpagefloats\vbox
{\unvbox\collectedpagefloats
\vbox to \teksthoogte
- {\doifnotinset{\v!hoog}{#1}{\vfill}
+ {\doifnotinset\v!hoog{#1}\vfill
\box\floatbox
- \doifnotinset{\v!laag}{#1}{\vfill}}
+ \doifnotinset\v!laag{#1}\vfill}%
\goodbreak}%
\doinsertfloatinfo}
\def\sometextfloat[#1]% lang, links, rechts, hoog, midden, laag, offset
{%\checkwaitingfloats{#1}%
\def\dostoptextfloat{\dodostoptextfloat[#1]}%
- \global\floattextwidth=\hsize
- \global\floatwidth=\wd\floatbox
- \global\floatheight=\ht\floatbox % forget about the depth
+ \global\floattextwidth\hsize
+ \global\floatwidth\wd\floatbox
+ \global\floatheight\ht\floatbox % forget about the depth
\global\advance\floattextwidth -\floatwidth
\global\advance\floattextwidth -\@@bkmarge\relax % was \tfskipsize
- \doifinsetelse{\v!lang}{#1}
- {\floattextheight=\pagegoal
- \advance\floattextheight by -\pagetotal
- \advance\floattextheight by -\bigskipamount % lelijk
+ \doifinsetelse\v!lang{#1}
+ {\floattextheight\pagegoal
+ \advance\floattextheight -\pagetotal
+ \advance\floattextheight -\bigskipamount % lelijk
\ifdim\floattextheight>\teksthoogte
- \floattextheight=\teksthoogte
+ \floattextheight\teksthoogte
\fi
- \boxmaxdepth=\zeropoint \relax % toegevoegd
+ \boxmaxdepth\zeropoint \relax % toegevoegd
\ifdim\floattextheight<\floatheight
- \floattextheight=\floatheight
+ \floattextheight\floatheight
\fi
- \setbox\floattext=\vbox to \floattextheight}
- {\setbox\floattext=\vbox}%
+ \setbox\floattext\vbox to \floattextheight}
+ {\setbox\floattext\vbox}%
\bgroup
\forgetall\stelblankoin\stelwitruimtein % new, also needed for footnotes
\blanko[\v!blokkeer]
@@ -756,48 +746,48 @@
\def\dodostoptextfloat[#1]% % de tekst kan beter in een soort
{\egroup % kadertekst zonder kader, is flexibeler
- \doifnotinset{\v!lang}{#1}% en beter
+ \doifnotinset\v!lang{#1}% en beter
{\ifdim\ht\floattext<\floatheight
- \floattextheight=\floatheight
+ \floattextheight\floatheight
\else
- \floattextheight=\ht\floattext
+ \floattextheight\ht\floattext
\fi}%
- \setbox\floatbox=\vbox to \floattextheight
+ \setbox\floatbox\vbox to \floattextheight
{\hsize\floatwidth
- \doifinsetelse{\v!beide}{#1}%
- {\doifinsetelse{\v!laag}{#1}
+ \doifinsetelse\v!beide{#1}%
+ {\doifinsetelse\v!laag{#1}
{\vfill\box\floatbox}
- {\doifinsetelse{\v!midden}{#1}
+ {\doifinsetelse\v!midden{#1}
{\vfill\box\floatbox\vfill}
{\box\floatbox\vfill}}}
{\box\floatbox\vfill}}%
- \setbox\floattext=\vbox to \floattextheight
+ \setbox\floattext\vbox to \floattextheight
{\hsize\floattextwidth
- \doifinsetelse{\v!laag}{#1}
+ \doifinsetelse\v!laag{#1}
{\vfill
\box\floattext
- \doifinset{\c!offset}{#1}{\witruimte\blanko}}
- {\doifinsetelse{\v!midden}{#1}
+ \doifinset\c!offset{#1}{\witruimte\blanko}}
+ {\doifinsetelse\v!midden{#1}
{\vfill
\box\floattext
\vfill}
- {\doifinset{\v!offset}{#1}{\witruimte\blanko}%
+ {\doifinset\v!offset{#1}{\witruimte\blanko}%
\box\floattext
\vfill}}}%
- \doifinsetelse{\v!rechts}{#1}%
- {\setbox\floatbox=\hbox to \hsize
+ \doifinsetelse\v!rechts{#1}%
+ {\setbox\floatbox\hbox to \hsize
{\box\floattext
\hfill
\box\floatbox}}
- {\setbox\floatbox=\hbox to \hsize
+ {\setbox\floatbox\hbox to \hsize
{\box\floatbox
\hfill
\box\floattext}}%
\baselinecorrection
\witruimte
\blanko[\@@bkvoorwit]%
- \doifnotinset{\v!lang}{#1}%
- {\dp\floatbox=\openstrutdepth}% dp\strutbox}% % toegevoegd
+ \doifnotinset\v!lang{#1}%
+ {\dp\floatbox\openstrutdepth}% dp\strutbox}% % toegevoegd
\box\floatbox
\blanko[\@@bknawit]%
\doinsertfloatinfo}
@@ -808,14 +798,14 @@
\doinsertfloatinfo}
\def\someelsefloat[#1]%
- {\doifinsetelse{\v!hier}{#1}
- {\doifinsetelse{\v!altijd}{#1}
+ {\doifinsetelse\v!hier{#1}
+ {\doifinsetelse\v!altijd{#1}
{\pagina[\v!voorkeur]%
\docheckiffloatfits
\ifroomforfloat
\placesomeherefloat[#1]%
\else
- \showmessage{\m!floatblocks}{9}{}%
+ \showmessage\m!floatblocks9\empty
\doreversesavefloat
\fi}
{\ifsomefloatwaiting
@@ -829,7 +819,7 @@
\dosavefloat
\fi
\fi}}
- {\doifinsetelse{\v!altijd}{#1}
+ {\doifinsetelse\v!altijd{#1}
{\docheckiffloatfits
\ifroomforfloat
\processallactionsinset
@@ -839,7 +829,7 @@
\s!unknown=>{\placesomeherefloat[#1]},
\s!default=>{\placesomeherefloat[#1]}]%
\else
- \showmessage{\m!floatblocks}{9}{}%
+ \showmessage\m!floatblocks9\empty
\doreversesavefloat
\fi}
{\docheckiffloatfits
@@ -871,12 +861,17 @@
% na float plaatsen; kan worden gebruikt om in
% andere commando's witruimte te onderdrukken
-\newdimen\floattopskip \floattopskip=12pt
-\newdimen\floatbottomskip \floatbottomskip=12pt
-\newdimen\floatsideskip \floatsideskip=12pt
+\newdimen\floatsideskip \floatsideskip =12pt
+\newdimen\floattopskip \floattopskip =\floattopskip
+\newdimen\floatbottomskip \floatbottomskip=\floattopskip
-\newdimen\sidefloattopskip \sidefloattopskip=\floattopskip
+\newdimen\sidefloattopskip \sidefloattopskip =\floattopskip
\newdimen\sidefloatbottomskip \sidefloatbottomskip=\floatbottomskip
+
+\newskip\sidefloatdownshift
+\newskip\sidefloatleftshift
+\newskip\sidefloatrightshift
+
\def\sidefloattopoffset {\openstrutdepth} % {\dp\strutbox}
\newcount\noftopfloats \noftopfloats=2
@@ -884,11 +879,12 @@
\newif\ifnofloatcaption
\newif\ifnofloatnumber
+\newif\ifemptyfloatcaption
\def\docalculatefloatskip#1#2%
{\doifelsenothing{#2}
{\global#1\zeropoint}
- {\doifelse{#2}{\v!geen}
+ {\doifelse{#2}\v!geen
{\global#1\zeropoint}
{\setbox0\vbox{\witruimte\@EA\blanko\@EA[#2]}%
\global#1\ht0}}}
@@ -899,7 +895,9 @@
\docalculatefloatskip\sidefloattopskip {\getvalue{\??fl#1\c!zijvoorwit}}% \@@bkzijvoorwit
\docalculatefloatskip\sidefloatbottomskip{\getvalue{\??fl#1\c!zijnawit}}% \@@bkzijnawit
\gdef\sidefloattopoffset{\openstrutdepth}% was \def
- \global\floatsideskip\getvalue{\??fl#1\c!marge}% \@@bkmarge\relax
+ \global\floatsideskip\getvalue{\??fl#1\c!marge}%
+ \global\sidefloatleftshift \getvalue{\??fl#1\c!linkermargeafstand}%
+ \global\sidefloatrightshift\getvalue{\??fl#1\c!rechtermargeafstand}%
\global\noftopfloats \@@bknboven\relax
\global\nofbotfloats \@@bknonder\relax}}
@@ -942,43 +940,21 @@
\def\setfloatcaption % \dosetfloatcaption already in use
{\dodoubleempty\dodosetfloatcaption} % beware, name clash
-% \def\dodosetfloatcaption[#1][#2]#3% to do namespace for number/ascii
-% {\doifelsevalue{\??kj#1\c!nummer}{\v!ja} % also handle trialtypesetting
-% {\verhoognummer[#1]%
-% \maakhetnummer[#1]%
-% \global\let\flhetnummer\hetnummer
-% \setgvalue{@fl@r@#1}%
-% {\dofloatreference
-% \redofloatorder{#1}%
-% \doschrijfnaarlijst{#1}{\flhetnummer}{#3}{#1}%
-% \doglobal\convertargument#3\to\flasciititle % \asciititle is global
-% \doifsomething{#2}{\rawreference{\s!flt}{#2}{{\flhetnummer}{\flasciititle}}}%
-% \global\letvalue{@fl@r@#1}\relax}% nills
-% \setgvalue{@fl@t@#1}%
-% {\preparethenumber{\??kj#1}\flhetnummer\preparednumber
-% \doattributes{\??kj#1}\c!letter\c!kleur
-% {\doattributes{\??kj#1}\c!kopletter\c!kopkleur
-% {\labeltexts{#1}{\preparednumber}}%
-% \doattributes{\??kj#1}\c!tekstletter\c!tekstkleur
-% {\tfskip#3}}}}
-% {\global\letvalue{@fl@r@#1}\relax
-% \global\letvalue{@fl@t@#1}\relax}}
-
\def\dodosetfloatcaption[#1][#2]#3% to do namespace for number/ascii
{\ifnofloatnumber % also handle trialtypesetting
- \global\letvalue{@fl@r@#1}\relax
- \global\letvalue{@fl@t@#1}\relax
+ \letgvalue{@fl@r@#1}\relax
+ \letgvalue{@fl@t@#1}\relax
\else
\verhoognummer[#1]%
\maakhetnummer[#1]%
- \global\let\flhetnummer\hetnummer
+ \globallet\flhetnummer\hetnummer
\setgvalue{@fl@r@#1}%
{\dofloatreference
\redofloatorder{#1}%
\doschrijfnaarlijst{#1}{\flhetnummer}{#3}{#1}%
\doglobal\convertargument#3\to\flasciititle % \asciititle is global
- \doifsomething{#2}{\rawreference{\s!flt}{#2}{{\flhetnummer}{\flasciititle}}}%
- \global\letvalue{@fl@r@#1}\relax}% nills
+ \doifsomething{#2}{\rawreference\s!flt{#2}{{\flhetnummer}{\flasciititle}}}%
+ \letgvalue{@fl@r@#1}\relax}% nills
\setgvalue{@fl@t@#1}%
{\preparethenumber{\??kj#1}\flhetnummer\preparednumber
\doattributes{\??kj#1}\c!letter\c!kleur
@@ -997,49 +973,37 @@
\let\placefloatlabeltext \placefloatcaptiontext
\let\placefloatlabelreference \placefloatcaptionreference
-\def\putborderedfloat#1\in#2\\%
- {\setbox#2=\vbox
- {\localframed
- [\??fl#1]
- [\c!breedte=\@@bkbreedte,
- \c!hoogte=\@@bkhoogte,
- \c!plaats=\v!normaal,
- \c!offset=\@@bkoffset]%
- {\box\floatbox}}}
+\def\borderedfloatbox#1%
+ {\localframed
+ [\??fl#1]
+ [\c!breedte=\@@bkbreedte,
+ \c!hoogte=\@@bkhoogte,
+ \c!plaats=\v!normaal,
+ \c!offset=\@@bkoffset]%
+ {\box\floatbox}}
\newbox\captionbox
-% \def\putcompletecaption#1#2#3#4%
-% {\noindent
-% \xdef\floatcaptionnumber{#1}%
-% \doattributes{\??kj#1}\c!letter\c!kleur
-% {\doifvalue{\??kj#1\c!nummer}{\v!ja}
-% {\hbox{\doattributes{\??kj#1}\c!kopletter\c!kopkleur{\strut#2\floatcaptionsuffix}}%
-% \ConvertToConstant\doifnot{#3}{}
-% {\ifcase#4\relax
-% \tfskip\emergencystretch=.5em
-% \else
-% \ifx\@@kjkjtussen\empty\else\unskip\@@kjkjtussen\fi
-% \fi}}%
-% \doattributes{\??kj#1}\c!tekstletter\c!tekstkleur
-% {\begstrut#3\endstrut\endgraf}}}
-
\def\putcompletecaption#1#2#3#4%
{\noindent
\xdef\floatcaptionnumber{#1}%
- \doattributes{\??kj#1}\c!letter\c!kleur
- {\ifnofloatnumber
- \else
- \hbox{\doattributes{\??kj#1}\c!kopletter\c!kopkleur{\strut#2\floatcaptionsuffix}}%
- \ConvertToConstant\doifnot{#3}{}
- {\ifcase#4\relax
- \tfskip\emergencystretch=.5em
- \else
- \ifx\@@kjkjtussen\empty\else\unskip\@@kjkjtussen\fi
- \fi}%
- \fi
- \doattributes{\??kj#1}\c!tekstletter\c!tekstkleur
- {\begstrut#3\endstrut\endgraf}}}
+ \dostartattributes{\??kj#1}\c!letter\c!kleur\empty
+ \ifnofloatnumber
+ \else
+ \hbox{\doattributes{\??kj#1}\c!kopletter\c!kopkleur{\strut#2\floatcaptionsuffix}}%
+ \ifnofloatcaption \else \ifemptyfloatcaption \else
+ \ifcase#4\relax
+ \tfskip\emergencystretch.5em
+ \else
+ \ifx\@@kjkjtussen\empty\else\unskip\@@kjkjtussen\fi
+ \fi
+ \fi \fi
+ \fi
+ \ifnofloatcaption \else
+ \doattributes{\??kj#1}\c!tekstletter\c!tekstkleur
+ {\begstrut#3\endstrut\endgraf}%
+ \fi
+ \dostopattributes}
% new
@@ -1050,76 +1014,52 @@
%\stelblokkopjesin[\c!uitlijnen=\v!links]
%\stelblokkopjesin[\c!uitlijnen=\v!rechts]
-% \def\dosetpagfloat#1#2#3#4% \copy wegwerken
-% {\bgroup
-% \forgetall
-% \postponefootnotes
-% \mindermeldingen
-% \putborderedfloat#4\in\tempfloatbox\\%
-% \def\locatefloat%
-% {\doregelplaats\@@flflplaats}%
-% \ConvertToConstant\doifelse{#3}{\v!geen}
-% {\dopreparenocaption{#1}{#2}{#3}{#4}
-% \edef\width{\the\wd\floatbox}}
-% {\setbox\tempcaptionbox=\hbox
-% {\footnotesenabledfalse\putcompletecaption{#4}{#2}{#3}{0}}%
-% \doifinsetelse{\@@kjkjplaats}{\v!hoog,\v!midden,\v!laag}
-% {\dopreparesidecaption{#1}{#2}{#3}{#4}}
-% {\doifelse{\@@kjkjbreedte}{\v!max}
-% {\dopreparestackcaptionmax{#1}{#2}{#3}{#4}}
-% {\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption
-% \doifelse{\@@kjkjbreedte}{\v!passend}
-% {\dopreparestackcaptionaut{#1}{#2}{#3}{#4}}
-% {\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}%
-% \else
-% \dopreparestackcaptionmin{#1}{#2}{#3}{#4}%
-% \fi}}
-% \edef\width{\the\wd\tempfloatbox}%
-% \buildfloatbox}%
-% \postcenterfloatbox\width
-% \egroup}
-
\def\dosetpagfloat#1#2#3#4% \copy wegwerken
{\bgroup
+\setlocalfloathsize
\forgetall
\postponefootnotes
\mindermeldingen
- \putborderedfloat#4\in\tempfloatbox\\%
- \def\locatefloat%
- {\doregelplaats\@@flflplaats}%
+ \setbox\tempfloatbox\vbox{\borderedfloatbox{#4}}%
+ \def\locatefloat{\doregelplaats\@@flflplaats}%
\ifnofloatcaption
\dopreparenocaption{#1}{#2}{#3}{#4}
\edef\width{\the\wd\floatbox}%
\else
- \setbox\tempcaptionbox=\hbox
+ \setbox\tempcaptionbox\hbox
{\footnotesenabledfalse\putcompletecaption{#4}{#2}{#3}{0}}%
- \doifinsetelse{\@@kjkjplaats}{\v!hoog,\v!midden,\v!laag}
+ \doifinsetelse\@@kjkjplaats{\v!hoog,\v!midden,\v!laag}
{\dopreparesidecaption{#1}{#2}{#3}{#4}}
- {\doifelse{\@@kjkjbreedte}{\v!max}
+ {\doifelse\@@kjkjbreedte\v!max
{\dopreparestackcaptionmax{#1}{#2}{#3}{#4}}
{\ifdim\wd\tempcaptionbox>\wd\tempfloatbox % wider caption
- \doifelse{\@@kjkjbreedte}{\v!passend}
+ \doifelse\@@kjkjbreedte\v!passend
{\dopreparestackcaptionaut{#1}{#2}{#3}{#4}}
{\dopreparestackcaptionwid{#1}{#2}{#3}{#4}}%
\else
\dopreparestackcaptionmin{#1}{#2}{#3}{#4}%
- \fi}}
+ \fi}}%
\edef\width{\the\wd\tempfloatbox}%
\buildfloatbox
\fi
+ \doglobal\addlocalbackgroundtobox\floatbox
\postcenterfloatbox\width
\egroup}
+\ifx\addlocalbackgroundtobox\undefined
+ \let\addlocalbackgroundtobox\gobbleoneargument
+\fi
+
\def\dopreparenocaption#1#2#3#4%
- {\global\setbox\floatbox=\vbox % pas op als wd groter dan hsize
+ {\global\setbox\floatbox\vbox % pas op als wd groter dan hsize
{\ifbinnenkolommen\ifdim\wd\tempfloatbox>\hsize
\let\locatefloat\relax
\fi\fi
\locatefloat{\copy\tempfloatbox}}}
\def\dopreparestackcaptionmax#1#2#3#4%
- {\dosetraggedvbox{\@@kjkjuitlijnen}%
- \setbox\tempcaptionbox=\raggedbox
+ {\dosetraggedvbox\@@kjkjuitlijnen
+ \setbox\tempcaptionbox\raggedbox
{\hsize\wd\tempfloatbox
\putcompletecaption{#4}{#2}{#3}{0}}}
@@ -1127,28 +1067,28 @@
\def\captionovershoot {2em}
\def\dopreparestackcaptionaut#1#2#3#4%
- {\doifsomething{\@@kjkjuitlijnen}
- {\ExpandBothAfter\doifnotinset{\v!midden}{\@@kjkjuitlijnen}
+ {\doifsomething\@@kjkjuitlijnen
+ {\ExpandBothAfter\doifnotinset\v!midden\@@kjkjuitlijnen
{\let\captionovershoot\!!zeropoint}}%
\ifdim\wd\tempfloatbox>\hsize
% float is wider than \hsize
\dosetraggedvbox\@@kjkjuitlijnen
- \setbox\scratchbox=\raggedbox % trial run
- {\hsize=\wd\tempfloatbox
+ \setbox\scratchbox\raggedbox % trial run
+ {\hsize\wd\tempfloatbox
\footnotesenabledfalse
\putcompletecaption{#4}{#2}{#3}{0}}%
\ifdim\ht\scratchbox>\lineheight % more lines
\dosetraggedvbox\@@kjkjuitlijnen
- \setbox\tempcaptionbox=\raggedbox
- {\hsize=\wd\tempfloatbox
+ \setbox\tempcaptionbox\raggedbox
+ {\hsize\wd\tempfloatbox
\advance\hsize -\captionovershoot\relax
\ifdim\hsize<\captionminwidth\relax
- \hsize=\wd\tempfloatbox
+ \hsize\wd\tempfloatbox
\fi
\putcompletecaption{#4}{#2}{#3}{0}}%
\else
- \setbox\tempcaptionbox=\raggedbox
- {\hsize=\wd\tempfloatbox
+ \setbox\tempcaptionbox\raggedbox
+ {\hsize\wd\tempfloatbox
\putcompletecaption{#4}{#2}{#3}{0}}%
\fi
\else
@@ -1158,10 +1098,10 @@
\else
\scratchdimen\wd\tempfloatbox % float width
\fi
- \setbox\scratchbox=\vbox % test with overshoot
+ \setbox\scratchbox\vbox % test with overshoot
{\advance\scratchdimen \captionovershoot
\advance\scratchdimen 3em % an average word length
- \ifdim\scratchdimen<\hsize \hsize=\scratchdimen \fi
+ \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi
\footnotesenabledfalse
\putcompletecaption{#4}{#2}{#3}{0}}%
\ifdim\ht\scratchbox>\lineheight
@@ -1169,11 +1109,11 @@
\dosetraggedvbox\@@kjkjuitlijnen
\setbox\tempcaptionbox\raggedbox
{\advance\scratchdimen \captionovershoot
- \ifdim\scratchdimen<\hsize \hsize=\scratchdimen \fi
+ \ifdim\scratchdimen<\hsize \hsize\scratchdimen \fi
\putcompletecaption{#4}{#2}{#3}{0}}%
\else
% just over a line, don't use an overshoot
- \doifinsetelse{\@@kjkjuitlijnen}{\v!links,\v!rechts}
+ \doifinsetelse\@@kjkjuitlijnen{\v!links,\v!rechts}
{\dosetraggedvbox\@@kjkjuitlijnen
\setbox\tempcaptionbox\raggedbox
{\hsize\scratchdimen
@@ -1188,35 +1128,36 @@
\def\dopreparestackcaptionwid#1#2#3#4%
{\dosetraggedvbox\@@kjkjuitlijnen
- \setbox\tempcaptionbox=\raggedbox
+ \setbox\tempcaptionbox\raggedbox
{\hsize\@@kjkjbreedte
\putcompletecaption{#4}{#2}{#3}{0}}}
\def\dopreparestackcaptionmin#1#2#3#4%
{\raggedcenter % the default
\dosetraggedvbox\@@kjkjuitlijnen % when given
- \setbox\tempcaptionbox=\raggedbox % vbox, keeps footnotes
+ \setbox\tempcaptionbox\raggedbox % vbox, keeps footnotes
{\hsize\wd\tempfloatbox
\putcompletecaption{#4}{#2}{#3}{0}}}
\def\dopreparesidecaption#1#2#3#4%
- {\dimen0=\hsize
- \advance\dimen0 by -\wd\tempfloatbox
- \advance\dimen0 by -\@@bkmarge\relax % was \tfskipsize\relax
+ {\dimen0\hsize
+ \advance\dimen0 -\wd\tempfloatbox
+ \advance\dimen0 -\@@bkmarge\relax % was \tfskipsize\relax
\ifdim\wd\tempcaptionbox>\dimen0
\dimen2=1.3\dimen0
\ifdim\wd\tempcaptionbox<\dimen2
\dimen0=0.8\dimen0
\fi
\fi
- \setbox\tempcaptionbox=\vbox
- {\hsize=\dimen0
+ \setbox\tempcaptionbox\vbox
+ {\hsize\dimen0
\raggedright
\putcompletecaption{#4}{#2}{#3}{1}}}
-\def\buildfloatbox%
- {\global\setbox\floatbox=\vbox
- {\forgetall
+\def\buildfloatbox
+ {\global\setbox\floatbox\vbox
+ {\setlocalfloathsize
+ \forgetall
\processaction
[\@@kjkjplaats]
[ \v!boven=>\locatefloat{\box\tempcaptionbox}%
@@ -1226,7 +1167,7 @@
\endgraf\@@kjkjtussen
\locatefloat{\box\tempcaptionbox},
\v!hoog=>\locatefloat
- {\doifelse{\@@flflplaats}{\v!links}
+ {\doifelse\@@flflplaats\v!links
{\box\tempfloatbox
\tfskip
\vbox to\ht\tempfloatbox{\@@kjkjtussen\box\tempcaptionbox\vfill}}
@@ -1234,7 +1175,7 @@
\tfskip
\box\tempfloatbox}},
\v!laag=>\locatefloat
- {\doifelse{\@@flflplaats}{\v!links}
+ {\doifelse\@@flflplaats\v!links
{\box\tempfloatbox
\tfskip
\vbox to\ht\tempfloatbox
@@ -1244,7 +1185,7 @@
\tfskip
\box\tempfloatbox}},
\v!midden=>\locatefloat
- {\doifelse{\@@flflplaats}{\v!links}
+ {\doifelse\@@flflplaats\v!links
{\box\tempfloatbox
\tfskip
\vbox to\ht\tempfloatbox{\vfill\box\tempcaptionbox\vfill}}
@@ -1293,56 +1234,50 @@
% \fi\fi\fi
% \global\floatwidth\wd\floatbox}
+%\def\postcenterfloatbox#1%
+% {\ifbinnenkolommen
+% \ifpostponecolumnfloats
+% \scratchdimen\zetbreedte
+% \else
+% \scratchdimen#1\relax
+% \fi
+% \else\ifdim#1>\hsize
+% \scratchdimen\hsize
+% \else
+% \scratchdimen\wd\floatbox
+% \fi\fi
+% \global\setbox\floatbox\hbox to \scratchdimen
+% % {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen !
+% {\hss \box\floatbox\hss }} % wel \hss, anders mis in colset
+
\def\postcenterfloatbox#1%
{\ifbinnenkolommen
\ifpostponecolumnfloats
- \scratchdimen=\zetbreedte
+ \scratchdimen\zetbreedte
\else
- \scratchdimen=#1\relax
+ \scratchdimen#1\relax
\fi
\else\ifdim#1>\hsize
- \scratchdimen=\hsize
+ \scratchdimen\hsize
\else
- \scratchdimen=\wd\floatbox
+ \scratchdimen\wd\floatbox
\fi\fi
- \global\setbox\floatbox=\hbox to \scratchdimen
-% {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen !
- {\hss\box\floatbox\hss}} % wel \hss, anders mis in colset
-
-% \def\dosetparfloat#1#2#3#4%
-% {\bgroup
-% \forgetall
-% \postponefootnotes
-% \mindermeldingen
-% %\showcomposition
-% \putborderedfloat#4\in4\\
-% \ConvertToConstant\doifelse{#3}{\v!geen}
-% {\global\setbox\floatbox=\vbox{\box4}}
-% {\setbox2=\hbox
-% {\forgetall\putcompletecaption{#4}{#2}{#3}{0}}%
-% \doifelse{\@@kjkjbreedte}{\v!max}
-% {\dosetraggedvbox{\@@kjkjuitlijnen}%
-% \setbox2=\raggedbox
-% {\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}}%
-% {\doifelse{\@@kjkjbreedte}{\v!passend}
-% {\ifdim\wd2>\wd4\relax
-% \setbox2=\vbox
-% {\forgetall\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}%
-% \else
-% \setbox2=\hbox to \wd4
-% {\hss\box2\hss}%
-% \fi}
-% {\dosetraggedvbox{\@@kjkjuitlijnen}%
-% \setbox2=\raggedbox
-% {\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}}}%
-% \global\setbox\floatbox=\vbox
-% {\processaction
-% [\@@kjkjplaats]
-% [ \v!boven=>\box2\endgraf\@@kjkjtussen\box4,
-% \v!onder=>\box4\endgraf\@@kjkjtussen\box2,
-% \v!geen=>\box4,
-% \s!unknown=>\box4\endgraf\@@kjkjtussen\box2]}}%
-% \egroup}
+ \global\setbox\floatbox\hbox to \scratchdimen
+ % {\hfill\box\floatbox\hfill}} % geen \hss, gaat mis in kolommen !
+ % {\hss \box\floatbox\hss }} % wel \hss, anders mis in colset
+ {\ifglobalcenterfloatbox
+ \donetrue
+ \else\iflocalcenterfloatbox
+ \donetrue
+ \else
+ \donefalse
+ \fi\fi
+ \ifdim\scratchdimen>\effectivehsize
+ \donefalse
+ \fi
+ \hss\ifdone\hskip\effectiveleftskip\fi
+ \box\floatbox
+ \ifdone\hskip\effectiverightskip\fi\hss}}
\def\dosetparfloat#1#2#3#4%
{\bgroup
@@ -1350,28 +1285,28 @@
\postponefootnotes
\mindermeldingen
%\showcomposition
- \putborderedfloat#4\in4\\
+ \setbox4\vbox{\borderedfloatbox{#4}}%
\ifnofloatcaption
- \global\setbox\floatbox=\vbox{\box4}%
+ \global\setbox\floatbox\vbox{\box4}%
\else
- \setbox2=\hbox
+ \setbox2\hbox
{\forgetall\putcompletecaption{#4}{#2}{#3}{0}}%
- \doifelse{\@@kjkjbreedte}{\v!max}
- {\dosetraggedvbox{\@@kjkjuitlijnen}%
- \setbox2=\raggedbox
+ \doifelse\@@kjkjbreedte\v!max
+ {\dosetraggedvbox\@@kjkjuitlijnen
+ \setbox2\raggedbox
{\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}}%
- {\doifelse{\@@kjkjbreedte}{\v!passend}
+ {\doifelse\@@kjkjbreedte\v!passend
{\ifdim\wd2>\wd4\relax
- \setbox2=\vbox
+ \setbox2\vbox
{\forgetall\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}%
\else
- \setbox2=\hbox to \wd4
+ \setbox2\hbox to \wd4
{\hss\box2\hss}%
\fi}
- {\dosetraggedvbox{\@@kjkjuitlijnen}%
- \setbox2=\raggedbox
+ {\dosetraggedvbox\@@kjkjuitlijnen
+ \setbox2\raggedbox
{\hsize\wd4\putcompletecaption{#4}{#2}{#3}{0}}}}%
- \global\setbox\floatbox=\vbox
+ \global\setbox\floatbox\vbox
{\processaction
[\@@kjkjplaats]
[ \v!boven=>\box2\endgraf\@@kjkjtussen\box4,
@@ -1383,53 +1318,6 @@
\newif\ifparfloat
-% \long\def\dosetfloatbox#1#2#3#4% todo : \global\setbox
-% {\ifvisible
-% \par
-% \doifcommonelse
-% {#1}
-% {\v!links,\v!rechts,\v!inlinker,\v!inrechter,\v!inmarge,%
-% \v!linkermarge,\v!linkerrand,\v!rechtermarge,\v!rechterrand}
-% {\global\parfloattrue}
-% {\global\parfloatfalse}%
-% \ifbinnenkolommen
-% \global\parfloatfalse
-% \fi
-% \edef\@@kjkjbreedte {\getvalue{\??kj#4\c!breedte }}%
-% \def\@@kjkjtussen {\getvalue{\??kj#4\c!tussen }}% no \edef
-% \edef\@@kjkjplaats {\getvalue{\??kj#4\c!plaats }}%
-% \edef\@@kjkjuitlijnen{\getvalue{\??kj#4\c!uitlijnen}}%
-% \edef\@@flflplaats {\getvalue{\??fl#4\c!plaats }}%
-% \ifparfloat
-% \@EA\dosetparfloat % {#1}{#2}{#3}{#4}%
-% \else
-% \@EA\dosetpagfloat % {#1}{#2}{#3}{#4}%
-% \fi{#1}{#2}{#3}{#4}%
-% \setbox\floatbox=\hbox{\restoretextcolor{\box\floatbox}}%
-% \global\floatheight\ht\floatbox
-% \global\advance\floatheight \dp\floatbox
-% \global\floatwidth\wd\floatbox
-% \global\advance\totalnoffloats 1
-% \doifnotinset{\v!marge}{#1} % gaat namelijk nog fout
-% {\setbox\floatbox=\vbox
-% {\parindent\zeropoint
-% \ifvoorlopig
-% \inleftmargin{\framed{\infofont\the\totalnoffloats}}%
-% \fi
-% \box\floatbox}}%
-% \wd\floatbox\floatwidth
-% \dimen0=\floatheight
-% \advance\dimen0 \lineheight
-% \ifdim\dimen0<\teksthoogte
-% \else
-% \global\floatheight\teksthoogte
-% \global\advance\floatheight -\lineheight
-% \ht\floatbox\floatheight
-% \dp\floatbox\zeropoint
-% \showmessage{\m!floatblocks}{10}{\the\totalnoffloats}%
-% \fi
-% \fi}
-
\long\def\dosetfloatbox#1#2#3#4% todo : \global\setbox
{\ifvisible
\par
@@ -1443,13 +1331,13 @@
\else
\@EA\dosetpagfloat % {#1}{#2}{#3}{#4}%
\fi{#1}{#2}{#3}{#4}%
- \setbox\floatbox=\hbox{\restoretextcolor{\box\floatbox}}%
+ \setbox\floatbox\hbox{\restoretextcolor{\box\floatbox}}%
\global\floatheight\ht\floatbox
\global\advance\floatheight \dp\floatbox
\global\floatwidth\wd\floatbox
- \global\advance\totalnoffloats 1
- \doifnotinset{\v!marge}{#1} % gaat namelijk nog fout
- {\setbox\floatbox=\vbox
+ \global\advance\totalnoffloats \plusone
+ \doifnotinset\v!marge{#1} % gaat namelijk nog fout
+ {\setbox\floatbox\vbox
{\parindent\zeropoint
\ifvoorlopig
\inleftmargin{\framed{\infofont\the\totalnoffloats}}%
@@ -1464,7 +1352,7 @@
\global\advance\floatheight -\lineheight
\ht\floatbox\floatheight
\dp\floatbox\zeropoint
- \showmessage{\m!floatblocks}{10}{\the\totalnoffloats}%
+ \showmessage\m!floatblocks{10}{\the\totalnoffloats}%
\fi
\fi}
@@ -1501,78 +1389,49 @@
{\dosetfloatbox{#1}{#2}{#3}{#4}%
\dogetfloatbox{#1}}%
-% \long\def\docompletefloat#1#2#3#4#5#6#7%
-% {\flushsidefloats
-% \calculatefloatskips{#1}%
-% \bgroup
-% \global\setbox\floatbox=\vbox{#7}%
-% \dimen0=\ht\floatbox
-% \advance\dimen0 by \dp\floatbox
-% \ifdim\dimen0=\zeropoint
-% \showmessage{\m!floatblocks}{11}{}%
-% \global\setbox\floatbox=\vbox{\getvalue{\e!lege#3}}%
-% \fi
-% \ConvertToConstant\doifelse{#6}{\v!geen}
-% {\global\setbox\floatbox=\vbox
-% {\unvbox\floatbox
-% \vss % gets rid of the depth
-% \rawpagereference{\s!flt}{#2}}%
-% \egroup\dofloat{#4}{}{#6}{#1}}
-% {\doglobal\convertargument#6\to\asciititle % \asciititle is global
-% \doifelsevalue{\??kj#1\c!nummer}{\v!ja}
-% {\verhoognummer[#1]%
-% \maakhetnummer[#1]%
-% \global\setbox\floatbox=\vbox
-% {\unvbox\floatbox % no \vss, keep the depth
-% \dofloatreference
-% \redofloatorder{#1}%
-% \rawreference{\s!flt}{#2}{{\hetnummer}{\asciititle}}%
-% \doschrijfnaarlijst{#3}{\hetnummer}{#6}{#3}}%
-% \egroup
-% \preparethenumber{\??kj#1}\hetnummer\preparednumber
-% \dofloat{#4}{\labeltexts{#5}{\preparednumber}}{#6}{#1}}
-% {\global\setbox\floatbox=\vbox
-% {\unvbox\floatbox % no \vss, keep the depth
-% \rawreference{\s!flt}{#2}{{}{\asciititle}}}%
-% \egroup\dofloat{#4}{}{#6}{#1}}}%
-% \global\insidefloatfalse}
+\let\naturalfloatheight\!!zeropoint
+\let\naturalfloatwidth \!!zeropoint
+\let\naturalfloatdepth \!!zeropoint
\long\def\docompletefloat#1#2#3#4#5#6#7%
{\flushsidefloats
-\presetfloatvariables{#1}{#4}{#2}{#6}%
+ \presetfloatvariables{#1}{#4}{#2}{#6}%
\bgroup
- \global\setbox\floatbox=\vbox{#7}%
- \dimen0=\ht\floatbox
- \advance\dimen0 by \dp\floatbox
+ \global\setbox\floatbox\vbox{#7}%
+\xdef\naturalfloatheight{\the\ht\floatbox}%
+\xdef\naturalfloatwidth {\the\wd\floatbox}%
+\xdef\naturalfloatdepth {\the\dp\floatbox}%
+ \dimen0 \ht\floatbox
+ \advance\dimen0 \dp\floatbox
\ifdim\dimen0=\zeropoint
- \showmessage{\m!floatblocks}{11}{}%
- \global\setbox\floatbox=\vbox{\getvalue{\e!lege#3}}%
+ \showmessage\m!floatblocks{11}\empty
+ \global\setbox\floatbox\vbox{\getvalue{\e!lege#3}}%
\fi
\ifnofloatcaption
- \global\setbox\floatbox=\vbox
+ \global\setbox\floatbox\vbox
{\unvbox\floatbox
- \vss % gets rid of the depth
- \rawpagereference{\s!flt}{#2}}%
+ \vss % gets rid of the depth (unless tabulate)
+ \rawpagereference\s!flt{#2}}%
\egroup
\dofloat{#4}{}{#6}{#1}%
\else
\doglobal\convertargument#6\to\asciititle % \asciititle is global
-% \doifelsevalue{\??kj#1\c!nummer}{\v!ja}
+% \doifelsevalue{\??kj#1\c!nummer}\v!ja
\ifnofloatnumber
- \global\setbox\floatbox=\vbox
+ \global\setbox\floatbox\vbox
{\unvbox\floatbox % no \vss, keep the depth
- \rawreference{\s!flt}{#2}{{}{\asciititle}}}%
+ \rawreference\s!flt{#2}{{}{\asciititle}}}%
\egroup
\dofloat{#4}{}{#6}{#1}%
\else
\verhoognummer[#1]%
\maakhetnummer[#1]%
- \global\setbox\floatbox=\vbox
- {\unvbox\floatbox % no \vss, keep the depth
- \dofloatreference
- \redofloatorder{#1}%
- \rawreference{\s!flt}{#2}{{\hetnummer}{\asciititle}}%
- \doschrijfnaarlijst{#3}{\hetnummer}{#6}{#3}}%
+ \global\setbox\floatbox\vbox
+ {\unvbox\floatbox % no \vss, keep the depth
+ \dofloatreference
+ \redofloatorder{#1}%
+ \rawreference\s!flt{#2}{{\hetnummer}{\asciititle}}%
+ \doschrijfnaarlijst{#3}{\hetnummer}{#6}{#3}}%
\egroup
\preparethenumber{\??kj#1}\hetnummer\preparednumber
\dofloat{#4}{\labeltexts{#5}{\preparednumber}}{#6}{#1}%
@@ -1584,26 +1443,26 @@
\def\dostelmargeblokkenin[#1]%
{\getparameters[\??mb][#1]%
- \doifelse{\@@mbstatus}{\v!start}%
- {\showmessage{\m!layouts}{4}{}%
+ \doifelse\@@mbstatus\v!start
+ {\showmessage\m!layouts4\empty
\margeblokkentrue
- \let\somenextfloat=\dosomenextfloat
- \let\startmargeblok=\dostartmargeblok
- \let\stopmargeblok=\dostopmargeblok}%
- {\showmessage{\m!layouts}{5}{}%
+ \let\somenextfloat\dosomenextfloat
+ \let\startmargeblok\dostartmargeblok
+ \let\stopmargeblok\dostopmargeblok}%
+ {\showmessage\m!layouts5\empty
\margeblokkenfalse
\def\somenextfloat[##1]%
{\someelsefloat[##1,\v!hier]}%
- \let\startmargeblok=\dontstartmargeblok
- \let\stopmargeblok=\dontstopmargeblok}}
+ \let\startmargeblok\dontstartmargeblok
+ \let\stopmargeblok\dontstopmargeblok}}
-\def\stelmargeblokkenin%
+\def\stelmargeblokkenin
{\dosingleargument\dostelmargeblokkenin}
\newbox\marginbox
\def\dosomenextfloat[#1]%
- {\global\setbox\marginbox=\vbox
+ {\global\setbox\marginbox\vbox
{\hsize\@@mbbreedte
\unvcopy\marginbox
\ifvoid\marginbox\else\expandafter\@@mbtussen\fi
@@ -1616,30 +1475,30 @@
\newbox\preparedmarginbox
-\def\reshapemargin%
+\def\reshapemargin
{\ifdim\ht\preparedmarginbox>\zeropoint
\beginofshapebox
\unvbox\preparedmarginbox
\endofshapebox
\reshapebox
{\box\shapebox}%
- \setbox\preparedmarginbox=\vbox to \teksthoogte
+ \setbox\preparedmarginbox\vbox to \teksthoogte
{\@@mbboven
\flushshapebox
\@@mbonder}%
\fi}
-\def\plaatsrechtermargeblok%
+\def\plaatsrechtermargeblok
{\hskip\rechtermargebreedte}
-\def\plaatslinkermargeblok%
+\def\plaatslinkermargeblok
{\hskip\linkermargebreedte}
-\def\checkmargeblokken%
+\def\checkmargeblokken
{\ifvoid\marginbox\else\docheckmargeblokken\fi}
-\def\docheckmargeblokken% erg inefficient
- {\setbox\preparedmarginbox=\vbox
+\def\docheckmargeblokken % erg inefficient
+ {\setbox\preparedmarginbox\vbox
{\forgetall
\splittopskip\topskip
\ifvoid\marginbox\else
@@ -1650,17 +1509,17 @@
\fi
\fi}%
\reshapemargin
- \setbox\preparedmarginbox=\vbox
+ \setbox\preparedmarginbox\vbox
{\@@mbvoor\box\preparedmarginbox\@@mbna}%
- \def\rightmarginbox%
- {\def\plaatsrechtermargeblok%
- {\setbox\preparedmarginbox=\hbox to \rechtermargebreedte
+ \def\rightmarginbox
+ {\def\plaatsrechtermargeblok
+ {\setbox\preparedmarginbox\hbox to \rechtermargebreedte
{\@@mblinks\box\preparedmarginbox\@@mbrechts}%
\vsmashbox\preparedmarginbox
\box\preparedmarginbox}}%
- \def\leftmarginbox%
- {\def\plaatslinkermargeblok%
- {\setbox\preparedmarginbox=\hbox to \linkermargebreedte
+ \def\leftmarginbox
+ {\def\plaatslinkermargeblok
+ {\setbox\preparedmarginbox\hbox to \linkermargebreedte
{\@@mbrechts\box\preparedmarginbox\@@mblinks}%
\vsmashbox\preparedmarginbox
\box\preparedmarginbox}}%
@@ -1682,10 +1541,10 @@
\od,
\v!links=>\leftmarginbox,
\v!rechts=>\rightmarginbox,
- \s!unknown=>\setbox\preparedmarginbox=\hbox{}]}
+ \s!unknown=>\setbox\preparedmarginbox\hbox{}]}
-\def\dostartmargeblok% % 2 maal \vbox ivm \unvbox elders
- {\global\setbox\marginbox=\vtop\bgroup\vbox\bgroup
+\def\dostartmargeblok % 2 maal \vbox ivm \unvbox elders
+ {\global\setbox\marginbox\vtop\bgroup\vbox\bgroup
\hsize\@@mbbreedte
\ifvoid\marginbox\else
\unvbox\marginbox
@@ -1695,18 +1554,18 @@
\dostartattributes\??mb\c!letter\c!kleur{}%
\begstrut\ignorespaces}
-\def\dostopmargeblok%
+\def\dostopmargeblok
{\unskip\endstrut
\dostopattributes
\egroup
\egroup}
-\def\dontstartmargeblok%
+\def\dontstartmargeblok
{\@@mbvoor
\bgroup
- \dostartattributes\??mb\c!letter\c!kleur{}}
+ \dostartattributes\??mb\c!letter\c!kleur\empty}
-\def\dontstopmargeblok%
+\def\dontstopmargeblok
{\dostopattributes
\egroup
\@@mbna}
@@ -1720,7 +1579,7 @@
\appendtoks\the\everytopofpage \to\everystarttext
\appendtoks\global\everytopofpage{}\to\everystoptext
-\def\douitstellen%
+\def\douitstellen
{\the\everytopofpage
\ifvoid\collectedpagefloats\else
% message
@@ -1730,11 +1589,11 @@
\bgroup % we need the color/font switch, else problems inside split verbatim
\setnormalcatcodes % uitstellen in verbatim
\edef\savedtopofpagecolor{\topofpagecolor}%
- \doifsomething\savedtopofpagecolor\stopcolormode
+ \doifsomething\savedtopofpagecolor\restorecolormode % \stopcolormode
\restoreglobalbodyfont
\global\pagetotal\zeropoint % recently added and
\global\inuitstellentrue % definitely needed else
- \dorecurse{\nofpostponedblocks} % we can loose or disorder
+ \dorecurse\nofpostponedblocks % we can loose or disorder
{\haalbuffer[buf-\recurselevel]} % floats; anyhow, this
\doflushfloats % new but potential dangerous % mechanism is still
\doglobal\newcounter\nofpostponedblocks % suboptimal and needs a
@@ -1745,7 +1604,7 @@
\setvalue{\e!start\e!uitstellen}%
{\doglobal\increment\nofpostponedblocks
- \showmessage{\m!layouts}{3}{\nofpostponedblocks}%
+ \showmessage\m!layouts3\nofpostponedblocks
\dostartbuffer[buf-\nofpostponedblocks]
[\e!start\e!uitstellen][\e!stop\e!uitstellen]}
@@ -1754,7 +1613,7 @@
[\c!wijze=\v!per\v!tekst,
\c!conversie=\@@siconversie]
-\def\stelplaatsbloksplitsenin%
+\def\stelplaatsbloksplitsenin
{\dodoubleargument\getparameters[\??si]}
% ook (continued)
@@ -1769,18 +1628,18 @@
\resetnummer[\??si]%
\def\floatcaptionsuffix{\nummer[\??si]}%
\TABLEcaptionheight=\@@siregels\lineheight % brrr
-\def\docomplexpagina[##1]{\goodbreak}%
+ \simplifypagebreak % \page becomes \goodbreak
\dowithnextbox
{\forgetall
\mindermeldingen
\doloop
{\setbox2\vsplit\nextbox to \lineheight
- \setbox2=\vbox{\unvbox2}
+ \setbox2\vbox{\unvbox2}
\ifdim\ht2>\lineheight
\verhoognummer[\??si]%
\ifnum\ruwenummer[\??si]=1 \ifdim\ht\nextbox=\zeropoint
- \let\floatcaptionsuffix=\empty
- \fi\fi
+ \let\floatcaptionsuffix\empty
+ \fi \fi
\bgroup
#2{\unvbox2}
\egroup
@@ -1881,9 +1740,12 @@
\c!zijnawit=\@@bknawit,
\c!springvolgendein=\v!nee,
\c!marge=1em,
+ \c!linkermargeafstand=\zeropoint,
+ \c!rechtermargeafstand=\@@bklinkermargeafstand,
\c!nboven=2,
\c!nonder=0,
\c!nregels=4,
+ \c!lokaal=,
\c!default=\v!figuur]
\stelplaatsbloksplitsenin
@@ -1903,11 +1765,11 @@
\@EA\aftersplitstring \commalistelement\at:\to\floatcolumn
\@EA\aftersplitstring \floatcolumn\at*\to\floatrow
\@EA\beforesplitstring\floatcolumn\at*\to\floatcolumn
-% nog algemeen otr
-\ifx\OTRSETsetpreferedcolumnslot\undefined\else
- \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
-\fi
-% commando van maken
+ % todo: nog algemeen otr
+ \ifx\OTRSETsetpreferedcolumnslot\undefined\else
+ \OTRSETsetpreferedcolumnslot\floatcolumn\floatrow
+ \fi
+ % commando van maken
\doifundefined{\string\floatmethod\floatmethod}
{\let\floatmethod\v!hier}%
\getvalue{\string\floatmethod\floatmethod}[#1]%
diff --git a/tex/context/base/page-imp.tex b/tex/context/base/page-imp.tex
index 535d68717..8e426caf9 100644
--- a/tex/context/base/page-imp.tex
+++ b/tex/context/base/page-imp.tex
@@ -17,12 +17,19 @@
\unprotect
-% to be moved code:
+% sizing bug:
+%
+% \setuppapersize[A4][A4,landscape] \setuparranging[2UP] \showframe
+%
+% \starttext \dorecurse{10}{\input tufte \par} \stoptext
-\newif\ifclippagebox \clippageboxtrue
+% to be moved code:
-\def\clippedpagebox#1#2%
- {\ifclippagebox
+\newif\ifclipprintbox \clipprintboxtrue
+%newif\ifclippagebox \clippageboxtrue
+
+\def\clippedprintbox#1#2% can be made more efficient, see other clipper
+ {\ifclipprintbox
\!!widthc\pagebackgroundoffset
\!!widtha \papierbreedte
\advance\!!widtha \!!widthc
@@ -38,48 +45,88 @@
{\box#2}}%
\setbox#2\hbox to \papierbreedte
{\ifcase#1\relax
+ \!!widthb\zeropoint
\hskip-\!!widthc
- \lower\!!widthc\hbox
- {\clip
- [\c!breedte=\!!widtha,\c!hoogte=\!!heighta,
- \c!hoffset=\zeropoint,\c!voffset=\zeropoint]
- {\box#2}}%
- \or
- \lower\!!widthc\hbox
- {\clip
- [\c!breedte=\!!widtha,\c!hoogte=\!!heighta,
- \c!hoffset=\!!widthc,\c!voffset=\zeropoint]
- {\box#2}}%
- \fi}%
+ \else
+ \!!widthb\!!widthc
+ \fi
+ \lower\!!widthc\hbox
+ {\clip
+ [\c!breedte=\!!widtha,\c!hoogte=\!!heighta,
+ \c!hoffset=\!!widthb,\c!voffset=\zeropoint]
+ {\box#2}}}%
\wd#2\papierbreedte
\ht#2\papierhoogte
\fi
\box#2\relax}
+\let\clippagebox \gobbleoneargument
+\let\clipprintbox\gobbleoneargument
+
+% \setuppagenumbering[alternative=doublesided]
+% \setupcolors[state=start]
+% \setuppapersize[A4][A4,oversized]
+% \setuplayout[location=middle,clipoffset=5mm]
+% \setupbackgrounds
+% [page]
+% [frame=on,rulethickness=1mm,
+% backgroundoffset=10mm,background=color,backgroundcolor=red]
+% \starttext \dorecurse{10}{\input tufte \par} \stoptext
+
+\def\clippagebox#1%
+ {\ifdim\@@lyclipoffset>\zeropoint
+ \!!widtha \wd#1%
+ \!!heighta\ht#1%
+ \!!deptha \dp#1%
+ \setbox#1\hbox
+ {\!!widthb \@@lyclipoffset
+ \advance\!!heighta\!!deptha
+ \advance\!!heighta2\!!widthb
+ \advance\!!widtha \!!widthb
+ \doifbothsides
+ \advance\!!widtha\!!widthb
+ \!!widthc-\!!widthb
+ \hskip\!!widthc
+ \orsideone
+ \!!widthc\zeropoint
+ \orsidetwo
+ \!!widthc-\!!widthb
+ \hskip\!!widthc
+ \od
+ \lower\!!widthb\hbox
+ {\clip
+ [\c!hoffset=\!!widthc,
+ \c!voffset=-\!!widthb,
+ \c!breedte=\!!widtha,
+ \c!hoogte=\!!heighta]%
+ {\box#1}}}%
+ \wd#1\!!widtha
+ \ht#1\!!heighta
+ \dp#1\!!deptha
+ \fi}
+
% moved code:
\def\myshipout#1%
{\voorpagina % voor de pagebody dus !
\dontshowcomposition
- \ifarrangingpages
- \actualarrange{\thisisrealpage{\realfolio}#1}%
- \else
- \actualshipout{\thisisrealpage{\realfolio}#1}%
- \fi
+ \ifarrangingpages\@EA\actualarrange\else\@EA\actualshipout\fi
+ {\thisisrealpage\realfolio#1}%
\gotonextrealpage
\napagina}
\newbox\postponedcontent
-\def\flushatshipout%
+\def\flushatshipout
{\dowithnextbox
- {\global\setbox\postponedcontent=\hbox to \zeropoint
- {%\hskip-\maxdimen % niet hier, gaat mis in acrobat (clipt)
- \box\postponedcontent\box\nextbox}%
- \global\ht\postponedcontent\zeropoint
- \global\dp\postponedcontent\zeropoint
- \global\wd\postponedcontent\zeropoint}%
+ {\global\setbox\postponedcontent\hbox to \zeropoint
+ {%\hskip-\maxdimen % niet hier, gaat mis in acrobat (clipt)
+ \box\postponedcontent\box\nextbox}%
+ \global\ht\postponedcontent\zeropoint
+ \global\dp\postponedcontent\zeropoint
+ \global\wd\postponedcontent\zeropoint}%
\hbox}
+
% \starttypen
% \def\pagestoshipout{1,3,5}
% \stoptypen
@@ -90,7 +137,7 @@
\chardef\whichpagetoshipout=0 % 0=all 1=odd 2=even
\def\actualshipout#1%
- {\global\advance\shippedoutpages\plusone
+ {\global\advance\shippedoutpages\plusone
\ifx\pagestoshipout\empty
\ifcase\whichpagetoshipout\relax
\donetrue
@@ -101,7 +148,7 @@
\else
\donetrue
\fi
- \else % testen, aangepast / expanded nodig ?
+ \else % testen, aangepast / expanded nodig ?
\expanded{\doifinsetelse{\the\shippedoutpages}{\pagestoshipout}}%
\donetrue\donefalse
\fi
@@ -112,11 +159,12 @@
\mindermeldingen
\vskip-1in
\hskip-1in
- \hbox % \setbox0=\box.. is nicer
- {\setbox0=\hbox{#1}% just in case there are objects there
- \setbox\scratchbox=\hbox
+ \hbox % \setbox0=\box.. is nicer
+ {\setbox0\hbox{#1}% just in case there are objects there
+ \setbox\scratchbox\hbox
{\the\everyshipout
\ifnum\realpageno=\lastpage\relax
+ \flushtextdata
\the\everylastshipout
\global\everylastshipout\emptytoks
\fi}%
@@ -129,16 +177,16 @@
{[\ifarrangingpages arranged \fi page
\ifarrangingpages\the\arrangeno\else\the\realpageno\fi\normalspace
not flushed]}%
- \setbox0=\hbox{#1}%
- \deadcycles=0
+ \setbox0\hbox{#1}%
+ \deadcycles\zerocount
\fi}
\def\actualarrange#1%
- {\setbox0=\hbox{\thisisrealpage{\realfolio}#1}%
- \pusharrangedpage0
- \deadcycles=0 }
+ {\setbox0\hbox{\thisisrealpage{\realfolio}#1}%
+ \pusharrangedpage0%
+ \deadcycles\zerocount}
-%D We need a couple of boxes for duplex printing \unknown
+%D We need a couple of boxes for duplex printing \unknown
\newbox\arrangedpageA \newbox\arrangedpageB
@@ -159,6 +207,7 @@
\def\arrangedrotationE{0}
\newcounter\arrangedpageN
+\newcounter\arrangedpageM
\chardef\arrangedpageT=1
\chardef\arrangedpageX=1
@@ -174,7 +223,7 @@
\def\setuparranging[#1]%
{\ifarrangingdisabled \else
- \doifelse{#1}{\v!blokkeer}
+ \doifelse{#1}\v!blokkeer
{\global\arrangingdisabledtrue}
{\global\arrangingdisabledfalse}%
\global\arrangingpagestrue
@@ -193,8 +242,8 @@
180=>\gdef\arrangedrotationO{180}\gdef\arrangedrotationE{0},
270=>\gdef\arrangedrotationO{270}\gdef\arrangedrotationE{90},
\s!reset=>\global\arrangingpagesfalse,
- \s!unknown=>\checkinstalledpagearrangement\commalistelement,
- \s!default=>\checkinstalledpagearrangement\commalistelement]%
+ \s!unknown=>\checkinstalledpagearrangement\commalistelement]%
+ % no \s!default=> we can have aaa,,bbb
\doifcommonelse{#1}{90,270,\v!geroteerd}
{\swapmacros\horizontalcutmarks\verticalcutmarks}{}% ugly solution
\setuppapersize
@@ -206,8 +255,8 @@
\def\installpagearrangement #1 %
{\setgvalue{\??pp\??pp#1}}
-\def\checkinstalledpagearrangement#1%
- {\executeifdefined{\??pp\??pp#1}{\global\arrangingpagesfalse}}
+\def\checkinstalledpagearrangement#1% can be empty: aaa,,bbb
+ {\executeifdefined{\??pp\??pp#1}\donothing}
\def\dosetuparrangement#1#2#3#4#5#6#7#8%
{\global\chardef\arrangedpageX #1%
@@ -219,63 +268,66 @@
\global\let \poparrangedpages #7%
\global\let \handlearrangedpage#8}
+\installpagearrangement {\v!normaal}
+ {\global\arrangingpagesfalse}
+
\installpagearrangement 2*16
- {\dosetuparrangement{4}{4}{16}{5}{5}
+ {\dosetuparrangement{4}{4}{16}{5}{5}%
\pusharrangedpageTHIRTYTWO\poparrangedpagesAB\relax}
\installpagearrangement 2*8
- {\dosetuparrangement{4}{2}{8}{5}{3}
+ {\dosetuparrangement{4}{2}{8}{5}{3}%
\pusharrangedpageSIXTEEN\poparrangedpagesAB\relax}
\installpagearrangement 2*4
- {\dosetuparrangement{2}{2}{4}{3}{3}
+ {\dosetuparrangement{2}{2}{4}{3}{3}%
\pusharrangedpageEIGHT\poparrangedpagesAB\relax}
\installpagearrangement 2*2
- {\dosetuparrangement{2}{1}{2}{3}{2}
+ {\dosetuparrangement{2}{1}{2}{3}{2}%
\pusharrangedpageFOURA\poparrangedpagesAB\relax}
\installpagearrangement 2**2
- {\dosetuparrangement{2}{1}{2}{3}{2}
+ {\dosetuparrangement{2}{1}{2}{3}{2}%
\pusharrangedpageFOURB\poparrangedpagesAB\relax}
\installpagearrangement 2SIDE
- {\dosetuparrangement{2}{1}{2}{3}{2}
+ {\dosetuparrangement{2}{1}{2}{3}{2}%
\pusharrangedpageSIDETOP\poparrangedpagesTWO\handlearrangedpageSIDE}
\installpagearrangement 2TOP
- {\dosetuparrangement{1}{2}{2}{2}{3}
+ {\dosetuparrangement{1}{2}{2}{2}{3}%
\pusharrangedpageSIDETOP\poparrangedpagesTWO\handlearrangedpageTOP}
\installpagearrangement 2UP
- {\dosetuparrangement{2}{1}{4}{3}{2}
+ {\dosetuparrangement{2}{1}{4}{3}{2}%
\pusharrangedpageTWO\poparrangedpagesTWO\handlearrangedpageTWOUP}
\installpagearrangement 2DOWN
- {\dosetuparrangement{1}{2}{4}{2}{3}
+ {\dosetuparrangement{1}{2}{4}{2}{3}%
\pusharrangedpageTWO\poparrangedpagesTWO\handlearrangedpageTWODOWN}
-\installpagearrangement 2*4*2 % one defined by Willy Egger:
- {\dosetuparrangement{2}{2}{4}{3}{2}
+\installpagearrangement 2*4*2 % one defined by Willy Egger:
+ {\dosetuparrangement{2}{2}{4}{3}{2}%
\pusharrangedpageSIXTEENTWO\poparrangedpagesAtoD\relax}
\installpagearrangement 2*2*4 % onother one of Willy Egger
- {\dosetuparrangement{2}{1}{8}{3}{2}
+ {\dosetuparrangement{2}{1}{8}{3}{2}%
\pusharrangedpageSIXTEENFOUR\poparrangedpagesAtoH\relax}
-\def\filluparrangedpages% beware: \realpageno is 1 ahead
+\def\filluparrangedpages % beware: \realpageno is 1 ahead
{\ifarrangingpages
\scratchcounter-\realpageno
\divide\scratchcounter \arrangedpageT
\multiply\scratchcounter \arrangedpageT
\advance\scratchcounter \realpageno
- \advance\scratchcounter -1
+ \advance\scratchcounter \minusone
\dorecurse\scratchcounter{\noheaderandfooterlines\ejectdummypage}%
\fi}
-\def\handlearrangedpageXY#1#2#3#4#5%
- {\global\setbox#5=\hbox to \arrangedpageX\papierbreedte
- {\setbox\scratchbox=\vbox to \arrangedpageY\papierhoogte
+\def\handlearrangedpageXandY#1#2#3#4#5%
+ {\global\setbox#5\hbox to \arrangedpageX\papierbreedte
+ {\setbox\scratchbox\vbox to \arrangedpageY\papierhoogte
{\forgetall
\offinterlineskip
\mindermeldingen
@@ -287,25 +339,26 @@
\box\scratchbox\box#5\hss}}
\def\gotonextarrangepage
- {\global\advance\arrangeno 1
+ {\global\advance\arrangeno \plusone
\def\pagecutmarksymbol{\the\arrangeno}}
\def\outputarrangedbox#1%
{\bgroup
\gotonextarrangepage
- \ifnum\arrangedrotationO\arrangedrotationE>0
- \ifdoublearranged
- \ifodd\arrangeno % if into 2d arg
- \setbox#1=\vbox{\dorotatebox\arrangedrotationO\hbox{\box#1}}%
- \else
- \setbox#1=\vbox{\dorotatebox\arrangedrotationE\hbox{\box#1}}%
- \fi
- \else
- \setbox#1=\vbox{\dorotatebox\arrangedrotationO\hbox{\box#1}}%
- \fi
+ \ifnum\arrangedrotationO\arrangedrotationE>\zerocount
+ \setbox#1\vbox
+ {\ifdoublearranged
+ \ifodd\arrangeno
+ \dorotatebox\arrangedrotationO\hbox{\box#1}%
+ \else
+ \dorotatebox\arrangedrotationE\hbox{\box#1}%
+ \fi
+ \else
+ \dorotatebox\arrangedrotationO\hbox{\box#1}%
+ \fi}%
\fi
\ifmirrorarranged
- \setbox#1=\vbox{\domirrorbox\vbox{\box#1}}%
+ \setbox#1\vbox{\domirrorbox\vbox{\box#1}}%
\fi
\ifnegatearranged
\negatecolorbox{#1}%
@@ -314,15 +367,15 @@
\actualshipout{\box#1}%
\egroup}
-%D The format file can be 16K smaller when we postpone the
-%D real arrangments. Some day ...
+%D The format file can be 16K smaller when we postpone the
+%D real arrangments. Some day ...
% TOP
% 32/16/8/4/SIDE
-\def\poparrangedpagesAB%
- {\ifnum\arrangedpageN>0
+\def\poparrangedpagesAB
+ {\ifnum\arrangedpageN>\zerocount
\mindermeldingen
\papierbreedte\arrangedpageX\papierbreedte
\papierhoogte\arrangedpageY\papierhoogte
@@ -335,38 +388,38 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#1}033\arrangedpageA % 1
- \or \handlearrangedpageXY{#1}003\arrangedpageB % 2
- \or \handlearrangedpageXY{#1}100\arrangedpageB % 3
- \or \handlearrangedpageXY{#1}130\arrangedpageA % 4
- \or \handlearrangedpageXY{#1}100\arrangedpageA % 5
- \or \handlearrangedpageXY{#1}130\arrangedpageB % 6
- \or \handlearrangedpageXY{#1}033\arrangedpageB % 7
- \or \handlearrangedpageXY{#1}003\arrangedpageA % 8
- \or \handlearrangedpageXY{#1}102\arrangedpageA % 9
- \or \handlearrangedpageXY{#1}132\arrangedpageB % 10
- \or \handlearrangedpageXY{#1}031\arrangedpageB % 11
- \or \handlearrangedpageXY{#1}001\arrangedpageA % 12
- \or \handlearrangedpageXY{#1}031\arrangedpageA % 13
- \or \handlearrangedpageXY{#1}001\arrangedpageB % 14
- \or \handlearrangedpageXY{#1}102\arrangedpageB % 15
- \or \handlearrangedpageXY{#1}132\arrangedpageA % 16
- \or \handlearrangedpageXY{#1}122\arrangedpageA % 17
- \or \handlearrangedpageXY{#1}112\arrangedpageB % 18
- \or \handlearrangedpageXY{#1}011\arrangedpageB % 19
- \or \handlearrangedpageXY{#1}021\arrangedpageA % 20
- \or \handlearrangedpageXY{#1}011\arrangedpageA % 21
- \or \handlearrangedpageXY{#1}021\arrangedpageB % 22
- \or \handlearrangedpageXY{#1}122\arrangedpageB % 23
- \or \handlearrangedpageXY{#1}112\arrangedpageA % 24
- \or \handlearrangedpageXY{#1}013\arrangedpageA % 25
- \or \handlearrangedpageXY{#1}023\arrangedpageB % 26
- \or \handlearrangedpageXY{#1}120\arrangedpageB % 27
- \or \handlearrangedpageXY{#1}110\arrangedpageA % 28
- \or \handlearrangedpageXY{#1}120\arrangedpageA % 29
- \or \handlearrangedpageXY{#1}110\arrangedpageB % 30
- \or \handlearrangedpageXY{#1}013\arrangedpageB % 31
- \or \handlearrangedpageXY{#1}023\arrangedpageA % 32
+ \or \handlearrangedpageXandY{#1}033\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#1}003\arrangedpageB % 2
+ \or \handlearrangedpageXandY{#1}100\arrangedpageB % 3
+ \or \handlearrangedpageXandY{#1}130\arrangedpageA % 4
+ \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5
+ \or \handlearrangedpageXandY{#1}130\arrangedpageB % 6
+ \or \handlearrangedpageXandY{#1}033\arrangedpageB % 7
+ \or \handlearrangedpageXandY{#1}003\arrangedpageA % 8
+ \or \handlearrangedpageXandY{#1}102\arrangedpageA % 9
+ \or \handlearrangedpageXandY{#1}132\arrangedpageB % 10
+ \or \handlearrangedpageXandY{#1}031\arrangedpageB % 11
+ \or \handlearrangedpageXandY{#1}001\arrangedpageA % 12
+ \or \handlearrangedpageXandY{#1}031\arrangedpageA % 13
+ \or \handlearrangedpageXandY{#1}001\arrangedpageB % 14
+ \or \handlearrangedpageXandY{#1}102\arrangedpageB % 15
+ \or \handlearrangedpageXandY{#1}132\arrangedpageA % 16
+ \or \handlearrangedpageXandY{#1}122\arrangedpageA % 17
+ \or \handlearrangedpageXandY{#1}112\arrangedpageB % 18
+ \or \handlearrangedpageXandY{#1}011\arrangedpageB % 19
+ \or \handlearrangedpageXandY{#1}021\arrangedpageA % 20
+ \or \handlearrangedpageXandY{#1}011\arrangedpageA % 21
+ \or \handlearrangedpageXandY{#1}021\arrangedpageB % 22
+ \or \handlearrangedpageXandY{#1}122\arrangedpageB % 23
+ \or \handlearrangedpageXandY{#1}112\arrangedpageA % 24
+ \or \handlearrangedpageXandY{#1}013\arrangedpageA % 25
+ \or \handlearrangedpageXandY{#1}023\arrangedpageB % 26
+ \or \handlearrangedpageXandY{#1}120\arrangedpageB % 27
+ \or \handlearrangedpageXandY{#1}110\arrangedpageA % 28
+ \or \handlearrangedpageXandY{#1}120\arrangedpageA % 29
+ \or \handlearrangedpageXandY{#1}110\arrangedpageB % 30
+ \or \handlearrangedpageXandY{#1}013\arrangedpageB % 31
+ \or \handlearrangedpageXandY{#1}023\arrangedpageA % 32
\poparrangedpages
\fi}
@@ -374,22 +427,22 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#1}031\arrangedpageA % 1
- \or \handlearrangedpageXY{#1}001\arrangedpageB % 2
- \or \handlearrangedpageXY{#1}031\arrangedpageB % 3
- \or \handlearrangedpageXY{#1}001\arrangedpageA % 4
- \or \handlearrangedpageXY{#1}100\arrangedpageA % 5
- \or \handlearrangedpageXY{#1}130\arrangedpageB % 6
- \or \handlearrangedpageXY{#1}100\arrangedpageB % 7
- \or \handlearrangedpageXY{#1}130\arrangedpageA % 8
- \or \handlearrangedpageXY{#1}120\arrangedpageA % 9
- \or \handlearrangedpageXY{#1}110\arrangedpageB % 10
- \or \handlearrangedpageXY{#1}120\arrangedpageB % 11
- \or \handlearrangedpageXY{#1}110\arrangedpageA % 12
- \or \handlearrangedpageXY{#1}011\arrangedpageA % 13
- \or \handlearrangedpageXY{#1}021\arrangedpageB % 14
- \or \handlearrangedpageXY{#1}011\arrangedpageB % 15
- \or \handlearrangedpageXY{#1}021\arrangedpageA % 16
+ \or \handlearrangedpageXandY{#1}031\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2
+ \or \handlearrangedpageXandY{#1}031\arrangedpageB % 3
+ \or \handlearrangedpageXandY{#1}001\arrangedpageA % 4
+ \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5
+ \or \handlearrangedpageXandY{#1}130\arrangedpageB % 6
+ \or \handlearrangedpageXandY{#1}100\arrangedpageB % 7
+ \or \handlearrangedpageXandY{#1}130\arrangedpageA % 8
+ \or \handlearrangedpageXandY{#1}120\arrangedpageA % 9
+ \or \handlearrangedpageXandY{#1}110\arrangedpageB % 10
+ \or \handlearrangedpageXandY{#1}120\arrangedpageB % 11
+ \or \handlearrangedpageXandY{#1}110\arrangedpageA % 12
+ \or \handlearrangedpageXandY{#1}011\arrangedpageA % 13
+ \or \handlearrangedpageXandY{#1}021\arrangedpageB % 14
+ \or \handlearrangedpageXandY{#1}011\arrangedpageB % 15
+ \or \handlearrangedpageXandY{#1}021\arrangedpageA % 16
\poparrangedpages
\fi}
@@ -397,14 +450,14 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#1}011\arrangedpageA % 1
- \or \handlearrangedpageXY{#1}001\arrangedpageB % 2
- \or \handlearrangedpageXY{#1}100\arrangedpageB % 3
- \or \handlearrangedpageXY{#1}110\arrangedpageA % 4
- \or \handlearrangedpageXY{#1}100\arrangedpageA % 5
- \or \handlearrangedpageXY{#1}110\arrangedpageB % 6
- \or \handlearrangedpageXY{#1}011\arrangedpageB % 7
- \or \handlearrangedpageXY{#1}001\arrangedpageA % 8
+ \or \handlearrangedpageXandY{#1}011\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2
+ \or \handlearrangedpageXandY{#1}100\arrangedpageB % 3
+ \or \handlearrangedpageXandY{#1}110\arrangedpageA % 4
+ \or \handlearrangedpageXandY{#1}100\arrangedpageA % 5
+ \or \handlearrangedpageXandY{#1}110\arrangedpageB % 6
+ \or \handlearrangedpageXandY{#1}011\arrangedpageB % 7
+ \or \handlearrangedpageXandY{#1}001\arrangedpageA % 8
\poparrangedpages
\fi}
@@ -415,10 +468,10 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#3}010\arrangedpageA % 1
- \or \handlearrangedpageXY{#3}0{#1}0\arrangedpageB % 2/3 not {1}
- \or \handlearrangedpageXY{#3}0{#2}0\arrangedpageB % 3/2 not {1}
- \or \handlearrangedpageXY{#3}000\arrangedpageA % 4
+ \or \handlearrangedpageXandY{#3}010\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#3}0{#1}0\arrangedpageB % 2/3 not {1}
+ \or \handlearrangedpageXandY{#3}0{#2}0\arrangedpageB % 3/2 not {1}
+ \or \handlearrangedpageXandY{#3}000\arrangedpageA % 4
\poparrangedpages
\fi}
@@ -426,8 +479,8 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#1}000\arrangedpageA % 1
- \or \handlearrangedpageXY{#1}000\arrangedpageB % 2
+ \or \handlearrangedpageXandY{#1}000\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2
\poparrangedpages
\fi}
@@ -449,7 +502,7 @@
% 2UP/2DOWN / 1pt prevents overflow
-\def\splitoffarrangedpagesTWO%
+\def\splitoffarrangedpagesTWO
{\splittopskip\zeropoint
\global\setbox\arrangedpageA\vsplit\arrangedpageB to \!!onepoint
\scratchdimen\ht\arrangedpageB
@@ -458,7 +511,7 @@
\setbox\scratchbox\vsplit\arrangedpageB to \scratchdimen
\fi}
-% \def\handlearrangedpageTWOUP%
+% \def\handlearrangedpageTWOUP
% {\splitoffarrangedpagesTWO
% \ifswaparranged
% \global\setbox\arrangedpageA\hbox
@@ -472,24 +525,23 @@
% \global\ht\arrangedpageA\papierhoogte
% \global\setbox\arrangedpageB\box\scratchbox}
-\def\handlearrangedpageTWOUP%
+\def\handlearrangedpageTWOUP
{\splitoffarrangedpagesTWO
\ifswaparranged
- \global\setbox\arrangedpageA=\hbox
- {\clippedpagebox0\arrangedpageA
- \clippedpagebox1\arrangedpageB}%
+ \global\setbox\arrangedpageA\hbox
+ {\clippedprintbox0\arrangedpageA
+ \clippedprintbox1\arrangedpageB}%
\swaparrangedfalse
\else
- \global\setbox\arrangedpageA=\hbox
- {\clippedpagebox0\arrangedpageB
- \clippedpagebox1\arrangedpageA}%
+ \global\setbox\arrangedpageA\hbox
+ {\clippedprintbox0\arrangedpageB
+ \clippedprintbox1\arrangedpageA}%
\swaparrangedtrue
\fi
- \global\ht\arrangedpageA=\papierhoogte
- \global\setbox\arrangedpageB=\box\scratchbox}
-
+ \global\ht\arrangedpageA\papierhoogte
+ \global\setbox\arrangedpageB\box\scratchbox}
-\def\handlearrangedpageTWODOWN%
+\def\handlearrangedpageTWODOWN
{\splitoffarrangedpagesTWO
\global\ht\arrangedpageA\papierhoogte
\global\ht\arrangedpageB\papierhoogte
@@ -506,8 +558,8 @@
\fi
\global\setbox\arrangedpageB\box\scratchbox}
-\def\poparrangedpagesTWO%
- {\ifnum\arrangedpageN>0
+\def\poparrangedpagesTWO
+ {\ifnum\arrangedpageN>\zerocount
\mindermeldingen
\swaparrangedfalse
\doloop
@@ -537,10 +589,10 @@
\dp#1=\zeropoint
\vbox{\box#1}}}
-%D Willy Egger's sheet simulations:
+%D Willy Egger's sheet simulations:
-\def\poparrangedpagesAtoH%
- {\ifnum\arrangedpageN>0
+\def\poparrangedpagesAtoH
+ {\ifnum\arrangedpageN>\zerocount
\mindermeldingen
\papierbreedte\arrangedpageX\papierbreedte
\papierhoogte\arrangedpageY\papierhoogte
@@ -557,8 +609,8 @@
% to arrange 16 pages on 2 sheets to form one booklet
-\def\poparrangedpagesAtoD%
- {\ifnum\arrangedpageN>0
+\def\poparrangedpagesAtoD
+ {\ifnum\arrangedpageN>\zerocount
\mindermeldingen
\papierbreedte\arrangedpageX\papierbreedte
\papierhoogte\arrangedpageY\papierhoogte
@@ -575,22 +627,22 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageA % 1
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageB % 2
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageC % 3
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageD % 4
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageE % 5
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageF % 6
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageG % 7
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageH % 8
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageH % 9
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageG % 10
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageF % 11
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageE % 12
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageD % 13
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageC % 14
- \or \handlearrangedpageXY{#1}{0}{1}{0}\arrangedpageB % 15
- \or \handlearrangedpageXY{#1}{0}{0}{0}\arrangedpageA % 16
+ \or \handlearrangedpageXandY{#1}010\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#1}000\arrangedpageB % 2
+ \or \handlearrangedpageXandY{#1}010\arrangedpageC % 3
+ \or \handlearrangedpageXandY{#1}000\arrangedpageD % 4
+ \or \handlearrangedpageXandY{#1}010\arrangedpageE % 5
+ \or \handlearrangedpageXandY{#1}000\arrangedpageF % 6
+ \or \handlearrangedpageXandY{#1}010\arrangedpageG % 7
+ \or \handlearrangedpageXandY{#1}000\arrangedpageH % 8
+ \or \handlearrangedpageXandY{#1}010\arrangedpageH % 9
+ \or \handlearrangedpageXandY{#1}000\arrangedpageG % 10
+ \or \handlearrangedpageXandY{#1}010\arrangedpageF % 11
+ \or \handlearrangedpageXandY{#1}000\arrangedpageE % 12
+ \or \handlearrangedpageXandY{#1}010\arrangedpageD % 13
+ \or \handlearrangedpageXandY{#1}000\arrangedpageC % 14
+ \or \handlearrangedpageXandY{#1}010\arrangedpageB % 15
+ \or \handlearrangedpageXandY{#1}000\arrangedpageA % 16
\poparrangedpages
\fi}
@@ -600,25 +652,167 @@
{\doglobal\increment\arrangedpageN
\reportarrangedpage\arrangedpageN
\ifcase\arrangedpageN
- \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageA % 1
- \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageB % 2
- \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageC % 3
- \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageD % 4
- \or \handlearrangedpageXY{#1}{1}{0}{0}\arrangedpageD % 5
- \or \handlearrangedpageXY{#1}{1}{1}{0}\arrangedpageC % 6
- \or \handlearrangedpageXY{#1}{1}{0}{0}\arrangedpageB % 7
- \or \handlearrangedpageXY{#1}{1}{1}{0}\arrangedpageA % 8
- \or \handlearrangedpageXY{#1}{1}{0}{0}\arrangedpageA % 9
- \or \handlearrangedpageXY{#1}{1}{1}{0}\arrangedpageB % 10
- \or \handlearrangedpageXY{#1}{1}{0}{0}\arrangedpageC % 11
- \or \handlearrangedpageXY{#1}{1}{1}{0}\arrangedpageD % 12
- \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageD % 13
- \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageC % 14
- \or \handlearrangedpageXY{#1} {0}{1}{1}\arrangedpageB % 15
- \or \handlearrangedpageXY{#1} {0}{0}{1}\arrangedpageA % 16
+ \or \handlearrangedpageXandY{#1}011\arrangedpageA % 1
+ \or \handlearrangedpageXandY{#1}001\arrangedpageB % 2
+ \or \handlearrangedpageXandY{#1}011\arrangedpageC % 3
+ \or \handlearrangedpageXandY{#1}001\arrangedpageD % 4
+ \or \handlearrangedpageXandY{#1}100\arrangedpageD % 5
+ \or \handlearrangedpageXandY{#1}110\arrangedpageC % 6
+ \or \handlearrangedpageXandY{#1}100\arrangedpageB % 7
+ \or \handlearrangedpageXandY{#1}110\arrangedpageA % 8
+ \or \handlearrangedpageXandY{#1}100\arrangedpageA % 9
+ \or \handlearrangedpageXandY{#1}110\arrangedpageB % 10
+ \or \handlearrangedpageXandY{#1}100\arrangedpageC % 11
+ \or \handlearrangedpageXandY{#1}110\arrangedpageD % 12
+ \or \handlearrangedpageXandY{#1}011\arrangedpageD % 13
+ \or \handlearrangedpageXandY{#1}001\arrangedpageC % 14
+ \or \handlearrangedpageXandY{#1}011\arrangedpageB % 15
+ \or \handlearrangedpageXandY{#1}001\arrangedpageA % 16
\poparrangedpages
\fi}
+
+% % handy for stickers etc, this way we can treat them as page
+%
+% \setuppapersize [XY][A4]
+% \setuppaper [topspace=5mm,backspace=5mm,dx=1mm,dy=1mm,nx=2,ny=6]
+% \setuplayout [page] [topspace=5mm,backspace=5mm]
+% \setuplayout [page]
+% \setuplayout [location=middle]
+% \setuparranging [XY]
+% \showframe
+%
+% \starttext \dorecurse{30}{test \recurselevel \page} \stoptext
+
+\def\pusharrangedpageXY#1%
+ {\doglobal\increment\arrangedpageN
+ \reportarrangedpage\arrangedpageN
+ \doglobal\increment\arrangedpageM
+ \global\setbox\arrangedpageB\hbox
+ \ifdim\@@ppbreedte>\zeropoint to \@@ppbreedte \fi
+ {\ifvoid\arrangedpageB\else
+ \unhbox\arrangedpageB\hss\hskip\@@ppdx\hss
+ \fi
+ \box#1}%
+ \ifnum\arrangedpageM<\arrangedpageX\else
+ \global\setbox\arrangedpageA\vbox
+ \ifdim\@@pphoogte>\zeropoint to \@@pphoogte \fi
+ {\offinterlineskip
+ \ifvoid\arrangedpageA\else
+ \unvbox\arrangedpageA\vss\vskip\@@ppdy\vss
+ \fi
+ \box\arrangedpageB}%
+ \doglobal\newcounter\arrangedpageM
+ \fi
+ \ifnum\arrangedpageN<\arrangedpageT\else
+ \poparrangedpages
+ \fi}
+
+\def\poparrangedpagesXY
+ {\ifnum\arrangedpageN>\zerocount
+ \mindermeldingen
+ \papierbreedte\arrangedpageX\papierbreedte
+ \papierhoogte \arrangedpageY\papierhoogte
+ \outputarrangedbox\arrangedpageA
+ \doglobal\newcounter\arrangedpageN
+ \doglobal\newcounter\arrangedpageM
+ \fi}
+
+\installpagearrangement XY
+ {\dosetuparrangement\@@ppnx\@@ppny\@@ppxy\!!zerocount\!!zerocount
+ \pusharrangedpageXY\poparrangedpagesXY\relax}
+
+\beginETEX \dimexpr
+
+\definepapersize
+ [XY]
+ [\c!breedte=\dimexpr(\dimexpr(\@@ppbreedte-\numexpr(\@@ppnx-1)\dimexpr(\@@ppdx))/\@@ppnx),
+ \c!hoogte =\dimexpr(\dimexpr(\@@pphoogte -\numexpr(\@@ppny-1)\dimexpr(\@@ppdy))/\@@ppny)]
+
+\setuppaper
+ [\c!breedte=\dimexpr(\printpapierbreedte-2\dimexpr(\@@pprugwit)),
+ \c!hoogte =\dimexpr(\printpapierhoogte -2\dimexpr(\@@ppkopwit))]
+
+\endETEX
+
+% \definepageshift[test][horizontal][10pt,20pt,30pt,40pt,50pt]
+% \definepageshift[test][vertical] [10pt,20pt,30pt,40pt,50pt]
+%
+% \setuppageshift[test]
+% \setuppageshift[test][test]
+% \setuppageshift[test][none]
+% \setuppageshift[none][test]
+% \setuppageshift[paper][test][test] % arrange only
+% \setuppageshift[paper][test] % arrange only
+% \setuppageshift[print][test][test]
+%
+% \showframe \dorecurse{100}{\input tufte \par}
+
+% #1=name #2=horizontal|vertical #3=shiftlist
+
+\def\definepageshift
+ {\dotripleargument\dodefinepageshift}
+\def\dodefinepageshift[#1][#2][#3]%
+ {\setvalue{\??pt#2:#1}{#3}}
+
+\letempty \hpageshifts \newcounter\nofhpageshifts
+\letempty \vpageshifts \newcounter\nofvpageshifts
+
+% \let\shiftprintpagebox\gobbleoneargument
+% \let\shiftpaperpagebox\gobbleoneargument
+
+\def\dogetpageshift#1#2#3% #1=\dimenx #2=\xpageshifts #3=\nofxpageshifts
+ {\ifx#2\empty
+ #1\zeropoint
+ \else
+ \doglobal\increment#3%
+ \getfromcommacommand[#2][#3]%
+ \ifx\commalistelement\empty
+ \globallet#3\!!plusone
+ \getfromcommacommand[#2][#3]%
+ \fi
+ \ifx\commalistelement\empty
+ #1\zeropoint
+ \else
+ #1=\commalistelement
+ \donetrue
+ \fi
+ \fi}
+
+\def\shiftpagebox#1%
+ {\donefalse
+ \dogetpageshift{\dimen0}\hpageshifts\nofhpageshifts
+ \dogetpageshift{\dimen2}\vpageshifts\nofvpageshifts
+ \ifdone % see also layout offsets, maybe \movebox
+ \edef\next{\wd#1\the\wd#1\ht#1\the\ht#1\dp#1\the\dp#1}%
+ \setbox#1\vbox % \forgetall already done
+ {\offinterlineskip\vskip\dimen2\hskip\dimen0\box#1}%
+ \next
+ \fi}
+
+\def\setuppageshift
+ {\dotripleempty\dosetuppageshift}
+
+\def\dosetuppageshift[#1][#2][#3]% page|paper horizontal vertical
+ {\ifthirdargument % paper=arrange
+ \let\hpageshifts\empty
+ \let\vpageshifts\empty
+ \let\shiftprintpagebox\gobbleoneargument
+ \let\shiftpaperpagebox\gobbleoneargument
+ \doifdefined{\??pt\v!horizontaal:#2}
+ {\edef\hpageshifts{\getvalue{\??pt\v!horizontaal:#2}}}%
+ \doifdefined{\??pt\v!vertikaal :#3}
+ {\edef\vpageshifts{\getvalue{\??pt\v!vertikaal :#3}}}%
+ \doif{#1}\v!pagina{\let\shiftprintpagebox\shiftpagebox}%
+ \doif{#1}\v!papier{\let\shiftpaperpagebox\shiftpagebox}%
+ \else\ifsecondargument
+ \doifinsetelse{#1}{\v!pagina,\v!papier}
+ {\setuppageshift[#1][#2][#2]}
+ {\setuppageshift[\v!pagina][#1][#2]}%
+ \else\iffirstargument
+ \setuppageshift[\v!pagina][#1][#1]%
+ \fi\fi}
+
%D One can (mis)use this mechanism, in close cooperation
%D with \PDFTEX\ to arrange pages of already produced files.
%D
@@ -646,7 +840,7 @@
%D This macros inserts the page, according to the settings
%D provided.
-\def\insertpages%
+\def\insertpages
{\dotripleempty\doinsertpages}
\def\doinsertpages[#1][#2][#3]%
@@ -659,13 +853,13 @@
\mindermeldingen
\getfiguredimensions[#1]%
\getparameters[\??ip][\c!n=\noffigurepages,\c!breedte=\!!zeropoint,#3]%
- \doifinsetelse{0}{#2}{\null\pagina}{}%
- \dorecurse{\@@ipn}
- {\dofilterpage{#1}{\recurselevel}%
- \doifinsetelse{\recurselevel}{#2}{\null\pagina}{}}%
+ \doifinset0{#2}{\null\pagina}%
+ \dorecurse\@@ipn
+ {\dofilterpage{#1}\recurselevel
+ \doifinset\recurselevel{#2}{\null\pagina}}%
\egroup}
-\def\filterpages%
+\def\filterpages
{\dotripleempty\dofilterpages}
\def\dofilterpages[#1][#2][#3]% % \noffigurepages not yet supported
@@ -673,12 +867,12 @@
\mindermeldingen
\getfiguredimensions[#1]%
\getparameters[\??ip][\c!n=\noffigurepages,\c!breedte=\!!zeropoint,#3]%
- \doifelse{#2}{\v!even}
- {\dorecurse{\@@ipn}
- {\ifodd\recurselevel\relax\else\dofilterpage{#1}{\recurselevel}\fi}}
- {\doifelse{#2}{\v!oneven}
- {\dorecurse{\@@ipn}
- {\ifodd\recurselevel\relax\dofilterpage{#1}{\recurselevel}\fi}}
+ \doifelse{#2}\v!even
+ {\dorecurse\@@ipn
+ {\ifodd\recurselevel\relax\else\dofilterpage{#1}\recurselevel\fi}}
+ {\doifelse{#2}\v!oneven
+ {\dorecurse\@@ipn
+ {\ifodd\recurselevel\relax\dofilterpage{#1}\recurselevel\fi}}
{\def\dodocommando##1%
{\ifnum##1>\@@ipn\else\dofilterpage{#1}{##1}\fi}%
\def\docommando##1%
@@ -687,11 +881,10 @@
\egroup}
\def\dowithrange#1#2% #2 takes number
- {\beforesplitstring#1\at :\to\fromrange
- \aftersplitstring #1\at :\to\torange
+ {\beforesplitstring#1\at:\to\fromrange
+ \aftersplitstring #1\at:\to\torange
\ifx\torange\empty\let\torange\fromrange\fi
- \dostepwiserecurse{\fromrange}{\torange}{1}
- {#2{\recurselevel}}}
+ \dostepwiserecurse\fromrange\torange1{#2{\recurselevel}}}
\def\dofilterpage#1#2%
{\hbox to \tekstbreedte
@@ -699,13 +892,13 @@
\hfill
\def\dowithfigure{\hskip-\@@ipbreedte}%
\fi\fi\fi
- \setbox0=\hbox
+ \setbox0\hbox
{\externalfigure[#1][\c!pagina=#2,\c!hoogte=\teksthoogte]}%
\wd0\zeropoint
\box0}
\pagina}
-\def\copypages%
+\def\copypages
{\dodoubleempty\docopypages}
\def\docopypages[#1][#2]%
@@ -717,17 +910,15 @@
\c!schaal=\!!thousand,
\c!offset=\!!zeropoint,
#2]%
- \dorecurse{\@@ipn}
+ \dorecurse\@@ipn
{\vbox to \teksthoogte
- {\hsize=\tekstbreedte
- \scratchdimen=\@@ipoffset
+ {\hsize\tekstbreedte
+ \scratchdimen\@@ipoffset
\centeredbox
- {\doifelse{\@@ipmarkering}{\v!aan}
- {\let\next\cuthbox}{\let\next\hbox}%
- \next
+ {\doifelse\@@ipmarkering\v!aan\cuthbox\hbox
{\ifdim\scratchdimen>\zeropoint\relax
- \advance\vsize by -2\scratchdimen
- \advance\hsize by -2\scratchdimen
+ \advance\vsize -2\scratchdimen
+ \advance\hsize -2\scratchdimen
\externalfigure[#1][\c!pagina=\recurselevel,#2,\c!schaal=,\c!factor=\v!max,\c!offset=\v!overlay]%
\else
\externalfigure[#1][\c!pagina=\recurselevel,#2,\c!offset=\v!overlay]%
@@ -762,7 +953,7 @@
%D One can influence the way the pages are combined. (This
%D will be explained some time.)
-\def\combinepages%
+\def\combinepages
{\dodoubleempty\docombinepages}
\def\docombinepages[#1][#2]% a=perpag b=free
@@ -772,68 +963,77 @@
\getparameters
[\??ip]
[\c!variant=\v!a,
- \c!n=\noffigurepages,\c!nx=2,\c!ny=2,
+ \c!n=\noffigurepages,\c!nx=2,\c!ny=2,\c!start=1,\c!stop=\!!maxcard,
\c!afstand=\bodyfontsize,
\c!onder=\vfill,\c!boven=\vss,
\c!links=\hss,\c!rechts=\hss,
\c!voor=\pagina,\c!na=\pagina,\c!tussen=\blanko,
- \c!kader=,
+ \c!kader=,\c!achtergrond=,\c!achtergrondkleur=,
#2]%
\@@ipvoor
- \doglobal\newcounter\combinedpagescounter
- \doifelse{\@@ipvariant}{\v!b}{\!!doneafalse}{\!!doneatrue}%
+ %\doglobal\newcounter\combinedpagescounter
+ \globallet\combinedpagescounter\@@ipstart
+ \doifelse\@@ipvariant\v!b\!!doneafalse\!!doneatrue
\if!!donea
\doloop
{\vbox to \teksthoogte
- {\hsize=\tekstbreedte % ? ?
- \scratchdimen=\@@ipafstand
- \!!widtha=\hsize
- \advance\!!widtha by -\@@ipnx\scratchdimen
- \advance\!!widtha by \scratchdimen
- \divide \!!widtha by \@@ipnx
- \!!heighta=\vsize
- \advance\!!heighta by -\@@ipny\scratchdimen
- \advance\!!heighta by \scratchdimen
- \divide \!!heighta by \@@ipny
- \dorecurse{\@@ipny}
+ {\hsize\tekstbreedte % ? ?
+ \scratchdimen\@@ipafstand
+ \!!widtha\hsize
+ \advance\!!widtha -\@@ipnx\scratchdimen
+ \advance\!!widtha \scratchdimen
+ \divide \!!widtha \@@ipnx
+ \!!heighta\vsize
+ \advance\!!heighta -\@@ipny\scratchdimen
+ \advance\!!heighta \scratchdimen
+ \divide \!!heighta \@@ipny
+ \dorecurse\@@ipny
{\hbox to \hsize
- {\dorecurse{\@@ipnx}
- {\doglobal\increment\combinedpagescounter
- \vbox to \!!heighta
- {\hsize=\!!widtha
- \vsize=\!!heighta
+ {\dorecurse\@@ipnx
+ {\vbox to \!!heighta
+ {\hsize\!!widtha
+ \vsize\!!heighta
\@@ipboven
\hbox to \hsize
{\@@iplinks
+\ifnum\combinedpagescounter>\@@ipstop\relax
+ \globallet\@@ipn\!!zerocount
+\else
\ifnum\combinedpagescounter>\@@ipn \else
\externalfigure[#1]
[\c!object=\v!nee,
\c!pagina=\combinedpagescounter,
\c!factor=\v!max,
+ \c!achtergrond=\@@ipachtergrond,
+ \c!achtergrondkleur=\@@ipachtergrondkleur,
\c!kader=\@@ipkader]%
\fi
+\fi
\@@iprechts}
\@@iponder}%
+ \doglobal\increment\combinedpagescounter
\hfil}%
\hfilneg}
\vfil}%
\vfilneg}%
- \ifnum\combinedpagescounter<\@@ipn \else\exitloop\fi}
+ \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}
\else
\doloop
{\startbaselinecorrection
- \scratchdimen=\@@ipafstand
- \!!widtha=\hsize
- \advance\!!widtha by -\@@ipnx\scratchdimen
- \advance\!!widtha by \scratchdimen
- \divide \!!widtha by \@@ipnx
+ \scratchdimen\@@ipafstand
+ \!!widtha\hsize
+ \advance\!!widtha -\@@ipnx\scratchdimen
+ \advance\!!widtha \scratchdimen
+ \divide \!!widtha \@@ipnx
\hbox to \hsize
- {\dorecurse{\@@ipnx}
+ {\dorecurse\@@ipnx
{\doglobal\increment\combinedpagescounter
\ifnum\combinedpagescounter>\@@ipn \else
\externalfigure[#1]
[\c!pagina=\combinedpagescounter,
\c!breedte=\!!widtha,
+ \c!achtergrond=\@@ipachtergrond,
+ \c!achtergrondkleur=\@@ipachtergrondkleur,
\c!kader=\@@ipkader]%
\fi}}%
\stopbaselinecorrection
@@ -859,13 +1059,13 @@
%D \stoppagecomment
%D \stoptypen
-\def\setuppagecomment%
+\def\setuppagecomment
{\dosingleempty\dosetuppagecomment}
\def\dosetuppagecomment[#1]%
{\getparameters[\??pc][#1]%
- \doifelse{\@@pcstatus}{\v!start}
- {\doifinsetelse{\@@pcplaats}{\v!onder,\v!boven}
+ \doifelse\@@pcstatus\v!start
+ {\doifinsetelse\@@pcplaats{\v!onder,\v!boven}
{\setuppapersize[\c!links=\hskip\@@pcoffset]%
\adddimenmacro\papierhoogte\@@pcoffset\@@pcoffset\@@pcafstand\@@pchoogte\to\@@pcpaperheight
\adddimenmacro\papierbreedte\@@pcoffset\@@pcoffset\to\@@pcpaperwidth
@@ -887,19 +1087,19 @@
\let\@@pcprintpapersize\printpapersize
\setuppapersize[\papersize][commentedpage]%
\setupbackgrounds[\v!papier][\c!achtergrond=pagecomment]}
- {\doif{\@@pcstatus}{\v!stop} % else initialization invokes backgrounds
+ {\doif\@@pcstatus\v!stop % else initialization invokes backgrounds
{% this should be tested first
% \expanded{\setuppapersize[\papersize][\@@pcprintpapersize]}%
\setupbackgrounds[\v!papier][\c!achtergrond=]}}}
\def\@@pcprintpapersize{\printpapersize}
-\def\placepagecommentTB%
+\def\placepagecommentTB
{\vbox to \printpapierhoogte
{\forgetall
\hsize\printpapierbreedte
\vskip\@@pcoffset
- \doifelse{\@@pcplaats}{\v!onder}{\vskip\papierhoogte\vskip\@@pcafstand}{\vss}
+ \doifelse\@@pcplaats\v!onder{\vskip\papierhoogte\vskip\@@pcafstand}\vss
\hskip\@@pcoffset
\vbox to \@@pchoogte
{\forgetall
@@ -909,13 +1109,13 @@
\global\pagecommentfalse
\fi}%
\hfill
- \doifelse{\@@pcplaats}{\v!onder}{\vss}{\vskip\papierhoogte\vskip\@@pcafstand}
+ \doifelse\@@pcplaats\v!onder\vss{\vskip\papierhoogte\vskip\@@pcafstand}
\vskip\@@pcoffset}}
-\def\placepagecommentLR%
+\def\placepagecommentLR
{\hbox to \printpapierbreedte
{\hskip\@@pcoffset
- \doifelse{\@@pcplaats}{\v!rechts}{\hskip\papierbreedte\hskip\@@pcafstand}{\hss}%
+ \doifelse\@@pcplaats\v!rechts{\hskip\papierbreedte\hskip\@@pcafstand}\hss
\vbox to \printpapierhoogte
{\forgetall
\vskip\@@pcoffset
@@ -925,7 +1125,7 @@
\global\pagecommentfalse
\fi
\vss}%
- \doifelse{\@@pcplaats}{\v!rechts}{\hss}{\hskip\papierbreedte\hskip\@@pcafstand}%
+ \doifelse\@@pcplaats\v!rechts\hss{\hskip\papierbreedte\hskip\@@pcafstand}%
\hskip\@@pcoffset}}
\newif\ifpagecomment
@@ -945,7 +1145,7 @@
% This macro cuts a page into n parts that can be pasted
% together.
-\def\slicepages%
+\def\slicepages
{\dotripleempty\doslicepages}
\def\doslicepages[#1][#2][#3]%
@@ -960,7 +1160,7 @@
\def\dodoslicepages[#1][#2][#3]%
{\bgroup
\dontcomplain
- \gdef\slicedpagenumber{0}%
+ \globallet\slicedpagenumber\!!zerocount
\getfiguredimensions[#1]
\getparameters
[\??ip]
@@ -968,20 +1168,20 @@
\c!offset=\!!zeropoint,
\c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint,
\c!breedte=\figurewidth,\c!hoogte=\figureheight,#2]
-\ifnum\@@ipn>0
- \definepapersize
- [\s!dummy][\c!hoogte=\@@iphoogte,\c!breedte=\@@ipbreedte]
- \setuppapersize
- [\s!dummy][\s!dummy]
- \stellayoutin % \setuplayout
- [\c!rugwit=\!!zeropoint,\c!kopwit=\!!zeropoint,
- \c!hoogte=\v!midden,\c!breedte=\v!midden,
- \c!tekstafstand=\!!zeropoint,
- \c!hoofd=\!!zeropoint,\c!voet=\!!zeropoint]
-\fi
+ \ifnum\@@ipn>\zerocount
+ \definepapersize
+ [\s!dummy][\c!hoogte=\@@iphoogte,\c!breedte=\@@ipbreedte]
+ \setuppapersize
+ [\s!dummy][\s!dummy]
+ \stellayoutin % \setuplayout
+ [\c!rugwit=\!!zeropoint,\c!kopwit=\!!zeropoint,
+ \c!hoogte=\v!midden,\c!breedte=\v!midden,
+ \c!tekstafstand=\!!zeropoint,
+ \c!hoofd=\!!zeropoint,\c!voet=\!!zeropoint]
+ \fi
\dorecurse\noffigurepages
{\global\let\slicedpagenumber\recurselevel
- \ifnum\@@ipn>1
+ \ifnum\@@ipn>\plusone
\dorecurse\@@ipn
{\let\xslice\recurselevel
\dorecurse\@@ipn
@@ -1007,10 +1207,6 @@
\fi}
\egroup}
-% \starttext
-%
-% \slicepages[slice1.pdf][n=3]
-%
-% \stoptext
+% \starttext \slicepages[slice1.pdf][n=3] \stoptext
\protect \endinput
diff --git a/tex/context/base/page-ini.tex b/tex/context/base/page-ini.tex
index 9055997c2..a770420a3 100644
--- a/tex/context/base/page-ini.tex
+++ b/tex/context/base/page-ini.tex
@@ -370,6 +370,18 @@
\let \addstatusinfo \gobbleoneargument % <box>
\fi
+
+\ifx\realpageno\undefined
+
+ \countdef\realpageno\zerocount \realpageno\plusone
+
+\fi
+
+\ifx\realfolio\undefined
+
+ \def\realfolio{\the\realpageno}
+
+\fi
% principle:
%
@@ -549,7 +561,7 @@
\beginTEX \...discards
- \chardef \savingvdiscards 1
+ \chardef \savingvdiscards \zerocount
\let \splitdiscards \relax
\let \pagediscards \relax
@@ -626,73 +638,65 @@
\def\somebotsfloat {\OTRcommand\somebotsfloat}
\def\somesidefloat {\OTRcommand\somesidefloat}
-\def\nextcolumn {\OTRcommand\nextcolumn}
-
\def\flushsavedfloats {\OTRcommand\flushsavedfloats}
-% beter een \installotr#1 met #1 = macro en auto test
+\def\gotonextpage {\OTRcommand\gotonextpage }
+\def\gotonextpageX {\OTRcommand\gotonextpageX} % will become obsolete
-\newif\iftraceotr
+% beter een \installotr#1 met #1 = macro en auto test
+\newif \iftraceotr
+\newif \ifinotr
+\newtoks \mainoutput
\newcount\otrlevel
-\def\outputcounter{-100010}
+% When issuing two \par\penalty-\@M's, only the first
+% triggers the otr; obscure feature or optimization?
-\def\doinvokeoutput%
+\def\outputcounter{-100010} % -10010
+
+\def\doinvokeoutput
{\iftraceotr
\expandafter\dodotracedoutput
\else
\expandafter\dodoinvokeoutput
\fi}
-\def\dodoinvokeoutput#1%
- {\bgroup\par\penalty#1\relax\egroup}
+\def\outputmessage#1#2#3%
+ {\iftraceotr\writestatus\m!otr{#1 #2 \number#3}\fi}
-%\def\dodoinvokeoutput#1%
-% {\advance\otrlevel 1
-% \ifnum\otrlevel>1 \writestatus{otr}{nested output #1}\fi
-% \bgroup\par\penalty#1\relax\egroup
-% \advance\otrlevel -1 }
+\def\dodoinvokeoutput#1%
+ {\outputmessage+{special}{#1}%
+ \bgroup\par\penalty#1\relax\egroup
+ \outputmessage-{special}{#1}}
\def\dodotracedoutput#1%
- {\writestatus{\m!otr}{start \the\outputpenalty\space in column \number\mofcolumns}%
- \writestatus{\m!otr}{v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}%
+ {\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}{v:\the\vsize,g:\the\pagegoal,t:\the\pagetotal}%
- \writestatus{\m!otr}{stop \the\outputpenalty\space in column \number\mofcolumns}}
+ \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
{\decrement\outputcounter
\edef#1{\noexpand\doinvokeoutput{\outputcounter}}%
\setvalue{\@@OTR\outputcounter}{#2}}
-% \installoutput\dosynchronizeoutput
-% {\synchronizeinsertions
-% \unvbox\normalpagebox}
-
-\installoutput\dosynchronizeoutput
- {\unvbox\normalpagebox}
-
-% \installoutput\dosynchronizeoutput
-% {\bgroup
-% \setbox\scratchbox\vbox{\unvbox\normalpagebox}%
-% \ifdim\ht\scratchbox=\zeropoint \else
-% \topskip\zeropoint
-% \unvbox\scratchbox
-% \fi
-% \egroup}
-
-\def\synchronizeoutput
- {\dosynchronizeoutput}
-
-\newtoks\mainoutput
-\newif\ifinotr
-
\def\invokeoutputroutine
- {\executeifdefined{\@@OTR\the\outputpenalty}{\the\OTRcommand\output}}
+ {\outputmessage+{trying}\outputpenalty
+ \executeifdefined{\@@OTR\the\outputpenalty}\dodonormaloutput
+ \outputmessage-{trying}\outputpenalty}
+
+\def\dodonormaloutput
+ {\outputmessage+{normal}\outputpenalty
+ \the\OTRcommand\output
+ \outputmessage-{normal}\outputpenalty}
\mainoutput{\invokeoutputroutine} \output{\inotrtrue\the\mainoutput}
+\installoutput\synchronizeoutput
+ {\ifvoid\normalpagebox\else\unvbox\normalpagebox\fi}
+
%D In order to force consistent use of variables, we
%D predefine a lot of them here.
@@ -728,15 +732,15 @@
\def\initializecolumns#1%
{\ifnum#1>\maxnofcolumns
- \showmessage{\m!columns}{1}{\maxnofcolumns}%
- \nofcolumns=\maxnofcolumns
+ \showmessage\m!columns1\maxnofcolumns
+ \nofcolumns\maxnofcolumns
\else
- \nofcolumns=#1\relax
+ \nofcolumns#1\relax
\fi
\ifnum\nofcolumns>\allocatednofcolumns
\dorecurse\nofcolumns
{\ifnum\recurselevel>\allocatednofcolumns\relax
- % \newbox\next \global\letvalue{\@col@-\recurselevel-t}=\next
+ % \newbox\next \letgvalue{\@col@-\recurselevel-t}=\next
\@EA\newbox\csname\@col@-\recurselevel-t\endcsname % text
\@EA\newbox\csname\@col@-\recurselevel-f\endcsname % foot
\@EA\newbox\csname\@col@-\recurselevel-h\endcsname % top insert
@@ -745,11 +749,11 @@
\global\chardef\allocatednofcolumns=\nofcolumns
\fi}
-\def\firstcolumnbox {\columntextbox1}
+\def\firstcolumnbox {\columntextbox\plusone}
\def\currentcolumnbox {\columntextbox\mofcolumns}
\def\lastcolumnbox {\columntextbox\nofcolumns}
-\def\firsttopcolumnbox {\columntopbox 1}
+\def\firsttopcolumnbox {\columntopbox \plusone}
\def\currenttopcolumnbox{\columntopbox \mofcolumns}
\def\lasttopcolumnbox {\columntopbox \nofcolumns}
@@ -781,21 +785,23 @@
%D outside these macro's.
\def\dohandlecolumn#1%
- {\mofcolumns=\recurselevel
- \let\currentcolumn=\recurselevel
+ {\mofcolumns\recurselevel
+ \let\currentcolumn\recurselevel
#1\relax}
\def\dohandleallcolumns#1%
- {\dorecurse{\nofcolumns}{\dohandlecolumn{#1}}}
+ {\dorecurse\nofcolumns{\dohandlecolumn{#1}}}
\def\dohandlerevcolumns#1%
- {\dostepwiserecurse{\nofcolumns}{1}{-1}{\dohandlecolumn{#1}}}
+ {\dostepwiserecurse\nofcolumns\plusone\minusone{\dohandlecolumn{#1}}}
\def\dohandlemidcolumns#1%
{\dohandleallcolumns
- {\ifnum\recurselevel>1\relax\ifnum\recurselevel<\nofcolumns\relax
- \dohandlecolumn{#1}%
- \fi\fi}}
+ {\ifnum\recurselevel>\plusone
+ \ifnum\recurselevel<\nofcolumns
+ \dohandlecolumn{#1}%
+ \fi
+ \fi}}
%D This register can be used as a temporary storage for page
%D content.
@@ -840,44 +846,44 @@
%D on the baseline, as is the case with preceding pages.
%D Also, a \type {\vfil} better than a \type {\vfill}.
-\def\doejectpage%
- {\par\ifdim\pagetotal>\pagegoal\else\normalvfil\fi}
+\def\eject {\par\penalty-\@M } % == {\par\break} % plain
+\def\supereject {\par\penalty-\@MM} % also plain
-\def\ejectpage%
- {\doejectpage\eject}
+\def\doejectpage {\par\ifdim\pagetotal>\pagegoal\else\normalvfil\fi}
+\def\ejectpage {\doejectpage\eject}
+\def\superejectpage{\doejectpage\supereject}
-\def\superejectpage%
- {\doejectpage\supereject}
+% floats
-\def\ejectinsert%
+\def\ejectinsert
{\flushnotes
\bgroup
- \noftopfloats=\!!thousand
- \nofbotfloats=0
+ \noftopfloats\!!thousand
+ \nofbotfloats\zerocount
\doflushfloats
\egroup}
-\def\ejectdummypage%
+\def\ejectdummypage
{\ejectinsert
\hardespatie % will be different
\vfill
- \ejectpage}
+ \gotonextpage}
-\def\beforefinaloutput%
+\def\beforefinaloutput
{}
-\def\afterfinaloutput%
+\def\afterfinaloutput
{\forgetall
\vskip\zeropoint\relax
- \ifvoid\normalpagebox
- \else
+ \ifvoid\normalpagebox \else
\unvbox\normalpagebox
\penalty\outputpenalty
\fi
- \ifnum\outputpenalty>-\@MM\relax
- \else
- \dosupereject
+ % not really needed, replaced by \flushsavedfloats
+ \ifnum\outputpenalty>-\@MM \else % better use a proper otr signal
+ \dosupereject
\fi
+ % but does not hurt either
\inpagebodytrue % needed for enabling \blanko !
\flushsavedfloats % was \dosetbothinserts; only otr one !
\setvsize % this is needed for interacting components, like floats and multicolumns
@@ -902,10 +908,10 @@
\the\everybeforeshipout
\setpagecounters
\message{[-\the\realpageno]}%
- \setbox0=\hbox
- {\the\everyshipout
+ \setbox\scratchbox\hbox
+ {%\the\everyshipout % still needed here ?
\dopagebody#1#2}%
- \deadcycles=0
+ \deadcycles\zerocount
\gotonextrealpage
\the\everyaftershipout
\afterfinaloutput
@@ -929,13 +935,15 @@
\resetselectiepagina
\verhoogpaginanummer
\checkpagedimensions
- \ifnum\outputpenalty>-\@MM\relax
- \else
+ \ifnum\outputpenalty>-\@MM \else
\dosupereject
\fi
+ \doflushspread
\douitstellen}
-\def\dooutput%
+\ifx\doflushspread\undefined \let\doflushspread\relax \fi
+
+\def\dooutput
{\finaloutput\unvbox\normalpagebox}
\maxdeadcycles=1000
@@ -976,13 +984,13 @@
\def\doversie[#1]%
{\voorlopigfalse
\conceptfalse
- \overfullrule=\zeropoint
+ \overfullrule\zeropoint
\processaction
[#1]
- [\v!voorlopig=>\voorlopigtrue\overfullrule=5pt,
+ [\v!voorlopig=>\voorlopigtrue\overfullrule5pt,
\v!concept=>\concepttrue]}
-\def\versie%
+\def\versie
{\dosingleargument\doversie}
%\def\addstatusinfo#1%
@@ -1011,7 +1019,7 @@
\fi\fi}
\def\doaddstatusinfo#1%
- {\setbox#1=\vbox to \papierhoogte
+ {\setbox#1\vbox to \papierhoogte
{\vsmashbox#1\box#1
\offinterlineskip
\vskip\kopwit
@@ -1025,18 +1033,16 @@
{\ifvoorlopig\ifinpagebody\else
\begingroup
\@EA\convertargument#3\to\ascii
- \xdef\extratestinfo%
+ \xdef\extratestinfo
{#2 \ascii}%
- \gdef\totaltestinfo%
- {\global\setbox#1=\vbox
- {\unvbox#1\relax %\insert#1{%
+ \gdef\totaltestinfo
+ {\global\setbox#1\vbox
+ {\unvbox#1\relax
\infofont \stelinterliniein
\hbox
{\strut
\expandafter\doboundtext\expandafter
- {\extratestinfo}
- {12em}
- {..}%
+ {\extratestinfo}{12em}{..}%
\quad}}}%
\endgroup
\ifinner
@@ -1060,26 +1066,26 @@
\def\registerinfo {\dotestinfo\registerinfobox}
\def\floatinfo {\dotestinfo\floatinfobox}
-\def\plaatstestinfo%
+\def\plaatstestinfo
{\ifvoorlopig
\vbox to \zethoogte
{\forgetall
\infofont
\hsize10em
\ifvoid\floatinfobox\else
- \strut \getmessage\m!systems{24}
+ \strut \getmessage\m!systems{24}%
\vskip\!!sixpoint
\unvbox\floatinfobox
\vskip\!!twelvepoint
\fi
\ifvoid\referentieinfobox\else
- \strut \getmessage\m!systems{25}
+ \strut \getmessage\m!systems{25}%
\vskip\!!sixpoint
\unvbox\referentieinfobox
\vskip\!!twelvepoint
\fi
\ifvoid\registerinfobox\else
- \strut \getmessage\m!systems{26}
+ \strut \getmessage\m!systems{26}%
\vskip\!!sixpoint
\unvbox\registerinfobox
\fi
@@ -1135,14 +1141,21 @@
\newtoks\afterpage \newtoks\aftereverypage
\newtoks\beforepage \newtoks\beforeeverypage
-\newif\ifshowgrid \showgridfalse
+\chardef\showgridstate=0
-\def\showgrid%
- {\tracegridsnappingtrue
- \showgridtrue}
+\def\showgrid
+ {\dosingleempty\doshowgrid}
+
+\def\doshowgrid[#1]%
+ {\chardef\showgridstate\plusone % downward compatible default
+ \processaction
+ [#1]%
+ [\v!reset=>\chardef\showgridstate0,
+ %\v!onder=>\chardef\showgridstate1,%
+ \v!boven=>\chardef\showgridstate2]}
\def\buildpagebox#1%
- {\setbox#1=\vbox to \papierhoogte
+ {\setbox#1\vbox to \papierhoogte
{\hsize\papierbreedte
\vskip\kopwit
\doifbothsides
@@ -1155,18 +1168,24 @@
\hskip-\zetbreedte
\od
\box#1}%
- \dp#1=\zeropoint}
+ \dp#1\zeropoint}
\newif\ifpagebodyornaments \pagebodyornamentstrue
\newif\ifarrangingpages \arrangingpagesfalse
-\let\poparrangedpages=\relax
-\let\pusharrangedpage=\relax
+\appendtoks
+ \global\pagebodyornamentstrue
+\to \everyaftershipout
+
+\let\poparrangedpages\relax
+\let\pusharrangedpage\relax
+
+\let\shiftprintpagebox\gobbleoneargument
+\let\shiftpaperpagebox\gobbleoneargument
\def\reportarrangedpage#1%
- {\showmessage
- {\m!systems}{23}
- {\the\realpageno.\the\pageno\ifnum\subpageno>0 .\the\subpageno\fi,#1}}
+ {\showmessage\m!systems
+ {23}{\the\realpageno.\the\pageno\ifnum\subpageno>0 .\the\subpageno\fi,#1}}
\newif\ifsavepagebody \newbox\savedpagebody
@@ -1177,7 +1196,7 @@
\forgetall % igv problemen, check: \boxmaxdepth\maxdimen
\boxmaxdepth\maxdimen % new
\mindermeldingen
- \setbox\pagebox=\vbox
+ \setbox\pagebox\vbox
{\offinterlineskip
\ifpagebodyornaments
% \getbackgroundbox
@@ -1192,27 +1211,31 @@
\fi
\getmainbox#1#2}% including footnotes
\ifpagebodyornaments
- \addmainbackground\pagebox
- \addlogobackground\pagebox
+ \addmainbackground \pagebox
+ \addlogobackground \pagebox
\fi
- \buildpagebox\pagebox
- \addstatusinfo\pagebox
+ \buildpagebox \pagebox
+ \addstatusinfo \pagebox
\ifpagebodyornaments
- \addpagebackground\pagebox
+ \addpagebackground \pagebox
\fi
- \ifarrangingpages \else
- \addpagecutmarks\pagebox
- \replicatepagebox\pagebox
- \scalepagebox\pagebox
- \mirrorpaperbox\pagebox
- \rotatepaperbox\pagebox
- \addpagecolormarks\pagebox
- \centerpagebox\pagebox
+ \ifarrangingpages
+ \shiftpaperpagebox \pagebox % \v!papier
+ \else
+ \clippagebox \pagebox
+ \addpagecutmarks \pagebox
+ \replicatepagebox \pagebox
+ \scalepagebox \pagebox
+ \mirrorpaperbox \pagebox
+ \rotatepaperbox \pagebox
+ \addpagecolormarks \pagebox
+ \centerpagebox \pagebox
\addprintbackground\pagebox
- \mirrorprintbox\pagebox
- \rotateprintbox\pagebox
- \offsetprintbox\pagebox
- \negateprintbox\pagebox
+ \mirrorprintbox \pagebox
+ \rotateprintbox \pagebox
+ \shiftprintpagebox \pagebox % \v!pagina
+ \offsetprintbox \pagebox
+ \negateprintbox \pagebox
\fi
\box\pagebox
\endrestorecatcodes}%
@@ -1220,13 +1243,13 @@
\def\finishpagebox#1%
{\ifarrangingpages
- \addpagecutmarks#1%
+ \addpagecutmarks #1%
\addpagecolormarks#1%
- \centerpagebox#1%
- \mirrorprintbox#1%
- \rotateprintbox#1%
- \offsetprintbox#1%
- \negateprintbox#1%
+ \centerpagebox #1%
+ \mirrorprintbox #1%
+ \rotateprintbox #1%
+ \offsetprintbox #1%
+ \negateprintbox #1%
\fi}
\appendtoks \restoreglobalbodyfont \to \everybeforepagebody
@@ -1246,7 +1269,7 @@
\inpagebodytrue\buildpagebody#1#2%
\flushtoks\afterpage
\dotoks\aftereverypage
- \resetpagina
+ \resetpagebreak
\updatelistreferences
\resetlayoutlines % will go to \aftereverypage
\stopcolorpage
@@ -1267,157 +1290,201 @@
{\relax % needed !
\ifpaginageblokkeerd \else
\ifdim\pagegoal<\maxdimen
- \ifdim\pagetotal<\pagegoal\relax
- \dimen0=\lineheight
- \multiply\dimen0 #1\relax
- \advance\dimen0 \pagetotal
+ \ifdim\pagetotal<\pagegoal % \relax
+ \scratchdimen\lineheight
+ \multiply\scratchdimen#1\relax
+ \advance\scratchdimen \pagetotal
\ifdim\lastskip<\parskip
- \advance\dimen0 \parskip
+ \advance\scratchdimen \parskip
\fi
- \advance\dimen0 #2\relax
- \ifdim\dimen0>.99\pagegoal
+ \advance\scratchdimen#2\relax
+ \ifdim\scratchdimen>.99\pagegoal
\penalty-\!!tenthousand\relax
\fi
- \else
- % do nothing
\fi
\else
\goodbreak
\fi
\fi}
-\let\resetcurrentsectionmarks=\relax
+\let\resetcurrentsectionmarks\relax
% was: \resetsectionmarks\firstsection, zie \handelpaginaaf
-\def\complexpagina[#1]%
- {\edef\!!stringa{#1}%
- \ifx\!!stringa\empty
- % do nothing and avoid processing, see head's
- \else
- \@EA\docomplexpagina\@EA[\!!stringa]
- \fi}
+\def\page {\pagebreak} % the short form of \pagebreak (mult-com one)
+\def\pagina{\pagebreak} % for the moment, keep this one
-\def\docomplexpagina[#1]% % will be installable
- {\flushnotes
- \bgroup
- \processallactionsinset
- [#1]
- [ \v!reset=>\global\paginageblokkeerdfalse,
- \v!blokkeer=>\global\paginageblokkeerdtrue,
- \v!ja=>\ifpaginageblokkeerd\else
- \ejectinsert
- \ejectpage
- \ifbinnenkolommen
- \ejectpage % anders soms geen overgang
- \fi
- \fi,
- \v!opmaak=>\ifpaginageblokkeerd\else
- \eject
- \fi,
- \v!blanko=>\pagebodyornamentsfalse,
- \v!nee=>\ifpaginageblokkeerd\else
- \dosomebreak\nobreak
- \fi,
- \v!voorkeur=>{\ifpaginageblokkeerd\else
- \ifbinnenkolommen
- \dosomebreak\goodbreak
- \else
- \testpagina[3][\!!zeropoint]%
- \fi
- \fi},
- \v!grotevoorkeur=>{\ifpaginageblokkeerd\else
- \ifbinnenkolommen
- \dosomebreak\goodbreak
- \else
- \testpagina[5][\!!zeropoint]%
- \fi
- \fi},
- \v!leeg=>{\ejectinsert
- \ejectpage
-% \doifnotvalue{\??tk\v!hoofd\v!tekst\c!status}{\v!stop}
- \doifnotvalue{\??tk\v!hoofd\c!status}{\v!stop}
- {\setupheader[\c!status=\v!leeg]}%
-% \doifnotvalue{\??tk\v!voet\v!tekst\c!status}{\v!stop}
- \doifnotvalue{\??tk\v!voet\c!status}{\v!stop}
- {\setupfooter[\c!status=\v!leeg]}%
- \ejectdummypage},
- \v!links=>{\ejectinsert
- \superejectpage
- \doifbothsidesoverruled
- \orsideone
- \resetcurrentsectionmarks
- \ejectdummypage
- \orsidetwo
- \od},
- \v!rechts=>{\ejectinsert
- \superejectpage
- \doifbothsidesoverruled
- \orsideone
- \orsidetwo
- \resetcurrentsectionmarks
- \ejectdummypage
- \od},
- \v!even=>\pagina
- \doifonevenpaginaelse
- {\resetcurrentsectionmarks\ejectdummypage}{},
- \v!oneven=>\pagina
- \doifonevenpaginaelse
- {}{\resetcurrentsectionmarks\ejectdummypage},
- \v!viertal=>{\ifdubbelzijdig
- \!!counta=\realpageno
- \!!countb=\realpageno
- \divide\!!counta by 4
- \divide\!!countb by 2
- \ifnum\!!counta=\!!countb
- \else
- \pagina
- \pagina[\v!leeg]%
- \pagina[\v!leeg]%
- \fi
- \fi},
- \v!laatste=>{\ejectinsert
- \superejectpage
- \doifbothsidesoverruled
- \naastpagina
- \orsideone
- \orsidetwo
- %\ifodd\realpageno \else % kan weer weg
- \noheaderandfooterlines
- \ejectdummypage
- %\fi
- \od
- \filluparrangedpages},
-% \s!default=>,% do nothing if empty
- \s!unknown=>\let\@@pagespecification\commalistelement
- \doifinstringelse{+}\@@pagespecification
- {\ejectinsert\ejectpage
- \dorecurse\@@pagespecification\ejectdummypage}
- {\doifnumberelse\@@pagespecification
- {\ejectinsert\ejectpage
- \doloop
- {\ifnum\userpageno<\@@pagespecification\relax
- \ejectdummypage
- \else
- \exitloop
- \fi}}
- {}}]%
- \egroup}
+\def\resetpagebreak
+ {\global\paginageblokkeerdfalse}
-\def\simplepagina
+\def\simplifypagebreak
+ {\def\pagebreak{\goodbreak}}
+
+\def\executepagebreakhandler#1%
+ {\edef\@@pagespecification{#1}%
+ \doifdefinedelse{\??pe:\@@pagespecification}
+ {\getvalue{\??pe:\@@pagespecification}}
+ {\doifdefinedelse{\??pe::\@@pagespecification}
+ {\executepagebreakhandlers{\getvalue{\??pe::\@@pagespecification}}}
+ {\getvalue{\??pe:\s!unknown}}}}
+
+\long\def\installpagebreakhandler#1#2%
+ {\long\setvalue{\??pe:#1}{#2}}
+
+\definecomplexorsimple\pagebreak
+
+\def\simplepagebreak
{\flushnotes
- \ifpaginageblokkeerd\else
+ \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\executepagebreakhandlers#1%
+ {\processcommacommand[#1]\executepagebreakhandler}
+
+\installpagebreakhandler \s!unknown
+ {\doifinstringelse{+}\@@pagespecification
+ {\ejectinsert
+ \gotonextpage
+ \dorecurse\@@pagespecification\ejectdummypage}
+ {\doifnumberelse\@@pagespecification
+ {\ejectinsert
+ \gotonextpage
+ \doloop
+ {\ifnum\userpageno<\@@pagespecification\relax
+ \ejectdummypage
+ \else
+ \exitloop
+ \fi}}
+ {}}}
+
+\installpagebreakhandler \s!default
+ {} % do nothing if empty
+
+\installpagebreakhandler \v!reset
+ {\global\paginageblokkeerdfalse}
+
+\installpagebreakhandler \v!blokkeer
+ {\global\paginageblokkeerdtrue}
+
+\installpagebreakhandler \v!ja
+ {\ifpaginageblokkeerd\else
\ejectinsert
- \ejectpage
- \ifbinnenkolommen
+ \gotonextpage
+ \ifbinnenkolommen % this will move to MUL
\ejectpage % anders soms geen overgang
\fi
\fi}
-\definecomplexorsimple\pagina
+\installpagebreakhandler \v!opmaak % ??
+ {\ifpaginageblokkeerd\else
+ \eject
+ \fi}
-\def\resetpagina%
- {\global\paginageblokkeerdfalse}
+\installpagebreakhandler \v!blanko
+ {\global\pagebodyornamentsfalse}
+
+\installpagebreakhandler \v!nee
+ {\ifpaginageblokkeerd\else
+ \dosomebreak\nobreak
+ \fi}
+
+\installpagebreakhandler \v!voorkeur
+ {\ifpaginageblokkeerd\else
+ \ifbinnenkolommen % this will move to MUL
+ \dosomebreak\goodbreak
+ \else
+ \testpagina[3][\zeropoint]%
+ \fi
+ \fi}
+
+\installpagebreakhandler \v!grotevoorkeur
+ {\ifpaginageblokkeerd\else
+ \ifbinnenkolommen % this will move to MUL
+ \dosomebreak\goodbreak
+ \else
+ \testpagina[5][\zeropoint]%
+ \fi
+ \fi}
+
+\installpagebreakhandler \v!leeg
+ {\ejectinsert
+ \gotonextpage
+ \doifnotvalue{\??tk\v!hoofd\c!status}\v!stop
+ {\setupheader[\c!status=\v!leeg]}%
+ \doifnotvalue{\??tk\v!voet\c!status}\v!stop
+ {\setupfooter[\c!status=\v!leeg]}%
+ \ejectdummypage}
+
+\installpagebreakhandler \v!links
+ {\ejectinsert
+ \gotonextpageX % will become \gotonextpage
+ \doifbothsidesoverruled
+ \orsideone
+ \resetcurrentsectionmarks
+ \ejectdummypage
+ \orsidetwo
+ \od}
+
+\installpagebreakhandler \v!rechts
+ {\ejectinsert
+ \gotonextpageX % will become \gotonextpage
+ \doifbothsidesoverruled
+ \orsideone
+ \orsidetwo
+ \resetcurrentsectionmarks
+ \ejectdummypage
+ \od}
+
+\installpagebreakhandler \v!even
+ {\pagina
+ \doifoddpageelse
+ {\resetcurrentsectionmarks\ejectdummypage}\donothing}
+
+\installpagebreakhandler \v!oneven
+ {\pagina
+ \doifoddpageelse
+ \donothing{\resetcurrentsectionmarks\ejectdummypage}}
+
+\installpagebreakhandler \v!viertal % not yet ok inside columnsets
+ {\ifdubbelzijdig
+ \!!counta\realpageno
+ \!!countb\realpageno
+ \divide\!!counta 4
+ \divide\!!countb 2
+ \ifnum\!!counta=\!!countb
+ \else
+ \executepagebreakhandler\v!ja
+ \executepagebreakhandler\v!leeg
+ \executepagebreakhandler\v!leeg
+ \fi
+ \fi}
+
+\installpagebreakhandler \v!laatste
+ {\ejectinsert
+ \gotonextpageX % will become \gotonextpage
+ \relax
+ \doifbothsidesoverruled
+ \naastpagina
+ \orsideone
+ \orsidetwo
+ \noheaderandfooterlines
+ \ejectdummypage
+ \od
+ \filluparrangedpages}
+
+% public page handler, beware: definepage already in use (core-ref)
+%
+% \definepagebreak[instance][forsure]
+% \definepagebreak[forsure][yes,+4]
+
+\def\definepagebreak
+ {\dodoubleargument\dodefinepagebreak}
+
+\def\dodefinepagebreak[#1][#2]% non recursive, meant for simple mappings
+ {\setvalue{\??pe::#1}{#2}}
% hier nog uti blokkeren
@@ -1429,6 +1496,44 @@
% \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\setvalue{\??cn:#1:#2}{#3}}
+
+\def\definecolumnbreak
+ {\dodoubleargument\dodefinecolumnbreak}
+
+\def\dodefinecolumnbreak[#1][#2]% non recursive, meant for simple mappings
+ {\setvalue{\??cn::#1}{#2}}
+
+%\def\columnbreak
+% {\dosingleempty\docolumnbreak}
+%
+%\def\docolumnbreak[#1]%
+% {\expanded{\nextcolumn[\executeifdefined{\??cn::#1}{#1}]}}
+
+\definecomplexorsimple\columnbreak
+
+\def\simplecolumnbreak
+ {\executecolumnbreakhandler\v!ja}
+
+\def\complexcolumnbreak[#1]% if empty, do nothing and avoid processing
+ {\doifsomething{#1}{\bgroup\executecolumnbreakhandlers{#1}\egroup}}
+
+\def\executecolumnbreakhandlers#1%
+ {\processcommacommand[#1]\executecolumnbreakhandler}
+
+\def\executecolumnbreakhandler#1% here no commalist
+ {\edef\@@columnspecification{#1}%
+ \doifdefinedelse{\??cn:\OTRidentifier:\@@columnspecification}
+ {\getvalue{\??cn:\OTRidentifier:\@@columnspecification}}
+ {\doifdefinedelse{\??cn::\@@columnspecification}
+ {\executecolumnbreakhandlers{\getvalue{\??cn
+::\@@columnspecification}}}
+ {\getvalue{\??cn:\OTRidentifier:\s!unknown}}}}
+
+%let\nextcolumn\columnbreak
+\let\column \columnbreak
+
\newif\ifgeselecteerd \geselecteerdtrue
\newif\ifselecteren \selecterenfalse
\newif\ifverwerken \verwerkentrue
@@ -1443,8 +1548,8 @@
{\global\let\voorpagina\relax
\getvalue{\??pg#1\c!voor}}
-\def\dovoorpagina%
- {\doifsomething{\paginasoort}
+\def\dovoorpagina
+ {\doifsomething\paginasoort
{\processcommacommand[\paginasoort]\dodovoorpagina}}
\def\dododonapagina#1%
@@ -1453,7 +1558,7 @@
\getvalue{\??pg#1\c!na}}
\def\dodonapagina#1%
- {\doifelsevalue{\??pg#1\c!optie}{\v!dubbelzijdig}
+ {\doifelsevalue{\??pg#1\c!optie}\v!dubbelzijdig
{\doifbothsidesoverruled
\dododonapagina{#1}%
\orsideone
@@ -1462,8 +1567,8 @@
\od}
{\dododonapagina{#1}}}
-\def\donapagina%
- {\doifsomething{\paginasoort}
+\def\donapagina
+ {\doifsomething\paginasoort
{\processcommacommand[\paginasoort]\dodonapagina}}
% Dit wordt eigenlijk nooit en moet worden vervangen door
@@ -1474,14 +1579,14 @@
\ifx\desoortpagina\empty \else
\@EA\doglobal\@EA\addtocommalist\@EA{\desoortpagina}\paginasoort
\ifselecteren
- \fullexpandtwoargsafter\doifcommon{\desoortpagina}{\selectie}
+ \fullexpandtwoargsafter\doifcommon\desoortpagina\selectie
{\global\geselecteerdtrue}%
\fi
\gdef\voorpagina{\dovoorpagina}%
\gdef\napagina {\donapagina }%
\fi}
-\def\soortpagina%
+\def\soortpagina
{\dosingleargument\dosoortpagina}
\def\dokoppelpagina[#1][#2]%
@@ -1499,7 +1604,7 @@
\c!optie=\@@pgoptie]}%
\processcommalist[#1]\docommando}%
-\def\koppelpagina%
+\def\koppelpagina
{\dodoubleargument\dokoppelpagina}
\def\doverwerkpagina[#1][#2]%
@@ -1511,10 +1616,10 @@
\global\selecterentrue
\global\geselecteerdfalse}
-\def\verwerkpagina%
+\def\verwerkpagina
{\dodoubleargument\doverwerkpagina}
-\def\resetselectiepagina%
+\def\resetselectiepagina
{\ifselecteren
\doifbothsidesoverruled
\global\geselecteerdfalse
@@ -1523,5 +1628,39 @@
\global\geselecteerdfalse
\od
\fi}
+
+\newif\ifregistertextareas
+\newif\iftracetextareas
+
+\newbox\registertextbox
+
+% \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
+ {\hbox\bgroup
+ \ifregistertextareas \ifx\registerMPtextarea\undefined \else
+ \setbox\registertextbox\null
+ \wd\registertextbox\wd#3%
+ \ht\registertextbox\ht#3%
+ \dp\registertextbox\dp#3%
+ \ifcase#1\or % 1
+ \setbox\registertextbox\hbox{\lower\dp\strutbox\box\registertextbox}%
+ \fi
+ \ifcase#2\or % 1
+ \setbox\registertextbox\hbox{\raise\topskip\hbox{\lower\ht\strutbox\box\registertextbox}}%
+ \dp\registertextbox\dp\strutbox
+ \fi
+ \dp\registertextbox\dp\strutbox % needed
+ \setbox\registertextbox\hbox
+ {\iftracetextareas\gray\boxrulewidth2pt\ruledhbox\fi
+ {\registerMPtextarea{\box\registertextbox}}}%
+ \smashbox\registertextbox
+ \box\registertextbox
+ \fi \fi
+ \box#3%
+ \egroup}
\protect \endinput
diff --git a/tex/context/base/page-lay.tex b/tex/context/base/page-lay.tex
index 9700ee926..dfbc7d9d1 100644
--- a/tex/context/base/page-lay.tex
+++ b/tex/context/base/page-lay.tex
@@ -41,8 +41,8 @@
\newdimen\papierhoogte \papierhoogte = 297mm
\newdimen\papierbreedte \papierbreedte = 210mm
-\newdimen\printpapierhoogte \printpapierhoogte = 297mm
-\newdimen\printpapierbreedte \printpapierbreedte = 210mm
+\newdimen\printpapierhoogte \printpapierhoogte = \papierhoogte
+\newdimen\printpapierbreedte \printpapierbreedte = \papierbreedte
\newdimen\zethoogte % calculated
\newdimen\zetbreedte % calculated
@@ -70,17 +70,29 @@
\newdimen\bovenhoogte \bovenhoogte = 0cm
\newdimen\onderhoogte \onderhoogte = \bovenhoogte
+\newcount\layoutlines \layoutlines = 0
+\newcount\layoutcolumns \layoutcolumns = 0
+\newdimen\layoutcolumndistance\layoutcolumndistance= 0pt
+\newdimen\layoutcolumnwidth \layoutcolumnwidth = 0pt
+
%D We can save some tokens and fuzzy parameters by using a
%D symbolic name for the current set of layout parameters.
\let\currentlayout\empty
+%\def\layoutparameter#1%
+% {\ifundefined{\??ly\currentlayout#1}%
+% \getvalue{\??ly#1}%
+% \else
+% \getvalue{\??ly\currentlayout#1}%
+% \fi}
+%
+% faster
+
\def\layoutparameter#1%
- {\ifundefined{\??ly\currentlayout#1}%
- \getvalue{\??ly#1}%
- \else
- \getvalue{\??ly\currentlayout#1}%
- \fi}
+ {\csname\??ly
+ \ifundefined{\??ly\currentlayout#1}\else\currentlayout\fi
+ #1\endcsname}
\def\namedlayoutparameter#1#2%
{\ifundefined{\??ly#1#2}%
@@ -191,13 +203,13 @@
\def\linkerrandafstand
{\layoutdistance\linkerrandbreedte\c!linkerrandafstand}
- \def\rechterrandafstand%
+ \def\rechterrandafstand
{\layoutdistance\rechterrandbreedte\c!rechterrandafstand}
- \def\linkermargeafstand%
+ \def\linkermargeafstand
{\layoutdistance\linkermargebreedte\c!linkermargeafstand}
- \def\rechtermargeafstand%
+ \def\rechtermargeafstand
{\layoutdistance\rechtermargebreedte\c!rechtermargeafstand}
\fi
@@ -225,21 +237,21 @@
\iffixedlayoutdimensions
- \def\setlayoutdimensions%
- {\global\margebreedte\layoutparameter\c!marge
- \global\randbreedte \layoutparameter\c!rand
- \global\margeafstand\layoutparameter\c!margeafstand
- \global\randafstand \layoutparameter\c!randafstand
- \global\linkerrandafstand \layoutdistance\linkerrandbreedte \c!linkerrandafstand
- \global\rechterrandafstand \layoutdistance\rechterrandbreedte \c!rechterrandafstand
- \global\linkermargeafstand \layoutdistance\linkermargebreedte \c!linkermargeafstand
- \global\rechtermargeafstand\layoutdistance\rechtermargebreedte\c!rechtermargeafstand
- \global\bovenafstand\layoutdistance\bovenhoogte\c!bovenafstand
- \global\hoofdafstand\layoutdistance\hoofdhoogte\c!hoofdafstand
- \global\voetafstand \layoutdistance\voethoogte \c!voetafstand
- \global\onderafstand\layoutdistance\onderhoogte\c!onderafstand}
-
- \def\setlayoutdistances% local in \setreducedvsize
+ \def\setlayoutdimensions
+ {\global\margebreedte \layoutparameter\c!marge
+ \global\randbreedte \layoutparameter\c!rand
+ \global\margeafstand \layoutparameter\c!margeafstand
+ \global\randafstand \layoutparameter\c!randafstand
+ \global\linkerrandafstand \layoutdistance \linkerrandbreedte \c!linkerrandafstand
+ \global\rechterrandafstand \layoutdistance \rechterrandbreedte \c!rechterrandafstand
+ \global\linkermargeafstand \layoutdistance \linkermargebreedte \c!linkermargeafstand
+ \global\rechtermargeafstand\layoutdistance \rechtermargebreedte\c!rechtermargeafstand
+ \global\bovenafstand \layoutdistance \bovenhoogte \c!bovenafstand
+ \global\hoofdafstand \layoutdistance \hoofdhoogte \c!hoofdafstand
+ \global\voetafstand \layoutdistance \voethoogte \c!voetafstand
+ \global\onderafstand \layoutdistance \onderhoogte \c!onderafstand}
+
+ \def\setlayoutdistances % local in \setreducedvsize
{\hoofdafstand\layoutdistance\hoofdhoogte\c!hoofdafstand
\voetafstand \layoutdistance\voethoogte \c!voetafstand}
@@ -260,7 +272,7 @@
%D
%D \showsetup{\y!definepapersize}
-\def\definepapersize%
+\def\definepapersize
{\dodoubleempty\dodefinepapersize}
\def\dodefinepapersize[#1][#2]%
@@ -289,7 +301,7 @@
[\c!breedte=210mm,\c!hoogte=297mm,\c!offset=\!!zeropoint]
%D \macros
-%D {setuppapersize}
+%D {setuppaper,setuppapersize}
%D
%D When setting up the papersize on which to typeset and
%D print, we can also determine some more characteristics.
@@ -308,28 +320,49 @@
\def\paperscale{1} \newif\ifnegateprintbox
-\def\setuppapersize%
+% \def\dosetuppapersize[#1][#2]%
+% {\doifassignmentelse{#1}
+% {\getparameters[\??pp][#1]}
+% {\doifassignmentelse{#2}
+% {\getparameters[\??pp#1][#2]}
+% {\dodosetuppapersize[#1][#2]}}}
+%
+% The next version is more extensive; here we can
+% associate paper and page with key/value like settinsg,
+% which is handy in 'example' when we use setups
+
+\def\setuppaper[#1]%
+ {\getparameters[\??pp][\c!papier=,\c!pagina=,#1]%
+ \scratchcounter\@@ppnx
+ \multiply\scratchcounter\@@ppny
+ \edef\@@ppxy{\the\scratchcounter}%
+ \doifelsenothing\@@pppagina
+ {\doifsomething\@@pppapier
+ {\dodosetuppapersize[\papersize][\@@pppapier]}}
+ {\doifelsenothing\@@pppapier
+ {\dodosetuppapersize[\@@pppagina][\printpapersize]}
+ {\dodosetuppapersize[\@@pppagina][\@@pppapier]}}}
+
+\def\setuppapersize
{\dodoubleempty\dosetuppapersize}
\def\dosetuppapersize[#1][#2]%
-% {\doifinstringelse{=}{#1}
{\doifassignmentelse{#1}
- {\getparameters[\??pp][#1]}
-% {\doifinstringelse{=}{#2}
+ {\setuppaper[#1]}
{\doifassignmentelse{#2}
{\getparameters[\??pp#1][#2]}
{\dodosetuppapersize[#1][#2]}}}
\def\dodosetuppapersize[#1][#2]%
{\ifsecondargument
- \xdef\restorepapersize%
+ \xdef\restorepapersize
{\noexpand\setuppapersize[#1][#2]}%
\dostelpapierrichtingin{#1}\paperlandscape\paperrotation\paperreverse\papermirror
\dostelpapierrichtingin{#2}\printlandscape\printrotation\printreverse\printmirror
\def\docommando##1%
{\doifsomething{##1}{\doifdefined{\??pp##1\c!breedte}
- {\global\papierbreedte=\getvalue{\??pp##1\c!breedte}%
- \global\papierhoogte=\getvalue{\??pp##1\c!hoogte}%
+ {\global\papierbreedte\getvalue{\??pp##1\c!breedte}%
+ \global\papierhoogte\getvalue{\??pp##1\c!hoogte}%
\calculatepaperoffsets{##1}%
\xdef\papersize{##1}}}}%
\processcommacommand[#1]\docommando
@@ -338,8 +371,8 @@
{\edef\paperscale{1}}%
\def\docommando##1%
{\doifsomething{##1}{\doifdefined{\??pp##1\c!breedte}
- {\global\printpapierbreedte=\getvalue{\??pp##1\c!breedte}%
- \global\printpapierhoogte=\getvalue{\??pp##1\c!hoogte}%
+ {\global\printpapierbreedte\getvalue{\??pp##1\c!breedte}%
+ \global\printpapierhoogte\getvalue{\??pp##1\c!hoogte}%
\xdef\printpapersize{##1}}}}%
\processcommacommand[#2]\docommando
\global\setdimentoatleast\papierbreedte \!!onepoint
@@ -353,10 +386,10 @@
\doglobal\swapdimens\printpapierbreedte\printpapierhoogte
\fi
\ifdim\papierhoogte>\printpapierhoogte
- \global\printpapierhoogte=\papierhoogte
+ \global\printpapierhoogte\papierhoogte
\fi
\ifdim\papierbreedte>\printpapierbreedte
- \global\printpapierbreedte=\papierbreedte
+ \global\printpapierbreedte\papierbreedte
\fi
\calculatehsizes
\calculatevsizes
@@ -370,15 +403,15 @@
\fi\fi\fi}
\def\dostelpapierrichtingin#1#2#3#4#5%
- {\global\chardef#2=0
- \global\chardef#5=0
- \gdef#3{0}%
- \gdef#4{0}%
+ {\global\chardef#2\zerocount
+ \global\chardef#5\zerocount
+ \globallet#3\!!zerocount
+ \globallet#4\!!zerocount
\global\negateprintboxfalse
\processallactionsinset
[#1]
- [ \v!liggend=>\global\chardef#2=1,
- \v!gespiegeld=>\global\chardef#5=1,
+ [ \v!liggend=>\global\chardef#2\plusone,
+ \v!gespiegeld=>\global\chardef#5\plusone,
\v!geroteerd=>\gdef#3{90}\gdef#4{270},
\v!negatief=>\global\negateprintboxtrue,
90=>\gdef#3{90}\gdef#4{270},
@@ -388,9 +421,9 @@
\ifx\calculatepaperoffsets\undefined
\def\calculatepaperoffsets#1%
- {\scratchdimen=\getvalue{\??pp#1\c!offset}%
- \global\advance\papierbreedte by -2\scratchdimen
- \global\advance\papierhoogte by -2\scratchdimen}
+ {\scratchdimen\getvalue{\??pp#1\c!offset}%
+ \global\advance\papierbreedte -2\scratchdimen
+ \global\advance\papierhoogte -2\scratchdimen}
\fi
@@ -399,104 +432,13 @@
\def\checkforems[#1]%
{\def\docommando##1%
{\beforesplitstring##1\at em\to\asciia
- \doifnot{\asciia}{##1}
+ \doifnot\asciia{##1}
{\aftersplitstring\asciia\at=\to\asciia
- \doifsomething{\asciia}
- {\showmessage{\m!systems}{10}{##1}}}}%
+ \doifsomething\asciia
+ {\showmessage\m!systems{10}{##1}}}}%
\processcommalist[#1]\docommando}
-% \def\recalculatelayout%
-% {\global\linkermargebreedte \layoutparameter\c!linkermarge
-% \global\rechtermargebreedte\layoutparameter\c!rechtermarge
-% \global\linkerrandbreedte \layoutparameter\c!linkerrand
-% \global\rechterrandbreedte \layoutparameter\c!rechterrand
-% \global\hoofdhoogte \layoutparameter\c!hoofd
-% \global\voethoogte \layoutparameter\c!voet
-% \global\onderhoogte \layoutparameter\c!onder
-% \global\bovenhoogte \layoutparameter\c!boven
-% \global\rugwit \layoutparameter\c!rugwit
-% \global\kopwit \layoutparameter\c!kopwit
-% \setlayoutdimensions % the rest of the `dimensions'
-% \doifelse\@@lygrid\v!ja\gridsnappingtrue\gridsnappingfalse
-% \ifgridsnapping
-% \widowpenalty\zerocount % is gewoon beter
-% \clubpenalty \zerocount % zeker bij grids
-% \else
-% \widowpenalty\defaultwidowpenalty
-% \clubpenalty \defaultclubpenalty
-% \fi
-% \simplestelwitruimtein
-% \simplestelblankoin
-% \global\snijwit\layoutparameter\c!snijwit\relax
-% \doifelse{\layoutparameter\c!breedte}\v!midden
-% {\ifdim\snijwit=\zeropoint
-% \global\snijwit\rugwit
-% \fi
-% \global\zetbreedte\papierbreedte
-% \global\advance\zetbreedte -\rugwit
-% \global\advance\zetbreedte -\snijwit}
-% {\doifelse{\layoutparameter\c!breedte}\v!passend
-% {\ifdim\snijwit=\zeropoint
-% \global\snijwit\rugwit
-% \fi
-% \global\zetbreedte\papierbreedte
-% \global\advance\zetbreedte -\snijwit
-% \scratchdimen\rugwit
-% \advance\scratchdimen -\linkerrandbreedte
-% \advance\scratchdimen -\linkerrandafstand
-% \advance\scratchdimen -\linkermargebreedte
-% \advance\scratchdimen -\linkermargeafstand
-% \ifdim\scratchdimen<\zeropoint
-% \scratchdimen\zeropoint
-% \fi
-% \global\advance\zetbreedte -\rechtermargeafstand
-% \global\advance\zetbreedte -\rechtermargebreedte
-% \global\advance\zetbreedte -\rechterrandafstand
-% \global\advance\zetbreedte -\rechterrandbreedte
-% \global\advance\zetbreedte -\scratchdimen}
-% {\global\zetbreedte\layoutparameter\c!breedte
-% \ifdim\snijwit=\zeropoint
-% \global\snijwit\papierbreedte
-% \global\advance\snijwit-\zetbreedte
-% \global\advance\snijwit-\rugwit
-% \else
-% % inconsistent specification
-% \fi}}%
-% \scratchdimen\layoutparameter\c!bodemwit\relax
-% \ifdim\scratchdimen=\zeropoint
-% \scratchdimen\kopwit
-% \fi
-% \doifelse{\layoutparameter\c!regels}\empty
-% {\doifelse{\layoutparameter\c!hoogte}\v!midden
-% {\global\zethoogte\papierhoogte
-% \global\advance\zethoogte -\kopwit
-% \global\advance\zethoogte -\scratchdimen}
-% {\doifelse{\layoutparameter\c!hoogte}\v!passend
-% {\global\zethoogte\papierhoogte
-% \global\advance\zethoogte -\scratchdimen
-% \scratchdimen\kopwit
-% \advance\scratchdimen -\bovenhoogte
-% \advance\scratchdimen -\bovenafstand
-% \ifdim\scratchdimen<\zeropoint
-% \scratchdimen\zeropoint
-% \fi
-% \global\advance\zethoogte -\onderafstand
-% \global\advance\zethoogte -\onderhoogte
-% \global\advance\zethoogte -\scratchdimen}
-% {\global\zethoogte\layoutparameter\c!hoogte}}}
-% {\global\zethoogte\layoutparameter\c!regels\lineheight
-% \global\advance\zethoogte \hoofdhoogte
-% \global\advance\zethoogte \voethoogte}%
-% \rugoffset\layoutparameter\c!rugoffset
-% \kopoffset\layoutparameter\c!kopoffset
-% \global\setdimentoatleast\zetbreedte\!!onepoint
-% \global\setdimentoatleast\zethoogte\!!onepoint
-% \calculatehsizes
-% \calculatevsizes
-% \recalculatelogos
-% \recalculatebackgrounds}
-
-\def\recalculatelayout%
+\def\recalculatelayout
{\global\linkermargebreedte \layoutparameter\c!linkermarge
\global\rechtermargebreedte\layoutparameter\c!rechtermarge
\global\linkerrandbreedte \layoutparameter\c!linkerrand
@@ -518,7 +460,8 @@
\fi
\simplestelwitruimtein
\simplestelblankoin
- \global\snijwit\layoutparameter\c!snijwit\relax
+ \global\snijwit\layoutparameter\c!snijwit
+ \relax
\doifelse{\layoutparameter\c!breedte}\v!midden
{\ifdim\snijwit=\zeropoint
\global\snijwit\rugwit
@@ -536,7 +479,7 @@
\advance\scratchdimen -\linkerrandbreedte
\advance\scratchdimen -\linkerrandafstand
\advance\scratchdimen -\linkermargebreedte
- \advance\scratchdimen -\linkermargeafstand
+ \advance\scratchdimen -\linkermargeafstand\relax
\ifdim\scratchdimen<\zeropoint
\scratchdimen\zeropoint
\fi
@@ -545,107 +488,130 @@
\global\advance\zetbreedte -\rechterrandafstand
\global\advance\zetbreedte -\rechterrandbreedte
\global\advance\zetbreedte -\scratchdimen}
- {\global\zetbreedte\layoutparameter\c!breedte
+ {\global\zetbreedte\layoutparameter\c!breedte\relax
\ifdim\snijwit=\zeropoint
\global\snijwit\papierbreedte
\global\advance\snijwit-\zetbreedte
\global\advance\snijwit-\rugwit
\else
% inconsistent specification
+\global\rugwit\papierbreedte
+\global\advance\rugwit-\zetbreedte
+\global\advance\rugwit-\snijwit
\fi}}%
\scratchdimen\layoutparameter\c!bodemwit\relax
%\ifdim\scratchdimen=\zeropoint
% \scratchdimen\kopwit
%\fi
\global\bodemwit\layoutparameter\c!bodemwit\relax
- \doifelse{\layoutparameter\c!regels}\empty
- {\doifelse{\layoutparameter\c!hoogte}\v!midden
- {\ifdim\bodemwit=\zeropoint
- \global\bodemwit\kopwit
- \fi
- \global\zethoogte\papierhoogte
- \global\advance\zethoogte -\kopwit
- \global\advance\zethoogte -\bodemwit}
- {\doifelse{\layoutparameter\c!hoogte}\v!passend
- {\ifdim\bodemwit=\zeropoint
- \global\bodemwit\kopwit
- \fi
- \global\zethoogte\papierhoogte
- \global\advance\zethoogte -\bodemwit
- \scratchdimen\kopwit
- \advance\scratchdimen -\bovenhoogte
- \advance\scratchdimen -\bovenafstand
- \ifdim\scratchdimen<\zeropoint
- \scratchdimen\zeropoint
- \fi
- \global\advance\zethoogte -\onderafstand
- \global\advance\zethoogte -\onderhoogte
- \global\advance\zethoogte -\scratchdimen}
- {\global\zethoogte\layoutparameter\c!hoogte
- \ifdim\bodemwit=\zeropoint
- \global\bodemwit\papierhoogte
- \global\advance\bodemwit-\zethoogte
- \global\advance\bodemwit-\kopwit
- \else
- % inconsistent specification
- \fi}}}%
- {\global\zethoogte\layoutparameter\c!regels\lineheight
-% new, cleaner
-\global\advance\zethoogte-\strutheight
-\global\advance\zethoogte \topskip
-% new, was a bug
-\global\advance\zethoogte \hoofdafstand
-\global\advance\zethoogte \voetafstand
-% so far
- \global\advance\zethoogte \hoofdhoogte
- \global\advance\zethoogte \voethoogte}%
+ \global\layoutlines0\number\layoutparameter\c!regels\relax % may be empty
+ \ifcase\layoutlines
+ \doifelse{\layoutparameter\c!hoogte}\v!midden
+ {\ifdim\bodemwit=\zeropoint
+ \global\bodemwit\kopwit
+ \fi
+ \global\zethoogte\papierhoogte
+ \global\advance\zethoogte -\kopwit
+ \global\advance\zethoogte -\bodemwit}
+ {\doifelse{\layoutparameter\c!hoogte}\v!passend
+ {\ifdim\bodemwit=\zeropoint
+ \global\bodemwit\kopwit
+ \fi
+ \global\zethoogte\papierhoogte
+ \global\advance\zethoogte -\bodemwit
+ \scratchdimen\kopwit
+ \advance\scratchdimen -\bovenhoogte
+ \advance\scratchdimen -\bovenafstand\relax
+ \ifdim\scratchdimen<\zeropoint
+ \scratchdimen\zeropoint
+ \fi
+ \global\advance\zethoogte -\onderafstand
+ \global\advance\zethoogte -\onderhoogte
+ \global\advance\zethoogte -\scratchdimen}
+ {\global\zethoogte\layoutparameter\c!hoogte\relax
+ \ifdim\bodemwit=\zeropoint
+ \global\bodemwit\papierhoogte
+ \global\advance\bodemwit-\zethoogte
+ \global\advance\bodemwit-\kopwit
+ \else
+ % inconsistent specification
+ \fi}}%
+ \else
+ \global\zethoogte\layoutparameter\c!regels\lineheight
+ % new, cleaner
+ \global\advance\zethoogte-\strutheight
+ \global\advance\zethoogte \topskip
+ % new, was a bug
+ \global\advance\zethoogte \hoofdafstand
+ \global\advance\zethoogte \voetafstand
+ % so far
+ \global\advance\zethoogte \hoofdhoogte
+ \global\advance\zethoogte \voethoogte
+ \fi
\rugoffset\layoutparameter\c!rugoffset
\kopoffset\layoutparameter\c!kopoffset
\global\setdimentoatleast\zetbreedte\!!onepoint
- \global\setdimentoatleast\zethoogte\!!onepoint
+ \global\setdimentoatleast\zethoogte \!!onepoint
+ % \checkcurrentlayout % here ?
\calculatehsizes
\calculatevsizes
+ \calculatepseudocolumns
+ \checkgridsnapping
\recalculatelogos
\recalculatebackgrounds}
-\def\checklayout%
- {\doifsomething{\layoutparameter\c!regels}
- {\ifdim\zethoogte=\layoutparameter\c!regels\lineheight \else \recalculatelayout \fi}}
-
+\def\calculatepseudocolumns
+ {\global\layoutcolumns\layoutparameter\c!kolommen
+ \global\layoutcolumndistance\layoutparameter\c!kolomafstand
+ \global\layoutcolumnwidth-\layoutcolumns\layoutcolumndistance
+ \global\advance\layoutcolumnwidth\layoutcolumndistance
+ \global\advance\layoutcolumnwidth\zetbreedte
+ \global\divide\layoutcolumnwidth\layoutcolumns
+ \dorecurse\layoutcolumns
+ {\scratchdimen\layoutcolumnwidth
+ \advance\scratchdimen\layoutcolumndistance
+ \scratchcounter\recurselevel
+ \advance\scratchcounter\minusone
+ \scratchdimen\scratchcounter\scratchdimen
+ \setxvalue{\??ly:c:\recurselevel}{\the\scratchdimen}}}
+
+%\dorecurse\layoutcolumns
+% {\setxvalue{\??ly:c:\recurselevel}{\the\dimexpr
+% (\numexpr(\recurselevel-1)\dimexpr(\layoutcolumnwidth+\layoutcolumndistance))}}
+
+\def\layoutcolumnoffset#1%
+ {\executeifdefined{\??ly:c:#1}\!!zeropoint}
+
+\def\checklayout
+ {\ifdim\zethoogte=\layoutlines\lineheight \else \recalculatelayout \fi}
+
\appendtoks \checklayout \to \everystarttext
-\def\checkcurrentlayout%
- {\ifundefined{\??ly\number\realfolio\c!status}%
- \doifonevenpaginaelse\checkcurrentoddlayout\checkcurrentevenlayout
+\def\checkcurrentlayout
+ {\ifundefined{\??ly\realfolio\c!status}%
+ \doifoddpageelse\checkcurrentoddlayout\checkcurrentevenlayout
\else
- \stellayoutin[\number\realfolio]%
+ \doifvalue{\??ly\realfolio\c!status}\v!start
+ {\edef\currentlayout{\realfolio}\recalculatelayout}%
\fi}
\def\checkcurrentoddlayout
- {\ifundefined{\??ly\v!oneven\c!status}\else\stellayoutin[\v!oneven]\fi}
+ {\ifundefined{\??ly\v!oneven\c!status}\else
+ \doifvalue{\??ly\v!oneven\c!status}\v!start
+ {\let\currentlayout\v!oneven\recalculatelayout}%
+ \fi}
\def\checkcurrentevenlayout
- {\ifundefined{\??ly\v!even \c!status}\else\stellayoutin[\v!even ]\fi}
-
-% not much faster at all
-%
-% \beginETEX
-%
-% \def\checkcurrentlayout%
-% {\ifcsname\??ly\number\realfolio\c!status\endcsname
-% \stellayoutin[\number\realfolio]%
-% \else\doifonevenpaginaelse
-% {\ifcsname\??ly\v!oneven\c!status\endcsname\stellayoutin[\v!oneven]\fi}
-% {\ifcsname\??ly\v!even \c!status\endcsname\stellayoutin[\v!even ]\fi}%
-% \fi}
-%
-% \endETEX
+ {\ifundefined{\??ly\v!even\c!status}\else
+ \doifvalue{\??ly\v!even\c!status}\v!start
+ {\let\currentlayout\v!even\recalculatelayout}%
+ \fi}
\appendtoks \checkcurrentlayout \to \everyaftershipout
\newif\ifdoublesidedprint
-\def\presetcenterpagebox% in \stellayoutin !!!!!!!!!!!!!!!!
+\def\presetcenterpagebox % in \stellayoutin !!!!!!!!!!!!!!!!
{\doublesidedprintfalse
\ExpandFirstAfter\processallactionsinset
[\@@lyplaats]
@@ -657,7 +623,7 @@
\v!dubbelzijdig=>\doublesidedprinttrue,
\v!enkelzijdig=>\doublesidedprintfalse]}
-\def\definelayout%
+\def\definelayout
{\dodoubleargument\dodefinelayout}
\def\dodefinelayout[#1][#2]%
@@ -675,9 +641,10 @@
\else\iffirstargument
\doifassignmentelse{#1}
{\dodostellayoutin[][#1]}
- {\doifnot{#1}{\v!reset}{\def\currentlayout{#1}}}%
+ {\doifnot{#1}\v!reset{\def\currentlayout{#1}}}%
\fi\fi
\recalculatelayout
+\checkcurrentlayout % here ?
\presetcenterpagebox}
\def\stellayoutin
@@ -685,12 +652,12 @@
\let\@@zahoogte=\!!zeropoint
-\def\dopushpagedimensions%
+\def\dopushpagedimensions
{\xdef\oldteksthoogte{\the\teksthoogte}%
- \xdef\oldvoethoogte{\the\voethoogte}%
+ \xdef\oldvoethoogte {\the\voethoogte}%
\global\let\@@zahoogte\@@zahoogte}
-\def\dopoppagedimensions%
+\def\dopoppagedimensions
{\global\teksthoogte\oldteksthoogte
\global\voethoogte\oldvoethoogte
\recalculatelayout
@@ -715,26 +682,28 @@
\donothing
\fi}
-\def\checkpagedimensions%
+\def\checkpagedimensions
{\poppagedimensions
\adaptpagedimensions}
-\def\reportpagedimensions%
+\def\reportpagedimensions
{\ifx\poppagedimensions\relax \else
\spatie\@@zahoogte\space-\space
\fi
\realfolio}
\def\dodopaslayoutaan[#1]%
- {\getparameters[\??za][\c!hoogte=,\c!regels=,#1]%
+ {\getparameters[\??za][\c!hoogte=,\c!regels=0,#1]%
\pushpagedimensions
- \doifelsenothing{\@@zaregels}
- {\showmessage{\m!layouts}{1}{\@@zahoogte,\realfolio}}
- {\showmessage{\m!layouts}{1}{\@@zaregels\space\v!regels,\realfolio}%
- \def\@@zahoogte{\@@zaregels\openlineheight}}%
- \doifelse{\@@zahoogte}{\v!max}
- {\balancedimensions{\teksthoogte}{\voethoogte}{\voethoogte}}
- {\balancedimensions{\teksthoogte}{\voethoogte}{\@@zahoogte}}%
+ \ifcase\@@zaregels\relax
+ \showmessage\m!layouts1{\@@zahoogte,\realfolio}%
+ \else
+ \showmessage\m!layouts1{\@@zaregels\space\v!regels,\realfolio}%
+ \def\@@zahoogte{\@@zaregels\openlineheight}%
+ \fi
+ \doifelse\@@zahoogte\v!max
+ {\balancedimensions\teksthoogte\voethoogte\voethoogte}
+ {\balancedimensions\teksthoogte\voethoogte\@@zahoogte}%
\ifdim\voethoogte<\zeropoint
\global\advance\teksthoogte \voethoogte
\global\voethoogte\zeropoint
@@ -766,9 +735,9 @@
%D {right} parameters.
\def\centerpagebox#1%
- {\printpapierbreedte=\paperscale\printpapierbreedte
- \printpapierhoogte =\paperscale\printpapierhoogte
- \setbox#1=\vbox to \printpapierhoogte
+ {\printpapierbreedte\paperscale\printpapierbreedte
+ \printpapierhoogte \paperscale\printpapierhoogte
+ \setbox#1\vbox to \printpapierhoogte
{\@@ppboven
\hbox to \printpapierbreedte
{\ifdoublesidedprint
@@ -792,7 +761,7 @@
\fi
\ifdone
\edef\next{\wd#1\the\wd#1\ht#1\the\ht#1\dp#1\the\dp#1}%
- \setbox#1=\vbox
+ \setbox#1\vbox
{%\forgetall
\offinterlineskip
\vskip\kopoffset
@@ -822,15 +791,15 @@
% \fi\fi}
\def\replicatepagebox#1%
- {\ifnum\@@lynx>1
+ {\ifnum\@@lynx>\plusone
\donetrue
- \else\ifnum\@@lyny>1
+ \else\ifnum\@@lyny>\plusone
\donetrue
\else
\donefalse
\fi\fi
\ifdone
- \setbox#1=\vbox
+ \setbox#1\vbox
{%\forgetall
\offinterlineskip
\dorecurse\@@lyny
@@ -840,9 +809,9 @@
\fi}
\def\rotatepagebodybox#1#2#3%
- {\ifnum#2#3>0
- \setbox#1=\vbox
- {\edef\somerotation%
+ {\ifnum#2#3>\zerocount
+ \setbox#1\vbox
+ {\edef\somerotation
{\ifdubbelzijdig\ifodd\realpageno#2\else#3\fi\else#2\fi}%
\dorotatebox\somerotation\hbox{\box#1}}%
\fi}
@@ -855,7 +824,7 @@
\def\mirrorpagebodybox#1#2%
{\ifcase#2\or
- \setbox#1=\vbox
+ \setbox#1\vbox
{\domirrorbox\vbox{\box#1}}%
\fi}
@@ -867,10 +836,10 @@
\def\scalepagebox#1%
{\ifdim\@@lyschaal pt=1pt \else
- \setbox#1=\vbox
+ \setbox#1\vbox
{\schaal[\c!sx=\@@lyschaal,\c!sy=\@@lyschaal]{\box#1}}%
- \papierbreedte=\@@lyschaal\papierbreedte
- \papierhoogte =\@@lyschaal\papierhoogte
+ \papierbreedte\@@lyschaal\papierbreedte
+ \papierhoogte \@@lyschaal\papierhoogte
\fi}
\def\negateprintbox#1%
@@ -878,27 +847,37 @@
\negatecolorbox{#1}%
\fi}
-\def\pagecutmarksymbol%
- {\the\realpageno}%
+\def\pagecutmarksymbol
+ {\the\realpageno}
+
+\def\pagecutmarklength
+ {.5cm}
\def\addpagecutmarks#1%
{\doif\@@lymarkering\v!aan
{\let\cutmarksymbol\pagecutmarksymbol
+ \let\cutmarklength\pagecutmarklength
\makecutbox{#1}}}
-\def\addpagecolormarks#1%
- {\doif\@@lymarkering\v!kleur
- {\let\cutmarksymbol\pagecutmarksymbol
- \makecutbox{#1}%
- \ifnum\horizontalcutmarks>1 \chardef\colormarkoffset=4 \fi
- \ifnum\verticalcutmarks >1 \chardef\colormarkoffset=4 \fi
- \colormarkbox{#1}}}
+\def\addpagecolormarks % #1
+ {\doifelse\@@lymarkering\v!kleur
+ {\doaddpagecolormarks\colormarkbox}
+ {\doifelse\@@lymarkering\v!raster
+ {\doaddpagecolormarks\rastermarkbox}
+ {\gobbleoneargument}}}
+
+\def\doaddpagecolormarks#1#2%
+ {\let\cutmarksymbol\pagecutmarksymbol
+ \let\cutmarklength\pagecutmarklength
+ \makecutbox{#2}%
+ \ifnum\horizontalcutmarks>2 \chardef\colormarkoffset4 \fi
+ \ifnum\verticalcutmarks >2 \chardef\colormarkoffset4 \fi
+ #1{#2}}
\newif\ifdubbelzijdig \dubbelzijdigfalse
\newif\ifenkelzijdig \enkelzijdigtrue
\def\doifsometextlineelse#1%
-% {\edef\!!stringa{\csname\??tk#1\v!tekst\c!status\endcsname}%
{\edef\!!stringa{\csname\??tk#1\c!status\endcsname}%
\ifx\!!stringa\v!geen
\@EA\secondoftwoarguments
@@ -910,45 +889,58 @@
% NOG EENS NAGAAN WANNEER NU GLOBAL EN WANNEER NIET
-\def\calculatevsizes% global needed in \recalculatelayoutregel
+\def\calculatevsizes % global needed in \recalculatelayoutregel
{\redoglobal\teksthoogte\zethoogte
\doifsometextlineelse \v!hoofd
{\redoglobal\advance\teksthoogte -\hoofdhoogte
- \redoglobal\advance\teksthoogte -\hoofdafstand}
+ \redoglobal\advance\teksthoogte -\hoofdafstand}%
\donothing
\doifsometextlineelse \v!voet
{\redoglobal\advance\teksthoogte -\voethoogte
- \redoglobal\advance\teksthoogte -\voetafstand}
+ \redoglobal\advance\teksthoogte -\voetafstand}%
\donothing
+ \ifzeropt\hoofdhoogte
+ \resetsystemmode\v!hoofd
+ \else
+ \setsystemmode\v!hoofd
+ \fi
+ \ifzeropt\voethoogte
+ \resetsystemmode\v!voet
+ \else
+ \setsystemmode\v!voet
+ \fi
\resetglobal
\setvsize}
-\def\calculatereducedvsizes%
+\def\calculatereducedvsizes
{\teksthoogte\zethoogte
\doifsometextlineelse \v!hoofd
{\advance\teksthoogte -\hoofdhoogte
- \advance\teksthoogte -\hoofdafstand}
+ \advance\teksthoogte -\hoofdafstand}%
{\hoofdhoogte\zeropoint
\setlayoutdistances}%
\doifsometextlineelse \v!voet
{\advance\teksthoogte -\voethoogte
- \advance\teksthoogte -\voetafstand}
+ \advance\teksthoogte -\voetafstand}%
{\voethoogte\zeropoint
\setlayoutdistances}}
-\def\freezetextwidth% % \zetbreedte may be set to \tekstbreedte
+\def\freezetextwidth % \zetbreedte may be set to \tekstbreedte
{\tekstbreedte\zetbreedte % which is a tricky but valid value
- \doifsomething{\layoutparameter\c!tekstbreedte}
- {\tekstbreedte\layoutparameter\c!tekstbreedte}}
+ \doifsomething{\layoutparameter\c!tekstbreedte}%
+ {\tekstbreedte\layoutparameter\c!tekstbreedte}%
+ \doifsomething{\layoutparameter\c!tekstmarge}%
+ {\advance\tekstbreedte-\layoutparameter\c!tekstmarge
+ \advance\tekstbreedte-\layoutparameter\c!tekstmarge}}
-\def\calculatehsizes%
+\def\calculatehsizes
{\freezetextwidth
\sethsize}
% De onderstaande macro voert commando's uit, afhankelijk van
% het karakter van het paginanummer.
%
-% \doifonevenpaginaelse{then-commando}{else-commando}
+% \doifoddpageelse{then-commando}{else-commando}
%D When we start at an even page, we need to swap the layout
%D differently. We cannot adapt the real page number, since
@@ -957,14 +949,14 @@
\newif\ifshiftedrealpageno
-% \def\doifonevenpaginaelse#1#2%
+% \def\doifoddpageelse#1#2%
% {\ifshiftedrealpageno
% \ifodd\realpageno#2\else#1\fi
% \else
% \ifodd\realpageno#1\else#2\fi
% \fi}
-\def\doifonevenpaginaelse
+\def\doifoddpageelse
{\ifshiftedrealpageno
\ifodd\realpageno
\@EAEAEA\secondoftwoarguments
@@ -979,9 +971,13 @@
\fi
\fi}
-\def\doifbothsidesoverruled#1\orsideone#2\orsidetwo#3\od%
+\let\doifonevenpaginaelse\doifoddpageelse
+
+% what are those \relax'es doing there?
+
+\def\doifbothsidesoverruled#1\orsideone#2\orsidetwo#3\od
{\ifdubbelzijdig
- \doifonevenpaginaelse{#2}{#3}\relax
+ \doifoddpageelse{#2}{#3}\relax
\else
#1\relax
\fi}
@@ -991,7 +987,7 @@
\ifenkelzijdig
#1\relax
\else
- \doifonevenpaginaelse{#2}{#3}\relax
+ \doifoddpageelse{#2}{#3}\relax
\fi
\else
#1\relax
@@ -999,7 +995,7 @@
\newdimen\texthoffset
-\def\settexthoffset%
+\def\settexthoffset
{\doifbothsides
\texthoffset\rugwit
\orsideone
@@ -1010,7 +1006,7 @@
\advance\texthoffset-\zetbreedte
\od}
-\def\goleftonpage%
+\def\goleftonpage
{\hskip-\linkermargeafstand
\hskip-\linkermargebreedte
\hskip-\linkerrandafstand
@@ -1018,7 +1014,7 @@
\iffixedlayoutdimensions
- \def\doswapmargins%
+ \def\doswapmargins
{\let\doswapmargins\relax % to prevent local swapping
\swapdimens\linkermargeafstand\rechtermargeafstand
\swapdimens\linkerrandafstand \rechterrandafstand
@@ -1033,7 +1029,7 @@
\letvalue{\??ly\currentlayout#1}\!!stringb
\letvalue{\??ly\currentlayout#2}\!!stringa}
- \def\doswapmargins%
+ \def\doswapmargins
{\let\doswapmargins\relax % to prevent local swapping
\dodoswapmargins\c!linkermargeafstand\c!rechtermargeafstand
\dodoswapmargins\c!linkerrandafstand \c!rechterrandafstand
@@ -1045,9 +1041,58 @@
\def\doifmarginswapelse#1#2%
{\doifbothsides#1\orsideone#1\orsidetwo#2\od}
-\def\swapmargins%
+\def\swapmargins
{\doifmarginswapelse\relax\doswapmargins}
+\def\rightorleftpageaction
+ {\ifdubbelzijdig
+ \ifenkelzijdig
+ \@EAEAEA\firstoftwoarguments
+ \else
+ \@EAEAEA\doifoddpageelse
+ \fi
+ \else
+ \@EA\firstoftwoarguments
+ \fi}
+
+\def\outermarginwidth
+ {\rightorleftpageaction\rechtermargebreedte\linkermargebreedte}
+\def\innermarginwidth
+ {\rightorleftpageaction\linkermargebreedte\rechtermargebreedte}
+\def\outermargindistance
+ {\rightorleftpageaction\rechtermargeafstand\linkermargeafstand}
+\def\innermargindistance
+ {\rightorleftpageaction\linkermargeafstand\rechtermargeafstand}
+
+\def\outeredgewidth
+ {\rightorleftpageaction\rechterrandbreedte\linkerrandbreedte}
+\def\inneredgewidth
+ {\rightorleftpageaction\linkerrandbreedte\rechterrandbreedte}
+\def\outeredgedistance
+ {\rightorleftpageaction\rechterrandafstand\linkerrandafstand}
+\def\inneredgedistance
+ {\rightorleftpageaction\linkerrandafstand\rechterrandafstand}
+
+%D \macros
+%D {startlocallayout}
+%D
+%D These macros should be used with care. They permit local
+%D layouts (as used in fitting pages, see \type {page-app.tex}).
+
+%D This is kind of obsolete now that we have \type
+%D {\definelayout}, so this hack will disappear in future
+%D versions.
+
+\def\startlocallayout
+ {\pushmacro\restorepapersize
+ \pushmacro\currentlayout}
+
+\def\stoplocallayout
+ {\popmacro\currentlayout
+ \popmacro\restorepapersize
+ \restorepapersize
+ \stellayoutin} % \setuplayout}
+
%D \macros
%D {showprint, showframe, showlayout, showsetups}
%D
@@ -1104,8 +1149,9 @@
\c!rechterrand=\layoutparameter\c!rand,
\c!kopoffset=\!!zeropoint,
\c!rugoffset=\!!zeropoint,
- \c!tekstbreedte=, % dangerous option
- \c!tekstafstand=\!!zeropoint,
+ \c!tekstbreedte=, % dangerous option -> centered
+ \c!tekstmarge=, % dangerous option -> both sides
+ \c!tekstafstand=\!!zeropoint, % shift down on grid
\c!letter=,
\c!kleur=,
\c!markering=\v!uit,
@@ -1116,7 +1162,10 @@
\c!dx=\!!zeropoint,
\c!dy=\!!zeropoint,
\c!grid=\v!nee,
- \c!regels=,
+ \c!clipoffset=\!!zeropoint,
+ \c!regels=0,
+ \c!kolommen=1,
+ \c!kolomafstand=\!!zeropoint,
\c!snijwit=\!!zeropoint,
\c!bodemwit=\!!zeropoint]
@@ -1215,10 +1264,57 @@
%D We also set some of the parameters that will be used when
%D positioning the typeset paper onto the print paper.
+\setuppaper % (size) % only used in XY imposition
+ [\c!breedte=\zeropoint,
+ \c!hoogte=\zeropoint,
+ \c!kopwit=\zeropoint,
+ \c!rugwit=\zeropoint,
+ \c!dx=\zeropoint,
+ \c!dy=\zeropoint,
+ \c!nx=1,
+ \c!ny=1]
+
\setuppapersize
[\c!boven=,
\c!onder=\vss,
\c!links=,
\c!rechts=\hss]
+%D A few goodies:
+
+\beginETEX \dimexpr
+
+\definepapersize
+ [oversized]
+ [\c!breedte=\dimexpr(\papierbreedte+1.5cm),
+ \c!hoogte=\dimexpr(\papierhoogte+1.5cm)]
+
+\definepapersize
+ [doublesized]
+ [\c!breedte=\dimexpr(\papierbreedte),
+ \c!hoogte=\dimexpr(2\papierhoogte)]
+
+\definepapersize
+ [doubleoversized]
+ [\c!breedte=\dimexpr(\papierhoogte+1.5cm),
+ \c!hoogte=\dimexpr(2\papierbreedte+1.5cm)]
+
+\endETEX
+
+\definelayout
+ [\v!pagina]
+ [\c!rugwit=\zeropoint,
+ \c!kopwit=\zeropoint,
+ \c!marge=\zeropoint,
+ \c!rand=\zeropoint,
+ \c!hoofd=\zeropoint,
+ \c!voet=\zeropoint,
+ \c!breedte=\v!midden,
+ \c!hoogte=\v!midden]
+
+\definelayout
+ [\v!midden]
+ [\c!breedte=\v!midden,
+ \c!hoogte=\v!midden]
+
\protect \endinput
diff --git a/tex/context/base/page-lin.tex b/tex/context/base/page-lin.tex
index 466a34c43..f5b01b86e 100644
--- a/tex/context/base/page-lin.tex
+++ b/tex/context/base/page-lin.tex
@@ -15,50 +15,49 @@
\unprotect
-\newif\ifinregels
-%\newif\ifregelnummersinmarge
+\newif\ifinregels % \newif\ifregelnummersinmarge
\chardef\linenumberlocation=0
\newtoks\beforeeverylinenumbering
\newtoks\aftereverylinenumbering
-\def\stelregelsin%
+\def\stelregelsin
{\dodoubleargument\getparameters[\??rg]}
-\def\startregels%
+\def\startregels
{\@@rgvoor
\witruimte
%\pagina[\v!voorkeur]} gaat mis na koppen, nieuw: later \nobreak
\begingroup
- \def\@@rgstepyes{\parindent\!!zeropoint}%
- \def\@@rgstepno{\parindent\!!zeropoint}%
+ \def\@@rgstepyes{\parindent\zeropoint}%
+ \def\@@rgstepno {\parindent\zeropoint}%
\edef\@@rgparindent{\the\parindent}%
- \gdef\@@rglinesteptoggle{1}%
+ \globallet\@@rglinesteptoggle\!!plusone
\processaction
[\@@rginspringen]
[ \v!ja=>\def\@@rgstepyes{\parindent\@@rgparindent}%
\def\@@rgstepno {\parindent\@@rgparindent},
- \v!oneven=>\def\@@rgstepyes{\parindent\!!zeropoint }%
+ \v!oneven=>\def\@@rgstepyes{\parindent\zeropoint }%
\def\@@rgstepno {\parindent\@@rgparindent},
- \v!even=>\def\@@rgstepno {\parindent\!!zeropoint }%
+ \v!even=>\def\@@rgstepno {\parindent\zeropoint }%
\def\@@rgstepyes{\parindent\@@rgparindent}]%
\inregelstrue
\stelwitruimtein[\v!geen]%
\obeylines
- \let\checkindentation=\relax
+ \let\checkindentation\relax
\@@rgstepno
\ignorespaces
- \gdef\afterfirstobeyedline% tzt two pass, net als opsomming
- {\gdef\afterfirstobeyedline%
+ \gdef\afterfirstobeyedline % tzt two pass, net als opsomming
+ {\gdef\afterfirstobeyedline
{\nobreak
\global\let\afterfirstobeyedline\relax}}%
- \def\obeyedline%
+ \def\obeyedline
{\par
-\let\checkindentation=\relax % else problems with odd/even
+ \let\checkindentation\relax % else problems with odd/even
\afterfirstobeyedline
\ifdim\lastskip>\zeropoint
- \gdef\@@rglinesteptoggle{0}%
+ \globallet\@@rglinesteptoggle\!!zerocount
\else
\doglobal\increment\@@rglinesteptoggle
\fi
@@ -77,10 +76,10 @@
% \@@rgtussen % hopelessly in non
% \fi} % etex
-\def\dobetweenthelines%
- {\doifmeaningelse{\next}{\obeyedline}{\@@rgtussen}{}}
+\def\dobetweenthelines
+ {\doifmeaningelse\next\obeyedline\@@rgtussen\donothing}
-\def\stopregels%
+\def\stopregels
{\endgroup
\@@rgna}
@@ -90,49 +89,67 @@
% het gebruik van \setlocalreference scheelt een hash entry
-\def\dodoshowlinenumber% for use elsewhere, to be extended
+\def\dodoshowlinenumber % for use elsewhere, to be extended
{\doschrijfregelnummer
- \global\advance\linenumber 1\relax}%
+ \global\advance\linenumber \plusone}
-\def\regelweergave%
- {\convertnumber\@@rnconversie\linenumber}%
+\def\regelweergave
+ {\@@rnlinks\convertnumber\@@rnconversie\linenumber\@@rnrechts}
\def\dostelregelnummerenin[#1]%
- {\getparameters
- [\??rn]
- [\c!start=1,
- \c!stap=1,
- #1]%
- \global\linenumber1\relax}
+ {\getparameters[\??rn][\c!start=1,\c!stap=1,#1]%
+ \global\linenumber\plusone}
-\def\stelregelnummerenin%
+\def\stelregelnummerenin
{\dosingleargument\dostelregelnummerenin}
-\def\dostartnummerenLINE% % !! \everypar !!
+\def\dostartnummerenLINE
{\EveryPar{\schrijfregelnummer}}
-\def\dostopnummerenLINE%
+\def\dostopnummerenLINE
{\the\aftereverylinenumbering
\egroup}
-\def\dodoschrijfregelnummer%
- {\setbox0=\hbox{\regelweergave}%
- \vsmashbox0%
- \ifcase\linenumberlocation
- \rlap{\hbox to \@@rnbreedte{\box0\hss}}% was \llap, nog testen !!
- \else
- \llap{\hbox{\box0\hskip\linkermargeafstand}}%
- \fi}
+\def\dostartnummerenVERB
+ {\EveryLine{\schrijfregelnummer}}
+
+\def\dostopnummerenVERB
+ {\the\aftereverylinenumbering
+ \egroup}
+
+\newevery \everylinenumber \relax
+
+\def\dodoschrijfregelnummer
+ {% beware of em's, the font is already switched !
+ \setbox\scratchbox\hbox
+ {\setbox0\hbox{\@@rncommando{\regelweergave}}\vsmashbox0%
+ \ifcase\linenumberlocation
+ \rlap{\hbox to \@@rnbreedte{\box0\hss}}% was \llap, nog testen !!
+ \or
+ \inleftmargin
+ {\forgetall
+ \doifelse\@@rnbreedte\v!marge
+ {\hsize\linkermargebreedte}{\hsize\@@rnbreedte}%
+ \alignedline\@@rnuitlijnen\v!rechts{\box0\hskip\@@rnafstand}}%
+ \else
+ \inrightmargin
+ {\forgetall
+ \doifelse\@@rnbreedte\v!marge
+ {\hsize\rechtermargebreedte}{\hsize\@@rnbreedte}%
+ \alignedline\@@rnuitlijnen\v!links{\hskip\@@rnafstand\box0}}%
+ \fi}%
+ \vsmashbox\scratchbox
+ \box\scratchbox
+ \the\everylinenumber}
\def\complexstartregelnummeren[#1]%
-% {\doifnotinset{\v!verder}{#1}
-% {\global\linenumber=1\relax}%
- {\doifnot{\v!verder}{#1}
+ {\doifnot{#1}\v!verder
{\doifnumberelse{#1}
- {\global\linenumber#1}%
- {\global\linenumber 1}%
- \relax}%
- \chardef\linenumberlocation0
+ {\global\linenumber#1\relax}
+ {\doifelsenothing\@@rnstart
+ {\global\linenumber\plusone}
+ {\global\linenumber\@@rnstart}}}%
+ \chardef\linenumberlocation\zerocount
\processaction
[\@@rnplaats]
[ \v!inmarge=>\chardef\linenumberlocation1,
@@ -140,40 +157,62 @@
\v!inrechter=>\chardef\linenumberlocation2,
\v!marge=>\chardef\linenumberlocation1]%
% \v!tekst=>\chardef\linenumberlocation0,
- %\v!unknown=>\chardef\linenumberlocation0,
- %\v!default=>\chardef\linenumberlocation0]%
+ %\s!unknown=>\chardef\linenumberlocation0,
+ %\s!default=>\chardef\linenumberlocation0]%
\ifcase\linenumberlocation % text
\advance\leftskip \@@rnbreedte\relax
\fi
- \ifinregels
- \let\dostartnummeren=\dostartnummerenLINE
- \let\stopregelnummeren=\dostopnummerenLINE
- \def\schrijfregelnummer%
+ \chardef\@@rn@@rnmethod
+ \ifprocessingverbatim0\else\ifinregels1\else2\fi\fi
+ \processaction
+ [\@@rnmethode]
+ [ \v!type=>\chardef\@@rn@@rnmethod0,
+ \v!regel=>\chardef\@@rn@@rnmethod1,
+ \v!tekst=>\chardef\@@rn@@rnmethod2,
+ \v!file=>\chardef\@@rn@@rnmethod3]%
+ \ifcase\@@rn@@rnmethod % verbatim, line by line
+ \inregelstrue
+ \let\dostartnummeren\dostartnummerenVERB
+ \let\stopregelnummeren\dostopnummerenVERB
+ \def\schrijfregelnummer
{\doschrijfregelnummer
- \global\advance\linenumber 1\relax}%
- \else
- \let\dostartnummeren=\dostartnummerenPAR
- \let\stopregelnummeren=\dostopnummerenPAR
- \def\schrijfregelnummer%
- {\global\advance\linenumber -1\relax
+ \global\advance\linenumber \plusone}%
+ \or % text, line by line
+ \let\dostartnummeren\dostartnummerenLINE
+ \let\stopregelnummeren\dostopnummerenLINE
+ \def\schrijfregelnummer
+ {\doschrijfregelnummer
+ \global\advance\linenumber \plusone}%
+ \or % text, whole lot
+ \let\dostartnummeren\dostartnummerenPAR
+ \let\stopregelnummeren\dostopnummerenPAR
+ \def\schrijfregelnummer
+ {\global\advance\linenumber \minusone
+ \doschrijfregelnummer}%
+ \or % verbatim, selective line by line
+ \inregelstrue
+ \let\dostartnummeren\dostartnummerenVERB
+ \let\stopregelnummeren\dostopnummerenVERB
+ \def\schrijfregelnummer
+ {\global\linenumber\verbatimlinenumber
\doschrijfregelnummer}%
\fi
\dostartnummeren}
-\def\startregelnummeren%
+\def\startregelnummeren
{\bgroup
\the\beforeeverylinenumbering
\inregelnummerentrue
\complexorsimpleempty\startregelnummeren}
-\def\doschrijfregelnummer%
+\def\doschrijfregelnummer
{\ifnum\linenumber<\@@rnstart\relax
\else
- \!!counta=\linenumber
- \divide\!!counta by \@@rnstap\relax
- \multiply\!!counta by \@@rnstap\relax
+ \!!counta\linenumber
+ \divide\!!counta \@@rnstap
+ \multiply\!!counta \@@rnstap\relax
\ifnum\!!counta=\linenumber
- \doattributes\??rn\c!letter\c!kleur{\dodoschrijfregelnummer}%
+ \doattributes\??rn\c!letter\c!kleur\dodoschrijfregelnummer
\fi
\fi}
@@ -200,12 +239,12 @@
\def\inregel#1[#2]%
{\doifelsenothing{#1}
- {\doifinstringelse{--}{\currenttextreference}
+ {\doifinstringelse{--}\currenttextreference
{\in{\leftlabeltext\v!regels}{\rightlabeltext\v!regels}[\@@rnprefix#2]}
{\in{\leftlabeltext\v!regel }{\rightlabeltext\v!regel }[\@@rnprefix#2]}}
{\in{#1}[\@@rnprefix#2]}}
-\def\dostartnummerenPAR%
+\def\dostartnummerenPAR
{\beginofshapebox
\doglobal\newcounter\linereference}
@@ -247,51 +286,51 @@
\def\regelreferentie#1[#2]%
{\bgroup
\dimen0=\dp\strutbox
- \doif{\@@rnrefereren}{\v!aan}
+ \doif\@@rnrefereren\v!aan
{\doglobal\increment\linereference
% start 1=>(n=y,l=0,p=1)
% stop 2=>(n=y,l=0,p=2)
\setlinereference{\linereference}{\@@rnprefix#2}{0}{#1}%
- \advance\dimen0 by \linereference sp}%
+ \advance\dimen0 \linereference sp}%
\prewordbreak
\vrule \!!width \zeropoint \!!depth \dimen0 \!!height \zeropoint
\prewordbreak
\egroup}
-\def\dostopnummerenPAR% dp's -> openstrutdepth
+\def\dostopnummerenPAR % dp's -> openstrutdepth
{\endofshapebox
\checkreferences
- \linestepper=0
- \reshapebox{\global\advance\linestepper 1\relax}%
+ \linestepper\zerocount
+ \reshapebox{\global\advance\linestepper \plusone}%
\global\advance\linenumber \linestepper
- \doifelse{\@@rnrefereren}{\v!aan}
+ \doifelse\@@rnrefereren\v!aan
{\reshapebox % We are going back!
- {\global\advance\linenumber by -1
+ {\global\advance\linenumber \minusone
\dimen0=\dp\shapebox
\advance\dimen0 -\dp\strutbox\relax
\ifdim\dimen0>\zeropoint
% 1=>4 | 2=>4 1=>2
% start 1=>(n=y,l=2,p=1)
% stop 2=>(n=y,l=4,p=2)
- \dostepwiserecurse{1}{\number\dimen0}{1}
+ \dostepwiserecurse\plusone{\number\dimen0}\plusone
{\getlinereference\recurselevel
\setlinereference\recurselevel
{\linereferencename}{\the\linenumber}{\linereferenceplus}}%
\fi}%
\global\advance\linenumber \linestepper
- \ifnum\linereference>0 % anders vreemde loop in paragraphs+recurse
- \dorecurse{\linereference}
+ \ifnum\linereference>\zerocount % anders vreemde loop in paragraphs+recurse
+ \dorecurse\linereference
{\getlinereference\recurselevel
\ifnum\linereferenceplus=2 % stop
% ref y: text = 4 / Kan dit buiten referentie mechanisme om?
\expanded{\setlocalcrossreference
{\referenceprefix\linereferencename}{}{}{\linereferenceline}}%
\fi}%
- \dorecurse{\linereference}
+ \dorecurse\linereference
{\getlinereference\recurselevel
\ifnum\linereferenceplus<2 % start / lone
\ifnum\linereferenceplus=1 % start
- \getreferenceelements{\linereferencename}% text = 4
+ \getreferenceelements\linereferencename % text = 4
\ifnum\linereferenceline<0\currenttextreference\relax % 0 prevents error
\edef\linereferenceline{\linereferenceline--\currenttextreference}%
\fi
@@ -299,30 +338,31 @@
\expanded{\setlocalcrossreference
{\referenceprefix\linereferencename}{}{}{\linereferenceline}}%
\fi}%
- \global\let\scratchline=\linenumber % We are going back!
+ \global\let\scratchline\linenumber % We are going back!
\reshapebox
{\doglobal\decrement\scratchline
\hbox
- {\dorecurse{\linereference}
+ {\dorecurse\linereference
{\getlinereference\recurselevel
- \getreferenceelements{\linereferencename}%
+ \getreferenceelements\linereferencename
\beforesplitstring\currenttextreference--\at--\to\firstline
\ifnum\firstline=\scratchline\relax
- % beter een rawtextreference
- \textreference[\linereferencename]{\currenttextreference}%
+ % beter een rawtextreference, i.e. expanded
+ % \textreference[\linereferencename]{\currenttextreference}%
+ \rawtextreference\s!lin\linereferencename\currenttextreference
\expanded{\setlocalcrossreference
{\referenceprefix\linereferencename}{}{}{0}}% ==done
\fi}%
- \dimen0=\dp\shapebox
+ \dimen0\dp\shapebox
\advance\dimen0 -\dp\strutbox\relax
\ifdim\dimen0>\zeropoint
- \dp\shapebox=\dp\strutbox
+ \dp\shapebox\dp\strutbox
\fi
\schrijfregelnummer\box\shapebox}}% no \strut !
\else
\reshapebox{\hbox{\schrijfregelnummer\box\shapebox}}% no \strut !
\fi}
- {\reshapebox{\global\advance\linenumber -1}%
+ {\reshapebox{\global\advance\linenumber \minusone}%
\global\advance\linenumber \linestepper
\reshapebox{\hbox{\schrijfregelnummer\box\shapebox}}}% no \strut !
\global\advance\linenumber \linestepper
@@ -330,11 +370,17 @@
\the\aftereverylinenumbering
\egroup}
-\def\crlf
+\unexpanded \def\crlf
{\ifhmode\unskip\else\strut\fi\ifcase\raggedstatus\hfil\fi\break}
\def\opeenregel
{\def\crlf{\removelastspace\space}\let\\\crlf}
+
+\def\emptylines
+ {\dosingleempty\doemptylines}
+
+\def\doemptylines[#1]%
+ {\endgraf\dorecurse{\iffirstargument#1\else3\fi}\crlf}
\newcount\internalparagraphnumber
@@ -349,29 +395,186 @@
[\v!start=>\let\showparagraphnumber\doshowparagraphnumberA,
\v!stop=>\let\showparagraphnumber\relax,
\v!regel=>\let\showparagraphnumber\doshowparagraphnumberB,
- \v!reset=>\global\internalparagraphnumber=0
+ \v!reset=>\global\internalparagraphnumber\zerocount
\let\showparagraphnumber\doshowparagraphnumberA]}
-\def\dodoshowparagraphnumber%
- {\global\advance\internalparagraphnumber 1
+\def\dodoshowparagraphnumber
+ {\global\advance\internalparagraphnumber \plusone
\inleftmargin % \tf normalizes em
{\tf{\doattributes\??ph\c!letter\c!kleur{\the\internalparagraphnumber}}%
\kern\@@phafstand}}
-\def\doshowparagraphnumberA%
+\def\doshowparagraphnumberA
{\ifprocessingverbatim
\iflinepar\dodoshowparagraphnumber\fi
\else
\dodoshowparagraphnumber
\fi}
-\def\doshowparagraphnumberB%
+\def\doshowparagraphnumberB
{\ifinregelnummeren
\doshowparagraphnumberA
\fi}
+
+% new, to be documented
+
+\newcounter\linenotecounter
+\newtoks \collectedlinenotes
+\newif \iftracelinenotes
+
+\appendtoks
+ \the\collectedlinenotes
+\to \everylinenumber
+
+\appendtoks
+ \global\collectedlinenotes\emptytoks
+\to \beforeeverylinenumbering
+
+\def\handlelinenote#1#2%
+ {\bgroup
+ \expanded{\beforesplitstring#1}\at--\to\linenotelinenumber
+ \ifnum\linenotelinenumber=\linenumber\relax
+ % todo: \onlyfootnote{#1}{#2}% == configurable
+ \setupfootnotes[\c!nummercommando=\gobbleoneargument]%
+ \footnotetext{#1: #2}%
+ \fi
+ \egroup}
+
+\def\tracedlinenote#1%
+ {\iftracelinenotes
+ \hbox to \zeropoint
+ {\forgetall
+ \localcolortrue
+ \hsize\zeropoint
+ \hss
+ \vbox to \strutheight{\llap{\red\infofont\setstrut\linenotecounter}\vss}%
+ {\blue\vl}%
+ \vbox to \strutheight{\rlap{\red\infofont\setstrut#1}\vss}%
+ \hss}%
+ \prewordbreak
+ \fi}
+\def\linenote#1%
+ {\doglobal\increment\linenotecounter
+ \doifreferencefoundelse{\??rr:\linenotecounter}%
+ {\doglobal\@EA\appendtoks\@EA\handlelinenote\@EA
+ {\currenttextreference}{#1}\to\collectedlinenotes}
+ \donothing
+ \tracedlinenote\empty
+ \expanded{\eenregel[\??rr:\linenotecounter]}}
+
+\def\startlinenote[#1]#2%
+ {\doifreferencefoundelse{\??rr:#1}%
+ {\doglobal\@EA\appendtoks\@EA\handlelinenote\@EA
+ {\currenttextreference}{#2}\to\collectedlinenotes}
+ \donothing
+ \tracedlinenote{#1}%
+ \startregel[\??rr:#1]}
+
+\def\stoplinenote[#1]%
+ {\stopregel[\??rr:#1]}
+
+% \startbuffer[test]
+% \startlinenumbering[100]
+% test \linenote {oeps} test test test test test test
+% test \startlinenote [well] {oeps} test test test test test test
+% test \linenote {oeps} test test test test test test
+% test \linenote {oeps} test test test test test test
+% test \linenote {oeps} test test test test test test
+% test \linenote {oeps} test test test test test test
+% test \stoplinenote [well] test test test test test test
+% \stoplinenumbering
+% \stopbuffer
+%
+% {\typebuffer[test] \getbuffer[test]} \page
+%
+% \startbuffer[setup]
+% \setuplinenumbering
+% [align=left]
+% \stopbuffer
+%
+% {\typebuffer[setup] \getbuffer[setup,test]} \page
+%
+% \startbuffer[setup]
+% \setuplinenumbering
+% [width=1em,
+% align=left]
+% \stopbuffer
+%
+% {\typebuffer[setup] \getbuffer[setup,test]} \page
+%
+% \startbuffer[setup]
+% \setuplinenumbering
+% [width=2em,
+% distance=.5em,
+% align=left]
+% \stopbuffer
+%
+% {\typebuffer[setup] \getbuffer[setup,test]} \page
+%
+% \startbuffer[setup]
+% \setuplinenumbering
+% [width=2em,
+% align=middle]
+% \stopbuffer
+%
+% {\typebuffer[setup] \getbuffer[setup,test]} \page
+%
+% \startbuffer[setup]
+% \setuplinenumbering
+% [conversion=romannumerals,
+% start=1,
+% step=1,
+% location=text,
+% style=slanted,
+% color=blue,
+% width=1.5em]
+% \stopbuffer
+%
+% {\typebuffer[setup] \startnarrower\getbuffer[setup,test]\stopnarrower} \page
+%
+% \startbuffer[setup]
+% \setuplinenumbering
+% [width=4em,
+% left=--,
+% right=--,
+% align=middle]
+% \stopbuffer
+%
+% {\typebuffer[setup] \getbuffer[setup,test]} \page
+%
+% \startbuffer[setup-1]
+% \setuplinenumbering
+% [style=\bfxx,
+% command=\WatchThis]
+% \stopbuffer
+%
+% \startbuffer[setup-2]
+% \def\WatchThis#1%
+% {\ifodd\linenumber
+% \definecolor[linecolor][red]%
+% \else
+% \definecolor[linecolor][green]%
+% \fi
+% \inframed
+% [offset=1pt,frame=off,background=color,backgroundcolor=linecolor]
+% {#1}}
+% \stopbuffer
+%
+% {\typebuffer[setup-1,setup-2] \getbuffer[setup-1,setup-2,test]} \page
+%
+% \startbuffer[setup-1]
+% \setuplinenumbering
+% [location=inright,
+% style=\bfxx,
+% command=\WatchThis]
+% \stopbuffer
+%
+% {\typebuffer[setup-1] \getbuffer[setup-1,setup-2,test]} \page
+
\stelregelnummerenin
- [\c!conversie=\v!cijfers,
+ [\c!methode=,
+ \c!conversie=\v!cijfers,
\c!start=1,
\c!stap=1,
\c!plaats=\v!marge,
@@ -381,6 +584,16 @@
\c!prefix=,
\c!refereren=\v!aan]
+% new
+
+\stelregelnummerenin
+ [\c!breedte=\ifcase\linenumberlocation2em\else\v!marge\fi,
+ \c!links=,
+ \c!rechts=,
+ \c!commando=,
+ \c!afstand=\zeropoint,
+ \c!uitlijnen=\ifcase\linenumberlocation\v!rechts\or\v!rechts\or\v!links\fi]
+
\stelparagraafnummerenin
[\c!status=\v!stop,
\c!letter=,
diff --git a/tex/context/base/page-log.tex b/tex/context/base/page-log.tex
index 66feb39f5..39686727f 100644
--- a/tex/context/base/page-log.tex
+++ b/tex/context/base/page-log.tex
@@ -106,7 +106,7 @@
\setlogoboxes
\global\chardef\logostatus2
\fi
- \setbox#1=\vbox
+ \setbox#1\vbox
{\offinterlineskip
\doifmarginswapelse
{\copy\leftlogos}
@@ -128,15 +128,15 @@
\newbox\leftlogos
\newbox\rightlogos
-\def\setlogoboxes%
- {\showmessage{\m!layouts}{7}\empty
+\def\setlogoboxes
+ {\showmessage\m!layouts7\empty
\dosetlogobox\leftlogos\relax
\ifdubbelzijdig
\dosetlogobox\rightlogos\doswapmargins
\fi}
\def\dosetlogobox#1#2%
- {\global\setbox#1=\vbox to \papierhoogte
+ {\global\setbox#1\vbox to \papierhoogte
{\dontcomplain % needed here ?
\calculatereducedvsizes % needed here ?
\offinterlineskip
@@ -162,9 +162,9 @@
{\def\docommando##1%
{\donefalse
\ifnum\logostatus=3 \ExpandBothAfter
- \doifinset{\getvalue{\??lo#1##1}}{\requestedlogos}\donetrue
+ \doifinset{\getvalue{\??lo#1##1}}\requestedlogos\donetrue
\else
- \doifvalue{\??lo#1##1\c!status}{\v!start}\donetrue
+ \doifvalue{\??lo#1##1\c!status}\v!start\donetrue
\fi
\ifdone
#2{\hbox{\getvalue{\??lo#1##1\c!commando}}}%
@@ -221,16 +221,16 @@
{\addtocommalist{#1}\definedlogos
\long\setvalue{\??lo#2#3}{#1}%
\getparameters[\??lo#2#3][#4]%
- \global\chardef\logostatus=2 }
+ \global\chardef\logostatus2 }
-\def\definelogo%
+\def\definelogo
{\doquadrupleargument\dodefinelogo}
-\def\placelogos%
+\def\placelogos
{\dosingleempty\doplacelogos}
\def\doplacelogos[#1]%
{\xdef\requestedlogos{\iffirstargument#1\else\definedlogos\fi}%
- \global\chardef\logostatus=3 }
+ \global\chardef\logostatus3 }
\protect \endinput
diff --git a/tex/context/base/page-lyr.tex b/tex/context/base/page-lyr.tex
index ffad4d540..8a06c3c2f 100644
--- a/tex/context/base/page-lyr.tex
+++ b/tex/context/base/page-lyr.tex
@@ -30,7 +30,7 @@
\ifx\undefined\defineoverlay \message{loaded to early} \wait \fi
-\def\defineoverlay%
+\def\defineoverlay
{\dotripleempty\dodefineoverlay}
\def\dodefineoverlay[#1][#2][#3]% overlay [layer] content
@@ -69,36 +69,20 @@
\def\definelayer
{\dodoubleargument\dodefinelayer}
-% \def\dodefinelayer[#1][#2]%
-% {\ifundefined{\@@layerbox#1}%
-% \expandafter\newbox\csname\@@layerbox#1\endcsname
-% \else
-% \resetlayer[#1]%
-% \fi
-% \defineoverlay
-% [#1][\composedlayer{#1}]%
-% \setuplayer
-% [#1]
-% [\c!status=\v!start,\c!richting=\v!normaal,\c!optie=,
-% \c!x=\!!zeropoint,\c!y=\!!zeropoint,\c!positie=\v!nee,
-% \c!breedte=\wd\nextbox,\c!hoogte=\ht\nextbox,
-% \c!offset=\!!zeropoint,\c!rotatie=, % geen 0 !
-% \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint,
-% \c!plaats=rb,\c!positie=\v!nee,\c!pagina=,
-% \c!sx=1,\c!sy=1,\c!hoek=,#2]}
-
\def\dodefinelayer[#1][#2]%
{\setuplayer
[#1]
- [\c!dubbelzijdig=,
+ [\c!dubbelzijdig=,\c!preset=,
\c!status=\v!start,\c!richting=\v!normaal,\c!optie=,
\c!x=\!!zeropoint,\c!y=\!!zeropoint,\c!positie=\v!nee,
- \c!breedte=\wd\nextbox,\c!hoogte=\ht\nextbox,
+ \c!regel=0,\c!kolom=0,
+ \c!breedte=\nextboxwd,\c!hoogte=\nextboxht,
\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,
\c!sx=1,\c!sy=1,\c!hoek=,#2]%
- \doifvalue{\??ll#1\v!dubbelzijdig}\v!ja
+ \doifvalue{\??ll#1\c!dubbelzijdig}\v!ja
{\dopresetlayerbox{\v!links #1}%
\dopresetlayerbox{\v!rechts#1}}%
\dopresetlayerbox{#1}%
@@ -117,7 +101,7 @@
%D After a layer is defined, you can change its
%D characteristics.
-\def\setuplayer%
+\def\setuplayer
{\dodoubleargument\dosetuplayer}
\def\dosetuplayer[#1][#2]%
@@ -138,30 +122,6 @@
\def\currentlayerdata{0}
-% \def\setlayer
-% {\dodoubleargument\dosetlayer}
-%
-% \def\dosetlayer[#1][#2]%
-% {\doifnotvalue{\??ll#1\c!status}{\v!stop}{\dodosetlayer[#1][#2]}}
-%
-% \def\dodosetlayer[#1][#2]%
-% {\bgroup
-% \recalculatebackgrounds
-% \recalculatelogos
-% \doglobal\increment\currentlayerdata
-% \forgetall
-% \dontcomplain
-% \doifvalue{\??ll#1\c!optie}{\v!test}
-% {\traceboxplacementtrue\tracelayerstrue}%
-% \dowithnextbox % sneller als aparte macro
-% {\ifundefined{\@@layerbox#1}%
-% \writestatus{layer}{unknown layer #1}%
-% \else
-% \dododosetlayer[#1][#2]%
-% \fi
-% \egroup}
-% \hbox}
-
\def\setlayer
{\dotripleempty\dosetlayer}
@@ -179,8 +139,8 @@
\doglobal\increment\currentlayerdata
\forgetall
\dontcomplain
- \doifvalue{\??ll#1\c!optie}\v!test
- {\traceboxplacementtrue\tracelayerstrue}%
+ \doifvalue{\??ll#1\c!optie}\v!test\tracelayerstrue
+ \iftracelayers\traceboxplacementtrue\fi
\dowithnextbox % sneller als aparte macro
{\ifundefined{\@@layerbox#1}%
\writestatus{layer}{unknown layer #1}%
@@ -210,175 +170,147 @@
\advance\scratchdimen-\MPy{lyr:\currentlayerdata}%
\xdef\lastlayerypos{\the\scratchdimen}}
-% \def\dododosetlayer[#1][#2]% will be sped up
-% {\getparameters[\??ll#1][#2]%
-% \doifvalue{\??ll#1\c!positie}\v!overlay % slow
-% {\getparameters[\??ll#1]
-% [\c!breedte=\!!zeropoint,
-% \c!hoogte=\!!zeropoint,
-% \c!positie=\v!ja]}%
-% \doifvaluesomething{\??ll#1\c!rotatie}
-% {\setbox\nextbox\hbox
-% {\rotate
-% [\c!plaats=\v!hoog,
-% \c!rotatie=\getvalue{\??ll#1\c!rotatie}]
-% {\box\nextbox}}}%
-% \@@layerxsiz\getvalue{\??ll#1\c!breedte}%
-% \@@layerysiz\getvalue{\??ll#1\c!hoogte }%
-% \@@layerxpos\getvalue{\??ll#1\c!x}%
-% \@@layerypos\getvalue{\??ll#1\c!y}%
-% \doifelsevalue{\??ll#1\c!hoffset}\v!max
-% {\@@layerxoff\@@layerxsiz}
-% {\@@layerxoff\getvalue{\??ll#1\c!hoffset}}%
-% \doifelsevalue{\??ll#1\c!voffset}\v!max
-% {\@@layeryoff\@@layerysiz}
-% {\@@layeryoff\getvalue{\??ll#1\c!voffset}}%
-% \advance\@@layerxoff \getvalue{\??ll#1\c!offset}%
-% \advance\@@layeryoff \getvalue{\??ll#1\c!offset}%
-% \@@layerxpos\getvalue{\??ll#1\c!sx}\@@layerxpos
-% \@@layerypos\getvalue{\??ll#1\c!sy}\@@layerypos
-% \@@layerxoff\getvalue{\??ll#1\c!sx}\@@layerxoff
-% \@@layeryoff\getvalue{\??ll#1\c!sy}\@@layeryoff
-% \doifelsevalue{\??ll#1\c!positie}{\v!ja} % combine ^
-% {\setlastlayerpos{#1}%
-% \@@layerxpos\lastlayerxpos
-% \@@layerypos\lastlayerypos
-% \setxvalue{\??ll#1\layerpage\c!positie}{\v!ja}%
-% \setxvalue{\??ll#1\c!status}{\v!start}% needed ?
-% \setbox\layerbox\vbox to \@@layerysiz
-% {\hbox to \@@layerxsiz{\xypos{lyr:\currentlayerdata}\hss}\vss}}
-% {\setbox\layerbox=\emptybox
-% \global\let\lastlayerxpos\!!zeropoint
-% \global\let\lastlayerypos\!!zeropoint
-% \ExpandBothAfter\doifinset{\v!onder}{\getvalue{\??ll#1\c!hoek}}
-% {\ifdim\@@layerysiz>\zeropoint
-% \advance\@@layerypos-\@@layerysiz
-% \@@layerypos-\@@layerypos
-% \@@layeryoff-\@@layeryoff
-% \fi}%
-% \ExpandBothAfter\doifinset{\v!rechts}{\getvalue{\??ll#1\c!hoek}}
-% {\ifdim\@@layerxsiz>\zeropoint
-% \advance\@@layerxpos-\@@layerxsiz
-% \@@layerxpos-\@@layerxpos
-% \@@layerxoff-\@@layerxoff
-% \fi}%
-% \edef\layerpage{\getvalue{\??ll#1\c!pagina}}}%
-% \doifsomething{\layerpage}
-% {\edef\layerpage{:\layerpage}%
-% \doifundefined{\@@layerbox#1\layerpage}
-% {\global\expandafter\newbox\csname\@@layerbox#1\layerpage\endcsname}}%
-% \global\setbox\csname\@@layerbox#1\layerpage\endcsname=\vbox
-% {\offinterlineskip
-% \hsize\getvalue{\??ll#1\c!breedte}% new, keep box small
-% \ifvoid\csname\@@layerbox#1\layerpage\endcsname\else
-% \ht\csname\@@layerbox#1\layerpage\endcsname\zeropoint
-% \dp\csname\@@layerbox#1\layerpage\endcsname\zeropoint
-% \wd\csname\@@layerbox#1\layerpage\endcsname\zeropoint
-% \doifnotvalue{\??ll#1\c!richting}{\v!omgekeerd}
-% {\box\csname\@@layerbox#1\layerpage\endcsname}%
-% \fi
-% \setbox\nextbox=\hbox
-% {\alignedbox[\getvalue{\??ll#1\c!plaats}]\vbox{\box\nextbox}}%
-% \smashbox\nextbox
-% \vskip\@@layerypos
-% \vskip\@@layeryoff
-% \hskip\@@layerxpos
-% \hskip\@@layerxoff
-% \box\nextbox
-% \ifvoid\csname\@@layerbox#1\layerpage\endcsname
-% % already flushed
-% \else
-% % the reverse case % check !
-% \vskip-\@@layerypos
-% \vskip-\@@layeryoff
-% \box\csname\@@layerbox#1\layerpage\endcsname
-% \fi}%
-% \ifvoid\layerbox\else\box\layerbox\fi}
+\def\definelayerpreset
+ {\dodoubleargument\dodefinelayerpreset}
+
+\def\dodefinelayerpreset[#1][#2]%
+ {\setvalue{\??ll\??ll#1}{\dopresetlayer{#2}}}
+
+\def\dopresetlayer#1#2#3% #1=list #2=tag #3=list
+ {\getparameters[\??ll#2][#1,#3]}
+
+\letempty\currentlayer
+
+\def\layerparameter#1{\csname\??ll\currentlayer#1\endcsname}
\def\dododosetlayer[#1][#2][#3]% will be sped up
- {\getparameters[\??ll#1][#3]%
+ {% we use the global width, never change this
+ \def\currentlayer{#1}%
+ \@@layerxsiz\layerparameter\c!breedte
+ \@@layerysiz\layerparameter\c!hoogte
+ % preroll
+ \getparameters[\??ll#1][#3]%
+ % presets and real roll
+ \doifdefined{\??ll\??ll\layerparameter\c!preset}
+ {\getvalue{\??ll\??ll\layerparameter\c!preset}{#1}{#3}}%
+ % that was real slow
\doifvalue{\??ll#1\c!positie}\v!overlay % slow
{\getparameters[\??ll#1]
- [\c!breedte=\!!zeropoint,
- \c!hoogte=\!!zeropoint,
+ [\c!breedte=\zeropoint,
+ \c!hoogte=\zeropoint,
\c!positie=\v!ja]}%
\doifvaluesomething{\??ll#1\c!rotatie}
{\setbox\nextbox\hbox
{\rotate
[\c!plaats=\v!hoog,
- \c!rotatie=\getvalue{\??ll#1\c!rotatie}]
- {\box\nextbox}}}%
- \@@layerxsiz\getvalue{\??ll#1\c!breedte}%
- \@@layerysiz\getvalue{\??ll#1\c!hoogte }%
- \@@layerxpos\getvalue{\??ll#1\c!x}%
- \@@layerypos\getvalue{\??ll#1\c!y}%
+ \c!rotatie=\layerparameter\c!rotatie]
+ {\flushnextbox}}}%
+ % no, not local
+ % \@@layerxsiz\layerparameter\c!breedte
+ % \@@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\getvalue{\??ll#1\c!hoffset}}%
+ {\@@layerxoff\layerparameter\c!hoffset}%
\doifelsevalue{\??ll#1\c!voffset}\v!max
{\@@layeryoff\@@layerysiz}
- {\@@layeryoff\getvalue{\??ll#1\c!voffset}}%
- \advance\@@layerxoff \getvalue{\??ll#1\c!offset}%
- \advance\@@layeryoff \getvalue{\??ll#1\c!offset}%
- \@@layerxpos\getvalue{\??ll#1\c!sx}\@@layerxpos
- \@@layerypos\getvalue{\??ll#1\c!sy}\@@layerypos
- \@@layerxoff\getvalue{\??ll#1\c!sx}\@@layerxoff
- \@@layeryoff\getvalue{\??ll#1\c!sy}\@@layeryoff
- \doifelsevalue{\??ll#1\c!positie}{\v!ja} % combine ^
+ {\@@layeryoff\layerparameter\c!voffset}%
+ \advance\@@layerxoff\layerparameter\c!offset
+ \advance\@@layeryoff\layerparameter\c!offset
+ \@@layerxpos\layerparameter\c!sx\@@layerxpos
+ \@@layerypos\layerparameter\c!sy\@@layerypos
+ \@@layerxoff\layerparameter\c!sx\@@layerxoff
+ \@@layeryoff\layerparameter\c!sy\@@layeryoff
+ \doifelsevalue{\??ll#1\c!positie}\v!ja % combine ^
{\setlastlayerpos{#2#1}% todo l/r %%%%%%%%%%%%
\@@layerxpos\lastlayerxpos
\@@layerypos\lastlayerypos
- \setxvalue{\??ll#1\layerpage\c!positie}{\v!ja}%
- \setxvalue{\??ll#1\c!status}{\v!start}% needed ?
+ \letgvalue{\??ll#1\layerpage\c!positie}\v!ja
+ \letgvalue{\??ll#1\c!status}\v!start % needed ?
\setbox\layerbox\vbox to \@@layerysiz
{\hbox to \@@layerxsiz{\xypos{lyr:\currentlayerdata}\hss}\vss}}
{\setbox\layerbox\emptybox
- \global\let\lastlayerxpos\!!zeropoint
- \global\let\lastlayerypos\!!zeropoint
- \ExpandBothAfter\doifinset{\v!onder}{\getvalue{\??ll#1\c!hoek}}
- {\ifdim\@@layerysiz>\zeropoint
+ \globallet\lastlayerxpos\!!zeropoint
+ \globallet\lastlayerypos\!!zeropoint
+ \ExpandBothAfter\doifinset\v!onder{\layerparameter\c!hoek}
+ {\ifnum\layerparameter\c!regel=\zerocount\else % can be < 0
+ \scratchcounter\layerparameter\c!regel
+ \scratchcounter-\scratchcounter
+ \advance\scratchcounter\layoutlines
+ \advance\scratchcounter\plusone
+ \setevalue{\??ll#1\c!regel}{\the\scratchcounter}%
+ \fi
+ \ifdim\@@layerysiz>\zeropoint
\advance\@@layerypos-\@@layerysiz
\@@layerypos-\@@layerypos
\@@layeryoff-\@@layeryoff
\fi}%
- \ExpandBothAfter\doifinset{\v!rechts}{\getvalue{\??ll#1\c!hoek}}
- {\ifdim\@@layerxsiz>\zeropoint
+ \ExpandBothAfter\doifinset\v!rechts{\layerparameter\c!hoek}
+ {\ifnum\layerparameter\c!kolom=\zerocount\else % can be < 0
+ \scratchcounter\layerparameter\c!kolom
+ \scratchcounter-\scratchcounter
+ \advance\scratchcounter \layoutcolumns
+ \advance\scratchcounter \plusone
+ \setevalue{\??ll#1\c!kolom}{\the\scratchcounter}%
+ \fi
+ \ifdim\@@layerxsiz>\zeropoint
\advance\@@layerxpos-\@@layerxsiz
\@@layerxpos-\@@layerxpos
\@@layerxoff-\@@layerxoff
\fi}%
- \ExpandBothAfter\doif{\v!midden}{\getvalue{\??ll#1\c!hoek}}
+ \ExpandBothAfter\doif\v!midden{\layerparameter\c!hoek}
{\ifdim\@@layerxsiz>\zeropoint
\advance\@@layerxpos.5\@@layerxsiz
\fi
\ifdim\@@layerysiz>\zeropoint
\advance\@@layerypos.5\@@layerysiz
\fi}%
- \edef\layerpage{\getvalue{\??ll#1\c!pagina}}}%
- \doifsomething{\layerpage}
+ \edef\layerpage{\layerparameter\c!pagina}}%
+ \doifsomething\layerpage
{\edef\layerpage{:\layerpage}%
\doifundefined{\@@layerbox#2#1\layerpage}
{\global\expandafter\newbox\csname\@@layerbox#2#1\layerpage\endcsname}}%
-\dontcomplain
+ \dontcomplain % more comfortable
\global\setbox\csname\@@layerbox#2#1\layerpage\endcsname\vbox
-to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
+ to \layerparameter\c!hoogte % new, otherwise no negative y possible
{\offinterlineskip
- \hsize\getvalue{\??ll#1\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
\wd\csname\@@layerbox#2#1\layerpage\endcsname\zeropoint
- \doifnotvalue{\??ll#1\c!richting}{\v!omgekeerd}
+ \doifnotvalue{\layerparameter\c!richting}\v!omgekeerd
{\box\csname\@@layerbox#2#1\layerpage\endcsname}%
\fi
- \setbox\nextbox=\hbox
- {\alignedbox[\getvalue{\??ll#1\c!plaats}]\vbox{\box\nextbox}}%
+\doifelsevalue{\??ll#1\c!plaats}\v!grid\donetrue\donefalse
+\ifdone
+ \nextboxht\strutheight
+ \nextboxdp\strutdepth
+\else
+ \setbox\nextbox\hbox
+ {\alignedbox[\layerparameter\c!plaats]\vbox{\flushnextbox}}%
+\fi
+ \ifnum\layerparameter\c!regel=\zerocount\else % no \ifcase, can be negative
+ \advance\@@layerypos \layerparameter\c!regel\lineheight
+ \advance\@@layerypos \topskip
+ \advance\@@layerypos-\lineheight
+ \advance\@@layerypos-\nextboxht
+ \fi
+ \ifnum\layerparameter\c!kolom=\zerocount\else % no \ifcase, can be negative
+ \advance\@@layerxpos \layoutcolumnoffset{\layerparameter\c!kolom}%
+ \fi
+\ifdone
+ \setbox\nextbox\hbox
+ {\alignedbox[rb]\vbox{\flushnextbox}}%
+\fi
\smashbox\nextbox
\vskip\@@layerypos
\vskip\@@layeryoff
\hskip\@@layerxpos
\hskip\@@layerxoff
- \box\nextbox
+ \flushnextbox
\ifvoid\csname\@@layerbox#2#1\layerpage\endcsname
% already flushed
\else
@@ -433,7 +365,7 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
% \fi}
\unexpanded\def\flushlayer[#1]%
- {\doifelsevalue{\??ll#1\v!dubbelzijdig}\v!ja
+ {\doifelsevalue{\??ll#1\c!dubbelzijdig}\v!ja
{\doifundefinedelse{\@@layerbox#1}%
{\dodoflushlayerA[#1]}
{\doifbothsidesoverruled
@@ -465,12 +397,14 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
{\ifundefined{\@@layerbox#3}%
\ifcase#1\else\writestatus{layer}{unknown layer #3}\fi
\else
- \doifvalue{\??ll#2\c!optie}\v!test
- {\traceboxplacementtrue\tracelayerstrue}%
- \iftracelayers \ruledvbox \else \vbox \fi to \overlayheight
+ \doifvalue{\??ll#2\c!optie}\v!test\tracelayerstrue
+ \iftracelayers\traceboxplacementtrue\fi
+ \doifelsevalue{\??ll#2\c!methode}\v!tekst\donetrue\donefalse
+ \iftracelayers \ruledvbox \else \vbox \fi \ifdone \else to \overlayheight \fi
{\forgetall
- \hbox to \overlaywidth
- {\doifvalue{\??ll#3\realfolio\c!positie}\v!ja
+ \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
\ifcase#1\else
@@ -492,6 +426,8 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
\def\composedlayer#1{\flushlayer[#1]}
+\let\placelayer\flushlayer
+
%D \macros
%D {resetlayer}
%D
@@ -504,7 +440,11 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
\fi}
\def\resetlayer[#1]%
- {\doresetlayer{#1}\doresetlayer{#1:\realfolio}}
+ {\doresetlayer{#1}%
+ \doifvalue{\??ll#1\c!dubbelzijdig}\v!ja % kind of redundant test
+ {\doresetlayer{\v!links #1}%
+ \doresetlayer{\v!rechts#1}}%
+ \doresetlayer{#1:\realfolio}}
%D \macros
%D {setMPlayer}
@@ -537,7 +477,7 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
%D {\useMPgraphic{oeps}}
%D \stoptypen
-\def\setMPlayer%
+\def\setMPlayer
{\dotripleempty\dosetMPlayer}
\def\MPlayerwidth {\hsize}
@@ -566,7 +506,7 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
\newbox\positionbox
-\def\startpositioning%
+\def\startpositioning
{\bgroup
\xposition \zeropoint \yposition \zeropoint
\xdimension\zeropoint \ydimension\zeropoint
@@ -574,7 +514,7 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
\hfuzz \papierbreedte \vfuzz \papierhoogte
\setbox\positionbox\hbox\bgroup}
-\def\stoppositioning%
+\def\stoppositioning
{\doifnot\@@psoffset\v!ja
{\global\xoffset\zeropoint
\global\yoffset\zeropoint}%
@@ -611,20 +551,20 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
\def\calculateposition#1#2#3#4#5#6#7#8#9%
{\setdimensionwithunit\scratchskip{#1}\@@pseenheid
- \scratchskip=#8\scratchskip
- \scratchskip=#9\scratchskip
- \advance\scratchskip by #4\relax
- \doif{#2}{\v!relatief}%
- {\advance\scratchskip by #3%
+ \scratchskip#8\scratchskip
+ \scratchskip#9\scratchskip
+ \advance\scratchskip #4\relax
+ \doif{#2}\v!relatief
+ {\advance\scratchskip #3%
\let#4\!!zeropoint}%
- #3=\scratchskip\relax
- \doifnot{\@@psstatus}{\v!overlay}
- {\scratchskip=#5\relax
- \advance\scratchskip by #3\relax
- \ifdim#3<-#7\relax \global#7=-#3\relax \fi
- \ifdim\scratchskip>#6\relax \global#6=\scratchskip\relax \fi}}
-
-\def\position%
+ #3\scratchskip\relax
+ \doifnot\@@psstatus\v!overlay
+ {\scratchskip#5\relax
+ \advance\scratchskip #3\relax
+ \ifdim#3<-#7\relax \global#7-#3\relax \fi
+ \ifdim\scratchskip>#6\relax \global#6\scratchskip\relax \fi}}
+
+\def\position
{\dosingleempty\doposition}
\def\doposition[#1]#2(#3,#4)%
@@ -633,22 +573,22 @@ to \getvalue{\??ll#1\c!hoogte}% new, otherwise no negative y possible
\getparameters[\??ps][#1]%
\dontcomplain
\calculateposition{#3}\@@psxstap\xposition
- \@@psxoffset{\wd\nextbox}\xdimension\xoffset
+ \@@psxoffset{\nextboxwd}\xdimension\xoffset
\@@psxschaal\@@psxfactor
- \scratchdimen=\ht\nextbox \advance\scratchdimen by \dp\nextbox
+ \scratchdimen\nextboxht \advance\scratchdimen \nextboxdp
\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
+ \hbox to \zeropoint
{\hskip\xposition
- \box\nextbox
+ \flushnextbox
\hss}
\vss}%
\xdef\dopoppositioning%
- {\xposition=\the\xposition
- \yposition=\the\yposition
+ {\xposition\the\xposition
+ \yposition\the\yposition
\noexpand\def\noexpand\@@psxoffset{\@@psxoffset}%
\noexpand\def\noexpand\@@psyoffset{\@@psyoffset}}%
\egroup
diff --git a/tex/context/base/page-mak.tex b/tex/context/base/page-mak.tex
index b10562679..2643292fa 100644
--- a/tex/context/base/page-mak.tex
+++ b/tex/context/base/page-mak.tex
@@ -34,7 +34,7 @@
%D \showsetup{\y!setupmakeup}
%D \showsetup{\y!startmakeup}
-\def\definemakeup%
+\def\definemakeup
{\dodoubleargument\dodefinemakeup}
\def\dodefinemakeup[#1][#2]%
@@ -63,7 +63,7 @@
\setvalue{\e!start#1\e!opmaak}{\startmakeup[#1]}%
\setvalue{\e!stop #1\e!opmaak}{\stopmakeup}}
-\def\setupmakeup%
+\def\setupmakeup
{\dodoubleargument\dosetupmakeup}
\def\dosetupmakeup[#1]%
@@ -83,7 +83,7 @@
\let\currentmakeup\empty
-\def\startmakeup%
+\def\startmakeup
{\dodoubleempty\dostartmakeup}
\def\dostartmakeup[#1][#2]%
@@ -101,13 +101,14 @@
%D The simple case:
-\def\donostartmakeup%
+\def\donostartmakeup
{\pagina
\setupheader[\c!status=\v!leeg]%
\setupfooter[\c!status=\v!leeg]%
+ \setsystemmode\v!opmaak
\vbox to \teksthoogte\bgroup\hsize\tekstbreedte}
-\def\donostopmakeup%
+\def\donostopmakeup
{\egroup
\flushmarks % new, here, else empty pages
\pagina
@@ -117,14 +118,15 @@
\newbox\makeupbox
-\def\dodostartmakeup%
+\def\dodostartmakeup
{\doifvaluesomething{\??do\currentmakeup\c!pagina}
{\ExpandFirstAfter\pagina[\makeupparameter\c!pagina]}
\soortpagina[\currentmakeup]
+ \setsystemmode\v!opmaak
\setupmakeuplayout
\makeupparameter\c!commandos
-\startregistercolor[\makeupparameter\c!kleur]%
- \global\setbox\makeupbox=\vbox to \makeupparameter\c!hoogte
+ \startregistercolor[\makeupparameter\c!kleur]%
+ \global\setbox\makeupbox\vbox to \makeupparameter\c!hoogte
\bgroup
\forgetall
\hsize\makeupparameter\c!breedte
@@ -132,7 +134,7 @@
{\expanded{\steluitlijnenin[\makeupparameter\c!uitlijnen]}}%
\makeupparameter\c!boven}
-\def\dodostopmakeup%
+\def\dodostopmakeup
{\endgraf
\makeupparameter\c!onder
\egroup
@@ -159,7 +161,7 @@
\global\geselecteerdfalse
\fi}
-\def\doshipoutmakeup%
+\def\doshipoutmakeup
{\pushmacro\@@pnstatus % new
\makeupparameter\c!voor
\vbox{\hbox{\color[\makeupparameter\c!kleur]{\box\makeupbox}}}%
@@ -174,7 +176,7 @@
\pagina,
% \verlaagpaginanummer, % new
\v!leeg=>\setupmakeuplayout
- \pagebodyornamentsfalse
+ \global\pagebodyornamentsfalse
\null\pagina]%
% \verlaagpaginanummer]% % new
\fi \fi
@@ -185,7 +187,7 @@
%D by setting their associated status variables. The
%D connection between them is made by the following macro
-\def\setupmakeuplayout%
+\def\setupmakeuplayout
{\setupfooter[\c!status=\makeupparameter\c!voetstatus ]%
\setupheader[\c!status=\makeupparameter\c!hoofdstatus]%
\setuptext [\c!status=\makeupparameter\c!tekststatus]%
diff --git a/tex/context/base/page-mar.tex b/tex/context/base/page-mar.tex
index 117548a56..442de4a35 100644
--- a/tex/context/base/page-mar.tex
+++ b/tex/context/base/page-mar.tex
@@ -69,12 +69,12 @@
{\ifcase\margetekstnummer\relax
\def\margetekstnummer{#2}%
\fi}
- {}%
+ \donothing
\doifnumberelse\margetekstnummer
{\ifnum\margetekstnummer>25 % to be translated
- \writestatus{\m!systems}{potential margin stack overflow (\margetekstnummer)}%
+ \writestatus\m!systems{potential margin stack overflow (\margetekstnummer)}%
\fi}
- {}%
+ \donothing
\processaction
[\getvalue{\??im\margetekstnummer\c!uitlijnen}]
[ \v!ja=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{#2},
@@ -85,64 +85,60 @@
\v!midden=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{\v!midden},
\v!rechts=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{\v!rechts},
\s!default=>\setvalue{\??im\margetekstnummer\c!uitlijnen}{#2}]%
- \setbox0=\vbox\localframed
+ \setbox0\vbox\localframed
[\??im\margetekstnummer]
[\c!strut=\v!nee]
{\decrement\margetekstregels
\@@imvoor
- \doattributes
- {\??im\margetekstnummer}\c!letter\c!kleur
- {\dorecurse{\margetekstregels}{\strut\\}%
- \xdef\margestrutheight{\the\ht\strutbox}%
- \begstrut#6\endstrut\endgraf}%
+ \dostartattributes{\??im\margetekstnummer}\c!letter\c!kleur\empty
+ \dorecurse\margetekstregels{\strut\\}%
+ \xdef\margestrutheight{\the\ht\strutbox}%
+ \begstrut#6\endstrut\endgraf
+ \dostopattributes
\@@imna}%
- \ht0=\ht\strutbox
+ \ht0\ht\strutbox
\box0
\egroup
#5\relax}
-\def\plaatsmargetekstscheider%
- {\ifnum\margincontent>0
+\def\plaatsmargetekstscheider
+ {\ifnum\margincontent>\zerocount
\bgroup
\dimen0=\margetekstregels\lineheight
- \advance\dimen0 by -\lineheight
+ \advance\dimen0 -\lineheight
\lower\dimen0\hbox{\margetekstscheider}%
\egroup
\fi}
\def\linkermargetekstblok#1%
- {\maakmargetekstblok
- {\linkermargebreedte}
- {\v!links}{\v!rechts}
+ {\maakmargetekstblok \leftmargintextwidth \v!links \v!rechts
{\llap{\plaatsmargetekstscheider}}{\hskip\margetekstafstand}
{#1}}
\def\rechtermargetekstblok#1%
- {\maakmargetekstblok
- {\rechtermargebreedte}
- {\v!rechts}{\v!links}
+ {\maakmargetekstblok \rightmargintextwidth \v!rechts \v!links
{\hskip\margetekstafstand}{\rlap{\plaatsmargetekstscheider}}
{#1}}
\def\doplacemargintext#1#2#3%
{\strut
- \setbox0=\hbox{#1}%
- \dimen0=\ht0
- \advance\dimen0 by \dp0
+ \setbox0\hbox{#1}%
+ \dimen0\ht0
+ \advance\dimen0 \dp0
\ifdim\dimen0>\marginheight
- \global\marginheight=\dimen0
+ \global\marginheight\dimen0
\fi
- \setbox0=\hbox
+ \setbox0\hbox
{#2{\hskip#3\strut
\iflowinmargin\else
- \dimen0=\dp\strutbox
- \advance\dimen0 by \margestrutheight
- \advance\dimen0 by -\ht\strutbox
+ \dimen0\dp\strutbox
+ \advance\dimen0 \margestrutheight
+ \advance\dimen0 -\ht\strutbox
\raise\dimen0
\fi
\box0}}%
- \ht0=\!!zeropoint
- \dp0=\!!zeropoint
+ \ht0\zeropoint
+ \dp0\zeropoint
\gdef\margestrutheight{\the\ht\strutbox}%
%\graphicvadjust{\box0}} % fails in high math lines, let it be
%\hbox{\lower\dp\strutbox\box0}} % alas, wrong lapping, therefore useless
@@ -164,14 +160,20 @@
\def\dopositionmarginbox#1{\graphicvadjust{\box#1}}
\fi
+\def\leftmargintextdistance {\getvalue{\??im\v!links \c!afstand}}
+\def\rightmargintextdistance {\getvalue{\??im\v!rechts\c!afstand}}
+
+\def\leftmargintextwidth {\getvalue{\??im\v!links \c!breedte}}
+\def\rightmargintextwidth {\getvalue{\??im\v!rechts\c!breedte}}
+
\def\doinlinker#1%
{\doplacemargintext
- {\linkermargetekstblok{#1}\hskip\linkermargeafstand}
+ {\linkermargetekstblok{#1}\hskip\leftmargintextdistance}
\llap\!!zeropoint}
\def\doinrechter#1%
{\doplacemargintext
- {\hskip\rechtermargeafstand\rechtermargetekstblok{#1}}
+ {\hskip\rightmargintextdistance\rechtermargetekstblok{#1}}
\rlap\hsize}
\newcounter \nofmarginnotes
@@ -180,9 +182,9 @@
\definetwopasslist{\s!margin}
-\def\domarginreference%
+\def\domarginreference
{\doglobal\increment\nofmarginnotes\relax
- \edef\writemarref%
+ \edef\writemarref
{\writeutilitycommand%
{\twopassentry%
{\s!margin}%
@@ -203,7 +205,7 @@
\def\doinmargenormal#1#2#3%
{\bgroup
\iftrackingmarginnotes
- \gettwopassdata{\s!margin}%
+ \gettwopassdata\s!margin
\iftwopassdatafound
\dodoinmargenormal\twopassdata#1#2{#3}%
\else
@@ -227,7 +229,7 @@
\def\dodoinmarge[#1][#2][#3][#4][#5]#6%
{\ignorespaces
\bgroup\postponefootnotes % group is (somehow) needed
- \doifinsetelse{\v!laag}{#4}
+ \doifinsetelse\v!laag{#4}
{\lowinmargintrue}
{\lowinmarginfalse}%
\processaction
@@ -236,28 +238,27 @@
\v!rechts=>#3{#6},
\s!unknown=>\ifdubbelzijdig
\doifcommonelse{+,-}{#4}
- {\doinmargereverse#2#3{#6}}
- {\doinmargenormal#2#3{#6}}%
+ \doinmargereverse\doinmargenormal#2#3{#6}%
\else
#2{#6}%
\fi]%
- \rawpagereference{\s!mar}{#5}%
+ \rawpagereference\s!mar{#5}%
\flushnotes\egroup % don't forget the group
\ignorespaces}
-\def\inlinker%
+\def\inlinker
{\indentation\doquintupleempty\doinmarge
[\v!links][\doinlinker][\doinrechter]}
-\def\inrechter%
+\def\inrechter
{\indentation\doquintupleempty\doinmarge
[\v!rechts][\doinlinker][\doinrechter]}
-\def\inmarge%
+\def\inmarge
{\doquintupleempty\doinmarge
[\@@implaats][\doinlinker][\doinrechter]}
-\def\inanderemarge%
+\def\inanderemarge
{\doquintupleempty\doinmarge
[\@@implaats][\doinrechter][\doinlinker]}
@@ -270,7 +271,7 @@
\let\restoreinterlinepenalty=\relax
-\def\flushmargincontents%
+\def\flushmargincontents
{\restoreinterlinepenalty % here?
\ifcase\margincontent\else % called quite often, so we
\expandafter\doflushmargincontents % speed up the \fi scan by
@@ -311,14 +312,14 @@
% \doglobal\newcounter\margincontent
% \egroup}
-\def\doflushmargincontents% % links + rechts
+\def\doflushmargincontents % links + rechts
{\bgroup
\forgetall
\global\marginheight\zeropoint
- \dorecurse{\margincontent}
+ \dorecurse\margincontent
{\bgroup
- \edef\margetekstafstand {\getvalue{\??im\recurselevel\c!afstand}}%
- \edef\margetekstregels {\getvalue{\??im\recurselevel\c!regel}}%
+ \edef\margetekstafstand {\getvalue{\??im\recurselevel\c!afstand }}%
+ \edef\margetekstregels {\getvalue{\??im\recurselevel\c!regel }}%
\edef\margetekstscheider{\getvalue{\??im\recurselevel\c!scheider}}%
\let\margetekstnummer\recurselevel
\getvalue{\??im\recurselevel}%
@@ -335,10 +336,10 @@
\advance\marginheight \pagetotal
\advance\marginheight \lineheight % a sort of bonus
\ifdim\marginheight>\pagegoal
- \xdef\restoreinterlinepenalty%
+ \xdef\restoreinterlinepenalty
{\global\let\restoreinterlinepenalty\relax
\global\interlinepenalty=\the\interlinepenalty}% keep = here
- \global\interlinepenalty=10000
+ \global\interlinepenalty10000
\fi
\else % We need the above because interlinepenalties overrule vadjusted \nobreaks.
%\vadjust
@@ -364,7 +365,7 @@
{\doglobal\increment\margincontent
\stelinmargein[\margincontent][]% see next macro
\ifsecondargument
- \doifnumberelse{#1}
+ \doifnumberelse{#1} % only one #3 (after test)
{\docomplexmargewoord{#2}{#1}{#3}}
{\docomplexmargewoord{#1}{#2}{#3}}%
\else
@@ -385,19 +386,16 @@
\def\margewoord%
{\dodoubleempty\complexmargewoord}
-\def\margetitel%
- {\margewoord}
-
-\def\margetekst%
- {\margewoord}
+\def\margetitel{\margewoord}
+\def\margetekst{\margewoord}
\def\oplinker#1%
{\strut
\graphicvadjust
{\mindermeldingen
- \setbox0=\vtop{\forgetall\strut#1}%
+ \setbox0\vtop{\forgetall\strut#1}%
\getboxheight\dimen0\of\box0
- \vskip-\dimen0\
+ \vskip-\dimen0 % waarom stond hier een \ ?
\box0}}
\def\resetmargincontent % quick hack
@@ -417,13 +415,13 @@
\def\inleftmargin#1%
{\pushindentation
- \llap{#1\hskip\leftskip\hskip\linkermargeafstand}%
+ \llap{#1\hskip\leftskip\hskip\leftmargintextdistance}%
\popindentation
\ignorespaces}
\def\inrightmargin#1%
{\pushindentation
- \rlap{\hskip\hsize\hskip-\rightskip\hskip\rechtermargeafstand#1}%
+ \rlap{\hskip\hsize\hskip-\rightskip\hskip\rightmargintextdistance#1}%
\popindentation
\ignorespaces}
@@ -459,12 +457,36 @@
%D \haalbuffer
%D \egroup
+%D New, yet undocumented:
+%D
+%D used for pascal:
+%D
+%D \starttypen
+%D \index {test} test \index {west} west \index {rest} rest
+%D
+%D \startnarrower
+%D \placeregister[index][alternative=b,command=\atleftmargin]
+%D \stopnarrower
+%D \stoptypen
+
+\def\atleftmargin#1%
+ {\pushindentation
+ \llap{\rlap{#1}\hskip\leftskip}%
+ \popindentation
+ \ignorespaces}
+
+\def\atrightmargin#1%
+ {\pushindentation
+ \rlap{\hskip\hsize\hskip-\rightskip\llap{#1}}%
+ \popindentation
+ \ignorespaces}
+
% dit zijn voorlopig lokale commando's
\def\woordinlinker {\inleftmargin} % vervallen
\def\woordinrechter{\inrechtermarge} % vervallen
-\def\woordinmarge%
+\def\woordinmarge
{\doquintupleempty\doinmarge
[\@@implaats][\woordinlinker][\woordinrechter]}
@@ -480,24 +502,28 @@
\stelinmargein
[\v!links]
- [\c!plaats=\v!links]
-% \c!uitlijnen=\v!links] % njet
+ [\c!afstand=\linkermargeafstand,
+ \c!breedte=\linkermargebreedte,
+ %\c!uitlijnen=\v!links, % njet
+ \c!plaats=\v!links]
\stelinmargein
[\v!rechts]
- [\c!plaats=\v!rechts]
-% \c!uitlijnen=\v!rechts] % njet
+ [\c!afstand=\rechtermargeafstand,
+ \c!breedte=\rechtermargebreedte,
+ %\c!uitlijnen=\v!rechts, % njet
+ \c!plaats=\v!rechts]
\newbox\facingbox
\newbox\facingpage
\newif\iffacingpages \facingpagesfalse
-\def\shipoutfacingpage%
+\def\shipoutfacingpage
{\iffacingpages
- \ifnum\realpageno>1
+ \ifnum\realpageno>\plusone
\bgroup
- \pagebodyornamentsfalse
+ \global\pagebodyornamentsfalse
\setbox\facingpage\vbox to \zethoogte
{\unvbox\facingpage\vfil}%
\myshipout{\buildpagebody\box\facingpage}%
@@ -507,13 +533,13 @@
\fi
\fi}
-\def\naastpagina%
+\def\naastpagina
{\shipoutfacingpage}
-\def\facefloat% redefined
+\def\facefloat % redefined
{\startnaast\box\floatbox\stopnaast}
-\def\startnaast% beter: \dowithnextbox
+\def\startnaast % beter: \dowithnextbox
{\iffacingpages
\global\setbox\facingbox\vbox
\bgroup
@@ -522,7 +548,7 @@
\@EA\gobbleuntil\@EA\stopnaast
\fi}
-\def\stopnaast%
+\def\stopnaast
{\egroup
\global\setbox\facingpage\vbox
{\ifvoid\facingpage
@@ -535,11 +561,11 @@
\def\dostelnaastplaatsenin[#1]%
{\getparameters[\??np][#1]%
- \doifelse{\@@npstatus}{\v!start}
+ \doifelse\@@npstatus\v!start
{\global\facingpagestrue}
{\global\facingpagesfalse}}
-\def\stelnaastplaatsenin%
+\def\stelnaastplaatsenin
{\dosingleargument\dostelnaastplaatsenin}
\stelnaastplaatsenin
diff --git a/tex/context/base/page-mul.tex b/tex/context/base/page-mul.tex
index c5efdb741..b29597af6 100644
--- a/tex/context/base/page-mul.tex
+++ b/tex/context/base/page-mul.tex
@@ -15,10 +15,10 @@
%D This module is mostly a copy from the original multi column
%D routine as implemented in \type {core-mul}. When the main
-%D OTR macro's were isolated in modules and when Kluwer
-%D Academic Publishers needed more advanced footnote support,
-%D this module became part of the OTR modules. As a result this
-%D module is no longer generic.
+%D OTR macro's were isolated in modules and column sets were
+%D introduced, this module became part of the OTR modules. As
+%D a result this module is no longer generic. It also needs
+%D an overhaul.
\unprotect
@@ -38,6 +38,12 @@
\let\OTRMULflushsavedfloats \relax
\newtoks \OTRMULoutput
+
+\def\OTRMULgotonextpage
+ {\ejectpage}
+
+\def\OTRMULgotonextpageX % will become obsolete
+ {\superejectpage}
% check \count<insert> multiplications
@@ -189,10 +195,10 @@
% %D In fact, the column height and width are set by means of
% %D two macro's. One can change their meaning if needed:
%
-% \def\setcolumntextheight%
+% \def\setcolumntextheight
% {\def\columntextheight{\teksthoogte}}
%
-% \def\setcolumntextwidth%
+% \def\setcolumntextwidth
% {\def\columntextwidth{\zetbreedte}}
%D Both macros are redefined in \CONTEXT\ when backgrounds
@@ -207,21 +213,20 @@
\newdimen\columnwidth
\newdimen\gutterwidth
-\def\determinecolumnwidth%
+\def\determinecolumnwidth
{\bgroup
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\setcolumnhsize
- \global\columnwidth=\usercolumnwidth
- \global\gutterwidth=\intercolumnwidth}%
+ \global\columnwidth\usercolumnwidth
+ \global\gutterwidth\intercolumnwidth}%
\egroup}
%D Going to a new columns is done by means of a
%D \type{\ejectcolumn}. The following definition does not
%D always work.
-\def\ejectcolumn%
- {\goodbreak
- \showmessage{\m!columns}{2}{}}
+\def\ejectcolumn
+ {\goodbreak\showmessage\m!columns2\empty}
%D The next macro should never be called so let's deal with it.
%D There were several solutions to these kind of errors. First
@@ -246,58 +251,127 @@
%D routines, every (although seldom) warning gives me the
%D creeps!
-\def\balancingerror%
- {\showmessage{\m!columns}{3}{}%
+\def\balancingerror
+ {\showmessage\m!columns3\empty
\finaloutput\unvbox\normalpagebox}
-\def\OTRMULsometopsfloat{\showmessage{\m!columns}{4}{}\someherefloat}
-\def\OTRMULsomebotsfloat{\showmessage{\m!columns}{5}{}\someherefloat}
+\def\OTRMULsometopsfloat{\showmessage\m!columns4\empty \someherefloat}
+\def\OTRMULsomebotsfloat{\showmessage\m!columns5\empty \someherefloat}
\def\OTRMULsomeherefloat{\OTRONEsomeherefloat}
%D The local column width is available in the dimension
%D register \type{\localcolumnwidth}, which is calculated as:
-\def\setcolumnhsize% beware, this one is available for use in macros
- {\setbox0=\hbox
- {\parindent\!!zeropoint\betweencolumns}%
- \intercolumnwidth=\wd0
- \localcolumnwidth=\columntextwidth
- \advance\localcolumnwidth by -\leftskip
- \advance\localcolumnwidth by -\rightskip
- \advance\localcolumnwidth by -\nofcolumns\intercolumnwidth
- \advance\localcolumnwidth by \intercolumnwidth
- \divide\localcolumnwidth by \nofcolumns
+\def\setcolumnhsize % beware, this one is available for use in macros
+ {\setbox0\hbox
+ {\parindent\zeropoint\betweencolumns}%
+ \intercolumnwidth\wd0
+ \localcolumnwidth\columntextwidth
+ \advance\localcolumnwidth -\leftskip
+ \advance\localcolumnwidth -\rightskip
+ % new
+ \advance\localcolumnwidth -\colleftskip
+ \advance\localcolumnwidth -\colrightskip
+ %
+ \advance\localcolumnwidth -\nofcolumns\intercolumnwidth
+ \advance\localcolumnwidth \intercolumnwidth
+ \divide\localcolumnwidth \nofcolumns
\dimen0=\columntextoffset
- \multiply\dimen0 by 2
- \advance\localcolumnwidth by -\dimen0
- \usercolumnwidth=\localcolumnwidth
- \hsize=\localcolumnwidth} % we don't do it \global
+ \multiply\dimen0 2
+ \advance\localcolumnwidth -\dimen0
+ \usercolumnwidth\localcolumnwidth
+ \hsize\localcolumnwidth} % we don't do it \global
+
+%D Torture test:
+%D
+%D \startbuffer
+%D \startbuffer[b]
+%D \startkolommen
+%D \input tufte
+%D \stopkolommen
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startsmaller
+%D \input tufte
+%D \stopsmaller
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startkolommen \startsmaller
+%D \input tufte
+%D \stopsmaller \stopkolommen
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startsmaller \startkolommen
+%D \input tufte
+%D \stopkolommen \stopsmaller
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startkolommen \startsmaller[left]
+%D \input tufte
+%D \stopsmaller \stopkolommen
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startsmaller[left] \startkolommen
+%D \input tufte
+%D \stopkolommen \stopsmaller
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startsmaller \startkolommen \startsmaller
+%D \input tufte
+%D \stopsmaller\stopkolommen \stopsmaller
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D
+%D \startbuffer[b]
+%D \startsmaller[left] \startkolommen \startsmaller
+%D \input tufte
+%D \stopsmaller\stopkolommen \stopsmaller
+%D \stopbuffer
+%D \typebuffer[b] \haalbuffer[b]
+%D \stopbuffer
+%D
+%D \start
+%D \def\postprocesscolumnline#1{\ruledhbox{\strut\box#1}\hss}
+%D \haalbuffer
+%D \stop
%D One should be aware that when font related dimensions are
%D used in typesetting the in||between material, these
%D dimensions are influenced by bodyfont switches inside
%D multi||column mode.
-\def\setcolumnvsize%
- {%\global\vsize=\columntextheight
- \global\vsize=-\columntextoffset
- \global\multiply\vsize by 2
- \global\advance\vsize by \columntextheight
+\def\setcolumnvsize
+ {%\global\vsize\columntextheight
+ \global\vsize-\columntextoffset
+ \global\multiply\vsize 2
+ \global\advance\vsize \columntextheight
\ifdim\precolumnboxheight>\zeropoint
- \global\advance\vsize by -\precolumnboxheight
+ \global\advance\vsize -\precolumnboxheight
\fi
%\getinsertionheights\to\dimen0\\%
- %\global\advance\vsize by -\dimen0
+ %\global\advance\vsize -\dimen0
\settotalinsertionheight
\global\advance\vsize -\totalinsertionheight
%%%\ifgridsnapping % evt altijd, nog testen, testing now, see columned tocs
\getnoflines\vsize
- \vsize=\noflines\openlineheight
- \advance\vsize by .5\openlineheight % collect enough data
+ \vsize\noflines\openlineheight
+ \advance\vsize .5\openlineheight % collect enough data
%%%\fi
- \global\vsize=\nofcolumns\vsize
- \global\pagegoal=\vsize} % let's do it only here
+ \global\vsize\nofcolumns\vsize
+ \global\pagegoal\vsize} % let's do it only here
%D It really starts here. After some checks and initializations
%D we change the output routine to continous multi||column
@@ -316,60 +390,68 @@
%D Watch the trick with the \type{\vbox}. This way we get the
%D right interlining and white space.
-\def\beginmulticolumns%
+\def\beginmulticolumns
{\par
\flushnotes
\xdef\precolumndepth{\the\prevdepth}%
\begingroup
+ % new
+ \leftskip1\leftskip
+ \rightskip1\rightskip
+ \edef\colleftskip {\the\leftskip}%
+ \edef\colrightskip{\the\rightskip}%
+ \leftskip\zeropoint
+ \rightskip\zeropoint
+ %
\dontshowcomposition
%\setcolumntextwidth\relax
%\setcolumntextheight\relax
- \widowpenalty=0 % is gewoon beter
- \clubpenalty=0 % zeker bij grids
+ \widowpenalty\zerocount % is gewoon beter
+ \clubpenalty \zerocount % zeker bij grids
\ifsomefloatwaiting
- \showmessage{\m!columns}{6}{\the\savednoffloats}%
- \global\setbox\savedfloatlist=\box\floatlist
+ \showmessage\m!columns6{\the\savednoffloats}%
+ \global\setbox\savedfloatlist\box\floatlist
\xdef\restoresavedfloats%
- {\global\savednoffloats=\the\savednoffloats
- \global\setbox\floatlist=\box\savedfloatlist
+ {\global\savednoffloats\the\savednoffloats
+ \global\setbox\floatlist\box\savedfloatlist
\global\noexpand\somefloatwaitingtrue}%
- \global\savednoffloats=0
+ \global\savednoffloats\zerocount
\global\somefloatwaitingfalse
\else
- \global\let\restoresavedfloats=\relax
+ \global\let\restoresavedfloats\relax
\fi
- \dimen0=\pagetotal
- \advance\dimen0 by \parskip
- \advance\dimen0 by \openlineheight
+ \dimen0\pagetotal
+ \advance\dimen0 \parskip
+ \advance\dimen0 \openlineheight
\ifdim\dimen0<\pagegoal
\allowbreak
\else
\break % Sometimes fails
\fi
- \appendtoks\topskip=1\topskip\to\everybodyfont
+ \appendtoks\topskip1\topskip\to\everybodyfont
\the\everybodyfont
\initializecolumns\nofcolumns
- \hangafter=0
- \hangindent=\!!zeropoint
- \everypar{}%
+ \hangafter\zerocount
+ \hangindent\zeropoint
+ \everypar\emptytoks
\ifdim\pagetotal=\zeropoint \else
\vbox{\forgetall\strut}%
\vskip-\openlineheight
\fi
- \global\savedpagetotal=\pagetotal
- \global\singlecolumnout=\output
-% \global\output={\global\setbox\precolumnbox=\vbox{\unvbox\normalpagebox}}%
-\global\output={\global\setbox\precolumnbox=\vbox{\dotopinsertions\unvbox\normalpagebox}}%
+ \global\savedpagetotal\pagetotal
+ \global\singlecolumnout\output
+ %\global\output{\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}}%
+ \global\output{\global\setbox\precolumnbox\vbox{\dotopinsertions\unvbox\normalpagebox}}%
\eject % no \holdinginserts=1, can make footnote disappear !
- \global\precolumnboxheight=\ht\precolumnbox
- \global\output={\continuousmulticolumnsout}%
+ \global\precolumnboxheight\ht\precolumnbox
+ \global\output{\continuousmulticolumnsout}%
\setcolumnfloats
\dohandleallcolumns
- {\global\setbox\currenttopcolumnbox=\box\voidb@x}%
+ {\global\setbox\currenttopcolumnbox\box\voidb@x}%
\checkbegincolumnfootnotes
-\activateotr{MUL}{ONE}% todo ! ! ! !
- \let\sethsize=\setcolumnhsize
- \let\setvsize=\setcolumnvsize
+ \activateotr{MUL}{ONE}% todo ! ! ! !
+ \let\sethsize\setcolumnhsize
+ \let\setvsize\setcolumnvsize
\sethsize
\setvsize
\showcomposition}
@@ -389,7 +471,7 @@
%D e.g. when there is no text given between \type{\begin..}
%D and \type{\end..}. The \type{\par} is needed!
-\def\endmulticolumns%
+\def\endmulticolumns
{%\par
\vskip\lineheight\vskip-\lineheight % take footnotes into account
\dontshowcomposition
@@ -398,22 +480,22 @@
\flushnotes % before start of columns
\par
\ifbalancecolumns
- \global\output={\continuousmulticolumnsout}%
+ \global\output{\continuousmulticolumnsout}%
\goodbreak
- \global\output={\balancedmulticolumnsout}%
+ \global\output{\balancedmulticolumnsout}%
\else
\goodbreak
\fi
\eject % the prevdepth is important, try e.g. toclist in
- \prevdepth\!!zeropoint % columns before some noncolumned text text
- \global\output=\singlecolumnout
-\global\output={\the\mainoutput}% % % % % todo
+ \prevdepth\zeropoint % columns before some noncolumned text text
+ \global\output\singlecolumnout
+ \global\output{\the\mainoutput}% % % % % todo
\ifvoid\precolumnbox\else
\unvbox\precolumnbox
\fi
- \global\precolumnboxheight=\!!zeropoint
+ \global\precolumnboxheight\zeropoint
\endgroup % here
- \nofcolumns=1
+ \nofcolumns\plusone
\setvsize % the outer one!
\checkendcolumnfootnotes
\dosomebreak\allowbreak
@@ -456,14 +538,14 @@
%D {\maxcolumndepth} when generating material between columns
%D as well as postprocessing column lines.
-\let\maxcolumnheight=\!!zeropoint
-\let\maxcolumndepth =\!!zeropoint
+\let\maxcolumnheight=\zeropoint
+\let\maxcolumndepth =\zeropoint
\newbox\columnpagebox
-\def\setmaxcolumndimensions%
- {\let\maxcolumnheight=\!!zeropoint
- \let\maxcolumndepth =\!!zeropoint
+\def\setmaxcolumndimensions
+ {\let\maxcolumnheight\!!zeropoint
+ \let\maxcolumndepth \!!zeropoint
\dohandleallcolumns
{\ifdim\ht\currentcolumnbox>\maxcolumnheight
\edef\maxcolumnheight{\the\ht\currentcolumnbox}%
@@ -472,7 +554,7 @@
\edef\maxcolumndepth{\the\dp\currentcolumnbox}%
\fi}}
-\def\flushcolumnedpage%
+\def\flushcolumnedpage
{\bgroup
\forgetall
\setmulticolumnsout
@@ -480,17 +562,18 @@
\setmaxcolumndimensions
\postprocesscolumns
\dohandleallcolumns % \hbox i.v.m. \showcomposition
- {\global\setbox\currentcolumnbox=\hbox to \localcolumnwidth
+ {\global\setbox\currentcolumnbox\hbox to \localcolumnwidth
{\box\currentcolumnbox
- \global\wd\currentcolumnbox=\localcolumnwidth
+ \global\wd\currentcolumnbox\localcolumnwidth
\ifheightencolumns
- \global\ht\currentcolumnbox=\fixedcolumnheight
+ \global\ht\currentcolumnbox\fixedcolumnheight
\fi}}%
\setmaxcolumndimensions
\overlaycolumnfootnotes
- \setbox\columnpagebox=\vbox
+ \setbox\columnpagebox\vbox
{\hbox to \finalcolumntextwidth
- {\ifreversecolumns
+ {\hskip\colleftskip\relax % new, \relax needed
+ \ifreversecolumns
\@EA\dohandlerevcolumns
\else
\@EA\dohandleallcolumns
@@ -499,53 +582,58 @@
{\ifx\finishcolumnbox\relax\else\strut\fi
\box\currentcolumnbox}}%
\hfil}%
- \unskip}}%
- \scratchdimen=\!!zeropoint
+ \unskip
+ \hskip\colrightskip}}% new
+ \scratchdimen\zeropoint
\dohandleallcolumns
{\ifdim-\ht\currenttopcolumnbox<\scratchdimen
- \scratchdimen=-\ht\currenttopcolumnbox
+ \scratchdimen-\ht\currenttopcolumnbox
\fi
- \global\setbox\currenttopcolumnbox=\box\voidb@x}%
- \advance\scratchdimen by \ht\columnpagebox
- \setbox\scratchbox=\hbox to \columntextwidth
+ \global\setbox\currenttopcolumnbox\box\voidb@x}%
+ \advance\scratchdimen \ht\columnpagebox
+ \setbox\scratchbox\hbox to \columntextwidth
{\vrule
- \!!width\!!zeropoint
+ \!!width\zeropoint
\!!height\scratchdimen
\!!depth\dp\columnpagebox
- \dostepwiserecurse{2}{\nofcolumns}{1}{\hfil\betweencolumns}\hfil}%
- \setbox\columnpagebox=\hbox
+ \dostepwiserecurse2\nofcolumns1{\hfil\betweencolumns}\hfil}%
+ \setbox\columnpagebox\hbox
{\box\columnpagebox
\hskip-\columntextwidth
\restoretextcolor{\box\scratchbox}}%
\postprocesscolumnpagebox % new, acts upon \box\columnpagebox
- \ifvoid\precolumnbox \else
- \ifgridsnapping % do you believe this junk?
- \scratchdimen=\savedpagetotal
- \advance\scratchdimen by -\ht\precolumnbox
- \advance\scratchdimen by -\dp\precolumnbox
- \advance\scratchdimen by -\topskip
- \box\precolumnbox
- \kern\scratchdimen
+ \ifvoid\precolumnbox
+ \else
+ % next some incredible crappy code
+ \ifgridsnapping
+ % somehow this junk fails in pascal
+ \scratchdimen\savedpagetotal
+ \advance\scratchdimen -\ht\precolumnbox
+ \advance\scratchdimen -\dp\precolumnbox
+ \advance\scratchdimen -\topskip
+ \box\precolumnbox
+ \kern\scratchdimen
\else
\unvbox\precolumnbox
\fi
\fi
- \global\precolumnboxheight=\!!zeropoint
+ \global\precolumnboxheight\zeropoint
\setvsize
\dosomebreak\nobreak
-% wrong ! ! ! ! !
-% \ifgridsnapping \else
-% \scratchdimen=\topskip
-% \advance\scratchdimen by -\openstrutheight
-% \nointerlineskip
-% \vskip-\scratchdimen
-% \fi
+ % wrong, but keep it as a reminder
+ % \ifgridsnapping \else
+ % \scratchdimen\topskip
+ % \advance\scratchdimen -\openstrutheight
+ % \nointerlineskip
+ % \vskip-\scratchdimen
+ % \fi
+ % so that we don't add it again
\prevdepth\openstrutdepth
\nointerlineskip
- \dp\columnpagebox=\!!zeropoint
- \global\finalcolumnheights=\ht\columnpagebox
+ \dp\columnpagebox\zeropoint
+ \global\finalcolumnheights\ht\columnpagebox
\getnoflines\finalcolumnheights
- \global\finalcolumnlines=\noflines
+ \global\finalcolumnlines\noflines
\box\columnpagebox
\egroup}
@@ -596,31 +684,32 @@
%D This feature is implemented using the reshape macros
%D presented in \type{supp-box}.
-\def\postprocesscolumns%
+\def\postprocesscolumns
{\ifx\postprocesscolumnline\undefined \else
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\vtop
+ {\global\setbox\currentcolumnbox\vtop
{\beginofshapebox
\unvbox\currentcolumnbox
\unskip\unskip
\endofshapebox
\reshapebox
- {\dimen0=\ht\shapebox
- \dimen2=\dp\shapebox
- \setbox\shapebox=\hbox to \hsize
+ {\dimen0\ht\shapebox
+ \dimen2\dp\shapebox
+ \setbox\shapebox\hbox to \hsize
{\postprocesscolumnline\shapebox}%
- \ht\shapebox=\dimen0
- \dp\shapebox=\dimen2
+ \ht\shapebox\dimen0
+ \dp\shapebox\dimen2
\box\shapebox}%
\flushshapebox
- \everypar{}\parskip\!!zeropoint % = \forgetall
+ \everypar\emptytoks
+ \parskip\zeropoint % = \forgetall
\strut\endgraf
\vskip-\lineheight
\vfil}}%
\fi
\ifx\postprocesscolumnbox\undefined \else
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\hbox
+ {\global\setbox\currentcolumnbox\hbox
{\postprocesscolumnbox\currentcolumnbox}}
\fi}
@@ -652,14 +741,15 @@
\def\splitcolumn#1from \box#2to \dimen#3 top \box#4%
{\bgroup
\ifdim\ht#4>\zeropoint
- \dimen0=\dimen#3\relax
- \dimen2=\dimen0
- \advance\dimen0 by -\ht#4%
+ \dimen0\dimen#3\relax
+ \dimen2\dimen0
+ \advance\dimen0 -\ht#4%
\columnfootnotecorrection{#1}{\dimen0}%
- \setbox0=\vsplit#2 to \dimen0
- \global\setbox#1=\vbox to \dimen2
+ \setbox0\vsplit#2 to \dimen0
+ \global\setbox#1\vbox to \dimen2
{\ifgridsnapping
- \dimen0=-\openstrutheight\advance\dimen0 by \topskip
+ \dimen0-\openstrutheight
+ \advance\dimen0 \topskip
\vskip\dimen0\copy#4\vskip-\dimen0
\else
\unvcopy#4%
@@ -669,13 +759,13 @@
\else
\ifcleverfootnotes
\columnfootnotecorrection{#1}{\dimen#3}%
- \setbox0=\vsplit#2 to \dimen#3%
- \global\setbox#1=\vbox to \dimen#3%
+ \setbox0\vsplit#2 to \dimen#3%
+ \global\setbox#1\vbox to \dimen#3%
{\fuzzysnappedbox\unvbox0
\fakecolumnfootnotes{#1}}%
\else
- \global\setbox#1=\vsplit#2 to \dimen#3%
- \global\setbox#1=\vbox
+ \global\setbox#1\vsplit#2 to \dimen#3%
+ \global\setbox#1\vbox
{\fuzzysnappedbox\unvbox{#1}}% % or \box ?
\fi
\fi
@@ -688,7 +778,7 @@
{\splitcolumn\firstcolumnbox from \box#1 to \dimen#2 top \box\firsttopcolumnbox}
\def\splitlastcolumn from \box#1to \dimen#2%
- {\global\setbox\lastcolumnbox=\vbox
+ {\global\setbox\lastcolumnbox\vbox
{\unvcopy\lasttopcolumnbox
\fuzzysnappedbox\unvbox{#1}%
\fakecolumnfootnotes\lastcolumnbox}}
@@ -712,24 +802,24 @@
\fi
\fi}
-\def\overlaycolumnfootnotes% VERVANGEN !!!
+\def\overlaycolumnfootnotes % VERVANGEN !!!
{\relax
\ifcleverfootnotes
\checknotepresence
\ifnotespresent
\bgroup
- \scratchdimen=\ht\firstcolumnbox
- \advance\scratchdimen by -\openstrutdepth % \dp\strutbox
+ \scratchdimen\ht\firstcolumnbox
+ \advance\scratchdimen -\openstrutdepth % \dp\strutbox
\getnoflines\scratchdimen
- \advance\noflines by -2
- \scratchdimen=\noflines\lineheight
- \advance\scratchdimen by \topskip
- \setbox0=\hbox
+ \advance\noflines -2
+ \scratchdimen\noflines\lineheight
+ \advance\scratchdimen \topskip
+ \setbox0\hbox
{\lower\scratchdimen\vbox{\placefootnoteinserts}}%
\ht0=\openstrutheight % \ht\strutbox
\dp0=\openstrutdepth % \dp\strutbox
- \scratchdimen=\ht\lastcolumnbox
- \global\setbox\lastcolumnbox=\vbox to \scratchdimen
+ \scratchdimen\ht\lastcolumnbox
+ \global\setbox\lastcolumnbox\vbox to \scratchdimen
{\box\lastcolumnbox
\vskip-\scratchdimen
\restoretextcolor{\box0}}%
@@ -743,40 +833,40 @@
%D mode was entered, or floats that migrate to next columns.
%D Flushing floats is a delicate process.
-\def\continuousmulticolumnsout%
+\def\continuousmulticolumnsout
{\bgroup
\forgetall
\setmulticolumnsout
\dontshowcomposition
\dimen0=\columntextheight
- \advance\dimen0 by -\precolumnboxheight
+ \advance\dimen0 -\precolumnboxheight
\settotalinsertionheight
- \advance\dimen0 by -\totalinsertionheight
+ \advance\dimen0 -\totalinsertionheight
\ifgridsnapping % evt altijd, nog testen
\getnoflines{\dimen0}
\dimen0=\noflines\openlineheight
\fi
\dohandleallcolumns
{\splitcurrentcolumn from \box\normalpagebox to \dimen0}
- \setbox\restofpage=\vbox{\unvbox\normalpagebox}%
+ \setbox\restofpage\vbox{\unvbox\normalpagebox}%
\ifinheritcolumns
\ifr@ggedbottom % vreemd
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\vbox to \ht\firstcolumnbox
- {\dimen0=\dp\currentcolumnbox
+ {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox
+ {\dimen0\dp\currentcolumnbox
\unvbox\currentcolumnbox
\vskip-\dimen0
\vskip\openstrutdepth % \dp\strutbox
\prevdepth\openstrutdepth % \dp\strutbox
\vfill}}%
\ifbottomnotes \else
- \dimen0=\ht\firstcolumnbox
+ \dimen0\ht\firstcolumnbox
\fi
\fi
\ifn@rmalbottom
- \advance\dimen0 by \maxdepth
+ \advance\dimen0 \maxdepth
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\vbox to \dimen0
+ {\global\setbox\currentcolumnbox\vbox to \dimen0
{\unvbox\currentcolumnbox}}%
\fi
\ifb@selinebottom
@@ -784,7 +874,7 @@
\fi
\else
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\vbox to \dimen0
+ {\global\setbox\currentcolumnbox\vbox to \dimen0
{\ifstretchcolumns
\unvbox\currentcolumnbox
\else
@@ -792,9 +882,9 @@
\vfill
\fi}}%
\dohandleallcolumns
- {\global\ht\currentcolumnbox=\dimen0}%
+ {\global\ht\currentcolumnbox\dimen0}%
\fi
- \setbox\precolumnbox=\vbox{\flushcolumnedpage}%
+ \setbox\precolumnbox\vbox{\flushcolumnedpage}%
\finaloutput\box\precolumnbox
\sethsize
\setvsize
@@ -811,22 +901,22 @@
%D \type{\box4} garantees a more robust check when skips are
%D used.
-\def\balancedmulticolumnsout%
+\def\balancedmulticolumnsout
{\bgroup
\setmulticolumnsout
\dontshowcomposition
- \widowpenalty=0
- \setbox0=\vbox{\unvbox\normalpagebox}%
+ \widowpenalty\zerocount
+ \setbox0\vbox{\unvbox\normalpagebox}%
\ifdim\ht0>\openlineheight % at least one line
\ifnum\minbalancetoplines<2 % balance anyway
\donetrue
\else % check criterium to available lines
\getnoflines{\ht0}%
- \divide\noflines by \nofcolumns \relax
+ \divide\noflines \nofcolumns \relax
\ifnum\noflines<\minbalancetoplines \relax
- \dimen0=\ht0
- \advance\dimen0 by \ht\firsttopcolumnbox
- \advance\dimen0 by \openlineheight \relax % let's play safe
+ \dimen0\ht0
+ \advance\dimen0 \ht\firsttopcolumnbox
+ \advance\dimen0 \openlineheight \relax % let's play safe
\ifdim\dimen0>\columntextheight % column exceeding text height
\donetrue
\else % it seems to fit
@@ -841,40 +931,40 @@
\fi
\ifdone % start balancing
%\ifdim\ht0>\openlineheight
- \dimen0=\ht0
- \advance\dimen0 by \topskip
- \advance\dimen0 by -\baselineskip
+ \dimen0\ht0
+ \advance\dimen0 \topskip
+ \advance\dimen0 -\baselineskip
\dohandleallcolumns
- {\advance\dimen0 by \ht\currenttopcolumnbox}%
- \divide\dimen0 by \nofcolumns
- \vbadness=\!!tenthousand\relax
- \count255=0
+ {\advance\dimen0 \ht\currenttopcolumnbox}%
+ \divide\dimen0 \nofcolumns
+ \vbadness\!!tenthousand\relax
+ \count255=\zerocount
\bgroup
\ifgridsnapping
- \dimen2=\lineheight
+ \dimen2\lineheight
\else
\dimen2=\!!onepoint % RUBISH
\dimen2=\spacingfactor\dimen2
\fi
\loop
- \advance\count255 by 1
- \global\setbox\restofpage=\copy0\relax
+ \advance\count255 \plusone
+ \global\setbox\restofpage\copy0\relax
\splitfirstcolumn from \box\restofpage to \dimen0
\dohandlemidcolumns
{\splitcurrentcolumn from \box\restofpage to \dimen0}%
\splitlastcolumn from \box\restofpage to \dimen0
- \setbox2=\vbox{\unvcopy\firstcolumnbox}%
- \dimen4=\!!zeropoint
+ \setbox2\vbox{\unvcopy\firstcolumnbox}%
+ \dimen4\zeropoint
\dohandleallcolumns
- {\setbox4=\vbox
+ {\setbox4\vbox
{\unvcopy\currentcolumnbox
%rather new, test this on pdftex-z.tex
\unpenalty\unskip\unpenalty\unskip}% maybe better in main splitter
%\writestatus{balance}{\the\currentcolumnbox: \the\ht4}%
- \dimen6=\ht4
+ \dimen6\ht4
\ifdim\dimen6>\dimen4 \dimen4=\dimen6 \fi}%
-\advance\dimen4 by -.0005pt % get rid of accurracy problem, pretty new
- \ifnum\count255>100\relax
+ \advance\dimen4 -.0005pt % get rid of accurracy problem, pretty new
+ \ifnum\count255>100
\donefalse
\else\ifdim\dimen4>\ht2
\donetrue
@@ -882,35 +972,35 @@
\donefalse
\fi\fi
\ifdone
- \advance\dimen0 by \dimen2\relax
+ \advance\dimen0 \dimen2\relax
\repeat
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\vbox{\unvcopy\currentcolumnbox}}% NIEUW
+ {\global\setbox\currentcolumnbox\vbox{\unvcopy\currentcolumnbox}}% NIEUW
\ifnum\count255>100\relax
- \showmessage{\m!columns}{7}{}%
+ \showmessage\m!columns7\empty
\else
- \showmessage{\m!columns}{8}{\the\count255\space}%
+ \showmessage\m!columns8{\the\count255\space}%
\fi
\egroup
\ifinheritcolumns
- \dimen0=\ht\firstcolumnbox
- \dimen2=\ht\firstcolumnbox
- \advance\dimen2 by -\openlineheight
+ \dimen0\ht\firstcolumnbox
+ \dimen2\ht\firstcolumnbox
+ \advance\dimen2 -\openlineheight
\dohandleallcolumns
- {\dimen4=\ht\currentcolumnbox
+ {\dimen4\ht\currentcolumnbox
\dimen6=10\openlineheight
- \global\setbox\currentcolumnbox=\vbox to \dimen0
+ \global\setbox\currentcolumnbox\vbox to \dimen0
{\unvbox\currentcolumnbox
\ifdim\dimen4>\dimen6
\ifdim\dimen4<\dimen0
\ifdim\dimen4>\dimen2
- \vskip\!!zeropoint % !!
+ \vskip\zeropoint % !!
\else
\vskip\openlineheight
\vfill
\fi
\else
- \vskip\!!zeropoint
+ \vskip\zeropoint
\fi
\else
\vskip\openlineheight
@@ -919,20 +1009,20 @@
\else
\bgroup
\ifstretchcolumns
- \dimen0=\ht\firstcolumnbox
+ \dimen0\ht\firstcolumnbox
\dimen2=\bottomtolerance\ht\firstcolumnbox
- \setbox0=\vbox{\unvcopy\lastcolumnbox}%
- \advance\dimen0 by -\ht0\relax
- \advance\dimen0 by -\dp0\relax
+ \setbox0\vbox{\unvcopy\lastcolumnbox}%
+ \advance\dimen0 -\ht0\relax
+ \advance\dimen0 -\dp0\relax
\ifdim\dimen0>\openlineheight\relax
\ifdim\dimen0>\dimen2\relax
% \stretchcolumnsfalse % beter goed slecht dan slecht goed
- \showmessage{\m!columns}{9}{}%
+ \showmessage\m!columns9\empty
\fi
\fi
\fi
\dohandleallcolumns
- {\global\setbox\currentcolumnbox=\vbox to \ht\firstcolumnbox
+ {\global\setbox\currentcolumnbox\vbox to \ht\firstcolumnbox
{\ifstretchcolumns
\unvbox\currentcolumnbox
\else
@@ -942,10 +1032,10 @@
\egroup
\fi
\else
- \showmessage{\m!columns}{10}{}%
- \global\setbox\firstcolumnbox=\vbox{\unvbox0}%
+ \showmessage\m!columns{10}\empty
+ \global\setbox\firstcolumnbox\vbox{\unvbox0}%
\fi
- \global\output={\balancingerror}%
+ \global\output{\balancingerror}%
\b@selinebottomtrue % forces depth in separation rule
\flushcolumnedpage
\allowbreak
@@ -997,42 +1087,42 @@
%D When all those floats are flushed, we switch to the local
%D flushing routine.
-\def\setcolumnfloats%
+\def\setcolumnfloats
{\xdef\globalsavednoffloats{\the\savednoffloats}%
- \ifnum\globalsavednoffloats>0
+ \ifnum\globalsavednoffloats>\zerocount
\setglobalcolumnfloats
\else
\setlocalcolumnfloats
\fi}
-\def\setglobalcolumnfloats%
+\def\setglobalcolumnfloats
{\everypar\emptytoks
- \let\flushcolumnfloat=\relax
- %\let\doroomfloat=\relax
- \let\docheckiffloatfits=\relax
- \let\flushcolumnfloats=\noflushcolumnfloats}
+ \let\flushcolumnfloat\relax
+ %\let\doroomfloat\relax
+ \let\docheckiffloatfits\relax
+ \let\flushcolumnfloats\noflushcolumnfloats}
-\def\setlocalcolumnfloats%
- {\everypar=
+\def\setlocalcolumnfloats
+ {\everypar
{\flushnotes\flushcolumnfloat\flushmargincontents\checkindentation}%
- \let\flushcolumnfloat=\doflushcolumnfloat
- %\let\doroomfloat=\docolumnroomfloat
- \let\docheckiffloatfits=\docolumnroomfloat
- \let\flushcolumnfloats=\doflushcolumnfloats
+ \let\flushcolumnfloat\doflushcolumnfloat
+ %\let\doroomfloat\docolumnroomfloat
+ \let\docheckiffloatfits\docolumnroomfloat
+ \let\flushcolumnfloats\doflushcolumnfloats
\let\doflushfloats\doflushcolumnfloats % new
- \let\dosetbothinserts=\relax
- \let\dotopinsertions=\relax}
+ \let\dosetbothinserts\relax
+ \let\dotopinsertions\relax}
-\def\noflushcolumnfloats%
+\def\noflushcolumnfloats
{\bgroup
\xdef\localsavednoffloats{\the\savednoffloats}%
- \global\savednoffloats=\globalsavednoffloats
+ \global\savednoffloats\globalsavednoffloats
\dotopinsertions
\xdef\globalsavenoffloats{\the\savednoffloats}%
- \ifnum\globalsavednoffloats=0
+ \ifnum\globalsavednoffloats=\zerocount
\setlocalcolumnfloats
\fi
- \global\savednoffloats=\localsavednoffloats
+ \global\savednoffloats\localsavednoffloats
\egroup}
%D We need to calculate the amount of free space in a columns.
@@ -1046,20 +1136,20 @@
\def\getcolumnstatus\column#1\total#2\goal#3\\%
{\dimen0=\ifdim\pagegoal<\maxdimen \pagetotal \else \zeropoint \fi
- \dimen2=\!!zeropoint
- \count255=0
+ \dimen2=\zeropoint
+ \count255=\zerocount
\dimen8=\columntextheight
- \advance\dimen8 by -\precolumnboxheight
- \def\dogetcolumnstatus%
- {\advance\count255 by 1
- \advance\dimen2 by \ht\currenttopcolumnbox
- \advance\dimen2 by \dp\currenttopcolumnbox
- \dimen4=\dimen2
- \advance\dimen4 by \dimen0
+ \advance\dimen8 -\precolumnboxheight
+ \def\dogetcolumnstatus
+ {\advance\count255 \plusone
+ \advance\dimen2 \ht\currenttopcolumnbox
+ \advance\dimen2 \dp\currenttopcolumnbox
+ \dimen4\dimen2
+ \advance\dimen4 \dimen0
\dimen6=\count255\dimen8
\ifdim\dimen4>\dimen6
\else
- \let\dogetcolumnstatus=\relax
+ \let\dogetcolumnstatus\relax
\fi}%
\dohandleallcolumns{\dogetcolumnstatus}%
\ifnum\count255=0 \count255=1 \fi
@@ -1071,14 +1161,14 @@
{\ifdim\pagegoal<\maxdimen
\bgroup
\dimen0=\columntextheight
- \advance\dimen0 by -\pagegoal
+ \advance\dimen0 -\pagegoal
\xdef\insertionheight{\the\dimen0}%
\egroup
\else
\global\let\insertionheight=\zeropoint
\fi}
-\def\docolumnroomfloat%
+\def\docolumnroomfloat
{\ifpostponecolumnfloats
\global\roomforfloatfalse
\else\ifnofloatpermitted
@@ -1086,17 +1176,17 @@
\else
\bgroup
\getcolumnstatus\column\count255\total\dimen0\goal\dimen2\\%
- \advance\dimen0 by 2\openlineheight % nog nodig ?
+ \advance\dimen0 2\openlineheight % nog nodig ?
%\ifnum\count255=\nofcolumns
% \getinsertionheight
% %\message{\insertionheight}\wait
- % \advance\dimen0 by \insertionheight
+ % \advance\dimen0 \insertionheight
%\fi
- \setbox\scratchbox=\vbox % tricky met objecten ?
+ \setbox\scratchbox\vbox % tricky met objecten ?
{\blanko[\@@bkvoorwit]
\snaptogrid\vbox{\copy\floatbox}}%
- \advance\dimen0 by \ht\scratchbox
- \advance\dimen0 by .5\lineheight % needed because goal a bit higher
+ \advance\dimen0 \ht\scratchbox
+ \advance\dimen0 .5\lineheight % needed because goal a bit higher
%\message{column: \the\count255; total: \the\dimen0; goal: \the\dimen2}\wait
\ifdim\dimen0>\dimen2
\global\roomforfloatfalse
@@ -1104,7 +1194,7 @@
\global\roomforfloattrue
\fi
\ifdim\wd\floatbox>\hsize
- \showmessage{\m!columns}{11}{}%
+ \showmessage\m!columns{11}\empty
\global\roomforfloatfalse
\fi
\egroup
@@ -1174,11 +1264,11 @@
% \egroup
% \fi\fi\fi\fi}
-\def\doflushcolumnfloat%
+\def\doflushcolumnfloat
{\ifpostponecolumnfloats\else\ifflushingcolumnfloats\ifprocessingverbatim\else\ifsomefloatwaiting
\bgroup
\forgetall
- \let\doflushcolumnfloat=\relax
+ \let\doflushcolumnfloat\relax
\getcolumnstatus\column\mofcolumns\total\dimen0\goal\dimen2\\%
\ifdim\dimen0>\zeropoint
\dogetfloat
@@ -1192,32 +1282,32 @@
\setbox2=\vbox
{\blanko[\@@bkvoorwit]
\snaptogrid\vbox{\copy\floatbox}}%
- \advance\dimen0 by \ht2
+ \advance\dimen0 \ht2
\ifdim\dimen0>\dimen2
\ifnum\mofcolumns<\nofcolumns
- \advance\mofcolumns by 1
+ \advance\mofcolumns \plusone
%% bug %% \edef\currenttopcolumnbox{\getvalue{\@@topcol\the\count255}}%
\ifdim\ht\currenttopcolumnbox=\zeropoint
- \global\setbox\currenttopcolumnbox=\vbox
+ \global\setbox\currenttopcolumnbox\vbox
{\snaptogrid\vbox{\copy\floatbox}
\witruimte % nodig ?
\blanko[\@@bknawit]}%
\dimen4=\ht\currenttopcolumnbox
- \advance\dimen4 by \dp\currenttopcolumnbox
- \global\advance\vsize by -\dimen4
- \advance\dimen4 by -\pagegoal
- \global\pagegoal=-\dimen4
- \showmessage{\m!columns}{12}{a}%
+ \advance\dimen4 \dp\currenttopcolumnbox
+ \global\advance\vsize -\dimen4
+ \advance\dimen4 -\pagegoal
+ \global\pagegoal-\dimen4
+ \showmessage\m!columns{12}a%
\else
- \showmessage{\m!columns}{12}{b}%
+ \showmessage\m!columns{12}b%
\doresavefloat
\fi
\else
- \showmessage{\m!columns}{12}{c}%
+ \showmessage\m!columns{12}c%
\doresavefloat
\fi
\else
- \ifhmode{\setbox0=\lastbox}\fi% waar is die er in geslopen
+ \ifhmode{\setbox0\lastbox}\fi% waar is die er in geslopen
\par
\ifdim\prevdepth<\zeropoint \else % anders bovenaan kolom witruimte
\nobreak
@@ -1246,18 +1336,18 @@
%D When handling lots of (small) floats spacing can get worse
%D because of lining out the columns.
-\def\doflushcolumnfloats%
+\def\doflushcolumnfloats
{\ifpostponecolumnfloats\else
\bgroup
\forgetall
\ifsomefloatwaiting
- \dimen8=\!!zeropoint
- \dimen4=\!!zeropoint
- \count0=0 % count0 can be used local
- \count2=\nofcolumns % count2 can be used local
+ \dimen8\zeropoint
+ \dimen4\zeropoint
+ \count0\zerocount % count0 can be used local
+ \count2\nofcolumns % count2 can be used local
\dohandleallcolumns
- {\ifnum\count0>0\relax % the wide one's reserved space
- \global\setbox\currenttopcolumnbox=\vbox
+ {\ifnum\count0>\zerocount % the wide one's reserved space
+ \global\setbox\currenttopcolumnbox\vbox
{\snaptogrid\vbox
{\copy\currenttopcolumnbox
\hbox{\vphantom{\copy\floatbox}}}
@@ -1269,23 +1359,23 @@
\global\setbox\floatbox=\hbox to \finalcolumntextwidth{\hss\box\floatbox\hss}%
\fi % otherwise the graphic may disappear
\ifdim\wd\floatbox>\hsize
- \dimen0=\wd\floatbox
- \advance\dimen0 by \intercolumnwidth
- \dimen2=\hsize
- \advance\dimen2 by \intercolumnwidth
- \advance\dimen0 by .5pt % hm, why 1
- \advance\dimen2 by .5pt % hm, why 2
- \divide\dimen0 by \dimen2
- \count0=\dimen0
- \advance\count0 by 1
+ \dimen0\wd\floatbox
+ \advance\dimen0 \intercolumnwidth
+ \dimen2\hsize
+ \advance\dimen2 \intercolumnwidth
+ \advance\dimen0 .5pt % hm, why 1
+ \advance\dimen2 .5pt % hm, why 2
+ \divide\dimen0 \dimen2
+ \count0\dimen0
+ \advance\count0 \plusone
\ifnum\count0>\count2
\doresavefloat
- \count0=0
+ \count0\zerocount
\else
\dimen0=\count0\hsize
- \advance\dimen0 by \count0\intercolumnwidth
- \advance\dimen0 by -\intercolumnwidth
- \global\setbox\floatbox=\hbox to \dimen0
+ \advance\dimen0 \count0\intercolumnwidth
+ \advance\dimen0 -\intercolumnwidth
+ \global\setbox\floatbox\hbox to \dimen0
%{\hss\hbox{\copy\floatbox}\hss}%
{\processaction[\@@bkplaats] % how easy to forget
[ \v!links=>\copy\floatbox\hss,
@@ -1293,30 +1383,30 @@
\s!default=>\hss\copy\floatbox\hss,
\s!unknown=>\hss\copy\floatbox\hss]}%
\fi
- \showmessage{\m!columns}{13}{}%
+ \showmessage\m!columns{13}\empty
\else
- % \showmessage{\m!columns}{13}{}%
+ % \showmessage\m!columns{13}\empty
\fi
\ifdim\ht\floatbox>\zeropoint\relax
- \global\setbox\currenttopcolumnbox=\vbox
+ \global\setbox\currenttopcolumnbox\vbox
{\snaptogrid\vbox
{\copy\currenttopcolumnbox
\copy\floatbox}
\witruimte % nodig ?
\blanko[\@@bknawit]}%
\fi
- \dimen6=\ht\currenttopcolumnbox
- \advance\dimen6 by \dp\currenttopcolumnbox
+ \dimen6\ht\currenttopcolumnbox
+ \advance\dimen6 \dp\currenttopcolumnbox
\fi
\ifdim\dimen4<\ht\currenttopcolumnbox
- \dimen4=\ht\currenttopcolumnbox
+ \dimen4\ht\currenttopcolumnbox
\fi
- \advance\dimen8 by \dimen6
- \advance\count2 by -1
- \advance\count0 by -1 }%
+ \advance\dimen8 \dimen6
+ \advance\count2 \minusone
+ \advance\count0 \minusone }%
\setvsize
- \global\advance\vsize by -\dimen8
- \global\pagegoal=\vsize
+ \global\advance\vsize -\dimen8
+ \global\pagegoal\vsize
\else
%\doflushfloats % does not snap!
\fi
@@ -1349,20 +1439,20 @@
\binnenkolommenfalse
-\def\stelkolommenin%
+\def\stelkolommenin
{\dodoubleargument\dostelkolommenin}
\def\stelkolommenin[#1]%
{\getparameters[\??kl][#1]%
- \nofcolumns=\@@kln\relax
+ \nofcolumns\@@kln\relax
\processaction
[\@@kllijn]
- [ \v!aan=>\let\betweencolumns=\linebetweencolumns,
- \v!uit=>\let\betweencolumns=\spacebetweencolumns,
- \s!default=>\let\betweencolumns=\spacebetweencolumns,
- \s!unknown=>\let\betweencolumns=\@@kllijn]}
+ [ \v!aan=>\let\betweencolumns\linebetweencolumns,
+ \v!uit=>\let\betweencolumns\spacebetweencolumns,
+ \s!default=>\let\betweencolumns\spacebetweencolumns,
+ \s!unknown=>\let\betweencolumns\@@kllijn]}
-\def\linebetweencolumns%
+\def\linebetweencolumns
{\bgroup
\startcolorpage
\ifdim\@@klafstand>\zeropoint
@@ -1370,7 +1460,7 @@
\else
\dimen0=\linewidth
\fi
- \advance\dimen0 by -\linewidth
+ \advance\dimen0 -\linewidth
\hskip.5\dimen0
\vrule
\!!width\linewidth
@@ -1379,16 +1469,16 @@
\stopcolorpage
\egroup}
-\def\spacebetweencolumns%
+\def\spacebetweencolumns
{\hskip\@@klafstand}
\presetlocalframed[\??kl]
-\def\backgroundfinishcolumnbox%
- {\doifinsetelse{\@@kloffset}{\v!geen,\v!overlay}
+\def\backgroundfinishcolumnbox
+ {\doifinsetelse\@@kloffset{\v!geen,\v!overlay}
{\let\@@kloffset\!!zeropoint}
- {\scratchdimen=\@@kloffset
- \advance\scratchdimen by -\@@kllijndikte
+ {\scratchdimen\@@kloffset
+ \advance\scratchdimen -\@@kllijndikte
\edef\@@kloffset{\the\scratchdimen}}%
\localframed
[\??kl]
@@ -1403,28 +1493,28 @@
\def\complexstartkolommen[#1]% %% \startkolommen
{\bgroup
- \let\stopkolommen=\egroup
+ \let\stopkolommen\egroup
\ifbinnenkolommen
\else
\stelkolommenin[#1]%
\ifnum\@@kln>1\relax
\witruimte
\begingroup
- \doif{\@@kloptie}{\v!achtergrond}
- {\let\finishcolumnbox=\backgroundfinishcolumnbox
- \let\columntextoffset=\@@kloffset}%
+ \doif\@@kloptie\v!achtergrond
+ {\let\finishcolumnbox\backgroundfinishcolumnbox
+ \let\columntextoffset\@@kloffset}%
\ifx\@@klcommando\empty\else
\let\postprocesscolumnline\@@klcommando
\fi
- \doifelsenothing{\@@klhoogte}
- {\heightencolumnsfalse}
- {\heightencolumnstrue}%
- \doifelse{\@@klrichting}{\v!rechts}
- {\reversecolumnsfalse}
- {\reversecolumnstrue}%
- \doifelse{\@@klbalanceren}{\v!ja}
- {\balancecolumnstrue}
- {\balancecolumnsfalse}%
+ \doifelsenothing\@@klhoogte
+ \heightencolumnsfalse
+ \heightencolumnstrue
+ \doifelse\@@klrichting\v!rechts
+ \reversecolumnsfalse
+ \reversecolumnstrue
+ \doifelse\@@klbalanceren\v!ja
+ \balancecolumnstrue
+ \balancecolumnsfalse
\processaction % ook nog: laatsteuitlijnen
[\@@kluitlijnen]
[ \v!ja=>\stretchcolumnstrue
@@ -1439,7 +1529,7 @@
%
\savecurrentblanko
\savecurrentwitruimte
- \def\restorecolumnsettings%
+ \def\restorecolumnsettings
{\boxmaxdepth\maxdimen % done elsewhere
\restorecurrentblanko
\restorecurrentwitruimte}%
@@ -1451,7 +1541,7 @@
\ifdim\tussenwit>\zeropoint\relax
\stelwitruimtein[\@@klblanko]%
\fi
- \def\stopkolommen%
+ \def\stopkolommen
{\endmulticolumns
\global\binnenkolommenfalse
\endgroup
@@ -1460,43 +1550,17 @@
\beginmulticolumns
\fi
\fi}
-
-%\def\kolom%
-% {\ifbinnenkolommen
-% \ejectcolumn
-% \fi}
-
-\def\preferredejectcolumn%
+
+\installcolumnbreakhandler {MUL} \v!voorkeur
{\goodbreak}
-% \def\forcedejectcolumn%
-% {\vfil
-% \penalty-200
-% \prevdepth=-1000pt % signals top of column to \blanko
-% \vfilneg}
-
-\def\forcedejectcolumn%
- {\par % todo: since
- {\testrulewidth\!!zeropoint\ruledvskip\teksthoogte} % we misuse a
- \penalty-200 % side effect
+\installcolumnbreakhandler {MUL} \v!ja
+ {\par % todo: since
+ {\testrulewidth\zeropoint\ruledvskip\teksthoogte} % we misuse a
+ \penalty-200 % side effect
\vskip-\teksthoogte
- \prevdepth=-1000pt} % signals top of column to \blanko
-
-\def\kolom%
- {\dosingleempty\dokolom}
-
-\def\dokolom[#1]%
- {\ifbinnenkolommen
- \iffirstargument
- \processaction
- [#1]
- [ \v!ja=>\forcedejectcolumn,
- \v!voorkeur=>\preferredejectcolumn]%
- \else
- \preferredejectcolumn
- \fi
- \fi}
-
+ \prevdepth-\thousandpoint} % signals top of column to \blanko
+
\stelkolommenin
[\c!n=2,
\c!nboven=1,
@@ -1515,17 +1579,17 @@
%D Undocumented and still under development.
-\def\startsimplecolumns%
+\def\startsimplecolumns
{\dosingleempty\dostartsimplecolumns}
\def\dostartsimplecolumns[#1]%
{\bgroup
\getparameters[\??kl][\c!breedte=\hsize,\c!afstand=1em,\c!n=2,#1]%
\setrigidcolumnhsize\@@klbreedte\@@klafstand\@@kln
- \setbox\scratchbox=\vbox\bgroup
+ \setbox\scratchbox\vbox\bgroup
\forgetall} % \blanko[\v!blokkeer]
-\def\stopsimplecolumns%
+\def\stopsimplecolumns
{\removebottomthings
\egroup
\rigidcolumnbalance\scratchbox
diff --git a/tex/context/base/page-not.tex b/tex/context/base/page-not.tex
index 0e36ee314..b8bd84e90 100644
--- a/tex/context/base/page-not.tex
+++ b/tex/context/base/page-not.tex
@@ -63,12 +63,12 @@
% idem
\def\enablenotes
- {\global\count\footins=1000
- \global\skip\footins=1\baselineskip\relax}
+ {\global\count\footins1000
+ \global\skip\footins1\baselineskip\relax}
\def\disablenotes
- {\global\count\footins=0
- \global\skip\footins=\zeropoint}
+ {\global\count\footins\zerocount
+ \global\skip\footins \zeropoint}
% also
@@ -76,7 +76,7 @@
% {\insert\footins{\unvbox\OTRSETsavedfootnotes}}
%
%\def\savecolumnfootnotes
-% {\global\setbox\OTRSETsavedfootnotes=\vbox
+% {\global\setbox\OTRSETsavedfootnotes\vbox
% {\unvbox\OTRSETsavedfootnotes\box\footins}}
\newbox\savednotes
@@ -87,7 +87,7 @@
\fi}
\def\savenotes
- {\global\setbox\savednotes=\vbox
+ {\global\setbox\savednotes\vbox
{\ifvoid\savednotes\else\unvbox\savednotes\fi
\box\footins}}
diff --git a/tex/context/base/page-num.tex b/tex/context/base/page-num.tex
index 25fe38c0f..41ccc8cff 100644
--- a/tex/context/base/page-num.tex
+++ b/tex/context/base/page-num.tex
@@ -68,13 +68,13 @@
\v!geen=>\subpagingtrue
\showingsubpagefalse]}}
-\def\aantalsubpaginas%
+\def\aantalsubpaginas
{\ifshowingsubpage\nofsubpages\else0\fi}
-\def\subpaginanummer%
+\def\subpaginanummer
{\ifshowingsubpage\the\subpageno\else0\fi}
-\def\stelsubpaginanummerin%
+\def\stelsubpaginanummerin
{\dosingleargument\dostelsubpaginanummerin}
\def\newnofsubpages{0}
@@ -89,7 +89,7 @@
\definetwopasslist\s!subpage
-\def\savenofsubpages%
+\def\savenofsubpages
{\ifsubpaging
\showmessage\m!layouts6{\newnofsubpages,\the\subpageno}%
\immediatewriteutilitycommand%
@@ -99,20 +99,20 @@
{\the\subpageno}}%
\fi}
-\def\setsubpagenumbers%
+\def\setsubpagenumbers
{\iftwopassdatafound
\bgroup
- \xdef\nofsubpages{\twopassdata}%
- \xdef\firstsubpage{\realfolio}%
+ \xdef\nofsubpages {\twopassdata}%
+ \xdef\firstsubpage {\realfolio}%
\advance\realpageno \nofsubpages
- \advance\realpageno -1
- \xdef\lastsubpage{\realfolio}%
+ \advance\realpageno \minusone
+ \xdef\lastsubpage {\realfolio}%
\egroup
\else
\xdef\nofsubpages{0}%
\fi}
-\def\gotonextsubpage% overlapt behoorlijk met realpage macro
+\def\gotonextsubpage % overlapt behoorlijk met realpage macro
{\global\let\checksubpages\relax
\ifresettingsubpagenumber
\resetnummer[\s!subpage]%
@@ -122,12 +122,12 @@
\edef\oldsubpage{\the\subpageno}%
\verhoognummer[\s!subpage]%
\global\subpageno\ruwenummer[\s!subpage]\relax
- \ifnum\subpageno=1
+ \ifnum\subpageno=\plusone
\gettwopassdata\s!subpage
\setsubpagenumbers
- \ifnum\oldsubpage>0
+ \ifnum\oldsubpage>\zerocount
\showmessage\m!layouts6{\newnofsubpages,\oldsubpage}%
- \edef\next%
+ \edef\next % \expanded
{\writeutilitycommand%
{\twopassentry%
{\s!subpage}%
@@ -161,7 +161,7 @@
\egroup
\fi}
-\def\checksubpages%
+\def\checksubpages
{\getfromtwopassdata\s!subpage1%
\setsubpagenumbers
\global\let\checksubpages\relax}
@@ -185,25 +185,26 @@
\newcount\pageno \pageno = 1
\def\setuserpageno#1%
- {\global\userpageno=#1\relax
- \global\pageno=\userpageno}
-
-\def\realfolio {\the\realpageno}
-\def\folio {\the\userpageno}
-\def\firstpage {1}
-\def\lastpage {1}
-\def\currentpage {\the\realpageno}
-
-\def\gotonextrealpage%
- {\global\advance\realpageno 1
+ {\global\userpageno#1\relax
+ \global\pageno\userpageno}
+
+\def\realfolio {\the\realpageno}
+\def\folio {\the\userpageno}
+\def\firstpage {1}
+\def\lastpage {1}
+\def\currentpage {\the\realpageno}
+\def\lastpagenumber{1}
+
+\def\gotonextrealpage
+ {\global\advance\realpageno \plusone\relax
\ifnum\realpageno>\lastpage
\xdef\lastpage{\realfolio}%
\fi
- \setglobalsystemreference\rt!page\v!eerstepagina\firstpage
+ \setglobalsystemreference\rt!page\v!eerstepagina \firstpage
\setglobalsystemreference\rt!page\v!laatstepagina\lastpage
\bgroup
- \ifnum\realpageno>1
- \advance\realpageno -1
+ \ifnum\realpageno>\plusone
+ \advance\realpageno \minusone
\xdef\prevpage{\realfolio}%
\setglobalsystemreference\rt!page\v!achteruit\prevpage
\else
@@ -214,7 +215,7 @@
\egroup
\bgroup
\ifnum\realpageno<\lastpage\relax
- \advance\realpageno 1
+ \advance\realpageno \plusone
\xdef\nextpage{\realfolio}%
\setglobalsystemreference\rt!page\v!pagina\nextpage
\setglobalsystemreference\rt!page\v!vooruit\nextpage
@@ -225,7 +226,7 @@
\else
\setglobalsystemreference\rt!page\v!volgendeevenpagina\nextnextpage
\fi
- \advance\realpageno 1
+ \advance\realpageno \plusone
\xdef\nextnextpage{\realfolio}%
\ifnum\realpageno>\lastpage\relax
%\ifodd\realpageno
@@ -252,13 +253,17 @@
\egroup}
\def\checkrealpage
- {\global\realpageno0
+ {\global\realpageno\zerocount
\gotonextrealpage
\global\let\checkrealpage\relax}
\def\savenofpages
- {\advance\realpageno -1
- \savecurrentvalue\lastpage{\realfolio}}%
+ {\bgroup
+ \advance\realpageno \minusone
+ \savecurrentvalue\lastpage\realfolio
+ \advance\userpageno \minusone
+ \savecurrentvalue\lastpagenumber\folio
+ \egroup}
\def\totaalaantalpaginas
{\lastpage}
@@ -295,17 +300,17 @@
\global\shiftedrealpagenotrue
\fi \fi}
-\def\stelpaginanummerin%
+\def\stelpaginanummerin
{\dosingleargument\dostelpaginanummerin}
% long time used alternative
%
-% \def\verlaagpaginanummer%
+% \def\verlaagpaginanummer
% {\doifinset{\@@pnstatus}{\v!start,\v!leeg,\v!geen}
% {\verlaagnummer[\s!page]%
% \setuserpageno{\ruwenummer[\s!page]}}}
%
-% \def\verhoogpaginanummer%
+% \def\verhoogpaginanummer
% {\doifinset{\@@pnstatus}{\v!start,\v!leeg,\v!geen}
% {\verhoognummer[\s!page]%
% \setuserpageno{\ruwenummer[\s!page]}}%
@@ -351,9 +356,9 @@
\definetwopasslist\s!page
-\def\dopagesetreference%
+\def\dopagesetreference
{\doglobal\increment\nofpagesets\relax
- \edef\writepagref%
+ \edef\writepagref
{\writeutilitycommand
{\twopassentry
{\s!page}%
@@ -361,7 +366,7 @@
{\noexpand\realfolio}}}%
\writepagref}
-\def\getpagestatus% hierboven gebruiken
+\def\getpagestatus % hierboven gebruiken
{\ifdubbelzijdig
\gettwopassdata\s!page
\iftwopassdatafound \else
@@ -411,12 +416,12 @@
\fi
\fi}
-\def\dosetpagenumberlocation%
- {\ExpandBothAfter\doifinsetelse{\v!hoofd}{\@@nmplaats,\@@nmin}
+\def\dosetpagenumberlocation
+ {\ExpandBothAfter\doifinsetelse\v!hoofd{\@@nmplaats,\@@nmin}
{\dodosetpagenumberlocation\v!hoofd}
{\dodosetpagenumberlocation\v!voet}}
-\def\dostelnummeringin[#1]%
+\def\dosetuppagenumbering[#1]%
{\getparameters[\??nm][#1]%
\preparepaginaprefix\??nm
\enkelzijdigfalse
@@ -434,8 +439,10 @@
\recalculatebackgrounds
\recalculatelogos}
-\def\stelnummeringin%
- {\dosingleempty\dostelnummeringin}
+\def\setuppagenumbering
+ {\dosingleempty\dosetuppagenumbering}
+
+\let\stelnummeringin\setuppagenumbering
% listig: hangt af van \@@kolijst
@@ -512,9 +519,9 @@
%D oldstyle numbers are about as high as strutheight. Rather
%D interesting that it went unnoticed for so long.
-\unexpanded\def\@@plaatspaginanummer% called in empty tests
+\unexpanded\def\@@plaatspaginanummer % called in empty tests
{\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start}
- {{\doif{\@@nmstrut}{\v!ja}{\strut}%
+ {{\doif\@@nmstrut\v!ja\strut
\@@nmcommando{\doattributes\??nm\c!letter\c!kleur
{\completepagenumber}}}}}
@@ -522,16 +529,16 @@
{\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start}
{\@@nmtekstscheider}}
-\def\userfolio% naast realfolio
+\def\userfolio % naast realfolio
{\nummer[\s!page]}
-\def\pagenumber%
+\def\pagenumber
{\userfolio}
-\def\pageprefixes%
+\def\pageprefixes
{\def\donexttrackcommando##1%
- {\doifvalue{\??nm##1\v!nummer}{\v!ja} % v
- {\ifnum\countervalue{\??se##1}>0\relax
+ {\doifvalue{\??nm##1\v!nummer}\v!ja % v
+ {\ifnum\countervalue{\??se##1}>\zerocount
\getvalue{##1\c!nummer}\@@nmnummerscheider
\fi}%
\doifsomething{\@@nmtekst}
@@ -541,11 +548,16 @@
\unexpanded\def\completepagenumber
{\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start}
- {\@@nmlinks\labeltexts{\v!paginanummer}{\pageprefixes\pagenumber}\@@nmrechts}}
+ {\@@nmlinks\labeltexts\v!paginanummer{\pageprefixes\pagenumber}\@@nmrechts}}
\unexpanded\def\placepagenumber
{\doif{\@@nmstatus\@@pnstatus}{\v!start\v!start}
- {\labeltexts{\v!paginanummer}{\pagenumber}}}
+ {\labeltexts\v!paginanummer{\pagenumber}}}
+
+% Nog een variant; wat is een goeie naam?
+
+% \unexpanded\def\placexxpagenumber
+% {\@@plaatspaginanummer}
% \def\translatednumber[#1::#2::#3]{#3}
diff --git a/tex/context/base/page-one.tex b/tex/context/base/page-one.tex
index 58ca78858..aba915b97 100644
--- a/tex/context/base/page-one.tex
+++ b/tex/context/base/page-one.tex
@@ -24,16 +24,22 @@
\newtoks\OTRONEoutput
-\def\OTRONEsethsize%
+\def\OTRONEgotonextpage
+ {\ejectpage}
+
+\def\OTRONEgotonextpageX % will become obsolete
+ {\superejectpage}
+
+\def\OTRONEsethsize
{\global\hsize\tekstbreedte}
-\def\OTRONEsetvsize%
+\def\OTRONEsetvsize
{\ifdim\vsize=\teksthoogte \else
\bgroup
\scratchdimen-\vsize
\advance\scratchdimen \teksthoogte
\global\advance\vsize \scratchdimen
-\relax
+ \relax
\ifdim\pagegoal<\maxdimen
\advance\scratchdimen \pagegoal
\global\pagegoal\scratchdimen
@@ -41,35 +47,119 @@
\egroup
\fi}
-\def\OTRONEdopagecontents#1#2% \box<n> \unvbox<n>
- {\bgroup % niet breedte zetten, kan fractie zijn!
- \setbox0=\vbox \ifbottomnotes to \teksthoogte \fi
+% \def\OTRONEdopagecontents#1#2% \box<n> \unvbox<n>
+% {\bgroup % niet breedte zetten, kan fractie zijn!
+% \setbox0\vbox \ifbottomnotes to \teksthoogte \fi
+% {\edef\currentpagedepth{\the\dp#2}% still to be derived from #1
+% \dotopinsertions
+% #1#2%
+% \pushcolor
+% \ifgridsnapping
+% \vskip-\currentpagedepth
+% \vskip\openstrutdepth % \dp\strutbox
+% \prevdepth\openstrutdepth % \dp\strutbox
+% \dobotinsertions
+% \vfil
+% \else\ifr@ggedbottom
+% \vskip-\currentpagedepth
+% \vskip\openstrutdepth % \dp\strutbox
+% \prevdepth\openstrutdepth % \dp\strutbox
+% \dobotinsertions
+% \vfil
+% \else\ifb@selinebottom
+% \kern-\currentpagedepth
+% \kern\maxdepth
+% \dobotinsertions
+% \fi\fi\fi
+% \fakefootnotes}%
+% \ifbottomnotes
+% \ifgridsnapping
+% \getnoflines\teksthoogte
+% \advance\noflines -1
+% \scratchdimen\noflines\lineheight
+% \advance\scratchdimen \topskip
+% \else
+% \scratchdimen\ht0
+% \fi
+% \else
+% \scratchdimen\zeropoint
+% \fi
+% \setbox2\hbox
+% {\checksinglecolumnfootnotes
+% \lower\scratchdimen\vbox{\placebottomnotes}}%
+% \smashbox2% % needed here
+% \ifbottomnotes
+% \ht0\zeropoint
+% \fi
+% \vbox to \teksthoogte
+% {\box0\box2\ifbottomnotes\else\vfill\fi}%
+% \egroup}
+
+%\def\OTRONEregisteredtextarea#1#2#3%
+% {\ifregistertextareas
+% % sub optimal, unvbox is nilled here
+% \setbox#2\vbox{#1#2}%
+% \wd#2\zetbreedte % somehow a space creeps in (in unvbox'd #2)
+% \vbox{\registeredtextarea00#2}%
+% #3%
+% \else
+% #1#2#3%
+% \fi}
+
+\chardef\kindofpagetextareas=2 % whole page
+
+\def\OTRONEregisteredtextarea#1%
+ {\ifregistertextareas
+ \setbox0\vbox{#1}%
+ \wd0\zetbreedte % somehow a space creeps in
+ \vbox{\registeredtextarea000}%
+ \else
+ #1%
+ \fi}
+
+\let\OTRONEregisteredtextareaA\firstofoneargument
+\let\OTRONEregisteredtextareaB\firstofoneargument
+
+\def\OTRONEdopagecontents#1#2% \box<n> \unvbox<n>
+ {\bgroup % niet breedte zetten, kan fractie zijn!
+ \ifcase\kindofpagetextareas
+ \or % partial page
+ \let\OTRONEregisteredtextareaA\OTRONEregisteredtextarea
+ \or % whole page
+ \let\OTRONEregisteredtextareaB\OTRONEregisteredtextarea
+ \fi
+ \setbox0\vbox \ifbottomnotes to \teksthoogte \fi
{\edef\currentpagedepth{\the\dp#2}% still to be derived from #1
\dotopinsertions
- #1#2%
- \pushcolor
\ifgridsnapping
- \vskip-\currentpagedepth
- \vskip\openstrutdepth % \dp\strutbox
- \prevdepth\openstrutdepth % \dp\strutbox
+ \OTRONEregisteredtextareaA{#1#2}%
+ \vskip-\currentpagedepth\vskip\openstrutdepth
+ \pushcolor % moved from just after #1#2
+ \prevdepth\openstrutdepth
\dobotinsertions
\vfil
\else\ifr@ggedbottom
- \vskip-\currentpagedepth
- \vskip\openstrutdepth % \dp\strutbox
- \prevdepth\openstrutdepth % \dp\strutbox
+ \OTRONEregisteredtextareaA{#1#2}%
+ \vskip-\currentpagedepth\vskip\openstrutdepth
+ \pushcolor % moved from just after #1#2
+ \prevdepth\openstrutdepth
\dobotinsertions
\vfil
\else\ifb@selinebottom
- \kern-\currentpagedepth
- \kern\maxdepth
+ \OTRONEregisteredtextareaA{#1#2}%
+ \kern-\currentpagedepth\kern\maxdepth
+ \pushcolor % moved from just after #1#2
\dobotinsertions
+ \else
+ \OTRONEregisteredtextareaA{#1#2}%
+ \pushcolor % moved from just after #1#2
+ \dobotinsertions % added
\fi\fi\fi
\fakefootnotes}%
\ifbottomnotes
\ifgridsnapping
\getnoflines\teksthoogte
- \advance\noflines -1
+ \advance\noflines \minusone
\scratchdimen\noflines\lineheight
\advance\scratchdimen \topskip
\else
@@ -78,41 +168,42 @@
\else
\scratchdimen\zeropoint
\fi
- \setbox2=\hbox
+ \setbox2\hbox
{\checksinglecolumnfootnotes
\lower\scratchdimen\vbox{\placebottomnotes}}%
- \smashbox2% % needed here
+ \smashbox2% % needed here
\ifbottomnotes
\ht0\zeropoint
\fi
- \vbox to \teksthoogte
- {\box0\box2\ifbottomnotes\else\vfill\fi}%
+ \OTRONEregisteredtextareaB
+ {\vbox to \teksthoogte
+ {\box0\box2\ifbottomnotes\else\vfill\fi}}%
\egroup}
-\def\OTRONEfinalsidefloatoutput%
+\def\OTRONEfinalsidefloatoutput
{\finaloutput\unvbox\normalpagebox}
-\OTRONEoutput%
+\OTRONEoutput
{\sidefloatoutput}
%D Insertions
\newif\iftopofinsert
-\def\OTRONEdosettopinserts%
+\def\OTRONEdosettopinserts
{\bgroup
\ifsomefloatwaiting
- \noffloatinserts0
+ \noffloatinserts\zerocount
\let\totaltopinserted\!!zeropoint
\OTRONEdodosettopinserts
- \ifnum\@@bknonder=0
- \ifnum\@@bknregels>0
+ \ifnum\@@bknonder=\zerocount
+ \ifnum\@@bknregels>\zerocount
\ifdim\totaltopinserted>\zeropoint\relax
\dimen0=\lineheight
\dimen0=\@@bknregels\dimen0
\advance\dimen0 \totaltopinserted\relax
\ifdim\dimen0>\teksthoogte
- \showmessage{\m!floatblocks}{8}{\@@bknregels}%
+ \showmessage\m!floatblocks8\@@bknregels
\vfilll\eject
\fi
\fi
@@ -121,7 +212,7 @@
\fi
\egroup}
-\def\OTRONEdodosettopinserts%
+\def\OTRONEdodosettopinserts
{\ifnum\noffloatinserts<\noftopfloats
\dogetfloat
\ifdim\topinserted=\zeropoint
@@ -146,7 +237,7 @@
\flushfloatbox
\blanko[\@@bknawit]}%
\ifsomefloatwaiting
- \advance\noffloatinserts 1
+ \advance\noffloatinserts \plusone
\else
\noffloatinserts\noftopfloats\relax
\fi
@@ -163,15 +254,15 @@
\fi
\OTRONEdodosettopinserts}
-\def\OTRONEdosetbotinserts%
+\def\OTRONEdosetbotinserts
{\bgroup
\ifsomefloatwaiting
- \noffloatinserts0
+ \noffloatinserts\zerocount
\OTRONEdodosetbotinserts
\fi
\egroup}
-\def\OTRONEdodosetbotinserts%
+\def\OTRONEdodosetbotinserts
{\ifnum\noffloatinserts<\nofbotfloats\relax
\dogetfloat
\global\advance\botinserted \ht\floatbox\relax
@@ -183,7 +274,7 @@
\blanko[\@@bkvoorwit]%
\flushfloatbox}%
\ifsomefloatwaiting
- \advance\noffloatinserts 1
+ \advance\noffloatinserts \plusone
\else
\noffloatinserts\nofbotfloats
\fi
@@ -201,7 +292,7 @@
\fi
\OTRONEdodosetbotinserts}
-\def\OTRONEdosetbothinserts%
+\def\OTRONEdosetbothinserts
{\ifflushingfloats
\global\topinserted\zeropoint
\global\botinserted\zeropoint
@@ -210,7 +301,7 @@
\global\botinserted\zeropoint \OTRONEdosetbotinserts
\fi}
-\def\OTRONEdotopinsertions%
+\def\OTRONEdotopinsertions
{\ifvoid\topins\else
\ifgridsnapping
%\topsnaptogrid{\box\topins}
@@ -221,10 +312,10 @@
\fi
\global\topinserted\zeropoint}
-\def\OTRONEdobotinsertions%
+\def\OTRONEdobotinsertions
{\ifvoid\botins\else
\ifgridsnapping
- \snaptogrid\hbox{\box\botins}
+ \snaptogrid\hbox{\box\botins}%
\else
\unvbox\botins
\fi
@@ -232,24 +323,24 @@
\global\botinserted\zeropoint
\global\nofloatpermittedfalse}
-\def\OTRONEdoflushfloats%
+\def\OTRONEdoflushfloats
{\global\flushingfloatstrue
\ifsomefloatwaiting
\par
- \ifvmode\prevdepth=\maxdimen\fi % prevents whitespace
+ \ifvmode \prevdepth\maxdimen \fi % prevents whitespace
\OTRONEdodoflushfloats
\fi
- \global\savednoffloats0
+ \global\savednoffloats\zerocount
\global\somefloatwaitingfalse
\global\flushingfloatsfalse}
-\def\OTRONEflushfloatbox% nog verder doorvoeren en meer info in marge
+\def\OTRONEflushfloatbox % nog verder doorvoeren en meer info in marge
{\ifcenterfloatbox \ifdim\wd\floatbox<\hsize
\setbox\floatbox\hbox to \hsize{\hss\box\floatbox\hss}%
\fi \fi
\snaptogrid\hbox{\iftestfloatbox\ruledhbox\fi{\copy\floatbox}}}
-% \def\OTRONEdodoflushfloats% moet nog beter: als precies passend, niet onder baseline
+% \def\OTRONEdodoflushfloats % moet nog beter: als precies passend, niet onder baseline
% {\ifsomefloatwaiting
% \bgroup % \box\floatbox can be in use!
% \dogetfloat
@@ -259,7 +350,7 @@
% \expandafter\OTRONEdodoflushfloats
% \fi}
-\def\OTRONEdodoflushfloats% much in common with OTRSET
+\def\OTRONEdodoflushfloats % much in common with OTRSET
{\ifsomefloatwaiting
\ifpackflushedfloats
\centerfloatboxfalse
@@ -311,16 +402,16 @@
\expandafter\OTRONEdodoflushfloats
\fi}
-\def\OTRONEdocheckiffloatfits% vervangen ivm downward comp
+\def\OTRONEdocheckiffloatfits % vervangen ivm downward comp
{\ifnofloatpermitted
\global\roomforfloatfalse
\else
- \dimen0=\pagetotal
+ \dimen0 \pagetotal
\advance\dimen0 \ht\floatbox
\advance\dimen0 \dp\floatbox
\advance\dimen0 \floattopskip
\advance\dimen0 -\pageshrink % toegevoegd
-%\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait
+ %\message{c:\the\mofcolumns,t:\the\pagetotal,g:\the\pagegoal}%\wait
\ifdim\dimen0>\pagegoal
\global\roomforfloatfalse
\else
@@ -337,23 +428,23 @@
\doinsertfloatinfo
\doif\@@bkspringvolgendein\v!nee\noindentation} % new
-\def\OTRONEsomefixdfloat% [#1]%
+\def\OTRONEsomefixdfloat % [#1]
{\docheckiffloatfits
\ifroomforfloat\else
\goodbreak
\fi
\showmessage\m!floatblocks9\empty
- \someherefloat} % [#1]}%
+ \someherefloat} % [#1]
\def\OTRONEsomesidefloat[#1]% links, rechts NOG TESTEN EN AANPASSEN
{\ifbinnenkolommen
\someelsefloat[\v!hier]%
\else
%\checkwaitingfloats{#1}%
- \def\logsidefloat%
+ \def\logsidefloat
{\doinsertfloatinfo}%
- \setbox\floatbox=\vbox{\box\floatbox}%
- \wd\floatbox=\floatwidth
+ \setbox\floatbox\vbox{\box\floatbox}%
+ \wd\floatbox\floatwidth
\processfirstactioninset
[#1]
[ \v!links=>\leftfloat{\box\floatbox},
@@ -366,34 +457,33 @@
\v!rechterrand=>\rightedgefloat{\box\floatbox},
\v!inmarge=>{\doinmargenormal\leftmarginfloat
\rightmarginfloat{\box\floatbox}}]%
- \doifinset{\v!lang}{#1}
- {\flushsidefloatsafterpar}%
+ \doifinset\v!lang{#1}\flushsidefloatsafterpar
\fi}
\def\OTRONEsomepagefloat[#1]%
{%\checkwaitingfloats{#1}%
- \global\setbox\collectedpagefloats=\vbox
+ \global\setbox\collectedpagefloats\vbox
{\unvbox\collectedpagefloats
\vbox to \teksthoogte
- {\doifnotinset{\v!hoog}{#1}{\vfill}
+ {\doifnotinset\v!hoog{#1}\vfill
\box\floatbox
- \doifnotinset{\v!laag}{#1}{\vfill}}
+ \doifnotinset\v!laag{#1}\vfill}%
\goodbreak}%
\doinsertfloatinfo}
\def\OTRONEsometopsfloat[#1]%
- {\ifdim\topinserted=\!!zeropoint\relax
+ {\ifdim\topinserted=\zeropoint
\topofinserttrue
\else
\topofinsertfalse
\fi
- \global\advance\topinserted by \ht\floatbox
- \global\advance\topinserted by \dp\floatbox
- \global\advance\topinserted by \floatbottomskip
+ \global\advance\topinserted \ht\floatbox
+ \global\advance\topinserted \dp\floatbox
+ \global\advance\topinserted \floatbottomskip
\insert\topins
{\forgetall
\iftopofinsert
- \kern-\lineskip\par\prevdepth=\maxdimen
+ \kern-\lineskip\par\prevdepth\maxdimen
\else
%\blanko[-\@@bknawit,\@@bkvoorwit]% inserts can't look back
\betweenfloatblanko
@@ -403,9 +493,9 @@
\doinsertfloatinfo}
\def\OTRONEsomebotsfloat[#1]%
- {\global\advance\botinserted by \ht\floatbox
- \global\advance\botinserted by \dp\floatbox
- \global\advance\botinserted by \floattopskip
+ {\global\advance\botinserted \ht\floatbox
+ \global\advance\botinserted \dp\floatbox
+ \global\advance\botinserted \floattopskip
\insert\botins
{\forgetall
\blanko[\@@bkvoorwit]%
@@ -413,4 +503,7 @@
%\global\nofloatpermittedtrue
\doinsertfloatinfo}
+\def\OTRONEnextcolumn[#1]%
+ {}
+
\protect \endinput
diff --git a/tex/context/base/page-run.tex b/tex/context/base/page-run.tex
index b0d6dbf9e..07080f08c 100644
--- a/tex/context/base/page-run.tex
+++ b/tex/context/base/page-run.tex
@@ -21,13 +21,13 @@
\c!strut=\v!nee]
{\forgetall
\mindermeldingen
- \globaldefs=-1
- \dimen0=\pagegoal
+ \globaldefs\minusone
+ \dimen0\pagegoal
\definepapersize[X][\c!breedte=4em, \c!hoogte=6em]%
\definepapersize[Y][\c!breedte=12em,\c!hoogte=14em]%
\setuppapersize[#1,X][#2,Y]%
\stellayoutin[#3]%
- \setbox0=\vbox
+ \setbox0\vbox
{\framed
[\c!offset=\v!overlay,\c!strut=\v!nee,
\c!breedte=\papierbreedte,\c!hoogte=\papierhoogte]
@@ -43,10 +43,10 @@
\mirrorprintbox0%
\rotateprintbox0%
\offsetprintbox0%
- \pagegoal=\dimen0
+ \pagegoal\dimen0
\box0}}
-\gdef\showprint%
+\gdef\showprint
{\dotripleempty\doshowprint}
% \switchnaarkorps[8pt]
@@ -135,20 +135,20 @@
\else % we could have used \@the
\gdef\showsetupC#1#2% \relax is really needed here !
- {#1&\scratchdimen=#2\PtToCm{\the\scratchdimen}&%
- \scratchdimen=#2\relax\the\scratchdimen&\tttf\string#2\cr}
+ {#1&\scratchdimen#2\PtToCm{\the\scratchdimen}&%
+ \scratchdimen#2\relax\the\scratchdimen&\tttf\string#2\cr}
\fi
% \startinterface english % english is fallback
-\gdef\showsetups%
+\gdef\showsetups
{\noindent
\vbox
{\forgetall
\mindermeldingen
\switchtobodyfont[\v!klein]
- \tabskip\!!zeropoint
+ \tabskip\zeropoint
\halign
{\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
\showsetupA{paperheight} \paperheight
@@ -188,13 +188,13 @@
\startinterface dutch
-\gdef\showsetups%
+\gdef\showsetups
{\noindent
\vbox
{\forgetall
\mindermeldingen
\switchtobodyfont[\v!klein]
- \tabskip\!!zeropoint
+ \tabskip\zeropoint
\halign
{\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
\showsetupA{papierhoogte} \papierhoogte
@@ -243,7 +243,7 @@
{\forgetall
\mindermeldingen
\switchtobodyfont[\v!klein]
- \tabskip\!!zeropoint
+ \tabskip\zeropoint
\halign
{\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
\showsetupA{papierhoehe} \papierhoehe
@@ -289,7 +289,7 @@
{\forgetall
\mindermeldingen
\switchtobodyfont[\v!klein]
- \tabskip\!!zeropoint
+ \tabskip\zeropoint
\halign
{\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
\showsetupA{vyskapapiru} \vyskapapiru
@@ -335,7 +335,7 @@
{\forgetall
\mindermeldingen
\switchtobodyfont[\v!klein]
- \tabskip\!!zeropoint
+ \tabskip\zeropoint
\halign
{\strut##\quad\hss&##\quad\hss&##\quad\hss&##\hss\cr
\showsetupA{paperheight} \paperheight
@@ -373,7 +373,7 @@
\stopinterface
-\gdef\showlayout% interfereert lelijk met een \typefile er na
+\gdef\showlayout % interfereert lelijk met een \typefile er na
{\bgroup
\pagina
\showframe
diff --git a/tex/context/base/page-set.tex b/tex/context/base/page-set.tex
index 18c69b769..d7d4409c3 100644
--- a/tex/context/base/page-set.tex
+++ b/tex/context/base/page-set.tex
@@ -11,18 +11,18 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-% getnoflines vs getrawnoflines
+% getnoflines vs getrawnoflines
\writestatus{loading}{Context OTR Macros / Column Sets}
-% todo : last longer than previous
-% todo : block span over last column if footnotes
-% todo : diagnosis balancing run
-% todo : separate footnote placement
+% todo : last longer than previous
+% todo : block span over last column if footnotes
+% todo : diagnosis balancing run
+% todo : separate footnote placement
% todo : go on on same page with colset
-% todo : test page areas per page
+% todo : test page areas per page
-\unprotect
+\unprotect
\newcount\tofcolumns % total
\newcount\lofcolumns % left
@@ -64,16 +64,16 @@
\def\columnerasegridboxes
{\bgroup
\increment\columnmaxcells\relax
- \ifodd\realpageno
+ \ifodd\realpageno
\else % we are on the other page
\columnspreadfalse
\fi
\ifcolumnspread
\dorecurse\nofcolumns
{\let\!!stringa\recurselevel
- \scratchcounter=\recurselevel \advance\scratchcounter\lofcolumns
+ \scratchcounter\recurselevel \advance\scratchcounter\lofcolumns
\edef\!!stringb{\the\scratchcounter}%
- \dostepwiserecurse{0}{\columnmaxcells}{1}
+ \dostepwiserecurse \zerocount \columnmaxcells \plusone
{\ifcsname\@otr@:\!!stringa:\recurselevel\endcsname
\global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname\box
\ifcsname\@otr@:\!!stringb:\recurselevel\endcsname
@@ -93,9 +93,9 @@
\fi
\fi}}%
\else
- \dorecurse\tofcolumns
+ \dorecurse \tofcolumns
{\let\!!stringa\recurselevel
- \dostepwiserecurse{0}{\columnmaxcells}{1}
+ \dostepwiserecurse \zerocount \columnmaxcells \plusone
{\ifcsname\@otr@:\!!stringa:\recurselevel\endcsname
\global\setbox\csname\@otr@:\!!stringa:\recurselevel\endcsname\box\voidb@x
\else
@@ -104,9 +104,9 @@
\fi
\dorecurse\tofcolumns
{\global\setbox\csname\@otr@:\recurselevel:\columnmaxcells\endcsname\copy\placeholderboxa}%
- \global\columnfirstcell=0
- \global\columnlastcell=\columnfirstcell
- \global\columnfreecells=\columnfirstcell
+ \global\columnfirstcell\zerocount
+ \global\columnlastcell\columnfirstcell
+ \global\columnfreecells\columnfirstcell
\egroup}
\endETEX
@@ -122,9 +122,9 @@
\ifcolumnspread
\dorecurse\nofcolumns
{\let\!!stringa\recurselevel
- \scratchcounter=\recurselevel \advance\scratchcounter\lofcolumns
+ \scratchcounter\recurselevel \advance\scratchcounter\lofcolumns
\edef\!!stringb{\the\scratchcounter}%
- \dostepwiserecurse{0}{\columnmaxcells}{1}
+ \dostepwiserecurse \zerocount \columnmaxcells \plusone
{\expandafter\ifx\csname\@otr@:\!!stringa:\recurselevel\endcsname\relax
\expandafter\newbox\csname\@otr@:\!!stringa:\recurselevel\endcsname
\expandafter\ifx\csname\@otr@:\!!stringb:\recurselevel\endcsname\relax
@@ -146,7 +146,7 @@
\else
\dorecurse\tofcolumns
{\let\!!stringa\recurselevel
- \dostepwiserecurse{0}{\columnmaxcells}{1}
+ \dostepwiserecurse \zerocount \columnmaxcells \plusone
{\expandafter\ifx\csname\@otr@:\!!stringa:\recurselevel\endcsname\relax
\expandafter\newbox\csname\@otr@:\!!stringa:\recurselevel\endcsname
\else
@@ -155,7 +155,7 @@
\fi
\dorecurse\tofcolumns
{\global\setbox\csname\@otr@:\recurselevel:\columnmaxcells\endcsname\copy\placeholderboxa}%
- \global\columnfirstcell=0
+ \global\columnfirstcell\zerocount
\global\columnlastcell\columnfirstcell
\global\columnfreecells\columnfirstcell
\egroup}
@@ -163,17 +163,17 @@
\endTEX
\def\doOTRSETsetgridcells#1#2#3#4#5#6% placeholder col row wid hei {data}
- {\!!countd#2\advance\!!countd#4\advance\!!countd-1
- \!!counte#3\advance\!!counte#5\advance\!!counte-1
- \dostepwiserecurse{#2}{\!!countd}{1}
+ {\!!countd#2\advance\!!countd#4\advance\!!countd\minusone
+ \!!counte#3\advance\!!counte#5\advance\!!counte\minusone
+ \dostepwiserecurse{#2}\!!countd\plusone
{\!!countf\recurselevel
- \dostepwiserecurse{#3}{\!!counte}{1}
+ \dostepwiserecurse{#3}\!!counte\plusone
{\OTRSETsetgridcell\!!countf\recurselevel#1}}%
- \dostepwiserecurse{#3}{\!!counte}{1}
- {\global\wd\OTRSETgridcell{#2}\recurselevel=\hsize}%
+ \dostepwiserecurse{#3}\!!counte\plusone
+ {\global\wd\OTRSETgridcell{#2}\recurselevel\hsize}%
\OTRSETsetgridcell{#2}\!!counte#6}
-\def\OTRSETsetgridcells%
+\def\OTRSETsetgridcells
{\doOTRSETsetgridcells{\copy\placeholderboxb}}
\def\OTRSETerasegridcells#1#2#3#4%
@@ -182,9 +182,9 @@
\def\OTRSETsetfreecells#1#2% col start
{\global\columnfirstcell\ifnum#2=0 1\else#2\fi\relax
\ifnum\columnfirstcell>\columnmaxcells
- \global\columnfreecells0
- \global\columnfirstcell1
- \global\columnlastcell 0
+ \global\columnfreecells\zerocount
+ \global\columnfirstcell\plusone
+ \global\columnlastcell \zerocount
\global\somefreecolumncellsfalse
%\message{no cells a}%
\else
@@ -193,7 +193,7 @@
\exitloop
\else
\OTRSETdoifcellelse{#1}\columnfirstcell
- {\global\advance\columnfirstcell 1 }
+ {\global\advance\columnfirstcell\plusone}
{\exitloop}%
\fi}%
\global\columnlastcell\columnfirstcell
@@ -202,13 +202,13 @@
\exitloop
\else
\OTRSETdoifcellelse{#1}\columnlastcell
- {\global\advance\columnlastcell -1 \exitloop}
- {\global\advance\columnlastcell 1 }%
+ {\global\advance\columnlastcell \minusone \exitloop}
+ {\global\advance\columnlastcell \plusone }%
\fi}%
\ifnum\columnfirstcell>\columnmaxcells
- \global\columnfreecells0
- \global\columnfirstcell1
- \global\columnlastcell 0
+ \global\columnfreecells\zerocount
+ \global\columnfirstcell\plusone
+ \global\columnlastcell \zerocount
\global\somefreecolumncellsfalse
%\message{no cells b}%
\else
@@ -217,44 +217,44 @@
\fi
\global\columnfreecells\columnlastcell
\global\advance\columnfreecells -\columnfirstcell
- \global\advance\columnfreecells 1
+ \global\advance\columnfreecells \plusone
\global\somefreecolumncellstrue
%\message{\number\columnfirstcell-\number\columnlastcell=\number\columnfreecells}%
\fi
\fi}
\def\OTRSETgetmaxfreecells#1#2% col start
- {\scratchcounter0
- \edef\columnmaxfreecells{0}%
- \edef\columnfrmfreecells{0}%
- \dostepwiserecurse{#2}{\columnmaxcells}{1}
- {\OTRSETdoifcellelse{#1}{\recurselevel}
+ {\scratchcounter\zerocount
+ \let\columnmaxfreecells\!!zerocount
+ \let\columnfrmfreecells\!!zerocount
+ \dostepwiserecurse{#2}\columnmaxcells\plusone
+ {\OTRSETdoifcellelse{#1}\recurselevel
{\ifnum\columnmaxfreecells<\scratchcounter
\edef\columnmaxfreecells{\the\scratchcounter}%
\let\columnfrmfreecells\recurselevel
\fi
- \scratchcounter0 }
- {\advance\scratchcounter 1 }}}
+ \scratchcounter\zerocount}
+ {\advance\scratchcounter\plusone}}}
\long\def\OTRSETrecurseRL#1%
- {\dostepwiserecurse{\nofcolumns}{1}{-1}
+ {\dostepwiserecurse\nofcolumns\plusone\minusone
{#1\hskip\OTRSETgetparameter\c!afstand\recurselevel}}
-\def\OTRSETmakegridbox%
- {\ifcase\columndirection
- \OTRSETdomakegridbox{1}{\nofcolumns}{+1}%
+\def\OTRSETmakegridbox
+ {\ifcase\columndirection
+ \OTRSETdomakegridbox\plusone\nofcolumns\plusone
\else
- \OTRSETdomakegridbox{\nofcolumns}{1}{-1}%
+ \OTRSETdomakegridbox\nofcolumns\plusone\minusone
\fi}
-
+
\def\OTRSETdomakegridbox#1#2#3%
{\hbox\bgroup
- %
-\forgetall % can go once in flush
- \ifbalancecolumns
+ \dontcomplain
+ \forgetall % can go once in flush
+ \ifbalancecolumns
\ifnum\realpageno=\balancingpageno\relax
- \!!heighta \localcolumnmaxcells\lineheight
- \xdef\localcolumnmaxcells{0}%
+ \!!heighta \localcolumnmaxcells\lineheight
+ \global\let\localcolumnmaxcells\!!zerocount
\else
\!!heighta \teksthoogte
\fi
@@ -262,17 +262,17 @@
\!!heighta \teksthoogte
\fi
%
- % test first !
+ % test first !
\hbox to \zetbreedte
{\dostepwiserecurse{#1}{#2}{#3}
- {\mofcolumns=\recurselevel
- \localcolumnwidth=\OTRSETlocalwidth\mofcolumns
- \setbox\scratchbox=\hbox\localframed
+ {\mofcolumns\recurselevel
+ \localcolumnwidth\OTRSETlocalwidth\mofcolumns
+ \setbox\scratchbox\hbox\localframed
[\??mc\OTRSETidentifier\number\mofcolumns]%
- [\c!breedte=\localcolumnwidth,\c!hoogte=\!!heighta]% \teksthoogte]%
+ [\c!breedte=\localcolumnwidth,\c!hoogte=\!!heighta,\c!regels=]%
{}%
-\wd\scratchbox\localcolumnwidth
-\ht\scratchbox\!!heighta
+ \wd\scratchbox\localcolumnwidth
+ \ht\scratchbox\!!heighta
\ifcase\columndirection
\hskip\OTRSETgetparameter\c!afstand\recurselevel
\box\scratchbox
@@ -281,18 +281,18 @@
\hskip\OTRSETgetparameter\c!afstand\recurselevel
\fi}}%
\hskip-\zetbreedte
- % main text
+ % main text
\hbox to \zetbreedte
{\dostepwiserecurse{#1}{#2}{#3}
- {\mofcolumns=\recurselevel
- \localcolumnwidth=\OTRSETlocalwidth\mofcolumns
+ {\mofcolumns\recurselevel
+ \localcolumnwidth\OTRSETlocalwidth\mofcolumns
\offinterlineskip
- \setbox\scratchbox=\vbox to \!!heighta % \teksthoogte
+ \setbox\scratchbox\vbox to \!!heighta % \teksthoogte
{\topskipcorrection
- \dorecurse{\columnmaxcells}
- {\setbox\scratchbox=\hbox{\OTRSETgetgridcell\mofcolumns\recurselevel}%
- \ht\scratchbox=\ht\strutbox
- \dp\scratchbox=\dp\strutbox
+ \dorecurse\columnmaxcells
+ {\setbox\scratchbox\hbox{\OTRSETgetgridcell\mofcolumns\recurselevel}%
+ \ht\scratchbox\ht\strutbox
+ \dp\scratchbox\dp\strutbox
\ifcase\columndirection
\box\scratchbox
\else
@@ -300,7 +300,7 @@
{\hskip\localcolumnwidth\llap{\box\scratchbox}}%
\fi
\par}}%
- \wd\scratchbox=\localcolumnwidth % \tekstbreedte
+ \wd\scratchbox\localcolumnwidth % \tekstbreedte
\ifcase\columndirection
\hskip\OTRSETgetparameter\c!afstand\recurselevel\box\scratchbox
\else
@@ -308,28 +308,8 @@
\fi}}%
\egroup}
-\ifx\registerMPtextarea\undefined
- \let\registerMPtextarea\firstofoneargument
-\fi
-
-\def\OTRSETregistergridbox#1#2%
- {\bgroup
- \setbox\nextbox\null
- \wd\nextbox\wd#2%
- \ht\nextbox\ht#2%
- \dp\nextbox\dp#2%
- \setbox\nextbox\hbox{\lower\dp\strutbox\box\nextbox}%
- \ifnum#1=1
- \setbox\nextbox\hbox{\raise\topskip\hbox{\lower\ht\strutbox\box\nextbox}}%
- \dp\nextbox\dp\strutbox
- \fi
- \setbox\nextbox\hbox{\registerMPtextarea{\box\nextbox}}%
- \smashbox\nextbox
- \box\nextbox\box#2%
- \egroup}
-
-\def\OTRSETreducegridbox%
- {\ifnum\localcolumnmaxcells>0
+\def\OTRSETreducegridbox
+ {\ifnum\localcolumnmaxcells>\zerocount
\let\columnmaxcells\localcolumnmaxcells
\fi}
@@ -344,8 +324,8 @@
\ht\scratchbox\ht\strutbox
\dp\scratchbox\dp\strutbox
\OTRSETsetgridcell\nofcolumns\lastcolumnlastcell\box\scratchbox
- \fi
- \global\lastcolumnlastcell=0
+ \fi
+ \global\lastcolumnlastcell\zerocount
\fi}
%\def\OTRSETdoflush
@@ -354,25 +334,25 @@
% \else
% \OTRSETdofinalflush
% \OTRSETinitializecolumns
-% \OTRSETmanualbalance % or after \gotonextpage
+% \OTRSETmanualbalance % or after \startnextpage
% %\OTRSETdoflushfloats
-% \OTRSETgotonextpage
+% \OTRSETstartnextpage
% \fi}
\def\OTRSETdoflush
{\ifcollectingcontent
- \global\mofcolumns1
+ \global\mofcolumns\plusone
\else
- \OTRSETdofinalflush
+ \OTRSETdofinalflush
\OTRSETdofinaloutput
\OTRSETinitializecolumns
- \OTRSETmanualbalance % or after \gotonextpage
+ \OTRSETmanualbalance % or after \startnextpage
%\OTRSETdoflushfloats
- \OTRSETgotonextpage
+ \OTRSETstartnextpage
\initializecolumntextareas
\fi}
-%\def\OTRSETdofinalflush % see \OTRSETdoflush
+%\def\OTRSETdofinalflush % see \OTRSETdoflush
% {\OTRSETflushfinalfootnotes
% \placecolumntextareas
% \OTRSETcentergridcells
@@ -382,15 +362,15 @@
\newbox\OTRfinalpagebox
-\def\OTRSETdofinalflush % see \OTRSETdoflush
+\def\OTRSETdofinalflush % see \OTRSETdoflush
{\OTRSETflushfinalfootnotes
\placecolumntextareas
\OTRSETcentergridcells
- \bgroup % we want to keep the reduction local
+ \bgroup % we want to keep the reduction local
\OTRSETreducegridbox
\global\setbox\OTRfinalpagebox\OTRSETmakegridbox
- \egroup % otherwise we get the wrong number of free cells
- %\gdef\localcolumnmaxcells{0}% here ?
+ \egroup % otherwise we get the wrong number of free cells
+ %\gdef\localcolumnmaxcells{0}% here ?
\global\mofcolumns\nofcolumns} % otherwise problems in finaloutput
\def\OTRSETdofinaloutput
@@ -402,10 +382,10 @@
\appendtoks \OTRSETflushbalancinglist \to \everystoptext
-\def\OTRSETflushbalancinglist%
- {\scratchcounter0
+\def\OTRSETflushbalancinglist
+ {\scratchcounter\zerocount
\def\docommando##1%
- {\advance\scratchcounter 1
+ {\advance\scratchcounter \plusone
\immediatewriteutilitycommand
{\twopassentry{\s!colset}{\the\scratchcounter}{##1}}}%
\processcommacommand[\OTRSETbalancinglist]\docommando}
@@ -425,38 +405,39 @@
\def\OTRSETgetparameter#1#2{\getvalue{\??mc\OTRSETidentifier\number#2#1}}
\def\OTRSETsetparameter#1#2{\setvalue{\??mc\OTRSETidentifier\number#2#1}}
-\def\OTRSETsetvsize% snap per sectie (gap here?)
+\def\OTRSETsetvsize % snap per sectie (gap here?)
{\ifcollectingcontent \else % can be assigndimen
- \OTRSETcheckinsert % added
+ \OTRSETcheckinsert % added
\OTRSETsetfreecells\mofcolumns\columnfirstcell
\ifsomefreecolumncells
- \global\vsize=\columnfreecells\lineheight
- %\global\pagegoal=\vsize % niet nodig, tenzij binnen otr
- \dosynchronizeoutput
- \allowbreak % hm
+ \global\vsize\columnfreecells\lineheight
+ \global\pagegoal\vsize % niet nodig, tenzij binnen otr
+ \synchronizeoutput % fails on example
+ % \allowbreak % hm
\fi
\synchronizenotes
\fi}
-\def\OTRSETsethsize%
+\def\OTRSETsethsize
{%\OTRSETassignwidth\OTRSETidentifier\to\localcolumnwidth
- \localcolumnwidth=\OTRSETlocalwidth\mofcolumns
+ \localcolumnwidth\OTRSETlocalwidth\mofcolumns
\tekstbreedte\localcolumnwidth
\hsize\localcolumnwidth}
-\def\OTRSETcheckfreelines%
+\def\OTRSETcheckfreelines
{\OTRSETsetvsize}
-\def\doOTRSETcolumnseparator%
+\def\doOTRSETcolumnseparator
{\hbox to \zeropoint{\hss\red\vl\hss}}
\let\OTRSETcolumnseparator\relax
-\def\showbreaks%
+\def\showbreaks
{\let\OTRSETcolumnseparator\doOTRSETcolumnseparator}
-\def\OTRSETnextcolumn%
- {\ifhmode
+\installcolumnbreakhandler {SET} \v!ja
+ {% hmmm:
+ \ifhmode
\bgroup
\removeunwantedspaces
\parfillskip\zeropoint
@@ -464,34 +445,114 @@
\par
\egroup
\fi
- \page\relax % hack. \page should be page
-}% \OTRSETsethsize} % no, can be mid smaller (like tabulate)
+ % brrr:
+ \ejectinsert
+ \ejectpage} % no \OTRSETsethsize, can be mid smaller (like tabulate)
+
+% \installcolumnbreakhandler {SET} \v!forceer
+% {\OTRSETgotocolumn[\v!forceer]}
+% \installcolumnbreakhandler {SET} \v!eerste
+% {\OTRSETgotocolumn[\v!eerste]}
+% \installcolumnbreakhandler {SET} \v!laatste
+% {\OTRSETgotocolumn[\v!laatste]}
+
+\installcolumnbreakhandler {SET} \s!unknown
+ {\expanded{\OTRSETgotocolumn[\@@columnspecification]}}
+
+% \installcolumnbreakhandler {SET} \v!pagina
+% {\simplepagebreak % \flushnotes \executepagebreakhandler\v!ja
+% \ifnum\mofcolumns>\plusone
+% \OTRSETgotocolumn[\v!laatste,\v!forceer]%
+% \fi}
+
+\installcolumnbreakhandler {SET} \v!pagina
+ {\vfill\eject % \doejectpage\eject
+ \OTRSETgotonextpage}
\newtoks\OTRSETeverystartofcolumn
\newbox\OTRSETsavedfootnotes
-% \installoutput\OTRSETflushtextsofar goes wrong
+% \installoutput\OTRSETflushtextsofar % spacing goes wrong
+
+%\def\OTRSETflushtextsofar
+% {\ifvoid\normalpagebox \else
+% \setbox\scratchbox\vbox{\unvbox\normalpagebox}%
+% \OTRSETsavenotes
+% \OTRSEThandleflushedtext0
+% \fi}
+
+% The complication is in the fact that when the HERE float
+% is placed, the otr is not invoked when there is not yet
+% enough content; this can lead to a change in order (turning
+% on the tracer with option 0 is very instructive, watch the
+% small numbers in the margin)
+%
+% 0 = no flushing, so no interference but user should handle
+% border cases of placement
+% 1 = the normal otr, rather untested
+% 2 = a solution that works ok, is experimental and above
+% all messy
+
+\chardef\OTRSETflushtextmode=0
\def\OTRSETflushtextsofar
- {\ifvoid\normalpagebox \else
- \setbox\scratchbox=\vbox{\unvbox\normalpagebox}%
+ {\ifcase\OTRSETflushtextmode
+ % don't mess around
+ \or
+ % the normal one
+ \ifvoid\normalpagebox\else
+ \OTRSETnaturalflush
+ \OTRSETcheckfreelines
+ \fi
+ \or
+ % way to complicated, but kind of ok
+ \doOTRSETflushtextsofar
+ \fi}
+
+\newskip\lastskipinotr
+
+\installoutput\doOTRSETflushtextsofar % experimental
+ {\ifvoid\normalpagebox\else
+ \scratchdimen\dp\normalpagebox
+ \setbox\scratchbox\vbox
+ {\forgetall
+ \unvbox\normalpagebox
+ \global\lastskipinotr\lastskip\relax
+ \ifdim\lastskipinotr>\zeropoint\relax
+ \removelastskip
+ \else
+ \kern-\scratchdimen % handle depth
+ \fi}%
+ \ifdim\lastskipinotr>\zeropoint
+ \scratchskip\ht\scratchbox
+ \setbox\scratchbox\hbox
+ {\lower\strutdepth\box\scratchbox}%
+ \dp\scratchbox\scratchdimen
+ \ht\scratchbox\scratchskip
+ \fi
\OTRSETsavenotes
\OTRSEThandleflushedtext0
+ \ifdim\lastskipinotr>\zeropoint
+ %\vskip \lastskipinotr % hm, gets lost anyway
+ \else
+ % we should not discard skips after here; tricky
+ \fi
+ \OTRSETsetvsize
\fi}
\def\OTRSETplacebottomnotes
{\iflastcolumnfootnotes
- \ifnum\nofcolumns=\mofcolumns
+ \ifnum\nofcolumns=\mofcolumns
\ifintermediatefootnotes \placebottomnotes \fi
\fi
\else
- \placebottomnotes
+ \placebottomnotes
\fi}
\def\OTRSETflushsavednotes
{\iflastcolumnfootnotes
- \ifnum\nofcolumns=\mofcolumns
+ \ifnum\nofcolumns=\mofcolumns
\flushsavednotes
\fi
\else
@@ -507,89 +568,92 @@
\appendtoks \OTRSETflushsavednotes \to \OTRSETeverystartofcolumn
-\def\OTRSETnaturalflush%
- {\setbox0=\vbox to \columnfreecells\lineheight
+\def\OTRSETnaturalflush
+ {\bgroup
+ \forgetall % new, needed !
+ \setbox0\vbox to \columnfreecells\lineheight
{\vskip-\topskip
\vskip\lineheight
\prevdepth\dp\strutbox
\unvbox\normalpagebox
\vfill}%
- \setbox2=\hbox
+ \setbox2\hbox
{\OTRSETplacebottomnotes}%
- \setbox\scratchbox=\hbox
- {\wd0=\zeropoint\box0\box2}%
- \dp\scratchbox=\dp\strutbox
- \OTRSEThandleflushedtext1}
+ \setbox\scratchbox\hbox
+ {\wd0\zeropoint\box0\box2}%
+ \dp\scratchbox\dp\strutbox
+ \OTRSEThandleflushedtext1
+ \egroup}
\newcount\lastcolumnlastcell
\def\OTRSEThandleflushedtext#1%
{\getnoflines{\ht\scratchbox}%
- \wd\scratchbox=\tekstbreedte % geen \hsize kan < zijn in bv split tabulate
+ %\wd\scratchbox\tekstbreedte % geen \hsize kan < zijn in bv split tabulate
+ \wd\scratchbox\OTRSETlocalwidth\mofcolumns
\doOTRSETsetgridcells
{\copy\placeholderboxf}
- {\mofcolumns}{\columnfirstcell}{1}{\noflines}
- %{\copy\scratchbox}% \box
- {\hbox{\OTRSETregistergridbox\columnfirstcell\scratchbox}}%
- \global\columnlastcell=\columnfirstcell
+ \mofcolumns\columnfirstcell\plusone\noflines
+ {\registeredtextarea1\columnfirstcell\scratchbox}% == \hbox
+ \global\columnlastcell\columnfirstcell
\global\advance\columnlastcell \noflines
-\global\lastcolumnlastcell\columnlastcell
-\global\advance\lastcolumnlastcell -1
- % find next (acceptable) gap, todo: deadcycle
-\ifcase#1\else
- \OTRSETfillgapsbetweencells\mofcolumns\columnlastcell
-\fi
+ \global\lastcolumnlastcell\columnlastcell
+ \global\advance\lastcolumnlastcell \minusone
+ % find next (acceptable) gap, todo: deadcycle
+ \ifcase#1\else
+ \OTRSETfillgapsbetweencells\mofcolumns\columnlastcell
+ \fi
\OTRSETfindnextgap
- %\message{\the\mofcolumns,\the\columnfirstcell,\the\columnfreecells}\wait
-% \OTRSETsethsize % no, can be mid smaller (like tabulate)
+ % \message{\the\mofcolumns,\the\columnfirstcell,\the\columnfreecells}\wait
+ % \OTRSETsethsize % no, can be mid smaller (like tabulate)
\OTRSETsetvsize}
-\def\OTRSETfindnextgap%
+\def\OTRSETfindnextgap
{\OTRSETsetfreecells\mofcolumns\columnlastcell
\ifsomefreecolumncells
- % okay
+ % okay
\else
- \global\advance\mofcolumns 1 \relax
+ \global\advance\mofcolumns \plusone
\ifnum\mofcolumns>\nofcolumns
\OTRSETdoflush
- \global\columnlastcell=1
- \global\columnfirstcell=0
+ \global\columnlastcell\plusone
+ \global\columnfirstcell\zerocount
\OTRSETdoflushfloats
\else
\the\OTRSETeverystartofcolumn
- \global\columnlastcell=1
- \global\columnfirstcell=0
+ \global\columnlastcell\plusone
+ \global\columnfirstcell\zerocount
\fi
\fi}
\def\OTRSETcheckfreelines{}
\def\OTRSETfillgapsbetweencells#1#2% col
- {\ifnum\columngaplimit>0
+ {\ifnum\columngaplimit>\zerocount
\donefalse
- \dostepwiserecurse{#2}{\columnmaxcells}{1}
- {\OTRSETdoifcellelse{#1}{\recurselevel}
+ \dostepwiserecurse{#2}\columnmaxcells\plusone
+ {\OTRSETdoifcellelse{#1}\recurselevel
{\ifdone
- \!!countb=\recurselevel \advance\!!countb -\!!counta\relax
- \ifnum\!!countb>1
- \advance\!!countb -1
+ \!!countb\recurselevel \advance\!!countb -\!!counta\relax
+ \ifnum\!!countb>\plusone
+ \advance\!!countb \minusone
\ifnum\!!countb<\columngaplimit\relax
- \!!countb=\recurselevel \advance\!!countb -1
- \dostepwiserecurse{\!!counta}{\!!countb}{1}
+ \!!countb\recurselevel \advance\!!countb \minusone
+ \dostepwiserecurse\!!counta\!!countb\plusone
{\OTRSETsetgridcell{#1}\recurselevel\copy\placeholderboxc}%
%\message{[gap]}%
- \fi
+ \fi
\fi
\fi
\donefalse}
{\ifdone \else
\donetrue
- \!!counta=\recurselevel
+ \!!counta\recurselevel
\fi}}%
\fi}
\appendtoks
- \OTRSETfillgapsbetweencells\mofcolumns1
+ \OTRSETfillgapsbetweencells\mofcolumns\plusone
\to \OTRSETeverystartofcolumn
%\def\OTRSETfreezeminimumgap#1%
@@ -623,25 +687,44 @@
% {\OTRSETfillgaps{#1}{1}{#2}}
\newif\ifspancolumnslots \spancolumnslotstrue
+\newif\ifcheckcolumnspan \checkcolumnspantrue
+
+\def\OTRSETcheckwidthgap#1#2% box size
+ {\ifcheckcolumnspan
+ \bgroup
+ \scratchdimen#2%
+ \advance\scratchdimen-\wd#1\relax
+ \ifdim-10\s!sp>\scratchdimen
+ \egroup
+ \else\ifdim10\s!sp<\scratchdimen
+ \egroup
+ \else
+ \egroup
+ \wd#1=#2%
+ \fi\fi
+ \fi}
\def\OTRSETcheckcolumnslot#1%
{\enoughcolumncellstrue
- \ifspancolumnslots \else \ifdim\wd#1>\hsize
- \enoughcolumncellsfalse
- \fi \fi
+ \ifspancolumnslots\else
+ \OTRSETcheckwidthgap#1\hsize
+ \ifdim\wd#1>\hsize
+ \enoughcolumncellsfalse
+ \fi
+ \fi
\ifenoughcolumncells
\getnoflines\pagetotal
- \scratchcounter=\noflines
+ \scratchcounter\noflines
\getnoflines{\ht#1}%
- \columnvcells=\noflines
- \columnhcells=1
+ \columnvcells\noflines
+ \columnhcells\plusone
\advance\scratchcounter \columnvcells \relax
\ifnum\scratchcounter>\columnfreecells
\enoughcolumncellsfalse
\fi
\fi}
-\def\OTRSETstoreincolumnslotPAGE#1%
+\def\OTRSETstoreincolumnslotPAGE#1%
{\ifenoughcolumncells
% to do
\OTRSETsavebox{#1}%
@@ -649,7 +732,7 @@
\OTRSETsavebox{#1}%
\fi}
-\def\OTRSETstoreincolumnslotTOPS#1%
+\def\OTRSETstoreincolumnslotTOPS#1%
{\OTRSETprepareforcolumnslot1{#1}%
\OTRSETcheckcolumnslot{#1}%
\ifenoughcolumncells
@@ -663,22 +746,22 @@
\OTRSETsavebox{#1}%
\fi}
-\def\OTRSETstoreincolumnslotBOTS#1%
+\def\OTRSETstoreincolumnslotBOTS#1%
{\OTRSETprepareforcolumnslot3{#1}%
\edef\savedcolumnlastcell{\the\columnlastcell}%
\OTRSETcheckcolumnslot{#1}%
\ifenoughcolumncells
- \advance\columnlastcell -\columnvcells \advance\columnlastcell 1
+ \advance\columnlastcell -\columnvcells \advance\columnlastcell \plusone
% \OTRSETcheckcolumnspace\mofcolumns\columnfirstcell{#1}%
\OTRSETcheckcolumnspace\mofcolumns\columnlastcell{#1}%
\fi
\ifenoughcolumncells
\OTRSETsetgridcells\mofcolumns\columnlastcell\columnhcells\columnvcells
{\copy#1}
- \OTRSETfillgapsbetweencells\mofcolumns\savedcolumnlastcell % -)
+ \OTRSETfillgapsbetweencells\mofcolumns\savedcolumnlastcell % -)
\OTRSETsetvsize
\else
- \columnlastcell=\savedcolumnlastcell
+ \columnlastcell\savedcolumnlastcell
\OTRSETsavebox{#1}%
\fi}
@@ -688,20 +771,20 @@
\def\columnspacebotoffset{0}
\def\OTRSETcheckcolumnspace#1#2#3% col row box
- {\columnhcells=1
- \totalcolumnspace=\zeropoint
- \scratchcounter=#1%
+ {\columnhcells\plusone
+ \totalcolumnspace\zeropoint
+ \scratchcounter#1%
\enoughcolumncellstrue
\doloop
-% {\advance\totalcolumnspace \hsize
{\advance\totalcolumnspace \OTRSETlocalwidth\scratchcounter\relax % needed
+\OTRSETcheckwidthgap#3\totalcolumnspace
\ifnum\wd#3>\totalcolumnspace\relax
\ifnum\scratchcounter=\nofcolumns
\enoughcolumncellsfalse
\exitloop
\else
- \advance\columnhcells 1
- \advance\scratchcounter 1
+ \advance\columnhcells \plusone
+ \advance\scratchcounter \plusone
\advance\totalcolumnspace \OTRSETgetparameter\c!afstand\scratchcounter
\fi
\else
@@ -709,50 +792,50 @@
\fi}%
\ifenoughcolumncells
\getnoflines{\ht#3}%
- \columnvcells=\noflines
+ \columnvcells\noflines
\OTRSETcheckcolumncells{#1}{#2}\columnhcells\columnvcells
\fi}
\def\OTRSETcheckcolumncells#1#2#3#4% col row wid hei
- {\!!countd=#1\advance\!!countd#3\advance\!!countd-1\relax
- \!!counte=#2\advance\!!counte#4\advance\!!counte-1\relax
+ {\!!countd#1\advance\!!countd#3\advance\!!countd\minusone
+ \!!counte#2\advance\!!counte#4\advance\!!counte\minusone
\ifnum\!!counte>\columnmaxcells\relax
\enoughcolumncellsfalse
\else
\enoughcolumncellstrue
-%\def\columnspacetopoffset{0}%
-%\scratchcounter=#2\advance\scratchcounter-1\relax
-%\ifnum\scratchcounter>0
-% \dostepwiserecurse{#1}{\!!countd}{1}
+%\let\columnspacetopoffset\zerocount
+%\scratchcounter#2\advance\scratchcounter\minusone
+%\ifnum\scratchcounter>0
+% \dostepwiserecurse{#1}\!!countd\plusone
% {\ifdim\wd\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint
-% \def\columnspacetopoffset{1}%
+% \let\columnspacetopoffset\plusone
% \else\ifdim\dp\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint
-% \def\columnspacetopoffset{1}%
-% \fi\fi}%
+% \let\columnspacetopoffset\plusone
+% \fi\fi}%
% \advance\!!counte \columnspacetopoffset \relax
% \advance\columnvcells \columnspacetopoffset \relax
%\fi
-%\def\columnspacebotoffset{0}%
-%\scratchcounter=\!!counte
+%\let\columnspacebotoffset\zerocount
+%\scratchcounter\!!counte
%\advance\scratchcounter \columnvcells \relax
%\ifnum\scratchcounter>\columnmaxcells\else
-% \dostepwiserecurse{#1}{\!!countd}{1}
+% \dostepwiserecurse{#1}\!!countd\plusone
% {\ifdim\wd\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint
-% \def\columnspacebotoffset{1}%
+% \let\columnspacebotoffset\plusone
% \else\ifdim\dp\OTRSETgridcell\recurselevel\scratchcounter>\zeropoint
-% \def\columnspacebotoffset{1}%
-% \fi\fi}%
+% \let\columnspacebotoffset\plusone
+% \fi\fi}%
% \advance\!!counte \columnspacebotoffset \relax
% \advance\columnvcells \columnspacebotoffset \relax
%\fi
- \dostepwiserecurse{#1}{\!!countd}{1} % cols
+ \dostepwiserecurse{#1}\!!countd\plusone % cols
{\ifenoughcolumncells
- \!!countf=\recurselevel\relax
- \dostepwiserecurse{#2}{\!!counte}{1} % rows
+ \!!countf\recurselevel\relax
+ \dostepwiserecurse{#2}\!!counte\plusone % rows
{\ifenoughcolumncells
\OTRSETdoifcellelse\!!countf\recurselevel
{\enoughcolumncellsfalse}{}%
- \fi}%
+ \fi}%
\fi}%
\fi}
@@ -760,7 +843,7 @@
{\doifsomething{#1}{\edef\preferedcolumn{#1}}%
\doifsomething{#2}{\edef\preferedrow {#2}}}
-\OTRSETsetpreferedcolumnslot{\nofcolumns}{1} % default ?
+\OTRSETsetpreferedcolumnslot{\nofcolumns}{1} % default ?
\let\pofcolumns\mofcolumns
\let\qofcolumns\mofcolumns
@@ -769,77 +852,109 @@
\def\OTRSETstoreincolumnslotLRTB#1%
{\OTRSETprepareforcolumnslot1{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
\mofcolumns\nofcolumns+\currenthcell
- 1\columnmaxcells+\currentvcell{#1}}
+ \plusone\columnmaxcells+\currentvcell{#1}}
\def\OTRSETstoreincolumnslotLRBT#1%
{\OTRSETprepareforcolumnslot3{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
\mofcolumns\nofcolumns+\currenthcell
- \columnmaxcells1-\currentvcell{#1}}
+ \columnmaxcells\plusone-\currentvcell{#1}}
\def\OTRSETstoreincolumnslotRLTB#1%
{\OTRSETprepareforcolumnslot1{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
\nofcolumns\qofcolumns-\currenthcell
- 1\columnmaxcells+\currentvcell{#1}}
+ \plusone\columnmaxcells+\currentvcell{#1}}
\def\OTRSETstoreincolumnslotRLBT#1%
{\OTRSETprepareforcolumnslot3{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
\nofcolumns\qofcolumns-\currenthcell
- \columnmaxcells1-\currentvcell{#1}}
+ \columnmaxcells\plusone-\currentvcell{#1}}
\def\OTRSETstoreincolumnslotTBLR#1%
{\OTRSETprepareforcolumnslot1{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- 1\columnmaxcells+\currentvcell
+ \plusone\columnmaxcells+\currentvcell
\mofcolumns\nofcolumns+\currenthcell{#1}}
\def\OTRSETstoreincolumnslotTBRL#1%
{\OTRSETprepareforcolumnslot1{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- 1\columnmaxcells+\currentvcell
+ \plusone\columnmaxcells+\currentvcell
\nofcolumns\qofcolumns-\currenthcell{#1}}
\def\OTRSETstoreincolumnslotBTLR#1%
{\OTRSETprepareforcolumnslot3{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- \columnmaxcells1-\currentvcell
+ \columnmaxcells\plusone-\currentvcell
\mofcolumns\nofcolumns+\currenthcell{#1}}
\def\OTRSETstoreincolumnslotBTRL#1%
{\OTRSETprepareforcolumnslot3{#1}%
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- \columnmaxcells1-\currentvcell
+ \columnmaxcells\plusone-\currentvcell
\nofcolumns\qofcolumns-\currenthcell{#1}}
\def\OTRSETstoreincolumnslotFXTB#1% fixed column
- {\OTRSETprepareforcolumnslot2{#1}% % 1/2 dependent of place, todo
+ {\OTRSETprepareforcolumnslot2{#1}% % 1/2 dependent of place, todo
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
- \pofcolumns\pofcolumns
- +\currenthcell\preferedrow
- \columnmaxcells+\currentvcell{#1}}
+ \pofcolumns\pofcolumns+\currenthcell
+ \preferedrow\columnmaxcells+\currentvcell{#1}}
\def\OTRSETstoreincolumnslotFXBT#1% fixed column
- {\OTRSETprepareforcolumnslot2{#1}% % 3/2 dependent on place, todo
+ {\OTRSETprepareforcolumnslot2{#1}% % 3/2 dependent on place, todo
+\OTRSETflushtextsofar
\OTRSETstoreincolumnslotindeed
\pofcolumns\pofcolumns+\currenthcell
\columnmaxcells\preferedrow-\currentvcell{#1}}
+% \def\OTRSETstoreincolumnslotHERE#1% fixed column
+% {\OTRSETprepareforcolumnslot2{#1}%
+% \OTRSETflushtextsofar
+% \getnoflines\pagetotal \advance\noflines\columnfirstcell
+% \OTRSETstoreincolumnslotindeed
+% \mofcolumns\mofcolumns+\currenthcell
+% \noflines\columnmaxcells+\currentvcell{#1}%
+% \OTRSETsetvsize}
+
+\chardef\OTRSETforcefixedfloats=0
+
\def\OTRSETstoreincolumnslotHERE#1% fixed column
+ {\ifcase\OTRSETforcefixedfloats
+ \OTRSETstoreincolumnslotSOMEWHERE2{#1}%
+ \else
+ \OTRSETstoreincolumnslotFIXD{#1}%
+ \fi}
+
+\def\OTRSETstoreincolumnslotFIXD#1% fixed column
{\OTRSETprepareforcolumnslot2{#1}%
- \OTRSETflushtextsofar
+ % no flush text sofar here
+ \snaptogrid\vbox{\box#1}}
+
+\def\OTRSETstoreincolumnslotSOMEWHERE#1#2%
+ {\OTRSETprepareforcolumnslot{#1}{#2}%
+ \OTRSETflushtextsofar
\getnoflines\pagetotal \advance\noflines\columnfirstcell
\OTRSETstoreincolumnslotindeed
\mofcolumns\mofcolumns+\currenthcell
- \noflines\columnmaxcells+\currentvcell{#1}%
+ \noflines\columnmaxcells+\currentvcell{#2}%
\OTRSETsetvsize}
\def\OTRSETstoreincolumnslotindeed#1#2#3#4#5#6#7#8#9%
- {\OTRSETflushtextsofar
- \ifnum\preferedcolumn<\mofcolumns
+ {%\OTRSETflushtextsofar
+ \ifnum\preferedcolumn<\mofcolumns
\let\pofcolumns\mofcolumns
\else
\let\pofcolumns\preferedcolumn
@@ -848,8 +963,8 @@
\ifnum\mofcolumns=\nofcolumns
\def\qofcolumns{\mofcolumns}%
\else
- \scratchcounter\mofcolumns
- \advance\scratchcounter 1
+ \scratchcounter\mofcolumns
+ \advance\scratchcounter \plusone
\edef\qofcolumns{\the\scratchcounter}%
\fi
\else
@@ -858,10 +973,14 @@
\enoughcolumncellsfalse
\donefalse
\dostepwiserecurse{#1}{#2}{#31}
- {\ifdone\else
+ {\ifdone
+ \exitloop
+ \else
#4=\recurselevel
\dostepwiserecurse{#5}{#6}{#71}
- {\ifdone\else
+ {\ifdone
+ \exitloop
+ \else
#8=\recurselevel
\OTRSETcheckcolumnspace\currenthcell\currentvcell{#9}%
\ifenoughcolumncells \donetrue \fi
@@ -886,8 +1005,7 @@
\ifdim\ht\OTRSETsavedfootnotes>\zeropoint
\OTRSETsetfreecells\mofcolumns\columnfirstcell
\ifsomefreecolumncells
- \getnoflines{\ht\OTRSETsavedfootnotes}%
-\relax
+ \getnoflines{\ht\OTRSETsavedfootnotes}\relax
\ifnum\columnfreecells<\noflines
\global\somefreecolumncellsfalse
\else
@@ -897,7 +1015,7 @@
\ifsomefreecolumncells
% ok, enough room for notes
%\message{[flt]}% float
- \else % ?
+ \else % ?
\OTRSETsavebox{#9}%
\OTRSETerasegridcells\currenthcell\currentvcell\columnhcells\columnvcells
%\message{[clr]}% save box
@@ -915,33 +1033,24 @@
\OTRSETsavebox{#9}%
\fi}
-% \def\columnslotspacing{2}
-%
-% \def\OTRSETstoreincolumnslot#1#2% {method} {box} % alleen last
-% {\dp#2=\zeropoint
-% \ifcase\columnslotspacing\else
-% \setbox#2=\vbox spread \columnslotspacing\lineheight
-% {\vss\box#2\vss}%
-% \fi
-% %\dp#2=\zeropoint
-% \doifdefinedelse{\strippedcsname\OTRSETstoreincolumnslot#1}
-% {\getvalue{\strippedcsname\OTRSETstoreincolumnslot#1}{#2}}
-% {\copy#2}}
-
-\def\columnslotspacing{1}
-
-\def\OTRSETstoreincolumnslot#1#2% {method} {box} % alleen last
- {%\dp#2=\zeropoint
- %\ifcase\columnslotspacing\else
- % \setbox#2=\vbox spread \columnslotspacing\lineheight
- % {\vss\box#2\vss}%
- %\fi
- \doifdefinedelse{\strippedcsname\OTRSETstoreincolumnslot#1}
- {\getvalue{\strippedcsname\OTRSETstoreincolumnslot#1}{#2}}
- {\OTRSETstoreincolumnsloUNKNOWN{#1}}}
-
-\def\OTRSETstoreincolumnsloUNKNOWN#1%
- {\OTRSETprepareforcolumnslot2{#1}\copy#1}
+\chardef\columnslotspacing \plusone
+
+\def\OTRSETstoreincolumnslot#1% #2 % {method} {box} % alleen last
+ {% no messing around here
+ % \dp#2=\zeropoint
+ % \ifcase\columnslotspacing\else
+ % \setbox#2=\vbox spread \columnslotspacing\lineheight
+ % {\vss\box#2\vss}%
+ % \fi
+ % and don't change this any more
+% \doifdefinedelse{\strippedcsname\OTRSETstoreincolumnslot#1}
+% {\getvalue{\strippedcsname\OTRSETstoreincolumnslot#1}{#2}}
+% {\OTRSETstoreincolumnslotUNKNOWN{#2}}}
+ \executeifdefined{\strippedcsname\OTRSETstoreincolumnslot#1}
+ \OTRSETstoreincolumnslotUNKNOWN} % {#2}}
+
+\def\OTRSETstoreincolumnslotUNKNOWN#1%
+ {\OTRSETprepareforcolumnslot2{#1}\copy#1} % {} ?
\def\OTRSETprepareforcolumnslot#1#2% 1=hoog 2=midden 3=laag
{\dp#2\zeropoint
@@ -949,34 +1058,26 @@
\scratchdimen\columnslotspacing\lineheight
\ifnum#1=2 \scratchdimen2\scratchdimen \fi
\setbox#2\vbox spread \scratchdimen
- {\ifnum#1>1\vss\fi\box#2\ifnum#1<3\vss\fi}%
+ {\ifnum#1>1\vss\fi\box#2\relax\ifnum#1<3\vss\fi}%
\fi}
\def\OTRSETdocheckiffloatfits % eigenlijk moet else float anders
- {\ifnofloatpermitted
- \global\roomforfloatfalse
- \else
- \global\roomforfloattrue
- \fi}
-
-%\def\OTRSETsavebox#1%
-% {\setbox\floatbox=\box#1\dosavefloat}
+ {\global\ifnofloatpermitted\roomforfloatfalse\else\roomforfloattrue\fi}
-\def\OTRSETsavebox#1% clean up the skips
- {\ifhbox#1% spans and so
- \global\setbox\floatbox=\vbox{\box#1}%
+\def\OTRSETsavebox#1% clean up the skips
+ {\ifhbox#1% spans and so
+ \global\setbox\floatbox\vbox{\box#1}%
\else
- \setbox\scratchbox=\vbox
+ \setbox\scratchbox\vbox
{\unvbox#1\unskip\unskip\unskip
- \global\setbox\floatbox\lastbox
- }%\unskip\unskip\unskip\box\floatbox}%
+ \global\setbox\floatbox\lastbox}%
\fi
\dosavefloat}
-\def\OTRSETflushfloatbox% nog verder doorvoeren en meer info in marge
+\def\OTRSETflushfloatbox % nog verder doorvoeren en meer info in marge
{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}
-\def\OTRSETdoflushfloats%
+\def\OTRSETdoflushfloats
{\bgroup
\def\OTRSETsavebox##1{\!!doneafalse}%
\doloop
@@ -984,8 +1085,8 @@
\dogetfloat
\ifdim\wd\floatbox>\zeropoint
\!!doneatrue
- \dp\floatbox=\zeropoint
- \OTRSETstoreincolumnslot{TBLR}\floatbox
+ \dp\floatbox\zeropoint
+ \OTRSETstoreincolumnslot{TBLR}\floatbox
\if!!donea
%\message{[flu]}%
\else
@@ -1005,65 +1106,65 @@
\newif\ifcentergridcellonly \centergridcellonlyfalse
\newif\ifautocentergridcellonly \autocentergridcellonlytrue
-\def\OTRSETcentergridcells%
+\def\OTRSETcentergridcells
{\ifcentergridcells
- \dorecurse{\nofcolumns}
- {\currenthcell=\recurselevel
-\ifautocentergridcellonly
- % we prevent centering when the next column is empty
- % to be checked ! ! ! !
- \advance\currenthcell 1
- \centergridcellonlytrue
- \ifnum\currenthcell>\nofcolumns
- % ok already
- \else
- % only span if there is a next column with content
- \dorecurse{\columnmaxcells}
- {\ifdim\ht\OTRSETgridcell\currenthcell\currentvcell>\zeropoint
- \centergridcellonlyfalse
- \else\ifdim\dp\OTRSETgridcell\currenthcell\currentvcell>\zeropoint
- \centergridcellonlyfalse
- \fi\fi}%
- \fi
-\fi
- \currenthcell=\recurselevel
- \dorecurse{\columnmaxcells}
- {\currentvcell=\recurselevel\relax
+ \dorecurse\nofcolumns
+ {\currenthcell\recurselevel
+ \ifautocentergridcellonly
+ % we prevent centering when the next column is empty
+ % to be checked ! ! ! !
+ \advance\currenthcell \plusone
+ \centergridcellonlytrue
+ \ifnum\currenthcell>\nofcolumns
+ % ok already
+ \else
+ % only span if there is a next column with content
+ \dorecurse\columnmaxcells
+ {\ifdim\ht\OTRSETgridcell\currenthcell\currentvcell>\zeropoint
+ \centergridcellonlyfalse
+ \else\ifdim\dp\OTRSETgridcell\currenthcell\currentvcell>\zeropoint
+ \centergridcellonlyfalse
+ \fi\fi}%
+ \fi
+ \fi
+ \currenthcell\recurselevel
+ \dorecurse\columnmaxcells
+ {\currentvcell\recurselevel\relax
\ifdim\ht\OTRSETgridcell\currenthcell\currentvcell>\zeropoint
\ifdim\dp\OTRSETgridcell\currenthcell\currentvcell=\zeropoint
\bgroup
- \setbox\scratchbox=\OTRSETgetgridcell\currenthcell\currentvcell
+ \setbox\scratchbox\OTRSETgetgridcell\currenthcell\currentvcell
\getnoflines{\ht\scratchbox}%
- \!!counta=\currentvcell
+ \!!counta\currentvcell
\advance\!!counta -\noflines
- \advance\!!counta 1
- % first col always ok
- \!!countb=\currenthcell
- \!!countc=\currenthcell \advance\!!countc 1
+ \advance\!!counta \plusone
+ % first col always ok
+ \!!countb\currenthcell
+ \!!countc\currenthcell
+ \advance\!!countc \plusone
\!!donebtrue
-\ifcentergridcellonly \!!countc=\maxdimen \fi
- \dostepwiserecurse{\!!countc}{\nofcolumns}{1}
+ \ifcentergridcellonly
+ \!!countc\maxdimen
+ \fi
+ \dostepwiserecurse\!!countc\nofcolumns\plusone
{\if!!doneb
\let\xrecurselevel\recurselevel
- \dostepwiserecurse{\!!counta}{\currentvcell}{1}
+ \dostepwiserecurse\!!counta\currentvcell\plusone
{\ifdim\ht\OTRSETgridcell\xrecurselevel\recurselevel>\zeropoint
\!!donebfalse
\else\ifdim\wd\OTRSETgridcell\xrecurselevel\recurselevel>\zeropoint
\!!donebfalse
\fi\fi}%
\if!!doneb
- \!!countb=\xrecurselevel
+ \!!countb\xrecurselevel
\fi
\fi}%
-% \totalcolumnspace=\hsize
-\totalcolumnspace=\OTRSETlocalwidth\currenthcell
- \dostepwiserecurse{\!!countc}{\!!countb}{1}
-% {\advance\totalcolumnspace \hsize\relax
-{\advance\totalcolumnspace \OTRSETlocalwidth\recurselevel
+ \totalcolumnspace\OTRSETlocalwidth\currenthcell
+ \dostepwiserecurse\!!countc\!!countb\plusone
+ {\advance\totalcolumnspace \OTRSETlocalwidth\recurselevel
\advance\totalcolumnspace \OTRSETgetparameter\c!afstand\recurselevel}%
\ifdim\totalcolumnspace>\wd\scratchbox
- \setbox\scratchbox=\hbox to \totalcolumnspace{\hss\box\scratchbox\hss}%
- % \wd\scratchbox=\hsize
+ \setbox\scratchbox\hbox to \totalcolumnspace{\hss\box\scratchbox\hss}%
\fi
\OTRSETsetgridcell\currenthcell\currentvcell\box\scratchbox
\egroup
@@ -1071,31 +1172,31 @@
\fi}}%
\fi}
-\def\OTRSETinitializecolumns% once per page
+\def\OTRSETinitializecolumns% once per page
{\columnspreadtrue % todo
\ifcolumnspread
- \global\rofcolumns=\getvalue{\??mc\OTRSETidentifier\c!nrechts}%
- \global\lofcolumns=\getvalue{\??mc\OTRSETidentifier\c!nlinks}%
- \global\tofcolumns=\rofcolumns \relax
+ \global\rofcolumns\getvalue{\??mc\OTRSETidentifier\c!nrechts}%
+ \global\lofcolumns\getvalue{\??mc\OTRSETidentifier\c!nlinks}%
+ \global\tofcolumns\rofcolumns \relax
\ifodd\realpageno\relax
- \global\nofcolumns=\rofcolumns
+ \global\nofcolumns\rofcolumns
\else
\global\advance\tofcolumns\lofcolumns
- \global\nofcolumns=\lofcolumns
+ \global\nofcolumns\lofcolumns
\fi
\else
- \global\nofcolumns=\getvalue{\??mc\OTRSETidentifier\c!n}%
- \global\rofcolumns=\nofcolumns
- \global\lofcolumns=\nofcolumns
- \global\tofcolumns=\nofcolumns
+ \global\nofcolumns\getvalue{\??mc\OTRSETidentifier\c!n}%
+ \global\rofcolumns\nofcolumns
+ \global\lofcolumns\nofcolumns
+ \global\tofcolumns\nofcolumns
\fi
-\OTRSETassignwidths
- \global\mofcolumns=1
+ \OTRSETassignwidths
+ \global\mofcolumns\plusone
\columnerasegridboxes}
% vanaf hier:
-\def\definecolumnset%
+\def\definecolumnset
{\dodoubleargument\dodefinecolumnset}
\def\dodefinecolumnset[#1][#2]%
@@ -1108,7 +1209,10 @@
\c!nlinks=\getvalue{\??mc#1\c!n},
\c!nrechts=\getvalue{\??mc#1\c!n},
#2]%
- \dorecurse{\getvalue{\??mc#1\c!nlinks}} % todo
+ \redodefinecolumnset[#1]}
+
+\def\redodefinecolumnset[#1]%
+ {\dorecurse{\getvalue{\??mc#1\c!nlinks}} % todo
{\dododefinecolumnset[#1][\recurselevel]}%
\dorecurse{\getvalue{\??mc#1\c!nrechts}} % todo
{\dododefinecolumnset[#1][\recurselevel]}%
@@ -1124,43 +1228,111 @@
\c!uitlijnen=,
\c!afstand=\getvalue{\??mc#1\c!afstand}]}
-\def\setupcolumnset%
+\def\setupcolumnset
{\dotripleargument\dosetupcolumnset}
\def\dosetupcolumnset[#1][#2][#3]%
{\ifthirdargument
\def\docommando##1%
- {\doifelse{##1}{\v!elk}
- {\dorecurse{\getvalue{\??mc#1\c!n}}{\docommando{\recurselevel}}}
+ {\doifelse{##1}\v!elk
+ {\dorecurse{\getvalue{\??mc#1\c!n}}{\docommando\recurselevel}}
{\getparameters[\??mc#1##1][#3]}}%
\processcommalist[#2]\docommando
\else
\getparameters[\??mc#1][#2]%
\fi}
+
+\definecolumnset[\s!default][\c!n=2] % fallback
+
+\def\OTRSETgotonextpage
+ {\vfill\eject
+ \relax\ifnum\mofcolumns>\plusone
+ \OTRSETgotocolumn[\v!laatste]%
+ \ifnum\mofcolumns>\plusone
+ \OTRSETgotocolumn[\v!forceer]%
+ \fi
+ \fi}
-\def\OTRSETgotocolumn%
+\let\OTRSETgotonextpageX\OTRSETgotonextpage % will become obsolete
+
+\def\OTRSETgotocolumn
{\dosingleempty\doOTRSETgotocolumn}
+% \def\doOTRSETgotocolumn[#1]% first|last|yes|<number>
+% {\doifnumberelse{#1}
+% {\OTRSETdummycolumn
+% \doloop
+% {\ifnum\mofcolumns<#1\relax
+% \OTRSETdummycolumn
+% \else
+% \exitloop
+% \fi}}
+% {\processallactionsinset
+% [#1]
+% [ \v!ja=>\OTRSETdummycolumn,
+% \v!forceer=>\OTRSETdummycolumn,
+% \v!eerste=>{\doOTRSETgotocolumn[1]},
+% \v!laatste=>\expanded{\doOTRSETgotocolumn[\the\nofcolumns]},
+% \s!default=>\OTRSETdummycolumn]}}
+
\def\doOTRSETgotocolumn[#1]% first|last|yes|<number>
{\doifnumberelse{#1}
- {\OTRSETdummycolumn
- \doloop
- {\ifnum\mofcolumns<#1
- \OTRSETdummycolumn
- \else
- \exitloop
- \fi}}
- {\processaction
+ {\ifnum\mofcolumns<#1\relax
+ \vfill\eject % \doejectpage\eject
+ \doloop
+ {\ifnum\mofcolumns<#1\relax
+ \OTRSETdummycolumn \else \exitloop
+ \fi}%
+ \fi}
+ {\processallactionsinset
[#1]
- [ \v!ja=>\OTRSETdummycolumn,
+ [ \v!ja=>\OTRSETdummycolumn,
+ \v!forceer=>\OTRSETdummycolumn,
\v!eerste=>{\doOTRSETgotocolumn[1]},
- \v!laatste=>{\doOTRSETgotocolumn[\nofcolumns]},
- \v!default=>\OTRSETdummycolumn]}}
+ \v!laatste=>\expanded{\doOTRSETgotocolumn[\the\nofcolumns]},
+ \s!default=>\OTRSETdummycolumn]}}
+
+% to be documented and tested, not yet that robust
+\def\OTRSETgotocell#1#2%
+ {\endgraf
+ \gdef\gotocellcounter{0}%
+ \doloop
+ {\ifnum\mofcolumns<#1\relax
+ \doglobal\increment\gotocellcounter\relax
+ \ifnum\gotocellcounter>#1\relax
+ \line{\strut}\crlf
+ \line{\strut}\crlf
+ \column
+ \writestatus{columnset}{quitting goto cell}%
+ \exitloop
+ \else
+ \column
+ \fi
+ \else
+ \exitloop
+ \fi}%
+ \ifnum\mofcolumns=#1\relax
+ \ifnum#2>1
+ \scratchcounter\zerocount
+ \currenthcell\mofcolumns
+ \currentvcell#2\advance\currentvcell \minusone
+ \dorecurse\currentvcell
+ {\OTRSETdoifcellelse\mofcolumns\recurselevel\donothing
+ {\advance\scratchcounter\plusone}}
+ \getnoflines\pagetotal
+ \advance\scratchcounter-\noflines
+ \ifnum\scratchcounter>\zerocount
+ \dorecurse\scratchcounter{\line{\strut}}%
+ \fi
+ \fi
+ \fi
+ \OTRSETsetvsize}
+
\def\OTRSETdummycolumn
{\vbox{\strut}
- \vskip-\lineheight
- \vfill
+ \vskip-\lineheight
+ \vfill
\eject}
\newcounter\columnsetlevel
@@ -1172,8 +1344,8 @@
\def\dostartcolumnset[#1][#2]%
{\increment\columnsetlevel\relax
\doglobal\newcounter\balancingpageno
- \gdef\localcolumnmaxcells{0}%
- \ifnum\columnsetlevel=1
+ \globallet\localcolumnmaxcells\!!zerocount
+ \ifnum\columnsetlevel=\plusone
%\OTRSETgetmanualbalance
\bgroup
\def\currentcolumnset{#2}%
@@ -1183,29 +1355,54 @@
%\global\let\OTRSETidentifier\currentcolumnset
\binnenkolommentrue % will be different flag
%\let\redofloatorder\gobbleoneargument % will also be a flag
- \let\kolom\OTRSETgotocolumn%
\activateotr{SET}{ONE}% andere naam, activate or so
- \xdef\OTRSETlist{#1}%
- \OTRSETgotonextpage
- \OTRSETgetmanualbalance % here
+\doifelsenothing{#1}
+ {\globallet\OTRSETlist\s!default}
+ {\xdef\OTRSETlist{#1}}%
+ \OTRSETstartnextpage
+ \OTRSETgetmanualbalance % here
\OTRSETassignwidths
\OTRSETsethsize
\else
\bgroup
\fi}
+% \def\stopcolumnset
+% {\relax
+% \ifnum\columnsetlevel=\plusone
+% \par
+% \OTRSETsetmanualbalance
+% \dostopcolumnset
+% \egroup
+% \global\footnotelimittrue
+% \setvsize
+% \sethsize
+% \ifvoid\OTRfinalpagebox\else
+% % probably balanced
+% \ifdim\ht\OTRfinalpagebox<\teksthoogte
+% \snaptogrid[\v!pagina]\hbox{\box\OTRfinalpagebox}
+% \else
+% \box\OTRfinalpagebox
+% \fi
+% \fi
+% \ifsomefloatwaiting \setvsize \pagina \setvsize \fi
+% \else
+% \egroup
+% \fi
+% \decrement\columnsetlevel\relax}
+
\def\stopcolumnset
{\relax
- \ifnum\columnsetlevel=1
- \par
- \OTRSETsetmanualbalance
+ \ifnum\columnsetlevel=\plusone
+ \pagebreak
+ \OTRSETsetmanualbalance
\dostopcolumnset
\egroup
\global\footnotelimittrue
\setvsize
\sethsize
\ifvoid\OTRfinalpagebox\else
- % probably balanced
+ % probably balanced
\ifdim\ht\OTRfinalpagebox<\teksthoogte
\snaptogrid[\v!pagina]\hbox{\box\OTRfinalpagebox}
\else
@@ -1218,7 +1415,7 @@
\fi
\decrement\columnsetlevel\relax}
-\def\dostopcolumnset%
+\def\dostopcolumnset
{%\OTRSETdofinalflushfloats % yes/no
\ifbalancecolumns
\OTRSETdobalance
@@ -1231,91 +1428,93 @@
\def\localcolumnmaxcells{0}
-\def\OTRSETmanualbalance
- {\ifbalancecolumns
+\def\OTRSETmanualbalance
+ {\ifbalancecolumns
\let\savedcolumnmaxcells\columnmaxcells
\ifnum\realpageno=\balancingpageno\relax
- \ifnum\mofcolumns=1
+ \ifnum\mofcolumns=\plusone
\dorecurse\nofcolumns
- {\!!counta=\recurselevel
- \!!countb=\balancingcolumnmaxcells\!!counta\relax
+ {\!!counta\recurselevel
+ \!!countb\balancingcolumnmaxcells\!!counta\relax
\ifnum\!!countb>\localcolumnmaxcells
- \xdef\localcolumnmaxcells{\the\!!countb}%
+ \xdef\localcolumnmaxcells{\the\!!countb}%
\fi
- \advance\!!countb 1
- \dostepwiserecurse\!!countb\columnmaxcells1
+ \advance\!!countb \plusone
+ \dostepwiserecurse\!!countb\columnmaxcells\plusone
{\OTRSETsetgridcell\!!counta\recurselevel\copy\placeholderboxe}}%
\fi
\fi
\fi}
-\def\balancingcolumnmaxcells#1% pas op: etex
- {\ifcsname\??mc\OTRSETidentifier\number#1\c!regels\endcsname
- \csname\??mc\OTRSETidentifier\number#1\c!regels\endcsname
- \else\ifcsname\??mc\OTRSETidentifier\c!regels\endcsname
- \csname\??mc\OTRSETidentifier\c!regels\endcsname
+\def\balancingcolumnmaxcells#1% pas op: etex
+ {\ifcsname\??mc\OTRSETidentifier\number#1\c!regels\endcsname
+ \csname\??mc\OTRSETidentifier\number#1\c!regels\endcsname
+ \else\ifcsname\??mc\OTRSETidentifier\c!regels\endcsname
+ \csname\??mc\OTRSETidentifier\c!regels\endcsname
\else
\savedcolumnmaxcells
\fi\fi}
-\def\OTRSETsetmanualbalance
- {\doglobal\addtocommalist{\realfolio}\OTRSETbalancinglist}
+\def\OTRSETsetmanualbalance
+ {\doglobal\addtocommalist\realfolio\OTRSETbalancinglist}
-\def\OTRSETpresetmanualbalance
+\def\OTRSETpresetmanualbalance
{\doifdefined{\??mc\OTRSETidentifier\c!regels}
{\getcommacommandsize[\csname\??mc\OTRSETidentifier\c!regels\endcsname]%
- \ifnum\commalistsize>1
+ \ifnum\commalistsize>\plusone
\scratchcounter\zerocount
\def\docommando##1%
- {\advance\scratchcounter1
+ {\advance\scratchcounter\plusone
\setvalue{\??mc\OTRSETidentifier\the\scratchcounter\c!regels}{##1}}%
\processcommacommand
[\csname\??mc\OTRSETidentifier\c!regels\endcsname]\docommando
\fi}}
-\def\OTRSETgetmanualbalance
+\def\OTRSETgetmanualbalance
{\gettwopassdata\s!colset
\iftwopassdatafound
- \OTRSETpresetmanualbalance
+ \OTRSETpresetmanualbalance
\global\let\balancingpageno\twopassdata
\else
\doglobal\newcounter\balancingpageno
\fi
- \global\balancingcolumnsfalse}
+ \global\balancingcolumnsfalse}
%\def\OTRSETnobalance
-% {\iflastcolumnfootnotes % testen ! optie
+% {\iflastcolumnfootnotes % testen ! optie
% % inhibit flush of floats !
% \dostepwiserecurse{\mofcolumns}{\nofcolumns}{1}
% {\vskip-\lineheight\vbox{\strut}\vfill\eject}%
% \else
-% \ifdim\pagetotal>\zeropoint
-% \vfill \eject \OTRSETdofinalflush
-% \fi
+% \ifdim\pagetotal>\zeropoint
+% \vfill \eject \OTRSETdofinalflush
+% \fi
% \fi}
\def\OTRSETnobalance
- {\iflastcolumnfootnotes % testen ! optie
+ {\iflastcolumnfootnotes % testen ! optie
% inhibit flush of floats !
- \dostepwiserecurse{\mofcolumns}{\nofcolumns}{1}
+ \dostepwiserecurse\mofcolumns\nofcolumns\plusone
{\vskip-\lineheight\vbox{\strut}\vfill\eject}%
\else
- \ifdim\pagetotal>\zeropoint
-\ifnum\mofcolumns=\nofcolumns
- \OTRSETflushfinalfootnotes
- \vfill \eject
-\else
- \vfill \eject
- \OTRSETdofinalflush
- \OTRSETdofinaloutput
-\fi
- \fi
+ \ifdim\pagetotal>\zeropoint
+ \ifnum\mofcolumns=\nofcolumns
+ \OTRSETflushfinalfootnotes
+ \vfill \eject
+ \else
+ \vfill \eject
+ \OTRSETdofinalflush
+ \OTRSETdofinaloutput
+ \fi
+ \fi
\fi}
-\def\OTRSETgotonextpage%
- {\doifsomething{\OTRSETlist}
+\def\OTRSETstartnextpage
+ {\doifsomething\OTRSETlist
{\getfromcommacommand[\OTRSETlist][1]%
\global\let\OTRSETidentifier\commalistelement
+ \doifundefined{\??mc\OTRSETidentifier\c!n}
+ {\globallet\OTRSETidentifier\s!default}%
\let\newcommalistelement\empty
\doglobal\replaceincommalist\OTRSETlist1%
\OTRSETrestart}}
@@ -1330,82 +1529,110 @@
\OTRSETsethsize
\OTRSETsetplaceholders
\OTRSEThandlepreposttext
-\initializecolumntextareas % name !
+ \initializecolumntextareas % name !
\OTRSETsetvsize}
\OTRSEToutput
{\OTRSETnaturalflush
-% \OTRSETgotonextpage
-\OTRSETdoflushfloats % zou eigenlijk in \flushsavedfloats moeten (gaat fout)
+ %\OTRSETstartnextpage
+ \OTRSETdoflushfloats % zou eigenlijk in \flushsavedfloats moeten (gaat fout)
\OTRSETcheckfreelines
\OTRSETchecksidefloat}
-\def\OTRSETinitializefeatures%
+\def\OTRSETinitializefeatures
{% number of lines
-% new: raw
+ % new: raw
\getrawnoflines\teksthoogte\xdef\columnmaxcells{\the\noflines}%
% direction
\doifelsevalue{\??mc\OTRSETidentifier\c!richting}\v!rechts
- {\chardef\columndirection0}
- {\chardef\columndirection1}%
- % balancing
+ {\chardef\columndirection\zerocount}
+ {\chardef\columndirection\plusone}%
+ % balancing
\doifelsevalue{\??mc\OTRSETidentifier\c!balanceren}\v!ja
{\balancecolumnstrue}
{\balancecolumnsfalse}}
+% keep 'm for a while
+%
+% \installoutput\OTRSETflushpreposttext
+% {\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}%
+% \ifcarryoverfootnotes \else
+% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
+% \fi}
+%
+% to be tested on 'boekinhoud' in 'pascal/demo-bbi'
+%
+% junk ! ! ! ! !
+%
+%\installoutput\OTRSETflushpreposttext
+% {\global\setbox\precolumnbox\vbox
+% {\unvbox\normalpagebox
+% \strut\vskip-2\lineheight\strut}% we want a proper depth
+% \ifcarryoverfootnotes \else
+% \global\setbox\postcolumnbox\vbox{\placebottomnotes}%
+% \fi}
+%
+% \starttext
+% \definecolumnset[two][n=2]
+% \startcolumnset[two] \dorecurse{4}{\input tufte } \stopcolumnset
+% \input tufte
+% \startcolumnset[two] \input tufte \stopcolumnset
+% \stoptext
+
\installoutput\OTRSETflushpreposttext
{\global\setbox\precolumnbox\vbox{\unvbox\normalpagebox}%
+ \global\dp\precolumnbox\strutdepth
\ifcarryoverfootnotes \else
\global\setbox\postcolumnbox\vbox{\placebottomnotes}%
\fi}
-\def\OTRSEThandlepreposttext%
- {\ifdim\ht\precolumnbox>\zeropoint % new
+\def\OTRSEThandlepreposttext
+ {\ifdim\ht\precolumnbox>\zeropoint % new
\getnoflines{\ht\precolumnbox}%
\doOTRSETsetgridcells
{\copy\placeholderboxe}
- 11\nofcolumns\noflines
+ \plusone\plusone\nofcolumns\noflines
{\box\precolumnbox}%
\fi
\ifdim\ht\postcolumnbox>\zeropoint % new, otherwise empty bottom line
\getnoflines{\ht\postcolumnbox}%
\advance\columnfreecells -\noflines
- \advance\columnfreecells 1
+ \advance\columnfreecells \plusone
\doOTRSETsetgridcells
{\copy\placeholderboxe}
- 1\columnfreecells\nofcolumns\noflines
+ \plusone\columnfreecells\nofcolumns\noflines
{\box\postcolumnbox}%
\fi}
-\def\OTRSETchecksidefloat%
+\def\OTRSETchecksidefloat
{} % {\sidefloatoutput}
-\def\OTRSETfinalsidefloatoutput%
+\def\OTRSETfinalsidefloatoutput
{}
-\def\OTRSETcheckgrid%
- {\topskip=1\topskip
+\def\OTRSETcheckgrid
+ {\topskip1\topskip
\ifforcecolumngrid
- \widowpenalty=0
- \clubpenalty=0
- \brokenpenalty=0
+ \widowpenalty\zerocount
+ \clubpenalty\zerocount
+ \brokenpenalty\zerocount
\fi}
\def\OTRSETcheckinsert%
{\iflastcolumnfootnotes
- \ifnum\nofcolumns=\mofcolumns
- \OTRSETforceinserts
- \else
- \OTRSETinhibitinserts
+ \ifnum\nofcolumns=\mofcolumns
+ \OTRSETforceinserts
+ \else
+ \OTRSETinhibitinserts
\fi
\else
- \OTRSETforceinserts
+ \OTRSETforceinserts
\fi}
-\def\OTRSETforceinserts%
+\def\OTRSETforceinserts
{\enablenotes}
-\def\OTRSETinhibitinserts%
+\def\OTRSETinhibitinserts
{\disablenotes}
% interface to footnotes
@@ -1422,7 +1649,7 @@
% \divide#2 \scratchcounter}
% {#2=\getvalue{\??mc#1\c!breedte}}}
-%\def\OTRSETassignwidth#1\to#2% assumes mofcolumns
+%\def\OTRSETassignwidth#1\to#2% assumes mofcolumns
% {\doifelsevalue{\??mc#1\number\mofcolumns\c!breedte}{\v!passend}
% {#2=\zetbreedte
% \scratchcounter=0
@@ -1434,24 +1661,24 @@
% \divide#2 by \scratchcounter}
% {#2=\getvalue{\??mc#1\number\mofcolumns\c!breedte}}}
%
-% replaced by
+% replaced by
%
-%\def\OTRSETassignwidth#1\to#2% assumes mofcolumns
+%\def\OTRSETassignwidth#1\to#2% assumes mofcolumns
% {#2=\OTRSETlocalwidth\mofcolumns}
-\def\OTRSETassignwidths%
+\def\OTRSETassignwidths
{%\scratchdimen\zetbreedte
- \freezetextwidth \scratchdimen\tekstbreedte
+ \freezetextwidth \scratchdimen\tekstbreedte
%
- \scratchcounter0
+ \scratchcounter\zerocount
\dorecurse\nofcolumns
- {\doifelsevalue{\??mc\OTRSETidentifier\recurselevel\c!breedte}{\v!passend}
- {\advance\scratchcounter 1 }
+ {\doifelsevalue{\??mc\OTRSETidentifier\recurselevel\c!breedte}\v!passend
+ {\advance\scratchcounter \plusone }
{\advance\scratchdimen -\getvalue{\??mc\OTRSETidentifier\recurselevel\c!breedte}}%
\advance\scratchdimen -\getvalue{\??mc\OTRSETidentifier\recurselevel\c!afstand}}%
\divide\scratchdimen \scratchcounter
\dorecurse\nofcolumns
- {\doifelsevalue{\??mc\OTRSETidentifier\recurselevel\c!breedte}{\v!passend}
+ {\doifelsevalue{\??mc\OTRSETidentifier\recurselevel\c!breedte}\v!passend
{\dimen0=\scratchdimen}
{\dimen0=\getvalue{\??mc\OTRSETidentifier\recurselevel\c!breedte}}%
\setxvalue{\??mc\recurselevel\??mc\c!breedte}{\the\dimen0}}}
@@ -1468,24 +1695,24 @@
\def\columnplaceholder#1#2%
{\hbox
- {\localcolortrue
- \setbox\scratchbox\hbox to \hsize
- {\iftracecolumnset
- #2\hskip-.5ex\vrule\!!width1ex\!!height.5ex\!!depth.5ex\hss
- \fi
- \hss}%
- \ifcase#1\relax
- \ht\scratchbox\zeropoint
- \dp\scratchbox\zeropoint
- \wd\scratchbox\zeropoint
- \else
- \wd\scratchbox\hsize
- \ht\scratchbox\ht\strutbox
- \dp\scratchbox\dp\strutbox
- \fi
- \box\scratchbox}}
+ {\localcolortrue
+ \setbox\scratchbox\hbox to \hsize
+ {\iftracecolumnset
+ #2\hskip-.5ex\vrule\!!width1ex\!!height.5ex\!!depth.5ex\hss
+ \fi
+ \hss}%
+ \ifcase#1\relax
+ \ht\scratchbox\zeropoint
+ \dp\scratchbox\zeropoint
+ \wd\scratchbox\zeropoint
+ \else
+ \wd\scratchbox\hsize
+ \ht\scratchbox\ht\strutbox
+ \dp\scratchbox\dp\strutbox
+ \fi
+ \box\scratchbox}}
-\def\OTRSETsetplaceholders%
+\def\OTRSETsetplaceholders
{\global\setbox\placeholderboxa\columnplaceholder0\cyan
\global\setbox\placeholderboxb\columnplaceholder0\green
\global\setbox\placeholderboxc\columnplaceholder0\blue
@@ -1494,24 +1721,26 @@
\global\setbox\placeholderboxf\columnplaceholder1\darkgray}
\def\doOTRSETshowstatus
- {\llap{\tt\tfxx\blue(\number\columnfirstcell\#\number\columnfreecells)}}
+ {\llap{\tt\tfxx\blue
+ (\the\vsize->\number\columnfirstcell\#\number\columnfreecells)%
+ \hskip\leftskip}}
\def\OTRSETshowstatus
{\iftracecolumnset \doOTRSETshowstatus \fi}
-\appendtoks \OTRSETshowstatus \to \everypar
+\appendtoks \OTRSETshowstatus \to \everypar
% page contents
\def\OTRSETdopagecontents#1#2% takes two args: \box<n> \unvbox<n>
- {\vbox to \teksthoogte
- {\forgetall#1#2\pushcolor}}
+ {\vbox to \teksthoogte{\forgetall#1#2\pushcolor}}
-\def\OTRSETsomepagefloat {\def\floatmethod{PAGE}\OTRSETsomeslotfloat} % check
-\def\OTRSETsomeherefloat {\def\floatmethod{HERE}\OTRSETsomeslotfloat} % check
-\def\OTRSETsomeelsefloat {\def\floatmethod{HERE}\OTRSETsomeslotfloat} % check
-\def\OTRSETsometopfloat {\def\floatmethod{TOPS}\OTRSETsomeslotfloat} % check
-\def\OTRSETsomebottomfloat{\def\floatmethod{BOTS}\OTRSETsomeslotfloat} % check
+\def\OTRSETsomepagefloat {\def\floatmethod{PAGE}\OTRSETsomeslotfloat} % check
+\def\OTRSETsomeherefloat {\def\floatmethod{HERE}\OTRSETsomeslotfloat} % check
+\def\OTRSETsomeelsefloat {\def\floatmethod{HERE}\OTRSETsomeslotfloat} % check
+\def\OTRSETsomefixdfloat {\def\floatmethod{FIXD}\OTRSETsomeslotfloat} % check
+\def\OTRSETsometopfloat {\def\floatmethod{TOPS}\OTRSETsomeslotfloat} % check
+\def\OTRSETsomebottomfloat{\def\floatmethod{BOTS}\OTRSETsomeslotfloat} % check
% \def\OTRSETsomeslotfloat {\let\floatmethod\v!hier\OTRONEsomeelsefloat}
@@ -1519,36 +1748,169 @@
{\iftestfloatbox\ruledhbox\fi{\box\floatbox}}
\def\OTRSETsomeslotfloat[#1]%
- {\setbox\floatbox=\vbox{\flushfloatbox}%
- \dp\floatbox=\dp\strutbox
+ {\setbox\floatbox\vbox{\flushfloatbox}%
+ \dp\floatbox\dp\strutbox
\@EA\uppercasestring\floatmethod\to\floatmethod
\OTRSETstoreincolumnslot\floatmethod\floatbox
\doinsertfloatinfo}
+% kind of new, looks much like OTRONE, but not entirely
+
+\def\OTRSETdosettopinserts
+ {\bgroup
+ \ifsomefloatwaiting
+ \noffloatinserts\zerocount
+ \let\totaltopinserted\!!zeropoint
+ \OTRSETdodosettopinserts
+ \ifnum\@@bknonder=\zerocount
+ \ifnum\@@bknregels>\zerocount
+ \ifdim\totaltopinserted>\zeropoint\relax
+ \dimen0\lineheight
+ \dimen0=\@@bknregels\dimen0
+ \advance\dimen0 \totaltopinserted\relax
+ \ifdim\dimen0>\teksthoogte % \vsize %%%%%%%%% \teksthoogte
+ \showmessage\m!floatblocks8{\@@bknregels}%
+ \vfilll\eject
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \egroup}
+
+\def\OTRSETdodosettopinserts
+ {\ifnum\noffloatinserts<\noftopfloats
+ \dogetfloat
+ \ifdim\topinserted=\zeropoint\relax
+ \topofinserttrue
+ \else
+ \topofinsertfalse
+ \fi
+ \setbox\scratchbox\vbox % kan beter !
+ {\forgetall
+ \iftopofinsert
+ \ifdim\OTRSETtopoffset=\zeropoint
+ \verplaatsopgrid[\v!boven]
+ \fi
+ \else
+ \betweenfloatblanko % inserts can't look back
+ \fi
+ \flushfloatbox
+ \blanko[\@@bknawit]}%
+ \global\advance\topinserted \ht\scratchbox\relax
+ \ifdim\topinserted>\vsize % was \teksthoogte\relax
+ \doresavefloat
+ \noffloatinserts\noftopfloats\relax
+ \global\advance\topinserted -\ht\scratchbox
+ \let\OTRSETdodosettopinserts\relax % to be tested
+ \else
+ \xdef\totaltopinserted{\the\topinserted}%
+ \insert\topins{\forgetall\box\scratchbox}% interlineskip ?
+ \ifsomefloatwaiting
+ \advance\noffloatinserts \plusone
+ \else
+ \noffloatinserts\noftopfloats\relax
+ \fi
+ \dofloatflushedinfo
+ \fi
+ \else
+ \ifsomefloatwaiting
+ \showmessage\m!floatblocks6{\the\noftopfloats}%
+ \fi
+ \let\OTRSETdodosettopinserts\relax
+ \fi
+ \OTRSETdodosettopinserts}
+
+\def\OTRSETdosetbotinserts
+ {\bgroup
+ \ifsomefloatwaiting
+ \noffloatinserts\zerocount
+ \OTRSETdodosetbotinserts
+ \fi
+ \egroup}
+
+\def\OTRSETdodosetbotinserts
+ {\ifnum\noffloatinserts<\nofbotfloats\relax
+ \dogetfloat
+ \global\advance\botinserted \ht\floatbox\relax
+ \global\advance\botinserted \dp\floatbox\relax
+ \global\advance\botinserted \floattopskip\relax
+ \ifdim\botinserted<\pagegoal\relax
+ \insert\botins
+ {\forgetall
+ \blanko[\@@bkvoorwit]%
+ \flushfloatbox}%
+ \ifsomefloatwaiting
+ \advance\noffloatinserts \plusone
+ \else
+ \noffloatinserts\nofbotfloats
+ \fi
+ \dofloatflushedinfo
+ \else
+ \doresavefloat
+ \noffloatinserts\nofbotfloats\relax
+ \fi
+ \global\nofloatpermittedtrue % vgl topfloats s!
+ \else
+ \ifsomefloatwaiting
+ \showmessage\m!floatblocks7{\the\nofbotfloats}%
+ \fi
+ \let\OTRSETdodosetbotinserts\relax
+ \fi
+ \OTRSETdodosetbotinserts}
+
+\let\OTRSETdosetbothinserts\relax
+
+\def\OTRSETdotopinsertions
+ {\ifvoid\topins\else
+ \ifvoid\columntopbox\mofcolumns
+ \columnsettopbox\mofcolumns\box\topins
+ \else
+ \columnsettopbox\mofcolumns\vbox % temp, must be better
+ {\forgetall
+ \offinterlineskip
+ \box\columntopbox\mofcolumns
+ \box\topins}
+ \fi
+ \fi
+ \global\topinserted\zeropoint\relax} % goes away
+
+\def\OTRSETdobotinsertions
+ {\ifvoid\botins \else
+ \columnsetbotbox\mofcolumns\box\botins
+% \else
+% \columnsetbotbox\mofcolumns\vbox % temp, must be better
+% {\forgetall
+% \offinterlineskip
+% \box\botins
+% \box\columnbotbox\mofcolumns}
+ \fi
+ \global\botinserted\zeropoint\relax} % goes away
+
% set ipv text
-% left right 1 2 3 +1 +2 +3
+% left right 1 2 3 +1 +2 +3
\let\columnleftareas \empty
\let\columnrightareas\empty
-% links rechts => odd, even, n, named
+% links rechts => odd, even, n, named
-\def\definecolumntextarea%
+\def\definecolumntextarea
{\dotripleempty\dodefinecolumntextarea}
-\def\dodefinecolumntextarea[#1][#2][#3]% y=0 is mogelijke en handig !
+\def\dodefinecolumntextarea[#1][#2][#3]% y=0 is mogelijke en handig !
{\ifthirdargument
\doifelse{#2}\v!beide
{\definecolumntextarea[#1][\v!links ][#3]%
\definecolumntextarea[#1][\v!rechts][#3]}
{\doifelse{#2}\v!volgende
- {\doifonevenpaginaelse
+ {\doifoddpageelse
{\definecolumntextarea[#1][\v!rechts][#3]}
{\definecolumntextarea[#1][\v!links][#3]}}
{\presetlocalframed
[\??mt#1#2]%
- \processaction[#2] % \doglobal voorkomt stack build up
+ \processaction[#2] % \doglobal voorkomt stack build up
[ \v!links=>\doglobal\addtocommalist{#1}\columnleftareas,
\v!rechts=>\doglobal\addtocommalist{#1}\columnrightareas]%
\getparameters[\??mt#1#2]
@@ -1559,7 +1921,7 @@
\definecolumntextarea[#1][\v!volgende][#2]%
\fi}
-\def\setupcolumntextarea%
+\def\setupcolumntextarea
{\dotripleempty\dosetupcolumntextarea}
\def\dosetupcolumntextarea[#1][#2][#3]%
@@ -1568,7 +1930,7 @@
{\setupcolumntextarea[#1][\v!links ][#3]%
\setupcolumntextarea[#1][\v!rechts][#3]}
{\doifelse{#2}\v!volgende
- {\doifonevenpaginaelse
+ {\doifoddpageelse
{\setupcolumntextarea[#1][\v!rechts][#3]}
{\setupcolumntextarea[#1][\v!links][#3]}}
{\getparameters[\??mt#1#2][#3]}}%
@@ -1576,7 +1938,7 @@
\setupcolumntextarea[#1][\v!volgende][#2]%
\fi}
-\def\initializecolumntextareas%
+\def\initializecolumntextareas
{\ifodd\realpageno
\doinitializecolumntextareas\columnrightareas\v!rechts
\else
@@ -1598,14 +1960,14 @@
{\getvalue{\??mt#1#2\c!nx}}{\getvalue{\??mt#1#2\c!ny}}
{\copy\placeholderboxd}}
-\def\placecolumntextareas%
+\def\placecolumntextareas
{\ifodd\realpageno
\doplacecolumntextareas\columnrightareas\v!rechts
\else
\doplacecolumntextareas\columnleftareas\v!links
\fi}
-\def\doplacecolumntextareas#1#2% global ?
+\def\doplacecolumntextareas#1#2% global ?
{\bgroup
\forgetall
\def\docommando##1%
@@ -1619,61 +1981,26 @@
\def\columntextlastbackspace{\rugwit}
-% \def\dodoplacecolumntextareas#1#2%
-% {\!!counta\getvalue{\??mt#1#2\c!x}%
-% \!!countb\getvalue{\??mt#1#2\c!nx}%
-% \docalculatecolumnsetspan
-% \!!heighta\getvalue{\??mt#1#2\c!ny}\lineheight
-% % option
-% \advance\!!heighta -\lineheight
-% \setbox\scratchbox\vbox
-% {\donetrue\localframed
-% [\??mt#1#2]
-% [\c!breedte=\!!widtha,\c!hoogte=\!!heighta]
-% {\getvalue{\??mt#1#2}}}%
-% \!!counta\getvalue{\??mt#1#2\c!x}%
-% \!!countb\getvalue{\??mt#1#2\c!y}%
-% \advance\!!countb \getvalue{\??mt#1#2\c!ny}%
-% \advance\!!countb -1
-% \OTRSETsetgridcell
-% \!!counta\!!countb
-% \hbox{\clip
-% [\c!breedte=\!!widthb,\c!hoogte=\!!heighta]%
-% {\copy\scratchbox}}%
-% \ifcase\!!countc\else
-% \advance\!!counta \getvalue{\??mt#1#2\c!nx}%
-% \advance\!!counta -\!!countc
-% \advance\!!widtha -\!!widthb
-% \OTRSETsetgridcell
-% \!!counta\!!countb
-% \hbox
-% {\hskip-\namedlayoutparameter\v!oneven\c!rugwit
-% \clip
-% [\c!breedte=\!!widtha,\c!hoogte=\!!heighta,
-% \c!hoffset=\!!widthb]
-% {\copy\scratchbox}}%
-% \fi}
-
\def\dodoplacecolumntextareas#1#2%
{\!!counta\getvalue{\??mt#1#2\c!x}%
- \!!countb\getvalue{\??mt#1#2\c!nx}%
+ \!!countb\getvalue{\??mt#1#2\c!nx}%
\docalculatecolumnsetspan
\!!heighta\getvalue{\??mt#1#2\c!ny}\lineheight
-% to do: met/zonder ht/dp
-\ifnum\getvalue{\??mt#1#2\c!y}=0
- \advance\!!heighta -\lineheight
- \advance\!!heighta \topskip
-\fi
- \advance\!!heighta -\lineheight % option
+ % to do: met/zonder ht/dp
+ \ifnum\getvalue{\??mt#1#2\c!y}=\zerocount
+ \advance\!!heighta -\lineheight
+ \advance\!!heighta \topskip
+ \fi
+ \advance\!!heighta -\lineheight % option
\setbox\scratchbox\vbox
{\donetrue\localframed
[\??mt#1#2]
- [\c!breedte=\!!widtha,\c!hoogte=\!!heighta]
+ [\c!breedte=\!!widtha,\c!hoogte=\!!heighta,\c!regels=]
{\getvalue{\??mt#1#2}}}%
\!!counta\getvalue{\??mt#1#2\c!x}%
\!!countb\getvalue{\??mt#1#2\c!y}%
\advance\!!countb \getvalue{\??mt#1#2\c!ny}%
- \advance\!!countb -1
+ \advance\!!countb \minusone
\OTRSETsetgridcell
\!!counta\!!countb
\hbox{\clip
@@ -1693,19 +2020,16 @@
{\copy\scratchbox}}%
\fi}
-\def\setupcolumntextareatext%
+\def\setupcolumntextareatext
{\dotripleempty\dosetupcolumntextareatext}
-%\def\dosetupcolumntextareatext[#1][#2][#3]%
-% {\setvalue{\??mt#1#2}{#3}}
-
\long\def\dosetupcolumntextareatext[#1][#2][#3]%
{\ifthirdargument
\doifelse{#2}\v!beide
{\setvalue{\??mt#1\v!links }{#3}%
\setvalue{\??mt#1\v!rechts}{#3}}
{\doifelse{#2}\v!volgende
- {\doifonevenpaginaelse
+ {\doifoddpageelse
{\setvalue{\??mt#1\v!rechts}{#3}}%
{\setvalue{\??mt#1\v!links }{#3}}}%
{\setvalue{\??mt#1#2}{#3}}}%
@@ -1714,43 +2038,44 @@
\fi}
\def\docalculatecolumnsetspan
- {% \!!counta <= x
- % \!!countb <= nx
+ {% \!!counta <= x
+ % \!!countb <= nx
% \!!widtha => total width
- % \!!widthb => left width
- % \!!countc => left cols
- \!!widtha\!!countb\hsize
- \advance\!!countb \!!counta \advance\!!countb -1 \relax
+ % \!!widthb => left width
+ % \!!countc => left cols
+ \!!widtha\!!countb\tekstbreedte % we assume equal widths
+ \advance\!!countb \!!counta
+ \advance\!!countb \minusone
\ifnum\!!countb>\nofcolumns
\!!countc\!!countb
\advance\!!countc -\nofcolumns
\!!countb\nofcolumns
\else
- \!!countc0
+ \!!countc\zerocount
\fi
- \advance\!!counta 1
- \dostepwiserecurse\!!counta\!!countb1
+ \advance\!!counta \plusone
+ \dostepwiserecurse\!!counta\!!countb\plusone
{\advance\!!widtha\OTRSETgetparameter\c!afstand\recurselevel}%
\!!widthb\!!widtha
- \advance\!!widthb -\!!countc\hsize
- \ifodd\realpageno \else
+ \advance\!!widthb -\!!countc\tekstbreedte
+ \ifodd\realpageno \else % tricky, assumes that we keep there
\ifcase\!!countc\else
- % nog niet ok voor enkel/dubbelzijdig
- \advance\!!widtha \namedlayoutparameter\v!even \c!rugwit
+ % nog niet ok voor enkel/dubbelzijdig
+ \advance\!!widtha \namedlayoutparameter\v!even \c!rugwit
\advance\!!widtha \namedlayoutparameter\v!oneven\c!rugwit
- \advance\!!widthb \namedlayoutparameter\v!even \c!rugwit
+ \advance\!!widthb \namedlayoutparameter\v!even \c!rugwit
\dorecurse\!!countc
{\advance\!!widtha\OTRSETgetparameter\c!afstand\recurselevel}%
\fi
\fi}
-\def\columnsetspanhsize{\hsize}
+\def\columnsetspanhsize{\tekstbreedte}
\def\setcolumnsetspanhsize#1#2% x nx / uses counta/b
- {\!!counta=#1\!!countb=#2\docalculatecolumnsetspan
+ {\!!counta#1\!!countb#2\docalculatecolumnsetspan
\edef\columnsetspanhsize{\the\!!widtha}}
-\def\definecolumnsetspan%
+\def\definecolumnsetspan
{\dodoubleempty\dodefinecolumnsetspan}
\def\dodefinecolumnsetspan[#1][#2]%
@@ -1761,55 +2086,129 @@
\c!voor=,
\c!na=,
\c!offset=\v!overlay,
- \c!plaats=,
+ \c!plaats=\v!links,
\c!regelcorrectie=\v!uit,
\c!dieptecorrectie=\v!uit,
\c!n=2,
+ \c!nregels=0,
+ \c!springvolgendein=\v!ja,
+ \c!default=HERE,
+ \c!variant=\v!a,
#2]%
%\else
% \definecolumnspan[][#1]%
}%\fi}
-\def\setupcolumnsetspan%
+\def\setupcolumnsetspan
{\dodoubleempty\dosetupcolumnsetspan}
\def\dosetupcolumnsetspan[#1][#2]%
{%\ifsecondargument
- \setupframedtext[cs:#1][#2]%
+ \setupframedtexts[cs:#1][#2]%
%\else
% \setupcolumnsetspan[][#1]%
}%\fi}
-\def\startcolumnsetspan%
+\def\startcolumnsetspan
{\dotripleempty\dostartcolumnsetspan}
-%%%%%%%%%%%%%%%% TODO
-
-\def\dostartcolumnsetspan[#1][#2][#3]% [#3] gobbles space
- {\bgroup
- \!!countc\framedtextparameter{cs:#1}\c!n%
- \!!countd\nofcolumns \advance\!!countd -\mofcolumns \advance\!!countd 1
- \ifnum\!!countc>\!!countd \!!countc\!!countd \fi
+%%%%%%%%%%%%%%%% TODO
+
+\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
+ \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
- \setupframedtexts[cs:#1][\c!breedte=\columnsetspanhsize,
-\c!regelcorrectie=\v!uit,\c!dieptecorrectie=\v!uit,#2]
-\setbox\scratchbox\vbox\bgroup
- \dostartframedtext[cs:#1][\v!geen]
- \vskip-\lineheight\par\strut\par
- \framedtextparameter{cs:#1}\c!voor
- \def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}}
+ \setbox\scratchbox\vbox\bgroup
+ \dostartframedtext[cs:#1][\v!geen]% geen nils placement
+ \vskip-\lineheight\par\strut\par
+ \framedtextparameter{cs:#1}\c!voor
+ \def\stopcolumnsetspan{\dostopcolumnsetspan{#1}}}
+
+% \chardef\columnslotlocation2
+
+% \def\dostopcolumnsetspan#1%
+% {\par
+% \vbox{\strut}
+% \kern-2\lineheight
+% \vbox{\strut}
+% \doifsomething{\framedtextparameter{cs:#1}\c!na}
+% {\framedtextparameter{cs:#1}\c!na
+% \kern\zeropoint}% otherwise blanks disappear, better be a switch
+% \dostopframedtext
+% \egroup
+% \setbox\scratchbox\frozenhbox % keeps grid snapping okay
+% {\lower\strutdepth\box\scratchbox}%
+% %todo: nboven/onder\chardef\columnslotlocation2
+% %\OTRSETstoreincolumnslotSOMEWHERE\columnslotlocation\scratchbox
+% \chardef\columnslotspacing\framedtextparameter{cs:#1}\c!nregels\relax
+% \OTRSETstoreincolumnslotSOMEWHERE2\scratchbox
+% \doif{\framedtextparameter{cs:#1}\c!springvolgendein}\v!nee
+% \noindentation
+% \egroup
+% \endgraf}
\def\dostopcolumnsetspan#1%
{\par
- \kern-\lineheight\prevdepth\dp\strutbox\strut
- \framedtextparameter{cs:#1}\c!na
- \kern\zeropoint % needed ?
+ \vbox{\strut}
+ \kern-2\lineheight
+ \vbox{\strut}
+ \doifsomething{\framedtextparameter{cs:#1}\c!na}
+ {\framedtextparameter{cs:#1}\c!na
+ \kern\zeropoint}% otherwise blanks disappear, better be a switch
\dostopframedtext
-\vskip-\strutdepth % awful hack
\egroup
- \chardef\columnslotspacing0 % ! ! !
- \OTRSETstoreincolumnslotHERE\scratchbox
- \egroup}
+ % frozen keeps grid snapping okay
+ \setbox\scratchbox\frozenhbox to \hsize
+ {\dontcomplain
+ \doregelplaats{\framedtextparameter{cs:#1}\c!plaats}%
+ {\lower\strutdepth\box\scratchbox}}%
+ \dp\scratchbox\zeropoint % else wrong snap insidefloat
+ \ifinsidefloat
+ \box\scratchbox
+ \else
+ % we only set \columnsetspacing when asked for, else bottom problems
+ \scratchcounter\framedtextparameter{cs:#1}\c!nregels\relax
+ \ifcase\scratchcounter\else\chardef\columnslotspacing\scratchcounter\fi
+ % 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
+ \doif{\framedtextparameter{cs:#1}\c!springvolgendein}\v!nee
+ \noindentation
+ \fi
+ \egroup
+ \endgraf}
+
+% \startcolumnset[two]
+% \input tufte
+% \startcolumnsetspan[two][width=20cm,location=middle] \input tufte \stopcolumnsetspan
+% \startcolumnsetspan[two][default=btlr] \input tufte \stopcolumnsetspan
+% \input tufte \par
+% \input tufte \par
+% \startcolumnsetspan[two] \emptylines[5] \stopcolumnsetspan
+% \startcolumnsetspan[two] \input tufte \stopcolumnsetspan
+% \stopcolumnset
-\protect \endinput
+\protect \endinput
diff --git a/tex/context/base/page-sid.tex b/tex/context/base/page-sid.tex
index 681ea29d4..e798d352b 100644
--- a/tex/context/base/page-sid.tex
+++ b/tex/context/base/page-sid.tex
@@ -98,8 +98,26 @@
% \dochecksidefloat
% \scratchcounter=-\hangafter
% \dorecurse{\scratchcounter}{\strut\hfill\strut\par}}
-
-\def\flushsidefloats%
+%
+%\def\flushsidefloats
+% {\par
+% \!!heighta\sidefloatvsize
+% \advance\!!heighta -\pagetotal
+% \ifdim\!!heighta>\zeropoint
+% % to be checked for interference
+% \witruimte
+% % will be option
+% \getnoflines\!!heighta
+% \!!heighta\noflines\lineheight
+% % so far for option
+% \kern\!!heighta
+% \fi
+% % == \forgetsidefloats
+% \global\sidefloatvsize\nofloatvsize
+% \global\floatshortfalse
+% \global\floatflagfalse}
+
+\def\flushsidefloats
{\par
\!!heighta\sidefloatvsize
\advance\!!heighta -\pagetotal
@@ -110,50 +128,60 @@
\getnoflines\!!heighta
\!!heighta\noflines\lineheight
% so far for option
- \kern\!!heighta
+ \ifdim\sidefloatbottomskip>\zeropoint\relax
+ \ifdim\!!heighta>\sidefloatbottomskip
+ \advance\!!heighta-\sidefloatbottomskip
+ \kern\!!heighta
+ \vskip\sidefloatbottomskip
+ \else
+ \kern\!!heighta
+ \fi
+ \else
+ \kern\!!heighta
+ \fi
\fi
-% == \forgetsidefloats
+ % == \forgetsidefloats
\global\sidefloatvsize\nofloatvsize
\global\floatshortfalse
\global\floatflagfalse}
-\def\flushsidefloatsafterpar%
+\def\flushsidefloatsafterpar
{\xdef\oldpagetotal{\the\pagetotal}%
- \gdef\checksidefloat%
+ \gdef\checksidefloat
{\dochecksidefloat
\ifdim\oldpagetotal=\pagetotal \else
\global\let\checksidefloat\dochecksidefloat
\flushsidefloats
\fi}}
-\def\forgetsidefloats%
+\def\forgetsidefloats
{\global\sidefloatvsize\nofloatvsize
\global\floatshortfalse
\global\floatflagfalse}
\let\logsidefloat=\relax
-\def\pushpenalties%
- {\widowpenalty1
+\def\pushpenalties
+ {\widowpenalty\plusone
\clubpenalty2
- \brokenpenalty1
+ \brokenpenalty\plusone
\let\pushpenalties\relax
- \edef\poppenalties%
- {\widowpenalty\the\widowpenalty
- \clubpenalty\the\clubpenalty
+ \edef\poppenalties
+ {\widowpenalty \the\widowpenalty
+ \clubpenalty \the\clubpenalty
\brokenpenalty\the\brokenpenalty}}
\let\poppenalties=\relax
-\def\restorepenalties%
+\def\restorepenalties
{\ifnum\outputpenalty=\!!tenthousand\else
\penalty\outputpenalty
\fi}
-\def\sidefloatoutput%
+\def\sidefloatoutput
{\iffloatshort
\unvbox\normalpagebox
- \setbox\floatbottom=\lastbox
+ \setbox\floatbottom\lastbox
\ifdim\wd\floatbottom>\sidefloathsize
\penalty-201
\box\floatbottom
@@ -162,17 +190,17 @@
\else
\restoreleftindent
\ifdim\wd\floatbottom<\sidefloathsize
- \parskip=\zeropoint
+ \parskip\zeropoint
%\noindent
- \vadjust{\penalty-1}%
+ \vadjust{\penalty\minusone}%
\iffloatlefteqo
\global\floatlefteqofalse
\else
- \global\advance\sidefloathsize by -\wd\floatbottom
+ \global\advance\sidefloathsize -\wd\floatbottom
\iffloatrighteqo
\global\floatrighteqofalse
\else
- \global\divide\sidefloathsize by 2
+ \global\divide\sidefloathsize 2
\fi
\hskip\sidefloathsize
\fi
@@ -181,11 +209,11 @@
\restorepenalties
\fi
\fi
- \global\holdinginserts=0
+ \global\holdinginserts\zerocount
\global\floatshortfalse
\else
\finalsidefloatoutput % new
- \global\sidefloatvsize=\nofloatvsize
+ \global\sidefloatvsize\nofloatvsize
\poppenalties
\fi}
@@ -197,7 +225,7 @@
\parskip\zeropoint % here ?
\ifdim\sidefloatwidth>\zeropoint % new, see prikkels
\noindent
- \vadjust{\penalty-1}%
+ \vadjust{\penalty\minusone}%
\hskip\sidefloatwidth
%\else
% we have a margin or edge float
@@ -206,7 +234,7 @@
\ifx\normaleqno\undefined
- \def\normaleqno%
+ \def\normaleqno
{\iffloatshort
\global\floatrighteqotrue
\fi
@@ -214,7 +242,7 @@
\else
- \def\eqno%
+ \def\eqno
{\iffloatshort
\global\floatrighteqotrue
\fi
@@ -240,6 +268,36 @@
\def\rightfloat#1%
{\global\rightfloattrue\marginfloatfalse\edgefloatfalse\putsidefloat{#1}}
+% \def\putsidefloat#1% crap macro
+% {\par
+% \witruimte
+% % moved here dec 2001
+% {\everypar\emptytoks\forgetall\vbox{\strut}\vskip-\lineheight}% moved
+% %
+% \previoussidefloat
+% \stallsidefloat
+% \setbox\floatbox\hbox{\vbox % pretty ugly, will be rewritten
+% {\vskip
+% \sidefloatdownshift
+% \vskip
+% \ifmarginfloat
+% -\sidefloattopskip
+% \else\ifedgefloat
+% -\sidefloattopskip
+% \else
+% +\sidefloattopoffset
+% \fi\fi
+% #1}}
+% \global\sidefloatdownshift\zeropoint
+% \measuresidefloat
+% \ifroomforfloat
+% \else
+% \tosssidefloat
+% \measuresidefloat
+% \stallsidefloat
+% \fi
+% \setsidefloat}
+
\def\putsidefloat#1% crap macro
{\par
\witruimte
@@ -248,15 +306,22 @@
%
\previoussidefloat
\stallsidefloat
- \setbox\floatbox=\hbox{\vbox % pretty ugly, will be rewritten
- {\vskip
- \ifmarginfloat
- -\sidefloattopskip
- \else\ifedgefloat
- -\sidefloattopskip
- \else
- +\sidefloattopoffset
- \fi\fi#1}}
+ \setbox\floatbox\hbox
+ {\ifmarginfloat\else\ifrightfloat\else\kern\sidefloatleftshift\fi\fi
+ \vbox % pretty ugly, will be rewritten
+ {\vskip
+ \sidefloatdownshift
+ \vskip
+ \ifmarginfloat
+ -\sidefloattopskip
+ \else\ifedgefloat
+ -\sidefloattopskip
+ \else
+ +\sidefloattopoffset
+ \fi\fi
+ #1}% no \hskip, but \kern here
+ \ifmarginfloat\else\ifrightfloat\kern\sidefloatrightshift\fi\fi}%
+ \global\sidefloatdownshift\zeropoint
\measuresidefloat
\ifroomforfloat
\else
@@ -267,7 +332,7 @@
\setsidefloat}
\def\progresssidefloat%
- {\sidefloatprogress=\sidefloatvsize
+ {\sidefloatprogress\sidefloatvsize
\iffloatflag
\advance\sidefloatprogress -\sidefloatpagetotal
\global\floatflagfalse
@@ -275,12 +340,12 @@
\advance\sidefloatprogress -\pagetotal
\fi}
-\def\tosssidefloat%
+\def\tosssidefloat
{\vfill\eject}
\newdimen\sidefloatpagetotal
-\def\measuresidefloat%
+\def\measuresidefloat
{\global\floatflagtrue
\global\sidefloatpagetotal \pagetotal % global
\ifmarginfloat
@@ -303,14 +368,14 @@
\roomforfloatfalse
\else
\dimen0=\pagegoal
- \advance\dimen0 by -\sidefloatvsize
+ \advance\dimen0 -\sidefloatvsize
\ifdim\dimen0<\sidefloatbottomskip
- \global\advance\sidefloatvsize by \dimen0
+ \global\advance\sidefloatvsize \dimen0
\global\floatshorttrue
\pushpenalties
- \global\holdinginserts=1
+ \global\holdinginserts\plusone
\else
- \global\advance\sidefloatvsize by \sidefloatbottomskip
+ \global\advance\sidefloatvsize \sidefloatbottomskip
\global\floatshortfalse
\fi
\roomforfloattrue
@@ -356,7 +421,7 @@
\kern-\sidefloatheight
\penalty10001 % oeps, this will change
\normalbaselines
- \prevdepth=\presidefloatdepth
+ \prevdepth\presidefloatdepth
%\noindent
\resetsidefloatparagraph
\ignorespaces}
@@ -367,12 +432,12 @@
{\ifnum\sidefloatparagraph=1 }
\def\setsidefloatparagraph%
- {%\advance\sidefloatprogress by \sidefloatbottomskip
- %\!!counta=\sidefloatprogress
-\scratchdimen=\sidefloatprogress
+ {%\advance\sidefloatprogress \sidefloatbottomskip
+ %\!!counta\sidefloatprogress
+\scratchdimen\sidefloatprogress
\advance\scratchdimen \ht\strutbox
-\!!counta=\scratchdimen
- \divide\!!counta by \baselineskip
+\!!counta\scratchdimen
+ \divide\!!counta \baselineskip
\ifnum\!!counta>0
\ifrightfloat
\hangindent=-\sidefloatwidth
@@ -381,10 +446,10 @@
\fi
\hangafter=-\!!counta
\fi
- \global\advance\sidefloatparagraph 1 }
+ \global\advance\sidefloatparagraph \plusone}
\def\resetsidefloatparagraph%
- {\global\sidefloatparagraph=0 }
+ {\global\sidefloatparagraph\zerocount }
\def\dochecksidefloat%
{\progresssidefloat
@@ -419,12 +484,12 @@
\fi}
\def\stallsidefloat%
- {\!!counta=\pageshrink
+ {\!!counta\pageshrink
\divide\!!counta \baselineskip
- \advance\!!counta 1
- \parskip=\zeropoint
- \dorecurse{\!!counta}{\line{}}
+ \advance\!!counta \plusone
+ \parskip\zeropoint
+ \dorecurse\!!counta{\line{}}
\kern-\!!counta\baselineskip
- \penalty0 }
+ \penalty\zerocount }
\protect \endinput
diff --git a/tex/context/base/page-spr.tex b/tex/context/base/page-spr.tex
new file mode 100644
index 000000000..ed636607e
--- /dev/null
+++ b/tex/context/base/page-spr.tex
@@ -0,0 +1,101 @@
+%D \module
+%D [ file=page-spr,
+%D version=2002.11.11,
+%D title=\CONTEXT\ Page Macros,
+%D subtitle=Spreading,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context Page Macros / Spreading}
+
+% This module is experimental and not yet official!
+
+\unprotect
+
+\newbox\spreadbox
+\newif\ifinspread
+
+\chardef\showspreadmode=1
+
+\def\settextpagecontent#1#2#3% #2 and #3 will disappear
+ {\setbox#1\hbox
+ {\vbox to \teksthoogte
+ {\offinterlineskip
+ \freezetextwidth
+ \hsize\tekstbreedte % local variant of \sethsize
+ \boxmaxdepth\maxdepth
+ \noindent % content can be < \hsize
+ \dopagecontents#2#3}}%
+ \dp#1\zeropoint
+ \setbox#1\hbox to \zetbreedte
+ {\ifinspread
+ \ifvoid\spreadbox
+ \global\setbox\spreadbox\box#1%
+ \copy\spreadbox\hss % left page
+ \else
+ % prevent duplicate writes in normal run
+ \ifarrangingpages \else \ifcase\showspreadmode
+ \global\setbox\spreadbox\null
+ \wd\spreadbox\zetbreedte
+ \ht\spreadbox\teksthoogte
+ \fi \fi
+ \hss\box\spreadbox % right page
+ \fi
+ \else
+ \hss\box#1\hss % never change the \hss's
+ \fi}}
+
+\def\doflushspread
+ {\ifinspread \ifvoid\spreadbox\else
+ \null % \s!dummy % dummy text. will be discarded
+ \pagina
+ \fi \fi }
+
+\def\startspread
+ {\bgroup
+ \ifdubbelzijdig
+ \pagina[\v!links]%
+ \inspreadtrue
+ \scratchdimen2\tekstbreedte
+ \advance\scratchdimen2\rugwit
+ \expanded{\setuplayout[\c!tekstbreedte=\the\scratchdimen]}%
+ \def\startspread{\bgroup\let\stopspread\egroup}%
+ \let\stopspread\dostopspread
+ \else
+ \let\stopspread\egroup
+ \fi}
+
+\let\stopspread\relax
+
+\def\dostopspread
+ {\kern\zeropoint\pagina
+ \inspreadfalse
+ \setuplayout[\c!tekstbreedte=\tekstbreedte]
+ \pagina[\v!links]
+ \egroup}
+
+\protect \endinput
+
+% texexec --arr --pdf test
+%
+% \setuplayout[width=middle]
+% \setuppapersize[A4][A3,landscape]
+% \setuppagenumbering[alternative=doublesided]
+% \setuparranging[2UP]
+%
+% \starttext
+%
+% \dorecurse{3}{\input tufte }
+%
+% \startspread
+% \dorecurse{10}{\input tufte }
+% \stopspread
+%
+% \dorecurse{3}{\input tufte }
+%
+% \stoptext
diff --git a/tex/context/base/page-txt.tex b/tex/context/base/page-txt.tex
index e47d44d61..91cb89b61 100644
--- a/tex/context/base/page-txt.tex
+++ b/tex/context/base/page-txt.tex
@@ -67,14 +67,6 @@
\def\setuplayouttext%
{\dotripleempty\dosetuplayouttext}
-% \def\dosetuplayouttext[#1][#2][#3]%
-% {\ifthirdargument
-% \getparameters[\??tk#1#2][#3]%
-% \else
-% \getparameters[\??tk#1\v!tekst][#2]%
-% \fi
-% \calculatevsizes}
-
\def\dosetuplayouttext[#1][#2][#3]%
{\ifthirdargument
\getparameters[\??tk#1#2][#3]%
@@ -82,7 +74,7 @@
%\getparameters[\??tk#1\v!tekst][#2]%
\getparameters[\??tk#1][#2]%
\fi
-% \checkcurrentlayout
+ %\checkcurrentlayout % no
\calculatevsizes}
\def\setuptop {\dotripleempty\dosetuplayouttext[\v!boven]}
@@ -100,11 +92,11 @@
%D \showsetup{\y!noheaderandfooterlines}
%D \showsetup{\y!notopandbottomlines}
-\def\noheaderandfooterlines%
+\def\noheaderandfooterlines
{\setupheader[\c!status=\v!leeg]%
\setupfooter[\c!status=\v!leeg]}
-\def\notopandbottomlines%
+\def\notopandbottomlines
{\setuptop [\c!status=\v!leeg]%
\setupbottom[\c!status=\v!leeg]}
@@ -136,39 +128,39 @@
\def\dosetuptexts[#1][#2][#3][#4][#5][#6]%
{\ifsixthargument
\setvalue{\??tk#1#2\c!linkertekst}%
- {\dodoubletexts{\??tk#1}{#2}
- {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#3}
+ {\dodoubletexts{\??tk#1}{#2}%
+ {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#3}%
{\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#6}}%
\setvalue{\??tk#1#2\c!rechtertekst}%
- {\dodoubletexts{\??tk#1}{#2}
- {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}
+ {\dodoubletexts{\??tk#1}{#2}%
+ {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}%
{\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#5}}%
\else\iffifthargument
\setvalue{\??tk#1\v!tekst\c!linkertekst}%
{\dodoubletexts{\??tk#1}\v!tekst
- {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#2}
+ {\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#2}%
{\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#5}}%
\setvalue{\??tk#1\v!tekst\c!rechtertekst}%
{\dodoubletexts{\??tk#1}\v!tekst
- {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}
+ {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}%
{\c!linkerletter \c!linkerkleur \c!linkerbreedte }{#4}}%
\else\iffourthargument
\setvalue{\??tk#1#2\c!linkertekst}%
{\dodoubletexts{\??tk#1}{#2}
- {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#3}
+ {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#3}%
{\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#3}}%
\setvalue{\??tk#1#2\c!rechtertekst}%
{\dodoubletexts{\??tk#1}{#2}
- {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}
+ {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}%
{\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#4}}%
\else\ifthirdargument
\setvalue{\??tk#1\v!tekst\c!linkertekst}%
{\dodoubletexts{\??tk#1}\v!tekst
- {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#2}
+ {\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#2}%
{\c!linkerletter\c!linkerkleur\c!linkerbreedte}{#2}}%
\setvalue{\??tk#1\v!tekst\c!rechtertekst}%
{\dodoubletexts{\??tk#1}\v!tekst
- {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}
+ {\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}%
{\c!rechterletter\c!rechterkleur\c!rechterbreedte}{#3}}%
\else\ifsecondargument % new
\letvalue{\??tk#1\v!tekst\c!linkertekst }\empty
@@ -185,23 +177,20 @@
%D only when double sided typesetting is enabled.
\def\dodoubletexts#1#2#3#4#5#6%
- {\doifonevenpaginaelse
+ {\doifoddpageelse
{\dosingletexts{#1}{#2}#3{#4}} % #3 => provides three arguments
{\dosingletexts{#1}{#2}#5{#6}}} % #5 => provides three arguments
%D The next macro will be cleaned up amd made less messy and
%D dependent.
-%\def\placetextlinestrut#1%
-% {\doifvalue{#1\v!tekst\c!strut}{\v!ja}{\setstrut\strut}}
-
\def\placetextlinestrut#1%
- {\doifvalue{#1\c!strut}{\v!ja}{\setstrut\strut}}
+ {\doifvalue{#1\c!strut}\v!ja{\setstrut\strut}}
\def\dosingletexts#1#2#3#4#5#6%
{\bgroup
\convertargument#6\to\ascii
- \doifsomething{\ascii}
+ \doifsomething\ascii
{\doattributes{#1#2}#3#4%
{\placetextlinestrut{#1}% here !
%\doifdefinedelse{\??mk\ascii\c!koppeling} % brrr
@@ -254,10 +243,10 @@
{\edef\textlinestatus{\csname\??tk#1\c!status\endcsname}}
%\def\resettextlinestatus#1%
-% {\global\letvalue{\??tk#1\v!tekst\c!status}\v!normaal}
+% {\letgvalue{\??tk#1\v!tekst\c!status}\v!normaal}
\def\resettextlinestatus#1%
- {\global\letvalue{\??tk#1\c!status}\v!normaal}
+ {\letgvalue{\??tk#1\c!status}\v!normaal}
%\def\placelayouttextline#1#2% % handelt o.b.v. tekst
% {\settextlinestatus{#1}%
@@ -308,7 +297,7 @@
\setvalue{\string\placelayouttextline\v!geenmarkering}#1#2%
{\bgroup
\resettextlinestatus{#1}%
- \let\dohaalmarkering=\nohaalmarkering
+ \let\dohaalmarkering\nohaalmarkering
\doplacelayouttextline{#1}{#2}%
\egroup}
@@ -342,7 +331,7 @@
{\resettextlinestatus{#1}%
\donetrue}}
-\def\resetlayoutlines%
+\def\resetlayoutlines
{\donefalse
\resetlayoutline\v!boven
\resetlayoutline\v!hoofd
@@ -362,8 +351,8 @@
\newbox\scratchpagebox
-\def\gettextboxes%
- {\setbox\scratchpagebox=\vbox
+\def\gettextboxes
+ {\setbox\scratchpagebox\vbox
{\mindermeldingen
\calculatereducedvsizes
\swapmargins
@@ -398,10 +387,8 @@
\smashbox\scratchpagebox
\box\scratchpagebox}
-\let\maintextcolor\empty
-
\def\getmainbox#1#2%
- {\setbox\scratchpagebox=\vbox
+ {\setbox\scratchpagebox\vbox
{\offinterlineskip % na \paginaletter !
\calculatereducedvsizes
\calculatehsizes
@@ -427,11 +414,9 @@
\settextpagecontent\scratchpagebox{#1}{#2}%
\addtextbackground\scratchpagebox
\addtextgridlayer\scratchpagebox
- \ifx\maintextcolor\empty
+ \localstarttextcolor
\box\scratchpagebox
- \else
- \color[\maintextcolor]{\box\scratchpagebox}%
- \fi
+ \localstoptextcolor
\bgroup
\hskip\rechtermargeafstand
\ifdim\rechtermargebreedte>\zeropoint
@@ -452,24 +437,42 @@
%D (tracing) information.
\def\settextpagecontent#1#2#3% #2 and #3 will disappear
- {\setbox#1=\hbox to \zetbreedte
+ {\setbox#1\hbox to \zetbreedte
{\hss % so don't change this
\vbox to \teksthoogte
{\offinterlineskip
\freezetextwidth
- \hsize=\tekstbreedte % local variant of \sethsize
+ \hsize\tekstbreedte % local variant of \sethsize
\boxmaxdepth\maxdepth
\noindent % content can be < \hsize
\dopagecontents#2#3}%
\hss}%
- \dp#1=\zeropoint}
+ \dp#1\zeropoint}
-\def\addtextgridlayer#1%
- {\ifshowgrid
+\def\addtextgridlayer#1% tzt run time
+ {\ifcase\showgridstate\else % 1=bottom 2=top
\setgridbox\scratchbox\zetbreedte\teksthoogte
- \setbox#1=\hbox
- {\color[red]{\box\scratchbox}%
- \hskip-\zetbreedte\box#1}%
+ \setbox#1\hbox
+ {\ifcase\showgridstate\or\box#1\hskip-\zetbreedte\fi
+ \bgroup % color
+ \incolortrue
+ \ifcase\layoutcolumns\else
+ \gray
+ \hbox to \zetbreedte
+ {\dorecurse\layoutcolumns
+ {\hskip\layoutcolumnwidth
+ \ifnum\recurselevel<\layoutcolumns
+ \vrule
+ \!!height\ht\scratchbox
+ \!!depth\dp\scratchbox
+ \!!width\layoutcolumndistance
+ \fi}}%
+ \hskip-\zetbreedte
+ \fi
+ \red
+ \box\scratchbox
+ \egroup
+ \ifcase\showgridstate\or\or\hskip-\zetbreedte\box#1\fi}%
\fi}
%D The placement of a whole line is handled by the next two
@@ -478,88 +481,11 @@
\def\ignoredlinebreak{\unskip\space\ignorespaces}
-% \def\doplacelayouttextline#1#2%
-% {\ifdim#2>\zeropoint\relax % prevents pagenumbers when zero height
-% \goleftonpage
-% \hbox
-% {\setbox\scratchpagebox=\vbox to #2
-% {%\forgetall
-% \vsize#2\relax
-% \normalbaselines
-% \let\\\ignoredlinebreak
-% \let\crlf\ignoredlinebreak
-% \getvalue{\??tk#1\v!tekst\c!voor}%
-% \doifbothsidesoverruled
-% \dodoplacelayouttextline#1\c!linkertekst\c!middentekst\c!rechtertekst
-% \gobbleoneargument\getvalue
-% \orsideone
-% \dodoplacelayouttextline#1\c!linkertekst\c!middentekst\c!rechtertekst
-% \gobbleoneargument\getvalue
-% \orsidetwo
-% \dodoplacelayouttextline#1\c!rechtertekst\c!middentekst\c!linkertekst
-% \getvalue\gobbleoneargument
-% \od
-% \getvalue{\??tk#1\v!tekst\c!na}%
-% \kern\zeropoint}% keep the \dp, beware of \vtops, never change this!
-% \dp\scratchpagebox=\zeropoint
-% \box\scratchpagebox}%
-% \vskip-#2\relax
-% \fi}
-%
-% \def\dodoplacelayouttextline#1#2#3#4#5#6% \hsize toegevoegd
-% {\hbox % \hss's niet meer wijzigen
-% {\ifdim\linkerrandbreedte>\zeropoint
-% \hbox to \linkerrandbreedte
-% {\hsize\linkerrandbreedte
-% \hss\getvalue{\??tk#1\v!rand#2}}%
-% \hskip\linkerrandafstand
-% \fi
-% \ifdim\linkermargebreedte>\zeropoint
-% \hbox to \linkermargebreedte
-% {\hsize\linkermargebreedte
-% \hbox to \linkermargebreedte
-% {\hss\getvalue{\??tk#1\v!marge#2}}%
-% \hskip-\linkermargebreedte
-% \hbox to \linkermargebreedte
-% {\hss#5{\??tk#1\v!marge\c!margetekst}}}%
-% \hskip\linkermargeafstand
-% \fi
-% \ifdim\zetbreedte>\zeropoint
-% \hbox to \zetbreedte
-% {\hsize\zetbreedte
-% \hbox to \zetbreedte
-% {\@@nmpre{#5{\??tk#1\v!tekst\c!kantlijntekst}}%
-% \getvalue{\??tk#1\v!tekst#2}\hss}%
-% \hskip-\zetbreedte
-% \hbox to \zetbreedte
-% {\hss\getvalue{\??tk#1\v!tekst#3}\hss}%
-% \hskip-\zetbreedte
-% \hbox to \zetbreedte
-% {\hss\getvalue{\??tk#1\v!tekst#4}%
-% \@@nmpos{#6{\??tk#1\v!tekst\c!kantlijntekst}}}}%
-% \fi
-% \ifdim\rechtermargebreedte>\zeropoint
-% \hskip\rechtermargeafstand
-% \hbox to \rechtermargebreedte
-% {\hsize\rechtermargebreedte
-% \hbox to \rechtermargebreedte
-% {\getvalue{\??tk#1\v!marge#4}\hss}%
-% \hskip-\rechtermargebreedte
-% \hbox to \rechtermargebreedte
-% {#6{\??tk#1\v!marge\c!margetekst}\hss}}%
-% \fi
-% \ifdim\rechterrandbreedte>\zeropoint
-% \hskip\rechterrandafstand
-% \hbox to \rechterrandbreedte
-% {\hsize\rechterrandbreedte
-% \getvalue{\??tk#1\v!rand#4}\hss}%
-% \fi}}
-
\def\doplacelayouttextline#1#2%
{\ifdim#2>\zeropoint\relax % prevents pagenumbers when zero height
\goleftonpage
\hbox
- {\setbox\scratchpagebox=\vbox to #2
+ {\setbox\scratchpagebox\vbox to #2
{%\forgetall
\vsize#2\relax
\normalbaselines
@@ -580,7 +506,7 @@
%\getvalue{\??tk#1\v!tekst\c!na}%
\getvalue{\??tk#1\c!na}%
\kern\zeropoint}% keep the \dp, beware of \vtops, never change this!
- \dp\scratchpagebox=\zeropoint
+ \dp\scratchpagebox\zeropoint
\box\scratchpagebox}%
\vskip-#2\relax
\fi}
@@ -629,17 +555,12 @@
{\getvalue{\??tk#1\v!rand#4}\hss}%
\fi}}
-% \def\dododoplacelayouttextline#1#2#3#4%
-% {\hbox to #1{\hsize#1\relax#4}}
-
\def\dododoplacelayouttextline#1#2#3#4%
{\vbox % to \vsize
{\hsize#1\relax
- %\executeifdefined{\??tk#2#3\c!voor}\relax
- \getvalue{\??tk#2#3\c!voor}\relax
+ \getvalue{\??tk#2#3\c!voor}
\hbox to #1{#4}%
- %\executeifdefined{\??tk#2#3\c!na}\relax}}
- \getvalue{\??tk#2#3\c!na}\relax}}
+ \getvalue{\??tk#2#3\c!na}}}
%D Although it is far better to use backgrounds for this
%D purpose, one can add a rule in the following way. This
@@ -661,8 +582,8 @@
%D The next twosome will be done differently (using an
%D existing auxiliary macro).
-\def\@@nmpre#1{\setbox0=\hbox{#1}\ifdim\wd0=\zeropoint\else\unhbox0\tfskip\fi}
-\def\@@nmpos#1{\setbox0=\hbox{#1}\ifdim\wd0=\zeropoint\else\tfskip\unhbox0\fi}
+\def\@@nmpre#1{\setbox0\hbox{#1}\ifdim\wd0=\zeropoint\else\unhbox0\tfskip\fi}
+\def\@@nmpos#1{\setbox0\hbox{#1}\ifdim\wd0=\zeropoint\else\tfskip\unhbox0\fi}
%D This code will move to \type {page-flt.tex}.
diff --git a/tex/context/base/regi-il1.tex b/tex/context/base/regi-il1.tex
index 8e283b55f..f02a6f397 100644
--- a/tex/context/base/regi-il1.tex
+++ b/tex/context/base/regi-il1.tex
@@ -59,7 +59,7 @@
\defineactivetoken 189 {\textonehalf}
\defineactivetoken 190 {\textthreequarters}
-\defineactivetoken 183 {\textperiodcentered}
+%defineactivetoken 183 {\textperiodcentered}
\defineactivetoken 166 {\textbrokenbar}
\defineactivetoken 176 {\textdegree}
diff --git a/tex/context/base/regi-ini.tex b/tex/context/base/regi-ini.tex
index ce0fa3576..07e1f3fb9 100644
--- a/tex/context/base/regi-ini.tex
+++ b/tex/context/base/regi-ini.tex
@@ -10,9 +10,9 @@
{\setvalue{\c!file\f!regimeprefix#1}{}%
\makeshortfilename[\f!regimeprefix#1]%
\startreadingfile
- \readsysfile{\shortfilename}
- {\showmessage{\m!encodings}{2}{#1}}
- {\showmessage{\m!encodings}{3}{#1}}%
+ \readsysfile\shortfilename
+ {\showmessage\m!encodings2{#1}}
+ {\showmessage\m!encodings3{#1}}%
\stopreadingfile}}
\def\useregime[#1]%
@@ -20,6 +20,6 @@
\protect
-\useregime[def,uni,ibm,win,il1]
+\useregime[def,uni,ibm,win,il1,mac]
\endinput
diff --git a/tex/context/base/regi-mac.tex b/tex/context/base/regi-mac.tex
new file mode 100644
index 000000000..6f5dd36fa
--- /dev/null
+++ b/tex/context/base/regi-mac.tex
@@ -0,0 +1,119 @@
+%D \module
+%D [ file=regi-mac,
+%D version=2001.03.18,
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=Mac Encoding,
+%D author={Michel Bovani \& Hans Hagen},
+%D date=\currentdate,
+%D copyright=PRAGMA-ADE]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\startregime [mac]
+
+\defineactivetoken Ë {\Agrave}
+\defineactivetoken ç {\Aacute}
+\defineactivetoken å {\Acircumflex}
+\defineactivetoken Ì {\Atilde}
+\defineactivetoken € {\Adiaeresis}
+\defineactivetoken {\Aring} % ?
+\defineactivetoken ® {\AEligature}
+
+\defineactivetoken Ë {\agrave}
+\defineactivetoken ‡ {\aacute}
+\defineactivetoken ‰ {\acircumflex}
+\defineactivetoken ‹ {\atilde}
+\defineactivetoken Š {\adiaeresis}
+\defineactivetoken Π{\aring} % ?
+\defineactivetoken ¾ {\aeligature}
+
+\defineactivetoken ‚ {\Ccedilla}
+\defineactivetoken {\ccedilla}
+
+\defineactivetoken é {\Egrave}
+\defineactivetoken ƒ {\Eacute}
+\defineactivetoken æ {\Ecircumflex}
+\defineactivetoken è {\Ediaeresis}
+
+\defineactivetoken {\egrave}
+\defineactivetoken Ž {\eacute}
+\defineactivetoken {\ecircumflex}
+\defineactivetoken ‘ {\ediaeresis}
+
+\defineactivetoken í {\Igrave}
+\defineactivetoken ê {\Iacute}
+\defineactivetoken ë {\Icircumflex}
+\defineactivetoken ì {\Idiaeresis}
+
+\defineactivetoken “ {\igrave}
+\defineactivetoken ’ {\iacute}
+\defineactivetoken ” {\icircumflex}
+\defineactivetoken • {\idiaeresis}
+
+\defineactivetoken „ {\Ntilde}
+\defineactivetoken – {\ntilde}
+
+\defineactivetoken ñ {\Ograve}
+\defineactivetoken î {\Oacute}
+\defineactivetoken ï {\Ocircumflex}
+\defineactivetoken Í {\Otilde}
+\defineactivetoken … {\Odiaeresis}
+\defineactivetoken Î {\OEligature}
+\defineactivetoken ¯ {\Oslash} % ?
+
+\defineactivetoken ˜ {\ograve}
+\defineactivetoken — {\oacute}
+\defineactivetoken ™ {\ocircumflex}
+\defineactivetoken › {\otilde}
+\defineactivetoken š {\odiaeresis}
+\defineactivetoken Ï {\oeligature}
+\defineactivetoken ¿ {\oslash} % ?
+
+\defineactivetoken Š {\Scaron}
+\defineactivetoken š {\scaron}
+\defineactivetoken § {\ssharp}
+
+\defineactivetoken ô {\Ugrave}
+\defineactivetoken ò {\Uacute}
+\defineactivetoken ó {\Ucircumflex}
+\defineactivetoken † {\Udiaeresis}
+
+\defineactivetoken {\ugrave}
+\defineactivetoken œ {\uacute}
+\defineactivetoken ž {\ucircumflex}
+\defineactivetoken Ÿ {\udiaeresis}
+
+\defineactivetoken Ý {\Yacute}
+\defineactivetoken ý {\yacute}
+\defineactivetoken Ø {\ydiaeresis}
+\defineactivetoken Ù {\Ydiaeresis}
+
+\defineactivetoken À {?`} % ?
+\defineactivetoken Á {!`} % ?
+\defineactivetoken   {\textdag}
+\defineactivetoken à {\textddag}
+\defineactivetoken ¦ {\paragraphmark}
+\defineactivetoken ¤ {\sectionmark}
+\defineactivetoken Ð {\endash}
+\defineactivetoken Ñ {\emdash}
+\defineactivetoken É {\unknown} % ?
+\defineactivetoken © {\copyright}
+\defineactivetoken £ {\sterling} % ?
+
+\defineactivetoken ã {\char44\kern-.1em\char44 } % ?
+\defineactivetoken Ò {\char96\kern-.1em\char96 } % ?
+%defineactivetoken " {\char34 } % no
+\defineactivetoken Ô {\quoteleft} % ?
+\defineactivetoken Õ {\char39 } % ?
+%defineactivetoken {\guilsingleright} % ?
+%defineactivetoken {\guilsingleleft} % ?
+\defineactivetoken Ç {\leftguillemot}
+\defineactivetoken È {\rightguillemot}
+
+\stopregime
+
+% \enableregime[mac]
+
+\endinput
diff --git a/tex/context/base/regi-utf.tex b/tex/context/base/regi-utf.tex
new file mode 100644
index 000000000..0e33ebb58
--- /dev/null
+++ b/tex/context/base/regi-utf.tex
@@ -0,0 +1,45 @@
+%D \module
+%D [ file=regi-utf,
+%D version=2002.12.03,
+%D title=\CONTEXT\ Encoding Macros,
+%D subtitle=UTF-8,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright=PRAGMA-ADE]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+%D This regime activates the characters $>192$ and let them
+%D handle \UTF\ encoded content streams. This regime runs on
+%D top of the \type {unic} modules. We use an active inspector
+%D instead of a active token handler because here we don't want
+%D the \type {{}}. We only support this in \ETEX.
+
+\beginTEX
+ \expandafter \endinput
+\endTEX
+
+\unprotect
+
+\startregime[utf]
+
+\dostepwiserecurse{192}{223}{1}
+ {\expanded{\defineactiveinspector{\recurselevel} % space delimited
+ {\noexpand\utftwouniglph{\recurselevel}}}%
+ }%\letvalue{\@@univector\recurselevel}\gobbleoneargument}
+
+\dostepwiserecurse{224}{239}{1}
+ {\expanded{\defineactiveinspector{\recurselevel} % space delimited
+ {\noexpand\utfthreeuniglph{\recurselevel}}}%
+ }%\letvalue{\@@univector\recurselevel}\gobbetwoarguments}
+
+\dostepwiserecurse{240}{247}{1}
+ {\expanded{\defineactiveinspector{\recurselevel} % space delimited
+ {\noexpand\utffouruniglph{\recurselevel}}}%
+ }%\letvalue{\@@univector\recurselevel}\gobblethreearguments}
+
+\stopregime
+
+\protect \endinput
diff --git a/tex/context/base/s-abr-01.tex b/tex/context/base/s-abr-01.tex
index aec65a385..bc9414d50 100644
--- a/tex/context/base/s-abr-01.tex
+++ b/tex/context/base/s-abr-01.tex
@@ -33,14 +33,18 @@
\logo [CD] {cd}
\logo [CMR] {cmr}
\logo [CMYK] {cmyk}
+\logo [CODHOST] {CodHost}
\logo [CONTEXT] {\ConTeXt}
\logo [CTAN] {ctan}
\logo [CWEB] {cweb}
\logo [DISTILLER] {distiller}
+\logo [DSC] {dsc}
\logo [DTD] {dtd}
\logo [DTK] {dtk}
\logo [DTP] {dtp}
\logo [DVIPSONE] {dvipsone}
+\logo [DVIPDFM] {dvipdfm}
+\logo [DVIPDFMX] {dvipdfmx}
\logo [DVIPS] {dvips}
\logo [DVISCR] {dviscr}
\logo [DVIWINDO] {dviwindo}
@@ -51,13 +55,14 @@
\logo [EMTEX] {em\TeX}
\logo [EPS] {eps}
\logo [EXAMPLE] {eXaMpLe}
+\logo [EXIMPLE] {eXiMpLe}
\logo [ETEX] {\eTeX}
\logo [EUROMATH] {EuroMath}
\logo [EUROTEX] {Euro\TeX}
\logo [FAQ] {faq}
%logo [FGA] {fga}
\logo [FDF] {fdf}
-\logo [FGBBS] {fgbbs}
+%logo [FGBBS] {fgbbs}
\logo [FPTEX] {fp\TeX}
\logo [FREEBSD] {FreeBSD}
\logo [FTP] {ftp}
@@ -67,6 +72,7 @@
\logo [GNU] {gnu}
\logo [GS] {Ghost\-Script}
\logo [GUST] {Gust}
+\logo [HTTP] {http}
\logo [HTML] {html}
\logo [IBM] {ibm}
\logo [INRSTEX] {inrs\TeX}
@@ -98,6 +104,7 @@
\logo [NTG] {ntg}
\logo [NTS] {nts}
\logo [OMEGA] {Omega}
+\logo [OPI] {opi}
\logo [PASCAL] {Pascal}
\logo [PDFETEX] {pdf-\eTeX}
\logo [PDFTEX] {pdf\TeX}
@@ -119,11 +126,15 @@
\logo [PSTRICKS] {pstricks}
\logo [PSTOEDIT] {pstoedit}
\logo [PS] {Post\-Script}
+\logo [READER] {Acro\-bat Reader}
+\logo [RELAXNG] {Relax\kern.125emNG}
+\logo [RUBY] {Ruby}
\logo [RGB] {rgb}
\logo [SGML] {sgml}
\logo [SI] {si}
\logo [SQL] {sql}
\logo [TABLE] {\TaBlE}
+\logo [TCPIP] {tcp/ip}
\logo [TDS] {tds} % no sc te
\logo [TETEX] {te\TeX} % no sc te
\logo [TEXADRES] {\TeX adress}
@@ -155,6 +166,7 @@
\logo [URL] {url}
\logo [USA] {usa}
\logo [USENET] {usenet}
+\logo [UTF] {utf}
\logo [WDT] {wdt}
\logo [WEBC] {web2c}
\logo [WEB] {web}
@@ -165,6 +177,7 @@
\logo [XDVI] {Xdvi}
\logo [XINDY] {Xindy}
\logo [XML] {xml}
+\logo [XFDF] {xfdf}
\logo [XSLT] {xslt}
\logo [XSL] {xsl}
\logo [YandY] {y\&y}
diff --git a/tex/context/base/s-dtk-01.tex b/tex/context/base/s-dtk-01.tex
index f1aa44238..dc0e4032a 100644
--- a/tex/context/base/s-dtk-01.tex
+++ b/tex/context/base/s-dtk-01.tex
@@ -67,14 +67,14 @@
%D driver to sort out the margins. Therefore we are not
%D really typesetting in A5, but on something larger.
-\definieerpapierformaat
+\definepapersize
[DanteA5]
[breedte=486.54pt]
-\stelpapierformaatin
+\setuppapersize
[DanteA5][A4]
-\stellayoutin % w=342pt h=484pt
+\setuplayout % w=342pt h=484pt
[\c!rugwit=1in,
\c!kopwit=1in,
\c!plaats=\v!enkelzijdig,
@@ -92,7 +92,7 @@
%D Numbering.
-\stelnummeringin
+\setuppagenumbering
[\c!plaats=,
\c!variant=\v!dubbelzijdig]
@@ -254,4 +254,4 @@
%D Done.
-\endinput
+\protect \endinput
diff --git a/tex/context/base/s-fnt-01.tex b/tex/context/base/s-fnt-01.tex
index 8fb40de15..ad4c9f8cb 100644
--- a/tex/context/base/s-fnt-01.tex
+++ b/tex/context/base/s-fnt-01.tex
@@ -36,25 +36,26 @@
{\dotripleempty\doShowFont}
\def\doShowFont[#1][#2][#3]%
- {\bgroup
- \ifthirdargument
- \definefontsynonym[WhateverName][#2][encoding=#3]
- \definefont[WhateverFont][WhateverName]
- \setupheadertexts[\tttf#2\quad#1\quad#3]
- \WhateverFont
- \setupinterlinespace
- \showfont[WhateverName]
- \showligatures[WhateverName]
- \doifnotmode{compact}{\showaccents\showcharacters}
- \else
- \definefontsynonym[WhateverName][#2]
- \definefont[WhateverFont][WhateverName]
- \setupheadertexts[\tttf#2\quad#1\quad(special font)]
- \WhateverFont
- \setupinterlinespace
- \showfont[WhateverName]
- \fi
- \page
- \egroup}
+ {\doifsomething{#1}
+ {\bgroup
+ \ifthirdargument
+ \definefontsynonym[WhateverName][#2][encoding=#3]
+ \definefont[WhateverFont][WhateverName]
+ \setupheadertexts[\tttf#2\quad#1\quad#3]
+ \WhateverFont
+ \setupinterlinespace
+ \showfont[WhateverName]
+ \showligatures[WhateverName]
+ \doifnotmode{compact}{\showaccents\showcharacters}
+ \else
+ \definefontsynonym[WhateverName][#2]
+ \definefont[WhateverFont][WhateverName]
+ \setupheadertexts[\tttf#2\quad#1\quad(special font)]
+ \WhateverFont
+ \setupinterlinespace
+ \showfont[WhateverName]
+ \fi
+ \page
+ \egroup}}
\endinput
diff --git a/tex/context/base/s-map-01.tex b/tex/context/base/s-map-01.tex
index e137445d4..2bfea496d 100644
--- a/tex/context/base/s-map-01.tex
+++ b/tex/context/base/s-map-01.tex
@@ -97,7 +97,7 @@
%D gezet. Vooralsnog beperken we de definitie van de layout tot
%D de een||koloms opmaak.
-\stellayoutin
+\setuplayout
[\c!breedte=28pc,
\c!hoogte=\v!midden,
\c!marge=9pc,
@@ -121,7 +121,7 @@
%D gaan het paginanummer expliciet plaatsen, vandaar dat we
%D hier de plaats niet specificeren.
-\stelnummeringin
+\setuppagenumbering
[\c!plaats=,
\c!variant=\v!dubbelzijdig]
@@ -129,7 +129,7 @@
%D Het instellen op layout niveau is efficienter dan op elk
%D regel niveau.
-\stellayoutin
+\setuplayout
[\c!letter=\ss]
%D In principe hebben we 4 verschillende soorten witruimte,
diff --git a/tex/context/base/s-mod-01.tex b/tex/context/base/s-mod-01.tex
index bac50cc8e..c71c8806f 100644
--- a/tex/context/base/s-mod-01.tex
+++ b/tex/context/base/s-mod-01.tex
@@ -52,7 +52,7 @@
\startnotmode[single]
- \stelnummeringin
+ \setuppagenumbering
[\c!variant={\v!dubbelzijdig,\v!enkelzijdig}]
\stopnotmode
diff --git a/tex/context/base/s-mod-02.tex b/tex/context/base/s-mod-02.tex
index 0280a2fd8..d7a70f705 100644
--- a/tex/context/base/s-mod-02.tex
+++ b/tex/context/base/s-mod-02.tex
@@ -200,7 +200,7 @@
[file]
[optie=kleur]
-\stelnummeringin
+\stelpaginanummeringin
[variant=enkelzijdig,
wijze=perparagraaf,
status=geen]
diff --git a/tex/context/base/s-pre-02.tex b/tex/context/base/s-pre-02.tex
index 6e735c91d..cbdd97ae9 100644
--- a/tex/context/base/s-pre-02.tex
+++ b/tex/context/base/s-pre-02.tex
@@ -86,7 +86,7 @@
\setupinteraction
[state=start,
color=OrnamentColor,
- contrastcolor=Ornamentcolor]
+ contrastcolor=OrnamentColor]
\setupinteractionscreen
[option=max,
diff --git a/tex/context/base/s-pre-10.tex b/tex/context/base/s-pre-10.tex
index eca9e74d8..1320e3bc6 100644
--- a/tex/context/base/s-pre-10.tex
+++ b/tex/context/base/s-pre-10.tex
@@ -40,7 +40,7 @@
%D The topic goes to the top right corner of the screen which
%D means that it is positioned left down to the reference
%D point. Watch how we make data on this layer (here only
-%D the topic but it van be more) persistent.
+%D the topic but it can be more) persistent.
\setuplayer
[topic]
@@ -112,16 +112,18 @@
\def\DoSampleText#1#2#3%
{\setupframedtexts[SampleText][background={background,#3}]
+ \bgroup
+ \setups[#1]%
+ \setups[always]%
\setbox\nextbox=\hbox
{\startSampleText[none]
- \setups[#1]
- \setups[always]
\getbuffer[#1]\par
\doif{#1}{text}
{\dorecurse{\TextN}{\getbuffer[text-\recurselevel]\par}}
\stopSampleText}
\xdef\SampleTextWidth{\the\wd\nextbox}
- \setlayer[#2]{\box\nextbox}}
+ \setlayer[#2]{\box\nextbox}%
+ \egroup}
%D Since we are no longer swapping windows, we end up with a
%D much simplier \type {\Stopidea} macro. We don't reset
diff --git a/tex/context/base/setupb.tex b/tex/context/base/setupb.tex
index f7812facb..83215f61d 100644
--- a/tex/context/base/setupb.tex
+++ b/tex/context/base/setupb.tex
@@ -375,9 +375,21 @@
[\v!ja,\v!nee]
[\v!ja]
\variable
+ [\c!mp\c!spot]
+ [\v!ja,\v!nee]
+ [\v!ja]
+ \variable
[\c!tekstkleur]
[\c!identifier!]
[]
+ \variable
+ [\c!splitsen]
+ [\c!c,\c!m,\c!y,\c!k,\c!p,\c!s,\v!nee,\c!identifier!]
+ [\v!nee]
+ \variable
+ [\c!criterium]
+ [\v!alles,\v!geen]
+ [\v!geen]
\stopsetup
\startsetup
@@ -1308,7 +1320,7 @@
[\v!ruim]
\variable
[\c!breedte]
- [\v!passend,\v!ruim,\c!dimension!]
+ [\v!passend,\v!ruim,\v!vast,\c!dimension!]
[\v!ruim]
\variable
[\c!offset]
@@ -1316,7 +1328,7 @@
[1em]
\variable
[\c!plaats]
- [\v!laag,\v!diepte]
+ [\v!laag,\v!diepte,\v!hangend]
[]
\variable
[\c!optie]
@@ -2100,7 +2112,7 @@
%\stopsetup
\startsetup
- \command[\y!kolom]
+ \command[\y!column]
\type[]
\stopsetup
@@ -2403,6 +2415,12 @@
\stopsetup
\startsetup
+ \command[\y!emptylines]
+ \type[\c!val!]
+ \value[\c!number!][]
+\stopsetup
+
+\startsetup
\command[\y!nospace]
\type[]
\stopsetup
@@ -3232,7 +3250,7 @@
[]
\variable
[\c!markering]
- [\v!aan,\v!uit,\v!kleur]
+ [\v!aan,\v!uit,\v!kleur,\v!raster]
[\v!uit]
\variable
[\c!plaats]
@@ -3262,23 +3280,43 @@
\variable
[\c!regels]
[\c!number!]
- []
+ [0]
+ \variable
+ [\c!kolommen]
+ [\c!number!]
+ [0]
+ \variable
+ [\c!kolomafstand]
+ [\c!dimension!]
+ [0pt]
\variable
[\c!grid]
[\v!ja,\v!nee]
[\v!nee]
\variable
[\c!bodemwit]
- [\c!number!]
+ [\c!dimension!]
[]
\variable
[\c!snijwit]
- [\c!number!]
+ [\c!dimension!]
[]
\variable
[\c!tekstafstand]
+ [\c!dimension!]
+ []
+ \variable
+ [\c!tekstbreedte]
[\c!number!]
[]
+ \variable
+ [\c!tekstmarge]
+ [\c!dimension!]
+ []
+ \variable
+ [\c!clipoffset]
+ [\c!dimension!]
+ [\!!zeropoint]
\stopsetup
\startsetup
@@ -3407,7 +3445,7 @@
\startsetup
\command
- [\y!stelnummeringin]
+ [\y!setuppagenumbering]
\type
[\c!vars!]
\variable
@@ -3469,6 +3507,10 @@
[\v!start,\v!stop]
[\v!start]
\variable
+ [\c!breedte]
+ [\c!dimension!]
+ []
+ \variable
[\c!commando]
[\c!oneargument!]
[]
@@ -3554,6 +3596,22 @@
[\c!text!]
[.]
\variable
+ [\c!uitlijnen]
+ [\v!links,\v!rechts,\v!normaal,\v!ruim]
+ [\v!normaal]
+ \variable
+ [\c!titeluitlijnen]
+ [\v!ja,\v!nee]
+ [\v!nee]
+ \variable
+ [\c!tolerantie]
+ [\v!zeerstreng,\v!streng,\v!soepel,\v!zeersoepel,\v!rek]
+ [\v!soepel]
+ \variable
+ [\c!springvolgendein]
+ [\v!ja,\v!nee]
+ [\v!nee]
+ \variable
[\c!commando]
[\c!twoarguments!]
[]
@@ -3684,6 +3742,18 @@
[\c!nregels]
[\c!number!]
[4]
+ \variable
+ [\c!default]
+ [\c!identifier!]
+ []
+ \variable
+ [\c!linkermargeafstand]
+ [\c!dimension!]
+ [\!!zeropoint]
+ \variable
+ [\c!rechtermargeafstand]
+ [\c!dimension!]
+ [\!!zeropoint]
\inheritvariables
[\y!setupframed]
[]
@@ -3847,7 +3917,7 @@
\startsetup
\command
- [\y!pagina]
+ [\y!page]
\type
[\c!vals!]
\value
@@ -4022,6 +4092,19 @@
\startsetup
\command
+ [\y!listsymbol]
+ \type
+ [\c!val!\c!arg!]
+ \value
+ [\c!identifier!]
+ []
+ \value
+ [\c!text!]
+ []
+\stopsetup
+
+\startsetup
+ \command
[\y!plaatslijst]
\type
[\c!vals!\c!opt!\c!vars!]
@@ -4554,6 +4637,14 @@
[\c!scheider]
[\c!text!]
[]
+ \variable
+ [\c!breedte]
+ [\c!dimension!]
+ []
+ \variable
+ [\c!afstand]
+ [\c!dimension!]
+ []
\inheritvariables
[\y!setupframed]
[]
@@ -4647,6 +4738,45 @@
\startsetup
\command
+ [\y!setuppaper]
+ \type
+ [\c!vars!]
+ \variable
+ [\c!papier]
+ [\c!identifier!]
+ []
+ \variable
+ [\c!pagina]
+ [\c!identifier!]
+ []
+ \variable
+ [\c!nx]
+ [\c!number!]
+ [1]
+ \variable
+ [\c!ny]
+ [\c!number!]
+ [1]
+ \variable
+ [\c!breedte]
+ [\c!dimension!]
+ [0pt]
+ \variable
+ [\c!hoogte]
+ [\c!dimension!]
+ [0pt]
+ \variable
+ [\c!kopwit]
+ [\c!dimension!]
+ [0pt]
+ \variable
+ [\c!rugwit]
+ [\c!dimension!]
+ [0pt]
+\stopsetup
+
+\startsetup
+ \command
[\y!setuppapersize]
\type
[\c!vals!\c!opt!\c!vals!]
@@ -4667,7 +4797,7 @@
[\c!vals!]
\value
[\v!blokkeer,
- 2*16,2*8,2*4,2*2,2**2,2UP,2DOWN,
+ 2*16,2*8,2*4,2*2,2**2,2*2*4,2*4*2,2UP,2DOWN,2SIDE,2TOP,
\v!gespiegeld,\v!geroteerd,\v!dubbelzijdig,\v!negatief,90,180,270]
[]
\stopsetup
@@ -4892,37 +5022,37 @@
[\c!oneargument!]
[]
\variable
- [\c!scheider]
- [\c!text!]
- [.]
- \variable
[\c!prefix]
[+,-,\c!text!]
[]
\variable
[\c!plaatskop]
- [\v!ja,\v!nee]
+ [\v!ja,\v!nee,\v!leeg] % leeg: wel markering
[\v!ja]
\variable
[\c!verhoognummer]
- [\v!ja,\v!nee,\c!filename!]
+ [\v!ja,\v!nee,\v!lijst,\c!filename!] % lijst: wel lijstentry
[\v!ja]
- \variable
- [\c!uitlijnen]
- [\v!links,\v!rechts,\v!normaal,\v!ruim]
- [\v!normaal]
- \variable
- [\c!titeluitlijnen]
- [\v!ja,\v!nee]
- [\v!nee]
- \variable
- [\c!tolerantie]
- [\v!zeerstreng,\v!streng,\v!soepel,\v!zeersoepel,\v!rek]
- [\v!soepel]
- \variable
- [\c!springvolgendein]
- [\v!ja,\v!nee]
- [\v!nee]
+% \variable
+% [\c!scheider]
+% [\c!text!]
+% [.]
+% \variable
+% [\c!uitlijnen]
+% [\v!links,\v!rechts,\v!normaal,\v!ruim]
+% [\v!normaal]
+% \variable
+% [\c!titeluitlijnen]
+% [\v!ja,\v!nee]
+% [\v!nee]
+% \variable
+% [\c!tolerantie]
+% [\v!zeerstreng,\v!streng,\v!soepel,\v!zeersoepel,\v!rek]
+% [\v!soepel]
+% \variable
+% [\c!springvolgendein]
+% [\v!ja,\v!nee]
+% [\v!nee]
\variable
[\c!file]
[\c!identifier!]
@@ -4931,6 +5061,9 @@
[\c!expansie]
[\v!ja,\v!commando,\v!nee]
[\v!nee]
+ \inheritvariables
+ [\y!stelkoppenin]
+ []
\stopsetup
\startsetup
@@ -6840,11 +6973,15 @@
[\c!korps]
[5pt,...,12pt,\v!klein,\v!groot]
[]
+ \variable
+ [\c!lijn]
+ [\v!normaal,\v!regel]
+ [\v!regel]
\stopsetup
\startsetup
\command
- [\y!steltabellenin]
+ [\y!setuptables]
\type
[\c!vars!]
\variable
@@ -6911,7 +7048,7 @@
\startsetup
\command
- [\y!starttabel]
+ [\y!starttable]
\type
[\c!val!\c!stp!]
\value
@@ -6921,7 +7058,7 @@
\startsetup
\command
- [\y!starttabellen]
+ [\y!starttables]
\type
[\c!val!\c!stp!]
\value
@@ -7258,7 +7395,7 @@
\startsetup
\command
- [\y!stelcombinatiesin]
+ [\y!setupcombinations]
\type
[\c!vars!]
\variable
@@ -7286,6 +7423,10 @@
[\c!dimension!,\v!passend]
[\v!passend]
\variable
+ [\c!plaats]
+ [\c!boven,\c!midden,\c!onder,\c!links,\c!rechts]
+ [\c!onder]
+ \variable
[\c!uitlijnen]
[\v!nee,\v!links,\v!rechts,\v!midden,\v!normaal]
[\v!midden]
@@ -7293,7 +7434,7 @@
\startsetup
\command
- [\y!startcombinatie]
+ [\y!startcombination]
\type
[\c!val!\c!stp!]
\value
@@ -8170,6 +8311,10 @@
\type
[\c!vars!]
\variable
+ [\c!status]
+ [\v!start,\v!stop]
+ [\v!start]
+ \variable
[\c!breedte]
[\c!dimension!]
[]
diff --git a/tex/context/base/spec-def.tex b/tex/context/base/spec-def.tex
index de0bb9c2f..98b1fbd56 100644
--- a/tex/context/base/spec-def.tex
+++ b/tex/context/base/spec-def.tex
@@ -154,6 +154,14 @@
\installspecial [\dostartgraycolormode] [or] [1]
\installspecial [\dostopcolormode] [or] [0]
+%D New and experimental:
+
+\installspecial [\dostartspotcolormode] [or] [2]
+
+\installspecial [\doregistercmykspotcolor] [or] [5]
+\installspecial [\doregisterrgbspotcolor] [or] [4]
+\installspecial [\doregistergrayspotcolor] [or] [2]
+
%D For some drivers, the stop special is of no use and can
%D simply call the start one with zero arguments.
@@ -377,8 +385,7 @@
\installspecial [\dosetupprinter] [and] [5]
%D \macros
-%D {% dosetuppage,
-%D dosetupopenaction, dosetupclosaction,
+%D {dosetupopenaction, dosetupclosaction,
%D dosetupopenpageaction, dosetupclospageaction,
%D dosetupinteraction,
%D dosetupscreen,
@@ -405,10 +412,11 @@
%D These two setup the actions to be executed when the document
%D is opened and closed.
%D
-%D The next command sets up the screen. It takes five
-%D arguments:
+%D The next commands sets up the page and screen. They are
+%D kind of related.
%D
%D \starttypen
+%D \dosetuppage {hoffset} {voffset} {width} {height} {options}
%D \dosetupscreen {hoffset} {voffset} {width} {height} {options}
%D \stoptypen
%D
@@ -429,6 +437,13 @@
\installspecial [\dosetupscreen] [and] [5]
\installspecial [\dosetuppageview] [and] [1]
+% new, yet undocumented, replaces \dosetupscreen
+
+\installspecial [\dosetupcropbox] [and] [4]
+\installspecial [\dosetuptrimbox] [and] [4]
+\installspecial [\dosetupartbox] [and] [4]
+\installspecial [\dosetupbleedbox] [and] [4]
+
%D \macros
%D {dostarthide,
%D dostophide}
@@ -879,9 +894,12 @@
\defineoutput [dviwindo] [dvi,ps,yy,win]
\defineoutput [dvips] [dvi,ps,tr]
\defineoutput [dviview] [dvi,ps,tr,dv]
-\defineoutput [dvipdfm] [dpm]
\defineoutput [pdftex] [tpd]
-\defineoutput [pdf] [tpd]
+\defineoutput [pdf] [tpd]
+\defineoutput [dvipdfm] [dpm]
+\defineoutput [dpm] [dpm]
+\defineoutput [dvipdfmx] [dpx]
+\defineoutput [dpx] [dpx]
\defineoutput [acrobat] [pdf,ps,tr]
%D Please let me know if we need more. From now on we default
diff --git a/tex/context/base/spec-dpm.tex b/tex/context/base/spec-dpm.tex
index 44e6e87a5..92b0f682b 100644
--- a/tex/context/base/spec-dpm.tex
+++ b/tex/context/base/spec-dpm.tex
@@ -175,7 +175,12 @@
%D \macros
%D {dosetupscreen}
-\definespecial\dosetupscreen{\doPDFsetupscreen\printpapierhoogte}
+\definespecial\dosetupscreen {\doPDFsetupscreen \printpapierhoogte}
+
+\definespecial\dosetupartbox {\doPDFsetupartbox \printpapierhoogte}
+\definespecial\dosetupcropbox {\doPDFsetupcropbox \printpapierhoogte}
+\definespecial\dosetupbleedbox{\doPDFsetupbleedbox\printpapierhoogte}
+\definespecial\dosetuptrimbox {\doPDFsetuptrimbox \printpapierhoogte}
%D \macros
%D {dostartexecutecommand}
@@ -185,15 +190,7 @@
%D \macros
%D {dosetupidentity}
-\definespecial\dosetupidentity#1#2#3#4#5#6%
- {\bgroup
- \enablePDFdocencoding
- \special
- {pdf: docinfo
- <</Title (#1) /Subject (#2) /Author (#3)
- /Creator (#4) /ModificationDate (#5)
- /Keywords (#6) /Producer (dvipdfm)>>}%
- \egroup}
+\definespecial\dosetupidentity{\doPDFsetupidentity}
%D \macros
%D {dostartrunprogam}
@@ -351,11 +348,15 @@
\egroup}
%D \macros
-%D {doPDFaddtocatalog,doPDFpageattribute,doPDFpagesattribute}
+%D {doPDFaddtocatalog,doPDFaddtoinfo,
+%D doPDFpageattribute,doPDFpagesattribute}
\def\doPDFaddtocatalog#1%
{\special{pdf: put @catalog <<#1>>}}
+\def\doPDFaddtoinfo#1% Is this auto appended? Not checked!
+ {\special{pdf: docinfo <<#1>>}} % put @docinfo <<#1>>}}
+
\def\doPDFpageattribute#1%
{\special{pdf: put @thispage <<#1>>}}
diff --git a/tex/context/base/spec-dpx.tex b/tex/context/base/spec-dpx.tex
new file mode 100644
index 000000000..affcd5411
--- /dev/null
+++ b/tex/context/base/spec-dpx.tex
@@ -0,0 +1,579 @@
+%\unprotect
+%D \module
+%D [ file=spec-dpx,
+%D version=2002.11.28,
+%D title=\CONTEXT\ Special Macros,
+%D subtitle=DVIPDFMx support,
+%D author=Jin-Hwan Cho,
+%D date=\currentdate,
+%D copyright={Jin-Hwan Cho \& Hans Hagen}]
+%C
+%C DVIPDFMx is an eXtended version of the DVIPDFM, a DVI to PDF
+%C translator, still under construction by Jin-Hwan Cho and
+%C Shunsaku Hirata.
+%C
+%C It supports multi-byte character encodings and large character
+%C sets for East Asian languages by CID-keyed font technology,
+%C and many features including PDF encryption, PDF bookmarks and
+%C annotations with Chinese, Japanese, Korean characters, etc.
+%C
+%C DVIPDFMx (and information) can be downloaded from:
+%C
+%C http://project.ktug.or.kr/dvipdfmx/
+
+\unprotect
+
+%D This driver is build on top of the general \PDF\ macros,
+%D as defined in \type{spec-fdf}, so we inherit that one.
+
+\startspecials[dpx][reset,fdf]
+
+%D 1. Modified codes from \type{spec-dpm}
+
+%D \macros
+%D {jobsuffix}
+%D
+%D Because no intermediate output format is used, we set the
+%D jobsuffix to \PDF.
+
+\def\jobsuffix{pdf}
+
+%D DVIPDFMx supports the special command \type{pdf: literal ...}
+%D since the version \type{dvipdfmx-20021028}.
+%D
+%D 1. \type{pdf: linteral #1} puts the given PDF commands \#1
+%D after changing the text matrix with \type{"1 0 0 1 x y cm"}
+%D to set the current DVI position $(x,y)$ to the origin.
+%D
+%D 2. \type{pdf: linteral reverse #1} puts the given PDF commands \#1
+%D after changing the text matrix with \type{"1 0 0 1 -x -y cm"}.
+%D
+%D 3. \type{pdf: linteral direct #1} puts directly the given PDF
+%D commands \#1 without changing the text matrix.
+%D
+%D Literal \PDF\ inclusion is implemented as:
+
+\def\PDFcode#1{\special{pdf: literal direct #1}}
+
+%D \type{\dosetuppaper} in \type{spec-dpm} did not work properly
+%D because DVIPDFM did not permit changing the page size.
+%D
+%D However, DVIPDFMx permits different page size in each page
+%D since the version \type{dvipdfmx-20021028}.
+%D
+%D \macros
+%D {dosetuppaper}
+%D
+%D A simple one.
+
+\definespecial\dosetuppaper#1#2#3%
+ {\bgroup
+ \scratchdimen#2\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#3\edef\height{\the\scratchdimen\space}%
+ \special{pdf: pagesize width \width height \height}%
+ \egroup}
+
+%D \macros
+%D {doinsertfile}
+%D
+%D Only \METAPOST, \JPG\ \PNG\ and \PDF\ inclusion are supported.
+
+\definespecial\doinsertfile#1#2#3#4#5#6#7#8#9%
+ {\dodoinsertfile{dpx}{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}
+
+%D Even though DVIPDFM supports \METAPOST directly, the funtionality
+%D is not good. It conflicts much with \CONTEXT.
+%D
+%D So, \METAPOST will be treated as the same way as PDFTeX using
+%D MPtoPDF in DVIPDFMx since the version \type{dvipdfmx-20021028}.
+
+\definefileinsertion{dpx}{mps}#1#2#3#4#5#6#7#8#9%
+ {\hbox
+ {%\convertMPcolors{#1}% plugged in supp-mpe
+ \scratchdimen#3pt \PointsToReal{.01\scratchdimen}\xscale
+ \scratchdimen#4pt \PointsToReal{.01\scratchdimen}\yscale
+ \special{pdf: literal direct q}\special{pdf: literal}%
+ \convertMPtoPDF{#1}\xscale\yscale
+ \special{pdf: literal direct Q}
+ \global\let\PDFimagereference\empty}}
+
+%D DVIPDFM (and DVIPDFMx too) supports the image files with
+%D the extension, \PDF, \JPG, \PNG, and \EPS.
+
+\def\handlepdfimage#1#2#3#4#5#6#7#8#9%
+ {\bgroup
+ \scratchdimen#7\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#8\edef\height{\the\scratchdimen\space}%
+ \special{pdf: image width \width height \height (#1)}%
+ \egroup}
+
+\definefileinsertion{dpx}{pdf}{\handlepdfimage}
+\definefileinsertion{dpx}{jpg}{\handlepdfimage}
+\definefileinsertion{dpx}{png}{\handlepdfimage}
+\definefileinsertion{dpx}{eps}{\handlepdfimage} % unstable
+
+\definefileinsertion{dpx}{mov}{\doPDFinsertmov}
+\definefileinsertion{dpx}{avi}{\doPDFinsertmov}
+
+%D \macros
+%D {doinsertsoundtrack}
+%D
+%D Sounds are supported too.
+
+\definespecial\doinsertsoundtrack{\doPDFinsertsoundtrack}
+
+%D \type{\doPDFovalbox} in \type{spec-fdf} was modifed because
+%D the definition of \type{\PDFcode} was changed in this module.
+%D
+%D \macros
+%D {doPDFovalbox}
+%D
+%D For drawing ovals we use quite raw \PDF\ code. The next
+%D implementation does not differ that much from the one
+%D implemented in the \POSTSCRIPT\ driver.
+
+\def\doPDFovalbox#1#2#3#4#5#6#7% todo: \scratchdimen/\scatchbox
+ {\bgroup
+ \dimen0=#4\divide\dimen0 2
+ \doPDFovalcalc{0pt}{+\dimen0}\xmin
+ \doPDFovalcalc{#1}{-\dimen0}\xmax
+ \doPDFovalcalc{#2}{-\dimen0}\ymax
+ \doPDFovalcalc{-#3}{+\dimen0}\ymin
+ \advance\dimen0 by #5%
+ \doPDFovalcalc{0pt}{+\dimen0}\xxmin
+ \doPDFovalcalc{#1}{-\dimen0}\xxmax
+ \doPDFovalcalc{#2}{-\dimen0}\yymax
+ \doPDFovalcalc{-#3}{+\dimen0}\yymin
+ \doPDFovalcalc{#4}{\zeropoint}\stroke
+ \doPDFovalcalc{#5}{\zeropoint}\radius
+ \edef\dostroke{#6}%
+ \edef\dofill{#7}%
+ \setbox0\hbox
+ {\ifnum\dostroke\dofill>0
+ \ifPDFstrokecolor\else\ifnum\dostroke=1
+ \writestatus\m!colors{pdf stroke color will fail}\wait
+ \fi\fi
+ \special{pdf: content
+ \stroke\space w
+ \xxmin\space \ymin\space m
+ \xxmax\space \ymin\space l
+ \xmax \space \ymin\space \xmax\space \yymin\space y
+ \xmax \space \yymax\space l
+ \xmax \space \ymax\space \xxmax\space \ymax\space y
+ \xxmin\space \ymax\space l
+ \xmin \space \ymax\space \xmin\space \yymax\space y
+ \xmin \space \yymin\space l
+ \xmin \space \ymin\space \xxmin\space \ymin\space y
+ \ifnum\dostroke=1 S \fi
+ \ifnum\dofill=1 f \fi}%
+ \fi}%
+ \wd0=#1\ht0=#2\dp0=#3\box0
+ \egroup}
+
+%D \macros
+%D {doovalbox}
+
+\definespecial\doovalbox{\doPDFovalbox}
+
+%D \macros
+%D {dostartgraymode,dostopgraymode,
+%D dostartrgbcolormode,dostartcmykcolormode,dostartgraycolormode,
+%D dostopcolormode,
+%D dostartrotation,dostoprotation,
+%D dostartscaling,dostopscaling,
+%D dostartmirroring,dostopmirroring,
+%D dostartnegative,dostopnegative}
+%D
+%D Unfortunately the direct \PDF\ inclusion is not suited
+%D for the next macros, which means that we cannot use the
+%D \type {\doPDF..} alternatives. Since \CONTEXT\ maintains
+%D its own colorstack, we use the \DVIPS\ alternatives.
+
+\definespecial\dostartgraymode #1{\special{color gray #1}}
+\definespecial\dostopgraymode {\special{color gray 0}}
+\definespecial\dostartrgbcolormode #1#2#3{\special{color rgb #1 #2 #3}}
+\definespecial\dostartcmykcolormode#1#2#3#4{\special{color cmyk #1 #2 #3 #4}}
+\definespecial\dostartgraycolormode #1{\special{color gray #1}}
+\definespecial\dostopcolormode {\special{color gray 0}}
+\definespecial\dostartrotation #1{\special{pdf: bt rotate #1}}
+\definespecial\dostoprotation {\special{pdf: et}}
+\definespecial\dostartscaling #1#2{\special{pdf: bt xscale #1 yscale #2}}
+\definespecial\dostopscaling {\special{pdf: et}}
+\definespecial\dostartmirroring {\special{pdf: bt xscale -1}} % ?
+\definespecial\dostopmirroring {\special{pdf: et}}
+
+%D Negation is not (yet) supported:
+
+% \definespecial\dostartnegative {}
+% \definespecial\dostopnegative {}
+% \definespecial\dostarttransparency {}
+% \definespecial\dostoptransparency {}
+
+
+%D \macros
+%D {dosetupinteraction,
+%D dosetupopenaction,dosetupcloseaction}
+
+\definespecial\dosetupinteraction%
+ {\showmessage{\m!interactions}{21}{DVIPDFMx}}
+
+\definespecial\dosetupopenaction {\doPDFsetupopenaction}
+\definespecial\dosetupcloseaction{\doPDFsetupcloseaction}
+
+%D \macros
+%D {doresetgotowhereever,
+%D dostartthisisrealpage,dostartthisislocation,
+%D dostartgotorealpage,dostartgotolocation,dostartgotoJS}
+
+\definespecial\doresetgotowhereever {\doPDFresetgotowhereever}
+\definespecial\dostartthisislocation{\doPDFstartthisislocation}
+
+\definespecial\dostartgotolocation{\doPDFstartgotolocation}
+\definespecial\dostartgotorealpage{\doPDFstartgotorealpage}
+\definespecial\dostartgotoJS {\doPDFstartgotoJS}
+
+%D \macros
+%D {doflushJSpreamble}
+
+\definespecial\doflushJSpreamble#1%
+ {\bgroup
+ \let\compositeJScode\empty
+ \def\docommando##1%
+ {\edef\sanitizedJScode{\getJSpreamble{##1}}%
+ \@EA\doPSsanitizeJScode\sanitizedJScode\to\sanitizedJScode
+ \special{pdf: object @JS:#1 <</S /JavaScript /JS (\sanitizedJScode)>>}%
+ \edef\compositeJScode{\compositeJScode\space (##1) @JS:#1}}%
+ \processcommalist[#1]\docommando
+ \special{pdf: object @JS:JS <</Names [\compositeJScode]>>}%
+ \special{pdf: put @names <</JavaScript @JS:JS>>}%
+ \egroup}
+
+%D \macros
+%D {dostarthide,dostophide}
+
+\definespecial\dostarthide{}
+\definespecial\dostophide {}
+
+%D \macros
+%D {dosetupscreen}
+
+\definespecial\dosetupscreen {\doPDFsetupscreen \printpapierhoogte}
+
+\definespecial\dosetupartbox {\doPDFsetupartbox \printpapierhoogte}
+\definespecial\dosetupcropbox {\doPDFsetupcropbox \printpapierhoogte}
+\definespecial\dosetupbleedbox{\doPDFsetupbleedbox\printpapierhoogte}
+\definespecial\dosetuptrimbox {\doPDFsetuptrimbox \printpapierhoogte}
+
+%D \macros
+%D {dostartexecutecommand}
+
+\definespecial\dostartexecutecommand{\doPDFstartexecutecommand}
+
+%D \macros
+%D {dosetupidentity}
+
+\definespecial\dosetupidentity{\doPDFsetupidentity}
+
+%D \macros
+%D {dostartrunprogam}
+
+\definespecial\dostartrunprogram{\doPDFstartrunprogram}
+
+%D \macros
+%D {dostartgotoprofile, dostopgotoprofile,
+%D dobeginofprofile, doendofprofile}
+
+\definespecial\dostartgotoprofile{\doPDFstartgotoprofile}
+
+\definespecial\dobeginofprofile#1#2#3#4%
+ {\bgroup
+ \setPDFdestination{#1}%
+ \scratchdimen#2\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#3\edef\height{\the\scratchdimen\space}%
+ \doifsomething{\PDFdestination}
+ {\special
+ {pdf: thread @ART::\PDFdestination\space
+ width \width height \height
+ <</Title (\PDFdestination)>>}}%
+ \egroup}
+
+\definespecial\doendofprofile
+ {}
+
+%D \macros
+%D {doinsertbookmark}
+
+\definespecial\doinsertbookmark{\doPDFinsertbookmark}
+
+%D \macros
+%D {dostartobject,dostopobject,doinsertobject}
+
+\definespecial\dostartobject#1#2#3#4#5%
+ {\bgroup
+ \setbox\nextbox=\hbox\bgroup
+ \dosetobjectreference{#1}{#2}{#1::#2}%
+ \scratchdimen#3\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#4\edef\height{\the\scratchdimen\space}%
+ \special{pdf: bxobj @#1::#2 width \width height \height}}
+
+%D Modified to support the color shading feature since version
+%D \type{dvipdfmx-20021128}.
+
+\definespecial\dostopobject%
+ {\ifx\currentPDFresources\empty
+ \special{pdf: exobj}%
+ \else
+ \special{pdf: exobj <<\currentPDFresources>>}%
+ \global\let\currentPDFresources\empty
+ \fi
+ \egroup
+ \smashbox\nextbox
+ \flushatshipout{\box\nextbox}%
+ \egroup}
+
+\definespecial\doinsertobject#1#2%
+ {\hbox
+ {\dogetobjectreference{#1}{#2}\PDFobjectreference
+ \ifx\PDFobjectreference\empty \else
+ \special{pdf: usexobj @\PDFobjectreference}%
+ \fi}}
+
+%D \macros
+%D {dosetpagetransition}
+
+\definespecial\dosetpagetransition{\doPDFsetpagetransition}
+
+%D \macros
+%D {doinsertcomment, doflushcomments}
+
+\definespecial\doinsertcomment{\doPDFinsertcomment}
+\definespecial\doflushcomments{\doPDFflushcomments}
+
+%D \macros
+%D {dopresetlinefield,dopresettextfield,
+%D dopresetchoicefield,dopresetpopupfield,dopresetcombofield,
+%D dopresetpushfield,dopresetcheckfield,
+%D dopresetradiofield,dopresetradiorecord}
+
+\definespecial\dopresetlinefield {\doFDFpresetlinefield}
+\definespecial\dopresettextfield {\doFDFpresettextfield}
+\definespecial\dopresetchoicefield{\doFDFpresetchoicefield}
+\definespecial\dopresetpopupfield {\doFDFpresetpopupfield}
+\definespecial\dopresetcombofield {\doFDFpresetcombofield}
+\definespecial\dopresetpushfield {\doFDFpresetpushfield}
+\definespecial\dopresetcheckfield {\doFDFpresetcheckfield}
+\definespecial\dopresetradiofield {\doFDFpresetradiofield}
+\definespecial\dopresetradiorecord{\doFDFpresetradiorecord}
+
+%D \macros
+%D {dodefinefieldset,dogetfieldset,doiffieldset}
+
+\definespecial\dodefinefieldset{\doFDFdefinefieldset}
+\definespecial\dogetfieldset {\doFDFgetfieldset}
+\definespecial\doiffieldset {\doFDFiffieldset}
+
+%D \macros
+%D {doregistercalculationset}
+
+\definespecial\doregistercalculationset{\doFDFregistercalculationset}
+
+%D \type{\doPDFdestination} in \type{spec-dpm} had a bug.
+%D
+%D \macros
+%D {doPDFdestination}
+
+\def\doPDFdestination name #1%
+ {\special{pdf: dest (#1) [@thispage\PDFpageviewwrd]}}
+
+%D \macros
+%D {doPDFaction,doPDFannotation,ifsharePDFactions}
+%D
+%D Sharing is not yet supported.
+
+\newif\ifsharePDFactions \sharePDFactionsfalse
+
+\def\doPDFaction width #1 height #2 action #3%
+ {\ifcollectreferenceactions
+ \xdef\lastPDFaction{#3}%
+ \else
+ \bgroup
+ % this is yet untested
+ %\ifsharePDFactions
+ % \ifcase\similarreference\relax
+ % \xdef\lastPDFaction{<<#3>>}%
+ % \or
+ % \global\advance\nofPDFsimilar by 1
+ % \special{pdf: object @PDF::sim:\the\nofPDFsimilar\space<<#3>>}%
+ % \xdef\lastPDFaction{@PDF::sim:\the\nofPDFsimilar}%
+ % \else
+ % % leave \lastPDFaction untouched
+ % \fi
+ %\else
+ \xdef\lastPDFaction{<<#3>>}%
+ %\fi
+ \scratchdimen#1\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#2\edef\height{\the\scratchdimen\space}%
+ \special{pdf: ann width \width height \height
+ <</Subtype /Link /Border [0 0 0]
+ \ifhighlighthyperlinks \else /H /N \fi
+ /A \lastPDFaction\space>>}%
+ \egroup
+ \fi}
+
+%D \type{\doPDFannotation} in \type{spec-dpm} had a bug.
+
+\def\doPDFannotation width #1 height #2 data #3%
+ {\bgroup
+ \scratchdimen#1\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#2\edef\height{\the\scratchdimen\space}%
+ \special{pdf: ann width \width height \height <<#3>>}%
+ \egroup}
+
+%D \macros
+%D {doPDFannotationobject}
+
+\def\doPDFannotationobject class #1 name #2 width #3 height #4 data #5%
+ {\bgroup
+ \scratchdimen#3\edef\width {\the\scratchdimen\space}%
+ \scratchdimen#4\edef\height{\the\scratchdimen\space}%
+ \special{pdf: ann @#1::#2 width \width height \height <<#5>>}%
+ \dosetobjectreference{#1}{#2}{#1::#2}%
+ \egroup}
+
+%D \macros
+%D {doPDFaddtocatalog,doPDFaddtoinfo,
+%D doPDFpageattribute,doPDFpagesattribute}
+
+\def\doPDFaddtocatalog#1%
+ {\special{pdf: put @catalog <<#1>>}}
+
+\def\doPDFaddtoinfo#1% Is this auto appended? Not checked!
+ {\special{pdf: docinfo <<#1>>}} % put @docinfo <<#1>>}}
+
+\def\doPDFpageattribute#1%
+ {\special{pdf: put @thispage <<#1>>}}
+
+\def\doPDFpagesattribute#1%
+ {\special{pdf: put @pages <<#1>>}}
+
+\def\doPDFpageresource#1%
+ {\message{[skipping PDF resource]}}
+
+\let\doPDFresetpageresources =\relax
+\let\doPDFresetpageattributes=\relax
+
+%D \type{\doPDFbookmark} in \type{spec-dpm} had a bug.
+%D The openbookmark option \#5 is not supported yet.
+%D
+%D \macros
+%D {doPDFbookmark}
+
+\def\doPDFbookmark level #1 n #2 text #3 page #4 open #5%
+ {\ifcase#1\else
+ \special{pdf: outline #1 %\ifcase\the#5-\fi#1
+ <</Title (#3) /A <</S /GoTo /D (page:#4)>>>>}%
+ \fi}
+
+%D \macros
+%D {doPDFdictionaryobject,doPDFarrayobject}
+
+\def\doPDFdictionaryobject class #1 name #2 data #3%
+ {\special{pdf: object @#1::#2 <<#3>>}}
+
+\def\doPDFarrayobject class #1 name #2 data #3%
+ {\special{pdf: object @#1::#2 [#3]}}
+
+%D \macros
+%D {defaultobjectreference,doPDFgetobjectreference}
+
+\def\defaultobjectreference#1#2{#1::#2}
+
+%D \type{\doPDFgetobjectrefernce} in \type{spec-dpm} had a bug.
+
+\def\doPDFgetobjectreference#1#2#3%
+ {\dogetobjectreference{@#1}{#2}#3%
+ \ifx#3\empty\else\edef#3{#3}\fi}
+
+%D Done.
+
+% %D 2. Modified codes from \type{spec-fdf}
+%
+% \definespecial\dostartgraphicgroup{\special{pdf: literal direct q}}
+% \definespecial\dostopgraphicgroup {\special{pdf: literal direct Q}}
+
+%D 3. Modified codes from \type{spec-tpd}
+
+%D \macros
+%D {dostartclipping,dostopclipping}
+%D
+%D Clipping in \PDFTEX\ is rather trivial. We can even hook
+%D in \METAPOST\ without problems.
+
+\definespecial\dostartclipping#1#2#3%
+ {\PointsToBigPoints{#2}\width
+ \PointsToBigPoints{#3}\height
+ \grabMPclippath{#1}{1}\width\height
+ {0 0 m \width\space 0 l \width \height l 0 \height l}%
+ \special{pdf: literal direct q}%
+ \special{pdf: literal 0 w \MPclippath\space W n}%
+ \special{pdf: literal reverse}}
+
+\definespecial\dostopclipping
+ {\special{pdf: literal direct Q n}}
+
+%D 4. Modified codes from \type{supp-mpe}
+
+\def\stopMPshading
+ {\global\advance\currentPDFshade \plusone
+ \setxvalue{obj:Sh:\currentMPspecial}%
+ {/Sh\the\currentPDFshade\space @obj:Sh:\currentMPspecial\space}%
+ \setxvalue{mps:Sh:\currentMPspecial}%
+ {\the\currentPDFshade}}
+
+\defineMPspecial{30}
+ {\startMPshading{14}% type 2
+ \setMPshadingcolors{4}{5}{6}{9}{10}{11}%
+ \special{pdf: object @ftn:Sh:\currentMPspecial\space
+ <</FunctionType 2
+ /Domain [\gMPs1 \gMPs2]
+ /C0 [\MPshadeA]
+ /C1 [\MPshadeB]
+ /N \gMPs3>>}%
+ \special{pdf: object @obj:Sh:\currentMPspecial\space
+ <</ShadingType 2
+ /ColorSpace /\MPshadeC\space
+ /Function @ftn:Sh:\currentMPspecial\space
+ /Coords [\gMPs7 \gMPs8 \gMPs{12} \gMPs{13}]
+ /Extend [true true]>>}%
+ \stopMPshading}
+
+\defineMPspecial{31}
+ {\startMPshading{16}% type 3
+ \setMPshadingcolors{4}{5}{6}{10}{11}{12}%
+ \special{pdf: object @ftn:Sh:\currentMPspecial\space
+ <</FunctionType 2
+ /Domain [\gMPs1 \gMPs2]
+ /C0 [\MPshadeA]
+ /C1 [\MPshadeB]
+ /N \gMPs3>>}%
+ \special{pdf: object @obj:Sh:\currentMPspecial\space
+ <</ShadingType 3
+ /ColorSpace /\MPshadeC\space
+ /Function @ftn:Sh:\currentMPspecial\space
+ /Coords [\gMPs7 \gMPs8 \gMPs9 \gMPs{13} \gMPs{14} \gMPs{15}]
+ /Extend [true true]>>}%
+ \stopMPshading}
+
+%D 5. Modified codes from \type{supp-pdf}
+
+\let\dohandleMPfshow\handleMPfshow
+
+\def\handleMPfshow
+ {\special{pdf: literal direct q}%
+ \special{pdf: literal reverse}%
+ \dohandleMPfshow
+ \special{pdf: literal direct Q}}
+
+\stopspecials
+
+\protect \endinput
diff --git a/tex/context/base/spec-fdf.tex b/tex/context/base/spec-fdf.tex
index a60a17888..253e0b3cd 100644
--- a/tex/context/base/spec-fdf.tex
+++ b/tex/context/base/spec-fdf.tex
@@ -128,10 +128,11 @@
% by integrating the split in the loop below
% \splitofftokens\maxPDFstringsize\from\ascii\to\ascii
% we diminish the processing time considerably
- \scratchcounter=\maxPDFstringsize
+ \scratchcounter\maxPDFstringsize
\def\docommando##1%
- {\ifnum\scratchcounter>0
- \advance\scratchcounter by -1
+ %{\ifnum\scratchcounter>0
+ {\ifcase\scratchcounter\else
+ \advance\scratchcounter \minusone
\ifcase\lccode`##1\relax
\xdef#2{#2.}% let's show that something is missing
\or
@@ -193,6 +194,7 @@
%D doPDFdictionaryobject,
%D doPDFarrayobject,
%D doPDFaddtocatalog,
+%D doPDFaddtoinfo,
%D doPDFpageattribute,
%D doPDFpageresource,
%D doPDFpagesattribute,
@@ -214,6 +216,7 @@
%D \doPDFdictionaryobject class #1 name #2 data #3
%D \doPDFarrayobject class #1 name #2 data #3
%D \doPDFaddtocatalog #1
+%D \doPDFaddtoinfo #1
%D \doPDFpageattribute #1
%D \doPDFpageresource #1
%D \doPDFpagesattribute #1
@@ -271,51 +274,129 @@
\def\appendtoPDFdocumentextgstates#1%
{\xdef\docuPDFextgstates{\docuPDFextgstates\space#1}}
+%D Another special mechanism (needed for color separation):
+
+\let\docuPDFcolorspaces\empty
+
+\def\checkPDFcolorspaces
+ {\ifx\docuPDFcolorspaces\empty \else
+ \ifnum\realpageno=\lastpage\relax
+ \doPDFdictionaryobject class FDF name colorspaces data
+ {\docuPDFcolorspaces}%
+ \fi
+ \doPDFgetobjectreference{FDF}{colorspaces}\PDFobjectreference
+ \doPDFpageresource{/ColorSpace \PDFobjectreference}%
+ \fi}
+
+\appendtoksonce
+ \checkPDFcolorspaces
+\to \everyshipout
+
+\def\appendtoPDFdocumentcolorspaces#1%
+ {\xdef\docuPDFcolorspaces{\docuPDFcolorspaces\space#1}}
+
%D \macros
-%D {doPDFsetupscreen}
+%D {doPDFsetupscreen,doPDFsetupidentity}
%D
%D Opposite to \DVI\ drivers, \PDF\ ones must know which what
%D page dimensions they are dealing. We also use the
%D opportunity to launch full screen (1) or show bookmarks (2).
+\let\currentPDFpagemode \empty % document catalog
+\let\currentPDFviewerprefs\empty % document catalog
+
+\let\currentPDFcropbox \empty % page attributes
+\let\currentPDFbleedbox \empty % page attributes
+\let\currentPDFartbox \empty % page attributes
+\let\currentPDFtrimbox \empty % page attributes
+
\def\doPDFsetupscreen#1#2#3#4#5#6% watch the extra argument
{\bgroup
- \!!widtha#4%
- \advance\!!widtha #2%
- \!!heighta-#5%
- \!!heightb#1% extra argument
- \advance\!!heightb -#3%
- \advance\!!heighta \!!heightb
- \PointsToWholeBigPoints{#2}\left
- \PointsToWholeBigPoints\!!heighta\bottom
- \PointsToWholeBigPoints\!!widtha \width
- \PointsToWholeBigPoints\!!heightb\height
+% \!!widtha#4%
+% \advance\!!widtha#2%
+% \!!heighta-#5%
+% \!!heightb#1% extra argument
+% \advance\!!heightb -#3%
+% \advance\!!heighta \!!heightb
+% % sometimes whole values give better results
+% % \PointsToWholeBigPoints{#2}\left
+% % \PointsToWholeBigPoints\!!heighta\bottom
+% % \PointsToWholeBigPoints\!!widtha \width
+% % \PointsToWholeBigPoints\!!heightb\height
+% % but since pdf/x does not round when checking if
+% % the boxes fit inside the media box ...
% \PointsToBigPoints{#2}\left
% \PointsToBigPoints\!!heighta\bottom
% \PointsToBigPoints\!!widtha \width
% \PointsToBigPoints\!!heightb\height
- \xdef\currentPDFcropbox
- {/CropBox [\left\space\bottom\space\width\space\height]}%
+% \xdef\currentPDFcropboxspec
+% {[\left\space\bottom\space\width\space\height]}%
+% \global\let\currentPDFtrimboxspec\currentPDFcropboxspec
\xdef\currentPDFpagemode
{/PageMode \ifcase#6 /UseNone\or/FullScreen\or/UseOutlines\else/UseNone\fi}%
- \xdef\currentPDFviewerprefs
- {\ifcase#6\or\or\or /ViewerPreferences << /FitWindow true >>\fi}%
+ \xdef\currentPDFviewerprefs % space after #6 needed, else \relax
+ {\ifcase#6 \or\or\or /ViewerPreferences << /FitWindow true >>\fi}%
\egroup}
-\global\let\currentPDFcropbox \empty % page attributes
-\global\let\currentPDFpagemode \empty % document catalog
-\global\let\currentPDFviewerprefs\empty % document catalog
-
\appendtoksonce % hack to prevent duplicates
- \ifcase\realfolio\or
+ \ifcase\realfolio \or % only at page one
\doPDFaddtocatalog{\currentPDFpagemode\currentPDFviewerprefs}%
+ \doPDFaddtoinfo{/Trapped /False}%
\fi
\to \everyshipout
+\def\doPDFsetupwhateverbox#1#2#3#4#5#6% watch the extra arguments
+ {\bgroup
+ \!!widtha#5%
+ \advance\!!widtha#3%
+ \!!heighta-#6%
+ \!!heightb#2% extra argument
+ \advance\!!heightb -#4%
+ \advance\!!heighta \!!heightb
+ % sometimes whole values give better results
+ % \PointsToWholeBigPoints{#3}\left
+ % \PointsToWholeBigPoints\!!heighta\bottom
+ % \PointsToWholeBigPoints\!!widtha \width
+ % \PointsToWholeBigPoints\!!heightb\height
+ % but since pdf/x does not round when checking if
+ % the boxes fit inside the media box ...
+ \PointsToBigPoints{#3}\left
+ \PointsToBigPoints\!!heighta\bottom
+ \PointsToBigPoints\!!widtha \width
+ \PointsToBigPoints\!!heightb\height
+ \xdef#1{[\left\space\bottom\space\width\space\height]}%
+ \egroup}
+
+\def\doPDFsetupartbox {\doPDFsetupwhateverbox\currentPDFartbox }
+\def\doPDFsetupcropbox {\doPDFsetupwhateverbox\currentPDFcropbox }
+\def\doPDFsetupbleedbox{\doPDFsetupwhateverbox\currentPDFbleedbox}
+\def\doPDFsetuptrimbox {\doPDFsetupwhateverbox\currentPDFtrimbox }
+
+\gdef\currentPDFtrimbox{\currentPDFcropbox} % default, needed for pdf/x
+
+\def\flushPDFwhateverbox#1#2%
+ {\doifsomething{#1}{\doPDFpageattribute{/#2Box #1}}}
+
\appendtoksonce
- \doPDFpageattribute{\currentPDFcropbox}%
+ \flushPDFwhateverbox\currentPDFartbox {Art}%
+ \flushPDFwhateverbox\currentPDFcropbox {Crop}%
+ \flushPDFwhateverbox\currentPDFbleedbox{Bleed}%
+ \flushPDFwhateverbox\currentPDFtrimbox {Trim}%
\to \everyshipout
+\def\doPDFsetupidentity#1#2#3#4#5#6%
+ {\bgroup
+ \enablePDFdocencoding
+ \expanded{\doPDFaddtoinfo
+ {/Title (#1)
+ /Subject (#2)
+ /Author (#3)
+ /Creator (#4)
+ /ModDate (#5)
+ /ID (\jobname.#5) % needed for pdf/x
+ /Keywords (#6)}}%
+ \egroup}
+
%D \macros
%D {doPDFsetupopenaction,doPDFsetupcloseaction,
%D doPDFsetupopenpageaction,doPDFsetupclosepageaction}
@@ -333,10 +414,10 @@
%D update of Acrobat Viewers, upward compatibility was
%D just a dream.
-\def\doPDFsetupopenaction%
+\def\doPDFsetupopenaction
{\doPDFaddtocatalog{/OpenAction <<\lastPDFaction>>}}
-\def\doPDFsetupcloseaction%
+\def\doPDFsetupcloseaction
{\doPDFaddtocatalog{/CloseAction <<\lastPDFaction>>}}
%D So, starting with version~5 viewers, when the open actions
@@ -359,7 +440,7 @@
\def\doPDFsetupopenpageaction%
{\global\let\PDFopenpageaction\lastPDFaction}
-\def\doPDFsetupclosepageaction%
+\def\doPDFsetupclosepageaction
{\global\let\PDFclosepageaction\lastPDFaction}
\def\checkPDFpageactions
@@ -413,7 +494,7 @@
{\bgroup
\doifelsenothing{#3}
{\setPDFdestination{#5}%
- \doifelsenothing{\PDFdestination}
+ \doifelsenothing\PDFdestination
{\let\action\empty}
{\doifelsenothing{#4}
{\let\PDFfile\empty}
@@ -429,7 +510,7 @@
\let\PDFdestination\empty}
{\setreferencefilename/#4\to\PDFfile
\setPDFdestination{#5}%
- \doifsomething{\PDFdestination}
+ \doifsomething\PDFdestination
{\edef\PDFdestination{\URLhash\PDFdestination}}}%
\edef\action%
{/S /URI /URI (#3\PDFfile\PDFdestination)}}%
@@ -450,9 +531,9 @@
\def\doPDFstartgotorealpage#1#2#3#4#5% watch the R append trick
{\bgroup
\doifelsenothing{#3}
- {\scratchcounter=0#5\relax
+ {\scratchcounter0#5\relax
\ifnum\scratchcounter>0
- \advance\scratchcounter -1 % pdf starts numbering at zero
+ \advance\scratchcounter \minusone % pdf starts numbering at zero
\doifelsenothing{#4}
{\let\PDFfile\empty}
{\doifparentfileelse{#4}
@@ -491,7 +572,7 @@
\def\fakePDFpagedestination % as in pdf, we start numbering at zero
{\iflocation \ifovercomePDFpage \ifarrangingpages \else
\bgroup
- \advance\realpageno -1 % is \expanded needed ?
+ \advance\realpageno \minusone % is \expanded needed ?
\expanded{\doPDFdestination name {page:\realfolio}}%
\egroup
\fi \fi \fi}
@@ -540,16 +621,24 @@
\def\PDFformcode#1%
{\doFDFiffieldset{#1}{/Field [\doFDFgetfieldset{#1}]}}
+% bit 3 = html
+% bit 6 = xml
+% bit 4 = get
+
+\chardef\PDFformmethod=1 % 0=GET 1=POST
+
+\def\PDFformflag#1#2{\ifcase\PDFformmethod#1\else#2\fi}
+
\def\PDFexecuteimportform {/Named /N /AcroForm:ImportFDF}
\def\PDFexecuteexportform {/Named /N /AcroForm:ExportFDF}
\def\PDFexecuteresetform {/ResetForm \PDFformcode\argumentA}
\def\PDFexecutesubmitform {/SubmitForm \PDFformcode\argumentB
/Flags \ifcase\submitoutputformat\space
- 4 % 0=unknown
- \or 4 % 1=HTML
- \or 0 % 2=FDF % was 12 ? ? ?
- \or 32 % 3=XML
- \else 4 % ?=unknown
+ \PDFformflag{12} {4} % 0=unknown
+ \or \PDFformflag{12} {4} % 1=HTML
+ \or \PDFformflag {8} {0} % 2=FDF
+ \or \PDFformflag{40}{32} % 3=XML
+ \else \PDFformflag{12} {4} % ?=unknown
\fi
/F (\argumentA)}
@@ -631,7 +720,7 @@
\def\doPDFstartgotoprofile#1#2#3% to be done: file
{\bgroup
\setPDFdestination{#3}%
- \doifsomething{\PDFdestination}
+ \doifsomething\PDFdestination
{\edef\action%
{/S /Thread /D (\PDFdestination)}%
\ifsecondaryreference
@@ -755,9 +844,10 @@
\def\doPDFinsertbookmark#1#2#3#4#5% level sublevels text page open=1
{\bgroup
+ % todo, unicode
\sanitizePDFdocencoding#3\to\bookmarktext % uses scratchcounter
- \scratchcounter=#4%
- \advance\scratchcounter -1
+ \scratchcounter#4%
+ \advance\scratchcounter \minusone
%\sanitizePDFstring#3\to\bookmarktext
\doPDFbookmark level #1 n #2 text {\bookmarktext}
page {\the\scratchcounter} open #5
@@ -798,6 +888,7 @@
\def\FDFflagNoExport {4} % 3
\def\FDFflagPassword {8192} % 14
\def\FDFflagSort {524288} % 20
+\def\FDFflagFileSelect {1048576} % 21
%D There is a second, again bitset oriented, \type{/F} flag:
@@ -821,6 +912,7 @@
\letvalue {\@@FDFflag\v!nietbeschikbaar}=\FDFflagNoExport
\letvalue {\@@FDFflag\v!geencontrole}=\FDFflagDoNotSpellCheck
\letvalue {\@@FDFflag\v!vast}=\FDFflagDoNotScroll
+\letvalue {\@@FDFflag\v!file}=\FDFflagFileSelect
\letvalue {\@@FDFplus\v!verborgen}=\FDFplusHidden
\letvalue {\@@FDFplus\v!printbaar}=\FDFplusPrintable
@@ -853,17 +945,37 @@
%D Menu items are passed as an array of \type{(string)}'s and
%D the content of this array is build with:
-\let\FDFvalues\empty
-
-\def\setFDFvalues[#1]%
- {\let\FDFvalues\empty
+\let\FDFvalues \empty
+\let\FDFfirstvalues \empty
+\let\FDFsecondvalues\empty
+\let\FDFkidlist \empty
+\let\FDFdefaultindex\!!zerocount
+\let\FDFdefaultvalue\empty
+
+\def\setFDFvalues[#1][#2]% #1 = list (item=>value) #2 = default
+ {\let\FDFvalues \empty
+ %when radio opt works ok
+ %\let\FDFfirstvalues \empty
+ %\let\FDFsecondvalues\empty
+ %\let\FDFkidlist \empty
+ %\let\FDFdefaultindex\!!zerocount
+ %\let\FDFdefaultvalue\empty
+ %\scratchcounter\zerocount
\def\dodocommando##1=>##2=>##3\end
- {\doifelsenothing{##2}
- {\edef\FDFvalues{\FDFvalues [(##1)(##1)] }}
- {\edef\FDFvalues{\FDFvalues [(##2)(##1)] }}}% ! ##1 is shown
+ {%\addtocommalist{##1}\FDFkidlist
+ %\edef\FDFfirstvalues{\FDFfirstvalues(##1)}%
+ %\doif{##1}{#2}{\edef\FDFdefaultindex{\the\scratchcounter}}%
+ %\advance\scratchcounter\plusone
+ \doifelsenothing{##2}
+ {%\doif{##1}{#2}{\edef\FDFdefaultvalue{##1}}%
+ %\edef\FDFsecondvalues{\FDFsecondvalues(##1)}%
+ \edef\FDFvalues{\FDFvalues [(##1)(##1)] }}
+ {%\doif{##1}{#2}{\edef\FDFdefaultvalue{##2}}%
+ %\edef\FDFsecondvalues{\FDFsecondvalues(##2)}%
+ \edef\FDFvalues{\FDFvalues [(##2)(##1)] }}}% ! ##1 is shown
\def\docommando##1%
{\dodocommando##1=>=>\end}%
- \@EA\processcommalist\@EA[#1]\docommando}
+ \expanded{\processcommalist[#1]}\docommando}
%D This macro accepts comma separated \type{visual=>result}
%D pairs.
@@ -1053,7 +1165,7 @@
%D well as what resources they use. The next mechanism does that
%D job automatically when one registers the field.
-\def\flushFDFnames%
+\def\flushFDFnames
{\ifbuildFDFdictionary
\ifx\FDFcollection\empty\else
\ifbuildFDFencodingvector
@@ -1136,7 +1248,8 @@
\def\FDFnameCoOb {Courier-Oblique}
\def\FDFnameCoBO {Courier-BoldOblique}
-%D And a big one:
+%D And a big one: (should be run time loaded (spec-run or
+%D so)).
\def\FDFencodingvector
{/Type /Encoding
@@ -1186,7 +1299,7 @@
%D And here comes the special that deals with them.
\definespecial\dosetfieldstatus#1#2#3#4%
- {\chardef\currentFDFmode=#1%
+ {\chardef\currentFDFmode #1%
\edef\currentFDFparent {#2}%
\edef\currentFDFkids {#3}%
\edef\currentFDFroot {#4}}
@@ -1226,7 +1339,7 @@
%D {setFDFkids}
%D
%D Clones as well as radiofields (which themselves can have
-%D cloned components) need a list fo kids. The next macro
+%D cloned components) need a list of kids. The next macro
%D builds one.
\def\setFDFkids[#1][#2]% tag commalist
@@ -1252,13 +1365,13 @@
\setFDFattributes[#6]%
\setFDFalignment[#8]%
\setFDFactions[#9]%
-\expanded{\escapePSstring#4}\to\FDFtext
+ \expanded{\escapePSstring#4}\to\FDFtext
\ifcase\currentFDFmode
\doPDFannotationobject class FDF name #1 width #2 height #3 data
{/Subtype /Widget /T (#1) /FT /Tx
/MaxLen \ifcase0#5 1000 \else#5 \fi
-% /DV (#4) /V (#4) % value added
-/DV (\FDFtext) /V (\FDFtext) % value added
+ %/DV (#4) /V (#4) % value added
+ /DV (\FDFtext) /V (\FDFtext) % value added
/Ff \FDFflag\space
/F \FDFplus\space
/DA (\FDFattributes)
@@ -1272,8 +1385,8 @@
{/T (#1) /FT /Tx
/MaxLen \ifcase0#5 1000 \else#5 \fi
/Kids [\FDFkids]
-% /DV (#4) /V (#4) % value added
-/DV (\FDFtext) /V (\FDFtext) % value added
+ %/DV (#4) /V (#4) % value added
+ /DV (\FDFtext) /V (\FDFtext) % value added
/Ff \FDFflag\space
/F \FDFplus\space
/DA (\FDFattributes)
@@ -1282,7 +1395,7 @@
\FDFactions}%
\registerFDFobject{#1}%
\or
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
@@ -1294,12 +1407,13 @@
/Q \FDFalign\space
\FDFactions}%
\or
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
/Parent \PDFobjectreference
- /F \FDFplus}%
+ /F \FDFplus
+ \FDFactions}%
\fi
\egroup}
@@ -1310,7 +1424,7 @@
{\bgroup
\setFDFswitches[#6]%
\setFDFattributes[#5]%
- \setFDFvalues[#7]%
+ \setFDFvalues[#7][#4]%
\setFDFactions[#8]%
\ifcase\currentFDFmode
\doPDFannotationobject class FDF name #1 width #2 height #3 data
@@ -1338,7 +1452,7 @@
\FDFactions}%
\registerFDFobject{#1}%
\or
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
@@ -1349,12 +1463,13 @@
\FDFsurroundings\space
\FDFactions}%
\or
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
/Parent \PDFobjectreference
- /F \FDFplus}%
+ /F \FDFplus
+ \FDFactions}%
\fi
\egroup}
@@ -1404,7 +1519,7 @@
\registerFDFobject{#1}%
\or
\doFDFappearance{On}{#6}{#8}%
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
@@ -1420,7 +1535,7 @@
\FDFactions}%
\or
\doFDFappearance{On}{#6}{#8}%
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
@@ -1431,7 +1546,8 @@
/V /\FDFdefault\space
/AS /\FDFdefault\space
\fi
- \FDFappearance}%
+ \FDFappearance
+ \FDFactions}%
\fi
\egroup}
@@ -1449,6 +1565,8 @@
\doifelsenothing{#4}
{\def\FDFdefault{Off}}
{\def\FDFdefault{#4}}%
+\@EA\aftersplitstring\FDFdefault\at=>\to\FDFdefaultvalue
+\ifx\FDFdefaultvalue\empty\else\let\FDFdefault\FDFdefaultvalue\fi
\ifcase\currentFDFmode
\doFDFappearance{#1}{#7}{1}%
\doPDFgetobjectreference{FDF}{#6}\PDFobjectreference
@@ -1472,7 +1590,7 @@
\or
%\doFDFappearance{#1}{#7}{1}%
\doFDFappearance{\currentFDFparent}{#7}{1}%
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue % nb
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
@@ -1484,27 +1602,55 @@
\or
%\doFDFappearance{#1}{#7}{1}%
\doFDFappearance{\currentFDFparent}{#7}{1}%
- \doPDFgetobjectreference{FDF}{\currentFDFparent}\PDFobjectreference
+ \doPDFgetobjectreference{FDF}\currentFDFparent\PDFobjectreference
\global\objectreferencingtrue
\doPDFannotationobject class FDF name kids:#1 width #2 height #3 data
{/Subtype /Widget
/Parent \PDFobjectreference\space
/AS /\FDFdefault\space
/F \FDFplus\space
- \FDFappearance\space}
+ \FDFappearance\space
+ \FDFactions}%
\fi
\egroup}
+%D \macros
+%D {setFDFstrings}
+%D
+%D This one creates a string array.
+
+%\def\setFDFstrings[#1]%
+% {\let\FDFstrings\empty
+% \def\docommando##1{\edef\FDFstrings{\FDFstrings(##1)}}%
+% \processcommacommand[#1]\docommando}
+
\def\doFDFpresetradiorecord#1#2#3#4#5%
{\bgroup
\setFDFswitches[Radio,NoToggleToOff,#3]%
- \setFDFkids[][#4]%
+ \setFDFkids[#4][]%
+%\setFDFvalues[#4][#2]%
+%\expanded{\setFDFkids[][\FDFkidlist]}%
\setFDFactions[#5]%
\doPDFdictionaryobject class FDF name #1 data
{/Subtype /Widget /FT /Btn /T (#1) /Rect [0 0 0 0]
- /DV (#2) % /V (#2)
+ % used to be this
+ % /V (#2)
+ % then this
+ % /DV (#2)
+ % since this bomded in 5
+ % /V (#2)
+ % and now finally this works
/H /N
- /Ff \FDFflag\space /F \FDFplus\space /Kids [\FDFkids]
+% /opt is buggy in 5.05, only works once, sigh
+%\ifx\FDFfirstvalues\FDFsecondvalues
+ /V /#2
+%\else
+% /V /\FDFdefaultindex\space
+% /Opt [\FDFsecondvalues]
+%\fi
+ /Ff \FDFflag\space
+ /F \FDFplus\space
+ /Kids [\FDFkids]
\FDFactions}%
\egroup}
@@ -1722,14 +1868,14 @@
%D sure or the order in which the name and value are given
%D (actually the reverse).
-\def\PERLloadFDFfields#1%
+\def\PERLloadFDFfields#1% will become obsolete soon
{\bgroup
\global\let\allFDFfields\empty
\ifrunFDFconverter
\executesystemcommand{fdf2tex #1}%
- \let\beginFDFobject=\relax \let\endFDFobject=\relax
- \let\beginFDFdata =\relax \let\endFDFdata =\relax
- \let\beginFDFfields=\relax \let\endFDFfields=\relax
+ \let\beginFDFobject\relax \let\endFDFobject\relax
+ \let\beginFDFdata \relax \let\endFDFdata \relax
+ \let\beginFDFfields\relax \let\endFDFfields\relax
\def\FDFfield[##1]%
{\getparameters[FDF][##1]%
\doglobal\addtocommalist\FDFname\allFDFfields
@@ -1782,11 +1928,8 @@
%D Whatever mechanism is used, the next macros can be used to
%D fetch the values.
-\def\getFDFfield#1%
- {\getvalue{FDFfield::#1}}
-
-\def\setFDFfield#1#2%
- {\setevalue{FDFfield::#1}{#2}}
+\def\getFDFfield #1{\getvalue {FDFfield::#1}}
+\def\setFDFfield#1#2{\setevalue{FDFfield::#1}{#2}}
%D Of course the fields are only present when the file is
%D loaded.
@@ -1805,7 +1948,7 @@
\egroup}
%D \macros
-%D {sanitizePDFdocencoding}
+%D {sanitizePDFencoding,sanitizePDFdocencoding}
%D
%D We already dealt with the encoding vector. Conversion from
%D \TEX\ \ASCII\ encoding to the other one, is accomplished by
@@ -1813,6 +1956,9 @@
%D This will be reimplemented using the mapping mechanism.
+\def\enablePDFdocencoding
+ {\reducetocoding[pdfdoc]\simplifycommands}
+
\long\def\sanitizePDFdocencoding#1\to#2%
{\enablePDFcrlf
\enablePDFdocencoding
@@ -1828,8 +1974,7 @@
\let^^M=\\}
\egroup
-\def\enablePDFdocencoding%
- {\reducetocoding[pdfdoc]\simplifycommands}
+\let\sanitizePDFencoding\sanitizePDFdocencoding
%D A bit out of place, but useful:
@@ -1864,13 +2009,13 @@
\doifundefinedelse{PDFcomment#6}
{\let\PDFcomment\empty}
{\def\PDFcomment{/Name \getvalue{PDFcomment#6} }}%
- \sanitizePDFdocencoding#8\to\PDFdata
+ \sanitizePDFencoding#8\to\PDFdata
\setbox\scratchbox=\vbox to #3
{\vfill
\doPDFannotation width #2 height #3 data
{/Subtype /Text
\ifcase#5 \else/Open true\fi
- /Contents (\PDFdata)
+ /Contents \ifPDFunicode <\PDFdata> \else(\PDFdata) \fi
\PDFcomment
\PDFidentifier
\PDFattributes}}%
@@ -1909,7 +2054,7 @@
{\let\PDFcomment\empty}
{\presetPDFcommentappearance{#6}}}
{\def\PDFcomment{/Name \getvalue{PDFcomment#6} }}%
- \sanitizePDFdocencoding#8\to\PDFdata
+ \sanitizePDFencoding#8\to\PDFdata
\setbox\scratchbox=\vbox to #3
{\vfill
\ifPDFpopupcomments
@@ -1938,7 +2083,7 @@
{/Subtype /Text
\ifcase#5 \else/Open true\fi
\ifdone /Popup \the\pdflastannot\space 0 R\fi
- /Contents (\PDFdata)
+ /Contents \ifPDFunicode <\PDFdata> \else(\PDFdata) \fi
\PDFcomment
\PDFidentifier
\PDFattributes}%
@@ -1948,7 +2093,7 @@
\doPDFannotation width #2 height #3 data
{/Subtype /Text
\ifcase#5 \else/Open true\fi
- /Contents (\PDFdata)
+ /Contents \ifPDFunicode <\PDFdata> \else(\PDFdata) \fi
\PDFcomment
\PDFidentifier
\PDFattributes}%
@@ -1976,7 +2121,7 @@
\def\dopresetPDFcommentappearance#1#2%
{\dopresetfieldsymbol{#1}%
\dopresetfieldsymbol{#2}%
- \setbox\scratchbox=\hbox{\symbol[#1]}%
+ \setbox\scratchbox\hbox{\symbol[#1]}%
\edef\width {\the\wd\scratchbox}%
\edef\height{\the\ht\scratchbox}%
\doPDFgetobjectreference{SYM}{#1}\FDFcommentNappearance
@@ -2022,7 +2167,7 @@
\def\doPDFovalbox#1#2#3#4#5#6#7% todo: \scratchdimen/\scatchbox
{\bgroup
- \dimen0=#4\divide\dimen0 by 2
+ \dimen0=#4\divide\dimen0 2
\doPDFovalcalc{0pt}{+\dimen0}\xmin
\doPDFovalcalc{#1}{-\dimen0}\xmax
\doPDFovalcalc{#2}{-\dimen0}\ymax
@@ -2036,10 +2181,10 @@
\doPDFovalcalc{#5}{\zeropoint}\radius
\edef\dostroke{#6}%
\edef\dofill{#7}%
- \setbox0=\hbox
+ \setbox0\hbox
{\ifnum\dostroke\dofill>0
\ifPDFstrokecolor\else\ifnum\dostroke=1
- \writestatus{\m!colors}{pdf stroke color will fail}\wait
+ \writestatus\m!colors{pdf stroke color will fail}\wait
\fi\fi
\PDFcode
{q
@@ -2077,7 +2222,7 @@
\def\doPDFstartgraymode#1%
{\PDFcode{#1 g\ifPDFstrokecolor\space#1 G\fi}}
-\def\doPDFstopgraymode%
+\def\doPDFstopgraymode
{\PDFcode{0 g\ifPDFstrokecolor\space0 G\fi}}
\def\doPDFstartrgbcolormode#1#2#3%
@@ -2089,9 +2234,37 @@
\def\doPDFstartgraycolormode#1%
{\PDFcode{#1 g\ifPDFstrokecolor\space#1 G\fi}}
-\def\doPDFstopcolormode%
+\def\doPDFstartspotcolormode#1#2%
+ {\PDFcode{/#1 CS #2 SC /#1 cs #2 sc}}
+
+\def\doPDFstopcolormode
{\PDFcode{0 g\ifPDFstrokecolor\space0 G\fi}}
+%D We need to register the spot colors and their fallbacks.
+
+% we cannot use /DeviceN since GS <=7.21 breaks on it
+% and Jaws does not handle it at all {[/DeviceN [/All|/None]
+% /Device#2 \the\pdflastobj\space0 R]} so we use separation
+% colors that work and print ok
+
+\def\doPDFregistersomespotcolor#1#2#3#4%
+ {\writestatus\m!systems{missing spot color definition}\wait}
+
+\def\doPDFregisterrgbspotcolor#1#2#3#4%
+ {\doPDFregistersomespotcolor
+ {#1}{RGB}{[0.0 1.0 0.0 1.0 0.0 1.0]}%
+ {{dup #2 mul exch dup #3 mul exch #4 mul}}}
+
+\def\doPDFregistercmykspotcolor#1#2#3#4#5%
+ {\doPDFregistersomespotcolor
+ {#1}{CMYK}{[0.0 1.0 0.0 1.0 0.0 1.0 0.0 1.0]}%
+ {{dup #2 mul exch dup #3 mul exch dup #4 mul exch #5 mul}}}
+
+\def\doPDFregistergrayspotcolor#1#2%
+ {\doPDFregistersomespotcolor
+ {#1}{Gray}{[0.0 1.0]}%
+ {{pop}}}
+
%D \macros
%D {doPDFstartrotation,doPDFstoprotation}
%D
@@ -2139,13 +2312,13 @@
%D When producing output for an image setter, sometimes negative
%D output is needed.
-\def\doPDFstartnegative%
+\def\doPDFstartnegative
{\ifx\initializePDFnegative\undefined\else
\initializePDFnegative
\PDFcode{/GSnegative gs}%
\fi}
-\def\doPDFstopnegative%
+\def\doPDFstopnegative
{\ifx\initializePDFnegative\undefined\else
\PDFcode{/GSpositive gs}%
\fi}
@@ -2165,10 +2338,10 @@
\def\dodoPDFstarttransparency#1#2%
{\presetPDFtransparency{#1}{#2}%
- \PDFcode{\PDFtransparencyidentifier\space gs}}
+ \PDFcode{\PDFtransparencyidentifier\space gs }}
\def\dodoPDFstoptransparency
- {\PDFcode{/Tr0 gs}}
+ {\PDFcode{/Tr0 gs }}
\def\doPDFstarttransparency
{\ifPDFtransparencysupported
@@ -2195,8 +2368,8 @@
%D New trickery:
-\definespecial\dostartgraphicgroup{\pdfliteral{q}}
-\definespecial\dostopgraphicgroup {\pdfliteral{Q}}
+\definespecial\dostartgraphicgroup{\PDFcode{q}}
+\definespecial\dostopgraphicgroup {\PDFcode{Q}}
%D And that was all.
diff --git a/tex/context/base/spec-ini.tex b/tex/context/base/spec-ini.tex
index 3b07bec4b..feaaf5b8b 100644
--- a/tex/context/base/spec-ini.tex
+++ b/tex/context/base/spec-ini.tex
@@ -285,9 +285,9 @@
%D The following command can be used to show the loaded list
%D of specials.
-\def\preloadspecials%
- {\doifsomething{\preloadedspecials}
- {\showmessage{\m!specials}{1}{\preloadedspecials}}}
+\def\preloadspecials
+ {\doifsomething\preloadedspecials
+ {\showmessage\m!specials1\preloadedspecials}}
%D \macros
%D {startspecials}
@@ -309,11 +309,11 @@
\unprotect
\addtocommalist\currentspecial\preloadedspecials}
-\def\startspecials%
+\def\startspecials
{\localpushmacro\currentspecial
\dodoubleempty\dostartspecials}
-\def\stopspecials%
+\def\stopspecials
{\localpopmacro\currentspecial
\protect}
@@ -339,22 +339,22 @@
\let\@@allspecials=\empty
\def\doinstallspecial[#1][#2][#3]%
- {\setvalue{\@@speclst@@\string#1}{}%
+ {\letvalue{\@@speclst@@\string#1}\empty
\setvalue{\@@speccat@@\string#1}{#2}%
\setvalue{\@@specarg@@\string#1}{#3}%
\addtocommalist{\string#1}\@@allspecials
\def#1{\executespecial#1}}
-\def\installspecial%
+\def\installspecial
{\dotripleargument\doinstallspecial}
-\def\resetspecials%
+\def\resetspecials
{\the\everyresetspecials
\def\docommando##1%
{\letvalue{\@@speclst@@##1}\empty}%
\processcommacommand[\@@allspecials]\docommando
\ifx\preloadedspecials\empty \else
- \showmessage{\m!specials}{3}{\preloadedspecials}%
+ \showmessage\m!specials3\preloadedspecials
\let\preloadedspecials\empty
\fi}
@@ -373,15 +373,15 @@
\def\definespecial#1%
{\ifx#1\undefined
- \showmessage{\m!specials}{4}{\string#1}%
- \def\next%
+ \showmessage\m!specials4{\string#1}%
+ \def\next
{\def\@@illegalspecial@@}%
\else
- \def\next%
- {\doifelse{\getvalue{\@@speccat@@\string#1}}{or}
+ \def\next
+ {\doifelsevalue{\@@speccat@@\string#1}{or}
{\edef\@@newspeclst@@{\currentspecial}}
{\edef\@@newspeclst@@{\getvalue{\@@speclst@@\string#1}}%
- \addtocommalist{\currentspecial}\@@newspeclst@@}%
+ \addtocommalist\currentspecial\@@newspeclst@@}%
\setevalue{\@@speclst@@\string#1}{\@@newspeclst@@}%
\setvalue{\currentspecial\string#1}}%
\fi
@@ -394,7 +394,7 @@
%D This command is only permitted outside the definition part.
\def\dousespecials#1%
- {\doifelse{#1}{\v!reset}
+ {\doifelse{#1}\v!reset
{\resetspecials}
{\doifdefinedelse{\@@specfil@@#1}
{\edef\currentspecialfile{\getvalue{\@@specfil@@#1}}}
@@ -408,7 +408,7 @@
\def\usespecials[#1]%
{\ifnum\realpageno<2
- \doifelsenothing{\currentspecial}
+ \doifelsenothing\currentspecial
{\processcommalist[#1]\dousespecials}
{\showmessage\m!specials6\empty}%
\fi}
@@ -572,7 +572,7 @@
\def\doinstallspecial[#1][#2][#3]%
{\appendtoks\forgetspecial#1{#3}\to\everyresetspecials
- \@EA\chardef\csname\@@speclst@@\string#1\endcsname0
+ \@EA\chardef\csname\@@speclst@@\string#1\endcsname\zerocount
\forgetspecial#1{#3}}
\def\forgetspecial#1#2%
@@ -589,7 +589,7 @@
\let#1\gobbleninearguments \or
\let#1\gobbletenarguments \fi}
- \def\resetspecials%
+ \def\resetspecials
{\the\everyresetspecials
\let\preloadedspecials\empty}
@@ -637,7 +637,7 @@
%D
%D In a \type {spec-def} you can find some examples.
-\def\defineoutput%
+\def\defineoutput
{\dodoubleargument\dodefineoutput}
\def\dodefineoutput[#1][#2]%
@@ -648,7 +648,7 @@
{\processcommacommand[\getvalue{\??ui#1}]\dousespecials}
{\doifdefinedelse{\@@specfil@@#1}
{\dousespecials{#1}}
- {\showmessage{\m!specials}{7}{#1}}}}
+ {\showmessage\m!specials7{#1}}}}
\def\setupoutput[#1]%
{\ifnum\realpageno<2 % new
diff --git a/tex/context/base/spec-mis.tex b/tex/context/base/spec-mis.tex
index 65aa20116..72f76a810 100644
--- a/tex/context/base/spec-mis.tex
+++ b/tex/context/base/spec-mis.tex
@@ -127,10 +127,11 @@
\def\setsubmitoutputformat#1%
{\doifinsetelse{#1}{FDF,fdf}
- {\chardef\submitoutputformat=2}
+ {\chardef\submitoutputformat2}
{\doifinsetelse{#1}{XML,xml}
- {\chardef\submitoutputformat=3}
- {\chardef\submitoutputformat=1}}}
+ {\chardef\submitoutputformat3}
+ {\chardef\submitoutputformat1}}%
+ \relax}
%D \macros
%D {escapePSstring}
@@ -182,4 +183,12 @@
\def\par{\rawcharacter{12}}%
\expanded{\egroup\noexpand\def\noexpand#2{#1}}}
+%D \macros
+%D {ifPDFunicode}
+%D
+%D We can use this switch to signal that content streams has
+%D to be unicoded.
+
+\newif\ifPDFunicode
+
\protect \endinput
diff --git a/tex/context/base/spec-pdf.tex b/tex/context/base/spec-pdf.tex
index 49adc7d51..b59f5d25d 100644
--- a/tex/context/base/spec-pdf.tex
+++ b/tex/context/base/spec-pdf.tex
@@ -140,22 +140,14 @@
%D We can set up the page dimensions, full screen start up
%D mode and identify the file with:
-\definespecial\dosetupscreen{\doPDFsetupscreen\printpapierhoogte}
+\definespecial\dosetupscreen {\doPDFsetupscreen \printpapierhoogte}
-\definespecial\dosetupidentity#1#2#3#4#5#6%
- {\bgroup
- \enablePDFdocencoding
- \special
- {\@@insertpostscriptretain
- [ /Title (#1)
- /Subject (#2)
- /Author (#3)
- /Creator (#4)
- /ModificationDate (#5)
- /Keywords (#6)
- /DOCINFO
- pdfmark}%
- \egroup}
+\definespecial\dosetupartbox {\doPDFsetupartbox \printpapierhoogte}
+\definespecial\dosetupcropbox {\doPDFsetupcropbox \printpapierhoogte}
+\definespecial\dosetupbleedbox{\doPDFsetupbleedbox\printpapierhoogte}
+\definespecial\dosetuptrimbox {\doPDFsetuptrimbox \printpapierhoogte}
+
+\definespecial\dosetupidentity{\doPDFsetupidentity}
%D \macros
%D {dobeginofprofile,doendofprofile}
@@ -408,7 +400,8 @@
\dosetobjectreference{#1}{#2}{#1::#2}}
%D \macros
-%D {doPDFaddtocatalog,doPDFpageattribute,doPDFpagesattribute}
+%D {doPDFaddtocatalog,doPDFaddtoinfo,
+%D doPDFpageattribute,doPDFpagesattribute}
%D
%D Next come our housekeeping macros.
@@ -418,6 +411,11 @@
{\@@insertpostscriptretain
[ {Catalog} << #1 >> /PUT pdfmark}}}
+\def\doPDFaddtoinfo#1% unchecked
+ {\special
+ {\@@insertpostscriptretain
+ [ #1 /DOCINFO pdfmark}} % [ {DocInfo} << #1 >> /PUT pdfmark}}
+
\def\doPDFpageattribute#1%
{\doifsomething{#1}
{\special
diff --git a/tex/context/base/spec-tpd.tex b/tex/context/base/spec-tpd.tex
index 807c3c469..15d7638f9 100644
--- a/tex/context/base/spec-tpd.tex
+++ b/tex/context/base/spec-tpd.tex
@@ -241,12 +241,12 @@
\else
\let\filesuffix\temp
% a temporary hack
- \doif{\filesuffix}{PDF}{\pdfimageresolution=72}%
- \doif{\filesuffix}{pdf}{\pdfimageresolution=72}%
+ \doif\filesuffix{PDF}{\pdfimageresolution72}%
+ \doif\filesuffix{pdf}{\pdfimageresolution72}%
% because pdfTeX scales back
\fi}}
{\let\filesuffix\s!unknown}%
- \doiffileinsertionsupportedelse{\filesuffix}}
+ \doiffileinsertionsupportedelse\filesuffix}
\ifx\pdflastximagepages\undefined \chardef\pdflastximagepages=1 \fi
@@ -322,11 +322,11 @@
\ifnum\pdftexversion>13
-\def\checkpdfimageattributes%
+\def\checkpdfimageattributes
{\ifx\PDFfigurereference\empty
\global\let\pdfimageattributes\empty
\else
- \immediate\pdfobj%
+ \immediate\pdfobj
{[ << /Image \PDFfigurereference\space0 R
/DefaultForPrinting true >> ]}%
\xdef\pdfimageattributes%
@@ -335,8 +335,8 @@
\def\dogetTPDfiguresize#1#2#3#4#5#6#7%
{\ifmeasureTPDfiguresize
- #4=\zeropoint
- #5=\zeropoint
+ #4\zeropoint
+ #5\zeropoint
\doifvalidpdfimagefileelse{#2}
{\ifvoid\foundexternalfigure
\donetrue
@@ -349,7 +349,7 @@
\ifdone
\checkpdfimagepagenumber{#3}%
\checkpdfimageattributes
- \global\setbox\foundexternalfigure=\vbox
+ \global\setbox\foundexternalfigure\vbox
{\immediate\pdfximage \pdfimageattributes \pdfimagepagenumber{#2}%
\xdef\PDFimagereference{\the\pdflastximage}%
\xdef\nofinsertpages{\the\pdflastximagepages}%
@@ -442,6 +442,7 @@
\definespecial\dostartrgbcolormode {\doPDFstartrgbcolormode}
\definespecial\dostartcmykcolormode {\doPDFstartcmykcolormode}
\definespecial\dostartgraycolormode {\doPDFstartgraycolormode}
+\definespecial\dostartspotcolormode {\doPDFstartspotcolormode}
\definespecial\dostopcolormode {\doPDFstopcolormode}
\definespecial\dostartrotation {\doPDFstartrotation}
\definespecial\dostoprotation {\doPDFstoprotation}
@@ -452,6 +453,19 @@
\definespecial\dostartnegative {\doPDFstartnegative}
\definespecial\dostopnegative {\doPDFstopnegative}
+\definespecial\doregistercmykspotcolor {\doPDFregistercmykspotcolor}
+\definespecial\doregisterrgbspotcolor {\doPDFregisterrgbspotcolor}
+\definespecial\doregistergrayspotcolor {\doPDFregistergrayspotcolor}
+
+\def\doPDFregistersomespotcolor#1#2#3#4%
+ {\immediate \pdfobj stream attr
+ {/FunctionType 4 /Domain [0.0 1.0] /Range #3}{#4}%
+ \immediate \pdfobj
+ {[/Separation /#1 /Device#2 \the\pdflastobj\space0 R]}%
+ \dosetobjectreference{PDFCS}{#1}{\the\pdflastobj}%
+ \appendtoPDFdocumentcolorspaces
+ {/#1 \the\pdflastobj\space0 R}}
+
%D \macros
%D {dostarttransparency,dostoptransparency}
%D
@@ -476,7 +490,7 @@
\executeifdefined{\@@PDT#1:#2}{\dopresetPDFtransparency{#1}{#2}}}
\def\dopresetPDFtransparency#1#2%
- {\global\advance\PDFcurrenttransparency 1
+ {\global\advance\PDFcurrenttransparency \plusone
\immediate\pdfobj{\PDFtransparancydictionary{#1}{#2}{}}%
\edef\PDFtransparencyidentifier{/Tr\the\PDFcurrenttransparency}%
\edef\PDFtransparencyreference {\the\pdflastobj\space 0 R}%
@@ -594,7 +608,12 @@
%D \ACROBAT\ handle setting the page dimensions in a
%D different way, we do not share this special.
-\definespecial\dosetupscreen{\doPDFsetupscreen\pdfpageheight}
+\definespecial\dosetupscreen {\doPDFsetupscreen \pdfpageheight}
+
+\definespecial\dosetupartbox {\doPDFsetupartbox \pdfpageheight}
+\definespecial\dosetupcropbox {\doPDFsetupcropbox \pdfpageheight}
+\definespecial\dosetupbleedbox{\doPDFsetupbleedbox\pdfpageheight}
+\definespecial\dosetuptrimbox {\doPDFsetuptrimbox \pdfpageheight}
%D \macros
%D {dostartexecutecommand}
@@ -613,18 +632,7 @@
%D etc. For the moment \PDFTEX\ only supports the first three
%D of these.
-\definespecial\dosetupidentity#1#2#3#4#5#6%
- {\bgroup
- \enablePDFdocencoding
- \pdfinfo
- {%Producer (pdfTeX) % already there
- /Title (#1)
- /Subject (#2)
- /Author (#3)
- /Creator (#4)
- /ModificationDate (#5)
- /Keywords (#6)}%
- \egroup}
+\definespecial\dosetupidentity{\doPDFsetupidentity}
%D \macros
%D {dostartrunprogam}
@@ -710,8 +718,8 @@
\definespecial\dostartobject#1#2#3#4#5%
{\bgroup
- \setbox\nextbox=\vbox\bgroup
- \def\dodostopobject%
+ \setbox\nextbox\vbox\bgroup
+ \def\dodostopobject
{\egroup
\ifx\PDFimagereference\empty
% We also flush page resources, since shared
@@ -728,7 +736,7 @@
\global\let\PDFimagereference\empty
\fi}}
- \definespecial\dostopobject%
+ \definespecial\dostopobject
{\dodostopobject
\egroup}
@@ -751,7 +759,7 @@
\definespecial\dostartobject#1#2#3#4#5%
{\bgroup
- \setbox\nextbox=\vbox\bgroup
+ \setbox\nextbox\vbox\bgroup
\def\dodostopobject%
{\egroup
\pdfform\nextbox
@@ -1021,14 +1029,18 @@
\dosetobjectreference{#1}{#2}{\the\pdflastannot}}
%D \macros
-%D {doPDFaddtocatalog,doPDFpageattribute,doPDFpagesattribute}
+%D {doPDFaddtocatalog,doPDFaddtoinfo,
+%D doPDFpageattribute,doPDFpagesattribute}
%D
%D Next some simple ones. Watch the global directive and the
%D expansion in the page attribute macro.
-\def\doPDFaddtocatalog%
+\def\doPDFaddtocatalog
{\pdfcatalog}
+\def\doPDFaddtoinfo
+ {\pdfinfo}
+
\def\doPDFpageattribute#1%
{\expanded{\global\pdfpageattr{#1\the\pdfpageattr}}}
@@ -1038,10 +1050,10 @@
\def\doPDFpagesattribute#1%
{\expanded{\global\pdfpagesattr{#1\the\pdfpagesattr}}}
-\def\doPDFresetpageattributes%
+\def\doPDFresetpageattributes
{\global\pdfpageattr\emptytoks}
-\def\doPDFresetpageresources%
+\def\doPDFresetpageresources
{\global\pdfpageresources\emptytoks}
%D \macros
diff --git a/tex/context/base/supp-ali.tex b/tex/context/base/supp-ali.tex
index 363c239bc..30f9d25fe 100644
--- a/tex/context/base/supp-ali.tex
+++ b/tex/context/base/supp-ali.tex
@@ -21,7 +21,19 @@
\unprotect
+% \starttabulatie[|cg{.}|cg{,}|cg{,}|]
+% \NC period \NC comma \NC comma \NC\NR
+% \NG 100.000,00 \NG 100.000,00 \NG 100,00 \NC\NR
+% \NG 10.000,00 \NG 10.000,00 \NG 1000,00 \NC\NR
+% \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR
+% \NG 100,00 \NG 100,00 \NG 10,00 \NC\NR
+% \NG 10\\ \NG 10\\ \NG 0,00 \NC\NR
+% \NG 10 \NG 10 \NG 0,00 \NC\NR
+% \NG 10 \NG 10 \NG 0,00 \NC\NR
+% \stoptabulatie
+
\chardef\characteralignmentmode=4
+\chardef\characteralignmentslot=1
\let\afterassignwidth \!!zeropoint
\let\beforeassignwidth\!!zeropoint
@@ -30,30 +42,31 @@
\let\alignmentclass\s!default % can be used to handle multiple mixed ones
-\def\setfirstpasscharacteralign%
+\def\setfirstpasscharacteralign
{\popcharacteralign
\expanded{\dosetfirstpasscharacteralign{\alignmentcharacter}}}
\def\dosetfirstpasscharacteralign#1%
{\def\checkalignment##1%
{\popcharacteralign
- \setbox\scratchbox=\hbox{#1}%
+ \let\\\empty
+ \setbox\scratchbox\hbox{#1}%
\edef\characterassignwidth{\the\wd\scratchbox}%
- \setbox\scratchbox=\hbox{}%
+ \setbox\scratchbox\hbox{}%
\docheckalignment#1##1#1\relax\relax
- \scratchdimen=-\wd\scratchbox
- \setbox\scratchbox=\hbox{##1}%
- \advance\scratchdimen by \wd\scratchbox
+ \scratchdimen-\wd\scratchbox
+ \setbox\scratchbox\hbox{##1}%
+ \advance\scratchdimen \wd\scratchbox
\ifdim\scratchdimen>\beforeassignwidth\relax
\edef\beforeassignwidth{\the\scratchdimen}%
\fi
- \ifdim\scratchdimen=\!!zeropoint
- \setbox\scratchbox=\hbox{##1}%
- \scratchdimen=\wd\scratchbox
- \ifnum\characteralignmentmode=0
+ \ifdim\scratchdimen=\zeropoint
+ \setbox\scratchbox\hbox{##1}%
+ \scratchdimen\wd\scratchbox
+ \ifcase\characteralignmentmode
% do nothing
\else\ifnum\characteralignmentmode<3
- \advance\scratchdimen by \characterassignwidth
+ \advance\scratchdimen \characterassignwidth
\ifdim\scratchdimen>\beforeassignwidth\relax
\edef\beforeassignwidth{\the\scratchdimen}%
\fi
@@ -64,9 +77,9 @@
\fi\fi
\fi
\pushcharacteralign}%
- \def\docheckalignment##1#1##2##3\relax%
+ \def\docheckalignment##1#1##2##3\relax
{\ifx##2\relax
- \setbox\scratchbox=\hbox{##1}%
+ \setbox\scratchbox\hbox{##1}%
\ifdim\wd\scratchbox>\afterassignwidth
\edef\afterassignwidth{\the\wd\scratchbox}%
\fi
@@ -74,19 +87,29 @@
\docheckalignment##2##3\relax
\fi}}
-\def\setsecondpasscharacteralign%
+\def\setsecondpasscharacteralign
{\popcharacteralign
\expanded{\dosetsecondpasscharacteralign{\alignmentcharacter}}}
\def\dosetsecondpasscharacteralign#1%
{\def\checkalignment##1%
{\popcharacteralign
- \setbox\scratchbox=\hbox{#1}%
+ \let\\\empty % beware, no grouping
+ \setbox\scratchbox\hbox{#1}%
\edef\characterassignwidth{\the\wd\scratchbox}%
- \setbox\scratchbox=\hbox{}%
- \docheckalignment#1##1#1\relax\relax
- \scratchdimen=\wd\scratchbox
- \setbox\scratchbox=\hbox{##1}%
+ \setbox\scratchbox\hbox{}%
+ % new 12,34 vs 10\\ where 10 aligns on 12 if #1 = ,
+ \ifcase\characteralignmentslot
+ \docheckalignment#1##1#1\relax\relax
+ \scratchdimen\wd\scratchbox
+ \setbox\scratchbox\hbox{##1\unskip}%
+ \else
+ \def\\{#1}%
+ \expanded{\docheckalignment#1##1#1\relax\relax}%
+ \scratchdimen\wd\scratchbox
+ \setbox\scratchbox\hbox
+ {\def\\{\hphantom{#1}}##1}%
+ \fi
\ifdim\scratchdimen=\wd\scratchbox
\ifcase\characteralignmentmode
\noindent\box\scratchbox
@@ -111,27 +134,27 @@
{\hss\box\scratchbox\hskip-\scratchdimen}%
\hskip\afterassignwidth}%
\fi}%
- \def\docheckalignment##1#1##2##3\relax%
+ \def\docheckalignment##1#1##2##3\relax
{\ifx##2\relax
- \setbox\scratchbox=\hbox{##1}%
+ \setbox\scratchbox\hbox{##1}%
\else
\docheckalignment##2##3\relax
\fi}}
% provide a means to use multiple alignments mixed
-\def\pushcharacteralign%
+\def\pushcharacteralign
{\setxvalue{@cac@\alignmentclass}{\noexpand\do
{\afterassignwidth}{\beforeassignwidth}{\alignmentcharacter}}}
-\def\popcharacteralign%
+\def\popcharacteralign
{\def\do##1##2##3%
{\def\afterassignwidth {##1}%
\def\beforeassignwidth {##2}%
\def\alignmentcharacter{##3}}%
\getvalue{@cac@\alignmentclass}}
-\long\def\startcharacteralign#1\stopcharacteralign%
+\long\def\startcharacteralign#1\stopcharacteralign
{\bgroup
\setfirstpasscharacteralign #1%
\setsecondpasscharacteralign#1%
diff --git a/tex/context/base/supp-box.tex b/tex/context/base/supp-box.tex
index e15833b60..adc160dcc 100644
--- a/tex/context/base/supp-box.tex
+++ b/tex/context/base/supp-box.tex
@@ -54,7 +54,7 @@
\newdimen\nextdepth
%D \macros
-%D {smashbox}
+%D {smashbox, smashedbox}
%D
%D Smashing is introduced in \PLAIN\ \TEX, and stands for
%D reducing the dimensions of a box to zero. The most resolute
@@ -65,6 +65,10 @@
\ht#1\zeropoint
\dp#1\zeropoint}
+\def\smashboxed#1%
+ {\smashbox{#1}%
+ \box#1\relax}
+
%D \macros
%D {hsmashbox,vsmashbox}
%D
@@ -83,26 +87,7 @@
\newcount\registercount
-% \def\dowithregister#1%
-% {\def\dodowithregister{#1}%
-% \afterassignment\dodowithregister\registercount}
-%
-% \def\smashbox%
-% {\dowithregister
-% {\wd\registercount\zeropoint
-% \ht\registercount\zeropoint
-% \dp\registercount\zeropoint}}
-%
-% \def\hsmashbox%
-% {\dowithregister
-% {\wd\registercount\zeropoint}}
-%
-% \def\vsmashbox%
-% {\dowithregister
-% {\ht\registercount\zeropoint
-% \dp\registercount\zeropoint}}
-
-\def\smashbox%
+\def\smashbox
{\afterassignment\dosmashbox\registercount}
\def\dosmashbox
@@ -110,13 +95,20 @@
\ht\registercount\zeropoint
\dp\registercount\zeropoint}
-\def\hsmashbox%
+\def\smashedbox
+ {\afterassignment\thesmashedbox\registercount}
+
+\def\thesmashedbox
+ {\dosmashbox
+ \box\registercount}
+
+\def\hsmashbox
{\afterassignment\dohsmashbox\registercount}
\def\dohsmashbox
{\wd\registercount\zeropoint}
-\def\vsmashbox%
+\def\vsmashbox
{\afterassignment\dovsmashbox\registercount}
\def\dovsmashbox
@@ -157,6 +149,23 @@
\def\vsmashed{\dosomesmash\smashbox \normalvbox}
%D \macros
+%D {smashedhbox,smashedvbox}
+%D
+%D Also handy (all dimensions zeroed):
+%D
+%D \starttypen
+%D \smashedhbox to ... {...}
+%D \smashedvbox to ... {...}
+%D \stoptypen
+
+\def\dosmashedbox#1%
+ %{#1\bgroup\dowithnextbox{\smashbox\nextbox\box\nextbox\egroup}#1}
+ {#1\bgroup\dowithnextbox{\smashedbox\nextbox\egroup}#1}
+
+\def\smashedhbox{\dosmashedbox\hbox}
+\def\smashedvbox{\dosmashedbox\vbox}
+
+%D \macros
%D {smash}
%D
%D This smash alternative takes an optional arg [whdtb] as
@@ -176,7 +185,7 @@
\def\dodosmash[#1]%
{\edef\@@smash{#1}\futurelet\nexttoken\dododosmash}
-\def\dododosmash%
+\def\dododosmash
{\ifmmode
\def\next##1{\mathpalette\mathsm@sh{##1}}%
\else\ifx\nexttoken\bgroup
@@ -190,13 +199,13 @@
{\finsm@sh{$\m@th#1{#2}$}}
\def\makesm@sh#1% redefined plain macro (handles t b h d w)
- {\if#1w\wd\nextbox\z@\else
- \if#1h\ht\nextbox\z@\else
- \if#1d\dp\nextbox\z@\else
- \if#1t\ht\nextbox\z@\else
- \if#1b\dp\nextbox\z@\fi\fi\fi\fi\fi}
+ {\if#1w\nextboxwd\zeropoint\else
+ \if#1h\nextboxht\zeropoint\else
+ \if#1d\nextboxdp\zeropoint\else
+ \if#1t\nextboxht\zeropoint\else
+ \if#1b\nextboxdp\zeropoint\fi\fi\fi\fi\fi}
-\def\finsm@sh% redefined plain macro
+\def\finsm@sh % redefined plain macro
{\dowithnextbox
{\@EA\handletokens\@@smash\with\makesm@sh\box\nextbox}\normalhbox}
@@ -277,9 +286,85 @@
%D \getboxheight \dimen0 \of \box0
%D \getboxheight \someheight \of \box \tempbox
%D \stoptypen
+%D
+%D The implementation is rather stupid:
+%D
+%D \starttypen
+%D \def\getboxheight#1\of#2\box#3%
+%D {#1\ht#3\advance#1\dp#3\relax}
+%D \stoptypen
+%D
+%D The next alternative is slightly more clever, since
+%D it accepts \type {{12}} as well as \type {12} as box
+%D number.
-\def\getboxheight#1\of#2\box#3%
- {#1\ht#3\advance#1\dp#3\relax}
+\def\getboxheight#1\of#2\box#3%
+ {\def\next{#1\ht\registercount\advance#1\dp\registercount}%
+ \afterassignment\next\registercount=#3}
+
+%D For a long time the following three macros were part of
+%D the grid snapping core module, but it makes more sense to
+%D have them here so that users can see them.
+%D
+%D \macros
+%D {getnoflines, getrawnoflines}
+%D
+%D Het commando \type{\getnoflines} converteert een hoogte
+%D (dimensie) in een aantal regels en kent dit toe aan
+%D \type{\noflines}.
+%D
+%D \starttypen
+%D \getnoflines{dimensie}
+%D \stoptypen
+%D
+%D Er wordt gedeeld door \type{\openlineheight} en een hoogte
+%D van~0pt komt overeen met 0~regels. The raw alternative
+%D does not round.
+
+\newcount\noflines
+\newdimen\noflinesheight
+
+\def\dogetnoflines#1#2%
+ {\noflinesheight#2\relax
+ \ifdim\noflinesheight=\zeropoint
+ \noflines\zerocount
+ \else
+ \divide\noflinesheight \openlineheight
+ \noflines\noflinesheight
+ #1\ifdim\noflines\openlineheight=#2\relax \else
+ \advance\noflines \plusone
+ \fi\fi
+ \fi}
+
+\def\getnoflines {\dogetnoflines\iftrue } % compensated
+\def\getrawnoflines{\dogetnoflines\iffalse} % no compensation
+
+%D \macros
+%D {determinenoflines}
+%D
+%D The next macro determines the number of lines and
+%D returns it it \type {\noflines}. The macro works
+%D reasonable well as long as the content can be unboxed.
+%D
+%D \starttypen
+%D \determinenoflines{test\\test}
+%D \determinenoflines{\bfd test\\test}
+%D \determinenoflines{\definedfont[Sans at 40pt]test\\test}
+%D \stoptypen
+
+\def\determinenoflines
+ {\bgroup
+ \forgetall
+ \let\crlf\endgraf
+ \let\\\endgraf
+ \dowithnextbox
+ {\beginofshapebox
+ \unvbox\nextbox
+ \endofshapebox
+ \global\count1\zerocount
+ \reshapebox{\global\advance\count1\plusone}%
+ \egroup\noflines\count1 }%
+ \vbox}
%D \macros
%D {doiftextelse, doiftext}
@@ -397,7 +482,7 @@
%D we don't really need this functionality now.
%D \macros
-%D {nextboxht,nextboxwd,nextboxdp}
+%D {nextboxht,nextboxwd,nextboxdp,flushnextbox}
%D
%D The next couple of shortcuts saves us memory as well as
%D \type {{}}'s in passing parameters.
@@ -406,6 +491,8 @@
\def\nextboxwd{\wd\nextbox}
\def\nextboxdp{\dp\nextbox}
+\def\flushnextbox{\box\nextbox}
+
%D \macros
%D {dowithnextboxcontent}
%D
@@ -427,11 +514,11 @@
%D Now we can redefine \type {\dowithnextbox} as follows:
-\def\dowithnextbox%
+\def\dowithnextbox
{\dowithnextboxcontent\empty}
%D \macros
-%D {llap, rlap, tlap, blap}
+%D {llap, rlap, tlap, blap, clap}
%D
%D Some well known friends, but we implement them our own
%D way.
@@ -442,6 +529,9 @@
\def\llap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
{\normalhss\box\nextbox}\endgroup}\normalhbox}
+\def\clap{\begingroup\dowithnextbox{\normalhbox to \zeropoint
+ {\normalhss\box\nextbox\normalhss}\endgroup}\normalhbox}
+
\def\tlap{\begingroup\dowithnextbox{\normalvbox to \zeropoint
{\normalvss\box\nextbox}\endgroup}\normalvbox}
@@ -588,9 +678,9 @@
\def\reshapebox#1%
{\doreshapebox
- {#1}
- {\penalty\shapepenalty}
- {\kern \shapekern }
+ {#1}%
+ {\penalty\shapepenalty}%
+ {\kern \shapekern }%
{\vskip \shapeskip }}
\newbox\tmpshapebox
@@ -645,7 +735,7 @@
\advance\shapecounter \plusone
\fi}
-\def\beginofshapebox%
+\def\beginofshapebox
{\setbox\oldshapebox\normalvbox
\bgroup
\reshapingboxtrue
@@ -660,15 +750,15 @@
\let\beginshapebox=\beginofshapebox
\let\endshapebox =\endofshapebox
-\def\flushshapebox%
+\def\flushshapebox
{\bgroup
- \ifdim\ht\newshapebox=\zeropoint\relax
+ \ifdim\ht\newshapebox=\zeropoint
\else
% make \prevdepth legal
% \par before the next \vskip gives far worse results
\ifdim\parskip>\zeropoint\vskip\parskip\else\par\fi
% and take a look
- \ifdim\prevdepth=-1000pt
+ \ifdim\prevdepth=-\thousandpoint
\prevdepth\zeropoint
\fi
\ifdim\prevdepth<\zeropoint\relax
@@ -711,7 +801,7 @@
%
% \omlijnd[offset=0pt,hoogte=8mm,uitlijnen={rechts,laho}]{\bfa test}
-\def\innerflushshapebox%
+\def\innerflushshapebox
{\ifdim\ht\newshapebox=\zeropoint\relax \else
\unvcopy\newshapebox\relax
% \kern-\dp\newshapebox\relax
@@ -736,10 +826,10 @@
%D of \type {\normalhbox}, since it manages the height and depth of
%D the line.
-\def\shapedhbox%
+\def\shapedhbox
{\dowithnextbox
- {\ht\nextbox\zeropoint
- \dp\nextbox\zeropoint
+ {\nextboxht\zeropoint
+ \nextboxdp\zeropoint
\box\nextbox}
\normalhbox}
@@ -911,7 +1001,7 @@
%D {\widowpenalty=0
%D \clubpenalty=0
%D \scratchdimen=#1\relax
-%D \ifdim\wd\nextbox>\scratchdimen
+%D \ifdim\nextboxwd>\scratchdimen
%D \setbox\scratchbox=\normalhbox{ #2}%
%D \advance\scratchdimen by -\wd\scratchbox
%D \setbox\nextbox=\normalvbox
@@ -919,7 +1009,7 @@
%D \hfuzz\maxdimen
%D \veryraggedright
%D \strut\unhcopy\nextbox}%
-%D \ifdim\ht\nextbox>\ht\strutbox \else
+%D \ifdim\nextboxht>\ht\strutbox \else
%D \setbox\scratchbox\null % overfull and not split
%D \fi
%D \setbox\nextbox=\normalvbox % if omitted: missing brace reported
@@ -960,7 +1050,7 @@
\else
\donetrue
\fi
- \ifdim\wd\nextbox>\scratchdimen
+ \ifdim\nextboxwd>\scratchdimen
\setbox\scratchbox\normalhbox{\ifdone\space#2\else#2\space\fi}%
\advance\scratchdimen -\wd\scratchbox
\setbox0\box\nextbox
@@ -975,7 +1065,7 @@
\hskip\zeropoint \!!plus 1\!!fill % \hsize
\fi
\unhcopy0}%
- \ifdim\ht\nextbox>\ht\strutbox
+ \ifdim\nextboxht>\ht\strutbox
\setbox\nextbox\normalvbox % if omitted: missing brace reported
{\splittopskip\openstrutheight
\ifdone
@@ -983,7 +1073,7 @@
\else
\doloop
{\setbox0\vsplit\nextbox to \ht\strutbox
- \ifdim\ht\nextbox>\ht\strutbox \else \exitloop \fi}%
+ \ifdim\nextboxht>\ht\strutbox \else \exitloop \fi}%
\fi
\unvbox\nextbox
\setbox\nextbox\lastbox
@@ -1036,9 +1126,9 @@
{\beforesplitstring#2\at,\to\leftlimit
\aftersplitstring #2\at,\to\rightlimit
\ifx\rightlimit\empty
- \normallimitatetext{#1}{\leftlimit}{#3}%
+ \normallimitatetext {#1}\leftlimit {#3}%
\else
- \speciallimitatetext{#1}{\leftlimit}{\rightlimit}{#3}%
+ \speciallimitatetext{#1}\leftlimit\rightlimit{#3}%
\fi}
%D \macros
@@ -1130,7 +1220,7 @@
\newif\ifisolatedwords
-\def\betweenisolatedwords%
+\def\betweenisolatedwords
{\hskip\currentspaceskip}
%D In order to prevent problems with nested isolated words, we
@@ -1230,21 +1320,25 @@
%D and footers and|/|or margin material.
\def\sbox% in handleiding, voorbeeld \inlinker{xx} \extern..
- {\dowithnextbox
+ {\normalvbox\bgroup % new ! ! !
+ \dowithnextbox
{\setbox\scratchbox\normalhbox
{\strut
- \dp\nextbox\zeropoint
+ \nextboxdp\zeropoint
\lower\strutdepth\box\nextbox}%
\dp\scratchbox\strutdepth
\ht\scratchbox\strutheight
- \box\scratchbox}%
+ \box\scratchbox
+ \egroup}%
\normalvbox}
\def\struttedbox
- {\dowithnextbox
- {\dp\nextbox\strutdepth
- \ht\nextbox\strutheight
- \box\nextbox}%
+ {\normalhbox\bgroup % new ! ! !
+ \dowithnextbox
+ {\nextboxdp\strutdepth
+ \nextboxht\strutheight
+ \box\nextbox
+ \egroup}%
\normalhbox}
%D \macros
@@ -1337,8 +1431,8 @@
\def\centerednextbox#1#%
{\bgroup
\dowithnextbox
- {\hsize\wd\nextbox
- \vsize\ht\nextbox
+ {\hsize\nextboxwd
+ \vsize\nextboxht
\centeredbox#1{\box\nextbox}%
\egroup}
\normalhbox}
@@ -1419,14 +1513,14 @@
\scratchdimen\noflines\lineheight
\setbox\scratchbox\normalhbox to \savedrigidhsize
{\dorecurse\rigidcolumns
- {\setbox\scratchbox=\vsplit\rigidcolumnbox to \scratchdimen
- \dp\scratchbox=\openstrutdepth
- \setbox\scratchbox=\normalvtop
+ {\setbox\scratchbox\vsplit\rigidcolumnbox to \scratchdimen
+ \dp\scratchbox\openstrutdepth
+ \setbox\scratchbox\normalvtop
\ifalignrigidcolumns to
\ifstretchrigidcolumns\vsize\else\scratchdimen\fi
\fi
{\unvbox\scratchbox}%
- \wd\scratchbox=\hsize
+ \wd\scratchbox\hsize
\box\scratchbox
\hfill}%
\hfillneg}%
@@ -1461,26 +1555,26 @@
%D These macros are used in reformatting footnotes, so they do
%D what they're meant for.
-\def\setvboxtohbox%
+\def\setvboxtohbox
{\bgroup
\ifdim\baselineskip<16pt \relax
- \dimen0=\baselineskip
- \multiply\dimen0 by 1024
+ \dimen0\baselineskip
+ \multiply\dimen0 1024
\else
\message{cropping \baselineskip to 16pt}%
- \dimen0=\maxdimen
+ \dimen0\maxdimen
\fi
- \divide\dimen0 by \hsize
- \multiply\dimen0 by 64
+ \divide\dimen0 \hsize
+ \multiply\dimen0 64
\xdef\normalvboxtohboxfactor{\expandafter\withoutpt\the\dimen0}%
\egroup}
-\def\startvboxtohbox%
+\def\startvboxtohbox
{\bgroup
\setvboxtohbox
- \setbox0=\normalhbox\bgroup}
+ \setbox0\normalhbox\bgroup}
-\def\stopvboxtohbox%
+\def\stopvboxtohbox
{\egroup
\dp0=\zeropoint
\ht0=\normalvboxtohboxfactor\wd0
@@ -1517,22 +1611,21 @@
\def\convertvboxtohbox%
{\setvboxtohbox
\makehboxofhboxes
- \setbox0=\normalhbox{\unhbox0 \removehboxes}%
+ \setbox0\normalhbox{\unhbox0 \removehboxes}%
\noindent\unhbox0\par}
\def\makehboxofhboxes%
- {\setbox0=\normalhbox{}%
+ {\setbox0\normalhbox{}%
\loop % \doloop { .. \exitloop .. }
- \setbox2=\lastbox
+ \setbox2\lastbox
\ifhbox2
- \setbox0=\normalhbox{\box2\unhbox0}%
+ \setbox0\normalhbox{\box2\unhbox0}%
\repeat}
\def\removehboxes%
- {\setbox0=\lastbox
+ {\setbox0\lastbox
\ifhbox0
- {\removehboxes}%
- \unhbox0
+ {\removehboxes}\unhbox0
\fi}
%D \macros
@@ -1548,23 +1641,23 @@
\def\unhhbox#1\with#2%
{\bgroup
- \widowpenalty=0
- \clubpenalty=0
+ \widowpenalty\zerocount
+ \clubpenalty\zerocount
\mindermeldingen
\forgetall
- \setbox\unhhedbox=\normalvbox{\hskip\hhboxindent\strut\unhbox#1}% => \hsize
+ \setbox\unhhedbox\normalvbox{\hskip\hhboxindent\strut\unhbox#1}% => \hsize
\doloop
- {\setbox\hhbox=\vsplit\unhhedbox to \lineheight
+ {\setbox\hhbox\vsplit\unhhedbox to \lineheight
\ifvoid\unhhedbox
- \setbox\hhbox=\normalhbox{\strut\normalhboxofvbox\hhbox}%
+ \setbox\hhbox\normalhbox{\strut\normalhboxofvbox\hhbox}%
\fi
- \ht\hhbox=\ht\strutbox
- \dp\hhbox=\dp\strutbox
+ \ht\hhbox\ht\strutbox
+ \dp\hhbox\dp\strutbox
\ifdim\hhboxindent=\zeropoint\else
- \setbox\hhbox=\normalhbox{\hskip-\hhboxindent\box\hhbox}%
- \hhboxindent=\zeropoint
+ \setbox\hhbox\normalhbox{\hskip-\hhboxindent\box\hhbox}%
+ \hhboxindent\zeropoint
\fi
- \global\lasthhboxwidth=\wd\hhbox
+ \global\lasthhboxwidth\wd\hhbox
#2\relax
\ifvoid\unhhedbox
\exitloop
@@ -1573,12 +1666,12 @@
\fi}%
\egroup}
-\def\dohboxofvbox%
- {\setbox0=\normalvbox{\unvbox\scratchcounter\global\setbox1=\lastbox}%
+\def\dohboxofvbox
+ {\setbox0\normalvbox{\unvbox\scratchcounter\global\setbox1\lastbox}%
\unhbox1
\egroup}
-\def\normalhboxofvbox%
+\def\normalhboxofvbox
{\bgroup
\afterassignment\dohboxofvbox
\scratchcounter=}
@@ -1626,13 +1719,13 @@
\unexpanded\def\doifcontent#1#2#3%
{\dowithnextbox
{\ifhbox\nextbox
- \ifdim\wd\nextbox>\zeropoint
+ \ifdim\nextboxwd>\zeropoint
#1\unhbox\nextbox#2\relax
\else
#3\relax
\fi
\else
- \ifdim\ht\nextbox>\zeropoint
+ \ifdim\nextboxht>\zeropoint
#1\unvbox\nextbox#2\relax
\else
#3\relax
@@ -1672,20 +1765,20 @@
\resetbox\processbox
\afterassignment\dogetprocessbox\let\next=}
-\def\endprocessboxes%
+\def\endprocessboxes
{\ifhmode\unskip\fi
\box\processbox
\next
\egroup}
-\def\dogetprocessbox%
+\def\dogetprocessbox
{\ifx\next\bgroup
\expandafter\dodogetprocessbox
\else
\expandafter\endprocessboxes
\fi}
-\def\dodogetprocessbox%
+\def\dodogetprocessbox
{\dowithnextbox
{\ifhmode\unskip\fi\doprocessbox % takes \nextbox makes \processbox
\afterassignment\dogetprocessbox\let\next=}
@@ -1712,15 +1805,15 @@
% \def\dooverlaybox%
% {\ifhmode\unskip\fi
-% \ifdim\ht\nextbox>\ht\processbox
-% \setbox\processbox=\normalvbox to \ht\nextbox
+% \ifdim\nextboxht>\ht\processbox
+% \setbox\processbox=\normalvbox to \nextboxht
% {\vss\box\processbox\vss}%
% \else
% \setbox\nextbox=\normalvbox to \ht\processbox
% {\vss\box\nextbox\vss}%
% \fi
% \scratchdimen=\wd
-% \ifdim\wd\nextbox>\wd\processbox
+% \ifdim\nextboxwd>\wd\processbox
% \nextbox
% \else
% \processbox
@@ -1735,30 +1828,30 @@
% \let\stopoverlay\egroup
% \processboxes\dooverlaybox}
-\def\dooverlaybox%
+\def\dooverlaybox
{\ifhmode\unskip\fi
- \scratchdimen=\dp
- \ifdim\dp\nextbox>\dp\processbox
+ \scratchdimen\dp
+ \ifdim\nextboxdp>\dp\processbox
\nextbox
\else
\processbox
\fi
- \ifdim\ht\nextbox>\ht\processbox
- \setbox\processbox=\normalvbox to \ht\nextbox
- {\dp\processbox=\zeropoint\vss\box\processbox\vss}%
+ \ifdim\nextboxht>\ht\processbox
+ \setbox\processbox\normalvbox to \nextboxht
+ {\dp\processbox\zeropoint\vss\box\processbox\vss}%
\else
- \setbox\nextbox=\normalvbox to \ht\processbox
- {\dp\nextbox=\zeropoint\vss\box\nextbox\vss}%
+ \setbox\nextbox\normalvbox to \ht\processbox
+ {\nextboxdp\zeropoint\vss\box\nextbox\vss}%
\fi
- \dp\nextbox=\scratchdimen
- \dp\processbox=\scratchdimen
- \scratchdimen=\wd
- \ifdim\wd\nextbox>\wd\processbox
+ \nextboxdp\scratchdimen
+ \dp\processbox\scratchdimen
+ \scratchdimen\wd
+ \ifdim\nextboxwd>\wd\processbox
\nextbox
\else
\processbox
\fi
- \setbox\processbox=\normalhbox to \scratchdimen
+ \setbox\processbox\normalhbox to \scratchdimen
{\normalhbox to \scratchdimen{\hss\box\processbox\hss}%
\hskip-\scratchdimen
\normalhbox to \scratchdimen{\hss\box\nextbox\hss}}}
@@ -1810,15 +1903,15 @@
%D returns an empty box with the dimensions of the box
%D specified, here being zero.
-\def\dofakebox%
- {\setbox\scratchbox=\null
- \wd\scratchbox=\wd\scratchcounter
- \ht\scratchbox=\ht\scratchcounter
- \dp\scratchbox=\dp\scratchcounter
+\def\dofakebox
+ {\setbox\scratchbox\null
+ \wd\scratchbox\wd\scratchcounter
+ \ht\scratchbox\ht\scratchcounter
+ \dp\scratchbox\dp\scratchcounter
\ifhbox\scratchcounter\normalhbox\else\normalvbox\fi{\box\scratchbox}%
\egroup}
-\def\fakebox%
+\def\fakebox
{\bgroup
\afterassignment\dofakebox\scratchcounter}
@@ -1848,7 +1941,7 @@
\forgetall#1\let\next=}
%D The alternatives \type {\tbox} and \type {\bbox} can be used
-%D to properly allign boxes, like in:
+%D to properly align boxes, like in:
%D
%D \startbuffer
%D \starttabel[|||]
@@ -1872,15 +1965,15 @@
\def\tbbox#1#2%
{\normalhbox\bgroup
\dowithnextbox
- {\scratchdimen=\ht\nextbox
- \advance\scratchdimen\dp\nextbox
+ {\scratchdimen\nextboxht
+ \advance\scratchdimen\nextboxdp
\advance\scratchdimen-#1\strutbox
- #1\nextbox=#1\strutbox
- #2\nextbox=\scratchdimen
- \setbox\nextbox=\normalhbox
- {\lower\dp\nextbox\box\nextbox}%
- #1\nextbox=#1\strutbox
- #2\nextbox=\scratchdimen
+ #1\nextbox#1\strutbox
+ #2\nextbox\scratchdimen
+ \setbox\nextbox\normalhbox
+ {\lower\nextboxdp\box\nextbox}%
+ #1\nextbox#1\strutbox
+ #2\nextbox\scratchdimen
\box\nextbox
\egroup}
\normalhbox}
@@ -1918,10 +2011,10 @@
{\bgroup
\sizeofbox\zeropoint
\scratchdimen\zeropoint
- \def\docommando%
+ \def\docommando
{\advance\sizeofbox\scratchdimen
\futurelet\next\dodocommando}%
- \def\dodocommando%
+ \def\dodocommando
{\ifx\next\bgroup
\expanded{\egroup#1 to \the\sizeofbox}%
\else
@@ -1939,25 +2032,25 @@
\def\limitatelines#1#2% size sentinel
{\dowithnextbox
{\dimen0=#1\hsize
- \ifdim\wd\nextbox>\dimen0
- \setbox\nextbox=\normalhbox
- {\advance\dimen0 by -.1\hsize
+ \ifdim\nextboxwd>\dimen0
+ \setbox\nextbox\normalhbox
+ {\advance\dimen0 -.1\hsize
\limitatetext{\unhbox\nextbox}{\dimen0}{\nobreak#2}}%
\fi
\unhbox\nextbox}
\normalhbox}
-\def\fittoptobaselinegrid% weg hier
+\def\fittoptobaselinegrid % weg hier
{\dowithnextbox
{\bgroup
\par
- \dimen0=\ht\nextbox
- \ht\nextbox=\ht\strutbox
- \dp\nextbox=\dp\strutbox
+ \dimen0\nextboxht
+ \nextboxht\ht\strutbox
+ \nextboxdp\dp\strutbox
\normalhbox{\box\nextbox}
\prevdepth\dp\strutbox
\doloop
- {\advance\dimen0 by -\lineheight
+ {\advance\dimen0 -\lineheight
\ifdim\dimen0<\zeropoint
\exitloop
\else
@@ -1976,7 +2069,7 @@
\setbox\fakedboxcursor\normalhbox
{\vrule\!!width\zeropoint\!!height\zeropoint\!!depth\zeropoint}
-\def\boxcursor% overloaded in core-vis
+\def\boxcursor % overloaded in core-vis
{\iftraceboxplacement
\bgroup
\scratchdimen2pt
@@ -1987,8 +2080,7 @@
\!!height\scratchdimen
\!!depth \scratchdimen
\hss}%
- \smashbox\scratchbox
- \box\scratchbox
+ \smashedbox\scratchbox
\egroup
\else
\copy\fakedboxcursor
@@ -2217,11 +2309,11 @@
{\@EA\doglobal\@EA\increment\csname\@@stackmax#1\endcsname
\setxvalue{\@@stacktag#1:#2}{\csname\@@stackmax#1\endcsname}%
\setxvalue{\@@stacklst#1}{\getvalue{\@@stacklst#1},#2}%
- \global\setbox\csname\@@stackbox#1\endcsname=\normalvbox
+ \global\setbox\csname\@@stackbox#1\endcsname\normalvbox
{\forgetall
- \setbox\scratchbox=\normalvbox{\box\nextbox}
- \ht\scratchbox=\!!onepoint
- \dp\scratchbox=\zeropoint
+ \setbox\scratchbox\normalvbox{\box\nextbox}
+ \ht\scratchbox\!!onepoint
+ \dp\scratchbox\zeropoint
\unvbox\csname\@@stackbox#1\endcsname
\offinterlineskip
\allowbreak
@@ -2232,16 +2324,16 @@
{\normalvbox
{\doifdefined{\@@stackbox#1}
{\doifdefined{\@@stacktag#1:#2}
- {\setbox\scratchbox=\normalvbox
+ {\setbox\scratchbox\normalvbox
{\splittopskip\zeropoint
- \setbox0=\copy\csname\@@stackbox#1\endcsname
- \dimen0=\getvalue{\@@stacktag#1:#2}pt
- \advance\dimen0 by -\!!onepoint
- \setbox2=\vsplit0 to \dimen0
+ \setbox0\copy\csname\@@stackbox#1\endcsname
+ \dimen0=\getvalue{\@@stacktag#1:#2}\s!pt
+ \advance\dimen0 -\!!onepoint
+ \setbox2\vsplit0 to \dimen0
\ifdim\ht0>\!!onepoint
- \setbox0=\vsplit0 to \!!onepoint
+ \setbox0\vsplit0 to \!!onepoint
\fi
- \unvbox0\setbox0=\lastbox\unvbox0}%
+ \unvbox0\setbox0\lastbox\unvbox0}%
\unvbox\scratchbox}}}}
\def\doifboxelse#1#2%
@@ -2293,10 +2385,10 @@
%D \type {\obeydepth} makes sure we have depth. Both macros
%D leave the \type {\prevdepth} untouched.
-\def\removedepth%
+\def\removedepth
{\ifvmode \ifdim\prevdepth>\zeropoint \kern-\prevdepth \fi \fi}
-\def\obeydepth%
+\def\obeydepth
{\par \removedepth \ifvmode \kern\dp\strutbox \fi}
%D \macros
@@ -2304,10 +2396,10 @@
%D
%D A funny (but rather stupid) one, plus a redefinition.
-\def\removebottomthings%
- {\dorecurse{5}{\unskip\unkern\unpenalty}}
+\def\removebottomthings
+ {\dorecurse5{\unskip\unkern\unpenalty}}
-\def\removelastskip% \ifvmode the plain tex one \fi
+\def\removelastskip % \ifvmode the plain tex one \fi
{\ifvmode\ifdim\lastskip=\z@\else\vskip-\lastskip\fi\fi}
%D \macros
@@ -2338,11 +2430,11 @@
%D \stoptypen
\def\doraiselowerbox#1#2% a nice trick us used to accept
- {\def\next% % both direct and {} dimensions
+ {\def\next % both direct and {} dimensions
{\dowithnextbox
- {\setbox\nextbox=\normalhbox{#1\scratchdimen\box\nextbox}%
- \ht\nextbox=\ht\strutbox
- \dp\nextbox=\dp\strutbox
+ {\setbox\nextbox\normalhbox{#1\scratchdimen\box\nextbox}%
+ \nextboxht\ht\strutbox
+ \nextboxdp\dp\strutbox
\box\nextbox}}%
\afterassignment\next\scratchdimen=#2}
@@ -2411,15 +2503,15 @@
% \egroup}%
% \next}
%
-% \def\normbox%
+% \def\normbox
% {\dodoubleempty\donormbox}
% vcenter in text, we kunnen vcenter overloaden
-\def\halfwaybox%
+\def\halfwaybox
{\dowithnextbox
- {\dp\nextbox\zeropoint
- \setbox\nextbox=\normalhbox{\lower.5\ht\nextbox\box\nextbox}%
+ {\nextboxdp\zeropoint
+ \setbox\nextbox\normalhbox{\lower.5\nextboxht\box\nextbox}%
\box\nextbox}
\normalhbox}
@@ -2456,11 +2548,19 @@
\let\verynormalvcenter \vcenter % since \vcenter can be visualized
-\def\vcenter%
+\def\vcenter
{\normalvbox\bgroup
\dowithnextbox{\normalhbox{$\verynormalvcenter{\box\nextbox}$}\egroup}
\normalvbox}
\prependtoks \let\vcenter\normalvcenter \to \everymath
+%D \macros
+%D {frozenhbox}
+%D
+%D A not so well unhboxable bxo can be made with:
+
+\def\frozenhbox
+ {\hbox\bgroup\dowithnextbox{\hbox{\hbox{\box\nextbox}}\egroup}\hbox}
+
\protect \endinput
diff --git a/tex/context/base/supp-fil.tex b/tex/context/base/supp-fil.tex
index 3e471d651..da5afe5f4 100644
--- a/tex/context/base/supp-fil.tex
+++ b/tex/context/base/supp-fil.tex
@@ -93,6 +93,13 @@
\def\unlinkfile#1%
{\immediate\openout\scratchwrite=#1\immediate\closeout\scratchwrite}
+%D \macros
+%D {writeln}
+%D
+%D This saves a few tokens:
+
+\def\writeln#1{\write#1{}}
+
%D \macros
%D {doprocessfile,fileline,fileprocessedtrue,dofinishfile}
%D
@@ -114,14 +121,14 @@
\let\fileline\empty
\def\doprocessfile#1#2#3%
- {\openin#1=#2\relax
+ {\immediate\openin#1=#2\relax
\ifeof#1%
\fileprocessedfalse
- \closein#1\relax
+ \immediate\closein#1\relax
\else
\fileprocessedtrue
\gdef\dofinishfile%
- {\closein#1\relax
+ {\immediate\closein#1\relax
\global\let\doprocessline\relax}%
\gdef\doprocessline%
{\ifeof#1%
@@ -301,7 +308,7 @@
\doreadfile{\pathplusfile{\f!currentpath}{#1}}}
\def\readlocfile#1% current path, backtracking
- {\let\readlevel=\maxreadlevel
+ {\let\readlevel\maxreadlevel
\doreadfile{\pathplusfile{\f!currentpath}{#1}}}
%D System files can be anywhere and therefore
@@ -309,7 +316,7 @@
%D and obeys the \TEX\ implementation.
\def\readsysfile#1% current path, obeys tex search
- {\let\readlevel=\maxreadlevel
+ {\let\readlevel\maxreadlevel
\doreadfile{#1}}
%D Of the last two, \type{\readfixfile} searches on the
@@ -317,7 +324,7 @@
%D \type{\readsetfile} does only search on the specified path.
\def\readfixfile#1#2% specified path, backtracking
- {\let\readlevel=\maxreadlevel
+ {\let\readlevel\maxreadlevel
\doreadfile{\pathplusfile{#1}{#2}}}
\def\readsetfile#1#2% specified path, no backtracking
@@ -362,25 +369,25 @@
\ifnum\readlevel>\maxreadlevel\relax
\else
\immediate\closein#1\relax
- \doopenin{#1}{\pathplusfile{\f!parentpath}{#2}}%
+ \doopenin{#1}{\pathplusfile\f!parentpath{#2}}%
\fi
\fi
\fi}
\def\openjobin#1#2%
{\newcounter\readlevel
- \doopenin{#1}{\pathplusfile{\f!currentpath}{#2}}}
+ \doopenin{#1}{\pathplusfile\f!currentpath{#2}}}
\def\opensysin#1#2%
- {\let\readlevel=\maxreadlevel
+ {\let\readlevel\maxreadlevel
\doopenin{#1}{#2}}
\def\openlocin#1#2%
- {\let\readlevel=\maxreadlevel
- \doopenin{#1}{\pathplusfile{\f!currentpath}{#2}}}
+ {\let\readlevel\maxreadlevel
+ \doopenin{#1}{\pathplusfile\f!currentpath{#2}}}
\def\openfixin#1#2#3%
- {\let\readlevel=\maxreadlevel
+ {\let\readlevel\maxreadlevel
\doopenin{#1}{\pathplusfile{#2}{#3}}}
%D \macros
@@ -412,7 +419,7 @@
\next}
% \def\doiflocfileelse#1%
-% {\doiffileelse{\pathplusfile{\f!currentpath}{#1}}}
+% {\doiffileelse{\pathplusfile\f!currentpath{#1}}}
\def\doiflocfileelse#1%
{\makelocreadfilename{#1}%
@@ -422,7 +429,7 @@
{\sanitizefilename#1\to\readfilename
\checkfilename\readfilename
\ifcase\kindoffile
- \edef\locreadfilename{\pathplusfile{\f!currentpath}{#1}}%
+ \edef\locreadfilename{\pathplusfile\f!currentpath{#1}}%
\fi}
%D \macros
@@ -449,7 +456,7 @@
{\doonlyonce{#1}{\doiffileelse{#1}{\normalinput #1\relax}{}}}
\def\doendinputonce#1%
- {\doifdefined{@@@#1@@@}{\endinput}}
+ {\doifdefined{@@@#1@@@}\endinput}
%D \macros
%D {doifparentfileelse}
@@ -469,43 +476,11 @@
\ifx\outputfilename\undefined \def\outputfilename{\jobname} \fi
-% \def\doifparentfileelse#1#2#3%
-% {\edef\!!stringa{#1}%
-% \edef\!!stringb{\jobname}%
-% \edef\!!stringc{\outputfilename}%
-% \convertcommand\!!stringa\to\!!stringa
-% \convertcommand\!!stringb\to\!!stringb
-% \convertcommand\!!stringc\to\!!stringc
-% \ifx\!!stringa\!!stringb#2\else
-% \ifx\!!stringa\!!stringc#2\else
-% #3\fi\fi}
-
\def\doifparentfileelse#1#2#3%
{\doifsamestringelse{#1}{\jobname }{#2}
{\doifsamestringelse{#1}{\jobname.\c!tex}{#2}
{\doifsamestringelse{#1}{\outputfilename}{#2}{#3}}}}
-% \newcounter\readingfilelevel
-%
-% \def\startreadingfile%
-% {\ifnum\readingfilelevel=0
-% \edef\doreadingfilecharacters%
-% {\catcode`"=\the\catcode`"\relax
-% \catcode`<=\the\catcode`<\relax
-% \catcode`>=\the\catcode`>\relax}%
-% \catcode`"=\@@letter
-% \catcode`<=\@@other
-% \catcode`>=\@@other
-% \let\stopreadingfile=\dostopreadingfile
-% \fi
-% \increment\readingfilelevel}
-%
-% \def\dostopreadingfile%
-% {\ifnum\readingfilelevel=1
-% \doreadingfilecharacters
-% \fi
-% \decrement\readingfilelevel}
-
\def\normalless {<} % geen \let !
\def\normalmore {>} % geen \let !
\def\normalequal {=} % geen \let !
@@ -513,18 +488,6 @@
\newcounter\readingfilelevel
-%\def\popfilecharacter#1#2%
-% {\ifnum\catcode`#1=\@@other \ifnum#2=\@@other \else
-% %\message{[popping catcode #1 to #2]}%
-% \catcode`#1=#2\relax
-% \fi \fi}
-%
-%\def\pushfilecharacter#1%
-% {\ifnum\catcode`#1=\@@other \else
-% %\message{[pushing catcode #1 from \the\catcode`#1]}%
-% \catcode`#1=\@@other
-% \fi}
-
\def\popfilecharacter#1#2%
{\ifnum\catcode`#1=\@@other \ifnum#2=\@@other \else
%\message{[popping catcode #1 to #2]}%
@@ -538,13 +501,14 @@
%D regards to active characters (german ", polish /,
%D french : and ;).
-\def\startreadingfile% beter een every
+\def\startreadingfile% beter een every en \setnormalcatcodes
{\doglobal\increment\readingfilelevel
\setxvalue{\string\readingfilelevel::\readingfilelevel}%
{\catcode`/ =\the\catcode`/%
+ %\catcode`_ =\the\catcode`_% math ! ! !
\catcode`" =\the\catcode`"%
-\catcode`: =\the\catcode`:%
-\catcode`; =\the\catcode`;%
+ \catcode`: =\the\catcode`:%
+ \catcode`; =\the\catcode`;%
\catcode`< =\the\catcode`<%
\catcode`> =\the\catcode`>%
\catcode`\noexpand\\=\the\catcode`\\%
@@ -552,9 +516,10 @@
\catcode`\noexpand\}=\the\catcode`\}%
\catcode`\noexpand\%=\the\catcode`\%}%
\catcode`/ =\@@other
+ %\catcode`_ =\@@other
\catcode`" =\@@other
-\catcode`: =\@@other
-\catcode`; =\@@other
+ \catcode`: =\@@other
+ \catcode`; =\@@other
\catcode`< =\@@other
\catcode`> =\@@other
\catcode`\\=\@@escape
diff --git a/tex/context/base/supp-fun.tex b/tex/context/base/supp-fun.tex
index b8c21247c..bccbdf3ce 100644
--- a/tex/context/base/supp-fun.tex
+++ b/tex/context/base/supp-fun.tex
@@ -25,7 +25,7 @@
\writestatus{loading}{Context Support Macros / Fun Stuff}
\ifx\definefont\undefined
- \def\definefont[#1][#2]{\expandafter\font\csname#1\endcsname=#2\relax}
+ \def\definedfont[#1]{\font\temp#1\relax\temp}
\fi
%D \macros
@@ -132,7 +132,7 @@
% \hskip-\parindent
% \fi
% \setbox0=\hbox
-% {\definefont[temp][#2 at #3]\temp#1{#7}\hskip#4}%
+% {\definedfont[#2 at #3]#1{#7}\hskip#4}%
% \ifdim\dp0>\dp\strutbox % one of those Q's , will be option
% \setbox2=\hbox{\raise\dp0\hbox{\lower\dp\strutbox\copy0}}%
% \ht2=\ht0 \dp0=\dp\strutbox \setbox0=\box2
@@ -160,10 +160,51 @@
\chardef\DroppedStatus=0 % 0=done 1=starting 2=doing 3=error
+% \def\DroppedCaps#1#2#3#4#5#6#7% does not yet handle accented chars
+% {\convertargument #7\to\asciia
+% \convertcommand \DroppedString\to\asciib
+% \ExpandBothAfter\doifinstringelse{\asciia}{\asciib}
+% {\ifvmode % this one is \EveryPar save, precede by \par if needed
+% \vskip#6\baselineskip
+% \penalty-200
+% \vskip-#6\baselineskip
+% \fi
+% \ifhmode
+% \hskip-\parindent
+% \fi
+% \setbox0\hbox
+% {\definedfont[#2 at #3]#1{#7}\hskip#4}%
+% \ifdim\dp0>\dp\strutbox % one of those Q's , will be option
+% \setbox2\hbox{\raise\dp0\hbox{\lower\dp\strutbox\copy0}}%
+% \ht2\ht0 \dp0\dp\strutbox \setbox0\box2
+% \fi
+% \setbox0\hbox
+% {\lower#5\box0}%
+% \ht0\ht\strutbox
+% \dp0\dp\strutbox
+% \globaldropcaps\edef\DroppedIndent{\the\wd0}%
+% \globaldropcaps\edef\DroppedLines {\number#6}%
+% \globaldropcaps\chardef\DroppedStatus2
+% \globaldropcaps\hangindent\DroppedIndent
+% \globaldropcaps\hangafter-\DroppedLines
+% \noindent
+% \hskip-\DroppedIndent
+% \vbox{\forgetall\box0}%
+% \nobreak
+% \let\next\ignorespaces} % Could be a one character word !
+% {\globaldropcaps\let\DroppedIndent\!!zeropoint
+% \globaldropcaps\edef\DroppedLines{\number\maxdimen}%
+% \globaldropcaps\chardef\DroppedStatus3
+% \def\next{#7}}%
+% \let\globaldropcaps\global
+% \next}
+
+\chardef\DropMode=0 % 1 == marginhang
+
\def\DroppedCaps#1#2#3#4#5#6#7% does not yet handle accented chars
{\convertargument #7\to\asciia
\convertcommand \DroppedString\to\asciib
- \ExpandBothAfter\doifinstringelse{\asciia}{\asciib}
+ \ExpandBothAfter\doifinstringelse\asciia\asciib
{\ifvmode % this one is \EveryPar save, precede by \par if needed
\vskip#6\baselineskip
\penalty-200
@@ -172,29 +213,40 @@
\ifhmode
\hskip-\parindent
\fi
- \setbox0=\hbox
- {\definefont[temp][#2 at #3]\temp#1{#7}\hskip#4}%
+ \setbox0\hbox
+ {\definedfont[#2 at #3]#1{#7}\hskip#4}%
\ifdim\dp0>\dp\strutbox % one of those Q's , will be option
- \setbox2=\hbox{\raise\dp0\hbox{\lower\dp\strutbox\copy0}}%
- \ht2=\ht0 \dp0=\dp\strutbox \setbox0=\box2
+ \setbox2\hbox{\raise\dp0\hbox{\lower\dp\strutbox\copy0}}%
+ \ht2\ht0
+ \dp0\dp\strutbox
+ \setbox0\box2
+ \fi
+ \setbox0\hbox
+ {\ifnum\DropMode=\plusone
+ \hskip-\wd0\wd0\zeropoint
\fi
- \setbox0=\hbox
- {\lower#5\box0}%
- \ht0=\ht\strutbox
- \dp0=\dp\strutbox
- \globaldropcaps\edef\DroppedIndent{\the\wd0}%
- \globaldropcaps\edef\DroppedLines {\number#6}%
- \globaldropcaps\chardef\DroppedStatus=2
- \globaldropcaps\hangindent\DroppedIndent
- \globaldropcaps\hangafter-\DroppedLines
- \noindent
- \hskip-\DroppedIndent
+ \lower#5\box0}%
+ \ht0\ht\strutbox
+ \dp0\dp\strutbox
+ \ifnum\DropMode=\plusone
+ \globaldropcaps\let\DroppedIndent\!!zeropoint
+ \globaldropcaps\edef\DroppedLines{\number\maxdimen}%
+ \globaldropcaps\chardef\DroppedStatus3
+ \else
+ \globaldropcaps\edef\DroppedIndent{\the\wd0}%
+ \globaldropcaps\edef\DroppedLines {\number#6}%
+ \globaldropcaps\chardef\DroppedStatus2
+ \globaldropcaps\hangindent\DroppedIndent
+ \globaldropcaps\hangafter-\DroppedLines
+ \noindent
+ \hskip-\DroppedIndent
+ \fi
\vbox{\forgetall\box0}%
\nobreak
- \let\next=\ignorespaces} % Could be a one character word !
- {\globaldropcaps\edef\DroppedIndent{0pt}%
- \globaldropcaps\edef\DroppedLines {\number\maxdimen}%
- \globaldropcaps\chardef\DroppedStatus=3
+ \let\next\ignorespaces} % Could be a one character word !
+ {\globaldropcaps\let\DroppedIndent\!!zeropoint
+ \globaldropcaps\edef\DroppedLines{\number\maxdimen}%
+ \globaldropcaps\chardef\DroppedStatus3
\def\next{#7}}%
\let\globaldropcaps\global
\next}
@@ -210,10 +262,14 @@
%D Sometimes you need to make sure that the global settings are
%D kept local, as in:
%D
+% %D \startbuffer
+% %D \defineparagraphs[SomePar][n=2,rule=on]
+% %D \setupparagraphs [SomePar][1][width=.5\textwidth]
+% %D \setupparagraphs [SomePar][2][width=.5\textwidth]
%D \startbuffer
-%D \defineparagraphs[SomePar][n=2,rule=on]
-%D \setupparagraphs [SomePar][1][width=.5\textwidth]
-%D \setupparagraphs [SomePar][2][width=.5\textwidth]
+%D \definieeralineas[SomePar][n=2,rule=on]
+%D \stelalineasin [SomePar][1][width=.5\textwidth]
+%D \stelalineasin [SomePar][2][width=.5\textwidth]
%D
%D \startSomePar
%D \localdropcaps\NiceDroppedCaps{}{cmr12}{0pt}{2}Here we need
@@ -241,18 +297,18 @@
\newcount\lastprevgraf
\newcount\droppedlines
-\def\CheckDroppedCaps%
+\def\CheckDroppedCaps
{\global\lastprevgraf\prevgraf}
-\def\AutoDroppedCaps% will be proper core stuff since it
- {\globaldropcaps\chardef\DroppedStatus=1
- \global\lastprevgraf=0
- \global\droppedlines=0
+\def\AutoDroppedCaps % will be proper core stuff since it
+ {\globaldropcaps\chardef\DroppedStatus\plusone
+ \global\lastprevgraf\zerocount
+ \global\droppedlines\zerocount
\EveryPar{\doAutoDroppedCaps}}
\let\AutoDroppedNext\relax
-\def\doAutoDroppedCaps%
+\def\doAutoDroppedCaps
{\ifcase\DroppedStatus % done
\let\next\relax
\or % starting
@@ -263,27 +319,27 @@
\def\next{\NiceDroppedCaps{}{\@@dcfont}{.125em}{\@@dcn}}%
% \fi % and hope for the best
\or % doing
- \global\advance\droppedlines by \lastprevgraf
- \ifnum\droppedlines=0
- \globaldropcaps\chardef\DroppedStatus=0
+ \global\advance\droppedlines \lastprevgraf
+ \ifnum\droppedlines=\zerocount
+ \globaldropcaps\chardef\DroppedStatus\zerocount
\let\next\relax
- \else\ifnum\droppedlines>0
+ \else\ifnum\droppedlines>\zerocount
\ifnum\droppedlines<\DroppedLines\relax
- \globaldropcaps\hangindent=\DroppedIndent
- \globaldropcaps\hangafter=-\DroppedLines
- \globaldropcaps\advance\hangafter by \droppedlines
+ \globaldropcaps\hangindent\DroppedIndent
+ \globaldropcaps\hangafter-\DroppedLines
+ \globaldropcaps\advance\hangafter \droppedlines
\hskip-\parindent
\let\next\AutoDroppedNext
\else
- \globaldropcaps\chardef\DroppedStatus=0
+ \globaldropcaps\chardef\DroppedStatus\zerocount
\let\next\relax
\fi
\else
- \globaldropcaps\chardef\DroppedStatus=0
+ \globaldropcaps\chardef\DroppedStatus\zerocount
\let\next\relax
\fi\fi
\or % error
- \globaldropcaps\chardef\DroppedStatus=0
+ \globaldropcaps\chardef\DroppedStatus\zerocount
\let\next\relax
\fi
\next}
@@ -303,12 +359,12 @@
%D line height, a value that gives a pleasant grayness.
\def\DoLineDroppedCaps#1#2#3#4#5% compensation command font offset lines
- {\scratchcounter=#5%
- \advance\scratchcounter by -1
- \scratchdimen=\scratchcounter\baselineskip
- \advance\scratchdimen by #1%
- \NormalizeFontHeight\DummyFont{W}{\scratchdimen}{#3}%
- \DroppedCaps{#2}{#3}{\TheNormalizedFontSize}{#4}
+ {\scratchcounter#5%
+ \advance\scratchcounter \minusone
+ \scratchdimen\scratchcounter\baselineskip
+ \advance\scratchdimen #1%
+ \NormalizeFontHeight\DummyFont{W}\scratchdimen{#3}%
+ \DroppedCaps{#2}{#3}\TheNormalizedFontSize{#4}
{\scratchcounter\baselineskip}{#5}}
\def\LineDroppedCaps% command font offset lines
@@ -358,29 +414,27 @@
\forgetall
\bgroup
#1%
- \setbox0=\box\voidb@x
- \setbox2=\box\voidb@x
+ \setbox0\box\voidb@x
+ \setbox2\box\voidb@x
\def\grabfirstline##1 %
- {\setbox2=\hbox
+ {\setbox2\hbox
{\ifvoid0
{#3{\ignorespaces##1}}%
\else
\unhcopy0\ {#4{##1}}%
\fi}%
- \ifdim\wd2=\!!zeropoint
- \setbox0=\box\voidb@x
- \setbox2=\box\voidb@x
- \let\next=\grabfirstline
+ \ifdim\wd2=\zeropoint
+ \setbox0\box\voidb@x
+ \setbox2\box\voidb@x
+ \@EA\grabfirstline
\else\ifdim\wd2>\hsize
\hbox to \hsize{\strut\unhbox0}#2\egroup
\break##1\
\egroup
- \let\next=\relax
\else
- \setbox0=\box2
- \let\next=\grabfirstline
- \fi\fi
- \next}%
+ \setbox0\box2
+ \@EAEAES\grabfirstline
+ \fi\fi}%
\grabfirstline}
%D \startbuffer
@@ -460,7 +514,7 @@
\def\StackCharacters#1#2#3#4% sequence vsize vskip command
{\vbox #2
{\forgetall
- \baselineskip0pt
+ \baselineskip\zeropoint
\def\StackCharacter##1{#4{##1}\cr\noalign{#3}}%
\halign
{\hss##\hss&##\cr
@@ -548,27 +602,27 @@
%D
%D These are implemented using an auxilliary macro:
-\def\NormalizeFontHeight%
- {\NormalizeFontSize\ht}
-
-\def\NormalizeFontWidth%
- {\NormalizeFontSize\wd}
+\def\NormalizeFontHeight{\NormalizeFontSize\ht}
+\def\NormalizeFontWidth {\NormalizeFontSize\wd}
\def\NormalizeFontSize#1#2#3#4#5%
{\bgroup
\dimen0=#4% #4 can be \ht0 or so
- \setbox0=\hbox{\definefont[temp][#5 at 10pt]\temp#3}%
- \dimen2=#10 % #1 is \wd or \ht
- \dimen4=10000pt
- \divide\dimen4 by \dimen2
- \divide\dimen0 by 1000
- \dimen0=\number\dimen4\dimen0
- \xdef\TheNormalizedFontSize{\the\dimen0}%
- \definefont[temp][#5 at \the\dimen0]%
- \temp
+ \setbox0\hbox{\definedfont[#5 at 10pt]#3}%
+ \ifdim\wd0>\zeropoint
+ \dimen2=#10 % #1 is \wd or \ht
+ \dimen4=10000pt
+ \divide\dimen4 \dimen2
+ \divide\dimen0 1000
+ \dimen0=\number\dimen4\dimen0
+ \xdef\TheNormalizedFontSize{\the\dimen0}%
+ \else
+ \dimen0\bodyfontsize
+ \fi
+ \definedfont[#5 at \the\dimen0]%
\expandafter
\egroup
- \expandafter\font\expandafter#2\expandafter=\fontname\font\relax}
+ \expandafter\font\expandafter#2\fontname\font\relax}
%D Afterwards, we have access to the calculated size by:
@@ -616,7 +670,7 @@
%D \starttypen
%D \NormalizeFontHeight {text} \DroppedFont {2\baselineskip} {cmbx12}
%D
-%D \def\NicelyDroppedCaps%
+%D \def\NicelyDroppedCaps
%D {\DroppedCaps
%D {\kleur[groen]}
%D {\DroppedFont}
@@ -627,6 +681,79 @@
%D
%D It's up to the reader to test this one.
-\protect
+%D For Hraban.
+
+\unexpanded\def\FirstNCharacters#1#2% \FirstNCharacters{3}{fr{\"o}beln}
+ {\bgroup
+ \scratchcounter\zerocount
+ \def\docommando##1%
+ {\ifnum\scratchcounter=#1\else
+ ##1\relax % catches ##1 = \"e and alike
+ \advance\scratchcounter\plusone
+ \fi}
+ \handletokens#2\with\docommando
+ \egroup}
+
+%D \macros
+%D {FittingText}
+%D
+%D First used in Pascal (demo-bbv):
+%D
+%D \startbuffer
+%D \ruledvbox{\FittingText{3cm}{1cm}{Serif}{24pt}{1pt}{1}
+%D {\veryraggedright
+%D \hangindent1em\hangafter1\relax
+%D \begstrut \dorecurse{8}{Bram Marta }\unskip \endstrut}}
+%D
+%D \ruledvbox{\FittingText{3cm}{1cm}{Serif}{24pt}{1pt}{1}
+%D {\raggedleft\begstrut Bram\\Marta \unskip\endstrut}}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \startlinecorrection
+%D \getbuffer
+%D \stoplinecorrection
+
+% #1 width #2 height #3 font #4 size #5 step #6 interlinie #7 text
+
+\long\def\FittingText#1#2#3#4#5#6#7%
+ {\bgroup
+ \forgetall
+ \dontcomplain
+ \steltolerantiein[\v!zeersoepel]% == \tolerance4500
+ \hsize#1%
+ \def\\{\softbreak}%
+ \!!heighta#4%
+ \!!heightb#2%
+ \doloop
+ {\ifdim\!!heighta>\!!onepoint
+ \expanded{\definefont[\s!dummy][#3 at \the\!!heighta][\c!interlinie=#6]}%
+ \getvalue\s!dummy
+ \setbox\scratchbox\vbox{#7\endgraf}%
+ \ifdim\ht\scratchbox>\!!heightb
+ \advance\!!heighta-#5%
+ \else
+ \beginshapebox
+ \unvcopy\scratchbox
+ \endshapebox
+ \global\dimen1\hsize
+ \reshapebox
+ {\setbox\shapebox\hbox{\unhbox\shapebox}%
+ \ifdim\wd\shapebox>\dimen1
+ \global\dimen1\wd\shapebox
+ \fi}%
+ \ifdim\dimen1>\hsize
+ \advance\!!heighta-#5%
+ \else
+ \exitloop
+ \fi
+ \fi
+ \else
+ \exitloop
+ \fi}%
+ \writestatus{\strippedcsname\FittingText}{height: \the\!!heighta}%
+ \unvbox\scratchbox
+ \egroup}
-\endinput
+\protect \endinput
diff --git a/tex/context/base/supp-lan.tex b/tex/context/base/supp-lan.tex
index 4630bdbac..5f2c4cbcd 100644
--- a/tex/context/base/supp-lan.tex
+++ b/tex/context/base/supp-lan.tex
@@ -408,7 +408,8 @@
\def\defineactivecharacter #1 %
{\scratchcounter\the\uccode\activehackcode
- \uccode\activehackcode\expandafter\doifnumberelse\expandafter{\string#1}\empty`#1%
+ \uccode\activehackcode\expandafter\doifnumberelse
+ \expandafter{\string#1}\empty`#1%
\catcode\uccode\activehackcode\@@active
\uppercase{\def\next{~}}%
\uccode\activehackcode\scratchcounter
diff --git a/tex/context/base/supp-mat.tex b/tex/context/base/supp-mat.tex
index fcd64b709..66357407c 100644
--- a/tex/context/base/supp-mat.tex
+++ b/tex/context/base/supp-mat.tex
@@ -19,7 +19,7 @@
\unprotect
%D \macros
-%D {mathematics, nomathematics, startmathmode}
+%D {mathematics, math, nomathematics, startmathmode}
%D
%D The \type{$} can be both an begin and end math character.
%D This can lead to confusing and errorprone situations when
@@ -48,9 +48,9 @@
\def\mathematics#1%
{\ifmmode#1\else$#1$\fi}
-\def\startmathmode%
+\def\startmathmode
{\ifmmode
- \let\stopmathmode=\relax
+ \let\stopmathmode\relax
\else
$\def\stopmathmode{$}% \let\stopmathmode=$
\fi}
@@ -58,6 +58,8 @@
\def\nomathematics#1%
{\ifmmode\hbox{#1}\else#1\fi}
+\let\math\mathematics
+
%D \macros
%D {dimension, nodimension}
%D
@@ -73,8 +75,8 @@
\unexpanded\def\dimension#1%
{\def\dodimensionsignal{\kern\dimensionsignal}%
- \ifdim\lastskip=\!!zeropoint\relax
- \ifdim\lastkern=\!!zeropoint\relax
+ \ifdim\lastskip=\zeropoint\relax
+ \ifdim\lastkern=\zeropoint\relax
\ifmmode
\mathematics{\dimensionhalfspace\dimensionhalfspace\dimensiontypeface#1}%
\else
@@ -108,7 +110,7 @@
\newevery\everysupersub \EverySuperSub
-\appendtoks \advance\supersubmode by 1\relax \to \everysupersub
+\appendtoks \advance\supersubmode 1\relax \to \everysupersub
% \def\dodosuper#1{\normalsuper{\the\everysupersub#1}}
% \def\dodosuber#1{\normalsuber{\the\everysupersub#1}}
@@ -131,7 +133,7 @@
\bgroup
\catcode`\^=\@@active
\catcode`\_=\@@active
-\gdef\enablesupsub%
+\gdef\enablesupsub
{\catcode`\^=\@@active
\def^{\ifmmode\expandafter\super\else\expandafter\normalsuper\fi}%
\catcode`\_=\@@active
@@ -144,7 +146,7 @@
%D We can pick up the current math style by calling \type
%D {\restoremathstyle}.
-\def\restoremathstyle%
+\def\restoremathstyle
{\ifmmode
\ifcase\supsubmode
\textstyle
@@ -155,6 +157,4 @@
\fi
\fi}
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/supp-mis.tex b/tex/context/base/supp-mis.tex
index 631f8f557..ff4724072 100644
--- a/tex/context/base/supp-mis.tex
+++ b/tex/context/base/supp-mis.tex
@@ -64,12 +64,11 @@
\long\def\ifnocontextobject#1\do%
{\ifx#1\undefined
- \let\next=\definecontextobject
+ \expandafter\definecontextobject
\else
%\writestatus{system}{beware of conflicting \string#1}%
- \let\next=\gobblecontextobject
- \fi
- \next}
+ \expandafter\gobblecontextobject
+ \fi}
%D \macros
%D {beginETEX,beginTEX}
@@ -108,7 +107,7 @@
\ifnocontextobject \protect \do
- \let\protect=\relax
+ \let\protect\relax
\fi
@@ -160,7 +159,18 @@
\ifnocontextobject \scratchbox \do \newbox \scratchbox \fi
\ifnocontextobject \scratchread \do \newread \scratchread \fi
\ifnocontextobject \scratchwrite \do \newwrite \scratchwrite \fi
+
\ifnocontextobject \zeropoint \do \newdimen \zeropoint \fi
+\ifnocontextobject \zerocount \do \chardef \zerocount=0 \fi
+\ifnocontextobject \plusone \do \chardef \plusone =1 \fi
+\ifnocontextobject \minusone \do \newcount \minusone \fi
+
+\ifnocontextobject \thousandpoint \do \newdimen \thousandpoint \fi
+
+\thousandpoint=1000pt
+\minusone = -1
+
+\ifnocontextobject \emptytoks \do \newtoks \emptytoks \fi
\ifnocontextobject \nextbox \do \newbox \nextbox \fi
\ifnocontextobject \nextdepth \do \newdimen \nextdepth \fi
@@ -189,15 +199,19 @@
\ifnocontextobject \@@active \do \chardef\@@active = 13 \fi
\ifnocontextobject \@@comment \do \chardef\@@comment = 14 \fi
+\def\s!sp{sp}
+\def\s!pt{pt}
+\def\s!bp{bp}
+
%D \macros
%D {@EA,expanded,expandoneargafter,expandtwoargsafter}
%D
%D Also needed:
-\let\@EA=\expandafter
+\let\@EA=\expandafter \let\@@expanded\empty
\def\expanded#1%
- {\edef\@@expanded{\noexpand#1}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand#1}\@@expanded}
\def\expandoneargafter#1#2%
{\@EA#1\@EA{#2}}
@@ -205,6 +219,8 @@
\def\expandtwoargsafter#1#2#3%
{\@EA\@EA\@EA#1\@EA\@EA\@EA{\@EA#2\@EA}\@EA{#3}}
+\def\@EAEAEA{\@EA\@EA\@EA}
+
%D \macros
%D {everyline,EveryLine,EveryPar}
%D
@@ -217,6 +233,11 @@
\ifnocontextobject \EveryLine \do \let\EveryLine=\everyline \fi
%D \macros
+%D {globallet}
+
+\def\globallet{\global\let}
+
+%D \macros
%D {!!...}
%D
%D We reserve ourselves some scratch strings (i.e. macros)
@@ -237,6 +258,7 @@
%D Furthermore it saves memory.
\ifnocontextobject \!!zeropoint \do \def\!!zeropoint {0pt} \fi
+\ifnocontextobject \!!zerocount \do \def\!!zerocount {0} \fi
\ifnocontextobject \!!tenthousand \do \def\!!tenthousand {10000} \fi
\ifnocontextobject \!!width \do \def\!!width {width} \fi
@@ -283,7 +305,9 @@
\fi
%D \macros
-%D {setvalue,setevalue,setxvalue,getvalue,letvalue,setgvalue}
+%D {setvalue,setevalue,setxvalue,,setgvalue,
+%D getvalue,
+%D letvalue,letgvalue}
%D
%D The next two macros expand their argument to
%D \type{\argument}. The first one is used to define macro's
@@ -297,7 +321,7 @@
\def\setxvalue#1{\expandafter\xdef\csname#1\endcsname}
\def\getvalue #1{\csname#1\endcsname}
\def\letvalue #1{\expandafter\let\csname#1\endcsname}
-
+ \def\letgvalue#1{\global\expandafter\let\csname#1\endcsname}
\fi
%D \macros
@@ -309,7 +333,7 @@
\ifnocontextobject \unexpanded \do
- \let\unexpanded=\relax
+ \let\unexpanded\relax
\fi
@@ -399,7 +423,7 @@
\fileprocessedtrue
\gdef\dofinishfile%
{\closein#1\relax
- \global\let\doprocessline=\relax}%
+ \global\let\doprocessline\relax}%
\gdef\doprocessline%
{\ifeof#1%
\dofinishfile
@@ -464,7 +488,7 @@
%D Some \CONTEXT\ low level macros can have a \type{\doglobal}
%D prefix. Let's just forget about that here:
-\ifnocontextobject \doglobal \do \let\doglobal=\relax \fi
+\ifnocontextobject \doglobal \do \let\doglobal\relax \fi
%D The next obscure one is needed in the generic verbatim
%D environment. When we end up with more of these, it's time
@@ -629,6 +653,22 @@
\let\donothing\empty
+%D Also new:
+
+\def\letempty #1{\let#1\empty}
+\def\globalletempty#1{\global\let#1\empty}
+
+\def\letvalueempty #1{\expandafter\let\csname#1\endcsname\empty}
+\def\letgvalueempty#1{\global\expandafter\let\csname#1\endcsname\empty}
+
+%D Sigh
+
+\def\settrue #1{\chardef#1\zerocount}
+\def\setfalse#1{\chardef#1\plusone}
+
+\let\newconditional = \setfalse
+\let\ifconditional = \ifcase
+
%D That's it. Please forget this junk and take a look at how
%D it should be done.
diff --git a/tex/context/base/supp-mpe.tex b/tex/context/base/supp-mpe.tex
index 222a1947e..3068b94e0 100644
--- a/tex/context/base/supp-mpe.tex
+++ b/tex/context/base/supp-mpe.tex
@@ -11,6 +11,13 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
+% fuzzy and complicating is the fact that we need to support
+% context as well as mptopdf, so we cannot fall back on the
+% special drivers and color module (although there may be
+% good reasons to use a smaller context instead); also,
+% shading is handled here while it should move to the special
+% driver - to do!
+
%D This module is still experimental and deals with some
%D extensions to \METAPOST. When using \POSTSCRIPT\ output,
%D these extensions can be supplied by means of proper
@@ -95,8 +102,8 @@
\def\dohandleMPspecialcomment#1
{\setMPargument{#1}%
- \advance\scratchcounter -1
- \ifcase\scratchcounter\relax
+ \advance\scratchcounter \minusone
+ \ifcase\scratchcounter
\handleMPspecialcommand
\donetrue
\doresetMPstack
@@ -108,13 +115,13 @@
\def\handleMPspecialcomment #1 % number of arguments
{\doresetMPstack
- \scratchcounter=#1\relax
+ \scratchcounter#1\relax
\ifcase\scratchcounter % when zero, inline shading is used
- \chardef\inlineMPspecials1
+ \chardef\inlineMPspecials\plusone
\let\handleMPsequence\dohandleMPsequence
\expandafter\handleMPsequence
\else
- \chardef\inlineMPspecials0
+ \chardef\inlineMPspecials\zerocount
\expandafter\dohandleMPspecialcomment
\fi}
@@ -122,9 +129,9 @@
%D definitions. Actually, this macro is called by the
%D previous ones.
-\def\handleMPspecialcommand%
+\def\handleMPspecialcommand
{\ifcase\inlineMPspecials\or
- \advance\nofMParguments -1 % pop the size
+ \advance\nofMParguments \minusone % pop the size
\fi
\ifundefined\MPspecial
\message{[unknown \MPspecial]}%
@@ -143,9 +150,9 @@
\def\handleMPspecialscomment #1.#2 #3 % version.revision signal
{\doresetMPstack
- \chardef\MPspecialversion #1
- \chardef\MPspecialrevision#2
- \chardef\MPspecialsignal #3
+ \chardef\MPspecialversion #1%
+ \chardef\MPspecialrevision#2%
+ \chardef\MPspecialsignal #3%
\let\handleMPsequence\dohandleMPsequence
\handleMPsequence}
@@ -154,14 +161,14 @@
\newtoks\MPstartresources
\newtoks\MPstopresources
-\def\startMPresources%
+\def\startMPresources
{\the\MPstartresources
\ifx\currentPDFresources\empty\else
\message{[unused resources]}%
\fi
\global\let\currentPDFresources\empty}
-\def\stopMPresources%
+\def\stopMPresources
{\let\currentPDFresources\empty
\the\MPstopresources}
@@ -171,13 +178,15 @@
%D {0.001} is the first path and \type {0.010} the tenth. Since
%D \METAPOST strips trailing zeros, we have to padd the string.
-\newif\ifMPcmyk
+\newif\ifMPcmykcolors
+\newif\ifMPspotcolors
\ifx\normalhandleMPrgbcolor\undefined % in case we reload this module
\let\normalhandleMPrgbcolor \handleMPrgbcolor
\let\normalhandleMPcmykcolor\handleMPcmykcolor
\let\normalhandleMPgraycolor\handleMPgraycolor
+ \let\normalhandleMPspotcolor\handleMPspotcolor
\fi
@@ -194,7 +203,7 @@
\ifCONTEXT % we can use this for a better xgstate handling
- \def\checkPDFMPstrokecolor%
+ \def\checkPDFMPstrokecolor
{\ifPDFMPstrokecolor \PDFstrokecolortrue \fi}
\def\normalhandleMPrgbcolor
@@ -206,6 +215,9 @@
\def\normalhandleMPgraycolor
{{\checkPDFMPstrokecolor\execcolorS\gMPa1:0:0\od}}
+ \def\normalhandleMPspotcolor
+ {{\checkPDFMPstrokecolor\execcolorP\gMPa1:\gMPa2:0:0\od}}
+
\fi
% In the previous macros we use the special drivers. A more
@@ -256,7 +268,7 @@
%
% speed up:
-\def\setMPcolor%
+\def\setMPcolor
{\edef\lastMPrvalue{\csname\@@MP01\endcsname}%
\edef\lastMPgvalue{\csname\@@MP02\endcsname}%
\edef\lastMPbvalue{\csname\@@MP03\endcsname}}
@@ -270,41 +282,45 @@
\resetMPcolor
-% \def\handleMPrgbcolor%
-% {\ifcase\MPspecialversion
-% \normalhandleMPrgbcolor
-% \else
-% \setMPcolor
-% \ifnum\MPrgbnumber\lastMPrvalue=\MPspecialsignal\relax
-% \ifMPcmyk \interceptMPcmykcolor \fi
-% \else
-% \resetMPcolor\normalhandleMPrgbcolor
-% \fi
-% \fi}
-
\def\@@MPSK{@MPSK@}
+\def\@@MPSP{@MPSP@}
-\def\interceptMPcmykcolor % todo : \ifMPcmyk
+\def\interceptMPcmykcolor % todo : \ifMPcmykcolors
{\ifcase\MPrgbnumber\lastMPgvalue
% cannot happen
\or
% 1 == cmyk color spec
- \ifMPcmyk \dointerceptMPcmykcolor \fi
+ \ifMPcmykcolors \dointerceptMPcmykcolor \fi
+ \or
+ % 2 == spot color
+ \ifMPspotcolors \dointerceptMPspotcolor \fi
\or
- % 2 == rgb transparency
+ % 3 == rgb transparency
\invokeMPtransparencyspecial
+ \or
+ % 4 == cmyk transparency
+ \ifMPcmykcolors \invokeMPtransparencyspecial \fi
+ \or
+ % 5 == spot transparency
+ \ifMPspotcolors \invokeMPtransparencyspecial \fi
\else
- % 3 == cmyk transparency
- \ifMPcmyk \invokeMPtransparencyspecial \fi
+ % \writestatus{MPtoPDF}{unknown direct special}%
\fi}
-\def\dointerceptMPcmykcolor % can be used often, so sped up
+\def\dointerceptMPcmykcolor
{\revokeMPtransparencyspecial
\@EA\ifx\csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname\relax\else
\@EA\@EA\@EA\setMPcmyk\csname\@@MPSK\number\MPrgbnumber\lastMPbvalue\endcsname
\normalhandleMPcmykcolor
\fi}
+\def\dointerceptMPspotcolor
+ {\revokeMPtransparencyspecial
+ \@EA\ifx\csname\@@MPSP\number\MPrgbnumber\lastMPbvalue\endcsname\relax\else
+ \@EA\@EA\@EA\setMPspot\csname\@@MPSP\number\MPrgbnumber\lastMPbvalue\endcsname
+ \normalhandleMPspotcolor
+ \fi}
+
\def\handleMPrgbcolor
{\resetMPcolor
\ifcase\MPspecialversion
@@ -341,12 +357,12 @@
\newtoks \invokeMPspecials
-\def\finishMPpath%
+\def\finishMPpath
{\PDFcode
{\ifcase\finiMPpath W n\or S\or f\or B\else W n\fi
\extraMPpathcode}}
-\def\processMPpath%
+\def\processMPpath
{\checkMPpath % !
\ifcase\nofMPsegments\else
\let\extraMPpathcode\empty
@@ -510,8 +526,8 @@
\def\startMPshading#1%
{\edef\currentMPspecial{\gMPs{#1}}}
-\def\stopMPshading%
- {\global\advance\currentPDFshade 1
+\def\stopMPshading
+ {\global\advance\currentPDFshade \plusone
\setxvalue{obj:Sh:\currentMPspecial}%
{/Sh\the\currentPDFshade\space\the\pdflastobj\space0 R }%
\setxvalue{mps:Sh:\currentMPspecial}%
@@ -522,19 +538,19 @@
\to \MPstartresources
\appendtoks
- \ifx\currentMPshades\empty \else
- \xdef\currentPDFresources{\currentPDFresources
- /Shading <<\currentMPshades>>}%
- \fi
+ \ifx\currentMPshades\empty \else
+ \xdef\currentPDFresources{\currentPDFresources
+ /Shading <<\currentMPshades>>}%
+ \fi
\to \MPstopresources
-\def\invokeMPshadespecial%
+\def\invokeMPshadespecial
{\doifdefined{mps:Sh:\currentMPspecial}
{\edef\currentMPshade{\getvalue{obj:Sh:\currentMPspecial}}%
- \doifinstringelse{\currentMPshade}{\currentMPshades}
- {}{\xdef\currentMPshades{\currentMPshades\currentMPshade}}%
+ \doifinstringelse\currentMPshade\currentMPshades \donothing
+ {\xdef\currentMPshades{\currentMPshades\currentMPshade}}%
\def\extraMPpathcode{/Sh\getvalue{mps:Sh:\currentMPspecial} sh Q}%
- \chardef\finiMPpath=0
+ \chardef\finiMPpath\zerocount
\PDFcode{q /Pattern cs}}}
\appendtoks \invokeMPshadespecial \to \invokeMPspecials
@@ -542,64 +558,130 @@
%D We need to convert the \CMYK\ specials into colors, because
%D we have to do it twice, we define a macro.
+% \def\checkMPshadingcolor#1#2#3#4#5%
+% {\edef\tempMPrvalue{\csname\@@MP0#1\endcsname}%
+% \edef\tempMPgvalue{\csname\@@MP0#2\endcsname}%
+% \edef\tempMPbvalue{\csname\@@MP0#3\endcsname}%
+% \edef#5%
+% {\ifx\tempMPrvalue\tempMPgvalue
+% \ifx\tempMPrvalue\tempMPbvalue
+% \ifx\tempMPgvalue\tempMPbvalue
+% \tempMPbvalue
+% \fi
+% \fi
+% \fi}%
+% \edef#4% todo : spotcolors
+% {\ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\space
+% \ifMPcmykcolors\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}\fi
+% \fi}}
+
\def\checkMPshadingcolor#1#2#3#4#5%
{\edef\tempMPrvalue{\csname\@@MP0#1\endcsname}%
\edef\tempMPgvalue{\csname\@@MP0#2\endcsname}%
\edef\tempMPbvalue{\csname\@@MP0#3\endcsname}%
- \edef#5%
- {\ifx\tempMPrvalue\tempMPgvalue
- \ifx\tempMPrvalue\tempMPbvalue
- \ifx\tempMPgvalue\tempMPbvalue
- \tempMPbvalue
- \fi
- \fi
- \fi}%
- \edef#4%
- {\ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\space
- \ifMPcmyk\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}\fi
- \fi}}
+ \global\let\MPresolvedspace\MPgrayspace
+ \global\let\MPresolvedcolor\!!zerocount
+ \ifnum\MPrgbnumber\tempMPrvalue=\MPspecialsignal\relax
+ \ifcase\MPrgbnumber\tempMPgvalue
+ \or % 1 = cmyk
+ \ifMPcmykcolors
+ \expanded{\resolveMPcmykcolor\getvalue{\@@MPSK\number\MPrgbnumber\tempMPbvalue}}\end
+ \fi
+ \or % 2 = spot
+ \ifMPspotcolors
+ \expanded{\resolveMPspotcolor\getvalue{\@@MPSP\number\MPrgbnumber\tempMPbvalue}}\end
+ \fi
+ \fi
+ \else
+ \ifx\tempMPrvalue\tempMPgvalue
+ \ifx\tempMPrvalue\tempMPbvalue
+ \expanded{\resolveMPgraycolor\tempMPbvalue}\end
+ \else
+ \expanded{\resolveMPrgbcolor\tempMPrvalue\space\tempMPgvalue\space\tempMPbvalue}\end
+ \fi
+ \else
+ \expanded{\resolveMPrgbcolor\tempMPrvalue\space\tempMPgvalue\space\tempMPbvalue}\end
+ \fi
+ \fi
+ \let#4\MPresolvedcolor
+ \let#5\MPresolvedspace}
%D We also need to make sure that we have two \RGB\ or
%D \CMYK colors, since we have to set the colorspace.
-\def\setMPshadingcolors#1#2#3#4#5#6%
- {\checkMPshadingcolor{#1}{#2}{#3}\MPshadeA\MPshadeAA
- \checkMPshadingcolor{#4}{#5}{#6}\MPshadeB\MPshadeBB
- \ifx\MPshadeA\empty
- \ifx\MPshadeB\empty
- \edef\MPshadeA{\gMPs{#1} \gMPs{#2} \gMPs{#3}}%
- \edef\MPshadeB{\gMPs{#4} \gMPs{#5} \gMPs{#6}}%
- \def \MPshadeC{RGB}%
+% \def\setMPshadingcolors#1#2#3#4#5#6%
+% {\checkMPshadingcolor{#1}{#2}{#3}\MPshadeA\MPshadeAA
+% \checkMPshadingcolor{#4}{#5}{#6}\MPshadeB\MPshadeBB
+% \ifx\MPshadeA\empty
+% \ifx\MPshadeB\empty
+% \edef\MPshadeA{\gMPs{#1} \gMPs{#2} \gMPs{#3}}%
+% \edef\MPshadeB{\gMPs{#4} \gMPs{#5} \gMPs{#6}}%
+% \def \MPshadeC{RGB}%
+% \else
+% \ifx\MPshadeAA\empty
+% \let\MPshadeA\MPcmykWhite
+% \let\MPshadeB\MPcmykBlack
+% \else
+% \scratchdimen\!!onepoint
+% \advance\scratchdimen -\MPshadeAA\s!pt
+% \edef\MPshadeA{0 0 0 \withoutpt\the\scratchdimen}%
+% \fi
+% \def\MPshadeC{CMYK}%
+% \fi
+% \else
+% \ifx\MPshadeB\empty
+% \ifx\MPshadeBB\empty
+% \let\MPshadeA\MPcmykWhite
+% \let\MPshadeB\MPcmykBlack
+% \else
+% \scratchdimen\!!onepoint
+% \advance\scratchdimen -\MPshadeBB\s!pt
+% \edef\MPshadeB{0 0 0 \withoutpt\the\scratchdimen}%
+% \fi
+% \fi
+% \def\MPshadeC{CMYK}%
+% \fi}
+
+\def\setMPshadingcolors#1#2#3#4#5#6% color space
+ {\checkMPshadingcolor{#1}{#2}{#3}\MPshadeAc\MPshadeAs
+ \checkMPshadingcolor{#4}{#5}{#6}\MPshadeBc\MPshadeBs
+ \ifx\MPshadeAs\MPshadeBs
+ \let\MPshadeA\MPshadeAc
+ \let\MPshadeB\MPshadeBc
+ \let\MPshadeC\MPshadeAs
+ \else\ifx\MPshadeAs\MPgrayspace
+ \ifx\MPshadeBs\MPrgbspace
+ \edef\MPshadeA{\MPshadeAc\space\MPshadeAc\space\MPshadeAc}%
\else
- \ifx\MPshadeAA\empty
- \let\MPshadeA\MPcmykWhite
- \let\MPshadeB\MPcmykBlack
- \else
- \scratchdimen=1pt\advance\scratchdimen -\MPshadeAA pt
- \edef\MPshadeA{0 0 0 \withoutpt\the\scratchdimen}%
- \fi
- \def\MPshadeC{CMYK}%
+ \negatecolorcomponent\MPshadeAc
+ \edef\MPshadeA{0 0 0 \MPshadeAc}%
\fi
- \else
- \ifx\MPshadeB\empty
- \ifx\MPshadeBB\empty
- \let\MPshadeA\MPcmykWhite
- \let\MPshadeB\MPcmykBlack
- \else
- \scratchdimen=1pt\advance\scratchdimen -\MPshadeBB pt
- \edef\MPshadeB{0 0 0 \withoutpt\the\scratchdimen}%
- \fi
+ \let\MPshadeB\MPshadeBc
+ \let\MPshadeC\MPshadeBs
+ \else\ifx\MPshadeBs\MPgrayspace
+ \let\MPshadeA\MPshadeAc
+ \ifx\MPshadeAs\MPrgbspace
+ \edef\MPshadeB{\MPshadeBc\space\MPshadeBc\space\MPshadeBc}%
+ \else
+ \negatecolorcomponent\MPshadeBc
+ \edef\MPshadeB{0 0 0 \MPshadeBc}%
\fi
- \def\MPshadeC{CMYK}%
- \fi}
+ \let\MPshadeC\MPshadeAs
+ \else
+ % different color spaces
+ \def\MPshadeA{1}%
+ \def\MPshadeB{1}%
+ \let\MPshadeC\MPgrayspace
+ \fi\fi\fi}
+
+\let\MPshadeA\MPcmykWhite
+\let\MPshadeB\MPcmykBlack
+\let\MPshadeC\MPgrayspace
%D The reason why this macro is a bit complicates is that we
%D handle black and white situations (otherwise we would have
%D to use \CMYK\ b/w in case of a \CMYK\ shade).
-\def\MPcmykBlack{0 0 0 0}
-\def\MPcmykWhite{0 0 0 1}
-
%D Here are the special handlers:
\defineMPspecial{30}
@@ -613,7 +695,7 @@
/N \gMPs3>>}%
\immediate\pdfobj
{<</ShadingType 2
- /ColorSpace /Device\MPshadeC\space
+ /ColorSpace /\MPshadeC\space
/Function \the\pdflastobj\space 0 R
/Coords [\gMPs7 \gMPs8 \gMPs{12} \gMPs{13}]
/Extend [true true]>>}%
@@ -630,7 +712,7 @@
/N \gMPs3>>}%
\immediate\pdfobj
{<</ShadingType 3
- /ColorSpace /Device\MPshadeC\space
+ /ColorSpace /\MPshadeC\space
/Function \the\pdflastobj\space 0 R
/Coords [\gMPs7 \gMPs8 \gMPs9 \gMPs{13} \gMPs{14} \gMPs{15}]
/Extend [true true]>>}%
@@ -669,7 +751,7 @@
{\ifcase\pdfoutput\or % will be hooked into the special driver
\doiffileelse{#7}
{\doifundefinedelse{mps:x:#7}
- {\immediate\pdfximage width 1bp height 1bp {#7}%
+ {\immediate\pdfximage\!!width1\s!bp\!!height1\s!bp{#7}%
\setxvalue{mps:x:#7}{\pdfrefximage\the\pdflastximage}}%
{\message{[reusing figure #7]}}%
\pdfliteral{q #1 #2 #3 #4 #5 #6 cm}%
@@ -708,20 +790,20 @@
\def\handleMPhyperlink#1#2#3#4#5%
{%\ifcase\pdfoutput\or
- \setbox\scratchbox=\hbox
- {\setbox\scratchbox=\null
- \scratchdimen=#1bp\scratchdimen=-\scratchdimen
- \advance\scratchdimen#3bp
- \wd\scratchbox=\scratchdimen
- \scratchdimen=#2bp\scratchdimen=-\scratchdimen
- \advance\scratchdimen#4bp
- \ht\scratchbox=\scratchdimen
+ \setbox\scratchbox\hbox
+ {\setbox\scratchbox\null
+ \scratchdimen#1\s!bp\scratchdimen-\scratchdimen
+ \advance\scratchdimen#3\s!bp
+ \wd\scratchbox\scratchdimen
+ \scratchdimen#2bp\scratchdimen-\scratchdimen
+ \advance\scratchdimen#4\s!bp
+ \ht\scratchbox\scratchdimen
\incolorfalse
\gotobox{\box\scratchbox}[#5]}%
- \setbox\scratchbox=\hbox
- {\scratchdimen\MPxoffset bp \advance\scratchdimen#1bp
+ \setbox\scratchbox\hbox
+ {\scratchdimen\MPxoffset\s!bp\advance\scratchdimen#1\s!bp
\hskip\scratchdimen
- \scratchdimen=\MPyoffset bp \advance\scratchdimen#2bp
+ \scratchdimen\MPyoffset\s!bp\advance\scratchdimen#2\s!bp
\raise\scratchdimen\box\scratchbox}%
\smashbox\scratchbox
\box\scratchbox
@@ -765,7 +847,7 @@
%D {\setupcolors[cmyk=ja,status=start]\haalbuffer[cmyk]}
\defineMPspecial{1}
- {\ifMPcmyk
+ {\ifMPcmykcolors
\setxvalue{\@@MPSK\gMPs1}{\gMPs2 \gMPs3 \gMPs4 \gMPs5 }%
\fi}
@@ -775,6 +857,30 @@
\setvalue{\@@MP03}{#3}%
\setvalue{\@@MP04}{#4}}
+%\defineMPspecial{2}
+% {\ifMPspotcolors
+% \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 }%
+% \fi}
+
+
+\defineMPspecial{2}
+ {\ifMPspotcolors
+ \setxvalue{\@@MPSP\gMPs1}{\gMPs2 \gMPs3 }%
+ \checkMPspot{\gMPs2}{\gMPs3}%
+ \fi}
+
+\def\setMPspot#1 #2 %
+ {\setvalue{\@@MP01}{#1}%
+ \setvalue{\@@MP02}{#2}}
+
+\def\checkMPspot#1#2%
+ {\expanded{\resolveMPspotcolor#1 #2}\end
+ \ifx\MPspotspace\MPresolvedspace
+ \edef\MPspotspacespec{/\MPspotspace\space}%
+ \doifinstringelse\MPspotspacespec\currentMPcolorspaces
+ \donothing\registerMPcolorspace
+ \fi}
+
%D This special (number 50) passes positions to a tex file.
%D This method uses a two||pass approach an (mis|)|used the
%D context positioning macros. In \type {core-pos} we will
@@ -825,17 +931,17 @@
\defineMPspecial{50} % x y width height label
{\bgroup
- \scratchdimen\MPllx bp \scratchdimen-\scratchdimen
- \advance\scratchdimen\gMPs1bp
+ \scratchdimen\MPllx\s!bp \scratchdimen-\scratchdimen
+ \advance\scratchdimen\gMPs1\s!bp
\edef\x{\number\scratchdimen}%
- \scratchdimen\gMPs2bp \scratchdimen-\scratchdimen
- \advance\scratchdimen\MPury bp
+ \scratchdimen\gMPs2\s!bp \scratchdimen-\scratchdimen
+ \advance\scratchdimen\MPury\s!bp
\edef\y{\number\scratchdimen}%
- \scratchdimen\gMPs3bp
+ \scratchdimen\gMPs3\s!bp
\edef\w{\number\scratchdimen}%
- \scratchdimen\gMPs4bp
+ \scratchdimen\gMPs4\s!bp
\edef\h{\number\scratchdimen}%
- \dosavepositionwhd{\gMPs5}{0}{\x}{\y}{\w}{\h}{0}%
+ \dosavepositionwhd{\gMPs5}0\x\y\w\h0%
\egroup}
%D Transparency support used specials 60 (rgb) and 61
@@ -884,23 +990,84 @@
\edef\PDFtransparencyreference {#2}%
\edef\PDFtransparencycolorspecs{#3}}
-\defineMPspecial{2}
+\def\PDFtransparencyspec
+ {\ifx\MPresolvedspace\MPgrayspace
+ \MPresolvedcolor\space g \MPresolvedcolor\space G%
+ \else\ifx\MPresolvedspace\MPrgbspace
+ \MPresolvedcolor\space rg \MPresolvedcolor\space RG%
+ \else\ifx\MPresolvedspace\MPcmykspace
+ \MPresolvedcolor\space k \MPresolvedcolor\space K%
+ \else\ifx\MPresolvedspace\empty\else
+ /\MPresolvedspace\space cs \MPresolvedcolor\space sc
+ /\MPresolvedspace\space CS \MPresolvedcolor\space SC%
+ \fi\fi\fi\fi}
+
+\defineMPspecial{3} % rgb
{\edef\currentMPspecial{\gMPs6}%
\presetPDFtransparency{\gMPs1}{\gMPs2}%
+ \expanded{\resolveMPrgbcolor\gMPs3 \gMPs4 \gMPs5}\end
\setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
{\noexpand\assignMPStransparency
{\PDFtransparencyidentifier}%
{\PDFtransparencyreference}%
- {\gMPs3 \gMPs4 \gMPs5 rg \gMPs3 \gMPs4 \gMPs5 RG}}}
+ {\PDFtransparencyspec}}}
-\defineMPspecial{3}
+\defineMPspecial{4} % cmyk
{\edef\currentMPspecial{\gMPs7}%
\presetPDFtransparency{\gMPs1}{\gMPs2}%
+ \expanded{\resolveMPcmykcolor\gMPs3 \gMPs4 \gMPs5 \gMPs6}\end
+ \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
+ {\noexpand\assignMPStransparency
+ {\PDFtransparencyidentifier}%
+ {\PDFtransparencyreference}%
+ {\PDFtransparencyspec}}}
+
+%\defineMPspecial{5} % spot
+% {\edef\currentMPspecial{\gMPs5}%
+% \presetPDFtransparency{\gMPs1}{\gMPs2}%
+% \expanded{\resolveMPspotcolor\gMPs3 \gMPs4}\end
+% \ifx\MPspotspace\MPresolvedspace
+% \edef\MPspotspacespec{/\MPspotspace\space}%
+% \doifinstringelse\MPspotspacespec\currentMPcolorspaces
+% \donothing\registerMPcolorspace
+% \fi
+% \setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
+% {\noexpand\assignMPStransparency
+% {\PDFtransparencyidentifier}%
+% {\PDFtransparencyreference}%
+% {\PDFtransparencyspec}}}
+
+\defineMPspecial{5} % spot
+ {\edef\currentMPspecial{\gMPs5}%
+ \presetPDFtransparency{\gMPs1}{\gMPs2}%
+ \checkMPspot{\gMPs3}{\gMPs4}%
\setevalue{\@@MPST\currentMPspecial}% was \setxvalue, bug !
{\noexpand\assignMPStransparency
{\PDFtransparencyidentifier}%
{\PDFtransparencyreference}%
- {\gMPs3 \gMPs4 \gMPs5 \gMPs6 k \gMPs3 \gMPs4 \gMPs5 \gMPs6 K}}}
+ {\PDFtransparencyspec}}}
+
+% beware: for the moment only supported in pdftex; needs a cleanup!
+
+\def\registerMPcolorspace
+ {\doifobjectreferencefoundelse{PDFCS}\MPspotspace
+ {\doPDFgetobjectreference{PDFCS}\MPspotspace\PDFobjectreference
+ \xdef\currentMPcolorspaces
+ {\currentMPcolorspaces\MPspotspacespec\PDFobjectreference\space}}
+ \donothing}
+
+%D We need to add resource specifications!
+
+\appendtoks
+ \global\let\currentMPcolorspaces\empty
+\to \MPstartresources
+
+\appendtoks
+ \ifx\currentMPcolorspaces\empty \else
+ \xdef\currentPDFresources{\currentPDFresources
+ /ColorSpace <<\currentMPcolorspaces>>}%
+ \fi
+\to \MPstopresources
%D For efficiency reasons, we fall back on the allocation
%D mechanisms already present. For use within \MPTOPDF, we
@@ -1014,7 +1181,7 @@
\def\presetPDFtransparency#1#2%
{\initializePDFtransparency
\@EA\ifx\csname\@@MPSTO#1:#2\endcsname\relax
- \global\advance\PDFcurrenttransparency 1
+ \global\advance\PDFcurrenttransparency \plusone
\immediate\pdfobj{\PDFtransparencydictionary{#1}{#2}{}}%
\setxvalue{\@@MPSTN#1:#2}{\the\PDFcurrenttransparency}%
\setxvalue{\@@MPSTO#1:#2}{\the\pdflastobj}%
@@ -1047,4 +1214,76 @@
%D In all cases, we need to keep track of the resources
%D used.
+%D A few auxiliary macros:
+
+\def\MPgrayspace{DeviceGray}
+\def\MPrgbspace {DeviceRGB}
+\def\MPcmykspace{DeviceCMYK}
+\let\MPspotspace\MPgrayspace
+
+\def\MPcmykBlack{0 0 0 0}
+\def\MPcmykWhite{0 0 0 1}
+
+\ifCONTEXT
+
+ \def\startMPcolorresolve
+ {\bgroup
+ \def\dostartgraycolormode##1%
+ {\global\let\MPresolvedspace\MPgrayspace
+ \xdef\MPresolvedcolor{##1}}%
+ \def\dostartrgbcolormode ##1##2##3%
+ {\global\let\MPresolvedspace\MPrgbspace
+ \xdef\MPresolvedcolor{##1 ##2 ##3}}%
+ \def\dostartcmykcolormode##1##2##3##4%
+ {\global\let\MPresolvedspace\MPcmykspace
+ \xdef\MPresolvedcolor{##1 ##2 ##3 ##4}}%
+ \def\dostartspotcolormode##1##2%
+ {\global\let\MPspotspace\empty
+ \xdef\MPresolvedspace{##1}%
+ \xdef\MPresolvedcolor{##2}%
+ \global\let\MPspotspace\MPresolvedspace}% signal
+ \dostartgraycolormode\!!zerocount} % kind of hackery initialization
+
+ \let\stopMPcolorresolve\egroup
+
+ \def\resolveMPrgbcolor#1 #2 #3\end
+ {\startMPcolorresolve
+ \execcolorR#1:#2:#3:0:0\od
+ \stopMPcolorresolve}
+
+ \def\resolveMPcmykcolor#1 #2 #3 #4\end
+ {\startMPcolorresolve
+ \execcolorC#1:#2:#3:#4:0:0\od
+ \stopMPcolorresolve}
+
+ \def\resolveMPgraycolor#1\end
+ {\startMPcolorresolve
+ \execcolorS#1:0:0\od
+ \stopMPcolorresolve}
+
+ \def\resolveMPspotcolor#1 #2\end
+ {\startMPcolorresolve
+ \execcolorP#1:#2:0:0\od
+ \stopMPcolorresolve}
+
+\else
+
+ \def\resolveMPspotcolor#1 #2\end
+ {\global\let\MPresolvedspace\MPgrayspace
+ \xdef\MPresolvedcolor{0}}
+
+ \def\resolveMPrgbcolor#1 #2 #3\end
+ {\global\let\MPresolvedspace\MPrgbspace
+ \xdef\MPresolvedcolor{#1 #2 #3}}
+
+ \def\resolveMPcmykcolor#1 #2 #3 #4\end
+ {\global\let\MPresolvedspace\MPcmykspace
+ \xdef\MPresolvedcolor{#1 #2 #3 #4}}
+
+ \def\resolveMPgraycolor#1\end
+ {\global\let\MPresolvedspace\MPgrayspace
+ \xdef\MPresolvedcolor{#1}} % should be inverted
+
+\fi
+
\protect \endinput
diff --git a/tex/context/base/supp-mps.tex b/tex/context/base/supp-mps.tex
index 7ba4c2223..c8559f1fd 100644
--- a/tex/context/base/supp-mps.tex
+++ b/tex/context/base/supp-mps.tex
@@ -60,7 +60,7 @@
%D This is implemented as:
\long\def\startMPgraphic#1\stopMPgraphic
- {\checkMPTEXgraphic{#1}%
+ {\checkMPTEXgraphic{#1}% % potential speedup: pass #1 as macro
\startwritingMPgraphic
\writeMPgraphic{#1}%
\stopwritingMPgraphic}
@@ -276,7 +276,7 @@
\newif\ifMPTEXgraphic
-\def\dowriteMPgraphicline%
+\def\dowriteMPgraphicline
{\futurelet\next\dodowriteMPgraphicline}
%D A first version:
@@ -305,44 +305,79 @@
\newif\ifforceMPTEXgraphic
-\convertargument etex\to\MPasciiB
-\convertargument textext\to\MPasciiC % geen "text"
-\convertargument graphictext\to\MPasciiD % geen "text"
+%D Before we supported the graph module, we had:
+%D
+%D \starttypen
+%D \convertargument etex\to\MPasciiB
+%D \convertargument textext\to\MPasciiC % geen "text"
+%D \convertargument graphictext\to\MPasciiD % geen "text"
+%D
+%D \long\def\checkMPTEXgraphic#1%
+%D {\ifforceMPTEXgraphic
+%D \global\MPTEXgraphictrue
+%D \else
+%D \expandafter\convertargument#1\to\MPasciiA
+%D \doifstringinstringelse\MPasciiB\MPasciiA{\global\MPTEXgraphictrue}
+%D {\doifstringinstringelse\MPasciiC\MPasciiA{\global\MPTEXgraphictrue}
+%D {\doifstringinstringelse\MPasciiD\MPasciiA{\global\MPTEXgraphictrue}
+%D {\global\MPTEXgraphicfalse}}}%
+%D \fi}
+%D \stoptypen
+%D
+%D The next alternative permits extensions in other modules
+%D without the need to know the details of testing.
+
+\newtoks\MPTEXgrapicchecks
\long\def\checkMPTEXgraphic#1%
{\ifforceMPTEXgraphic
\global\MPTEXgraphictrue
\else
- \expandafter\convertargument#1\to\MPasciiA
- \doifstringinstringelse\MPasciiB\MPasciiA
- {\global\MPTEXgraphictrue}
- {\doifstringinstringelse\MPasciiC\MPasciiA
- {\global\MPTEXgraphictrue}
- {\doifstringinstringelse\MPasciiD\MPasciiA
- {\global\MPTEXgraphictrue}
- {\global\MPTEXgraphicfalse}}}%
+ \global\MPTEXgraphicfalse
+ \expandafter\convertargument#1\to\MPascii
+ \the\MPTEXgrapicchecks\relax
\fi}
+%D We could have used a kind of array approach using a
+%D counter appended to \type {MPascii}, but this is an
+%D as efficient alternative. (The uglyness comes from
+%D expanding after the string \type {#1}).
+
+\def\forceMPTEXcheck#1%
+ {\expanded{\convertargument#1\noexpand\to
+ \@EA\noexpand\csname MPascii#1\endcsname}%
+ \@EA\appendtoks
+ \@EA\doifincsnameelse\csname MPascii#1\endcsname\MPascii
+ {\global\MPTEXgraphictrue\gobbleuntil\relax}\donothing
+ \to \MPTEXgrapicchecks}
+
+\forceMPTEXcheck{etex}
+\forceMPTEXcheck{textext}
+\forceMPTEXcheck{graphictext}
+
\def\flushMPTEXgraphic
{\ifMPTEXgraphic \ifx\everyMPTEXgraphic\emptytoks \else
\immediate\write\MPwrite{verbatimtex \the\everyMPTEXgraphic\space etex;}%
\fi \fi}
-% \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend%
+\long\def\flushMPgraphicline#1#2;%
+ {\ifx#1\relax \else
+ \immediate\write\MPwrite{#1#2;}%
+ \expandafter\flushMPgraphicline
+ \fi}
+
+% the next one fails on btex \vbox {\hbox .. leading to \vbox \hbox
+%
+% \long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend
% {\ifx\next\empty\else\ifx\next\relax\else
% \bgroup
-% \let\par=\space
+% \let\par\space
% \ifx#2\relax
% \iflongMPlines
% \immediate\write\MPwrite{#1;}%
% \else
% \edef\ascii{#1}%
-% \long\def\flush##1##2;%
-% {\ifx##1\relax \else
-% \immediate\write\MPwrite{##1##2;}%
-% \expandafter\flush
-% \fi}%
-% \expandafter\flush\ascii\empty;\relax;%
+% \expandafter\flushMPgraphicline\ascii\empty;\relax;%
% \fi
% \egroup
% \else
@@ -352,31 +387,35 @@
% \dowriteMPgraphicline#4tex \relax etex\MPend
% \fi
% \fi\fi}
+%
+% so we need a two step approach
-\long\def\flushMPgraphicline#1#2;%
- {\ifx#1\relax \else
- \immediate\write\MPwrite{#1#2;}%
- \expandafter\flushMPgraphicline
- \fi}
+\long\def\dodowriteMPgraphicline#1tex %
+ {\doifnextcharelse\relax
+ {\nododowriteMPgraphicline{#1}}
+ {\redodowriteMPgraphicline{#1}}}
-\long\def\dodowriteMPgraphicline#1tex #2#3etex#4\MPend
+\long\def\redodowriteMPgraphicline#1#2etex#3\MPend
{\ifx\next\empty\else\ifx\next\relax\else
\bgroup
\let\par\space
- \ifx#2\relax
- \iflongMPlines
- \immediate\write\MPwrite{#1;}%
- \else
- \edef\ascii{#1}%
- \expandafter\flushMPgraphicline\ascii\empty;\relax;%
- \fi
- \egroup
+ \convertargument#2\to\ascii
+ \immediate\write\MPwrite{#1tex \ascii etex}%
+ \egroup
+ \dowriteMPgraphicline#3tex \relax etex\MPend
+ \fi\fi}
+
+\long\def\nododowriteMPgraphicline#1#2\MPend
+ {\ifx\next\empty\else\ifx\next\relax\else
+ \bgroup
+ \let\par\space
+ \iflongMPlines
+ \immediate\write\MPwrite{#1;}%
\else
- \convertargument#2#3\to\ascii
- \immediate\write\MPwrite{#1tex \ascii etex}%
- \egroup
- \dowriteMPgraphicline#4tex \relax etex\MPend
+ \edef\ascii{#1}%
+ \expandafter\flushMPgraphicline\ascii\empty;\relax;%
\fi
+ \egroup
\fi\fi}
%D This stripper is suboptimal in the sense that more
@@ -431,21 +470,26 @@
\the\everyMPgraphic
\ifrunMPgraphics
\openMPgraphicfile{1}{runtime}%
- \theMPinclusions % no reset here !
+ % no reset here !
+ \theMPinclusions
\else
- \openMPgraphicfile{0}{collected}%
- \theMPinclusions \let\theMPinclusions\relax % reset here !
+ \openMPgraphicfile{0}{collected}%
+ % reset here ! global added (due to adding \blabelgroup)
+ \theMPinclusions
+ \global\let\theMPinclusions\relax
\fi
\flushMPTEXgraphic
\ifMPrun \else
\immediate\write\MPwrite{let mprunend = end ;}%
\immediate\write\MPwrite{beginfig(\the\currentMPgraphic);}%
\fi
- \global\let\flushMPgraphics\closeMPgraphicfiles % \dodostopwritingMPgraphic
- \global\let\stopwritingMPgraphic=\dostopwritingMPgraphic}
+ \globallet\flushMPgraphics\closeMPgraphicfiles % \dodostopwritingMPgraphic
+ \globallet\stopwritingMPgraphic=\dostopwritingMPgraphic}
\let\MPgraphicfiles\empty
+\let\MPinputtranslation\empty
+
\def\openMPgraphicfile#1#2% #1=alwaysopen #2=message
{%\doifundefinedelse{\@@MPG\@@MPG\MPgraphicfile}
% {\donetrue
@@ -460,12 +504,16 @@
\@EA\let\@EA\MPwrite\csname\@@MPG\@@MPG\MPgraphicfile\endcsname
\ifdone
\immediate\openout\MPwrite=\MPgraphicfile.mp
+ \ifx\MPinputtranslation\empty\else
+ \immediate\write\MPwrite{\MPinputtranslation}%
+ \immediate\write\MPwrite{verbatimtex \MPinputtranslation etex ;}
+ \fi
\immediate\write\MPwrite{\letterpercent\space #2 graphics of job "\jobname"}%
\writeMPgraph
\setMPrandomseed
\fi}
-\def\dostopwritingMPgraphic%
+\def\dostopwritingMPgraphic
{\ifMPrun \else
\immediate\write\MPwrite{endfig;}%
\immediate\write\MPwrite{let end = mprunend ;}%
@@ -475,7 +523,7 @@
\fi
\elabelgroup}
-\def\dodostopwritingMPgraphic%
+\def\dodostopwritingMPgraphic
{\ifnum\currentMPgraphic>0
\donetrue
\else\ifMPrun
@@ -487,7 +535,7 @@
\finishwritingMPgraphics
\runMPgraphic\MPgraphicfile
\fi
- \global\let\flushMPgraphics\relax}
+ \globallet\flushMPgraphics\relax}
\def\finishwritingMPgraphics
{\immediate\write\MPwrite{end.}%
@@ -511,6 +559,30 @@
\def \allocateMPslot#1{\global\advance#1 1 }
\def\deallocateMPslot#1{}
+%D \macros
+%D {translateMPinput}
+%D
+%D For my polish friends:
+%D
+%D \starttypen
+%D % translate=il2-pl
+%D
+%D \translateMPinput{il2-pl}
+%D
+%D \startMPenvironment[global]
+%D \setupbodyfont[plr]
+%D \stopMPenvironment
+%D
+%D \TeX: ± ¶
+%D
+%D \startMPcode
+%D draw btex MetaPost: ± ¶ etex scaled 5 ;
+%D \stopMPcode
+%D \stoptypen
+
+\def\translateMPinput#1%
+ {\xdef\MPinputtranslation{\letterpercent -translate-file=#1\space}}
+
%D \macros
%D {setMPrandomseed}
%D
@@ -794,11 +866,6 @@
\ifx\undefined\interactionmode \chardef\interactionmode=255 \fi
-% \def\executeMPOST#1%
-% {mpost
-% \ifcase\interactionmode -int=batchmode \fi
-% \ifuseMETAFUNformat -progname=mpost -mem=metafun \fi #1}
-
\def\MPOSTbatchswitch {-int=batchmode}
\def\MPOSTformatswitch{-progname=mpost -mem=}
\def\MPOSTdriver {dvips}
@@ -814,17 +881,6 @@
--output=\MPOSTdriver\space
\ifuseMETAFUNformat --mpformat=metafun \fi --mptex --nomp --once #1}
-% \def\executeMetaPost#1% @EA's
-% {\ifrunMPTEXgraphics
-% \ifMPTEXgraphic
-% \executeMPTEX{#1}%
-% \else
-% \executeMPOST{#1}%
-% \fi
-% \else
-% \executeMPOST{#1}%
-% \fi}
-
\def\executeMetaPost
{\ifrunMPTEXgraphics
\ifMPTEXgraphic
@@ -1092,11 +1148,11 @@
\def\includeMPcharacters(#1) #2 #3 #4#5#6#7#8#9\relax
{\edef\temp{#4#5#6#7#8}%
\ifx\temp\PSnfont % round font size (to pt)
- \scratchdimen=#3pt
+ \scratchdimen#3pt
\ifdim\scratchdimen<1pt
\def\size{1pt}%
\else
- \advance\scratchdimen by .5pt
+ \advance\scratchdimen .5pt
\def\size##1.##2\relax{\def\size{##1pt}}%
\expandafter\size\the\scratchdimen\relax
\fi
@@ -1181,7 +1237,7 @@
\fi\fi
\ifdone
\message{[MP color conversion #1}%
- \endlinechar=-1
+ \endlinechar\minusone
\uncatcodespecials
\donefalse
\immediate\openout\scratchwrite=\convertMPcolorpath\convertMPcolorfile
@@ -1207,6 +1263,9 @@
%D copied back. We don't have to reduce to gray scales;
%D \METAPOST\ already takes care of that.
+%D BTW, this code is quite old, and not as complete as the
+%D \PDF\ converter, which also handles spot colors and so.
+
\def\handleMPcolor
{\expandafter\dohandleMPcolor\fileline setrgbcolor*\\}
@@ -1228,18 +1287,18 @@
\immediate\write\scratchwrite
{\@@cl@@s \space setgray #4}%
\else
- \dimen0=1pt \advance\dimen0 -#1pt
- \dimen2=1pt \advance\dimen2 -#2pt
- \dimen4=1pt \advance\dimen4 -#3pt
+ \dimen0=1\s!pt \advance\dimen0 -#1\s!pt
+ \dimen2=1\s!pt \advance\dimen2 -#2\s!pt
+ \dimen4=1\s!pt \advance\dimen4 -#3\s!pt
\ifreduceMPcolors
- \dimen6=\dimen0
- \ifdim\dimen2<\dimen6 \dimen6=\dimen2 \fi
- \ifdim\dimen4<\dimen6 \dimen6=\dimen4 \fi
+ \dimen6\dimen0
+ \ifdim\dimen2<\dimen6 \dimen6\dimen2 \fi
+ \ifdim\dimen4<\dimen6 \dimen6\dimen4 \fi
\advance\dimen0 -\dimen6
\advance\dimen2 -\dimen6
\advance\dimen4 -\dimen6
\else
- \dimen6=\zeropoint
+ \dimen6\zeropoint
\fi
\immediate\write\scratchwrite
{\withoutpt{\the\dimen0} \space
@@ -1251,7 +1310,7 @@
\egroup
\donetrue} % needed for message
-\def\handleMPcopy%
+\def\handleMPcopy
{\immediate\write\scratchwrite{\fileline}}
%D The next macro is needed for forced conversion. This macro
@@ -1261,17 +1320,17 @@
\ifx\convertRGBtoGRAY\undefined
\def\convertRGBtoGRAY#1#2#3%
- {\scratchdimen=#1\s!pt
- \scratchdimen=300\scratchdimen
- \scratchcounter=\scratchdimen
- \scratchdimen=#2\s!pt
- \scratchdimen=590\scratchdimen
- \advance\scratchcounter by \scratchdimen
- \scratchdimen=#3\s!pt
- \scratchdimen=110\scratchdimen
- \advance\scratchcounter by \scratchdimen
- \advance\scratchcounter by \!!medcard
- \divide\scratchcounter by \!!maxcard
+ {\scratchdimen#1\s!pt
+ \scratchdimen300\scratchdimen
+ \scratchcounter\scratchdimen
+ \scratchdimen#2\s!pt
+ \scratchdimen590\scratchdimen
+ \advance\scratchcounter \scratchdimen
+ \scratchdimen#3\s!pt
+ \scratchdimen110\scratchdimen
+ \advance\scratchcounter \scratchdimen
+ \advance\scratchcounter \!!medcard
+ \divide\scratchcounter \!!maxcard
\edef\@@cl@@s{\realcolorvalue\scratchcounter}}
\fi
@@ -1400,12 +1459,12 @@
\newif\ifMPshiftdrawing \MPshiftdrawingfalse
\def\resetMPdrawing
- {\global\let\MPdrawingdata\empty
+ {\globallet\MPdrawingdata\empty
\global\MPdrawingdonefalse}
\def\pushMPdrawing
{\pushmacro\MPdrawingdata
- \global\let\MPdrawingdata\empty}
+ \globallet\MPdrawingdata\empty}
\def\popMPdrawing
{\popmacro\MPdrawingdata}
@@ -1532,22 +1591,6 @@
\newif\ifrecycleMPslots \recycleMPslotstrue
-% \def\allocateMPslot#1%
-% {\ifrunMPgraphics
-% \ifcase\pdfoutput \recycleMPslotsfalse \fi
-% \else
-% \recycleMPslotsfalse
-% \fi
-% \ifrecycleMPslots
-% \doloop % slow but used seldom
-% {\doifundefined{\recurselevel MP}
-% {\global\letvalue{\recurselevel MP}=\empty
-% \global#1=\recurselevel\exitloop}}%
-% %\message{[MP slot + \number#1]%
-% \else
-% \global\advance#1 1
-% \fi}
-
%D When a graphic takes space in the text flow, we can run
%D into deadlock typesetting. In the first pass, the graphic
%D is not available, but in the second pass it is. The
@@ -1580,16 +1623,16 @@
\ifrecycleMPslots
\doloop % slow but used seldom
{\doifundefined{\recurselevel MP}
- {\global\letvalue{\recurselevel MP}\empty
+ {\letgvalueempty{\recurselevel MP}%
\global#1=\recurselevel
\exitloop}}%
% \message{[MP slot + \number#1]%
\else\ifMPstaticgraphic
\global#1\maxnofMPgraphics
- \global\advance\maxnofMPgraphics -1
+ \global\advance\maxnofMPgraphics \minusone
\else
\global#1\minnofMPgraphics
- \global\advance\minnofMPgraphics 1
+ \global\advance\minnofMPgraphics \plusone
\fi\fi
\ifnum\minnofMPgraphics<\maxnofMPgraphics \else
\writestatus{\m!systems}{increase \string\maxnofMPgraphics}%
@@ -1609,10 +1652,10 @@
%D Experimental and overloaded later, since we need to be
%D more clever due to \METAPOST's limit of 4~open files.
-\def\MPdatafile%
+\def\MPdatafile
{mp-\the\currentMPgraphic.mpd}
-\def\getMPdata%
+\def\getMPdata
{\input \MPdatafile\relax}
%D \macros
@@ -1634,7 +1677,7 @@
%D
%D this automatically places the graphic
-\long\def\startMPcode#1\stopMPcode%
+\long\def\startMPcode#1\stopMPcode
{\startuseMPgraphic{@@}#1\stopuseMPgraphic\useMPgraphic{@@}}
\protect \endinput
diff --git a/tex/context/base/supp-mrk.tex b/tex/context/base/supp-mrk.tex
index 85c11f428..f869e408a 100644
--- a/tex/context/base/supp-mrk.tex
+++ b/tex/context/base/supp-mrk.tex
@@ -210,10 +210,10 @@
{\bgroup
\makemarknames{#1}%
#2%
- \global\letvalue{\@@markcurrent@@\markname}\empty
- \global\letvalue{\@@marktop@@ \markname}\empty
- \global\letvalue{\@@markfirst@@ \markname}\empty
- \global\letvalue{\@@markbot@@ \markname}\empty
+ \letgvalueempty{\@@markcurrent@@\markname}%
+ \letgvalueempty{\@@marktop@@ \markname}%
+ \letgvalueempty{\@@markfirst@@ \markname}%
+ \letgvalueempty{\@@markbot@@ \markname}%
\setgvalue{\marklist}{\domark0{}}% beware of halfway definitions
\long\gdef#1{\addmarker#1}%
\egroup}
@@ -257,17 +257,17 @@
{\bgroup
\makemarknames{#1}%
\setgvalue{\@@markcurrent@@\markname}{#2}%
- \global\advance\currentmarker by 1
+ \global\advance\currentmarker 1
\normalmark{\the\currentmarker}%
\!!toksa\@EA\@EA\@EA{\csname\marklist\endcsname}%
\ifexpandmarks
- \setxvalue{\marklist}%
+ \setxvalue\marklist
{\the\!!toksa
\noexpand\domark
\the\currentmarker{#2}}%
\else
\!!toksb\@EA{#2}% one level, why ? handy for cs
- \setxvalue{\marklist}%
+ \setxvalue\marklist
{\the\!!toksa
\noexpand\domark
\the\currentmarker{\the\!!toksb}}%
@@ -337,7 +337,7 @@
\let\else\relax
%
\let\domark\doscanmarks
- \getvalue{\marklist}\lastmark
+ \getvalue\marklist\lastmark
% \global\@EA\let\csname\marklist\endcsname\savedmarklist
\egroup}
@@ -376,24 +376,34 @@
{\!!toksc\emptytoks}
\endTEX
-
+
%D The \ETEX\ way of doing things \unknown
\beginETEX \marks cum suis
\newtoks \listofmarks
-\def\@@mrk{mrk:} \def\@@trk{trk:} \def\@@crk{crk:}
+\def\@@prk{prk:}
+\def\@@mrk{mrk:}
+\def\@@trk{trk:}
+\def\@@frk{frk:}
+\def\@@brk{brk:}
+\def\@@crk{crk:}
%D We will use two state variables per mark, one to signal
%D that a new mark value is set, and one to trigger (on the
%D next page) the setting of the top mark.
-\def\checkedtopmarks#1{\csname\@@trk\string#1\endcsname}
-\def\thecurrentmarks#1{\csname\@@crk\string#1\endcsname}
+\def\checkedtopmarks #1{\csname\@@trk\string#1\endcsname}
+\def\checkedfirstmarks#1{\csname\@@frk\string#1\endcsname}
+\def\checkedbotmarks #1{\csname\@@brk\string#1\endcsname}
+\def\thecurrentmarks #1{\csname\@@crk\string#1\endcsname}
\long\def\setmark#1%
- {\global\@EA\mathchardef\csname\@@mrk\string#1\endcsname\zerocount
+ {%\writestatus{marks}{setting \string#1}\wait
+ \global\@EA\chardef\csname\@@mrk\string#1\endcsname\plusone
+ %\@EA\normalmarks\csname\@@prk\string#1\endcsname{1}%
+ \@EA\normalmarks\csname\@@prk\string#1\endcsname{\realfolio}%
\ifexpandmarks\@EA\setexpandedmark\else\@EA\setnormalmark\fi#1}
\def\setexpandedmark#1#2% % marks expand anyway
@@ -405,33 +415,45 @@
\@EA\xdef\csname\@@crk\string#1\endcsname{\the\scratchtoks}%
\normalmarks#1{\the\scratchtoks}} % one level expansion
-\def\checktopmark#1% is called often, so its minimized
- {\ifcase\csname\@@mrk\string#1\endcsname\else
- \@EA\dochecktopmark\@EA#1%
- \fi}
+\def\checktopmark#1%
+ {%\writestatus{marks}{checking \string#1}\wait
+ \ifcase\csname\@@mrk\string#1\endcsname\else\dochecktopmark#1\fi}
\def\dochecktopmark#1%
- {\ifnum\realpageno>\csname\@@mrk\string#1\endcsname\relax
- \@EA\gdef\csname\@@trk\string#1\endcsname{\normalbotmarks#1}%
+ {\ifcase0\@EA\normalfirstmarks\csname\@@prk\string#1\endcsname\else
+ \@EA\ifx\csname\@@frk\string#1\endcsname\empty
+ \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}%
+ \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}%
+ \else
+ \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}%
+ \global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
+ \fi
\fi}
-\def\resetmark#1% we cannot use \normalmarks#1{}}
- {\@EA\mathchardef\csname\@@mrk\string#1\endcsname\realfolio
- \global\@EA\let\csname\@@trk\string#1\endcsname\empty}
+\def\resetmark#1% we cannot use \normalmarks#1{}
+ {\global\@EA\chardef\csname\@@mrk\string#1\endcsname\zerocount
+ \@EA\normalmarks\csname\@@prk\string#1\endcsname{0}%
+ \global\@EA\let\csname\@@trk\string#1\endcsname\empty
+ \global\@EA\let\csname\@@frk\string#1\endcsname\empty
+ \global\@EA\let\csname\@@brk\string#1\endcsname\empty
+ \global\@EA\let\csname\@@crk\string#1\endcsname\empty}
\def\definenewmark#1%
- {\ifcsname\@@mrk\string#1\endcsname\else % this is etex -)
- \newmarks#1\appendtoks\checktopmark#1\to\listofmarks
+ {\ifcsname\@@prk\string#1\endcsname\else % this is etex -)
+ \newmarks#1\doglobal\appendtoks\checktopmark#1\to\listofmarks
+ \@EA\newmarks\csname\@@prk\string#1\endcsname % status mark
\fi
- \global\@EA\let\csname\@@crk\string#1\endcsname\empty
\global\@EA\mathchardef\csname\@@mrk\string#1\endcsname\zerocount
- \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks#1}}
+ \global\@EA\let\csname\@@crk\string#1\endcsname\empty
+ \@EA\gdef\csname\@@trk\string#1\endcsname{\normaltopmarks #1}%
+ \@EA\gdef\csname\@@frk\string#1\endcsname{\normalfirstmarks#1}%
+ \@EA\gdef\csname\@@brk\string#1\endcsname{\normalbotmarks #1}}
\let \newmark \definenewmark
-\let \newpersistentmark \definenewmark
+\let \newpersistentmark \newmarks % \definenewmark
\let \normalsetmark \setmark
-\def\setallmarks{\the\listofmarks}
+\def\getallmarks{\the\listofmarks} % \def\setallmarks{\the\listofmarks}
%D In \type {page-ini} or \type {core-mar} we should say:
%D
@@ -442,12 +464,12 @@
\let\getcurrentmark \thecurrentmarks
\let\gettopmark \checkedtopmarks
-\let\getbottommark \normalbotmarks
-\let\getfirstmark \normalfirstmarks
+\let\getbottommark \checkedbotmarks % \normalbotmarks
+\let\getfirstmark \checkedfirstmarks % \normalfirstmarks
\let\getsplitbottommark \normalsplitbotmarks
\let\getsplitfirstmark \normalsplitfirstmarks
-\let\getbotmark \normalbotmarks
+\let\getbotmark \getbottommark
\let\getsplitbotmark \normalsplitbotmarks
\let\getsplittopmark \normalsplitfirstmarks
@@ -542,4 +564,30 @@
%D can slow down considerably. This drawback is removed in
%D \ETEX\ mode.
+\beginTEX
+
+\let\rawnewmark \newmark
+\let\rawdefinemark \newmark
+\let\rawsetmark \setmark
+\let\rawgettopmark \gettopmark
+\let\rawgetfirstmark \getfirstmark
+\let\rawgetbotmark \getbotmark
+\let\rawgetsplitbotmark \normalsplitbotmark
+\let\rawgetsplitfirstmark\normalsplitfirstmark
+
+\endTEX
+
+\beginETEX
+
+\let\rawnewmark \newmarks
+\let\rawdefinemark \newmarks
+\let\rawsetmark \normalmarks
+\let\rawgettopmark \normaltopmarks
+\let\rawgetfirstmark \normalfirstmarks
+\let\rawgetbotmark \normalbotmarks
+\let\rawgetsplitbotmark \normalsplitbotmarks
+\let\rawgetsplitfirstmark\normalsplitfirstmarks
+
+\endETEX
+
\protect \endinput
diff --git a/tex/context/base/supp-num.tex b/tex/context/base/supp-num.tex
index 13e61a94f..610c5b6b7 100644
--- a/tex/context/base/supp-num.tex
+++ b/tex/context/base/supp-num.tex
@@ -93,12 +93,22 @@
%D the grouped call, the other branch handles the fuzzy
%D delimited calls.
+% \unexpanded\def\digits
+% {\bgroup\let~@\doifnextcharelse\bgroup\dodigits\grabdigit}
+
\unexpanded\def\digits
- {\bgroup\let~@\doifnextcharelse\bgroup\dodigits\grabdigit}
+ {\bgroup
+ \let~@%
+ \doifnextcharelse\bgroup
+ \dodigits
+ {\doifnextcharelse\normalmathshift\domathdigits\grabdigit}}
\def\dodigits#1%
{\grabdigit#1\relax}
+\def\domathdigits$#1$%
+ {\mbox{\grabdigit#1\relax}} % adding $ $ goes wrong in tabulate
+
\def\grabdigit
{\futurelet\next\scandigit}
@@ -114,7 +124,7 @@
\ifx\normalmathshift\undefined \let\normalmathshift=$ \fi
-\def\scandigit%
+\def\scandigit
{\ifx\next\blankspace
\let\next\handledigits
\else\ifx\next\nextobeyedline % the indirect one
@@ -147,11 +157,11 @@
\let\grabdigit\handledigits
\else\ifcase\powerdigits
\if#1E%
- \chardef\powerdigits1
+ \chardef\powerdigits\plusone
\else\if#1e%
- \chardef\powerdigits1
+ \chardef\powerdigits\plusone
\else\if#1^%
- \chardef\powerdigits1
+ \chardef\powerdigits\plusone
\else
\savedigit\collecteddigits#1%
%\doifnumberelse{#1}
@@ -169,7 +179,7 @@
\let\handlemathdigits\firstofoneargument
\let\handletextdigits\mathematics
-\def\handledigits%
+\def\handledigits
{%\ifcase\powerdigits
% \edef\collecteddigits{\collecteddigits\saveddigits}%
%\else
@@ -185,50 +195,101 @@
%D Although we could do with one pass, a second pass for
%D handling the stored sequence is more readable.
-\def\dohandledigits%
+\def\dohandledigits
{\mathcode`\,="013B \mathcode`\.="013A % pretty hard coded
\expandafter\handletokens\collecteddigits\with\scandigits
\ifcase\powerdigits\else\digitpowerseparator^{\savedpowerdigits}\fi}
\def\doscandigit#1%
- {\ifcase\skipdigit\else\hphantom{\fi
- \ifnum\digitinputmode=#1\relax
- \ifcase\digitoutputmode
- \or .%
- \or ,%
- \or \mskip\thinmuskip
- \or \mskip\thinmuskip
- \or \mskip\thickmuskip
- \or \mskip\thickmuskip
- \fi
- \else
- \ifodd\digitoutputmode,\else.\fi
- \fi
- \ifcase\skipdigit\else}\fi}
+ {\ifcase\skipdigit\hbox\else\hphantom\fi\bgroup
+ \mathematics % brr, needed because of stored punctuation
+ {\ifnum\digitinputmode=#1\relax
+ \ifcase\digitoutputmode
+ \or .%
+ \or ,%
+ \or \mskip\thinmuskip
+ \or \mskip\thinmuskip
+ \or \mskip\thickmuskip
+ \or \mskip\thickmuskip
+ \fi
+ \else
+ \ifodd\digitoutputmode,\else.\fi
+ \fi}%
+ \egroup}
+
%D The signs can be made smaller and sqeezed into the width
%D of a digit. Watch the \type {\fontdimen22} trickery (this
%D font related register stored the math axis).
+% \def\scandigits#1%
+% {\if#1.\doscandigit1\chardef\skipdigit0\else
+% \if#1,\doscandigit2\chardef\skipdigit0\else
+% \if#1@\hphantom{0}\chardef\skipdigit1\else
+% \if#1_\hphantom{0}\chardef\skipdigit1\else
+% \if#1/\digitsgn{\hphantom{+}}\chardef\skipdigit0\else
+% \if#1-\digitsgn-\chardef\skipdigit0\else
+% \if#1+\digitsgn+\chardef\skipdigit0\else
+% \if#1=\digitsgn\zeroamount\chardef\skipdigit0\else
+% \if#1s\digitsgn{\hphantom{\positive}}\chardef\skipdigit0\else
+% \if#1p\digitsgn\positive\chardef\skipdigit0\else
+% \if#1m\digitsgn\negative\chardef\skipdigit0\else
+% \if#1n\digitsgn\negative\chardef\skipdigit0\else
+% #1\chardef\skipdigit0\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+% \def\digitsep#1%
+% {\doscandigit#1\chardef\skipdigit0}
+%
+% \def\digitnop
+% {\hphantom{0}\chardef\skipdigit1}
+
+% 0,=
+% 0,== second = results in delta(00,=)
+% 0,- is invalid, should be = but we try to catch this error
+% 0,-- is invalid, but catched as ==
+
+\def\digitzeroamount
+ {\digitsgn\zeroamount
+ \def\digitzeroamount
+ {\hphantom
+ {00\setbox\scratchbox\hbox{$\zeroamount$}%
+ \hskip-\wd\scratchbox}%
+ \let\digitzeroamount\empty}}
+
\def\scandigits#1%
- {\if#1.\doscandigit1\chardef\skipdigit0\else
- \if#1,\doscandigit2\chardef\skipdigit0\else
- \if#1@\hphantom{0}\chardef\skipdigit1\else
- \if#1_\hphantom{0}\chardef\skipdigit1\else
+ {\if#1.\digitsep1\else
+ \if#1,\digitsep2\else
+ \if#1@\digitnop \else
+ \if#1_\digitnop \else
\if#1/\digitsgn{\hphantom{+}}\chardef\skipdigit0\else
- \if#1-\digitsgn-\chardef\skipdigit0\else
+ \if#1-\ifcase\digitsepbox\digitsgn-\else
+ \box\digitsepbox\digitzeroamount \fi\chardef\skipdigit0\else
\if#1+\digitsgn+\chardef\skipdigit0\else
- \if#1=\digitsgn\zeroamount\chardef\skipdigit0\else
+ \if#1=\box\digitsepbox\digitzeroamount \chardef\skipdigit0\else
\if#1s\digitsgn{\hphantom{\positive}}\chardef\skipdigit0\else
\if#1p\digitsgn\positive\chardef\skipdigit0\else
\if#1m\digitsgn\negative\chardef\skipdigit0\else
\if#1n\digitsgn\negative\chardef\skipdigit0\else
- #1\chardef\skipdigit0\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+ \box\digitsepbox #1\chardef\skipdigit0\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+\newbox\digitsepbox \chardef\autodigitmode=1
+
+\def\digitsep#1%
+ {\ifcase\autodigitmode
+ \doscandigit#1%
+ \else
+ \setbox\digitsepbox\hbox{\doscandigit#1}
+ \fi
+ \chardef\skipdigit0}
+
+\def\digitnop
+ {\hphantom{\box\digitsepbox}%
+ \hphantom{0}\chardef\skipdigit1}
\def\digitsgn#1%
{\ifcase\digitsignmode#1\else
\hbox
- {\setbox\scratchbox=\hbox{0}%
+ {\setbox\scratchbox\hbox{0}%
\scratchdimen\fontdimen22\textfont2
\def\digitsgn##1##2%
{\advance\scratchdimen-\fontdimen22##12
@@ -332,7 +393,7 @@
%D \macros
%D {digittemplate}
%D
-%D Users can specify the way they enter those digits by sayon
+%D Users can specify the way they enter those digits by saying
%D something like:
%D
%D \starttypen
@@ -340,14 +401,12 @@
%D \stoptypen
\def\digittemplate #1 %
- {\chardef\digitinputmode=0
+ {\chardef\digitinputmode\zerocount
\handletokens#1\with\scandigittemplate}
\def\scandigittemplate#1%
- {\if #1.\ifcase\digitinputmode\chardef\digitinputmode=1 \fi% period
- \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode=2 \fi% comma
+ {\if #1.\ifcase\digitinputmode\chardef\digitinputmode1 \fi% period
+ \else\if#1,\ifcase\digitinputmode\chardef\digitinputmode2 \fi% comma
\fi\fi}
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/supp-pdf.tex b/tex/context/base/supp-pdf.tex
index b4d5a00c5..95a27af66 100644
--- a/tex/context/base/supp-pdf.tex
+++ b/tex/context/base/supp-pdf.tex
@@ -109,15 +109,15 @@
\def\dopdfclippedimage#1#2#3#4#5#6%
{\bgroup
\pdfximage#1{#2}%
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\pdfrefximage\pdflastximage}%
- \hsize=\wd\scratchbox
+ \hsize\wd\scratchbox
\advance\hsize -#3
\advance\hsize -#4
- \vsize=\ht\scratchbox
+ \vsize\ht\scratchbox
\advance\vsize -#5
\advance\vsize -#6
- \setbox\scratchbox=\vbox to \vsize
+ \setbox\scratchbox\vbox to \vsize
{\vskip-#5\hbox to \hsize{\hskip-#3\box\scratchbox\hss}}%
\pdfxform\scratchbox
\pdfrefxform\pdflastxform
@@ -197,6 +197,8 @@
%D dimensions. Beware: the user supplied values are not the
%D bounding box ones!
+% this will become obsolete
+
\newif\ifPDFmediaboxprefered
\def\setPDFboundingbox#1#2#3#4#5#6%
@@ -214,8 +216,8 @@
\def\setPDFmediabox#1[#2 #3 #4 #5]#6\done%
{\dimen2=#2bp\dimen2=-\dimen2
\dimen4=#3bp\dimen4=-\dimen4
- \dimen6=#4bp\advance\dimen6 by \dimen2
- \dimen8=#5bp\advance\dimen8 by \dimen4
+ \dimen6=#4bp\advance\dimen6 \dimen2
+ \dimen8=#5bp\advance\dimen8 \dimen4
\setPDFboundingbox{\dimen2}{\dimen4}{\dimen6}{\dimen8}\PDFxscale\PDFyscale}
\def\checkPDFmediabox#1/MediaBox#2#3\done%
@@ -230,7 +232,7 @@
\def\handlePDFline%
{\ifx\@@PDFstream@@\fileline
- \let\doprocessPDFline=\copyPDFobject
+ \let\doprocessPDFline\copyPDFobject
\startPDFtoPDF
\else\ifPDFmediaboxprefered
\expandafter\checkPDFmediabox\fileline/MediaBox\relax\done
@@ -239,12 +241,12 @@
\def\copyPDFobject%
{\ifx\@@PDFendstream@@\fileline
\ifPDFmediaboxprefered
- \let\doprocessPDFline=\findPDFmediabox
+ \let\doprocessPDFline\findPDFmediabox
\else
- \let\doprocessPDFline=\relax
+ \let\doprocessPDFline\relax
\fi
\else
- \advance\scratchcounter by 1
+ \advance\scratchcounter 1
\PDFcode{\fileline}%
\fi}
@@ -324,9 +326,9 @@
\def\checkPDFtypepage##1/Type /Page##2##3\done%
{\ifx##2\relax
\else\if##2s% accept /Page and /Pages
- \let\doprocessPDFline=\findPDFmediabox
+ \let\doprocessPDFline\findPDFmediabox
\else
- \let\doprocessPDFline=\findPDFmediabox
+ \let\doprocessPDFline\findPDFmediabox
\fi\fi}%
\def\findPDFtypepage%
{\expandafter\checkPDFtypepage\fileline/Type /Page\relax\done}%
@@ -337,7 +339,7 @@
\fi}%
\def\findPDFmediabox%
{\expandafter\checkPDFmediabox\fileline/MediaBox\relax\done}%
- \let\doprocessPDFline=\findPDFtypepage
+ \let\doprocessPDFline\findPDFtypepage
\doprocessfile\scratchread{#1}\doprocessPDFline
\egroup
\ifx\PDFxoffset\undefined
@@ -707,6 +709,10 @@
{\PDFcode{\!MPgMPa1 g
\!MPgMPa1 G}}
+\def\handleMPspotcolor
+ {\PDFcode{0 g
+ 0 G}}
+
%D Beginning and ending the graphics is taken care of by the
%D macro \type{\handleMPgraphic}, which is redefined when
%D the first graphics operator is met.
@@ -765,10 +771,10 @@
\xdef\MPyoffset{\withoutpt{\the\dimen2}}%
\dimen0=#2bp\dimen0=-\dimen0
\dimen2=#3bp\dimen2=-\dimen2
- \advance\dimen0 by #4bp
+ \advance\dimen0 #4bp
\dimen0=\MPxscale\dimen0
\xdef\MPwidth{\the\dimen0}%
- \advance\dimen2 by #5bp
+ \advance\dimen2 #5bp
\xdef\MPyshift{\the\dimen2}% unscaled
\dimen2=\MPyscale\dimen2
\xdef\MPheight{\the\dimen2}%
@@ -829,9 +835,9 @@
\let\MPfshowcommand\empty
-\def\handleMPfshow%
+\def\handleMPfshow
{\bgroup
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\obeyMPspecials
\edef\size{\gMPa\nofMParguments}%
\ifx\size\PSnfont % round font size (to pt)
@@ -861,7 +867,8 @@
% we need to catch ( a ) (a a a) (\123 \123 \123) etc
\scratchcounter=1
\def\dodo##1% Andreas Fieger's bug: (\304...)
- {\ifx##1\MPspacechar\MPspacechar\else\expandafter##1\fi}%
+ {\edef\!!stringa{##1\empty\empty}% and another one: ( 11) -> \ifx 11
+ \ifx\!!stringa\MPspacechar\MPspacechar\else\expandafter##1\fi}%
\def\do(##1{\dodo{##1}}%
\dogMPa\scratchcounter\MPspacechar
\let\do\relax
@@ -888,7 +895,7 @@
% \PDFcode{Q}%
% \egroup}
%
- \setbox\scratchbox=\hbox
+ \setbox\scratchbox\hbox
{\hskip\lastMPmoveX bp\raise\lastMPmoveY bp\box\scratchbox}%
\ht\scratchbox\!!zeropoint
\dp\scratchbox\!!zeropoint
@@ -911,7 +918,11 @@
%D safely assume that \METAPOST\ considers \type {\char32} to
%D be the space.
-\def\MPspacechar{\setbox\scratchbox=\hbox{\char32}\kern\wd\scratchbox}
+\def\MPspacechar{\setbox\scratchbox\hbox{\char32}\kern\wd\scratchbox}
+
+%D Well, this does not work with math fonts, so:
+
+\def\MPspacechar{\char32\relax}
%D Most operators are just converted and keep their
%D arguments. Dashes however need a bit different treatment,
@@ -925,7 +936,7 @@
\def\handleMPsetdash%
{\bgroup
\def\somestring{[}%
- \scratchcounter=1
+ \scratchcounter1
\loop
\ifnum\scratchcounter<\nofMParguments
\edef\somestring{\somestring\space\gMPa\scratchcounter}%
@@ -1061,8 +1072,8 @@
\fi}
\def\flushconcatMPpath%
- {\scratchcounter=\nofMPsegments
- \nofMPsegments=1
+ {\scratchcounter\nofMPsegments
+ \nofMPsegments1
\loop
\flushconcatMPsegment
\advance\nofMPsegments 1
@@ -1616,7 +1627,7 @@
\fi
\let\handleMPsequence\dohandleMPsequence
\resetMPstack
- \nofMPsegments=0
+ \nofMPsegments0
\handleMPsequence}
%D The following \METAPOST\ code is quite valid but, when
@@ -1635,7 +1646,7 @@
{\ifcase\finiMPpath
\ifnum\nofMPsegments<3 % n is one ahead
\message{omitting zero clip path}%
- \nofMPsegments=0
+ \nofMPsegments0
\fi
\fi}
@@ -1752,7 +1763,7 @@
\def\convertMPtoPDF#1#2#3%
{\bgroup
\ifx\pdfdecimaldigits\undefined\else \pdfdecimaldigits=5 \fi % new
- \setbox\scratchbox=\vbox\bgroup
+ \setbox\scratchbox\vbox\bgroup
\forgetall
\offinterlineskip
\startMPresources
@@ -1828,16 +1839,16 @@
\def\PDFMPformoffset
{\ifx\objectoffset\undefined\!!zeropoint\else\objectoffset\fi}
-\def\finishMPgraphic%
+\def\finishMPgraphic
{\stopMPresources
\egroup
\ifx\pdftexversion\undefined\else\ifnum\pdftexversion<14 % for the moment
- \chardef\makeMPintoPDFobject=0
+ \chardef\makeMPintoPDFobject0
\fi\fi
\ifcase\makeMPintoPDFobject\or\or\ifx\currentPDFresources\empty\else
- \chardef\makeMPintoPDFobject=1
+ \chardef\makeMPintoPDFobject1
\fi\fi
- \setbox\scratchbox=\vbox
+ \setbox\scratchbox\vbox
{\forgetall
\hbox
{\PDFcode{q \MPxscale\space 0 0 \MPyscale\space \MPxoffset\space \MPyoffset\space cm}%
@@ -1849,7 +1860,7 @@
\ifcase\makeMPintoPDFobject
\box\scratchbox
\or
- \scratchdimen=\PDFMPformoffset\relax
+ \scratchdimen\PDFMPformoffset\relax
\ifdim\scratchdimen>\!!zeropoint % compensate for error
\setbox\scratchbox=\vbox spread 2\scratchdimen
{\forgetall
diff --git a/tex/context/base/supp-ran.tex b/tex/context/base/supp-ran.tex
index 094d0f36b..43aff0ed7 100644
--- a/tex/context/base/supp-ran.tex
+++ b/tex/context/base/supp-ran.tex
@@ -86,8 +86,8 @@
\unprotect
\def\setrandim#1#2#3% dimen register, minimum length, maximum length
- {\scratchdimen=#2\edef\!!stringa{\number\scratchdimen}%
- \scratchdimen=#3\edef\!!stringb{\number\scratchdimen}%
+ {\scratchdimen#2\edef\!!stringa{\number\scratchdimen}%
+ \scratchdimen#3\edef\!!stringb{\number\scratchdimen}%
\setrannum\ranval\!!stringa\!!stringb
#1\ranval sp\relax}
@@ -95,14 +95,14 @@
\fi
-\def\freezerandomseed%
+\def\freezerandomseed
{\ifcase\randomseedfrozen
- \nextrandom \global\chardef\randomseedfrozen=1
+ \nextrandom \global\chardef\randomseedfrozen\plusone
\fi}
-\def\defrostrandomseed%
+\def\defrostrandomseed
{\ifcase\randomseedfrozen\else
- \global\chardef\randomseedfrozen=0 \nextrandom
+ \global\chardef\randomseedfrozen\zerocount \nextrandom
\fi}
\let\getrandomcount = \setrannum
diff --git a/tex/context/base/supp-spe.tex b/tex/context/base/supp-spe.tex
index 1e68478f2..a03eb4ba2 100644
--- a/tex/context/base/supp-spe.tex
+++ b/tex/context/base/supp-spe.tex
@@ -65,8 +65,7 @@
\def\@rds@{@rds@}
-\def\redefinespecial #1 %
- {\setvalue{\@rds@#1}}
+\def\redefinespecial #1 {\setvalue{\@rds@#1}}
%D \macros
%D {mimmickspecials}
@@ -80,8 +79,8 @@
%D This commands redefines the \PLAIN\ \TEX\ primitive
%D \type{\special}.
-\def\mimmickspecials%
- {\let\special=\domimmickspecial}
+\def\mimmickspecials
+ {\let\special\domimmickspecial}
%D The special mimmicking macro first looks if it can find an
%D colon terminated tag, next it searches for a tag that end
@@ -91,21 +90,21 @@
\def\domimmickspecial#1%
{\domimmickcolonspecial#1:\relax/:\relax/\end}
-\def\domimmickcolonspecial#1:#2#3:\relax/#4\end%
+\def\domimmickcolonspecial#1:#2#3:\relax/#4\end
{\ifx#2\relax
\domimmickspacespecial#1 \relax/ \relax/\end
\else
\dodomimmickspecial#1:\using#2#3\endspecial
\fi}
-\def\domimmickspacespecial#1 #2#3 \relax/#4\end%
+\def\domimmickspacespecial#1 #2#3 \relax/#4\end
{\ifx#2\relax
\dodomimmickspecial#1\using\endspecial
\else
\dodomimmickspecial#1\using#2#3\endspecial
\fi}
-\def\dodomimmickspecial#1\using#2\endspecial%
+\def\dodomimmickspecial#1\using#2\endspecial
{\expandafter\ifx\csname\@rds@#1\endcsname\relax % \doifdefinedelse
\defaultspecial{#1 #2}%
\else
@@ -144,8 +143,7 @@
%D
%D This can be handy when specials have much in common.
-\def\mimmickspecial #1 %
- {\getvalue{\@rds@#1}}
+\def\mimmickspecial #1 {\getvalue{\@rds@#1}}
%D \macros
%D {normalspecial,defaultspecial}
@@ -163,6 +161,4 @@
\let\normalspecial =\special
\let\defaultspecial=\special
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/supp-tpi.tex b/tex/context/base/supp-tpi.tex
index 47bb4d5b5..c01d1fef5 100644
--- a/tex/context/base/supp-tpi.tex
+++ b/tex/context/base/supp-tpi.tex
@@ -108,13 +108,15 @@
% BETER: check for context and include mp-tool.mp
-\def\startTPICspecials%
+\def\startTPICspecials
{\bgroup
- \let\startTPICspecials=\relax
+ \let\startTPICspecials\relax
\aftergroup\stopTPICspecials
- \startwritingMPgraphic
- \writeMPgraphic{input mp-tool.mp;}%
- \writeMPgraphic{pair p[];}}
+ \resetMPdrawing
+ \startMPdrawing
+ input mp-tool.mp;
+ pair p[];
+ \stopMPdrawing}
%D As soon as we begin a picture, we inhibit nesting by
%D relaxing the start macro. The first \METAPOST\ action we
@@ -125,18 +127,19 @@
%D reflect the current \METAPOST\ picture, stored in the system
%D variable {\it currentpicture}, around the $x$-axis.
-\def\stopTPICspecials% needs to be adapted to direct run -> \useMPgraphic
- {\writeMPgraphic % otherwise \flushMPgraphics interferes
- {currentpicture:=currentpicture reflectedabout ((0,0),(4095,0));}%
- \stopwritingMPgraphic
- \flushMPgraphics
- \loadcurrentMPgraphic{}%
- \setbox\MPgraphicbox=\hbox to \!!zeropoint
+\def\stopTPICspecials
+ {\startMPdrawing
+ currentpicture:=currentpicture reflectedabout ((0,0),(4095,0));
+ \stopMPdrawing
+ \MPdrawingdonetrue
+ \setbox\MPgraphicbox\hbox
+ {\getMPdrawing}%
+ \setbox\MPgraphicbox\hbox to \zeropoint
{\kern-\wd\MPgraphicbox
- \vbox to \!!zeropoint{\box\MPgraphicbox\vss}\hss}%
- \ht\MPgraphicbox=\!!zeropoint
- \wd\MPgraphicbox=\!!zeropoint
- \dp\MPgraphicbox=\!!zeropoint
+ \vbox to \zeropoint{\box\MPgraphicbox\vss}\hss}%
+ \ht\MPgraphicbox\zeropoint
+ \wd\MPgraphicbox\zeropoint
+ \dp\MPgraphicbox\zeropoint
\box\MPgraphicbox
\egroup}
@@ -178,17 +181,21 @@
\redefinespecial pa \using#1 #2\endspecial
{\startTPICspecials
\bgroup
- \global\advance\TPICcounter by 1
+ \global\advance\TPICcounter 1
\dimen0=#1pt \dimen0=.07227\dimen0
\dimen2=#2pt \dimen2=.07227\dimen2
- \writeMPgraphic{p[\the\TPICcounter]:=(\the\dimen0,\the\dimen2);}%
+ \startMPdrawing
+ p[\the\TPICcounter]:=(\the\dimen0,\the\dimen2);
+ \stopMPdrawing
\egroup}
\redefinespecial pn \using#1\endspecial
{\startTPICspecials
\bgroup
\dimen0=#1pt \dimen0=.07227\dimen0
- \writeMPgraphic{pickup pencircle scaled \the\dimen0;}%
+ \startMPdrawing
+ pickup pencircle scaled \the\dimen0;
+ \stopMPdrawing
\egroup}
\redefinespecial sh \using#1\endspecial
@@ -264,14 +271,15 @@
\ifTPICdraw
\def\TPICgrayscale{}%
\fi
- \writeMPgraphic
- {\ifTPICfill fill\fi\ifTPICdraw draw\fi\space
- for i:=1 upto \the\TPICcounter-1:
- p[i]\ifTPICcurve..\else--\fi
- endfor
- p[\the\TPICcounter]
- \ifTPICfill\ifTPICcurve..\else--\fi cycle \fi
- \TPIClinetype\space\TPICgrayscale;}%
+ \startMPdrawing
+ \ifTPICfill fill\fi\ifTPICdraw draw\fi\space
+ for i:=1 upto \the\TPICcounter-1:
+ p[i]\ifTPICcurve..\else--\fi
+ endfor
+ p[\the\TPICcounter]
+ \ifTPICfill\ifTPICcurve..\else--\fi cycle \fi
+ \TPIClinetype\space\TPICgrayscale;
+ \stopMPdrawing
\resetTPICvariables
\egroup}
@@ -291,12 +299,13 @@
\dimen12=#4pt\dimen12=.14454\dimen12
\dimen20=#5pt
\dimen22=#6pt
- \writeMPgraphic
- {\ifTPICfill fill\fi\ifTPICdraw draw\fi \space
- \ifTPICfill\else subpath 4/3.14159*(\the\dimen20,\the\dimen22) of \fi
- fullcircle xscaled \the\dimen10 \space yscaled \the\dimen12 \space
- shifted (\the\dimen0,\the\dimen2)
- \TPIClinetype \space \TPICgrayscale;}%
+ \startMPdrawing
+ \ifTPICfill fill\fi\ifTPICdraw draw\fi \space
+ \ifTPICfill\else subpath 4/3.14159*(\the\dimen20,\the\dimen22) of \fi
+ fullcircle xscaled \the\dimen10 \space yscaled \the\dimen12 \space
+ shifted (\the\dimen0,\the\dimen2)
+ \TPIClinetype \space \TPICgrayscale;
+ \stopMPdrawing
\resetTPICvariables
\egroup}
@@ -304,12 +313,12 @@
%D cannot be sure if any further grouping is used by the
%D envelopping macros.
-\def\resetTPICvariables%
- {\global\TPICcounter=0
+\def\resetTPICvariables
+ {\global\TPICcounter\zerocount
\global\TPICfillfalse
\global\TPICdrawfalse
- \global\let\TPIClinetype=\empty
- \global\let\TPICgrayscale=\empty}
+ \global\let\TPIClinetype\empty
+ \global\let\TPICgrayscale\empty}
%D I have to admit that by using the \METAPOST\ B‚zier cubics
%D routines these implementation does produce better curves
@@ -337,6 +346,4 @@
%D uses delinberately the not that accurate features of
%D b-splines. Hereby the user is warned.
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/supp-vis.tex b/tex/context/base/supp-vis.tex
index 9979e5179..bf982d82f 100644
--- a/tex/context/base/supp-vis.tex
+++ b/tex/context/base/supp-vis.tex
@@ -101,13 +101,13 @@
%D unwanted results. We can therefore turn all those things
%D off with \type{\dontinterfere}.
-\def\dontinterfere%
- {\everypar = {}%
- \let\par = \endgraf
- \parindent = \!!zeropoint
- \parskip = \!!zeropoint
- \leftskip = \!!zeropoint
- \rightskip = \!!zeropoint
+\def\dontinterfere
+ {\everypar \emptytoks
+ \let\par \endgraf
+ \parindent\zeropoint
+ \parskip \zeropoint
+ \leftskip \zeropoint
+ \rightskip\zeropoint
\relax}
%D \macros
@@ -117,9 +117,9 @@
%D don't want to be confronted with to many over- and underfull
%D messages we introduce \type{\dontcomplain}.
-\def\dontcomplain%
- {\hbadness=\!!tenthousand \vbadness=\hbadness
- \hfuzz =\maxdimen \vfuzz =\hfuzz}
+\def\dontcomplain
+ {\hbadness\!!tenthousand \vbadness\hbadness
+ \hfuzz \maxdimen \vfuzz \hfuzz}
%D \macros
%D {normaloffinterlineskip}
@@ -128,7 +128,7 @@
%D \type{\offinterlineskip}.
\ifx\undefined\normaloffinterlineskip
- \let\normaloffinterlineskip=\offinterlineskip
+ \let\normaloffinterlineskip\offinterlineskip
\fi
%D \macros
@@ -200,11 +200,11 @@
%D offers \type{\hfilneg} and \type{\vfilneg}, we define our
%D own alternative double \type{ll}'ed ones.
-\def\hfillneg%
- {\normalhskip\!!zeropoint \!!plus-1fill\relax}
+\def\hfillneg
+ {\normalhskip\zeropoint \!!plus-1fill\relax}
-\def\vfillneg%
- {\normalvskip\!!zeropoint \!!plus-1fill\relax}
+\def\vfillneg
+ {\normalvskip\zeropoint \!!plus-1fill\relax}
%D \macros
%D {normalhss,normalhfil,normalhfill,
@@ -240,10 +240,10 @@
\ifx\tlap\undefined
- \def\rlap#1{\normalhbox to \!!zeropoint{#1\normalhss}}
- \def\llap#1{\normalhbox to \!!zeropoint{\normalhss#1}}
- \def\blap#1{\normalvbox to \!!zeropoint{#1\normalvss}}
- \def\tlap#1{\normalvbox to \!!zeropoint{\normalvss#1}}
+ \def\rlap#1{\normalhbox to \zeropoint{#1\normalhss}}
+ \def\llap#1{\normalhbox to \zeropoint{\normalhss#1}}
+ \def\blap#1{\normalvbox to \zeropoint{#1\normalvss}}
+ \def\tlap#1{\normalvbox to \zeropoint{\normalvss#1}}
\fi
@@ -339,20 +339,20 @@
{\edef\ruledheight{\the\ht#1}%
\edef\ruleddepth {\the\dp#1}%
\edef\ruledwidth {\the\wd#1}%
- \setbox\scratchbox=\normalvbox
+ \setbox\scratchbox\normalvbox
{\dontcomplain
\normaloffinterlineskip
\visualhrule
\!!height\boxrulewidth
- \iftoprule\else\!!width\!!zeropoint\fi
+ \iftoprule\else\!!width\zeropoint\fi
\normalvskip-\boxrulewidth
\normalhbox to \ruledwidth
{\visualvrule
\!!height\ruledheight
\!!depth\ruleddepth
\!!width\ifleftrule\else0\fi\boxrulewidth
- \ifdim\ruledheight>\!!zeropoint \else \baselinerulefalse \fi
- \ifdim\ruleddepth>\!!zeropoint \else \baselinerulefalse \fi
+ \ifdim\ruledheight>\zeropoint \else \baselinerulefalse \fi
+ \ifdim\ruleddepth>\zeropoint \else \baselinerulefalse \fi
\ifbaselinerule
\ifdim\ruledwidth<20\boxrulewidth
\baselinefilltrue
@@ -376,8 +376,8 @@
\normalvskip-\boxrulewidth
\visualhrule
\!!height\boxrulewidth
- \ifbottomrule\else\!!width\!!zeropoint\fi}%
- \wd#1=\!!zeropoint
+ \ifbottomrule\else\!!width\zeropoint\fi}%
+ \wd#1\zeropoint
\setbox#1=\ifhbox#1\normalhbox\else\normalvbox\fi
{\normalhbox
{\box#1%
@@ -416,7 +416,7 @@
%D
%D \ShowBufferedExampleBox
-\unexpanded\def\ruledhbox%
+\unexpanded\def\ruledhbox
{\normalhbox\bgroup
\dowithnextbox{\makeruledbox\nextbox\box\nextbox\egroup}%
\normalhbox}
@@ -434,7 +434,7 @@
%D
%D \ShowBufferedExampleBox
-\unexpanded\def\ruledvbox%
+\unexpanded\def\ruledvbox
{\normalvbox\bgroup
\dowithnextbox{\makeruledbox\nextbox\box\nextbox\egroup}%
\normalvbox}
@@ -452,7 +452,7 @@
%D
%D \ShowBufferedExampleBox
-\unexpanded\def\ruledvtop%
+\unexpanded\def\ruledvtop
{\normalvtop\bgroup
\dowithnextbox{\makeruledbox\nextbox\box\nextbox\egroup}%
\normalvtop}
@@ -469,14 +469,14 @@
%D
%D \ShowBufferedExampleBox
-\unexpanded\def\ruledvcenter%
+\unexpanded\def\ruledvcenter
{\normalvbox\bgroup
\dontinterfere
\dowithnextbox
- {\scratchdimen=.5\ht\nextbox
- \advance\scratchdimen by .5\dp\nextbox
- \ht\nextbox=\scratchdimen
- \dp\nextbox=\scratchdimen
+ {\scratchdimen.5\ht\nextbox
+ \advance\scratchdimen .5\dp\nextbox
+ \ht\nextbox\scratchdimen
+ \dp\nextbox\scratchdimen
\ruledhbox{\box\nextbox}%
\egroup}%
\normalvbox}
@@ -504,11 +504,11 @@
%D At the cost of some extra macros we can implement a
%D variant that does not need the~\type{=}, but we stick to:
-\unexpanded\def\ruledbox%
+\unexpanded\def\ruledbox
{\dowithnextbox{\makeruledbox\nextbox\box\nextbox}}
\def\setruledbox#1=%
- {\dowithnextbox{\makeruledbox\nextbox\setbox#1=\nextbox}}
+ {\dowithnextbox{\makeruledbox\nextbox\setbox#1\nextbox}}
%D \macros
%D {investigateskip,
@@ -548,30 +548,30 @@
\def\investigateskip#1%
{\relax
- \scratchdimen=#1\relax
+ \scratchdimen#1\relax
\edef\!!stringa{\the\scratchdimen}%
\edef\!!stringb{\the#1}%
\ifx\!!stringa\!!stringb \flexiblefalse \else \flexibletrue \fi
- \ifdim#1=\!!zeropoint\relax
+ \ifdim#1=\zeropoint\relax
\zerotrue \else
\zerofalse \fi
- \ifdim#1<\!!zeropoint\relax
+ \ifdim#1<\zeropoint\relax
\positivefalse \else
\positivetrue \fi
- \ifdim#1>\!!zeropoint\relax
+ \ifdim#1>\zeropoint\relax
\negativefalse \else
\negativetrue \fi}
\def\investigatecount#1%
{\relax
\flexiblefalse
- \ifnum#1=0
+ \ifnum#1=\zerocount
\zerotrue \else
\zerofalse \fi
- \ifnum#1<0
+ \ifnum#1<\zerocount
\positivefalse \else
\positivetrue \fi
- \ifnum#1>0
+ \ifnum#1>\zerocount
\negativefalse \else
\negativetrue \fi}
@@ -707,7 +707,7 @@
%D \type{\hbox}.
\def\setvisiblehfilbox#1\to#2#3#4%
- {\setbox#1=\normalhbox
+ {\setbox#1\normalhbox
{\visualvrule
\!!width#2\testrulewidth
\!!height#3\testrulewidth
@@ -729,7 +729,7 @@
{\normalhss\copy0\normalhss}%
#1%
\egroup
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{\normalhskip-4\testrulewidth\copy0\copy2}%
\smashbox0%
\box0
@@ -793,19 +793,19 @@
%D All five substitutions use the same auxiliary macro. Watch
%D the positive first -- negative next approach.
-\unexpanded\def\ruledhss%
+\unexpanded\def\ruledhss
{\doruledhfiller\normalhss\normalhfilneg{0}{0}}
-\unexpanded\def\ruledhfil%
+\unexpanded\def\ruledhfil
{\doruledhfiller\normalhfil\normalhfilneg{10}{-6}}
-\unexpanded\def\ruledhfill%
+\unexpanded\def\ruledhfill
{\doruledhfiller\normalhfill\normalhfillneg{18}{-14}}
-\unexpanded\def\ruledhfilneg%
+\unexpanded\def\ruledhfilneg
{\doruledhfiller\normalhfilneg\normalhfil{-6}{10}}
-\unexpanded\def\ruledhfillneg%
+\unexpanded\def\ruledhfillneg
{\doruledhfiller\normalhfillneg\normalhfill{-14}{18}}
%D \macros
@@ -817,7 +817,7 @@
%D scheme, but are implemented in a slightly different way.
\def\setvisiblevfilbox#1\to#2#3#4%
- {\setbox#1=\normalhbox
+ {\setbox#1\normalhbox
{\visualvrule
\!!width#2\testrulewidth
\!!height#3\testrulewidth
@@ -831,12 +831,12 @@
\dontcomplain
\normaloffinterlineskip
\setvisiblevfilbox0\to422%
- \setbox2=\normalvcue
+ \setbox2\normalvcue
{\normalhskip -#3\testrulewidth\copy0}%
\smashbox2%
\copy2
\bgroup
- \setbox2=\normalvcue
+ \setbox2\normalvcue
{\normalhskip -2\testrulewidth\copy0}%
\smashbox2%
\copy2
@@ -844,7 +844,7 @@
\normalvbox to 12\testrulewidth
{\normalvss\copy2\normalvss}%
#1%
- \setbox2=\normalvbox
+ \setbox2\normalvbox
{\normalvskip-2\testrulewidth\copy2}%
\smashbox2%
\box2
@@ -880,19 +880,19 @@
%D Keep in mind that \type{\vfillneg} is not part of \PLAIN\
%D \TEX, but are mimmicked by a macro.
-\unexpanded\def\ruledvss%
+\unexpanded\def\ruledvss
{\doruledvfiller\normalvss\normalvfilneg{2}}
-\unexpanded\def\ruledvfil%
+\unexpanded\def\ruledvfil
{\doruledvfiller\normalvfil\normalvfilneg{-4}}
-\unexpanded\def\ruledvfill%
+\unexpanded\def\ruledvfill
{\doruledvfiller\normalvfill\normalvfillneg{-12}}
-\unexpanded\def\ruledvfilneg%
+\unexpanded\def\ruledvfilneg
{\doruledvfiller\normalvfilneg\normalvfil{8}}
-\unexpanded\def\ruledvfillneg%
+\unexpanded\def\ruledvfillneg
{\doruledvfiller\normalvfillneg\normalvfill{16}}
%D \macros
@@ -932,20 +932,20 @@
%D stretch could be drawing the mid line over a length of the
%D stretch, in positive or negative direction.
-\def\doruledhskip%
+\def\doruledhskip
{\relax
\dontinterfere
\dontcomplain
\investigateskip\scratchskip
\ifzero
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{\normalhskip-\testrulewidth
\visualvrule
\!!width4\testrulewidth
\!!height16\testrulewidth
\!!depth16\testrulewidth}%
\else
- \setbox0=\normalhbox to \ifnegative-\fi\scratchskip
+ \setbox0\normalhbox to \ifnegative-\fi\scratchskip
{\visualvrule
\!!width2\testrulewidth
\ifnegative\!!depth\else\!!height\fi16\testrulewidth
@@ -953,10 +953,10 @@
\visualhrule
\ifnegative
\!!depth2\testrulewidth
- \!!height\!!zeropoint
+ \!!height\zeropoint
\else
\!!height2\testrulewidth
- \!!depth\!!zeropoint
+ \!!depth\zeropoint
\fi
\normalhfill
\ifflexible
@@ -975,7 +975,7 @@
\visualvrule
\!!width2\testrulewidth
\ifnegative\!!depth\else\!!height\fi16\testrulewidth}%
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{\ifnegative\else\normalhskip-\scratchskip\fi
\box0}%
\fi
@@ -985,10 +985,10 @@
\fi
\ifflexible
% breaks ok but small displacements can occur
- \skip2=\scratchskip
- \advance\skip2 by -1\scratchskip
- \divide\skip2 by 2
- \advance\scratchskip by -\skip2
+ \skip2\scratchskip
+ \advance\skip2 -1\scratchskip
+ \divide\skip2 2
+ \advance\scratchskip -\skip2
\normalhskip\scratchskip
\normalpenalty\!!tenthousand
\box0
@@ -999,7 +999,7 @@
\fi
\egroup}
-\unexpanded\def\ruledhskip%
+\unexpanded\def\ruledhskip
{\bgroup
\afterassignment\doruledhskip
\scratchskip=}
@@ -1068,20 +1068,20 @@
%D precaution probably is not completely waterproof, it works
%D quite well.
-\def\dodoruledvskip%
- {\nextdepth=\prevdepth
+\def\dodoruledvskip
+ {\nextdepth\prevdepth
\dontinterfere
\dontcomplain
\normaloffinterlineskip
\investigateskip\scratchskip
\ifzero
- \setbox0=\normalvcue
+ \setbox0\normalvcue
{\visualvrule
\!!width32\testrulewidth
\!!height2\testrulewidth
\!!depth2\testrulewidth}%
\else
- \setbox0=\normalvbox to \ifnegative-\fi\scratchskip
+ \setbox0\normalvbox to \ifnegative-\fi\scratchskip
{\visualhrule
\!!width16\testrulewidth
\!!height2\testrulewidth
@@ -1103,42 +1103,42 @@
\visualhrule
\!!width16\testrulewidth
\!!height2\testrulewidth}%
- \setbox2=\normalvbox to \ht0
+ \setbox2\normalvbox to \ht0
{\visualhrule
\!!width2\testrulewidth
\!!height\ht0}%
\ifnegative
- \ht0=\!!zeropoint
- \setbox0=\normalhbox
+ \ht0\zeropoint
+ \setbox0\normalhbox
{\normalhskip2\testrulewidth % will be improved
\normalhskip-\wd0\box0}%
\fi
\smashbox0%
\smashbox2%
- \setbox0=\normalvcue
+ \setbox0\normalvcue
{\box2\box0}%
- \setbox0=\normalvbox
+ \setbox0\normalvbox
{\ifnegative\normalvskip\scratchskip\fi\box0}%
\smashbox0%
\fi
\ifvisiblestretch
\ifflexible
- \skip2=\scratchskip
- \advance\skip2 by -1\scratchskip
- \divide\skip2 by 2
- \advance\scratchskip by -\skip2
+ \skip2\scratchskip
+ \advance\skip2 -1\scratchskip
+ \divide\skip2 2
+ \advance\scratchskip -\skip2
\normalvskip\skip2
\fi
\fi
\normalpenalty\!!tenthousand
\box0
- \prevdepth=\nextdepth % not \dp0=\nextdepth
+ \prevdepth\nextdepth % not \dp0=\nextdepth
\normalvskip\scratchskip}
%D We try to avoid interfering at the top of a page. Of course
%D we only do so when we are in the main vertical list.
-\def\doruledvskip%
+\def\doruledvskip
{\endgraf % \par
\ifdim\pagegoal=\maxdimen
\ifinner
@@ -1149,7 +1149,7 @@
\fi
\egroup}
-\unexpanded\def\ruledvskip%
+\unexpanded\def\ruledvskip
{\bgroup
\afterassignment\doruledvskip
\scratchskip=}
@@ -1184,24 +1184,24 @@
%D visualized a bit different, because we want to see them
%D anyhow.
-\def\doruledhkern%
+\def\doruledhkern
{\dontinterfere
\dontcomplain
\baselinerulefalse
\investigateskip\scratchskip
- \boxrulewidth=2\testrulewidth
+ \boxrulewidth2\testrulewidth
\ifzero
- \setbox0=\ruledhbox to 8\testrulewidth
+ \setbox0\ruledhbox to 8\testrulewidth
{\visualvrule
- \!!width\!!zeropoint
+ \!!width\zeropoint
\!!height16\testrulewidth
\!!depth16\testrulewidth}%
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{\normalhskip-4\testrulewidth\box0}%
\else
- \setbox0=\ruledhbox to \ifnegative-\fi\scratchskip
+ \setbox0\ruledhbox to \ifnegative-\fi\scratchskip
{\visualvrule
- \!!width\!!zeropoint
+ \!!width\zeropoint
\ifnegative\!!depth\else\!!height\fi16\testrulewidth
\ifflexible
\normalhskip2\testrulewidth
@@ -1217,12 +1217,12 @@
\else
\normalhfill
\fi}%
- \testrulewidth=2\testrulewidth
- \setbox0=\ruledhbox{\box0}% \make...
+ \testrulewidth2\testrulewidth
+ \setbox0\ruledhbox{\box0}% \make...
\fi
\smashbox0%
\normalpenalty\!!tenthousand
- \normalhbox to \!!zeropoint
+ \normalhbox to \zeropoint
{\ifnegative\normalhskip1\scratchskip\fi
\box0}%
\afterwards\scratchskip
@@ -1230,7 +1230,7 @@
\unexpanded\def\ruledhkern#1%
{\bgroup
- \let\afterwards=#1\relax
+ \let\afterwards#1%
\afterassignment\doruledhkern
\scratchskip=}
@@ -1258,22 +1258,22 @@
%D Like before, we have to postpone \type{\prevdepth}. If we
%D leave out this trick, we got ourselves some wrong spacing.
-\def\dodoruledvkern%
- {\nextdepth=\prevdepth
+\def\dodoruledvkern
+ {\nextdepth\prevdepth
\dontinterfere
\dontcomplain
\baselinerulefalse
\normaloffinterlineskip
\investigateskip\scratchskip
- \boxrulewidth=2\testrulewidth
+ \boxrulewidth2\testrulewidth
\ifzero
- \setbox0=\ruledhbox to 32\testrulewidth
+ \setbox0\ruledhbox to 32\testrulewidth
{\visualvrule
- \!!width\!!zeropoint
+ \!!width\zeropoint
\!!height4\testrulewidth
\!!depth4\testrulewidth}%
\else
- \setbox0=\ruledvbox to \ifnegative-\fi\scratchskip
+ \setbox0\ruledvbox to \ifnegative-\fi\scratchskip
{\hsize16\testrulewidth
\ifflexible
\cleaders
@@ -1289,24 +1289,24 @@
\normalvfill
\else
\visualvrule
- \!!width\!!zeropoint
+ \!!width\zeropoint
\!!height\ifnegative-\fi\scratchskip
\normalhfill
\fi}
\fi
- \testrulewidth=2\testrulewidth
- \setbox0=\ruledvbox{\box0}% \make...
+ \testrulewidth2\testrulewidth
+ \setbox0\ruledvbox{\box0}% \make...
\smashbox0%
- \setbox0=\normalvbox
+ \setbox0\normalvbox
{\ifnegative\normalvskip\scratchskip\fi
\normalvcue
{\ifnegative\normalhskip-16\testrulewidth\fi\box0}}%
\smashbox0%
\normalpenalty\!!tenthousand
\box0
- \prevdepth=\nextdepth} % not \dp0=\nextdepth
+ \prevdepth\nextdepth} % not \dp0=\nextdepth
-\def\doruledvkern%
+\def\doruledvkern
{\ifdim\pagegoal=\maxdimen
\ifinner
\dodoruledvkern
@@ -1319,11 +1319,11 @@
\unexpanded\def\ruledvkern#1%
{\bgroup
- \let\afterwards=#1\relax
+ \let\afterwards#1\relax
\afterassignment\doruledvkern
\scratchskip=}
-\unexpanded\def\ruledkern%
+\unexpanded\def\ruledkern
{\ifvmode
\expandafter\ruledvkern
\else
@@ -1361,16 +1361,16 @@
%D
%D \ShowBufferedExample
-\def\doruledhglue%
+\def\doruledhglue
{\leavevmode
- \scratchcounter=\spacefactor
- \visualvrule\!!width\!!zeropoint
+ \scratchcounter\spacefactor
+ \visualvrule\!!width\zeropoint
\normalpenalty\!!tenthousand
\ruledhkern\normalhskip\scratchskip
- \spacefactor=\scratchcounter
+ \spacefactor\scratchcounter
\egroup}
-\unexpanded\def\ruledhglue%
+\unexpanded\def\ruledhglue
{\bgroup
\afterassignment\doruledhglue\scratchskip=}
@@ -1391,16 +1391,16 @@
%D
%D \ShowBufferedExample
-\def\doruledvglue%
+\def\doruledvglue
{\endgraf % \par
- \nextdepth=\prevdepth
- \visualhrule\!!height\!!zeropoint
+ \nextdepth\prevdepth
+ \visualhrule\!!height\zeropoint
\normalpenalty\!!tenthousand
\ruledvkern\normalvskip\scratchskip
- \prevdepth=\nextdepth
+ \prevdepth\nextdepth
\egroup}
-\unexpanded\def\ruledvglue%
+\unexpanded\def\ruledvglue
{\bgroup
\afterassignment\doruledvglue\scratchskip=}
@@ -1416,9 +1416,9 @@
\def\dodoruledmkern#1%
{\dontinterfere
\dontcomplain
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{$\normalmkern\ifnegative-\fi\scratchmuskip$}%
- \setbox0=\normalhbox to \wd0
+ \setbox0\normalhbox to \wd0
{\visualvrule
\!!height16\testrulewidth
\!!depth16\testrulewidth
@@ -1459,12 +1459,12 @@
%D
%D \ShowBufferedExample
-\def\doruledmkern%
+\def\doruledmkern
{\investigatemuskip\scratchmuskip
\flexiblefalse
\dodoruledmkern\normalmkern}
-\unexpanded\def\ruledmkern%
+\unexpanded\def\ruledmkern
{\bgroup
\afterassignment\doruledmkern\scratchmuskip=}
@@ -1477,12 +1477,12 @@
%D
%D \ShowBufferedExample
-\def\doruledmskip%
+\def\doruledmskip
{\investigatemuskip\scratchmuskip
\flexibletrue
\dodoruledmkern\normalmskip}
-\unexpanded\def\ruledmskip%
+\unexpanded\def\ruledmskip
{\bgroup
\afterassignment\doruledmskip\scratchmuskip=}
@@ -1555,7 +1555,7 @@
%D test
\def\setruledpenaltybox#1#2#3#4#5#6%
- {\setbox#1=\normalhbox
+ {\setbox#1\normalhbox
{\ifnum#2=0 \else
\ifnum#2>0
\def\sign{+}%
@@ -1593,13 +1593,13 @@
\fi}%
\smashbox#1}
-\def\doruledhpenalty%
+\def\doruledhpenalty
{\dontinterfere
\dontcomplain
\investigatecount\scratchcounter
- \testrulewidth=2\testrulewidth
- \boxrulewidth=\testrulewidth
- \setbox0=\ruledhbox to 8\testrulewidth
+ \testrulewidth2\testrulewidth
+ \boxrulewidth\testrulewidth
+ \setbox0\ruledhbox to 8\testrulewidth
{\ifnegative\else\normalhss\fi
\visualvrule
\!!depth8\testrulewidth
@@ -1607,7 +1607,7 @@
\ifpositive\else\normalhss\fi}%
\setruledpenaltybox{2}{\scratchcounter}{0}{8}{-3.5}{4.5}%
\normalpenalty\!!tenthousand
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{\normalhskip-4\testrulewidth
\ifnegative
\box2\box0
@@ -1619,7 +1619,7 @@
\normalpenalty\scratchcounter
\egroup}
-\unexpanded\def\ruledhpenalty%
+\unexpanded\def\ruledhpenalty
{\bgroup
\afterassignment\doruledhpenalty
\scratchcounter=}
@@ -1643,26 +1643,26 @@
%D
%D \ShowBufferedExample
-\def\doruledvpenalty%
+\def\doruledvpenalty
{\ifdim\pagegoal=\maxdimen
\else
- \nextdepth=\prevdepth
+ \nextdepth\prevdepth
\dontinterfere
\dontcomplain
\investigatecount\scratchcounter
- \testrulewidth=2\testrulewidth
- \boxrulewidth=\testrulewidth
- \setbox0=\ruledhbox
+ \testrulewidth2\testrulewidth
+ \boxrulewidth\testrulewidth
+ \setbox0\ruledhbox
{\visualvrule
\!!height4\testrulewidth
\!!depth4\testrulewidth
- \!!width\!!zeropoint
+ \!!width\zeropoint
\visualvrule
\!!height\ifnegative.5\else4\fi\testrulewidth
\!!depth\ifpositive.5\else4\fi\testrulewidth
\!!width8\testrulewidth}%
\setruledpenaltybox{2}{\scratchcounter}{4}{4}{.5}{.5}%
- \setbox0=\normalhbox
+ \setbox0\normalhbox
{\normalhskip-4\testrulewidth
\ifnegative
\box2\box0
@@ -1673,19 +1673,19 @@
\smashbox0%
\normalpenalty\!!tenthousand
\nointerlineskip
- \dp0=\nextdepth % not \prevdepth=\nextdepth
+ \dp0\nextdepth % not \prevdepth=\nextdepth
\normalvbox
{\normalvcue{\box0}}%
\fi
\normalpenalty\scratchcounter
\egroup}
-\unexpanded\def\ruledvpenalty%
+\unexpanded\def\ruledvpenalty
{\bgroup
\afterassignment\doruledvpenalty
\scratchcounter=}
-\unexpanded\def\ruledpenalty%
+\unexpanded\def\ruledpenalty
{\ifvmode
\expandafter\ruledvpenalty
\else
@@ -1794,7 +1794,7 @@
\newif\ifshowingcomposition
-\def\showcomposition%
+\def\showcomposition
{\ifshowingcomposition
\showfils
\showboxes
@@ -1802,7 +1802,7 @@
\showpenalties
\fi}
-\def\dontshowcomposition%
+\def\dontshowcomposition
{\ifshowingcomposition
\dontshowfils
\dontshowboxes
@@ -1836,8 +1836,8 @@
\def\defaulttestrulewidth{.02\korpsgrootte} % still dutch
\fi
-\def\showmakeup%
- {\testrulewidth=\defaulttestrulewidth
+\def\showmakeup
+ {\testrulewidth\defaulttestrulewidth
\showingcompositiontrue
\showcomposition}
diff --git a/tex/context/base/symb-eur.tex b/tex/context/base/symb-eur.tex
index ab1d0a2c6..2adbd874d 100644
--- a/tex/context/base/symb-eur.tex
+++ b/tex/context/base/symb-eur.tex
@@ -42,7 +42,13 @@
\stopencoding
-\unexpanded\def\euro{\doiftextelse{\texteuro}{\texteuro}{\symbol[euro]}}
+\unexpanded\def\euro{\doiftextelse\texteuro\texteuro{\symbol[euro]}}
+
+% ok for one font series, but not for mixed sets
+%
+% \unexpanded\def\euro
+% {\doiftextelse \texteuro \texteuro
+% {\unexpanded\def\euro{\symbol[euro]}\euro}
%D The next table shows the complete set of symbols:
%D
diff --git a/tex/context/base/symb-ini.tex b/tex/context/base/symb-ini.tex
index 6dc5d561b..76a7fca24 100644
--- a/tex/context/base/symb-ini.tex
+++ b/tex/context/base/symb-ini.tex
@@ -197,7 +197,7 @@
\appendtoks \resetexternalfigures \to \everysymbol
-\def\definefiguresymbol%
+\def\definefiguresymbol
{\dotripleempty\dodefinefiguresymbol}
\def\dodefinefiguresymbol[#1][#2][#3]%
@@ -324,9 +324,9 @@
\def\dousesymbols#1%
{\makeshortfilename[\f!symbolprefix#1]%
- \showmessage{\m!symbols}{1}{#1}%
+ \showmessage\m!symbols1{#1}%
\startreadingfile
- \readsysfile{\shortfilename}{}{}%
+ \readsysfile\shortfilename\donothing\donothing
\stopreadingfile}
\def\usesymbols[#1]%
diff --git a/tex/context/base/symb-nav.tex b/tex/context/base/symb-nav.tex
index 34c4bbd81..71c6a8068 100644
--- a/tex/context/base/symb-nav.tex
+++ b/tex/context/base/symb-nav.tex
@@ -92,6 +92,4 @@
%D \showsymbolset[navigation 2]
%D \showsymbolset[navigation 3]
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/syst-con.tex b/tex/context/base/syst-con.tex
index 2df621b64..b69adcf66 100644
--- a/tex/context/base/syst-con.tex
+++ b/tex/context/base/syst-con.tex
@@ -26,18 +26,46 @@
%D In addition to the uppercase hex conversion, as needed in
%D math families, we occasionally need a lowercase one, for
%D instance when we want to compose gbsong fontnames.
-
-\def\uchexnumber#1%
- {\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
- 8\or 9\or A\or B\or C\or D\or E\or F\else 0\fi}
+%D
+%D The ugly indirectness is needed to get rid of \TEX\
+%D induced spaces and \type {\relax}'s.
+%D
+%D \starttypen
+%D [\uchexnumber{0}]
+%D [\uchexnumber\scratchcounter]
+%D [\uchexnumber\zerocount]
+%D [\uchexnumber{\number0}]
+%D [\uchexnumber{\number\scratchcounter}]
+%D [\uchexnumber{\number\zerocount}]
+%D [\uchexnumber{\the\scratchcounter}]
+%D [\uchexnumber{\the\zerocount}]
+%D [\expandafter\uchexnumber\expandafter{\number0}]
+%D [\expandafter\uchexnumber\expandafter{\number\scratchcounter}]
+%D [\expandafter\uchexnumber\expandafter{\number\zerocount}]
+%D [\expandafter\uchexnumber\expandafter{\the\scratchcounter}]
+%D [\expandafter\uchexnumber\expandafter{\the\zerocount}]
+%D \stoptypen
\def\lchexnumber#1%
+ {\@EA\dolchexnumber\number#1\relax}
+
+\def\dolchexnumber#1\relax % \def\lchexnumber#1%
{\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
8\or 9\or a\or b\or c\or d\or e\or f\else 0\fi}
+\def\uchexnumber#1%
+ {\@EA\douchexnumber\number#1\relax}
+
+\def\douchexnumber#1\relax % \def\uchexnumber#1%
+ {\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
+ 8\or 9\or A\or B\or C\or D\or E\or F\else 0\fi}
+
\let\hexnumber=\uchexnumber
\def\lchexnumbers#1%
+ {\@EA\dolchexnumbers\number#1\relax}
+
+\def\dolchexnumbers#1\relax % \def\lchexnumbers#1%
{\ifcase#1
00\or 01\or 02\or 03\or 04\or 05\or 06\or 07\or 08\or 09\or 0a\or 0b\or 0c\or 0d\or 0e\or 0f\or
10\or 11\or 12\or 13\or 14\or 15\or 16\or 17\or 18\or 19\or 1a\or 1b\or 1c\or 1d\or 1e\or 1f\or
@@ -56,7 +84,10 @@
e0\or e1\or e2\or e3\or e4\or e5\or e6\or e7\or e8\or e9\or ea\or eb\or ec\or ed\or ee\or ef\or
f0\or f1\or f2\or f3\or f4\or f5\or f6\or f7\or f8\or f9\or fa\or fb\or fc\or fd\or fe\or ff\fi}
-\def\uchexnumbers#1%
+\def\uchexnumbers#1%
+ {\@EA\douchexnumbers\number#1\relax}
+
+\def\douchexnumbers#1\relax % \def\uchexnumbers#1%
{\ifcase#1
00\or 01\or 02\or 03\or 04\or 05\or 06\or 07\or 08\or 09\or 0A\or 0B\or 0C\or 0D\or 0E\or 0F\or
10\or 11\or 12\or 13\or 14\or 15\or 16\or 17\or 18\or 19\or 1A\or 1B\or 1C\or 1D\or 1E\or 1F\or
@@ -81,6 +112,9 @@
%D For unicode remapping purposes, we need octal numbers.
\def\octnumber#1%
+ {\@EA\dooctnumber\number#1\relax}
+
+\def\dooctnumber#1\relax % \def\octnumber#1%
{\ifcase#1
000\or 001\or 002\or 003\or 004\or 005\or 006\or 007\or
010\or 011\or 012\or 013\or 014\or 015\or 016\or 017\or
diff --git a/tex/context/base/syst-etx.tex b/tex/context/base/syst-etx.tex
index 62ae3c54a..8c6f68559 100644
--- a/tex/context/base/syst-etx.tex
+++ b/tex/context/base/syst-etx.tex
@@ -234,4 +234,23 @@
\let\normalprotected = \protected
\let\normalunexpanded = \unexpanded
+%D \macros
+%D {begcsname}
+%D
+%D Handy for \ETEX-only usage:
+
+\beginETEX \ifcsname
+
+\def\begcsname#1\endcsname
+ {\ifcsname#1\endcsname\csname#1\endcsname\fi}
+
+\endETEX
+
+\beginTEX
+
+\def\begcsname#1\endcsname
+ {\csname#1\endcsname}
+
+\endTEX
+
\protect \endinput
diff --git a/tex/context/base/syst-ext.tex b/tex/context/base/syst-ext.tex
index 5a110fe70..d283aa056 100644
--- a/tex/context/base/syst-ext.tex
+++ b/tex/context/base/syst-ext.tex
@@ -46,11 +46,11 @@
%D \type {\redoglobal}. When using only alternatives, one can
%D reset this mechanism with \type {\resetglobal}.
-\def\doglobal%
+\def\doglobal
{\let\redoglobal\global
\def\dodoglobal{\resetglobal\global}}
-\def\resetglobal%
+\def\resetglobal
{\let\redoglobal\relax
\let\dodoglobal\relax}
@@ -58,7 +58,7 @@
%D New:
-\def\doglobal%
+\def\doglobal
{\ifx\redoglobal\relax
\let\redoglobal\global
\let\dodoglobal\@@dodoglobal
@@ -218,6 +218,10 @@
%
% And this is the one optimized for speed:
+\def\!!zerocount {0} % alongside \zerocount
+\def\!!minusone {-1} % alongside \minusone
+\def\!!plusone {1} % alongside \plusone
+
\beginTEX
\def\dodoindecrement#1(#2,#3)%
@@ -239,18 +243,22 @@
\def\doincrement#1% 10% faster alternative
{\ifx#1\undefined
- \dodoglobal\edef#1{1}%
+ %\dodoglobal\edef#1{1}%
+ \dodoglobal\let#1\!!plusone
\else\ifx#1\relax % \csname...\endcsname
- \dodoglobal\edef#1{1}%
+ %\dodoglobal\edef#1{1}%
+ \dodoglobal\let#1\!!plusone
\else
\fastincrement#1%
\fi\fi}
-\def\dodecrement#1% 10% faster alternative
+\def\dodecrement#1% 10% faster alternative
{\ifx#1\undefined
- \dodoglobal\edef#1{\minusone}%
+ %\dodoglobal\edef#1{-1}%
+ \dodoglobal\let#1\!!minusone
\else\ifx#1\relax % \csname...\endcsname
- \dodoglobal\edef#1{\minusone}%
+ %\dodoglobal\edef#1{-1}%
+ \dodoglobal\let#1\!!minusone
\else
\fastdecrement#1%
\fi\fi}
@@ -313,7 +321,7 @@
\def\newsignal#1%
{\ifx#1\undefined
- \advance\maximumsignal by 2sp % to be save in rounding
+ \advance\maximumsignal 2sp % to be save in rounding
\edef#1{\the\maximumsignal}%
\fi}
@@ -367,7 +375,7 @@
%D
%D This expands to \type{\ifsomething}.
-\def\strippedcsname%
+\def\strippedcsname
{\expandafter\gobbleoneargument\string}
%D \macros
@@ -530,10 +538,10 @@
%D \long\setvalue{\@@arecurse\recursedepth}{#5}%
%D \dodorecurse}
%D
-%D \def\donorecurse%
+%D \def\donorecurse
%D {}
%D
-%D \def\dododorecurse%
+%D \def\dododorecurse
%D {\edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}%
%D \getvalue{\@@arecurse\recursedepth}%
%D \edef\recurselevel{\csname\@@irecurse\recursedepth\endcsname}%
@@ -542,7 +550,7 @@
%D \setevalue{\@@irecurse\recursedepth}{\the\innerrecurse}%
%D \dodorecurse}
%D
-%D \def\dodorecurse%
+%D \def\dodorecurse
%D {\ifnum\csname\@@irecurse\recursedepth\endcsname
%D \csname\@@drecurse\recursedepth\endcsname
%D \csname\@@nrecurse\recursedepth\endcsname\relax
@@ -1060,7 +1068,7 @@
%D powerful.
%D \macros
-%D {convertargument,convertcommand}
+%D {convertargument,convertcommand,convertvalue}
%D
%D Some persistent experimenting led us to the next macro. This
%D macro converts a parameter or an expanded macro to it's
@@ -1093,38 +1101,51 @@
\def\doconvertargument#1>{}
-\def\convertedcommand%
+\def\convertedcommand
{\expandafter\doconvertargument\meaning}
+%\long\def\convertargument#1\to#2%
+% {\long\def\convertedargument{#1}%
+% \dodoglobal\edef#2{\convertedcommand\convertedargument}}
+
\long\def\convertargument#1\to#2%
- {\long\def\convertedargument{#1}%
- \dodoglobal\edef#2{\convertedcommand\convertedargument}}
+ {\long\def#2{#1}% saves a restore
+ \dodoglobal\edef#2{\convertedcommand#2}}
\long\def\convertcommand#1\to#2%
{\dodoglobal\edef#2{\convertedcommand#1}}
\endTEX
+\def\convertvalue#1\to
+ {\expandafter\convertcommand\csname#1\endcsname\to}
+
%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 {\jobname}.
+%D {\jobname} were fed (or something undefined).
\beginETEX \detokenize
\long\def\convertargument#1\to#2%
{\dodoglobal\edef#2{\detokenize{#1}}}
-
+
% \long\def\convertcommand#1\to#2%
% {\@EA\dodoglobal\@EA\edef\@EA#2\@EA{\@EA\detokenize\@EA{#1}}}
-
+
\long\def\convertcommand#1\to#2%
{\dodoglobal\edef#2{\@EA\detokenize\@EA{#1}}}
\endETEX
+%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 This is typically a macro that one comes to after reading
%D the \TEX book carefully. Even then, the definite solution
%D was found after rereading the \TEX book. The first
@@ -1137,13 +1158,11 @@
%D The \type{-}, the delimiter \type{\\\\} and the the second
%D argument are completely redundant.
-% this does not work ok yet
-%
% %D As said, the \TEX\ alternative fails on expanding primitives,
% %D like in:
% %D
% %D \starttypen
-% %D \convertcommand\jobname\to\ascii
+% %D \convertcommand\someprimitive\to\ascii
% %D \stoptypen
% %D
% %D Because these primitives convert to themselves, we can use
@@ -1152,24 +1171,26 @@
% %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).
-%
-% \beginTEX
-%
-% \let\dodoconvertargument\doconvertargument
-%
-% \bgroup
-% \catcode`\*=\@@escape
-% \catcode`\\=\@@other
-% *gdef*doconvertargument#1%
-% {*ifx#1\*else*expandafter*dodoconvertargument*fi#1}
-% *egroup
-%
-% \endTEX
+% %
+% % does not work:
+% %
+% % \beginTEX
+% %
+% % \let\dodoconvertargument\doconvertargument
+% %
+% % \bgroup
+% % \catcode`\*=\@@escape
+% % \catcode`\\=\@@other
+% % *gdef*doconvertargument#1%
+% % {*ifx#1\*else*expandafter*dodoconvertargument*fi#1}
+% % *egroup
+% %
+% % \endTEX
%D \macros
%D {showvalue,showargument}
%D
-%D A handy macro for testing purposes only, is the following:
+%D Two handy macros for testing purposes only:
\def\showvalue#1%
{\expandafter\show\csname#1\endcsname}
@@ -1191,24 +1212,49 @@
%D
%D Watch the one level expansion of the second argument.
-\def\doifmeaningelse#1#2#3#4%
+\def\doifmeaningelse#1#2%
{\edef\!!stringa{\meaning#1}%
\def\!!stringb{#2}\edef\!!stringb{\meaning\!!stringb}%
- \ifx\!!stringa\!!stringb#3\else#4\fi}
+ \ifx\!!stringa\!!stringb
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
%D \macros
-%D {doifsamestringselse}
+%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.
-\def\doifsamestringelse#1#2#3#4%
+\def\@@doifsamestringelse#1#2%
{\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\convertcommand\!!stringa\to\!!stringa
\convertcommand\!!stringb\to\!!stringb
- \ifx\!!stringa\!!stringb#3\else#4\fi}
+ \ifx\!!stringa\!!stringb}
+
+\def\doifsamestringelse#1#2%
+ {\@@doifsamestringelse{#1}{#2}%
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+\def\doifsamestring#1#2%
+ {\@@doifsamestringelse{#1}{#2}%
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+\def\doifnotsamestring#1#2%
+ {\@@doifsamestringelse{#1}{#2}%
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
%D \macros
%D {ExpandFirstAfter,ExpandSecondAfter,ExpandBothAfter}
@@ -1237,10 +1283,10 @@
%D but the faster \type{\ExpandAfter} does not.
\def\simpleExpandFirstAfter#1%
- {\edef\@@expanded{\noexpand\ExpandCommand{#1}}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand\ExpandCommand{#1}}\@@expanded}
\def\complexExpandFirstAfter[#1]%
- {\edef\@@expanded{\noexpand\ExpandCommand[#1]}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand\ExpandCommand[#1]}\@@expanded}
\def\ExpandFirstAfter#1%
{\let\ExpandCommand#1%
@@ -1248,13 +1294,13 @@
\def\ExpandSecondAfter#1#2#3%
{\scratchtoks{#2}%
- \edef\@@expanded{\noexpand#1{\the\scratchtoks}{#3}}\@@expanded}
+ \long\xdef\@@expanded{\noexpand#1{\the\scratchtoks}{#3}}\@@expanded}
\def\ExpandBothAfter#1#2#3%
- {\edef\@@expanded{\noexpand#1{#2}{#3}}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand#1{#2}{#3}}\@@expanded}
\def\ExpandAfter#1#2%
- {\edef\@@expanded{\noexpand#1{#2}}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand#1{#2}}\@@expanded}
%D Now we can for instance define \type{\ifinstringelse} as:
@@ -1335,7 +1381,7 @@
\def\CheckConstantAfter#1#2%
{\@EA\convertargument\v!prefix!\to\ascii
\convertargument#1\to#2\relax
- \doifinstringelse{\ascii}{#2}
+ \doifinstringelse\ascii{#2}
{\expandafter\convertargument#1\to#2}
{}}
@@ -1356,7 +1402,7 @@
%D We don't explicitly test if the macro is defined.
\def\assignifempty#1#2% can be sped up
- {\doifnot{#1}{}{\def#1{#2}}}
+ {\doifsomething{#1}{\def#1{#2}}} % {\doifnot{#1}{}{\def#1{#2}}}
%D \macros
%D {gobbleuntil,grabuntil,gobbleuntilrelax,
@@ -1385,9 +1431,9 @@
%D \grabuntil{stop}\command
%D \stoptypen
%D
-%D This commands executed, after having encountered
-%D \type{\stop} the command \type{\command}. This command
-%D receives as argument the text preceding the \type{\stop}.
+%D This commands executes, after having encountered
+%D \type {\stop} the command \type {\command}. This command
+%D receives as argument the text preceding the \type {\stop}.
%D This means that:
%D
%D \starttypen
@@ -1428,8 +1474,7 @@
%D everything preceding \type{\command}.
\long\def\processbetween#1#2%
- {\setvalue{\s!start#1}%
- {\grabuntil{\s!stop#1}{#2}}}
+ {\setvalue{\s!start#1}{\grabuntil{\s!stop#1}{#2}}}
\def\gobbleuntil#1%
{\long\def\next##1#1{}\next}
@@ -1545,10 +1590,8 @@
\long\def\HandleGroup#1#2%
{\bgroup
- \long\def\BeforeGroup%
- {\bgroup#1\bgroup\aftergroup\AfterGroup}%
- \long\def\AfterGroup%
- {#2\egroup\egroup}%
+ \long\def\BeforeGroup{\bgroup#1\bgroup\aftergroup\AfterGroup}%
+ \long\def\AfterGroup {#2\egroup\egroup}%
\afterassignment\BeforeGroup
\let\next=}
@@ -1696,20 +1739,7 @@
\let\endoflinetoken=^^M
-%\def\doGotoPar%
-% {\ifx\nextchar\blankspace
-% \let\donext\GotoPar
-% \else\ifx\nextchar\endoflinetoken
-% \let\donext\GotoPar
-% \else
-% \def\donext%
-% {\the\BeforePar
-% \BeforePar\emptytoks
-% \nextchar}%
-% \fi\fi
-% \donext}
-
-\def\doGotoPar%
+\def\doGotoPar
{\ifx\nextchar\blankspace
\@EA\GotoPar
\else\ifx\nextchar\endoflinetoken
@@ -1723,29 +1753,14 @@
\BeforePar\emptytoks
\nextchar}
-\def\GotoPar%
+\def\GotoPar
{\afterassignment\doGotoPar\let\nextchar=}
%D Its big brother \type{\GetPar} redefines the \type{\par}
%D primitive, which can lead to unexpected results, depending
%D in the context.
-% \def\GetPar%
-% {\edef\next%
-% {\BeforePar
-% {\the\BeforePar
-% \BeforePar\emptytoks
-% \bgroup
-% \def\par%
-% {\egroup
-% \par
-% \the\AfterPar
-% \BeforePar\emptytoks
-% \AfterPar\emptytoks}}}%
-% \next
-% \GotoPar}
-
-\def\GetPar%
+\def\GetPar
{\expanded
{\BeforePar
{\the\BeforePar
@@ -1759,6 +1774,29 @@
\AfterPar\emptytoks}}}%
\GotoPar}
+%D New and better alternatives:
+
+\def\dowithpar#1#2%
+ {\def\handlepar##1\par{#1##1#2}%
+ \def\gobblepar\par{\dowithpar{#1}{#2}}%
+ \doifnextcharelse\par\gobblepar\handlepar}
+
+% nicer
+
+\def\redowithpar\par
+ {\doifnextcharelse\par\redowithpar\dodowithpar}%
+
+\def\dowithpar#1#2%
+ {\def\dodowithpar##1\par{#1##1#2}%
+ \redowithpar\par}
+
+\def\redogotopar\par
+ {\doifnextcharelse\par\redogotopar\dodogotopar}%
+
+\def\dogotopar#1%
+ {\def\dodogotopar{#1}%
+ \redogotopar\par}
+
%D \macros
%D {dowithpargument,dowithwargument}
%D
@@ -1916,6 +1954,8 @@
%D a row. In both commands, the \type{n*} is optional. When this
%D specification is missing, the command executes once.
+% ! ! ! obsolete ! ! !
+
\def\dorepeat[#1]%
{\dodorepeat#1*\empty*\relax}
@@ -2169,28 +2209,30 @@
%D here:
\def\makecounter#1%
- {\global\letvalue{#1}\zerocountervalue} % see earlier
+ {\letgvalue{#1}\zerocountervalue} % see earlier
+
+% \def\countervalue#1%
+% {\getvalue{#1}}
+
+\let\countervalue\getvalue
\def\pluscounter#1%
- {\scratchcounter=\getvalue{#1}\relax
+ {\scratchcounter\getvalue{#1}%
\advance\scratchcounter \plusone
\setxvalue{#1}{\the\scratchcounter}}
\def\minuscounter#1%
- {\scratchcounter=\getvalue{#1}\relax
+ {\scratchcounter\getvalue{#1}%
\advance\scratchcounter \minusone
\setxvalue{#1}{\the\scratchcounter}}
\def\resetcounter#1%
- {\global\letvalue{#1}\zerocountervalue}
+ {\letgvalue{#1}\zerocountervalue}
\def\setcounter#1#2%
- {\scratchcounter=#2\relax
+ {\scratchcounter#2%
\setxvalue{#1}{\the\scratchcounter}}
-\def\countervalue#1%
- {\getvalue{#1}}
-
%D \macros
%D {savecounter,restorecounter}
%D
@@ -2214,6 +2256,9 @@
\def\makecounter#1%
{\global\@EA\let\csname#1\endcsname\zerocountervalue} % see earlier
+\def\countervalue#1%
+ {\csname#1\endcsname}
+
\def\pluscounter#1%
{\@EA\xdef\csname#1\endcsname{\the\numexpr(\csname#1\endcsname+1)}}
@@ -2226,9 +2271,6 @@
\def\setcounter#1#2%
{\@EA\xdef\csname#1\endcsname{\the\numexpr(#2)}}
-\def\countervalue#1%
- {\csname#1\endcsname}
-
\def\savecounter#1%
{\@EA\xdef\csname !#1\endcsname{\the\numexpr(\csname#1\endcsname)}}
@@ -2279,6 +2321,46 @@
{\def#3{##1}\def#4{##2}}%
\@EA\dosplitstring#1#2#2\\}
+%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.
+
+% \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:
+
+\def\beforetestandsplitstring#1\at#2\to#3%
+ {\def\dosplitstring##1#2##2#2##3##4\\%
+ {\ifx##3\empty\let#3\empty\else\def#3{##1}\fi}%
+ \@EA\dosplitstring#1#2#2\empty\\}
+
+\def\aftertestandsplitstring#1\at#2\to#3%
+ {\def\dosplitstring ##1#2##2@@@##3##4\\%
+ {\ifx##3\empty\let#3\empty\else\def#3{##2}\fi}%
+ \@EA\dosplitstring #1@@@#2@@@\empty\\}
+
+\def\testandsplitstring#1\at#2\to#3\and#4%
+ {\def\dosplitstring##1#2##2#2##3##4\\%
+ {\ifx##3\empty\let#3\empty\let#4\empty\else\def#3{##1}\def#4{##2}\fi}%
+ \@EA\dosplitstring#1#2#2\empty\\}
+
%D \macros
%D {removesubstring}
%D
@@ -2516,7 +2598,7 @@
\advance\commalistcounter\plusone}%
\let\commalistelement\empty
\let\newcommalist\empty
- \commalistcounter=1
+ \commalistcounter\plusone
\@EA\processcommalist\@EA[#1]\doreplaceincommalist
\dodoglobal\let#1\newcommalist}
@@ -2536,7 +2618,7 @@
\fi}
\def\globalprocesscommalist[#1]#2%
- {\global\let\globalcommacommand=#2%
+ {\global\let\globalcommacommand#2%
\expandafter\globalprocesscommaitem#1,],}
%D \macros
@@ -2562,11 +2644,8 @@
\!!stringa
\endgroup}
-\def\withoutpt#1%
- {\withoutunit{#1}{pt}}
-
-\def\withoutcm#1%
- {\withoutunit{#1}{cm}}
+\def\withoutpt#1{\withoutunit{#1}{pt}}
+\def\withoutcm#1{\withoutunit{#1}{cm}}
%D A bit faster and more robust alternative is one that
%D manipulates the \CATCODES.
@@ -2589,8 +2668,8 @@
\def\PtToCm#1%
{\begingroup
- \scratchdimen=#1\relax
- \scratchdimen=0.0351459804\scratchdimen % 2.54/72.27
+ \scratchdimen#1\relax
+ \scratchdimen0.0351459804\scratchdimen % 2.54/72.27
\withoutpt{\the\scratchdimen}cm%
\endgroup}
@@ -2604,15 +2683,15 @@
%D Both macros return a rounded number.
\def\numberofpoints#1%
- {\scratchdimen=#1\relax
+ {\scratchdimen#1%
\advance\scratchdimen .5pt
\withoutpt{\the\scratchdimen}}
\def\dimensiontocount#1#2%
- {\scratchdimen=#1\relax
+ {\scratchdimen#1%
\advance\scratchdimen .5pt
- #2=\scratchdimen
- \divide#2 by \maxcard}
+ #2\scratchdimen
+ \divide#2 \maxcard}
%D \macros
%D {swapdimens,swapmacros}
@@ -2721,7 +2800,7 @@
\newdimen\localhsize
\def\complexsetlocalhsize[#1]% don't change !
- {\localhsize=\hsize
+ {\localhsize\hsize
% \advance\localhsize -\parindent % changed anyway
\advance\localhsize -\leftskip
\advance\localhsize -\rightskip
@@ -2800,9 +2879,9 @@
\def\dodoprocesstokens
{\ifx\nextprocessedtoken\lastcharacter
\after
- \let\nextprocessedtoken=\relax
+ \let\nextprocessedtoken\relax
\else\ifx\nextprocessedtoken\bgroup
- \def\nextprocessedtoken%
+ \def\nextprocessedtoken
{\dowithnextbox
{\before{\copy\nextbox}% \before can use nextbox several times
\let\before\between
@@ -2816,7 +2895,7 @@
\before\nextprocessedtoken
\let\before\between
\fi
- \let\nextprocessedtoken=\doprocesstokens
+ \let\nextprocessedtoken\doprocesstokens
\fi\fi
\nextprocessedtoken}
@@ -2957,14 +3036,26 @@
%D
%D Also handy:
-\long\def\doifemptyelsevalue#1#2#3%
- {\@EA\ifx\csname#1\endcsname\empty#2\else#3\fi}
+\def\doifemptyelsevalue#1%
+ {\@EA\ifx\csname#1\endcsname\empty
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
-\long\def\doifemptyvalue#1#2%
- {\@EA\ifx\csname#1\endcsname\empty#2\fi}
+\def\doifemptyvalue#1%
+ {\@EA\ifx\csname#1\endcsname\empty
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
-\long\def\doifnotemptyvalue#1#2%
- {\@EA\ifx\csname#1\endcsname\empty\else#2\fi}
+\def\doifnotemptyvalue#1%
+ {\@EA\ifx\csname#1\endcsname\empty
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
%D \macros
%D {doifallcommonelse}
@@ -3015,29 +3106,32 @@
%D We have to use a two||step implementation, because the
%D expansion has to take place outside \type{\uppercase}.
-\def\p!DOIF#1#2#3%
+\def\p!DOIF#1#2%
{\uppercase{\ifinstringelse{$#1$}{$#2$}}%
- #3%
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
\fi}
-\def\p!DOIFNOT#1#2#3%
+\def\p!DOIFNOT#1#2%
{\uppercase{\ifinstringelse{$#1$}{$#2$}}%
+ \expandafter\gobbleoneargument
\else
- #3%
+ \expandafter\firstofoneargument
\fi}
-\def\p!DOIFELSE#1#2#3#4%
+\def\p!DOIFELSE#1#2%
{\uppercase{\ifinstringelse{$#1$}{$#2$}}%
- #3%
+ \expandafter\firstoftwoarguments
\else
- #4%
+ \expandafter\secondoftwoarguments
\fi}
-\def\p!DOIFINSTRINGELSE#1#2#3#4%
+\def\p!DOIFINSTRINGELSE#1#2%
{\uppercase{\ifinstringelse{#1}{#2}}%
- #3%
+ \expandafter\firstoftwoarguments
\else
- #4%
+ \expandafter\secondoftwoarguments
\fi}
\def\DOIF {\ExpandBothAfter\p!DOIF}
@@ -3071,16 +3165,13 @@
%D to enclosed in \type{{}}.
\def\stripcharacter#1\from#2\to#3%
- {\def\dostripcharacter##1#1##2\end%
+ {\def\dostripcharacter##1#1##2\end
{\edef\!!strippedstring{\!!strippedstring##1}%
- \doifemptyelse{##2}
- {\let\next=\relax}
- {\def\next{\dostripcharacter##2\end}}%
- \next}%
- \let\!!strippedstring=\empty
+ \doifnotempty{##2}{\dostripcharacter##2\end}}%
+ \let\!!strippedstring\empty
\edef\!!stringa{#2}%
\@EA\dostripcharacter\!!stringa#1\end
- \dodoglobal\let#3=\!!strippedstring}
+ \dodoglobal\let#3\!!strippedstring}
\def\stripspaces\from#1\to#2%
{\stripcharacter{ }\from#1\to#2}
@@ -3138,11 +3229,24 @@
\endETEX
-
%D This one also has the advantage that it is fully
%D expandable and that it can be used after an assignment.
-%D We considered an alternative imlementation accepting
+%D \macros
+%D {executeifdefinedcs}
+%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.
+
+\def\executeifdefinedcs#1#2%
+ {\csname\ifundefined{#1}#2\else#1\fi\endcsname}
+
+%D We considered an alternative implementation accepting
%D commands directly, like:
%D
%D \starttypen
@@ -3153,6 +3257,22 @@
%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 \executeandforget\SomeCommand
+%D \doglobal\executeandforget\AnotherCommand
+%D \stoptypen
+
+\def\executeandforget#1%
+ {\global\let\@@expanded#1%
+ \dodoglobal\let#1\relax
+ \@@expanded}
+
+%D \macros
%D {doifsomespaceelse}
%D
%D The next command checks a string on the presence of a space
@@ -3199,9 +3319,9 @@
\def\doadaptdimension#1#2\\#3\\%
{\if#1+%
- \dodoglobal\advance#3 by #1#2\relax
- \else\if##1-%
- \dodoglobal\advance#3 by #1#2\relax
+ \dodoglobal\advance#3 #1#2\relax
+ \else\if#1-%
+ \dodoglobal\advance#3 #1#2\relax
\else
\dodoglobal#3=#1#2\relax
\fi\fi}
@@ -3223,9 +3343,9 @@
%D has the opposite result.
\def\balancedimensions#1#2#3%
- {\scratchdimen=#3\relax
- \redoglobal\advance#1 by \scratchdimen\relax
- \dodoglobal\advance#2 by -\scratchdimen\relax}
+ {\scratchdimen#3\relax
+ \redoglobal\advance#1 \scratchdimen
+ \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
@@ -3362,7 +3482,7 @@
\def\processassignlist#1[#2]#3%
{\def\p!dodogetparameter[##1=##2=##3]%
- {\doifnot{##3}{\relax}{#3{##1}}}%
+ {\doifnot{##3}\relax{#3{##1}}}%
\def\p!dogetparameter##1%
{\p!dodogetparameter[##1==\relax]}%
\processcommalist[#2]\p!dogetparameter}
@@ -3412,13 +3532,10 @@
\long\def\dountexsomething#1#2\to#3%
{\doglobal#1#2\to\untexedargument
\endgroup
- \let#3=\untexedargument}
-
-\def\untexargument%
- {\untexsomething\convertargument}
+ \let#3\untexedargument}
-\def\untexcommand%
- {\untexsomething\convertcommand}
+\def\untexargument{\untexsomething\convertargument}
+\def\untexcommand {\untexsomething\convertcommand}
%D \macros
%D {ScaledPointsToBigPoints,ScaledPointsToWholeBigPoints}
@@ -3462,7 +3579,7 @@
%D \stoptypen
\def\PointsToReal#1#2%
- {\scratchdimen=#1%
+ {\scratchdimen#1%
\edef#2{\withoutpt{\the\scratchdimen}}}
%D \macros
@@ -3481,9 +3598,9 @@
%\def\dontleavehmode{\ifhmode\else\ifmmode\else$ $\fi\fi}
%
-% The (thanks to Taco) better alternative:
+% The (thanks to Taco) better alternative (mathsurround):
-\def\dontleavehmode%
+\def\dontleavehmode
{\ifhmode\else \ifmmode\else
{\mathsurround\z@\everymath\emptytoks$ $}%
\fi \fi}
@@ -3583,7 +3700,7 @@
%D {\doglobal}.
\def\counttoken#1\in#2\to#3%
- {\redoglobal#3=\zerocount
+ {\redoglobal#3\zerocount
\def\!!stringa{#1}%
\def\!!stringb{\end}%
\def\docounttoken##1% obeys {}
@@ -3605,14 +3722,14 @@
%D wrote this token handler.
\long\def\splitofftokens#1\from#2\to#3%
- {\ifnum#1>0
- \scratchcounter=#1\relax
+ {\ifnum#1>\zerocount
+ \scratchcounter#1\relax
\def\dosplitofftokens##1%
- {\ifnum\scratchcounter>0
+ {\ifnum\scratchcounter>\zerocount
\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
@@ -3651,11 +3768,11 @@
%D way we can handle the sentinal, a blank space and grouped
%D tokens.
-\def\dohandletokens%
+\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
@@ -3692,7 +3809,7 @@
%D
%D So, now we have:
-\def\dodohandletokens%
+\def\dodohandletokens % can be sped up
{\ifx\nexthandledtoken\blankspace
\def\next * {\dododohandletokens{ }\dohandletokens}%
\else\ifx\nexthandledtoken\end
@@ -3751,10 +3868,10 @@
\def\dostartglobaldefs#1#2%
{\edef\!!stringa{\the\globaldefs}%
\ifnum\globaldefs#10
- \globaldefs=-\globaldefs
+ \globaldefs-\globaldefs
\fi
- \advance\globaldefs #21
- \setevalue{@gd@\the\globaldefs}{\!!stringa}}
+ \advance\globaldefs#21
+ \letvalue{@gd@\the\globaldefs}\!!stringa}
\def\dostopglobaldefs%
{\doifdefinedelse{@gd@\the\globaldefs}
@@ -3893,7 +4010,7 @@
\else
\def\!!tempa{#1}%
\ifx\!!tempa\empty\else
- \scratchcounter=1
+ \scratchcounter\plusone
\@EA\getcommalistsize\@EA[\sortedcommalist]%
\@EA\processcommalist\@EA[\sortedcommalist]\docompareitems
\fi
@@ -3930,14 +4047,14 @@
{\doifnumberelse{#1}
{\doifnumberelse{#2}
{\ifnum#1>#2\relax
- \comparedresult=1 % #1 is larger
+ \comparedresult1 % #1 is larger
\else\ifnum#1<#2\relax
- \comparedresult=2 % #2 is larger
+ \comparedresult2 % #2 is larger
\else
- \comparedresult=0 % both are equal
+ \comparedresult0 % both are equal
\fi\fi}
- {\comparedresult=2 }}
- {\comparedresult=1 }}
+ {\comparedresult2 }}
+ {\comparedresult1 }}
%D \macros
%D {@saveprimitive}
@@ -3955,15 +4072,15 @@
\edef\@tempb{\meaning#1}%
\ifx\@tempa\@tempb
\global\let#2#1%
- \debuggerinfo{prim}{Saving \string#1 as \string#2}%
+ %\debuggerinfo{prim}{Saving \string#1 as \string#2}%
\else
\edef\@tempb{\meaning#2}%
- \ifx\@tempa\@tempb
- \debuggerinfo{prim}{Saving \string#1 as \string#2}%
- \else
- \debuggerinfo{prim}{Can't define \string#2 properly;
- primitive \noexpand#1 is no longer primitive}%
- \fi
+ %\ifx\@tempa\@tempb
+ % \debuggerinfo{prim}{Saving \string#1 as \string#2}%
+ %\else
+ % \debuggerinfo{prim}{Can't define \string#2 properly;
+ % primitive \noexpand#1 is no longer primitive}%
+ %\fi
\fi
\endgroup}
diff --git a/tex/context/base/syst-gen.tex b/tex/context/base/syst-gen.tex
index f95bdcfa2..40f8701e2 100644
--- a/tex/context/base/syst-gen.tex
+++ b/tex/context/base/syst-gen.tex
@@ -353,9 +353,11 @@
\ifx \@ne\undefined \else \let\plusone \@ne \fi
\ifx\m@ne\undefined \else \let\minusone \m@ne \fi
-\ifx\zeropoint\undefined \newdimen\zeropoint \fi
-\ifx\plusone \undefined \chardef\plusone=1 \fi
-\ifx\minusone \undefined \count\minusone \minusone=-1 \fi
+\ifx\zeropoint\undefined \csname newdimen\endcsname\zeropoint \fi % plain
+\ifx\plusone \undefined \chardef\plusone =1 \fi
+\ifx\plustwo \undefined \chardef\plustwo =2 \fi
+\ifx\plusthree\undefined \chardef\plusthree=3 \fi
+\ifx\minusone \undefined \count\minusone \minusone=-1 \fi
\newcount\zerocount
@@ -404,10 +406,10 @@
%D inside the argument. Later on we will meet some more clever
%D alternatives to this command.
-\let\@@expanded\empty
+\long\def\@@expanded{} % always long; global (less restores)
\long\def\expanded#1%
- {\long\edef\@@expanded{\noexpand#1}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand#1}\@@expanded}
%D \macros
%D {expandoneargafter,expandtwoargsafter}
@@ -432,10 +434,10 @@
%D These two do a full expansion:
\def\fullexpandoneargafter#1#2%
- {\edef\@@expanded{\noexpand#1{#2}}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand#1{#2}}\@@expanded}
\def\fullexpandtwoargsafter#1#2#3%
- {\edef\@@expanded{\noexpand#1{#2}{#3}}\@@expanded}
+ {\long\xdef\@@expanded{\noexpand#1{#2}{#3}}\@@expanded}
%D \macros
%D {gobbleoneargument,gobble...arguments}
@@ -485,7 +487,7 @@
\def\!!stringb{#3}%
\futurelet\nexttoken\inspectnextcharacter}
-\def\inspectnextcharacter%
+\def\inspectnextcharacter
{\ifx\nexttoken\blankspace
\@EA\reinspectnextcharacter
\else\ifx\nexttoken\charactertoken
@@ -546,13 +548,14 @@
%D or later wants macros like these.
%D
%D \starttypen
-%D \setvalue {naam}{...} = \def\naam{...}
-%D \setgvalue {naam}{...} = \gdef\naam{...}
-%D \setevalue {naam}{...} = \edef\naam{...}
-%D \setxvalue {naam}{...} = \xdef\naam{...}
-%D \letvalue {naam}=\... = \let\naam=\...
-%D \getvalue {naam} = \naam
-%D \resetvalue {naam} = \def\naam{}
+%D \setvalue {name}{...} = \def\name{...}
+%D \setgvalue {name}{...} = \gdef\name{...}
+%D \setevalue {name}{...} = \edef\name{...}
+%D \setxvalue {name}{...} = \xdef\name{...}
+%D \letvalue {name}=\... = \let\name=\...
+%D \letgvalue {name}=\... = \global\let\name=\...
+%D \getvalue {name} = \name
+%D \resetvalue {name} = \def\name{}
%D \stoptypen
%D
%D As we will see, \CONTEXT\ uses these commands many times,
@@ -565,18 +568,19 @@
\def\setxvalue #1{\expandafter\xdef\csname#1\endcsname}
\def\getvalue #1{\csname#1\endcsname}
\def\letvalue #1{\expandafter\let\csname#1\endcsname}
+\def\letgvalue #1{\global\expandafter\let\csname#1\endcsname}
\def\resetvalue #1{\expandafter\let\csname#1\endcsname\empty}
\def\ignorevalue#1#2{\expandafter\let\csname#1\endcsname\empty}
%D \macros
-%D {globallet}
+%D {globallet,glet}
%D
%D In \CONTEXT\ of May 2000 using \type {\globallet}
%D instead of the two tokens will save us some
%D $300\times4=1200$ bytes of format file on a 32~bit
%D system. So:
-\def\globallet{\global\let}
+\def\globallet{\global\let} \let\glet\globallet
%D \macros
%D {donottest,unexpanded}
@@ -655,7 +659,7 @@
\@EA#1\csname\s!do\string#2\endcsname}
\def\unexpanded#1%
- {\def\dounexpanded%
+ {\def\dounexpanded
{\ifx\next\bgroup
\@EA\dosetunexpanded
\else
@@ -799,7 +803,13 @@
%D
%D When this module was optimized, timing showed that the
%D next alternative can be upto twice as fast, especially when
-%D longer arguments are used.
+%D longer arguments are used. Watch how we reach over the
+%D \type {\else} and \type {\fi}: this way they cannot get
+%D into the way (and we can avoid those \type {\next}
+%D hacks); I started using this method after I did some
+%D speed optimization tests in the xtag modules; the
+%D efficiency of such hacks depends on the length of the
+%D argument etc. etc.)
\beginTEX
@@ -810,32 +820,32 @@
{\let\donottest\dontprocesstest
\expandafter\ifx\csname#1\endcsname\relax}
-\def\doifundefinedelse#1#2#3%
+\def\doifundefinedelse#1%
{\p!doifundefined{#1}%
- \let\donottest\doprocesstest#2%
+ \let\donottest\doprocesstest\@EA\firstoftwoarguments
\else
- \let\donottest\doprocesstest#3%
+ \let\donottest\doprocesstest\@EA\secondoftwoarguments
\fi}
-\def\doifdefinedelse#1#2#3%
+\def\doifdefinedelse#1%
{\p!doifundefined{#1}%
- \let\donottest\doprocesstest#3%
+ \let\donottest\doprocesstest\@EA\secondoftwoarguments
\else
- \let\donottest\doprocesstest#2%
+ \let\donottest\doprocesstest\@EA\firstoftwoarguments
\fi}
-\def\doifundefined#1#2%
+\def\doifundefined#1%
{\p!doifundefined{#1}%
- \let\donottest\doprocesstest#2%
+ \let\donottest\doprocesstest\@EA\firstofoneargument
\else
- \let\donottest\doprocesstest
+ \let\donottest\doprocesstest\@EA\gobbleoneargument
\fi}
-\def\doifdefined#1#2%
+\def\doifdefined#1%
{\p!doifundefined{#1}%
- \let\donottest\doprocesstest
+ \let\donottest\doprocesstest\@EA\gobbleoneargument
\else
- \let\donottest\doprocesstest#2%
+ \let\donottest\doprocesstest\@EA\firstofoneargument
\fi}
\endTEX
@@ -849,33 +859,33 @@
{\edef\p!defined{#1}%
\unless\ifcsname\detokenize\@EA{\p!defined}\endcsname}
-\def\doifundefinedelse#1% % #2#3%
+\def\doifundefinedelse#1%
{\edef\p!defined{#1}%
- \ifcsname\detokenize\@EA{\p!defined}\endcsname % #3\else#2\fi}
+ \ifcsname\detokenize\@EA{\p!defined}\endcsname
\expandafter\secondoftwoarguments
\else
\expandafter\firstoftwoarguments
\fi}
-\def\doifdefinedelse#1% % #2#3%
+\def\doifdefinedelse#1%
{\edef\p!defined{#1}%
- \ifcsname\detokenize\@EA{\p!defined}\endcsname % #2\else#3\fi}
+ \ifcsname\detokenize\@EA{\p!defined}\endcsname
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
-\def\doifundefined#1% % #2%
+\def\doifundefined#1%
{\edef\p!defined{#1}%
- \ifcsname\detokenize\@EA{\p!defined}\endcsname % \else#2\fi}
+ \ifcsname\detokenize\@EA{\p!defined}\endcsname
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
\fi}
-\def\doifdefined#1% % #2%
+\def\doifdefined#1%
{\edef\p!defined{#1}%
- \ifcsname\detokenize\@EA{\p!defined}\endcsname % #2\fi}
+ \ifcsname\detokenize\@EA{\p!defined}\endcsname
\expandafter\firstofoneargument
\else
\expandafter\gobbleoneargument
@@ -960,17 +970,17 @@
\donefalse
\fi}
-\def\doifalldefinedelse#1% % #2#3%
+\def\doifalldefinedelse#1%
{\begingroup
\let\donottest\dontprocesstest
\donetrue
\processcommalist[#1]\docheckonedefined
\ifdone
\endgroup\let\donottest\doprocesstest
- \expandafter\firstoftwoarguments % #2%
+ \expandafter\firstoftwoarguments
\else
\endgroup\let\donottest\doprocesstest
- \expandafter\secondoftwoarguments % #3%
+ \expandafter\secondoftwoarguments
\fi}
\endTEX
@@ -982,13 +992,13 @@
\donefalse
\fi}
-\def\doifalldefinedelse#1% % #2#3%
+\def\doifalldefinedelse#1%
{\begingroup
\donetrue \processcommalist[#1]\docheckonedefined
\ifdone
- \endgroup\expandafter\firstoftwoarguments % #2%
+ \endgroup\expandafter\firstoftwoarguments
\else
- \endgroup\expandafter\secondoftwoarguments % #3%
+ \endgroup\expandafter\secondoftwoarguments
\fi}
\endETEX
@@ -1035,53 +1045,91 @@
\beginTEX
-\long\def\doif#1#2#3%
+% \long\def\doif#1#2#3%
+% {\let\donottest\dontprocesstest
+% \edef\!!stringa{#1}%
+% \edef\!!stringb{#2}%
+% \let\donottest\doprocesstest
+% \ifx\!!stringa\!!stringb
+% #3%
+% \fi}
+%
+% \long\def\doifnot#1#2#3%
+% {\let\donottest\dontprocesstest
+% \edef\!!stringa{#1}%
+% \edef\!!stringb{#2}%
+% \let\donottest\doprocesstest
+% \ifx\!!stringa\!!stringb
+% \else
+% #3%
+% \fi}
+%
+% \long\def\doifelse#1#2#3#4%
+% {\let\donottest\dontprocesstest
+% \edef\!!stringa{#1}%
+% \edef\!!stringb{#2}%
+% \let\donottest\doprocesstest
+% \ifx\!!stringa\!!stringb
+% #3%
+% \else
+% #4%
+% \fi}
+
+%D Slightly faster on big arguments, as well as \type
+%D {\next} avoiding:
+
+\long\def\doif#1#2%
{\let\donottest\dontprocesstest
\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\let\donottest\doprocesstest
\ifx\!!stringa\!!stringb
- #3%
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
\fi}
-\long\def\doifnot#1#2#3%
+\long\def\doifnot#1#2%
{\let\donottest\dontprocesstest
\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\let\donottest\doprocesstest
\ifx\!!stringa\!!stringb
+ \expandafter\gobbleoneargument
\else
- #3%
+ \expandafter\firstofoneargument
\fi}
-\long\def\doifelse#1#2#3#4%
+
+\long\def\doifelse#1#2%
{\let\donottest\dontprocesstest
\edef\!!stringa{#1}%
\edef\!!stringb{#2}%
\let\donottest\doprocesstest
\ifx\!!stringa\!!stringb
- #3%
+ \expandafter\firstoftwoarguments
\else
- #4%
+ \expandafter\secondoftwoarguments
\fi}
\endTEX
\beginETEX \protected
-\long\def\doif#1#2#3%
- {\edef\!!stringa{#1}\edef\!!stringb{#2}%
- \ifx\!!stringa\!!stringb#3\fi}
-
-\long\def\doifnot#1#2#3%
- {\edef\!!stringa{#1}\edef\!!stringb{#2}%
- \unless\ifx\!!stringa\!!stringb#3\fi}
-
-\long\def\doifelse#1#2#3#4%
- {\edef\!!stringa{#1}\edef\!!stringb{#2}%
- \ifx\!!stringa\!!stringb#3\else#4\fi}
+% \long\def\doif#1#2#3%
+% {\edef\!!stringa{#1}\edef\!!stringb{#2}%
+% \ifx\!!stringa\!!stringb#3\fi}
+%
+% \long\def\doifnot#1#2#3%
+% {\edef\!!stringa{#1}\edef\!!stringb{#2}%
+% \unless\ifx\!!stringa\!!stringb#3\fi}
+%
+% \long\def\doifelse#1#2#3#4%
+% {\edef\!!stringa{#1}\edef\!!stringb{#2}%
+% \ifx\!!stringa\!!stringb#3\else#4\fi}
-% slightly faster on big arguments
+%D Slightly faster on big arguments, as well as \type
+%D {\next} avoiding:
\long\def\doif#1#2%
{\edef\!!stringa{#1}\edef\!!stringb{#2}%
@@ -1154,25 +1202,25 @@
%D
%D This time, the string is not expanded.
-\long\def\doifemptyelse#1% % #2#3%
+\long\def\doifemptyelse#1%
{\def\!!stringa{#1}%
- \ifx\!!stringa\empty % #2\else#3\fi}
+ \ifx\!!stringa\empty
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
-\long\def\doifempty#1% % #2%
+\long\def\doifempty#1%
{\def\!!stringa{#1}%
- \ifx\!!stringa\empty % #2\fi}
+ \ifx\!!stringa\empty
\expandafter\firstofoneargument
\else
\expandafter\gobbleoneargument
\fi}
-\long\def\doifnotempty#1% % #2%
+\long\def\doifnotempty#1%
{\def\!!stringa{#1}%
- \ifx\!!stringa\empty % \else#2\fi}
+ \ifx\!!stringa\empty
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
@@ -1296,22 +1344,22 @@
\endETEX
-\long\def\doifinsetelse#1#2% % #3#4%
- {\p!doifinsetelse{#1}{#2}% % #3\else#4\fi}
+\long\def\doifinsetelse#1#2%
+ {\p!doifinsetelse{#1}{#2}%
\expandafter\firstoftwoarguments
\else
\expandafter\secondoftwoarguments
\fi}
-\long\def\doifinset#1#2% % #3%
- {\p!doifinsetelse{#1}{#2}% % #3\fi}
+\long\def\doifinset#1#2%
+ {\p!doifinsetelse{#1}{#2}%
\expandafter\firstofoneargument
\else
\expandafter\gobbleoneargument
\fi}
-\long\def\doifnotinset#1#2% % #3%
- {\p!doifinsetelse{#1}{#2}% % \else#3\fi}
+\long\def\doifnotinset#1#2%
+ {\p!doifinsetelse{#1}{#2}%
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
@@ -1446,15 +1494,15 @@
\expandafter\secondoftwoarguments
\fi}
-\long\def\doifcommon#1#2% % #3%
- {\p!doifcommonelse{#1}{#2}% % #3\fi}
+\long\def\doifcommon#1#2%
+ {\p!doifcommonelse{#1}{#2}%
\expandafter\firstofoneargument
\else
\expandafter\gobbleoneargument
\fi}
-\long\def\doifnotcommon#1#2% % #3%
- {\p!doifcommonelse{#1}{#2}% % \else#3\fi}
+\long\def\doifnotcommon#1#2%
+ {\p!doifcommonelse{#1}{#2}%
\expandafter\gobbleoneargument
\else
\expandafter\firstofoneargument
@@ -2061,7 +2109,7 @@
{\let\expandedaction\noexpandedaction}
%D \macros
-%D {getfirstcharacter,firstcharacter}
+%D {getfirstcharacter,firstcharacter, doiffirstcharacter}
%D
%D Sometimes the action to be undertaken depends on the
%D next character. This macro get this character and puts it in
@@ -2082,6 +2130,20 @@
{\edef\!!stringa{#1}%
\expandafter\dogetfirstcharacter\!!stringa\\}
+\def\doiffirstcharelse#1#2% char string
+% kort (maar onleesbaar)
+% {\expanded{\dogetfirstcharacter#2}\\\doifelse{#1}\firstcharacter}
+% korter (en begrijpelijk))
+ {\getfirstcharacter{#2}\doifelse{#1}\firstcharacter}
+% snel (maar zelden gebruikt, dus niet zo belangrijk)
+% {\getfirstcharacter{#2}%
+% \edef\!!stringa{#1}%
+% \ifx\!!stringa\firstcharacter
+% \expandafter\firstoftwoarguments
+% \else
+% \expandafter\secondoftwoarguments
+% \fi}
+
%D \macros
%D {doifinstringelse, doifincsnameelse}
%D
@@ -2607,8 +2669,14 @@
%D complain of it's missed. We will redefine this macro later
%D on, when a more advanced message mechanism is implemented.
+\newif\iferrorisfatal
+
+\def\waitonfatalerror
+ {\iferrorisfatal\wait\fi}
+
\def\showassignerror#1#2%
- {\writestatus{setup}{missing '=' after '#1' in line #2}}
+ {\writestatus{setup}{missing or ungrouped '=' after '#1' in line #2}%
+ \waitonfatalerror}
%\def\p!doassign#1[#2][#3=#4=#5]%
% {\let\donottest\dontprocesstest
@@ -2778,8 +2846,18 @@
% \def\p!doassign#1#2\@relax@#3=#4=#5\@relax@
% {\ifx\@relax@#5\@EA\xshowassignerror\else\@EA#1\fi{#2}{#3}{#4}}
-\def\p!doassign#1#2\@relax@#3=#4=#5\@relax@
- {\ifx#5\empty\@EA\xshowassignerror\else\@EA#1\fi{#2}{#3}{#4}}
+% \def\p!doassign#1#2\@relax@#3=#4=#5\@relax@
+% {\ifx#5\empty\@EA\xshowassignerror\else\@EA#1\fi{#2}{#3}{#4}}
+
+\def\p!doassign#1#2\@relax@#3=#4=#5#6\@relax@
+ {\ifx#5\empty
+ \@EA\xshowassignerror
+ \else\ifx#5=%
+ \@EAEAEA#1%
+ \else
+ \@EAEAEA\xshowassignerror
+ \fi\fi
+ {#2}{#3}{#4}}
\def\xshowassignerror#1#2#3%
{\showassignerror{#2}{\the\inputlineno\space(#1)}}
@@ -2871,10 +2949,16 @@
%
% \def\doifassignmentelse%
% {\doifinstringelse{=}}
+%
+% readable
+%
+% \def\doifassignmentelse#1%
+% {\convertargument#1\to\ascii
+% \doifinstringelse{=}{\ascii}}
\def\doifassignmentelse#1%
{\convertargument#1\to\ascii
- \doifinstringelse{=}{\ascii}}
+ \doifinstringelse=\ascii}
%D \macros
%D {ifparameters,checkparameters}
@@ -2964,7 +3048,7 @@
\def\getfromcommalist[#1]#2[#3]%
{\let\commalistelement\empty
- \commalistcounter=#3\relax
+ \commalistcounter#3\relax
\processcommalist[#1]\p!dogetfromcommalist}
% \def\getfromcommacommand[#1]% why so complicated, still needed?
@@ -3985,6 +4069,17 @@
\long\def\thirdoffourarguments #1#2#3#4{#3}
\long\def\fourthoffourarguments #1#2#3#4{#4}
+%D \macros
+%D {globalletempty,letempty,letvalueempty,letgvalueempty}
+%D
+%D Trivial:
+
+\def\letempty #1{\let#1\empty}
+\def\globalletempty#1{\global\let#1\empty}
+
+\def\letvalueempty #1{\expandafter\let\csname#1\endcsname\empty}
+\def\letgvalueempty#1{\global\expandafter\let\csname#1\endcsname\empty}
+
%D \macros
%D {wait}
%D
diff --git a/tex/context/base/syst-new.tex b/tex/context/base/syst-new.tex
index 5fd8eaaa9..ba6e0bc46 100644
--- a/tex/context/base/syst-new.tex
+++ b/tex/context/base/syst-new.tex
@@ -16,15 +16,19 @@
\unprotect
+% moved from core-ntb
+
+\def\v!oddeven#1{\ifodd#1\v!oneven\else\v!even\fi}
+
% For myself
\newcount\nofprofiled
\def\profilemacro#1%
- {\nofprofiled=0
+ {\nofprofiled\zerocount
\letvalue{\string#1\string#1}#1%
\appendtoks
- \writestatus{\m!systems}{profile \string#1: \number\nofprofiled}%
+ \writestatus\m!systems{profile \string#1: \number\nofprofiled}%
\to \everystoptext
\unexpanded\def#1%
{\global\advance\nofprofiled\plusone
@@ -82,12 +86,12 @@
\the\withlowercharacters
\ifeightbitcharacters\the\withuppercharacters\fi}
-\def\makeallother%
+\def\makeallother
{\doassigncatcodes\@@other}
\chardef\obeyedlccode=`. % so <32 and >127 chars become .
-%\def\obeylccodes%
+%\def\obeylccodes
% {\def\withcharacter##1{\lccode##1##1}%
% \the\withlowercharacters
% \def\withcharacter##1{\lccode##1\obeyedlccode}%
@@ -97,7 +101,7 @@
\def\setownlccode #1{\lccode#1#1}
\def\setobeyedlccode#1{\lccode#1\obeyedlccode}
-\def\obeylccodes%
+\def\obeylccodes
{\let\withcharacter\setownlccode
\the\withlowercharacters
\let\withcharacter\setobeyedlccode
@@ -137,10 +141,10 @@
\def\@flg@{@flg@}
\def\setflag#1%
- {\@EA\dodoglobal\@EA\chardef\csname\@flg@#1\endcsname=0 }
+ {\@EA\dodoglobal\@EA\chardef\csname\@flg@#1\endcsname\zerocount}
\def\resetflag#1%
- {\@EA\dodoglobal\@EA\chardef\csname\@flg@#1\endcsname=1 }
+ {\@EA\dodoglobal\@EA\chardef\csname\@flg@#1\endcsname\plusone}
\let\ifflagged\ifcase
@@ -289,10 +293,10 @@
\def\DoMod#1by#2to#3{\dosetmodulo {#1}{#2}{#3}}
\def\DoDiv#1by#2to#3{\dosetdivision{#1}{#2}{#3}}
-\def\dounprotected#1\par%
+\def\dounprotected#1\par
{#1\protect}
-\def\unprotected%
+\def\unprotected
{\unprotect\dounprotected}
%D Standaard kan een spatie (zoals ~) uitrekken. Dit is in
@@ -349,7 +353,7 @@
\def\testfeature#1#2%
{\def\dotestfeature
- {\advance\featuretest 1
+ {\advance\featuretest \plusone
\ifnum\featuretest<#1\relax#2\expandafter\dotestfeature\fi}%
\retestfeature}
@@ -378,12 +382,12 @@
\newdimen\dimentoaddto
-\def\adddimenregister#1\to#2%
+\def\adddimenregister#1\to#2% will be obsolete once full etex
{\begingroup
#2=\zeropoint
\dimentoaddto\zeropoint
\def\docommando%
- {\advance#2 by \dimentoaddto
+ {\advance#2 \dimentoaddto
\futurelet\next\dodocommando}%
\def\dodocommando%
{\ifx\next\relax
@@ -420,14 +424,14 @@
% \def\rawrecurselevel{\the\rawrecursecounter}%
%
% \def\dorawrecurse#1#2%
-% {\rawrecursecounter=1\relax
+% {\rawrecursecounter\plusone
% \let\oldrecurselevel\recurselevel
% \let\recurselevel\rawrecurselevel
-% \def\dodorawrecurse%
+% \def\dodorawrecurse
% {\ifnum\rawrecursecounter>#1\relax
% \let\recurselevel\oldrecurselevel
% \else
-% #2\advance\rawrecursecounter by 1
+% #2\advance\rawrecursecounter \plusone
% \expandafter\dodorawrecurse
% \fi}%
% \dodorawrecurse}
@@ -439,21 +443,21 @@
\bgroup
-\gdef\checkduplication% in line with Knuth
+\gdef\checkduplication % in line with Knuth
{\ifmmode\expandafter^\else\expandafter\startduplication\fi}
-\gdef\insideduplication%
+\gdef\insideduplication
{\ifmmode\expandafter^\else\expandafter\egroup\fi}
\catcode`\^=\@@active
-\gdef\enableduplication%
+\gdef\enableduplication
{\catcode`\^=\@@active \let^\checkduplication}
-\gdef\disableduplication%
+\gdef\disableduplication
{\catcode`\^=\@@superscript}
-\gdef\startduplication%
+\gdef\startduplication
{\bgroup \duplicatetrue \let^\insideduplication}
\egroup
@@ -499,20 +503,57 @@
\def\dowithstringed#1#2#3#4% " ' space
{\if#4"\@EA#1\else\if#4'\@EAEAEA#2\else\@EAEAEA#3\fi\fi#4}
-\def\unstringed%
+\def\unstringed
{\dowithstringed\unstringdouble\unstringsingle\unstringnothing}
\def\unstringdouble"#1"{#1}
\def\unstringsingle'#1'{#1}
\def\unstringspaced #1 {#1}
-\def\grabstring%
+\def\grabstring
{\dowithstringed\grabstringdouble\grabstringsingle\grabstringspaced}
+\def\dowithgrabbedstring#1%
+ {\def\@@dowithgrabbedstring{#1}%
+ \afterassignment\@@dowithgrabbedstring\grabstring}
+
\def\grabstringdouble"#1"{\scratchtoks{#1}}
\def\grabstringsingle'#1'{\scratchtoks{#1}}
\def\grabstringspaced #1 {\scratchtoks{#1}}
+\def\expifequalelse#1#2%
+ {\@@ifequal#1\relax\relax\@@and#2\relax\relax\@@then}
+
+\def\@@ifequal#1#2\@@and#3%
+ {\ifx#1\relax
+ \ifx#3\relax
+ \@EAEAEA\@@if@@equal@@true
+ \else
+ \@EAEAEA\@@if@@equal@@false
+ \fi
+ \else
+ \ifx#3\relax
+ \@EAEAEAEAEAEA\@@if@@equal@@false
+ \else\ifx#1#3%
+ % go on
+ \else
+ \@EAEAEAEAEAEA\@@if@@equal@@false
+ \fi\fi
+ \fi
+ \@@ifequal#2\@@and}
+
+\long\def\@@if@@equal@@true #1\@@then#2#3{#2}
+\long\def\@@if@@equal@@false#1\@@then#2#3{#3}
+
+%D new stuff :
+
+\def\partialexpanded#1%
+ {\let\notexpanded\noexpand
+ \long\xdef\@@expanded{\noexpand#1}%
+ \let\notexpanded\empty
+ \@@expanded}
+
+
% \def\doifdimensionelse#1%
% {\afterassignment\dodoifdimensionelse\scratchdimen=#1pt\relax\empty\empty\empty\empty}
%
@@ -523,4 +564,37 @@
% \expandafter\secondoftwoarguments
% \fi}
+% for Simon ; watch how we make them fully expandable (i.e.
+% no \type {\relax}es) popping up
+
+\def\@@dothenumber#1\relax#2\end{#1}
+
+\def\@@thenumber#1{\@EA\@@dothenumber\number#1\relax\end}
+
+\def\doifnum#1#2%
+ {\ifnum#1=\@@thenumber{#2} % space needed
+ \expandafter\firstofoneargument
+ \else
+ \expandafter\gobbleoneargument
+ \fi}
+
+\def\doifnotnum#1#2%
+ {\ifnum#1=\@@thenumber{#2} % space needed
+ \expandafter\gobbleoneargument
+ \else
+ \expandafter\firstofoneargument
+ \fi}
+
+\def\doifelsenum#1#2%
+ {\ifnum#1=\@@thenumber{#2} % space needed
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+% \edef\xxxx{\doifnum{1}{2}{no}} \show \xxxx
+% \edef\xxxx{\doifnum{2}{2}{yes}} \show \xxxx
+% \scratchcounter0 \edef\xxxx{\doifnum{1}{\scratchcounter}{no}} \show \xxxx
+% \scratchcounter1 \edef\xxxx{\doifnum{1}{\scratchcounter}{yes}} \show \xxxx
+
\protect \endinput
diff --git a/tex/context/base/type-buy.tex b/tex/context/base/type-buy.tex
index 334601299..6fdbd47b0 100644
--- a/tex/context/base/type-buy.tex
+++ b/tex/context/base/type-buy.tex
@@ -94,17 +94,17 @@
% FontFont Meta
\starttypescript [map] [ec,8r,texnansi]
- \loadmapfile [\typefaceencoding-ff-meta]
+ \loadmapfile [\typefaceencoding-fontfont-meta]
\stoptypescript
\starttypescript [sans] [meta] [name]
\definefontsynonym [Sans] [MetaNormal-Roman]
\definefontsynonym [SansItalic] [MetaNormal-Italic]
- \definefontsynonym [SansSlanted] [MetaNormal-Slanted]
+ \definefontsynonym [SansSlanted] [MetaNormal-Italic]
\definefontsynonym [SansBold] [MetaBold-Roman]
\definefontsynonym [SansBoldItalic] [MetaBold-Italic]
- \definefontsynonym [SansBoldSlanted][MetaBold-Slanted]
+ \definefontsynonym [SansBoldSlanted][MetaBold-Italic]
\definefontsynonym [SansCaps] [MetaNormal-Caps]
\stoptypescript
@@ -209,6 +209,12 @@
\stoptypescript
+\starttypescript [expert] [meta] % incomplete
+
+ \definefontsynonym [MetaNormal-Expert] [mtnx]
+
+\stoptypescript
+
%D Linotype Univers
\starttypescript [map] [all] % [texnansi]
diff --git a/tex/context/base/type-enc.tex b/tex/context/base/type-enc.tex
index c3d06bd25..4dea6ecee 100644
--- a/tex/context/base/type-enc.tex
+++ b/tex/context/base/type-enc.tex
@@ -298,7 +298,8 @@
\stoptypescript
\starttypescript [math] [computer-modern] [default]
- \definefontsynonym [ComputerModernMath-Roman] [cmr10]
+ % watch the space, it prevents remapping
+ \definefontsynonym [ComputerModernMath-Roman] [cmr10 ]
\definefontsynonym [ComputerModernMath-Extension] [cmex10]
\definefontsynonym [ComputerModernMath-Italic] [cmmi10]
\definefontsynonym [ComputerModernMath-Symbol] [cmsy10]
@@ -549,7 +550,7 @@
\definefontsynonym [LucidaBlackletter] [lbl]
\stoptypescript
-\starttypescript [boldmath] [lucida] [texnansi,ec,8r]
+\starttypescript [boldmath,bfmath] [lucida] [texnansi,ec,8r]
\definefontsynonym [LucidaNewMath-AltDemiItalic] [lbmdo]
\definefontsynonym [LucidaNewMath-Arrows-Demi] [lbmad]
\definefontsynonym [LucidaNewMath-Extension] [lbme]
@@ -594,7 +595,7 @@
\definefontsynonym [8r-utmb8a-slanted-167] [utmbo8r] [encoding=8r]
\definefontsynonym [8r-uhvr8a] [uhvr8r] [encoding=8r]
-\definefontsynonym [8r-uhvo8a] [uhvro8r] [encoding=8r]
+\definefontsynonym [8r-uhvro8a] [uhvro8r] [encoding=8r]
\definefontsynonym [8r-uhvb8a] [uhvb8r] [encoding=8r]
\definefontsynonym [8r-uhvbo8a] [uhvbo8r] [encoding=8r]
@@ -652,7 +653,7 @@
\definefontsynonym [ec-utmb8a-slanted-167] [utmbo8t] [encoding=ec]
\definefontsynonym [ec-uhvr8a] [uhvr8t] [encoding=ec]
-\definefontsynonym [ec-uhvo8a] [uhvro8t] [encoding=ec]
+\definefontsynonym [ec-uhvro8a] [uhvro8t] [encoding=ec]
\definefontsynonym [ec-uhvb8a] [uhvb8t] [encoding=ec]
\definefontsynonym [ec-uhvbo8a] [uhvbo8t] [encoding=ec]
@@ -712,7 +713,7 @@
\definefontsynonym [ec-utmb8a-slanted-167] [ptmbo8y] [encoding=texnansi]
\definefontsynonym [ec-uhvr8a] [uhvr8y] [encoding=texnansi]
-\definefontsynonym [ec-uhvo8a] [uhvro8y] [encoding=texnansi]
+\definefontsynonym [ec-uhvro8a] [uhvro8y] [encoding=texnansi]
\definefontsynonym [ec-uhvb8a] [uhvb8y] [encoding=texnansi]
\definefontsynonym [ec-uhvbo8a] [uhvbo8y] [encoding=texnansi]
diff --git a/tex/context/base/type-exa.tex b/tex/context/base/type-exa.tex
index 0ca857c17..4283f412c 100644
--- a/tex/context/base/type-exa.tex
+++ b/tex/context/base/type-exa.tex
@@ -35,7 +35,7 @@
\definetypeface [times] [rm] [serif] [times] [default] [encoding=\typescripttwo]
\definetypeface [times] [ss] [sans] [helvetica] [default] [rscale=.9,encoding=\typescripttwo]
-\definetypeface [times] [tt] [mono] [computer-modern] [default] [rscale=1.1,encoding=\typescripttwo]
+\definetypeface [times] [tt] [mono] [computer-modern] [default] [rscale=1.1]
\definetypeface [times] [mm] [math] [times] [default] [encoding=\typescripttwo]
\stoptypescript
@@ -44,7 +44,7 @@
\definetypeface [palatino] [rm] [serif] [palatino] [default] [encoding=\typescripttwo]
\definetypeface [palatino] [mm] [math] [palatino] [default] [encoding=\typescripttwo]
-\definetypeface [palatino] [tt] [mono] [computer-modern] [default] [rscale=1.075,encoding=\typescripttwo]
+\definetypeface [palatino] [tt] [mono] [computer-modern] [default] [rscale=1.075]
% to do (rscaled): tt->computer-modern ss->??
diff --git a/tex/context/base/type-ini.tex b/tex/context/base/type-ini.tex
index cb25a6036..b59299ff7 100644
--- a/tex/context/base/type-ini.tex
+++ b/tex/context/base/type-ini.tex
@@ -284,7 +284,7 @@
\def\doloadfontmapfile#1% will be special
{\doifundefined{#1 \c!status}
- {\ifnum\realpageno>1
+ {\ifnum\realpageno>\plusone
\writestatus{pdftex}{too late for map file: #1}%
\else
\writestatus{pdftex}{using map file: #1}%
@@ -326,7 +326,7 @@
% \definetypeface [#1:joke] [#2:rm] [#3:...]
% \definetypeface [#1:joke] [#2:rm] [#3:serif] [#4:lucida] [#5:size] [#6:...]
-\def\definetypeface%
+\def\definetypeface
{\dosixtupleargument\dodefinetypeface}
\def\tsvar#1#2%
@@ -345,13 +345,15 @@
\iffifthargument % sixth is optional
% \getparameters[\??ts][rscale=1,\s!encoding=\defaultencoding,#6]
% we need to expand since iin #6 there can be a \typescripttwo
- \expanded{\getparameters[\??ts][rscale=1,\s!encoding=\defaultencoding,#6]}%
+ %\expanded{\getparameters[\??ts][\s!rscale=1,\s!encoding=\defaultencoding,#6]}%
+\expanded{\getparameters[\??ts][\s!rscale=1,\s!encoding=\s!default,#6]}%
\pushmacro\relativefontsize
\pushmacro\typefaceencoding
\pushmacro\fontclass
\let\relativefontsize\@@tsrscale
\let\typefaceencoding\@@tsencoding
\setcurrentfontclass{#1}
+ \saverelativefontsize{#2}{\relativefontsize}% fall back
\writestatus{typeface}{[#1] [#2] [#3] [#4]}
\usetypescript[map][\typefaceencoding]
% \usetypescript[#3][#4][name]
@@ -395,7 +397,7 @@
{#1[\getvalue{\??tf\fontclass\s!default}]}
{#1[\c!rm]}%
\fi \fi
- \tf}
+ \ifmmode\mr\else\tf\fi} % needed ?
\def\usetypefile[#1]% recurses on path !
{\readfile{\f!typeprefix#1}{}{}}% \relax\relax}
diff --git a/tex/context/base/type-run.tex b/tex/context/base/type-run.tex
index 6fdcab997..2e9f02a84 100644
--- a/tex/context/base/type-run.tex
+++ b/tex/context/base/type-run.tex
@@ -49,5 +49,5 @@
\next}
\processcommacommand[\typescriptfiles]\dodousetypescript
\egroup}
-
+
\protect \endinput
diff --git a/tex/context/base/type-siz.tex b/tex/context/base/type-siz.tex
index aa30ce30f..8cb6e08d4 100644
--- a/tex/context/base/type-siz.tex
+++ b/tex/context/base/type-siz.tex
@@ -31,17 +31,17 @@
[tt] [default]
\stoptypescript
-\starttypescript [math] [default] [size]
+\starttypescript [math,boldmath] [default] [size]
\definebodyfont
[4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
[mm] [default]
\stoptypescript
-\starttypescript [boldmath] [default] [size]
+\starttypescript [bfmath] [default] [size]
\definebodyfont
[4pt,5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,14.4pt,17.3pt]
- [mm] [boldmath]
-\stoptypescript
+ [mm] [bfmath]
+\stoptypescript
\starttypescript [handwriting] [default] [size]
\definebodyfont
@@ -155,17 +155,13 @@
[tt] [default]
\stoptypescript
-\starttypescript [math] [dtp] [size]
+\starttypescript [math,boldmath] [dtp] [size]
\definebodyfont
[5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
[mm] [default]
\stoptypescript
-\starttypescript [boldmath] [dtp] [size]
- \definebodyfont
- [5pt,6pt,7pt,8pt,9pt,10pt,11pt,12pt,13pt,14pt,16pt,18pt,22pt,28pt]
- [mm] [boldmath]
-\stoptypescript
+% cmr
\starttypescript [serif] [computer-modern] [size]
diff --git a/tex/context/base/type-spe.tex b/tex/context/base/type-spe.tex
index 03c49f8c3..91fce0bf4 100644
--- a/tex/context/base/type-spe.tex
+++ b/tex/context/base/type-spe.tex
@@ -19,7 +19,7 @@
\usemathcollection[default]
\stoptypescript
-\starttypescript [math] [lucida] [special]
+\starttypescript [math,boldmath] [lucida] [special]
\usemathcollection[lbr]
\stoptypescript
@@ -28,11 +28,11 @@
\stoptypescript
\starttypescript [math] [times] [special]
- \usemathcollection[tim]
+ \usemathcollection[ams]
\stoptypescript
-\starttypescript [math] [euler] [special]
- \usemathcollection[eul]
+\starttypescript [math] [palatino] [special]
+ \usemathcollection[ams]
\stoptypescript
\endinput
diff --git a/tex/context/base/type-syn.tex b/tex/context/base/type-syn.tex
index 3cd761979..148d2fadb 100644
--- a/tex/context/base/type-syn.tex
+++ b/tex/context/base/type-syn.tex
@@ -67,6 +67,7 @@
\starttypescript [math] [computer-modern] [name]
\definefontsynonym [OldStyle] [MathItalic]
\definefontsynonym [Fraktur] [eufm10]
+ \definefontsynonym [Blackboard] [msbm10]
\definefontsynonym [Gothic] [eufm10]
\definefontsynonym [Calligraphic] [cmsy10]
\stoptypescript
@@ -139,10 +140,19 @@
\definefontsynonym [MathItalic] [LucidaNewMath-AltItalic]
\definefontsynonym [MathSymbol] [LucidaNewMath-Symbol]
\definefontsynonym [MathAlpha] [LucidaNewMath-Arrows]
+ \definefontsynonym [MathBeta] [LucidaNewMath-Roman]
\stoptypescript
\starttypescript [boldmath] [lucida] [name]
- \definefontsynonym [MathRomanBold] [LucidaBright-Demi]
+ \definefontsynonym [MathRoman] [LucidaNewMath-Demibold]
+ \definefontsynonym [MathExtension] [LucidaNewMath-Extension]
+ \definefontsynonym [MathItalic] [LucidaNewMath-AltDemiItalic]
+ \definefontsynonym [MathSymbol] [LucidaNewMath-Symbol-Demi]
+ \definefontsynonym [MathAlpha] [LucidaNewMath-Arrows-Demi]
+\stoptypescript
+
+\starttypescript [bfmath] [lucida] [name]
+ \definefontsynonym [MathRomanBold] [LucidaNewMath-Demibold]
\definefontsynonym [MathExtensionBold] [LucidaNewMath-Extension]
\definefontsynonym [MathItalicBold] [LucidaNewMath-AltDemiItalic]
\definefontsynonym [MathSymbolBold] [LucidaNewMath-Symbol-Demi]
diff --git a/tex/context/base/unic-000.tex b/tex/context/base/unic-000.tex
new file mode 100644
index 000000000..eba4a33c1
--- /dev/null
+++ b/tex/context/base/unic-000.tex
@@ -0,0 +1,224 @@
+%D \module
+%D [ file=unic-000,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Macros,
+%D subtitle=Vector 0,
+%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.
+
+\unprotect
+
+\startunicodevector 0
+ \ifcase\numexpr(#1-159)
+ \@@unknownchar\or
+ \@@unknownchar\or % NO-BREAK SPACE
+ exclamdown\or
+ textcent\or
+ textsterling\or
+ textcurrency\or
+ textyen\or
+ textbrokenbar\or
+ sectionmark\or
+ textdiaeresis\or
+ copyright\or
+ \@@unknownchar\or % FEMININE ORDINAL INDICATOR
+ \@@unknownchar\or % LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ textlognot\or
+ softhyphen\or
+ registered\or
+ textmacron\or
+ textdegree\or
+ textpm\or
+ \@@unknownchar\or % SUPERSCRIPT TWO
+ \@@unknownchar\or % SUPERSCRIPT THREE
+ textacute\or
+ \@@unknownchar\or % MICRO SIGN
+ \@@unknownchar\or % PILCROW SIGN
+ \@@unknownchar\or % MIDDLE DOT
+ textcedilla\or
+ \@@unknownchar\or % SUPERSCRIPT ONE
+ \@@unknownchar\or % MASCULINE ORDINAL INDICATOR
+ \@@unknownchar\or % RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \@@unknownchar\or % VULGAR FRACTION ONE QUARTER
+ \@@unknownchar\or % VULGAR FRACTION ONE HALF
+ \@@unknownchar\or % VULGAR FRACTION THREE QUARTERS
+ questiondown\or
+ Agrave\or
+ Aacute\or
+ Acircumflex\or
+ Atilde\or
+ Adiaeresis\or
+ Aring\or
+ AEligature\or
+ Ccedilla\or
+ Egrave\or
+ Eacute\or
+ Ecircumflex\or
+ Ediaeresis\or
+ Igrave\or
+ Iacute\or
+ Icircumflex\or
+ Idiaeresis\or
+ \@@unknownchar\or % Eth\or
+ Ntilde\or
+ Ograve\or
+ Oacute\or
+ Ocircumflex\or
+ Otilde\or
+ Odiaeresis\or
+ \@@unknownchar\or
+ Ostroke\or
+ Ugrave\or
+ Uacute\or
+ Ucircumflex\or
+ Udiaeresis\or
+ Yacute\or
+ Thorn\or
+ ssharp\or
+ agrave\or
+ aacute\or
+ acircumflex\or
+ atilde\or
+ adiaeresis\or
+ aring\or
+ aeligature\or
+ ccedilla\or
+ egrave\or
+ eacute\or
+ ecircumflex\or
+ ediaeresis\or
+ igrave\or
+ iacute\or
+ icircumflex\or
+ idiaeresis\or
+ \@@unknownchar\or % eth\or
+ ntilde\or
+ ograve\or
+ oacute\or
+ ocircumflex\or
+ ohungarumlaut\or
+ odiaeresis\or
+ \@@unknownchar\or
+ ostroke\or
+ ugrave\or
+ uacute\or
+ ucircumflex\or
+ udiaeresis\or
+ yacute\or
+ thorn\or
+ ydiaeresis\else
+ \@@unknownchar
+ \fi
+\stopunicodevector
+
+% 20\% faster:
+
+\startunicodevector 0
+ \expandafter\strippedcsname
+ \ifcase\numexpr(#1-159)!\@@unknownchar\or
+ \unknownchar \or % NO-BREAK SPACE
+ \exclamdown \or
+ \textcent \or
+ \textsterling \or
+ \textcurrency \or
+ \textyen \or
+ \textbrokenbar \or
+ \sectionmark \or
+ \textdiaeresis \or
+ \copyright \or
+ \unknownchar \or % FEMININE ORDINAL INDICATOR
+ \unknownchar \or % LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \textlognot \or
+ \softhyphen \or
+ \registered \or
+ \textmacron \or
+ \textdegree \or
+ \textpm \or
+ \unknownchar \or % SUPERSCRIPT TWO
+ \unknownchar \or % SUPERSCRIPT THREE
+ \textacute \or
+ \unknownchar \or % MICRO SIGN
+ \unknownchar \or % PILCROW SIGN
+ \unknownchar \or % MIDDLE DOT
+ \textcedilla \or
+ \unknownchar \or % SUPERSCRIPT ONE
+ \unknownchar \or % MASCULINE ORDINAL INDICATOR
+ \unknownchar \or % RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ \unknownchar \or % VULGAR FRACTION ONE QUARTER
+ \unknownchar \or % VULGAR FRACTION ONE HALF
+ \unknownchar \or % VULGAR FRACTION THREE QUARTERS
+ \questiondown \or
+ \Agrave \or
+ \Aacute \or
+ \Acircumflex \or
+ \Atilde \or
+ \Adiaeresis \or
+ \Aring \or
+ \AEligature \or
+ \Ccedilla \or
+ \Egrave \or
+ \Eacute \or
+ \Ecircumflex \or
+ \Ediaeresis \or
+ \Igrave \or
+ \Iacute \or
+ \Icircumflex \or
+ \Idiaeresis \or
+ \unknownchar \or % \Eth \or
+ \Ntilde \or
+ \Ograve \or
+ \Oacute \or
+ \Ocircumflex \or
+ \Otilde \or
+ \Odiaeresis \or
+ \unknownchar \or
+ \Ostroke \or
+ \Ugrave \or
+ \Uacute \or
+ \Ucircumflex \or
+ \Udiaeresis \or
+ \Yacute \or
+ \Thorn \or
+ \ssharp \or
+ \agrave \or
+ \aacute \or
+ \acircumflex \or
+ \atilde \or
+ \adiaeresis \or
+ \aring \or
+ \aeligature \or
+ \ccedilla \or
+ \egrave \or
+ \eacute \or
+ \ecircumflex \or
+ \ediaeresis \or
+ \igrave \or
+ \iacute \or
+ \icircumflex \or
+ \idiaeresis \or
+ \unknownchar \or % \eth \or
+ \ntilde \or
+ \ograve \or
+ \oacute \or
+ \ocircumflex \or
+ \ohungarumlaut \or
+ \odiaeresis \or
+ \unknownchar \or
+ \ostroke \or
+ \ugrave \or
+ \uacute \or
+ \ucircumflex \or
+ \udiaeresis \or
+ \yacute \or
+ \thorn \or
+ \ydiaeresis \else
+ \unknownchar
+ \fi
+\stopunicodevector
+
+\protect \endinput
diff --git a/tex/context/base/unic-001.tex b/tex/context/base/unic-001.tex
new file mode 100644
index 000000000..189e57f21
--- /dev/null
+++ b/tex/context/base/unic-001.tex
@@ -0,0 +1,287 @@
+%D \module
+%D [ file=unic-001,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Macros,
+%D subtitle=Vector 1,
+%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.
+
+\unprotect
+
+\startunicodevector 1
+ \ifcase#1\or
+ \@@unknownchar\or
+ Abreve\or
+ abreve\or
+ Aogonek\or
+ aogonek\or
+ Cacute\or
+ cacute\or
+ Ccircumflex\or
+ ccircumflex\or
+ Cdotaccent\or
+ cdotaccent\or
+ Ccaron\or
+ ccaron\or
+ Dcaron\or
+ dcaron\or
+ Dstroke\or
+ dstroke\or
+ Emacron\or
+ emacron\or
+ Ebreve\or
+ ebreve\or
+ Edotaccent\or
+ edotaccent\or
+ Eogonek\or
+ eogonek\or
+ Ecaron\or
+ ecaron\or
+ Gcircumflex\or
+ gcircumflex\or
+ Gbreve\or
+ gbreve\or
+ Gdotaccent\or
+ gdotaccent\or
+ \@@unknownchar\or % Gcedilla\or
+ \@@unknownchar\or % gcedilla\or
+ Hcircumflex\or
+ hcircumflex\or
+ Hstroke\or
+ hstroke\or
+ Itilde\or
+ itilde\or
+ Imacron\or
+ imacron\or
+ Ibreve\or
+ ibreve\or
+ Iogonek\or
+ iogonek\or
+ Idotaccent\or
+ dotlessi\or
+ IJligature\or
+ ijligature\or
+ Jcircumflex\or
+ jcircumflex\or
+ Kcedilla\or
+ kcedilla\or
+ \@@unknownchar\or % kra\or
+ Lacute\or
+ lacute\or
+ Lcedilla\or
+ lcedilla\or
+ Lcaron\or
+ lcaron\or
+ \@@unknownchar\or % Ldotmiddle\or
+ \@@unknownchar\or % ldotmiddle\or
+ Lstroke\or
+ lstroke\or
+ Nacute\or
+ nacute\or
+ Ncedilla\or
+ ncedilla\or
+ Ncaron\or
+ ncaron\or
+ napostrophe\or
+ Neng\or
+ neng\or
+ Omacron\or
+ omacron\or
+ Obreve\or
+ obreve\or
+ Ohungarumlaut\or
+ ohungarumlaut\or
+ OEligature\or
+ oeligature\or
+ Racute\or
+ racute\or
+ Rcedilla\or
+ rcedilla\or
+ Rcaron\or
+ rcaron\or
+ Sacute\or
+ sacute\or
+ Scircumflex\or
+ scircumflex\or
+ Scedilla\or
+ scedilla\or
+ Scaron\or
+ scaron\or
+ Tcedilla\or
+ tcedilla\or
+ Tcaron\or
+ tcaron\or
+ Tstroke\or
+ tstroke\or
+ Utilde\or
+ utilde\or
+ Umacron\or
+ umacron\or
+ Ubreve\or
+ ubreve\or
+ Uring\or
+ uring\or
+ Uhungarumlaut\or
+ uhungarumlaut\or
+ Uogonek\or
+ uogonek\or
+ Wcircumflex\or
+ wcircumflex\or
+ Ycircumflex\or
+ ycircumflex\or
+ Ydiaeresis\or
+ Zacute\or
+ zacute\or
+ Zdotaccent\or
+ zdotaccent\or
+ Zcaron\or
+ zcaron\or
+ \@@unknownchar\else % slong\else
+ \@@unknownchar
+ \fi
+\stopunicodevector
+
+%D Faster, watch how we avoid zero and \TEX's
+%D automatically added \type {\relax}.
+
+\startunicodevector 1
+ \expandafter\strippedcsname
+ \ifcase\numexpr(#1+1)\or
+ \unknownchar \or
+ \unknownchar \or
+ \Abreve \or
+ \abreve \or
+ \Aogonek \or
+ \aogonek \or
+ \Cacute \or
+ \cacute \or
+ \Ccircumflex \or
+ \ccircumflex \or
+ \Cdotaccent \or
+ \cdotaccent \or
+ \Ccaron \or
+ \ccaron \or
+ \Dcaron \or
+ \dcaron \or
+ \Dstroke \or
+ \dstroke \or
+ \Emacron \or
+ \emacron \or
+ \Ebreve \or
+ \ebreve \or
+ \Edotaccent \or
+ \edotaccent \or
+ \Eogonek \or
+ \eogonek \or
+ \Ecaron \or
+ \ecaron \or
+ \Gcircumflex \or
+ \gcircumflex \or
+ \Gbreve \or
+ \gbreve \or
+ \Gdotaccent \or
+ \gdotaccent \or
+ \unknownchar \or % \Gcedilla \or
+ \unknownchar \or % \gcedilla \or
+ \Hcircumflex \or
+ \hcircumflex \or
+ \Hstroke \or
+ \hstroke \or
+ \Itilde \or
+ \itilde \or
+ \Imacron \or
+ \imacron \or
+ \Ibreve \or
+ \ibreve \or
+ \Iogonek \or
+ \iogonek \or
+ \Idotaccent \or
+ \dotlessi \or
+ \IJligature \or
+ \ijligature \or
+ \Jcircumflex \or
+ \jcircumflex \or
+ \Kcedilla \or
+ \kcedilla \or
+ \unknownchar \or % \kkra \or
+ \Lacute \or
+ \lacute \or
+ \Lcedilla \or
+ \lcedilla \or
+ \Lcaron \or
+ \lcaron \or
+ \unknownchar \or % \Ldotmiddle \or
+ \unknownchar \or % \ldotmiddle \or
+ \Lstroke \or
+ \lstroke \or
+ \Nacute \or
+ \nacute \or
+ \Ncedilla \or
+ \ncedilla \or
+ \Ncaron \or
+ \ncaron \or
+ \napostrophe \or
+ \Neng \or
+ \neng \or
+ \Omacron \or
+ \omacron \or
+ \Obreve \or
+ \obreve \or
+ \Ohungarumlaut \or
+ \ohungarumlaut \or
+ \OEligature \or
+ \oeligature \or
+ \Racute \or
+ \racute \or
+ \Rcedilla \or
+ \rcedilla \or
+ \Rcaron \or
+ \rcaron \or
+ \Sacute \or
+ \sacute \or
+ \Scircumflex \or
+ \scircumflex \or
+ \Scedilla \or
+ \scedilla \or
+ \Scaron \or
+ \scaron \or
+ \Tcedilla \or
+ \tcedilla \or
+ \Tcaron \or
+ \tcaron \or
+ \Tstroke \or
+ \tstroke \or
+ \Utilde \or
+ \utilde \or
+ \Umacron \or
+ \umacron \or
+ \Ubreve \or
+ \ubreve \or
+ \Uring \or
+ \uring \or
+ \Uhungarumlaut \or
+ \uhungarumlaut \or
+ \Uogonek \or
+ \uogonek \or
+ \Wcircumflex \or
+ \wcircumflex \or
+ \Ycircumflex \or
+ \ycircumflex \or
+ \Ydiaeresis \or
+ \Zacute \or
+ \zacute \or
+ \Zdotaccent \or
+ \zdotaccent \or
+ \Zcaron \or
+ \zcaron \or
+ \unknownchar \else % \slong \else
+ \unknownchar
+ \fi
+\stopunicodevector
+
+\protect \endinput
diff --git a/tex/context/base/unic-002.tex b/tex/context/base/unic-002.tex
new file mode 100644
index 000000000..1f9065ec6
--- /dev/null
+++ b/tex/context/base/unic-002.tex
@@ -0,0 +1,48 @@
+%D \module
+%D [ file=unic-002,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Macros,
+%D subtitle=Vector 2,
+%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.
+
+\unprotect
+
+\startunicodevector 2
+ \ifcase\numexpr(#1-198)
+ textcircumflex\or
+ textcaron\else
+ \ifcase\numexpr(#1-216)
+ textbreve\or
+ textdotaccent\or
+ \@@unknownchar\or
+ textogonek\or
+ texttilde\or
+ texthungarumlaut\else
+ \@@unknownchar
+ \fi\fi
+\stopunicodevector
+
+% ugly but faster
+
+\startunicodevector 2
+ \ifcase\numexpr(#1-198)
+ \strippedcsname \textcircumflex \or
+ \strippedcsname \textcaron \else
+ \ifcase\numexpr(#1-216)
+ \strippedcsname \textbreve \or
+ \strippedcsname \textdotaccent \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \textogonek \or
+ \strippedcsname \texttilde \or
+ \strippedcsname \texthungarumlaut \else
+ \strippedcsname \unknownchar
+ \fi\fi
+\stopunicodevector
+
+\protect \endinput
diff --git a/tex/context/base/unic-032.tex b/tex/context/base/unic-032.tex
new file mode 100644
index 000000000..75009566e
--- /dev/null
+++ b/tex/context/base/unic-032.tex
@@ -0,0 +1,84 @@
+%D \module
+%D [ file=unic-032,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Macros,
+%D subtitle=Vector 32,
+%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.
+
+\unprotect
+
+\startunicodevector 32
+ \ifcase\numexpr(#1-19)
+ endash\or
+ emdash\or
+ \@@unknownchar\or
+ \@@unknownchar\or
+ \@@unknownchar\or
+ quoteleft\or
+ quoteright\or
+ quotesinglebase\or
+ \@@unknownchar\or
+ quotedblleft\or
+ quotedblright\or
+ quotedblbase\or
+ \@@unknownchar\or
+ textdag\or
+ textddag\or
+ textbullet\or
+ \@@unknownchar\or
+ \@@unknownchar\or
+ \@@unknownchar\or
+ textellipsis\else
+ \ifcase\numexpr(#1-48)
+ perthousand\else
+ \ifcase\numexpr(#1-57)
+ \@@unknownchar\or % SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ \@@unknownchar\else % SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ \ifcase\numexpr(#1-172)
+ texteuro\else
+ \@@unknownchar
+ \fi\fi\fi\fi
+\stopunicodevector
+
+%D More efficient:
+
+\startunicodevector 32
+ \ifcase\numexpr(#1-19)
+ \strippedcsname \endash \or
+ \strippedcsname \emdash \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \quoteleft \or
+ \strippedcsname \quoteright \or
+ \strippedcsname \quotesinglebase \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \quotedblleft \or
+ \strippedcsname \quotedblright \or
+ \strippedcsname \quotedblbase \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \textdag \or
+ \strippedcsname \textddag \or
+ \strippedcsname \textbullet \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \unknownchar \or
+ \strippedcsname \textellipsis \else
+ \ifcase\numexpr(#1-48)
+ \strippedcsname \perthousand \else
+ \ifcase\numexpr(#1-57)
+ \strippedcsname \unknownchar \or % SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+ \strippedcsname \unknownchar \else % SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+ \ifcase\numexpr(#1-172)
+ \strippedcsname \texteuro \else
+ \strippedcsname \unknownchar
+ \fi\fi\fi\fi
+\stopunicodevector
+
+\protect \endinput
diff --git a/tex/context/base/unic-033.tex b/tex/context/base/unic-033.tex
new file mode 100644
index 000000000..5ff0d2e4d
--- /dev/null
+++ b/tex/context/base/unic-033.tex
@@ -0,0 +1,29 @@
+%D \module
+%D [ file=unic-033,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Macros,
+%D subtitle=Vector 33,
+%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.
+
+\unprotect
+
+\startunicodevector 33
+ \ifcase\numexpr(#1-34)
+ \@@unknownchar \else % TRADE MARK SIGN
+ \@@unknownchar
+ \fi
+\stopunicodevector
+
+%D For the moment:
+
+\startunicodevector 33
+ \@@unknownchar
+\stopunicodevector
+
+\protect \endinput
diff --git a/tex/context/base/unic-exp.tex b/tex/context/base/unic-exp.tex
new file mode 100644
index 000000000..0c5451ca1
--- /dev/null
+++ b/tex/context/base/unic-exp.tex
@@ -0,0 +1,69 @@
+%D \module
+%D [ file=unic-exp,
+%D version=2002.12.05,
+%D title=\CONTEXT\ \UNICODE\ Support,
+%D subtitle=\UNICODE\ vector expansion,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context UNICODE Macros (expansion)}
+
+%D \macros
+%D {expandunivector}
+%D
+%D The \type {\expandunivector} macro can be used to expand
+%D vectors, which leads to a faster run in case of documents
+%D with lots of \UTF-8 code.
+
+\unprotect
+
+\def\expandunivector[#1]%
+ {\processcommalist[#1]\doexpandunivector}
+
+\def\doexpandunivector#1%
+ {\ifcsname\@@univector#1\endcsname
+ \ifcsname\@@univector\@@univector#1\endcsname\else
+ \writestatus{unicode}{expanding vector #1}%
+ \setvalue{\@@univector\@@univector#1}{\expandedunivector{#1}}%
+ \dorecurse{255}
+ {\@EA\ifx\csname\csname\@@univector#1\endcsname\recurselevel\endcsname
+ \unknownchar
+ % skip
+ \else
+ \@EAEAEA\let\@EA\@EA\csname\@@univector\@@univector#1:\recurselevel\endcsname
+ \csname\csname\@@univector#1\endcsname\recurselevel\endcsname
+ \fi}%
+ \letbeundefined{\@@univector#1}%
+ \fi
+ \fi}
+
+\def\expandedunivector#1#2%
+ {\ifcsname\@@univector\@@univector#1:\number#2\endcsname
+ \@@univector\@@univector#1:\number#2%
+ \else
+ \@@unknownchar
+ \fi}
+
+%D For this purpose, we need to redefine the resolver.
+
+\def\doutfunihash#1#2%
+ {\ifcsname\@@univector\@@univector\number#1\endcsname
+ \csname\@@univector\@@univector\number#1\endcsname{\utfmod{#2}}%
+ \else\ifcsname\@@univector\number#1\endcsname
+ \csname\@@univector#1\endcsname{\utfmod{#2}}%
+ \else
+ \@@unknownchar
+ \fi\fi}
+
+\let\utfunihash\utfunihashglyph
+
+%D Let's use it:
+
+\expandunivector[0,1,2,32,33]
+
+\protect \endinput
diff --git a/tex/context/base/unic-ini.tex b/tex/context/base/unic-ini.tex
new file mode 100644
index 000000000..3860a7557
--- /dev/null
+++ b/tex/context/base/unic-ini.tex
@@ -0,0 +1,538 @@
+%D \module
+%D [ file=unic-ini,
+%D version=2002.12.03,
+%D title=\CONTEXT\ \UNICODE\ Support,
+%D subtitle=\UNICODE\ \& UTF-8 support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context UNICODE Macros (ini)}
+
+%D Sorry, we only support his in \ETEX.
+
+\beginTEX
+ \def\useunicodevector[#1]{}
+ \expandafter \endinput
+\endTEX
+
+\unprotect
+
+%D This module deals with unicode, and in particular with
+%D \UTF-8 conversion. The prelude to this module was \type
+%D {xtag-utf}, which is now replaced by a one||liner. The
+%D macros below deal with conversions. Thanks to Taco for
+%D providing the following conversion rules.
+%D
+%D \starttabulatie[|c|c|c|c|c|]
+%D \NC $b_1$ \NC $b_2$ \NC $b_3$ \NC $b_4$ \NC unicode \NC \NR
+%D \NC192---223\NC128---191\NC \NC \NC 0x80---0x7FF \NC \NR
+%D \NC224---239\NC128---191\NC128---191\NC \NC 0x800---0xFFFF \NC \NR
+%D \NC240---247\NC128---191\NC128---191\NC128---191\NC0x10000---0x1FFFF\NC \NR
+%D \stoptabulatie
+%D
+%D In \UTF-8 the characters in the range 128---191 are illegal
+%D as first characters. The characters 254 and 255 are
+%D completely illegal and should not appear at all (they are
+%D related to UTF16).
+%D
+%D The unicode number for an \UTF-8 sequence can be calculated
+%D as follows:
+%D
+%D \starttabulatie[|mc|m|mc|m|mc|m|mc|m|]
+%D \NC b_1 \NC \NC \NC \NC \NC \NC \NC if b_1<=127\NC \NR
+%D \NC 64(b_1-192)\NC+\NC (b_2-128)\NC \NC \NC \NC \NC if 192<=b1<=223\NC \NR
+%D \NC 4096(b_1-224)\NC+\NC 64(b_2-128)\NC+\NC (b_3-128)\NC \NC \NC if 224<=b1<=239\NC \NR
+%D \NC262144(b_1-240)\NC+\NC4096(b_2-128)\NC+\NC64(b_3-128)\NC+\NC(b_4-128)\NC if 240<=b1<=247\NC \NR
+%D \stoptabulatie
+%D
+%D A lot of information abou tunicode can be found on the
+%D web (search for Markus Kuhn and unicode and you'll
+%D probably end up at the right place).
+
+%D In \ETEX\ vocabulary such a conversion looks as follows.
+%D We need the \type {`} in order to turn a character into a
+%D number.
+%D
+%D \starttypen
+%D \def\utftwounicode#1#2%
+%D {\number\numexpr (64*(\numexpr (#1-192))+%
+%D (\numexpr(`#2-128)))}
+%D
+%D \def\utfthreeunicode#1#2#3%
+%D {\number\numexpr (4096*(\numexpr (#1-224))+
+%D 64*(\numexpr(`#2-128))+%
+%D (\numexpr(`#3-128)))}
+%D
+%D \def\utffourunicode#1#2#3#4%
+%D {\number\numexpr(262144*(\numexpr (#1-240))+
+%D 4096*(\numexpr(`#1-128))+
+%D 64*(\numexpr(`#2-128))+%
+%D (\numexpr(`#3-128)))}
+%D \stoptypen
+%D
+%D When we map the unicode number on one of the 256 char wide
+%D unicode tables, we need to do a bit of div and mod. Watch
+%D out: an \ETEX\ \type {/} is not the same as \TEX's \type
+%D {\divide}. The former rounds, while the later truncates, so
+%D we need to trucate ourselves. In case you wonder why we
+%D use \type {\numexpr}: this is not only more convenient, but
+%D also makes it possible to avoid scratch counters, so that we
+%D get fast and fully expandable conversions.
+%D
+%D \starttypen
+%D \def\utfdiv#1{\number\numexpr((#1-128)/256)}
+%D \def\utfmod#1{\number\numexpr((#1)-(256*(\utfdiv{#1})))}
+%D \stoptypen
+%D
+%D So far for the readable alternatives. When using \type
+%D {\numexpr} you should be aware of rather unexpected look
+%D ahead effects. The next implementation uses registers,
+%D which saves tokens and is faster. In this case we gain
+%D some 10\% time.
+
+\chardef \utf@a=64
+\mathchardef \utf@b=4096
+\newcount\utf@c\utf@c=262144
+
+\chardef \utf@d=192
+\chardef \utf@e=224
+\chardef \utf@f=240
+
+\chardef \utf@g=128
+\mathchardef \utf@h=256
+\chardef \utf@i=127
+
+%D The definitions now become:
+%D
+%D \starttypen
+%D \def\utftwounicode#1#2%
+%D {\number\numexpr(\utf@a*(\numexpr (#1-\utf@d))+%
+%D (\numexpr(`#2-\utf@g)))}
+%D
+%D \def\utfthreeunicode#1#2#3%
+%D {\number\numexpr(\utf@b*(\numexpr (#1-\utf@e))+
+%D \utf@a*(\numexpr(`#2-\utf@g))+%
+%D (\numexpr(`#3-\utf@g)))}
+%D
+%D \def\utffourunicode#1#2#3#4%
+%D {\number\numexpr(\utf@c*(\numexpr (#1-\utf@f))+
+%D \utf@b*(\numexpr(`#2-\utf@g))+
+%D \utf@a*(\numexpr(`#3-\utf@g))+%
+%D (\numexpr(`#4-\utf@g)))}
+%D \stoptypen
+%D
+%D And:
+%D
+%D \starttypen
+%D \def\utfdiv#1{\number\numexpr((#1-\utf@g)/\utf@h)}
+%D \def\utfmod#1{\number\numexpr((#1)-(\utf@h*(\utfdiv{#1})))}
+%D \stoptypen
+%D
+%D Depending on the usage, you can rely on parenthesis only:
+%D
+%D \starttypen
+%D \def\utftwounicode#1#2%
+%D {\numexpr(\utf@a*(#1-\utf@d)+%
+%D `#2-\utf@g)}
+%D
+%D \def\utfthreeunicode#1#2#3%
+%D {\numexpr(\utf@b*(#1-\utf@e)+%
+%D \utf@a*(`#2-\utf@g)+%
+%D `#3-\utf@g)}
+%D
+%D \def\utffourunicode#1#2#3#4%
+%D {\numexpr(\utf@c*(#1-\utf@f)+%
+%D \utf@b*(`#2-\utf@g)+%
+%D \utf@a*(`#3-\utf@g)+%
+%D `#4-\utf@g)}
+%D \stoptypen
+
+\def\utfdiv#1{\number\numexpr((#1-\utf@g)/\utf@h)}
+\def\utfmod#1{\number\numexpr(#1-\utf@h*((#1-\utf@g)/\utf@h))}
+
+%D When tracing we also need:
+
+\def\utfvid#1{\number\numexpr((#1-\medcard)/\maxcard)}
+
+%D Using the three conversion macros, we can now implement
+%D a few handlers. They all call the general \type
+%D {\unicodechar} conversion macro.
+%D
+%D \starttypen
+%D \def\utftwouniglph#1#2%
+%D {\unicodechar{\utftwounicode {#1}{#2}}}
+%D
+%D \def\utfthreeuniglph#1#2#3%
+%D {\unicodechar{\utfthreeunicode{#1}{#2}{#3}}}
+%D
+%D \def\utffouruniglph#1#2#3#4%
+%D {\unicodechar{\utffourunicode {#1}{#2}{#3}{#4}}}
+%D \stoptypen
+%D
+%D Because the unicode number is used a few times per
+%D conversion, we can expand it once (\type {\the} and \type
+%D {\number} make sure of this). This saves us another 10\%.
+%D
+%D \starttypen
+%D \def\utftwouniglph#1#2%
+%D {\@EA\unicodechar\@EA{\the\utftwounicode{#1}{#2}}}
+%D
+%D \def\utfthreeuniglph#1#2#3%
+%D {\@EA\unicodechar\@EA{\the\utfthreeunicode{#1}{#2}{#3}}}
+%D
+%D \def\utffouruniglph#1#2#3#4%
+%D {\@EA\unicodechar\@EA{\the\utffourunicode{#1}{#2}{#3}{#4}}}
+%D \stoptypen
+%D
+%D We can rewrite these macros to faster alternatives: the
+%D less arguments we pass, the faster the conversion will be,
+%D but at the price of readability.
+
+\def\utftwouniglph#1#2%
+ {\@EA\unicodechar\@EA{\the\numexpr(\utf@a*(#1-\utf@d)+%
+ `#2-\utf@g)}}
+
+\def\utfthreeuniglph#1#2#3%
+ {\@EA\unicodechar\@EA{\the\numexpr(\utf@b*(#1-\utf@e)+%
+ \utf@a*(`#2-\utf@g)+`#3-\utf@g)}}
+
+\def\utffouruniglph#1#2#3#4%
+ {\@EA\unicodechar\@EA{\the\numexpr(\utf@c*(#1-\utf@f)+%
+ \utf@b*(`#2-\utf@g)+\utf@a*(`#3-\utf@g)+`#4-\utf@g)}}
+
+%D Now we come to the unicode handler itself. We will use a few
+%D constants, which saves us (at least at the time of writing
+%D and testing these macros) another 10\%.
+
+\def\@@univector {univ}
+\def\@@unknownchar{unknownchar}
+
+%D Now comes the nice part: turning codes into glyphs. The
+%D actual conversion does not take place here, but is done by
+%D macros in \type{unic-nnn} files. There we map a range onto
+%D named glyphs, so that they fit well into the rest of
+%D \CONTEXT.
+
+%D \macros
+%D {utfunicodetracer}
+%D
+%D By default, the converter produces a character representation,
+%D but for tracing purposes, you can set a trace option.
+
+\chardef\utfunicodetracer=0
+
+%D \def\TraceUnic#1%
+%D {\chardef\utfunicodetracer#1\relax\enableregime[utf]Å°}
+%D
+%D \starttabulatie[|c|c|c|c|c|c|]
+%D \NC option \NC number\NC mapping\NC glyph\NC string\NC example \NC \NR
+%D \NC 0 \NC \NC \NC \star\NC \NC \TraceUnic0\NC \NR
+%D \NC 1 \NC \star \NC \NC \NC \NC \TraceUnic1\NC \NR
+%D \NC 2 \NC \NC \star \NC \NC \NC \TraceUnic2\NC \NR
+%D \NC 3 \NC \star \NC \star \NC \NC \NC \TraceUnic3\NC \NR
+%D \NC 4 \NC \star \NC \NC \star\NC \NC \TraceUnic4\NC \NR
+%D \NC 5 \NC \NC \star \NC \star\NC \NC \TraceUnic5\NC \NR
+%D \NC 6 \NC \star \NC \star \NC \star\NC \NC \TraceUnic6\NC \NR
+%D \NC 7 \NC \NC \NC \NC \star \NC \TraceUnic7\NC \NR
+%D \NC otherwise\NC \NC \NC \star\NC \NC \TraceUnic8\NC \NR
+%D \stoptabulatie
+
+%D \macros
+%D {unicodechar}
+%D
+%D Next we implement the character handler:
+
+\def\unicodechar
+ {\ifcase\utfunicodetracer
+ \expandafter\utfunihash \or
+ \expandafter\utfunichar \or
+ \expandafter\utfunisplit \or
+ \expandafter\utfuniboth \or
+ \expandafter\utfunihashchar \or
+ \expandafter\utfunihashsplit \or
+ \expandafter\utfunihashboth \or
+ \@EA\string\@EA\unicodechar \else
+ \expandafter\utfunihash
+ \fi}
+
+%D \macros
+%D {unicodehexnumber}
+%D
+%D A few auxiliary macros, producing the range||char pair:
+
+\def\unicodepair#1%
+ {\utfdiv{#1}:\utfmod{#1}}
+
+\let\unicodenumber\firstofoneargument
+
+%\def\unicodehexnumber#1%
+% {\expanded{\uchexnumbers{\utfdiv{#1}}}%
+% \expanded{\uchexnumbers{\utfmod{#1}}}}
+
+\def\unicodehexnumber#1%
+ {\ifnum#1>\maxcard
+ \expanded{\uchexnumbers{\utfvid{#1}}}%
+ \expanded{\uchexnumbers{\utfdiv{\utfdiv{#1}}}}%
+ \else
+ 00%
+ \expanded{\uchexnumbers{\utfdiv{#1}}}%
+ \fi
+ \expanded{\uchexnumbers{\utfmod{#1}}}}
+
+%D The following macros visualize the unicode character. The
+%D \type {\relax} in front of the \type {-} prevents lookahead
+%D problems; somehow \type {\numexpr} cannot look beyond this
+%D sign, and expects a number.
+
+\def\utfunichar #1%
+ {{\tttf U\low{\unicodenumber{#1}}}}
+
+\def\utfunisplit#1%
+ {{\tttf U\low{\unicodepair{#1}}}}
+
+\def\utfuniboth #1%
+ {{\tttf U\low{\unicodenumber{#1\relax}->\unicodepair{#1}}}}
+
+%D The character itself is accessed and typeset by:
+%D
+%D \starttypen
+%D \def\utfunihash#1%
+%D {\executeifdefined{\@@univector\utfdiv{#1}}%
+%D \gobbleoneargument{\utfmod{#1}}}
+%D \stoptypen
+%D
+%D Again, we can provide a faster alternative, because inside
+%D the conditional executer, the argument is expanded twice,
+%D and therefore the calculation done once more than needed.
+%D So, we make sure that the argument is expansion on
+%D forehand. Just to remind you: \type {#1} is the \UNICODE\
+%D number.
+%D
+%D \starttypen
+%D \def\utfunihash#1%
+%D {\@EA\executeifdefined\@EA{\@EA\@@univector\number\utfdiv{#1}}%
+%D {\unknownchar\gobbleoneargument}{\utfmod{#1}}}
+%D \stoptypen
+%D
+%D In order to save calculation time, I decided to change
+%D this definition into:
+
+%D \starttypen
+%D \def\utfunihash#1%
+%D {\@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}}
+%D
+%D \def\doutfunihash#1#2%
+%D {\ifcsname\@@univector\number#1\endcsname
+%D \csname\csname\@@univector#1\endcsname{\utfmod{#2}}\endcsname
+%D \else
+%D \unknownchar
+%D \fi}
+%D \stoptypen
+%D
+%D Or leaner and meaner:
+%D
+%D \starttypen
+%D \def\doutfunihash#1#2%
+%D {\csname
+%D \ifcsname\@@univector\number#1\endcsname
+%D \csname\@@univector#1\endcsname{\utfmod{#2}}%
+%D \else
+%D \@@unknownchar
+%D \fi
+%D \endcsname}
+%D \stoptypen
+%D
+%D And finaly it became:
+
+\def\doutfunihash#1#2%
+ {\ifcsname\@@univector\number#1\endcsname
+ \csname\@@univector#1\endcsname{\utfmod{#2}}%
+ \else
+ \@@unknownchar
+ \fi}
+
+\def\utfunihashglyph#1%
+ {\csname\@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}\endcsname}
+
+\def\utfunihashcommand
+ {\@EAEAEA\string\utfunihashglyph}
+
+%D For practical purposes, we handle the normal \ASCII\
+%D characters here:
+
+\def\utfunihashglyph#1%
+ {\csname
+ \ifnum#1<\utf@i
+ \strippedcsname\unicodeasciicharacter\endcsname{#1}%
+ \else
+ \@EA\doutfunihash\@EA{\number\utfdiv{#1}}{#1}\endcsname
+ \fi}
+
+%D With:
+
+\let\unicodeasciicharacter\rawcharacter
+
+%D Now we can say:
+
+\let\utfunihash\utfunihashglyph
+
+%D The combined presentation is implemented by:
+
+\def\utfunihashchar #1%
+ {\utfunihash{#1}\low{\infofont\unicodenumber{#1}}}
+
+\def\utfunihashsplit#1%
+ {\utfunihash{#1}\low{\infofont\unicodepair{#1}}}
+
+\def\utfunihashboth #1%
+ {\utfunihash{#1}\low{\infofont\unicodenumber{#1\relax}->\unicodepair{#1}}}
+
+%D Unknown characters get a placeholder.
+
+\unexpanded\def\unknownchar % {} prevents problems with arguments
+ {{\hbox{\vrule\!!width.5em\!!height1ex\!!depth\zeropoint}}}
+
+%D So far for the conversion macros. The optimizations we
+%D did, brought down the runtime some 50\%, which, given that
+%D the majority of characters will be normal \ASCII\
+%D characters, the penalty of conversion is not that large.
+
+%D \macros
+%D {useunicodevector}
+%D
+%D Since we end up with many encodings, it starts making
+%D sense to postpone loading, so let's start doing this
+%D with \UNICODE.
+
+\def\useunicodevector[#1]%
+ {\processcommalist[#1]\douseunicodevector}
+
+\def\douseunicodevector#1%
+ {\ifundefined{\@@univector#1}%
+ \readsysfile{unic-\ifnum#1<10 00\else\ifnum#1<100 0\fi\fi#1}
+ {\writestatus{unicode}{loading vector #1}}
+ {\writestatus{unicode}{unknown vector #1}}%
+ \fi}
+
+%D \macros
+%D {startunicodevector}
+%D
+%D A vector roughly looks as follows. By putting the text
+%D inside the name constructor, we prevent problems with
+%D partial expansion in macros and special cases.
+%D
+%D \starttypen
+%D \startunicodevector 0
+%D \ifcase\numexpr(#1-159)\or
+%D \@@unknownchar\or % NO-BREAK SPACE
+%D exclamdown\or
+%D textcent\or
+%D ....\else
+%D \@@unknowncharacter
+%D \fi
+%D \stopunicodevector
+%D \stoptypen
+%D
+%D In vector \type {unix-000} you will find another
+%D optimizations. By using as less tokens as possible, we limit
+%D the time skipping branches in the test, and save upto 20\%
+%D runtime.
+
+\def\startunicodevector #1 #2\stopunicodevector
+ {\setgvalue{\@@univector#1}##1{#2}}
+
+%D Here we provide another auxiliary macro:
+%D
+%D \startbuffer
+%D \unicodeinfoline{196}{Ä}{LATIN CAPITAL LETTER A WITH DIAERESIS}
+%D \unicodeinfoline{197}{Ã…}{LATIN CAPITAL LETTER A WITH RING ABOVE}
+%D \unicodeinfoline{198}{Æ}{LATIN CAPITAL LETTER AE}
+%D \unicodeinfoline{199}{Ç}{LATIN CAPITAL LETTER C WITH CEDILLA}
+%D \unicodeinfoline{200}{È}{LATIN CAPITAL LETTER E WITH GRAVE}
+%D \unicodeinfoline{201}{É}{LATIN CAPITAL LETTER E WITH ACUTE}
+%D \stopbuffer
+%D
+%D \typebuffer
+%D
+%D \start \enableregime[utf]\getbuffer \stop
+
+\def\unicodeinfoline#1#2#3%
+ {\ifnum#1>\utf@g % 128
+ \noindent \hbox
+ {\hbox to 4em{\tttf\unicodehexnumber{#1}\hss}\quad
+ \hbox to 1em{#2\hss}\quad
+ \hbox to 9em{\tttf\unicodenumber{#1\relax}->\unicodepair{#1}\hss}\quad
+ \hbox to 9em{\tttf\let\utfunihash\utfunihashcommand#2\hss}\quad % tricky
+ \lowercase {\tttf#3}}\par
+ \fi}
+
+%D The next code permits utf code in hyperlinks:
+
+\def\cleanunicodechar#1{.#1.}
+
+\appendtoks \let\unicodechar\cleanunicodechar \to \everycleanupfeatures
+
+%D We will now hook this mechanism in the existing font
+%D handler. More documentation will follow. Probably, some
+%D features in \type {font-uni.tex} will be generalized
+%D and moved here.
+
+\def\unidiv{0} \def\unimod{0}
+
+\chardef\utfunihashmode =0 % 1 = enabled
+
+\def\utfunifontglyph#1%
+ {\xdef\unidiv{\number\utfdiv{#1}}%
+ \xdef\unimod{\number\utfmod{#1}}%
+ \ifnum#1<\utf@i
+ \char\unimod % \unicodeascii\unimod
+ \else\ifcsname\@@univector\unidiv\endcsname
+ \csname\doutfunihash{\unidiv}{#1}\endcsname
+ \else % so, these can be different fonts !
+ \unicodeglyph\unidiv\unimod % no \uchar (yet)
+ \fi\fi}
+
+\chardef\utfunicommandmode=0 % 1 = hex
+
+\def\unicodecommandchar#1#2%
+ {\string\char
+ \ifcase\utfunicommandmode
+ #1:#2\else\lchexnumbers#1:\lchexnumbers#2%
+ \fi}
+
+\def\utfunifontcommand#1%
+ {\xdef\unidiv{\number\utfdiv{#1}}%
+ \xdef\unimod{\number\utfmod{#1}}%
+ \ifnum#1<\utf@i
+ \unicodecommandchar\unidiv\unimod
+ \else\ifcsname\@@univector\unidiv\endcsname
+ \@EA\string\csname\doutfunihash{\unidiv}{#1}\endcsname
+ \else
+ \unicodecommandchar\unidiv\unimod
+ \fi\fi}
+
+\def\utfunihash
+ {\ifcase\utfunihashmode
+ \@EA\utfunihashglyph
+ \else
+ \@EA\utfunifontglyph
+ \fi}
+
+\def\utfunihashcommand
+ {\ifcase\utfunihashmode
+ \@EA\utfunihashcommand
+ \else
+ \@EA\utfunifontcommand
+ \fi}
+
+%D Well, let's at least preload a few familiar ones. Here we
+%D also load the \UTF\ regime.
+
+\useunicodevector[0,1,2,32,33] \useregime[utf]
+
+\protect \endinput
diff --git a/tex/context/base/verb-ini.tex b/tex/context/base/verb-ini.tex
index 29ad0ecde..5cd56883c 100644
--- a/tex/context/base/verb-ini.tex
+++ b/tex/context/base/verb-ini.tex
@@ -13,7 +13,7 @@
%D Today I would implement the pretty handler slightly
%D different, using stack and intermediate flushing. Maybe
-%D even without active chars.
+%D even without active chars. So, someday \unknown
%D Because this module is quite independant of system macros,
%D it can be used as a stand||alone verbatim environment.
@@ -190,10 +190,10 @@
\catcode`\^^I=\@@active
-\gdef\settabskips%
- {\let\processverbatimline=\doprocesstabskipline
- \catcode`\^^I=\@@active
- \let^^I=\doprocesstabskip}
+\gdef\settabskips
+ {\let\processverbatimline\doprocesstabskipline
+ \catcode`\^^I\@@active
+ \let^^I\doprocesstabskip}
\egroup
@@ -250,7 +250,7 @@
\spaceskip\wd\scratchbox
\xspaceskip\spaceskip}
-\def\setupinlineverbatim%
+\def\setupinlineverbatim
{\verbatimfont
\setverbatimspaceskip
\let\obeytabs\ignoretabs
@@ -258,7 +258,7 @@
\let\obeypages\ignorepages
\setupcopyverbatim}
-\def\doprocessinlineverbatim%
+\def\doprocessinlineverbatim
{\ifx\next\bgroup
\setupinlineverbatim
\catcode`\{\@@begingroup
@@ -339,13 +339,13 @@
%D The long ones are \type{\nobreaks} and the short ones
%D \type{\goodbreaks}. And this is how it's done:
-\def\doverbatimnobreak%
+\def\doverbatimnobreak
{\ifoptimizeverbatim\penalty500\fi}
-\def\doverbatimgoodbreak%
+\def\doverbatimgoodbreak
{\ifoptimizeverbatim\penalty\linepenalty\fi}
-\def\doflushverbatimline%
+\def\doflushverbatimline
{\expandafter\dodoverbatimline\expandafter{\savedverbatimline}}
\let\handleverbatimline=\relax
@@ -360,52 +360,54 @@
%
% more efficient
-\def\initializeverbatimline%
+\global\chardef\verbatimstatus0
+
+\def\initializeverbatimline
{\global\let\savedverbatimline\empty
\global\chardef\verbatimstatus\ifskipfirstverbatimline0 \else1 \fi}
-\def\presetemptyverbatimline%
+\def\presetemptyverbatimline
{\ifcase\verbatimstatus
- \global\chardef\verbatimstatus=1
+ \global\chardef\verbatimstatus1
\or
\or
% \ifoptimizeverbatim\else\doemptyverbatimline\fi
\or
\doflushverbatimline
- \global\let\savedverbatimline=\empty
+ \global\let\savedverbatimline\empty
\doemptyverbatimline
- \global\chardef\verbatimstatus=2
+ \global\chardef\verbatimstatus2
\else
\kern\zeropoint
\doverbatimnobreak
\doflushverbatimline
- \global\let\savedverbatimline=\empty
+ \global\let\savedverbatimline\empty
\doemptyverbatimline
- \global\chardef\verbatimstatus=2
+ \global\chardef\verbatimstatus2
\fi}
-\def\presetnormalverbatimline%
+\def\presetnormalverbatimline
{\ifcase\verbatimstatus
- \global\chardef\verbatimstatus=2
+ \global\chardef\verbatimstatus2
\or
- \global\chardef\verbatimstatus=3
+ \global\chardef\verbatimstatus3
\or
- \global\chardef\verbatimstatus=3
+ \global\chardef\verbatimstatus3
\or
\doflushverbatimline
- \global\chardef\verbatimstatus=4
+ \global\chardef\verbatimstatus4
\or
\kern\zeropoint
\doverbatimnobreak
\doflushverbatimline
- \global\chardef\verbatimstatus=5
+ \global\chardef\verbatimstatus5
\or
\doverbatimgoodbreak
\doflushverbatimline
\fi
- \global\let\savedverbatimline=\verbatimline}
+ \global\let\savedverbatimline\verbatimline}
-\def\presetlastverbatimline%
+\def\presetlastverbatimline
{\ifcase\verbatimstatus \or \or \or
\doflushverbatimline
\else
@@ -470,7 +472,7 @@
\parskip\zeropoint
\processingverbatimtrue
\global\linepartrue
- \expandafter\let\csname\verbatimname\endcsname=\relax
+ \expandafter\let\csname\verbatimname\endcsname\relax
\edef\endofverbatimcommand{\csname\verbatimname\endcsname}%
\edef\endofverbatimcommand{\meaning\endofverbatimcommand}%
\verbatimfont
@@ -492,6 +494,8 @@
%D it assigns all characters \CATCODE~11. Next we switch to
%D french spacing and call for obeyance.
+\newevery \everysetupverbatim \relax
+
\def\setupcopyverbatim
{\uncatcodecharacters
\frenchspacing
@@ -499,7 +503,8 @@
\obeytabs
\obeylines
\obeypages
- \obeycharacters}
+ \obeycharacters
+ \the\everysetupverbatim}
%D \macros
%D {eightbitcharacters,
@@ -521,8 +526,8 @@
\loop
\savecatcode
#1\relax
- \advance\scratchcounter -1
- \ifnum\scratchcounter>-1
+ \advance\scratchcounter \minusone
+ \ifnum\scratchcounter>\minusone
\repeat
\let\savecatcode\relax
\let\restorecatcodes\dorestorecatcodes}
@@ -619,7 +624,7 @@
\newif\iflocalcatcodes
-\def\savecatcode%
+\def\savecatcode
{\iflocalcatcodes \else
\saverestoreactivecatcode
{\@EA\let\csname\@@aa@@\the\scratchcounter\endcsname~}%
@@ -629,7 +634,7 @@
%D It's counterpart is:
-\def\restorecatcode%
+\def\restorecatcode
{\@EA\catcode\@EA\scratchcounter
\csname\@@cc@@\the\scratchcounter\endcsname
\saverestoreactivecatcode
@@ -652,7 +657,7 @@
%D or when we've saved things calls for:
-\def\dorestorecatcodes%
+\def\dorestorecatcodes
{\iflocalcatcodes \else
\doprocesscatcodes\restorecatcode
\fi}
@@ -661,7 +666,7 @@
%D when needed. An application of this macros can be found in
%D buffering data.
-\def\beginrestorecatcodes%
+\def\beginrestorecatcodes
{\ifx\restorecatcodes\relax
\let\endrestorecatcodes\relax
\else
@@ -757,7 +762,7 @@
{\bgroup % due to pretty status
\iflinepar\else\EveryPar{}\fi
\leavevmode
- \xdef\dokeepverbatimlinedata%
+ \xdef\dokeepverbatimlinedata
{\parindent \the\parindent
\hangindent\the\hangindent
\hangafter \the\hangafter
@@ -810,12 +815,12 @@
\def\verbatimbaselineskip% We don't use \let here!
{\baselineskip}
-\def\doemptyverbatimline%
+\def\doemptyverbatimline
{\vskip\verbatimbaselineskip
- {\setbox0=\hbox{\the\everyline}}%
+ {\setbox0\hbox{\the\everyline}}%
\global\linepartrue}
-\def\obeyemptylines%
+\def\obeyemptylines
{\def\doemptyverbatimline{\doverbatimline}}
%D \TEX\ does not offer \type{\everyline}, which is a direct
@@ -864,21 +869,21 @@
{\obeyedspace % \hskip.5em or \hbox to .5em{}
\ifdone
\donefalse
- \advance\scratchcounter 1
+ \advance\scratchcounter \plusone
\@EA\doprocesstabskip
\else\ifnum\scratchcounter>\spacespertab
% nothing
\else
- \advance\scratchcounter 1
+ \advance\scratchcounter \plusone
\@EAEAEA\doprocesstabskip
\fi\fi}
\def\dodoprocesstabskipline#1#2\endoftabskipping
{\ifnum\scratchcounter>\spacespertab
- \scratchcounter=1
+ \scratchcounter\plusone
\donetrue
\else
- \advance\scratchcounter 1
+ \advance\scratchcounter \plusone
\donefalse
\fi
\ifx#1\relax
@@ -888,14 +893,20 @@
\fi
\next}
-\let\endoftabskipping=\relax
+\let\endoftabskipping=\relax % will become obsolete
\def\doprocesstabskipline#1%
{\bgroup
- \scratchcounter=1
+ \scratchcounter1
\dodoprocesstabskipline#1\relax\endoftabskipping
\egroup}
+% ^ will be replaced
+
+\chardef\tabskipmode=1 % 0=quit 1=no test 2=test on active>128
+
+%
+
\def\processverbatimline#1{#1} % remove the fake grouping
%D \macros
@@ -914,17 +925,25 @@
\newread\verbatiminput
+\newcount\verbatimlinenumber
+
+\let \beginofverbatimlines \relax
+\let \endofverbatimlines \relax
+
\def\processfileverbatim#1%
{\par
\bgroup
+ \processingverbatimtrue
+ \global\verbatimlinenumber0
+ \global\linepartrue
+ \beginofverbatimlines
+ \bgroup
\parindent\zeropoint
\ifdim\lastskip<\parskip
\removelastskip
\vskip\parskip
\fi
\parskip\zeropoint
- \processingverbatimtrue
- \global\linepartrue
\uncatcodecharacters
\verbatimfont
\setverbatimspaceskip
@@ -942,6 +961,7 @@
\def\readline%
{\ifeof\verbatiminput \else
\ifx\firstverbatimfileline\empty
+\global\advance\verbatimlinenumber\plusone
\read\verbatiminput to \verbatimline
\else
\let\verbatimline\firstverbatimfileline
@@ -951,7 +971,7 @@
\ifeof\verbatiminput
\ifx\lastverbatimfileline\empty
\presetlastverbatimline
- \let\readline=\relax
+ \let\readline\relax
\else % we will re-enter the \ifeof branch twice
\presetnormalverbatimline
\def\readline%
@@ -974,6 +994,8 @@
\fi
\closein\verbatiminput
\egroup
+ \endofverbatimlines
+ \egroup
\ignorespaces}
%D \macros
@@ -1092,7 +1114,7 @@
\global\chardef\prettychar0
\bgroup
\let\handleprettytoken\setprettydata
- \setbox0=\hbox{#1}% expands #1 and ignores space
+ \setbox0\hbox{#1}% expands #1 and ignores space
\egroup}
%D If needed the current and next token can be handled alongside:
@@ -1228,7 +1250,7 @@
\let\prettyend=\relax
-\def\prettybegin%
+\def\prettybegin
{\bgroup\def\prettyend{\the\everyprettyend\egroup}}
\installnewpretty B \prettybegin
@@ -1346,12 +1368,12 @@
|let|oldprettytype=|prettytype
|getprettydata{####1}%
|ifnum|prettytype=|oldprettytype
- |let|next=|newpretty
+ |let|next|newpretty
|else
|def|next{|newprettycommand{#1}##1####1}%
|fi
|next}%
- |let|next=|dododohandlenewpretty
+ |let|next|dododohandlenewpretty
|else
|def|next{|newprettycommand{#1}##1}%
|fi
@@ -1376,7 +1398,7 @@
%\else\ifx\next\egroup % end of line / no signal
% \let\next=#2%
%\else\ifx\next\par % end of line / \par
- \let\next=#2%
+ % \let\next=#2%
\else
\let\next=#1%
\fi\fi%\fi\fi
@@ -1548,12 +1570,12 @@
\def\_{\string_}%
\def\^{\string^}%
\presettyping
- \processinlineverbatim{\egroup}}
+ \processinlineverbatim\egroup}
\def\starttyping
{\bgroup
\presettyping
- \processdisplayverbatim{\stoptyping}}
+ \processdisplayverbatim\stoptyping}
\def\stoptyping
{\egroup}
@@ -1595,27 +1617,27 @@
\def\startTEX
{\bgroup \everypar{}%
- \let\obeycharacters=\setupprettyTEXtype
+ \let\obeycharacters\setupprettyTEXtype
\processdisplayverbatim{\stopTEX}}
\def\startMP
{\bgroup \everypar{}%
- \let\obeycharacters=\setupprettyMPtype
+ \let\obeycharacters\setupprettyMPtype
\processdisplayverbatim{\stopMP}}
\def\startPL
{\bgroup \everypar{}%
- \let\obeycharacters=\setupprettyPLtype
+ \let\obeycharacters\setupprettyPLtype
\processdisplayverbatim{\stopPL}}
\def\startJV
{\bgroup \everypar{}%
- \let\obeycharacters=\setupprettyJVtype
+ \let\obeycharacters\setupprettyJVtype
\processdisplayverbatim{\stopJV}}
\def\startSQL
{\bgroup \everypar{}%
- \let\obeycharacters=\setupprettySQLtype
+ \let\obeycharacters\setupprettySQLtype
\processdisplayverbatim{\stopSQL}}
\let\stopTEX=\egroup
@@ -1823,8 +1845,8 @@
\let\doifendofverbatim=\doifelse
- \def\permitshiftedendofverbatim%
- {\let\doifendofverbatim=\doifinstringelse}
+ \def\permitshiftedendofverbatim
+ {\let\doifendofverbatim\doifinstringelse}
% \def\processdisplayverbatim#1%
% {\par
@@ -1891,7 +1913,7 @@
\def\doprocessdisplayverbatim#1#2%
{\par
\bgroup
- \escapechar=-1
+ \escapechar-1
\xdef\verbatimname{\string#2}%
\egroup
\ifcase#1%
@@ -1926,4 +1948,60 @@
\fi
+%D \macros
+%D {installprettyescape}
+%D
+%D The next feature is dedicated to Fabrice Popineau who
+%D wanted math inside verbatim.
+
+\def\prettyescapecnt{255}
+
+\def\installprettyescape
+ {\dodoubleempty\doinstallprettyescape}
+
+\def\doinstallprettyescape[#1][#2]#3 #4%
+ {\bgroup
+ \doglobal\decrement\prettyescapecnt
+ \def\docommando##1%
+ {\def\next{\dodoinstallprettyescape{##1}{#3}{#4}}%
+ \catcode`#3=\@@active
+ \@EA\scantokens\@EA{\next}}%
+ \iffirstargument
+ \processcommalist[#1]\docommando
+ \else
+ \docommando\empty
+ \fi}
+
+\def\dodoinstallprettyescape#1#2#3%
+ {\unexpanded\setgvalue{PRETTY@#1@\prettyescapecnt}##1##2#2{#3{##2}}%
+ \expanded % we need to freeze the counter
+ {\doglobal\noexpand\appendtoks
+ \noexpand\doif{#1}\noexpand\prettyidentifier
+ {\noexpand\setpretty`\string#2=\prettyescapecnt
+ \noexpand\installprettyhandler \prettyescapecnt\space\getvalue{PRETTY@#1@\prettyescapecnt}}%
+ }\to \everysetupverbatim
+ \egroup}
+
+%D An example of its usage is:
+%D
+%D \startbuffer
+%D \def\xverbatimmath#1#2{\naturaltextext\mathematics{#1}\relax}
+%D \def\yverbatimmath#1#2{\naturaltextext\mathematics{[[#1]]}\relax}
+%D \def\zverbatimmath#1#2{\naturaltextext\mathematics{(#1)}\relax}
+%D
+%D \installprettyescape [MP] $ \xverbatimmath
+%D \installprettyescape [MP] ~ \yverbatimmath
+%D \installprettyescape [MP] * \zverbatimmath
+%D
+%D \startMP
+%D if $x>10$ :
+%D $x := 20$
+%D ~x := 20~
+%D *x := 20*
+%D end
+%D \stopMP
+%D \stopbuffer
+%D
+%D \typebuffer \getbuffer
+
\protect \endinput
diff --git a/tex/context/base/verb-tex.tex b/tex/context/base/verb-tex.tex
index a7366a9ca..0ccf1e218 100644
--- a/tex/context/base/verb-tex.tex
+++ b/tex/context/base/verb-tex.tex
@@ -78,27 +78,27 @@
%D mechanism. That way we can use different schemes i a quite
%D natural way.
-\gdef\setupprettyTEXtype%
+\gdef\setupprettyTEXtype
{\def\prettyidentifier{TEX}%
\TEXsetcontrols
\TEXsethandlers
\TEXsetspecials}
-\gdef\TEXsetcontrols%
+\gdef\TEXsetcontrols
{\saveprettycontrols
\everyprettyend
{\TEXendofcommand
\TEXendofparameter}%
- \def\obeyedspace%
+ \def\obeyedspace
{\TEXendofcommand
\TEXendofparameter
\oldobeyedspace}%
- \def\flushrestofverbatimline%
+ \def\flushrestofverbatimline
{\TEXendofcommand
\TEXendofparameter}%
\let\obeytabs=\ignoretabs}
-\gdef\TEXsetspecials%
+\gdef\TEXsetspecials
{\setpretty`\$=1 \setpretty`\{=1 \setpretty`\}=1
\setpretty`\[=2 \setpretty`\]=2 \setpretty`\(=2 \setpretty`\)=2
\setpretty`\==2 \setpretty`\<=2 \setpretty`\>=2 \setpretty`\"=2
@@ -126,7 +126,7 @@
\setpretty`\?=9 \setpretty`\!=9 \setpretty`\@=9
\setpretty`\%=0 }
-\gdef\TEXsethandlers%
+\gdef\TEXsethandlers
{\installprettyhandler 1 \TEXtypeone
\installprettyhandler 2 \TEXtypetwo
\installprettyhandler 3 \TEXtypethree
@@ -141,7 +141,7 @@
\doglobal\newif\ifinTEXcommand
\doglobal\newif\ifinTEXparameter
-\gdef\TEXbeginofcommand%
+\gdef\TEXbeginofcommand
{\TEXendofparameter
\ifinTEXcommand
\else
@@ -150,14 +150,14 @@
\beginofpretty[\!!prettytwo]%
\fi}
-\gdef\TEXendofcommand%
+\gdef\TEXendofcommand
{\ifinTEXcommand
\endofpretty
\global\inTEXcommandfalse
\global\firstinTEXcommandfalse
\fi}
-\gdef\TEXbeginofparameter%
+\gdef\TEXbeginofparameter
{\TEXendofcommand
\ifinTEXparameter
\else
@@ -165,7 +165,7 @@
\beginofpretty[\!!prettythree]%
\fi}
-\gdef\TEXendofparameter%
+\gdef\TEXendofparameter
{\ifinTEXparameter
\endofpretty
\global\inTEXparameterfalse
@@ -251,7 +251,7 @@
\fi
\next}
-\gdef\TEXtypeeightB%
+\gdef\TEXtypeeightB
{\TEXendofparameter
\ifinTEXcommand
\firstinTEXcommandfalse
@@ -260,15 +260,15 @@
\expandafter\TEXtypethree
\fi}
-\gdef\TEXtypeeight%
+\gdef\TEXtypeeight
{\handlenextnextpretty\TEXtypeeightA\TEXtypeeightB}
-\gdef\TEXtypenine%
+\gdef\TEXtypenine
{\TEXendofparameter
\global\firstinTEXcommandfalse
\getpretty}
-%\gdef\TEXtypezero%
+%\gdef\TEXtypezero
% {\disableprettyafterwards % only when enabled of course
% \ifnewpretty\expandafter\handlenewpretty\fi\TEXtypethree}
@@ -289,7 +289,7 @@
\endETEX
-\gdef\TEXtypezero%
+\gdef\TEXtypezero
{\ifnaturaltextext
\expandafter\naturalTEXtext
\else
@@ -297,6 +297,4 @@
\expandafter\handlenewpretty\expandafter\TEXtypethree
\fi}
-\protect
-
-\endinput
+\protect \endinput
diff --git a/tex/context/base/x-contml.tex b/tex/context/base/x-contml.tex
index 0758846cf..e9dd9418f 100644
--- a/tex/context/base/x-contml.tex
+++ b/tex/context/base/x-contml.tex
@@ -42,9 +42,9 @@
{\doifsomethingXMLop{name}
{\processaction
[\XMLop{type}]
- [xml=>\readfile{\XMLop{name}}{}{},
- tex=>{{\disableXML\readfile{\XMLop{name}}{}{}}},
- txt=>{{\disableXML\typefile{\XMLop{name}}{}{}}}]}}
+ [xml=>\readfile{\XMLop{name}}\donothing,
+ tex=>{{\disableXML\readfile{\XMLop{name}}\donothing\donothing}},
+ txt=>{{\disableXML\typefile{\XMLop{name}}\donothing\donothing}}]}}
%D \elements {compound}
%D
@@ -61,12 +61,17 @@
% \defineXMLsingular [context:compound] [token=]
% {\expanded{\normalcompound\XMLop{token}}|}
+% \defineXMLsingular [context:compound] [token=]
+% {\ifmmode
+% \doifXMLop{token}{\XMLop{token}}{\compoundhyphen}%
+% \else
+% \expanded{\normalcompound\XMLop{token}}|%
+% \fi}
+
\defineXMLsingular [context:compound] [token=]
- {\ifmmode
- \doifXMLop{token}{\XMLop{token}}{\compoundhyphen}%
- \else
- \expanded{\normalcompound\XMLop{token}}|%
- \fi}
+ {\mathortext % disc comm looks ahead, so \relax
+ {\doifXMLop{token}{\XMLop{token}}\compoundhyphen}%
+ {\expanded{\discretionarycommand\noexpand|\XMLop{token}}|\relax}}
%D \elements {p}
%D
@@ -339,7 +344,7 @@
%D
%D \startbuffer
%D The second mechanism that we support is tabulation. The advantage of this
-%D mechanism is that it it well tuned for tables that hav emuch text in the
+%D mechanism is that it it well tuned for tables that have much text in the
%D cells and cross page boundaires.
%D
%D <tabulate>
@@ -448,4 +453,9 @@
% \enableXMLfiledata
+% Needed for example (stickers and so):
+
+\defineXMLenvironment [context:makeup]
+ \startstandardmakeup \stopstandardmakeup
+
\protect \endinput
diff --git a/tex/context/base/x-fig-00.tex b/tex/context/base/x-fig-00.tex
index e83584392..7665a0da3 100644
--- a/tex/context/base/x-fig-00.tex
+++ b/tex/context/base/x-fig-00.tex
@@ -102,13 +102,14 @@
\newcounter\figurefilepage
-\def\figbase@StartFigure%
+\def\figbase@StartFigure
{\bgroup}
-\def\figbase@StopFigure%
+\def\figbase@StopFigure
{\doglobal\increment\figurefilepage
- \doif{\askedlabel}{\XMLpop{label}}
- {\xdef\figurefilename{\XMLpop{file}}\endinput}%
+ \doif\askedlabel{\XMLpop{label}}
+ {\doglobal\settrue\figurefiledone
+ \xdef\figurefilename{\XMLpop{file}}\endinput}%
\egroup}
\def\getfigurefilename#1#2%
@@ -122,14 +123,29 @@
\xdef\figurefilebase{#1}%
\doglobal\newcounter\figurefilepage
\def\askedlabel{#2}
- \processXMLfilegrouped{#1.xml} % grouped ?
+ \processcommacommand[\figurepathlist]\dogetfigurefilename
\stopXMLmapping
\stopnointerference}
-\def\resetfigurefilebase%
- {\global\let\figurefilebase\empty
- \global\let\figurefilename\empty
- \global\let\figurefilepage\empty}
+\globalletempty\figurebasepath
+
+\def\dogetfigurefilename#1%
+ {\ifx\figurefilename\empty
+ \bgroup
+ \xdef\figurefilebasepath{#1}%
+ \assignfullfilename{#1}\figurefilebase\to\filename
+ \expanded{\processXMLfilegrouped{\filename.xml}}%
+ \ifx\figurefilename\empty\else
+ \globallet\figurefilebase\figurefilebase
+ \fi
+ \egroup
+ \fi}
+
+\def\resetfigurefilebase
+ {\globalletempty\figurefilebase
+ \globalletempty\figurefilename
+ \globalletempty\figurefilebasepath
+ \globalletempty\figurefilepage}
\let\normalcalculateexternalfigure\calculateexternalfigure
@@ -148,13 +164,14 @@
\normalcalculateexternalfigure
[#1][#2][\figurefilename][#4][#5][#6]%
\else
- \normalcalculateexternalfigure
- [#1][#2][\figurefilebase.pdf][\c!pagina=\figurefilepage,#4][#5][#6]%
+ \let\figurepathlist\figurefilebasepath
+ \normalcalculateexternalfigure
+ [#1][#2][\figurefilebase.pdf][\c!pagina=\figurefilepage,#4][#5][#6]%
\fi
\fi}
\def\usefigurebase[#1]%
- {\doifelse{#1}{\v!reset}
+ {\doifelse{#1}\v!reset
{\let\figurebaselist\empty}
{\addtocommalist{#1}\figurebaselist}}
diff --git a/tex/context/base/x-xml-02.tex b/tex/context/base/x-xml-02.tex
index df56baa36..098bf874b 100644
--- a/tex/context/base/x-xml-02.tex
+++ b/tex/context/base/x-xml-02.tex
@@ -60,6 +60,21 @@
\setupXMLfile
[level=2]
+\startmode[*suffix-rng]
+ \showXMLlin[value]
+\stopmode
+
+\startmode[*suffix-rlg]
+ \showXMLlin
+ [rl:type,rl:state,rl:name,rl:suffix,rl:label,rl:file,rl:original,
+ rl:width,rl:height,rl:base,rl:page]
+\stopmode
+
+\startmode[*suffix-exa]
+ \showXMLlin
+ [exa:resolve,exa:include]
+\stopmode
+
\starttext
\showXMLfile{\inputfilename}
diff --git a/tex/context/base/xtag-cml.tex b/tex/context/base/xtag-cml.tex
index 01e137f8a..1c80ac1a7 100644
--- a/tex/context/base/xtag-cml.tex
+++ b/tex/context/base/xtag-cml.tex
@@ -80,7 +80,7 @@
\newcounter\nofCMLatoms
\getXMLarguments{cml-i}{n="0" charge="0" #1}%
\doifnotXMLzero{cml-i}{n}\firstofoneargument
- \doifelse{\@@CMLionvariant}{\v!b}
+ \doifelse\@@CMLionvariant\v!b
{[\ignorespaces\processXMLRchild{atom,bond/,%
singlebond/,doublebond/,triplebond/}{#2}\unskip]%
\high{\doifnotXMLzero{cml-i}{charge}\CMLscript}}
diff --git a/tex/context/base/xtag-ent.tex b/tex/context/base/xtag-ent.tex
new file mode 100644
index 000000000..4ca930894
--- /dev/null
+++ b/tex/context/base/xtag-ent.tex
@@ -0,0 +1,112 @@
+% Here we also define fallbacks
+
+\defineXMLentities [tex] {tex} {\TeX}
+\defineXMLentities [latex] {latex} {\LaTeX}
+\defineXMLentities [context] {context} {\ConTeXt}
+\defineXMLentities [omega] {omega} {\Omega}
+
+\defineXMLentities [Omega] {Omega} {\Omega}
+
+% We need this for French and Hungarian.
+
+\defineXMLentity [colon] {\directdiscretionary{:}}
+\defineXMLentity [semicolon] {\directdiscretionary{;}}
+\defineXMLentity [questionmark] {\directdiscretionary{?}}
+\defineXMLentity [exclamationmark] {\directdiscretionary{!}}
+
+% These will fall back to the raw encoding vector
+
+\defineXMLentity [Aacute] {\Aacute}
+\defineXMLentity [aacute] {\aacute}
+\defineXMLentity [Cacute] {\Cacute} % unofficial
+\defineXMLentity [cacute] {\cacute} % unofficial
+\defineXMLentity [Eacute] {\Eacute}
+\defineXMLentity [eacute] {\eacute}
+\defineXMLentity [Iacute] {\Iacute}
+\defineXMLentity [iacute] {\iacute}
+\defineXMLentity [Oacute] {\Oacute}
+\defineXMLentity [oacute] {\oacute}
+\defineXMLentity [Uacute] {\Uacute}
+\defineXMLentity [uacute] {\uacute}
+\defineXMLentity [Yacute] {\Yacute}
+\defineXMLentity [yacute] {\yacute}
+\defineXMLentity [Nacute] {\Nacute}
+\defineXMLentity [nacute] {\nacute}
+
+\defineXMLentity [Ccedil] {\Ccedilla}
+\defineXMLentity [ccedil] {\ccedilla}
+
+\defineXMLentity [AElig] {\AEligature}
+\defineXMLentity [aelig] {\aeligature}
+
+\defineXMLentity [Agrave] {\Agrave}
+\defineXMLentity [agrave] {\agrave}
+\defineXMLentity [Egrave] {\Egrave}
+\defineXMLentity [egrave] {\egrave}
+\defineXMLentity [Igrave] {\Igrave}
+\defineXMLentity [igrave] {\igrave}
+\defineXMLentity [Ograve] {\Ograve}
+\defineXMLentity [ograve] {\ograve}
+\defineXMLentity [Ugrave] {\Ugrave}
+\defineXMLentity [ugrave] {\ugrave}
+
+\defineXMLentity [THORN] {\THorn}
+\defineXMLentity [thorn] {\thorn}
+
+\defineXMLentity [Aring] {\Aring}
+\defineXMLentity [aring] {\aring}
+
+\defineXMLentity [Oslash] {\Oslash} % stroke
+\defineXMLentity [oslash] {\oslash}
+\defineXMLentity [Lslash] {\Lslash} % unofficial
+\defineXMLentity [lslash] {\lslash} % unofficial
+
+\defineXMLentity [eth] {\eth} % ?
+\defineXMLentity [ETH] {\Eth} % ?
+
+\defineXMLentity [Atilde] {\Atilde}
+\defineXMLentity [atilde] {\atilde}
+\defineXMLentity [Etilde] {\Etilde}
+\defineXMLentity [etilde] {\etilde}
+\defineXMLentity [Itilde] {\Itilde}
+\defineXMLentity [itilde] {\itilde}
+\defineXMLentity [Ntilde] {\Ntilde}
+\defineXMLentity [ntilde] {\ntilde}
+\defineXMLentity [Otilde] {\Otilde}
+\defineXMLentity [otilde] {\otilde}
+\defineXMLentity [Utilde] {\Utilde}
+\defineXMLentity [utilde] {\utilde}
+
+\defineXMLentity [Auml] {\Adiaeresis}
+\defineXMLentity [auml] {\adiaeresis}
+\defineXMLentity [Euml] {\Ediaeresis}
+\defineXMLentity [euml] {\ediaeresis}
+\defineXMLentity [Iuml] {\Idiaeresis}
+\defineXMLentity [iuml] {\idiaeresis}
+\defineXMLentity [Ouml] {\Odiaeresis}
+\defineXMLentity [ouml] {\odiaeresis}
+\defineXMLentity [Uuml] {\Udiaeresis}
+\defineXMLentity [uuml] {\udiaeresis}
+\defineXMLentity [Yuml] {\Ydiaeresis}
+\defineXMLentity [yuml] {\ydiaeresis}
+
+\defineXMLentity [szlig] {\Ssharp}
+
+\defineXMLentity [Acirc] {\Acircumflex}
+\defineXMLentity [acirc] {\acircumflex}
+\defineXMLentity [Ecirc] {\Ecircumflex}
+\defineXMLentity [ecirc] {\ecircumflex}
+\defineXMLentity [Icirc] {\Icircumflex}
+\defineXMLentity [icirc] {\icircumflex}
+\defineXMLentity [Ocirc] {\Ocircumflex}
+\defineXMLentity [ocirc] {\ocircumflex}
+\defineXMLentity [Ucirc] {\Ucircumflex}
+\defineXMLentity [ucirc] {\ucircumflex}
+
+\defineXMLentity [ccaron] {\ccaron} % unofficial
+\defineXMLentity [rcaron] {\rcaron} % unofficial
+\defineXMLentity [scaron] {\scaron} % unofficial
+\defineXMLentity [zcaron] {\zcaron} % unofficial
+
+\defineXMLentity [dots] {\unknown}
+\defineXMLentity [amp] {\&}
diff --git a/tex/context/base/xtag-exp.tex b/tex/context/base/xtag-exp.tex
index fc51675cb..c3f0b8213 100644
--- a/tex/context/base/xtag-exp.tex
+++ b/tex/context/base/xtag-exp.tex
@@ -28,6 +28,7 @@
\def\startXMLreading
{\increment \XMLfilenesting \relax
\ifnum\XMLfilenesting=1
+%\ifcase\XMLfilenesting\or
\ifprocessingXML
\let\restoreXMLelements\relax
\else
@@ -38,6 +39,7 @@
\def\stopXMLreading
{\ifnum\XMLfilenesting=1
+%\ifcase\XMLfilenesting\or
\restoreXMLelements
\let\restoreXMLelements\relax
\fi
@@ -52,7 +54,9 @@
\setupXMLprocessing[\c!status=\v!start]
-\appendtoks \enableXMLfiledata \to \aftersetupXMLprocessing
+\appendtoks
+ \ifproductionrun \enableXMLfiledata \fi
+\to \aftersetupXMLprocessing
%D Here we overload the mark handler.
diff --git a/tex/context/base/xtag-ext.tex b/tex/context/base/xtag-ext.tex
index 40ca335b8..539efa2ae 100644
--- a/tex/context/base/xtag-ext.tex
+++ b/tex/context/base/xtag-ext.tex
@@ -187,7 +187,7 @@
\@@XMLsave:\ifcsname\@@XMLsave:#1\endcsname#1\else\@@XMLsave\fi
\endcsname}
-\global\letvalue{\@@XMLsave:\@@XMLsave}\empty
+\letgvalueempty{\@@XMLsave:\@@XMLsave}
\gdef\showXMLelement#1%
{\showvalue{\@@XMLsave:#1}}
@@ -229,4 +229,9 @@
\def\potentialXMLentity#1%
{\doifXMLentityelse{#1}{\getXMLentity{#1}}{#1}}
+\def\writtenXMLelement#1#2{<#1>#2</#1>}
+\def\writtenXMLstart #1{<#1>}
+\def\writtenXMLend #1{</#1>}
+\def\writtenXMLempty #1{<#1/>}
+
\protect \endinput
diff --git a/tex/context/base/xtag-ini.tex b/tex/context/base/xtag-ini.tex
index b6d3c6bf6..e09c63924 100644
--- a/tex/context/base/xtag-ini.tex
+++ b/tex/context/base/xtag-ini.tex
@@ -13,6 +13,9 @@
\writestatus{loading}{Context XML Macros (initialization)}
+%D Beware: don't rely on \longempty things, since this may
+%D change!
+
%D To be sure:
\newif\ifprocessingXML
@@ -189,6 +192,10 @@
%D a way around this, but for convenience \TEXEXEC\ will take
%D care of processing raw \XML\ files in a transparant way.
+\newif\ifalwaysreduceXMLtokens
+
+\let\alwaysreduceXMLtokens\alwaysreduceXMLtokenstrue
+
\bgroup
\catcode`\*=\@@comment
\catcode`\.=\@@escape
@@ -225,6 +232,32 @@
* there; this is needed because reading from file goes wrong
* (eating up argument)
+* .unexpanded.gdef.enableXML*
+* B.catcode`.!=.@@other*
+* .catcode`.?=.@@other*
+* .catcode`.:=.@@other* active in french
+* .catcode`.;=.@@other* active in french
+* .catcode`.&=.@@active .let&=.doXMLentity*
+* .catcode`.<=.@@active .unexpanded.def<B.doXMLelementE*
+* .catcode`.>=.@@other
+* .catcode`."=.@@other*
+* .catcode`./=.@@other
+* .catcode`.'=.@@other*
+* *catcode`.#=.@@active .def#PP1B&tex-hash;E* gobbles its own dup
+* .catcode`.#=.@@active .def#B&tex-hash;E*
+* .catcode`.$=.@@active .def$B&tex-dollar;E*
+* .catcode`.%=.@@active .def%B&tex-percent;E*
+* .catcode`.\=.@@active .def\B&tex-backslash;E*
+* .catcode`.^=.@@active .def^B&tex-hat;E*
+* .catcode`._=.@@active .def_B&tex-underscore;E*
+* .catcode`.{=.@@active .def{B&tex-leftbrace;E*
+* .catcode`.}=.@@active .def}B&tex-rightbrace;E*
+* .catcode`.|=.@@active .def|B&tex-bar;E*
+* .catcode`.~=.@@other *def~B&tex-tilde;E*
+* .processingXMLtrue
+* .the.everyenableXML
+* E
+
.unexpanded.gdef.enableXML*
B.catcode`.!=.@@other*
.catcode`.?=.@@other*
@@ -233,24 +266,41 @@
.catcode`.&=.@@active .let&=.doXMLentity*
.catcode`.<=.@@active .unexpanded.def<B.doXMLelementE*
.catcode`.>=.@@other
- .catcode`."=.@@other*
+ .catcode`."=.@@other
.catcode`./=.@@other
- .catcode`.'=.@@other*
- *catcode`.#=.@@active .def#PP1B&tex-hash;E* gobbles its own dup
- .catcode`.#=.@@active .def#B&tex-hash;E*
- .catcode`.$=.@@active .def$B&tex-dollar;E*
- .catcode`.%=.@@active .def%B&tex-percent;E*
- .catcode`.\=.@@active .def\B&tex-backslash;E*
- .catcode`.^=.@@active .def^B&tex-hat;E*
- .catcode`._=.@@active .def_B&tex-underscore;E*
- .catcode`.{=.@@active .def{B&tex-leftbrace;E*
- .catcode`.}=.@@active .def}B&tex-rightbrace;E*
- .catcode`.|=.@@active .def|B&tex-bar;E*
- .catcode`.~=.@@other *def~B&tex-tilde;E*
+ .catcode`.'=.@@other
+ .catcode`.#=.@@active
+ .catcode`.$=.@@active
+ .catcode`.%=.@@active
+ .catcode`.\=.@@active
+ .catcode`.^=.@@active
+ .catcode`._=.@@active
+ .catcode`.{=.@@active
+ .catcode`.}=.@@active
+ .catcode`.|=.@@active
+ .catcode`.~=.@@other
+ .ifalwaysreduceXMLtokens
+ .reduceXMLescapetokens
+ .else
+ .entitleXMLescapetokens
+ .fi
.processingXMLtrue
.the.everyenableXML
E
+.gdef.entitleXMLescapetokens*
+ B.def#B&tex-hash;E*
+ .def$B&tex-dollar;E*
+ .def%B&tex-percent;E*
+ .def\B&tex-backslash;E*
+ .def^B&tex-hat;E*
+ .def_B&tex-underscore;E*
+ .def{B&tex-leftbrace;E*
+ .def}B&tex-rightbrace;E*
+ .def|B&tex-bar;E*
+ *def~B&tex-tilde;E*
+ E
+
.gdef.reduceXMLescapetokens*
B.def#B.string#E*
.def$B.string$E*
@@ -542,7 +592,7 @@
{\def\currentXMLelement{#1}% watch out: \empty == begin or empty tag
\chardef\kindofXMLelement\ifx#2\empty\beginXMLtag\else\emptyXMLtag\fi}
-\def\@@traceXMLelement%
+\def\@@traceXMLelement
{\originalXMLfullidentifier
\ifx\originalXMLfullidentifier\currentXMLfullidentifier\else
\space=>\space\currentXMLfullidentifier
@@ -551,7 +601,7 @@
\space\string|\space\currentXMLarguments
\fi}
-\long\def\traceXMLelement%
+\long\def\traceXMLelement
{\edef\originalXMLfullidentifier{\someXMLelement\currentXMLelement}%
\cleanupXMLarguments\writestatus{xml-element}{\@@traceXMLelement}}
@@ -631,12 +681,12 @@
\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
\fi}
-\def\executeXMLelementB% default fallback
+\def\executeXMLelementB % default fallback
{\csname \@@XMLelement:%
\ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname
\currentXMLfullidentifier
@@ -645,7 +695,7 @@
\fi
\endcsname}
-\def\executeXMLelementC% no namespace of default fallback
+\def\executeXMLelementC % no namespace of default fallback
{\csname \@@XMLelement:%
\ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname
\currentXMLfullidentifier
@@ -656,19 +706,85 @@
\fi\fi
\endcsname}
+\def\executeXMLelementD
+ {\csname
+ \ifcsname\@@XMLelement:\currentXMLfullidentifier\endcsname
+ \@@XMLelement:\currentXMLfullidentifier
+ \else\ifcsname\@@XMLelement:\currentXMLidentifier\endcsname
+ \@@XMLelement:\currentXMLidentifier
+ \else
+ \executeXMLelementDD % less skipping and thereby faster
+ \fi\fi
+ \endcsname}
+
+\def\executeXMLelementDD % now forget about tex mapping
+ {\ifcsname\normal@@XMLelement:\currentXMLfullidentifier\endcsname
+ \normal@@XMLelement:\currentXMLfullidentifier
+ \else\ifcsname\normal@@XMLelement:\currentXMLidentifier\endcsname
+ \normal@@XMLelement:\currentXMLidentifier
+ \else
+ \@@XMLelement:\defaultXMLelement
+ \fi\fi}
+
\def\setXMLfallbackmode#1%
{\ifcase#1\relax
- \let\executeXMLelement\executeXMLelementA
- \or
- \let\executeXMLelement\executeXMLelementB
- \or
- \let\executeXMLelement\executeXMLelementC
+ \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
\fi}
-\setXMLfallbackmode2
+\setXMLfallbackmode2 % will be 3
%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
+ {\ifcsname\@@XMLnamespace-#1\endcsname\else
+ \@EA\appendtoks\csname\@@XMLnamespace-#1\endcsname\to\autoXMLnamespaces
+ \fi
+ \@EA\edef\csname\@@XMLnamespace-#1\endcsname
+ {\noexpand\edef\noexpand\@axmlns@{#1}% quicker #1 -> \#1
+ \noexpand\doautoXMLnamespace\noexpand\@axmlns@}}
+
+\def\doautoXMLnamespace#1% \done is set before list
+ {\ifdone\else\automateXMLnamespace#1\fi}
+
+\def\automateXMLnamespaceA#1%
+ {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname
+ \let\currentXMLnamespace#1%
+ \else\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname
+ \let\currentXMLnamespace#1%
+ \fi\fi}
+
+\let\automateXMLnamespaceB\automateXMLnamespaceA
+\let\automateXMLnamespaceC\automateXMLnamespaceA
+
+\def\automateXMLnamespaceD#1%
+ {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace\endcsname
+ \let\currentXMLnamespace#1%
+ \else\ifcsname\normal@@XMLelement:#1:\checkedXMLnamespace\endcsname
+ \let\currentXMLnamespace#1%
+ \else
+ \automateXMLnamespaceDD#1%
+ \fi\fi}
+
+\def\automateXMLnamespaceDD#1%
+ {\ifcsname\@@XMLelement:#1:\checkedXMLnamespace/\endcsname
+ \let\currentXMLnamespace#1%
+ \else\ifcsname\normal@@XMLelement:#1:\checkedXMLnamespace/\endcsname
+ \let\currentXMLnamespace#1%
+ \fi\fi}
+
%D Later we will implement the error handler, here we handle
%D the default case.
@@ -677,7 +793,7 @@
#1%
\ifnum\kindofXMLelement=\emptyXMLtag/\fi}
-\def\defaultXMLelement%
+\def\defaultXMLelement
{\someXMLelement\s!default}
%D It is possible to keep track of nesting automatically,
@@ -687,21 +803,57 @@
%D mode of operation combined with space grabbing.
\def\beginXMLelement
- {\global\advance\XMLdepth \plusone % 1
+ {\global\advance\XMLdepth\plusone
\global\@EA\let\csname\@@XMLdepth:\the\XMLdepth\endcsname\currentXMLelement}
\def\endXMLelement
- {\global\advance\XMLdepth \minusone } % -1 }
+ {\global\advance\XMLdepth\minusone}
+
+% 0 = nothing
+% 1 = unknown
+% 2 = current element
+
+\chardef\XMLancestormode=2 % never change this one globally
\def\XMLancestor#1%
{\ifnum\numexpr(\XMLdepth-#1)>0
\csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname
\else
- \currentXMLelement
+ \ifcase\XMLancestormode\or\s!unknown\or\currentXMLelement\fi
+ \fi}
+
+\def\XMLparent
+ {\XMLancestor\plusone}
+
+\def\XMLpureancestor#1%
+ {\ifnum\numexpr(\XMLdepth-#1)>0
+ \csname\@@XMLdepth:\the\numexpr(\XMLdepth-#1)\endcsname
\fi}
-\def\XMLparent%
- {\XMLancestor1}
+\def\XMLpureparent
+ {\XMLpureancestor\plusone}
+
+% \defineXMLenvironment[one]
+% {\beginXMLelement}
+% {\endXMLelement}
+%
+% \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
+% \stoptabulate}
+% {\endXMLelement}
+%
+% \startbuffer
+% <x:one> <x:two> <one> <two> </two> </one> </x:two> </x:one>
+% \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
%
@@ -982,11 +1134,13 @@
\@EAEAEA\unknownXMLcharacter
\fi\fi{\number#1}}
+\ifx\unicodechar\undefined\let\unicodechar\rawcharacter\fi
+
\unexpanded\def\getXMLcharacter#1%
{\ifcsname\@@XMLentity:#1\endcsname
\@EA\getXMLentity
\else
- \@EA\rawcharacter
+ \@EA\unicodechar % was: \rawcharacter
\fi{#1}}
\def\unknownXMLcharacter#1{[#1]}
@@ -1042,8 +1196,21 @@
\unexpanded\def\getXMLentity{\expandedXMLentity}
-\def\doifXMLentityelse#1#2#3%
- {\ifcsname\@@XMLentity:#1\endcsname#2\else#3\fi}
+%\def\doifXMLentityelse#1#2#3%
+% {\ifcsname\@@XMLentity:#1\endcsname#2\else#3\fi}
+
+\def\doifXMLentityelse#1%
+ {\ifcsname\@@XMLentity:#1\endcsname
+ \expandafter\firstoftwoarguments
+ \else
+ \expandafter\secondoftwoarguments
+ \fi}
+
+% \letvalue{1@2}\firstoftwoarguments
+% \letvalue{2@2}\secondoftwoarguments
+%
+% \def\doifXMLentityelse#1%
+% {\csname\ifcsname\@@XMLentity:#1\endcsname1\else2\fi @2\endcsname}
% see \defineXML... commands:
%
@@ -1119,27 +1286,78 @@
\let\dodoparseXMLarguments\doparseXMLarguments
\doparseXMLarguments}
+% \long\def\doparseXMLarguments#1% space goes ok
+% {\if#1>%
+% \let\dodoparseXMLarguments\empty
+% \else\if#1=%
+% \edef\@@XMLname{\the\XMLtoks}%
+% \XMLtoks\emptytoks
+% \else\if#1"%
+% \let\dodoparseXMLarguments\dodoparseXMLargumentsD
+% \else\if#1'%
+% \let\dodoparseXMLarguments\dodoparseXMLargumentsS
+% \else\if#1:%
+% \XMLnamespacetrue
+% \edef\@@XMLspac{\the\XMLtoks}%
+% \XMLtoks\emptytoks
+% \else\if#1/%
+% \chardef\kindofXMLelement\emptyXMLtag
+% \else
+% \XMLtoks\@EA{\the\XMLtoks#1}%
+% \fi\fi\fi\fi\fi\fi
+% \dodoparseXMLarguments}
+%
+% The next speed optimization is suggested by Taco. Since we
+% are dealing with validated code, we can grab larger chunks.
+
\long\def\doparseXMLarguments#1% space goes ok
{\if#1>%
\let\dodoparseXMLarguments\empty
- \else\if#1=%
- \edef\@@XMLname{\the\XMLtoks}%
- \XMLtoks\emptytoks
- \else\if#1"%
- \let\dodoparseXMLarguments\dodoparseXMLargumentsD
- \else\if#1'%
- \let\dodoparseXMLarguments\dodoparseXMLargumentsS
- \else\if#1:%
- \XMLnamespacetrue
- \edef\@@XMLspac{\the\XMLtoks}%
- \XMLtoks\emptytoks
\else\if#1/%
\chardef\kindofXMLelement\emptyXMLtag
\else
- \XMLtoks\@EA{\the\XMLtoks#1}%
- \fi\fi\fi\fi\fi\fi
+ \XMLtoks{#1}%
+ \let\dodoparseXMLarguments\dodoparseXMLargumentsX
+ \fi\fi
+ \dodoparseXMLarguments}
+
+\def\dodoparseXMLargumentsX#1=#2%
+ {\edef\@@XMLname{\the\XMLtoks#1}%
+ \@EA\getXMLNSSSS\@@XMLname:\relax
+ \XMLtoks\emptytoks
+ \if#2"%
+ \let\dodoparseXMLarguments\dodoparseXMLargumentsD
+ \else
+ \let\dodoparseXMLarguments\dodoparseXMLargumentsS
+ \fi
\dodoparseXMLarguments}
+\def\gobbleuntilcolon#1:{#1}
+
+\def\getXMLNSSSS#1:#2\relax
+ {\def\!!stringa{#2}%
+ \ifx\!!stringa\empty \else
+ \XMLnamespacetrue
+ \edef\@@XMLname{\gobbleuntilcolon#2}%
+ \edef\@@XMLspac{#1}%
+ \fi}
+
+% ok ?
+%
+% \def\dodoparseXMLargumentsX#1=#2%
+% {\edef\@@XMLname{\the\XMLtoks#1}%
+% \@EA\getXMLNSSSS\@@XMLname:\relax
+% \XMLtoks\emptytoks
+% \if#2"%
+% \@EA\dodoparseXMLargumentsD
+% \else
+% \@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.
+
\def\dodoparseXMLargumentsD#1"{\dosetXMLargument{#1}}
\def\dodoparseXMLargumentsS#1'{\dosetXMLargument{#1}}
@@ -1342,7 +1560,7 @@
\next}
\long\gdef\dododefineXMLgsave#1%
- {\letvalue{\@@XMLdata:#1}\longempty
+ {\letgvalue{\@@XMLdata:#1}\longempty
\long\setvalue{\@@XMLelement:#1/}{\long\setgvalue{\@@XMLdata:#1}{}}%
\long\setvalue{\@@XMLelement:#1}{\redoXMLgsave{#1}}}
@@ -1366,6 +1584,16 @@
{#2\long\@EA\def\csname\@@XMLdata:#1\endcsname{##1}#3}%
\next}
+\long\gdef\dododefineXMLenvironmentgsave#1#2#3%
+ {\letgvalue{\@@XMLdata:#1}\longempty
+ \long\setvalue{\@@XMLelement:#1/}{#2\long\setgvalue{\@@XMLdata:#1}{}#3}%
+ \long\setvalue{\@@XMLelement:#1}{\redoXMLenvironmentgsave{#1}{#2}{#3}}}
+
+\gdef\redoXMLenvironmentgsave#1#2#3%
+ {\long\@EA\def\@EA\next\@EA##\@EA1\@EA<\@EA/\currentXMLelement>%
+ {#2\long\@EA\gdef\csname\@@XMLdata:#1\endcsname{##1}#3}%
+ \next}
+
\long\gdef\dododefineXMLprocess#1%
{\long\setvalue{\@@XMLelement:#1/}{}%
\long\setvalue{\@@XMLelement:#1}{}%
@@ -1381,16 +1609,18 @@
%D The high level definition macros.
-\def\defineXMLsingular {\dotripleempty\dodefineXMLsingular}
-\def\defineXMLcommand {\dotripleempty\dodefineXMLcommand}
-\def\defineXMLgrouped {\dotripleempty\dodefineXMLgrouped}
-\def\defineXMLargument {\dotripleempty\dodefineXMLargument}
-\def\defineXMLignore {\dotripleempty\dodefineXMLignore}
-\def\defineXMLpickup {\dotripleempty\dodefineXMLpickup}
-\def\defineXMLenvironment {\dotripleempty\dodefineXMLenvironment}
-\def\defineXMLsave {\dotripleempty\dodefineXMLsave}
-\def\defineXMLenvironmentsave{\dotripleempty\dodefineXMLenvironmentsave}
-\def\defineXMLprocess {\dotripleempty\dodefineXMLprocess}
+\def\defineXMLsingular {\dotripleempty\dodefineXMLsingular}
+\def\defineXMLcommand {\dotripleempty\dodefineXMLcommand}
+\def\defineXMLgrouped {\dotripleempty\dodefineXMLgrouped}
+\def\defineXMLargument {\dotripleempty\dodefineXMLargument}
+\def\defineXMLignore {\dotripleempty\dodefineXMLignore}
+\def\defineXMLpickup {\dotripleempty\dodefineXMLpickup}
+\def\defineXMLenvironment {\dotripleempty\dodefineXMLenvironment}
+\def\defineXMLsave {\dotripleempty\dodefineXMLsave}
+\def\defineXMLgsave {\dotripleempty\dodefineXMLgsave}
+\def\defineXMLenvironmentsave {\dotripleempty\dodefineXMLenvironmentsave}
+\def\defineXMLenvironmentgsave{\dotripleempty\dodefineXMLenvironmentgsave}
+\def\defineXMLprocess {\dotripleempty\dodefineXMLprocess}
% push is (not yet) a real push, so:
@@ -1427,9 +1657,15 @@
\long\def\dodefineXMLsave[#1][#2][#3]%
{\defineXMLmethod\dododefineXMLsave{#1}{#2}{#3}{}{}}
+\long\def\dodefineXMLgsave[#1][#2][#3]%
+ {\defineXMLmethod\dododefineXMLgsave{#1}{#2}{#3}{}{}}
+
\long\def\dodefineXMLenvironmentsave[#1][#2][#3]#4#5%
{\defineXMLmethod\dododefineXMLenvironmentsave{#1}{#2}{#3}{#4}{#5}}
+\long\def\dodefineXMLenvironmentgsave[#1][#2][#3]#4#5%
+ {\defineXMLmethod\dododefineXMLenvironmentgsave{#1}{#2}{#3}{#4}{#5}}
+
\long\def\dodefineXMLprocess[#1][#2][#3]%
{\defineXMLmethod\dododefineXMLprocess{#1}{#2}{#3}{}{}}
@@ -1824,9 +2060,9 @@
\doXMLdata}
\def\doXMLdata#1%
- {\enableXML
- \scantokens{#1<gobblespacetokens/>}%
- \endgroup}
+ {\enableXML
+ \scantokens{#1<gobblespacetokens/>}%
+ \endgroup}
%D
@@ -1949,7 +2185,7 @@
\long\unexpanded\gdef\getXMLgrouped#1% #1 kan weg % klopt dit nu?
{\groupedtoks\emptytoks
- \scratchcounter=0
+ \scratchcounter\zerocount
\edef\theXMLnamespace
{\ifx\originalXMLnamespace\empty\else\originalXMLnamespace:\fi
\currentXMLidentifier}%
@@ -1960,7 +2196,7 @@
\ifcase\scratchcounter
\let\dogetgrouped\dodogetgrouped
\else
- \advance\scratchcounter \minusone
+ \advance\scratchcounter \minusone
\ifcollectXMLgrouped\@EA\appendtoks\@EA<\@EA/\currentXMLelement>\to\groupedtoks\fi
\fi
\dogetgrouped}%
@@ -2001,37 +2237,5 @@
%D \stoptypen
\def\XMLyes#1{\XMLownifequalelse{#1}{yes}{#1}{}}
-
-\def\expifequalelse#1#2%
- {\@@ifequal#1\relax\relax\@@and#2\relax\relax\@@then}
-
-\def\@@ifequal#1#2\@@and#3%
- {\ifx#1\relax
- \ifx#3\relax
- \@EAEAEA\@@if@@equal@@true
- \else
- \@EAEAEA\@@if@@equal@@false
- \fi
- \else
- \ifx#3\relax
- \@EAEAEAEAEAEA\@@if@@equal@@false
- \else\ifx#1#3%
- % go on
- \else
- \@EAEAEAEAEAEA\@@if@@equal@@false
- \fi\fi
- \fi
- \@@ifequal#2\@@and}
-
-\long\def\@@if@@equal@@true #1\@@then#2#3{#2}
-\long\def\@@if@@equal@@false#1\@@then#2#3{#3}
-
-%D new stuff :
-
-\def\partialexpanded#1%
- {\let\notexpanded\noexpand
- \edef\@@expanded{\noexpand#1}%
- \let\notexpanded\empty
- \@@expanded}
\protect \endinput
diff --git a/tex/context/base/xtag-mmc.tex b/tex/context/base/xtag-mmc.tex
index 0ca08f44d..49c81a804 100644
--- a/tex/context/base/xtag-mmc.tex
+++ b/tex/context/base/xtag-mmc.tex
@@ -69,7 +69,7 @@
\setupMMLappearance[float][\c!symbool=\v!nee] % \v!ja|dot
\def\MMLcfloat#1%
- {\doifelse{\@@MMLfloatsymbool}{\v!nee}
+ {\doifelse\@@MMLfloatsymbool\v!nee
{{\rm#1}} % make sure that e shows up ok
{% we should ignore \entities !
\beforesplitstring#1\at e\to\first
@@ -77,7 +77,7 @@
\ifx\first\empty #1\else
\ifx\last \empty #1\else
\first
- \doifelse{\@@MMLfloatsymbool}{dot}{\cdot}{\times}%
+ \doifelse\@@MMLfloatsymbool{dot}\cdot\times
10^{\last}%
\fi\fi}}
@@ -86,11 +86,11 @@
\setupMMLappearance[enotation][\c!symbool=\v!nee] % \v!ja|dot
\def\MMLcenotation#1%
- {\doifelse{\@@MMLenotationsymbool}{\v!nee}
+ {\doifelse\@@MMLenotationsymbool\v!nee
{\def\MMLcsep%
{\unskip{\rm e}\ignorespaces}}
{\def\MMLcsep##1\empty
- {\doifelse{\@@MMLenotationsymbool}{dot}{\cdot}{\times}10^{##1}}}%
+ {\doifelse\@@MMLenotationsymbool{dot}\cdot\times10^{##1}}}%
#1\empty}
\def\MMLcCI#1% #2% can be sped up with \doifundefined ...
@@ -112,7 +112,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\next}
\def\MMLcCIset#1%
- {{\blackboard#1}}
+ {{\bbd#1}}
\def\widevec#1%
{\vbox{\m@th\ialign{##\crcr
@@ -161,7 +161,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\def\MMLcCNinteger#1%
{\doifXMLparelse{cn}{base}
{\def\MMLcCNbase{\XMLpar{cn}{base}{}}%
- \doifelse{\@@MMLbasesymbool}{\v!nee}
+ \doifelse\@@MMLbasesymbool\v!nee
{\MMLcCNbasedata{#1}}
{\MMLcCNbasedata{#1}_{\hbox{$\rm\scriptscriptstyle
\processaction
@@ -349,7 +349,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\setupMMLappearance[declare][\c!status=\v!start]
\def\MMLcDECLARE#1#2%
- {\doif{\@@MMLdeclarestatus}{\v!start}
+ {\doif\@@MMLdeclarestatus\v!start
{\withnextXMLRelement
{\getXMLentity{declare}\nextXMLRelement
\countXMLRchildren{#2}%
@@ -365,7 +365,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\setupMMLappearance[lambda][\c!variant=b]
\def\MMLcLAMBDA#1#2%
- {\doifelse{\@@MMLlambdavariant}{a}
+ {\doifelse\@@MMLlambdavariant\v!a
{\encapsulateXMLR{\getXMLentity{lambda}(}{\MMLccomma}{)}{#2}}
{\countXMLRchild{bvar}{#2}%
\ifnum\nofXMLRchildren>1
@@ -481,12 +481,12 @@ complex-cartesian=>\let\next\MMLccartesian,
\setupMMLappearance[sign][\c!reductie=\v!ja]
-\def\MMLcMINUS
- {\doifelse{\@@MMLsignreductie}{\v!ja}
+\def\MMLcMINUS % expandafter needed ?
+ {\doifelse\@@MMLsignreductie\v!ja
{\expandafter\MMLcMINUSyes}{\expandafter\MMLcMINUSno}}
-\def\MMLcPLUS
- {\doifelse{\@@MMLsignreductie}{\v!ja}
+\def\MMLcPLUS % expandafter needed ?
+ {\doifelse\@@MMLsignreductie\v!ja
{\expandafter\MMLcPLUSyes}{\expandafter\MMLcPLUSno}}
\def\MMLcMINUSno#1#2#3\empty
@@ -524,7 +524,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\def\MMLcPOWER#1#2%
{\withnexttwoXMLRelements
{\doifXMLRchildelse{apply}{\firstXMLRelement}
- {\doifelse{\@@MMLpowerreductie}{\v!ja}
+ {\doifelse\@@MMLpowerreductie\v!ja
{\collectXMLRchild{apply}{\firstXMLRelement}%
\@EA\doifXMLRchildelse\@EA{\MMLcfunctionlist}{\the\XMLRtoks}
{\let\MMLpowerelement\secondXMLRelement
@@ -545,9 +545,9 @@ complex-cartesian=>\let\next\MMLccartesian,
\def\MMLcTIMES#1#2#3\empty
{\setMMLcreset{\MMLcfunctionlist,\MMLcconstructlist}%
- \doifelse{\@@MMLtimessymbool}{\v!ja}
+ \doifelse\@@MMLtimessymbool\v!ja
{\encapsulateXMLR{}{\times}{}{#3\empty}}
- {\doifelse{\@@MMLtimessymbool}{dot}
+ {\doifelse\@@MMLtimessymbool{dot}
{\encapsulateXMLR{}{\cdot}{}{#3\empty}}
{#3\empty}}}
@@ -740,7 +740,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\remapXMLsingular [int] [CPA] \MMLcINT
\def\doMMLlimits#1%
- {\doifelsevalue{@@MML#1\c!plaats}{\v!boven}{\limits}{\nolimits}}
+ {\doifelsevalue{@@MML#1\c!plaats}\v!boven\limits\nolimits}
\def\MMLcINT#1#2#3\empty
{\pushmacro\xmlr
@@ -780,7 +780,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\collectXMLRchild{bvar}{#3}%
\let\MMLcDEGREE\superMMLcelement
\expanded{\processXMLRchild{degree}{\the\XMLRtoks}}%
- \doif{\@@MMLdiffplaats}{\v!boven}
+ \doif\@@MMLdiffplaats\v!boven
{\doifXMLRchildelse{ci}{#3}
{\processXMLRchild{ci}{#3}}
{\doifMMLfunctionelse{#3}
@@ -789,7 +789,7 @@ complex-cartesian=>\let\next\MMLccartesian,
{\let\MMLcDEGREE\superMMLcelement
\begingroup\rm\getXMLentity{mathematicald}\endgroup
\processXMLRchild{bvar}{#3}}%
- \doifnot{\@@MMLdiffplaats}{\v!boven}
+ \doifnot\@@MMLdiffplaats\v!boven
{\left(\MMLcreset\processXMLRchild{apply,ci}{#3}\right)}}
{\processXMLRchildren{#3}^\prime}%
\popmacro\xmlr}
@@ -996,7 +996,7 @@ complex-cartesian=>\let\next\MMLccartesian,
{\pushmacro\MMLcLOGBASE
\let\MMLcLOGBASE\secondoftwoarguments
\doifXMLRchildelse{logbase}{#3}
- {\doifelse{\@@MMLlogplaats}{\v!links}
+ {\doifelse\@@MMLlogplaats\v!links
{\mathop{{}^{\processXMLRchild{logbase}{#3}}\!\getXMLentity{log}}}
{\getXMLentity{log}_{\processXMLRchild{logbase}{#3}}}}
{\getXMLentity{log}}%
@@ -1046,7 +1046,7 @@ complex-cartesian=>\let\next\MMLccartesian,
{\ifx\MMLpowerelement\empty\else
^{\MMLcreset\MMLpowerelement\empty}\!\let\MMLpowerelement\empty
\fi
- \doifelse{\@@MMLfunctionreductie}{\v!ja}
+ \doifelse\@@MMLfunctionreductie\v!ja
{\doifXMLRchildelse{apply}{#1}
{\collectXMLRchild{apply}{#1}%
\@EA\doifXMLRchildelse\@EA{\MMLcfunctionlist}{\the\XMLRtoks}
@@ -1112,7 +1112,7 @@ complex-cartesian=>\let\next\MMLccartesian,
\def\MMLcVECTOR#1#2%
{\countXMLRchildren{#2}%
\ifnum\nofXMLRchildren>1
- \doifelse{\@@MMLvectorrichting}{\v!horizontaal}
+ \doifelse\@@MMLvectorrichting\v!horizontaal
{\encapsulateXMLR{\left(}{\MMLccomma}{\right)}{#2}}
{\collectbetweenXMLR{\crcr}{#2}%
\MMLcreset\left(\matrix{\the\XMLRtoks}\right)}%
@@ -1243,14 +1243,12 @@ complex-cartesian=>\let\next\MMLccartesian,
\remapXMLsingular [eulergamma] [CPA] \MMLcEULERGAMMA
\remapXMLsingular [infinity] [CPA] \MMLcINFINITY
-\ifx\blackboard\undefined \let\blackboard\empty \fi
-
-\def\MMLcINTEGERS #1#2{{\blackboard Z}}
-\def\MMLcREALS #1#2{{\blackboard R}}
-\def\MMLcRATIONALS #1#2{{\blackboard Q}}
-\def\MMLcNATURALNUMBERS#1#2{{\blackboard N}}
-\def\MMLcCOMPLEXES #1#2{{\blackboard C}}
-\def\MMLcPRIMES #1#2{{\blackboard P}}
+\def\MMLcINTEGERS #1#2{\getXMLentity{integers}}
+\def\MMLcREALS #1#2{\getXMLentity{reals}}
+\def\MMLcRATIONALS #1#2{\getXMLentity{rationals}}
+\def\MMLcNATURALNUMBERS#1#2{\getXMLentity{naturalnumbers}}
+\def\MMLcCOMPLEXES #1#2{\getXMLentity{complexes}}
+\def\MMLcPRIMES #1#2{\getXMLentity{primes}}
\def\MMLcEXPONENTIALE #1#2{\getXMLentity{ExponentialE}}
\def\MMLcIMAGINARYI #1#2{\getXMLentity{ImaginaryI}}
\def\MMLcNOTANUMBER #1#2{\mathop{\rm NaN}}
diff --git a/tex/context/base/xtag-mml.tex b/tex/context/base/xtag-mml.tex
index e7d8e2eda..cf3479073 100644
--- a/tex/context/base/xtag-mml.tex
+++ b/tex/context/base/xtag-mml.tex
@@ -71,9 +71,9 @@
{\convertargument#2\to\asciiafter
\@EA#1\@EA{\asciiafter}}
-\def\checkMMLoperator#1#2% temp hack
+\def\checkMMLoperator#1% #2
{\unspaceargument#1\to\ascii
- \doifXMLentityelse\ascii{\getXMLentity\ascii}{#2}}
+ \doifXMLentityelse\ascii{\getXMLentity\ascii}} % {#2}
% this will be done in a more safe way
@@ -81,8 +81,6 @@
% this goes to core-mat
-\def\mathortext#1#2{\ifmmode#1\else#2\fi}
-
\def\normalorfiller #1#2{#1}
\def\normalordelimiter#1#2{#2}
@@ -98,15 +96,15 @@
\bgroup \obeylines
-\gdef\defineMMLentity%
+\gdef\defineMMLentity
{\bgroup\obeylines\xdefineMMLentity}
\gdef\xdefineMMLentity #1 #2 #3 #4
{\egroup\dodefineMMLentity{#1}{#2}{#3}{#4}}
-\global\let\dodefineMMLsynonym\gobblefourarguments
+\global\let\dodefineMMLentity\gobblefourarguments
-\gdef\defineMMLsynonym%
+\gdef\defineMMLsynonym
{\bgroup\obeylines\xdefineMMLsynonym}
\gdef\xdefineMMLsynonym #1 #2
@@ -349,12 +347,12 @@
\defineXMLentity [scalarproduct] {\cdot}
\defineXMLentity [outerproduct] {\otimes}
-\defineXMLentity [integers] {{\blackboard Z}}
-\defineXMLentity [reals] {{\blackboard R}}
-\defineXMLentity [rationals] {{\blackboard Q}}
-\defineXMLentity [naturalnumbers] {{\blackboard N}}
-\defineXMLentity [complexes] {{\blackboard C}}
-\defineXMLentity [primes] {{\blackboard P}}
+\defineXMLentity [integers] {\integers}
+\defineXMLentity [reals] {\reals}
+\defineXMLentity [rationals] {\rationals}
+\defineXMLentity [naturalnumbers] {\naturalnumbers}
+\defineXMLentity [complexes] {\complexes}
+\defineXMLentity [primes] {\primes}
\defineXMLentity [emptyset] {\emptyset}
\defineXMLentity [pi] {\pi}
@@ -450,7 +448,7 @@
\@EA \defineXMLentity \@EA [\mmlrbrace] {\getXMLentity{rbrace}}
\defineXMLentity [{[}] {\getXMLentity{lbracket}}
-\defineXMLentity [{]}] {\getXMLentity{lbracket}}
+\defineXMLentity [{]}] {\getXMLentity{rbracket}}
\defineXMLentity [{(}] {\getXMLentity{lparenthesis}}
\defineXMLentity [{)}] {\getXMLentity{rparenthesis}}
@@ -489,6 +487,7 @@
\defineXMLentity [oplus] {\mathematics\oplus}
\defineXMLentity [cup] {\mathematics\cup}
\defineXMLentity [cap] {\mathematics\cap}
+\defineXMLentity [sdot] {\mathematics\cdot}
\defineXMLentity [dot] {\mathematics\cdot}
\defineXMLentity [sim] {\mathematics\sim}
\defineXMLentity [circ] {\mathematics\circ}
diff --git a/tex/context/base/xtag-mmp.tex b/tex/context/base/xtag-mmp.tex
index 20cc1e677..8a9380f96 100644
--- a/tex/context/base/xtag-mmp.tex
+++ b/tex/context/base/xtag-mmp.tex
@@ -226,7 +226,7 @@
\def\MMLpSUBP#1#2%
{\withnexttwoXMLRelements
- {\doifelse{\@@MMLscriptsvariant}{\v!a}
+ {\doifelse\@@MMLscriptsvariant\v!a
{{\firstXMLRelement}#1{\secondXMLRelement}} % both {} essential
{\firstXMLRelement#1{\secondXMLRelement}}}%
#2}
@@ -359,8 +359,8 @@
\setupMMLappearance[mtable][\c!variant=\v!a]
-\def\MMLpTABLE%
- {\doifelse{\@@MMLmtablevariant}{\v!a}
+\def\MMLpTABLE
+ {\doifelse\@@MMLmtablevariant\v!a
{\expandafter\MMLpTABLEa}
{\expandafter\MMLpTABLEb}}
diff --git a/tex/context/base/xtag-pre.tex b/tex/context/base/xtag-pre.tex
index 1128708b1..78b1505ed 100644
--- a/tex/context/base/xtag-pre.tex
+++ b/tex/context/base/xtag-pre.tex
@@ -11,9 +11,9 @@
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.
-\beginTEX
- \endinput
-\endTEX
+\beginTEX
+ \endinput
+\endTEX
\writestatus{loading}{Context XML Macros (predefined)}
@@ -111,7 +111,7 @@
%D strange syntax.
%D
%D \starttypen
-%D <!CDATA[it starts here
+%D <!CDATA[it starts here
%D whatever you like to be shown verbatim
%D and ends here]]>
%D \stoptypen
@@ -139,7 +139,7 @@
{\dohandleXMLentityescape#1 @ @ @ @ @ @>}
\def\dohandleXMLentityescape#1 #2 #3 #4>
- {\doifnot{#1}{\letterpercent}
+ {\doifnot{#1}\letterpercent
{\doifelse{#2}{SYSTEM}
{\dohandleXMLentitySYSTEM#1 #2 #3 #4>}
{\dohandleXMLentityDEFINE#1 #2 #3 #4>}}}
@@ -165,16 +165,53 @@
%D Such entities can be encapsulated in a \type {DOCTYPE}
%D element. Therefore we remove the outer level of document
%D type definitions.
+%D
+%D \starttyping
+%D <!DOCTYPE Something>
+%D <!DOCTYPE Something >
+%D <!DOCTYPE Something [ ... ]>
+%D <!DOCTYPE Something SYSTEM "... ...">
+%D <!DOCTYPE Something SYSTEM "... ..." >
+%D <!DOCTYPE Something SYSTEM "... ..." [ ... ]>
+%D <!DOCTYPE Something PUBLIC "... ..." "...">
+%D <!DOCTYPE Something PUBLIC "... ..." "..." >
+%D <!DOCTYPE Something PUBLIC "... ..." "..." [ ... ]>
+%D \stoptyping
\defineXMLescape [DOCTYPE] \handleXMLdoctype
-\def\handleXMLdoctype#1 #2%
- {\doifelse{#2}{[}
- {%\writestatus{xml-doctype}{expanding #1}%
- \def\next{\processuntil{]>}}}
- {%\writestatus{xml-doctype}{skipping #1}%
- \def\next{\gobbleuntil {>}}}%
- \next}
+\def\handleXMLdoctype
+ {\let\XMLdoctype\empty
+ \dohandleXMLdoctype}
+
+\def\dohandleXMLdoctype
+ {\futurelet\nexttoken\dohandleXMLdoctok}
+
+\def\dohandleXMLdoctok
+ {\ifx\nexttoken>%
+ % [doctype: \XMLdoctype]
+ \@EA\gobbleuntil\@EA>\@EA
+ \else\ifx\nexttoken\blankspace
+ % [doctype: \XMLdoctype]
+ \@EAEAEA\dodohandleXMLdoctype
+ \else
+ \@EAEAEA\redoXMLdoctype
+ \fi\fi}
+
+\def\redoXMLdoctype#1%
+ {\edef\XMLdoctype{\XMLdoctype#1}\dohandleXMLdoctype}
+
+\def\dodohandleXMLdoctype#1%
+ {\executeifdefined{XMLdoctype#1}{\gobbleuntil>}}
+
+\setvalue{XMLdoctype>}{}
+\setvalue{XMLdoctype[}{\processuntil{]>}}
+
+\def\XMLdoctypeS YSTEM %
+ {\dowithgrabbedstring\dodohandleXMLdoctype}
+
+\def\XMLdoctypeP UBLIC %
+ {\dowithgrabbedstring{\dowithgrabbedstring\dodohandleXMLdoctype}}
%D Some day we may need to support entities within a
%D document type namespace.
@@ -196,30 +233,30 @@
% \def\scanXMLtokens#1%
% {\saveendlinechar\scantokens{#1}\restoreendlinechar}
-%D For security reasons, we provide a switch to turn this
+%D For security reasons, we provide a switch to turn this
%D mechanism on and off. When turned off, there is no way to
-%D turn it on from within an \XML\ encoded document, simply
-%D because the possibility to process \CONTEXT\ commands is
-%D gone.
+%D turn it on from within an \XML\ encoded document, simply
+%D because the possibility to process \CONTEXT\ commands is
+%D gone.
\setupXMLprocessing[\c!commando=\v!ja]
%\def\contextXMLcommand#1%
-% {\doif{\@@xpcommando}{\v!ja}
+% {\doif\@@xpcommando\v!ja
% {\pushmacro\disableXML
% \def\disableXML{\global\let\afterXMLprocessor\empty}%
% \global\let\afterXMLprocessor\enableXML
% \setnormalcatcodes\scantokens{#1}\afterXMLprocessor
% \popmacro\disableXML}}
-\def\contextXMLcommand#1% we don't use #1 here
- {\doif{\@@xpcommando}{\v!ja}
+\def\contextXMLcommand#1% we don't use #1 here
+ {\doif\@@xpcommando\v!ja
{\disableXML\scantokens\@EA{\currentXMLprocess}\enableXML}}
%D The indirect method (using the macro \type
%D {\currentXMLprocess} instead of \type {#}) is needed
-%D because of the \type {\scantokens}. Given the previous
-%D definition, and given that \ETEX\ is used, we can now
+%D because of the \type {\scantokens}. Given the previous
+%D definition, and given that \ETEX\ is used, we can now
%D say:
%D
%D \starttypen
@@ -238,7 +275,7 @@
\def\contextXMLdirective#1%
{\docontextXMLdirective#1 @ @ @\end}
-\def\docontextXMLdirective#1 #2 #3 #4\end% class variable value
+\def\docontextXMLdirective#1 #2 #3 #4\end % class variable value
{\csname\@@XMLvariable:#1:#2\endcsname{#3}}
%D A simple processing instruction is the following. It just
diff --git a/tex/context/base/xtag-raw.tex b/tex/context/base/xtag-raw.tex
new file mode 100644
index 000000000..9ab3ee946
--- /dev/null
+++ b/tex/context/base/xtag-raw.tex
@@ -0,0 +1,36 @@
+%D \module
+%D [ file=xtag-raw,
+%D version=2002.03.21,
+%D title=\CONTEXT\ XML Support,
+%D subtitle=reducing specials,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context XML Macros (raw specials)}
+
+%D Some day this module will be obsolete.
+
+\defineXMLentity [tex-hash] {\letterhash}
+\defineXMLentity [tex-dollar] {\letterdollar}
+\defineXMLentity [tex-percent] {\letterpercent}
+\defineXMLentity [tex-backslash] {\letterbackslash}
+\defineXMLentity [tex-hat] {\letterhat}
+\defineXMLentity [tex-underscore] {\letterunderscore}
+\defineXMLentity [tex-leftbrace] {\letterbgroup}
+\defineXMLentity [tex-rightbrace] {\letteregroup}
+\defineXMLentity [tex-bar] {\letterbar}
+\defineXMLentity [tex-tilde] {\lettertilde}
+
+\endinput
+
+\defineXMLsingular[test][oeps=,whow=,hm=]
+ {\tttf \input \XMLop{oeps} [\XMLop{whow}] [\XMLop{hm}]}
+
+\startXMLdata
+<test oeps="oeps_tst.tmp" whow="#FFEEGG" hm="^{}~"/>
+\stopXMLdata
diff --git a/tex/context/base/xtag-rng.tex b/tex/context/base/xtag-rng.tex
new file mode 100644
index 000000000..a3a529f7f
--- /dev/null
+++ b/tex/context/base/xtag-rng.tex
@@ -0,0 +1,28 @@
+%D \module
+%D [ file=xtag-rng,
+%D version=2002.10.29,
+%D title=\CONTEXT\ XML Support,
+%D subtitle=Relax NG,
+%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.
+
+\unprotect
+
+%D The following commands picks up a named block from the
+%D given file and pretty prints it.
+%D
+%D \starttypen
+%D \showRNGcomponent [eximple.rng] [request]
+%D \stoptypen
+%D
+%D If needed, you adapt the colors used by redefining the
+%D \type {xtag} color palet.
+
+\fetchruntimecommand\showRNGcomponent {\f!xtagprefix\s!run}
+
+\protect \endinput
diff --git a/tex/context/base/xtag-run.tex b/tex/context/base/xtag-run.tex
index ffdf913c9..759513890 100644
--- a/tex/context/base/xtag-run.tex
+++ b/tex/context/base/xtag-run.tex
@@ -46,10 +46,10 @@
.egroup
-\gdef\@@XMLshow {\@@XML shw}
+\gdef\@@XMLshow{\@@XML shw}
\gdef\@XMLindent#1%
- {\ifnum\XMLlevel>1\advance\leftskip#11em\relax\fi}
+ {\ifnum\XMLlevel>\plusone\advance\leftskip#11em\relax\fi}
\gdef\@XMLlevel#1%
{\advance\XMLlevel#11\relax}
@@ -64,17 +64,22 @@
\@EA\catcode\string``\@@active
\@EA\catcode\string`&\@@active
-\gdef\showXMLarguments%
- {\ifshowXMLarguments
+\gdef\doshowXMLargument#1#2#3#4%
+ {\hskip\zeropoint % or maybe \allowbreak
+ \string#1\color[xtag:#3]{#4}\string#2}%
+
+\gdef\showXMLarguments
+ {\hskip\zeropoint % or maybe \allowbreak
+ \ifshowXMLarguments
\bgroup
\@EA\catcode\string`=\@@active
\@EA\catcode\string`"\@@active
\@EA\catcode\string``\@@active
\@EA\catcode\string`&\@@active
\def={\color[xtag:7]{\string=}}%
- \def"##1"{\string"\color[xtag:8]{##1}\string"}%
- \def`##1`{\string`\color[xtag:8]{##1}\string`}%
- \def&##1;{\string&\color[xtag:7]{##1}\string;}%
+ \def"##1"{\doshowXMLargument""8{##1}}%
+ \def`##1`{\doshowXMLargument``8{##1}}%
+ \def&##1;{\doshowXMLargument&;7{##1}}%
\scantokens\@EA{\currentXMLarguments}%
\egroup
\else
@@ -95,27 +100,27 @@
\ifcase\@XMLnofelements\else\@@xftussen\fi
\fi
\fi
-\hangindent2em
-\indent
- \bgroup
- \localcolortrue
- \advance\XMLlevel -1
- \DoMod\XMLlevel by\XMLprettycycle to\scratchcounter
- \advance\scratchcounter 1
- \startcolor[xtag:\ifnum\scratchcounter<0 0\else\number\scratchcounter\fi]%
-\ifXMLunspacepretty\unskip\fi
- \string<%
- \ifnum\kindofXMLelement=2\string/\fi
- \currentXMLelement
- \stopcolor
- \ifcase#1\or\ifx\currentXMLarguments\empty\else
- \cleanupXMLarguments
- \startcolor[xtag:0]\hbox{\space}\showXMLarguments\unskip\stopcolor
- \fi\fi
- \startcolor[xtag:\ifnum\scratchcounter<0 0\else\number\scratchcounter\fi]%
- \ifnum\kindofXMLelement=3\string/\fi
- \string>%
- \stopcolor
+ \hangindent2em
+ \indent
+ \bgroup
+ \localcolortrue
+ \advance\XMLlevel \minusone
+ \DoMod\XMLlevel by\XMLprettycycle to\scratchcounter
+ \advance\scratchcounter \plusone
+ \startcolor[xtag:\ifnum\scratchcounter<0 0\else\number\scratchcounter\fi]%
+ \ifXMLunspacepretty\unskip\fi
+ \string<%
+ \ifnum\kindofXMLelement=2\string/\fi
+ \currentXMLelement
+ \stopcolor
+ \ifcase#1\or\ifx\currentXMLarguments\empty\else
+ \cleanupXMLarguments
+ \startcolor[xtag:0]\hbox{\space}\showXMLarguments\unskip\stopcolor
+ \fi\fi
+ \startcolor[xtag:\ifnum\scratchcounter<0 0\else\number\scratchcounter\fi]%
+ \ifnum\kindofXMLelement=3\string/\fi
+ \string>%
+ \stopcolor
\egroup
\ifnum\XMLlevel<\@@xfniveau\relax
\ifnum\kindofXMLelement=1\else
@@ -182,12 +187,12 @@
\gdef\showXMLemp[#1]%
{\setXMLshow\defineXMLsingular\someXMLword\relax[#1]}
-\gdef\doautoshowXMLelement%
+\gdef\doautoshowXMLelement
{\ifcase\kindofXMLelement
\or \nextXMLpara \or \prevXMLpara \or \someXMLline
\fi}
-\gdef\autoshowXMLelement%
+\gdef\autoshowXMLelement
{\ifcsname\@@XMLshow:\currentXMLelement\endcsname
\expandafter\normalexecuteXMLelement
\else
@@ -200,18 +205,19 @@
{\bgroup
\nohyphens
\dontcomplain
- \XMLlevel=0
+ \XMLlevel\zerocount
\increment\@@xfniveau % hack
\tttf
\startopelkaar[\v!blanko]
\ifautoXMLshow \let\executeXMLelement\autoshowXMLelement \fi
\let\executeXMLentity\@XMLentity
\enableXML\verbatimXML
- \readfile{\truefilename{#1}}{}{}\endgraf
+ \readfile{\truefilename{#1}}\donothing\donothing\endgraf
+ \removelastskip % really needed
\stopopelkaar
\egroup}
-\gdef\showXMLbuffer%
+\gdef\showXMLbuffer
{\dosingleempty\doshowXMLbuffer}
\gdef\doshowXMLbuffer[#1]%
@@ -224,7 +230,7 @@
%D
-\gdef\showXSDcomponent%
+\gdef\showXSDcomponent
{\dodoubleargument\doshowXSDcomponent}
\gdef\doshowXSDcomponent[#1][#2]%
@@ -236,4 +242,13 @@
\showXMLfile{#1}
\egroup}
+\gdef\showRNGcomponent
+ {\dodoubleargument\doshowRNGcomponent}
+
+\gdef\doshowRNGcomponent[#1][#2]%
+ {\bgroup
+ \videXMLcontextblock[#2]
+ \showXMLfile{#1}
+ \egroup}
+
\protect \endinput
diff --git a/tex/context/base/xtag-utf.tex b/tex/context/base/xtag-utf.tex
new file mode 100644
index 000000000..172f7b303
--- /dev/null
+++ b/tex/context/base/xtag-utf.tex
@@ -0,0 +1,21 @@
+%D \module
+%D [ file=xtag-utf,
+%D version=2002.06.24,
+%D title=\CONTEXT\ XML Support,
+%D subtitle=UTF-8 support,
+%D author=Hans Hagen,
+%D date=\currentdate,
+%D copyright={PRAGMA / Hans Hagen \& Ton Otten}]
+%C
+%C This module is part of the \CONTEXT\ macro||package and is
+%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
+%C details.
+
+\writestatus{loading}{Context XML Macros (UTF-8)}
+
+%D This filter is kind of obsolete, since \UTF\ is not
+%D limited to \XML. So, here we only enable \UTF\ support.
+
+\enableregime[utf]
+
+\endinput
diff --git a/tex/context/base/xtag-xsd.tex b/tex/context/base/xtag-xsd.tex
index e354202d5..ba885d5ff 100644
--- a/tex/context/base/xtag-xsd.tex
+++ b/tex/context/base/xtag-xsd.tex
@@ -1,5 +1,5 @@
%D \module
-%D [ file=xtag-pre,
+%D [ file=xtag-xsd,
%D version=2001.10.04,
%D title=\CONTEXT\ XML Support,
%D subtitle=Schemas,
diff --git a/tex/context/base/xtag-xsl.tex b/tex/context/base/xtag-xsl.tex
index e0a3e2f4e..df7c320de 100644
--- a/tex/context/base/xtag-xsl.tex
+++ b/tex/context/base/xtag-xsl.tex
@@ -22,11 +22,13 @@
\def\XSLTscriptfile{\bufferprefix xlscript}
+% to be sped up:
+
\def\presetXSLTcharacters
{\let\par\empty
- \def\{{\rawcharacter{`\{}}%
- \def\}{\rawcharacter{`\}}}%
- \def\\{\rawcharacter{`\\}}}
+ \def\{{\rawcharacter{`\{}}% \string^^..
+ \def\}{\rawcharacter{`\}}}% \string^^..
+ \def\\{\rawcharacter{`\\}}}% \string^^..
\def\obeyXSLTcharacters
{\setnaturalcatcodes
diff --git a/tex/generic/context/mptopdf.tex b/tex/generic/context/mptopdf.tex
index 9cd130fd5..1192a8a94 100644
--- a/tex/generic/context/mptopdf.tex
+++ b/tex/generic/context/mptopdf.tex
@@ -84,7 +84,7 @@
%D are collected in the file:
\input supp-pdf
-\input supp-mpe \MPcmyktrue
+\input supp-mpe \MPcmykcolorstrue \MPspotcolorstrue
%D We use no output routine.