diff options
43 files changed, 569 insertions, 269 deletions
diff --git a/tex/context/base/buff-ini.mkii b/tex/context/base/buff-ini.mkii index 0f0655ea1..fc147d090 100644 --- a/tex/context/base/buff-ini.mkii +++ b/tex/context/base/buff-ini.mkii @@ -188,15 +188,15 @@ \letvalue{\??bu#1\c!number }\nofdefinedbuffers \letvalue{\??bu#1\c!paragraph}\v!no \setevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}% - \setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}% - \setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}% + \unexpanded\setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}% + \unexpanded\setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}% \getparameters[\??bu#1][#2]% \fi} \def\definebuffer {\dodoubleempty\dodefinebuffer} -\def\getbuffer +\unexpanded\def\getbuffer {\dodoubleempty\dogetbuffer} \def\dogetbuffer[#1][#2]% @@ -213,7 +213,7 @@ \dobuffer{16}{#2}\dogetbufferasis \getvalue{\??bu#1\c!after}} -\def\typebuffer +\unexpanded\def\typebuffer {\dodoubleempty\dotypebuffer} \def\dogetfilebuffer{\typefile{\TEXbufferfile{\currentbuffer}}} diff --git a/tex/context/base/buff-ini.mkiv b/tex/context/base/buff-ini.mkiv index 0c258a81d..1cdeaa844 100644 --- a/tex/context/base/buff-ini.mkiv +++ b/tex/context/base/buff-ini.mkiv @@ -162,8 +162,8 @@ \letvalue{\??bu#1\c!number }\nofdefinedbuffers \letvalue{\??bu#1\c!paragraph}\v!no \setevalue{\e!start#1}{\noexpand\dostartbuffer[#1][def-\nofdefinedbuffers][\e!start#1][\e!stop#1]}% - \setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}% - \setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}% + \unexpanded\setevalue{\e!get #1}{\noexpand\dogetbuffer [#1][def-\nofdefinedbuffers]}% + \unexpanded\setevalue{\e!type #1}{\noexpand\dotypebuffer [#1][def-\nofdefinedbuffers]}% \getparameters[\??bu#1][#2]% \fi} diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 5f255585e..02117c4b8 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{2009.09.23 10:07} +\newcontextversion{2009.09.25 09:42} %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 387c8aa90..378a00873 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -315,12 +315,7 @@ \loadmarkfile{bibl-bib} \loadmarkfile{bibl-tra} -\loadcorefile{xtag-ini} % might go away -\loadcorefile{xtag-ext} % might go away -\loadcorefile{xtag-exp} % will go away -\loadcorefile{xtag-pre} % has old encoding code -\loadcorefile{xtag-xsd} % will go away (stub anyway) -\loadcorefile{xtag-rng} % will go away (stub anyway) +\loadmarkfile{x-xtag} % at some point this will nto be preloaded \loadcorefile{meta-xml} diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index 9ba4f8287..3bba2b9d0 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{2009.09.23 10:07} +\edef\contextversion{2009.09.25 09:42} %D For those who want to use this: diff --git a/tex/context/base/lxml-ini.lua b/tex/context/base/lxml-ini.lua index 8db90c960..d837dfd6d 100644 --- a/tex/context/base/lxml-ini.lua +++ b/tex/context/base/lxml-ini.lua @@ -58,7 +58,7 @@ end local traverse, lpath = xml.traverse, xml.lpath -local xmlfilter, xmlfirst, xmllast, xmlall = xml.filter, xml.first, xml.last, xml.all +local xmlfilter, xmlfirst, xmllast, xmlall, xmlcount = xml.filter, xml.first, xml.last, xml.all, xml.count local xmlcollect, xmlcontent, xmlcollect_texts, xmlcollect_tags, xmlcollect_elements = xml.collect, xml.content, xml.collect_texts, xml.collect_tags, xml.collect_elements local xmlattribute, xmlindex, xmlchainattribute = xml.filters.attribute, xml.filters.index, xml.filters.chainattribute @@ -460,9 +460,9 @@ function lxml.include(id,pattern,attribute,recurse) xml.include(get_id(id),pattern,attribute,recurse,function(filename) if filename then filename = commands.preparedfile(filename) -if file.dirname(filename) == "" then - filename = file.join(file.dirname(paths[currentdocument]),filename) -end + if file.dirname(filename) == "" then + filename = file.join(file.dirname(paths[currentdocument]),filename) + end if trace_loading then commands.writestatus("lxml","including file: %s",filename) end @@ -515,6 +515,7 @@ function lxml.strip(id,pattern,nolines) end function lxml.text(id,pattern) + -- we can avoid some steps by passing xmlsprint xmltprint(xmlcollect_texts(get_id(id),pattern) or {}) end @@ -614,7 +615,7 @@ function lxml.chainattribute(id,pattern,a,default) --todo: snelle xmlatt end function lxml.count(id,pattern) - texsprint(xml.count(get_id(id),pattern) or 0) + texsprint(xmlcount(get_id(id),pattern) or 0) end function lxml.nofelements(id) local e = get_id(id) @@ -653,7 +654,7 @@ end --~ end function lxml.concatrange(id,what,start,stop,separator,lastseparator) -- test this on mml - local t = xmlcollect_elements(lxml.id(id),what,true) -- ignorespaces + local t = xmlcollect_elements(get_id(id),what,true) -- ignorespaces local separator = separator or "" local lastseparator = lastseparator or separator or "" start, stop = (start == "" and 1) or tonumber(start) or 1, (stop == "" and #t) or tonumber(stop) or #t @@ -687,7 +688,7 @@ end -- we use a real tex.sprint, else spaces go wrong -- maybe just a .. because this happens often -function xml.command(root, command) +function lxml.serialize(root, command) local tc = type(command) if tc == "string" then -- setup @@ -699,7 +700,8 @@ function xml.command(root, command) --~ lxml.addindex(root) --~ ix = root.ix --~ end - texsprint(ctxcatcodes,format("\\xmlsetup{%s}{%s}",ix,command)) +--~ texsprint(ctxcatcodes,format("\\xmlsetup{%s}{%s}",ix,command)) + texsprint(ctxcatcodes,format("\\xmls{%s}{%s}",ix,command)) elseif tc == "function" then -- function command(root) @@ -713,6 +715,8 @@ function xml.command(root, command) end end +xml.setserializer(lxml.serialize) + function lxml.setaction(id,pattern,action) for rt, dt, dk in xmlelements(get_id(id),pattern) do dt[dk].command = action @@ -1292,19 +1296,21 @@ end local found, isempty = xml.found, xml.isempty -function lxml.doif (id,pattern) commands.doif (found(get_id(id),pattern,false)) end -function lxml.doifnot (id,pattern) commands.doifnot (found(get_id(id),pattern,false)) end -function lxml.doifelse (id,pattern) commands.doifelse(found(get_id(id),pattern,false)) end +local doif, doifnot, doifelse = commands.doif, commands.doifnot, commands.doifelse + +function lxml.doif (id,pattern) doif (found(get_id(id),pattern,false)) end +function lxml.doifnot (id,pattern) doifnot (found(get_id(id),pattern,false)) end +function lxml.doifelse (id,pattern) doifelse(found(get_id(id),pattern,false)) end -- todo: if no second arg or second arg == "" then quick test -function lxml.doiftext (id,pattern) commands.doif (found (get_id(id),pattern,true)) end -function lxml.doifnottext (id,pattern) commands.doifnot (found (get_id(id),pattern,true)) end -function lxml.doifelsetext (id,pattern) commands.doifelse(found (get_id(id),pattern,true)) end +function lxml.doiftext (id,pattern) doif (found (get_id(id),pattern,true)) end +function lxml.doifnottext (id,pattern) doifnot (found (get_id(id),pattern,true)) end +function lxml.doifelsetext (id,pattern) doifelse(found (get_id(id),pattern,true)) end -- special case: "*" and "" -> self else lpath lookup -function lxml.doifelseempty(id,pattern) commands.doifelse(isempty(get_id(id),pattern ~= "" and pattern ~= nil)) end -- not yet done, pattern +function lxml.doifelseempty(id,pattern) doifelse(isempty(get_id(id),pattern ~= "" and pattern ~= nil)) end -- not yet done, pattern -- status info diff --git a/tex/context/base/lxml-ini.mkiv b/tex/context/base/lxml-ini.mkiv index 81a611bf1..02703d2da 100644 --- a/tex/context/base/lxml-ini.mkiv +++ b/tex/context/base/lxml-ini.mkiv @@ -115,6 +115,8 @@ {\def\xmlself{#1}% % by using #1 inside a setup; maybe self becomes obsolete \setupwithargument{#2}{#1}} +\let\xmls\xmlsetup + \newtoks \registeredxmlsetups % todo: 1:xml:whatever alwas before 3:xml:something @@ -157,9 +159,6 @@ \def\xmlstarttiming{\ctxlua{statistics.starttiming(lxml)}} \def\xmlstoptiming {\ctxlua{statistics.stoptiming (lxml)}} -\def\xmlpushdocument#1{\ctxlua{lxml.pushdocument("#1")}} -\def\xmlpopdocument {\ctxlua{lxml.popdocument()}} - \def\doxmlprocess#1#2#3#4#5% {\begingroup \edef\xmldocument{#3}% #2 can be \xmldocument and set as such @@ -416,11 +415,13 @@ %D Experimental: -\def\xmladdindex #1{\ctxlua{lxml.addindex("#1")}} -\def\xmlgetindex #1{\ctxlua{lxml.getindex("\xmldocument","#1")}} -\def\xmlrawindex #1{\ctxlua{lxml.rawindex("#1")}} -\def\xmlwithindex#1#2{\ctxlua{lxml.withindex("\xmldocument","#1","#2")}} -\def\xmlreference#1#2{\string\xmlwithindex{#1}{#2}} +\def\xmlpushdocument#1{\ctxlua{lxml.pushdocument("#1")}} +\def\xmlpopdocument {\ctxlua{lxml.popdocument()}} +\def\xmladdindex #1{\ctxlua{lxml.addindex("#1")}} +\def\xmlgetindex #1{\ctxlua{lxml.getindex("\xmldocument","#1")}} +\def\xmlrawindex #1{\ctxlua{lxml.rawindex("#1")}} +\def\xmlwithindex #1#2{\ctxlua{lxml.withindex("\xmldocument","#1","#2")}} +\def\xmlreference #1#2{\string\xmlwithindex{#1}{#2}} \startxmlsetups xml:flush \xmlflush{#1} diff --git a/tex/context/base/lxml-pth.lua b/tex/context/base/lxml-pth.lua index ab78af1dc..e0520edbd 100644 --- a/tex/context/base/lxml-pth.lua +++ b/tex/context/base/lxml-pth.lua @@ -17,11 +17,7 @@ functions that set the tracers. Here we overload a previously defined function.</p> --ldx]]-- -local trace_lpath = false - -if trackers then - trackers.register("xml.lpath", function(v) trace_lpath = v end) -end +local trace_lpath = false if trackers then trackers.register("xml.lpath", function(v) trace_lpath = v end) end local settrace = xml.settrace -- lxml-tab @@ -797,17 +793,19 @@ local r, d, k = xml.filter(root,"/a/b/c/position(4)" </typing> --ldx]]-- +xml.filters = { } + local traverse, lpath, convert = xml.traverse, xml.lpath, xml.convert -xml.filters = { } +local filters = xml.filters -function xml.filters.default(root,pattern) +function filters.default(root,pattern) local rt, dt, dk traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end) return dt and dt[dk], rt, dt, dk end -function xml.filters.attributes(root,pattern,arguments) +function filters.attributes(root,pattern,arguments) local rt, dt, dk traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk = r, d, k return true end) local ekat = (dt and dt[dk] and dt[dk].at) or (rt and rt.at) @@ -828,7 +826,7 @@ local rt, dt, dk local function action(r,d,k) rt, dt, dk = r, d, k return true end -function xml.filters.chainattribute(root,pattern,arguments) -- todo: optional levels +function filters.chainattribute(root,pattern,arguments) -- todo: optional levels rt, dt, dk = nil, nil, nil traverse(root, lpath(pattern), action) local dtk = dt and dt[dk] @@ -852,13 +850,13 @@ end -- -function xml.filters.reverse(root,pattern) +function filters.reverse(root,pattern) local rt, dt, dk traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end, 'reverse') return dt and dt[dk], rt, dt, dk end -function xml.filters.count(root,pattern,everything) +function filters.count(root,pattern,everything) local n = 0 traverse(root, lpath(pattern), function(r,d,t) if everything or type(d[t]) == "table" then @@ -868,7 +866,19 @@ function xml.filters.count(root,pattern,everything) return n end -function xml.filters.elements(root, pattern) -- == all +--~ local n = 0 +--~ local function doit(r,d,t) +--~ if everything or type(d[t]) == "table" then +--~ n = n + 1 +--~ end +--~ end +--~ function filters.count(root,pattern,everything) +--~ n = 0 +--~ traverse(root, lpath(pattern), doit) +--~ return n +--~ end + +function filters.elements(root, pattern) -- == all local t = { } traverse(root, lpath(pattern), function(r,d,k) local e = d[k] @@ -879,7 +889,7 @@ function xml.filters.elements(root, pattern) -- == all return t end -function xml.filters.texts(root, pattern) +function filters.texts(root, pattern) local t = { } traverse(root, lpath(pattern), function(r,d,k) local e = d[k] @@ -890,19 +900,19 @@ function xml.filters.texts(root, pattern) return t end -function xml.filters.first(root,pattern) +function filters.first(root,pattern) local rt, dt, dk traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end) return dt and dt[dk], rt, dt, dk end -function xml.filters.last(root,pattern) +function filters.last(root,pattern) local rt, dt, dk traverse(root, lpath(pattern), function(r,d,k) rt,dt,dk = r,d,k return true end, 'reverse') return dt and dt[dk], rt, dt, dk end -function xml.filters.index(root,pattern,arguments) +function filters.index(root,pattern,arguments) local rt, dt, dk, reverse, i = nil, nil, nil, false, tonumber(arguments or '1') or 1 if i and i ~= 0 then if i < 0 then @@ -916,16 +926,25 @@ function xml.filters.index(root,pattern,arguments) return nil, nil, nil, nil end -function xml.filters.attribute(root,pattern,arguments) - local rt, dt, dk - traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk = r, d, k return true end) - local ekat = (dt and dt[dk] and dt[dk].at) or (rt and rt.at) - -- return (ekat and (ekat[arguments] or ekat[gsub(arguments,"^([\"\'])(.*)%1$","%2")])) or "" +--~ function filters.attribute(root,pattern,arguments) +--~ local rt, dt, dk +--~ traverse(root, lpath(pattern), function(r,d,k) rt, dt, dk = r, d, k return true end) +--~ local ekat = (dt and dt[dk] and dt[dk].at) or (rt and rt.at) +--~ return (ekat and (ekat[arguments] or (find(arguments,"^[\'\"]") and ekat[sub(arguments,2,-2)]))) or "" +--~ end + +local rt, dt, dk +local function doit(r,d,k) rt, dt, dk = r, d, k return true end +function filters.attribute(root,pattern,arguments) + rt, dt, dk = nil, nil, nil + traverse(root, lpath(pattern), doit) + local dtk = dt and dt[k] + local ekat = (dtk and dtk.at) or (rt and rt.at) return (ekat and (ekat[arguments] or (find(arguments,"^[\'\"]") and ekat[sub(arguments,2,-2)]))) or "" end -function xml.filters.text(root,pattern,arguments) -- ?? why index, tostring slow - local dtk, rt, dt, dk = xml.filters.index(root,pattern,arguments) +function filters.text(root,pattern,arguments) -- ?? why index, tostring slow + local dtk, rt, dt, dk = filters.index(root,pattern,arguments) if dtk then -- n local dtkdt = dtk.dt if not dtkdt then @@ -940,7 +959,7 @@ function xml.filters.text(root,pattern,arguments) -- ?? why index, tostring slow end end -function xml.filters.tag(root,pattern,n) +function filters.tag(root,pattern,n) local tag = "" traverse(root, lpath(pattern), function(r,d,k) tag = xml.functions.tag(d,k,n and tonumber(n)) @@ -949,7 +968,7 @@ function xml.filters.tag(root,pattern,n) return tag end -function xml.filters.name(root,pattern,n) +function filters.name(root,pattern,n) local tag = "" traverse(root, lpath(pattern), function(r,d,k) tag = xml.functions.name(d,k,n and tonumber(n)) @@ -1054,13 +1073,13 @@ function xml.collect_texts(root, pattern, flatten) if tx then t[#t+1] = xml.tostring(tx) or "" else - t[#t+1] = "" + t[#t+1] = "" -- hm end else t[#t+1] = tx or "" end else - t[#t+1] = "" + t[#t+1] = "" -- hm end end) return t @@ -1068,7 +1087,7 @@ end function xml.collect_tags(root, pattern, nonamespace) local t = { } - xml.traverse(root, xml.lpath(pattern), function(r,d,k) + xml.traverse(root, lpath(pattern), function(r,d,k) local dk = d and d[k] if dk and type(dk) == "table" then local ns, tg = e.ns, e.tg @@ -1128,6 +1147,11 @@ function xml.each_element(root, pattern, handle, reverse) return ok end +--~ todo: +--~ +--~ function xml.process_elements(root, pattern, handle) +--~ traverse(root, lpath(pattern), fnc, nil, nil, nil, handle) -> fnc gets r, d, k and handle (...) passed + function xml.process_elements(root, pattern, handle) traverse(root, lpath(pattern), function(r,d,k) local dkdt = d[k].dt diff --git a/tex/context/base/lxml-tab.lua b/tex/context/base/lxml-tab.lua index 407950086..52e04befd 100644 --- a/tex/context/base/lxml-tab.lua +++ b/tex/context/base/lxml-tab.lua @@ -500,6 +500,12 @@ alternative.</p> local fallbackhandle = (tex and tex.sprint) or io.write +local serializer + +function xml.setserializer(f) + serializer = f +end + local function serialize(e, handle, textconverter, attributeconverter, specialconverter, nocommands) if not e then return @@ -519,9 +525,8 @@ local function serialize(e, handle, textconverter, attributeconverter, specialco end end end - local xc = xml.command - if xc then - xc(e,ec) + if serializer then + serializer(e,ec) return end end diff --git a/tex/context/base/m-chart.mkii b/tex/context/base/m-chart.mkii new file mode 100644 index 000000000..2554fa2d4 --- /dev/null +++ b/tex/context/base/m-chart.mkii @@ -0,0 +1,48 @@ +%D \module +%D [ file=m-chart, +%D version=1998.10.10, +%D title=\CONTEXT\ Modules, +%D subtitle=Flow Charts, +%D author={Hans Hagen \& Ton Otten}, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D The \XML\ interface: + +\unprotect + +\startXMLdefinitions flowchart + +\defineXMLargument [flowchartdefinition] + {\defineFLOWchart[\XMLpar{flowchartdefinition}{identifier}{unknown}]} + +\defineXMLpickup [flowcell] + {\startFLOWcell + \defineXMLargument[name]{\unspaceafter\name}% + \defineXMLargument[shape]{\unspaceafter\shape}% + \defineXMLnestedargument[text]{\text}} + {\stopFLOWcell} + +\defineXMLenvironment [location] % global unspace/store + {\bgroup\defineXMLpush[x]\defineXMLpush[y]} + {\XMLunspace{x}\XMLunspace{y}% + \expanded{\egroup\noexpand\location{\XMLpop{x},\XMLpop{y}}}} + +\defineXMLenvironment [connection] + {\bgroup\defineXMLpush[type]\defineXMLpush[name]}% + {\XMLunspace{type}\XMLunspace{name}% + \expanded{\egroup\noexpand\connection[\XMLpop{type}]{\XMLpop{name}}}} + +\defineXMLsingular [flowchart] + {\expanded{\FLOWchart[\XMLpar{flowchart}{identifier}{unknown}]}} + +\defineXMLdirective [flowchart] [shapes] \setupFLOWshapes +\defineXMLdirective [flowchart] [lines] \setupFLOWlines + +\stopXMLdefinitions + +\protect \endinput diff --git a/tex/context/base/m-chart.mkiv b/tex/context/base/m-chart.mkiv new file mode 100644 index 000000000..4c008a5ee --- /dev/null +++ b/tex/context/base/m-chart.mkiv @@ -0,0 +1,20 @@ +%D \module +%D [ file=m-chart, +%D version=1998.10.10, +%D title=\CONTEXT\ Modules, +%D subtitle=Flow Charts, +%D author={Hans Hagen \& Ton Otten}, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D The \XML\ interface: + +\unprotect + +\writestatus\m!systems{The chart mkiv xml interface is not yet defined!} + +\protect \endinput diff --git a/tex/context/base/m-chart.tex b/tex/context/base/m-chart.tex index c8928f2d5..5ccf4c2ad 100644 --- a/tex/context/base/m-chart.tex +++ b/tex/context/base/m-chart.tex @@ -15,8 +15,8 @@ % todo: make mkiv variant % todo: use dimexpr/numspr -% will be redone with layers and dimexpr ro even better, by just using -% textext +% will be redone with layers and dimexpr or even better, by just using +% textext .. a nice example of old code %D This is an experimental module. Pieces of code will be moved %D to other modules. More features are possible but will be @@ -1280,36 +1280,6 @@ % \def\processFLOWbuffer#1{\getvalue{\FLOWbufferprefix#1}} % \def\typeFLOWbuffer #1{[Sorry, no verbatim chart #1 available.]} -%D The XML interface [will be mode protected or separate x-chart file] - -\startXMLdefinitions flowchart - -\defineXMLargument [flowchartdefinition] - {\defineFLOWchart[\XMLpar{flowchartdefinition}{identifier}{unknown}]} - -\defineXMLpickup [flowcell] - {\startFLOWcell - \defineXMLargument[name]{\unspaceafter\name}% - \defineXMLargument[shape]{\unspaceafter\shape}% - \defineXMLnestedargument[text]{\text}} - {\stopFLOWcell} - -\defineXMLenvironment [location] % global unspace/store - {\bgroup\defineXMLpush[x]\defineXMLpush[y]} - {\XMLunspace{x}\XMLunspace{y}% - \expanded{\egroup\noexpand\location{\XMLpop{x},\XMLpop{y}}}} - -\defineXMLenvironment [connection] - {\bgroup\defineXMLpush[type]\defineXMLpush[name]}% - {\XMLunspace{type}\XMLunspace{name}% - \expanded{\egroup\noexpand\connection[\XMLpop{type}]{\XMLpop{name}}}} - -\defineXMLsingular [flowchart] - {\expanded{\FLOWchart[\XMLpar{flowchart}{identifier}{unknown}]}} - -\defineXMLdirective [flowchart] [shapes] \setupFLOWshapes -\defineXMLdirective [flowchart] [lines] \setupFLOWlines - -\stopXMLdefinitions +\loadmarkfile{m-chart} \protect \endinput diff --git a/tex/context/base/m-punk.tex b/tex/context/base/m-punk.mkiv index 3b1baa75b..3b1baa75b 100644 --- a/tex/context/base/m-punk.tex +++ b/tex/context/base/m-punk.mkiv diff --git a/tex/context/base/m-steps.mkii b/tex/context/base/m-steps.mkii new file mode 100644 index 000000000..3e1f86312 --- /dev/null +++ b/tex/context/base/m-steps.mkii @@ -0,0 +1,83 @@ +%D \module +%D [ file=m-steps, +%D version=2001.05.28, +%D title=\CONTEXT\ Modules, +%D subtitle=Step Charts \& Tables, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D The \XML\ interface: + +\unprotect + +\defineXMLdirective [stepchart] [charts] \setupSTEPcharts +\defineXMLdirective [stepchart] [cells] \setupSTEPcells +\defineXMLdirective [stepchart] [texts] \setupSTEPtexts +\defineXMLdirective [stepchart] [lines] \setupSTEPlines + +\defineXMLdirective [steptable] [tables] \setupSTEPtables +\defineXMLdirective [steptable] [cells] \setupSTEPcells +\defineXMLdirective [steptable] [texts] \setupSTEPtexts +\defineXMLdirective [steptable] [lines] \setupSTEPlines + +\defineXMLpickup[stepchart][@@STPC] + {\bgroup + \defineXMLpush[top]% + \defineXMLpush[bot]% + \defineXMLenvironment[lines][@@STEL] + {\expanded{\startlines[\theXMLarguments{@@STEL}]}} + {\stoplines}% + \defineXMLenvironment[cells][@@STEC] + {\XMLerase{top}\XMLerase{bot}} + {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{top}}{\XMLpop{bot}}}}% + \defineXMLenvironment[texts][@@STET] + {\XMLerase{top}\XMLerase{bot}} + {\expanded{\texts[\theXMLarguments{@@STET}]{\XMLpop{top}}{\XMLpop{bot}}}}% + \defineXMLenvironmentpush[cell][@@STEC] + {\XMLerase{cell}} + {\expanded{\cell [\theXMLarguments{@@STEC}]{\XMLpop{cell}}}}% + \defineXMLenvironmentpush [text] [@@STET] + {\XMLerase{text}} + {\expanded{\text [\theXMLarguments{@@STET}]{\XMLpop{text}}}}% + \expanded{\startSTEPchart[\theXMLarguments{@@STPC}]}} + {\stopSTEPchart + \egroup} + +\defineXMLpickup[steptable][@@STPT] + {\bgroup + \defineXMLenvironment[lines][@@STEL] + {\expanded{\startlines[\theXMLarguments{@@STEL}]}} + {\stoplines}% + \defineXMLargument[cell][@@STEC] + {\expanded{\cell[\theXMLarguments{@@STEC}]}}% + \defineXMLargument[text][@@STET] + {\expanded{\text[\theXMLarguments{@@STET}]}}% + \defineXMLargument[prep] + {\prep}% + \expanded{\startSTEPtable[\theXMLarguments{@@STPT}]}} + {\stopSTEPtable + \egroup} + +\defineXMLpickup[stepaligntable][@@STPT] + {\bgroup + \defineXMLenvironment[lines][@@STEL] + {\expanded{\setupSTEPlines[\theXMLarguments{@@STEL}]}} + {}% + \defineXMLpush[c1]\defineXMLpush[c2]\defineXMLpush[c3]% + \defineXMLenvironment[cells][@@STEC] + {\XMLerase{c1}\XMLerase{c1}\XMLerase{c3}} + {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{c1}}{\XMLpop{c2}}{\XMLpop{c3}}}}% + \defineXMLargument[text][@@STET] + {\expanded{\text[\theXMLarguments{@@STET}]}}% + \defineXMLargument[prep] + {\prep}% + \expanded{\startSTEPaligntable[\theXMLarguments{@@STPT}]}} + {\stopSTEPaligntable + \egroup} + +\protect \endinput diff --git a/tex/context/base/m-steps.mkiv b/tex/context/base/m-steps.mkiv new file mode 100644 index 000000000..9bb56c532 --- /dev/null +++ b/tex/context/base/m-steps.mkiv @@ -0,0 +1,20 @@ +%D \module +%D [ file=m-steps, +%D version=2001.05.28, +%D title=\CONTEXT\ Modules, +%D subtitle=Step Charts \& Tables, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D The \XML\ interface: + +\unprotect + +\writestatus\m!systems{The steps mkiv xml interface is not yet defined!} + +\protect \endinput diff --git a/tex/context/base/m-steps.tex b/tex/context/base/m-steps.tex index 1e2f5d97d..1f6a37403 100644 --- a/tex/context/base/m-steps.tex +++ b/tex/context/base/m-steps.tex @@ -116,18 +116,6 @@ %D ... -\defineXMLdirective [stepchart] [charts] \setupSTEPcharts -\defineXMLdirective [stepchart] [cells] \setupSTEPcells -\defineXMLdirective [stepchart] [texts] \setupSTEPtexts -\defineXMLdirective [stepchart] [lines] \setupSTEPlines - -\defineXMLdirective [steptable] [tables] \setupSTEPtables -\defineXMLdirective [steptable] [cells] \setupSTEPcells -\defineXMLdirective [steptable] [texts] \setupSTEPtexts -\defineXMLdirective [steptable] [lines] \setupSTEPlines - -%D ... - \presetlocalframed[\@@STPF] \def\@@stepcell#1% @@ -664,31 +652,6 @@ \@@STELalternative, get_step_chart_bot_line(#1,#2), \@@STELrulethickness, \MPcolor{\@@STELcolor} ) )} -%D \XML\ coupling. - -\defineXMLpickup[stepchart][@@STPC] - {\bgroup - \defineXMLpush[top]% - \defineXMLpush[bot]% - \defineXMLenvironment[lines][@@STEL] - {\expanded{\startlines[\theXMLarguments{@@STEL}]}} - {\stoplines}% - \defineXMLenvironment[cells][@@STEC] - {\XMLerase{top}\XMLerase{bot}} - {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{top}}{\XMLpop{bot}}}}% - \defineXMLenvironment[texts][@@STET] - {\XMLerase{top}\XMLerase{bot}} - {\expanded{\texts[\theXMLarguments{@@STET}]{\XMLpop{top}}{\XMLpop{bot}}}}% - \defineXMLenvironmentpush[cell][@@STEC] - {\XMLerase{cell}} - {\expanded{\cell [\theXMLarguments{@@STEC}]{\XMLpop{cell}}}}% - \defineXMLenvironmentpush [text] [@@STET] - {\XMLerase{text}} - {\expanded{\text [\theXMLarguments{@@STET}]{\XMLpop{text}}}}% - \expanded{\startSTEPchart[\theXMLarguments{@@STPC}]}} - {\stopSTEPchart - \egroup} - %D Step tables are the vertical counterpart of stepcharts. \newcounter\currentsteptable @@ -846,38 +809,6 @@ \@@STELalternative, get_step_table_line(\cellcounter), \@@STELrulethickness, \MPcolor{\@@STELcolor} ) )} -\defineXMLpickup[steptable][@@STPT] - {\bgroup - \defineXMLenvironment[lines][@@STEL] - {\expanded{\startlines[\theXMLarguments{@@STEL}]}} - {\stoplines}% - \defineXMLargument[cell][@@STEC] - {\expanded{\cell[\theXMLarguments{@@STEC}]}}% - \defineXMLargument[text][@@STET] - {\expanded{\text[\theXMLarguments{@@STET}]}}% - \defineXMLargument[prep] - {\prep}% - \expanded{\startSTEPtable[\theXMLarguments{@@STPT}]}} - {\stopSTEPtable - \egroup} - -\defineXMLpickup[stepaligntable][@@STPT] - {\bgroup - \defineXMLenvironment[lines][@@STEL] - {\expanded{\setupSTEPlines[\theXMLarguments{@@STEL}]}} - {}% - \defineXMLpush[c1]\defineXMLpush[c2]\defineXMLpush[c3]% - \defineXMLenvironment[cells][@@STEC] - {\XMLerase{c1}\XMLerase{c1}\XMLerase{c3}} - {\expanded{\cells[\theXMLarguments{@@STEC}]{\XMLpop{c1}}{\XMLpop{c2}}{\XMLpop{c3}}}}% - \defineXMLargument[text][@@STET] - {\expanded{\text[\theXMLarguments{@@STET}]}}% - \defineXMLargument[prep] - {\prep}% - \expanded{\startSTEPaligntable[\theXMLarguments{@@STPT}]}} - {\stopSTEPaligntable - \egroup} - \protect \endinput % A simple paragraph-flow test: diff --git a/tex/context/base/page-ini.mkiv b/tex/context/base/page-ini.mkiv index 96590d9a1..476acfd1e 100644 --- a/tex/context/base/page-ini.mkiv +++ b/tex/context/base/page-ini.mkiv @@ -706,7 +706,8 @@ \v!frame=>\chardef\gridboxlinemode \plusthree, \v!nonumber=>\chardef\gridboxlinenomode\zerocount, \v!right=>\chardef\gridboxlinenomode\plusone, - \v!left=>\chardef\gridboxlinenomode\plustwo]% + \v!left=>\chardef\gridboxlinenomode\plustwo, + \v!outer=>\chardef\gridboxlinenomode\plusthree]% \ifcase\showgridstate \let\addtextgridlayer\gobbleoneargument \else % 1=bottom 2=top @@ -1230,8 +1231,6 @@ \def\dodefinepagebreak[#1][#2]% non recursive, meant for simple mappings {\setvalue{\??pe::#1}{#2}} -% hier nog uti blokkeren - % don't change this / test case: % % \setupbackgrounds[state=repeat] diff --git a/tex/context/base/spac-ver.lua b/tex/context/base/spac-ver.lua index 712307626..a5daa96f1 100644 --- a/tex/context/base/spac-ver.lua +++ b/tex/context/base/spac-ver.lua @@ -75,7 +75,7 @@ vspacing.data.snapmethods = vspacing.data.snapmethods or { } storage.register("vspacing/data/snapmethods", vspacing.data.snapmethods, "vspacing.data.snapmethods") -local snapmethods, snapht, snapdp, snaphtdp = vspacing.data.snapmethods, 0, 0, 0 +local snapmethods = vspacing.data.snapmethods local default = { maxheight = true, @@ -132,6 +132,8 @@ function vspacing.define_snap_method(name,method) tex.write(n) end +local snapht, snapdp, snaphtdp = 0, 0, 0 + function vspacing.freeze_snap_method(ht,dp) snapht, snapdp = ht or texdimen.bodyfontstrutheight, dp or texdimen.bodyfontstrutdepth snaphtdp = snapht + snapdp @@ -241,6 +243,7 @@ vspacing.categories = { [5] = 'disable', [6] = 'nowhite', [7] = 'goback', + [8] = 'together' } local categories = vspacing.categories @@ -291,6 +294,9 @@ do -- todo: interface.variables local k_fixed, k_flexible, k_category, k_penalty, k_order = variables.fixed, variables.flexible, "category", "penalty", "order" + -- This will change: just node.write and we can store the values in skips which + -- then obeys grouping + local function analyse(str,oldcategory,texsprint) for s in gmatch(str,"([^ ,]+)") do local amount, keyword, detail = splitter:match(s) @@ -512,7 +518,7 @@ local skips = { local free_glue_node = free_node local free_glue_spec = free_node -local discard, largest, force, penalty, add, disable, nowhite, goback = 0, 1, 2, 3, 4, 5, 6, 7 +local discard, largest, force, penalty, add, disable, nowhite, goback, together = 0, 1, 2, 3, 4, 5, 6, 7, 8 function vspacing.snap_box(n,how) local sv = snapmethods[how] @@ -520,10 +526,18 @@ function vspacing.snap_box(n,how) local list = texbox[n].list --~ if list and (list.id == hlist or list.id == vlist) then if list then - local h, d, ch, cd, lines = snap_hlist(list,sv,texht[n],texdp[n]) - texht[n], texdp[n] = ch, cd - if trace_vsnapping then - logs.report("snapper", "hlist snapped from (%s,%s) to (%s,%s) using method '%s' (%s) for '%s' (%s lines)",h,d,ch,cd,sv.name,sv.specification,"direct",lines) + local s = has_attribute(list,snap_method) + if s == 0 then + if trace_vsnapping then + logs.report("snapper", "hlist not snapped, already done") + end + else + local h, d, ch, cd, lines = snap_hlist(list,sv,texht[n],texdp[n]) + texht[n], texdp[n] = ch, cd + if trace_vsnapping then + logs.report("snapper", "hlist snapped from (%s,%s) to (%s,%s) using method '%s' (%s) for '%s' (%s lines)",h,d,ch,cd,sv.name,sv.specification,"direct",lines) + end + set_attribute(list,snap_method,0) end end end @@ -552,10 +566,15 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail reset_tracing(head) trace_info("start analyzing",where,what) end - local current = head + local current, oldhead = head, head + snapht, snapdp = ht or texdimen.bodyfontstrutheight, dp or texdimen.bodyfontstrutdepth + snaphtdp = snapht + snapdp local glue_order, glue_data, force_glue = 0, nil, false local penalty_order, penalty_data, natural_penalty = 0, nil, nil - local parskip, ignore_parskip, ignore_following, ignore_whitespace = nil, false, false, false + local parskip, ignore_parskip, ignore_following, ignore_whitespace, keep_together = nil, false, false, false, false + -- + -- todo: keep_together: between headers + -- local function flush(why) if penalty_data then local p = make_penalty_node(penalty_data) @@ -584,24 +603,25 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail if id == hlist or id == vlist then if snap then local s = has_attribute(current,snap_method) - if s then - unset_attribute(current,snap_method) - if not has_attribute(current,snap_done) then - local sv = snapmethods[s] - if sv then - local h, d, ch, cd, lines = snap_hlist(current,sv) - if trace_vsnapping then - logs.report("snapper", "hlist snapped from (%s,%s) to (%s,%s) using method '%s' (%s) for '%s' (%s lines)",h,d,ch,cd,sv.name,sv.specification,where,lines) - end - elseif trace_vsnapping then - logs.report("snapper", "hlist not snapped due to unknown snap specification") + if not s then + -- if trace_vsnapping then + -- logs.report("snapper", "hlist not snapped") + -- end + elseif s == 0 then + if trace_vsnapping then + logs.report("snapper", "hlist not snapped, already done") + end + else + local sv = snapmethods[s] + if sv then + local h, d, ch, cd, lines = snap_hlist(current,sv) + if trace_vsnapping then + logs.report("snapper", "hlist snapped from (%s,%s) to (%s,%s) using method '%s' (%s) for '%s' (%s lines)",h,d,ch,cd,sv.name,sv.specification,where,lines) end - set_attribute(current,snap_done,s) elseif trace_vsnapping then - logs.report("snapper", "hlist not snapped, already done") + logs.report("snapper", "hlist not snapped due to unknown snap specification") end - elseif trace_vsnapping then - -- logs.report("snapper", "hlist not snapped") + set_attribute(current,snap_method,0) end else -- @@ -636,6 +656,7 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail elseif penalty_order == so and sp > penalty_data then penalty_data = sp end + if trace then trace_skip('penalty in skip',sc,so,sp,current) end head, current = remove_node(head, current, true) elseif not sc then -- if not sc then if glue_data then @@ -677,6 +698,10 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail ignore_following = true if trace then trace_skip("disable",sc,so,sp,current) end head, current = remove_node(head, current, true) + elseif sc == together then + keep_together = true + if trace then trace_skip("together",sc,so,sp,current) end + head, current = remove_node(head, current, true) elseif sc == nowhite then ignore_whitespace = true head, current = remove_node(head, current, true) @@ -745,9 +770,9 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail end elseif subtype == line_skip then if snap then - local sn = has_attribute(current,snap_method) - if sn then - unset_attribute(current,snap_method) + local s = has_attribute(current,snap_method) + if s and s ~= 0 then + set_attribute(current,snap_method,0) local spec = current.spec if spec then spec.width = 0 @@ -766,9 +791,9 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail current = current.next elseif subtype == baseline_skip then if snap then - local sn = has_attribute(current,snap_method) - if sn then - unset_attribute(current,snap_method) + local s = has_attribute(current,snap_method) + if s and s ~= 0 then + set_attribute(current,snap_method,0) local spec = current.spec if spec then spec.width = 0 @@ -806,8 +831,8 @@ local function collapser(head,where,what,trace,snap) -- maybe also pass tail elseif subtype == top_skip_code or subtype == split_top_skip_code then if snap then local s = has_attribute(current,snap_method) - if s then - unset_attribute(current,snap_method) + if s and s ~= 0 then + set_attribute(current,snap_method,0) local sv = snapmethods[s] local w, cw = snap_topskip(current,sv) if trace_vsnapping then @@ -886,6 +911,9 @@ current = current.next trace_info("stop flushing",where,what) end show_tracing(head) + if oldhead ~= head then + trace_info("head has been changed from '%s' to '%s'",node.type(oldhead.id),node.type(head.id)) + end end return head, true end diff --git a/tex/context/base/spac-ver.mkiv b/tex/context/base/spac-ver.mkiv index 8849d71c1..15e37d61a 100644 --- a/tex/context/base/spac-ver.mkiv +++ b/tex/context/base/spac-ver.mkiv @@ -1274,13 +1274,24 @@ \resetsnapvalue \dowithnextbox{\dododosnaptogrid{#1}}} +% eventually there will always be a line snap + \def\dododosnaptogrid#1% {\ifvbox\nextbox \ctxlua{nodes.collapse_vbox(\number\nextbox)}% \fi \doifelsenothing{#1}{\setsnapvalue\v!normal}{\autosetsnapvalue{#1}}% \ctxlua{vspacing.snap_box(\number\nextbox,\number\attribute\snapmethodattribute)}% - \box\nextbox +% \ifzeropt\ht\nextbox +% \ifzeropt\dp\nextbox +% \box\nextbox % here, else empty and zero +% \kern-\bodyfontlineheight +% \else +% \box\nextbox +% \fi +% \else + \box\nextbox +% \fi \egroup} % no off @@ -1322,8 +1333,8 @@ \hss}% \flushnextbox}}} -\chardef\gridboxlinenomode\plusone -\chardef\gridboxlinemode \plusone % 0:nothing 1:all 2:lines 3:frame +\chardef\gridboxlinenomode\plusone % 0:nothing 1:all 2:lines 3:frame 4:l/r +\chardef\gridboxlinemode \plusone \def\gridboxvbox {\ifcase\gridboxlinemode\vbox\or\ruledvbox\or\vbox\or\ruledvbox\else\ruledvbox\fi} \def\gridboxwidth{\ifcase\gridboxlinemode0\or.5\or.5\or0\else.5\fi\testrulewidth} @@ -1335,6 +1346,9 @@ \offinterlineskip \hsize#2% \baselinerulefalse + \ifnum\gridboxlinenomode=\plusthree + \chardef\gridboxlinenomode\ifodd\realpageno\plusone\else\plustwo\fi + \fi \gridboxvbox % calculated size {\getrawnoflines{#3}% \getnoflines{#3}% % \ifgridsnapping \else @@ -1588,7 +1602,7 @@ \fi\fi \relax} -\definevspacing[\v!samepage][penalty:10000] +\definevspacing[\v!samepage][penalty:10000] % real strong \definevspacing[\v!max] [category:1] \definevspacing[\v!force] [category:2] \definevspacing[\v!disable] [category:5] @@ -1600,6 +1614,9 @@ \definevspacing[\s!default] [\v!white] % was big for a while +\dorecurse{10} % todo: other values < 4000 + {\expanded{\definevspacing[\v!samepage-\recurselevel][penalty:\the\numexpr4000+250*\recurselevel\relax]}} + \setfalse\vspacingenabled \newtoks\everyenablevspacing diff --git a/tex/context/base/strc-itm.mkiv b/tex/context/base/strc-itm.mkiv index 315fb8236..b76abb9ed 100644 --- a/tex/context/base/strc-itm.mkiv +++ b/tex/context/base/strc-itm.mkiv @@ -230,10 +230,10 @@ \ifx\itemgroupconstantvalue\empty\else \splitstring\itemgroupconstantvalue\at*\to\itemgroupfirst\and\itemgroupsecond \ifx\itemgroupsecond\empty - \ifcsname\??op:::\itemgroupfirst\endcsname\csname\??op:::\itemgroupfirst\endcsname\fi - \else - \ifcsname\??op:::\itemgroupsecond\endcsname\csname\??op:::\itemgroupsecond\endcsname\fi + \let\itemgroupsecond\itemgroupfirst + \let\itemgroupfirst\!!plusone \fi + \ifcsname\??op:::\itemgroupsecond\endcsname\csname\??op:::\itemgroupsecond\endcsname\fi \fi} \newconditional\inlinelistitem \setfalse\inlinelistitem @@ -913,7 +913,7 @@ \else \scratchdimen\zeropoint \fi - \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+}\fi\box\itemgroupitembox\hss}}% was: \hfill + \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+\enspace}\fi\box\itemgroupitembox\hss}}% was: \hfill \hskip\scratchdimen} \def\optimizelistitemsbreak @@ -982,7 +982,7 @@ % so that content differs per run (esp mp graphics afterwards) \checkforrepeatedlistitem \ifdim\itemgroupaskedwidth<\zeropoint\relax - \llap{\ifconditional\sublistitem\llap{+}\fi\box\itemgroupitembox\hskip\leftmargindistance}% + \llap{\ifconditional\sublistitem\llap{+\enspace}\fi\box\itemgroupitembox\hskip\leftmargindistance}% \else \ifdim\itemgroupaskedwidth=\zeropoint\relax \calculatelistwidth1% @@ -990,14 +990,14 @@ \calculatelistwidth\currentitemlevel \fi \ifconditional\textlistitem - \hbox{\ifconditional\sublistitem+\fi\box\itemgroupitembox\hskip\interwordspace}\nobreak + \hbox{\ifconditional\sublistitem+\enspace\fi\box\itemgroupitembox\hskip\interwordspace}\nobreak \else\ifconditional\inlinelistitem - \hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+}\fi\box\itemgroupitembox\hss}% was: \hfill + \hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+\enspace}\fi\box\itemgroupitembox\hss}% was: \hfill \else\ifconditional\txtlistitem \dodotxtitem \else % todo: align+marge binnen de hbox - \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+}\fi + \llap{\hbox to \itemgrouplistwidth{\ifconditional\sublistitem\llap{+\enspace}\fi \symalignleft \box\itemgroupitembox\hfil \hskip\getitemparameter\currentitemlevel\c!distance% T h diff --git a/tex/context/base/strc-not.mkiv b/tex/context/base/strc-not.mkiv index 48c48caa0..4598be00c 100644 --- a/tex/context/base/strc-not.mkiv +++ b/tex/context/base/strc-not.mkiv @@ -993,8 +993,11 @@ \def\doaddtototalnoteheight#1% {\ifdim\ht#1>\zeropoint - \advance\totalnoteheight\ht #1% - \advance\totalnoteheight\skip#1% + \ifcase\count#1\else + % todo: divide by count + \advance\totalnoteheight\ht #1% + \advance\totalnoteheight\skip#1% + \fi \fi} \def\docalculatetotalnoteheight diff --git a/tex/context/base/strc-sec.mkiv b/tex/context/base/strc-sec.mkiv index b7e18746d..aa1d4721f 100644 --- a/tex/context/base/strc-sec.mkiv +++ b/tex/context/base/strc-sec.mkiv @@ -611,40 +611,56 @@ % \chardef\somestructureheadbreakmethod\plusone % 0=nothing, 1=weighted, 2=strict, 3=vspacing \chardef\somestructureheadbreakmethod\plusthree +% \def\dopreventbreakafterstructureheadauto % used after \c!before +% {\ifcase\somestructureheadbreakmethod +% % 0 = nothing +% \or +% % 1 = old weighted version +% \ifnum\currentstructureheadlevel>\precedingstructurelevel +% \dosomebreak{\penalty\numexpr20000+500*\currentstructureheadlevel\relax}% +% \else +% \dosomebreak\allowbreak % brr +% \fi +% \or +% % 2 = strict version +% \dosomebreak{\penalty\maxdimen}% +% \or +% % 3 = vspacing +% \vspacing[\v!samepage]% if preceded by ! then a loop +% \else +% % nothing +% \fi} +% +% \def\dopreventbreakafterstructureheadspec#1% see enumerations etc +% {\ifcase\somestructureheadbreakmethod +% % 0 = nothing +% \or +% % 1 = old weighted version +% \dosomebreak{\penalty\numexpr20000+500*(\currentstructureheadlevel+#1)\relax}% +% \or +% % 2 = strict version +% \dosomebreak{\penalty\maxdimen}% +% \or +% % 3 = vspacing +% \vspacing[\v!samepage]% +% \else +% % nothing +% \fi} +% +% todo: \vspacing[category:8] == keep_together + \def\dopreventbreakafterstructureheadauto % used after \c!before {\ifcase\somestructureheadbreakmethod % 0 = nothing - \or - % 1 = old weighted version - \ifnum\currentstructureheadlevel>\precedingstructurelevel - \dosomebreak{\penalty\numexpr20000+500*\currentstructureheadlevel\relax}% - \else - \dosomebreak\allowbreak % brr - \fi - \or - % 2 = strict version - \dosomebreak{\penalty\maxdimen}% - \or - % 3 = vspacing - \vspacing[\v!samepage]% if preceded by ! then a loop \else - % nothing + \vspacing[\v!samepage-\currentstructureheadlevel]% \fi} \def\dopreventbreakafterstructureheadspec#1% see enumerations etc {\ifcase\somestructureheadbreakmethod % 0 = nothing - \or - % 1 = old weighted version - \dosomebreak{\penalty\numexpr20000+500*(\currentstructureheadlevel+#1)\relax}% - \or - % 2 = strict version - \dosomebreak{\penalty\maxdimen}% - \or - % 3 = vspacing - \vspacing[\v!samepage]% \else - % nothing + \vspacing[\v!samepage-\the\numexpr\currentstructureheadlevel+1\relax]% todo #1 \fi} \def\dohandlepagebreakX{\dopreventbreakafterstructureheadspec} % no \let so we can redefind diff --git a/tex/context/base/x-calcmath.mkiv b/tex/context/base/x-calcmath.mkiv index 29bc1af9a..c726843fa 100644 --- a/tex/context/base/x-calcmath.mkiv +++ b/tex/context/base/x-calcmath.mkiv @@ -1,5 +1,3 @@ -% engine=luatex - %D \module %D [ file=m-calcmath, %D version=2006.04.24, % 1999.11.06, diff --git a/tex/context/base/x-contml.tex b/tex/context/base/x-contml.mkii index ba6762e77..a582d8eb9 100644 --- a/tex/context/base/x-contml.tex +++ b/tex/context/base/x-contml.mkii @@ -1,5 +1,3 @@ -% interface=en - %M \usemodule [contml] \autoXMLnamespace [context] %M \definefilesynonym [context] [x-contml.xsd] diff --git a/tex/context/base/x-corres.tex b/tex/context/base/x-corres.mkii index 09c7263dc..09c7263dc 100644 --- a/tex/context/base/x-corres.tex +++ b/tex/context/base/x-corres.mkii diff --git a/tex/context/base/x-fe.tex b/tex/context/base/x-fe.mkii index 8562b1d52..8562b1d52 100644 --- a/tex/context/base/x-fe.tex +++ b/tex/context/base/x-fe.mkii diff --git a/tex/context/base/x-fo.tex b/tex/context/base/x-fo.mkii index b2b0b59f9..b2b0b59f9 100644 --- a/tex/context/base/x-fo.tex +++ b/tex/context/base/x-fo.mkii diff --git a/tex/context/base/x-foxet.mkii b/tex/context/base/x-foxet.mkii new file mode 100644 index 000000000..0f8e43af9 --- /dev/null +++ b/tex/context/base/x-foxet.mkii @@ -0,0 +1,28 @@ +%D \module +%D [ file=x-foxet, +%D version=2004.03.12, % based on earlier experiments +%D title=\FOXET, +%D subtitle=Formatting Objects, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D This module is just a shortcut for: + +% fo = basic formatting objects +% fe = basic formatting extensions +% fx = extra formatting objects +% fu = user formatting objects +% fs = setup + +\usemodule[fo,fe,fx,fu,fs,mathml] + +\usemodule[fp] % passivetex bonus + +% \autoXMLnamespace[mml,mm,mathml] + +\endinput diff --git a/tex/context/base/x-foxet.mkiv b/tex/context/base/x-foxet.mkiv new file mode 100644 index 000000000..b27969721 --- /dev/null +++ b/tex/context/base/x-foxet.mkiv @@ -0,0 +1,29 @@ +%D \module +%D [ file=x-foxet, +%D version=2004.03.12, % based on earlier experiments +%D title=\FOXET, +%D subtitle=Formatting Objects, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA ADE / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D Nota bene: I will reimplement formatting object in proper +%D \MKIV\ code. + +\writestatus{foxet}{the mkiv variant is under construction} + +%D This module is just a shortcut for: + +% fo = basic formatting objects +% fe = basic formatting extensions +% fx = extra formatting objects +% fu = user formatting objects +% fs = setup + +% \usemodule[fo,fe,fx,fu,fs,mathml] + +\endinput diff --git a/tex/context/base/x-foxet.tex b/tex/context/base/x-foxet.tex deleted file mode 100644 index 78cc0efb7..000000000 --- a/tex/context/base/x-foxet.tex +++ /dev/null @@ -1,15 +0,0 @@ -%D This is just a shortcut for: - -% fo = basic formatting objects -% fe = basic formatting extensions -% fx = extra formatting objects -% fu = user formatting objects -% fs = setup - -\usemodule[fo,fe,fx,fu,fs,mathml] - -\usemodule[fp] % passivetex bonus - -% \autoXMLnamespace[mml,mm,mathml] - -\endinput diff --git a/tex/context/base/x-pending.mkiv b/tex/context/base/x-pending.mkiv new file mode 100644 index 000000000..114b81890 --- /dev/null +++ b/tex/context/base/x-pending.mkiv @@ -0,0 +1,38 @@ +%D \module +%D [ file=x-pending, +%D version=2008.04.04, +%D title=\CONTEXT\ Style File, +%D subtitle=Track \MKII\ \XML\ usage in \MKIV, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright={PRAGMA / Hans Hagen \& Ton Otten}] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +%D Including this module will result in the production of +%D a file \type {jobname-pending-xml.log} which has a +%D \LUA\ table with \XML\ elements that are still catched by +%D \MKII\ code, when enabled. + +\startluacode + local list = { } + function document.check_pending_xml_element(str) + list[str] = (list[str] and (list[str]+1)) or 1 + end + function document.show_pending_xml_elements() + io.savedata("\jobname-pending-xml-mkii.log", table.serialize(list)) + io.savedata("\jobname-pending-xml-mkiv.log", table.serialize(lxml.get_command_status())) + end +\stopluacode + +\defineXMLcommand + [default] + {\ctxlua{document.check_pending_xml_element("\currentXMLelement")}} + +\appendtoks + \ctxlua{document.show_pending_xml_elements()}% +\to \everystoptext + +\endinput diff --git a/tex/context/base/x-set-11.mkiv b/tex/context/base/x-set-11.mkiv index 4e86f668e..087aeb459 100644 --- a/tex/context/base/x-set-11.mkiv +++ b/tex/context/base/x-set-11.mkiv @@ -89,10 +89,37 @@ %D Loading: -\startxmlsetups xml:setups:register +\let\currentSETUPfullname\s!unknown + +\startxmlsetups xml:setups:assemblename + \doifelse {\xmlatt{#1}{environment}} {yes} { + \let\currentSETUPprefix\e!start + } { + \let\currentSETUPprefix\empty + } \edef\currentSETUPname{\xmlatt{#1}{name}} - % \writestatus{setups}{registering \currentSETUPname}% - \expanded{\texcommand[stp:x:\currentSETUPname]{\currentSETUPname}} + \doifelse {\xmlatt{#1}{generated}} {yes} { + \def\currentSETUPgenerated{*} + } { + \let\currentSETUPgenerated\empty + } + \doifelsenothing {\xmlatt{#1}{variant}} { + \let\currentSETUPvariant\empty + } { + \def\currentSETUPvariant{:\xmlatt{#1}{variant}} + } + \edef\currentSETUPfullname { + \currentSETUPprefix + \currentSETUPname + \currentSETUPvariant + \currentSETUPgenerated + } +\stopxmlsetups + +\startxmlsetups xml:setups:register + \xmlsetup{#1}{xml:setups:assemblename} + %expanded{\texcommand[stp:x:\currentSETUPfullname]{\currentSETUPfullname}} + \expanded{\texcommand[stp:x:\currentSETUPfullname]{#1}} \stopxmlsetups \startxmlsetups xml:setups:basics @@ -125,7 +152,8 @@ \def\shortsetup{\shortsetuptrue \doshowsetup} \def\setupsetup{\dodoubleargument\getparameters[\??stp]} -\unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\showsetupindeed{#3}\par} +%unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\showsetupindeed{#3}\par} +\unexpanded\def\showsetupinlist#1#2#3{\shortsetupfalse\xmlsetup{#3}{xml:setups:typeset}\par} % todo: only references in lists @@ -166,7 +194,6 @@ \startxmlsetups xml:setups:typeset \xmlpushdocument{setups} - \edef\currentSETUPname{\xmlatt{#1}{name}}% \getvalue{\e!start setuptext} \tttf \nohyphens diff --git a/tex/context/base/x-set-12.tex b/tex/context/base/x-set-12.tex index 6d3667771..d79901433 100644 --- a/tex/context/base/x-set-12.tex +++ b/tex/context/base/x-set-12.tex @@ -72,7 +72,7 @@ \definecolor [lightgray] [s=.9] \definecolor [darkgray] [s=.1] -\usetypescript[palatino][\defaultencoding] +\usetypescript[palatino] \setupbodyfont[palatino,9pt] \setupcolors @@ -192,9 +192,9 @@ \startmakeup[\v!standard] \dontcomplain + \setupalign[\v!left] \startcolor[TitleColor] \definedfont[RegularBold at 100pt]\setstrut - \setupalign[\v!left] \strut Con\TeX t \par \definedfont[RegularBold at 50pt]\setstrut \setups[text:commands] diff --git a/tex/context/base/x-xtag.mkiv b/tex/context/base/x-xtag.mkiv new file mode 100644 index 000000000..d7e2f2559 --- /dev/null +++ b/tex/context/base/x-xtag.mkiv @@ -0,0 +1,23 @@ +%D \module +%D [ file=x-xtag, +%D version=2009.09.23, +%D title=\CONTEXT\ Modules, +%D subtitle=\XML\ stream handler, +%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. + +\ifdefined\XMLbanner \endinput \fi + +\loadcorefile{xtag-ini} +\loadcorefile{xtag-ext} +\loadcorefile{xtag-exp} +\loadcorefile{xtag-pre} % has old encoding code +\loadcorefile{xtag-xsd} % will go away (stub anyway) +\loadcorefile{xtag-rng} % will go away (stub anyway) + +\endinput diff --git a/tex/context/interface/cont-cs.xml b/tex/context/interface/cont-cs.xml index c22ededd8..53d861c90 100644 --- a/tex/context/interface/cont-cs.xml +++ b/tex/context/interface/cont-cs.xml @@ -4001,6 +4001,7 @@ <cd:constant type="nonumber"/> <cd:constant type="vpravo"/> <cd:constant type="vlevo"/> + <cd:constant type="vnejsi"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-de.xml b/tex/context/interface/cont-de.xml index af98387fc..aaea5d00c 100644 --- a/tex/context/interface/cont-de.xml +++ b/tex/context/interface/cont-de.xml @@ -4001,6 +4001,7 @@ <cd:constant type="nonumber"/> <cd:constant type="rechts"/> <cd:constant type="links"/> + <cd:constant type="aussen"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-en.xml b/tex/context/interface/cont-en.xml index 01feb5e50..4f0237627 100644 --- a/tex/context/interface/cont-en.xml +++ b/tex/context/interface/cont-en.xml @@ -4001,6 +4001,7 @@ <cd:constant type="nonumber"/> <cd:constant type="right"/> <cd:constant type="left"/> + <cd:constant type="outer"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-fr.xml b/tex/context/interface/cont-fr.xml index 22011cd9f..690903ca4 100644 --- a/tex/context/interface/cont-fr.xml +++ b/tex/context/interface/cont-fr.xml @@ -4001,6 +4001,7 @@ <cd:constant type="sansnumero"/> <cd:constant type="droite"/> <cd:constant type="gauche"/> + <cd:constant type="exterieur"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-it.xml b/tex/context/interface/cont-it.xml index 14b9cbaa4..e2502d5cd 100644 --- a/tex/context/interface/cont-it.xml +++ b/tex/context/interface/cont-it.xml @@ -4001,6 +4001,7 @@ <cd:constant type="nonumber"/> <cd:constant type="destra"/> <cd:constant type="sinistra"/> + <cd:constant type="esterno"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-nl.xml b/tex/context/interface/cont-nl.xml index 401fe14e1..47ce230b5 100644 --- a/tex/context/interface/cont-nl.xml +++ b/tex/context/interface/cont-nl.xml @@ -4001,6 +4001,7 @@ <cd:constant type="geennummer"/> <cd:constant type="rechts"/> <cd:constant type="links"/> + <cd:constant type="buiten"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-pe.xml b/tex/context/interface/cont-pe.xml index e0d3f7ce5..bcf164d8d 100644 --- a/tex/context/interface/cont-pe.xml +++ b/tex/context/interface/cont-pe.xml @@ -4001,6 +4001,7 @@ <cd:constant type="بدونشماره"/> <cd:constant type="راست"/> <cd:constant type="چپ"/> + <cd:constant type="خارجی"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/context/interface/cont-ro.xml b/tex/context/interface/cont-ro.xml index ba83586a1..2f6dd9f3e 100644 --- a/tex/context/interface/cont-ro.xml +++ b/tex/context/interface/cont-ro.xml @@ -4001,6 +4001,7 @@ <cd:constant type="nonumber"/> <cd:constant type="dreapta"/> <cd:constant type="stanga"/> + <cd:constant type="extern"/> </cd:keywords> <cd:content n="2"/> </cd:arguments> diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index a07ca9466..e107372e9 100644 --- a/tex/generic/context/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/texmf/tex/generic/context/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/texmf/tex/generic/context/luatex-fonts.lua --- merge date : 09/23/09 10:11:52 +-- merge date : 09/25/09 09:47:31 do -- begin closure to overcome local limits and interference |