local OTF = luatexja.userid_table.OTF
local tex_get_attr = tex.getattribute
+local cache_var = 2
+local cache_outdate_fn = function (t) return t.version~=cache_ver end
+local ivd_aj1 = ltjb.load_cache('ltj-ivd_aj1',cache_outdate_fn)
+if not ivd_aj1 then -- make cache
+ ivd_aj1 = require('ltj-ivd_aj1.lua')
+ ltjb.save_cache_luc('ltj-ivd_aj1', ivd_aj1)
+end
+
+
local function get_ucs_from_rmlgbm(c)
- local v = (luatexja.otf.ivd_aj1 and luatexja.otf.ivd_aj1[c]
+ local v = (ivd_aj1 and ivd_aj1.table_ivd_aj1[c]
or ltjr_cidfont_data["Adobe-Japan1"].resources.unicodes["Japan1." .. tostring(c)])
or 0
- if type(v)~='number' then -- table
+ if v>=0x200000 then -- table
local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
and attr_curtfnt or attr_curjfnt)
local curjfnt = identifiers[curjfnt_num].resources
+ local base, ivs = v % 0x200000, 0xE00FF + math.floor(v/0x200000)
curjfnt = curjfnt and curjfnt.variants
- curjfnt = curjfnt and curjfnt[v[2]]
- return curjfnt and curjfnt[v[1]] or v[1]
+ curjfnt = curjfnt and curjfnt[ivs]
+ return curjfnt and curjfnt[base] or base
elseif v<0xF0000 then -- 素直に Unicode にマップ可能
return v
else -- privete use area
local w = ltjr_cidfont_data["Adobe-Japan1"].characters[v]. tounicode
-- must be non-nil!
local i = string.len(w)
+ local r
if i==4 then -- UCS2
- return tonumber(w,16)
+ r = tonumber(w,16)
elseif i==8 then
i,w = tonumber(string.sub(w,1,4),16), tonumber(string.sub(w,-4),16)
if (w>=0xD800) and (w<=0xDB7F) and (i>=0xDC00) and (i<=0xDFFF) then -- Surrogate pair
- return (w-0xD800)*0x400 + (i-0xDC00)
+ r = (w-0xD800)*0x400 + (i-0xDC00)
else
- return 0
+ r = 0
+ end
+ end
+ if ltjr_cidfont_data["Adobe-Japan1"].shared.ltj_vert_table[r] then
+ -- CID が縦組用字形だった場合
+ local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
+ and attr_curtfnt or attr_curjfnt)
+ local t = identifiers[curjfnt_num]
+ if t.resources.sequences then
+ for _,i in pairs(t.resources.sequences) do
+ if (i.order[1]=='vert' or i.order[1]=='vrt2')
+ and i.type == 'gsub_single' and i.steps then
+ for _,j in pairs(i.steps) do
+ if type(j)=='table' then
+ if type(j.coverage)=='table' then
+ for i,k in pairs(j.coverage) do
+ if i==r then return k end
+ end
+ end
+ end
+ end
+ end
+ end
end
end
+ return r
end
end
cidinfo.ordering ~= "Japan1" and
cidinfo.ordering ~= "GB1" and
cidinfo.ordering ~= "CNS1" and
- cidinfo.ordering ~= "Korea1" then
+ cidinfo.ordering ~= "Korea1" and
+ cidinfo.ordering ~= "KR" then
-- ltjb.package_warning('luatexja-otf',
-- 'Current Japanese font (or other CJK font) "'
-- ..curjfnt.psname..'" is not a CID-Keyed font (Adobe-Japan1 etc.)')
cid = cid,
}
-luatexja.load_module('ivd_aj1')
-
-- EOF