Entries are collected into ‘\jobname.idx’, processed externally, and loaded from ‘\jobnmae.xdi’. We load an index with a command of the form ‘\Index’
<..indexes..>+
\def\Index{%
\def\--{\IndexEntry}%
\openin15=\jobname.xdi
\ifeof15 \write\:idx{ \pageno=\the\pageno}
\else
{\a:index \input \jobname.xdi \b:index }
\fi}
-_-_-
<..indexes..>+
\def\IndexEntry#1#2#3#4{%
\gdef\:temp{#1}\let\:tempa=\empty
\ifx \:temp\prev:A \gdef\:temp{#2}\ifx \:temp\prev:B
\let\:tempa=\relax
\fi\fi
\ifx \:tempa\relax ,\else
\gdef\:temp{#1}\ifx \:temp\prev:A \else \c:index #1\d:index\fi
\def\:temp{#2}\ifx \:temp\space
\else \hfill\break \e:index#2\f:index\fi
\fi
\g:index #4\h:index
\gdef\prev:A{#1}\gdef\prev:B{#2}%
}
\NewConfigure{index}{8}
-_-_-