% !Mode:: "TeX:DE:UTF-8:Main"

\documentclass[parskip=full]{scrartcl}

\usepackage{luacode}

%As a test I patch the FraktionNumeratorShift by a large value
% and add it to the luaotfload patch_font callback:
\begin{luacode}

local patch_texgyrepagellamath = function (fontdata)
 local mathconstants = fontdata.MathConstants
 if mathconstants and fontdata.psname == "TeXGyrePagellaMath-Regular"
 then
    mathconstants.FractionNumeratorDisplayStyleShiftUp=5.5*mathconstants.FractionNumeratorDisplayStyleShiftUp
    mathconstants.FractionNumeratorShiftUp=5.5*mathconstants.FractionNumeratorShiftUp
 end
end


luatexbase.add_to_callback
 (
  "luaotfload.patch_font",
  patch_texgyrepagellamath,
  "change_texgyrepagellamath"
 )
\end{luacode}

\usepackage{unicode-math}
\usepackage{combofont}

\setmainfont{Fira Sans}


\setupcombofont{FiraMath}
 {%
 file:texgyrepagella-math.otf:mode=base;script=math;language=DFLT; at #1pt,
 file:firasans-light.otf at #1pt,
 file:firasans-lightitalic.otf at #1pt
 }
 {%
 {},
 0x30-0x39,
 0x61-0x7A
 }

\setupcombofont{FiraMathScript}
 {%
 file:texgyrepagella-math.otf:mode=base;script=math;language=DFLT;+ssty=0 at #1pt,
 file:firasans-regular.otf at #1pt,
 file:firasans-regularitalic.otf at #1pt
 }
 {%
 {},
 0x30-0x39,
 0x61-0x7A
 }

\setupcombofont{FiraMathScriptScript}
 {%
 file:texgyrepagella-math.otf:mode=base;script=math;language=DFLT;+ssty=1 at #1pt,
 file:firasans-semibold.otf at #1pt,
 file:firasans-semibolditalic.otf at #1pt
 }
 {%
 {},
 0x30-0x39,
 0x61-0x7A
 }
 
% Mathversion bold need Script and ScriptScript declarations too! 
\setupcombofont{FiraMathBold}
 {%
 file:texgyrepagella-math.otf:mode=base;script=math;language=DFLT; at #1pt,
 file:firasans-regular.otf at #1pt,
 file:firasans-regularitalic.otf at #1pt
 }
 {%
 {},
 0x30-0x39,
 0x61-0x7A
 }


\DeclareFontFamily{TU}{FiraMath}{}
\DeclareFontShape {TU}{FiraMath}{m}{n}
  {
    <-7> combo*FiraMathScriptScript
   <7-10>combo*FiraMathScript
   <10-> combo*FiraMath
  }{}

\DeclareFontShape {TU}{FiraMath}{bx}{n} {<->combo*FiraMathBold}{}

% better start with a real math font, so that
% unicode sets everything up
\setmathfont{TeX Gyre Pagella Math}%

% Perhaps some other symbol fonts will need setup too
\SetSymbolFont{operators}{normal}{TU}{FiraMath}{m}{n}
\SetSymbolFont{operators}{bold}{TU}{FiraMath}{bx}{n}


% Map a etc to the ascii range. Original values can be found with
% [\Umathcharclass `\a] [\Umathcharfam `\a] [\Umathcharslot `\a]

\Umathcode `\a =  "7 "0 "61
\Umathcode `\b =  "7 "0 "62
\Umathcode `\c =  "7 "0 "63
\Umathcode `\d =  "7 "0 "64
\Umathcode `\e =  "7 "0 "65
\Umathcode `\f =  "7 "0 "66
\Umathcode `\g =  "7 "0 "67
\Umathcode `\h =  "7 "0 "68


\begin{document}

\minisec{Test some symbols}

$123 - a^{a^a} + 1^{1^1} abc = \sqrt{hhhhhhhhhhh}$

\minisec{Test patching}

$\frac{1}{9}$

\minisec{Test math version}

\mathversion{bold}
$123 - a^{a^a} + 1^{1^1} abc = \frac{1}{9} $

\end{document}
