summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua')
-rw-r--r--Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua126
1 files changed, 35 insertions, 91 deletions
diff --git a/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua b/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
index 6a1447aebf6..fdb308348f5 100644
--- a/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
+++ b/Master/texmf-dist/tex/luatex/luatexja/ltj-otf.lua
@@ -55,16 +55,33 @@ local ltjd_get_dir_count = ltjd.get_dir_count
local dir_tate = luatexja.dir_table.dir_tate
luatexja.userid_table.OTF = luatexbase.newuserwhatsitid('char_by_cid', 'luatexja')
-luatexja.userid_table.VSR = luatexbase.newuserwhatsitid('replace_vs', 'luatexja')
-local OTF, VSR = luatexja.userid_table.OTF, luatexja.userid_table.VSR
+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 = ltjr_cidfont_data["Adobe-Japan1"].resources.unicodes["Japan1." .. tostring(c)]
- if not v then -- AJ1 範囲外
- return 0
+ 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 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[ivs]
+ return curjfnt and curjfnt[base] or base
elseif v<0xF0000 then -- 素直に Unicode にマップ可能
return v
- else
+ else -- privete use area
local w = ltjr_cidfont_data["Adobe-Japan1"].characters[v]. tounicode
-- must be non-nil!
local i = string.len(w)
@@ -93,7 +110,6 @@ end
local cid
do
- local tex_get_attr = tex.getattribute
cid = function (key)
if key==0 then return append_jglyph(char) end
local curjfnt_num = tex_get_attr((ltjd_get_dir_count()==dir_tate)
@@ -137,17 +153,18 @@ local function extract(head)
if getid(p)==id_whatsit then
if getsubtype(p)==sid_user then
local puid = getfield(p, 'user_id')
- if puid==OTF or puid==VSR then
+ if puid==OTF then
+ --if puid==OTF or puid==VSR then
local g = node_new(id_glyph)
setfield(g, 'subtype', 0)
setfield(g, 'char', getfield(p, 'value'))
local v = has_attr(p, attr_curfnt); setfield(g, 'font',v)
- if puid==OTF then
+ --if puid==OTF then
setfield(g, 'lang', lang_ja)
set_attr(g, attr_kblshift, has_attr(p, attr_kblshift))
- else
- set_attr(g, attr_ablshift, has_attr(p, attr_ablshift))
- end
+ --else
+ -- set_attr(g, attr_ablshift, has_attr(p, attr_ablshift))
+ --end
head = node_insert_after(head, p, g)
head = node_remove(head, p)
node_free(p); p = g
@@ -206,86 +223,12 @@ end
luatexbase.add_to_callback("luatexja.find_char_class",
cid_set_char_class, "ltj.otf.find_char_class", 1)
--------------------- IVS
-local enable_ivs, disable_ivs
-do
- local is_ivs_enabled = false
--- 組版時
- local function ivs_jglyph(char, bp, pf, uid)
- local p = node_new(id_whatsit,sid_user)
- setfield(p, 'user_id', uid)
- setfield(p, 'type', 100)
- setfield(p, 'value', char)
- return p
- end
-
- local function do_ivs_repr(h)
- local head = to_direct(h)
- local p, r = head
- local is_dir_tate = (ltjs.list_dir == dir_tate)
- local attr_ablshift = is_dir_tate and attr_tablshift or attr_yablshift
- local attr_kblshift = is_dir_tate and attr_tkblshift or attr_ykblshift
- local attr_curfnt = is_dir_tate and attr_curtfnt or attr_curjfnt
- while p do
- local pid = getid(p)
- if pid==id_glyph then
- local q = node_next(p) -- the next node of p
- if q and getid(q)==id_glyph then
- local qc = getchar(q)
- if (qc>=0xFE00 and qc<=0xFE0F) or (qc>=0xE0100 and qc<0xE01F0) then
- -- q is a variation selector
- if qc>=0xE0100 then qc = qc - 0xE0100 end
- local pf = getfont(p)
- local pt = ltjf_font_extra_info[pf]
- pt = pt and pt[getchar(p)]; pt = pt and pt[qc]
- head, r = node_remove(head,q)
- node_free(q)
- if pt then
- local is_jachar = (getfield(p, 'lang')==lang_ja)
- local np = ivs_jglyph(pt, p, pf,
- is_jachar and OTF or VSR)
- if is_jachar then
- set_attr(np, attr_curfnt, pf)
- set_attr(np, attr_kblshift, has_attr(p, attr_kblshift))
- end
- head = node_insert_after(head, p, np)
- head = node_remove(head,p)
- node_free(p)
- end
- p = r
- else
- p = q
- end
- else
- p = node_next(p)
- end
- else
- p = node_next(p)
- end
- end
- return to_node(head)
- end
-
- enable_ivs = function ()
- if is_ivs_enabled then
- ltjb.package_warning('luatexja-otf',
- 'luatexja.otf.enable_ivs() was already called, so this call is ignored', '')
- else
- ltjb.add_to_callback('hpack_filter', do_ivs_repr, 'ltj.do_ivs',
- luatexbase.priority_in_callback('hpack_filter', 'luaotfload.node_processor'))
- ltjb.add_to_callback('pre_linebreak_filter', do_ivs_repr, 'ltj.do_ivs',
- luatexbase.priority_in_callback('pre_linebreak_filter', 'luaotfload.node_processor'))
- is_ivs_enabled = true
- end
- end
- disable_ivs = function ()
- if is_ivs_enabled then
- luatexbase.remove_from_callback('hpack_filter', 'ltj.do_ivs')
- luatexbase.remove_from_callback('pre_linebreak_filter', 'ltj.do_ivs')
- is_ivs_enabled = false
- end
- end
+--IVS
+local function enable_ivs()
+ ltjb.package_warning('luatexja-otf',
+ 'luatexja.otf.enable_ivs() has now no effect.')
end
+local disable_ivs = enable_ivs
luatexja.otf = {
append_jglyph = append_jglyph,
@@ -294,4 +237,5 @@ luatexja.otf = {
cid = cid,
}
+
-- EOF