OSDN Git Service

lltjfont.sty, ltj-jfont.lua: different font number from different 4-tuple (enc, fam...
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 1 Jan 2014 12:28:49 +0000 (21:28 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 1 Jan 2014 12:28:49 +0000 (21:28 +0900)
src/ltj-adjust.lua
src/ltj-jfont.lua
src/patches/lltjfont.sty
test/test20-mfont.tex

index 4c418b3..c81930a 100644 (file)
@@ -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")
index cc89bbc..ed6da52 100644 (file)
@@ -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)
index 24bfa8b..91ad8a7 100644 (file)
     \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
index 264af53..b661faf 100644 (file)
 
 \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 このように文章を組む}
 }
 
 \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]