luatexbase.create_callback("luatexja.load_jfm", "data", function (ft, jn) return ft end)
-local jfm_file_name, jfm_var
+local jfm_file_name, jfm_var, jfm_ksp
local defjfm_res
local jfm_dir, is_def_jfont, is_vert_enabled
+local function norm_val(a)
+ if (not a) or (a==0.) then
+ return nil
+ elseif a==true then
+ return 1
+ else
+ return a
+ end
+end
+
+
function define_jfm(t)
local real_char -- Does current character class have the 'real' character?
if t.dir~=jfm_dir then
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
x.ratio, x[5] = (x.ratio or (x[5] and 0.5*(1+x[5]) or 0.5)), nil
x.priority, x[4] = (x.priority or x[4] or 0), nil
- if v.kern[j] then defjfm_res= nil; return end
+ x.kanjiskip_natural = norm_val(x.kanjiskip_natural)
+ x.kanjiskip_stretch = norm_val(x.kanjiskip_stretch)
+ x.kanjiskip_shrink = norm_val(x.kanjiskip_shrink)
end
for j,x in pairs(v.kern) do
if type(x)=='number' then
return new
else return nil end
end
-
update_jfm_cache = function (j,sz)
if metrics[j].size_cache[sz] then return end
--local TEMP = node_new(id_kern)
true, h,
ratio=w.ratio/sz,
priority=FROM_JFM + w.priority/sz,
- ksp_natural = w.ksp_natural,
- ksp_stretch = w.ksp_stretch,
- ksp_shrink = w.ksp_shrink,
+ kanjiskip_natural = w.kanjiskip_natural and w.kanjiskip_natural/sz,
+ kanjiskip_stretch = w.kanjiskip_stretch and w.kanjiskip_stretch/sz,
+ kanjiskip_shrink = w.kanjiskip_shrink and w.kanjiskip_shrink/sz,
}
setfield(h, 'width', w[1])
setfield(h, 'stretch', w[2])
local ad = identifiers[fn].parameters
local sz = metrics[j].size_cache[f.size]
local fmtable = { jfm = j, size = f.size, var = jfm_var,
+ with_kanjiskip = jfm_ksp,
zw = sz.zw, zh = sz.zh,
ascent = ad.ascender,
descent = ad.descender,
-- extract jfm_file_name and jfm_var
-- normalize position of 'jfm=' and 'jfmvar=' keys
local function extract_metric(name)
- jfm_file_name = ''; jfm_var = ''
+ jfm_file_name = ''; jfm_var = ''; jfm_ksp = true
local tmp, index = name:sub(1, 5), 1
if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then
index = 6
name = name .. 'jfmvar=' .. jfm_var
end
end
+ for x in string.gmatch (name, "[:;]([+%%-]?)ltjks") do
+ jfm_ksp = not (x=='-')
+ end
if jfm_dir == 'tate' then
- is_vert_enabled = (not name:match('-vert')) and (not name:match('-vrt2'))
+ is_vert_enabled = (not name:match('[:;]%-vert')) and (not name:match('[:;]%-vrt2'))
if not name:match('vert') and not name:match('vrt2') then
name = name .. ';vert;vrt2'
end