OSDN Git Service

support for not setting \ltj@{y,t}{a,k}blshift (unset -> 0pt)
[luatex-ja/luatexja.git] / src / luatexja.lua
index 8da4251..cb74a99 100644 (file)
@@ -40,21 +40,36 @@ do
     end
 end
 do
-   local setfield = node.direct.setfield
+   local dnode = node.direct
+   local setfield = dnode.setfield
    luatexja.setglue = node.direct.setglue or
    function(g,w,st,sh,sto,sho)
       setfield(g,'width', w or 0); setfield(g,'stretch',st or 0); setfield(g,'shrink', sh or 0)
       setfield(g,'stretch_order',sto or 0)
       setfield(g,'shrink_order', sho or 0)
    end
-   local getfield = node.direct.getfield
+   for _,v in pairs({'char', 'depth', 'dir', 'font', 'height', 'kern', 'lang', 'next', 
+                      'nucleus', 'offsets', 'penalty', 'shift', 'sub', 'subtype', 'sup'}) do
+         if not dnode['set'..v] then 
+             dnode['set'..v] = function(n, ...) return setfield(n, v, ...) end
+         end
+   end
+   local getfield = dnode.getfield
    luatexja.getglue = node.direct.getglue or
    function(g)
       return getfield(g,'width'), getfield(g,'stretch'), getfield(g,'shrink'),
              getfield(g,'stretch_order'), getfield(g,'shrink_order')
    end
+   for _,v in pairs({'box', 'components', 'char', 'depth', 'font', 'height', 'kern', 'lang', 
+                     'list', 'next', 'nucleus', 'offsets', 'penalty', 'prev', 'shift', 'sub',
+                     'subtype', 'sup', 'whd', 'width', 'dir'}) do
+         if not dnode['get'..v] then 
+             dnode['get'..v] = function(n, ...) return getfield(n, v, ...) end
+         end
+    end
 end
 
+
 --- 以下は全ファイルで共有される定数
 local icflag_table = {}
 luatexja.icflag_table = icflag_table
@@ -189,9 +204,9 @@ end
 -- EXT: print parameters that don't need arguments
 do
    local tex_getattr = tex.getattribute
-   local function getattr(a)
-      local r = tex_getattr(a)
-      return (r==-0x7FFFFFFF) and 0 or r
+   local function getattr(a, d)
+      local r = tex_getattr(a); d = d or 0
+      return (r==-0x7FFFFFFF) and d or r
    end 
    luatexja.unary_pars = {
       yalbaselineshift = function(t)
@@ -216,10 +231,10 @@ do
          return ltjs.get_stack_table(stack_ind.JWP, 0, t)
       end,
       autospacing = function(t)
-         return getattr('ltj@autospc')
+         return getattr('ltj@autospc', 1)
       end,
       autoxspacing = function(t)
-         return getattr('ltj@autoxspc')
+         return getattr('ltj@autoxspc', 1)
       end,
       differentjfm = function(t)
          local f, r = luatexja.jfmglue.diffmet_rule, '???'
@@ -269,8 +284,8 @@ do
             c=0 -- external range 217 == internal range 0
          elseif c==31*ltjc.ATTR_RANGE then c=0
          end
-      -- 負の値は <U+0080 の文字の文字範囲,として出てくる.この時はいつも欧文文字なので 1 を返す
-         return (c<0) and 1 or ltjc.get_range_setting(c)
+         -- 負の値は <U+0080 の文字の文字範囲,として出てくる.この時はいつも欧文文字なので 1 を返す
+         if c<0 then return 1 else return (ltjc.get_range_setting(c)==0) and 0 or 1 end
       end,
       prebreakpenalty = function(c, t)
          return ltjs.get_stack_table(stack_ind.PRE + ltjb.in_unicode(c, true), 0, t)
@@ -391,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