+--- 以下は全ファイルで共有される定数
+local icflag_table = {}
+luatexja.icflag_table = icflag_table
+icflag_table.ITALIC = 1
+icflag_table.PACKED = 2
+icflag_table.KINSOKU = 3
+icflag_table.FROM_JFM = 6
+-- FROM_JFM: 4, 5, 6, 7, 8 →優先度高(伸びやすく,縮みやすい)
+-- 6 が標準
+icflag_table.KANJI_SKIP = 9
+icflag_table.KANJI_SKIP_JFM = 10
+icflag_table.XKANJI_SKIP = 11
+icflag_table.XKANJI_SKIP_JFM = 12
+icflag_table.PROCESSED = 13
+icflag_table.IC_PROCESSED = 14
+icflag_table.BOXBDD = 15
+icflag_table.PROCESSED_BEGIN_FLAG = 128
+
+local stack_table_index = {}
+luatexja.stack_table_index = stack_table_index
+stack_table_index.PRE = 0x200000 -- characterごと
+stack_table_index.POST = 0x400000 -- characterごと
+stack_table_index.KCAT = 0x600000 -- characterごと
+stack_table_index.XSP = 0x800000 -- characterごと
+stack_table_index.JWP = 0 -- これだけ
+stack_table_index.KSK = 1 -- これだけ
+stack_table_index.XSK = 2 -- これだけ
+stack_table_index.MJT = 0x100 -- 0--255
+stack_table_index.MJS = 0x200 -- 0--255
+stack_table_index.MJSS = 0x300 -- 0--255
+stack_table_index.KSJ = 0x400 -- 0--9
+
+local userid_table = {}
+luatexja.userid_table = userid_table
+userid_table.IHB = luatexbase.newuserwhatsitid('inhibitglue', 'luatexja') -- \inhibitglue
+userid_table.STCK = luatexbase.newuserwhatsitid('stack_marker', 'luatexja') -- スタック管理
+userid_table.BPAR = luatexbase.newuserwhatsitid('begin_par', 'luatexja') -- 「段落始め」
+
+do
+ local node_remove, node_next, node_prev = node.remove, node.next, node.prev
+ function luatexja.node_remove (head, current)
+ if head==current then
+ local q, r = node_next(current), node_prev(current)
+ current.next = nil
+ if q then q.prev = r end
+ if r and node_next(r)==current then
+ -- r is "real prev"
+ r.next = q
+ end
+ return q, node_next(q)
+ else
+ return node_remove(head, current)
+ end
+ end
+
+ local Dnode = node.direct or node
+ local Dnode_remove, Dnode_next, Dnode_prev = Dnode.remove, Dnode.getnext, Dnode.getprev
+ local getfield = (Dnode ~= node) and Dnode.getfield or function(n, i) return n[i] end
+ local setfield = (Dnode ~= node) and Dnode.setfield or function(n, i, c) n[i] = c end
+ function luatexja.Dnode_remove (head, current)
+ if head==current then
+ local q, r = Dnode_next(current), Dnode_prev(current)
+ setfield(current, 'next', nil)
+ if q then setfield(q, 'prev', r) end
+ if r and Dnode_next(r) == current then
+ -- r is "real prev"
+ setfield(r, 'next', q)
+ end
+ return q, Dnode_next(q)
+ else
+ return Dnode_remove(head, current)
+ end
+ end
+
+end
+
+--- 定義終わり
+