local sort = table.sort
local function add_fl_table(dest, glyphs, unitable, asc_des, units)
- local tg, glyphmin, glyphmax = glyphs.glyphs, glyphs.glyphmin, glyphs.glyphmax
+ local glyphmin, glyphmax = glyphs.glyphmin, glyphs.glyphmax
+ if glyphmax < 0 then return dest end
+ local tg = glyphs.glyphs
for i = glyphmin, glyphmax do
local gv = tg[i]
if gv then
end
if uniq_flag then
dest = dest or {}; dest[bu] = dest[bu] or {}
- dest[bu][vsel] = unitable[i]
+ dest[bu][vsel] = unitable[gv.name]
end
end
end
end
prepare_fl_data = function (dest, id)
local fl = fontloader.open(id.filename)
- local unicodes = {}
+ local ind_to_uni, unicodes = {}, {}
for i,v in pairs(id.characters) do
- unicodes[v.index] = i
+ ind_to_uni[v.index] = i
end
-
if fl.glyphs then
local tg, glyphmin, glyphmax = fl.glyphs, fl.glyphmin, fl.glyphmax
- for i = glyphmin, glyphmax do
- if tg[i] and tg[i].name then unicodes[tg[i].name] = unicodes[i] end
- end
+ if 0 <= glyphmax then
+ for i = glyphmin, glyphmax do
+ if tg[i] and tg[i].name then unicodes[tg[i].name] = ind_to_uni[i] end
+ end
+ end
dest = add_fl_table(dest, fl, unicodes,
fl.ascent + fl.descent, fl.units_per_em)
end
if fl.subfonts then
for _,v in pairs(fl.subfonts) do
local tg, glyphmin, glyphmax = v.glyphs, v.glyphmin, v.glyphmax
- for i = glyphmin, glyphmax do
- if tg[i] and tg[i].name then unicodes[tg[i].name] = unicodes[i] end
- end
- end
+ if 0 <= glyphmax then
+ for i = glyphmin, glyphmax do
+ if tg[i] and tg[i].name then unicodes[tg[i].name] = ind_to_uni[i] end
+ end
+ end
+ end
for _,v in pairs(fl.subfonts) do
dest = add_fl_table(dest, v, unicodes,
fl.ascent + fl.descent, fl.units_per_em)
end
- end
- fontloader.close(fl); collectgarbage("collect")
- return dest
+ end
+ if dest then dest.unicodes = unicodes end
+ fontloader.close(fl); collectgarbage("collect")
+ return dest
end
-- supply vkern table
supply_vkern_table = function(id, bname)
--
do
- local cache_ver = 7
+ local cache_ver = 9
local checksum = file.checksum
local function prepare_extra_data_base(id)