2 -- luatexja/ltj-compat.lua
5 luatexja.load_module('base'); local ltjb = luatexja.base
7 -- \kuten, \jis, \euc, \sjis, \ucs, \kansuji
8 local function to_kansuji(num)
9 if not num then num=0; return
11 num = -num; tex.write('-')
16 ltjs.get_penalty_table(luatexja.stack_table_index.KSJ + num%10,
17 '', tex.getcount('ltj@@stack'))) .. s
18 num=math.floor(num/10)
24 local function from_ucs(i)
25 if type(i)~='number' then
26 ltjb.package_error('luatexja',
27 "invalid character code (".. tostring(i) .. ")",
28 "I'm going to use 0 instead of that illegal character code.")
34 -- \kuten: 面区点 (それぞれで16進2桁を使用)=> Unicode 符号位置
35 local function from_kuten(i)
36 if type(i)~='number' then
37 ltjb.package_error('luatexja',
38 "invalid character code (".. tostring(i) .. ")",
39 "I'm going to use 0 instead of that illegal character code.")
42 tex.write(tostring(luatexja.jisx0208.table_jisx0208_uptex[i] or 0))
45 -- \euc: EUC-JP による符号位置 => Unicode 符号位置
46 local function from_euc(i)
47 if type(i)~='number' then
48 ltjb.package_error('luatexja',
49 "invalid character code (".. tostring(i) .. ")",
50 "I'm going to use 0 instead of that illegal character code.")
52 elseif i>=0x10000 or i<0xa0a0 then
58 -- \jis: ISO-2022-JP による符号位置 => Unicode 符号位置
59 local function from_jis(i)
60 if (type(i)~='number') or i>=0x10000 or i<0 then
61 ltjb.package_error('luatexja',
62 "invalid character code (".. tostring(i) .. ")",
63 "I'm going to use 0 instead of that illegal character code.")
69 -- \sjis: Shift_JIS による符号位置 => Unicode 符号位置
70 local function from_sjis(i)
71 if (type(i)~='number') or i>=0x10000 or i<0 then
72 ltjb.package_error('luatexja',
73 "invalid character code (".. tostring(i) .. ")",
74 "I'm going to use 0 instead of that illegal character code.")
75 tex.write('0'); return
77 local c2 = math.floor(i/256)
79 local shift_jisx0213_s1a3_table = {
80 { [false]= 1, [true]= 8},
81 { [false]= 3, [true]= 4},
82 { [false]= 5, [true]=12},
83 { [false]=13, [true]=14},
86 if c2 >= 0xF0 then -- this if block won't be true
87 if (c2 <= 0xF3 or (c2 == 0xF4 and c1 < 0x9F)) then
88 c2 = 0x100 + shift_jisx0213_s1a3_table[c2 - 0xF0 + 1][(0x9E < c1)];
90 c2 = c2 * 2 - 413 + 0x100; if 0x9E < c1 then c2=c2+1 end
93 if c2<=0x9f then i=0x101 else i=0x181 end
94 c2 = c2 + c2 - i; if 0x9E < c1 then c2=c2+1 end
97 if c1>0x7f then i=0x40 else i=0x3f end
102 from_kuten(c2*256+c1)
108 from_kuten = from_kuten,
110 from_sjis = from_sjis,
112 to_kansuji = to_kansuji,