OSDN Git Service

luatexja-core.sty: Redefined \un{h,v}copy.
[luatex-ja/luatexja.git] / src / ltj-setwidth.lua
index 30d9448..04d11db 100644 (file)
@@ -18,7 +18,8 @@ local getsubtype = (Dnode ~= node) and Dnode.getsubtype or function(n) return n.
 
 local node_traverse = Dnode.traverse
 local node_new = Dnode.new
-local node_remove = luatexja.Dnode_remove -- Dnode.remove
+local node_copy = Dnode.copy
+local node_remove = Dnode.remove
 local node_tail = Dnode.tail
 local node_next = (Dnode ~= node) and Dnode.getnext or node.next
 local has_attr = Dnode.has_attribute
@@ -48,6 +49,7 @@ local attr_tkblshift = luatexbase.attributes['ltj@tkblshift']
 local attr_icflag = luatexbase.attributes['ltj@icflag']
 
 local ltjf_font_metric_table = ltjf.font_metric_table
+local ltjf_get_vert_glyph = ltjf.get_vert_glyph
 
 local PACKED       = luatexja.icflag_table.PACKED
 local PROCESSED    = luatexja.icflag_table.PROCESSED
@@ -119,7 +121,7 @@ local function capsule_glyph_tate(p, met, class)
    fshift = call_callback("luatexja.set_width", fshift, met, class)
    local fheight, fdepth = char_data.height, char_data.depth
 
-   setfield(p, 'char', ltjd.get_vert_glyph(getfont(p), getchar(p)))
+   setfield(p, 'char', ltjf_get_vert_glyph(getfont(p), getchar(p)))
 
    local y_shift
       = - getfield(p, 'yoffset') + (has_attr(p,attr_tkblshift) or 0)
@@ -136,13 +138,14 @@ local function capsule_glyph_tate(p, met, class)
    setfield(k1, 'kern',
            getfield(p, 'xoffset') + ascent
               + char_data.align*(fwidth-pwidth) - fshift.left)
+   setfield(p, 'xoffset', -fshift.down)
+   setfield(p, 'yoffset', 0)
    local ws = node_new(id_whatsit, sid_save)
    local wm = node_new(id_whatsit, sid_matrix)
    setfield(wm, 'data', '0 1 -1 0')
-   local k2 = node_new(id_kern)
-   setfield(k2, 'kern', -fshift.down - fdepth)
-   local k3 = node_new(id_kern)
-   setfield(k3, 'kern', - getfield(p, 'width') +fshift.down + fdepth)
+   local pwnh = - 0.5*getfield(p, 'width')
+   local k2 = node_new(id_kern); setfield(k2, 'kern', - 0.5*getfield(p, 'width'))
+   local k3 = node_copy(k2)
    local wr = node_new(id_whatsit, sid_restore)
    setfield(box, 'head', k1); setfield(k1, 'next', ws)
    setfield(ws, 'next', wm);  setfield(wm, 'next', k2);
@@ -179,6 +182,7 @@ local function capsule_glyph_math(p, met, class)
 end
 luatexja.setwidth.capsule_glyph_math = capsule_glyph_math
 
+local tex_set_attr = tex.setattribute
 function luatexja.setwidth.set_ja_width(ahead, adir)
    local p = ahead; head  = p; dir = adir or 'TLT'
    local m = false -- is in math mode?
@@ -194,6 +198,8 @@ function luatexja.setwidth.set_ja_width(ahead, adir)
            p = capsule_glyph(p, ltjf_font_metric_table[pf],
                              has_attr(p, attr_jchar_class))
         else
+           -- TODO: neg. offset does not increase depth
+           --local d = getfield(p, 'yoffset') - (has_attr(p,attr_ablshift) or 0)
            set_attr(p, attr_icflag, PROCESSED)
            setfield(p, 'yoffset',
                     getfield(p, 'yoffset') - (has_attr(p,attr_ablshift) or 0))
@@ -221,7 +227,7 @@ function luatexja.setwidth.set_ja_width(ahead, adir)
       end
    end
    -- adjust attr_icflag
-   tex.setattribute('global', attr_icflag, 0)
+   tex_set_attr('global', attr_icflag, 0)
    return head
 end