% \section{Lua module}
%
%    \begin{macrocode}
%<*lua>
%    \end{macrocode}
%    \begin{macrocode}
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}
%</lua>
%    \end{macrocode}
