\NeedsTeXFormat{LaTeX2e}[2018/01/01]
\def\fileversion{0.47}
\def\filedate{2021/09/16}
\ProvidesPackage{fourier-otf}[\filedate\space\fileversion]

% Ensure luatex or xetex engine
\RequirePackage{iftex}[2019/10/24]
\RequireTUTeX
\RequirePackage{unicode-math}
\RequirePackage{fourier-orns}

\newopentypefeature{Style}{leqslant}{ss04}
\newopentypefeature{Style}{smaller}{ss05}
\newopentypefeature{Style}{subsetneq}{ss06}
\newopentypefeature{Style}{parallelslant}{ss07}

% Options: forward them to \setmathfont except "tight", "loose" and "no-text".
\RequirePackage{xkeyval}
\newtoks\FOTtoksT
\newtoks\FOTtoksM

\newif\ifFOT@tight
\newif\ifFOT@notext
\DeclareOptionX{no-text}{\FOT@notexttrue}
\DeclareOptionX{tight}{\FOT@tighttrue}
\DeclareOptionX{loose}{\FOT@tightfalse}
\DeclareOptionX{math-style}{\Store@KV@Option{math-style}{#1}}
\DeclareOptionX{bold-style}{\Store@KV@Option{bold-style}{#1}}
\DeclareOptionX{nabla}{\Store@KV@Option{nabla}{#1}}
\DeclareOptionX{partial}{\Store@KV@Option{partial}{#1}}
\DeclareOptionX{CharacterVariant}{\Store@KV@Option{CharacterVariant}{#1}}
\DeclareOptionX{StylisticSet}{\Store@KV@Option{StylisticSet}{#1}}
\DeclareOptionX{Style}{\Store@KV@Option{Style}{#1}}
\DeclareOptionX{Scale}{\Store@KV@Option{Scale}{#1}}
\newcommand*{\Store@KV@Option}[2]{%
  \def\FOT@scale{Scale}\def\FOT@opt{#1}%
  \ifx\FOT@opt\FOT@scale\FOTtoksT={Scale={#2}}\fi
  \FOTtoksM=\expandafter{\the\FOTtoksM #1={#2},}}
\ExecuteOptionsX{tight}
\ProcessOptionsX
% Math fonts: Erewhon-Math
% Following Joseph Wright in https://tex.stackexchange.com/questions/451
\begingroup
  \edef\temp{%
    \endgroup
    \noexpand\setmathfont{Erewhon-Math.otf}%
    [\unexpanded\expandafter{\the\FOTtoksM}]%
  }
  \temp
\ifFOT@tight
  \thinmuskip=2mu
  \medmuskip=2.5mu plus 1mu minus 2.5mu
  \thickmuskip=3.5mu plus 2.5mu
\fi
% Text Serif fonts.
\ifFOT@notext
\else
  %Text Serif fonts: Erewhon
  \begingroup
    \defaultfontfeatures[Erewhon]
      {Extension = .otf ,
       UprightFont =     *-Regular,
       BoldFont =        *-Bold,
       ItalicFont =      *-Italic,
       BoldItalicFont =  *-BoldItalic,
       SlantedFont =     *-RegularSlanted,
       BoldSlantedFont = *-BoldSlanted}
    \edef\temp{%
      \endgroup
      \noexpand\setmainfont{Erewhon}%
      [\unexpanded\expandafter{\the\FOTtoksT}]%
    }
    \temp
\fi
% Enable FourierOrns' scaling anyway.
\begingroup
  \defaultfontfeatures[FourierOrns]
    {Extension = .otf ,
     UprightFont =     *-Regular,
     BoldFont =        *-Bold,
     ItalicFont =      *-Italic,
     BoldItalicFont =  *-BoldItalic}
  \edef\temp{%
    \endgroup
    \noexpand\renewfontfamily\FourierOrns{FourierOrns}%
    [\unexpanded\expandafter{\the\FOTtoksT}]%
  }
  \temp
% Text Sans Serif fonts: default (lmss unless specified)
% Text Typewriter fonts: default (lmtt unless specified)

\AtBeginDocument{%
  % Fourier specific math
  \Umathchardef\Bbbbackslash =        0 0 "E020 \relax
  \Umathchardef\varemptyset =         0 0 "E021 \relax
  \Umathchardef\mupvarzero =          0 0 "E022 \relax
  \Umathchardef\mbfvarzero =          0 0 "E023 \relax
  \Umathchardef\mupvarvarpi =         0 0 "E032 \relax
  \Umathchardef\mbfvarpartial =       0 0 "E040 \relax
  \Umathchardef\mbfvarvarrho =        0 0 "E041 \relax
  \Umathchardef\mbfvarvarpi =         0 0 "E042 \relax
  \Umathchardef\mbfvec =              0 0 "E044 \relax
  \Umathchardef\mbfwp =               0 0 "E045 \relax
  \Umathchardef\mbfdotlessi =         0 0 "E046 \relax
  \Umathchardef\mbfdotlessj =         0 0 "E047 \relax
  \Umathchardef\mbfhbar =             0 0 "E048 \relax
  \Umathchardef\mbfell =              0 0 "E049 \relax
  \Umathchardef\mbftriangleleft =     0 0 "E04E \relax
  \Umathchardef\mbftriangleright =    0 0 "E04F \relax
  \Umathchardef\mbfitvarpartial =     0 0 "E060 \relax
  \Umathchardef\mbfitvarvarrho =      0 0 "E061 \relax
  \Umathchardef\mbfitvarvarpi =       0 0 "E062 \relax
  \Umathchardef\mbfitwp =             0 0 "E065 \relax
  \Umathchardef\mbfimath =            0 0 "E066 \relax
  \Umathchardef\mbfjmath =            0 0 "E067 \relax
  \Umathchardef\mbfithbar =           0 0 "E068 \relax
  \Umathchardef\mbfitell =            0 0 "E069 \relax
  \Umathchardef\mitvarpartial =       0 0 "E070 \relax
  \Umathchardef\mitvarvarrho =        0 0 "E071 \relax
  \Umathchardef\mitvarvarpi =         0 0 "E072 \relax
  \Umathchardef\mithbar =             0 0 "E078 \relax
  \Umathchardef\parallelslant  =      3 0 "E090 \relax
  \Umathchardef\nparallelslant =      3 0 "E091 \relax
  \Umathchardef\shortparallelslant =  3 0 "E092 \relax
  \Umathchardef\nshortparallelslant = 3 0 "E093 \relax
  \Umathchardef\lesseqslantgtr =      3 0 "E094 \relax
  \Umathchardef\gtreqslantless =      3 0 "E095 \relax
  \Umathchardef\lesseqqslantgtr =     3 0 "E096 \relax
  \Umathchardef\gtreqqslantless =     3 0 "E097 \relax
  \Umathchardef\nsubseteqq =          3 0 "E0AE \relax
  \Umathchardef\nsupseteqq =          3 0 "E0AF \relax
  % \widearc and\overrightarc
  \newcommand*{\widearc}{\Umathaccent 0 0 "E540 }%
  \newcommand*{\overrightarc}{\Umathaccent 0 0 "20D5 }%
  % From FourierOrns
  \Umathchardef\forbidden =           0 0 "E0B0 \relax
  \Umathchardef\beware =              0 0 "E0B1 \relax
  \Umathchardef\boom =                0 0 "E0B2 \relax
  \Umathchardef\thething =            0 0 "E0B4 \relax
  \Umathchardef\xswordsup =           0 0 "E0B5 \relax
  \Umathchardef\xswordsdown =         0 0 "E0B6 \relax
  % amssymb
  \@ifpackageloaded{amssymb}%
    {\PackageWarning{fourier-otf}{%
       Fourier-otf provides all AMS symbols.\MessageBreak
       Loading amssymb.sty is not advisable.\MessageBreak
       Reported}%
    }%
    {% AMS Symbols not referenced in unicode-math-table.tex
     % \Umathchardef\<cmd> = <math type> <family> <slot>
     % <math type> : \mathord=0 \mathrel=3 ; <family>=0
     \Umathchardef\circledR =       0 0 "24C7 \relax
     \Umathchardef\circledS =       0 0 "24C8 \relax
     \Umathchardef\diagup =         0 0 "E0A0 \relax
     \Umathchardef\diagdown =       0 0 "E0A1 \relax
     \Umathchardef\shortmid =       3 0 "E0A2 \relax
     \Umathchardef\shortparallel =  3 0 "E0A3 \relax
     \Umathchardef\nshortmid =      3 0 "E0A4 \relax
     \Umathchardef\nshortparallel = 3 0 "E0A5 \relax
     \Umathchardef\lvertneqq =      3 0 "E0A6 \relax
     \Umathchardef\gvertneqq =      3 0 "E0A7 \relax
     \Umathchardef\varsubsetneq =   3 0 "E0AC \relax
     \Umathchardef\varsupsetneq =   3 0 "E0AD \relax
     \Umathchardef\varsubsetneqq =  3 0 "E09C \relax
     \Umathchardef\varsupsetneqq =  3 0 "E09D \relax
     \Umathchardef\nleqslant =      3 0 "E0A8 \relax
     \Umathchardef\ngeqslant =      3 0 "E0A9 \relax
     \Umathchardef\nleqq =          3 0 "E0AA \relax
     \Umathchardef\ngeqq =          3 0 "E0AB \relax
     \Umathchardef\npreceq =        3 0 "E098 \relax
     \Umathchardef\nsucceq =        3 0 "E099 \relax
     \let\centerdot\cdotp
     \let\restriction\upharpoonright
     \let\doteqdot\Doteq
     \let\doublecup\Cup
     \let\doublecap\Cap
     \let\llless\lll
     \let\gggtr\ggg
     \let\circlearrowleft\acwopencirclearrow
     \let\circlearrowright\cwopencirclearrow
     \let\lozenge\mdlgwhtlozenge
     \let\blacklozenge\mdlgblklozenge
     \let\square\mdlgwhtsquare
     \let\blacksquare\mdlgblksquare
     \let\dashleftarrow\leftdasharrow
     \let\dashrightarrow\rightdasharrow
     \let\ntriangleleft\nvartriangleleft
     \let\ntriangleright\nvartriangleright
     \let\varpropto\propto
     \let\thicksim\sim
     \let\thickapprox\approx
     \let\smallsmile\smile
     \let\smallfrown\frown
    }%
  % latexsym
  \@ifpackageloaded{latexsym}%
    {\PackageWarning{fourier-otf}{%
       Fourier-otf provides all LaTeX symbols.\MessageBreak
       Loading latexsym.sty is not advisable.\MessageBreak
       Reported}%
    }%
    {\let\lhd\vartriangleleft
     \let\rhd\vartriangleright
     \let\unlhd\trianglelefteq
     \let\unrhd\trianglerighteq
     \let\leadsto\rightcurvedarrow
     \let\Box\lgwhtsquare
     \let\Diamond\mdlgwhtdiamond
    }%
}

\endinput
