OSDN Git Service

Add \ltjfakeboxbdd [core], and sourcehan preset [luatexja-preset]
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sat, 8 Apr 2017 11:45:17 +0000 (20:45 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Sat, 8 Apr 2017 11:45:17 +0000 (20:45 +0900)
src/addons/luatexja-preset.sty
src/ltj-jfmglue.lua
src/luatexja-core.sty
src/luatexja.lua

index 41ba236..4b32838 100644 (file)
   }
 }
 
+% 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}{
index 97498ad..fcdcc78 100644 (file)
@@ -1210,6 +1210,7 @@ end
 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
 
@@ -1232,11 +1233,30 @@ do
       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
@@ -1254,6 +1274,18 @@ do
             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
index 317820e..a0bc924 100644 (file)
 \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,...}
index b966e83..28c1a98 100644 (file)
@@ -82,6 +82,7 @@ userid_table.IHB  = luatexbase.newuserwhatsitid('inhibitglue',  'luatexja') -- \
 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