From 333ecddc7acc53b73aae17ad7b8a7f36d423f989 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Fri, 10 Dec 2010 15:15:00 +0100 Subject: beta 2010.12.10 15:15 --- tex/context/base/cont-new.tex | 2 +- tex/context/base/context.mkiv | 2 + tex/context/base/context.tex | 2 +- tex/context/base/font-ini.mkiv | 52 ++- tex/context/base/m-steps.tex | 4 +- tex/context/base/mult-cld.lua | 94 ++-- tex/context/base/mult-cld.mkiv | 6 +- tex/context/base/node-tra.lua | 2 +- tex/context/base/page-com.mkiv | 116 +++++ tex/context/base/page-imp.mkiv | 675 +++++----------------------- tex/context/base/page-ini.mkiv | 4 - tex/context/base/page-lay.mkiv | 1 + tex/context/base/page-sel.mkiv | 347 ++++++++++++++ tex/context/base/supp-box.lua | 51 +++ tex/context/base/supp-box.mkii | 2 - tex/context/base/supp-box.mkiv | 605 +++---------------------- tex/generic/context/luatex-fonts-merged.lua | 2 +- 17 files changed, 821 insertions(+), 1146 deletions(-) create mode 100644 tex/context/base/page-com.mkiv create mode 100644 tex/context/base/page-sel.mkiv create mode 100644 tex/context/base/supp-box.lua diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 480b99dff..105d85ad6 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2010.12.09 12:11} +\newcontextversion{2010.12.10 15:15} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 9ed4161a6..a7fcb8651 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -247,6 +247,8 @@ \loadmarkfile{strc-blk} \loadmarkfile{page-imp} +\loadmarkfile{page-sel} % optional +\loadmarkfile{page-com} % optional \loadmarkfile{scrn-int} \loadmarkfile{scrn-men} diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index 2836c355e..a4e0f470b 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2010.12.09 12:11} +\edef\contextversion{2010.12.10 15:15} %D For those who want to use this: diff --git a/tex/context/base/font-ini.mkiv b/tex/context/base/font-ini.mkiv index 29b95aeb1..70ea02a36 100644 --- a/tex/context/base/font-ini.mkiv +++ b/tex/context/base/font-ini.mkiv @@ -1737,23 +1737,49 @@ % some day we can do an auto-fam if needed +% \def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined) +% {%\message{!m #1 #2 #3!}% #1 #2 #3 = signal +% %ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \mr \mb +% \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi} % \mm + +% \def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined) +% {%\message{!t #1 #2 #3!}% +% \ifcsname #1#3\endcsname\else\setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}\fi % \rma +% \ifcsname #2#3\endcsname\else\setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}\fi % \sla +% \ifcsname #1#2#3\endcsname\else\setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}\fi % \rmsla +% \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi % \rm +% \ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \sl +% \ifcsname #1\c!x\endcsname\else\setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}\fi % \rmx +% \ifcsname#1\c!xx\endcsname\else\setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}\fi % \rmxx +% \ifcsname #2\c!x\endcsname\else\setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}\fi % \slx +% \ifcsname#2\c!xx\endcsname\else\setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}\fi % \slxx +% \ifcsname #1#2\endcsname\else\setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}\fi} % \rmsl + \def\checkmathbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined) {%\message{!m #1 #2 #3!}% #1 #2 #3 = signal - %ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \mr \mb - \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi} % \mm + %setugvalue {#2}{\setcurrentfontalternative {#2}}% % \mr \mb + \setugvalue {#1}{\setcurrentfontstyle {#1}}} % \mm \def\checktextbodyfont#1#2#3% style alt size / gdef % #3 can be empty (checking needed as \bf is already defined) - {%\message{!t #1 #2 #3!}% - \ifcsname #1#3\endcsname\else\setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}\fi % \rma - \ifcsname #2#3\endcsname\else\setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}\fi % \sla - \ifcsname #1#2#3\endcsname\else\setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}\fi % \rmsla - \ifcsname #1\endcsname\else\setugvalue {#1}{\setcurrentfontstyle {#1}}\fi % \rm - \ifcsname #2\endcsname\else\setugvalue {#2}{\setcurrentfontalternative {#2}}\fi % \sl - \ifcsname #1\c!x\endcsname\else\setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}\fi % \rmx - \ifcsname#1\c!xx\endcsname\else\setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}\fi % \rmxx - \ifcsname #2\c!x\endcsname\else\setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}\fi % \slx - \ifcsname#2\c!xx\endcsname\else\setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}\fi % \slxx - \ifcsname #1#2\endcsname\else\setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}\fi} % \rmsl + {%\message{!t #1 #2 #3!}% % beware, some can be defined already + \setugvalue {#1#3}{\setcurrentfontstylesize {#1}{#3}}% % \rma + \setugvalue {#2#3}{\setcurrentfontalternativesize {#2}{#3}}% % \sla + \setugvalue {#1#2#3}{\setcurrentfontstylealternativesize{#1}{#2}{#3}}% % \rmsla + \ifcsname\s!normal#1\endcsname % text/math check + \expandafter\let\csname#1\expandafter\endcsname\csname\s!normal#1\endcsname + \else + \setugvalue {#1}{\setcurrentfontstyle {#1}}% % \rm + \fi + \ifcsname\s!normal#2\endcsname % text/math check + \expandafter\let\csname#2\expandafter\endcsname\csname\s!normal#2\endcsname + \else + \setugvalue {#2}{\setcurrentfontalternative {#2}}% % \sl + \fi + \setugvalue {#1\c!x}{\setcurrentfontxstylealternative {#1}}% % \rmx + \setugvalue{#1\c!xx}{\setcurrentfontxxstylealternative {#1}}% % \rmxx + \setugvalue {#2\c!x}{\setcurrentfontxalternative {#2}}% % \slx + \setugvalue{#2\c!xx}{\setcurrentfontxxalternative {#2}}% % \slxx + \setugvalue {#1#2}{\setcurrentfontstylealternative {#1}{#2}}} % \rmsl \def\dodefinedefaultbodyfont[#1][#2][#3]% sizes styles identifier {\def\dododefinedefaultbodyfont##1% diff --git a/tex/context/base/m-steps.tex b/tex/context/base/m-steps.tex index 1f6a37403..55e13b97d 100644 --- a/tex/context/base/m-steps.tex +++ b/tex/context/base/m-steps.tex @@ -454,8 +454,8 @@ \ifcase\somestepboxone \box\stepboxone \vskip\@@STPCvoffset \fi \ifcase\somestepboxtwo \box\stepboxtwo \vskip\scratchdimen \fi \ifcase\sometextboxtwo \box\textboxtwo \vskip\@@STPCvoffset \fi - \global\resetbox\stepboxone \global\resetbox\stepboxtwo % needed indeed - \global\resetbox\textboxone \global\resetbox\textboxtwo % needed indeed + \global\setbox\stepboxone\emptybox \global\setbox\stepboxtwo\emptybox % needed indeed + \global\setbox\textboxone\emptybox \global\setbox\textboxtwo\emptybox % needed indeed %\kern-\scratchdimen % no, instead: \vskip-\lastskip} \hbox diff --git a/tex/context/base/mult-cld.lua b/tex/context/base/mult-cld.lua index 64030724e..416ff247e 100644 --- a/tex/context/base/mult-cld.lua +++ b/tex/context/base/mult-cld.lua @@ -39,6 +39,7 @@ local texcount = tex.count local isnode = node.is_node -- after 0.65 just node.type local writenode = node.write +local copynodelist = node.copylist local ctxcatcodes = tex.ctxcatcodes local prtcatcodes = tex.prtcatcodes @@ -54,32 +55,72 @@ local report_cld = logs.new("cld") local processlines = false experiments.register("context.processlines", function(v) processlines = v end) -local _stack_, _n_ = { }, 0 +-- for tracing it's easier to have two stacks -local function _store_(ti) - _n_ = _n_ + 1 - _stack_[_n_] = ti - return _n_ +local _stack_f_, _n_f_ = { }, 0 +local _stack_n_, _n_n_ = { }, 0 + +local function _store_f_(ti) + _n_f_ = _n_f_ + 1 + _stack_f_[_n_f_] = ti + return _n_f_ +end + +local function _store_n_(ti) + _n_n_ = _n_n_ + 1 + _stack_n_[_n_n_] = ti + return _n_n_ +end + +local function _flush_f_(n) + local sn = _stack_f_[n] + if not sn then + report_cld("data with id %s cannot be found on stack",n) + else + local tn = type(sn) + if tn == "function" then + if not sn() and texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! + _stack_f_[n] = nil + else + -- keep, beware, that way the stack can grow + end + else + if texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! + writenode(sn) + _stack_f_[n] = nil + else + writenode(copynodelist(sn)) + -- keep, beware, that way the stack can grow + end + end + end end -local function _flush_(n) - local sn = _stack_[n] +local function _flush_n_(n) + local sn = _stack_n_[n] if not sn then report_cld("data with id %s cannot be found on stack",n) - elseif not sn() and texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! - _stack_[n] = nil + elseif texcount["@@trialtypesetting"] == 0 then -- @@trialtypesetting is private! + writenode(sn) + _stack_n_[n] = nil else + writenode(copynodelist(sn)) -- keep, beware, that way the stack can grow end end function context.restart() - _stack_, _n_ = { }, 0 + _stack_f_, _n_f_ = { }, 0 + _stack_n_, _n_n_ = { }, 0 end -context._stack_ = _stack_ -context._store_ = _store_ -context._flush_ = _flush_ +context._stack_f_ = _stack_f_ +context._store_f_ = _store_f_ +context._flush_f_ = _flush_f_ cldff = _flush_f_ + +context._stack_n_ = _stack_n_ +context._store_n_ = _store_n_ +context._flush_n_ = _flush_n_ cldfn = _flush_n_ -- Should we keep the catcodes with the function? @@ -205,7 +246,7 @@ local function writer(parent,command,first,...) if direct then if typ == "string" or typ == "number" then flush(currentcatcodes,ti) - else + else -- node.write trace_context("error: invalid use of direct in '%s', only strings and numbers can be flushed directly, not '%s'",command,typ) end direct = false @@ -253,7 +294,7 @@ local function writer(parent,command,first,...) elseif tn == 1 then -- some 20% faster than the next loop local tj = ti[1] if type(tj) == "function" then - flush(currentcatcodes,"[\\mkivflush{",_store_(tj),"}]") + flush(currentcatcodes,"[\\cldff{",_store_f_(tj),"}]") else flush(currentcatcodes,"[",tj,"]") end @@ -261,13 +302,13 @@ local function writer(parent,command,first,...) for j=1,tn do local tj = ti[j] if type(tj) == "function" then - ti[j] = "\\mkivflush{" .. _store_(tj) .. "}" + ti[j] = "\\cldff{" .. _store_f_(tj) .. "}" end end flush(currentcatcodes,"[",concat(ti,","),"]") end elseif typ == "function" then - flush(currentcatcodes,"{\\mkivflush{",_store_(ti),"}}") -- todo: ctx|prt|texcatcodes + flush(currentcatcodes,"{\\cldff{",_store_f_(ti),"}}") -- todo: ctx|prt|texcatcodes elseif typ == "boolean" then if ti then -- flush(currentcatcodes,"^^M") @@ -277,8 +318,8 @@ local function writer(parent,command,first,...) end elseif typ == "thread" then trace_context("coroutines not supported as we cannot yield across boundaries") - elseif isnode(ti) then - writenode(ti) + elseif isnode(ti) then -- slow + flush(currentcatcodes,"{\\cldfn{",_store_n_(ti),"}}") else trace_context("error: '%s' gets a weird argument '%s'",command,tostring(ti)) end @@ -288,7 +329,7 @@ end local generics = { } context.generics = generics local function indexer(parent,k) - local c = "\\" .. (generics[k] or k) + local c = "\\" .. tostring(generics[k] or k) local f = function(first,...) if first == nil then flush(currentcatcodes,c) @@ -322,7 +363,7 @@ local function caller(parent,f,a,...) end elseif typ == "function" then -- ignored: a ... - flush(currentcatcodes,"{\\mkivflush{",_store_(f),"}}") -- todo: ctx|prt|texcatcodes + flush(currentcatcodes,"{\\cldff{",_store_f_(f),"}}") -- todo: ctx|prt|texcatcodes elseif typ == "boolean" then if f then if a ~= nil then @@ -343,8 +384,9 @@ local function caller(parent,f,a,...) end elseif typ == "thread" then trace_context("coroutines not supported as we cannot yield across boundaries") - elseif isnode(f) then - writenode(f) + elseif isnode(f) then -- slow + -- writenode(f) + flush(currentcatcodes,"\\cldfn{",_store_n_(f),"}") else trace_context("error: 'context' gets a weird argument '%s'",tostring(f)) end @@ -367,7 +409,7 @@ local nofflushes = 0 statistics.register("traced context", function() if nofwriters > 0 or nofflushes > 0 then - return format("writers: %s, flushes: %s, maxstack: %s",nofwriters,nofflushes,_n_) + return format("writers: %s, flushes: %s, maxstack: %s",nofwriters,nofflushes,_n_f_) end end) @@ -482,7 +524,7 @@ local function indexer(parent,k) return f end -local function caller(parent,...) +local function caller(parent,...) -- todo: nodes local a = { ... } return function() return context(unpack(a)) @@ -573,7 +615,7 @@ local function caller(parent,f,a,...) end elseif typ == "function" then -- ignored: a ... - flush(currentcatcodes,mpdrawing,"{\\mkivflush{",store_(f),"}}") + flush(currentcatcodes,mpdrawing,"{\\cldff{",store_(f),"}}") elseif typ == "boolean" then -- ignored: a ... if f then diff --git a/tex/context/base/mult-cld.mkiv b/tex/context/base/mult-cld.mkiv index 7fcb96553..97b69b92e 100644 --- a/tex/context/base/mult-cld.mkiv +++ b/tex/context/base/mult-cld.mkiv @@ -21,10 +21,14 @@ \unexpanded\def\mkivdefstart #1{\unexpanded\expandafter\def\csname\e!start#1\endcsname} \unexpanded\def\mkivdefstop #1{\unexpanded\expandafter\def\csname\e!stop #1\endcsname} \unexpanded\def\mkivdef #1{\unexpanded\expandafter\def\csname #1\endcsname} - \def\mkivflush #1{\directlua\zerocount{context._flush_(#1)}} % this one will get protected \unexpanded\def\cldprocessfile#1{\directlua\zerocount{context.runfile("#1")}} \def\cldcontext #1{\directlua\zerocount{context(#1)}} \def\cldcommand #1{\directlua\zerocount{context.#1}} + \def\mkivflush #1{\directlua\zerocount{context._flush_f_(#1)}} % obsolete + + \def\cldff #1{\directlua\zerocount{cldff(#1)}} % global + \def\cldfn #1{\directlua\zerocount{cldfn(#1)}} % global + \protect \endinput diff --git a/tex/context/base/node-tra.lua b/tex/context/base/node-tra.lua index 27665d60b..d3b71b2b2 100644 --- a/tex/context/base/node-tra.lua +++ b/tex/context/base/node-tra.lua @@ -605,7 +605,7 @@ local function toutf(list,result,nofresult,stopcriterium) end end elseif id == disc_code then - result, nofresult = toutf(n.replace,result,nofresult) + result, nofresult = toutf(n.replace,result,nofresult) -- needed? elseif id == hlist_code or id == vlist_code then --~ if nofresult > 0 and result[nofresult] ~= " " then --~ nofresult = nofresult + 1 diff --git a/tex/context/base/page-com.mkiv b/tex/context/base/page-com.mkiv new file mode 100644 index 000000000..6c6d741a8 --- /dev/null +++ b/tex/context/base/page-com.mkiv @@ -0,0 +1,116 @@ +%D \module +%D [ file=page-com, % moved from page-imp +%D version=1998.01.15, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Page Comments, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This will become runtime loaded code. + +\writestatus{loading}{ConTeXt Page Macros / Page Comments} + +\unprotect + +%D \macros +%D {setuppagecomment,startpagecomment} +%D +%D This command is not yet documented. Usage: +%D +%D \starttyping +%D \setuppagecomment[state=start,location=right] +%D +%D \startpagecomment +%D \input knuth +%D \stoppagecomment +%D \stoptyping + +\unexpanded\def\setuppagecomment + {\dosingleempty\dosetuppagecomment} + +\def\dosetuppagecomment[#1]% + {\getparameters[\??pc][#1]% + \doifelse\@@pcstate\v!start + {\doifinsetelse\@@pclocation{\v!bottom,\v!top} + {\setuppapersize[\c!left=\hskip\@@pcoffset]% + \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcheight\relax}% + \edef\@@pcpaperwidth {\the\dimexpr\paperwidth+\@@pcoffset+\@@pcoffset\relax}% + \defineoverlay[\v!pagecomment][\placepagecommentTB]} + {\setuppapersize[\c!top=\vskip\@@pcoffset]% + \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset\relax}% + \edef\@@pcpaperwidth {\the\dimexpr\paperwidth+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcwidth\relax}% + \defineoverlay[\v!pagecomment][\placepagecommentLR]}% + \processaction + [\@@pclocation] + [ \v!bottom=>{\setuppapersize[\c!bottom =\vss,\c!top =\vskip\@@pcoffset]}, + \v!top=>{\setuppapersize[\c!top =\vss,\c!bottom =\vskip\@@pcoffset]}, + \v!left=>{\setuppapersize[\c!left =\hss,\c!right=\hskip\@@pcoffset]}, + \v!right=>{\setuppapersize[\c!right=\hss,\c!left =\hskip\@@pcoffset]}]% + \definepapersize + [\v!pagecomment] + [\c!height=\@@pcpaperheight, + \c!width=\@@pcpaperwidth]% + \let\@@pcprintpapersize\printpapersize + \setuppapersize[\papersize][\v!pagecomment]% + \setupbackgrounds[\v!paper][\c!background=\v!pagecomment]} + {\doif\@@pcstate\v!stop % else initialization invokes backgrounds + {% this should be tested first + % \normalexpanded{\noexpand\setuppapersize[\papersize][\@@pcprintpapersize]}% + \setupbackgrounds[\v!paper][\c!background=]}}} + +\def\@@pcprintpapersize{\printpapersize} + +\unexpanded\def\placepagecommentTB + {\vbox to \printpaperheight + {%\forgetall + \hsize\printpaperwidth + \vskip\@@pcoffset + \doifelse\@@pclocation\v!bottom{\vskip\dimexpr\paperheight+\@@pcdistance\relax}\vss + \hskip\@@pcoffset + \vbox to \@@pcheight + {%\forgetall + \hsize\paperwidth + \ifpagecomment + \getbuffer[\v!pagecomment]% + \global\pagecommentfalse + \fi}% + \hfill + \doifelse\@@pclocation\v!bottom\vss{\vskip\dimexpr\paperheight+\@@pcdistance\relax}% + \vskip\@@pcoffset}} + +\unexpanded\def\placepagecommentLR + {\hbox to \printpaperwidth + {\hskip\@@pcoffset + \doifelse\@@pclocation\v!right{\hskip\paperwidth\hskip\@@pcdistance}\hss + \vbox to \printpaperheight + {%\forgetall + \vskip\@@pcoffset + \hsize\@@pcwidth + \ifpagecomment + \getbuffer[\v!pagecomment]% + \global\pagecommentfalse + \fi + \vss}% + \doifelse\@@pclocation\v!right\hss{\hskip\paperwidth\hskip\@@pcdistance}% + \hskip\@@pcoffset}} + +\newif\ifpagecomment + +\setvalue{\e!start\v!pagecomment}% + {\global\pagecommenttrue + \dostartbuffer[\v!pagecomment][\e!start\v!pagecomment][\e!stop\v!pagecomment]} + +\setuppagecomment + [\c!state=, % \v!stop would invoke background calculation + \c!location=\v!bottom, + \c!offset=.5cm, + \c!distance=.5cm, + \c!height=5cm, + \c!width=10cm] + +\endinput diff --git a/tex/context/base/page-imp.mkiv b/tex/context/base/page-imp.mkiv index 503768336..e58bac45d 100644 --- a/tex/context/base/page-imp.mkiv +++ b/tex/context/base/page-imp.mkiv @@ -23,9 +23,7 @@ % % \starttext \dorecurse{10}{\input tufte \par} \stoptext -% to be moved code: - -\newif\ifclipprintbox \clipprintboxtrue +\newif\ifclipprintbox \clipprintboxtrue % todo: conditional %newif\ifclippagebox \clippageboxtrue \def\clippedprintbox#1#2% can be made more efficient, see other clipper @@ -59,7 +57,7 @@ \let\clippagebox \gobbleoneargument \let\clipprintbox\gobbleoneargument - + % \setuppagenumbering[alternative=doublesided] % \setupcolors[state=start] % \setuppapersize[A4][A4,oversized] @@ -106,7 +104,7 @@ %D This is a user macro (appending to every last shipout is not %D really user friendly. -\newtoks \collectedtextdata +\newtoks\collectedtextdata \long\unexpanded\def\starttextdata#1\stoptextdata {\doglobal\appendtoks#1\to\collectedtextdata} @@ -127,6 +125,7 @@ \def\myshipout#1% {\beforeshipout % voor de pagebody dus ! \dontshowcomposition + \dontcomplain \executeifdefined{\??pp:\c!method:\@@ppmethod}\gobbleoneargument{#1}% \setnextrealpageno \aftershipout} @@ -155,7 +154,7 @@ \newbox\shipoutscratchbox -\def\actualshipout#1% +\def\actualshipout#1% todo: less callbacks {\global\advance\shippedoutpages\plusone % this is not resource safe! \ifx\pagestoshipout\empty @@ -191,10 +190,8 @@ \fi}% \smashbox\scratchbox \shipout\vbox - {%\forgetall - \offinterlineskip - \dontcomplain - \scratchdimen-1in + {\offinterlineskip + \scratchdimen-1in % to be done in luatex: zero that one \vskip\scratchdimen \hskip\scratchdimen \hbox % \setbox0=\box.. is nicer @@ -219,19 +216,16 @@ %D We need a couple of boxes for duplex printing \unknown \newbox\arrangedpageA \newbox\arrangedpageB - -%D \unknown\ and some for simulating big sheets. - \newbox\arrangedpageC \newbox\arrangedpageD \newbox\arrangedpageE \newbox\arrangedpageF \newbox\arrangedpageG \newbox\arrangedpageH -\newif\ifswaparranged -\newif\ifnegatearranged -\newif\ifmirrorarranged -\newif\ifdoublearranged - -\newif\ifarrangingdisabled +\newconditional\arrangedswapstate +\newconditional\arrangednegatestate +\newconditional\arrangedmirrorstate +\newconditional\arrangeddoublestate +\newconditional\arrangingdisabledstate +\newconditional\arrangedbackgroundstate \def\arrangedrotationO{0} \def\arrangedrotationE{0} @@ -243,66 +237,93 @@ \newcount\arrangedpageX \arrangedpageX\plusone \newcount\arrangedpageY \arrangedpageY\plusone -% \newcount\horizontalcutmarks -% \newcount\verticalcutmarks - \def\calculatepaperoffsets#1% - {\scratchdimen\getvalue{\??pp#1\c!offset}% - \divide\scratchdimen \arrangedpageX - \global\advance\paperwidth -2\scratchdimen - \scratchdimen\getvalue{\??pp#1\c!offset}% - \divide\scratchdimen \arrangedpageY - \global\advance\paperheight-2\scratchdimen} + {\global\paperoffset\getvalue{\??pp#1\c!offset}% + \global\advance\paperwidth -2\dimexpr\paperoffset/\arrangedpageX\relax + \global\advance\paperheight-2\dimexpr\paperoffset/\arrangedpageY\relax} + +\def\doinstallarrangedoption#1#2% + {\setvalue{\??pp=>#1}{#2}} + +\def\doinstalledarrangedoption#1% + {\ifcsname\??pp=>#1\endcsname + \csname\??pp=>#1\endcsname + \else + \checkinstalledpagearrangement{#1}% this installs the arranger + \fi} + +\doinstallarrangedoption\empty + {} % no default and check if empty, we can have ,,, + +\doinstallarrangedoption\v!disable + {\global\settrue\arrangingdisabledstate} + +\doinstallarrangedoption\v!mirrored + {\global\settrue\arrangedmirrorstate} + +\doinstallarrangedoption\v!doublesided + {\global\settrue\arrangeddoublestate} + +\doinstallarrangedoption\v!negative + {\global\settrue\arrangednegatestate} + +\doinstallarrangedoption\v!rotated + {\gdef\arrangedrotationO {90}% + \gdef\arrangedrotationE{270}% + \swapcounts\horizontalcutmarks\verticalcutmarks} + +\doinstallarrangedoption{90} + {\gdef\arrangedrotationO {90}% + \gdef\arrangedrotationE{270}% + \swapcounts\horizontalcutmarks\verticalcutmarks} + +\doinstallarrangedoption{180} + {\gdef\arrangedrotationO{180}% + \gdef\arrangedrotationE {0}} + +\doinstallarrangedoption{270} + {\gdef\arrangedrotationO{270}% + \gdef\arrangedrotationE {90}% + \swapcounts\horizontalcutmarks\verticalcutmarks} + +\doinstallarrangedoption\s!reset + {\global\arrangingpagesfalse} -\newconditional\arrangedbackgroundokay % more ifs -> conditionals +\doinstallarrangedoption\v!background + {\global\settrue\arrangedbackgroundstate} \unexpanded\def\setuparranging[#1]% - {\ifarrangingdisabled \else - \doifelse{#1}\v!disable - {\global\arrangingdisabledtrue} - {\global\arrangingdisabledfalse}% - \global\arrangingpagestrue - \global\negatearrangedfalse - \global\mirrorarrangedfalse - \global\doublearrangedfalse + {\ifconditional\arrangingdisabledstate \else + %global\setfalse\arrangingdisabledstate + \global\arrangingpagestrue % will be conditional + \global\setfalse\arrangednegatestate + \global\setfalse\arrangedmirrorstate + \global\setfalse\arrangeddoublestate + \global\setfalse\arrangedswapstate \gdef\arrangedrotationO{0}% \gdef\arrangedrotationE{180}% - \processallactionsinset - [#1] - [ \v!mirrored=>\global\mirrorarrangedtrue, - \v!doublesided=>\global\doublearrangedtrue, - \v!negative=>\global\negatearrangedtrue, - \v!rotated=>\gdef\arrangedrotationO {90}\gdef\arrangedrotationE{270}, - 90=>\gdef\arrangedrotationO {90}\gdef\arrangedrotationE{270}, - 180=>\gdef\arrangedrotationO{180}\gdef\arrangedrotationE{0}, - 270=>\gdef\arrangedrotationO{270}\gdef\arrangedrotationE{90}, - \s!reset=>\global\arrangingpagesfalse, - \v!background=>\global\settrue\arrangedbackgroundokay, - \s!unknown=>\checkinstalledpagearrangement\commalistelement]% - % no \s!default=> we can have aaa,,bbb + \processcommalist[#1]\doinstalledarrangedoption \ifx\handlearrangedpage\undefined \global\arrangingpagesfalse \fi - \doifcommonelse{#1}{90,270,\v!rotated} - {\swapcounts\horizontalcutmarks\verticalcutmarks}{}% ugly solution \setuppapersize \fi} -\def\installpagearrangement #1 % +\def\installpagearrangement #1 % will lchange, no space {\setgvalue{\??pp\??pp#1}} \def\checkinstalledpagearrangement#1% can be empty: aaa,,bbb {\executeifdefined{\??pp\??pp#1}\donothing} \def\dosetuparrangement#1#2#3#4#5#6#7#8% - {\global\arrangedpageX #1% - \global\arrangedpageY #2% - \global\arrangedpageT #3% - \global\horizontalcutmarks#4% - \global\verticalcutmarks #5% - \global\let \pusharrangedpage #6% - \global\let \poparrangedpages #7% - \global\let \handlearrangedpage#8} + {\global\arrangedpageX #1% + \global\arrangedpageY #2% + \global\arrangedpageT #3% + \global\horizontalcutmarks #4% + \global\verticalcutmarks #5% + \global\let\pusharrangedpage #6% + \global\let\poparrangedpages #7% + \global\let\handlearrangedpage#8} \installpagearrangement {\v!normal} {\global\arrangingpagesfalse} @@ -355,16 +376,6 @@ {\dosetuparrangement{1}{2}{4}{2}{3}% \pusharrangedpageTWOTOPSIDE\poparrangedpagesTWOTOPSIDE\handlearrangedpageTOP} -% \def\filluparrangedpages % beware: \realpageno is 1 ahead -% {\ifarrangingpages -% \scratchcounter-\realpageno -% \divide\scratchcounter \arrangedpageT -% \multiply\scratchcounter \arrangedpageT -% \advance\scratchcounter \realpageno -% \advance\scratchcounter \minusone -% \dorecurse\scratchcounter{\noheaderandfooterlines\ejectdummypage}% -% \fi} - \def\filluparrangedpages % beware: \realpageno is 1 ahead {\ifarrangingpages \scratchcounter\numexpr\realpageno-\plusone\relax @@ -379,9 +390,7 @@ \def\handlearrangedpageXandY#1#2#3#4#5% {\global\setbox#5\hbox to \arrangedpageX\paperwidth {\setbox\scratchbox\vbox to \arrangedpageY\paperheight - {%\forgetall - \offinterlineskip - \dontcomplain + {\offinterlineskip \vskip#4\paperheight \hskip#3\paperwidth \dorotatebox{\ifcase#2 0\else180\fi}\hbox{\box#1}% @@ -399,7 +408,7 @@ \gotonextarrangepage \ifnum\arrangedrotationO\arrangedrotationE>\zerocount \setbox#1\vbox - {\ifdoublearranged + {\ifconditional\arrangeddoublestate \ifodd\arrangeno \dorotatebox\arrangedrotationO\hbox{\box#1}% \else @@ -409,27 +418,30 @@ \dorotatebox\arrangedrotationO\hbox{\box#1}% \fi}% \fi - \ifmirrorarranged + \ifconditional\arrangedmirrorstate \setbox#1\vbox{\domirrorbox\vbox{\box#1}}% \fi - \ifnegatearranged + \ifconditional\arrangednegatestate \negatecolorbox{#1}% \fi \finishpagebox#1% - \ifconditional\arrangedbackgroundokay\addprintbackground#1\fi + \ifconditional\arrangedbackgroundstate\addprintbackground#1\fi \actualshipout{\box#1}% \egroup} %D The format file can be 16K smaller when we postpone the %D real arrangments. Some day ... +\def\reportarrangedpage#1% + {\showmessage\m!systems + {23}{\the\realpageno.\the\pageno\ifnum\subpageno>0 .\the\subpageno\fi,\number#1}} + % TOP % 32/16/8/4/SIDE \def\poparrangedpagesAB {\ifnum\arrangedpageN>\zerocount - \dontcomplain \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA @@ -548,8 +560,7 @@ {\global\ht\arrangedpageA\paperheight \global\ht\arrangedpageB\paperheight \global\setbox\arrangedpageA\vbox - {%\forgetall - \offinterlineskip\vskip\paperheight + {\offinterlineskip\vskip\paperheight \box\arrangedpageA\box\arrangedpageB}% \global\setbox\arrangedpageB\box\scratchbox} % ? @@ -565,16 +576,16 @@ \def\handlearrangedpageTWOUP {\splitoffarrangedpagesTWO - \ifswaparranged + \ifconditional\arrangedswapstate \global\setbox\arrangedpageA\hbox - {\clippedprintbox0\arrangedpageA - \clippedprintbox1\arrangedpageB}% - \swaparrangedfalse + {\clippedprintbox\zerocount\arrangedpageA + \clippedprintbox\plusone \arrangedpageB}% + \setfalse\arrangedswapstate \else \global\setbox\arrangedpageA\hbox - {\clippedprintbox0\arrangedpageB - \clippedprintbox1\arrangedpageA}% - \swaparrangedtrue + {\clippedprintbox\zerocount\arrangedpageB + \clippedprintbox\plusone \arrangedpageA}% + \settrue\arrangedswapstate \fi \global\ht\arrangedpageA\paperheight \global\setbox\arrangedpageB\box\scratchbox} @@ -583,29 +594,26 @@ {\splitoffarrangedpagesTWO \global\ht\arrangedpageA\paperheight \global\ht\arrangedpageB\paperheight - \ifswaparranged + \ifconditional\arrangedswapstate \global\setbox\arrangedpageA\vbox - {%\forgetall - \offinterlineskip\vskip\paperheight + {\offinterlineskip\vskip\paperheight \box\arrangedpageA\box\arrangedpageB}% - \swaparrangedfalse + \setfalse\arrangedswapstate \else \global\setbox\arrangedpageA\vbox - {%\forgetall - \offinterlineskip\vskip\paperheight + {\offinterlineskip\vskip\paperheight \box\arrangedpageB\box\arrangedpageA}% - \swaparrangedtrue + \settrue\arrangedswapstate \fi \global\setbox\arrangedpageB\box\scratchbox} \def\poparrangedpagesTWO {\ifnum\arrangedpageN>\zerocount - \dontcomplain - \swaparrangedfalse + \setfalse\arrangedswapstate \doloop {\handlearrangedpage \bgroup - \paperwidth\arrangedpageX\paperwidth + \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \ht\arrangedpageA\paperheight \wd\arrangedpageA\paperwidth @@ -621,8 +629,7 @@ {\global\advance\arrangedpageN\plusone \reportarrangedpage\arrangedpageN \global\setbox\arrangedpageB\vbox - {%\forgetall - \offinterlineskip + {\offinterlineskip \unvbox\arrangedpageB \allowbreak \ht#1\onepoint @@ -657,8 +664,7 @@ \def\poparrangedpagesAtoH {\ifnum\arrangedpageN>\zerocount - \dontcomplain - \paperwidth\arrangedpageX\paperwidth + \paperwidth \arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \outputarrangedbox\arrangedpageB @@ -675,7 +681,6 @@ \def\poparrangedpagesAtoD {\ifnum\arrangedpageN>\zerocount - \dontcomplain \paperwidth\arrangedpageX\paperwidth \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA @@ -749,10 +754,9 @@ \def\pusharrangedpageXY#1% {\global\advance\arrangedpageN\plusone - \reportarrangedpage\arrangedpageN \global\advance\arrangedpageM\plusone - \global\setbox\arrangedpageB\hbox - \ifdim\@@ppwidth>\zeropoint to \@@ppwidth \fi + \reportarrangedpage\arrangedpageN + \global\setbox\arrangedpageB\hbox \ifdim\@@ppwidth>\zeropoint to \@@ppwidth \fi {\ifvoid\arrangedpageB\else \unhbox\arrangedpageB \ifdim\@@ppdx>\zeropoint \else \hss\fi @@ -761,8 +765,7 @@ \fi \box#1}% \ifnum\arrangedpageM<\arrangedpageX\else - \global\setbox\arrangedpageA\vbox - \ifdim\@@ppheight>\zeropoint to \@@ppheight \fi + \global\setbox\arrangedpageA\vbox \ifdim\@@ppheight>\zeropoint to \@@ppheight \fi {\offinterlineskip \ifvoid\arrangedpageA\else \unvbox\arrangedpageA @@ -779,9 +782,8 @@ \def\poparrangedpagesXY {\ifnum\arrangedpageN>\zerocount - \dontcomplain - \paperwidth\arrangedpageX\paperwidth - \paperheight \arrangedpageY\paperheight + \paperwidth \arrangedpageX\paperwidth + \paperheight\arrangedpageY\paperheight \outputarrangedbox\arrangedpageA \global\arrangedpageN\zerocount \global\arrangedpageM\zerocount @@ -823,20 +825,17 @@ \def\dodefinepageshift[#1][#2][#3]% {\setvalue{\??pt#2:#1}{#3}} -\letempty \hpageshifts \newcounter\nofhpageshifts -\letempty \vpageshifts \newcounter\nofvpageshifts - -% \let\shiftprintpagebox\gobbleoneargument -% \let\shiftpaperpagebox\gobbleoneargument +\letempty\hpageshifts \newcount\nofhpageshifts +\letempty\vpageshifts \newcount\nofvpageshifts \def\dogetpageshift#1#2#3% #1=\dimenx #2=\xpageshifts #3=\nofxpageshifts - {\ifx#2\empty + {\ifx#2\empty % we could do this in lua #1\zeropoint \else - \doglobal\increment#3% + \global\advance#3\plusone \getfromcommacommand[#2][#3]% \ifx\commalistelement\empty - \globallet#3\!!plusone + \global#3\plusone % we cycle \getfromcommacommand[#2][#3]% \fi \ifx\commalistelement\empty @@ -863,16 +862,10 @@ \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!horizontal:#2} - {\edef\hpageshifts{\getvalue{\??pt\v!horizontal:#2}}}% - \doifdefined{\??pt\v!vertical :#3} - {\edef\vpageshifts{\getvalue{\??pt\v!vertical :#3}}}% - \doif{#1}\v!page{\let\shiftprintpagebox\shiftpagebox}% - \doif{#1}\v!paper{\let\shiftpaperpagebox\shiftpagebox}% + \edef\hpageshifts{\ifcsname\??pt\v!horizontal:#2\endcsname\csname\??pt\v!horizontal:#2\endcsname}% + \edef\vpageshifts{\ifcsname\??pt\v!vertical :#3\endcsname\csname\??pt\v!vertical :#3\endcsname}% + \doifelse{#1}\v!page {\let\shiftprintpagebox\shiftpagebox}{\let\shiftprintpagebox\gobbleoneargument}% + \doifelse{#1}\v!paper{\let\shiftpaperpagebox\shiftpagebox}{\let\shiftpaperpagebox\gobbleoneargument}% \else\ifsecondargument \doifinsetelse{#1}{\v!page,\v!paper} {\setuppageshift[#1][#2][#2]} @@ -880,430 +873,6 @@ \else\iffirstargument \setuppageshift[\v!page][#1][#1]% \fi\fi\fi} - -%D One can (mis)use this mechanism, in close cooperation -%D with \PDFTEX\ to arrange pages of already produced files. -%D -%D \starttyping -%D \insertpages[file.pdf][1,3][n=30,width=18cm] -%D \stoptyping -%D -%D The pages are inserted in the text area, and even pages -%D are repositioned according to the width. In this example -%D empty pages are added after page 1 and 3. -%D -%D Selecting pages can be accomplished by: -%D -%D \starttyping -%D \filterpages[file.pdf][1,3,5][n=30,width=18cm] -%D \stoptyping -%D -%D One may pass \type {odd} or \type {even} instead of a -%D comma separated list. A third alternative is: -%D -%D \starttyping -%D \copypages[file.pdf][n=30,scale=950] -%D \stoptyping -%D -%D This macros inserts the page, according to the settings -%D provided. - -\def\insertpages - {\dotripleempty\doinsertpages} - -\def\doinsertpages[#1][#2][#3]% - {\doifassignmentelse{#2} - {\dodoinsertpages[#1][][#2]} - {\dodoinsertpages[#1][#2][#3]}} - -\def\dodoinsertpages[#1][#2][#3]% - {\bgroup - \dontcomplain - \getfiguredimensions[#1]% - \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\!!zeropoint,#3]% - \doifinset0{#2}{\emptyhbox\page}% - \dorecurse\@@ipn - {\dofilterpage{#1}\recurselevel - \doifinset\recurselevel{#2}{\emptyhbox\page}}% - \egroup} - -\def\filterpages - {\dotripleempty\dofilterpages} - -\def\dofilterpages[#1][#2][#3]% % \noffigurepages not yet supported - {\bgroup - \dontcomplain - \getfiguredimensions[#1]% - \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\!!zeropoint,#3]% - \doifelse{#2}\v!even - {\dorecurse\@@ipn - {\ifodd\recurselevel\relax\else\dofilterpage{#1}\recurselevel\fi}} - {\doifelse{#2}\v!odd - {\dorecurse\@@ipn - {\ifodd\recurselevel\relax\dofilterpage{#1}\recurselevel\fi}} - {\def\dodocommand##1% - {\ifnum##1>\@@ipn\else\dofilterpage{#1}{##1}\fi}% - \def\docommand##1% - {\dowithrange{##1}\dodocommand}% - \processcommalist[#2]\docommand}}% - \egroup} - -\def\dofilterpage#1#2% - {\hbox to \textwidth - {\ifdoublesided\ifdim\@@ipwidth>\zeropoint\relax\ifodd\realpageno\else - \hfill - \def\dowithfigure{\hskip-\@@ipwidth}% - \fi\fi\fi - \setbox0\hbox - {\externalfigure[#1][\c!page=#2,\c!height=\textheight]}% - \wd0\zeropoint - \box0} - \page} - -\def\copypages - {\dodoubleempty\docopypages} - -\def\docopypages[#1][#2]% - {\bgroup - \getfiguredimensions[#1]% - \getparameters[\??ip] - [\c!n=\noffigurepages, - \c!marking=\v!off, - \c!scale=\!!thousand, - \c!offset=\!!zeropoint, - #2]% - \dorecurse\@@ipn - {\vbox to \textheight - {\hsize\textwidth - \scratchdimen\@@ipoffset - \centeredbox - {\doifelse\@@ipmarking\v!on\cuthbox\hbox - {\ifdim\scratchdimen>\zeropoint\relax - \advance\vsize -2\scratchdimen - \advance\hsize -2\scratchdimen - \externalfigure[#1][\c!page=\recurselevel,#2,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]% - \else - \externalfigure[#1][\c!page=\recurselevel,#2,\c!offset=\v!overlay]% - \fi}}} - \page} - \egroup} - -%D \macros -%D {combinepages} -%D -%D Yet another way of postprocessing is handles by \type -%D {\combinepages}. This macro builds a matrix of pages from a -%D file, for example: -%D -%D \starttyping -%D \setuppapersize -%D [A4][A4] % or [A4,landscape][A4,landscape] -%D -%D \setuplayout -%D [header=0pt,footer=1cm, -%D backspace=1cm,topspace=1cm, -%D width=middle,height=middle] -%D -%D \setupfootertexts -%D [presentation---\currentdate\space---\space\pagenumber] -%D -%D \starttext -%D \combinepages[slides][nx=2,ny=3,frame=on] -%D \stoptext -%D \stoptyping -%D -%D One can influence the way the pages are combined. (This -%D will be explained some time.) - -\def\combinepages - {\dodoubleempty\docombinepages} - -\def\docombinepages[#1][#2]% a=perpag b=free - {\bgroup - \dontcomplain - \getfiguredimensions[#1]% - \getparameters - [\??ip] - [\c!alternative=\v!a, - \c!n=\noffigurepages,\c!nx=2,\c!ny=2,\c!start=1,\c!stop=\!!maxcard, - \c!distance=\bodyfontsize, - \c!bottom=\vfill,\c!top=\vss, - \c!left=\hss,\c!right=\hss, - \c!before=\page,\c!after=\page,\c!inbetween=\blank, - \c!frame=,\c!background=,\c!backgroundcolor=, - #2]% - \def\@@ipname{#1}% - \@@ipbefore - \expandcheckedcsname{\??ip::\c!alternative:}\@@ipalternative\v!b - \@@ipafter - \egroup} - -\setvalue{\??ip::\c!alternative:\v!a}% - {\global\combinedpagescounter\@@ipstart - \doloop - {\vbox to \textheight - {\hsize\textwidth % ? ? - \scratchdimen\@@ipdistance - \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax - \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax - \dorecurse\@@ipny - {\hbox to \hsize - {\dorecurse\@@ipnx - {\vbox to \!!heighta - {\hsize\!!widtha - \vsize\!!heighta - \@@iptop - \hbox to \hsize - {\@@ipleft - \ifnum\combinedpagescounter>\@@ipstop\relax - \globallet\@@ipn\!!zerocount - \else\ifnum\combinedpagescounter>\@@ipn \else - \externalfigure[\@@ipname] - [\c!object=\v!no, - \c!page=\number\combinedpagescounter, - \c!factor=\v!max, - \c!background=\@@ipbackground, - \c!backgroundcolor=\@@ipbackgroundcolor, - \c!frame=\@@ipframe]% - \fi\fi - \@@ipright} - \@@ipbottom}% - \global\advance\combinedpagescounter\plusone - \hfil}% - \hfilneg} - \vfil}% - \vfilneg}% - \page - \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} - -\setvalue{\??ip::\c!alternative:\v!c}% - {\global\combinedpagescounter\@@ipstart - \doloop - {\vbox to \textheight - {\hsize\textwidth % ? ? - \scratchdimen\@@ipdistance - \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax - \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax - \hbox to \hsize - {\dorecurse\@@ipnx - {\@@ipleft - \vbox to \textheight - {\hsize\!!widtha - {\dorecurse\@@ipny - {\@@iptop - \hbox to \hsize - {\vbox to \!!heighta - {\hsize\!!widtha - \vsize\!!heighta - \ifnum\combinedpagescounter>\@@ipstop\relax - \globallet\@@ipn\!!zerocount - \else\ifnum\combinedpagescounter>\@@ipn \else - \externalfigure[\@@ipname] - [\c!object=\v!no, - \c!page=\number\combinedpagescounter, - \c!factor=\v!max, - \c!background=\@@ipbackground, - \c!backgroundcolor=\@@ipbackgroundcolor, - \c!frame=\@@ipframe]% - \fi\fi}} - \global\advance\combinedpagescounter\plusone - \@@ipbottom}% - \vfil}% - \vfilneg} - \hfil}% - \hfilneg}} - \page - \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} - -\setvalue{\??ip::\c!alternative:\v!horizontal}{\getvalue{\??ip::\c!alternative:\v!a}} -\setvalue{\??ip::\c!alternative:\v!vertical }{\getvalue{\??ip::\c!alternative:\v!c}} - -\setvalue{\??ip::\c!alternative:\v!b}% - {\global\combinedpagescounter\@@ipstart - \doloop - {\startbaselinecorrection - \scratchdimen\@@ipdistance - \!!widtha\dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax - \hbox to \hsize - {\dorecurse\@@ipnx - {\global\advance\combinedpagescounter\plusone - \ifnum\combinedpagescounter>\@@ipn \else - \normalexpanded{\noexpand\externalfigure[\@@ipname] - [\c!page=\number\combinedpagescounter, - \c!width=\the\!!widtha,% todo \freezedimenmacro - \c!background=\@@ipbackground, - \c!backgroundcolor=\@@ipbackgroundcolor, - \c!frame=\@@ipframe]}% - \hfill - \fi}\hfillneg}% - \stopbaselinecorrection - \ifnum\combinedpagescounter<\@@ipn\relax - \@@ipinbetween - \else - \exitloop - \fi}} - -%D \macros -%D {setuppagecomment,startpagecomment} -%D -%D This command is not yet documented. Usage: -%D -%D \starttyping -%D \setuppagecomment[state=start,location=right] -%D -%D \startpagecomment -%D \input knuth -%D \stoppagecomment -%D \stoptyping - -\unexpanded\def\setuppagecomment - {\dosingleempty\dosetuppagecomment} - -\def\dosetuppagecomment[#1]% - {\getparameters[\??pc][#1]% - \doifelse\@@pcstate\v!start - {\doifinsetelse\@@pclocation{\v!bottom,\v!top} - {\setuppapersize[\c!left=\hskip\@@pcoffset]% - \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcheight\relax}% - \edef\@@pcpaperwidth {\the\dimexpr\paperwidth+\@@pcoffset+\@@pcoffset\relax}% - \defineoverlay[\v!pagecomment][\placepagecommentTB]} - {\setuppapersize[\c!top=\vskip\@@pcoffset]% - \edef\@@pcpaperheight{\the\dimexpr\paperheight+\@@pcoffset+\@@pcoffset\relax}% - \edef\@@pcpaperwidth {\the\dimexpr\paperwidth+\@@pcoffset+\@@pcoffset+\@@pcdistance+\@@pcwidth\relax}% - \defineoverlay[\v!pagecomment][\placepagecommentLR]}% - \processaction - [\@@pclocation] - [ \v!bottom=>{\setuppapersize[\c!bottom =\vss,\c!top =\vskip\@@pcoffset]}, - \v!top=>{\setuppapersize[\c!top =\vss,\c!bottom =\vskip\@@pcoffset]}, - \v!left=>{\setuppapersize[\c!left =\hss,\c!right=\hskip\@@pcoffset]}, - \v!right=>{\setuppapersize[\c!right=\hss,\c!left =\hskip\@@pcoffset]}]% - \definepapersize - [\v!pagecomment] - [\c!height=\@@pcpaperheight, - \c!width=\@@pcpaperwidth]% - \let\@@pcprintpapersize\printpapersize - \setuppapersize[\papersize][\v!pagecomment]% - \setupbackgrounds[\v!paper][\c!background=\v!pagecomment]} - {\doif\@@pcstate\v!stop % else initialization invokes backgrounds - {% this should be tested first - % \normalexpanded{\noexpand\setuppapersize[\papersize][\@@pcprintpapersize]}% - \setupbackgrounds[\v!paper][\c!background=]}}} - -\def\@@pcprintpapersize{\printpapersize} - -\unexpanded\def\placepagecommentTB - {\vbox to \printpaperheight - {%\forgetall - \hsize\printpaperwidth - \vskip\@@pcoffset - \doifelse\@@pclocation\v!bottom{\vskip\dimexpr\paperheight+\@@pcdistance\relax}\vss - \hskip\@@pcoffset - \vbox to \@@pcheight - {%\forgetall - \hsize\paperwidth - \ifpagecomment - \getbuffer[\v!pagecomment]% - \global\pagecommentfalse - \fi}% - \hfill - \doifelse\@@pclocation\v!bottom\vss{\vskip\dimexpr\paperheight+\@@pcdistance\relax}% - \vskip\@@pcoffset}} - -\unexpanded\def\placepagecommentLR - {\hbox to \printpaperwidth - {\hskip\@@pcoffset - \doifelse\@@pclocation\v!right{\hskip\paperwidth\hskip\@@pcdistance}\hss - \vbox to \printpaperheight - {%\forgetall - \vskip\@@pcoffset - \hsize\@@pcwidth - \ifpagecomment - \getbuffer[\v!pagecomment]% - \global\pagecommentfalse - \fi - \vss}% - \doifelse\@@pclocation\v!right\hss{\hskip\paperwidth\hskip\@@pcdistance}% - \hskip\@@pcoffset}} - -\newif\ifpagecomment - -\setvalue{\e!start\v!pagecomment}% - {\global\pagecommenttrue - \dostartbuffer[\v!pagecomment][\e!start\v!pagecomment][\e!stop\v!pagecomment]} - -\setuppagecomment - [\c!state=, % \v!stop would invoke background calculation - \c!location=\v!bottom, - \c!offset=.5cm, - \c!distance=.5cm, - \c!height=5cm, - \c!width=10cm] - -% This macro cuts a page into n parts that can be pasted -% together. - -\def\slicepages - {\dotripleempty\doslicepages} - -\def\doslicepages[#1][#2][#3]% - {\ifthirdargument - \dodoslicepages[#1][#2][#3]% - \else - \dodoslicepages[#1][#2][#2]% - \fi} - -\newcounter\slicedpagenumber - -\def\dodoslicepages[#1][#2][#3]% - {\bgroup - \dontcomplain - \globallet\slicedpagenumber\!!zerocount - \getfiguredimensions[#1] - \getparameters - [\??ip] - [\c!n=1, - \c!offset=\!!zeropoint, - \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint, - \c!width=\figurewidth,\c!height=\figureheight,#2] - \ifnum\@@ipn>\zerocount - \definepapersize - [\s!dummy][\c!height=\@@ipheight,\c!width=\@@ipwidth] - \setuppapersize - [\s!dummy][\s!dummy] - \setuplayout - [\c!backspace=\!!zeropoint,\c!topspace=\!!zeropoint, - \c!height=\v!middle,\c!width=\v!middle, - \c!textdistance=\!!zeropoint, - \c!header=\!!zeropoint,\c!footer=\!!zeropoint] - \fi - \dorecurse\noffigurepages - {\global\let\slicedpagenumber\recurselevel - \ifnum\@@ipn>\plusone - \dorecurse\@@ipn - {\let\xslice\recurselevel - \dorecurse\@@ipn - {\let\yslice\recurselevel - \clip - [\c!nx=\@@ipn,\c!ny=\@@ipn,\c!x=\xslice,\c!y=\yslice] - {\scale - [\c!scale=\@@ipn000] - {\externalfigure[#1][\c!page=\slicedpagenumber]}} - \page}} - \else - \ifodd\slicedpagenumber\relax - \getparameters[\??ip][#2] - \else - \getparameters[\??ip][#3] - \fi - \hskip\@@ipoffset - \clip - [\c!hoffset=\@@iphoffset,\c!voffset=\@@ipvoffset, - \c!height=\@@ipheight,\c!width=\@@ipwidth] - {\externalfigure[#1][\c!page=\slicedpagenumber]} - \page - \fi} - \egroup} -% \starttext \slicepages[slice1.pdf][n=3] \stoptext \protect \endinput diff --git a/tex/context/base/page-ini.mkiv b/tex/context/base/page-ini.mkiv index aa646cd8d..1315ad869 100644 --- a/tex/context/base/page-ini.mkiv +++ b/tex/context/base/page-ini.mkiv @@ -804,10 +804,6 @@ \let\registerpageposition\gobbleoneargument \fi -\def\reportarrangedpage#1% - {\showmessage\m!systems - {23}{\the\realpageno.\the\pageno\ifnum\subpageno>0 .\the\subpageno\fi,\number#1}} - \newif\ifsavepagebody \newbox\savedpagebody % beware, \??ly is used before defined, i.e. bad module design diff --git a/tex/context/base/page-lay.mkiv b/tex/context/base/page-lay.mkiv index 9b3079d2a..7222d072f 100644 --- a/tex/context/base/page-lay.mkiv +++ b/tex/context/base/page-lay.mkiv @@ -42,6 +42,7 @@ \newdimen\paperheight \paperheight = 297mm \newdimen\paperwidth \paperwidth = 210mm +\newdimen\paperoffset \paperoffset = 0mm \newdimen\printpaperheight \printpaperheight = \paperheight \newdimen\printpaperwidth \printpaperwidth = \paperwidth diff --git a/tex/context/base/page-sel.mkiv b/tex/context/base/page-sel.mkiv new file mode 100644 index 000000000..9192d1430 --- /dev/null +++ b/tex/context/base/page-sel.mkiv @@ -0,0 +1,347 @@ +%D \module +%D [ file=page-sel, % moved from page-imp +%D version=1998.01.15, +%D title=\CONTEXT\ Page Macros, +%D subtitle=Page Selection, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This will become runtime loaded code. + +\writestatus{loading}{ConTeXt Page Macros / Page Selection} + +\unprotect + +%D One can (mis)use this mechanism, in close cooperation +%D with \PDFTEX\ to arrange pages of already produced files. +%D +%D \starttyping +%D \insertpages[file.pdf][1,3][n=30,width=18cm] +%D \stoptyping +%D +%D The pages are inserted in the text area, and even pages +%D are repositioned according to the width. In this example +%D empty pages are added after page 1 and 3. +%D +%D Selecting pages can be accomplished by: +%D +%D \starttyping +%D \filterpages[file.pdf][1,3,5][n=30,width=18cm] +%D \stoptyping +%D +%D One may pass \type {odd} or \type {even} instead of a +%D comma separated list. A third alternative is: +%D +%D \starttyping +%D \copypages[file.pdf][n=30,scale=950] +%D \stoptyping +%D +%D This macros inserts the page, according to the settings +%D provided. + +\def\insertpages + {\dotripleempty\doinsertpages} + +\def\doinsertpages[#1][#2][#3]% + {\doifassignmentelse{#2} + {\dodoinsertpages[#1][][#2]} + {\dodoinsertpages[#1][#2][#3]}} + +\def\dodoinsertpages[#1][#2][#3]% + {\bgroup + \dontcomplain + \getfiguredimensions[#1]% + \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\!!zeropoint,#3]% + \doifinset0{#2}{\emptyhbox\page}% + \dorecurse\@@ipn + {\dofilterpage{#1}\recurselevel + \doifinset\recurselevel{#2}{\emptyhbox\page}}% + \egroup} + +\def\filterpages + {\dotripleempty\dofilterpages} + +\def\dofilterpages[#1][#2][#3]% % \noffigurepages not yet supported + {\bgroup + \dontcomplain + \getfiguredimensions[#1]% + \getparameters[\??ip][\c!n=\noffigurepages,\c!width=\!!zeropoint,#3]% + \doifelse{#2}\v!even + {\dorecurse\@@ipn + {\ifodd\recurselevel\relax\else\dofilterpage{#1}\recurselevel\fi}} + {\doifelse{#2}\v!odd + {\dorecurse\@@ipn + {\ifodd\recurselevel\relax\dofilterpage{#1}\recurselevel\fi}} + {\def\dodocommand##1{\ifnum##1>\@@ipn\else\dofilterpage{#1}{##1}\fi}% + \def\docommand ##1{\dowithrange{##1}\dodocommand}% + \processcommalist[#2]\docommand}}% + \egroup} + +\def\dofilterpage#1#2% + {\hbox to \textwidth + {\ifdoublesided\ifdim\@@ipwidth>\zeropoint\relax\ifodd\realpageno\else + \hfill + \def\dowithfigure{\hskip-\@@ipwidth}% + \fi\fi\fi + \setbox0\hbox + {\externalfigure[#1][\c!page=#2,\c!height=\textheight]}% + \wd0\zeropoint + \box0} + \page} + +\def\copypages + {\dodoubleempty\docopypages} + +\def\docopypages[#1][#2]% + {\bgroup + \getfiguredimensions[#1]% + \getparameters[\??ip] + [\c!n=\noffigurepages, + \c!marking=\v!off, + \c!scale=\!!thousand, + \c!offset=\!!zeropoint, + #2]% + \dorecurse\@@ipn + {\vbox to \textheight + {\hsize\textwidth + \scratchdimen\@@ipoffset + \centeredbox + {\doifelse\@@ipmarking\v!on\cuthbox\hbox + {\ifdim\scratchdimen>\zeropoint\relax + \advance\vsize -2\scratchdimen + \advance\hsize -2\scratchdimen + \externalfigure[#1][\c!page=\recurselevel,#2,\c!scale=,\c!factor=\v!max,\c!offset=\v!overlay]% + \else + \externalfigure[#1][\c!page=\recurselevel,#2,\c!offset=\v!overlay]% + \fi}}} + \page} + \egroup} + +%D \macros +%D {combinepages} +%D +%D Yet another way of postprocessing is handles by \type +%D {\combinepages}. This macro builds a matrix of pages from a +%D file, for example: +%D +%D \starttyping +%D \setuppapersize +%D [A4][A4] % or [A4,landscape][A4,landscape] +%D +%D \setuplayout +%D [header=0pt,footer=1cm, +%D backspace=1cm,topspace=1cm, +%D width=middle,height=middle] +%D +%D \setupfootertexts +%D [presentation---\currentdate\space---\space\pagenumber] +%D +%D \starttext +%D \combinepages[slides][nx=2,ny=3,frame=on] +%D \stoptext +%D \stoptyping +%D +%D One can influence the way the pages are combined. (This +%D will be explained some time.) + +\def\combinepages + {\dodoubleempty\docombinepages} + +\def\docombinepages[#1][#2]% a=perpag b=free + {\bgroup + \dontcomplain + \getfiguredimensions[#1]% + \getparameters + [\??ip] + [\c!alternative=\v!a, + \c!n=\noffigurepages,\c!nx=2,\c!ny=2,\c!start=1,\c!stop=\!!maxcard, + \c!distance=\bodyfontsize, + \c!bottom=\vfill,\c!top=\vss, + \c!left=\hss,\c!right=\hss, + \c!before=\page,\c!after=\page,\c!inbetween=\blank, + \c!frame=,\c!background=,\c!backgroundcolor=, + #2]% + \def\@@ipname{#1}% + \@@ipbefore + \expandcheckedcsname{\??ip::\c!alternative:}\@@ipalternative\v!b + \@@ipafter + \egroup} + +\setvalue{\??ip::\c!alternative:\v!a}% + {\global\combinedpagescounter\@@ipstart + \doloop + {\vbox to \textheight + {\hsize\textwidth % ? ? + \scratchdimen\@@ipdistance + \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax + \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax + \dorecurse\@@ipny + {\hbox to \hsize + {\dorecurse\@@ipnx + {\vbox to \!!heighta + {\hsize\!!widtha + \vsize\!!heighta + \@@iptop + \hbox to \hsize + {\@@ipleft + \ifnum\combinedpagescounter>\@@ipstop\relax + \globallet\@@ipn\!!zerocount + \else\ifnum\combinedpagescounter>\@@ipn \else + \externalfigure[\@@ipname] + [\c!object=\v!no, + \c!page=\number\combinedpagescounter, + \c!factor=\v!max, + \c!background=\@@ipbackground, + \c!backgroundcolor=\@@ipbackgroundcolor, + \c!frame=\@@ipframe]% + \fi\fi + \@@ipright} + \@@ipbottom}% + \global\advance\combinedpagescounter\plusone + \hfil}% + \hfilneg} + \vfil}% + \vfilneg}% + \page + \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} + +\setvalue{\??ip::\c!alternative:\v!c}% + {\global\combinedpagescounter\@@ipstart + \doloop + {\vbox to \textheight + {\hsize\textwidth % ? ? + \scratchdimen\@@ipdistance + \!!widtha \dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax + \!!heighta\dimexpr(\vsize-\@@ipny\scratchdimen+\scratchdimen)/\@@ipny\relax + \hbox to \hsize + {\dorecurse\@@ipnx + {\@@ipleft + \vbox to \textheight + {\hsize\!!widtha + {\dorecurse\@@ipny + {\@@iptop + \hbox to \hsize + {\vbox to \!!heighta + {\hsize\!!widtha + \vsize\!!heighta + \ifnum\combinedpagescounter>\@@ipstop\relax + \globallet\@@ipn\!!zerocount + \else\ifnum\combinedpagescounter>\@@ipn \else + \externalfigure[\@@ipname] + [\c!object=\v!no, + \c!page=\number\combinedpagescounter, + \c!factor=\v!max, + \c!background=\@@ipbackground, + \c!backgroundcolor=\@@ipbackgroundcolor, + \c!frame=\@@ipframe]% + \fi\fi}} + \global\advance\combinedpagescounter\plusone + \@@ipbottom}% + \vfil}% + \vfilneg} + \hfil}% + \hfilneg}} + \page + \ifnum\combinedpagescounter>\@@ipn \exitloop\fi}} + +\setvalue{\??ip::\c!alternative:\v!horizontal}{\getvalue{\??ip::\c!alternative:\v!a}} +\setvalue{\??ip::\c!alternative:\v!vertical }{\getvalue{\??ip::\c!alternative:\v!c}} + +\setvalue{\??ip::\c!alternative:\v!b}% + {\global\combinedpagescounter\@@ipstart + \doloop + {\startbaselinecorrection + \scratchdimen\@@ipdistance + \!!widtha\dimexpr(\hsize-\@@ipnx\scratchdimen+\scratchdimen)/\@@ipnx\relax + \hbox to \hsize + {\dorecurse\@@ipnx + {\global\advance\combinedpagescounter\plusone + \ifnum\combinedpagescounter>\@@ipn \else + \normalexpanded{\noexpand\externalfigure[\@@ipname] + [\c!page=\number\combinedpagescounter, + \c!width=\the\!!widtha,% todo \freezedimenmacro + \c!background=\@@ipbackground, + \c!backgroundcolor=\@@ipbackgroundcolor, + \c!frame=\@@ipframe]}% + \hfill + \fi}\hfillneg}% + \stopbaselinecorrection + \ifnum\combinedpagescounter<\@@ipn\relax + \@@ipinbetween + \else + \exitloop + \fi}} + +% This macro cuts a page into n parts that can be pasted +% together. + +\def\slicepages + {\dotripleempty\doslicepages} + +\def\doslicepages[#1][#2][#3]% + {\ifthirdargument + \dodoslicepages[#1][#2][#3]% + \else + \dodoslicepages[#1][#2][#2]% + \fi} + +\newcounter\slicedpagenumber + +\def\dodoslicepages[#1][#2][#3]% + {\bgroup + \dontcomplain + \globallet\slicedpagenumber\!!zerocount + \getfiguredimensions[#1] + \getparameters + [\??ip] + [\c!n=1, + \c!offset=\!!zeropoint, + \c!hoffset=\!!zeropoint,\c!voffset=\!!zeropoint, + \c!width=\figurewidth,\c!height=\figureheight,#2] + \ifnum\@@ipn>\zerocount + \definepapersize + [\s!dummy][\c!height=\@@ipheight,\c!width=\@@ipwidth] + \setuppapersize + [\s!dummy][\s!dummy] + \setuplayout + [\c!backspace=\!!zeropoint,\c!topspace=\!!zeropoint, + \c!height=\v!middle,\c!width=\v!middle, + \c!textdistance=\!!zeropoint, + \c!header=\!!zeropoint,\c!footer=\!!zeropoint] + \fi + \dorecurse\noffigurepages + {\global\let\slicedpagenumber\recurselevel + \ifnum\@@ipn>\plusone + \dorecurse\@@ipn + {\let\xslice\recurselevel + \dorecurse\@@ipn + {\let\yslice\recurselevel + \clip + [\c!nx=\@@ipn,\c!ny=\@@ipn,\c!x=\xslice,\c!y=\yslice] + {\scale + [\c!scale=\@@ipn000] + {\externalfigure[#1][\c!page=\slicedpagenumber]}} + \page}} + \else + \ifodd\slicedpagenumber\relax + \getparameters[\??ip][#2] + \else + \getparameters[\??ip][#3] + \fi + \hskip\@@ipoffset + \clip + [\c!hoffset=\@@iphoffset,\c!voffset=\@@ipvoffset, + \c!height=\@@ipheight,\c!width=\@@ipwidth] + {\externalfigure[#1][\c!page=\slicedpagenumber]} + \page + \fi} + \egroup} + +% \starttext \slicepages[slice1.pdf][n=3] \stoptext + +\protect \endinput diff --git a/tex/context/base/supp-box.lua b/tex/context/base/supp-box.lua new file mode 100644 index 000000000..49d16ed2a --- /dev/null +++ b/tex/context/base/supp-box.lua @@ -0,0 +1,51 @@ +if not modules then modules = { } end modules ['supp-box'] = { + version = 1.001, + comment = "companion to supp-box.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files" +} + +-- this is preliminary code + +local nodecodes = nodes.nodecodes + +local disc_code = nodecodes.disc +local hlist_code = nodecodes.hlist +local vlist_code = nodecodes.vlist + +local new_penalty = nodes.pool.penalty +local free_node = node.free + +function hyphenatedlist(list) + while list do + local id = list.id + local next = list.next + local prev = list.prev + if id == disc_code then + local hyphen = list.pre + if hyphen then + local penalty = new_penalty(-500) + hyphen.next = penalty + penalty.prev = hyphen + prev.next = hyphen + next.prev = penalty + penalty.next = next + hyphen.prev = prev + list.pre = nil + free_node(list) + end + elseif id == vlist_code or id == hlist_code then + hyphenatedlist(list.list) + end + list = next + end +end + +commands.hyphenatedlist = hyphenatedlist + +function commands.showhyphenatedinlist(list) + commands.writestatus("show hyphens",nodes.listtoutf(list)) +end + +-- processisolatedwords diff --git a/tex/context/base/supp-box.mkii b/tex/context/base/supp-box.mkii index b09099221..8cdea8620 100644 --- a/tex/context/base/supp-box.mkii +++ b/tex/context/base/supp-box.mkii @@ -2855,8 +2855,6 @@ #4% \fi} -\endETEX - %D \macros %D {removedepth, obeydepth} %D diff --git a/tex/context/base/supp-box.mkiv b/tex/context/base/supp-box.mkiv index 2ccb29149..a66d7b97d 100644 --- a/tex/context/base/supp-box.mkiv +++ b/tex/context/base/supp-box.mkiv @@ -11,16 +11,16 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -%D This module implements some box manipulation macros. Some -%D are quite simple, some are more advanced and when understood -%D well, all can be of use. - -%D No longer generic, why bother. - \writestatus{loading}{ConTeXt Support Macros / Boxes} \unprotect +\registerctxluafile{supp-box}{1.001} + +%D This module implements some box manipulation macros. Some +%D are quite simple, some are more advanced and when understood +%D well, all can be of use. +%D %D \macros %D {strutdp,strutht,strutwd} %D @@ -33,19 +33,14 @@ \def\strutdp{\dp\strutbox} \def\strutht{\ht\strutbox} \def\strutwd{\wd\strutbox} - + %D \macros %D {resetbox, emptybox} %D %D Let's start with an easy one. The next macro hides the %D ugly \type {@} in \type {\voidb@x}. -\ifx\voidbox\undefined \newbox\voidbox \fi -\ifx\voidb@x\undefined \let\voidb@x\voidbox \fi - -\def\emptybox {\box \voidbox} -\def\unvoidbox {\unhbox\voidbox} -\def\resetbox#1{\setbox#1\box\voidbox} +\ifx\voidbox\undefined \newbox\voidbox \fi %D \macros %D {nextdepth} @@ -219,7 +214,7 @@ %D \NC tb \NC \ruledhbox{\smash [tb]{This is some great smashing, isn't it?}} \NC \NR %D \NC whd \NC \ruledhbox{\smash[whd]{This is some great smashing, isn't it?}} \NC \NR %D \stoptabulate - + %D \macros %D {phantom, hphantom, vphantom, mathstrut} %D @@ -263,7 +258,7 @@ %D We also define plain's \type {\mathstrut}. \unexpanded\def\mathstrut{\vphantom{(}} - + %D \macros %D {getboxheight} %D @@ -301,7 +296,7 @@ \def\getboxheight#1\of#2\box#3% {\def\next{#1\dimexpr\ht\registercount+\dp\registercount\relax}% \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. @@ -350,48 +345,6 @@ \newcount\noflines \newdimen\noflinesheight -% \def\getnoflines {\xdogetnoflines\plusone } % compensated -% \def\getroundednoflines{\xdogetnoflines\plustwo } % rounded -% \def\getrawnoflines {\xdogetnoflines\plusthree} % truncated -% -% \def\xdogetnoflines#1#2% -% {\noflinesheight#2\relax -% \ifzeropt\noflinesheight -% \noflines\zerocount -% \else\ifdim\noflinesheight>\zeropoint -% \ifcase#1\or -% \advance\noflinesheight-\roundingeps -% \divide\noflinesheight\openlineheight -% \noflines\noflinesheight -% \advance\noflines\plusone -% \or -% \advance\noflinesheight\roundingeps -% \divide\noflinesheight\openlineheight -% \noflines\noflinesheight -% \or -% \advance\noflinesheight\roundingeps -% \advance\noflinesheight.5\openlineheight -% \divide\noflinesheight\openlineheight -% \noflines\noflinesheight -% \fi -% \else -% \ifcase#1\or -% \advance\noflinesheight\roundingeps -% \divide\noflinesheight\openlineheight -% \noflines\noflinesheight -% \advance\noflines\minusone -% \or -% \advance\noflinesheight-\roundingeps -% \divide\noflinesheight\openlineheight -% \noflines\noflinesheight -% \or -% \advance\noflinesheight-\roundingeps -% \advance\noflinesheight-.5\openlineheight -% \divide\noflinesheight\openlineheight -% \noflines\noflinesheight -% \fi -% \fi\fi} - \def\getnoflines#1% {\noflinesheight#1\relax \ifzeropt\noflinesheight @@ -475,23 +428,24 @@ %D \determinenoflines{\definedfont[Sans at 40pt]test\\test} %D \stoptyping -\def\determinenoflines % can be mkiv'd +\def\dodeterminenoflines % can be mkiv'd + {\beginofshapebox + \unvbox\nextbox + \endofshapebox + % \global\count1\zerocount + % \reshapebox{\global\advance\count1\plusone}% + % \egroup\noflines\count1 }% + \scratchcounter\zerocount + \reshapebox{\global\advance\scratchcounter\plusone}% + \expandafter\egroup\expandafter\noflines\the\scratchcounter\relax} + +\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 }% - \scratchcounter\zerocount - \reshapebox{\global\advance\scratchcounter\plusone}% - \expandafter\egroup\expandafter\noflines\the\scratchcounter\relax - }\vbox} - + \dowithnextbox{\dodeterminenoflines}\vbox} + %D \macros %D {doiftextelse, doiftext} %D @@ -517,7 +471,7 @@ \def\doiftext#1#2% {\doiftextelse{#1}{#2}\donothing} - + %D \macros %D {dowithnextbox,nextbox} %D @@ -833,8 +787,6 @@ \def\shapesignal{.12345678pt} % or 12345sp -% todo: in etex lastnode - \def\reshapebox#1% {\doreshapebox {#1}% @@ -853,7 +805,7 @@ \else \setbox\newshapebox\normalvbox {\unvcopy\oldshapebox - \resetbox\newshapebox + \setbox\newshapebox\emptybox \shapecounter\zerocount \doloop{\dodoreshapebox{#1}{#2}{#3}{#4}}}% \setbox\newshapebox\box\tmpshapebox @@ -861,59 +813,6 @@ \ifx\originalshapebox\undefined \let\originalshapebox\oldshapebox \fi -% %D The old traditional tex variant: -% -% \def\insertshapesignal -% {\normalhbox to \shapesignal{\strut\hss}% plus \strut -% \prevdepth\strutdp} % never \nointerlineskip -% -% \def\restoreshapebox % compensates for the signal -% {\global\setbox\tmpshapebox\vbox{\vskip-\lineheight\unvcopy\oldshapebox}} -% -% \def\shapeboxstrut % put this in front if needed ! -% {\vrule\!!width\zeropoint\!!height\ht\shapebox\!!depth\dp\shapebox} -% -% \def\dodoreshapebox#1#2#3#4% \shapebox, \shapepenalty, \shapekern, \shapeskip -% {\ifzeropt\lastskip % \ifdim\lastskip=\zeropoint\relax -% \ifzeropt\lastkern % \ifdim\lastkern=\zeropoint\relax -% \ifcase\lastpenalty % \ifnum\lastpenalty=\zerocount -% \setbox\shapebox\lastbox -% \ifvoid\shapebox -% \unskip\unpenalty\unkern -% \else -% \ifdim\wd\shapebox=\shapesignal\relax -% \exitloop -% \else -% \shapecounter\zerocount -% \global\setbox\tmpshapebox\normalvbox{#1\unvbox\tmpshapebox}% -% \fi -% \fi -% \else -% \shapepenalty\lastpenalty -% \global\setbox\tmpshapebox\normalvbox{#2\unvbox\tmpshapebox}% -% \unpenalty -% \fi -% \else -% \shapekern\lastkern -% \global\setbox\tmpshapebox\normalvbox{#3\unvbox\tmpshapebox}% -% \unkern -% \fi -% \else -% \shapeskip\lastskip -% \global\setbox\tmpshapebox\normalvbox{#4\unvbox\tmpshapebox}% -% \unskip -% \fi -% \ifnum\shapecounter>100 % can be less -% \global\reshapingfailedtrue -% \message{!!forced exit from shapebox!!}% -% \restoreshapebox -% \exitloop -% \else -% \advance\shapecounter \plusone -% \fi} -% -% But now that the lastnode bugfixes are wide spread we can use: -% % We will turn this into a \MKIV\ variant. \def\insertshapesignal @@ -1047,142 +946,47 @@ %D of \type {\normalhbox}, since it manages the height and depth of %D the line. -% \def\shapedhbox -% {\dowithnextbox -% {\nextboxht\zeropoint -% \nextboxdp\zeropoint -% \flushnextbox} -% \normalhbox} - \def\shapedhbox % lines with non strutted dimensions have {\expanded{\dowithnextbox % interlineskip so if we want the original {\nextboxht\the\ht\shapebox % spacing, we need to preserve the original \nextboxdp\the\dp\shapebox % height and depth which is definitely \noexpand\flushnextbox}} % needed if we apply struts to the 'new' \normalhbox} % box or do something that changed ist size - + %D \macros %D {hyphenatedword, %D hyphenatedpar, %D hyphenatedfile, %D dohyphenateword} %D -%D The next one is a tricky one. \PLAIN\ \TEX\ provides -%D \type{\showhyphens} for showing macros on the terminal. When -%D preparing a long list of words we decided to show the -%D hyphens, but had to find out that the \PLAIN\ alternative -%D can hardly be used and|/|or adapted to typesetting. The next -%D two macros do the job and a little more. First we define the -%D (slightly adapted) plain variant: - -\def\showhyphens#1% - {\begingroup - \setbox\scratchbox\vbox - {\parfillskip\zerocount - \hsize\maxdimen - %\tenrm - \pretolerance\minusone - \tolerance\minusone - \hbadness\zerocount - \showboxdepth\zerocount - \ #1}% - \endgroup} - -%D The simple command \type{\hyphenatedword} accepts one -%D argument and gives the hyphenated word. This macro calls for +%D We no longer use the pure \TEX\ variant. In due time we will +%D report some more advanced statistics. %D %D \starttyping -%D \dohyphenateword {n} {pre} {word} +%D \showhyphens{dohyphenatedword} %D \stoptyping -%D -%D The next examples tell more than lots of words: -%D -%D \startbuffer -%D \dohyphenateword{0} {} {dohyphenatedword} -%D \dohyphenateword{1} {...} {dohyphenatedword} -%D \dohyphenateword{2} {...} {dohyphenatedword} -%D \stopbuffer -%D -%D \typebuffer -%D -%D Here, \type{\hyphenatedword{dohyphenatedword}} is the -%D shorter alternative for the first line. -%D -%D \startvoorbeeld -%D \getbuffer -%D \stopvoorbeeld -%D -%D These macros are slow but effective and not that hard to -%D program at all. -\ifx\scantokens\undefined \let\scantokens\firstofoneargument \fi +\def\doshowhyphenatednextbox + {\ctxlua{commands.showhyphenatedinlist(tex.box[\number\nextbox].list)}} -\def\dohyphenateword#1#2#3% - {\bgroup - \setbox\scratchbox\normalhbox - {\dontcomplain - \nopenalties % \widowpenalty \clubpenalty \brokenpenalty \doublehyphendemerits \finalhyphendemerits \adjdemerits - \hyphenpenalty \zerocount - \exhyphenpenalty\zerocount - \setbox0\normalvbox - {\hsize\zeropoint - \hskip\zeropoint\relax % really needed - \ifnum#1<\zeropoint - \obeyspaces - \obeylines - \def\obeyedspace{\hskip\zeropoint\hbox to \onepoint{}\hskip\zeropoint}% - \let\obeyedline \obeyedspace - \ifcase-#1\or - \def\next{#3\relax}\scantokens\expandafter{\next}% relax catches lookahead problem - % also ok: \scantokens{#3}% % as in \hyphenatedword{spanish|?|} - \or - \readfile{#3}\donothing\donothing - \else - #3% - \fi - \else - #3% - \fi}% - \ifnum#1>\zerocount - \dorecurse{#1} - {\setbox2\normalhbox - {\splittopskip\openstrutheight - \vsplit0 to \baselineskip}}% - #2% - \fi - \doloop - {\setbox2\normalhbox - {\splittopskip\openstrutheight - \vsplit0 to \baselineskip}% - \setbox2\normalhbox - {\unhbox2 - \setbox2\lastbox - \normalvbox - {\unvbox2 - \setbox2\lastbox - \normalhbox{\unhbox2}}}% - \ifnum#1<\zeropoint\ifdim\wd2=\onepoint\space\else\box2\allowbreak\fi\else\box2\fi - \ifzeropt\ht0 \exitloop\fi}% % \ifdim\ht0=\zeropoint\exitloop\fi}% - \removeunwantedspaces}% - \ifnum#1>\zerocount - \ht\scratchbox\strutht - \dp\scratchbox\strutdp - \box\scratchbox - \else - \unhbox\scratchbox - \fi - \egroup} - -\def\hyphenatedword{\dohyphenateword\zerocount\empty} -\def\hyphenatedpar {\dohyphenateword\minusone \empty} -\def\hyphenatedfile{\dohyphenateword{-2}\empty} +\def\showhyphens{\dowithnextbox\doshowhyphenatednextbox\hbox} -%D You may want to give the following call a try: +%D The following macros are seldom used but handy for tracing. %D %D \starttyping -%D \hyphenatedpar{\readfile{zapf}{}{}}\endgraf +%D \hyphenatedword{dohyphenatedword} +%D \hyphenatedpar {\dorecurse{10}{dohyphenatedword }} +%D \hyphenatedfile{tufte} %D \stoptyping - + +\def\dohyphenatednextbox + {\ctxlua{commands.hyphenatedlist(tex.box[\number\nextbox])}% + \unhbox\nextbox} + +\def\hyphenatedword {\dowithnextbox\dohyphenatednextbox \hbox} +\def\hyphenatedpar {\dowithnextbox\dohyphenatednextbox \hbox} +\def\hyphenatedfile#1{\dowithnextbox\dohyphenatednextbox \hbox{\readfile{#1}\donothing\donothing}} + %D \macros %D {processtokens} %D @@ -1249,7 +1053,7 @@ \let\savedbefore\before \doprocesstokens#5\lastcharacter \endgroup} - + %D \macros %D {doboundtext} %D @@ -1273,7 +1077,7 @@ \advance\scratchdimen -\wd0 \ifdim\scratchdimen>\zeropoint\relax#1\fi}% -\def\doboundtext#1#2#3% +\def\doboundtext#1#2#3% still used? {\normalhbox {\setbox\scratchbox\normalhbox{#1}% \scratchdimen#2\relax @@ -1283,7 +1087,7 @@ \handletokens#1\with\dodoboundtext \fi \box\scratchbox}} - + %D \macros %D {limitatetext} %D @@ -1479,7 +1283,7 @@ #1% \fi \egroup} - + %D \macros %D {processisolatedwords, %D betweenisolatedwords,nothingbetweenisolatedwords} @@ -1644,7 +1448,7 @@ \def\setbetweenisolatedwords#1% {\gdef\localbetweenisolatedwords{#1}} - + %D \macros %D {sbox} %D @@ -1716,7 +1520,7 @@ \next \egroup}% \normalhbox} - + %D \macros %D {centeredbox, centerednextbox} %D @@ -1836,7 +1640,7 @@ \normalvbox to \vsize{\vss\normalhbox to \hsize{\hss\flushnextbox\hss}\vss}% \egroup}% \normalhbox} - + %D \macros %D {setrigidcolumnhsize,rigidcolumnbalance,rigidcolumnlines} %D @@ -1994,35 +1798,6 @@ \box\scratchbox \egroup} -% % to be done: start halfway a line combined with one line -% % extra to start with (skip) and one line less than counted. -% -% \def\stopvboxtohbox% -% {\egroup -% \setbox2=\normalvbox -% {\forgetall\unhcopy0\par\xdef\globalvhlines{\the\prevgraf}}% -% \setbox2=\normalvbox -% {\unvbox2 -% \setbox2=\lastbox -% \setbox2=\normalhbox{\unhbox2}% -% \xdef\globalvhwidth{\the\wd2}}% -% \decrement\globalvhlines -% \dimen0=\globalvhwidth -% \dimen0=\normalvboxtohboxfactor\dimen0 -% \advance\dimen0 by \globalvhlines\lineheight -% \dp0=\zeropoint -% \ht0=\dimen0 -% %\writestatus{guessed size} -% % {w:\the\wd0\space\space -% % b:\the\baselineskip\space -% % l:\globalvhlines\space -% % e:\globalvhwidth\space -% % h:\the\dimen0}% -% \box0 -% \egroup} - -% todo: \scratchbox - \def\convertvboxtohbox {\setvboxtohbox \makehboxofhboxes @@ -2037,32 +1812,12 @@ \setbox0\normalhbox{\box2\unhbox0}% \repeat} -% \def\makehboxofhboxes -% {\setbox0\emptyhbox -% \doloop % \doloop { .. \exitloop .. } -% {% \dorecurse{3}{\unskip\unpenalty}% get rid of ... (better do this in a shapeloop) -% \setbox2\lastbox -% \ifhbox2 -% \setbox0\normalhbox{\box2\unhbox0}% -% \else -% \exitloop -% \fi}} - -% \def\flushboxesonly % feed this into \makehboxofhboxes -% {\dowithnextbox -% {\beginofshapebox -% \unvbox\nextbox -% \endofshapebox -% \doreshapebox{\box\shapebox}{}{}{}% get rid of penalties etc -% \innerflushshapebox} -% \vbox} - \def\removehboxes {\setbox0\lastbox \ifhbox0 {\removehboxes}\unhbox0 \fi} - + %D \macros %D {unhhbox} %D @@ -2134,7 +1889,7 @@ %D %D Not that nice a definition, but effective. Note the stretch %D we've build in the line that connects the two paragraphs. - + %D \macros %D {doifcontent} %D @@ -2184,7 +1939,7 @@ %D %D Where the last call of course does not show up in this %D document, but definitely generates a confusing message. - + %D \macros %D {processboxes} %D @@ -2196,7 +1951,7 @@ \def\processboxes#1% {\bgroup \def\doprocessbox{#1}% #1 can be redefined halfway - \resetbox\processbox + \setbox\processbox\emptybox \afterassignment\dogetprocessbox\let\next=} \def\endprocessboxes @@ -2237,31 +1992,6 @@ %D %D \leavevmode\getbuffer -% \def\dooverlaybox% -% {\ifhmode\unskip\fi -% \ifdim\nextboxht>\ht\processbox -% \setbox\processbox\normalvbox to \nextboxht -% {\vss\box\processbox\vss}% -% \else -% \setbox\nextbox\normalvbox to \ht\processbox -% {\vss\flushnextbox\vss}% -% \fi -% \scratchdimen=\wd -% \ifdim\nextboxwd>\wd\processbox -% \nextbox -% \else -% \processbox -% \fi -% \setbox\processbox=\normalhbox to \scratchdimen -% {\normalhbox to \scratchdimen{\hss\box\processbox\hss}% -% \hskip-\scratchdimen -% \normalhbox to \scratchdimen{\hss\flushnextbox\hss}}} -% -% \def\startoverlay% -% {\bgroup -% \let\stopoverlay\egroup -% \processboxes\dooverlaybox} - \def\dooverlaybox {\ifhmode\unskip\fi \scratchdimen\dp @@ -2297,36 +2027,6 @@ \let\stopoverlay\relax -% %D \macros -% %D {starthspread} -% %D -% %D In a similar way we can build a horizontal box, spread -% %D over the available width. -% %D -% %D \startbuffer -% %D \starthspread -% %D {hans} -% %D {ton} -% %D {oeps} -% %D \stophspread -% %D -% %D \stopbuffer -% %D -% %D \typebuffer -% %D -% %D shows up as: -% %D -% %D \leavevmode\getbuffer -% -% \def\dohspread -% {\flushnextbox -% \def\dohspread{\hfil\flushnextbox}} -% -% \def\starthspread -% {\normalhbox to \hsize \bgroup -% \let\stophspread\egroup -% \processboxes\dohspread} - %D \macros %D {fakebox} %D @@ -2350,7 +2050,7 @@ \def\fakebox {\bgroup \afterassignment\dofakebox\scratchcounter} - + %D \macros %D {lbox,rbox,cbox,tbox,bbox} %D @@ -2464,7 +2164,7 @@ \@EA\afterassignment\@EA\docommand\@EA\scratchdimen \fi}% \docommand} - + %D Some new, still undocumented features: % limitatetext -> beter {text} als laatste !! @@ -2502,7 +2202,7 @@ \fi} \egroup} \normalvbox} - + %D Some more undocumented macros (used in m-chart). \newif\iftraceboxplacement % \traceboxplacementtrue @@ -2536,12 +2236,6 @@ \newdimen\boxhdisplacement \newdimen\boxvdisplacement -%\def\rightbox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=.5\ht0\advance\dimen0 -.5\dp0 -% \boxcursor\hskip\boxoffset\lower\dimen0\box0}} - \def\rightbox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2550,12 +2244,6 @@ \global\advance\boxvdisplacement-.5\dp0 \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} -%\def\leftbox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=.5\ht0\advance\dimen0 -.5\dp0 -% \boxcursor\hskip-\wd0\hskip-\boxoffset\lower\dimen0\box0}} - \def\leftbox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2565,12 +2253,6 @@ \global\advance\boxvdisplacement-.5\dp0 \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} -%\def\topbox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=\boxoffset\advance\dimen0 \dp0 -% \boxcursor\hskip-.5\wd0\raise\dimen0\box0}} - \def\topbox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2579,12 +2261,6 @@ \global\advance\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} -%\def\bottombox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=\boxoffset\advance\dimen0 \ht0 -% \boxcursor\hskip-.5\wd0\lower\dimen0\box0}} - \def\bottombox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2593,13 +2269,6 @@ \global\advance\boxvdisplacement\boxoffset \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} -%\def\lefttopbox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=\boxoffset\advance\dimen0 \dp0 -% \advance\boxoffset\wd0 -% \boxcursor\hskip-\boxoffset\raise\dimen0\box0}} - \def\lefttopbox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2609,12 +2278,6 @@ \global\advance\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} -%\def\righttopbox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=\boxoffset\advance\dimen0 \dp0 -% \boxcursor\hskip\boxoffset\raise\dimen0\box0}} - \def\righttopbox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2623,13 +2286,6 @@ \global\advance\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} -%\def\leftbottombox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=\boxoffset\advance\dimen0 \ht0 -% \advance\boxoffset\wd0 -% \boxcursor\hskip-\boxoffset\lower\dimen0\box0}} - \def\leftbottombox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2639,12 +2295,6 @@ \global\advance\boxvdisplacement\boxoffset \boxcursor\hskip\boxhdisplacement\lower\boxvdisplacement\box0}} -%\def\rightbottombox#1% -% {\normalhbox -% {\setbox0=\placedbox{#1}% -% \dimen0=\boxoffset\advance\dimen0 \ht0 -% \boxcursor\hskip\boxoffset\lower\dimen0\box0}} - \def\rightbottombox#1% {\normalhbox {\setbox0\placedbox{#1}% @@ -2683,7 +2333,7 @@ \global\boxhdisplacement\boxoffset \global\boxvdisplacement-\boxoffset \boxcursor\hskip\boxhdisplacement\raise-\boxvdisplacement\box0}} - + %D \macros %D {obox} %D @@ -2695,7 +2345,7 @@ {\advance\hsize-#1\advance\hsize-#2\advance\vsize-#3\advance\vsize-#4\relax} {\forgetall\vbox to \vsize{\vskip#3\hbox to \hsize{\hskip#1\box\nextbox\hss}\vss}\egroup} \vbox} - + %D \macros %D {toplinebox} %D @@ -2713,7 +2363,7 @@ \flushnextbox \fi}% \tbox} - + %D \macros %D {initializeboxstack,savebox,foundbox} %D @@ -2734,60 +2384,6 @@ %D \normalhbox{y:\foundbox{two}{a}} \par %D \stoptyping -% we keep it around as a demonstration of good old tex code: -% -% \def\@@stackbox{boxstack:b:} -% \def\@@stackmax{boxstack:m:} -% \def\@@stacktag{boxstack:t:} -% \def\@@stacklst{boxstack:l:} -% -% \def\initializeboxstack#1% -% {\ifundefined{\@@stackbox#1}% -% \@EA\newbox\csname\@@stackbox#1\endcsname -% \else -% \global\setbox\csname\@@stackbox#1\endcsname\emptyvbox -% \def\docommand##1{\global\letbeundefined{\@@stacktag#1:##1}}% -% \processcommacommand[\getvalue{\@@stacklst#1}]\docommand -% \fi -% \letgvalueempty{\@@stacklst#1}% -% \letgvalue{\@@stackmax#1}\!!zeropoint} -% -% \def\savebox#1#2% stack name -% {\dowithnextbox -% {\doifdefined{\@@stackbox#1} -% {\@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 -% {\forgetall -% \setbox\scratchbox\normalvbox{\flushnextbox} -% \ht\scratchbox\onepoint -% \dp\scratchbox\zeropoint -% \unvbox\csname\@@stackbox#1\endcsname -% \offinterlineskip -% \allowbreak -% \box\scratchbox}}}% -% \normalvbox} -% -% \def\foundbox#1#2% -% {\normalvbox -% {\doifdefined{\@@stackbox#1} -% {\doifdefined{\@@stacktag#1:#2} -% {\setbox\scratchbox\normalvbox -% {\splittopskip\zeropoint -% \setbox0\copy\csname\@@stackbox#1\endcsname -% \dimen0=\getvalue{\@@stacktag#1:#2}\points -% \advance\dimen0 -\onepoint -% \setbox2\vsplit0 to \dimen0 -% \ifdim\ht0>\onepoint -% \setbox0\vsplit0 to \onepoint -% \fi -% \unvbox0\setbox0\lastbox\unvbox0}% -% \unvbox\scratchbox}}}} -% -% \def\doifboxelse#1#2% -% {\doifdefinedelse{\@@stacktag#1:#2}} - \def\@@stackbox{@box@} \def\@@stacklst{@xob@} @@ -2827,8 +2423,6 @@ #4% \fi} -\endETEX - %D \macros %D {removedepth, obeydepth} %D @@ -2896,71 +2490,6 @@ \def\raisebox{\doraiselowerbox\raise} \def\lowerbox{\doraiselowerbox\lower} -% maybe some day we need this -% -% \def\appendvbox#1% % uses \box8 -% {\bgroup -% \ifdim\prevdepth<\zeropoint -% \ifdim\pagetotal=\zeropoint -% \setbox8=\normalvtop{\unvcopy#1}% -% \hrule\c!!height\zeropoint -% \kern-\ht8 -% \box#1\relax -% \else -% \box#1\relax -% \fi -% \else -% \dimen0=\prevdepth -% \hrule\c!!height\zeropoint -% \setbox8=\normalvtop{\unvcopy#1}% -% \dimen2=\baselineskip -% \advance\dimen2 by -\dimen0 -% \advance\dimen2 by -\ht8 -% \kern\dimen2 -% \box#1\relax -% \fi -% \egroup} - -% %D Also new: -% %D -% %D \startbuffer -% %D \normbox[1cm][bba]{m} % b(efore) a(fter) v(box) s(trut) f(rame) -% %D \normbox[1cm][bba]{m} -% %D \normbox[1cm][bba]{m} -% %D \stopbuffer -% %D -% %D \typebuffer -% %D \getbuffer -% -% \def\dodonormbox#1#2#3#4#5#6#7% -% {\doifnumberelse{#1} -% {\dimen0=#1}{\setbox0=#3{#1}\dimen0=#50}% -% \doifinstringelse{f}{#2} -% {\let\next#4}{\let\next#3}% -% \next to \dimen0 -% {\counttoken b\in#2\to\!!counta\dorecurse{\!!counta}{#6}#6% -% #7\nextbox -% \counttoken a\in#2\to\!!counta\dorecurse{\!!counta}{#6}#6}} -% -% \def\donormbox[#1][#2]% -% {\bgroup -% \doifinstringelse{v}{#2} -% {\let\next\normalvbox} -% {\let\next\normalhbox}% -% \dowithnextbox -% {\ifvbox\nextbox -% \let\\=\par -% \dodonormbox{#1}{#2}\normalvbox\ruledvbox\ht\vfil\unvbox -% \else -% \let\\=\space -% \dodonormbox{#1}{#2}\normalhbox\ruledhbox\wd\hfil\unhbox -% \fi -% \egroup}% -% \next} -% -% \def\normbox -% {\dodoubleempty\donormbox} - % vcenter in text, we kunnen vcenter overloaden \def\halfwaybox @@ -3020,12 +2549,6 @@ %D %D A prelude to an extended \TEX: -% \def\setboxllx #1#2{\bgroup\scratchdimen#2\expanded{\egroup\noexpand\setevalue{b@@x\number#1}{\the\scratchdimen}}} -% \def\setboxlly #1#2{\bgroup\scratchdimen#2\expanded{\egroup\noexpand\setevalue{b@@y\number#1}{\the\scratchdimen}}} -% -% \def\gsetboxllx#1#2{\bgroup\scratchdimen#2\setxvalue{b@@x\number#1}{\the\scratchdimen}\egroup} -% \def\gsetboxlly#1#2{\bgroup\scratchdimen#2\setxvalue{b@@y\number#1}{\the\scratchdimen}\egroup} - \def\setboxllx#1#2{\setevalue{b@@x\number#1}{\the\dimexpr#2\relax}} \def\setboxlly#1#2{\setevalue{b@@y\number#1}{\the\dimexpr#2\relax}} diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index 13a546b5f..4fcd417a7 100644 --- a/tex/generic/context/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 12/09/10 12:11:44 +-- merge date : 12/10/10 15:15:55 do -- begin closure to overcome local limits and interference -- cgit v1.2.3