summaryrefslogtreecommitdiff
path: root/luaotfload.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'luaotfload.dtx')
-rw-r--r--luaotfload.dtx37
1 files changed, 37 insertions, 0 deletions
diff --git a/luaotfload.dtx b/luaotfload.dtx
index f4d39f6..1e4e338 100644
--- a/luaotfload.dtx
+++ b/luaotfload.dtx
@@ -597,6 +597,43 @@ function luaotfload.unregister_callbacks()
'luaotfload.find_vf_file')
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
%</lua>
% \fi