From a93816a62415208b7f08f518f00ea3054971dff0 Mon Sep 17 00:00:00 2001 From: Hironori Kitagawa Date: Wed, 1 Jan 2014 21:28:49 +0900 Subject: [PATCH] lltjfont.sty, ltj-jfont.lua: different font number from different 4-tuple (enc, fam, series, shape). --- src/ltj-adjust.lua | 10 +++++----- src/ltj-jfont.lua | 6 ++++++ src/patches/lltjfont.sty | 7 +++++++ test/test20-mfont.tex | 19 +++---------------- 4 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/ltj-adjust.lua b/src/ltj-adjust.lua index 4c418b3..c81930a 100644 --- a/src/ltj-adjust.lua +++ b/src/ltj-adjust.lua @@ -16,6 +16,7 @@ local id_kern = node.id('kern') local id_hlist = node.id('hlist') local id_glue = node.id('glue') local id_glue_spec = node.id('glue_spec') +local id_whatsit = node.id('whatsit') local has_attr = node.has_attribute local set_attr = node.set_attribute local attr_icflag = luatexbase.attributes['ltj@icflag'] @@ -144,7 +145,6 @@ local function aw_step1(p, res, total) -- その前の node が本来の末尾文字となる x = node.prev(node.prev(x)) end - local xi, xc = x.id if xi == id_glyph and has_attr(x, attr_curjfnt) == x.font then -- 和文文字 @@ -152,13 +152,13 @@ local function aw_step1(p, res, total) elseif xi == id_hlist and get_attr_icflag(x) == PACKED then -- packed JAchar xc = x.head + while xc.id == id_whatsit do xc = node.next(xc) end else return false-- それ以外は対象外. end - local xk = ltjf_font_metric_table -- - [xc.font].char_type[has_attr(xc, attr_jchar_class) or 0] - ['end_' .. res.name] or 0 - --print(res.name, total, xk, unicode.utf8.char(xc.char)) + local xk = ltjf_font_metric_table[xc.font] + xk = xk.char_type[has_attr(xc, attr_jchar_class) or 0] + xk = xk['end_' .. res.name] or 0 if xk>0 and total>=xk then --print("ADDED") diff --git a/src/ltj-jfont.lua b/src/ltj-jfont.lua index cc89bbc..ed6da52 100644 --- a/src/ltj-jfont.lua +++ b/src/ltj-jfont.lua @@ -416,6 +416,12 @@ do local alt_font_base, alt_font_base_num -- EXT + function print_aftl_address(bbase) + local t = alt_font_table_latex[bbase] + if not t then t = {}; alt_font_table_latex[bbase] = t end + tex.sprint((tostring(t):gsub('table: 0x','ltjaltfont'))) + end +-- EXT function output_alt_font_cmd(bbase) alt_font_base = bbase alt_font_base_num = tex.getattribute(attr_curjfnt) diff --git a/src/patches/lltjfont.sty b/src/patches/lltjfont.sty index 24bfa8b..91ad8a7 100644 --- a/src/patches/lltjfont.sty +++ b/src/patches/lltjfont.sty @@ -583,8 +583,15 @@ \fi \let\getjfont\font@name} +% 異なる和文 enc/fam/ser/shape からは異なるフォント番号が振られるように +% わざと「ゴミをつける」 +\def\ltj@@patch@external@font#1 at{% + #1;\directlua{luatexja.jfont.print_aftl_address(% + '\luatexluaescapestring{\f@encoding/\f@family/\f@series/\f@shape}')}\space at% +} \def\extract@jfont{% \get@external@font + \edef\external@font{\expandafter\ltj@@patch@external@font\external@font}% \expandafter\globaljfont\font@name\external@font\relax \font@name%\global\zw=\zw\global\zh=\zh \csname \f@encoding+\f@family\endcsname diff --git a/test/test20-mfont.tex b/test/test20-mfont.tex index 264af53..b661faf 100644 --- a/test/test20-mfont.tex +++ b/test/test20-mfont.tex @@ -77,23 +77,10 @@ \section{例1} -%\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis}{} (A) -%\DeclareFontShape{JY3}{gtX}{an}{n}{<-> ssub*gtX/m/n}{} (B) -\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;foo}{}% (C) - +\DeclareFontShape{JY3}{gtX}{an}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis}{} \DeclareFontShape{JY3}{mcX}{bx}{kana}{<-> s*[0.962216] KozMinPr6N-Regular:jfm=ujis}{} \DeclareAlternateKanjiFont{JY3}{gtX}{an}{n}{JY3}{mcX}{bx}{kana}{"3000-"30FF} -% (A), (B) では失敗する.例えばサイズが 10 pt のとき, -% (A), (B) で定義した JY3/gtX/an/n/10 は JY3/gtX/m/n/10 と -% (LuaTeX 内部で使われる)フォント番号が全く同じなので,区別できない. -% そのため,JY3/gtX/an/n に対して行った「仮名は JY3/mcX/bx/kana で」という指定は -% JY3/gtX/m/n に対しても有効になってしまう. - -% 意図したとおりに動作させるためには,(C) のように適当なゴミをくっつけて, -% 「見た目は全く同じだが,フォント番号は異なる」状況にしないといけない. -%%% なんとか解決できないだろうか? - {\Large\gt 漢字をゴシック体,仮名を明朝を使って {\kanjiseries{an}\selectfont このように文章を組む} @@ -113,7 +100,7 @@ } \paragraph{fwid feature} -\DeclareFontShape{JY3}{gtX}{af}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;foo;+fwid}{} +\DeclareFontShape{JY3}{gtX}{af}{n}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;+fwid}{} % fwid weature 使用 {\kanjifamily{gtX}\kanjiseries{af}\selectfont @@ -135,7 +122,7 @@ fwid featureノタメ通常デハ半角カナハ全角化サレル \DeclareKanjiFamily{JY3}{edm}{} \DeclareFontShape{JY3}{edm}{m}{n}{<-> s*[0.962216] - KozMinPr6N-Regular:jfm=ujis;foo}{} % foo をつけている理由は JY3/gtX/an/n と一緒 + KozMinPr6N-Regular:jfm=ujis}{} \DeclareFontShape{JY3}{edm}{m}{blue}{<-> s*[0.962216] KozGoPr6N-Medium:jfm=ujis;color=0000FF}{} \DeclareFontShape{JY3}{edm}{m}{green}{<-> s*[0.962216] -- 2.11.0