% ====================================================================== % splitindex.tex % Copyright (c) Markus Kohm, 2002 % % $Id: splitindex.tex,v 1.2 2002/11/03 16:17:41 mjk Exp $ % % This file is part of the SplitIndex package % % This file can be redistributed and/or modified under the conditions % of the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % % You are not allowed to redistribute this file without all the % other files of the SplitIndex package % ====================================================================== % Set newlinechar \newlinechar`\^^J % Tell program information \message{splitindex.tex 0.1^^J% Copyright (c) 2002 Markus Kohm ^^J^^J} % Change \catcode of At to be a letter \catcode`\@11\relax % New end processing command (one of these should do the job) \def\endprocessing{% \csname @@end\endcsname \csname end\endcsname \csname endinput\endcsname } % Check out, if we are using LaTeX or plainTeX: \let\@earlyend\relax \def\@tempa{LaTeX2e} \expandafter\ifx\csname fmtname\endcsname\@tempa \else \def\@tempa{plain} \expandafter\ifx\csname fmtname\endcsname\@tempa \def\newwrite{\alloc@7\write\chardef\sixt@@n}% not longer \outer \chardef\@inputcheck=0\relax \else \message{Unkown format \csname fmtname\endcsname^^J You have to use plainTeX or LaTeX2e to run splitindex.tex!^^J} \let\@earlyend\endprocessing \fi \fi \@earlyend % Is \idx defined to the name of the raw index file? \expandafter\ifx\csname idx\endcsname\relax % no it isn't \message{Enter the name of the idx file to be processed: }% \advance\endlinechar\@M \read\m@ne to\idx \advance\endlinechar-\@M \fi % Sorry to late for log file \def\setjobname#1.idx#2\\{\def\jobname{#1}} \expandafter\setjobname\idx.idx\\ \let\@earlyend\relax \openin\@inputcheck\idx % \ifeof\@inputcheck \ifx\jobname\idx \openin\@inputcheck\jobname.idx % \ifeof\@inputcheck \message{Error: Neither file `\idx' nor file `\jobname.idx' found!^^J}% \let\@earlyend\endprocessing \else \xdef\idx{\jobname.idx}% \fi \else \message{Error: File `\idx' not found!^^J}% \let\@earlyend\endprocessing \fi \fi \@earlyend \message{Read from file: \idx^^J% Write to files: \jobname-*.idx^^J} % We are ready to do the processing % First we have to do the tricky splitting of the input line. % We do not allow lines which don't start with \indexentry. % We do not support other index file definitions but with an % optional argument of \indexentry. % We need some catcode changes to read and split the line. So % we do this part of the processing at a group. \newtoks\verbatim@line \begingroup \catcode`\^^M\active \begingroup \catcode`\|=0 \catcode`\\=12 |gdef|splitidxline\indexentry#1{% |if #1[% |expandafter|@splitidxline% |else% |expandafter |@splitidxline |expandafter i|expandafter d% |expandafter x|expandafter ]|expandafter#1% |fi% } |endgroup \gdef\@splitidxline#1]#2^^M{% \idxwrite{#1}{\string\indexentry#2}% } \gdef\processidxline{%\message{\the\verbatim@line}% \expandafter\splitidxline\verbatim@line^^M } \endgroup % Now, we can do the main job: writing to the index files \def\idxwrite#1#2{% \expandafter\ifx\csname write@#1\endcsname\relax % We need a new file \message{New index file: \jobname-#1.idx^^J}% \expandafter\newwrite\csname write@#1\endcsname \immediate\openout\csname write@#1\endcsname \jobname-#1.idx % % FixMe: Don't close by end TeX run but use \closeout \fi \immediate\write\csname write@#1\endcsname{#2}% } % Read the file verbatim and process the lines \newif\ifnoteof \newtoks\par@tok\par@tok{\par} \def\@makeother#1{\catcode`#112\relax} \def\processidxfile{ \immediate\openin\@inputcheck \idx % \noteoftrue \loop \ifeof\@inputcheck \noteoffalse\fi \ifnoteof \begingroup \let\do\@makeother\dospecials \immediate\read\@inputcheck to \verbatim@line \if\par@tok\verbatim@line\else \processidxline \fi \endgroup \repeat } \processidxfile % Trick to end processing in TeX and LaTeX \endprocessing %%% Local Variables: %%% mode: tex %%% TeX-master: t %%% End: