X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fluatexja.lua;h=b966e8393bd4319adc1ae87af201681f4a61dfbf;hb=9239672f2650e60ba848bb9776c0fff31b74a048;hp=d90fa55695af2db63898e67720ddaf3093fca11f;hpb=fb084ffd85cb3fc25ddb6fb6a82d470e9d32d816;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja.lua b/src/luatexja.lua index d90fa55..b966e83 100644 --- a/src/luatexja.lua +++ b/src/luatexja.lua @@ -20,24 +20,25 @@ function luatexja.load_lua(fn) end end -local setfield = node.direct.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) +do + local setfield = node.direct.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 + 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 - --- check token library -if newtoken then - luatexja.token = newtoken -else - local luatex_version = status.list().luatex_version - if luatex_version >80 then - luatexja.token = token - end end --- 以下は全ファイルで共有される定数 @@ -46,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 @@ -238,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..' @@ -352,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 @@ -388,6 +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) + .. ' 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 @@ -451,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