2 \documentclass{article}
4 \usepackage{luaotfload}
6 \font\a=file:AdobeMingStd-Light.otf
7 \font\b=file:AdobeMyungjoStd-Medium.otf
11 function table_search(tbl, name, prefix)
12 for i,x in pairs(tbl) do
13 if string.match(i, name) then
14 print('found: entry' .. prefix .. '.' .. i)
15 elseif type(x) == 'string' and string.match(x, name) then
16 print('found: entry' .. prefix .. '.' .. i .. ' = ' .. x)
17 elseif type(x) == 'table' then
18 table_search(x, name, prefix .. '.' .. i)
23 function mkrmlgbm(nonfilename,opfilename)
24 local fontdata = containers.read(fonts.otf.cache, string.lower(nonfilename))
26 -- from fonts.otf.otf_to_tfm()
28 fontdata.shared = fontdata.shared or {
33 tfmdata = fonts.otf.copy_to_tfm(fontdata)
34 tfmdata.unique = tfmdata.unique or { }
35 tfmdata.shared = tfmdata.shared or { } -- combine
36 local shared = tfmdata.shared
37 shared.otfdata = fontdata
38 shared.features = features -- default
40 shared.processes = { }
41 tfmdata.luatex = fontdata.luatex
42 tfmdata.indices = fontdata.luatex.indices
43 tfmdata.unicodes = fontdata.luatex.unicodes
44 tfmdata.marks = fontdata.luatex.marks
45 tfmdata.originals = fontdata.luatex.originals
47 tfmdata.has_italic = fontdata.metadata.has_italic
48 if not tfmdata.language then tfmdata.language = 'dflt' end
49 if not tfmdata.script then tfmdata.script = 'dflt' end
50 _, shared.features = fonts.otf.set_features(tfmdata,fonts.define.check(features,fonts.otf.features.default))
52 -- from fonts.otf.read_from_open_type()
53 tfmdata = fonts.tfm.scale(tfmdata, 655360)
56 fontdata.subfonts = nil
57 fontdata.metadata = {}
59 fontdata.luatex.filename = 'dummy.otf'
60 fontdata.luatex.foundfilename = nil
64 fontdata.luatex.indices = nil
65 fontdata.luatex.unicodes = nil
66 fontdata.luatex.originals = nil
67 fontdata.luatex.tounicode = nil
69 tfmdata.descriptions = {}
76 tfmdata.embedding = 'no'
79 for k, v in pairs(tfmdata.characters) do
82 if v.width == 655360 then v.width = nil -- 全角
83 elseif v.width == 327680 then v.width = 327680 -- 半角
84 elseif v.width == 163840 then v.width = 163840 -- 1/4 角
85 elseif v.width == 218234.88 then v.width = 218234.88 -- 1/3 角
86 elseif k>=128 then v.width = nil
90 if fontdata then -- remove gpos data
91 local tmpt = fontdata.shared.featuredata
94 tmpt.gpos_reversecontextchain = {}
95 tmpt.gpos_contextchain = {}
96 tmpt.gpos_cursive = {}
97 tmpt.gpos_mark2base = {}
98 tmpt.gpos_mark2ligature = {}
99 tmpt.gpos_mark2mark = {}
100 shared.otfdata.luatex.features.gpos = nil
101 for i,x in pairs(tfmdata.shared.otfdata.luatex.sequences) do
102 if string.match(x.type,'gpos') then x.subtables = {} end
104 -- Following features use proportional glyphs, so remove them.
105 shared.otfdata.luatex.features.gsub.pwid = nil
106 shared.otfdata.luatex.features.gsub.pkna = nil
107 shared.otfdata.luatex.features.gsub.palt = nil
111 if fontdata.pfminfo then
112 fontdata.pfminfo.os2_capheight = 0
114 table.tofile(opfilename, tfmdata, 'return', false, true, false)
116 mkrmlgbm('AdobeMingStd-Light', 'ltj-cid-adobe-cns1.lua')
117 mkrmlgbm('AdobeSongStd-Light', 'ltj-cid-adobe-gb1.lua')
118 mkrmlgbm('KozMinPr6N-Regular', 'ltj-cid-adobe-japan1.lua')
119 mkrmlgbm('AdobeMyungjoStd-Medium', 'ltj-cid-adobe-korea1.lua')