OSDN Git Service

Merge branch 'kitagawa_test' into master
authorHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 18 Aug 2011 06:40:24 +0000 (15:40 +0900)
committerHironori Kitagawa <h_kitagawa2001@yahoo.co.jp>
Thu, 18 Aug 2011 06:40:24 +0000 (15:40 +0900)
1  2 
src/luatexja-core.lua

@@@ -185,155 -180,13 +180,12 @@@ function ltj.ext_print_global(
    if ltj.isglobal=='global' then tex.sprint('\\global') end
  end
  
- ------------------------------------------------------------------------
- -- MAIN PROCESS STEP 1: replace fonts (prefix: main1)
- ------------------------------------------------------------------------
- ltj.box_stack_level = 0
- -- This is used in Step 2 (JFM glue/kern) and Step 3 (\[x]kanjiskip).
- local function main1_suppress_hyphenate_ja(head)
-    for p in node.traverse_id(id_glyph, head) do
-       if ltjc.is_ucs_in_japanese_char(p) then
-        local v = has_attr(p, attr_curjfnt)
-        if v then 
-           p.font = v 
-           node.set_attribute(p, attr_jchar_class,
-                              ljfm_find_char_class(p.char, ltj.font_metric_table[v].jfm))
-        end
-        v = has_attr(p, attr_ykblshift)
-        if v then 
-           node.set_attribute(p, attr_yablshift, v)
-        else
-           node.unset_attribute(p, attr_yablshift)
-        end
-          if p.subtype%2==1 then p.subtype = p.subtype - 1 end
-        p.lang=lang_ja
-       end
-    end
-    lang.hyphenate(head)
-    return head
- end
- -- mode: true iff this function is called from hpack_filter
- local function main1_set_box_stack_level(head, mode)
-    local box_set = false
-    local p = head
-    local cl = tex.currentgrouplevel + 1
-    while p do
-       if p.id==id_whatsit and p.subtype==sid_user and p.user_id==30112 then
-        local g = p
-        if mode and g.value==cl then box_set = true end
-        head, p = node.remove(head, g)
-       else p = node_next(p)
-       end
-    end
-    if box_set then 
-       ltj.box_stack_level = tex.getcount('ltj@@stack') + 1 
-    else 
-       ltj.box_stack_level = tex.getcount('ltj@@stack') 
-    end
-    if not head then -- prevent that the list is null
-       head = node_new(id_kern); head.kern = 0; head.subtype = 1
-    end
-    return head
- end
- -- CALLBACKS
- luatexbase.add_to_callback('hpack_filter', 
-    function (head)
-      return main1_set_box_stack_level(head, true)
-    end,'ltj.hpack_filter_pre',1)
- luatexbase.add_to_callback('pre_linebreak_filter', 
-   function (head)
-      return main1_set_box_stack_level(head, false)
-   end,'ltj.pre_linebreak_filter_pre',1)
- luatexbase.add_to_callback('hyphenate', 
-  function (head,tail)
-     return main1_suppress_hyphenate_ja(head)
-  end,'ltj.hyphenate')
- ------------------------------------------------------------------------
- -- MAIN PROCESS STEP 4: width of japanese chars (prefix: main4)
- ------------------------------------------------------------------------
- -- TeX's \hss
- local function main4_get_hss()
-    local hss = node_new(id_glue)
-    local fil_spec = node_new(id_glue_spec)
-    fil_spec.width = 0
-    fil_spec.stretch = 65536
-    fil_spec.stretch_order = 2
-    fil_spec.shrink = 65536
-    fil_spec.shrink_order = 2
-    hss.spec = fil_spec
-    return hss
- end
- local function main4_set_ja_width(head)
-    local p = head
-    local met_tb, t, s, g, q, a, h
-    local m = false -- is in math mode?
-    while p do
-       local v=has_attr(p,attr_yablshift) or 0
-       if p.id==id_glyph then
-        p.yoffset = p.yoffset-v
-        if is_japanese_glyph_node(p) then
-           met_tb = ltj.font_metric_table[p.font]
-           t = ltj.metrics[met_tb.jfm]
-           s = t.char_type[has_attr(p,attr_jchar_class)]
-           if s.width ~= 'prop' and
-              not(s.left==0.0 and s.down==0.0 and s.align=='left' 
-                  and round(s.width*met_tb.size)==p.width) then
-              -- must be encapsuled by a \hbox
-              head, q = node.remove(head,p)
-              p.next = nil
-              p.yoffset=round(p.yoffset-met_tb.size*s.down)
-              p.xoffset=round(p.xoffset-met_tb.size*s.left)
-              if s.align=='middle' or s.align=='right' then
-                 h = node_insert_before(p, p, main4_get_hss())
-              else h=p end
-              if s.align=='middle' or s.align=='left' then
-                 node_insert_after(h, p, main4_get_hss())
-              end
-              g = node_hpack(h, round(met_tb.size*s.width), 'exactly')
-              g.height = round(met_tb.size*s.height)
-              g.depth = round(met_tb.size*s.depth)
-              node.set_attribute(g, attr_icflag, PACKED)
-              if q then
-                 head = node_insert_before(head, q, g)
-              else
-                 head = node_insert_after(head, node.tail(head), g)
-              end
-              p = q
-           else p=node_next(p)
-           end
-        else p=node_next(p)
-        end
-       elseif p.id==id_math then
-        m=(p.subtype==0); p=node_next(p)
-       else
-        if m then
-           if p.id==id_hlist or p.id==id_vlist then
-              p.shift=p.shift+v
-           elseif p.id==id_rule then
-              p.height=p.height-v; p.depth=p.depth+v 
-           end
-        end
-        p=node_next(p)
-       end
-    end
- return head
- end
--
  -- main process
  -- mode = true iff main_process is called from pre_linebreak_filter
- local function main_process(head, mode)
+ local function main_process(head, mode, dir)
     local p = head
-    p = ltj.int_insert_jfm_glue(p,mode)
-    p = ltj.int_insert_kanji_skip(p)
-    p = main4_set_ja_width(p)
+    p = ltjj.main(p,mode)
+    p = ltjw.set_ja_width(p, dir)
     return p
  end