X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fluatexja.lua;h=b966e8393bd4319adc1ae87af201681f4a61dfbf;hb=9239672f2650e60ba848bb9776c0fff31b74a048;hp=370141a85e72e7f1576779557c815f3b917f9d3e;hpb=4c013c3732baee930e7adff24e0479a296aeb1fb;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja.lua b/src/luatexja.lua index 370141a..b966e83 100644 --- a/src/luatexja.lua +++ b/src/luatexja.lua @@ -30,6 +30,15 @@ do setfield(g,'stretch_order',sto or 0) setfield(g,'shrink_order', sho or 0) end + local getfield = node.direct.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 end --- 以下は全ファイルで共有される定数 @@ -38,17 +47,18 @@ luatexja.icflag_table = icflag_table icflag_table.ITALIC = 1 icflag_table.PACKED = 2 icflag_table.KINSOKU = 3 -icflag_table.FROM_JFM = 6 +icflag_table.FROM_JFM = 4 -- FROM_JFM: 4, 5, 6, 7, 8 →優先度高(伸びやすく,縮みやすい) -- 6 が標準 -icflag_table.KANJI_SKIP = 9 -icflag_table.KANJI_SKIP_JFM = 10 -icflag_table.XKANJI_SKIP = 11 -icflag_table.XKANJI_SKIP_JFM = 12 -icflag_table.PROCESSED = 13 -icflag_table.IC_PROCESSED = 14 -icflag_table.BOXBDD = 15 -icflag_table.PROCESSED_BEGIN_FLAG = 128 +icflag_table.KANJI_SKIP = 68 -- = 4+64 +icflag_table.KANJI_SKIP_JFM = 69 +icflag_table.XKANJI_SKIP = 70 +icflag_table.XKANJI_SKIP_JFM = 71 +icflag_table.LINEEND = 72 +icflag_table.PROCESSED = 73 +icflag_table.IC_PROCESSED = 74 +icflag_table.BOXBDD = 75 +icflag_table.PROCESSED_BEGIN_FLAG = 4096 -- sufficiently large power of 2 local stack_table_index = {} luatexja.stack_table_index = stack_table_index @@ -230,8 +240,8 @@ end do luatexja.binary_pars = { jacharrange = function(c, t) - if type(c)~='number' or c<0 or c>31*ltjc.ATTR_RANGE then - -- 0 はエラーにしない(隠し) + if type(c)~='number' or c<-1 or c>31*ltjc.ATTR_RANGE then + -- 0, -1 はエラーにしない(隠し) ltjb.package_error('luatexja', 'invalid character range number (' .. tostring(c) .. ')', 'A character range number should be in the range 1..' @@ -344,6 +354,24 @@ function luatexja.ext_cleanup() end +-- lastnodechar +do + local id_glyph = node.id('glyph') + function luatexja.pltx_composite_last_node_char() + local n = tex.nest[tex.nest.ptr].tail + local r = '-1' + if n then + if n.id==id_glyph then + while n.componetns and n.subtype and n.subtype%4 >= 2 do + n = node.tail(n) + end + r = tostring(n.char) + end + end + tex.sprint(r) + end +end + -- debug do @@ -380,7 +408,8 @@ local function debug_show_node_X(p,print_fn, limit) .. tostring(p.font) .. ' (' .. print_scaled(p.height) .. '+' .. print_scaled(p.depth) .. ')x' .. print_scaled(p.width) - .. ' xoff: ' .. print_scaled(p.xoffset) + .. ' off: (' .. print_scaled(p.xoffset) + .. ',' .. print_scaled(p.yoffset) .. ')' print_fn(s) elseif pt=='hlist' or pt=='vlist' or pt=='unset'or pt=='ins' then if pt=='ins' then @@ -444,6 +473,8 @@ local function debug_show_node_X(p,print_fn, limit) s = s .. ' (for accent)' elseif get_attr_icflag(p)==icflag_table.IC_PROCESSED then s = s .. ' (italic correction)' + elseif get_attr_icflag(p)==icflag_table.LINEEND then + s = s .. ' (end-of-line)' -- elseif get_attr_icflag(p)==ITALIC then -- s = s .. ' (italic correction)' elseif get_attr_icflag(p)>icflag_table.KINSOKU