% Special macros for use with MFT output.
% Adapted to METAPOST sources by Wlodek Bzyl, July 2001.

\ifx\mptmacisloaded\relax\endinput\else\let\mptmacisloaded=\relax\fi

\catcode`\@=11

\font\tenlogo=logo10 % font used for the METAFONT logo
\font\tentex=cmtex10 \hyphenchar\tentex=-1 % font used for strings
\font\sevenit=cmti7  \scriptfont\itfam=\sevenit
\def\MF{{\tenlogo META}\-{\tenlogo FONT}}
\def\MP{{\tenlogo META}\-{\tenlogo POST}}

\parindent=0pt
\thinmuskip=5mu
\thickmuskip=6mu plus 6mu
\mathcode`\|="326A

\def\\#1{{\it#1}} % italic type for identifiers
\def\0#1#2#3{\hbox{\rm\'{}\kern-.2em\it#1#2#3\/\kern.05em}} % octal constant
\def\1#1{\mathop{\hbox{\rm#1}}} % operator, in roman type
\def\2#1{\mathop{\hbox{\mftbf#1\/\kern.05em}}} % operator, in bold type
\def\3#1{\,\mathclose{\hbox{\mftbf#1\/}}} % `fi' and `endgroup'
\def\4#1{\mathbin{\hbox{\mftbf#1\/}}} % `step' and `at'
\def\5#1{\hbox{\mftbf#1\/}} % `true' and `nullpicture'
\def\6#1{\mathbin{\rm#1}} % `++' and `scaled'
\def\7{\hbox\bgroup\mft@nocats\frenchspacing\mft@finstring} % string token
\def\8#1{\mathrel{\mathcode`\.="8000 \mathcode`\-="8000
  #1\unkern}} % `..' and `--'
\def\9{\hfill$\%} % comment separator
\def\?#1{\mathopen{#1}\;} % `:', `::', and `||:'
\def\frac#1/#2{\leavevmode\kern.1em
  \raise.5ex\hbox{\the\scriptfont0 #1}\kern-.1em
  /\kern-.15em\lower.25ex\hbox{\the\scriptfont0 #2}}

\mathchardef\AM="2026 % ampersand
\let\BL=\medskip % space for empty line
\mathchardef\BS="026E %  backslash
\mathchardef\HA="0222 % hat ("005E not as good)
\def\PS{\mathbin{+{-}+}} % pythagorean subtraction
\def\SH{\raise.7ex\hbox{$\scriptstyle\#$}} % sharp sign for sharped units
\mathchardef\TI="007E % tilde

\chardef\other=12
\def\mft@noc@ts{\catcode`\\=\other \catcode`\{=\other
  \catcode`\}=\other \catcode`\$=\other \catcode`\&=\other
  \catcode`\#=\other \catcode`\~=\other
  \catcode`\_=\other \catcode`\^=\other}
\def\mft@nocats{\mft@noc@ts \catcode`\%=\other}
\def\mft@finstring"#1"{\tentex"#1"\egroup}

\newbox\mft@shorthyf \setbox\mft@shorthyf=\hbox{-\kern-.05em}
\mathchardef\period=`\.
{\catcode`\-=\active \global\def-{\copy\mft@shorthyf\mkern3.9mu}
 \catcode`\.=\active \global\def.{\period\mkern3mu}}

\def\mftbf{\fam\bffam
  \def\_{\kern.04em\vbox{\hrule width.3em height .6pt}\kern.08em}%
  \tenbf}

\def\join#1${} % say %%\join in .mf file to join lines together
\def\]{\hskip0pt plus 1filll\ } % say % comment\] to get comment flush left

{\obeyspaces \global\let =\ } % don't skip spaces which begin a line

\def\mft@verbatimtex{\begingroup 
  \def\par{\leavevmode\endgraf}% don't skip empty lines
  \mft@nocats \obeyspaces \obeylines \tt}

% the percent sign in btex .. etex group is a comment character.
\def\mft@btex{\begingroup \mft@noc@ts \obeyspaces \tt}

% Names `\mftbeginV', `\mftbeginB', and `\mftend' are hard-wired into MFT

\outer\def\mftbeginV#1{\5{#1}$\mftverbatimtex}
\outer\def\mftbeginB#1{\5{#1}$\mftbtex}
\def\mftend#1{$\5{#1}}

\outer\def\mftverbatimtex{\let\par=\endgraf \mft@verbatimtex \parskip=\z@
  \mft@finish}
\outer\def\mftbtex{\mft@btex \mft@finish}

{\catcode`\|=0 |catcode`|\=\other % | is temporary escape character
  |obeylines % end of line is active
  |gdef|mft@finish#1\mftend{#1|endgroup|mftend}}

\catcode`\@=12

\endinput
