Regular Index

<..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}
 -_-_-