-require('luatexja.base'); local ltjb = luatexja.base
-require('luatexja.jfont'); local ltjf = luatexja.jfont
+luatexja.load_module('base'); local ltjb = luatexja.base
+luatexja.load_module('jfont'); local ltjf = luatexja.jfont
local round = tex.round
-
+local floor = math.floor
local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
local attr_jchar_class = luatexbase.attributes['ltj@charclass']
local attr_yablshift = luatexbase.attributes['ltj@yablshift']
local ltjf_font_metric_table = ltjf.font_metric_table
local ltjf_find_char_class = ltjf.find_char_class
+local unity=65536
+local function print_scaled(s)
+ local out=''
+ local delta=10
+ if s<0 then
+ out=out..'-'; s=-s
+ end
+ out=out..tostring(floor(s/unity)) .. '.'
+ s=10*(s%unity)+5
+ repeat
+ if delta>unity then s=s+32768-50000 end
+ out=out .. tostring(floor(s/unity))
+ s=10*(s%unity)
+ delta=delta*10
+ until s<=delta
+ return out
+end
local function set_valign(fmtable, fn)
- local fi = fonts.ids[fn]
- local fa = fi.ascender / (fi.ascender + fi.descender)
- local mt = ltjf.metrics[fmtable.jfm].char_type[0]
- local ma = mt.height / (mt.height + mt.depth)
- fmtable.down_offset = round((fa - ma)*fi.size)
- print('loading :', fn, fmtable.down_offset)
+ local fi = fonts.hashes.identifiers[fn]
+ if not fi.ascender then fi = fi.parameters end
+ local mt = fmtable.char_type[0]
+ local ma = mt.height / (mt.height + mt.depth) * (fi.ascender + fi.descender)
+ fmtable.down_offset = round(fi.ascender - ma)
+ print('loading :', fn, print_scaled(fmtable.down_offset)
+ .. ' / ' .. print_scaled(fi.size))
return fmtable
end
luatexbase.add_to_callback("luatexja.define_jfont",
set_valign, "ltj.valign.define_jfont", 1)
--- ´û¤ËÆɤ߹þ¤Þ¤ì¤Æ¤¤¤ë¥Õ¥©¥ó¥È¤ËÂФ·¤Æ¤â¡¤Æ±¤¸¤³¤È¤ò¤ä¤é¤Ê¤¤¤È¤¤¤±¤Ê¤¤
+-- 既に読み込まれているフォントに対しても,同じことをやらないといけない
for fn, v in pairs(ltjf_font_metric_table) do
ltjf_font_metric_table[fn] = set_valign(v, fn)
end