--
luatexbase.provides_module({
name = 'luatexja.jfont',
- date = '2015/02/08',
+ date = '2015/05/03',
description = 'Loader for Japanese fonts',
})
module('luatexja.jfont', package.seeall)
local id_glue = node.id('glue')
local cat_lp = luatexbase.catcodetables['latex-package']
local FROM_JFM = luatexja.icflag_table.FROM_JFM
-
+local tokenlib = luatexja.token
------------------------------------------------------------------------
-- LOADING JFM
------------------------------------------------------------------------
local jfm_file_name, jfm_var
local defjfm_res
-local jfm_dir, is_def_jfont
+local jfm_dir, is_def_jfont, is_vert_enabled
function define_jfm(t)
local real_char -- Does current character class have the 'real' character?
end
-- EXT
- function jfontdefX(g, dir)
+ local utf8 = unicode.utf8
+ function jfontdefX(g, dir, csname)
jfm_dir, is_def_jfont = dir, true
- local t = token.get_next()
- cstemp=token.csname_name(t)
+ cstemp = csname:sub( (utf8.byte(csname,1,1) == tex.escapechar) and 2 or 1, -1)
+ cstemp = cstemp:sub(1, ((cstemp:sub(-1,-1)==' ') and (cstemp:len()>=2)) and -2 or -1)
global_flag = g and '\\global' or ''
- tex.sprint(cat_lp, '\\expandafter\\font\\csname ', cstemp, '\\endcsname')
+ tex.sprint(cat_lp, '\\expandafter\\font\\csname ',
+ (cstemp==' ') and '\\space' or cstemp, '\\endcsname')
end
luatexbase.create_callback("luatexja.define_jfont", "data", function (ft, fn) return ft end)
"bad JFM `" .. jfm_file_name .. "'",
'The JFM file you specified is not valid JFM file.\n'..
'So defining Japanese font is cancelled.')
- tex.sprint(cat_lp, global_flag, '\\expandafter\\let\\csname ', cstemp,
+ tex.sprint(cat_lp, global_flag, '\\expandafter\\let\\csname ',
+ (cstemp==' ') and '\\space' or cstemp,
'\\endcsname=\\relax')
return
end
chars = sz.chars, char_type = sz.char_type,
kanjiskip = sz.kanjiskip, xkanjiskip = sz.xkanjiskip,
chars_cbcache = {},
+ vert_activated = is_vert_enabled,
}
fmtable = luatexbase.call_callback("luatexja.define_jfont", fmtable, fn)
font_metric_table[fn]=fmtable
tex.sprint(cat_lp, global_flag, '\\protected\\expandafter\\def\\csname ',
- cstemp , '\\endcsname{\\ltj@cur'..
+ (cstemp==' ') and '\\space' or cstemp, '\\endcsname{\\ltj@cur'..
(jfm_dir == 'yoko' and 'j' or 't') .. 'fnt', fn, '\\relax}')
end
end
end
end
if jfm_dir == 'tate' then
+ is_vert_enabled = (not name:match('-vert')) and (not name:match('-vrt2'))
if not name:match('vert') and not name:match('vrt2') then
name = name .. ';vert;vrt2'
end
+ else
+ is_vert_enabled = nil
end
return name
end
node_free(TEMP)
end
end
+
+------------------------------------------------------------------------
+-- VERT VARIANT TABLE
+------------------------------------------------------------------------
+vert_form_table = {
+ [0x2013]=0xFE32, [0x2014]=0xFE31, [0x2025]=0xFE30,
+ [0xFF08]=0xFE35, [0xFF09]=0xFE36, [0xFF5B]=0xFE37, [0xFF5D]=0xFE38,
+ [0x3014]=0xFE39, [0x3015]=0xFE3A, [0x3010]=0xFE3B, [0x3011]=0xFE3C,
+ [0x300A]=0xFE3D, [0x300B]=0xFE3E, [0x3008]=0xFE3F, [0x3009]=0xFE40,
+ [0x300C]=0xFE41, [0x300D]=0xFE42, [0x300E]=0xFE43, [0x300F]=0xFE44,
+ [0xFF3B]=0xFE47, [0xFF3D]=0xFE48, [0xFF3F]=0xFE33,
+}
+setmetatable(vert_form_table, {__index=function(t,k) return k end});
+