#!/bin/sh
# MFOUR="m4 -B 8192"
MFOUR="m4"

#- (la)TeX characters which are special:
NonTT='$^%&~_{}#'
#
#- '^': NON-special chars -- can be used with TT :
sedT='[^()'"${NonTT}]*"
#
(cat << 'END'
undefine(`eval')
undefine(`index')
undefine(`format')
undefine(`include')
undefine(`substr')
undefine(`paste')
define(KEYWORD,`')
define(COMMENT,`')
define(TITLE,`
\begin{Header}{$1}{$2}')
define(USAGE,`\begin{verbatim}
$1
\end{verbatim}
\end{Header}
BLANK')
define(ALIAS,`dnl')
define(BEGIN_ARGUMENTS,`\begin{Arguments}')
define(END_ARGUMENTS,`\end{Arguments}')
define(ARGUMENTS,`\begin{Arguments}
$1
\end{Arguments}
BLANK')
define(ARG,``\item[\texttt{$1}:]
$2'')
define(ITEM,`\item[\texttt{$1}:]
$2')
define(DESCRIPTION,`\begin{Description}
$1
\end{Description}
BLANK')
define(NOTE,`\begin{Note}
$1
\end{Note}
BLANK')
define(VALUE,`\begin{Value}
$1
\end{Value}
BLANK')
define(SECTION,`\begin{Section}{$1}
$2
\end{Section}
BLANK')
define(VALUES,`\begin{Values}{$1}
$2
\end{Values}
BLANK')
define(REFERENCES,`\begin{References}
$1
\end{References}
BLANK')
define(SEEALSO,`\begin{SeeAlso}
$1
\end{SeeAlso}
BLANK')
define(EXAMPLES,`\begin{Examples}
\begin{verbatim}
$1\end{verbatim}
\end{Examples}
BLANK')
define(LINK,`$1')
define(CTRL,`\symbol{94}$1')
define(LANG,`\verb@$1@')dnl
define(ITALIC,`\emph{$1}')dnl
define(TT,`\texttt{$1}')dnl
define(BOLD,`\textbf{$1}')dnl
define(PARA,`BLANK')dnl
define(LDOTS,`\ldots')
define(EQUALS,`=')
define(LT,<)
define(LE,`\le')
define(GE,`\ge')
define(GT,>)
define(LOG,`\log')
define(EXP,`\exp')
define(SQRT,`\sqrt{$1}')
define(DISPLAYSTYLE,`{\displaystyle $1}')
define(OVER,{{$1} \over {$2}})
define(SUP,`{{$1}^{$2}}')
define(SUB,`{{$1}_{$2}}')
define(CHOOSE,`{$1 \choose $2}')
define(PAREN,`{\left( $1 \right)}')
define(SP,`')
define(greekGamma,`\Gamma')
define(greekalpha,`\alpha')
define(greekpi,`\pi')
define(greekmu,`\mu')
define(greeksigma,`\sigma')
define(greeklambda,`\lambda')
define(boldgreekbeta,`\boldsymbol{\beta}')
define(boldgreekepsilon,`\boldsymbol{\varepsilon}')
define(EQBOLD,`\mathbf{$1}')
define(EQN,`$ $1 $')
define(DEQN,`\[ $1 \]')
define(DEQTEX,`\[ $1 \]')
define(DEQHTML,`')
END
# Fix up the input to protect things that m4 is sensitive about.
#
# Should add   s/[${NonTT}]/\\\&/g    however only if NOT in verbatim things
# -- just no use with 'sed' -- would need   perl  or such,   alas....
sed "
s/LANG(\(${sedT}\))/TT(\1)/g
s/LANG(\(${sedT}(${sedT})${sedT}\))/TT(\1)/g
"'
/^ALIAS/,/^EXAMPLES/s/^ *//
/^ARGUMENTS/,/^EXAMPLES/s/^ *//
/^DESCRIPTION/,/^EXAMPLES/s/^ *//
s/unix/M4_unix/g
s/#/M4_HASH/g
s/\\(/M4_LP/g
s/\\)/M4_RP/g
s/`/M4_LQ/g
s/'\''/M4_RQ/g
s/LDOTS,/LDOTS(),/g
s/,/M4_COMMA/g
s/ @@ ?/,/g
s/@@/,/g
s/ifelse/M4_IFELSE/g
' $* ) | $MFOUR |sed '
/^$/d
s/^BLANK[	 ]*$//
s/DOTS/\.\.\./g
s/M4_unix/unix/g
s/M4_HASH/#/g
s/M4_LP/(/g
s/M4_RP/)/g
s/M4_LQ/`/g
s/M4_RQ/'\''/g
s/M4_COMMA/,/g
s/M4_IFELSE/ifelse/g
'