OSDN Git Service

more use of \luadef
[luatex-ja/luatexja.git] / test / valign.lua
index c044e6f..2366351 100644 (file)
@@ -1,8 +1,8 @@
-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']
@@ -11,9 +11,27 @@ local attr_ykblshift = luatexbase.attributes['ltj@ykblshift']
 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 mt = ltjf.metrics[fmtable.jfm].char_type[0]
+   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)
@@ -22,7 +40,7 @@ local function set_valign(fmtable, fn)
 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