X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fltj-otf.lua;h=090485497962996afed19e3c565913a3fe84ba5d;hb=a693b63eadfcabe5f4f513a4cc90302f2360b18b;hp=726a58a069230420ef2f6059626c1e4bfb42b5a5;hpb=72ac1fbce6745896b98e48ead84394aaabfe68e8;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-otf.lua b/src/ltj-otf.lua index 726a58a..0904854 100644 --- a/src/ltj-otf.lua +++ b/src/ltj-otf.lua @@ -28,7 +28,7 @@ local to_node = (Dnode ~= node) and Dnode.tonode or nullfunc local to_direct = (Dnode ~= node) and Dnode.todirect or nullfunc local node_new = Dnode.new -local node_remove = Dnode.remove +local node_remove = luatexja.Dnode_remove -- Dnode.remove local node_next = Dnode.getnext local node_free = Dnode.free local has_attr = Dnode.has_attribute @@ -36,6 +36,7 @@ local set_attr = Dnode.set_attribute local unset_attr = Dnode.unset_attribute local node_insert_after = Dnode.insert_after local node_write = Dnode.write +local node_traverse_id = Dnode.traverse_id local identifiers = fonts.hashes.identifiers @@ -296,7 +297,7 @@ do local function do_ivs_repr(head) head = to_direct(head) - local p = head + local p, r = head while p do local pid = getid(p) if pid==id_glyph then @@ -309,18 +310,25 @@ do if qc>=0xE0100 then qc = qc - 0xE0100 end local pt = font_ivs_table[pf] pt = pt and pt[getchar(p)]; pt = pt and pt[qc] - head = node_remove(head,q) + head, r = node_remove(head,q) + node_free(q) if pt then local np = ivs_jglyph(pt, p, pf, (has_attr(p,attr_curjfnt) or 0)==pf and OTF or VSR) head = node_insert_after(head, p, np) head = node_remove(head,p) - p = np + node_free(p) end + p = r + else + p = q end + else + p = node_next(p) end + else + p = node_next(p) end - p = node_next(p) end return to_node(head) end