OSDN Git Service

Fix a bug introduced by c1f148d3.
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Mon, 3 Feb 2014 01:51:52 +0000 (10:51 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Mon, 3 Feb 2014 01:51:52 +0000 (10:51 +0900)
src/ltj-adjust.lua
src/ltj-jfmglue.lua

index 5c0a781..6621856 100644 (file)
@@ -172,8 +172,8 @@ end
 local function aw_step1(p, res, total)
    local head = getlist(p)
    local x = node_tail(head); if not x then return false end
+   -- x: \rightskip
    x = node_prev(x); if not x then return false end
-   -- 本当の行末の node を格納
    if getid(x) == id_glue and getsubtype(x) == 15 then 
       -- 段落最終行のときは,\penalty10000 \parfillskip が入るので,
       -- その前の node が本来の末尾文字となる
@@ -196,8 +196,8 @@ local function aw_step1(p, res, total)
      return false-- それ以外は対象外.
    end
    local xk = ltjf_font_metric_table[getfont(xc)]
-     xk = xk.char_type[has_attr(xc, attr_jchar_class) or 0]
-     xk = xk['end_' .. res.name] or 0
+   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
       total = total - xk
index bd308a5..3678027 100644 (file)
@@ -279,11 +279,11 @@ local function check_next_ickern(lp)
    end
 end
 
-local function calc_np_pbox(lp)
+local function calc_np_pbox(lp, last)
    Np.first = Np.first or lp; Np.id = id_pbox
    local lpa, nc = KINSOKU, nil
    set_attr(lp, attr_icflag, get_attr_icflag(lp));
-   while lp and (lpa>=PACKED) and (lpa<BOXBDD) do
+   while lp ~=last and (lpa>=PACKED) and (lpa<BOXBDD) do
       nc, lp = lp, node_next(lp); lpa = lp and has_attr(lp, attr_icflag) or 0
      -- get_attr_icflag() ではいけない!
    end
@@ -384,7 +384,7 @@ calc_np_auxtable[id_adjust] = calc_np_auxtable.skip
 calc_np_auxtable[id_disc]   = calc_np_auxtable.discglue
 calc_np_auxtable[id_glue]   = calc_np_auxtable.discglue
 
-function calc_np(lp)
+function calc_np(lp, last)
    local k
    -- We assume lp = node_next(Np.last)
    Np, Nq, ihb_flag = Nq, Np, nil
@@ -396,14 +396,14 @@ function calc_np(lp)
    for k in pairs(Np) do Np[k] = nil end
 
    for k = 1,#Bp do Bp[k] = nil end
-   while lp  do
+   while lp ~= last  do
       local lpa = has_attr(lp, attr_icflag) or 0
        -- unbox 由来ノードの検出
       if lpa>=PACKED then
          if lpa%PROCESSED_BEGIN_FLAG == BOXBDD then
            local lq = node_next(lp) 
             head = node_remove(head, lp); node_free(lp); lp = lq
-         else return calc_np_pbox(lp)
+         else return calc_np_pbox(lp, last)
          end -- id_pbox
       else
         k, lp = calc_np_auxtable[getid(lp)](lp)
@@ -942,9 +942,9 @@ do
                       or ((lpi==id_hlist) and (lps==3))) do
            if (lpi==id_hlist) and (lps==3) then par_indented = 'parbdd' end
            lp=node_next(lp); lpi, lps = getid(lp), getsubtype(lp) end
-        return lp, par_indented
+        return lp, node_tail(head), par_indented
       else 
-        return head, 'boxbdd'
+        return head, nil, 'boxbdd'
       end
    end
 end
@@ -974,14 +974,14 @@ end
 function main(ahead, mode)
    if not ahead then return ahead end
    head = ahead;
-   local lp, par_indented = init_var(mode)
+   local lp, last, par_indented = init_var(mode)
    lp = calc_np(lp, last)
    if Np then 
       extract_np(); handle_list_head(par_indented)
    else
-      return cleanup(mode, last)
+      return cleanup(mode)
    end
-   lp = calc_np(lp)
+   lp = calc_np(lp, last)
    while Np do
       extract_np();
       adjust_nq(); 
@@ -996,7 +996,7 @@ function main(ahead, mode)
          if Nq.id==id_hlist then handle_nq_ja_hlist()
          else handle_nq_jachar() end
       end
-      lp = calc_np(lp)
+      lp = calc_np(lp, last)
    end
    handle_list_tail(mode)
    return cleanup(mode)