<..regular index..>
\newcount\entryNum
<.split index.>
\def\getentries#1#2{\endgroup
\advance\entryNum by 1
\let\parent=\empty
\bparent#1|(<.par del.>\ifx \parent\empty
\eparent#1|)<.par del.>\ifx \parent\empty
<.non-regular index.>%
\else
\immediate\write\idx{\indexentry\the\split{%
\core|LNK\csname \core|(\endcsname
--\string\LNK{\file}{\anchor}{\pointer}}{<.entry num.>}}%
\immediate\write\indexes{\string \indexmark\the\split{%
\core}{<.entry num.>}}%
\fi
\else
\expandafter\edef\csname \core|(\endcsname
{{\file}{\anchor}{\pointer}{<.entry num.>}}%
\fi
}
-_-_-
We replace the page numbers to avoid foeign material there, like spaces in case of roman numbers, introduced by tex4ht. It also protects from duplicate entries in a given page, desliked by makeindex.
<..entry num..>
\the\entryNum
-_-_-
The \hasBar probably removes the need for treating \see and \seealso macros.
<..non-regular index..>
\see#1|see|see<.par del.>%
\ifx \isSee\empty
\hasBar#1|<.par del.>{#1}{#2}%
\else
\immediate\write\idx{\indexentry\the\split{%
\preSee|see{\string\LNK{\file}{\anchor}{\isSee}{}}}{<.entry num.>}}%
\immediate\write\indexes{\string \indexmark\the\split{%
\preSee}{<.entry num.>}}%
\fi
-_-_-
<..regular index..>+
\def\hasBar#1|#2<.par del.>#3#4{%
\def\temp{#2}\ifx \temp\empty
\immediate\write\idx{\indexentry\the\split{%
#3|LNK{\file}{\anchor}{\pointer}}{<.entry num.>}}%
\immediate\write\indexes{\string \indexmark\the\split{%
#3}{<.entry num.>}}%
\else \yeshasBar#3<.par del.>{<.entry num.>}\fi
}
\def\yeshasBar#1|#2<.par del.>#3{%
\immediate\write\idx{\indexentry\the\split{%
#1|yhbLNK{#2}{\file}{\anchor}{\pointer}}{<.entry num.>}}%
\immediate\write\indexes{\string \indexmark\the\split{%
#2}{<.entry num.>}}%
}
-_-_-
<..theindex warning..>+
\def\yhbLNK#1{\expandafter\let\expandafter\LNKidx\csname
#1\endcsname\LNK}
-_-_-