From ba9845b7c34e114ddd122adaf9264bbd8da41fe0 Mon Sep 17 00:00:00 2001
From: Will Robertson <wspr81@gmail.com>
Date: Sat, 5 Jun 2010 16:37:07 +0930
Subject: add \fontdimen8 support from Khaled

closes #7
---
 luaotfload.dtx | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

(limited to 'luaotfload.dtx')

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
-- 
cgit v1.2.3

