%%^^A%% um-code-epilogue.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
%%^^A%% Assorted definitions to close up.

% \section{Epilogue}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
% Lots of little things to tidy up.
%
% \subsection{Resolving Greek symbol name control sequences}
%
% \begin{macro}{\@@_resolve_greek:}
% This macro defines \cmd\Alpha\dots\cmd\omega\ as their corresponding
% Unicode (mathematical italic) character. Remember that the mapping
% to upright or italic happens with the mathcode definitions, whereas these macros
% just stand for the literal Unicode characters.
%    \begin{macrocode}
\AtBeginDocument { \debug_suspend: \@@_resolve_greek: \debug_resume: }
%    \end{macrocode}
%    \begin{macrocode}
\cs_new:Npn \@@_resolve_greek:
  {
    \clist_map_inline:nn
      {
        Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,
        alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,
        Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,
        mu,nu,xi,omicron,pi,rho,sigma,tau,upsilon,phi,chi,psi,omega,
        varTheta,varsigma,vartheta,varkappa,varrho,varpi,varepsilon,varphi
      }
      {
        \tl_set:cx {##1} { \exp_not:c { mit ##1 } }
        \tl_set:cx {up ##1} { \exp_not:N \symup \exp_not:c { ##1 } }
        \tl_set:cx {it ##1} { \exp_not:N \symit \exp_not:c { ##1 } }
      }
  }
%    \end{macrocode}
% \end{macro}
%
%
%
%
%
% \subsubsection{Active fractions}
%
% Active fractions can be set up independently of any maths font definition;
% all it requires is a mapping from the Unicode input chars to the relevant
% \LaTeX\ fraction declaration.
%
%    \begin{macrocode}
\cs_new:Nn \@@_which_frac:nn
  {
    \bool_if:NTF \l_@@_smallfrac_bool {\tfrac} {\frac} {#1} {#2}
  }
%    \end{macrocode}
%
%    \begin{macrocode}
\cs_new:Npn \@@_setup_active_frac:
  {
    \@@_mathactive_remap:nn {"2189}  { \@@_which_frac:nn {0} {3}  }
    \@@_mathactive_remap:nn {"2152}  { \@@_which_frac:nn {1} {10} }
    \@@_mathactive_remap:nn {"2151}  { \@@_which_frac:nn {1} {9}  }
    \@@_mathactive_remap:nn {"215B}  { \@@_which_frac:nn {1} {8}  }
    \@@_mathactive_remap:nn {"2150}  { \@@_which_frac:nn {1} {7}  }
    \@@_mathactive_remap:nn {"2159}  { \@@_which_frac:nn {1} {6}  }
    \@@_mathactive_remap:nn {"2155}  { \@@_which_frac:nn {1} {5}  }
    \@@_mathactive_remap:nn {"00BC}  { \@@_which_frac:nn {1} {4}  }
    \@@_mathactive_remap:nn {"2153}  { \@@_which_frac:nn {1} {3}  }
    \@@_mathactive_remap:nn {"215C}  { \@@_which_frac:nn {3} {8}  }
    \@@_mathactive_remap:nn {"2156}  { \@@_which_frac:nn {2} {5}  }
    \@@_mathactive_remap:nn {"00BD}  { \@@_which_frac:nn {1} {2}  }
    \@@_mathactive_remap:nn {"2157}  { \@@_which_frac:nn {3} {5}  }
    \@@_mathactive_remap:nn {"215D}  { \@@_which_frac:nn {5} {8}  }
    \@@_mathactive_remap:nn {"2154}  { \@@_which_frac:nn {2} {3}  }
    \@@_mathactive_remap:nn {"00BE}  { \@@_which_frac:nn {3} {4}  }
    \@@_mathactive_remap:nn {"2158}  { \@@_which_frac:nn {4} {5}  }
    \@@_mathactive_remap:nn {"215A}  { \@@_which_frac:nn {5} {6}  }
    \@@_mathactive_remap:nn {"215E}  { \@@_which_frac:nn {7} {8}  }
  }
%    \end{macrocode}
%
%    \begin{macrocode}
\AtBeginDocument { \@@_setup_active_frac: }
%    \end{macrocode}
%
%
% \subsection{Synonyms and all the rest}
%
% These are symbols with multiple names. Eventually to be taken care of
% automatically by the maths characters database.
%    \begin{macrocode}
\protected\def\to{\rightarrow}
\protected\def\le{\leq}
\protected\def\ge{\geq}
\protected\def\neq{\ne}
\protected\def\triangle{\mathord{\bigtriangleup}}
\protected\def\bigcirc{\mdlgwhtcircle}
\protected\def\circ{\vysmwhtcircle}
\protected\def\bullet{\smblkcircle}
\protected\def\mathyen{\yen}
\protected\def\mathsterling{\sterling}
\protected\def\diamond{\smwhtdiamond}
\protected\def\emptyset{\varnothing}
\protected\def\hbar{\hslash}
\protected\def\land{\wedge}
\protected\def\lor{\vee}
\protected\def\owns{\ni}
\protected\def\gets{\leftarrow}
\protected\def\mathring{\ocirc}
\protected\def\lnot{\neg}
\protected\def\longdivision{\longdivisionsign}
%    \end{macrocode}
% These are somewhat odd: (and their usual Unicode uprightness does not match their amssymb glyphs)
%    \begin{macrocode}
\protected\def\backepsilon{\upbackepsilon}
\protected\def\eth{\matheth}
%    \end{macrocode}
% These are names that are `frozen' in HTML but have dumb names:
%    \begin{macrocode}
\protected\def\dbkarow {\dbkarrow}
\protected\def\drbkarow{\drbkarrow}
\protected\def\hksearow{\hksearrow}
\protected\def\hkswarow{\hkswarrow}
%    \end{macrocode}
%
% Due to the magic of OpenType math, big operators are automatically
% enlarged when necessary. Since there isn't a separate unicode glyph for
% `small integral', I'm not sure if there is a better way to do this:
%    \begin{macrocode}
\protected\def\smallint{\mathop{\textstyle\int}\limits}
%    \end{macrocode}
%
% \begin{macro}{\underbar}
%    \begin{macrocode}
\cs_set_eq:NN \latexe_underbar:n \underbar
\renewcommand\underbar
  {
    \mode_if_math:TF \mathunderbar \latexe_underbar:n
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\smallsetminus}
%    \begin{macrocode}
\cs_set_protected:Npn \smallsetminus { \mathbin{ \mathpalette \@@_smallsetminus: \relax} }
\cs_set:Npn \__um_smallsetminus: #1 { \rotatebox{135}{ \smash{ \raisebox{-\height}{$#1\minus$} } }}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\digamma}
% \begin{macro}{\Digamma}
% I might end up just changing these in the table.
%    \begin{macrocode}
\cs_set_protected:Npn \digamma {\updigamma}
\cs_set_protected:Npn \Digamma {\upDigamma}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \paragraph{Symbols}
%
%    \begin{macrocode}
\cs_set_protected:Npn \| {\Vert}
%    \end{macrocode}
%
% \cs{mathinner} items:
%    \begin{macrocode}
\cs_set_protected:Npn \mathellipsis {\mathinner{\unicodeellipsis}}
\cs_set_protected:Npn \cdots {\mathinner{\unicodecdots}}
%    \end{macrocode}
%
%    \begin{macrocode}
\cs_set_eq:NN \@@_text_slash: \slash
\cs_set_protected:Npn \slash
  {
    \mode_if_math:TF {\mathslash} {\@@_text_slash:}
  }
%    \end{macrocode}
%
%
% \subsubsection{\cs{not}}
% \label{sec:negations}
%
% The situation of \cs{not} symbol is currently messy, in Unicode it is defined
% as a combining mark so naturally it should be treated as a math accent,
% however \XeTeX\ does not correctly place it as it needs special
% treatment compared to other accents.
% Furthermore a math accent changes the
% spacing of its nucleus, so \cs{not=} will be spaced as an ordinary not
% relational symbol, which is undesired.
%
% Here modify \cs{not} to a macro that tries to use predefined negated symbols,
% which would give better results in most cases, until there is more robust
% solution in the engines.
%
% This code is based on an answer to a TeX -- Stack Exchange question by Enrico
% Gregorio\footnote{\url{http://tex.stackexchange.com/a/47260/729}}.
%
% \begin{macro}{\not}
%    \begin{macrocode}
\DeclareDocumentCommand \not {m}
  {
    \tl_set:Nx \l_@@_not_token_name_tl { \cs_to_str:N #1 }
    \tl_if_empty:NT \l_@@_not_token_name_tl
      {
        \tl_set:Nx \l_@@_not_token_name_tl { \token_to_str:N #1 }
      }
    \cs_if_exist:cTF { not \l_@@_not_token_name_tl }
      {
        \use:c { not \l_@@_not_token_name_tl }
      }
      {
        \cs_if_exist:cTF { n \l_@@_not_token_name_tl }
          {
            \use:c { n \l_@@_not_token_name_tl }
          }
          {
            \tl_if_eq:nnTF {#1} {$} { \notaccent{} } { \notaccent } #1
          }
      }
  }
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\NewNegationCommand}
% \begin{macro}{\RenewNegationCommand}
%    \begin{macrocode}
\DeclareDocumentCommand \NewNegationCommand {mm}
  {
    \@@_set_negation_command:Nnn \cs_new_protected:cpn {#1} {#2}
  }
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareDocumentCommand \RenewNegationCommand {mm}
  {
    \@@_set_negation_command:Nnn \cs_set_protected:cpn {#1} {#2}
  }
%    \end{macrocode}
%
%    \begin{macrocode}
\cs_set:Nn \@@_set_negation_command:Nnn
  {
    \tl_set:Nx \l_@@_not_token_name_tl { \cs_to_str:N #2 }
    \tl_if_empty:NT \l_@@_not_token_name_tl
      {
        \tl_set:Nx \l_@@_not_token_name_tl { \token_to_str:N #2 }
      }
    #1 { not \l_@@_not_token_name_tl } { #3 }
  }
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
%    \begin{macrocode}
\NewNegationCommand { = }    { \neq   }
\NewNegationCommand { < }    { \nless }
\NewNegationCommand { > }    { \ngtr  }
\NewNegationCommand { \gets     } { \nleftarrow }
\NewNegationCommand { \simeq    } { \nsime      }
\NewNegationCommand { \equal    } { \ne         }
\NewNegationCommand { \le       } { \nleq       }
\NewNegationCommand { \ge       } { \ngeq       }
\NewNegationCommand { \greater  } { \ngtr       }
\NewNegationCommand { \forksnot } { \forks      }
%    \end{macrocode}
%
%
% \subsubsection{Full-width remapping}
%
% While this could be done with the full mathcode remapping machinery used
% for the other purposes, it would be fairly redundant with plain ASCII.
% Worse, this would slow down what is already an inefficient part of \pkg{unicode-math}.
%
% Instead we use mathactive to do a plain old mapping from full-width to ASCII directly.
%
% Until I get requests for it, I've not included symbols or punctuation here.
%
% \paragraph{Numbers}
%
%    \begin{macrocode}
\int_step_inline:nnnn {0} {1} {9}
  {
    \@@_mathactive_remap:nn {"FF10+#1} {\char\int_eval:n{`\0+#1}}
  }
%    \end{macrocode}
%
% \paragraph{Letters}
%
%    \begin{macrocode}
\int_step_inline:nnnn {0} {1} {26}
  {
    \@@_mathactive_remap:nn {"FF21+#1} {\char\int_eval:n{`\A+#1}}
    \@@_mathactive_remap:nn {"FF41+#1} {\char\int_eval:n{`\a+#1}}
  }
%    \end{macrocode}
%
%
% \subsection{Legacy characters}
%
% \begin{macro}{\@@_undeclare_symbol:N}
%    \begin{macrocode}
\cs_new:Nn \@@_undeclare_symbol:N
  {
    \cs_set_protected:Npn #1
      { \@@_error:nx {legacy-char-not-supported} { \token_to_str:N #1 } }
  }
%    \end{macrocode}
% \end{macro}
%
% If you have better ideas about what to do here, please mention.
%    \begin{macrocode}
\@@_undeclare_symbol:N \arrowvert
\@@_undeclare_symbol:N \Arrowvert
\@@_undeclare_symbol:N \bracevert
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \section*{Fin}
%
% The official end of the package:
%    \begin{macrocode}
%<package>\endinput
%    \end{macrocode}

\endinput

% /©
%
% ------------------------------------------------
% The UNICODE-MATH package  <wspr.io/unicode-math>
% ------------------------------------------------
% This package is free software and may be redistributed and/or modified under
% the conditions of the LaTeX Project Public License, version 1.3c or higher
% (your choice): <http://www.latex-project.org/lppl/>.
% ------------------------------------------------
% Copyright 2006-2019  Will Robertson, LPPL "maintainer"
% Copyright 2010-2017  Philipp Stephani
% Copyright 2011-2017  Joseph Wright
% Copyright 2012-2015  Khaled Hosny
% ------------------------------------------------
%
% ©/
