X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=src%2Fltj-stack.lua;h=21f71d6aa12bb443f8a1ffb363e50f693f71a027;hb=c35bc9236b8c249d3089a824fe197d0d1cde7e78;hp=dd31ab0a6a52e1ee1cdcddb1074022ce2e358813;hpb=880636d81e9819b31dec8a5f897bbfaf1732d18b;p=luatex-ja%2Fluatexja.git diff --git a/src/ltj-stack.lua b/src/ltj-stack.lua index dd31ab0..21f71d6 100644 --- a/src/ltj-stack.lua +++ b/src/ltj-stack.lua @@ -82,27 +82,28 @@ end -- EXT function set_stack_table(g,m,c,p,lb,ub) local i = get_stack_level() - if pub then + if type(p)~='number' or pub then ltjb.package_error('luatexja', - "invalid code (".. p .. ")", - {"The code should in the range "..tostring(lb) ..'..'.. tostring(ub) .. ".", - "I'm going to use 0 instead of that illegal code value."}) + "invalid code (".. tostring(p) .. ")", + "The code should in the range "..tostring(lb) .. '..' .. + tostring(ub) .. ".\n" .. + "I'm going to use 0 instead of that illegal code value.") p=0 - elseif c<-1 or c>0x10ffff then + elseif type(c)~='number' or c<-1 or c>0x10ffff then ltjb.package_error('luatexja', - 'bad character code (' .. c .. ')', - {'A character number must be between -1 and 0x10ffff.', - "(-1 is used for denoting `math boundary')", - 'So I changed this one to zero.'}) + 'bad character code (' .. tostring(c) .. ')', + 'A character number must be between -1 and 0x10ffff.\n' .. + "(-1 is used for denoting `math boundary')\n" .. + 'So I changed this one to zero.') c=0 - elseif not charprop_stack_table[i][m] then - charprop_stack_table[i][m] = {} + elseif not charprop_stack_table[i][c] then + charprop_stack_table[i][c] = {} end - charprop_stack_table[i][m][c] = p + charprop_stack_table[i][c][m] = p if g=='global' then for j,v in pairs(charprop_stack_table) do - if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end - charprop_stack_table[j][m][c] = p + if not charprop_stack_table[j][c] then charprop_stack_table[j][c] = {} end + charprop_stack_table[j][c][m] = p end end end @@ -110,20 +111,20 @@ end -- EXT function set_stack_font(g,m,c,p) local i = get_stack_level() - if c<0 or c>255 then + if type(c)~='number' or c<0 or c>255 then ltjb.package_error('luatexja', - "invalid family number (".. p .. ")", - {"The family number should in the range 0 .. 255.", - "I'm going to use 0 instead of that illegal family number."}) + "invalid family number (".. tostring(c) .. ")", + "The family number should in the range 0 .. 255.\n" .. + "I'm going to use 0 instead of that illegal family number.") c=0 - elseif not charprop_stack_table[i][m] then - charprop_stack_table[i][m] = {} + elseif not charprop_stack_table[i][c] then + charprop_stack_table[i][c] = {} end - charprop_stack_table[i][m][c] = p - if g=='global' then + charprop_stack_table[i][c][m] = p + if g=='global' then for j,v in pairs(charprop_stack_table) do - if not charprop_stack_table[j][m] then charprop_stack_table[j][m] = {} end - charprop_stack_table[j][m][c] = p + if not charprop_stack_table[j][c] then charprop_stack_table[j][c] = {} end + charprop_stack_table[j][c][m] = p end end end @@ -152,17 +153,34 @@ function set_stack_skip(g,m,sp) end end --- mode: nil iff it is called in callbacks -function get_skip_table(m, idx) - local i = charprop_stack_table[idx][m] - return i or { width = 0, stretch = 0, shrink = 0, - stretch_order = 0, shrink_order = 0 } +-- These three functions are used in ltj-jfmglue.lua. +local table_current_stack +function report_stack_level(bsl) + table_current_stack = charprop_stack_table[bsl] +end +function fast_get_skip_table(m) + return table_current_stack[m] + or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 } +end +function fast_get_penalty_table(m,c) + local i = table_current_stack[c] + return (i and i[m]) end +local empty_table = {} +function fast_get_penalty_table_parent(c) + return table_current_stack[c] or empty_table +end + +-- For other situations, use the following instead: +function get_skip_table(m, idx) + return charprop_stack_table[idx][m] + or { width = 0, stretch = 0, shrink = 0, stretch_order = 0, shrink_order = 0 } +end function get_penalty_table(m,c,d, idx) - local i = charprop_stack_table[idx][m] - if i then i=i[c] end - return i or d + local i = charprop_stack_table[idx][c] + return (i and i[m]) or d end + -- EOF