%D \module
%D   [       file=math-pln,
%D        version=2001.11.16,
%D          title=\CONTEXT\ Math Macros,
%D       subtitle=Plain Helpers,
%D         author=Hans Hagen,
%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.

%D Here we collect some Plain \TEX\ leftovers.

\writestatus{loading}{ConTeXt Math Macros / Plain Helpers}

\unprotect

% We need proper unicode:

\def\relbar{\mathrel{\smash-}} % - has the same height as + .. no clue what this refers to

%D This might change:

\permanent\protected\def\hrulefill{\leaders\hrule\hfill}
%permanent\protected\def\dotfill  {\cleaders\hbox{\normalstartimath\mathsurround\zeropoint\mkern1.5mu.\mkern1.5mu\normalstopimath}\hfill}

%D These need an update:

\permanent\protected\def\bmod
  {\nonscript
   \mskip-\medmuskip
   \mkern5mu
   \mfunction{mod}%
   \penalty900
   \mkern5mu
   \nonscript
   \mskip-\medmuskip}

\permanent\protected\def\pmod#1%
  {\allowbreak
   \mkern18mu
   (\mfunction{mod}\mskip\medmuskip#1)}

%D For the moment we use this in mathml:

\protected\def\matrix#1% not permanent so we can overload
  {\emptyhbox
   \mskip\thinmuskip
   \vcenter
     {\normalbaselines
      \mathsurround\zeropoint
      \everycr\emptytoks
      \tabskip\zeroskip
      \halign{%
        \hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil
        \aligntab
        \aligntab
        \quad\hfil\normalstartimath\alignmark\alignmark\normalstopimath\hfil
        \crcr
        \mathstrut
        \crcr
        \noalign{\kern-\baselineskip}
        #1\crcr
        \mathstrut
        \crcr
        \noalign{\kern-\baselineskip}}}%
   \mskip\thinmuskip}

\permanent\aliased\let\plainmatrix\matrix

%D This comes from plain but I gave it a \CONTEXT\ touch. When Mikael and I are in
%D the mood we will redo them in a more modern way.

\permanent\def\math_border_NC_indeed
  {\enforced\global\def\math_border_NC{\aligntab}}

\aliased\let\math_border_NC\math_border_NC_indeed

\permanent\def\math_border_NR
  {\enforced\global\let\math_border_NC\math_border_NC_indeed
   \cr}

\lettonothing\m_math_border_matrix

\protected\def\math_border_matrix#1#2#3% adapted plain
  {\begingroup
   %
   \setbox\scratchbox\hbox\bgroup
     \mr B%
   \egroup
   \scratchdimenone\wd\scratchbox
   %
   \scratchdimentwo.2\bodyfontsize
   %
   \mathsurround\zeropoint
   %
   \enforced\def\NC{\math_border_NC}%
   \enforced\def\NR{\math_border_NR}%
   %
   \gdef\m_math_border_matrix
     {\kern\scratchdimentwo
      \glet\m_math_border_matrix\relax}%
   %
   \setbox\scratchboxone\vbox\bgroup
     \everycr{\noalign\bgroup\m_math_border_matrix\egroup}%
     \tabskip \zeroskip
     \halign{% \ialign resets everycr
       \startimath\alignmark\alignmark\stopimath
       \hfil
       \kern{\scratchdimentwo+\scratchdimenone}%
       \aligntab
       \thinspace
       \hfil
       \startimath\alignmark\alignmark\stopimath
       \hfil
       \aligntab
       \aligntab
       \quad
       \hfil
       \startimath\alignmark\alignmark\stopimath
       \hfil
       \crcr
       \omit
       \strut
       \hfil
       \crcr
       \noalign{\kern-\baselineskip}%
       #3\crcr
       \omit
       \strut
       \cr}%
   \egroup
   \setbox\scratchboxtwo\vbox\bgroup
     \unvcopy\scratchboxone
     \global\setbox\globalscratchbox\lastbox
   \egroup
   \setbox\scratchboxtwo\hbox\bgroup
     \unhbox\globalscratchbox
     \unskip
     \global\setbox\globalscratchbox\lastbox
   \egroup
   \setbox\scratchboxtwo\hbox\bgroup
     \startimath
     \kern{\wd\globalscratchbox-\scratchdimenone}%
     \left#1\relax
     \kern-\wd\globalscratchbox
     \global\setbox\globalscratchbox\vbox\bgroup
       \box\globalscratchbox
       \kern\scratchdimentwo
     \egroup
     \vcenter\bgroup
       \kern-\ht\globalscratchbox
       \unvbox\scratchboxone
       \kern-\baselineskip
     \egroup
     \thinspace
     \right#2\relax
     \stopimath
   \egroup
   \null
   \thickspace
   \vbox\bgroup
     \kern\ht\globalscratchbox
     \box\scratchboxtwo
   \egroup
   %
   \endgroup}

\permanent\protected\def\bordermatrix {\math_border_matrix()}
\permanent\protected\def\bbordermatrix{\math_border_matrix[]}

\permanent\protected\def\startbordermatrix #1\stopbordermatrix {\math_border_matrix(){#1}}
\permanent\protected\def\startbbordermatrix#1\stopbbordermatrix{\math_border_matrix[]{#1}}

\permanent\let\stopbordermatrix \relax
\permanent\let\stopbbordermatrix\relax

\protect \endinput
