X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fltj-jfont.lua;h=1b4d04df4e743f344c5e79c018c539d8668ee8b2;hb=cf51a2259a27eeed9a3d5d0c40c767a5e6bc403e;hp=abadb63b39dd28e86224fb31d2c83684dff4a116;hpb=ae6b66530a4e01e6f76819b86f748e46eb6bcb78;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-jfont.lua b/src/ltj-jfont.lua index abadb63..1b4d04d 100644 --- a/src/ltj-jfont.lua +++ b/src/ltj-jfont.lua @@ -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 .. "'", @@ -237,6 +235,7 @@ function jfontdefY() -- for horizontal font chars = sz.chars, char_type = sz.char_type, kanjiskip = sz.kanjiskip, xkanjiskip = sz.xkanjiskip, } + 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 ' @@ -290,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 @@ -308,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)