--
luatexbase.provides_module({
name = 'luatexja.jfont',
- date = '2014/01/02',
+ date = '2014/02/01',
description = 'Loader for Japanese fonts',
})
module('luatexja.jfont', package.seeall)
t.chars = metrics[j].chars
t.char_type = mult_table(metrics[j].char_type, sz)
for i,v in pairs(t.char_type) do
+ v.align = (v.align=='left') and 0 or
+ ((v.align=='right') and 1 or 0.5)
if type(i) == 'number' then -- char_type
for k,w in pairs(v.glue) do
local h = node_new(id_glue_spec)
end
do
--- EXT: zw, zh
- function load_zw()
+ -- PUBLIC function
+ function get_zw()
local a = font_metric_table[tex.attribute[attr_curjfnt]]
- tex.setdimen('ltj@zw', a and a.zw or 0)
+ return a and a.zw or 0
end
-
- function load_zh()
+ function get_zh()
local a = font_metric_table[tex.attribute[attr_curjfnt]]
- tex.setdimen('ltj@zh', a and a.zh or 0)
+ return a and a.zw or 0
end
end
end
------------------------------------------------------------------------
+-- LATEX INTERFACE
+------------------------------------------------------------------------
+do
+ -- these function are called from ltj-latex.sty
+ local kyenc_list, ktenc_list = {}, {}
+ function add_kyenc_list(enc) kyenc_list[enc] = 'true ' end
+ function add_ktenc_list(enc) ktenc_list[enc] = 'true ' end
+ function is_kyenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+ end
+ function is_kyenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if' .. (kyenc_list[enc] or 'false '))
+ end
+ function is_kenc(enc)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (kyenc_list[enc] or ktenc_list[enc] or 'false '))
+ end
+
+ local kfam_list, Nkfam_list = {}, {}
+ function add_kfam_list(enc, fam)
+ if not kfam_list[enc] then kfam_list[enc] = {} end
+ kfam_list[enc][fam] = 'true '
+ end
+ function add_Nkfam_list(enc, fam)
+ if not Nkfam_list[enc] then Nkfam_list[enc] = {} end
+ Nkfam_list[enc][fam] = 'true '
+ end
+ function is_kfam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (kfam_list[enc] and kfam_list[enc][fam] or 'false ')) end
+ function is_Nkfam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (Nkfam_list[enc] and Nkfam_list[enc][fam] or 'false ')) end
+
+ local ffam_list, Nffam_list = {}, {}
+ function add_ffam_list(enc, fam)
+ if not ffam_list[enc] then ffam_list[enc] = {} end
+ ffam_list[enc][fam] = 'true '
+ end
+ function add_Nffam_list(enc, fam)
+ if not Nffam_list[enc] then Nffam_list[enc] = {} end
+ Nffam_list[enc][fam] = 'true '
+ end
+ function is_ffam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (ffam_list[enc] and ffam_list[enc][fam] or 'false ')) end
+ function is_Nffam(enc, fam)
+ tex.sprint(cat_lp, '\\let\\ifin@\\if'
+ .. (Nffam_list[enc] and Nffam_list[enc][fam] or 'false ')) end
+end
+------------------------------------------------------------------------
-- ALTERNATE FONTS
------------------------------------------------------------------------
alt_font_table = {}
------ used in ltjp.suppress_hyphenate_ja callback
function replace_altfont(pf, pc)
- return (alt_font_table[pf] and alt_font_table[pf][pc])
- and alt_font_table[pf][pc] or pf
+ local a = alt_font_table[pf]
+ return a and a[pc] or pf
end
------ for LaTeX interface
-- ここから先は 新 \selectfont の内部でしか実行されない
do
local alt_font_base, alt_font_base_num
-
--- EXT
- function print_aftl_address(bbase)
- local t = alt_font_table_latex[bbase]
- if not t then t = {}; alt_font_table_latex[bbase] = t end
- tex.sprint(cat_lp, (tostring(t):gsub('table: ','ltjaltfont')))
+ local aftl_base
+ -- EXT
+ function does_alt_set(bbase)
+ aftl_base = alt_font_table_latex[bbase]
+ tex.sprint(cat_lp, '\\if' .. (aftl_base and 'true' or 'false'))
+ end
+ -- EXT
+ function print_aftl_address()
+ tex.sprint(cat_lp, ';ltjaltfont' .. tostring(aftl_base):sub(8))
end
+
-- EXT
function output_alt_font_cmd(bbase)
alt_font_base = bbase
alt_font_base_num = tex.getattribute(attr_curjfnt)
local t = alt_font_table[alt_font_base_num]
if t then
- for i,_ in pairs(t) do t[i]=nil end
+ for i,_ in pairs(t) do t[i]=nil end
end
t = alt_font_table_latex[bbase]
if t then
- for i,_ in pairs(t) do
- tex.sprint(cat_lp, '\\ltj@pickup@altfont@aux{' .. i .. '}')
- end
+ for i,_ in pairs(t) do
+ tex.sprint(cat_lp, '\\ltj@pickup@altfont@aux{' .. i .. '}')
+ end
end
end
function pickup_alt_font_a(size_str)
local t = alt_font_table_latex[alt_font_base]
if t then
- for i,v in pairs(t) do
- tex.sprint(cat_lp, '\\expandafter\\ltj@pickup@altfont@copy'
- .. '\\csname ' .. i .. '/' .. size_str .. '\\endcsname{' .. i .. '}')
- end
+ for i,v in pairs(t) do
+ tex.sprint(cat_lp, '\\expandafter\\ltj@pickup@altfont@copy'
+ .. '\\csname ' .. i .. '/' .. size_str .. '\\endcsname{' .. i .. '}')
+ end
end
- end
+ end
local function pickup_alt_font_class(class, afnt_num, afnt_chars)
local t = alt_font_table[alt_font_base_num]
local tx = font_metric_table[alt_font_base_num].chars
for i,v in pairs(tx) do
- if v==class and afnt_chars[i] then t[i]=afnt_num end
+ if v==class and afnt_chars[i] then t[i]=afnt_num end
end
end
local ac = font_getfont(afnt_num).characters
if not t then t = {}; alt_font_table[alt_font_base_num] = t end
for i,v in pairs(alt_font_table_latex[alt_font_base]) do
- if i == afnt_base then
- for j,_ in pairs(v) do
- if j>=0 then
- if ac[j] then t[j]=afnt_num end
- else -- -n (n>=1) means that the character class n,
- -- which is defined in the JFM
- pickup_alt_font_class(-j, afnt_num, ac)
- end
- end
- return
- end
+ if i == afnt_base then
+ for j,_ in pairs(v) do
+ if j>=0 then
+ if ac[j] then t[j]=afnt_num end
+ else -- -n (n>=1) means that the character class n,
+ -- which is defined in the JFM
+ pickup_alt_font_class(-j, afnt_num, ac)
+ end
+ end
+ return
+ end
end
end