summaryrefslogtreecommitdiff
path: root/tex/context/base/font-syn.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/font-syn.lua')
-rw-r--r--tex/context/base/font-syn.lua57
1 files changed, 33 insertions, 24 deletions
diff --git a/tex/context/base/font-syn.lua b/tex/context/base/font-syn.lua
index b56ea7917..c2c96f33e 100644
--- a/tex/context/base/font-syn.lua
+++ b/tex/context/base/font-syn.lua
@@ -38,7 +38,7 @@ fonts.names.data = fonts.names.data or { }
local names = fonts.names
local filters = fonts.names.filters
-names.version = 1.101
+names.version = 1.102
names.basename = "names"
names.saved = false
names.loaded = false
@@ -156,7 +156,7 @@ function fontloader.fullinfo(...)
end
end
-filters.otf = fontloader.fullinfo
+filters.otf = fontloader.fullinfo
function filters.afm(name)
-- we could parse the afm file as well, and then report an error but
@@ -348,12 +348,10 @@ local function check_name(data,result,filename,suffix,subfont)
if not familyname then
familyname = a_name
end
- fontname = fontname or fullname or familyname or basename
+ fontname = fontname or fullname or familyname or file.basename(filename)
fullname = fullname or fontname
familyname = familyname or fontname
- -- register
- local index = #specifications + 1
- specifications[index] = {
+ specifications[#specifications + 1] = {
filename = filename,
format = lower(suffix),
subfont = subfont,
@@ -370,12 +368,6 @@ local function check_name(data,result,filename,suffix,subfont)
maxsize = result.design_range_top or 0,
designsize = result.design_size or 0,
}
- local family = families[familyname]
- if not family then
- families[familyname] = { index }
- else
- family[#family+1] = index
- end
end
local function cleanupkeywords()
@@ -465,6 +457,21 @@ local function collecthashes()
return nofmappings, noffallbacks
end
+local function collectfamilies()
+ local data = names.data
+ local specifications = data.specifications
+ local families = data.families
+ for index=1,#specifications do
+ local familyname = specifications[index].familyname
+ local family = families[familyname]
+ if not family then
+ families[familyname] = { index }
+ else
+ family[#family+1] = index
+ end
+ end
+end
+
local function checkduplicate(where) -- fails on "Romantik" but that's a border case anyway
local data = names.data
local mapping = data[where]
@@ -539,20 +546,20 @@ local function unpackreferences()
v[i] = specifications[v[i]]
end
end
- end
- local mappings = data.mappings
- if mappings then
- for _, m in next, mappings do
- for k, v in next, m do
- m[k] = specifications[v]
+ local mappings = data.mappings
+ if mappings then
+ for _, m in next, mappings do
+ for k, v in next, m do
+ m[k] = specifications[v]
+ end
end
end
- end
- local fallbacks = data.fallbacks
- if fallbacks then
- for _, f in next, fallbacks do
- for k, v in next, f do
- f[k] = specifications[v]
+ local fallbacks = data.fallbacks
+ if fallbacks then
+ for _, f in next, fallbacks do
+ for k, v in next, f do
+ f[k] = specifications[v]
+ end
end
end
end
@@ -713,6 +720,7 @@ function names.identify()
resetdata()
analysefiles()
rejectclashes()
+ collectfamilies()
collectstatistics()
cleanupkeywords()
collecthashes()
@@ -1088,6 +1096,7 @@ local function collect(stage,found,done,name,weight,style,width,all)
if trace_names then
logs.report("fonts","resolving name '%s', weight '%s', style '%s', width '%s'",name or "?",tostring(weight),tostring(style),tostring(width))
end
+--~ print(name,table.serialize(family))
if weight and weight ~= "" then
if style and style ~= "" then
if width and width ~= "" then