
\RequirePackage{fontspec}

\setmainfont[ItalicFont=GFSOlga,
            BoldFont=GFSDidotBold,
            BoldItalicFont=GFSDidotBoldItalic,SlantedFont=GFSDidotItalic,
            SmallCapsFeatures={Numbers=OldStyle}]{GFSDidot.otf}
\newfontfamily{\GFSDidotoSubstFont}[%
            ItalicFont=GFSDidotItalic,
            BoldFont=GFSDidotBold,
            BoldItalicFont=GFSDidotBoldItalic,
            SmallCapsFeatures={Numbers=OldStyle}]{GFSDidot.otf}


\RequirePackage{unicode-math}
%\setmathfont{XITSMath-Regular.otf}
\setmathfont{STIX2Math.otf}
\setmathfont[range=\mathup/{num,latin,Latin,greek,Greek}]{GFSDidot.otf} 
\setmathfont[range=\mathbfup/{num,latin,Latin,greek,Greek}]{GFSDidotBold.otf} 
\setmathfont[range=\mathit/{greek,Greek}]{GFSOlga.otf}
\setmathfont[range=\mathit/{num,latin,Latin}]{GFSDidotItalic.otf}
\setmathfont[range=\mathbfit/{num,latin,Latin,greek,Greek}]{GFSDidotBoldItalic.otf}

%% the next code replaces non-existent Olga Latin with GFSDidotItalic Latin
\XeTeXinterchartokenstate=1%
\newXeTeXintercharclass\GFSDidotoSubst%
\count255="0021%
\loop\ifnum\count255<"0341%
  \XeTeXcharclass\count255=\GFSDidotoSubst%
  \advance\count255 by 1%
\repeat%
\XeTeXinterchartoks 0 \GFSDidotoSubst = {\begingroup\GFSDidotoSubstFont}%
\XeTeXinterchartoks 4095 \GFSDidotoSubst = {\begingroup\GFSDidotoSubstFont}%
\XeTeXinterchartoks \GFSDidotoSubst 0 = {\endgroup}%
\XeTeXinterchartoks \GFSDidotoSubst 4095 = {\endgroup}%
%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%% Fix epsilons %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\AtBeginDocument{\renewcommand{\epsilon}{\textit{ε}}
\renewcommand{\varepsilon}{\textsl{ε}}}
%%%%%%%%% Fix phi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newfontfamily\phifix[Scale=1.2]{GFSDidotItalic.otf}
\AtBeginDocument{\renewcommand{\phi}{\textrm{\phifix\char"03D5}}}
%%%%%%%%% Fix theta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\AtBeginDocument{\renewcommand{\theta}{\textsl{θ}}
\renewcommand{\vartheta}{\textit{θ}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\endinput
