Skip to content

Instantly share code, notes, and snippets.

@dohyunkim
Last active July 15, 2016 01:53
Show Gist options
  • Select an option

  • Save dohyunkim/b00031111bea97e5d02d8300b8185892 to your computer and use it in GitHub Desktop.

Select an option

Save dohyunkim/b00031111bea97e5d02d8300b8185892 to your computer and use it in GitHub Desktop.
nanum unicode virtual font for luatex
local T1toUni = {
-- removed [0] = 0x0060,
-- changed 0x27 from 0x2019
-- changed 0x60 from 0x2018
-- changed 0x18 nil to 0x2030
0x00B4, 0x02C6, 0x02DC, 0x00A8, 0x02DD, 0x02DA, 0x02C7,
0x02D8, 0x00AF, 0x02D9, 0x00B8, 0x02DB, 0x201A, 0x2039, 0x203A,
0x201C, 0x201D, 0x201E, 0x00AB, 0x00BB, 0x2013, 0x2014, 0x200B,
0x2030, 0x0131, 0x0237, 0xFB00, 0xFB01, 0xFB02, 0xFB03, 0xFB04,
0x2423, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F,
0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F,
0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F,
0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F,
0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F,
0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x002D,
0x0102, 0x0104, 0x0106, 0x010C, 0x010E, 0x011A, 0x0118, 0x011E,
0x0139, 0x013D, 0x0141, 0x0143, 0x0147, 0x014A, 0x0150, 0x0154,
0x0158, 0x015A, 0x0160, 0x015E, 0x0164, 0x0162, 0x0170, 0x016E,
0x0178, 0x0179, 0x017D, 0x017B, 0x0132, 0x0130, 0x0111, 0x00A7,
0x0103, 0x0105, 0x0107, 0x010D, 0x010F, 0x011B, 0x0119, 0x011F,
0x013A, 0x013E, 0x0142, 0x0144, 0x0148, 0x014B, 0x0151, 0x0155,
0x0159, 0x015B, 0x0161, 0x015F, 0x0165, 0x0163, 0x0171, 0x016F,
0x00FF, 0x017A, 0x017E, 0x017C, 0x0133, 0x00A1, 0x00BF, 0x00A3,
0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7,
0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF,
0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0152,
0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x1E9E,
0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF,
0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x0153,
0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00DF,
}
return function (spec)
local prefix = spec.features.normal.prefix
local size = spec.size
local data = {
name = spec.specification,
type = "virtual",
fonts = {},
characters = {},
}
local fonts = data.fonts
local chars = data.characters
local name = "t1"..prefix
if kpse.find_file(name,"tfm") then
local tfm = font.read_tfm(name, size)
data.parameters = tfm.parameters
fonts[#fonts+1] = { name=name, size=size }
local fid = #fonts
for i,v in pairs(tfm.characters) do
local slot = T1toUni[i]
if slot then
chars[slot] = v
chars[slot].commands = { { "slot", fid, i } }
if v.ligatures then
local t = chars[slot].ligatures
for ii,vv in pairs(v.ligatures) do
t[T1toUni[ii]] = { char = T1toUni[vv.char], type = vv.type }
end
end
if v.kerns then
local t = chars[slot].kerns
for ii,vv in pairs(v.kerns) do
t[T1toUni[ii]] = vv
end
end
end
end
end
for index = 0, 255 do
local name = string.format(prefix.."%02x", index)
if kpse.find_file(name,"tfm") then
local tfm = font.read_tfm(name, size)
fonts[#fonts+1] = { name=name, size=size }
local fid = #fonts
local zro = 256 * index
for i,v in pairs(tfm.characters) do
local slot = zro + i
if not chars[slot] then
chars[slot] = v
chars[slot].commands = { { "slot", fid, i } }
end
end
end
end
return data
end
\RequirePackage{luaotfload}
\DeclareFontFamily{\f@encoding}{nanummj}{}
\DeclareFontShape {\f@encoding}{nanummj}{m}{n}{<->file:nanum-uni-vf.lua:prefix=nanummjm}{}
\DeclareFontShape {\f@encoding}{nanummj}{m}{sc}{<->file:nanum-uni-vf.lua:prefix=nanummjm}{}
\DeclareFontShape {\f@encoding}{nanummj}{m}{sl}{<->file:nanum-uni-vf.lua:prefix=nanummjmo}{}
\DeclareFontShape {\f@encoding}{nanummj}{m}{it}{<->file:nanum-uni-vf.lua:prefix=nanummjmo}{}
\DeclareFontShape {\f@encoding}{nanummj}{bx}{n}{<->file:nanum-uni-vf.lua:prefix=nanummjb}{}
\DeclareFontShape {\f@encoding}{nanummj}{bx}{sc}{<->file:nanum-uni-vf.lua:prefix=nanummjb}{}
\DeclareFontShape {\f@encoding}{nanummj}{bx}{sl}{<->file:nanum-uni-vf.lua:prefix=nanummjbo}{}
\DeclareFontShape {\f@encoding}{nanummj}{bx}{it}{<->file:nanum-uni-vf.lua:prefix=nanummjbo}{}
\DeclareFontFamily{\f@encoding}{nanumgt}{}
\DeclareFontShape {\f@encoding}{nanumgt}{m}{n}{<->file:nanum-uni-vf.lua:prefix=nanumgtm}{}
\DeclareFontShape {\f@encoding}{nanumgt}{m}{sc}{<->file:nanum-uni-vf.lua:prefix=nanumgtm}{}
\DeclareFontShape {\f@encoding}{nanumgt}{m}{sl}{<->file:nanum-uni-vf.lua:prefix=nanumgtmo}{}
\DeclareFontShape {\f@encoding}{nanumgt}{m}{it}{<->file:nanum-uni-vf.lua:prefix=nanumgtmo}{}
\DeclareFontShape {\f@encoding}{nanumgt}{bx}{n}{<->file:nanum-uni-vf.lua:prefix=nanumgtb}{}
\DeclareFontShape {\f@encoding}{nanumgt}{bx}{sc}{<->file:nanum-uni-vf.lua:prefix=nanumgtb}{}
\DeclareFontShape {\f@encoding}{nanumgt}{bx}{sl}{<->file:nanum-uni-vf.lua:prefix=nanumgtbo}{}
\DeclareFontShape {\f@encoding}{nanumgt}{bx}{it}{<->file:nanum-uni-vf.lua:prefix=nanumgtbo}{}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment