elseif type(t.zw)~='number' or type(t.zh)~='number' then
defjfm_res= nil; return
end
+ t.version = (type(t.version)=='number') and t.version or 1
t.char_type = {}; t.chars = {}
for i,v in pairs(t) do
if type(i) == 'number' then -- char_type
if type(v.down)~='number' then
v.down = 0.0
end
+ if t.version>=2 then
+ if v.end_stretch then defjfm_res= nil; return end
+ if v.end_shrink then defjfm_res= nil; return end
+ if v.end_adjust then
+ if type(v.end_adjust)~='table' then
+ v.end_adjust = nil
+ elseif #(v.end_adjust)==0 then
+ v.end_adjust = nil
+ else
+ table.sort(v.end_adjust)
+ end
+ end
+ else
+ v.end_adjust = nil
+ if v.end_stretch and v.end_stretch~=0.0 then
+ v.end_adjust = (v.end_adjust or {})
+ v.end_adjust[#(v.end_adjust)+1] = v.end_stretch
+ end
+ if v.end_shrink and v.end_ahrink~=0.0 then
+ v.end_adjust = (v.end_adjust or {})
+ v.end_adjust[#(v.end_adjust)+1] = -v.end_shrink
+ end
+ if v.end_adjust then v.end_adjust[#(v.end_adjust)+1] = 0.0 end
+ end
v.kern = v.kern or {}; v.glue = v.glue or {}
for j,x in pairs(v.glue) do
if v.kern[j] then defjfm_res= nil; return end
end
update_jfm_cache = function (j,sz)
if metrics[j].size_cache[sz] then return end
- --local TEMP = node_new(id_kern)
local t = {}
metrics[j].size_cache[sz] = t
t.chars = metrics[j].chars
}
end
for k,w in pairs(v.kern) do
- local g = node_new(id_kern)
+ local g = node_new(id_kern, 1)
setfield(g, 'kern', w[1])
- setfield(g, 'subtype', 1)
set_attr(g, attr_icflag, FROM_JFM)
v[k] = {g, ratio=w[2]/sz}
end
t.zw = round(metrics[j].zw*sz)
t.zh = round(metrics[j].zh*sz)
t.size = sz
- --node_free(TEMP)
end
end
else
local ITALIC = luatexja.icflag_table.ITALIC
new_ic_kern = function()
- local g = node_new(id_kern)
- setfield(g, 'subtype', 1); set_attr(g, attr_icflag, ITALIC)
+ local g = node_new(id_kern, 1)
+ set_attr(g, attr_icflag, ITALIC)
return g
end
end