From: Hironori Kitagawa Date: Sun, 14 Apr 2013 10:21:51 +0000 (+0900) Subject: Fix for #31147. 'fullwidthify' proportional glyphs if pwid/palt are not set. X-Git-Tag: tl2012_last~3 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=0c68dbd;p=luatex-ja%2Fluatexja.git Fix for #31147. 'fullwidthify' proportional glyphs if pwid/palt are not set. --- diff --git a/src/ltj-jfont.lua b/src/ltj-jfont.lua index abadb63..e858906 100644 --- a/src/ltj-jfont.lua +++ b/src/ltj-jfont.lua @@ -236,6 +236,7 @@ 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 diff --git a/src/ltj-pretreat.lua b/src/ltj-pretreat.lua index 1b327d4..21f0076 100644 --- a/src/ltj-pretreat.lua +++ b/src/ltj-pretreat.lua @@ -15,6 +15,7 @@ local node_remove = node.remove local node_next = node.next local node_free = node.free local tex_getcount = tex.getcount +local fonts_ids = fonts.ids local id_glyph = node.id('glyph') local id_math = node.id('math') @@ -29,6 +30,51 @@ local ltjc_is_ucs_in_japanese_char = ltjc.is_ucs_in_japanese_char local attr_orig_char = luatexbase.attributes['ltj@origchar'] local STCK = luatexja.userid_table.STCK +local fwglyph = { + ["Japan1"] = { + [0x00A4] = 16280, + [0x00A9] = 8059, + [0x00AC] = 8008, + [0x00AE] = 8060, + [0x00B5] = 12093, + [0x00BC] = 8185, + [0x00BD] = 8184, + [0x00BE] = 9783, + [0x2012] = 16206, + [0x201C] = 672, + [0x201D] = 673, + [0x201E] = 8280, + [0x2022] = 12256, + [0x2026] = 668, + [0x20AC] = 9779, + [0x2122] = 11853, + [0x2127] = 16204, + [0x2153] = 9781, + [0x2154] = 9782, + [0x2155] = 9784, + [0x215B] = 9796, + [0x215C] = 9797, + [0x215D] = 9798, + [0x215E] = 9799, + [0x2209] = 16299, + [0x2225] = 16196, + [0x2226] = 16300, + [0x2245] = 16301, + [0x2248] = 16302, + [0x2262] = 16303, + [0x2276] = 16304, + [0x2277] = 16305, + [0x2284] = 16306, + [0x2285] = 16307, + [0x228A] = 16308, + [0x228B] = 16309, + [0x22DA] = 16310, + [0x22DB] = 16311, + [0x2318] = 16271, + } +} + + ------------------------------------------------------------------------ -- MAIN PROCESS STEP 1: replace fonts ------------------------------------------------------------------------ @@ -41,9 +87,20 @@ local function suppress_hyphenate_ja(head) local pid = p.id if pid == id_glyph then if (has_attr(p, attr_icflag) or 0)<=0 and ltjc_is_ucs_in_japanese_char(p) then - p.font = has_attr(p, attr_curjfnt) or p.font + local pf = has_attr(p, attr_curjfnt) or p.font + p.font = pf p.subtype = floor(p.subtype*0.5)*2 set_attr(p, attr_orig_char, p.char) + if ltjf_font_metric_table[pf] and ltjf_font_metric_table[pf].mono_flag then + local pco = fonts_ids[pf].cidinfo.ordering + for i,v in pairs(fwglyph) do + if pco == i then + local fwc = fonts_ids[pf].unicodes[pco .. '.'.. tostring(v[p.char])] + if fwc then p.char = fwc end + break + end + end + end end elseif pid == id_math then p = node_next(p) -- skip math on