diff options
34 files changed, 260 insertions, 155 deletions
diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index 4b417bda2..90c5f8b0f 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{2014.10.29 00:18} +\newcontextversion{2014.10.29 15:20} %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 dec3b2f57..22337038f 100644 --- a/tex/context/base/context-version.pdf +++ b/tex/context/base/context-version.pdf diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index 26a00b8a5..8bd607974 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -28,7 +28,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2014.10.29 00:18} +\edef\contextversion{2014.10.29 15:20} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/core-uti.lua b/tex/context/base/core-uti.lua index d172eb05f..4075043af 100644 --- a/tex/context/base/core-uti.lua +++ b/tex/context/base/core-uti.lua @@ -36,7 +36,7 @@ local report_passes = logs.reporter("job","passes") job = job or { } local job = job -job.version = 1.25 +job.version = 1.26 job.packversion = 1.02 -- some day we will implement loading of other jobs and then we need diff --git a/tex/context/base/font-def.lua b/tex/context/base/font-def.lua index e5c5d990c..fdded3c36 100644 --- a/tex/context/base/font-def.lua +++ b/tex/context/base/font-def.lua @@ -433,8 +433,8 @@ function definers.read(specification,size,id) -- id can be optional, name can al elseif trace_defining and type(tfmdata) == "table" then local properties = tfmdata.properties or { } local parameters = tfmdata.parameters or { } - report_defining("using %s font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a", - properties.format, id, properties.name, parameters.size, properties.encodingbytes, + report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a", + properties.format or "unknown", id, properties.name, parameters.size, properties.encodingbytes, properties.encodingname, properties.fullname, file.basename(properties.filename)) end statistics.stoptiming(fonts) diff --git a/tex/context/base/font-pre.mkiv b/tex/context/base/font-pre.mkiv index cb5b193f6..071d42d09 100644 --- a/tex/context/base/font-pre.mkiv +++ b/tex/context/base/font-pre.mkiv @@ -496,15 +496,16 @@ \definefontsize[\s!a] \definefontsize[\s!b] \definefontsize[\s!c] \definefontsize[\s!d] -\definealternativestyle [\v!mediaeval] [\os] [] -\definealternativestyle [\v!normal] [\tf] [] -\definealternativestyle [\v!bold] [\bf] [] -\definealternativestyle [\v!type] [\tt] [] -\definealternativestyle [\v!mono] [\tt] [] -\definealternativestyle [\v!slanted] [\sl] [] -\definealternativestyle [\v!italic] [\it] [] -\definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] [] -\definealternativestyle [\v!bolditalic,\v!italicbold] [\bi] [] +\definealternativestyle [\v!mediaeval] [\os] [] +\definealternativestyle [\v!normal] [\tf] [] +\definealternativestyle [\v!bold] [\bf] [] +\definealternativestyle [\v!type] [\tt] [] +\definealternativestyle [\v!mono] [\tt] [] +\definealternativestyle [\v!monobold] [\tt\bf] [] +\definealternativestyle [\v!slanted] [\sl] [] +\definealternativestyle [\v!italic] [\it] [] +\definealternativestyle [\v!boldslanted,\v!slantedbold] [\bs] [] +\definealternativestyle [\v!bolditalic,\v!italicbold] [\bi] [] \definealternativestyle [\v!small,\v!smallnormal] [\setsmallbodyfont\tf] [] \definealternativestyle [\v!smallbold] [\setsmallbodyfont\bf] [] diff --git a/tex/context/base/font-syn.lua b/tex/context/base/font-syn.lua index a1bee5d54..450bdad75 100644 --- a/tex/context/base/font-syn.lua +++ b/tex/context/base/font-syn.lua @@ -330,7 +330,7 @@ filters.dfont = fontloader.info -- function fontloader.fullinfo(name) -- local ff = fontloader.open(name) -- if ff then --- local fields = table.tohash(fontloader.fields(ff),true) +-- local fields = table.tohash(fontloader.fields(ff),true) -- isn't that one stable -- local d = { -- names = fields.names and ff.names, -- familyname = fields.familyname and ff.familyname, @@ -356,20 +356,58 @@ filters.dfont = fontloader.info -- end -- end --- As we have lazy loading anyway, this one still is full and with less code than --- the previous one. But this depends on the garbage collector to kick in. +-- more efficient: + +local fields = nil -function fontloader.fullinfo(...) - local ff = fontloader.open(...) +function fontloader.fullinfo(name) + local ff = fontloader.open(name) if ff then - local d = { } -- ff is userdata so [1] or # fails on it - setmetatableindex(d,ff) + if not fields then + fields = table.tohash(fontloader.fields(ff),true) + end + -- unfortunately luatex aborts when a field is not available + local d = { + names = fields.names and ff.names, + familyname = fields.familyname and ff.familyname, + fullname = fields.fullname and ff.fullname, + fontname = fields.fontname and ff.fontname, + weight = fields.weight and ff.weight, + italicangle = fields.italicangle and ff.italicangle, + units_per_em = fields.units_per_em and ff.units_per_em, + design_range_bottom = fields.design_range_bottom and ff.design_range_bottom, + design_range_top = fields.design_range_top and ff.design_range_top, + design_size = fields.design_size and ff.design_size, + italicangle = fields.italicangle and ff.italicangle, + pfminfo = fields.pfminfo and ff.pfminfo, + top_side_bearing = fields.top_side_bearing and ff.top_side_bearing, -- not there + } + setmetatableindex(d,function(t,k) + report_names("warning, trying to access field %a in font table of %a",k,name) + end) + fontloader.close(ff) return d else return nil, "error in loading font" end end +-- As we have lazy loading anyway, this one still is full and with less code than +-- the previous one. But this depends on the garbage collector to kick in and in the +-- current version that somehow happens not that often (on my machine I end up with +-- soem 3 GB extra before that happens). + +-- function fontloader.fullinfo(...) +-- local ff = fontloader.open(...) +-- if ff then +-- local d = { } -- ff is userdata so [1] or # fails on it +-- setmetatableindex(d,ff) +-- return d -- garbage collection will do the fontloader.close(ff) +-- else +-- return nil, "error in loading font" +-- end +-- end + -- We don't get the design_* values here as for that the fontloader has to load feature -- info and therefore we're not much better off than using 'open'. -- diff --git a/tex/context/base/font-tfm.lua b/tex/context/base/font-tfm.lua index 14c130d10..49df94e68 100644 --- a/tex/context/base/font-tfm.lua +++ b/tex/context/base/font-tfm.lua @@ -70,6 +70,7 @@ local function read_from_tfm(specification) properties.fontname = tfmdata.fontname properties.psname = tfmdata.psname properties.filename = specification.filename + properties.format = fonts.formats.tfm -- better than nothing parameters.size = size shared.rawdata = { } shared.features = features diff --git a/tex/context/base/mult-de.mkii b/tex/context/base/mult-de.mkii index 53f0dfd6a..083ea5f08 100644 --- a/tex/context/base/mult-de.mkii +++ b/tex/context/base/mult-de.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{gespiegelt} \setinterfacevariable{monday}{montag} \setinterfacevariable{mono}{mono} +\setinterfacevariable{monobold}{monofett} \setinterfacevariable{month}{monat} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} diff --git a/tex/context/base/mult-def.lua b/tex/context/base/mult-def.lua index b41053dd5..8f18fbf4b 100644 --- a/tex/context/base/mult-def.lua +++ b/tex/context/base/mult-def.lua @@ -14398,6 +14398,16 @@ return { ["pe"]="مونو", ["ro"]="mono", }, + ["monobold"]={ + ["cs"]="monotucne", + ["de"]="monofett", + ["en"]="monobold", + ["fr"]="monogras", + ["it"]="monograssetto", + ["nl"]="monovet", + ["pe"]="monobold", + ["ro"]="monoaldin", + }, ["month"]={ ["cs"]="mesic", ["de"]="monat", diff --git a/tex/context/base/mult-en.mkii b/tex/context/base/mult-en.mkii index 346f94cad..1af7efef3 100644 --- a/tex/context/base/mult-en.mkii +++ b/tex/context/base/mult-en.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{mirrored} \setinterfacevariable{monday}{monday} \setinterfacevariable{mono}{mono} +\setinterfacevariable{monobold}{monobold} \setinterfacevariable{month}{month} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} diff --git a/tex/context/base/mult-fr.mkii b/tex/context/base/mult-fr.mkii index 681c67bbc..5e35fe65a 100644 --- a/tex/context/base/mult-fr.mkii +++ b/tex/context/base/mult-fr.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{reflete} \setinterfacevariable{monday}{lundi} \setinterfacevariable{mono}{mono} +\setinterfacevariable{monobold}{monogras} \setinterfacevariable{month}{mois} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} diff --git a/tex/context/base/mult-it.mkii b/tex/context/base/mult-it.mkii index 4f9941a04..b154fb167 100644 --- a/tex/context/base/mult-it.mkii +++ b/tex/context/base/mult-it.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{riflesso} \setinterfacevariable{monday}{lunedi} \setinterfacevariable{mono}{mono} +\setinterfacevariable{monobold}{monograssetto} \setinterfacevariable{month}{mese} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} diff --git a/tex/context/base/mult-nl.mkii b/tex/context/base/mult-nl.mkii index 771d48c3c..bf441b849 100644 --- a/tex/context/base/mult-nl.mkii +++ b/tex/context/base/mult-nl.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{gespiegeld} \setinterfacevariable{monday}{maandag} \setinterfacevariable{mono}{mono} +\setinterfacevariable{monobold}{monovet} \setinterfacevariable{month}{maand} \setinterfacevariable{more}{meer} \setinterfacevariable{morehyphenation}{morehyphenation} diff --git a/tex/context/base/mult-pe.mkii b/tex/context/base/mult-pe.mkii index 7fa8bb772..b10e03cb0 100644 --- a/tex/context/base/mult-pe.mkii +++ b/tex/context/base/mult-pe.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{منعکس} \setinterfacevariable{monday}{دوشنبه} \setinterfacevariable{mono}{مونو} +\setinterfacevariable{monobold}{monobold} \setinterfacevariable{month}{ماه} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{شکستکلماتبیشتر} diff --git a/tex/context/base/mult-ro.mkii b/tex/context/base/mult-ro.mkii index 0ed0df4f1..42cd8d32c 100644 --- a/tex/context/base/mult-ro.mkii +++ b/tex/context/base/mult-ro.mkii @@ -302,6 +302,7 @@ \setinterfacevariable{mirrored}{oglindit} \setinterfacevariable{monday}{luni} \setinterfacevariable{mono}{mono} +\setinterfacevariable{monobold}{monoaldin} \setinterfacevariable{month}{luna} \setinterfacevariable{more}{more} \setinterfacevariable{morehyphenation}{morehyphenation} diff --git a/tex/context/base/publ-dat.lua b/tex/context/base/publ-dat.lua index 67ab81e9f..0d1e10e66 100644 --- a/tex/context/base/publ-dat.lua +++ b/tex/context/base/publ-dat.lua @@ -160,7 +160,14 @@ local specifications = setmetatableindex(function(t,name) local d = data[t] if d then for i=1,#d do - list[d[i]] = t + local di = d[i] + if type(di) == "table" then + for i=1,#di do + list[di] = di[i] + end + else + list[di] = t + end end else data[t] = { } diff --git a/tex/context/base/publ-imp-apa.lua b/tex/context/base/publ-imp-apa.lua index 5eabfbe22..8ec46b76c 100644 --- a/tex/context/base/publ-imp-apa.lua +++ b/tex/context/base/publ-imp-apa.lua @@ -11,26 +11,26 @@ return { copyright = "ConTeXt development team", categories = { article = { - required = { "author", "editor", "title"}, + required = { { "author", "editor" }, "title"}, optional = { "year", "type", "journal", "volume", "number", "pages", "url", "note", "doi" }, virtual = virtual, author = authors, }, magazine = { - required = { "author", "editor", "title", "journal", "year" }, + required = { { "author", "editor" }, "title", "journal", "year" }, optional = { "volume", "number", "pages", "month", "day", "note", "url", "doi" }, virtual = virtual, author = authors, }, newspaper = { - required = { "author", "editor", "title", "journal", "year" }, + required = { { "author", "editor" }, "title", "journal", "year" }, optional = { "volume", "number", "pages", "month", "day", "note", "url", "doi" }, virtual = virtual, author = authors, }, book = { virtual = { "authoryear" }, - required = { "author", "editor", "publisher", "title"}, + required = { { "author", "editor", "publisher" }, "title"}, optional = { "year", "month", "day", "title", "type", "edition", "series", "volume", "number", "pages", "address", "publisher", "url", "note", "ISBN" }, virtual = virtual, author = authors, @@ -42,7 +42,7 @@ return { author = authors, }, inbook = { - required = { "author", "editor", "title", "chapter", "pages", "publisher","year" }, + required = { { "author", "editor", "publisher" }, "title", "chapter", "pages","year" }, optional = { "volume", "number", "series", "type", "address", "edition", "month", "note", "ISBN" }, virtual = virtual, author = authors, diff --git a/tex/context/base/publ-ini.mkiv b/tex/context/base/publ-ini.mkiv index 254c99994..391c9c7d8 100644 --- a/tex/context/base/publ-ini.mkiv +++ b/tex/context/base/publ-ini.mkiv @@ -1265,7 +1265,7 @@ field = "\btxregisterparameter\c!field", register = "\btxregisterparameter\c!register", method = "\btxregisterparameter\c!method", - alternative = "\btxregisterparameter\c!alternative", + % alternative = "\btxregisterparameter\c!alternative", }}% \fi} @@ -1278,55 +1278,69 @@ \to \everysetupbtxregister \appendtoks + \normalexpanded{% + \defineprocessor + [\s!btx:r:\currentbtxregister]% + [\c!style=\noexpand\namedbtxregisterparameter{\currentbtxregister}\noexpand\c!style, + \c!color=\noexpand\namedbtxregisterparameter{\currentbtxregister}\noexpand\c!color]}% +\to \everydefinebtxregister + +\appendtoks \ctxcommand{btxtoregister("\currentbtxdataset","\currentbtxtag")}% \to \t_btx_reference_inject -\unexpanded\def\dosetfastregisterentry#1#2#3% register entry key - {\begingroup - \edef\currentregister{#1}% - \setnextinternalreference - \xdef\currentregisternumber{\ctxcommand{storeregister{ - metadata = { name = "\currentregister" }, - entries = { { \!!bs#2\!!es }, { \!!bs#3\!!es } }, - } - }}% - \xdef\currentregistersynchronize{\ctxlatecommand{enhanceregister("\currentregister",\currentregisternumber)}}% - \currentregistersynchronize % here? - \dostarttagged\t!registerlocation\currentregister - \attribute\destinationattribute\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup - \dotagregisterlocation - \dostoptagged - \endgroup} +% \unexpanded\def\dosetfastregisterentry#1#2#3% register entry key +% {\begingroup +% \edef\currentregister{#1}% +% \setnextinternalreference +% \xdef\currentregisternumber{\ctxcommand{storeregister{ +% metadata = { name = "\currentregister" }, +% entries = { { \!!bs#2\!!es }, { \!!bs#3\!!es } }, +% } +% }}% +% \xdef\currentregistersynchronize{\ctxlatecommand{enhanceregister("\currentregister",\currentregisternumber)}}% +% \currentregistersynchronize % here? +% \dostarttagged\t!registerlocation\currentregister +% \attribute\destinationattribute\lastdestinationattribute \signalcharacter % no \strut as it will be removed during cleanup +% \dotagregisterlocation +% \dostoptagged +% \endgroup} -\unexpanded\def\btx_flush_specific_field#1#2#3#4#5% dataset tag field variant value - {\begingroup - \edef\currentbtxdataset{#1}% - \edef\currentbtxtag {#2}% - \edef\currentbtxfield {#3}% - \let\currentbtxlistvariant\currentbtxfield - \edef\currentbtxcitevariant{#4}% - \usebtxregisterstyleandcolor\c!style\c!color - \edef\tempstring{\currentbtxalternative:register:\currentbtxcitevariant}% - \doifsetupselse\tempstring{\fastsetup\tempstring}{#5}% - \endgroup} +% \unexpanded\def\btx_flush_specific_field#1#2#3#4#5% dataset tag field variant value +% {\begingroup +% \edef\currentbtxdataset{#1}% +% \edef\currentbtxtag {#2}% +% \edef\currentbtxfield {#3}% +% \let\currentbtxlistvariant\currentbtxfield +% \edef\currentbtxcitevariant{#4}% +% \usebtxregisterstyleandcolor\c!style\c!color +% \edef\tempstring{\currentbtxalternative:register:\currentbtxcitevariant}% +% \doifsetupselse\tempstring{\fastsetup\tempstring}{#5}% +% \endgroup} + +% \unexpanded\def\btx_flush_specific_author#1#2#3#4#5% dataset tag field variantindex +% {\begingroup +% \edef\currentbtxdataset{#1}% +% \edef\currentbtxtag {#2}% +% \edef\currentbtxfield {#3}% +% \let\currentbtxlistvariant\currentbtxfield +% \edef\currentbtxcitevariant{#4}% +% \ctxcommand{btxauthor("\currentbtxdataset","\currentbtxtag","\currentbtxfield",{ +% kind = "list", +% index = \number#5, +% combiner = "\currentbtxcitevariant", +% })}% +% \endgroup} + +% \let\dobtxindexedfield \btx_flush_specific_field % used at lua end +% \let\dobtxindexedauthor\btx_flush_specific_author % used at lua end -\unexpanded\def\btx_flush_specific_author#1#2#3#4#5% dataset tag field variantindex +\unexpanded\def\dobtxindexedfield#1% value {\begingroup - \edef\currentbtxdataset{#1}% - \edef\currentbtxtag {#2}% - \edef\currentbtxfield {#3}% - \let\currentbtxlistvariant\currentbtxfield - \edef\currentbtxcitevariant{#4}% - \ctxcommand{btxauthor("\currentbtxdataset","\currentbtxtag","\currentbtxfield",{ - kind = "list", - index = \number#5, - combiner = "\currentbtxcitevariant", - })}% + \usebtxregisterstyleandcolor\c!style\c!color + #1% \endgroup} -\let\dobtxindexedfield \btx_flush_specific_field % used at lua end -\let\dobtxindexedauthor\btx_flush_specific_author % used at lua end - %D Defaults: \setbtxdataset diff --git a/tex/context/base/publ-reg.lua b/tex/context/base/publ-reg.lua index ee2bd6f47..80a3b789c 100644 --- a/tex/context/base/publ-reg.lua +++ b/tex/context/base/publ-reg.lua @@ -26,7 +26,7 @@ local sequence = { } local flushers = { } function commands.setbtxregister(specification) - local name = specification.name or "unset" + local name = specification.name local register = specification.register local dataset = specification.dataset local field = specification.field @@ -50,18 +50,13 @@ function commands.setbtxregister(specification) -- -- check all -- - local alternative = specification.alternative or d.alternative - if not alternative or alternative == "" then - alternative = field - end - -- - d.active = specification.state ~= v_stop - d.once = specification.method == v_once or false - d.field = field - d.alternative = alternative - d.register = register - d.dataset = dataset - d.done = d.done or { } + d.active = specification.state ~= v_stop + d.once = specification.method == v_once or false + d.field = field + d.processor = name ~= register and name or "" + d.register = register + d.dataset = dataset + d.done = d.done or { } -- sequence = { } for register, s in sortedhash(specifications) do @@ -83,11 +78,14 @@ function commands.btxtoregister(dataset,tag) local current = datasets[dataset] local entry = current.luadata[tag] if entry then - local register = step.register - local field = step.field - local alternative = step.alternative - local flusher = flushers[field] or flushers.default - flusher(register,dataset,tag,field,alternative,current,entry,current.details[tag]) + local register = step.register + local field = step.field + local processor = step.processor + local flusher = flushers[field] or flushers.default + if processor and processor ~= "" then + processor = "btx:r:" .. processor + end + flusher(register,dataset,tag,field,processor,current,entry,current.details[tag]) end done[tag] = true end @@ -104,45 +102,38 @@ end local ctx_dosetfastregisterentry = context.dosetfastregisterentry -- register entry key -local f_field = formatters[ [[\dobtxindexedfield{%s}{%s}{%s}{%s}{%s}]] ] -local f_author = formatters[ [[\dobtxindexedauthor{%s}{%s}{%s}{%s}{%s}]] ] - local p_keywords = lpeg.tsplitat(lpeg.patterns.whitespace^0 * lpeg.P(";") * lpeg.patterns.whitespace^0) local writer = publications.serializeauthor -function flushers.default(register,dataset,tag,field,alternative,current,entry,detail) +function flushers.default(register,dataset,tag,field,processor,current,entry,detail) local k = detail[field] or entry[field] if k then - local e = f_field(dataset,tag,field,alternative,k) - ctx_dosetfastregisterentry(register,e,k) + ctx_dosetfastregisterentry(register,k,"",processor,"") end end -function flushers.author(register,dataset,tag,field,alternative,current,entry,detail) +function flushers.author(register,dataset,tag,field,processor,current,entry,detail) if detail then local author = detail[field] if author then for i=1,#author do - local a = author[i] - local k = writer{a} - local e = f_author(dataset,tag,field,alternative,i) - ctx_dosetfastregisterentry(register,e,k) + local k = writer { author[i] } + ctx_dosetfastregisterentry(register,k,"",processor,"") -- todo .. sort key end end end end -function flushers.keywords(register,dataset,tag,field,alternative,current,entry,detail) +function flushers.keywords(register,dataset,tag,field,processor,current,entry,detail) if entry then - -- we don't split keywords in details (yet) ... could be an alternative some day local keywords = entry[field] if keywords then keywords = lpegmatch(p_keywords,keywords) for i=1,#keywords do local k = keywords[i] - local e = f_field(dataset,tag,field,alternative,k) - ctx_dosetfastregisterentry(register,e,k) + ctx_dosetfastregisterentry(register,k,"",processor,"") end end end end + diff --git a/tex/context/base/publ-tra.lua b/tex/context/base/publ-tra.lua index cd4ebca1a..531a9409a 100644 --- a/tex/context/base/publ-tra.lua +++ b/tex/context/base/publ-tra.lua @@ -19,7 +19,7 @@ local specifications = publications.specifications local context = context local ctx_NC, ctx_NR, ctx_HL, ctx_FL, ctx_ML, ctx_LL = context.NC, context.NR, context.HL, context.FL, context.ML, context.LL -local ctx_bold, ctx_rotate, ctx_llap = context.bold, context.rotate, context.llap +local ctx_bold, ctx_monobold, ctx_rotate, ctx_llap = context.bold, context.formatted.monobold, context.rotate, context.llap local ctx_darkgreen, ctx_darkred, ctx_darkblue = context.darkgreen, context.darkred, context.darkblue local ctx_starttabulate, ctx_stoptabulate = context.starttabulate, context.stoptabulate @@ -92,63 +92,67 @@ function tracers.showdatasetcompleteness(settings) local lpegmatch = lpeg.match local texescape = lpeg.patterns.texescape - local preamble = { "|lBTw(10em)|p|" } + local preamble = { "|lTBw(5em)|lBTp(10em)|p|" } - local function required(foundfields,key,value,indirect) - ctx_NC() ctx_darkgreen(key) - ctx_NC() if indirect then - ctx_darkblue(lpegmatch(texescape,value)) - elseif value then - context(lpegmatch(texescape,value)) + local function identified(tag,category,crossref) + ctx_NC() + ctx_NC() ctx_monobold(category) + ctx_NC() if crossref then + ctx_monobold("%s\\hfill\\darkblue => %s",tag,crossref) else - ctx_darkred("\\tttf [missing]") + ctx_monobold(tag) end ctx_NC() ctx_NR() - foundfields[key] = nil end - local function optional(foundfields,key,value,indirect) + local function required(done,foundfields,key,value,indirect) + ctx_NC() if not done then context("required") end ctx_NC() context(key) - ctx_NC() if indirect then - ctx_darkblue(lpegmatch(texescape,value)) - elseif value then + ctx_NC() + if indirect then + if value then + ctx_darkblue(lpegmatch(texescape,value)) + else + ctx_darkred("\\tttf [missing crossref]") + end + elseif value then context(lpegmatch(texescape,value)) - end + else + ctx_darkred("\\tttf [missing value]") + end ctx_NC() ctx_NR() foundfields[key] = nil + return done or true end - local function optional(foundfields,key,value,indirect) + local function optional(done,foundfields,key,value,indirect) + ctx_NC() if not done then context("optional") end ctx_NC() context(key) - ctx_NC() if indirect then + ctx_NC() + if indirect then ctx_darkblue(lpegmatch(texescape,value)) - elseif value then + elseif value then context(lpegmatch(texescape,value)) - end + end ctx_NC() ctx_NR() foundfields[key] = nil + return done or true end - local function identified(tag,category,crossref) - ctx_NC() context(category) - ctx_NC() if crossref then - context("\\tttf %s\\hfill\\darkblue => %s",tag,crossref) - else - context("\\tttf %s",tag) - end - ctx_NC() ctx_NR() - end - - local function special(key,value) - ctx_NC() ctx_darkblue(key) + local function special(done,key,value) + ctx_NC() if not done then context("special") end + ctx_NC() context(key) ctx_NC() context(lpegmatch(texescape,value)) ctx_NC() ctx_NR() + return done or true end - local function extra(key,value) - ctx_NC() ctx_llap("+") context(key) + local function extra(done,key,value) + ctx_NC() if not done then context("extra") end + ctx_NC() context(key) ctx_NC() context(lpegmatch(texescape,value)) ctx_NC() ctx_NR() + return done or true end if next(luadata) then @@ -164,35 +168,37 @@ function tracers.showdatasetcompleteness(settings) ctx_FL() if fields then local requiredfields = fields.required - local optionalfields = fields.optional + local done = false if requiredfields then for i=1,#requiredfields do local r = requiredfields[i] if type(r) == "table" then -- this has to be done differently now - local okay = true + local okay = false for i=1,#r do local ri = r[i] if rawget(entry,ri) then - required(foundfields,ri,entry[ri]) + done = required(done,foundfields,ri,entry[ri]) okay = true elseif entry[ri] then - required(foundfields,ri,entry[ri],true) + done = required(done,foundfields,ri,entry[ri],true) okay = true end end if not okay then - required(foundfields,table.concat(r,"\\letterbar ")) + done = required(done,foundfields,table.concat(r,"\\space\\letterbar\\space")) end elseif rawget(entry,r) then - required(foundfields,r,entry[r]) + done = required(done,foundfields,r,entry[r]) elseif entry[r] then - required(foundfields,r,entry[r],true) + done = required(done,foundfields,r,entry[r],true) else - required(foundfields,r) + done = required(done,foundfields,r) end end end + local optionalfields = fields.optional + local done = false if optionalfields then for i=1,#optionalfields do local o = optionalfields[i] @@ -201,26 +207,33 @@ function tracers.showdatasetcompleteness(settings) for i=1,#o do local oi = o[i] if rawget(entry,oi) then - optional(foundfields,oi,entry[oi]) + done = optional(done,foundfields,oi,entry[oi]) elseif entry[oi] then - optional(foundfields,oi,entry[oi],true) + done = optional(done,foundfields,oi,entry[oi],true) end end elseif rawget(entry,o) then - optional(foundfields,o,entry[o]) + done = optional(done,foundfields,o,entry[o]) elseif entry[o] then - optional(foundfields,o,entry[o],true) + done = optional(done,foundfields,o,entry[o],true) end end end end + local done = false for k, v in sortedhash(foundfields) do if privates[k] then -- skip elseif specials[k] then - special(k,entry[k]) - else - extra(k,entry[k]) + done = special(done,k,entry[k]) + end + end + local done = false + for k, v in sortedhash(foundfields) do + if privates[k] then + -- skip + elseif not specials[k] then + done = extra(done,k,entry[k]) end end ctx_stoptabulate() @@ -239,7 +252,14 @@ function tracers.showfields(settings) for category, fields in next, categories do for name, list in next, fields do for i=1,#list do - validfields[list[i]] = true + local li = list[i] + if type(li) == "table" then + for i=1,#li do + validfields[li[i]] = true + end + else + validfields[li] = true + end end end end diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf Binary files differindex 634787db2..bc04db1f0 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 3ad31abd0..8c24e51d1 100644 --- a/tex/context/base/status-lua.pdf +++ b/tex/context/base/status-lua.pdf diff --git a/tex/context/base/strc-reg.lua b/tex/context/base/strc-reg.lua index 7d001953f..c14198239 100644 --- a/tex/context/base/strc-reg.lua +++ b/tex/context/base/strc-reg.lua @@ -466,6 +466,7 @@ end local function storeregister(rawdata) -- metadata, references, entries local references = rawdata.references local metadata = rawdata.metadata + local processors = rawdata.processors -- checking if not metadata.kind then metadata.kind = "entry" @@ -475,6 +476,10 @@ local function storeregister(rawdata) -- metadata, references, entries metadata.catcodes = tex.catcodetable -- get end -- + if processors and processors[1] == "" and processors[2] == "" then + rawdata.processors = nil + end + -- local name = metadata.name local notsaved = tobesaved[name].metadata.notsaved -- @@ -482,6 +487,7 @@ local function storeregister(rawdata) -- metadata, references, entries references = { } rawdata.references = references end + -- local internal = references.internal if not internal then internal = texgetcount("locationcount") -- we assume that it has been set diff --git a/tex/context/base/strc-reg.mkiv b/tex/context/base/strc-reg.mkiv index 9190abfcd..7a6f4a30d 100644 --- a/tex/context/base/strc-reg.mkiv +++ b/tex/context/base/strc-reg.mkiv @@ -308,13 +308,14 @@ \dostoptagged \endgroup} -\unexpanded\def\dosetfastregisterentry#1#2#3% register entry key +\unexpanded\def\dosetfastregisterentry#1#2#3#4#5% register entry key processor processor {\begingroup \edef\currentregister{#1}% \setnextinternalreference \xdef\currentregisternumber{\ctxcommand{storeregister{ metadata = { name = "\currentregister" }, entries = { { \!!bs#2\!!es }, { \!!bs#3\!!es } }, + processors = { \!!bs#4\!!es, \!!bs#5\!!es }, } }}% % overlap with the above diff --git a/tex/context/interface/keys-cs.xml b/tex/context/interface/keys-cs.xml index b261a74e4..c3039f79a 100644 --- a/tex/context/interface/keys-cs.xml +++ b/tex/context/interface/keys-cs.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='zrcadleno'/> <cd:variable name='monday' value='pondeli'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monotucne'/> <cd:variable name='month' value='mesic'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/context/interface/keys-de.xml b/tex/context/interface/keys-de.xml index b9f6c400b..f70ced334 100644 --- a/tex/context/interface/keys-de.xml +++ b/tex/context/interface/keys-de.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='gespiegelt'/> <cd:variable name='monday' value='montag'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monofett'/> <cd:variable name='month' value='monat'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/context/interface/keys-en.xml b/tex/context/interface/keys-en.xml index 50e15c05b..970aa803b 100644 --- a/tex/context/interface/keys-en.xml +++ b/tex/context/interface/keys-en.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='mirrored'/> <cd:variable name='monday' value='monday'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monobold'/> <cd:variable name='month' value='month'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/context/interface/keys-fr.xml b/tex/context/interface/keys-fr.xml index 15ebc93c6..1b75b2bc1 100644 --- a/tex/context/interface/keys-fr.xml +++ b/tex/context/interface/keys-fr.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='reflete'/> <cd:variable name='monday' value='lundi'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monogras'/> <cd:variable name='month' value='mois'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/context/interface/keys-it.xml b/tex/context/interface/keys-it.xml index e256c965b..3f40bf3b9 100644 --- a/tex/context/interface/keys-it.xml +++ b/tex/context/interface/keys-it.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='riflesso'/> <cd:variable name='monday' value='lunedi'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monograssetto'/> <cd:variable name='month' value='mese'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/context/interface/keys-nl.xml b/tex/context/interface/keys-nl.xml index eebc048c0..a074db2de 100644 --- a/tex/context/interface/keys-nl.xml +++ b/tex/context/interface/keys-nl.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='gespiegeld'/> <cd:variable name='monday' value='maandag'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monovet'/> <cd:variable name='month' value='maand'/> <cd:variable name='more' value='meer'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/context/interface/keys-pe.xml b/tex/context/interface/keys-pe.xml index 926cb4f1e..4e64fa490 100644 --- a/tex/context/interface/keys-pe.xml +++ b/tex/context/interface/keys-pe.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='منعکس'/> <cd:variable name='monday' value='دوشنبه'/> <cd:variable name='mono' value='مونو'/> + <cd:variable name='monobold' value='monobold'/> <cd:variable name='month' value='ماه'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='شکستکلماتبیشتر'/> diff --git a/tex/context/interface/keys-ro.xml b/tex/context/interface/keys-ro.xml index f07634521..8a0a1439c 100644 --- a/tex/context/interface/keys-ro.xml +++ b/tex/context/interface/keys-ro.xml @@ -305,6 +305,7 @@ <cd:variable name='mirrored' value='oglindit'/> <cd:variable name='monday' value='luni'/> <cd:variable name='mono' value='mono'/> + <cd:variable name='monobold' value='monoaldin'/> <cd:variable name='month' value='luna'/> <cd:variable name='more' value='more'/> <cd:variable name='morehyphenation' value='morehyphenation'/> diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index 891650e5c..5b9fc4f45 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 : 10/29/14 00:18:00 +-- merge date : 10/29/14 15:20:43 do -- begin closure to overcome local limits and interference @@ -5744,6 +5744,7 @@ local function read_from_tfm(specification) properties.fontname=tfmdata.fontname properties.psname=tfmdata.psname properties.filename=specification.filename + properties.format=fonts.formats.tfm parameters.size=size shared.rawdata={} shared.features=features @@ -14090,8 +14091,8 @@ function definers.read(specification,size,id) elseif trace_defining and type(tfmdata)=="table" then local properties=tfmdata.properties or {} local parameters=tfmdata.parameters or {} - report_defining("using %s font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a", - properties.format,id,properties.name,parameters.size,properties.encodingbytes, + report_defining("using %a font with id %a, name %a, size %a, bytes %a, encoding %a, fullname %a, filename %a", + properties.format or "unknown",id,properties.name,parameters.size,properties.encodingbytes, properties.encodingname,properties.fullname,file.basename(properties.filename)) end statistics.stoptiming(fonts) |