From 74eb35dc817c64a5d8b6fea1b8acdf58e611a5e3 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Sat, 18 Feb 2012 10:50:00 +0100 Subject: beta 2012.02.18 10:50 --- tex/context/base/anch-bck.mkvi | 21 +- tex/context/base/anch-pgr.lua | 125 ++++--- tex/context/base/anch-pos.lua | 2 + tex/context/base/anch-pos.mkiv | 372 ++++----------------- tex/context/base/cont-new.mkii | 2 +- tex/context/base/cont-new.mkiv | 2 +- tex/context/base/context-version.pdf | Bin 4070 -> 4075 bytes tex/context/base/context-version.png | Bin 105731 -> 105299 bytes tex/context/base/context.mkii | 2 +- tex/context/base/context.mkiv | 2 +- tex/context/base/font-otn.lua | 8 +- tex/context/base/mlib-pps.mkiv | 2 +- tex/context/base/page-lin.mkiv | 6 +- tex/context/base/status-files.pdf | Bin 24264 -> 24275 bytes tex/context/base/status-lua.pdf | Bin 172311 -> 172321 bytes tex/context/base/tabl-tsp.mkiv | 2 +- tex/context/base/typo-mar.lua | 6 + tex/generic/context/luatex/luatex-fonts-merged.lua | 10 +- 18 files changed, 185 insertions(+), 377 deletions(-) (limited to 'tex') diff --git a/tex/context/base/anch-bck.mkvi b/tex/context/base/anch-bck.mkvi index cc796edef..677d5e2ea 100644 --- a/tex/context/base/anch-bck.mkvi +++ b/tex/context/base/anch-bck.mkvi @@ -67,10 +67,10 @@ \newcount\MPparcounter -\def\MPself {\MPvar{self}} -\def\MPbself {b:\MPvar{self}} -\def\MPeself {e:\MPvar{self}} -\def\MPparanchor {p:\number\MPparcounter} +\def\MPself {\MPvar{self}} +\def\MPbself {b:\MPvar{self}} +\def\MPeself {e:\MPvar{self}} +\def\MPparanchor{p:\number\MPparcounter} % \carryoverpar is needed for left/right floats @@ -512,6 +512,10 @@ endfor ; \stopuseMPgraphic +\setuptextbackground + [\c!mp=mpos:par:region, + \c!method=mpos:par:region] + %D \starttyping %D \setupbackground %D [test] @@ -591,15 +595,6 @@ \protect \endinput -% todo 1: shift down option - -% \startuseMPgraphic{mpos:par:columnset} -% \iftracepositions show_multi_pars \else draw_multi_pars \fi ; -% path p ; p := boundingbox currentpicture ; -% currentpicture := currentpicture shifted (0,-StrutDepth/2) ; -% setbounds currentpicture to p ; -% \stopuseMPgraphic - \definetextbackground[underline] [location=text,alternative=1,background=,frame=off] \definetextbackground[overstrike] [location=text,alternative=2,background=,frame=off] \definetextbackground[exlines] [location=text,alternative=3,background=,frame=off] diff --git a/tex/context/base/anch-pgr.lua b/tex/context/base/anch-pgr.lua index 6b7ce13be..7ab341b63 100644 --- a/tex/context/base/anch-pgr.lua +++ b/tex/context/base/anch-pgr.lua @@ -6,6 +6,8 @@ if not modules then modules = { } end modules ['anch-pgr'] = { license = "see context related readme files" } +-- todo: we need to clean up lists (of previous pages) + local format = string.format local concat, sort = table.concat, table.sort local splitter = lpeg.splitat(":") @@ -15,6 +17,10 @@ local jobpositions = job.positions local report_graphics = logs.reporter("graphics") +local function point(n) + return format("%.5fpt",n/65536) +end + local function pair(x,y) return format("(%.5fpt,%.5fpt)",x/65536,y/65536) end @@ -36,10 +42,33 @@ local function regionarea(r) } end -local function add(t,x,y) - local last = t[#t] - if not last or last[1] ~= x or last[2] ~= y then - t[#t+1] = { x, y } +-- we can use a 'local t, n' and reuse the table + +local function add(t,x,y,last) + local n = #t + if n == 0 then + t[n+1] = { x, y } + elseif n == 1 then + local tn = t[1] + if tn[1] ~= x or tn[2] ~= y then + t[n+1] = { x, y } + end + else + local tm = t[n-1] + local tn = t[n] + local lx = tn[1] + local ly = tn[2] + if lx == tm[1] and lx == x then + if ly ~= y then + tn[2] = y + end + elseif ly == tm[2] and ly == y then + if lx ~= x then + tn[1] = x + end + elseif not last then + t[n+1] = { x, y } + end end end @@ -208,6 +237,7 @@ local function singlepart(b,e,r,left,right) add(area,li[1],li[2]-ry) end add(area,bx,bd-ry) + add(area,bx,bh-ry,true) -- finish last straight line (but no add as we cycle) for i=1,#area do local a = area[i] area[i] = pair(a[1],a[2]) @@ -244,6 +274,7 @@ local function firstpart(b,r,left,right) add(area,li[1],li[2]-ry) end add(area,bx,bd-ry) + add(area,bx,bh-ry,true) -- finish last straight line (but no add as we cycle) for i=1,#area do local a = area[i] area[i] = pair(a[1],a[2]) @@ -380,11 +411,13 @@ local function calculate(tag) -- if bindex == eindex then return { - [b.p] = { singlepart(b,e,collected[br],left,right) } + list = { [b.p] = { singlepart(b,e,collected[br],left,right) } }, + bpos = b, + epos = e, } else - local pars = { - [b.p] = { firstpart(b,collected[br],left,right) } + local list = { + [b.p] = { firstpart(b,collected[br],left,right) }, } for i=bindex+1,eindex-1 do br = format("%s:%s",btag,i) @@ -393,51 +426,55 @@ local function calculate(tag) report_graphics("invalid middle for '%s'",br) else local p = r.p - local pp = pars[p] + local pp = list[p] if pp then pp[#pp+1] = middlepart(r,left,right) else - pars[p] = { middlepart(r,left,right) } + list[p] = { middlepart(r,left,right) } end end end local p = e.p - local pp = pars[p] + local pp = list[p] if pp then pp[#pp+1] = lastpart(e,collected[er],left,right) else - pars[p] = { lastpart(e,collected[er],left,right) } - end - return pars - end -end - -local pending = { } -- needs gc - -local function register(data,n,anchor) - local pa = pending[anchor] - if not pa then - pa = { } - pending[anchor] = pa - end - for page, pagedata in next, data do - local pap = pa[page] - if pap then - pap[#pap+1] = n - else - pa[page] = { n } + list[p] = { lastpart(e,collected[er],left,right) } end + return { + list = list, + bpos = b, + epos = e, + } end end -function graphics.backgrounds.registered(anchor,page) - local pa = pending[anchor] - if pa then - concat(pa,",") - else - return "" - end -end +-- local pending = { } -- needs gc +-- +-- local function register(data,n,anchor) +-- local pa = pending[anchor] +-- if not pa then +-- pa = { } +-- pending[anchor] = pa +-- end +-- for page, pagedata in next, data do +-- local pap = pa[page] +-- if pap then +-- pap[#pap+1] = n +-- else +-- pa[page] = { n } +-- end +-- end +-- end +-- +-- function graphics.backgrounds.registered(anchor,page) +-- local pa = pending[anchor] +-- if pa then +-- concat(pa,",") +-- else +-- return "" +-- end +-- end local pbg = { } -- will move to pending @@ -460,6 +497,10 @@ string multikind[] ; numeric multilocs[], nofmultipars ; nofmultipars := %s ; multibox := unitsquare xyscaled %s ; +numeric par_strut_height, par_strut_depth, par_line_height ; +par_strut_height := %s ; +par_strut_depth := %s ; +par_line_height := %s ; ]] local template_b = [[ @@ -481,10 +522,10 @@ function graphics.backgrounds.fetch(n,page,anchor) if not data then data = calculate(n) pbg[n] = data -- can be replaced by register - register(data,n,anchor) + -- register(data.list,n,anchor) end if data then - local pagedata = data[page] + local pagedata = data.list[page] if pagedata then local nofmultipars = #pagedata -- report_graphics("fetching '%s' at page %s using anchor '%s' containing %s multipars",n,page,anchor,nofmultipars) @@ -494,7 +535,9 @@ function graphics.backgrounds.fetch(n,page,anchor) else local trace = false local x, y, w, h, d = a.x, a.y, a.w, a.h, a.d - local result = { format(template_a,nofmultipars,pair(w,h+d)) } + local bpos = data.bpos + local bh, bd = bpos.h, bpos.d + local result = { format(template_a,nofmultipars,pair(w,h+d),point(bh),point(bd),point(bh+bd)) } for i=1,nofmultipars do local region = pagedata[i] result[#result+1] = format(template_b, diff --git a/tex/context/base/anch-pos.lua b/tex/context/base/anch-pos.lua index ff7b3ca7b..bc062161d 100644 --- a/tex/context/base/anch-pos.lua +++ b/tex/context/base/anch-pos.lua @@ -244,6 +244,8 @@ jobpositions.setall = setall jobpositions.set = set jobpositions.get = get +commands.setpos = setall + -- will become private table (could also become attribute driven but too nasty -- as attributes can bleed e.g. in margin stuff) diff --git a/tex/context/base/anch-pos.mkiv b/tex/context/base/anch-pos.mkiv index c29c98e5b..3341d40c4 100644 --- a/tex/context/base/anch-pos.mkiv +++ b/tex/context/base/anch-pos.mkiv @@ -11,108 +11,30 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -% needs a cleanup, things may change; we also need to move the mp -% related code to meta-pos - -% shorter tags, ..:achtergrond:.. etc in pos actions -% dubbele text- * pos's eruit - -% 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 Anchoring Macros / Positioning} -%D In \MKIV\ there was already a different housekeeping model -%D for positions quite early, but starting in 2012 more dramatic -%D changes started to happen, especially in relation to background -%D graphics. It will probably take some time to settle. - -% saveposition : tag page x y -% savepositionwhd : tag page x y w h d -% savepositionplus : tag page x y w h d list -% -% at some point (when we no longer share code) we will move to numbers -% do that we have less garbage collection and hashing -% -% the global table _ptbs_ is equivalent to job.positions.tobesaved -% the global table _pcol_ is equivalent to job.positions.collected -% -% btw, using a function is more efficient than passing longer code -% snippets to ctxlua +%D In \MKIV\ there was already a different housekeeping model for positions quite +%D early, but starting in 2012 more dramatic changes started to happen, especially +%D in relation to background graphics. It will probably take some time to settle. \registerctxluafile{anch-pos}{1.001} -% 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 -%D other programs is complicated by the fact that no positional -%D information is available. Mid 1999, I discussed this with -%D \THANH, the author of \PDFTEX, and after some experiments, -%D \PDFTEX\ was extended with a simple but effective mechanism, -%D that provided positional information. The interesting -%D thought is that, although \TEX\ is frozen, similar -%D functionality could have been achieved with \type -%D {\specials} and an additional \DVI\ postprocessor. -%D -%D Since we want to be as compatible as can be, \CONTEXT\ will -%D support both methods, although the development is primarily -%D driven by the \PDFTEX\ way of doing things. Since the -%D mechanism is basically not limited to one application, for -%D the moment we stick to building the functionality around one -%D \CONTEXT\ special command, but at the same time we keep our -%D eyes open for extensions in other directions. -%D -%D A question that may arise when one reads this module, is to -%D what extend these macros are generic, in the sense that they -%D could be collected in a support module instead of a core -%D module. Since the mechanism described here will closely -%D cooperate with the \METAPOST\ support built in \CONTEXT, -%D which in turn will be tightly integrated with the \CONTEXT\ -%D overlay mechanisms, I decided to write a core module instead -%D of a support one. This makes even more sense, when one takes -%D into account that this kind of support depends on special -%D drivers. - \unprotect -%D The first application of positional information was embedded -%D graphics. Since we are interacting with text, it made sense -%D to take the current line height and depth into account too. -%D This is why we have two basic position macros: one for -%D simple positions, and one for boxes. -%D -%D We could have sticked to one special, and actually did so in -%D earlier experiments, but for convenience, as well for -%D clearness, we now have two alternatives. This approach will -%D save us quite some bytes when storing large quantities of -%D positional information. We save as less information as -%D needed, that is, we save no dimensions, in a \METAPOST\ -%D friendly way. -%D -%D The three specials involved are: +%D The first application of positional information was embedded graphics. Since we +%D are interacting with text, it made sense to take the current line height and +%D depth into account too. This is why we have position macros for simple positions +%D and one boxes. %D %D \starttyping %D \dosetposition {identifier} %D \dosetpositionwhd {identifier} {width} {height} {depth} %D \dosetpositionplus {identifier} {width} {height} {depth} {list} -%D \dosetpositionpapersize {width} {height} %D \stoptyping -\def\dosaveposition #1#2#3#4{\normalexpanded{\ctxlua {_plib_.setall("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4)}}} -\def\dosavepositionwhd #1#2#3#4#5#6#7{\normalexpanded{\ctxlua {_plib_.setall("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7)}}} -\def\dosavepositionplus#1#2#3#4#5#6#7#8{\normalexpanded{\ctxlua {_plib_.setall("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7,"#8")}}} - -% \def\dosetposition #1{\normalexpanded{\ctxlatelua{_plib_.setdim("#1")}}} -% \def\dosetpositionwhd #1#2#3#4{\normalexpanded{\ctxlatelua{_plib_.setdim("#1",\number\dimexpr#2,\number\dimexpr#3,\number\dimexpr#4)}}} -% \def\dosetpositionplus #1#2#3#4#5{\normalexpanded{\ctxlatelua{_plib_.setdim("#1",\number\dimexpr#2,\number\dimexpr#3,\number\dimexpr#4,"#5")}}} +\def\dosaveposition #1#2#3#4{\ctxcommand{setpos("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4)}} +\def\dosavepositionwhd #1#2#3#4#5#6#7{\ctxcommand{setpos("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7)}} +\def\dosavepositionplus#1#2#3#4#5#6#7#8{\ctxcommand{setpos("#1",\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7,"#8")}} \def\dosetposition #1{\ctxcommand{posxy("#1")}} \def\dosetpositionwhd #1#2#3#4{\ctxcommand{poswhd("#1",\number\dimexpr#2,\number\dimexpr#3,\number\dimexpr#4)}} @@ -120,40 +42,26 @@ \def\dosetpositionbox #1#2{\ctxcommand{poswhd("#1",\number\wd#2,\number\ht#2,\number\dp#2)}} \def\dosetpositionstrut #1{\ctxcommand{posstrut("#1")}} -\let\dosetpositionpapersize\gobbletwoarguments - \newbox\positionbox \newif \ifpositioning -\def\POSprefix{POS::} - -%D This is real tricky! The page anchor is applied to the -%D page box and therefore flushed first. So, when present, it -%D is applied to all positions except itself. - -% 0 = don't relocate page origin 1 = relocate page origin once - -\setnewconstant\positionanchormode\plusone % not used - %D Sometimes we want to trick the position handler a bit: \def\replacepospxywhd#1#2#3#4#5#6#7% {\ctxcommand{replacepospxywhd('#1',\number#2,\number\dimexpr#3,\number\dimexpr#4,\number\dimexpr#5,\number\dimexpr#6,\number\dimexpr#7)}} -%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. +%D The next switch can be used to communicate a special situation. Positioning and +%D associated actions can be executed any time. However, in for instance backgrounds +%D they can be collected in a layer, for instance the text layer (especially the +%D hidden text layer). In the case of floats, we run into problems, since the page +%D information is not applicable when the content floats indeed. In such situations +%D one can treat positions and graphics local. \newif\iflocalpositioning % todo: conditional \newif\ifregionpositioning % todo: conditional -%D Watch out: sometimes a pagebreak occurs inside a float -%D placement, so there we need to disable local mode. +%D Watch out: sometimes a pagebreak occurs inside a float placement, so there we need +%D to disable local mode. \appendtoks \localpositioningtrue @@ -165,32 +73,30 @@ \to \everybeforepagebody %D \macros -%D {MPp, MPx, MPy, MPw, MPh, MPd, -%D MPxy, MPll, MPlr, MPur, MPul, MPpos,MPanchor} +%D {MPp, MPx, MPy, MPw, MPh, MPd, MPxy, MPll, MPlr, MPur, MPul, MPpos, MPanchor} %D -%D Access to the positional information is provided by macros -%D with short names that are clearly meant for \METAPOST\ but -%D nowadays also used for other purposes. - -\def\MPp #1{\ctxcommand{MPp("#1")}} \let\MPpage \MPp -\def\MPr #1{\ctxcommand{MPr("#1")}} \let\MPregion \MPr -\def\MPc #1{\ctxcommand{MPc("#1")}} \let\MPcolumn \MPc -\def\MPn #1{\ctxcommand{MPn("#1")}} \let\MPparagraph\MPn -\def\MPx #1{\ctxcommand{MPx("#1")}} -\def\MPy #1{\ctxcommand{MPy("#1")}} -\def\MPw #1{\ctxcommand{MPw("#1")}} % first we need to replace \MPwidth etc -\def\MPh #1{\ctxcommand{MPh("#1")}} -\def\MPd #1{\ctxcommand{MPd("#1")}} -\def\MPxy #1{\ctxcommand{MPxy("#1")}} -\def\MPll #1{\ctxcommand{MPll("#1")}} -\def\MPlr #1{\ctxcommand{MPlr("#1")}} -\def\MPur #1{\ctxcommand{MPur("#1")}} -\def\MPul #1{\ctxcommand{MPul("#1")}} -\def\MPpos#1{\ctxcommand{MPpos("#1")}} \let\MPanchor\MPpos % overloaded locally when needed -\def\MPe #1{\ctxcommand{MPe("#1")}} - -\def\MPls #1{\ctxcommand{MPls("#1")}} \let\MPleftskip\MPls % compatible feature -\def\MPrs #1{\ctxcommand{MPrs("#1")}} \let\MPrightkip\MPrs % compatible feature +%D Access to the positional information is provided by macros with short names +%S that are clearly meant for \METAPOST\ but nowadays also used for other purposes. + +\def\MPp #1{\ctxcommand{MPp("#1")}} \let\MPpage \MPp +\def\MPr #1{\ctxcommand{MPr("#1")}} \let\MPregion \MPr +\def\MPc #1{\ctxcommand{MPc("#1")}} \let\MPcolumn \MPc +\def\MPn #1{\ctxcommand{MPn("#1")}} \let\MPparagraph\MPn +\def\MPx #1{\ctxcommand{MPx("#1")}} +\def\MPy #1{\ctxcommand{MPy("#1")}} +\def\MPw #1{\ctxcommand{MPw("#1")}} % first we need to replace \MPwidth etc +\def\MPh #1{\ctxcommand{MPh("#1")}} +\def\MPd #1{\ctxcommand{MPd("#1")}} +\def\MPxy #1{\ctxcommand{MPxy("#1")}} +\def\MPll #1{\ctxcommand{MPll("#1")}} +\def\MPlr #1{\ctxcommand{MPlr("#1")}} +\def\MPur #1{\ctxcommand{MPur("#1")}} +\def\MPul #1{\ctxcommand{MPul("#1")}} +\def\MPpos #1{\ctxcommand{MPpos("#1")}} \let\MPanchor\MPpos % overloaded locally when needed +\def\MPe #1{\ctxcommand{MPe("#1")}} + +\def\MPls #1{\ctxcommand{MPls("#1")}} \let\MPleftskip\MPls % compatible feature +\def\MPrs #1{\ctxcommand{MPrs("#1")}} \let\MPrightkip\MPrs % compatible feature \def\MPpardata#1{\ctxcommand{MPpardata("#1")}} \def\MPxywhd #1{\ctxcommand{MPxywhd("#1")}} @@ -198,10 +104,9 @@ %D \macros %D {MPplus, MPrest, MPv, MPvv} %D -%D Since we will probably keep on extending, we provide a -%D general extension macro. The plus alternative takes an -%D extra argument, denoting what additional parameter to pick -%D up. So, the third extra is fetched with, +%D Since we will probably keep on extending, we provide a general extension +%D macro. The plus alternative takes an extra argument, denoting what additional +%D parameter to pick up. So, the third extra is fetched with, %D %D \starttyping %D \MPplus{identifier}{3}{default} @@ -218,16 +123,14 @@ \def\MPplus#1#2#3{\ctxcommand{MPplus("#1",#2,"#3")}} \let\MPv \MPplus \def\MPrest #1#2{\ctxcommand{MPrest("#1","#2")}} \let\MPvv\MPrest -%D There are two low level positioning macros. Both store the -%D position as well as execute an action associated with that -%D position. +%D There are two low level positioning macros. Both store the position as well +%D as execute an action associated with that position. \let\dopositionaction\gobbleoneargument % implemented later \def\anch_positions_initialize {\ifpositioning \else \global\positioningtrue - \dosetpositionpapersize\printpaperwidth\printpaperheight \fi} \unexpanded\def\setpositiononly @@ -406,9 +309,8 @@ \def\copyposition#1#2{\ctxcommand{copyposition('#1','#2')}} -%D The fact that handling positions is a two pass operation, is -%D one of the reasons why we need to be able to test for -%D existence, using: +%D The fact that handling positions is a two pass operation, is one of the +%D reasons why we need to be able to test for existence, using: %D %D \starttyping %D \doifpositionelse {identifier} {found action} {not found action} @@ -417,50 +319,39 @@ \def\doifpositionelse#1{\ctxcommand{doifpositionelse('#1')}} \def\doifposition #1{\ctxcommand{doifposition('#1')}} -%D We have now arrived at a few macros that would make sense as -%D support macros, but ended up in the core. - %D \macros %D {xypos} %D -%D We have several macros available to save positions. Later -%D we will see applications. +%D We have several macros available to save positions. Later we will see +%D applications. %D %D \starttabulate[|l|l||] %D \NC \type {\xypos} \NC \NC simple position with no dimensions \NC \NR -%D \NC \type {\hpos} \NC \NC position and characteristics of a \type {\hbox} \NC \NR -%D \NC \type {\vpos} \NC \NC position and characteristics of a \type {\vbox} \NC \NR +%D \NC \type {\hpos} \NC \NC position and characteristics of a \type {\hbox} \NC \NR +%D \NC \type {\vpos} \NC \NC position and characteristics of a \type {\vbox} \NC \NR %D \NC \type {\bpos} \NC b: \NC begin point in a line \NC \NR %D \NC \type {\epos} \NC e: \NC end point in a line \NC \NR -%D \NC \type {\fpos} \NC f: \NC begin point in a paragraph \NC \NR -%D \NC \type {\tpos} \NC t: \NC end point in a paragraph \NC \NR %D \stoptabulate %D %D Each macro takes an identifier as argument, and the \type %D {\hpos} and \type {\vpos} also expect box content. -% \def\xypos{\anch_positions_initialize\dosetposition} - \let\xypos\setpositiononly -\unexpanded\def\hpos #1{\dontleavehmode\setpositionbox{#1}\hbox} -\unexpanded\def\vpos #1{\setpositionbox{#1}\vbox} +\unexpanded\def\hpos#1{\dontleavehmode\setpositionbox{#1}\hbox} +\unexpanded\def\vpos#1{\setpositionbox{#1}\vbox} +\unexpanded\def\bpos#1{\dontleavehmode \setpositionstrut{b:#1}\ignorespaces} +\unexpanded\def\epos#1{\removeunwantedspaces\setpositionstrut{e:#1}} -\unexpanded\def\bpos #1{\dontleavehmode \setpositionstrut{b:#1}\ignorespaces} -\unexpanded\def\epos #1{\removeunwantedspaces\setpositionstrut{e:#1}} - -%D When we want to calculate more complex backgrounds, we -%D need to know what the current indentation scheme is. At -%D the cost of many positions and memory, we can keep track -%D of them. This mechanism is activated automatically -%D based on information collected in the previous pass. +%D When we want to calculate more complex backgrounds, we need to know what the +%D current indentation scheme is. At the cost of many positions and memory, we +%D can keep track of them. This mechanism is activated automatically based on +%D information collected in the previous pass. \newcount\parposcounter \newif \ifpositioningpar \newif \iftracepositions -% we can check for used entries, and if not, then not add one - \unexpanded\def\enableparpositions % global {\global\let\registerparoptions\doregisterparoptions \global\positioningtrue @@ -478,14 +369,6 @@ \fi \fi \fi \fi} -% \def\anch_positions_register_par_options -% {\global\advance\parposcounter\plusone -% \setpositiondataplus -% {p:\number\parposcounter}\zeropoint\strutht\strutdp -% {\the\hsize,\the\dimexpr\leftskip\relax,\the\dimexpr\rightskip\relax,\the\hangindent,\the\hangafter,\the\parindent}% -% %\hbox{\registerparsymbol}% -% \iftracepositions\registerparsymbol\fi} - \def\anch_positions_register_par_options {\dontleavehmode\ctxcommand{parpos()}% \iftracepositions\registerparsymbol\fi} @@ -514,130 +397,11 @@ % \appendtoks \registerparoptions \to \everypar -%D Eperimental code, don't use this yet: (must be sped up anyway) .. obsolete - -\def\@@noden{node:n:} -\def\@@nodeo{node:o:} -\def\@@nodep{node:p:} - -\def\doifelsenodelocation#1% - {\ifcsname\@@noden#1\endcsname - \expandafter\firstoftwoarguments - \else - \expandafter\secondoftwoarguments - \fi} - -\def\nextnodelocation#1% - {\ifcsname\@@noden#1\endcsname\pluscounter{\@@noden#1}\fi} - -\def\newnodelocation#1% - {\ifcsname\@@noden#1\endcsname - \setcounter{\@@noden#1}\zerocount - \letgvalue {\@@nodeo#1}\!!zerocount - \fi} - -\def\tagnodelocation#1% - {\ifcsname\@@noden#1\endcsname\xypos{\@@nodep#1:\countervalue{\@@noden#1}}\fi} - -\def\getnodelocationp#1{\MPp{\@@nodep#1:\countervalue{\@@noden#1}}} -\def\getnodelocationx#1{\MPx{\@@nodep#1:\countervalue{\@@noden#1}}} -\def\getnodelocationy#1{\MPy{\@@nodep#1:\countervalue{\@@noden#1}}} - -\def\numnodelocationp#1#2{\MPp{\@@nodep#1:\number#2}} -\def\numnodelocationx#1#2{\MPx{\@@nodep#1:\number#2}} -\def\numnodelocationy#1#2{\MPy{\@@nodep#1:\number#2}} - -\def\getnodelocationn#1{\countervalue{\@@noden#1}} -\def\getnodelocationo#1{\getvalue {\@@nodeo#1}} - -\setnewconstant\nodelocationmode\plusone - -\def\analyzenodelocation#1% - {\ifcsname\@@noden#1\endcsname - \anch_positions_node_location_analyze{#1}{\getnodelocationn{#1}}\zerocount - \fi} - -\def\anch_positions_node_location_analyze#1#2#3% class n default - {\begingroup - \donefalse - \ifcase\nodelocationmode - % do nothing - \else - \edef\nodelocationselfn{#2}% - \edef\nodelocationselfp{\numnodelocationp{#1}\nodelocationselfn}% - \edef\nodelocationselfx{\numnodelocationx{#1}\nodelocationselfn}% - \edef\nodelocationselfy{\numnodelocationy{#1}\nodelocationselfn}% - \scratchcounter\plusone - \doloop - {\ifnum\recurselevel=\nodelocationselfn\relax - \donetrue - \else - \edef\nodelocationotherp{\numnodelocationp{#1}\recurselevel}% - \edef\nodelocationotherx{\numnodelocationx{#1}\recurselevel}% - \edef\nodelocationothery{\numnodelocationy{#1}\recurselevel}% - \ifcase\nodelocationmode - % \exitloop - \or - % ok for single column - \anch_positions_node_location_analyze_one - \or - % acceptable for double column - \anch_positions_node_location_analyze_two - \else - \exitloop - \fi - \fi}% - \fi - \ifdone \else - \scratchcounter#3\relax - \fi - \setxvalue{\@@nodeo#1}{\the\scratchcounter}% - \endgroup} - -\def\anch_positions_node_location_analyze_one - {\ifcase\nodelocationotherp\relax - \exitloop - \else\ifnum\nodelocationotherp<\nodelocationselfp\relax - \donetrue \advance\scratchcounter\plusone - \else\ifnum\nodelocationotherp>\nodelocationselfp\relax - % skip - \else\ifdim\nodelocationothery>\nodelocationselfy\relax - \donetrue \advance\scratchcounter\plusone - \else\ifdim\nodelocationothery<\nodelocationselfy\relax - % skip - \else\ifdim\nodelocationotherx<\nodelocationselfx\relax - \donetrue \advance\scratchcounter\plusone - \fi\fi\fi\fi\fi\fi} - -\def\anch_positions_node_location_analyze_two - {\ifcase\nodelocationotherp\relax - \exitloop - \else\ifnum\nodelocationotherp<\nodelocationselfp\relax - \donetrue \advance\scratchcounter\plusone - \else\ifnum\nodelocationotherp>\nodelocationselfp\relax - % skip - \else\ifnum\recurselevel>\nodelocationselfn\relax - \donetrue \exitloop - \else - \donetrue \advance\scratchcounter\plusone - \fi\fi\fi\fi} - -\unexpanded\def\shownodelocation#1% - {\ifcsname\@@noden#1\endcsname - \analyzenodelocation{#1}% - (#1,% - n:\getnodelocationn{#1},% - p:\getnodelocationp{#1},% - x:\getnodelocationx{#1},% - y:\getnodelocationy{#1},% - o:\getnodelocationo{#1})% - \fi} - %D \macros %D {doifoverlappingelse} %D -%D A first application of positional information, is to -%D determine if two boxes do overlap: +%D A first application of positional information, is to determine if two +%D boxes do overlap: %D %D \starttyping %D \doifoverlappingelse{point a}{point b} @@ -651,8 +415,8 @@ %D {doifpositionsonsamepageelse, %D doifpositionsonthispageelse} %D -%D Instead of letting the user handle fuzzy expansion, we -%D provide a simple test on positions being on the same page. +%D Instead of letting the user handle fuzzy expansion, we provide a simple test on +%D positions being on the same page. %D %D \starttyping %D \doifpositionsonsamepageelse{point a}{point b} @@ -666,12 +430,4 @@ \def\doifpositionsonsamepageelse#1{\ctxcommand{doifpositionsonsamepageelse("#1")}} \def\doifpositionsonthispageelse#1{\ctxcommand{doifpositionsonthispageelse("#1")}} -%D \macros -%D {POSp, POSx, POSy, POSh, POSd, POSw} -%D -%D This is obsolete in \MKIV: - -\let\POSp\MPp \let\POSx\MPx \let\POSy\MPy -\let\POSh\MPh \let\POSd\MPd \let\POSw\MPw - \protect \endinput diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii index 6446020e8..c045890b2 100644 --- a/tex/context/base/cont-new.mkii +++ b/tex/context/base/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2012.02.17 18:52} +\newcontextversion{2012.02.18 10:50} %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/cont-new.mkiv b/tex/context/base/cont-new.mkiv index 68ad069c4..dc19402c2 100644 --- a/tex/context/base/cont-new.mkiv +++ b/tex/context/base/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2012.02.17 18:52} +\newcontextversion{2012.02.18 10:50} %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-version.pdf b/tex/context/base/context-version.pdf index 4c0eba78e..b5e4d1d07 100644 Binary files a/tex/context/base/context-version.pdf and b/tex/context/base/context-version.pdf differ diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png index 0024ab229..7db14f01e 100644 Binary files a/tex/context/base/context-version.png and b/tex/context/base/context-version.png differ diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii index 3edaefddf..9bd21ba7a 100644 --- a/tex/context/base/context.mkii +++ b/tex/context/base/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2012.02.17 18:52} +\edef\contextversion{2012.02.18 10:50} %D For those who want to use this: diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index bdbba20a2..5bfa6e61e 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -23,7 +23,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2012.02.17 18:52} +\edef\contextversion{2012.02.18 10:50} %D For those who want to use this: diff --git a/tex/context/base/font-otn.lua b/tex/context/base/font-otn.lua index 1e552d35a..edef853de 100644 --- a/tex/context/base/font-otn.lua +++ b/tex/context/base/font-otn.lua @@ -730,9 +730,11 @@ function handlers.gpos_mark2mark(start,kind,lookupname,markanchors,sequence) local markchar = start.char if marks[markchar] then local base = start.prev -- [glyph] [basemark] [start=mark] -while base and has_attribute(base,markdone) and has_attribute(base,markdone) ~= has_attribute(start,markdone) do - base = base.prev -- KE: prevents mknk fo rmarks on different components of a ligature -end + -- new + while base and has_attribute(base,markdone) and has_attribute(base,markdone) ~= has_attribute(start,markdone) do + base = base.prev -- KE: prevents mknk fo rmarks on different components of a ligature + end + -- if base and base.id == glyph_code and base.subtype<256 and base.font == currentfont then -- subtype test can go local basechar = base.char local baseanchors = descriptions[basechar] diff --git a/tex/context/base/mlib-pps.mkiv b/tex/context/base/mlib-pps.mkiv index a9b2e6e70..b233f7b08 100644 --- a/tex/context/base/mlib-pps.mkiv +++ b/tex/context/base/mlib-pps.mkiv @@ -98,7 +98,7 @@ %D \typebuffer \startlinecorrection \getbuffer \stoplinecorrection \def\MPLIBpositionwhd#1#2#3#4#5% bp ! - {\dosavepositionwhd{#1}{0}{#2bp}{#3bp}{#4bp}{#5bp}{0bp}} + {\dosavepositionwhd{#1}\zerocount{#2\onebasepoint}{#3\onebasepoint}{#4\onebasepoint}{#5\onebasepoint}\zeropoint} \def\MPLIBextrapass#1% {\ctxlua{metapost.graphic_extra_pass("#1")}} diff --git a/tex/context/base/page-lin.mkiv b/tex/context/base/page-lin.mkiv index f43839441..7b1cbcd94 100644 --- a/tex/context/base/page-lin.mkiv +++ b/tex/context/base/page-lin.mkiv @@ -13,6 +13,8 @@ % generic or not ... maybe not bother too much and simplify to mkiv only % get rid of \mk* (left over from experimental times) +% +% to be redone (was experiment) .. can be hooked into margin code \writestatus{loading}{ConTeXt Core Macros / Line Numbering} @@ -68,7 +70,7 @@ {\setbox\linenumberscratchbox\vbox {\forgetall \offinterlineskip - \ctxlua{nodes.lines.boxed.stage_one(\number#1,\ifcase\linenumbernesting false\else true\fi)}}% + \ctxlua{nodes.lines.boxed.stage_one(\number#1,\ifcase\linenumbernesting false\else true\fi)}}% #2 \ctxlua{nodes.lines.boxed.stage_two(\number#1,\number\linenumberscratchbox)}}% can move to lua code % id nr shift width leftskip dir @@ -264,7 +266,7 @@ \the\aftereverylinenumbering \endgroup} -% number placement +% number placement .. will change into (the new) margin code \def\mkdoinnerlinenumber{\doifoddpageelse\mkdoleftlinenumber\mkdorightlinenumber} \def\mkdoouterlinenumber{\doifoddpageelse\mkdorightlinenumber\mkdoleftlinenumber} diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf index 73a12ab77..ed4110d93 100644 Binary files a/tex/context/base/status-files.pdf and b/tex/context/base/status-files.pdf differ diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf index 5a5fda95d..e886b982d 100644 Binary files a/tex/context/base/status-lua.pdf and b/tex/context/base/status-lua.pdf differ diff --git a/tex/context/base/tabl-tsp.mkiv b/tex/context/base/tabl-tsp.mkiv index f230346bd..21182a988 100644 --- a/tex/context/base/tabl-tsp.mkiv +++ b/tex/context/base/tabl-tsp.mkiv @@ -113,7 +113,7 @@ {\forgetall \dontcomplain \global\settrue\splitfloatdone - \nodelocationmode\zerocount % bypass auto-renumbering + % \nodelocationmode\zerocount % bypass auto-renumbering \global\advance\noffloatssplits\plusone \ifcase\noffloatssplits\relax \or \ifconditional\onlyonesplitofffloat diff --git a/tex/context/base/typo-mar.lua b/tex/context/base/typo-mar.lua index 00747a585..45cab0f71 100644 --- a/tex/context/base/typo-mar.lua +++ b/tex/context/base/typo-mar.lua @@ -656,6 +656,8 @@ local function flushinline(parent,head) return head, done, continue end +local a_linenumber = attributes.private('linenumber') + local function flushed(scope,parent) -- current is hlist local head = parent.list local done = false @@ -689,7 +691,11 @@ local function flushed(scope,parent) -- current is hlist done = done or don end if done then +local a = has_attribute(head,a_linenumber) -- hack .. we need a more decent critical attribute inheritance mechanism parent.list = hpack_nodes(head,parent.width,"exactly") +if a then + set_attribute(parent.list,a_linenumber,a) +end -- resetstacked() end return done, continue diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 0966cd3b8..d85a0f4a3 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 02/17/12 18:52:08 +-- merge date : 02/18/12 10:50:58 do -- begin closure to overcome local limits and interference @@ -9295,9 +9295,11 @@ function handlers.gpos_mark2mark(start,kind,lookupname,markanchors,sequence) local markchar = start.char if marks[markchar] then local base = start.prev -- [glyph] [basemark] [start=mark] -while base and has_attribute(base,markdone) and has_attribute(base,markdone) ~= has_attribute(start,markdone) do - base = base.prev -- KE: prevents mknk fo rmarks on different components of a ligature -end + -- new + while base and has_attribute(base,markdone) and has_attribute(base,markdone) ~= has_attribute(start,markdone) do + base = base.prev -- KE: prevents mknk fo rmarks on different components of a ligature + end + -- if base and base.id == glyph_code and base.subtype<256 and base.font == currentfont then -- subtype test can go local basechar = base.char local baseanchors = descriptions[basechar] -- cgit v1.2.3