From d643b65f7ab840157f538914b07f8d3cddf94bec Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Tue, 7 Feb 2023 19:22:47 +0100 Subject: 2023-02-07 19:04:00 --- metapost/context/base/mpxl/mp-lmtx.mpxl | 63 +++++++------- scripts/context/lua/mtx-fonts.lua | 2 +- source/luametatex/source/tex/texmaincontrol.c | 2 +- tex/context/base/mkii/cont-new.mkii | 2 +- tex/context/base/mkii/context.mkii | 2 +- tex/context/base/mkii/mult-cs.mkii | 4 + tex/context/base/mkiv/cont-new.mkiv | 2 +- tex/context/base/mkiv/context.mkiv | 2 +- tex/context/base/mkiv/font-cff.lua | 80 ++++++++--------- tex/context/base/mkiv/font-enc.lua | 2 +- tex/context/base/mkiv/font-mis.lua | 2 +- tex/context/base/mkiv/font-shp.lua | 2 +- tex/context/base/mkiv/status-files.pdf | Bin 24598 -> 24576 bytes tex/context/base/mkiv/status-lua.pdf | Bin 265646 -> 265606 bytes tex/context/base/mkxl/cont-new.mkxl | 2 +- tex/context/base/mkxl/context.mkxl | 2 +- tex/context/base/mkxl/font-onr.lmt | 14 ++- tex/context/base/mkxl/font-otl.lmt | 2 +- tex/context/base/mkxl/font-tpk.lmt | 2 +- tex/context/base/mkxl/lpdf-lmt.lmt | 5 ++ tex/context/base/mkxl/math-act.lmt | 14 ++- tex/context/base/mkxl/math-fnt.lmt | 5 +- tex/context/base/mkxl/math-vfu.lmt | 95 +++++++++++---------- tex/context/interface/mkii/keys-cs.xml | 4 + tex/generic/context/luatex/luatex-fonts-merged.lua | 45 ++-------- 25 files changed, 182 insertions(+), 173 deletions(-) diff --git a/metapost/context/base/mpxl/mp-lmtx.mpxl b/metapost/context/base/mpxl/mp-lmtx.mpxl index e6daff660..edbc44bd2 100644 --- a/metapost/context/base/mpxl/mp-lmtx.mpxl +++ b/metapost/context/base/mpxl/mp-lmtx.mpxl @@ -1016,6 +1016,7 @@ presetparameters "chart" [ originsize = 1mm, trace = false, showlabels = true, + showlegend = true, center = false, samples = { }, @@ -1145,32 +1146,34 @@ vardef lmt_do_chart_text(expr s, i, value) = enddef ; def lmt_do_chart_legend = - n := getparametercount "legend" ; - if n > 0 : - save dx, dy, p, l, w, o, d, ddy ; picture l ; - dx := xpart urcorner currentpicture + EmWidth ; - dy := ypart urcorner currentpicture ; - labelcolor := getparameter "legendcolor" ; - labelstyle := getparameter "legendstyle" ; - w := 2EmWidth ; - o := .25EmWidth ; - d := ExHeight ; - ddy := .8LineHeight ; - for i=1 upto n : - dy := dy - ddy ; - l := lmt_text [ - text = getparameter "legend" i, - anchor = "rt" - style = labelstyle, - color = labelcolor, - background = "", - ] ; - fill leftboundary l rightenlarged w - shifted (dx,dy+d) - withcolor getparameter "fillcolors" i ; - draw l - shifted (dx+w+o,dy+d) ; - endfor ; + if getparameter "showlegend" : + n := getparametercount "legend" ; + if n > 0 : + save dx, dy, p, l, w, o, d, ddy ; picture l ; + dx := xpart urcorner currentpicture + EmWidth ; + dy := ypart urcorner currentpicture ; + labelcolor := getparameter "legendcolor" ; + labelstyle := getparameter "legendstyle" ; + w := 2EmWidth ; + o := .25EmWidth ; + d := ExHeight ; + ddy := .8LineHeight ; + for i=1 upto n : + dy := dy - ddy ; + l := lmt_text [ + text = getparameter "legend" i, + anchor = "rt" + style = labelstyle, + color = labelcolor, + background = "", + ] ; + fill leftboundary l rightenlarged w + shifted (dx,dy+d) + withcolor getparameter "fillcolors" i ; + draw l + shifted (dx+w+o,dy+d) ; + endfor ; + fi ; fi ; enddef ; @@ -1319,14 +1322,14 @@ vardef lmt_do_chart_histogram = endfor ; endfor ; setbounds currentpicture to unitsquare xyscaled (maxwidth,height) ; - for s = 1 upto nofsamplesets : - if getparameter "showlabels" : + if getparameter "showlabels" : + for s = 1 upto nofsamplesets : for i = 1 upto nofsamples : draw lmt_do_chart_text (s,i,getparameter "samples" s i) shifted (nofsamplesets*((i-1)*width)+width/2+(s-1)*width+(i-1)*distance,0) ; endfor ; - fi ; - endfor ; + endfor ; + fi ; lmt_do_chart_legend ; fi ; lmt_do_chart_stop ; diff --git a/scripts/context/lua/mtx-fonts.lua b/scripts/context/lua/mtx-fonts.lua index ab04cec13..37107ea1e 100644 --- a/scripts/context/lua/mtx-fonts.lua +++ b/scripts/context/lua/mtx-fonts.lua @@ -16,7 +16,7 @@ local lower, gsub = string.lower, string.gsub local concat = table.concat local write_nl = (logs and logs.writer) or (texio and texio.write_nl) or print -local otlversion = 3.132 +local otlversion = 3.133 local helpinfo = [[ diff --git a/source/luametatex/source/tex/texmaincontrol.c b/source/luametatex/source/tex/texmaincontrol.c index 783de2b8b..8af8020a7 100644 --- a/source/luametatex/source/tex/texmaincontrol.c +++ b/source/luametatex/source/tex/texmaincontrol.c @@ -1148,7 +1148,7 @@ static void tex_aux_run_new_paragraph(void) { void tex_page_boundary_message(const char *s, halfword n) { - if (tracing_pages_par >= 0) { + if (tracing_pages_par > 0) { tex_begin_diagnostic(); tex_print_format("[page: boundary, %s, trigger %i]", s, n); tex_end_diagnostic(); diff --git a/tex/context/base/mkii/cont-new.mkii b/tex/context/base/mkii/cont-new.mkii index 37361a1dc..c61c97d8a 100644 --- a/tex/context/base/mkii/cont-new.mkii +++ b/tex/context/base/mkii/cont-new.mkii @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2023.02.06 17:55} +\newcontextversion{2023.02.07 19:02} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/mkii/context.mkii b/tex/context/base/mkii/context.mkii index ea7523043..b62aa3a85 100644 --- a/tex/context/base/mkii/context.mkii +++ b/tex/context/base/mkii/context.mkii @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2023.02.06 17:55} +\edef\contextversion{2023.02.07 19:02} %D For those who want to use this: diff --git a/tex/context/base/mkii/mult-cs.mkii b/tex/context/base/mkii/mult-cs.mkii index 8f5571627..b8c7f3fda 100644 --- a/tex/context/base/mkii/mult-cs.mkii +++ b/tex/context/base/mkii/mult-cs.mkii @@ -450,6 +450,7 @@ \setinterfacevariable{printable}{tisknutelne} \setinterfacevariable{process}{process} \setinterfacevariable{product}{produkt} +\setinterfacevariable{profile}{profile} \setinterfacevariable{program}{program} \setinterfacevariable{project}{projekt} \setinterfacevariable{protected}{chranene} @@ -591,6 +592,7 @@ \setinterfacevariable{temporary}{docasne} \setinterfacevariable{test}{test} \setinterfacevariable{text}{text} +\setinterfacevariable{textdisplay}{textdisplay} \setinterfacevariable{textnote}{textnote} \setinterfacevariable{three}{tri} \setinterfacevariable{thursday}{ctvrtek} @@ -718,6 +720,7 @@ \setinterfaceconstant{bookmark}{zalozka} \setinterfaceconstant{bottom}{spodek} \setinterfaceconstant{bottomafter}{bottomafter} +\setinterfaceconstant{bottomalign}{bottomalign} \setinterfaceconstant{bottombefore}{bottombefore} \setinterfaceconstant{bottomcolor}{bottomcolor} \setinterfaceconstant{bottomcommand}{bottomcommand} @@ -1332,6 +1335,7 @@ \setinterfaceconstant{toffset}{toffset} \setinterfaceconstant{tolerance}{tolerance} \setinterfaceconstant{top}{vrsek} +\setinterfaceconstant{topalign}{topalign} \setinterfaceconstant{topcolor}{topcolor} \setinterfaceconstant{topcommand}{topcommand} \setinterfaceconstant{topdistance}{vzdalenostvrsku} diff --git a/tex/context/base/mkiv/cont-new.mkiv b/tex/context/base/mkiv/cont-new.mkiv index 97de2e2d5..d524240e6 100644 --- a/tex/context/base/mkiv/cont-new.mkiv +++ b/tex/context/base/mkiv/cont-new.mkiv @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2023.02.06 17:55} +\newcontextversion{2023.02.07 19:02} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkiv/context.mkiv b/tex/context/base/mkiv/context.mkiv index ee8b3bfe0..1e3ce084e 100644 --- a/tex/context/base/mkiv/context.mkiv +++ b/tex/context/base/mkiv/context.mkiv @@ -49,7 +49,7 @@ %D {YYYY.MM.DD HH:MM} format. \edef\contextformat {\jobname} -\edef\contextversion{2023.02.06 17:55} +\edef\contextversion{2023.02.07 19:02} %D Kind of special: diff --git a/tex/context/base/mkiv/font-cff.lua b/tex/context/base/mkiv/font-cff.lua index ee6b843bc..c71c3aef3 100644 --- a/tex/context/base/mkiv/font-cff.lua +++ b/tex/context/base/mkiv/font-cff.lua @@ -1714,7 +1714,8 @@ end -- todo: round in blend - local encode = { } + local encode = { } + local typeone = false -- this eventually can become a helper @@ -1865,7 +1866,7 @@ end -- stack[top] = -t*256 + 251*256 - tab[i+1] - 108 stack[top] = -t*256 + 64148 - tab[i+1] i = i + 2 - elseif version == "cff" then + elseif typeone then local n = 0x1000000 * tab[i+1] + 0x10000 * tab[i+2] + 0x100 * tab[i+3] + tab[i+4] if n >= 0x8000000 then n = n - 0xFFFFFFFF - 1 @@ -2282,13 +2283,14 @@ result = nil return privatedata.nominalwidthx or 0, privatedata.defaultwidthx or 0 end - parsecharstrings = function(fontdata,data,glphs,doshapes,tversion,streams,nobias) + parsecharstrings = function(fontdata,data,glphs,doshapes,tversion,streams,nobias,istypeone) local dictionary = data.dictionaries[1] local charstrings = dictionary.charstrings keepcurve = doshapes version = tversion + typeone = istypeone or false strings = data.strings globals = data.routines or { } locals = dictionary.subroutines or { } @@ -2526,7 +2528,7 @@ local function readnoselect(f,fontdata,data,glyphs,doshapes,version,streams) parseprivates(data,data.dictionaries) readlocals(f,data,dictionary,version) startparsing(fontdata,data,streams) - parsecharstrings(fontdata,data,glyphs,doshapes,version,streams) + parsecharstrings(fontdata,data,glyphs,doshapes,version,streams,false) stopparsing(fontdata,data) end @@ -2746,38 +2748,38 @@ end -- temporary helper needed for checking backend patches -function readers.cffcheck(filename) - local f = io.open(filename,"rb") - if f then - local fontdata = { - glyphs = { }, - } - local header = readheader(f) - if header.major ~= 1 then - report("only version %s is supported for table %a",1,"cff") - return - end - local names = readfontnames(f) - local dictionaries = readtopdictionaries(f) - local strings = readstrings(f) - local glyphs = { } - local data = { - header = header, - names = names, - dictionaries = dictionaries, - strings = strings, - glyphs = glyphs, - nofglyphs = 0, - } - -- - parsedictionaries(data,dictionaries,"cff") - -- - local cid = data.dictionaries[1].cid - if cid and cid.fdselect then - readfdselect(f,fontdata,data,glyphs,false) - else - readnoselect(f,fontdata,data,glyphs,false) - end - return data - end -end +-- function readers.cffcheck(filename) +-- local f = io.open(filename,"rb") +-- if f then +-- local fontdata = { +-- glyphs = { }, +-- } +-- local header = readheader(f) +-- if header.major ~= 1 then +-- report("only version %s is supported for table %a",1,"cff") +-- return +-- end +-- local names = readfontnames(f) +-- local dictionaries = readtopdictionaries(f) +-- local strings = readstrings(f) +-- local glyphs = { } +-- local data = { +-- header = header, +-- names = names, +-- dictionaries = dictionaries, +-- strings = strings, +-- glyphs = glyphs, +-- nofglyphs = 0, +-- } +-- -- +-- parsedictionaries(data,dictionaries,"cff") +-- -- +-- local cid = data.dictionaries[1].cid +-- if cid and cid.fdselect then +-- readfdselect(f,fontdata,data,glyphs,false) +-- else +-- readnoselect(f,fontdata,data,glyphs,false) +-- end +-- return data +-- end +-- end diff --git a/tex/context/base/mkiv/font-enc.lua b/tex/context/base/mkiv/font-enc.lua index 608539c59..f2f0595dd 100644 --- a/tex/context/base/mkiv/font-enc.lua +++ b/tex/context/base/mkiv/font-enc.lua @@ -26,7 +26,7 @@ local report_encoding = logs.reporter("fonts","encoding") local encodings = fonts.encodings or { } fonts.encodings = encodings -encodings.version = 1.03 +encodings.version = 1.04 encodings.cache = containers.define("fonts", "enc", fonts.encodings.version, true) encodings.known = allocate { -- sort of obsolete texnansi = true, diff --git a/tex/context/base/mkiv/font-mis.lua b/tex/context/base/mkiv/font-mis.lua index 42dc0bd3c..f721be0ef 100644 --- a/tex/context/base/mkiv/font-mis.lua +++ b/tex/context/base/mkiv/font-mis.lua @@ -21,7 +21,7 @@ local readers = otf.readers if readers then - otf.version = otf.version or 3.132 + otf.version = otf.version or 3.133 otf.cache = otf.cache or containers.define("fonts", "otl", otf.version, true) function fonts.helpers.getfeatures(name,save) diff --git a/tex/context/base/mkiv/font-shp.lua b/tex/context/base/mkiv/font-shp.lua index 843f75eb8..197a3f1cc 100644 --- a/tex/context/base/mkiv/font-shp.lua +++ b/tex/context/base/mkiv/font-shp.lua @@ -17,7 +17,7 @@ local pfb = fonts.handlers.pfb local hashes = fonts.hashes local identifiers = hashes.identifiers -local version = otf.version or 0.014 +local version = otf.version or 0.015 local shapescache = containers.define("fonts", "shapes", version, true) local streamscache = containers.define("fonts", "streams", version, true) diff --git a/tex/context/base/mkiv/status-files.pdf b/tex/context/base/mkiv/status-files.pdf index 4395a2a82..cf4d8480a 100644 Binary files a/tex/context/base/mkiv/status-files.pdf and b/tex/context/base/mkiv/status-files.pdf differ diff --git a/tex/context/base/mkiv/status-lua.pdf b/tex/context/base/mkiv/status-lua.pdf index 96871e62a..258228978 100644 Binary files a/tex/context/base/mkiv/status-lua.pdf and b/tex/context/base/mkiv/status-lua.pdf differ diff --git a/tex/context/base/mkxl/cont-new.mkxl b/tex/context/base/mkxl/cont-new.mkxl index 549404709..9a267bc5f 100644 --- a/tex/context/base/mkxl/cont-new.mkxl +++ b/tex/context/base/mkxl/cont-new.mkxl @@ -13,7 +13,7 @@ % \normalend % uncomment this to get the real base runtime -\newcontextversion{2023.02.06 17:55} +\newcontextversion{2023.02.07 19:02} %D This file is loaded at runtime, thereby providing an excellent place for hacks, %D patches, extensions and new features. There can be local overloads in cont-loc diff --git a/tex/context/base/mkxl/context.mkxl b/tex/context/base/mkxl/context.mkxl index e51c3d732..143c67ffb 100644 --- a/tex/context/base/mkxl/context.mkxl +++ b/tex/context/base/mkxl/context.mkxl @@ -29,7 +29,7 @@ %D {YYYY.MM.DD HH:MM} format. \immutable\edef\contextformat {\jobname} -\immutable\edef\contextversion{2023.02.06 17:55} +\immutable\edef\contextversion{2023.02.07 19:02} %overloadmode 1 % check frozen / warning %overloadmode 2 % check frozen / error diff --git a/tex/context/base/mkxl/font-onr.lmt b/tex/context/base/mkxl/font-onr.lmt index f48b8e545..2c18f6e89 100644 --- a/tex/context/base/mkxl/font-onr.lmt +++ b/tex/context/base/mkxl/font-onr.lmt @@ -44,7 +44,7 @@ afm.version = 1.513 -- incrementing this number one up will force a local pfb = handlers.pfb or { } handlers.pfb = pfb -pfb.version = 1.000 +pfb.version = 1.002 local readers = afm.readers or { } afm.readers = readers @@ -212,6 +212,7 @@ do + C("FontName") * nam + C("FontMatrix") * arr + C("FontBBox") * arr + + C("FontType") * num ) ) / function (t,k,v) t[lower(k)] = v end + P(1) )^0 * Carg(1) @@ -278,8 +279,12 @@ do binary = decrypt(binary,55665,4) - encoding = names or lpegmatch(p_filterencoding,ascii) - metadata = names or lpegmatch(p_filtermetadata,ascii,1,{}) + if not encoding then + encoding = lpegmatch(p_filterencoding,ascii) + end + if not metadata then + metadata = lpegmatch(p_filtermetadata,ascii,1,{}) + end glyphs = { } routines = { } @@ -299,8 +304,9 @@ do } }, } + local version = metadata.FontType or 1 -- only cff 1 in type 1 fonts - fonts.handlers.otf.readers.parsecharstrings(false,data,glyphs,true,"cff",streams,true) + fonts.handlers.otf.readers.parsecharstrings(false,data,glyphs,true,"cff",streams,true,true) elseif not names then lpegmatch(p_filternames,binary,1,filename) end diff --git a/tex/context/base/mkxl/font-otl.lmt b/tex/context/base/mkxl/font-otl.lmt index 0d654edf6..065a2c2ee 100644 --- a/tex/context/base/mkxl/font-otl.lmt +++ b/tex/context/base/mkxl/font-otl.lmt @@ -52,7 +52,7 @@ local report_otf = logs.reporter("fonts","otf loading") local fonts = fonts local otf = fonts.handlers.otf -otf.version = 3.131 -- beware: also sync font-mis.lua and in mtx-fonts +otf.version = 3.133 -- beware: also sync font-mis.lua and in mtx-fonts otf.cache = containers.define("fonts", "otl", otf.version, true) otf.svgcache = containers.define("fonts", "svg", otf.version, true) otf.pngcache = containers.define("fonts", "png", otf.version, true) diff --git a/tex/context/base/mkxl/font-tpk.lmt b/tex/context/base/mkxl/font-tpk.lmt index 2ad74d2a9..d265433c5 100644 --- a/tex/context/base/mkxl/font-tpk.lmt +++ b/tex/context/base/mkxl/font-tpk.lmt @@ -44,7 +44,7 @@ if not fonts then fonts = { handlers = { tfm = { } } } end local handlers = fonts.handlers local tfm = handlers.tfm or { } handlers.tfm = tfm -tfm.version = 1.005 +tfm.version = 1.006 local readers = tfm.readers or { } tfm.readers = readers diff --git a/tex/context/base/mkxl/lpdf-lmt.lmt b/tex/context/base/mkxl/lpdf-lmt.lmt index 6c321ec54..1d47c1620 100644 --- a/tex/context/base/mkxl/lpdf-lmt.lmt +++ b/tex/context/base/mkxl/lpdf-lmt.lmt @@ -1192,6 +1192,7 @@ local flushimage do local r = boxresources[objnum] if r then flushlist(l.list) + l.list = nil -- added end boxresources[objnum] = l if immediate then @@ -2131,6 +2132,10 @@ local finalize do finalize = function(driver,details) + if not details then + report("something is wrong, no details in 'finalize'") + end + level = level + 1 pdf_goto_pagemode() -- for now diff --git a/tex/context/base/mkxl/math-act.lmt b/tex/context/base/mkxl/math-act.lmt index 3a7324586..faa0d2ae5 100644 --- a/tex/context/base/mkxl/math-act.lmt +++ b/tex/context/base/mkxl/math-act.lmt @@ -3452,8 +3452,18 @@ do } local chars = fontchars[id] local dropin = fontdata[id] - local index = #fonts + 1 - fonts[index] = { id = id, size = size } + local index = false + for i=1,#fonts do + local f = fonts[i] + if f.id == id and f.size == size then + index = i + break + end + end + if not index then + index = #fonts + 1 + fonts[index] = { id = id, size = size } + end -- copy characters for s=firstsource,lastsource do local t = s + offset diff --git a/tex/context/base/mkxl/math-fnt.lmt b/tex/context/base/mkxl/math-fnt.lmt index cf14b4aa2..911e0adb5 100644 --- a/tex/context/base/mkxl/math-fnt.lmt +++ b/tex/context/base/mkxl/math-fnt.lmt @@ -54,14 +54,13 @@ local cache = setmetatableindex(function(t,width) return v end) - local function register_extensible(font,char,style,box) -- We don't share (yet)! local fontdata = chardata[font] local oldchar = fontdata[char] if oldchar and oldchar.keepvirtual then -- for now, needed for iwona etc - return + return nil else local bx = tonut(box) updaters.apply("tagging.state.disable") -- fast enough @@ -81,7 +80,6 @@ local function register_extensible(font,char,style,box) local p = fonts.hashes.parameters[font] local sx = round(1000/p.extendfactor) local sy = round(1000/p.squeezefactor) - nuts.setscales(g,1000,sx,sy) -- we saved a scaled glyph stream so we now use an unscaled one ... horrible hack: if sx ~= 1000 then wd = wd * 7200/7227 @@ -98,6 +96,7 @@ local function register_extensible(font,char,style,box) cache[wd][ht][dp][font][unicode] = private end local glyph = new_glyph(font,private,al) + nuts.setscales(glyph,1000,sx,sy) -- -- if fonts.hashes.properties[font].compactmath then -- nuts.setscales(g,1000,1000,1000) diff --git a/tex/context/base/mkxl/math-vfu.lmt b/tex/context/base/mkxl/math-vfu.lmt index 1046a0c19..53988036c 100644 --- a/tex/context/base/mkxl/math-vfu.lmt +++ b/tex/context/base/mkxl/math-vfu.lmt @@ -17,6 +17,9 @@ if not modules then modules = { } end modules ['math-vfu'] = { -- from when we emulated \UNICODE\ math and \OPENTYPE\ math fonts using traditional -- fonts. +-- Musical timestamp: Januari 2023 Riverside ID.Entity release date, after all we +-- only use the following code for ther Polish Iwona, Kurier and Antykwa fonts. + local type, next, tonumber = type, next, tonumber local max = math.max local fastcopy, sortedhash = table.copy, table.sortedhash @@ -674,52 +677,56 @@ local noitalics = true -- false can be used to test the engine -- bit to suit that purpose. It might get even simpler. local function virtualize(s,uni,fci,skewchar,move,mathparameters,unicode,parameters) - local kerns = fci.kerns - local width = fci.width - local height = fci.height - local depth = fci.depth - local italic = fci.italic - local advance = width - local bottomright - local topanchor - local yoffset - if kerns and skewchar then - local k = kerns[skewchar] - if k then - topanchor = width/2 + k + if fci then + local kerns = fci.kerns + local width = fci.width + local height = fci.height + local depth = fci.depth + local italic = fci.italic + local advance = width + local bottomright + local topanchor + local yoffset + if kerns and skewchar then + local k = kerns[skewchar] + if k then + topanchor = width/2 + k + end end + if italic and noitalics then + width = width + italic + bottomright = - italic + italic = nil + end + if move then -- 0x222B + local axis = move * mathparameters.axisheight + local half = (height + depth ) / 2 + yoffset = depth - (half - axis) + height = half + axis + depth = half - axis + end + -- + return { + advance = advance, + width = width, + height = height, + depth = depth, + italic = italic, + bottomright = bottomright, + topanchor = topanchor, + yoffset = yoffset, + commands = { slotcommand[s][uni] }, + -- keepvirtual = true, + next = fci.next, + parts = fci.parts, + partsorientation = fci.partsorientation, + partsitalic = fci.partsitalic, + unicode = unicode, + name = fci.name, + } + else + -- error end - if italic and noitalics then - width = width + italic - bottomright = - italic - italic = nil - end - if move then -- 0x222B - local axis = move * mathparameters.axisheight - local half = (height + depth ) / 2 - yoffset = depth - (half - axis) - height = half + axis - depth = half - axis - end - -- - return { - advance = advance, - width = width, - height = height, - depth = depth, - italic = italic, - bottomright = bottomright, - topanchor = topanchor, - yoffset = yoffset, - commands = { slotcommand[s][uni] }, - -- keepvirtual = true, - next = fci.next, - parts = fci.parts, - partsorientation = fci.partsorientation, - partsitalic = fci.partsitalic, - unicode = unicode, - name = fci.name, - } end function vfmath.define(specification,set,goodies) diff --git a/tex/context/interface/mkii/keys-cs.xml b/tex/context/interface/mkii/keys-cs.xml index c5e12f9a1..14f82227a 100644 --- a/tex/context/interface/mkii/keys-cs.xml +++ b/tex/context/interface/mkii/keys-cs.xml @@ -453,6 +453,7 @@ + @@ -594,6 +595,7 @@ + @@ -724,6 +726,7 @@ + @@ -1338,6 +1341,7 @@ + diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index ac7c0e20b..9618051bd 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : c:/data/develop/context/sources/luatex-fonts-merged.lua -- parent file : c:/data/develop/context/sources/luatex-fonts.lua --- merge date : 2023-02-06 17:55 +-- merge date : 2023-02-07 19:02 do -- begin closure to overcome local limits and interference @@ -14578,6 +14578,7 @@ end end) local c_endchar=chars[14] local encode={} + local typeone=false setmetatableindex(encode,function(t,i) for i=-2048,-1130 do t[i]=char(28,band(rshift(i,8),0xFF),band(i,0xFF)) @@ -14703,7 +14704,7 @@ end elseif t<=254 then stack[top]=-t*256+64148-tab[i+1] i=i+2 - elseif version=="cff" then + elseif typeone then local n=0x1000000*tab[i+1]+0x10000*tab[i+2]+0x100*tab[i+3]+tab[i+4] if n>=0x8000000 then n=n-0xFFFFFFFF-1 @@ -15027,11 +15028,12 @@ result=nil end return privatedata.nominalwidthx or 0,privatedata.defaultwidthx or 0 end - parsecharstrings=function(fontdata,data,glphs,doshapes,tversion,streams,nobias) + parsecharstrings=function(fontdata,data,glphs,doshapes,tversion,streams,nobias,istypeone) local dictionary=data.dictionaries[1] local charstrings=dictionary.charstrings keepcurve=doshapes version=tversion + typeone=istypeone or false strings=data.strings globals=data.routines or {} locals=dictionary.subroutines or {} @@ -15236,7 +15238,7 @@ local function readnoselect(f,fontdata,data,glyphs,doshapes,version,streams) parseprivates(data,data.dictionaries) readlocals(f,data,dictionary,version) startparsing(fontdata,data,streams) - parsecharstrings(fontdata,data,glyphs,doshapes,version,streams) + parsecharstrings(fontdata,data,glyphs,doshapes,version,streams,false) stopparsing(fontdata,data) end local function readfdselect(f,fontdata,data,glyphs,doshapes,version,streams) @@ -15428,39 +15430,6 @@ function readers.cff2(f,fontdata,specification) cleanup(data,dictionaries) end end -function readers.cffcheck(filename) - local f=io.open(filename,"rb") - if f then - local fontdata={ - glyphs={}, - } - local header=readheader(f) - if header.major~=1 then - report("only version %s is supported for table %a",1,"cff") - return - end - local names=readfontnames(f) - local dictionaries=readtopdictionaries(f) - local strings=readstrings(f) - local glyphs={} - local data={ - header=header, - names=names, - dictionaries=dictionaries, - strings=strings, - glyphs=glyphs, - nofglyphs=0, - } - parsedictionaries(data,dictionaries,"cff") - local cid=data.dictionaries[1].cid - if cid and cid.fdselect then - readfdselect(f,fontdata,data,glyphs,false) - else - readnoselect(f,fontdata,data,glyphs,false) - end - return data - end -end end -- closure @@ -37185,7 +37154,7 @@ local afm=fonts.handlers.afm local pfb=fonts.handlers.pfb local hashes=fonts.hashes local identifiers=hashes.identifiers -local version=otf.version or 0.014 +local version=otf.version or 0.015 local shapescache=containers.define("fonts","shapes",version,true) local streamscache=containers.define("fonts","streams",version,true) local compact_streams=false -- cgit v1.2.3