From c1f0465c97636a4874e0d230c2e61cdf28ac3532 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Thu, 23 Sep 2010 01:03:00 +0200 Subject: beta 2010.09.23 01:03 --- tex/context/base/char-def.lua | 2 +- tex/context/base/char-ini.lua | 75 +++++++--- tex/context/base/cont-new.tex | 2 +- tex/context/base/context.tex | 2 +- tex/context/base/font-gds.lua | 23 +++ tex/context/base/font-ini.lua | 4 + tex/context/base/font-otf.lua | 2 +- tex/context/base/font-syn.lua | 96 ++++++++++++- tex/context/base/s-fnt-28.tex | 46 ++++++ tex/context/base/sort-ini.lua | 110 ++++++++++---- tex/context/fonts/antykwapoltawskiego.lfg | 213 ++++++++++++++++++++++++++++ tex/generic/context/luatex-fonts-merged.lua | 8 +- 12 files changed, 526 insertions(+), 57 deletions(-) create mode 100644 tex/context/base/s-fnt-28.tex create mode 100644 tex/context/fonts/antykwapoltawskiego.lfg diff --git a/tex/context/base/char-def.lua b/tex/context/base/char-def.lua index 38769404a..2a46080b3 100644 --- a/tex/context/base/char-def.lua +++ b/tex/context/base/char-def.lua @@ -2330,7 +2330,7 @@ characters.data={ description="LATIN SMALL LETTER AE", direction="l", linebreak="al", - shcode={ 0x00E6, 0x00EA }, + shcode={ 0x0061, 0x0065 }, uccode=0x00C6, unicodeslot=0x00E6, }, diff --git a/tex/context/base/char-ini.lua b/tex/context/base/char-ini.lua index 28a11a1e9..a16178bf2 100644 --- a/tex/context/base/char-ini.lua +++ b/tex/context/base/char-ini.lua @@ -10,8 +10,8 @@ local tex = tex local utf = unicode.utf8 local utfchar, utfbyte, utfvalues = utf.char, utf.byte, string.utfvalues -local concat = table.concat -local next, tonumber = next, tonumber +local concat, unpack = table.concat, table.unpack +local next, tonumber, type = next, tonumber, type local texsprint, texprint = tex.sprint, tex.print local format, lower, gsub, match, gmatch = string.format, string.lower, string.gsub, string.match, string.match, string.gmatch local texsetlccode, texsetuccode, texsetsfcode, texsetcatcode = tex.setlccode, tex.setuccode, tex.setsfcode, tex.setcatcode @@ -771,29 +771,64 @@ characters.activeoffset = 0x10000 -- there will be remapped in that byte range -- some day we will make a table -characters.lccodes = allocate() local lccodes = characters.lccodes -- lazy table -characters.uccodes = allocate() local uccodes = characters.uccodes -- lazy table -characters.shcodes = allocate() local shcodes = characters.shcodes -- lazy table +local function utfstring(s) + if type(s) == "table" then + return concat { utfchar( unpack(s) ) } + else + return utfchar(s) + end +end + +utf.string = utf.string or utfstring + +characters.lccodes = allocate() local lccodes = characters.lccodes -- lazy table +characters.uccodes = allocate() local uccodes = characters.uccodes -- lazy table +characters.shcodes = allocate() local shcodes = characters.shcodes -- lazy table + +setmetatable(lccodes, { __index = function(t,u) if u then local c = data[u] c = c and c.lccode or u t[u] = c return c end end } ) +setmetatable(uccodes, { __index = function(t,u) if u then local c = data[u] c = c and c.uccode or u t[u] = c return c end end } ) +setmetatable(shcodes, { __index = function(t,u) if u then local c = data[u] c = c and c.shcode or u t[u] = c return c end end } ) -characters.lcchars = allocate() local lcchars = characters.lcchars -- lazy table -characters.ucchars = allocate() local ucchars = characters.ucchars -- lazy table -characters.shchars = allocate() local shchars = characters.shchars -- lazy table +characters.lcchars = allocate() local lcchars = characters.lcchars -- lazy table +characters.ucchars = allocate() local ucchars = characters.ucchars -- lazy table +characters.shchars = allocate() local shchars = characters.shchars -- lazy table -characters.lccharcodes = allocate() local lccharcodes = characters.lccharcodes -- lazy table -characters.uccharcodes = allocate() local uccharcodes = characters.uccharcodes -- lazy table -characters.shcharcodes = allocate() local shcharcodes = characters.shcharcodes -- lazy table +setmetatable(lcchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode c = c and utfchar (c) or u t[u] = c return c end end } ) +setmetatable(ucchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode c = c and utfchar (c) or u t[u] = c return c end end } ) +setmetatable(shchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode c = c and utfstring(c) or u t[u] = c return c end end } ) -setmetatable(lccodes, { __index = function(t,u) if u then local c = data[u] c = c and c.lccode or u t[u] = c return c end end } ) -setmetatable(uccodes, { __index = function(t,u) if u then local c = data[u] c = c and c.uccode or u t[u] = c return c end end } ) -setmetatable(shcodes, { __index = function(t,u) if u then local c = data[u] c = c and c.shcode or u t[u] = c return c end end } ) +--~ characters.lccharcodes = allocate() local lccharcodes = characters.lccharcodes -- lazy table +--~ characters.uccharcodes = allocate() local uccharcodes = characters.uccharcodes -- lazy table +--~ characters.shcharcodes = allocate() local shcharcodes = characters.shcharcodes -- lazy table -setmetatable(lcchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode c = c and utfchar(c) or u t[u] = c return c end end } ) -setmetatable(ucchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode c = c and utfchar(c) or u t[u] = c return c end end } ) -setmetatable(shchars, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode c = c and utfchar(c) or u t[u] = c return c end end } ) +--~ setmetatable(lccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode or u t[u] = c return c end end } ) +--~ setmetatable(uccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode or u t[u] = c return c end end } ) +--~ setmetatable(shcharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode or u t[u] = c return c end end } ) + +characters.specialchars = allocate() local specialchars = characters.specialchars -- lazy table + +setmetatable(specialchars, { __index = function(t,u) + if u then + local c = data[utfbyte(u)] + local s = c and c.specials + if s then + local t = { } + for i=2,#s do + local c = data[s[i]] + if is_letter[c.category] then + t[#t+1] = c + end + end + c = concat(t) + t[u] = c + return c + else + t[u] = u + return u + end + end +end } ) -setmetatable(lccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.lccode or u t[u] = c return c end end } ) -setmetatable(uccharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.uccode or u t[u] = c return c end end } ) -setmetatable(shcharcodes, { __index = function(t,u) if u then local c = data[utfbyte(u)] c = c and c.shcode or u t[u] = c return c end end } ) function characters.lower(str) local new = { } diff --git a/tex/context/base/cont-new.tex b/tex/context/base/cont-new.tex index 7dd1c51a6..982c3a257 100644 --- a/tex/context/base/cont-new.tex +++ b/tex/context/base/cont-new.tex @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2010.09.22 12:33} +\newcontextversion{2010.09.23 01:03} %D This file is loaded at runtime, thereby providing an %D excellent place for hacks, patches, extensions and new diff --git a/tex/context/base/context.tex b/tex/context/base/context.tex index 9c4988471..91806c685 100644 --- a/tex/context/base/context.tex +++ b/tex/context/base/context.tex @@ -20,7 +20,7 @@ %D your styles an modules. \edef\contextformat {\jobname} -\edef\contextversion{2010.09.22 12:33} +\edef\contextversion{2010.09.23 01:03} %D For those who want to use this: diff --git a/tex/context/base/font-gds.lua b/tex/context/base/font-gds.lua index ce1184292..f515d2b33 100644 --- a/tex/context/base/font-gds.lua +++ b/tex/context/base/font-gds.lua @@ -297,6 +297,29 @@ end fontgoodies.register("mathematics", initialize) +-- the following takes care of explicit file specifications +-- +-- files = { +-- name = "antykwapoltawskiego", +-- list = { +-- ["AntPoltLtCond-Regular.otf"] = { +-- -- name = "antykwapoltawskiego", +-- style = "regular", +-- weight = "light", +-- width = "condensed", +-- }, +-- }, +-- } + +local function initialize(goodies) + local files = goodies.files + if files then + fonts.names.register(files) + end +end + +fonts.goodies.register("files", initialize) + -- The following file (husayni.lfg) is the experimental setup that we used -- for Idris font. For the moment we don't store this in the cache and quite -- probably these files sit in one of the paths: diff --git a/tex/context/base/font-ini.lua b/tex/context/base/font-ini.lua index e068dae55..e74db9a0e 100644 --- a/tex/context/base/font-ini.lua +++ b/tex/context/base/font-ini.lua @@ -73,6 +73,10 @@ fonts.processors = fonts.processors or { fonts.manipulators = fonts.manipulators or { } +fonts.tracers = fonts.tracers or { +} + + fonts.definers = fonts.definers or { } fonts.definers.specifiers = fonts.definers.specifiers or { } fonts.definers.specifiers.synonyms = fonts.definers.specifiers.synonyms or { } diff --git a/tex/context/base/font-otf.lua b/tex/context/base/font-otf.lua index be05b8271..ba6e90c4d 100644 --- a/tex/context/base/font-otf.lua +++ b/tex/context/base/font-otf.lua @@ -329,7 +329,7 @@ end function otf.load(filename,format,sub,featurefile) local name = file.basename(file.removesuffix(filename)) local attr = lfs.attributes(filename) - local size, time = attr.size or 0, attr.modification or 0 + local size, time = attr and attr.size or 0, attr and attr.modification or 0 if featurefile then name = name .. "@" .. file.removesuffix(file.basename(featurefile)) end diff --git a/tex/context/base/font-syn.lua b/tex/context/base/font-syn.lua index ba3e90231..c9b9f3aee 100644 --- a/tex/context/base/font-syn.lua +++ b/tex/context/base/font-syn.lua @@ -19,8 +19,9 @@ local unpack = unpack or table.unpack local allocate = utilities.storage.allocate -local trace_names = false trackers.register("fonts.names", function(v) trace_names = v end) -local trace_warnings = false trackers.register("fonts.warnings", function(v) trace_warnings = v end) +local trace_names = false trackers.register("fonts.names", function(v) trace_names = v end) +local trace_warnings = false trackers.register("fonts.warnings", function(v) trace_warnings = v end) +local trace_specifications = false trackers.register("fonts.specifications", function(v) trace_specifications = v end) local report_names = logs.new("fontnames") @@ -1323,7 +1324,6 @@ end function names.specification(askedname,weight,style,width,variant,reload,all) if askedname and askedname ~= "" and names.enabled then ---~ askedname = lower(askedname) -- or cleanname askedname = cleanname(askedname) -- or cleanname names.load(reload) local found = heuristic(askedname,weight,style,width,variant,all) @@ -1339,7 +1339,6 @@ end function names.collect(askedname,weight,style,width,variant,reload,all) if askedname and askedname ~= "" and names.enabled then ---~ askedname = lower(askedname) -- or cleanname askedname = cleanname(askedname) -- or cleanname names.load(reload) local list = heuristic(askedname,weight,style,width,variant,true) @@ -1355,7 +1354,7 @@ function names.collectspec(askedname,reload,all) return names.collect(name,weight,style,width,variant,reload,all) end -function names.resolvespec(askedname,sub) +function names.resolvespec(askedname,sub) -- redefined later local found = names.specification(names.splitspec(askedname)) if found then return found.filename, found.subfont and found.rawname @@ -1375,6 +1374,7 @@ function names.collectfiles(askedname,reload) -- no all --~ if find(lower(basename(s.filename)),askedname) then if find(cleanname(basename(s.filename)),askedname) then list[#list+1] = s + end end return list @@ -1514,3 +1514,89 @@ function names.getlookups(pattern,name,reload) end return lastlookups end + +-- The following is new ... watch the overload! + +local specifications = allocate() +names.specifications = specifications + +-- files = { +-- name = "antykwapoltawskiego", +-- list = { +-- ["AntPoltLtCond-Regular.otf"] = { +-- -- name = "antykwapoltawskiego", +-- style = "regular", +-- weight = "light", +-- width = "condensed", +-- }, +-- }, +-- } + +function names.register(files) + if files then + local list, commonname = files.list, files.name + if list then + local n, m = 0, 0 + for filename, filespec in next, list do + local name = lower(filespec.name or commonname) + if name and name ~= "" then + local style = lower(filespec.style or "normal") + local width = lower(filespec.width or "normal") + local weight = lower(filespec.weight or "normal") + local variant = lower(filespec.variant or "normal") + local weights = specifications[name ] if not weights then weights = { } specifications[name ] = weights end + local styles = weights [weight] if not styles then styles = { } weights [weight] = styles end + local widths = styles [style ] if not widths then widths = { } styles [style ] = widths end + local variants = widths [width ] if not variants then variants = { } widths [width ] = variants end + variants[variant] = filename + n = n + 1 + else + m = m + 1 + end + end + if trace_specifications then + report_names("%s filenames registered, %s filenames rejected",n,m) + end + end + end +end + +function names.registered(name,weight,style,width,variant) + local ok = specifications[name] + ok = ok and (ok[weight and weight ~= "" and weight or "normal"] or ok[normal]) + ok = ok and (ok[style and style ~= "" and style or "normal"] or ok[normal]) + ok = ok and (ok[width and width ~= "" and width or "normal"] or ok[normal]) + ok = ok and (ok[variant and variant ~= "" and variant or "normal"] or ok[normal]) + -- + -- todo: same fallbacks as with database + -- + if ok then + return { + filename = ok, + subname = "", + -- rawname = nil, + } + end +end + +function names.resolvespec(askedname,sub) -- overloads previous definition + local name, weight, style, width, variant = names.splitspec(askedname) + local found = names.registered(name,weight,style,width,variant) + if found and found.filename then + if trace_specifications then + report_names("resolved by registered names: %s -> %s",askedname,found.filename) + end + return found.filename, found.subname, found.rawname + else + found = names.specification(name,weight,style,width,variant) + if found and found.filename then + if trace_specifications then + report_names("resolved by font database: %s -> %s",askedname,found.filename) + end + return found.filename, found.subfont and found.rawname + end + end + if trace_specifications then + report_names("unresolved: %s",askedname) + end +end diff --git a/tex/context/base/s-fnt-28.tex b/tex/context/base/s-fnt-28.tex new file mode 100644 index 000000000..839c7d4ae --- /dev/null +++ b/tex/context/base/s-fnt-28.tex @@ -0,0 +1,46 @@ +%D \module +%D [ file=s-fnt-28, +%D version=2010.09.22, +%D title=\CONTEXT\ Style File, +%D subtitle=Tracing Names, +%D author=Hans Hagen, +%D date=\currentdate, +%D copyright=PRAGMA-ADE] +%C +%C This module is part of the \CONTEXT\ macro||package and is +%C therefore copyrighted by \PRAGMA. See mreadme.pdf for +%C details. + +\startluacode + function fonts.tracers.files(goodyfile) + local goodies = fonts.goodies.get(goodyfile) + if goodies then + local files = goodies.files + if files and files.list then + for filename, specification in table.sortedpairs(files.list) do + context.start() + context.dontleavehmode() + context.definedfont{ filename .. "*default" } + context("%s-%s-%s-%s-%s", + specification.name or files.name, + specification.weight or "normal", + specification.style or "normal", + specification.width or "normal", + specification.variant or "normal") + context.par() + context.stop() + end + end + end + end +\stopluacode + +\doifnotmode{demo}{\endinput} + +\starttext + + \loadfontgoodies[antykwapoltawskiego] + + \ctxlua{fonts.tracers.files("antykwapoltawskiego")} + +\stoptext diff --git a/tex/context/base/sort-ini.lua b/tex/context/base/sort-ini.lua index 386f1a45f..5cecafb6e 100644 --- a/tex/context/base/sort-ini.lua +++ b/tex/context/base/sort-ini.lua @@ -12,7 +12,7 @@ if not modules then modules = { } end modules ['sort-ini'] = { -- todo: cleanup splits (in other modules) local utf = unicode.utf8 -local gsub, rep, sort, concat = string.gsub, string.rep, table.sort, table.concat +local gsub, rep, sub, sort, concat = string.gsub, string.rep, string.sub, table.sort, table.concat local utfbyte, utfchar = utf.byte, utf.char local utfcharacters, utfvalues, strcharacters = string.utfcharacters, string.utfvalues, string.characters local next, type, tonumber, rawget, rawset = next, type, tonumber, rawget, rawset @@ -32,12 +32,11 @@ local replacementoffset = 0x10000 -- frozen local digitsoffset = 0x20000 -- frozen local digitsmaximum = 0xFFFFF -- frozen -local lccodes = characters.lccodes -local shcodes = characters.shcodes -local lcchars = characters.lcchars -local shchars = characters.shchars +local lccodes = characters.lccodes +local lcchars = characters.lcchars +local shchars = characters.shchars -local variables = interfaces.variables +local variables = interfaces.variables sorters = { comparers = comparers, @@ -60,6 +59,8 @@ local constants = sorters.constants local data, language, method local replacements, mappings, entries, orders, lower, upper +--~ local shchars = characters.specialchars -- no specials for AE and ae + local mte = { __index = function(t,k) local el @@ -70,6 +71,9 @@ local mte = { if not el then local l = shchars[k] if l and l ~= k then + if #l > 0 then + l = sub(l,1,1) + end el = rawget(t,l) if not el then l = lower[k] or lcchars[l] @@ -89,42 +93,81 @@ local function preparetables(data) local orders, lower, method, mappings = data.orders, data.lower, data.method, { } for i=1,#orders do local oi = orders[i] - mappings[oi] = 2*i + mappings[oi] = { 2*i } end local delta = (method == variables.before or method == variables.first or method == variables.last) and -1 or 1 local mtm = { __index = function(t,k) local n if k then + if trace_tests then + report_sorters("simplifing character 0x%04x %s",utfbyte(k),k) + end local l = lower[k] or lcchars[k] if l then + if trace_tests then + report_sorters(" 1 lower: %s",l) + end local ml = rawget(t,l) if ml then - n = ml + delta -- first + n = { } + for i=1,#ml do + n[#n+1] = ml[i] + delta + end + if trace_tests then + report_sorters(" 2 order: %s",concat(n," ")) + end end end if not n then - l = shchars[k] - if l and l ~= k then - local ml = rawget(t,l) - if ml then - n = ml -- first or last - else - l = lower[l] or lcchars[l] - if l then - local ml = rawget(t,l) + local s = shchars[k] + if s and s ~= k then -- weird test + if trace_tests then + report_sorters(" 3 shape: %s",s) + end + n = { } + for l in utfcharacters(s) do + local ml = rawget(t,l) + if ml then + if trace_tests then + report_sorters(" 4 keep: %s",l) + end if ml then - n = ml + delta + for i=1,#ml do + n[#n+1] = ml[i] + end + end + else + l = lower[l] or lcchars[l] + if l then + if trace_tests then + report_sorters(" 5 lower: %s",l) + end + local ml = rawget(t,l) + if ml then + for i=1,#ml do + n[#n+1] = ml[i] + delta + end + end end end end + if trace_tests then + report_sorters(" 6 order: %s",concat(n," ")) + end + end + if not n then + n = { 0 } + if trace_tests then + report_sorters(" 7 order: 0") + end end - end - if not n then - n = 0 end else - n = 0 + n = { 0 } + if trace_tests then + report_sorters(" 8 order: 0") + end end rawset(t,k,n) return n @@ -317,7 +360,11 @@ function splitters.utf(str) -- we could append m and u but this is cleaner, s is l = l and utfbyte(l) or lccodes[b] if l ~= b then l = l - 1 end -- brrrr, can clash n = n + 1 - s[n], u[n], m[n], c[n] = sc, b, l, mappings[sc] + s[n], u[n], m[n] = sc, b, l + local msc = mappings[sc] + for i=1,#msc do + c[#c+1] = msc[i] + end end elseif method == variables.first then for sc in utfcharacters(str) do @@ -326,13 +373,21 @@ function splitters.utf(str) -- we could append m and u but this is cleaner, s is l = l and utfbyte(l) or lccodes[b] if l ~= b then l = l + 1 end -- brrrr, can clash n = n + 1 - s[n], u[n], m[n], c[n] = sc, b, l, mappings[sc] + s[n], u[n], m[n] = sc, b, l + local msc = mappings[sc] + for i=1,#msc do + c[#c+1] = msc[i] + end end else for sc in utfcharacters(str) do local b = utfbyte(sc) n = n + 1 - s[n], u[n], m[n], c[n] = sc, b, mappings[sc], b + s[n], u[n], c[n] = sc, b, b + local msc = mappings[sc] + for i=1,#msc do + m[#m+1] = msc[i] + end end end local t = { s = s, m = m, u = u, c = c } @@ -373,9 +428,12 @@ end function sorters.sort(entries,cmp) if trace_tests then + for i=1,#entries do + report_sorters("entry %s",table.serialize(entries[i].split,i)) + end sort(entries,function(a,b) local r = cmp(a,b) - report_sorters("%s %s %s (%s)",pack(a),(not r and "?") or (r<0 and "<") or (r>0 and ">") or "=",pack(b),r) + report_sorters("%s %s %s",pack(a),(not r and "?") or (r<0 and "<") or (r>0 and ">") or "=",pack(b)) return r == -1 end) local s diff --git a/tex/context/fonts/antykwapoltawskiego.lfg b/tex/context/fonts/antykwapoltawskiego.lfg new file mode 100644 index 000000000..ee4ea6dcd --- /dev/null +++ b/tex/context/fonts/antykwapoltawskiego.lfg @@ -0,0 +1,213 @@ +return { + name = "antykwapoltawskiego", + version = "1.00", + comment = "Goodies that complement Antykwa Poltawskiego, one of Mojca's favourites", + author = "Hans & Mojca", + copyright = "ConTeXt development team", + files = { + name = "antykwapoltawskiego", -- shared + list = { + ["AntPoltLtCond-Regular.otf"] = { + -- name = "antykwapoltawskiego", + style = "regular", + weight = "light", + width = "condensed", + }, + ["AntPoltLtCond-Italic.otf"] = { + style = "italic", + weight = "light", + width = "condensed", + }, + ["AntPoltCond-Regular.otf"] = { + style = "regular", + weight = "normal", + width = "condensed", + }, + ["AntPoltCond-Italic.otf"] = { + style = "italic", + weight = "normal", + width = "condensed", + }, + ["AntPoltLtCond-Bold.otf"] = { + style = "regular", + weight = "medium", + width = "condensed", + }, + ["AntPoltLtCond-BoldItalic.otf"] = { + style = "italic", + weight = "medium", + width = "condensed", + }, + ["AntPoltCond-Bold.otf"] = { + style = "regular", + weight = "bold", + width = "condensed", + }, + ["AntPoltCond-BoldItalic.otf"] = { + style = "italic", + weight = "bold", + width = "condensed", + }, + ["AntPoltLtSemiCond-Regular.otf"] = { + style = "regular", + weight = "light", + width = "semicondensed", + }, + ["AntPoltLtSemiCond-Italic.otf"] = { + style = "italic", + weight = "light", + width = "semicondensed", + }, + ["AntPoltSemiCond-Regular.otf"] = { + style = "regular", + weight = "normal", + width = "semicondensed", + }, + ["AntPoltSemiCond-Italic.otf"] = { + style = "italic", + weight = "normal", + width = "semicondensed", + }, + ["AntPoltLtSemiCond-Bold.otf"] = { + style = "regular", + weight = "medium", + width = "semicondensed", + }, + ["AntPoltLtSemiCond-BoldItalic.otf"] = { + style = "italic", + weight = "medium", + width = "semicondensed", + }, + ["AntPoltSemiCond-Bold.otf"] = { + style = "regular", + weight = "bold", + width = "semicondensed", + }, + ["AntPoltSemiCond-BoldItalic.otf"] = { + style = "italic", + weight = "bold", + width = "semicondensed", + }, + ["AntPoltLt-Regular.otf"] = { + style = "regular", + weight = "light", + width = "normal", + }, + ["AntPoltLt-Italic.otf"] = { + style = "italic", + weight = "light", + width = "normal", + }, + ["AntPolt-Regular.otf"] = { + style = "regular", + weight = "normal", + width = "normal", + }, + ["AntPolt-Italic.otf"] = { + style = "italic", + weight = "normal", + width = "normal", + }, + ["AntPoltLt-Bold.otf"] = { + style = "regular", + weight = "medium", + width = "normal", + }, + ["AntPoltLt-BoldItalic.otf"] = { + style = "italic", + weight = "medium", + width = "normal", + }, + ["AntPolt-Bold.otf"] = { + style = "regular", + weight = "bold", + width = "normal", + }, + ["AntPolt-BoldItalic.otf"] = { + style = "italic", + weight = "bold", + width = "normal", + }, + ["AntPoltLtSemiExpd-Regular.otf"] = { + style = "regular", + weight = "light", + width = "semiexpanded", + }, + ["AntPoltLtSemiExpd-Italic.otf"] = { + style = "italic", + weight = "light", + width = "semiexpanded", + }, + ["AntPoltSemiExpd-Regular.otf"] = { + style = "regular", + weight = "normal", + width = "semiexpanded", + }, + ["AntPoltSemiExpd-Italic.otf"] = { + style = "italic", + weight = "normal", + width = "semiexpanded", + }, + ["AntPoltLtSemiExpd-Bold.otf"] = { + style = "regular", + weight = "medium", + width = "semiexpanded", + }, + ["AntPoltLtSemiExpd-BoldItalic.otf"] = { + style = "italic", + weight = "medium", + width = "semiexpanded", + }, + ["AntPoltSemiExpd-Bold.otf"] = { + style = "regular", + weight = "bold", + width = "semiexpanded", + }, + ["AntPoltSemiExpd-BoldItalic.otf"] = { + style = "italic", + weight = "bold", + width = "semiexpanded", + }, + ["AntPoltLtExpd-Regular.otf"] = { + style = "regular", + weight = "light", + width = "expanded", + }, + ["AntPoltLtExpd-Italic.otf"] = { + style = "italic", + weight = "light", + width = "expanded", + }, + ["AntPoltExpd-Regular.otf"] = { + style = "regular", + width = "expanded", + weight = "normal", + }, + ["AntPoltExpd-Italic.otf"] = { + style = "italic", + width = "expanded", + weight = "normal", + }, + ["AntPoltLtExpd-Bold.otf"] = { + style = "regular", + width = "expanded", + weight = "medium", + }, + ["AntPoltLtExpd-BoldItalic.otf"] = { + style = "italic", + width = "expanded", + weight = "medium", + }, + ["AntPoltExpd-Bold.otf"] = { + style = "regular", + weight = "bold", + width = "expanded", + }, + ["AntPoltExpd-BoldItalic.otf"] = { + style = "italic", + weight = "bold", + width = "expanded", + }, + }, + }, +} diff --git a/tex/generic/context/luatex-fonts-merged.lua b/tex/generic/context/luatex-fonts-merged.lua index 92ff5ac7e..d785622ec 100644 --- a/tex/generic/context/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 09/22/10 12:33:39 +-- merge date : 09/23/10 01:03:41 do -- begin closure to overcome local limits and interference @@ -3155,6 +3155,10 @@ fonts.processors = fonts.processors or { fonts.manipulators = fonts.manipulators or { } +fonts.tracers = fonts.tracers or { +} + + fonts.definers = fonts.definers or { } fonts.definers.specifiers = fonts.definers.specifiers or { } fonts.definers.specifiers.synonyms = fonts.definers.specifiers.synonyms or { } @@ -5775,7 +5779,7 @@ end function otf.load(filename,format,sub,featurefile) local name = file.basename(file.removesuffix(filename)) local attr = lfs.attributes(filename) - local size, time = attr.size or 0, attr.modification or 0 + local size, time = attr and attr.size or 0, attr and attr.modification or 0 if featurefile then name = name .. "@" .. file.removesuffix(file.basename(featurefile)) end -- cgit v1.2.3