OSDN Git Service

\ltj@@adjust@baseline@inner: more robust
[luatex-ja/luatexja.git] / src / ltj-pretreat.lua
index c21de3f..f95ae5f 100644 (file)
@@ -116,7 +116,7 @@ do
       return h
    end
 
-   luatexbase.add_to_callback('hyphenate',
+   ltjb.add_to_callback('hyphenate',
                              function (head,tail)
                                 return suppress_hyphenate_ja(head)
                              end,'ltj.hyphenate')
@@ -124,6 +124,9 @@ end
 
 -- mode: true iff this function is called from hpack_filter
 local ltjs_report_stack_level = ltjs.report_stack_level
+local ltjf_vert_form_table    = ltjf.vert_form_table
+local ltjf_font_metric_table  = ltjf.font_metric_table
+local font_getfont = font.getfont
 local function set_box_stack_level(head, mode)
    local box_set, cl = 0, tex.currentgrouplevel + 1
    for _,p  in pairs(wt) do
@@ -136,25 +139,28 @@ local function set_box_stack_level(head, mode)
    if ltjs.list_dir == dir_tate then
       for p in Dnode.traverse_id(id_glyph,to_direct(head)) do
          if (has_attr(p, attr_icflag) or 0)<=0 and getfield(p, 'lang')==lang_ja then
-            local pfn = has_attr(p, attr_curtfnt) or getfont(p)
             local pc = ltjs_orig_char_table[p]
-           setfield(p, 'font', ltjf_replace_altfont(pfn, pc))
+           local nf = ltjf_replace_altfont( has_attr(p, attr_curtfnt) or getfont(p) , pc)
+           setfield(p, 'font', nf)
+           if ltjf_font_metric_table[nf].vert_activated then
+              pc = ltjf_vert_form_table [getchar(p)]
+              if font_getfont(nf).characters[pc] then setfield(p, 'char', pc) end
+           end
         end
       end
    end
-   --luatexja.ext_show_node_list(head, 'S> ', print)
    return head
 end
 
 -- CALLBACKS
-luatexbase.add_to_callback('hpack_filter',
+ltjb.add_to_callback('hpack_filter',
    function (head)
      return set_box_stack_level(head, true)
-   end,'ltj.hpack_filter_pre',1)
-luatexbase.add_to_callback('pre_linebreak_filter',
+   end,'ltj.set_stack_level',1)
+ltjb.add_to_callback('pre_linebreak_filter',
   function (head)
      return set_box_stack_level(head, false)
-  end,'ltj.pre_linebreak_filter_pre',1)
+  end,'ltj.set_stack_level',1)
 
 luatexja.pretreat = {
    set_box_stack_level = set_box_stack_level,