}
}
+% Source Han {Serif,Sans}
+\ltjpreset_declare_option:nn{sourcehan}{
+ \ltjpreset_set_multi:n {
+ Source~Han~Serif~Regular, % mc/m
+ Source~Han~Serif~Bold, % mc/bx
+ Source~Han~Sans~Normal, % gt/m (multi)
+ Source~Han~Sans~Bold, % gt/bx
+ Source~Han~Sans~Medium, % gt/m (uni)
+ Source~Han~Sans~Heavy, % gt/eb
+ Source~Han~Sans~Heavy % mg/m
+ }
+}
+
% ipa, ipaex, ms
\ltjpreset_declare_option:nn{ipa}{
do
local IHB = luatexja.userid_table.IHB
local BPAR = luatexja.userid_table.BPAR
+ local BOXB = luatexja.userid_table.BOXB
local node_prev = node.direct.getprev
local node_write = node.direct.write
node_write(tn)
end
+ -- Node for indicating a head/end of a box
+ function create_boxbdd_node()
+ local tn = node_new(id_whatsit, sid_user)
+ setfield(tn, 'user_id', BOXB)
+ setfield(tn, 'type', 100)
+ setfield(tn, 'value', 1)
+ node_write(tn)
+ end
+
local function whatsit_callback(Np, lp, Nq)
if Np and Np.nuc then return Np
elseif Np and getfield(lp, 'user_id') == BPAR then
Np.first = lp; Np.nuc = lp; Np.last = lp
return Np
+ elseif Np and getfield(lp, 'user_id') == BOXB then
+ Np.first = lp; Np.nuc = lp; Np.last = lp
+ if Nq then
+ if Nq.met then
+ Np.class = fast_find_char_class('parbdd', Nq.met)
+ end
+ Np.met = Nq.met; Np.pre = 0; Np.post = 0; Np.xspc = 0
+ Np.auto_xspc = false
+ end
+ return Np
else
return Np
end
Nq.auto_xspc = false
end
head = node_remove(head, y)
+ node_free(y)
+ elseif not s and getfield(Nq.nuc, 'user_id') == BOXB then
+ local x, y = node_prev(Nq.nuc), Nq.nuc
+ Nq.first, Nq.nuc, Nq.last = x, x, x
+ if Np then
+ if Np.met then
+ Nq.class = fast_find_char_class('boxbdd', Np.met)
+ end
+ Nq.met = Np.met; Nq.pre = 0; Nq.post = 0; Nq.xspc = 0
+ Nq.auto_xspc = false
+ end
+ head = node_remove(head, y)
node_free(y)
end
return s
\newluafunction\ltj@restore@globaldefs@inner
\newluafunction\ltj@@ihb@inner
\newluafunction\ltj@@fakeparbegin@inner
+\newluafunction\ltj@@fakeboxbdd@inner
\directlua{
local t = lua.get_functions_table()
t[\the\ltj@reset@globaldefs@inner]
= function() tex.globaldefs = luatexja.global_temp end
t[\the\ltj@@ihb@inner] = luatexja.jfmglue.create_inhibitglue_node
t[\the\ltj@@fakeparbegin@inner] = luatexja.jfmglue.create_beginpar_node
+ t[\the\ltj@@fakeboxbdd@inner] = luatexja.jfmglue.create_boxbdd_node
}
\protected\def\ltj@reset@globaldefs{\luafunction\ltj@reset@globaldefs@inner}
\protected\def\ltj@restore@globaldefs{\luafunction\ltj@restore@globaldefs@inner}
\protected\def\inhibitglue{\ifhmode\relax\luafunction\ltj@@ihb@inner\fi}
\protected\def\ltjfakeparbegin{\ifhmode\relax\luafunction\ltj@@fakeparbegin@inner\fi}
+\protected\def\ltjfakeboxbdd{\ifhmode\relax\luafunction\ltj@@fakeboxbdd@inner\fi}
%%%%%%%% \ltjdefcharrange<name>{100-200,3000-,5000,...}
userid_table.STCK = luatexbase.newuserwhatsitid('stack_marker', 'luatexja') -- スタック管理
userid_table.BPAR = luatexbase.newuserwhatsitid('begin_par', 'luatexja') -- 「段落始め」
userid_table.DIR = luatexbase.newuserwhatsitid('direction', 'luatexja') -- 組方向
+userid_table.BOXB = luatexbase.newuserwhatsitid('box_boundary', 'luatexja') -- 「ボックス始め・終わり」
local dir_table = {}
luatexja.dir_table = dir_table