OSDN Git Service

Fixed a bug in ltj-adjust.lua (when using kanjiskip from JFM).
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sat, 17 Nov 2012 05:47:35 +0000 (14:47 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sat, 17 Nov 2012 05:47:35 +0000 (14:47 +0900)
src/ltj-adjust.lua
src/ltj-jfmglue.lua
src/ltj-jfont.lua
src/luatexja.lua
src/luatexja.sty

index 1773439..db92b2a 100644 (file)
@@ -29,10 +29,10 @@ local node_free = node.free
 local ltjf_font_metric_table = ltjf.font_metric_table
 local spec_zero_glue = ltjj.spec_zero_glue
 
-local PACKED = 2
-local FROM_JFM = 6
-local KANJI_SKIP = 9
-local XKANJI_SKIP = 10
+local PACKED       = luatexja.icflag_table.PACKED
+local FROM_JFM     = luatexja.icflag_table.FROM_JFM
+local KANJI_SKIP   = luatexja.icflag_table.KANJI_SKIP
+local XKANJI_SKIP  = luatexja.icflag_table.XKANJI_SKIP
 
 local priority_table = {
    FROM_JFM + 2,
@@ -61,7 +61,7 @@ local function get_stretched(q, go, gs)
    end
 end
 
-local new_ks, new_xs
+-- local new_ks, new_xs
 local function get_total_stretched(p)
    local go, gf, gs = p.glue_order, p.glue_set, p.glue_sign
    local res = {
@@ -79,29 +79,14 @@ local function get_total_stretched(p)
          local a, ic = get_stretched(q, go, gs), get_attr_icflag(q)
          if   type(res[ic]) == 'number' then 
             -- kanjiskip, xkanjiskip は段落内で spec を共有しているが,
-            -- それはここでは望ましくないので,
-            -- 各行ごとに異なる spec を使うようにする.
-            -- しかしここでは面倒なので,各 glue ごとに別の spec を使っている.
-            -- ぜひなんとかしたい!
+            -- それはここでは望ましくないので,各 glue ごとに異なる spec を使う.
             -- JFM グルーはそれぞれ異なる glue_spec を用いているので,問題ない.
             res[ic] = res[ic] + a
-            if ic == KANJI_SKIP then
+            if ic == KANJI_SKIP or ic == XKANJI_SKIP  then
                if q.spec ~= spec_zero_glue then
-                  if not new_ks then
-                     local ts; q.spec, ts = node_copy(q.spec), q.spec
-                     new_ks, q.spec = node.copy(q), ts
-                  end
-                  local g = node.copy(new_ks)
-                  node.insert_before(head, q, g);
-                  head = node.remove(head, q); node.free(q); q = g
-               end
-            elseif ic == XKANJI_SKIP then
-               if q.spec ~= spec_zero_glue then
-                  if not new_xs then
-                     local ts; q.spec, ts = node_copy(q.spec), q.spec
-                     new_xs, q.spec = node.copy(q), ts
-                  end
-                  local g =node.copy(new_xs)
+                  local ts, g; 
+                  q.spec, ts = node_copy(q.spec), q.spec
+                  g = node.copy(q); q.spec = ts
                   node.insert_before(head, q, g);
                   head = node.remove(head, q); node.free(q); q = g
                end
@@ -242,8 +227,6 @@ function adjust_width(head)
          local added_flag = aw_step1(p, res, total)
          --print(total, res[0], res[KANJI_SKIP], res[FROM_JFM])
          aw_step2(p, res, total, added_flag)
-         if new_ks then node_free(new_ks); new_ks = nil end
-         if new_xs then node_free(new_xs); new_xs = nil end
       end
    end
    return head
index 7c5dfbb..4964717 100644 (file)
@@ -54,20 +54,16 @@ local sid_start_thread = node.subtype('pdf_start_thread')
 local sid_end_link = node.subtype('pdf_end_link')
 local sid_end_thread = node.subtype('pdf_end_thread')
 
-local ITALIC = 1
--- 実装予定: non-packed jchar 2
-local PACKED = 2
-local KINSOKU = 3
-local FROM_JFM = 6
--- FROM_JFM: 4, 5, 6, 7, 8 →優先度高
--- 6 が標準
-local KANJI_SKIP = 9
-local XKANJI_SKIP = 10
-local PROCESSED = 11
-local IC_PROCESSED = 12
-local BOXBDD = 15
-local PROCESSED_BEGIN_FLAG = 32
-
+local ITALIC       = luatexja.icflag_table.ITALIC
+local PACKED       = luatexja.icflag_table.PACKED
+local KINSOKU      = luatexja.icflag_table.KINSOKU
+local FROM_JFM     = luatexja.icflag_table.FROM_JFM
+local KANJI_SKIP   = luatexja.icflag_table.KANJI_SKIP
+local XKANJI_SKIP  = luatexja.icflag_table.XKANJI_SKIP
+local PROCESSED    = luatexja.icflag_table.PROCESSED
+local IC_PROCESSED = luatexja.icflag_table.IC_PROCESSED
+local BOXBDD       = luatexja.icflag_table.BOXBDD
+local PROCESSED_BEGIN_FLAG = luatexja.icflag_table.PROCESSED_BEGIN_FLAG
 local kanji_skip
 local xkanji_skip
 
index 3acba6d..c360a6e 100644 (file)
@@ -24,8 +24,9 @@ local id_kern = node.id('kern')
 local id_glue_spec = node.id('glue_spec')
 local id_glue = node.id('glue')
 local cat_lp = luatexbase.catcodetables['latex-package']
-local ITALIC = 1
-local FROM_JFM = 6
+local ITALIC       = luatexja.icflag_table.ITALIC
+local FROM_JFM     = luatexja.icflag_table.FROM_JFM
+
 ------------------------------------------------------------------------
 -- LOADING JFM
 ------------------------------------------------------------------------
index 2f83b48..adf741f 100644 (file)
@@ -34,6 +34,22 @@ function luatexja.load_lua(fn)
    end
 end
 
+local icflag_table = {}
+luatexja.icflag_table = icflag_table
+icflag_table.ITALIC       = 1
+icflag_table.PACKED       = 2
+icflag_table.KINSOKU      = 3
+icflag_table.FROM_JFM     = 6
+-- FROM_JFM: 4, 5, 6, 7, 8 →優先度高
+-- 6 が標準
+icflag_table.KANJI_SKIP   = 9
+icflag_table.XKANJI_SKIP  = 10
+icflag_table.PROCESSED    = 11
+icflag_table.IC_PROCESSED = 12
+icflag_table.BOXBDD       = 15
+icflag_table.PROCESSED_BEGIN_FLAG = 32
+
+
 local load_module = luatexja.load_module
 load_module('base');      local ltjb = luatexja.base
 load_module('rmlgbm');    local ltjr = luatexja.rmlgbm -- must be 1st
@@ -76,20 +92,6 @@ local attr_icflag = luatexbase.attributes['ltj@icflag']
 local attr_uniqid = luatexbase.attributes['ltj@uniqid']
 local cat_lp = luatexbase.catcodetables['latex-package']
 
-local ITALIC = 1
-local PACKED = 2
-local KINSOKU = 3
-local FROM_JFM = 6
--- FROM_JFM: 4, 5, 6, 7, 8 →優先度高
--- 6 が標準
-local KANJI_SKIP = 9
-local XKANJI_SKIP = 10
-local PROCESSED = 11
-local IC_PROCESSED = 12
-local BOXBDD = 15
-local PROCESSED_BEGIN_FLAG = 32
-
-
 -- Three aux. functions, bollowed from tex.web
 local unity=65536
 local function print_scaled(s)
@@ -278,7 +280,7 @@ local function debug_show_node_X(p,print_fn)
             for i = 2,  p.glue_order do s = s .. 'l' end
          end
       end
-      if get_attr_icflag(p) == PACKED then
+      if get_attr_icflag(p) == icflag_table.PACKED then
          s = s .. ' (packed)'
       end
       print_fn(s)
@@ -290,11 +292,12 @@ local function debug_show_node_X(p,print_fn)
       debug_depth=k
    elseif pt == 'glue' then
       s = base .. ' ' ..  print_spec(p.spec)
-      if get_attr_icflag(p)>KINSOKU and get_attr_icflag(p)<KANJI_SKIP then
-         s = s .. ' (from JFM: priority ' .. get_attr_icflag(p)-FROM_JFM .. ')'
-      elseif get_attr_icflag(p)==KANJI_SKIP then
+      if get_attr_icflag(p)>icflag_table.KINSOKU 
+         and get_attr_icflag(p)<icflag_table.KANJI_SKIP then
+         s = s .. ' (from JFM: priority ' .. get_attr_icflag(p)-icflag_table.FROM_JFM .. ')'
+      elseif get_attr_icflag(p)==icflag_table.KANJI_SKIP then
         s = s .. ' (kanjiskip)'
-      elseif get_attr_icflag(p)==XKANJI_SKIP then
+      elseif get_attr_icflag(p)==icflag_table.XKANJI_SKIP then
         s = s .. ' (xkanjiskip)'
       end
       print_fn(s)
@@ -302,17 +305,18 @@ local function debug_show_node_X(p,print_fn)
       s = base .. ' ' .. print_scaled(p.kern) .. 'pt'
       if p.subtype==2 then
         s = s .. ' (for accent)'
-      elseif get_attr_icflag(p)==IC_PROCESSED then
+      elseif get_attr_icflag(p)==icflag_table.IC_PROCESSED then
         s = s .. ' (italic correction)'
          -- elseif get_attr_icflag(p)==ITALIC then
          --    s = s .. ' (italic correction)'
-      elseif get_attr_icflag(p)>KINSOKU and get_attr_icflag(p)<KANJI_SKIP then
-        s = s .. ' (from JFM: priority ' .. get_attr_icflag(p)-FROM_JFM .. ')'
+      elseif get_attr_icflag(p)>icflag_table.KINSOKU 
+         and get_attr_icflag(p)<icflag_table.KANJI_SKIP then
+        s = s .. ' (from JFM: priority ' .. get_attr_icflag(p)-icflag_table.FROM_JFM .. ')'
       end
       print_fn(s)
    elseif pt == 'penalty' then
       s = base .. ' ' .. tostring(p.penalty)
-      if get_attr_icflag(p)==KINSOKU then
+      if get_attr_icflag(p)==icflag_table.KINSOKU then
         s = s .. ' (for kinsoku)'
       end
       print_fn(s)
index 46b7e87..c4224b4 100644 (file)
@@ -35,7 +35,7 @@
   \expandafter\let\csname ifltj@in@latex\expandafter\endcsname
     \csname iftrue\endcsname
   \NeedsTeXFormat{LaTeX2e}
-  \ProvidesPackage{luatexja}[2011/04/01 v0.1]
+  \ProvidesPackage{luatexja}[2012/04/20 v0.2]
 \fi                             %</LaTeX>
 
 \ifnum\catcode`漢=12