diff options
Diffstat (limited to 'Master/texmf-dist/source/jfontmaps/tools/mkmap.lua')
-rwxr-xr-x | Master/texmf-dist/source/jfontmaps/tools/mkmap.lua | 252 |
1 files changed, 252 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/jfontmaps/tools/mkmap.lua b/Master/texmf-dist/source/jfontmaps/tools/mkmap.lua new file mode 100755 index 00000000000..eed45704de6 --- /dev/null +++ b/Master/texmf-dist/source/jfontmaps/tools/mkmap.lua @@ -0,0 +1,252 @@ +#! /usr/bin/env texlua + +-- '!' は 'Pro' 等に置換される +local foundry = { + ['noEmbed'] = { + ml='!Ryumin-Light', + mr='!Ryumin-Light', + mb='!Ryumin-Light,Bold', + gr='!GothicBBB-Medium', + gru='!GothicBBB-Medium', + gb='!GothicBBB-Medium,Bold', + ge='!GothicBBB-Medium,Bold', + mgr='!GothicBBB-Medium', + {'n'}, + }, + ['ms'] = { + noncid = true, + ml=':0:msmincho.ttc', mr=':0:msmincho.ttc', mb=':0:msmincho.ttc', + gr=':0:msgothic.ttc', gru=':0:msgothic.ttc', gb=':0:msgothic.ttc', ge=':0:msgothic.ttc', + mgr=':0:msgothic.ttc', + {''}, + }, + ['ipa'] = { + noncid = true, + ml='ipam.ttf', mr='ipam.ttf', mb='ipam.ttf', + gr='ipag.ttf', gru='ipag.ttf', gb='ipag.ttf', ge='ipag.ttf', + mgr='ipag.ttf', + {''}, + }, + ['ipaex'] = { + noncid = true, + ml='ipaexm.ttf', mr='ipaexm.ttf', mb='ipaexm.ttf', + gr='ipaexg.ttf', gru='ipaexg.ttf', gb='ipaexg.ttf', ge='ipaexg.ttf', + mgr='ipaexg.ttf', + {''}, + }, + ['kozuka'] = { + ml='KozMin!-Light.otf', + mr='KozMin!-Regular.otf', + mb='KozMin!-Bold.otf', + gr='KozGo!-Regular.otf', + gru='KozGo!-Medium.otf', + gb='KozGo!-Bold.otf', + ge='KozGo!-Heavy.otf', + mgr='KozGo!-Heavy.otf', + {'4','6','6n'}, -- Pro, Pr6 and Pr6N + }, + ['morisawa'] = { + ml='A-OTF-Ryumin!-Light.otf', + mr='A-OTF-Ryumin!-Light.otf', + mb='A-OTF-FutoMinA101!-Bold.otf', + gr='A-OTF-GothicBBB!-Medium.otf', + gru='A-OTF-GothicBBB!-Medium.otf', + gb='A-OTF-FutoGoB101!-Bold.otf', + ge='A-OTF-MidashiGo!-MB31.otf', + mgr='A-OTF-Jun101!-Light.otf', + {'4','6n'}, -- Pro and Pr6N + }, + ['hiragino'] = { + ml='HiraMin!-W2.otf', + mr='HiraMin!-W3.otf', + mb='HiraMin!-W6.otf', + gr='HiraKaku!-W3.otf', + gru='HiraKaku!-W6.otf', + gb='HiraKaku!-W6.otf', + ge='HiraKaku!-W8.otf', + mgr='HiraMaru!-W4.otf', + {'X','Xn'}, -- Pro and ProN + }, +} + +local suffix = { + -- { '!' 置換, kanjiEmbed 接尾辞 } + [''] = {'', ''}, -- 非 CID フォント用ダミー + ['n'] = {'!', ''}, -- 非埋め込みに使用 + ['4'] = {'Pro', ''}, + ['6'] = {'Pr6', '-pr6'}, + ['X'] = {'Pro', ''}, -- ヒラギノ基本6書体パック + ['Xn'] = {'ProN', '-pron'}, -- ヒラギノ基本6書体パック + ['6n'] = {'Pr6N','-pr6n'}, +} + +-- '#' は 'h', 'v' に置換される +-- '@' は kanjiEmbed の値に置換される +local maps = { + ['ptex-@'] = { -- pTeX 90JIS + {'rml', 'H', 'mr'}, + {'rmlv', 'V', 'mr'}, + {'gbm', 'H', 'gru'}, + {'gbmv', 'V', 'gru'}, + }, + ['ptex-@-04'] = { -- pTeX JIS04 + {'rml', '2004-H', 'mr'}, + {'rmlv', '2004-V', 'mr'}, + {'gbm', '2004-H', 'gru'}, + {'gbmv', '2004-V', 'gru'}, + }, + ['uptex-@'] = { -- upTeX 90JIS + {'urml', 'UniJIS-UTF16-H', 'mr'}, + {'urmlv', 'UniJIS-UTF16-V', 'mr'}, + {'ugbm', 'UniJIS-UTF16-H', 'gru'}, + {'ugbmv', 'UniJIS-UTF16-V', 'gru'}, + {'uprml-#', 'UniJIS-UTF16-#', 'mr'}, + {'upgbm-#', 'UniJIS-UTF16-#', 'gru'}, + {'uprml-hq','UniJIS-UCS2-H', 'mr'}, + {'upgbm-hq','UniJIS-UCS2-H', 'gru'}, + }, + ['uptex-@-04'] = { -- upTeX JIS04 + {'urml', 'UniJIS2004-UTF16-H', 'mr'}, + {'urmlv', 'UniJIS2004-UTF16-V', 'mr'}, + {'ugbm', 'UniJIS2004-UTF16-H', 'gru'}, + {'ugbmv', 'UniJIS2004-UTF16-V', 'gru'}, + {'uprml-#', 'UniJIS2004-UTF16-#', 'mr'}, + {'upgbm-#', 'UniJIS2004-UTF16-#', 'gru'}, + {'uprml-hq','UniJIS-UCS2-H', 'mr'}, + {'upgbm-hq','UniJIS-UCS2-H', 'gru'}, + }, + ['otf-@'] = { + '% TEXT, 90JIS', + {'hminl-#', '#', 'ml'}, + {'hminr-#', '#', 'mr'}, + {'hminb-#', '#', 'mb'}, + {'hgothr-#', '#', 'gr'}, + {'hgothb-#', '#', 'gb'}, + {'hgotheb-#','#', 'ge'}, + {'hmgothr-#','#', 'mgr'}, + '% TEXT, JIS04', + {'hminln-#', '#', 'ml'}, + {'hminrn-#', '#', 'mr'}, + {'hminbn-#', '#', 'mb'}, + {'hgothrn-#', '#', 'gr'}, + {'hgothbn-#', '#', 'gb'}, + {'hgothebn-#','#', 'ge'}, + {'hmgothrn-#','#', 'mgr'}, + '% CID', + {'otf-cjml-#', 'Identity-#', 'ml'}, + {'otf-cjmr-#', 'Identity-#', 'mr'}, + {'otf-cjmb-#', 'Identity-#', 'mb'}, + {'otf-cjgr-#', 'Identity-#', 'gr'}, + {'otf-cjgb-#', 'Identity-#', 'gb'}, + {'otf-cjge-#', 'Identity-#', 'ge'}, + {'otf-cjmgr-#','Identity-#', 'mgr'}, + '% Unicode 90JIS', + {'otf-ujml-#', 'UniJIS-UTF16-#', 'ml'}, + {'otf-ujmr-#', 'UniJIS-UTF16-#', 'mr'}, + {'otf-ujmb-#', 'UniJIS-UTF16-#', 'mb'}, + {'otf-ujgr-#', 'UniJIS-UTF16-#', 'gr'}, + {'otf-ujgb-#', 'UniJIS-UTF16-#', 'gb'}, + {'otf-ujge-#', 'UniJIS-UTF16-#', 'ge'}, + {'otf-ujmgr-#','UniJIS-UTF16-#', 'mgr'}, + '% Unicode JIS04', + {'otf-ujmln-#', 'UniJIS2004-UTF16-#', 'ml'}, + {'otf-ujmrn-#', 'UniJIS2004-UTF16-#', 'mr'}, + {'otf-ujmbn-#', 'UniJIS2004-UTF16-#', 'mb'}, + {'otf-ujgrn-#', 'UniJIS2004-UTF16-#', 'gr'}, + {'otf-ujgbn-#', 'UniJIS2004-UTF16-#', 'gb'}, + {'otf-ujgen-#', 'UniJIS2004-UTF16-#', 'ge'}, + {'otf-ujmgrn-#','UniJIS2004-UTF16-#', 'mgr'}, + }, + ['otf-up-@'] = { + '% TEXT, 90JIS', + {'uphminl-#', 'UniJIS-UTF16-#', 'ml'}, + {'uphminr-#', 'UniJIS-UTF16-#', 'mr'}, + {'uphminb-#', 'UniJIS-UTF16-#', 'mb'}, + {'uphgothr-#', 'UniJIS-UTF16-#', 'gr'}, + {'uphgothb-#', 'UniJIS-UTF16-#', 'gb'}, + {'uphgotheb-#','UniJIS-UTF16-#', 'ge'}, + {'uphmgothr-#','UniJIS-UTF16-#', 'mgr'}, + --'% TEXT, JIS04 (not yet)', + --{'uphminln-#', 'UniJIS2004-UTF16-#', 'ml'}, + --{'uphminrn-#', 'UniJIS2004-UTF16-#', 'mr'}, + --{'uphminbn-#', 'UniJIS2004-UTF16-#', 'mb'}, + --{'uphgothrn-#', 'UniJIS2004-UTF16-#', 'gr'}, + --{'uphgothbn-#', 'UniJIS2004-UTF16-#', 'gb'}, + --{'uphgothebn-#','UniJIS2004-UTF16-#', 'ge'}, + --{'uphmgothrn-#','UniJIS2004-UTF16-#', 'mgr'}, + }, +} + +local jis2004_flag = 'n' +local gsub = string.gsub + +local function ret_suffix(fd, s, fa) + if fd=='kozuka' and s=='6' then + return 'ProVI' -- 小塚だけ特別 + elseif fd=='hiragino' then + if string.match(s, jis2004_flag) then + return (fa=='ge') and 'StdN' or suffix[s][1] + else + return (fa=='ge') and 'Std' or suffix[s][1] + end + -- ヒラギノ角ゴ W8 は StdN/Std しかない + else + return suffix[s][1] + end +end + +local function make_one_line(o, fd, s) + if type(o) == 'string' then + return '\n' .. o .. '\n' + else + local fx = foundry[fd] + local fn = gsub(fx[o[3]], '!', ret_suffix(fd,s,o[3])) + if fx.noncid and string.match(o[2],'Identity') then + fn = fn .. '/AJ16' + end + if string.match(o[1], '#') then -- 'H', 'V' 一括出力 + return gsub(o[1], '#', 'h') .. '\t' .. gsub(o[2], '#', 'H') .. '\t' .. fn .. '\n' + .. gsub(o[1], '#', 'v') .. '\t' .. gsub(o[2], '#', 'V') .. '\t' .. fn .. '\n' + else + return o[1] .. '\t' .. o[2] .. '\t' .. fn .. '\n' + end + end +end + +for fd, v1 in pairs(foundry) do + for _,s in pairs(v1[1]) do + local dirname = fd .. suffix[s][2] + print('kanjiEmbed: ' .. dirname) + -- Linux しか想定していない + os.execute('mkdir ' .. dirname .. ' &>/dev/null') + for mnx, mcont in pairs(maps) do + --if not string.match(mnx, '-04') or string.match(s, jis2004_flag) then + if not string.match(mnx, '-04') or not foundry[fd].noncid then + local mapbase = gsub(mnx, '@', dirname) + local f = io.open(dirname .. '/' .. mapbase .. '.map', 'w+') + for _,x in ipairs(mcont) do + f:write(make_one_line(x, fd, s)) + end + if string.match(mapbase,'otf%-hiragino') then + print(' hiraprop: ' .. mapbase) + local v2 = gsub([[ + +% hiraprop +hiramin-w3-h Identity-H HiraMin!-W3 +hiramin-w6-h Identity-H HiraMin!-W6 +hirakaku-w3-h Identity-H HiraKaku!-W3 +hirakaku-w6-h Identity-H HiraKaku!-W6 +hiramaru-w4-h Identity-H HiraMaru!-W4 +hiramin-w3-v Identity-V HiraMin!-W3 +hiramin-w6-v Identity-V HiraMin!-W6 +hirakaku-w3-v Identity-V HiraKaku!-W3 +hirakaku-w6-v Identity-V HiraKaku!-W6 +hiramaru-w4-v Identity-V HiraMaru!-W4 +]],'!', ret_suffix('hiragino', s, '')) + f:write(v2) + end + f:close() + end + end + end +end |