OSDN Git Service

ltj-stack.lua: use getglue()
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 17 Aug 2022 08:44:17 +0000 (17:44 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Wed, 17 Aug 2022 08:44:17 +0000 (17:44 +0900)
src/ltj-adjust.lua
src/ltj-charrange.lua
src/ltj-stack.lua
src/luatexja.lua

index eb1cecc..52f60a9 100644 (file)
@@ -398,7 +398,6 @@ local adjust_width
 do
    local myaw_step1, myaw_step2, myaw_step1_last
    local dummy =  function(p,t,n) return t, false end
-   local ltjs_fast_get_stack_skip = ltjs.fast_get_stack_skip
    function adjust_width(head)
       if not head then return head end
       local last_p
index e4a2a8c..1f7c94f 100644 (file)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.charrange',
-  date = '2020-08-17',
+  date = '2022-08-17',
   description = 'Handling the range of Japanese characters',
 })
 luatexja.charrange = {}
index a0cd2e2..c9458ec 100644 (file)
@@ -3,7 +3,7 @@
 --
 luatexbase.provides_module({
   name = 'luatexja.stack',
-  date = '2020-07-30',
+  date = '2022-08-17',
   description = 'LuaTeX-ja stack system',
 })
 luatexja.stack = {}
@@ -20,9 +20,11 @@ local STCK = luatexja.userid_table.STCK
 local fastcopy = table.fastcopy
 local setcount, getcount = tex.setcount, tex.getcount
 local scan_int, scan_keyword = token.scan_int, token.scan_keyword
+local tex_nest = tex.nest
 ltjs.hmode = 0 -- dummy
 
 local charprop_stack_table={};
+
 ltjs.charprop_stack_table = charprop_stack_table
 charprop_stack_table[0]={}
 
@@ -41,7 +43,7 @@ local function get_stack_level()
       charprop_stack_table[i] = fastcopy(charprop_stack_table[i-1])
       setcount('ltj@@stack', i)
       if gd~=0 then tex.globaldefs = gd end
-      if  tex.nest[tex.nest.ptr].mode == -ltjs.hmode then -- rest. hmode のみ
+      if  tex_nest[tex_nest.ptr].mode == -ltjs.hmode then -- rest. hmode のみ
          local g = node_new(id_whatsit, sid_user)
          g.user_id=STCK; g.type=100; g.value=j; node.write(g)
       end
@@ -54,9 +56,7 @@ local function set_stack_table(m, p)
    local i = get_stack_level()
    charprop_stack_table[i][m] = p
    if luatexja.isglobal=='global' then
-      for j,v in pairs(charprop_stack_table) do
-         charprop_stack_table[j][m] = p
-      end
+      for j,v in pairs(charprop_stack_table) do v[m] = p end
    end
 end
 ltjs.set_stack_table = set_stack_table
@@ -90,25 +90,21 @@ function ltjs.set_stack_font(m,c,p)
 end
 
 -- EXT: sp: glue_spec
+local getglue = node.getglue
 function ltjs.set_stack_skip(m,sp)
   local i = get_stack_level()
   if not sp then return end
   if not charprop_stack_table[i][m] then
      charprop_stack_table[i][m] = {}
   end
-  charprop_stack_table[i][m].width   = sp.width
-  charprop_stack_table[i][m].stretch = sp.stretch
-  charprop_stack_table[i][m].shrink  = sp.shrink
-  charprop_stack_table[i][m].stretch_order = sp.stretch_order
-  charprop_stack_table[i][m].shrink_order  = sp.shrink_order
+  local w,st,sh,sto,sho = getglue(sp)
+  local c = charprop_stack_table[i][m]
+  c.width, c.stretch, c.shrink, c.stretch_order, c.shrink_order = w, st, sh, sto, sho
   if luatexja.isglobal=='global' then
      for j,v in pairs(charprop_stack_table) do
-        if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end
-        charprop_stack_table[j][m].width   = sp.width
-        charprop_stack_table[j][m].stretch = sp.stretch
-        charprop_stack_table[j][m].shrink  = sp.shrink
-        charprop_stack_table[j][m].stretch_order = sp.stretch_order
-        charprop_stack_table[j][m].shrink_order  = sp.shrink_order
+        if not v[m] then v[m] = {} end
+        local c = v[m]
+        c.width, c.stretch, c.shrink, c.stretch_order, c.shrink_order = w, st, sh, sto, sho
      end
   end
 end
@@ -119,23 +115,21 @@ local orig_char_table = {}
 ltjs.orig_char_table = orig_char_table
 ltjs.list_dir = nil -- dummy
 ltjs.table_current_stack = nil -- dummy
+local dummy_skip_table = { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 }
 function ltjs.report_stack_level(bsl)
    ltjs.table_current_stack = charprop_stack_table[bsl]
    return bsl
 end
 function ltjs.fast_get_stack_skip(m)
-   return ltjs.table_current_stack[m]
-      or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 }
+   return ltjs.table_current_stack[m] or dummy_skip_table
 end
 
 -- For other situations, use the following instead:
 function ltjs.get_stack_skip(m, idx)
-   return charprop_stack_table[idx][m]
-      or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 }
+   return charprop_stack_table[idx][m] or dummy_skip_table
 end
 function ltjs.get_stack_table(mc, d, idx)
-   local i = charprop_stack_table[idx][mc]
-   return i or d
+   return charprop_stack_table[idx][mc] or d
 end
 
 
index b2561d7..6247c23 100644 (file)
@@ -406,7 +406,7 @@ do
         else
             t[0] = {}; tex.print(cat_lp, '\\input ltj-kinsoku.tex\\relax')
         end
-        luatexja.load_kinsoku=nil
+        luatexja.load_kinsoku=nil; ltjs.charprop_stack_table = nil
     end
 end