1 luatexja.load_module('base'); local ltjb = luatexja.base
2 luatexja.load_module('jfont'); local ltjf = luatexja.jfont
4 local round = tex.round
5 local floor = math.floor
6 local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
7 local attr_jchar_class = luatexbase.attributes['ltj@charclass']
8 local attr_yablshift = luatexbase.attributes['ltj@yablshift']
9 local attr_ykblshift = luatexbase.attributes['ltj@ykblshift']
11 local ltjf_font_metric_table = ltjf.font_metric_table
12 local ltjf_find_char_class = ltjf.find_char_class
15 local function print_scaled(s)
21 out=out..tostring(floor(s/unity)) .. '.'
24 if delta>unity then s=s+32768-50000 end
25 out=out .. tostring(floor(s/unity))
31 local function set_valign(fmtable, fn)
32 local fi = fonts.hashes.identifiers[fn]
33 if not fi.ascender then fi = fi.parameters end
34 local mt = fmtable.char_type[0]
35 local ma = mt.height / (mt.height + mt.depth) * (fi.ascender + fi.descender)
36 fmtable.down_offset = round(fi.ascender - ma)
37 print('loading :', fn, print_scaled(fmtable.down_offset)
38 .. ' / ' .. print_scaled(fi.size))
41 luatexbase.add_to_callback("luatexja.define_jfont",
42 set_valign, "ltj.valign.define_jfont", 1)
43 -- 既に読み込まれているフォントに対しても,同じことをやらないといけない
44 for fn, v in pairs(ltjf_font_metric_table) do
45 ltjf_font_metric_table[fn] = set_valign(v, fn)
48 local function get_valign (fstable, fmtable, jchar_class)
49 local d = fmtable.down_offset or 0
50 fstable.down = fstable.down + d
54 luatexbase.add_to_callback("luatexja.set_width",
55 get_valign, "ltj.valign.define_jfont", 1)