summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua')
-rw-r--r--Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua71
1 files changed, 52 insertions, 19 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua b/Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua
index 93e92ab5dec..531a5c75433 100644
--- a/Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua
+++ b/Master/texmf-dist/tex/luatex/luatexja/ltj-jfmglue.lua
@@ -207,6 +207,7 @@ local function check_box(box_ptr, box_end)
if getfield(p, 'shift')==0 then
last_char = nil
if check_box(getlist(p), nil) then found_visible_node = true end
+ find_first_char = false
else
find_first_char = false; last_char = nil
end
@@ -832,7 +833,9 @@ do
end
get_kanjiskip = function()
- if Np.auto_kspc or Nq.auto_kspc then
+ if Np.auto_kspc==0 or Nq.auto_kspc==0 then
+ return nil
+ elseif Np.auto_kspc or Nq.auto_kspc then
local pm, qm = Np.met, Nq.met
if (pm.char_type==qm.char_type) and (qm.var==pm.var) then
return get_kanjiskip_low(true, qm, 1, 1, 1)
@@ -841,7 +844,7 @@ do
local ga = get_kanjiskip_low(true, pm, 1, 1, 1)
return calc_ja_ja_aux(gb, ga, 0, 1)
end
- else
+ else
local g = node_new(id_glue)
set_attr(g, attr_icflag, kanjiskip_jfm_flag and KANJI_SKIP_JFM or KANJI_SKIP)
return g
@@ -912,7 +915,9 @@ do
end
get_xkanjiskip = function(Nn)
- if (Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc) then
+ if Np.auto_xspc==0 or Nq.auto_xspc==0 then
+ return nil
+ elseif (Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc) then
return get_xkanjiskip_low(true, Nn.met, 1, 1, 1)
else
local g = node_new(id_glue)
@@ -924,18 +929,44 @@ end
-------------------- 隣接した「塊」間の処理
+local function combine_spc(name)
+ return (Np[name] or Nq[name]) and ((Np[name]~=0) and (Nq[name]~=0))
+end
+
+-- NA, NB: alchar or math
+local function get_NA_skip()
+ local pm = Np.met
+ local g, _, kn, kp, kh = new_jfm_glue(
+ pm.char_type,
+ fast_find_char_class(
+ (Nq.id == id_math and -1 or (Nq.xspc>=2 and 'alchar' or 'nox_alchar')), pm),
+ Np.class)
+ local k = ((Nq.xspc>=2) and (Np.xspc%2==1) and combine_spc('auto_xspc'))
+ and get_xkanjiskip_low(false, pm, kn, kp, kh)
+ return g, k
+end
+local function get_NB_skip()
+ local qm = Nq.met
+ local g, _, kn, kp, kh = new_jfm_glue(
+ qm.char_type, Nq.class,
+ fast_find_char_class(
+ (Np.id == id_math and -1 or (Np.xspc%2==1 and 'alchar' or 'nox_alchar')), qm)
+ )
+ local k = ((Nq.xspc>=2) and (Np.xspc%2==1) and combine_spc('auto_xspc'))
+ and get_xkanjiskip_low(false, qm, kn, kp, kh)
+ return g, k
+end
+
local function get_OA_skip(is_kanji)
local pm = Np.met
local g, _, kn, kp, kh = new_jfm_glue(
pm.char_type,
- fast_find_char_class((Nq.id == id_math and -1 or 'jcharbdd'), pm),
+ fast_find_char_class(
+ (((Nq.id==id_glue)or(Nq.id==id_kern)) and 'glue' or 'jcharbdd'), pm),
Np.class)
local k
if is_kanji==0 then
- k = (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(false, pm, kn, kp, kh)
- elseif is_kanji==1 then
- k = ((Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc))
- and get_xkanjiskip_low(false, pm, kn, kp, kh)
+ k = combine_spc('auto_kspc') and get_kanjiskip_low(false, pm, kn, kp, kh)
end
return g, k
end
@@ -943,13 +974,11 @@ local function get_OB_skip(is_kanji)
local qm = Nq.met
local g, _, kn, kp, kh = new_jfm_glue(
qm.char_type, Nq.class,
- fast_find_char_class((Np.id == id_math and -1 or'jcharbdd'), qm))
+ fast_find_char_class(
+ (((Np.id==id_glue)or(Np.id==id_kern)) and 'glue' or 'jcharbdd'), qm))
local k
if is_kanji==0 then
- k = (Np.auto_kspc or Nq.auto_kspc) and get_kanjiskip_low(false, qm, kn, kp, kh)
- elseif is_kanji==1 then
- k = ((Nq.xspc>=2) and (Np.xspc%2==1) and (Nq.auto_xspc or Np.auto_xspc))
- and get_xkanjiskip_low(false, qm, kn, kp, kh)
+ k = combine_spc('auto_kspc') and get_kanjiskip_low(false, qm, kn, kp, kh)
end
return g, k
end
@@ -970,7 +999,7 @@ local function handle_np_jachar(mode)
handle_penalty_normal(0, Np.pre, g); real_insert(g); real_insert(k)
elseif Nq.pre then
local g, k
- if non_ihb_flag then g, k = get_OA_skip(1) end -- O_A->X
+ if non_ihb_flag then g, k = get_NA_skip() end -- N_A->X
if not g then g = get_xkanjiskip(Np) end
handle_penalty_normal((qid==id_hlist and 0 or Nq.post), Np.pre, g);
real_insert(g); real_insert(k)
@@ -991,7 +1020,7 @@ end
-- jachar .. (anything)
local function handle_nq_jachar()
if Np.pre then
- local g = non_ihb_flag and get_OB_skip(1) or get_xkanjiskip(Nq) -- O_B->X
+ local g = non_ihb_flag and get_NB_skip() or get_xkanjiskip(Nq) -- N_B->X
handle_penalty_normal(Nq.post, (Np.id==id_hlist and 0 or Np.pre), g); real_insert(g)
else
local g =non_ihb_flag and (get_OB_skip()) -- O_B
@@ -1180,6 +1209,8 @@ end
-- main interface
function main(ahead, mode, dir)
if not ahead then return ahead end
+ --luatexja.ext_show_node_list(to_node(ahead ), '>B ', print)
+ --print()
head = ahead;
local lp, last, par_indented, TEMP = init_var(mode,dir)
lp = calc_np(last, lp)
@@ -1203,6 +1234,8 @@ function main(ahead, mode, dir)
end
handle_list_tail(mode, last)
end
+ --luatexja.ext_show_node_list(to_node(ahead ), '>A ', print)
+ --print()
return cleanup(mode, TEMP)
end
end
@@ -1251,10 +1284,10 @@ do
Np.first = lp; Np.nuc = lp; Np.last = lp
if Nq then
if Nq.met then
- Np.class = fast_find_char_class('parbdd', Nq.met)
+ Np.class = fast_find_char_class('boxbdd', Nq.met)
end
Np.met = Nq.met; Np.pre = 0; Np.post = 0; Np.xspc = 0
- Np.auto_xspc = false
+ Np.auto_xspc, Np.auto_kspc = 0, 0
end
return Np
else
@@ -1271,7 +1304,7 @@ do
Nq.class = fast_find_char_class('parbdd', Np.met)
end
Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0
- Nq.auto_xspc = false
+ Nq.auto_xspc, Nq.auto_kspc = 0, 0
end
head = node_remove(head, y)
node_free(y)
@@ -1283,7 +1316,7 @@ do
Nq.class = fast_find_char_class('boxbdd', Np.met)
end
Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0
- Nq.auto_xspc = false
+ Nq.auto_xspc, Nq.auto_kspc = 0, 0
end
head = node_remove(head, y)
node_free(y)