--------------------- IVS
-local enable_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(head)
- head = to_direct(head)
- 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 pf = getfont(p)
- 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 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
- luatexbase.add_to_callback('hpack_filter',
- do_ivs_repr,'do_ivs',
- luatexbase.priority_in_callback('hpack_filter',
- 'ltj.hpack_filter_pre')+1)
- luatexbase.add_to_callback('pre_linebreak_filter',
- do_ivs_repr, 'do_ivs',
- luatexbase.priority_in_callback('pre_linebreak_filter',
- 'ltj.pre_linebreak_filter_pre')+1)
- is_ivs_enabled = true
- end
- end