--- error messages
-function ltj.error(s)
- tex.error("LuaTeX-ja error: " .. s );
-end
-
--- procedures for loading Japanese font metric
-jfm={}; jfm.char_type={}; jfm.glue={}; jfm.kern={}
-
-function jfm.define_char_type(t,lt)
- if not jfm.char_type[t] then jfm.char_type[t]={} end
- jfm.char_type[t].chars=lt
-end
-function jfm.define_type_dim(t,l,w,h,d,i)
- if not jfm.char_type[t] then jfm.char_type[t]={} end
- jfm.char_type[t].width=w; jfm.char_type[t].height=h;
- jfm.char_type[t].depth=d; jfm.char_type[t].italic=i; jfm.char_type[t].left=l
-end
-function jfm.define_glue(b,a,w,st,sh)
- local j=b*0x800+a
- if not jfm.glue[j] then jfm.glue[j]={} end
- jfm.glue[j].width=w; jfm.glue[j].stretch=st;
- jfm.glue[j].shrink=sh
-end
-function jfm.define_kern(b,a,w)
- local j=b*0x800+a
- if not jfm.kern[j] then jfm.kern[j]=w end
-end
-
--- procedures for \loadjfontmetric
-ltj.metrics={} -- this table stores all metric information
+require('lualibs')
+require('luatexja.rmlgbm'); local ltjr = luatexja.rmlgbm -- must be 1st
+require('luatexja.base'); local ltjb = luatexja.base
+require('luatexja.charrange'); local ltjc = luatexja.charrange
+require('luatexja.jfont'); local ltjf = luatexja.jfont
+require('luatexja.inputbuf'); local ltji = luatexja.inputbuf
+require('luatexja.jfmglue'); local ltjj = luatexja.jfmglue
+require('luatexja.math'); local ltjm = luatexja.math
+require('luatexja.pretreat'); local ltjp = luatexja.pretreat
+require('luatexja.stack'); local ltjs = luatexja.stack
+require('luatexja.setwidth'); local ltjw = luatexja.setwidth
+
+local node_type = node.type
+local node_new = node.new
+local node_prev = node.prev
+local node_next = node.next
+local has_attr = node.has_attribute
+local node_insert_before = node.insert_before
+local node_insert_after = node.insert_after
+local node_hpack = node.hpack
+
+local id_penalty = node.id('penalty')
+local id_glyph = node.id('glyph')
+local id_glue_spec = node.id('glue_spec')
+local id_glue = node.id('glue')
+local id_kern = node.id('kern')
+local id_hlist = node.id('hlist')
+local id_vlist = node.id('vlist')
+local id_rule = node.id('rule')
+local id_math = node.id('math')
+local id_whatsit = node.id('whatsit')
+local sid_user = node.subtype('user_defined')
+
+local attr_jchar_class = luatexbase.attributes['ltj@charclass']
+local attr_curjfnt = luatexbase.attributes['ltj@curjfnt']
+local attr_yablshift = luatexbase.attributes['ltj@yablshift']
+local attr_icflag = luatexbase.attributes['ltj@icflag']
+local cat_lp = luatexbase.catcodetables['latex-package']
+
+local ITALIC = 1
+local PACKED = 2
+local KINSOKU = 3
+local FROM_JFM = 4
+local LINE_END = 5
+local KANJI_SKIP = 6
+local XKANJI_SKIP = 7
+local PROCESSED = 8
+local IC_PROCESSED = 9
+local BOXBDD = 15
+
+------------------------------------------------------------------------
+-- naming:
+-- ltj.ext_... : called from \directlua{}
+-- ltj.int_... : called from other Lua codes, but not from \directlua{}
+-- (other) : only called from this file