OSDN Git Service

test/mfonttest.tex: reconstruction:
[luatex-ja/luatexja.git] / src / ltj-jfont.lua
index e858906..1b4d04d 100644 (file)
@@ -3,8 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.jfont',
-  date = '2011/06/27',
-  version = '0.1',
+  date = '2011/05/11',
   description = 'Loader for Japanese fonts',
 })
 module('luatexja.jfont', package.seeall)
@@ -16,6 +15,7 @@ local node_new = node.new
 local has_attr = node.has_attribute
 local set_attr = node.set_attribute
 local round = tex.round
+local getfont = font.getfont
 
 local attr_icflag = luatexbase.attributes['ltj@icflag']
 local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
@@ -173,8 +173,6 @@ luatexbase.create_callback("luatexja.find_char_class", "data",
 function find_char_class(c,m)
 -- c: character code, m: 
    if not m then return 0 end
---   print("**")
---   for i,v in pairs(m) do print(i,v) end
    return m.chars[c] or 
       luatexbase.call_callback("luatexja.find_char_class", 0, m, c)
 end
@@ -220,7 +218,7 @@ luatexbase.create_callback("luatexja.define_jfont", "data", function (ft, fn) re
 function jfontdefY() -- for horizontal font
    local j = load_jfont_metric()
    local fn = font.id(cstemp)
-   local f = font.fonts[fn]
+   local f = getfont(fn)
    if not j then 
       ltjb.package_error('luatexja',
                         "bad JFM `" .. jfm_file_name .. "'",
@@ -236,8 +234,8 @@ function jfontdefY() -- for horizontal font
                     zw = sz.zw, zh = sz.zh, 
                     chars = sz.chars, char_type = sz.char_type,
                     kanjiskip = sz.kanjiskip, xkanjiskip = sz.xkanjiskip, 
-                    mono_flag = not string.match((fonts.ids[fn].name or ''), "+[(pwid)(palt)]"),
                    }
+      
    fmtable = luatexbase.call_callback("luatexja.define_jfont", fmtable, fn)
    font_metric_table[fn]=fmtable
    tex.sprint(cat_lp, luatexja.is_global .. '\\protected\\expandafter\\def\\csname ' 
@@ -291,17 +289,17 @@ local function extract_metric(name)
 end
 
 -- replace fonts.define.read()
-local ljft_dr_orig = fonts.define.read
-function fonts.define.read(name, size, id)
+function font_callback(name, size, id, fallback)
    extract_metric(name)
    -- In the present imple., we don't remove "jfm=..." from name.
-   return ljft_dr_orig(name, size, id)
+   return fallback(name, size, id)
 end
 
 ------------------------------------------------------------------------
 -- MISC
 ------------------------------------------------------------------------
 
+local is_ucs_in_japanese_char = ltjc.is_ucs_in_japanese_char
 -- EXT: italic correction
 function append_italic()
    local p = tex.nest[tex.nest.ptr].tail
@@ -309,13 +307,18 @@ function append_italic()
       local f = p.font
       local g = node_new(id_kern)
       g.subtype = 1; node.set_attribute(g, attr_icflag, ITALIC)
-      if ltjc.is_ucs_in_japanese_char(p) then
+      if is_ucs_in_japanese_char(p) then
         f = has_attr(p, attr_curjfnt)
         local j = font_metric_table[f]
-        local c = find_char_class(p.char, j)
-        g.kern = j.char_type[c].italic
+        g.kern = j.char_type[find_char_class(p.char, j)].italic
       else
-        g.kern = font.fonts[f].characters[p.char].italic
+        local h = getfont(f)
+        if h then
+           g.kern = h.characters[p.char].italic
+        else
+           tex.attribute[attr_icflag] = -(0x7FFFFFFF)
+           return node.free(g)
+        end
       end
       node.write(g)
       tex.attribute[attr_icflag] = -(0x7FFFFFFF)