local cidfont_data = {}
local cache_chars = {}
-local cache_ver = '3'
+local cache_ver = '4'
local cid_reg, cid_order, cid_supp, cid_name
local cid_replace = {
ttu[cid_order .. '.' .. i] = cidmo[i]
end
- -- 縦書用字形
- tt, cidm = {}, {}
- for i = 0,kx[2] do cidm[i] = -1 end
- open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
- local ttv = {}
- for i,v in pairs(tt) do ttv[i] = cidmo[v.index] end
-
-- shared
k.shared = {
otfdata = {
cidinfo= k.cidinfo, verbose = false,
shared = { featuredata = {}, },
- luatex = { features = {},
+ luatex = { features = {},
defaultwidth=1000,
},
},
dynamics = {}, features = {}, processes = {},
- ltj_vert_table = ttv
- }
+ --rawdata = { descriptions = {} },
+ }
k.resources = { unicodes = ttu, }
k.descriptions = {}
cache_chars[cid_name] = { [655360] = k.characters }
+ -- 縦書用字形
+ tt, cidm = {}, {}
+ for i = 0,kx[2] do cidm[i] = -1 end
+ open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
+ for i,v in pairs(tt) do
+ ttv[i] = cidmo[v.index]
+ end
+
-- tounicode エントリ
local cidp = {nil, nil}; tt, ttu, cidm = {}, {}, {}
open_cmap_file(cid_name .. "-UCS2",
local definers = fonts.definers
local function mk_rml(name, size, id)
local specification = definers.analyze(name,size)
- specification = definers.resolve(specification)
+ --specification = definers.resolve(specification) (not needed)
specification.detail = specification.detail or ''
local fontdata = {}
local cachedata = {}
local s = cidfont_data[cid_name]
- luatexja.rmlgbm.vert_addfunc(id, s.shared.ltj_vert_table)
+ luatexja.rmlgbm.vert_addfunc(id)
for k, v in pairs(s) do
fontdata[k] = v
cachedata[k] = v
end
local function font_callback(name, size, id, fallback)
- local p = utf.find(name, ":") or utf.len(name)+1
- if utf.sub(name, 1, p-1) == 'psft' then
+ local p = name:find(":") or name:len()+1
+ if name:sub(1, p-1) == 'psft' then
local s = "Adobe-Japan1-6"
- local basename = utf.sub(name,p+1)
- local p = utf.find(basename, ":")
- local q = utf.find(basename, "/[BI][BI]?")
+ local basename = name:sub(p+1)
+ local p = basename:find(":")
+ local q = basename:find("/[BI][BI]?")
if q and p and q<=p then
- basename = utf.gsub(basename, '/[BI][BI]?', '', 1)
- p = utf.find(basename, ":")
+ basename = basename:gsub('/[BI][BI]?', '', 1)
+ p = basename:find(":")
end
if p then
- local xname = utf.sub(basename, p+1)
+ local xname = basename:sub(p+1)
p = 1
while p do
- local q = utf.find(xname, ";", p+1) or utf.len(xname)+1
- if utf.sub(xname, p, p+3)=='cid=' and q>p+4 then
- s = utf.sub(xname, p+4, q-1)
+ local q = xname:find(";", p+1) or xname:len()+1
+ if xname:sub(p, p+3)=='cid=' and q>p+4 then
+ s = xname:sub(p+4, q-1)
end
- if utf.len(xname)+1==q then p = nil else p = q + 1 end
+ if xname:len()+1==q then p = nil else p = q + 1 end
end
end
cid_reg, cid_order = string.match(s, "^(.-)%-(.-)%-(%d-)$")
end
return mk_rml(basename, size, id)
else
- return fallback(name, size, id)
+ local tfmdata=fallback(name, size, id)
+ if type (tfmdata) == "table" and tfmdata.shared then
+ luatexbase.call_callback("luaotfload.patch_font", tfmdata, name)
+ end
+ return tfmdata
end
end
cid_reg, cid_order, cid_name, cid_supp = 'Adobe', 'Japan1', 'Adobe-Japan1'
read_cid_font()
-
-