%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% idxmake.4ht                          2009-05-21-09:32 %
% Copyright (C) 2000--2009      Eitan M. Gurari         %
%                                                        %
% This work may be distributed and/or modified under the %
% conditions of the LaTeX Project Public License, either %
% version 1.3c of this license or (at your option) any   %
% later version. The latest version of this license is   %
% in                                                     %
%   http://www.latex-project.org/lppl.txt                %
% and version 1.3c or later is part of all distributions %
% of LaTeX version 2005/12/01 or later.                  %
%                                                        %
% This work has the LPPL maintenance status "maintained".%
%                                                        %
% This Current Maintainer of this work                   %
% is Eitan M. Gurari.                                    %
%                                                        %
% If you modify this program your changing its signature %
% with a directive of the following form will be         %
% appreciated.                                           %
%            \message{signature}                         %
%                                                        %
%                             gurari@cse.ohio-state.edu  %
%                 http://www.cse.ohio-state.edu/~gurari  %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\immediate\write-1{version 2009-05-21-09:32}


\def\SourceInd#1#2#3#4{#1.#2}
\def\MakefileInd#1#2#3#4{#1.#4}

\newcount\cnt
\newtoks\split

\def\noXcatcodes{%
   \cnt=0
   \def\noXXcatcodes{%
      \catcode\cnt12
      \ifnum\cnt<255
          \advance\cnt  1  \expandafter\noXXcatcodes
      \fi }%
   \noXXcatcodes }

\newwrite\idx
\newwrite\indexes
\def\MakefileIn#1#2#3#4{#1.#3}
\def\MakefileIndexes#1#2#3#4{#1.4ix}
\immediate\openout\idx=\expandafter\MakefileIn\filename\relax
\immediate\openout\indexes=\expandafter\MakefileIndexes\filename\relax

\def\beforeentry#1#2#3#4{
   \def\file{#1}\def\anchor{#2}\def\pointer{#3}\def\indexentry{\string#4}
   \begingroup   \noXcatcodes
     \catcode`\s=11 \catcode`\e=11 `%for \see`%
     \catcode`\^^M=10    \catcode`\ =10    \catcode`\^^I=10
     \catcode`\{=1 \catcode`\}=2 \futurelet\next\preGetentries
}
\def\bparent#1|(#2!*?: {\def\core{#1}\def\parent{#2}}
\def\eparent#1|)#2!*?: {\def\core{#1}\def\parent{#2}}
\def\see#1|see#2|see#3!*?: {\def\preSee{#1}\def\isSee{#2}}
\newcount\entryNum
\def\preGetentries{\ifx [\next \expandafter\opGetentries
  \else \global\split={}\expandafter\getentries\fi}
\def\opGetentries[#1]{\global\split={[#1]}\getentries}

\def\getentries#1#2{\endgroup
   \advance\entryNum by 1
   \let\parent=\empty
   \bparent#1|(!*?: \ifx \parent\empty
      \eparent#1|)!*?: \ifx \parent\empty
        \see#1|see|see!*?: %
\ifx \isSee\empty
   \hasBar#1|!*?: {#1}{#2}%
\else
   \immediate\write\idx{\indexentry\the\split{%
     \preSee|see{\string\LNK{\file}{\anchor}{\isSee}{}}}{\the\entryNum
}}%
   \immediate\write\indexes{\string \indexmark\the\split{%
     \preSee}{\the\entryNum
}}%
\fi
%
      \else
        \immediate\write\idx{\indexentry\the\split{%
          \core|LNK\csname \core|(\endcsname
          --\string\LNK{\file}{\anchor}{\pointer}}{\the\entryNum
}}%
        \immediate\write\indexes{\string \indexmark\the\split{%
          \core}{\the\entryNum
}}%
      \fi
   \else
      \expandafter\edef\csname \core|(\endcsname
          {{\file}{\anchor}{\pointer}{\the\entryNum
}}%
   \fi
}
\def\hasBar#1|#2!*?: #3#4{%
   \def\temp{#2}\ifx \temp\empty
      \immediate\write\idx{\indexentry\the\split{%
         #3|LNK{\file}{\anchor}{\pointer}}{\the\entryNum
}}%
      \immediate\write\indexes{\string \indexmark\the\split{%
         #3}{\the\entryNum
}}%
   \else \yeshasBar#3!*?: {\the\entryNum
}\fi
}
\def\yeshasBar#1|#2!*?: #3{%
   \immediate\write\idx{\indexentry\the\split{%
       #1|yhbLNK{#2}{\file}{\anchor}{\pointer}}{\the\entryNum
}}%
   \immediate\write\indexes{\string \indexmark\the\split{%
       #2}{\the\entryNum
}}%
}

\newcount\GetentriesN
\GetentriesN=0
\def\indexentry{\string\indexentry}
\def\Ganchor{\ifnum \GetentriesN<10 0\fi
  \ifnum \GetentriesN<100 0\fi
  \ifnum \GetentriesN<1000 0\fi
  \the\GetentriesN}
\def\Beforeentry{\let\getentries=\Getentries
   \let\Beforeentry=\beforeentry \Beforeentry}
\def\Getentries#1#2{\endgroup
   \advance\GetentriesN by 1
   \let\parent=\empty
   \bparent#1|(!*?: \ifx \parent\empty
      \eparent#1|)!*?: \ifx \parent\empty
        \see#1|see|see!*?: %
        \ifx \isSee\empty \immediate\write\idx{\indexentry\the\split{%
           \string\indNum{\Ganchor}%
%
   #1\string\indNum{\Ganchor}%
\string\comNum}{#2}}%
%
        \else             \immediate\write\idx{\indexentry\the\split{%
   {\Ganchor}%
   \preSee\string\gobble|see{\isSee}}{#2}}%
\fi
      \else
        \immediate\write\idx{\indexentry\the\split{%
           \string\indNum{\Ganchor}%
\string\erange{\csname \core|(\endcsname}
           \core\string\indNum{\Ganchor}%
\string\comNum}{#2}}%
      \fi
   \else
        \immediate\write\idx{\indexentry\the\split{%
           \string\indNum{\Ganchor}%
\string\brange{\Ganchor}
           \core\string\indNum{\Ganchor}%
\string\comNum}{#2}}%
        \expandafter\edef\csname \core|(\endcsname{\Ganchor}%
   \fi
}

\input \expandafter\SourceInd\filename\relax
\immediate\closeout\idx
\immediate\closeout\indexes


\bye
\endinput

