% \section{Lua module} % % \begin{macrocode} %<*lua> % \end{macrocode} % First we define some metadata. % \begin{macrocode} fontspec = fontspec or {} local fontspec = fontspec fontspec.module = { name = "fontspec", version = "2.5a", date = "2016/02/01", description = "Advanced font selection for LuaLaTeX.", author = "Khaled Hosny, Philipp Gesang, Will Robertson", copyright = "Khaled Hosny, Philipp Gesang, Will Robertson", license = "LPPL" } local err, warn, info, log = luatexbase.provides_module(fontspec.module) % \end{macrocode} % Some utility functions % \begin{macrocode} fontspec.log = log or (function (s) luatexbase.module_info("fontspec", s) end) fontspec.warning = warn or (function (s) luatexbase.module_warning("fontspec", s) end) fontspec.error = err or (function (s) luatexbase.module_error("fontspec", s) end) % \end{macrocode} % % We need a catcode table for tex.sprint(). See issue \#230. % \begin{macrocode} local latex if luatexbase.registernumber then latex = luatexbase.registernumber("catcodetable@latex") else latex = luatexbase.catcodetables.CatcodeTableLaTeX end % \end{macrocode} % % The following are the function that get called from \TeX\ end. % \begin{macrocode} local function tempswatrue() tex.sprint(latex,[[\FontspecSetCheckBoolTrue ]]) end local function tempswafalse() tex.sprint(latex,[[\FontspecSetCheckBoolFalse]]) end % \end{macrocode} % % \begin{macrocode} function fontspec.check_ot_script(fnt, script) if luaotfload.aux.provides_script(font.id(fnt), script) then tempswatrue() else tempswafalse() end end % \end{macrocode} % % \begin{macrocode} function fontspec.check_ot_lang(fnt, lang, script) if luaotfload.aux.provides_language(font.id(fnt), script, lang) then tempswatrue() else tempswafalse() end end % \end{macrocode} % % \begin{macrocode} function fontspec.check_ot_feat(fnt, feat, lang, script) for _, f in ipairs { "+trep", "+tlig", "+anum" } do if feat == f then tempswatrue() return end end if luaotfload.aux.provides_feature(font.id(fnt), script, lang, feat) then tempswatrue() else tempswafalse() end end % \end{macrocode} % % \begin{macrocode} function fontspec.mathfontdimen(fnt, str) local mathdimens = luaotfload.aux.get_math_dimension(fnt, str) if mathdimens then tex.sprint(mathdimens) tex.sprint("sp") else tex.sprint("0pt") end end % \end{macrocode} % % \begin{macrocode} % % \end{macrocode}