diff options
Diffstat (limited to 'tex')
25 files changed, 336 insertions, 233 deletions
diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index b1c603769..623678b40 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2021.02.27 19:27} +\newcontextversion{2021.03.01 15:33} %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/mkii/context.mkii b/tex/context/base/mkii/context.mkii index 8486049d0..9ac6432f5 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2021.02.27 19:27} +\edef\contextversion{2021.03.01 15:33} %D For those who want to use this: diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index c984f50cf..229feff8a 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.02.27 19:27} +\newcontextversion{2021.03.01 15:33} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index e2afeb0d4..796f686fc 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -45,7 +45,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2021.02.27 19:27} +\edef\contextversion{2021.03.01 15:33} %D Kind of special: diff --git a/tex/context/base/mkiv/data-env.lua b/tex/context/base/mkiv/data-env.lua index 53f0c27cc..3b10d89b8 100644 --- a/tex/context/base/mkiv/data-env.lua +++ b/tex/context/base/mkiv/data-env.lua @@ -94,7 +94,9 @@ local relations = allocate { -- todo: handlers also here mp = { names = { "mp" }, variable = 'MPINPUTS', - suffixes = { 'mp', 'mpvi', 'mpiv', 'mpxl', 'mpii' }, + suffixes = CONTEXTLMTXMODE > 0 + and { 'mp', 'mpxl', 'mpvi', 'mpiv', 'mpii' } + or { 'mp', 'mpvi', 'mpiv', 'mpii' }, usertype = true, }, tex = { diff --git a/tex/context/base/mkiv/publ-ini.mkiv b/tex/context/base/mkiv/publ-ini.mkiv index ef2c5cbda..dfed53c73 100644 --- a/tex/context/base/mkiv/publ-ini.mkiv +++ b/tex/context/base/mkiv/publ-ini.mkiv @@ -396,6 +396,10 @@ \let\btxsetup\fastsetup +% This fails when we check field values: + +\let\btxrawfield\btxfield + \def\btxfield #1{\dostarttagged\t!pubfld{#1}\clf_btxfield {\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} \def\btxdetail #1{\dostarttagged\t!pubfld{#1}\clf_btxdetail{\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} \def\btxflush #1{\dostarttagged\t!pubfld{#1}\clf_btxflush {\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} @@ -681,7 +685,7 @@ \dostarttagged\t!publication\empty \dotagpublication\currentbtxdataset\currentbtxtag \redoconvertfont % see (**) in strc-lst, this will become an configuration option - \edef\currentbtxcategory{\btxfield{category}}% + \edef\currentbtxcategory{\btxrawfield{category}}% \ignorespaces \ifconditional\c_btx_list_texts \dostarttagged\t!listtext\s!left diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf Binary files differindex 0b1992890..58cd21876 100644 --- a/tex/context/base/mkiv/status-files.pdf +++ b/tex/context/base/mkiv/status-files.pdf diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf Binary files differindex b52a1d01d..4241ea0a2 100644 --- a/tex/context/base/mkiv/status-lua.pdf +++ b/tex/context/base/mkiv/status-lua.pdf diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 8e2816e46..088eb9591 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2021.02.27 19:27} +\newcontextversion{2021.03.01 15:33} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index 4976b707d..d84bbb73c 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2021.02.27 19:27} +\immutable\edef\contextversion{2021.03.01 15:33} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error @@ -568,6 +568,8 @@ \loadmkxlfile{meta-blb} \loadmkxlfile{grph-epd} +\loadmkxlfile{typo-shp} + \loadmkxlfile{math-inc} % an experiment \loadmkxlfile{publ-inc} % an experiment diff --git a/tex/context/base/mkxl/meta-imp-txt.lmt b/tex/context/base/mkxl/meta-imp-txt.lmt deleted file mode 100644 index f7721956f..000000000 --- a/tex/context/base/mkxl/meta-imp-txt.lmt +++ /dev/null @@ -1,86 +0,0 @@ -if not modules then modules = { } end modules ['meta-imp-txt'] = { - version = 1.001, - comment = "companion to meta-imp-txt.mkiv", - author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", - copyright = "PRAGMA ADE / ConTeXt Development Team", - license = "see context related readme files", -} - -local setmetatableindex = table.setmetatableindex - -local texset = tex.set - -local scannumeric = mp.scan.numeric -local scaninteger = mp.scan.integer -local scanboolean = mp.scan.boolean -local scanstring = mp.scan.string - -local bpfactor = number.dimenfactors.bp - -local metapost = metapost - -local parshapes = { } -local properties = { } - --- initialize shapes to 0 hsize - -metapost.parshapes = { } - -function metapost.parshapes.reset() - parshapes = { } - properties = { } -end - -function metapost.parshapes.next() - properties = { } - parshapes[#parshapes+1] = properties -end - -function metapost.parshapes.inspect() - inspect(parshapes) -end - -function metapost.parshapes.get(index,name) - local v = parshapes[index][name] - if type(v) == "boolean" then - context(v and 1 or 0) - else - context(v) - end -end - -function metapost.parshapes.wholeshape() -- maybe just collect them earlier - local t, n = { }, 0 - for i=1,#parshapes do - local s = parshapes[i].shape - for i=1,#s do - n = n + 1 - t[n] = s[i] - end - end - texset("parshape",t) -end - -metapost.registerscript("setparshapeproperty", function() - local k = scanstring() - if k == "line" then - local entry = properties.shape[scannumeric()] - local indent = scannumeric() / bpfactor - local width = scannumeric() / bpfactor - entry[1] = indent - entry[2] = width - elseif k == "lines" then - properties.lines = scaninteger() - properties.shape = setmetatableindex(function(t,k) - local v = { 0, properties.width or 0 } - t[k] = v - return v - end) - elseif k == "first" then - properties[k] = scanboolean() - elseif k == "inspect" then - inspect(properties) - else - properties[k] = scannumeric() / bpfactor - end -end) diff --git a/tex/context/base/mkxl/meta-imp-txt.mkxl b/tex/context/base/mkxl/meta-imp-txt.mkxl index 4654ca722..0c3516a7b 100644 --- a/tex/context/base/mkxl/meta-imp-txt.mkxl +++ b/tex/context/base/mkxl/meta-imp-txt.mkxl @@ -21,70 +21,8 @@ %D This time we combine \TEX, \METAPOST\ and \LUA, so we do't need a temporary file %D to communicate from \METAPOST\ to \TEX. We just store information in \LUA\ tables. -\ifdefined\startshapetext - - % now moved into the core - -\else - - \ifdefined\shapetextbox \else - \newbox \shapetextbox - \newcount\shapetextindex - \fi - - \ctxloadluafile{meta-imp-txt.lmt} - - \startMPextensions loadmodule "text" ; \stopMPextensions - - \protected\def\startshapetext[#1]% - {\begingroup - \global\shapetextindex\zerocount - \global\setbox\shapetextbox\vbox\bgroup - % analyze the mp shapes - \ctxlua{metapost.parshapes.reset()} - \def\docommand##1% - {\ctxlua{metapost.parshapes.next()}% - \startMPcalculation - \includeMPgraphic{##1}% - \stopMPcalculation}% - \processcommalist[#1]\docommand - \forgetall - \dontcomplain - % setup tex part (maybe just enable grid snapping) - \setuptolerance[\v!verytolerant,\v!stretch]% default - \setuplayout[\c!grid=\v!yes]% - \ctxlua{metapost.parshapes.wholeshape()}% - \pushparagraphtweak {prune}} - - \protected\def\stopshapetext - {\popparagraphtweak - \egroup - \endgroup} - - \def\getshapeparameter#1{\ctxlua{metapost.parshapes.get(\number\shapetextindex,"#1")}} - - \protected\def\getshapetext - {\vbox\bgroup - \forgetall - \dontcomplain - \global\advance\shapetextindex\plusone - \scratchcounter\getshapeparameter{lines}\relax - \scratchwidth \getshapeparameter{width}\scaledpoint\relax - \scratchheight \getshapeparameter{height}\scaledpoint\relax - \setbox\scratchbox\vpack to \scratchheight - {\splittopskip\strutheight - \vskip\dimexpr\getshapeparameter{voffset}\scaledpoint\relax - \ifcase\numexpr\getshapeparameter{first}\relax\else - \vskip\lineheight - \fi - \hskip\dimexpr\getshapeparameter{hoffset}\scaledpoint\relax - \hpack{\vsplit\shapetextbox to \scratchcounter\lineheight}}% - \wd\scratchbox\scratchwidth - \ht\scratchbox\scratchheight - \dp\scratchbox\zeropoint - \box\scratchbox - \egroup} - +\ifdefined\startshapetext \else + \writestatus{system}{something is wrong here} \fi %D Following: diff --git a/tex/context/base/mkxl/mlib-ctx.lmt b/tex/context/base/mkxl/mlib-ctx.lmt index 558553921..2569a6066 100644 --- a/tex/context/base/mkxl/mlib-ctx.lmt +++ b/tex/context/base/mkxl/mlib-ctx.lmt @@ -80,7 +80,7 @@ implement { } local patterns = { - CONTEXTLMTXMODE > 0 and "meta-imp-%s.mkxl" or "", + "meta-imp-%s.mkxl", "meta-imp-%s.mkiv", "meta-imp-%s.tex", -- obsolete: diff --git a/tex/context/base/mkxl/mlib-fio.lmt b/tex/context/base/mkxl/mlib-fio.lmt index bc890a37d..2e31d56d1 100644 --- a/tex/context/base/mkxl/mlib-fio.lmt +++ b/tex/context/base/mkxl/mlib-fio.lmt @@ -69,7 +69,7 @@ local suffixlist = { "mpxl", "mpiv", "mp" } -- no "mf" local function findmpfile(name,ftype) local validtyp = validftype(ftype) local fullname = findfile(name,validtyp) - if fullname and fulllname ~= "" then + if fullname and fullname ~= "" then return fullname elseif suffix(name) == "" then for i=1,#suffixlist do diff --git a/tex/context/base/mkxl/mlib-lua.lmt b/tex/context/base/mkxl/mlib-lua.lmt index e8f33a53a..068d17f32 100644 --- a/tex/context/base/mkxl/mlib-lua.lmt +++ b/tex/context/base/mkxl/mlib-lua.lmt @@ -63,7 +63,7 @@ scan.property = function(k) if trace then reporti("property") end return s scan.numeric = function() if trace then reporti("numeric") end return scan_numeric (currentmpx) end scan.integer = function() if trace then reporti("integer") end return scan_integer (currentmpx) end scan.boolean = function() if trace then reporti("boolean") end return scan_boolean (currentmpx) end -scan.string = function() if trace then reporti("string") end if currentmpx then return scan_string (currentmpx) end end +scan.string = function() if trace then reporti("string") end return scan_string (currentmpx) end scan.pair = function(t) if trace then reporti("pair") end return scan_pair (currentmpx,t) end scan.color = function(t) if trace then reporti("color") end return scan_color (currentmpx,t) end scan.cmykcolor = function(t) if trace then reporti("cmykcolor") end return scan_cmykcolor (currentmpx,t) end diff --git a/tex/context/base/mkxl/mlib-mpf.lmt b/tex/context/base/mkxl/mlib-mpf.lmt index 42cee676c..87b6c2d4e 100644 --- a/tex/context/base/mkxl/mlib-mpf.lmt +++ b/tex/context/base/mkxl/mlib-mpf.lmt @@ -22,7 +22,8 @@ local report_luarun = logs.reporter("metapost","lua") local report_script = logs.reporter("metapost","script") local report_message = logs.reporter("metapost") -local trace_luarun = false trackers.register("metapost.lua",function(v) trace_luarun = v end) +local trace_luarun = false trackers.register("metapost.lua", function(v) trace_luarun = v end) +local trace_script = false trackers.register("metapost.script",function(v) trace_script = v end) local be_tolerant = true directives.register("metapost.lua.tolerant", function(v) be_tolerant = v end) @@ -86,11 +87,18 @@ do else runscripts[nofscripts] = name end + if trace_script then + report_script("registering script %a as %i",name,nofscripts) + end return nofscripts end function metapost.scriptindex(name) - return runnames[name] or 0 + local index = runnames[name] or 0 + if trace_script then + report_script("fetching scriptindex %i of %a",index,name) + end + return index end -- The gbuffer sharing and such is not really needed now but make a dent when diff --git a/tex/context/base/mkxl/mlib-run.lmt b/tex/context/base/mkxl/mlib-run.lmt index a79ce99ef..eacb148cc 100644 --- a/tex/context/base/mkxl/mlib-run.lmt +++ b/tex/context/base/mkxl/mlib-run.lmt @@ -327,7 +327,9 @@ function metapost.pushformat(specification,f,m) -- was: instance, name, method end end if preamble then + metapost.pushscriptrunner(mpx) executempx(mpx,preamble) + metapost.popscriptrunner() end specification.mpx = mpx return mpx diff --git a/tex/context/base/mkxl/node-par.lmt b/tex/context/base/mkxl/node-par.lmt index 9354d769f..125c1b687 100644 --- a/tex/context/base/mkxl/node-par.lmt +++ b/tex/context/base/mkxl/node-par.lmt @@ -11,7 +11,10 @@ local stoptiming = statistics.stoptiming local sequencers = utilities.sequencers --- This are called a lot! +-- This is called a lot! I'm a bit reluctant with this one because it is +-- sensitive for order. In many other callbacks ther eis no action at the +-- tex end but here ... Anyway, it has been around for a while now (2019) +-- and so far I had no need for extensive usage so we're okay. do @@ -28,6 +31,10 @@ do end +-- Originally this one was meant to deal with the indentation (like turn a box into +-- a skip or prevent it) but that never really was used. The return value still +-- detemines if an indentation box or skip is injected. Will I change that? + do local actions = sequencers.new { @@ -41,11 +48,11 @@ do sequencers.appendgroup(actions,"system") -- private sequencers.appendgroup(actions,"after" ) -- user - local function paragraph(mode,indented) + local function paragraph(mode,indented,context) -- context used to be the cmd code local runner = actions.runner if runner then starttiming(builders) - indented = runner(mode,indented) + indented = runner(mode,indented,context) stoptiming(builders) end return indented @@ -58,7 +65,8 @@ end -- This one is a playground for some old metafun gimmicks that I want to improve -- while I'm updating the manual to lmtx. but it might also be useful for other -- purposes. It fits in the category obscure and probably takes while to stabelize --- (if it stays at all). +-- (if it stays at all). Again, this is one that has the danger of interference, +-- so when it finally got an action handler it only got a system one. do @@ -86,3 +94,8 @@ do callbacks.register("paragraph_context",parcontext,"when the context is dealt with") end + +-- This means that we now have most callbacks in use, even the ones that I'm not sure +-- about. It also means that with the above enabled we might have performance now at +-- its worst. I can optimize this a little but it's not worth the effort (and added +-- complication). diff --git a/tex/context/base/mkxl/publ-ini.mkxl b/tex/context/base/mkxl/publ-ini.mkxl index b1af17413..2f4d817f2 100644 --- a/tex/context/base/mkxl/publ-ini.mkxl +++ b/tex/context/base/mkxl/publ-ini.mkxl @@ -398,12 +398,22 @@ \aliased\let\btxsetup\fastsetup +\permanent\def\btxrawfield #1{\clf_btxfield {\currentbtxdataset}{\currentbtxtag}{#1}} + \permanent\def\btxfield #1{\dostarttagged\t!pubfld{#1}\clf_btxfield {\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} \permanent\def\btxdetail #1{\dostarttagged\t!pubfld{#1}\clf_btxdetail{\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} \permanent\def\btxflush #1{\dostarttagged\t!pubfld{#1}\clf_btxflush {\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} \permanent\def\btxdirect #1{\dostarttagged\t!pubfld{#1}\clf_btxdirect{\currentbtxdataset}{\currentbtxtag}{#1}\dostoptagged} %permanent\def\btxauthorfield#1{\dostarttagged\t!pubfld{#1}\clf_btxauthorfield \currentbtxauthorindex{#1}\dostoptagged} +% Also possible but inefficient: +% +% \permanent\def\btxfield #1{\localcontrolled{\dostarttagged\t!pubfld{#1}}\clf_btxfield {\currentbtxdataset}{\currentbtxtag}{#1}\localcontrolled{\dostoptagged}} +% \permanent\def\btxdetail #1{\localcontrolled{\dostarttagged\t!pubfld{#1}}\clf_btxdetail{\currentbtxdataset}{\currentbtxtag}{#1}\localcontrolled{\dostoptagged}} +% \permanent\def\btxflush #1{\localcontrolled{\dostarttagged\t!pubfld{#1}}\clf_btxflush {\currentbtxdataset}{\currentbtxtag}{#1}\localcontrolled{\dostoptagged}} +% \permanent\def\btxdirect #1{\localcontrolled{\dostarttagged\t!pubfld{#1}}\clf_btxdirect{\currentbtxdataset}{\currentbtxtag}{#1}\localcontrolled{\dostoptagged}} +% %permanent\def\btxauthorfield#1{\localcontrolled{\dostarttagged\t!pubfld{#1}}\clf_btxauthorfield \currentbtxauthorindex{#1}\localcontrolled{\dostoptagged}} + %D How complex will we go? Can we assume that e.g. an apa style will not be mixed %D with another one? I think this assumption is okay. For manuals we might want to %D mix but we can work around it. @@ -691,7 +701,7 @@ \dostarttagged\t!publication\empty \dotagpublication\currentbtxdataset\currentbtxtag \redoconvertfont % see (**) in strc-lst, this will become an configuration option - \edef\currentbtxcategory{\btxfield{category}}% + \edef\currentbtxcategory{\btxrawfield{category}}% \ignorespaces \ifconditional\c_btx_list_texts \dostarttagged\t!listtext\s!left diff --git a/tex/context/base/mkxl/spac-par.lmt b/tex/context/base/mkxl/spac-par.lmt index 3af8ea415..179fc1f43 100644 --- a/tex/context/base/mkxl/spac-par.lmt +++ b/tex/context/base/mkxl/spac-par.lmt @@ -78,3 +78,4 @@ implement { context(t and t[wrappers[id]] or 0) end } + diff --git a/tex/context/base/mkxl/spac-par.mkxl b/tex/context/base/mkxl/spac-par.mkxl index 06aeee4d8..134a60e2a 100644 --- a/tex/context/base/mkxl/spac-par.mkxl +++ b/tex/context/base/mkxl/spac-par.mkxl @@ -453,59 +453,4 @@ \expandafter\firstofoneargument \fi} -%D Something new (experimental and evolving): -%D -%D \starttyping -%D \parshape -%D 3 -%D options 1 % repeat -%D 0cm 10cm 2cm 8cm 4cm 6cm -%D lots of text -%D \stoptyping -%D -%D \starttyping -%D \parshape 4 5mm 125mm 0mm 120mm 5mm 125mm 0mm 120mm -%D \pushparagraphtweak {repeat} -%D verse line 1\crlf -%D verse line 2\crlf -%D verse line 3\crlf -%D verse line 4\par -%D etc -%D \popparagraphtweak -%D \stoptyping - -%D But we wrap this in a more abstract interface: - -\installcorenamespace {parshapes} - -% \installcommandhandler \??shapedparagraph {shapedparagraph} \??shapedparagraph - -\aliased\let\stopparagraphshape\relax - -\permanent\protected\def\startparagraphshape[#1]#2\stopparagraphshape - {\defcsname\??parshapes#1\endcsname{#2}} - -\permanent\protected\def\rawparagraphshape#1% - {\begincsname\??parshapes#1\endcsname} - -\permanent\protected\def\setparagraphshape[#1]% - {\ifcsname\??parshapes#1\endcsname - \expandafter\clf_setparagraphshape\lastnamedcs done\relax - \fi} - -% \permanent\protected\tolerant\def\startshapedparagraph[#1]#*[#2]% no grouping -% {\setparshape[#1]% -% \pushparagraphtweak{#2}\relax} - -\permanent\protected\tolerant\def\startshapedparagraph[#1]% no grouping - {\begingroup - \getdummyparameters[\c!method=,\c!list=,#1]% - \normalexpanded - {\endgroup - \setparagraphshape[\dummyparameter\c!list]% - \pushparagraphtweak{\dummyparameter\c!method}\relax}} - -\permanent\protected\def\stopshapedparagraph - {\popparagraphtweak} - \protect \endinput diff --git a/tex/context/base/mkxl/typo-par.lmt b/tex/context/base/mkxl/typo-par.lmt index c7204ecd2..b5751e497 100644 --- a/tex/context/base/mkxl/typo-par.lmt +++ b/tex/context/base/mkxl/typo-par.lmt @@ -21,31 +21,44 @@ local appendaction = sequencers.appendaction local enableaction = sequencers.enableaction local disableaction = sequencers.disableaction +local implement = interfaces.implement + local stack = { } local top = nil local enabled = false -interfaces.implement { +local trace = false trackers.register("paragraphs.tweaks",function(v) trace = v end) + +local report = logs.reporter("paragraphs","tweaks") + +implement { name = "pushparagraphtweak", public = true, protected = true, arguments = "string", actions = function(t) insert(stack,top) - if not top then + if not enabled then + if trace then + report("enabling") + end enableaction("paragraphcontext","builders.checkparcontext") enabled = true end top = t end } -interfaces.implement { + +implement { name = "popparagraphtweak", public = true, protected = true, actions = function() top = remove(stack) - if not top then + if enabled and not top then + if trace then + report("disabling") + end disableaction("paragraphcontext","builders.checkparcontext") enabled = false end @@ -61,12 +74,21 @@ function builders.checkparcontext(where) while p > s do p = p - s end + if trace then + report("cycling %i",s) + end shiftparshape(p,true) + return true end - return true elseif top == "shift" then - shiftparshape(texget("prevgraf")) - return true + local s = texget("parshape",true) + if s then + if trace then + report("shifting %i", s) + end + shiftparshape(texget("prevgraf")) + return true + end end end end @@ -85,7 +107,7 @@ do local scandimen = scanners.dimen local scancardinal = scanners.cardinal - interfaces.implement { + implement { name = "setparagraphshape", protected = true, actions = function() @@ -140,7 +162,7 @@ do local NR = context.NR local VL = context.VL - interfaces.implement { + implement { name = "showparagraphshape", protected = true, public = true, diff --git a/tex/context/base/mkxl/typo-shp.lmt b/tex/context/base/mkxl/typo-shp.lmt new file mode 100644 index 000000000..27cafe1bd --- /dev/null +++ b/tex/context/base/mkxl/typo-shp.lmt @@ -0,0 +1,117 @@ +if not modules then modules = { } end modules ['meta-imp-txt'] = { + version = 1.001, + comment = "companion to meta-imp-txt.mkiv", + author = "Hans Hagen, PRAGMA-ADE, Hasselt NL", + copyright = "PRAGMA ADE / ConTeXt Development Team", + license = "see context related readme files", +} + +local setmetatableindex = table.setmetatableindex +local settings_to_array = utilities.parsers.settings_to_array + +local texset = tex.set +local texgetcount = tex.getcount + +local expandmacro = token.expand_macro + +local implement = interfaces.implement + +local scan = mp.scan +local scannumeric = scan.numeric +local scaninteger = scan.integer +local scanboolean = scan.boolean +local scanstring = scan.string + +local bpfactor = number.dimenfactors.bp + +local context = context + +local parshapes = { } +local properties = { } + +metapost.registerscript("setparshapeproperty", function() + local k = scanstring() + if k == "line" then + local entry = properties.shape[scannumeric()] + local indent = scannumeric() / bpfactor + local width = scannumeric() / bpfactor + entry[1] = indent + entry[2] = width + elseif k == "lines" then + properties.lines = scaninteger() + properties.shape = setmetatableindex(function(t,k) + local v = { 0, properties.width or 0 } + t[k] = v + return v + end) + elseif k == "first" then + properties[k] = scanboolean() + elseif k == "inspect" then + inspect(properties) + else + properties[k] = scannumeric() / bpfactor + end +end) + +implement { + name = "setparagraphmetashape", + public = true, + protected = true, + arguments = { "optional", "optional" }, -- array + actions = function(list,options) + if list and list ~= "" then + list = settings_to_array(list) -- array + options = settings_to_array(options) -- array + if #list > 0 then + parshapes = { } + properties = { } + for i=1,#list do + properties = { } + parshapes[i] = properties + expandmacro("spac_shapes_calculate","{"..list[i].."}") + end + local t, n = { }, 0 + for i=1,#parshapes do + local p = parshapes[i] + local s = p.shape + if s then + for i=1,(p.lines or #s) do + n = n + 1 + t[n] = s[i] + end + end + end + if n > 0 then + for i=1,#options do + t[options[i]] = true + end + texset("parshape",t) + end + end + end + end +} + +-- implement { +-- name = "resetparagraphmetashape", +-- public = true, +-- protected = true, +-- actions = function(list) +-- parshapes = { } +-- properties = { } +-- end +-- } + +implement { + name = "getshapeparameter", + public = true, + arguments = "string", + actions = function(name) + local index = texgetcount("shapetextindex") + local value = parshapes[index][name] + if type(value) == "boolean" then + value = value and 1 or 0 + end + context(value) + end +} diff --git a/tex/context/base/mkxl/typo-shp.mkxl b/tex/context/base/mkxl/typo-shp.mkxl new file mode 100644 index 000000000..295fe3e1b --- /dev/null +++ b/tex/context/base/mkxl/typo-shp.mkxl @@ -0,0 +1,125 @@ +%D \module +%D [ file=typo-shp, +%D version=2021.02.27, % was meta-txt / meta-imp-txt / 2000.07.06 +%D title=\CONTEXT\ Typesetting Macros, +%D subtitle=Paragraph Shapes, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE \& \CONTEXT\ Development Team}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D I finally decided to move some of the code written in 2000 for the +%D \METAFUN\ manual to its own core module. Of course it got adapted +%D to the way \LMTX\ does things. + +\writestatus{loading}{ConTeXt Spacing Macros / Paragraph Shapes} + +\registerctxluafile{typo-shp}{autosuffix} + +\unprotect + +%D Something new (experimental and evolving): +%D +%D \starttyping +%D \parshape +%D 3 +%D options 1 % repeat +%D 0cm 10cm 2cm 8cm 4cm 6cm +%D lots of text +%D \stoptyping +%D +%D \starttyping +%D \parshape 4 5mm 125mm 0mm 120mm 5mm 125mm 0mm 120mm +%D \pushparagraphtweak {repeat} +%D verse line 1\crlf +%D verse line 2\crlf +%D verse line 3\crlf +%D verse line 4\par +%D etc +%D \popparagraphtweak +%D \stoptyping + +%D But we wrap this in a more abstract interface: + +\installcorenamespace {parshapes} + +\aliased\let\stopparagraphshape\relax + +\permanent\protected\def\startparagraphshape[#1]#2\stopparagraphshape + {\defcsname\??parshapes#1\endcsname{#2}} + +\permanent\protected\def\rawparagraphshape#1% + {\begincsname\??parshapes#1\endcsname} + +\permanent\protected\def\setparagraphshape[#1]% + {\ifcsname\??parshapes#1\endcsname + \expandafter\clf_setparagraphshape\lastnamedcs done\relax + \fi} + +\def\spac_shapes_calculate#1% called locally in \LUA + {\startMPcalculation \includeMPgraphic{#1} \stopMPcalculation} + +\permanent\protected\tolerant\def\startshapedparagraph[#1]% no grouping + {\begingroup + \getdummyparameters[\c!method=,\c!list=,\c!mp=,\c!repeat=,#1]% + \edef\p_mp {\dummyparameter\c!mp}% + \edef\p_repeat{\dummyparameter\c!repeat}% + \normalexpanded + {\endgroup + \ifempty\p_mp + \setparagraphshape[\dummyparameter\c!list]% + \else + \setparagraphmetashape[\dummyparameter\c!mp][\ifx\p_repeat\v!yes repeat\fi]% + \fi + \pushparagraphtweak{\dummyparameter\c!method}\relax}} + +\permanent\protected\def\stopshapedparagraph + {\popparagraphtweak} + +%D As it is not much code we now put it here: + +\newbox \shapetextbox +\newcount\shapetextindex + +\permanent\protected\def\startshapetext[#1]% + {\begingroup + \global\shapetextindex\zerocount + \global\setbox\shapetextbox\vbox\bgroup + \setparagraphmetashape[#1]% + \forgetall + \dontcomplain + \setuptolerance[\v!verytolerant,\v!stretch]% default + % \setuplayout[\c!grid=\v!yes]% goes wrong, we need a local one + \pushparagraphtweak {shift}} + +\permanent\protected\def\stopshapetext + {\popparagraphtweak + \egroup + \endgroup} + +\permanent\protected\def\getshapetext + {\vbox\bgroup + \forgetall + \dontcomplain + \global\advance\shapetextindex\plusone + \scratchcounter\getshapeparameter{lines}\relax + \scratchwidth \getshapeparameter{width}\scaledpoint\relax + \scratchheight \getshapeparameter{height}\scaledpoint\relax + \setbox\scratchbox\vpack to \scratchheight + {\splittopskip\strutheight + \vskip\dimexpr\getshapeparameter{voffset}\scaledpoint\relax + \ifcase\numexpr\getshapeparameter{first}\relax\else + \vskip\lineheight + \fi + \hskip\dimexpr\getshapeparameter{hoffset}\scaledpoint\relax + \hpack{\vsplit\shapetextbox to \scratchcounter\lineheight}}% + \wd\scratchbox\scratchwidth + \ht\scratchbox\scratchheight + \dp\scratchbox\zeropoint + \box\scratchbox + \egroup} + +\protect diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 2880d77c0..c56b84c59 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 : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2021-02-27 19:27 +-- merge date : 2021-03-01 15:33 do -- begin closure to overcome local limits and interference |