+ return new
+ else return nil end
+ end
+
+ update_jfm_cache = function (j,sz)
+ if metrics[j].size_cache[sz] then return end
+ local t = {}
+ metrics[j].size_cache[sz] = t
+ t.chars = metrics[j].chars
+ t.char_type = mult_table(metrics[j].char_type, sz)
+ for i,v in pairs(t.char_type) do
+ v.align = (v.align=='left') and 0 or
+ ((v.align=='right') and 1 or 0.5)
+ if type(i) == 'number' then -- char_type
+ for k,w in pairs(v.glue) do
+ local h = node_new(id_glue_spec)
+mem_leak_gs = mem_leak_gs+1
+ v[k] = {true, h, (w[5] and w[5]/sz or 0), FROM_JFM + (w[4] and w[4]/sz or 0)}
+ setfield(h, 'width', w[1])
+ setfield(h, 'stretch', w[2])
+ setfield(h, 'shrink', w[3])
+ setfield(h, 'stretch_order', 0)
+ setfield(h, 'shrink_order', 0)
+ end
+ for k,w in pairs(v.kern) do
+ local g = node_new(id_kern)
+mem_leak_kern = mem_leak_kern +1
+ setfield(g, 'kern', w[1])
+ setfield(g, 'subtype', 1)
+ set_attr(g, attr_icflag, FROM_JFM)
+ v[k] = {false, g, w[2]/sz}
+ end