diff options
author | Marius <mariausol@gmail.com> | 2013-03-29 00:40:15 +0200 |
---|---|---|
committer | Marius <mariausol@gmail.com> | 2013-03-29 00:40:15 +0200 |
commit | fa51b91a9f43ae55493d28761caf397c1d27207f (patch) | |
tree | aaadc5766d0093a2e21fc64ee6b4aa32ef5cc4d4 | |
parent | 6580c0d6985f98e634f2081b00576a15201c536b (diff) | |
download | context-fa51b91a9f43ae55493d28761caf397c1d27207f.tar.gz |
beta 2013.03.28 23:10
38 files changed, 440 insertions, 316 deletions
diff --git a/metapost/context/base/mp-chem.mpiv b/metapost/context/base/mp-chem.mpiv index 4cb4ce78e..c3dd3e3eb 100644 --- a/metapost/context/base/mp-chem.mpiv +++ b/metapost/context/base/mp-chem.mpiv @@ -32,7 +32,7 @@ numeric chem_front_b[] ; boolean - chem_setting_axis, %chem_setting_fitwidth, chem_setting_fitheight, + chem_setting_axis, chem_doing_pb, chem_text_trace, chem_bd_wedge, chem_tracing, chem_star[], chem_front[], chem_stacked[], chem_tetra[] ; @@ -40,7 +40,6 @@ string chem_previous ; path - chem_setting_bbox, chem_path[], % scratch chem_b_path[], chem_c_path[], chem_r_path[], chem_r_path.lft[], chem_r_path.rt[] ; @@ -308,20 +307,18 @@ def chem_start_structure(expr i, l, r, t, b, scale, rotation, %fitwidth, fitheig chem_emwidth := emwidth ; % EmWidth or \the\emwidth does not work... chem_b_length := if scale<>0: scale* fi 3chem_emwidth ; -% chem_setting_fitwidth := if boolean fitwidth : fitwidth else : (fitwidth<>0) fi ; -% chem_setting_fitheight := if boolean fitheight : fitheight else : (fithheight<>0) fi ;; save chem_setting_l, chem_setting_r, chem_setting_t, chem_setting_b ; if numeric l : - chem_setting_l := l * chem_b_length ; + chem_setting_l := -l * chem_b_length ; fi if numeric r : - chem_setting_r := r * chem_b_length ; + chem_setting_r := r * chem_b_length ; fi if numeric t : - chem_setting_t := t * chem_b_length ; + chem_setting_t := t * chem_b_length ; fi if numeric b : - chem_setting_b := b * chem_b_length ; + chem_setting_b := -b * chem_b_length ; fi chem_setting_rotation := rotation ; chem_setting_offset := offset ; @@ -344,36 +341,34 @@ vardef chem_stop_structure = currentpicture := (currentpicture shifted -chem_origin) rotated chem_setting_rotation ; - if (not known chem_setting_l) and (not known chem_setting_r) : - chem_setting_l := - xpart llcorner currentpicture ; - chem_setting_r := xpart urcorner currentpicture ; - else : - if not known chem_setting_l : - chem_setting_l := xpart urcorner currentpicture - xpart llcorner currentpicture - - 2chem_setting_r ; - fi - if not known chem_setting_r : - chem_setting_r := xpart urcorner currentpicture - xpart llcorner currentpicture - - 2chem_setting_l ; - fi +% if not known chem_setting_l : +% chem_setting_l := min(xpart ulcorner currentpicture, xpart llcorner currentpicture) ; +% fi +% if not known chem_setting_r : +% chem_setting_r := max(xpart urcorner currentpicture, xpart lrcorner currentpicture) ; +% fi +% if not known chem_setting_b : +% chem_setting_b := min(ypart llcorner currentpicture, ypart lrcorner currentpicture) ; +% fi +% if not known chem_setting_t : +% chem_setting_t := max(ypart ulcorner currentpicture, ypart urcorner currentpicture) ; +% fi + + if not known chem_setting_l : + chem_setting_l := min(xpart llcorner currentpicture, xpart lrcorner currentpicture) ; fi - if (not known chem_setting_t) and (not known chem_setting_b) : - chem_setting_t := ypart urcorner currentpicture ; - chem_setting_b := - ypart llcorner currentpicture ; - else : - if not known chem_setting_t : - chem_setting_t := ypart urcorner currentpicture - ypart llcorner currentpicture - - 2chem_setting_b ; - fi - if not known chem_setting_b : - chem_setting_b := ypart urcorner currentpicture - ypart llcorner currentpicture - - 2chem_setting_t ; - fi + if not known chem_setting_r : + chem_setting_r := max(xpart llcorner currentpicture, xpart lrcorner currentpicture) ; + fi + if not known chem_setting_b : + chem_setting_b := min(ypart llcorner currentpicture, ypart ulcorner currentpicture) ; + fi + if not known chem_setting_t : + chem_setting_t := max(ypart llcorner currentpicture, ypart ulcorner currentpicture) ; fi - chem_setting_bbox := - (-chem_setting_l,-chem_setting_b) -- ( chem_setting_r,-chem_setting_b) -- - ( chem_setting_r, chem_setting_t) -- (-chem_setting_l, chem_setting_t) -- cycle ; +% draw textext(decimal chem_setting_l & "," & decimal chem_setting_r & " " & +% decimal chem_setting_b & "," & decimal chem_setting_t) ; if chem_setting_axis : % put it behind the picture chem_pic := currentpicture ; currentpicture := nullpicture ; chem_num0 := .5chem_b_length ; @@ -398,13 +393,14 @@ vardef chem_stop_structure = draw (-chem_num1,i) -- (chem_num1,i) withpen pencircle scaled chem_axis_rulethickness withcolor colorpart(chem_axis_color) ; endfor - % frame=on : draw chem_setting_bbox withcolor colorpart(chem_axis_color) ; addto currentpicture also chem_pic ; fi ; if chem_tracing : fill boundingbox currentpicture withcolor blue withtransparency(1,.25) ; fi ; - setbounds currentpicture to chem_setting_bbox ; + setbounds currentpicture to + ((chem_setting_l,chem_setting_b) -- (chem_setting_r,chem_setting_b) -- + (chem_setting_r,chem_setting_t) -- (chem_setting_l,chem_setting_t) -- cycle) ; if chem_tracing : fill boundingbox currentpicture withcolor red withtransparency(1,.25) ; fi ; diff --git a/tex/context/base/bibl-bib.mkiv b/tex/context/base/bibl-bib.mkiv index 7ca6799cf..d9010294d 100644 --- a/tex/context/base/bibl-bib.mkiv +++ b/tex/context/base/bibl-bib.mkiv @@ -340,14 +340,13 @@ % todo : lang en language % todo : directions - % variables -\newcount\bibtexblock \bibtexblock\plusone +\ifdefined\bibtexblock \else \newcount\bibtexblock \fi \bibtexblock\plusone +\ifdefined\bibtexcounter \else \newcount\bibtexcounter \fi \newtoks \everysetupbibtexpublications \newtoks \everysetupbibtexcitations -\newcount\bibtexcounter \def\bibtexrefprefix{\number\bibtexblock:} diff --git a/tex/context/base/bibl-tra.mkiv b/tex/context/base/bibl-tra.mkiv index f454f5185..511212a98 100644 --- a/tex/context/base/bibl-tra.mkiv +++ b/tex/context/base/bibl-tra.mkiv @@ -194,7 +194,8 @@ \installstructurelistprocessor{pubs:userdata}% {\ctxlua{bibtex.hacks.add(structures.lists.uservalue("\currentlist",\currentlistindex,"bibref"),\currentlistindex)}} -\newcount\bibtexblock \bibtexblock\plusone +\ifdefined\bibtexblock \else \newcount\bibtexblock \fi \bibtexblock\plusone +\ifdefined\bibtexcounter \else \newcount\bibtexcounter \fi %D \macros{bibdoif,bibdoifnot,bibdoifelse} %D @@ -640,8 +641,6 @@ %D We are coming to the end of this module, to the macros that %D do typesetting and read the \type{bbl} file. -\newcount\bibtexcounter - %D Just a \type{\dosingleempty} is the most friendly %D of doing this: there need not even be an argument %D to \type{\startpublication}. Of course, then there diff --git a/tex/context/base/char-def.lua b/tex/context/base/char-def.lua index b687ece1c..8580fb699 100644 --- a/tex/context/base/char-def.lua +++ b/tex/context/base/char-def.lua @@ -1026,7 +1026,7 @@ characters.data={ description="CIRCUMFLEX ACCENT", direction="on", linebreak="al", - mathclass="accent", + mathclass="topaccent", unicodeslot=0x005E, }, { @@ -1047,7 +1047,7 @@ characters.data={ description="GRAVE ACCENT", direction="on", linebreak="al", - mathclass="accent", + mathclass="topaccent", mathname="grave", unicodeslot=0x0060, }, @@ -1731,7 +1731,7 @@ characters.data={ description="DIAERESIS", direction="on", linebreak="ai", - mathclass="accent", + mathclass="topaccent", mathname="ddot", specials={ "compat", 0x0020, 0x0308 }, unicodeslot=0x00A8, @@ -1814,7 +1814,7 @@ characters.data={ description="MACRON", direction="on", linebreak="al", - mathclass="accent", + mathclass="topaccent", mathname="bar", specials={ "compat", 0x0020, 0x0304 }, unicodeslot=0x00AF, @@ -1871,7 +1871,7 @@ characters.data={ description="ACUTE ACCENT", direction="on", linebreak="bb", - mathclass="accent", + mathclass="topaccent", mathname="acute", specials={ "compat", 0x0020, 0x0301 }, unicodeslot=0x00B4, @@ -7524,7 +7524,7 @@ characters.data={ description="MODIFIER LETTER CIRCUMFLEX ACCENT", direction="on", linebreak="al", - mathclass="accent", + mathclass="topaccent", mathname="hat", specials={ "compat", 0x0020, 0x0302 }, unicodeslot=0x02C6, @@ -7538,7 +7538,7 @@ characters.data={ description="CARON", direction="on", linebreak="ai", - mathclass="accent", + mathclass="topaccent", mathname="check", specials={ "compat", 0x0020, 0x030C }, unicodeslot=0x02C7, @@ -7684,7 +7684,7 @@ characters.data={ description="BREVE", direction="on", linebreak="ai", - mathclass="accent", + mathclass="topaccent", mathname="breve", specials={ "compat", 0x0020, 0x0306 }, unicodeslot=0x02D8, @@ -7697,7 +7697,7 @@ characters.data={ description="DOT ABOVE", direction="on", linebreak="ai", - mathclass="accent", + mathclass="topaccent", mathname="dot", specials={ "compat", 0x0020, 0x0307 }, unicodeslot=0x02D9, @@ -7710,7 +7710,7 @@ characters.data={ description="RING ABOVE", direction="on", linebreak="ai", - mathclass="accent", + mathclass="topaccent", mathname="mathring", specials={ "compat", 0x0020, 0x030A }, unicodeslot=0x02DA, @@ -7733,7 +7733,7 @@ characters.data={ description="SMALL TILDE", direction="on", linebreak="al", - mathclass="accent", + mathclass="topaccent", mathname="tilde", specials={ "compat", 0x0020, 0x0303 }, unicodeslot=0x02DC, @@ -58657,7 +58657,7 @@ characters.data={ description="COMBINING RIGHT ARROW ABOVE", direction="nsm", linebreak="cm", - mathclass="accent", + mathclass="topaccent", mathname="vec", unicodeslot=0x20D7, }, @@ -58687,7 +58687,7 @@ characters.data={ description="COMBINING THREE DOTS ABOVE", direction="nsm", linebreak="cm", - mathclass="accent", + mathclass="topaccent", mathname="dddot", unicodeslot=0x20DB, }, @@ -58801,7 +58801,7 @@ characters.data={ description="COMBINING WIDE BRIDGE ABOVE", direction="nsm", linebreak="cm", - mathclass="accent", + mathclass="topaccent", unicodeslot=0x20E9, }, [0x20EA]={ @@ -65855,7 +65855,7 @@ characters.data={ description="TOP TORTOISE SHELL BRACKET", direction="on", linebreak="al", - mathclass="accent", + mathclass="topaccent", unicodeslot=0x23E0, }, [0x23E1]={ @@ -65863,7 +65863,7 @@ characters.data={ description="BOTTOM TORTOISE SHELL BRACKET", direction="on", linebreak="al", - mathclass="accent", + mathclass="botaccent", unicodeslot=0x23E1, }, [0x23E2]={ diff --git a/tex/context/base/cont-new.mkii b/tex/context/base/cont-new.mkii index d582a6905..204684312 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{2013.03.28 09:26} +\newcontextversion{2013.03.28 23:10} %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 d03727ae2..7bb692d2a 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{2013.03.28 09:26} +\newcontextversion{2013.03.28 23:10} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf Binary files differindex eab60a3ee..f90f966d1 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/context-version.png b/tex/context/base/context-version.png Binary files differindex 2793e80f2..34ef69eda 100644 --- a/tex/context/base/context-version.png +++ b/tex/context/base/context-version.png diff --git a/tex/context/base/context.mkii b/tex/context/base/context.mkii index 1203d3724..aa7cfe2df 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{2013.03.28 09:26} +\edef\contextversion{2013.03.28 23:10} %D For those who want to use this: diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 730b358c0..7631b4075 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -25,7 +25,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2013.03.28 09:26} +\edef\contextversion{2013.03.28 23:10} %D For those who want to use this: diff --git a/tex/context/base/core-ini.mkiv b/tex/context/base/core-ini.mkiv index 7b32cb3a2..1682bed1b 100644 --- a/tex/context/base/core-ini.mkiv +++ b/tex/context/base/core-ini.mkiv @@ -82,7 +82,7 @@ %D Sectioning: -\newtoks \everyheadstart +%newtoks \everyheadstart %D Par building (experimental, used in xml <p> .. </p>) @@ -100,7 +100,7 @@ %D Marks: -\newtoks \everymarking +%newtoks \everymarking %D Fonts: @@ -124,7 +124,7 @@ %D Tables: -\newtoks \everytable % we need to disstinguish kinds +%newtoks \everytable % we need to disstinguish kinds %D State mess: diff --git a/tex/context/base/core-uti.lua b/tex/context/base/core-uti.lua index bf8d2c207..96ccdca48 100644 --- a/tex/context/base/core-uti.lua +++ b/tex/context/base/core-uti.lua @@ -35,7 +35,8 @@ local report_passes = logs.reporter("job","passes") job = job or { } local job = job -job.version = "1.21" +job.version = 1.22 -- make sure we don't have old lua 5.1 hash leftovers +job.packversion = 1.02 -- make sure we don't have old lua 5.1 hash leftovers -- some day we will implement loading of other jobs and then we need -- job.jobs @@ -132,7 +133,7 @@ local packlist = { -- "references", -- we need to rename of them as only one packs (not structures.lists.references) } -local jobpacker = packers.new(packlist,1.01) +local jobpacker = packers.new(packlist,job.packversion) -- jump number when changs in hash job.pack = true -- job.pack = false @@ -172,15 +173,21 @@ function job.save(filename) -- we could return a table but it can get pretty lar end local function load(filename) - local okay, data = pcall(dofile,filename) - if okay and type(data) == "table" then - local jobversion = job.version - local datacomment = data.comment - local dataversion = datacomment and datacomment.version or "?" - if dataversion ~= jobversion then - report_passes("version mismatch: %s <> %s",dataversion,jobversion) + if lfs.isfile(filename) then + local okay, data = pcall(dofile,filename) + if okay and type(data) == "table" then + local jobversion = job.version + local datacomment = data.comment + local dataversion = datacomment and datacomment.version or "?" + if dataversion ~= jobversion then + report_passes("version mismatch: %s <> %s",dataversion,jobversion) + else + return data + end else - return data + os.remove(filename) -- probably a bad file + report_passes("removing stale job data file %a, restart job",filename) + os.exit(true) -- trigger second run end end end @@ -195,10 +202,14 @@ function job.load(filename) local target = list[1] local initializer = list[3] local result = accesstable(target,utilitydata) - packers.unpack(result,jobpacker,true) - migratetable(target,mark(result)) - if type(initializer) == "function" then - initializer(result) + local done = packers.unpack(result,jobpacker,true) + if done then + migratetable(target,mark(result)) + if type(initializer) == "function" then + initializer(result) + end + else + report_passes("pack version mismatch") end end end @@ -216,8 +227,10 @@ function job.loadother(filename) local list = savelist[l] local target = list[1] local result = accesstable(target,utilitydata) - packers.unpack(result,jobpacker,true) - migratetable(target,result,unpacked) + local done = packers.unpack(result,jobpacker,true) + if done then + migratetable(target,result,unpacked) + end end unpacked.job.packed = nil -- nicer in inspecting return unpacked diff --git a/tex/context/base/font-ext.lua b/tex/context/base/font-ext.lua index 4dae48015..df8cbe160 100644 --- a/tex/context/base/font-ext.lua +++ b/tex/context/base/font-ext.lua @@ -29,6 +29,7 @@ of neutral.</p> local handlers = fonts.handlers local hashes = fonts.hashes +local otf = handlers.otf local registerotffeature = handlers.otf.features.register local registerafmfeature = handlers.afm.features.register @@ -386,9 +387,15 @@ local function map_opbd_onto_protrusion(tfmdata,value,opbd) end end end - tfmdata.parameters.protrusion { - auto = true - } + local parameters = tfmdata.parameters + local protrusion = tfmdata.protrusion + if not protrusion then + parameters.protrusion = { + auto = true + } + else + protrusion.auto = true + end end -- The opbd test is just there because it was discussed on the diff --git a/tex/context/base/font-otn.lua b/tex/context/base/font-otn.lua index 739caa997..39a3f77dd 100644 --- a/tex/context/base/font-otn.lua +++ b/tex/context/base/font-otn.lua @@ -1899,7 +1899,11 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq -- logprocess("%s: multiple subchains for %s are not yet supported",cref(kind,chainname,chainlookupname),chainlookup and chainlookup.type or "?") i = i + 1 end - start = start.next + if start then + start = start.next + else + -- weird + end until i > nofchainlookups end else diff --git a/tex/context/base/font-otx.lua b/tex/context/base/font-otx.lua index 8185dcf1e..d276b8a15 100644 --- a/tex/context/base/font-otx.lua +++ b/tex/context/base/font-otx.lua @@ -307,15 +307,16 @@ function methods.arab(head,font,attr) end elseif classifier == s_fina then if last then - if not last[a_state] == s_init then + if last[a_state] ~= s_init then last[a_state] = s_medi end current[a_state] = s_fina first, last = nil, nil elseif first then - if not last[a_state] == s_init then - last[a_state] = s_medi - end + -- if first[a_state] ~= s_init then + -- -- needs checking + -- first[a_state] = s_medi + -- end current[a_state] = s_fina first = nil else diff --git a/tex/context/base/grph-inc.lua b/tex/context/base/grph-inc.lua index d28b63fcf..9603419ae 100644 --- a/tex/context/base/grph-inc.lua +++ b/tex/context/base/grph-inc.lua @@ -1421,7 +1421,8 @@ bmpconverter.default = converter -- -- -- bases -- -- -- -local bases = { } +local bases = allocate() +figures.bases = bases local bases_list = nil -- index => { basename, fullname, xmlroot } local bases_used = nil -- [basename] => { basename, fullname, xmlroot } -- pointer to list diff --git a/tex/context/base/grph-swf.lua b/tex/context/base/grph-swf.lua index 0d33d89aa..8c28b76af 100644 --- a/tex/context/base/grph-swf.lua +++ b/tex/context/base/grph-swf.lua @@ -13,8 +13,8 @@ local concat = table.concat local floor = math.floor local tonumber = tonumber -local readstringr = io.readstring, io.readnumber -local readnumber = io.readstring, io.readnumber +local readstring = io.readstring +local readnumber = io.readnumber local tobitstring = number.tobitstring local todimen = number.todimen local nodeinjections = backends.nodeinjections @@ -75,16 +75,16 @@ function figures.checkers.swf(data) dr.width, dr.height = width, height du.width, du.height, du.foundname = width, height, foundname context.startfoundexternalfigure(todimen(width),todimen(height)) - nodeinjections.insertswf { - foundname = foundname, - width = width, - height = height, - -- factor = number.dimenfactors.bp, - display = dr.display, - controls = dr.controls, - -- label = dr.label, - resources = dr.resources, - } + nodeinjections.insertswf { + foundname = foundname, + width = width, + height = height, + -- factor = number.dimenfactors.bp, + display = dr.display, + controls = dr.controls, + -- label = dr.label, + resources = dr.resources, + } context.stopfoundexternalfigure() return data end diff --git a/tex/context/base/math-ini.lua b/tex/context/base/math-ini.lua index bf4df0e57..530e68568 100644 --- a/tex/context/base/math-ini.lua +++ b/tex/context/base/math-ini.lua @@ -88,6 +88,7 @@ local middle_class = 4 local close_class = 5 local accents = allocate { + accent = true, -- some can be both topaccent = true, [11] = true, botaccent = true, [12] = true, under = true, [13] = true, diff --git a/tex/context/base/meta-imp-dum.mkiv b/tex/context/base/meta-imp-dum.mkiv index 05d40b70b..1daff57ac 100644 --- a/tex/context/base/meta-imp-dum.mkiv +++ b/tex/context/base/meta-imp-dum.mkiv @@ -174,7 +174,7 @@ \defineframed [figuredummy] - [\c!background=figure:dummy, + [\c!background=figure:dummy:only, \c!foregroundcolor=\s!white, \c!backgroundcolor=\v!gray, \c!frame=\v!off, @@ -184,7 +184,7 @@ \c!width=\figurewidth] \defineoverlay - [figure:dummy] + [figure:dummy:only] [\grph_include_replacement\empty\empty\empty] \defineoverlay diff --git a/tex/context/base/mlib-pdf.mkiv b/tex/context/base/mlib-pdf.mkiv index 594a811d2..0913b3699 100644 --- a/tex/context/base/mlib-pdf.mkiv +++ b/tex/context/base/mlib-pdf.mkiv @@ -21,15 +21,15 @@ %D Some code is shared between MPLIB and MPS. The following variables %D are also available for introspection and other purposes. -\newdimen\MPwidth -\newdimen\MPheight +\ifdefined\MPwidth \else \newdimen\MPwidth \fi +\ifdefined\MPheight \else \newdimen\MPheight \fi -\newdimen\MPllx -\newdimen\MPlly -\newdimen\MPurx -\newdimen\MPury +\ifdefined\MPllx \else \newdimen\MPllx \fi +\ifdefined\MPlly \else \newdimen\MPlly \fi +\ifdefined\MPurx \else \newdimen\MPurx \fi +\ifdefined\MPury \else \newdimen\MPury \fi -\newbox \MPbox +\ifdefined\MPbox \else \newbox \MPbox \fi \def\setMPboundingbox#1#2#3#4% at some point we might pass them as base or scaled points {\global\MPllx #1\onebasepoint diff --git a/tex/context/base/mult-aux.mkiv b/tex/context/base/mult-aux.mkiv index 24eaa3366..62111a642 100644 --- a/tex/context/base/mult-aux.mkiv +++ b/tex/context/base/mult-aux.mkiv @@ -207,7 +207,9 @@ % In \MKIV\ we can probably use the english variant for all other % languages too. -\unexpanded\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6% we can speed this up for english +% todo: inline the \do*value + +\unexpanded\def\mult_interfaces_install_parameter_set_handler#1#2#3#4#5#6% {\ifx#2\relax\let#2\empty\fi \unexpanded\def#3{\dosetvalue {#1#2:}}% ##1 {##2} (braces are mandate) \unexpanded\def#4{\dosetevalue{#1#2:}}% ##1 {##2} (braces are mandate) diff --git a/tex/context/base/node-res.lua b/tex/context/base/node-res.lua index b651c1fa3..768aac404 100644 --- a/tex/context/base/node-res.lua +++ b/tex/context/base/node-res.lua @@ -46,7 +46,9 @@ end pool.register = register_node function pool.cleanup(nofboxes) -- todo - nodes.tracers.steppers.reset() -- todo: make a registration subsystem + if nodes.tracers.steppers then -- to be resolved + nodes.tracers.steppers.reset() -- todo: make a registration subsystem + end local nl, nr = 0, nofreserved for i=1,nofreserved do local ri = reserved[i] diff --git a/tex/context/base/page-flt.mkiv b/tex/context/base/page-flt.mkiv index fae146b8c..d641e1c7d 100644 --- a/tex/context/base/page-flt.mkiv +++ b/tex/context/base/page-flt.mkiv @@ -281,8 +281,6 @@ % \placefigure[top][]{Second}{\framed{bla 2}} % \dorecurse {40}{text } \placefigure[top][]{Third} {\framed{bla 3}} -\newbox\savedfloatbox - \appendtoks \global\setbox\savedfloatbox\box\floatbox \to \everybeforeoutput diff --git a/tex/context/base/s-mat-10.mkiv b/tex/context/base/s-mat-10.mkiv index 384371c18..3eaaf688b 100644 --- a/tex/context/base/s-mat-10.mkiv +++ b/tex/context/base/s-mat-10.mkiv @@ -13,10 +13,10 @@ %D This base module will be cleaned up and extended. -\def\enableshowmathfontvirtual +\unexpanded\def\enableshowmathfontvirtual {\ctxlua{fonts.constructors.autocleanup=false}} -\def\showmathfontcharacters +\unexpanded\def\showmathfontcharacters {\dodoubleempty\doshowmathfontcharacters} \def\doshowmathfontcharacters[#1][#2]% @@ -62,7 +62,7 @@ \startluacode local concat = table.concat -local format, lower = string.format, string.lower +local lower = string.lower local utfchar = utf.char local round = math.round @@ -76,6 +76,9 @@ local fillinthegaps = true local upperlimit = 0x0007F local upperlimit = 0xF0000 +local f_unicode = string.formatters["%U"] +local f_slot = string.formatters["%s/%0X"] + function document.showmathfont(id,slot) local tfmdata = fontdata[id] local characters = tfmdata.characters @@ -118,15 +121,15 @@ function document.showmathfont(id,slot) local v_variants = char.vert_variants local h_variants = char.horiz_variants local commands = char.commands - local slookups = desc.slookups - local mlookups = desc.mlookups + local slookups = desc and desc.slookups + local mlookups = desc and desc.mlookups local mathclass = info.mathclass local mathspec = info.mathspec local mathsymbol = info.mathsymbol local description = info.description or no_description context.startmathfontlistentry() - context.mathfontlistreference(format("U+%05X",unicode)) - context.mathfontlistentryhexdectit(format("U+%05X",code),code,lower(description)) + context.mathfontlistreference(f_unicode(unicode)) + context.mathfontlistentryhexdectit(f_unicode(code),code,lower(description)) context.mathfontlistentrywdhtdpic(round(char.width or 0),round(char.height or 0),round(char.depth or 0),round(char.italic or 0)) if virtual and commands then local t = { } @@ -134,7 +137,7 @@ function document.showmathfont(id,slot) local ci = commands[i] if ci[1] == "slot" then local fnt, idx = ci[2], ci[3] - t[#t+1] = format("%s/%0X",names[fnt] or fnt,idx) + t[#t+1] = f_slot(names[fnt] or fnt,idx) end end if #t > 0 then @@ -155,7 +158,7 @@ function document.showmathfont(id,slot) context.stopmathfontlistentryclassspec() end if mathsymbol then - context.mathfontlistentrysymbol(format("U+%05X",mathsymbol),mathsymbol) + context.mathfontlistentrysymbol(f_unicode(mathsymbol),mathsymbol) end if next_sizes then local n, done = 0, { } @@ -167,7 +170,7 @@ function document.showmathfont(id,slot) break else done[next_sizes] = true - context.mathfontlistnextentry(n,format("U+%05X",next_sizes),next_sizes) + context.mathfontlistnextentry(n,f_unicode(next_sizes),next_sizes) next_sizes = characters[next_sizes] v_variants = next_sizes.vert_variants or v_variants h_variants = next_sizes.horiz_variants or h_variants @@ -185,14 +188,14 @@ function document.showmathfont(id,slot) context.startmathfontlisthvariants() for i=1,#h_variants do -- we might go top-down in the original local vi = h_variants[i] - context.mathfontlisthvariantsentry(i,format("U+%05X",vi.glyph),vi.glyph) + context.mathfontlisthvariantsentry(i,f_unicode(vi.glyph),vi.glyph) end context.stopmathfontlisthvariants() elseif v_variants then context.startmathfontlistvvariants() for i=1,#v_variants do local vi = v_variants[#v_variants-i+1] - context.mathfontlistvvariantsentry(i,format("U+%05X",vi.glyph),vi.glyph) + context.mathfontlistvvariantsentry(i,f_unicode(vi.glyph),vi.glyph) end context.stopmathfontlistvvariants() end @@ -230,7 +233,7 @@ function document.showmathfont(id,slot) local i = 0 for variant, lookuptype in table.sortedpairs(variants) do i = i + 1 - context.mathfontlookupvariant(i,format("U+%05X",variant),variant,lookuptype) + context.mathfontlookupvariant(i,f_unicode(variant),variant,lookuptype) end context.stopmathfontlookupvariants() end diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex ee770e908..244c588ae 100644 --- a/tex/context/base/status-files.pdf +++ b/tex/context/base/status-files.pdf diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf Binary files differindex e06883ecc..3beebc8e5 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/strc-enu.mkvi b/tex/context/base/strc-enu.mkvi index 7b3f04942..62b54dbe0 100644 --- a/tex/context/base/strc-enu.mkvi +++ b/tex/context/base/strc-enu.mkvi @@ -75,6 +75,8 @@ \installcommandhandler \??enumeration {enumeration} \??enumeration +\installcounterassociation{enumeration} + \let\setupenumerations\setupenumeration \setupenumerations % check with old @@ -127,18 +129,18 @@ % % with push/pop (also at definition time) -\unexpanded\def\strc_define_commands_enumeration#1#2#3% current level parent - {\doifelsenothing{#3} - {\normalexpanded{\defineconstruction[#1][\s!handler=\v!enumeration,\c!level=#2]}% - \setevalue{\??enumeration#1:\s!parent}{\??enumeration}}% - {\normalexpanded{\defineconstruction[#1][#3][\s!handler=\v!enumeration,\c!level=#2]}% - \setevalue{\??enumeration#1:\s!parent}{\??enumeration#3}}% - \setuevalue{\e!next #1}{\strc_enumerations_next }% - \setuevalue{\c!reset#1}{\strc_enumerations_reset }% - %setuevalue{\c!set #1}{\strc_enumerations_set }% - \setuevalue {#1}{\strc_enumerations_command{#1}}% - \setuevalue{\e!start#1}{\strc_enumerations_start {#1}}% - \setuevalue{\e!stop #1}{\strc_enumerations_stop }} +\unexpanded\def\strc_define_commands_enumeration#tag#level#parent% + {\doifelsenothing{#parent} + {\normalexpanded{\defineconstruction[#tag][\s!handler=\v!enumeration,\c!level=#level]}% + \setevalue{\??enumeration#tag:\s!parent}{\??enumeration}}% + {\normalexpanded{\defineconstruction[#tag][#parent][\s!handler=\v!enumeration,\c!level=#level]}% + \setevalue{\??enumeration#tag:\s!parent}{\??enumeration#parent}}% + \setuevalue{\e!next #tag}{\strc_enumerations_next }% + \setuevalue{\c!reset#tag}{\strc_enumerations_reset }% + %setuevalue{\c!set #tag}{\strc_enumerations_set }% + \setuevalue {#tag}{\strc_enumerations_command{#tag}}% + \setuevalue{\e!start#tag}{\strc_enumerations_start {#tag}}% + \setuevalue{\e!stop #tag}{\strc_enumerations_stop }} \appendtoks \ifx\currentenumerationparent\empty @@ -172,7 +174,7 @@ \fi \doifcounterelse\p_counter\donothing{\strc_enumerations_define_counter\p_counter}% \letenumerationparameter\s!counter\p_counter - \strc_enumerations_setup_counter\currentenumeration + %\strc_enumerations_setup_counter\currentenumeration \to \everydefineenumeration \let\p_strc_constructions_title \empty @@ -217,36 +219,46 @@ \unexpanded\def\strc_enumerations_next {\strc_counters_increment_sub{\specificconstructionnumber\currentconstruction}{\currentconstructionlevel}} \unexpanded\def\strc_enumerations_reset {\strc_counters_reset_sub {\specificconstructionnumber\currentconstruction}{\currentconstructionlevel}} -%unexpanded\def\strc_enumerations_set #3{\strc_counters_set_sub {\specificconstructionnumber\currentconstruction}{\currentconstructionlevel}{#2}} +%unexpanded\def\strc_enumerations_set#tag{\strc_counters_set_sub {\specificconstructionnumber\currentconstruction}{\currentconstructionlevel}{#tag}} + +\def\currentconstructionnumber {\constructionparameter\s!counter} +\def\specificconstructionnumber#tag{\namedconstructionparameter{#tag}\s!counter} %D Counters (maybe we can share this code): (not ok yet, messy with notes) % Maybe we should move counters to the construction level as more derived mechanisms % use it \unknown\ so don't depend on names here! -\newtoks\everysetupenumerationcounter - -\let\v_strc_enumerations_counter_name\empty % or just p_counter - -\def\strc_enumerations_setup_counter#1% - {\edef\v_strc_enumerations_counter_name{#1}% only used in the token list - \the\everysetupenumerationcounter} - -\def\strc_enumerations_define_counter#1% todo: fast inheritance (was mainparameter) - {\definecounter[#1]% - \strc_enumerations_setup_counter{#1}} - -\appendtoks - \strc_counter_setup_using_parameter\v_strc_enumerations_counter_name\enumerationparameter -\to \everysetupenumerationcounter - -\def\currentconstructionnumber {\constructionparameter\s!counter} -\def\specificconstructionnumber#1{\namedconstructionparameter{#1}\s!counter} +% \newtoks\everysetupenumerationcounter +% +% \let\v_strc_enumerations_counter_name\empty % or just p_counter +% +% \def\strc_enumerations_setup_counter#tag% +% {\edef\v_strc_enumerations_counter_name{#tag}% only used in the token list +% \the\everysetupenumerationcounter} +% +% \def\strc_enumerations_define_counter#tag% todo: fast inheritance (was mainparameter) +% {\definecounter[#tag]% +% \strc_enumerations_setup_counter{#tag}} +% +% \appendtoks +% \strc_counter_setup_using_parameter\v_strc_enumerations_counter_name\enumerationparameter +% \to \everysetupenumerationcounter +% +% \appendtoks +% \ifx\currentenumeration\empty +% \synchronizeenumerationcounters % this one can also do the rest .... but we need an extra arg then +% \else +% \strc_enumerations_setup_counter\currentenumeration +% \fi +% \to \everysetupenumeration + +\def\strc_enumerations_define_counter#tag% todo: move inline + {\definecounter[#tag]% + \registerenumerationcounter{#tag}} \appendtoks - \ifx\currentenumeration\empty \else - \strc_enumerations_setup_counter\currentenumeration - \fi + \synchronizeenumerationcounters \to \everysetupenumeration %D Initializer: @@ -380,7 +392,7 @@ \fi \fi} -\unexpanded\def\strc_enumerations_skip_number_coupling[#1]% e.g. for questions with no answer - {\ctxlua{structures.references.setnextorder("construction","#1")}} +\unexpanded\def\strc_enumerations_skip_number_coupling[#tag]% e.g. for questions with no answer + {\ctxlua{structures.references.setnextorder("construction","#tag")}} \protect \endinput diff --git a/tex/context/base/strc-flt.mkvi b/tex/context/base/strc-flt.mkvi index 954748f27..696a03e99 100644 --- a/tex/context/base/strc-flt.mkvi +++ b/tex/context/base/strc-flt.mkvi @@ -140,20 +140,11 @@ %D Individial settings: -\strc_counter_preset_using_parameter\setupcaption\rootcounterparameter - -\newtoks\t_strc_parent_floats_synchronize % *1* - -\unexpanded\def\strc_floats_synchronize#1% \gobbleoneargument - {\strc_counter_setup_using_parameter{#1}\floatcaptionparameter} +\installcounterassociation{floatcaption} \appendtoks \let\currentfloat\currentfloatcaption - \ifx\currentfloat\empty - \the\t_strc_parent_floats_synchronize - \else - \strc_counter_setup_using_parameter\currentfloatcaption\floatcaptionparameter - \fi + \synchronizefloatcaptioncounters \to \everysetupfloatcaption %D Definitions: @@ -173,7 +164,7 @@ \fi\fi} \def\strc_floats_define_normal[#1][#2]% - {\appendtoks\strc_floats_synchronize{#1}\to\t_strc_parent_floats_synchronize + {\registerfloatcaptioncounter{#1}% \definefloatcaption[#1]% \definecounter[#1]% \definelist[#1]% diff --git a/tex/context/base/strc-itm.mkvi b/tex/context/base/strc-itm.mkvi index 40e9a4cbe..5840ee73e 100644 --- a/tex/context/base/strc-itm.mkvi +++ b/tex/context/base/strc-itm.mkvi @@ -611,12 +611,11 @@ \strc_itemgroups_insert_item_counter_indeed \fi} -\def\strc_itemgroups_insert_item_counter_indeed % quite slow ... every time this setup - {\begingroup % can be optimized +\def\strc_itemgroups_insert_item_counter_indeed % quite slow ... every time this setup .. but it + {\begingroup % can be optimized ... best move some to strc-num \setupcounter [\v_strc_itemgroups_counter]% - [%\c!prefix=\v!no, - \c!prefix=\itemgroupparameter\c!prefix, + [\c!prefix=\itemgroupparameter\c!prefix, \c!prefixstopper=\itemgroupparameter\c!prefixstopper, \c!prefixseparatorset=\itemgroupparameter\c!prefixseparatorset, \c!prefixconversion=\itemgroupparameter\c!prefixconversion, @@ -627,9 +626,7 @@ \c!criterium=\itemgroupparameter\c!criterium, \c!numberorder=\ifconditional\c_strc_itemgroups_reverse\v!reverse\else\v!normal\fi, \c!numberstopper=\expdoif{\itemgroupparameter\c!placestopper}\v!yes{\itemgroupparameter\c!stopper}, - %\c!numberseparatorset=, - \c!numberconversionset=\v_strc_itemgroups_counter, % itemgroup:\currentparentitemgroup, - %\c!numberconversion=\currentitemgroupsymbol, + \c!numberconversionset=\v_strc_itemgroups_counter, \c!numbersegments=\currentitemgroupsegments]% % there will be a fixedconversion key %\normalexpanded{\defineconversionset[\v_strc_itemgroups_counter][\currentitemgroupconversionset][\currentitemgroupsymbol]}% diff --git a/tex/context/base/strc-lab.mkiv b/tex/context/base/strc-lab.mkiv index 0039a68fd..28a5020ed 100644 --- a/tex/context/base/strc-lab.mkiv +++ b/tex/context/base/strc-lab.mkiv @@ -23,6 +23,8 @@ \installcommandhandler \??labels {label} \??labels % plural hash, else clash with label (or rename that one) +\installcounterassociation{label} + \let\setuplabels\setuplabel \setuplabel @@ -90,7 +92,7 @@ \fi \doifcounterelse\p_counter\donothing{\strc_labels_define_counter\p_counter}% \letlabelparameter\s!counter\p_counter - \strc_labels_setup_counter\currentlabel + %\strc_labels_setup_counter\currentlabel \to \everydefinelabel \let\p_strc_constructions_title \empty @@ -137,26 +139,34 @@ % similar to enumerations -\newtoks\everysetuplabelcounter - -\let\v_strc_labels_counter_name\empty - -\def\strc_labels_setup_counter#1% - {\edef\v_strc_labels_counter_name{#1}% - \the\everysetuplabelcounter} +% \newtoks\everysetuplabelcounter +% +% \let\v_strc_labels_counter_name\empty +% +% \def\strc_labels_setup_counter#1% +% {\edef\v_strc_labels_counter_name{#1}% +% \the\everysetuplabelcounter} +% +% \def\strc_labels_define_counter#1% +% {\definecounter[#1]% +% \strc_labels_setup_counter{#1}} +% +% \appendtoks +% \strc_counter_setup_using_parameter\v_strc_labels_counter_name\labelparameter +% \to \everysetuplabelcounter +% +% \appendtoks +% \ifx\currentlabel\empty \else +% \strc_labels_setup_counter\currentlabel +% \fi +% \to \everysetuplabel \def\strc_labels_define_counter#1% {\definecounter[#1]% - \strc_labels_setup_counter{#1}} - -\appendtoks - \strc_counter_setup_using_parameter\v_strc_labels_counter_name\labelparameter -\to \everysetuplabelcounter + \registerlabelcounter{#1}} \appendtoks - \ifx\currentlabel\empty \else - \strc_labels_setup_counter\currentlabel - \fi + \synchronizelabelcounters \to \everysetuplabel % no start stop here diff --git a/tex/context/base/strc-mat.mkiv b/tex/context/base/strc-mat.mkiv index 0d84bf8b1..933dce48a 100644 --- a/tex/context/base/strc-mat.mkiv +++ b/tex/context/base/strc-mat.mkiv @@ -50,17 +50,23 @@ \setupsubformulas % subformulas could be last in chain [\c!indentnext=\formulaparameter\c!indentnext] -\definecounter +\definecounter % one ? [\v!formula] \defineconversionset [\v!formula] [numbers,characters] % no \v! ? -\strc_counter_preset_using_parameter\setupformulas\rootcounterparameter +% \strc_counter_preset_using_parameter\setupformulas\rootcounterparameter +% +% \appendtoks +% \strc_counter_setup_using_parameter\v!formula\formulaparameter +% \to \everysetupformula + +\installcounterassociation{formula} \registerformulacounter\v!formula % currently we only have one \appendtoks - \strc_counter_setup_using_parameter\v!formula\formulaparameter + \synchronizeformulacounters \to \everysetupformula \setupformulas diff --git a/tex/context/base/strc-not.mkvi b/tex/context/base/strc-not.mkvi index 0579eb540..a7cad42aa 100644 --- a/tex/context/base/strc-not.mkvi +++ b/tex/context/base/strc-not.mkvi @@ -67,6 +67,8 @@ \installcommandhandler \??notation {notation} \??notation +\installcounterassociation{notation} + \let\setupnotations\setupnotation \definesymbol[\v!note:\v!previouspage][\llap{\low{\symbol[\v!previouspage]}}] @@ -172,7 +174,7 @@ \fi \doifcounterelse\p_counter\donothing{\strc_notes_define_counter\p_counter}% \letnotationparameter\s!counter\p_counter - \strc_notes_setup_counter\currentnotation + %\strc_notes_setup_counter\currentnotation \to \everydefinenotation \let\p_strc_constructions_title \empty @@ -411,26 +413,36 @@ % maybe we will share this at some point: -\newtoks\everysetupnotecounter - -\let\v_strc_note_counter_name\empty - -\def\strc_notes_setup_counter#tag% - {\edef\v_strc_note_counter_name{#tag}% only used in the token list - \the\everysetupnotecounter} +% \newtoks\everysetupnotecounter +% +% \let\v_strc_note_counter_name\empty +% +% \def\strc_notes_setup_counter#tag% +% {\edef\v_strc_note_counter_name{#tag}% only used in the token list +% \the\everysetupnotecounter} +% +% \def\strc_notes_define_counter#tag% todo: fast inheritance (was mainparameter +% {\definecounter[#tag]% +% \strc_notes_setup_counter{#tag}} +% +% \appendtoks +% \strc_counter_setup_using_parameter\v_strc_note_counter_name\notationparameter +% \to \everysetupnotecounter +% +% \appendtoks +% \ifx\currentnotation\empty +% \synchronizeenumerationcounters +% \else +% \strc_notes_setup_counter\currentnotation +% \fi +% \to \everysetupnotation -\def\strc_notes_define_counter#tag% todo: fast inheritance (was mainparameter +\def\strc_notes_define_counter#tag% todo: move inline {\definecounter[#tag]% - \strc_notes_setup_counter{#tag}} + \registerenumerationcounter{#tag}} \appendtoks - \strc_counter_setup_using_parameter\v_strc_note_counter_name\notationparameter -\to \everysetupnotecounter - -\appendtoks - \ifx\currentnotation\empty \else - \strc_notes_setup_counter\currentnotation - \fi + \synchronizenotationcounters \to \everysetupnotation % so far diff --git a/tex/context/base/strc-num.mkiv b/tex/context/base/strc-num.mkiv index 96d1f0816..c4d54e512 100644 --- a/tex/context/base/strc-num.mkiv +++ b/tex/context/base/strc-num.mkiv @@ -620,32 +620,10 @@ \let\m_strc_counters_last_registered_attribute \relax \let\m_strc_counters_last_registered_synchronize\relax -\def\strc_counter_setup_using_parameter#1#2% name \someparameter - {\setupcounter - [#1] - [ \c!start=#2\c!start, - \c!state=#2\c!state, % beware, "" == start - \c!way=#2\c!way, - % - \c!prefix=#2\c!prefix, - \c!prefixseparatorset=#2\c!prefixseparatorset, - \c!prefixconversion=#2\c!prefixconversion, - \c!prefixconversionset=#2\c!prefixconversionset, - \c!prefixstarter=#2\c!prefixstarter, - \c!prefixstopper=#2\c!prefixstopper, - \c!prefixset=#2\c!prefixset, - \c!prefixsegments=#2\c!prefixsegments, - \c!prefixset=#2\c!prefixset, - \c!prefixconnector=#2\c!prefixconnector, - % - \c!numberseparatorset=#2\c!numberseparatorset, - \c!numberconversion=#2\c!numberconversion, - \c!numberconversionset=#2\c!numberconversionset, - \c!numberstarter=#2\c!numberstarter, - \c!numberstopper=#2\c!numberstopper, - \c!numbersegments=#2\c!numbersegments]} - -\def\strc_counter_preset_using_parameter#1#2% \setupcommand \someparameter +% This can be improved as we don't need to pas all these variables +% each time (we can set them up once). + +\unexpanded\def\strc_counter_preset_using_parameter#1#2% \setupcommand \someparameter {#1% [\c!way =#2\c!way, \c!prefix =#2\c!prefix, @@ -664,4 +642,104 @@ \c!numberstopper =#2\c!numberstopper, \c!numbersegments =#2\c!numbersegments]} +% \unexpanded\def\strc_counter_setup_using_parameter#1#2% name \someparameter +% {\setupcounter +% [#1] +% [ \c!start=#2\c!start, +% \c!state=#2\c!state, % beware, "" == start +% \c!way=#2\c!way, +% % +% \c!prefix=#2\c!prefix, +% \c!prefixseparatorset=#2\c!prefixseparatorset, +% \c!prefixconversion=#2\c!prefixconversion, +% \c!prefixconversionset=#2\c!prefixconversionset, +% \c!prefixstarter=#2\c!prefixstarter, +% \c!prefixstopper=#2\c!prefixstopper, +% \c!prefixset=#2\c!prefixset, +% \c!prefixsegments=#2\c!prefixsegments, +% \c!prefixset=#2\c!prefixset, +% \c!prefixconnector=#2\c!prefixconnector, +% % +% \c!numberseparatorset=#2\c!numberseparatorset, +% \c!numberconversion=#2\c!numberconversion, +% \c!numberconversionset=#2\c!numberconversionset, +% \c!numberstarter=#2\c!numberstarter, +% \c!numberstopper=#2\c!numberstopper, +% \c!numbersegments=#2\c!numbersegments]} + +\unexpanded\def\strc_counter_setup_using_parameter#1#2% name \someparameter + {\edef\currentcounter{#1}% + % + \setcounterparameter \c!start{#2\c!start}% + \setcounterparameter \c!state{#2\c!state}% % beware, "" == start + \setcounterparameter \c!way{#2\c!way}% + % + \setcounterparameter \c!prefix{#2\c!prefix}% + \setcounterparameter \c!prefixseparatorset{#2\c!prefixseparatorset}% + \setcounterparameter \c!prefixconversion{#2\c!prefixconversion}% + \setcounterparameter\c!prefixconversionset{#2\c!prefixconversionset}% + \setcounterparameter \c!prefixstarter{#2\c!prefixstarter}% + \setcounterparameter \c!prefixstopper{#2\c!prefixstopper}% + \setcounterparameter \c!prefixset{#2\c!prefixset}% + \setcounterparameter \c!prefixsegments{#2\c!prefixsegments}% + \setcounterparameter \c!prefixset{#2\c!prefixset}% + \setcounterparameter \c!prefixconnector{#2\c!prefixconnector}% + % + \setcounterparameter \c!numberseparatorset{#2\c!numberseparatorset}% + \setcounterparameter \c!numberconversion{#2\c!numberconversion}% + \setcounterparameter\c!numberconversionset{#2\c!numberconversionset}% + \setcounterparameter \c!numberstarter{#2\c!numberstarter}% + \setcounterparameter \c!numberstopper{#2\c!numberstopper}% + \setcounterparameter \c!numbersegments{#2\c!numbersegments}% + % + \the\everysetupcounter} + +\unexpanded\def\mult_interfaces_counter_association#1#2#3#4#5#6#7% tag current setup parameter list sync register + {\strc_counter_preset_using_parameter#3\rootcounterparameter + \newtoks#5% + \unexpanded\def #6{\ifx#2\empty\the#5\else\strc_counter_setup_using_parameter#2#4\fi}% sync + \unexpanded\def#7##1{\normalexpanded{#5{\the#5\strc_counter_setup_using_parameter{##1}\noexpand#4}}}} % register + +\unexpanded\def\installcounterassociation#1% => synchronize#1counters register#1counter + {\normalexpanded + {\mult_interfaces_counter_association + {#1}% not \??xx but xx + \expandafter\noexpand\csname current#1\endcsname + \expandafter\noexpand\csname setup#1\endcsname + \expandafter\noexpand\csname #1parameter\endcsname + \expandafter\noexpand\csname counter_association_list_#1\endcsname + \expandafter\noexpand\csname synchronize#1counters\endcsname + \expandafter\noexpand\csname register#1counter\endcsname}} + +% needs testing: +% +% \unexpanded\def\strc_counter_setup_push#1#2#3% \someparameter \directsomeparameter \setexpandedsomeparameter +% {\let\savedcounterparameter \counterparameter +% \let\saveddirectcounterparameter \directcounterparameter +% \let\savedsetexpandedcounterparameter\setexpandedcounterparameter +% % remap +% \let\counterparameter #1% +% \let\directcounterparameter #2% +% \let\setexpandedcounterparameter #3} +% +% \unexpanded\def\strc_counter_setup_pop +% {\let\counterparameter \savedcounterparameter +% \let\directcounterparameter \saveddirectcounterparameter +% \let\setexpandedcounterparameter \savedsetexpandedcounterparameter} +% +% \unexpanded\def\mult_interfaces_counter_association#1#2#3#4#5#6#7% tag current setup parameter list sync register +% {\strc_counter_preset_using_parameter#3\rootcounterparameter +% \newtoks#5% +% \unexpanded\def#6% sync +% {\strc_counter_setup_push +% \ifx#2\empty +% \the#5% +% \else +% \let\currentcounter\empty +% \the\everysetupcounter +% \fi +% \strc_counter_setup_pop}% +% \unexpanded\def#7##1% register +% {\normalexpanded{#5{\the#5\edef\noexpand\currentcounter{##1}\noexpand\the\everysetupcounter}}}} + \protect \endinput diff --git a/tex/context/base/util-pck.lua b/tex/context/base/util-pck.lua index 7937ff557..cf1445b40 100644 --- a/tex/context/base/util-pck.lua +++ b/tex/context/base/util-pck.lua @@ -127,11 +127,12 @@ function packers.unpack(t,p,shared) if tp.version == (p and p.version or packers.version) then unpack(t,tp.keys,tp.index) else - -- fatal error, wrong version + return false end t.packer = nil end end + return true end function packers.strip(p) diff --git a/tex/context/base/x-mathml.lua b/tex/context/base/x-mathml.lua index 988758b14..31483bbea 100644 --- a/tex/context/base/x-mathml.lua +++ b/tex/context/base/x-mathml.lua @@ -481,38 +481,25 @@ function mathml.mo(id) context(simpleoperatorremapper(rep)) end --- function mathml.mi(id) --- local e = getid(id) --- local str = e.dt --- if type(str) == "string" then -- we need a helper for this in the xml namespace ... xml.type(e) --- -- local str = xmlcontent(e) or "" --- local str = gsub(str,"&.-;","") -- needed? --- local rep = i_replacements[str] --- if not rep then --- rep = gsub(str,".",i_replacements) --- end --- context(rep) --- -- context.mi(rep) --- else --- context.xmlflush(id) -- xmlsprint or so --- end --- end - function mathml.mi(id) -- we need to strip comments etc .. todo when reading in tree local e = getid(id) local str = e.dt - local n = #str - if n == 0 then - -- nothing to do - elseif n == 1 then - local str = gsub(str[1],"&.-;","") -- bah - local rep = i_replacements[str] - if not rep then - rep = gsub(str,".",i_replacements) + if type(str) == "string" then + local n = #str + if n == 0 then + -- nothing to do + elseif n == 1 then + local str = gsub(str[1],"&.-;","") -- bah + local rep = i_replacements[str] + if not rep then + rep = gsub(str,".",i_replacements) + end + context(rep) + -- context.mi(rep) + else + context.xmlflush(id) -- xmlsprint or so end - context(rep) - -- context.mi(rep) else context.xmlflush(id) -- xmlsprint or so end diff --git a/tex/context/base/x-mathml.mkiv b/tex/context/base/x-mathml.mkiv index cf861cd7b..99b9f92af 100644 --- a/tex/context/base/x-mathml.mkiv +++ b/tex/context/base/x-mathml.mkiv @@ -2171,7 +2171,7 @@ } \stopxmlsetups -\def\mmlexecuteifdefined#1% +\unexpanded\def\mmlexecuteifdefined#1% {\ifx#1\empty \expandafter\secondoftwoarguments \else\ifcsname#1\endcsname @@ -2183,7 +2183,7 @@ \startxmlsetups mml:mover \edef\mmlovertoken{\xmlraw{#1}{/mml:*[2]}} - \doifelseutfmathaccentfiltered\mmlovertoken{topaccent} { + \doifelseutfmathaccentfiltered\mmlovertoken{topaccent} {% not ok \edef\mmlovercommand{\utfmathcommandfiltered\mmlovertoken{topaccent}} \mmlexecuteifdefined\mmlovercommand\mathematics{\mmlfirst{#1}} } { @@ -2191,14 +2191,15 @@ \edef\mmlbasecommand{\utfmathfiller\mmlbasetoken} \edef\mmlovercommand{\utfmathfiller\mmlovertoken} \vbox { - \mathsurround\zeropoint \ialign { - \hss$##$\hss + \mathsurround\zeropoint + \ialign { + \hss$\alignmark\alignmark$\hss \crcr \noalign{\kern3\onepoint}% - \mmlexecuteifdefined\mmlovercommand{\mmlsecond{#1}} + \mmlexecuteifdefined\mmlovercommand{\mmlsecond{#1}}{}% extra {} is safeguard \crcr \noalign{\kern3\onepoint\nointerlineskip}% - \mmlexecuteifdefined\mmlbasecommand{\mmlfirst{#1}} + \mmlexecuteifdefined\mmlbasecommand{\mmlfirst{#1}}{}% extra {} is safeguard \crcr } } diff --git a/tex/context/base/x-res-01.mkiv b/tex/context/base/x-res-01.mkiv index 4931b5650..e234e9867 100644 --- a/tex/context/base/x-res-01.mkiv +++ b/tex/context/base/x-res-01.mkiv @@ -140,20 +140,20 @@ \xmlloadonly{main}{\inputfilename}{} -\mainlanguage[\xmlattributedef{main}{/rl:library}{language}{en}] +\mainlanguage[\xmlattributedef{main}{/rlx:library}{language}{en}] \startxmlsetups xml:resource:asis \startTEXpage[pagestate=start] - \xmldoifelsetext{#1}{/rl:label} { - \edef\CurrentLabel{\xmltext{#1}{rl:label}} + \xmldoifelsetext{#1}{/rlx:label} { + \edef\CurrentLabel{\xmltext{#1}{rlx:label}} } { - \edef\CurrentLabel{\xmltext{#1}{rl:file}} + \edef\CurrentLabel{\xmltext{#1}{rlx:file}} } \pagereference [ asis:\CurrentLabel ] \gotobox { - \externalfigure[\xmltext{#1}{/rl:file}] + \externalfigure[\xmltext{#1}{/rlx:file}] }[% tricky no space before [ data:\CurrentLabel ] @@ -195,7 +195,7 @@ ] { \externalfigure - [\xmltext{#1}{rl:file}] + [\xmltext{#1}{rlx:file}] [factor=max] } [ @@ -216,7 +216,7 @@ ] { \externalfigure [ - \xmltext{#1}{rl:file} + \xmltext{#1}{rlx:file} ] [ factor=max ] @@ -227,10 +227,10 @@ % using a layer makes more sense but we had this ... - \xmldoifelsetext{#1}{/rl:label} { - \edef\CurrentLabel{\xmltext{#1}{rl:label}} + \xmldoifelsetext{#1}{/rlx:label} { + \edef\CurrentLabel{\xmltext{#1}{rlx:label}} } { - \edef\CurrentLabel{\xmltext{#1}{rl:file}} + \edef\CurrentLabel{\xmltext{#1}{rlx:file}} } \button { @@ -241,7 +241,7 @@ %\ifnum\CurrentPage=1 \pagereference[begin]\fi - \expanded{\figureindex{\xmltext{#1}{/rl:label}}} + \expanded{\figureindex{\xmltext{#1}{/rlx:label}}} \vbox to 100pt { \hsize30pt @@ -286,7 +286,7 @@ ] { \externalfigure [ - \xmltext{#1}{rl:file} + \xmltext{#1}{rlx:file} ] [ reset=yes ] @@ -301,12 +301,12 @@ \vbox to 100pt { \blank[disable] \starttabulate[|Bel|p|] - \NC file \NC \xmltext{#1}{/rl:file} \NC \NR - \xmldoif{#1}{/rl:label} {\NC label \NC \xmltext{#1}{/rl:label} \NC \NR} + \NC file \NC \xmltext{#1}{/rlx:file} \NC \NR + \xmldoif{#1}{/rlx:label} {\NC label \NC \xmltext{#1}{/rlx:label} \NC \NR} \NC dimensions \NC \CurrentWidth\ * \CurrentHeight \NC \NR - \xmldoif{#1}{/rl:copyright} {\NC copyright \NC \xmltext{#1}{/rl:copyright} \NC \NR} - \xmldoif{#1}{/rl:status} {\NC status \NC \xmltext{#1}{/rl:status} \NC \NR} - \xmldoif{#1}{/rl:comment} {\NC comment \NC \xmltext{#1}{/rl:comment} \NC \NR} + \xmldoif{#1}{/rlx:copyright} {\NC copyright \NC \xmltext{#1}{/rlx:copyright} \NC \NR} + \xmldoif{#1}{/rlx:status} {\NC status \NC \xmltext{#1}{/rlx:status} \NC \NR} + \xmldoif{#1}{/rlx:comment} {\NC comment \NC \xmltext{#1}{/rlx:comment} \NC \NR} \stoptabulate \vfill } @@ -322,10 +322,10 @@ \startxmlsetups xml:description \starttabulate[|lBe|p|] - \xmldoif{#1}{/rl:organization} {\NC organization \NC \xmltext{#1}{/rl:organization} \NC \NR} - \xmldoif{#1}{/rl:project} {\NC project \NC \xmltext{#1}{/rl:project} \NC \NR} - \xmldoif{#1}{/rl:product} {\NC product \NC \xmltext{#1}{/rl:product} \NC \NR} - \xmldoif{#1}{/rl:comment} {\NC comment \NC \xmltext{#1}{/rl:comment} \NC \NR} + \xmldoif{#1}{/rlx:organization} {\NC organization \NC \xmltext{#1}{/rlx:organization} \NC \NR} + \xmldoif{#1}{/rlx:project} {\NC project \NC \xmltext{#1}{/rlx:project} \NC \NR} + \xmldoif{#1}{/rlx:product} {\NC product \NC \xmltext{#1}{/rlx:product} \NC \NR} + \xmldoif{#1}{/rlx:comment} {\NC comment \NC \xmltext{#1}{/rlx:comment} \NC \NR} \NC specification \NC \attachment[datafile] \NC \NR \stoptabulate @@ -333,15 +333,15 @@ \starttext - \xmlfilter{main}{/rl:library/rl:resource/command(xml:resource:asis)} + \xmlfilter{main}{/rlx:library/rlx:resource/command(xml:resource:asis)} \subject {Figure collection} - \xmlfilter{main}{/rl:library/rl:description/command(xml:description)} + \xmlfilter{main}{/rlx:library/rlx:description/command(xml:description)} \subject [list] {List of figures} - \xmlfilter{main}{/rl:library/rl:resource/command(xml:resource:data)} + \xmlfilter{main}{/rlx:library/rlx:resource/command(xml:resource:data)} \page @@ -406,19 +406,19 @@ % \def\StopFigureD % {\doglobal\increment\CurrentPage % \setupbackgrounds[page][background=page] -% \startpagefigure[\XMLflush{rl:file}][offset=20pt]% -% \doifelsenothing{\XMLflush{rl:label}} -% {\expanded{\definereference[Description][about:\XMLflush{rl:file}]}% -% \expanded{\pagereference[grid:\XMLflush{rl:file}]}} -% {\expanded{\definereference[Description][about:\XMLflush{rl:label}]}% -% \expanded{\pagereference[grid:\XMLflush{rl:label}]}} +% \startpagefigure[\XMLflush{rlx:file}][offset=20pt]% +% \doifelsenothing{\XMLflush{rlx:label}} +% {\expanded{\definereference[Description][about:\XMLflush{rlx:file}]}% +% \expanded{\pagereference[grid:\XMLflush{rlx:file}]}} +% {\expanded{\definereference[Description][about:\XMLflush{rlx:label}]}% +% \expanded{\pagereference[grid:\XMLflush{rlx:label}]}} % \stoppagefigure -% %\pagefigure[\XMLflush{rl:file}][offset=20pt] +% %\pagefigure[\XMLflush{rlx:file}][offset=20pt] % \setupbackgrounds[page][background=] % \egroup} -% \defineXMLignore [rl:description] -% \defineXMLenvironment [rl:figure] \StartFigureD \StopFigureD +% \defineXMLignore [rlx:description] +% \defineXMLenvironment [rlx:figure] \StartFigureD \StopFigureD % \doglobal\newcounter\CurrentPage diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index b3cc9cc1c..11395bd08 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 : 03/28/13 09:26:25 +-- merge date : 03/28/13 23:10:34 do -- begin closure to overcome local limits and interference @@ -9838,7 +9838,10 @@ local function normal_handle_contextchain(head,start,kind,chainname,contexts,seq else i=i+1 end - start=start.next + if start then + start=start.next + else + end until i>nofchainlookups end else |