luatexja.load_module('base'); local ltjb = luatexja.base
luatexja.load_module('charrange'); local ltjc = luatexja.charrange
-local mem_leak_glue, mem_leak_gs, mem_leak_kern = 0, 0, 0
local Dnode = node.direct or node
local t = token.get_next()
cstemp=token.csname_name(t)
global_flag = g and '\\global' or ''
- tex.sprint(cat_lp, '\\expandafter\\font\\csname ' .. cstemp .. '\\endcsname')
+ tex.sprint(cat_lp, '\\expandafter\\font\\csname ', 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
- .. '\\endcsname=\\relax')
+ tex.sprint(cat_lp, global_flag, '\\expandafter\\let\\csname ', cstemp,
+ '\\endcsname=\\relax')
return
end
update_jfm_cache(j, f.size)
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'
- .. (dir == 'yoko' and 'j' or 't') .. 'fnt=' .. fn .. '\\relax}')
+ tex.sprint(cat_lp, global_flag, '\\protected\\expandafter\\def\\csname ',
+ cstemp , '\\endcsname{\\ltj@cur'..
+ (dir == 'yoko' and 'j' or 't') .. 'fnt', fn, '\\relax}')
end
end
do
-- extract jfm_file_name and jfm_var
+ -- normalize position of 'jfm=' and 'jfmvar=' keys
local function extract_metric(name)
- local basename=name
- local tmp = utf.sub(basename, 1, 5)
jfm_file_name = ''; jfm_var = ''
+ local tmp, index = name:sub(1, 5), 1
if tmp == 'file:' or tmp == 'name:' or tmp == 'psft:' then
- basename = utf.sub(basename, 6)
+ index = 6
end
- local p = utf.find(basename, ":")
- if p then
- basename = utf.sub(basename, p+1)
- else return
+ local p = name:find(":", index); index = p and (p+1) or index
+ while index do
+ local l = name:len()+1
+ local q = name:find(";", index+1) or l
+ if name:sub(index, index+3)=='jfm=' and q>index+4 then
+ jfm_file_name = name:sub(index+4, q-1)
+ if l~=q then
+ name = name:sub(1,index-1) .. name:sub(q+1)
+ else
+ name = name:sub(1,index-1)
+ index = nil
+ end
+ elseif name:sub(index, index+6)=='jfmvar=' and q>index+6 then
+ jfm_var = name:sub(index+7, q-1)
+ if l~=q then
+ name = name:sub(1,index-1) .. name:sub(q+1)
+ else
+ name = name:sub(1,index-1)
+ index = nil
+ end
+ else
+ index = (l~=q) and (q+1) or nil
+ end
end
- -- now basename contains 'features' only.
- p=1
- while p do
- local q = utf.find(basename, ";", p+1) or utf.len(basename)+1
- if utf.sub(basename, p, p+3)=='jfm=' and q>p+4 then
- jfm_file_name = utf.sub(basename, p+4, q-1)
- elseif utf.sub(basename, p, p+6)=='jfmvar=' and q>p+6 then
- jfm_var = utf.sub(basename, p+7, q-1)
+ if jfm_file_name~='' then
+ local l = name:sub(-1)
+ name = name
+ .. ((l==':' or l==';') and '' or ';')
+ .. 'jfm=' .. jfm_file_name
+ if jfm_var~='' then
+ name = name .. 'jfmvar=' .. jfm_var
end
- if utf.len(basename)+1==q then p = nil else p = q + 1 end
end
- return
+ return name
end
-
- -- replace fonts.define.read()
- luatexbase.add_to_callback('luatexja.define_font',
- function (res, name)
- extract_metric(name)
- end,
- 'extract_jfm_name', 1)
+ luatexja.jfont.extract_metric = extract_metric
end
------------------------------------------------------------------------