X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=src%2Fltj-jfmglue.lua;h=3678027dafc2d5685ae08772f3dcea5cd63e1a93;hb=daae3379fec7441da40a452829c58ea973709317;hp=8946027d9eb9fdc90f5b2a681d1a48226e451155;hpb=a693b63eadfcabe5f4f513a4cc90302f2360b18b;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-jfmglue.lua b/src/ltj-jfmglue.lua index 8946027..3678027 100644 --- a/src/ltj-jfmglue.lua +++ b/src/ltj-jfmglue.lua @@ -3,7 +3,7 @@ -- luatexbase.provides_module({ name = 'luatexja.jfmglue', - date = '2014/02/01', + date = '2014/02/02', description = 'Insertion process of JFM glues and kanjiskip', }) module('luatexja.jfmglue', package.seeall) @@ -31,7 +31,7 @@ local has_attr = Dnode.has_attribute local set_attr = Dnode.set_attribute local insert_before = Dnode.insert_before local insert_after = Dnode.insert_after -local node_next = Dnode.getnext +local node_next = (Dnode ~= node) and Dnode.getnext or node.next local round = tex.round local ltjf_font_metric_table = ltjf.font_metric_table local ltjf_find_char_class = ltjf.find_char_class @@ -271,7 +271,7 @@ local function set_attr_icflag_processed(p) end local function check_next_ickern(lp) - if getid(lp) == id_kern and ITALIC == get_attr_icflag(lp) then + if lp and getid(lp) == id_kern and ITALIC == get_attr_icflag(lp) then set_attr(lp, attr_icflag, IC_PROCESSED) Np.last = lp; return node_next(lp) else @@ -279,12 +279,12 @@ 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=PACKED) and (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) @@ -1006,7 +1006,7 @@ end do local IHB = luatexja.userid_table.IHB local BPAR = luatexja.userid_table.BPAR - local node_prev = Dnode.getprev + local node_prev = (Dnode ~= node) and Dnode.getprev or node.prev local node_write = Dnode.write -- \inhibitglue