+ local feat_dummy_vert = { gsub={vert={dflt={dflt=true}}} }
+ local seq_dummy_vert={{
+ features={vert={dflt={dflt=true}}},
+ --flags={false,false,false,false},
+ --index=1, name="s_s_0", skiphash=false, steps={coverage={},index=1},
+ ["type"]="gsub_single", order='vert',
+ }}
+ make_cid_font = function ()
+ local kx = cid_replace[cid_name]
+ if not kx then return end
+ local k = {
+ cidinfo = { ordering=cid_order, registry=cid_reg, supplement=kx[3] },
+ encodingbytes = 2, extend=1000, format = 'opentype',
+ direction = 0, characters = {}, parameters = {
+ ascender = 655360*0.88,
+ descender = 655360*0.12,
+ },
+ embedding = "no", cache = "yes", factor = 0, hfactor = 0, vfactor = 0,
+ tounicode = 1,
+ properties = { language = "dflt", script = "dflt" },
+ }
+ cidfont_data[cid_name] = k
+
+ -- CID => Unicode 符号空間
+ local tth, cidmo = {}, {}
+ tt, cidm = tth, cidmo
+ for i = 0,kx[2] do cidm[i] = -1 end
+ open_cmap_file(kx[1] .. "-H", increment, tonumber, entry)
+ k.characters = tth
+
+ -- Unicode にマップされなかった文字の処理
+ -- これらは TrueType フォントを使って表示するときはおかしくなる
+ local ttu, pricode = {}, 0xF0000
+ for i,v in ipairs(cidmo) do
+ if v==-1 then
+ tth[pricode], cidmo[i], pricode
+ = { index = i }, pricode, pricode+1;
+ end
+ ttu[cid_order .. '.' .. i] = cidmo[i]
+ end
+
+ -- shared
+ k.shared = {
+ otfdata = {
+ cidinfo= k.cidinfo, verbose = false,
+ shared = { featuredata = {}, },
+ },
+ dynamics = {}, processes = {},
+ rawdata = {}, features={},
+ }
+ k.resources = {
+ unicodes = ttu,
+ features = feat_dummy_vert,
+ sequences = seq_dummy_vert,
+ }
+ k.descriptions = {}
+ k.shared.rawdata.resources=k.resources
+ k.shared.rawdata.descriptions=k.descriptions
+ cache_chars[cid_name] = { [655360] = k.characters }
+
+ -- 縦書用字形
+ tt, cidm = {}, {}
+ local ttv = {}; k.shared.ltj_vert_table = ttv
+ for i = 0,kx[2] do cidm[i] = -1 end
+ open_cmap_file(kx[1] .. "-V", increment, tonumber, entry)
+ for i,v in pairs(tt) do
+ ttv[i] = cidmo[v.index]
+ end
+
+ -- tounicode エントリ
+ local cidp = {nil, nil}; tt, ttu, cidm = {}, {}, {}
+ open_cmap_file(cid_name .. "-UCS2",
+ function(a)
+ a[2] = a[2] +1 ; return a
+ end,
+ function(a)
+ cidp[1] = string.upper(string.sub(a,1,string.len(a)-4))
+ cidp[2] = tonumber(string.sub(a,-4),16)
+ return cidp
+ end,
+ function(a) return a[1] ..string.format('%04X',a[2]) end)
+ -- tt は cid -> tounicode になっているので cidm -> tounicode に変換
+ local kxf = kx[4]
+ for i,v in ipairs(cidmo) do
+ k.characters[v].width = kxf(i)
+ if v>=0xF0000 then
+ k.characters[v].tounicode = tt[i]
+ end
+ end
+
+ -- Save
+ k.characters[46].width = math.floor(655360/14);
+ ltjb.save_cache( "ltj-cid-auto-" .. string.lower(cid_name),
+ {
+ version = cache_ver,
+ k,
+ })