summaryrefslogtreecommitdiff
path: root/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/generic/luatexja/src/ltj-lineskip.lua')
-rw-r--r--macros/luatex/generic/luatexja/src/ltj-lineskip.lua115
1 files changed, 55 insertions, 60 deletions
diff --git a/macros/luatex/generic/luatexja/src/ltj-lineskip.lua b/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
index f5c439e559..1fc6f7b2d3 100644
--- a/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
+++ b/macros/luatex/generic/luatexja/src/ltj-lineskip.lua
@@ -1,15 +1,15 @@
--
-- ltj-lineskip.lua
--
-luatexja.load_module('base'); local ltjb = luatexja.base
-luatexja.load_module('direction'); local ltjd = luatexja.direction
+luatexja.load_module 'base'; local ltjb = luatexja.base
+luatexja.load_module 'direction'; local ltjd = luatexja.direction
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 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
local getlist = node.direct.getlist
@@ -46,71 +46,66 @@ function ltjl.setting(profiler, skip_method)
end
do
- local traverse_id = node.direct.traverse_id
- local function adjust_glue(nh)
- local h = to_direct(nh)
- local bw = tex.baselineskip.width
- for x in traverse_id(id_glue, h) do
- local xs = getsubtype(x)
- if (xs==1) or (xs==2) then
- local p, n = node_prev(x), node_next(x)
- if p then
- local pid = getid(p)
- 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)
- ltj_skip(lmin or normal, x, adj, normal, bw)
- end
+local traverse_id = node.direct.traverse_id
+local function adjust_glue(nh)
+ local h = to_direct(nh)
+ local bw = tex.baselineskip.width
+ for x in traverse_id(id_glue, h) do
+ local xs = getsubtype(x)
+ if (xs==1) or (xs==2) then
+ local p, n = node_prev(x), node_next(x)
+ if p then
+ local pid = getid(p)
+ 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)
+ ltj_skip(lmin or normal, x, adj, normal, bw)
end
end
- end
- return true
+ end
end
- ltjb.add_to_callback('post_linebreak_filter',
- adjust_glue, 'ltj.lineskip', 10000)
+ return true
+end
+ltjb.add_to_callback('post_linebreak_filter', adjust_glue, 'ltj.lineskip', 10000)
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
+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
- local function dir_adjust_append_vlist(b, loc, prev, mirrored)
- local old_b = to_direct(b)
- local new_b = loc=='box' and
- make_dir_whatsit(old_b, old_b, get_dir_count(), 'append_vlist') or old_b
- if prev > -65536000 then
- local bw = tex.baselineskip.width
- local normal = bw - prev
- - getfield(new_b, mirrored and 'depth' or 'height')
- local lmin, adj = nil, 0
- local tail = to_direct(tex.nest[tex.nest.ptr].tail)
- if p_dummy~=ltj_profiler then
- while tail and (id_glue<=getid(tail)) and (getid(tail)<=id_penalty) do
- tail = node_prev(tail)
+local function dir_adjust_append_vlist(b, loc, prev, mirrored)
+ local old_b = to_direct(b)
+ local new_b = loc=='box' and
+ make_dir_whatsit(old_b, old_b, get_dir_count(), 'append_vlist') or old_b
+ if prev > -65536000 then
+ local bw = tex.baselineskip.width
+ local normal = bw - prev - getfield(new_b, mirrored and 'depth' or 'height')
+ local lmin, adj = nil, 0
+ local tail = to_direct(tex.nest[tex.nest.ptr].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
+ if getfield(tail, 'depth')==prev then
+ lmin, adj = ltj_profiler(tail, new_b, mirrored, bw)
end
end
- if tail then
- if getid(tail)==id_hlist and getid(new_b)==id_hlist then
- if getfield(tail, 'depth')==prev then
- lmin, adj = ltj_profiler(tail, new_b, mirrored, bw)
- end
- end
- end
- local g = node_new(id_glue)
- ltj_skip(lmin or normal, g, adj, normal, bw, loc)
- node_write(g)
end
- node_write(new_b)
- tex.prevdepth = getfield(new_b, mirrored and 'height' or 'depth')
- return nil -- do nothing on tex side
+ local g = node_new(id_glue)
+ ltj_skip(lmin or normal, g, adj, normal, bw, loc); node_write(g)
end
- ltjb.add_to_callback('append_to_vlist_filter',
- dir_adjust_append_vlist,
- 'ltj.lineskip', 10000)
+ node_write(new_b)
+ tex.prevdepth = getfield(new_b, mirrored and 'height' or 'depth')
+ return nil -- do nothing on tex side
+end
+ltjb.add_to_callback('append_to_vlist_filter', dir_adjust_append_vlist, 'ltj.lineskip', 10000)
end