From f4a1b50c01c511bb4deb382f81d3b8f633bce4d0 Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Sat, 5 Jun 2010 23:09:05 +0300 Subject: Suffle the code around to actually work --- luaotfload.dtx | 70 +++++++++++++++++++++++++++------------------------------- 1 file changed, 33 insertions(+), 37 deletions(-) diff --git a/luaotfload.dtx b/luaotfload.dtx index 1e4e338..2be5db8 100644 --- a/luaotfload.dtx +++ b/luaotfload.dtx @@ -554,6 +554,38 @@ luaotfload.loadmodule('font-dum.lua') luaotfload.loadmodule('font-nms.lua') luaotfload.loadmodule('font-clr.lua') +% \end{macrocode} +% +% \subsection{Emulating font dimensions} +% +% And here add some code to emulate \XeTeX's \cs{fontdimen8}, +% which stores the caps-height of the font. (Cf.\ \cs{fontdimen5} which +% stores the x-height.) +% +% Falls back to measuring the glyph if the font doesn't contain the +% necessary information. +% This needs to be extended for fonts that don't contain an `X'. +% +% \begin{macrocode} +local function def_font(...) + local fontdata = fonts.define.read(...) + if fontdata then + local units = fontdata.units + local size = fontdata.size + local otfdata = fontdata.shared.otfdata + + local capheight = otfdata.pfminfo.os2_capheight + + local dimen8 = capheight/units*size + + if capheight <= 0 then + dimen8 = fontdata.characters[string.byte("X")].height + end + + fontdata.parameters[8] = dimen8 + end + return fontdata +end % \end{macrocode} % % \subsection{\ConTeXt\ override} @@ -579,7 +611,7 @@ function luaotfload.register_callbacks() 'luaotfload.hpack_filter') luatexbase.reset_callback('define_font') luatexbase.add_to_callback('define_font', - fonts.define.read, + def_font, 'luaotfload.define_font', 1) luatexbase.add_to_callback('find_vf_file', fonts.vf.find, @@ -598,42 +630,6 @@ function luaotfload.unregister_callbacks() end % \end{macrocode} % -% \subsection{Emulating font dimensions} -% -% And here add some code to emulate \XeTeX's \cs{fontdimen8}, -% which stores the caps-height of the font. (Cf.\ \cs{fontdimen5} which -% stores the x-height.) -% -% Falls back to measuring the glyph if the font doesn't contain the -% necessary information. -% This needs to be extended for fonts that don't contain an `X'. -% -% \begin{macrocode} -local function def_font(...) - local fontdata = fonts.define.read(...) - if fontdata then - local units = fontdata.units - local size = fontdata.size - local otfdata = fontdata.shared.otfdata - - local capheight = otfdata.pfminfo.os2_capheight - - local dimen8 = capheight/units*size - - if capheight <= 0 then - dimen8 = fontdata.characters[string.byte("X")].height - end - - fontdata.parameters[8] = dimen8 - end - return fontdata -end -luatexbase.reset_callback('define_font') -luatexbase.add_to_callback('define_font', - def_font, - 'luaotfload.define_font', 1) -% \end{macrocode} -% % \iffalse % % \fi -- cgit v1.2.3