math-int.mkiv / last modification: 2020-01-30 14:16
%D \module
%D   [       file=math-int,
%D        version=2007.07.19,
%D          title=\CONTEXT\ Math Macros,
%D       subtitle=Scripts,
%D         author={Hans Hagen \& Taco Hoekwater \& Aditya Mahajan},
%D           date=\currentdate,
%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
%C
%C This module is part of the \CONTEXT\ macro||package and is
%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
%C details.

\writestatus{loading}{ConTeXt Math Macros / Integrals}

% todo: int and sum etc can be stackers

\unprotect

%D \startbuffer
%D   $\int    _a^b f(x)   dx  $ and also
%D   $\iint   _a^b f(x,y) dxdy$,
%D   $\iiint  _a^b f(x,y) dxdy$,
%D   \startformula
%D     \int    _a^b f(x) dx \quad
%D     \iint   _a^b f(x) dx \quad
%D     \iiint  _a^b f(x) dx \quad
%D   \stopformula
%D \stopbuffer
%D
%D Default: \getbuffer
%D
%D Displaylimits: \setupmathematics[integral=displaylimits] \getbuffer
%D
%D Limits: \setupmathematics[integral=limits] \getbuffer

%D Adapted to mkiv by HH from code by AM.

\installcorenamespace{mathintegral}

\newconstant\mathintlimitmode

\def\intlimits % also used elsewhere
  {\ifcase\mathintlimitmode
     \nolimits
   \or
     \displaylimits
   \or
     \limits
   \or
     \ifnum\attribute\mathmodeattribute=\plusone
       \limits
     \else
       \nolimits
     \fi
   \else
     % none
   \fi}

\letvalue{\??mathintegral      nolimits}\zerocount
\letvalue{\??mathintegral displaylimits}\plusone
\letvalue{\??mathintegral        limits}\plustwo
\letvalue{\??mathintegral    autolimits}\plusthree
\letvalue{\??mathintegral          none}\plusfour

\appendtoks
    \mathintlimitmode\executeifdefined{\??mathintegral\mathematicsparameter\s!integral}\zerocount
\to \everyswitchmathematics

\setupmathematics
% [\v!integral=nolimits]
  [\v!integral=autolimits]

%D The following code is used for fallbacks and might become obsolete once
%D we have enough \OPENTYPE\ math fonts.

% \def\math_repeated_integal_i
%   {\int}

% \def\math_repeated_integal_ii
%   {\math_repeated_integal_i
%    \math_repeated_integral_kern
%    \math_repeated_integal_i
%    \math_repeat_integral_finish
%    \intlimits}

% \def\math_repeated_integal_iii
%   {\math_repeated_integal_i
%    \math_repeated_integral_kern
%    \math_repeated_integal_ii}
%
% \def\math_repeated_integal_iiii
%   {\math_repeated_integal_i
%    \math_repeated_integral_kern
%    \math_repeated_integal_iii}
%
% \unexpanded\def\math_repeat_integral#1%
%   {\let\math_repeat_integral_finish\donothing
%    \iffontchar\textfont\zerocount#1\relax
%      \expandafter\math_repeat_integral_real
%    \else
%      \expandafter\math_repeat_integral_fake
%    \fi}
%
% \def\math_repeat_integral_fake#1#2%
%   {\let\math_repeat_integral_fake_symbol#2%
%    \futurelet\next\math_repeat_integral_fake_indeed}
%
% \def\math_repeat_integral_real#1#2%
%   {#1}
%
% \definemathcommand [iint]   {\math_repeat_integral{"0222C}\normalint  \math_repeated_integal_ii  } % double
% \definemathcommand [iiint]  {\math_repeat_integral{"0222D}\normaliint \math_repeated_integal_iii } % tripple
% \definemathcommand [iiiint] {\math_repeat_integral{"FFFFF}\normaliiint\math_repeated_integal_iiii} % quadruple
%
% \def\math_repeated_integral_kern
%   {\mkern-6mu\mathchoice{\mkern-3mu}{}{}{}}
%
% \def\math_repeat_integral_fake_indeed
%    {\ifx\next\limits
%       \math_repeated_integral_correction
%     \else\ifx\next\displaylimits
%       \math_repeated_integral_correction
%     \else\ifx\next\nolimits
%       % nothing
%     \else\ifcase\mathintlimitmode
%       % nothing
%     \else
%       \math_repeated_integral_correction
%     \fi\fi\fi\fi
%     \math_repeat_integral_fake_symbol}
%
% \def\math_repeated_integral_correction
%   {\mkern-7mu\mathchoice{\mkern-2mu}{}{}{}%
%    \mathop\bgroup\mkern7mu\mathchoice{\mkern2mu}{}{}{}\let\math_repeat_integral_finish\egroup}
%
% %D If the \type{\limits} option is used after \type {\iint}, use \type
% %D {\mathop} and fudge the left hand space a bit to make the subscript
% %D visually centered.

\protect \endinput