X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fluatexja.lua;h=b966e8393bd4319adc1ae87af201681f4a61dfbf;hb=9239672f2650e60ba848bb9776c0fff31b74a048;hp=38d5517e6f7776a02fc0feba17eb27b13d5277a6;hpb=9b71492d54912fa29aa0a46c7c212eb8d9b47207;p=luatex-ja%2Fluatexja.git diff --git a/src/luatexja.lua b/src/luatexja.lua index 38d5517..b966e83 100644 --- a/src/luatexja.lua +++ b/src/luatexja.lua @@ -20,19 +20,9 @@ function luatexja.load_lua(fn) end end --- node.direct.setglue is corrupted in r5903 do local setfield = node.direct.setfield - local setglue = node.direct.setglue - if setglue then - local g = node.direct.new(node.id('glue')) - setglue(g, 128,256,512,2,1) - local w,st,sh,sto,sho = node.direct.getglue(g) - if (w~=128)or(st~=256)or(sh~=512)or(sto~=2)or(sho~=1) then - setglue = nil - end - end - luatexja.setglue = setglue or + 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) @@ -40,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 --- 以下は全ファイルで共有される定数 @@ -48,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 @@ -240,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..' @@ -354,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 @@ -390,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 @@ -453,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