[latex3-commits] [git/LaTeX3-latex3-luaotfload] fontnames-dev: fontnames lookup table (daf4697)
Marcel Fabian Krüger
tex at 2krueger.de
Wed Sep 2 00:40:01 CEST 2020
Repository : https://github.com/latex3/luaotfload
On branch : fontnames-dev
Link : https://github.com/latex3/luaotfload/commit/daf469721f5cf6a8f219eb00c70bd4a4098bf61d
>---------------------------------------------------------------
commit daf469721f5cf6a8f219eb00c70bd4a4098bf61d
Author: Marcel Fabian Krüger <tex at 2krueger.de>
Date: Wed Sep 2 00:01:31 2020 +0200
fontnames lookup table
>---------------------------------------------------------------
daf469721f5cf6a8f219eb00c70bd4a4098bf61d
src/luaotfload-database.lua | 73 ++++++++++++++++++++++++++++++++++-----------
1 file changed, 55 insertions(+), 18 deletions(-)
diff --git a/src/luaotfload-database.lua b/src/luaotfload-database.lua
index b3d4bad..0642384 100644
--- a/src/luaotfload-database.lua
+++ b/src/luaotfload-database.lua
@@ -140,9 +140,11 @@ local tonumber = tonumber
local unpack = table.unpack
local fonts = fonts or { }
-local fontshandlers = fonts.handlers or { }
+do
+ local fontshandlers = fonts.handlers or { }
+ fonts.handlers = fontshandlers
+end
local otfhandler = fonts.handlers.otf or { }
-fonts.handlers = fontshandlers
local gzipload = gzip.load
local gzipsave = gzip.save
@@ -360,6 +362,7 @@ This is a sketch of the luaotfload db:
type dbobj = {
families : familytable;
+ fontnames : fontnametable;
files : filemap;
status : filestatus;
mappings : fontentry list;
@@ -380,6 +383,11 @@ This is a sketch of the luaotfload db:
default : int; // points into mappings or names
optical : (int, int) list; // design size -> index entry
}
+ and fontnametable = {
+ local : (format, index) hash;
+ texmf : (format, index) hash;
+ system : (format, index) hash;
+ }
and metadata = {
created : string // creation time
formats : string list; // { "otf", "ttf", "ttc" }
@@ -1069,21 +1077,25 @@ local function lookup_familyname (specification, name, style, askedsize)
end
local function lookup_fontname (specification, name)
- local mappings = name_index.mappings
- local fallback = nil
- local lastresort = nil
- for i = 1, #mappings do
- local face = mappings [i]
- local typographicsubfamily = face.typographicsubfamily
- local subfamily = face.subfamily
- if face.fontname == name
- or face.fullname == name
- or face.psname == name
- then
- return face.fullpath, face.subfont
+ local fontnames = name_index.fontnames
+ --- arrow code alert
+ for i = 1, #location_precedence do
+ local location = location_precedence [i]
+ local locgroup = fontnames [location]
+ for j = 1, #format_precedence do
+ local format = format_precedence [j]
+ local fmtgroup = locgroup [format]
+ if fmtgroup then
+ local index = fmtgroup [name]
+ if index then
+ local success, resolved, subfont = get_font_file (index)
+ if success then
+ return resolved, subfont
+ end
+ end
+ end
end
end
- return nil, nil
end
local design_size_dimension --- scale asked size if not using bp
@@ -2935,6 +2947,29 @@ local function collect_families (mappings)
return families
end
+local function collect_fontnames (mappings)
+
+ logreport ("info", 2, "db", "Collecting fontnames.")
+
+ local fontnames = {
+ ["local"] = { },
+ system = { },
+ texmf = { },
+ }
+
+ for i = 1, #mappings do
+ local entry = mappings [i]
+
+ local subtable = get_subtable (fontnames, entry)
+ if entry.fontname then subtable[entry.fontname] = i end
+ if entry.fullname then subtable[entry.fullname] = i end
+ if entry.psname then subtable[entry.psname] = i end
+ end
+
+ collectgarbage "collect"
+ return fontnames
+end
+
--[[doc--
group_modifiers -- For not-quite-bold faces, determine whether
@@ -3442,15 +3477,17 @@ function update_names (currentnames, force, dry_run)
targetnames.files = generate_filedata (targetnames.mappings)
--- pass 5: build family lookup table
- targetnames.families = collect_families (targetnames.mappings)
+ targetnames.families = collect_families (targetnames.mappings)
--- pass 6: arrange style and size info
targetnames.families = group_modifiers (targetnames.mappings,
targetnames.families)
-
--- pass 7: order design size tables
targetnames.families = order_design_sizes (targetnames.families)
+ --- pass 8: build family lookup table
+ targetnames.fontnames = collect_fontnames (targetnames.mappings)
+
logreport ("info", 3, "db",
"Rebuilt in %0.f ms.",
1000 * (osgettimeofday () - starttime))
@@ -3795,7 +3832,7 @@ return function ()
names.blacklist = blacklist
-- MK Changed to rebuild with case insensitive fallback.
-- Negative version to indicate generation by modified code.
- names.version = -1 --- decrease monotonically
+ names.version = -2 --- decrease monotonically
-- /MK
names.data = nil --- contains the loaded database
names.lookups = nil --- contains the lookup cache
More information about the latex3-commits
mailing list.