-- Copyright (C) 2012--2016 by Leo Liu <
[email protected]>
-----------------------------------------------------------------------------
-- This work may be distributed and/or modified under the
-- conditions of the LaTeX Project Public License, either version 1.3
-- of this license or (at your option) any later version.
-- The latest version of this license is in
--
http://www.latex-project.org/lppl.txt
-- and version 1.3 or later is part of all distributions of LaTeX
-- version 2005/12/01 or later.
--
-- This work has the LPPL maintenance status `maintained'.
--
-- The Current Maintainer of this work is Leo Liu.
--
-- This work consists of the files zhmCJK.dtx,
-- zhmCJK.ins,
-- zhmCJK.lua,
-- zhmCJK-addmap.pl,
-- and the derived files zhmCJK.sty,
-- zhmCJK.pdf,
-- zhmCJK-test.tex,
-- README, (from zhmCJK.dtx)
-- zhmCJK.map,
-- texfonts.map.template,
-- zhmCJK.tfm,
-- miktex-tfm/zhm*/zhm**.tfm. (from zhmCJK.lua)
--
-----------------------------------------------------------------------------
-- This lua script is used to generate zhm*.tfm and zhmCJK.map.
--
-- Usage:
--
-- texlua zhmCJK.lua map
--
-- or (for MiKTeX only)
--
-- texlua zhmCJK.lua nomap
--
------------------------
-- OS dependent settings
------------------------
if os.type == "unix" then
path_slash = "/"
else
path_slash = "\\"
end
---------------
-- Generate TFM
---------------
pl_template = {
char = [[
(CHARACTER D %d
(CHARWD R 1.0)
(CHARHT R 0.8)
(CHARDP R 0.1)
)
]],
header = [[
(FAMILY %s)
(CODINGSCHEME CJK-UNICODE)
(DESIGNSIZE R 10.0)
(HEADER D 18 H 43726561)
(HEADER D 19 H 74656420)
(HEADER D 20 H 62792060)
(HEADER D 21 H 7A686D43)
(HEADER D 22 H 4A4B2E6C)
(HEADER D 23 H 7561272E)
(HEADER D 24 H 20436F70)
(HEADER D 25 H 79726967)
(HEADER D 26 H 68742028)
(HEADER D 27 H 43292032)
(HEADER D 28 H 30313220)
(HEADER D 29 H 6279204C)
(HEADER D 30 H 656F204C)
(HEADER D 31 H 6975203C)
(HEADER D 32 H 6C656F6C)
(HEADER D 33 H 69752E70)
(HEADER D 34 H 6B754067)
(HEADER D 35 H 6D61696C)
(HEADER D 36 H 2E636F6D)
(HEADER D 37 H 3E0D0A00)
(CHECKSUM O 0)
(FONTDIMEN
(SLANT R %f)
(SPACE R 0.5)
(STRETCH R 0.3)
(SHRINK R 0.1)
(XHEIGHT R 0.4)
(QUAD R 1.0)
)
]],
-- charset = (defined below)
}
function pl_charset()
local charset = {}
for cid = 0, 0xff do
charset[#charset + 1] = string.format(pl_template.char, cid)
end
return table.concat(charset)
end
pl_template.charset = pl_charset()
function write_tfm(path, name, slant)
local fullname = path .. path_slash .. name
local s_pl = string.format(pl_template.header, string.upper(name), slant)
.. pl_template.charset
local f_pl = io.open(fullname .. ".pl", "w")
f_pl:write(s_pl)
f_pl:close()
os.execute([[pltotf "]] .. fullname .. [[.pl" "]] .. fullname .. [[.tfm"]])
os.remove(fullname .. ".pl")
end
---------------------------------------------
-- Main functions to generate necessary files
---------------------------------------------
-- For TeX Live and other TeX distributions where texfonts.map is supported,
-- we generate texfonts.map.template, zhmCJK.map, and zhmCJK.tfm.
function generate_with_fontmap()
local f_map = io.open("zhmCJK.map", "w")
for fam = 1, 32 do
for sid = 0, 0xff do
f_map:write(string.format("zhmCJK.tfm zhm%d%02x.tfm\n",
fam, sid))
end
end
f_map:write("\n")
f_map:close()
f_map = io.open("texfonts.map.template", "w")
f_map:write("include zhmCJK.map\n\n")
f_map:close()
write_tfm(".", "zhmCJK", 0.0)
end
-- For MiKTeX and other TeX distributions where texfonts.map is not supported,
-- we generate a lot of zhmXYY.tfm, where X from 1 to 32, Y from 0x00 to 0xff.
function generate_without_fontmap()
lfs.mkdir("miktex-tfm")
for fam = 1, 32 do
local path = string.format("miktex-tfm" .. path_slash .. "zhm%d", fam)
lfs.mkdir(path)
print(path)
for sid = 0, 0xff do
local name = string.format("zhm%d%02x", fam, sid)
write_tfm(path, name, 0.0)
end
end
end
-------------------------
-- Console User Interface
-------------------------
help_info = [[
Usage:
texlua ]].. arg[0] .. [[ map|nomap
map: Generate a public TFM shared by all CJK fonts with mapping files.
It is suggested for TeX Live and other web2c distributions.
nomap: Generate all TFM files for CJK fonts into "miktex-tfm" directory.
MiKTeX needs this since it does not support TFM mappings.
]]
if #arg ~= 1 then
print(help_info)
else
if arg[1] == "map" then
generate_with_fontmap()
elseif arg[1] == "nomap" then
generate_without_fontmap()
else
print("! Unknown option " .. arg[1])
print(help_info)
end
end
-- end of file zhmCJK.lua --
--
-----------------------------------------------------------------------------
--
-- The code is inspired by zhtfm.lua of zhmetrics bundle.
--
-- The zhmetrics bundle is distributed under LPPL 1.3 or later. The original
-- authors of zhtfm.lua are:
--
-- Lingyun Wu <
[email protected]>
-- zwhuang <
[email protected]>
--
-- For more information of zhmetrics, see the ctex-kit project:
--
--
https://github.com/CTeX-org/ctex-kit
--