require('lualibs')
-tableunpack = table.unpack
------------------------------------------------------------------------
--- naming:
--- ext_... : called from \directlua{}
--- int_... : called from other Lua codes, but not from \directlua{}
--- (other) : only called from this file
-function luatexja.load_module(name)
- require('ltj-' .. name.. '.lua')
-end
-function luatexja.load_lua(fn)
+local function load_lua(fn)
local found = kpse.find_file(fn, 'tex')
if not found then
tex.error("LuaTeX-ja error: File `" .. fn .. "' not found")
dofile(found)
end
end
+luatexja.load_lua = load_lua
+function luatexja.load_module(name)
+ require('ltj-' .. name.. '.lua')
+end
do
local setfield = node.direct.setfield
userid_table.BPAR = luatexbase.newuserwhatsitid('begin_par', 'luatexja') -- 「段落始め」
userid_table.DIR = luatexbase.newuserwhatsitid('direction', 'luatexja') -- 組方向
userid_table.BOXB = luatexbase.newuserwhatsitid('box_boundary', 'luatexja') -- 「ボックス始め・終わり」
+userid_table.JA_AL_BDD = luatexbase.newuserwhatsitid('ja_al_boundary', 'luatexja')
local dir_table = {}
luatexja.dir_table = dir_table
if luatexja_debug then load_module('debug') end
+load_module('lotf_aux'); local ltju = luatexja.lotf_aux
load_module('charrange'); local ltjc = luatexja.charrange
load_module('stack'); local ltjs = luatexja.stack
load_module('direction'); local ltjd = luatexja.direction -- +1 hlist +1 attr_list
+load_module('lineskip'); local ltjl = luatexja.lineskip -- +1 hlist +1 attr_list
load_module('jfont'); local ltjf = luatexja.jfont
load_module('inputbuf'); local ltji = luatexja.inputbuf
load_module('pretreat'); local ltjp = luatexja.pretreat
load_module('setwidth'); local ltjw = luatexja.setwidth
load_module('jfmglue'); local ltjj = luatexja.jfmglue -- +1 glue +1 gs +1 attr_list
load_module('math'); local ltjm = luatexja.math
-load_module('tangle'); local ltjb = luatexja.base
+load_module('base'); local ltjb = luatexja.base
local attr_jchar_class = luatexbase.attributes['ltj@charclass']
}
local unary_pars = luatexja.unary_pars
- function luatexja.ext_get_parameter_unary(k)
+ local scan_arg = token.scan_argument
+ function luatexja.ext_get_parameter_unary()
+ local k= scan_arg()
if unary_pars[k] then
tex.write(tostring(unary_pars[k](tex.getcount('ltj@@stack'))))
end
end,
}
local binary_pars = luatexja.binary_pars
-
+ local scan_arg, scan_int = token.scan_argument, token.scan_int
binary_pars.alxspmode = binary_pars.jaxspmode
- function luatexja.ext_get_parameter_binary(k,c)
+ function luatexja.ext_get_parameter_binary(k, c)
if binary_pars[k] then
tex.write(tostring(binary_pars[k](c,tex.getcount('ltj@@stack'))))
end
end
local prefix, inner_depth
-
-local function debug_show_node_X(p,print_fn, limit)
+local utfchar = utf.char
+local function debug_show_node_X(p,print_fn, limit, inner_depth)
local k = prefix
local s
local pt=node_type(p.id)
local base = prefix .. string.format('%X', get_attr_icflag(p))
.. ' ' .. pt .. ' ' .. tostring(p.subtype) .. ' '
if pt == 'glyph' then
- s = base .. ' ' .. utf.char(p.char) .. ' '
- .. tostring(p.font)
- .. ' (' .. print_scaled(p.height) .. '+'
+ s = base .. ' ' ..
+ (p.char<0xF0000 and utfchar(p.char) or '')
+ .. string.format(' (U+%X) ', p.char)
+ .. tostring(p.font) .. ' (' .. print_scaled(p.height) .. '+'
.. print_scaled(p.depth) .. ')x' .. print_scaled(p.width)
if p.xoffset~=0 or p.yoffset~=0 then
s = s .. ' off: (' .. print_scaled(p.xoffset)
prefix, inner_depth = prefix.. '.', inner_depth + 1
if inner_depth < limit then
for q in node.traverse(p.head) do
- debug_show_node_X(q, print_fn, limit)
+ debug_show_node_X(q, print_fn, limit, inner_depth)
end
end
prefix=k
.. print_scaled(p.depth) .. ')x' .. print_scaled(p.width)
.. ', dir=' .. tostring(node.has_attribute(p, attr_dir))
print_fn(s)
+ elseif pt=='disc' then
+ print_fn(s)
+ local bid = inner_depth
+ if inner_depth < limit then
+ prefix, inner_depth = k.. 'p.', inner_depth + 1
+ for q in node.traverse(p.pre) do
+ debug_show_node_X(q, print_fn, limit, inner_depth)
+ end
+ prefix = k.. 'P.'
+ for q in node.traverse(p.post) do
+ debug_show_node_X(q, print_fn, limit, inner_depth)
+ end
+ prefix = k.. 'R.'
+ for q in node.traverse(p.replace) do
+ debug_show_node_X(q, print_fn, limit, inner_depth)
+ end
+ end
+ prefix=k
elseif pt == 'glue' then
s = base .. ' ' .. print_spec(p)
if get_attr_icflag(p)>icflag_table.KINSOKU
s = s .. ' (for kinsoku)'
end
print_fn(s)
+ elseif pt == 'dir' then
+ s = base .. ' ' .. tostring(p.dir) .. ' (level ' .. tostring(p.level) .. ')'
+ print_fn(s)
elseif pt == 'whatsit' then
s = base
if p.subtype==sid_user then
prefix, inner_depth =prefix.. '.', inner_depth + 1
if inner_depth < limit then
for q in node.traverse(p.value) do
- debug_show_node_X(q, print_fn, limit)
+ debug_show_node_X(q, print_fn, limit, inner_depth)
end
end
prefix, inner_depth = k, bid
elseif pt=='noad' then
s = base ; print_fn(s)
if p.nucleus then
- prefix = k .. 'N'; debug_show_node_X(p.nucleus, print_fn, limit);
+ prefix = k .. 'N'; debug_show_node_X(p.nucleus, print_fn, limit, inner_depth);
end
if p.sup then
- prefix = k .. '^'; debug_show_node_X(p.sup, print_fn, limit);
+ prefix = k .. '^'; debug_show_node_X(p.sup, print_fn, limit, inner_depth);
end
if p.sub then
- prefix = k .. '_'; debug_show_node_X(p.sub, print_fn, limit);
+ prefix = k .. '_'; debug_show_node_X(p.sub, print_fn, limit, inner_depth);
end
prefix = k;
elseif pt=='math_char' then
- s = base .. ' fam: ' .. p.fam .. ' , char = ' .. utf.char(p.char)
+ s = base .. ' fam: ' .. p.fam .. ' , char = ' .. utfchar(p.char)
print_fn(s)
elseif pt=='sub_box' or pt=='sub_mlist' then
print_fn(base)
if p.head then
prefix = k .. '.';
for q in node.traverse(p.head) do
- debug_show_node_X(q, print_fn)
+ debug_show_node_X(q, print_fn, limit, inner_depth)
end
end
else
inner_depth = 0
if head then
while head do
- debug_show_node_X(head, print_fn, lim or 1/0); head = node_next(head)
+ debug_show_node_X(head, print_fn, lim or 1/0, inner_depth); head = node_next(head)
end
else
print_fn(prefix .. ' (null list)')
prefix = depth
inner_depth = 0
if head then
- debug_show_node_X(head, print_fn, lim or 1/0)
+ debug_show_node_X(head, print_fn, lim or 1/0, inner_depth)
else
print_fn(prefix .. ' (null list)')
end