summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tex/context/base/char-def.lua2
-rw-r--r--tex/context/base/char-ini.lua75
-rw-r--r--tex/context/base/cont-new.tex2
-rw-r--r--tex/context/base/context.tex2
-rw-r--r--tex/context/base/font-gds.lua23
-rw-r--r--tex/context/base/font-ini.lua4
-rw-r--r--tex/context/base/font-otf.lua2
-rw-r--r--tex/context/base/font-syn.lua96
-rw-r--r--tex/context/base/s-fnt-28.tex46
-rw-r--r--tex/context/base/sort-ini.lua110
-rw-r--r--tex/context/fonts/antykwapoltawskiego.lfg213
-rw-r--r--tex/generic/context/luatex-fonts-merged.lua8
12 files changed, 526 insertions, 57 deletions
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