OSDN Git Service

lltjp-fontspec: adapt fontspec 2.7e, and removed codes for <2.7c
[luatex-ja/luatexja.git] / src / ltj-lineskip.lua
index 1e24518..f5c439e 100644 (file)
@@ -8,6 +8,7 @@ luatexja.lineskip = luatexja.lineskip or {}
 local to_direct = node.direct.todirect
 local ltjl = luatexja.lineskip
 local id_glue = node.id('glue')
+local id_penalty = node.id('penalty')
 local id_hlist = node.id('hlist')
 local setfield = node.direct.setfield
 local getfield = node.direct.getfield
@@ -30,7 +31,7 @@ ltjl.copy_glue = copy_glue
 function ltjl.p_dummy(before, after)
    return nil, 0
 end
-function ltjl.l_dummy(dist, g, adj, normal, bw)
+function ltjl.l_dummy(dist, g, adj, normal, bw, loc)
    if dist < tex.lineskiplimit then
       copy_glue(g, tex.lineskip, 1, tex.lineskip.width + adj)
    else
@@ -55,7 +56,9 @@ do
            local p, n = node_prev(x), node_next(x)
            if p then
               local pid = getid(p)
-             while (12<=pid) and (pid<=14) and node_prev(p) do p = node_prev(p); pid = getid(p) end
+             while (id_glue<=pid) and (pid<=id_penalty) and node_prev(p) do 
+               p = node_prev(p); pid = getid(p)
+             end
              if pid==id_hlist and getid(n)==id_hlist then
                 local normal = bw - getfield(p, 'depth') - getfield(n, 'height')
                 local lmin, adj = ltj_profiler(p, n, false, bw)
@@ -71,6 +74,7 @@ do
 end
 
 do
+   local p_dummy = ltjl.p_dummy
    local make_dir_whatsit = luatexja.direction.make_dir_whatsit
    local get_dir_count = luatexja.direction.get_dir_count
    local node_write = node.direct.write
@@ -85,8 +89,10 @@ do
            - getfield(new_b, mirrored and 'depth' or 'height')
          local lmin, adj = nil, 0
          local tail = to_direct(tex.nest[tex.nest.ptr].tail)
-         if tail and getid(tail)==id_glue and getsubtype(tail)==3 then
-            tail = node_prev(tail)
+         if p_dummy~=ltj_profiler then
+            while tail and (id_glue<=getid(tail)) and (getid(tail)<=id_penalty) do
+               tail = node_prev(tail)
+            end
          end
         if tail then
            if getid(tail)==id_hlist and getid(new_b)==id_hlist then
@@ -96,7 +102,7 @@ do
            end
         end
         local g = node_new(id_glue)
-         ltj_skip(lmin or normal, g, adj, normal, bw)
+         ltj_skip(lmin or normal, g, adj, normal, bw, loc)
         node_write(g)
       end
       node_write(new_b)