diff options
author | Karl Berry <karl@freefriends.org> | 2009-03-05 16:52:20 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-03-05 16:52:20 +0000 |
commit | 36f6715604625a3e362534859befd7f94e2f4414 (patch) | |
tree | a6e5540dfdc072b17d86ae5667f8d8ceae901522 /Master/texmf-dist/source/latex | |
parent | 58ad5c5ba60b9db988e2cb1c9301fcd77fcbc0c8 (diff) |
rm splitindex, requires compilation
git-svn-id: svn://tug.org/texlive/trunk@12317 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/splitindex/splitidx.dtx | 1505 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/splitindex/splitidx.ins | 93 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/splitindex/splitindex.c | 576 |
3 files changed, 0 insertions, 2174 deletions
diff --git a/Master/texmf-dist/source/latex/splitindex/splitidx.dtx b/Master/texmf-dist/source/latex/splitindex/splitidx.dtx deleted file mode 100644 index 6b279faace6..00000000000 --- a/Master/texmf-dist/source/latex/splitindex/splitidx.dtx +++ /dev/null @@ -1,1505 +0,0 @@ -% \CheckSum{555} -% \iffalse -% ====================================================================== -% splitindex.dtx -% Copyright (c) Markus Kohm, 2002-2006 -% -% $Id: splitidx.dtx,v 1.17 2006/07/29 07:00:46 mjk Exp $ -% -% This file is part of the `SplitIndex bundle'. -% --------------------------------------------- -% -% This file can be redistributed and/or modified under the conditions -% of the LaTeX Project Public License, either version 1.3a 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.3a or later is part of all distributions of LaTeX -% version 2005/12/01 or later. -% -% This work has status 'maintained'. -% Maintainer is Markus Kohm <komascript@gmx.info>. -% -% You are not allowed to redistribute this file without all the -% other files of the `SplitIndex bundle'. The list of all files -% belonging to the `SplitIndex bundle' is given in the file -% `manifest.txt'. -% ====================================================================== -% -%<*dtx> -% \fi -\ProvidesFile{splitidx.dtx}[% -% \iffalse -%</dtx> -%<driver>\ProvidesFile{splitidx.drv}[% -%<package>\ProvidesPackage{splitidx}[% -% \fi - 2006/07/30 v1.0 multiple indices for LaTeX] -% \iffalse -%<*driver> -\documentclass{ltxdoc} -\usepackage{color,alltt} -\newcommand*{\Prompt}{{\color{green}\textbf{\$}}} -\newcommand*{\Package}{}\let\Package\textsf -\newcommand*{\Class}{}\let\Class\textsf -\newcommand*{\Program}{}\let\Program\textsf -\newcommand*{\File}{}\let\File\texttt -\newcommand*{\Cmdline}{}\let\Cmdline\texttt -\providecommand*{\url}{\texttt} -\CodelineIndex -\RecordChanges -\EnableCrossrefs -\GetFileInfo{splitidx.dtx} -\title{Creating More Than One Index Using \Package{splitidx} And - \Program{SplitIndex}\thanks{This file is version \fileversion{} of file - \File{\filename}. Nevertheless it should be stable.}} -\author{Markus Kohm\thanks{Markus Kohm \textless komascript\textcircled{\tiny at}gmx.info\textgreater}} -\date{\filedate} -\begin{document} -\maketitle -\begin{abstract} - With \Package{makeidx} there's a standard package at \LaTeX{} to create - one index to each document. But some times more than one index is - needed. There are different packages with different solutions and different - problems to achieve multiple indices. Here is one more. -\end{abstract} -\tableofcontents -\DocInput{splitidx.dtx} -\end{document} -%</driver> -% \fi -% -% \DoNotIndex{\DeclareOption,\AtEndOfPackage,\renewcommand,\g@addto@macro} -% \DoNotIndex{\renewcommand,\ProcessOptions,\relax,\newcommand,\emph} -% \DoNotIndex{\providecommand,\@bsphack,\@esphack,\@sanitize,\typeout} -% \DoNotIndex{\begingroup,\endgroup,\jobname,\ifx,\else,\fi,\expandafter} -% \DoNotIndex{\csname,\endcsname,\protected@write,\AtBeginDocument} -% \DoNotIndex{\ifHy@hyperindex,\@indexfile,\thepage,\Hy@temp@A} -% \DoNotIndex{\HyInd@ParenLeft,\HyInd@ParenRight,\string,\@ifstar,\@input@} -% \DoNotIndex{\@ifnextchar,\edef,\let,\@empty,\@for,\@tempa,\xdef,\def} -% \DoNotIndex{\catcode,\lowercase,\do,\@ifundefined,\PackageError} -% \DoNotIndex{\MessageBreak,\gdef,\@namedef,\setcounter,\@gobble.\-,\\} -% \DoNotIndex{\@onlypreamble,\@tempb,\@wrindex,\immediate,\newif,\newwrite} -% \DoNotIndex{\openout,\@gobble} -% -% \section{Introduction} -% -% First of all you have to know how index generation normally would be -% done. Read \cite{makeindex} and e.g. \cite{makeindexmanual} if you -% don't. -% -% Generally you load a package e.g. \Package{makeidx}, put \cs{index} commands -% into your document, which are written as \cs{indexentry} commands to the raw -% index file ``\File{\cs{jobname}.idx}''. Then you call an \emph{index -% processor} like \Program{MakeIndex} or \Program{xindy}, which generates a -% sorted index file ``\File{\cs{jobname}.ind}''. This will be included with a -% command like \cs{printindex} at the end of your document. -% -% Most packages, which allows more than one index, open more than one raw -% index file. Each of these files costs a write file handle. \TeX{} has only -% 16 of these. \LaTeX{} itself needs some of these for e.g. \File{.aux}, -% \File{.toc}, \File{.lot}, \File{.lof} and maybe other more or less temporary -% files depends on what you are doing. With package option \texttt{split} -% package \Package{splitidx} works like those packages. -% -% Without option \texttt{split} the \Package{splitidx} package needs only one -% raw index file like \Package{makeidx} would. This one raw index files -% contains all the index entries for all the indices you defined. But to do so -% \Package{splitidx} and the index processor need help. Before calling the -% index processor the one raw index file has to be splitted into multiple raw -% index files. Each of these contains the index entries of one index. This -% splitting can be done with the \Program{splitindex} program. -% -% There is not only one \Program{SplitIndex} program, there are -% \Program{SplitIndex} programs in different programming languages: -% \begin{description} -% \item[\Program{splitindex.pl}] This is written in perl. You need a perl -% interpreter to run it. If you are a Unix user, you have a perl interpreter -% and you can call \Program{splitindex.pl} like you would call a binary -% program or a shell script from your shell. This is the reference -% implementation. I prefers to use this\,---\,because it was the first, the -% easiest and the shortest to be written. -% \item[\Program{splitindex.jar}] This is written using Sun Java 1.4.1. You -% can find the source at \File{splitindex.java}. I wrote it, because Java is -% everywhere and may be installed everywhere and a lot of people are able to -% understand Java source files. But if you don't have Sun Java 1.4 the start -% of this program will result in errors\,---\,e.g. -% \begin{quote} -% \texttt{Exception in thread "main" java.util.zip.ZipException: No such -% file or directory} -% \end{quote} -% if you try to start it with Sun Java 1.3. -% \item[\Program{splitindex-Linux-i386}] This is a Linux-i386-ELF binary from -% the C source file \File{splitindex.c}. It will be renamed to -% \Program{splitindex} during installation, if you are using Linux-i386. At -% section~\ref{C} you find a introduction in how to compile -% \File{splitindex.c} yourself e.g. if you are using Linux-PPC. I wrote the -% C source, because a lot of people like to have a binary and most software -% authors understand C and some people want fast binaries instead of slow -% Java bit code\,---\,even, if the Java program is fast enough. -% \item[\Program{splitindex-OpenBSD-i386}] This is a OpenBSD-i386 binary from -% the C source file \File{splitindex.c}. It will be renamed to -% \Program{splitindex} during installation, if you are using -% OpenBSD-i386. It is almost the same like -% \Program{splitindex-Linux-i386}\,---\,but it doesn't understand long -% option names. -% \item[\Program{splitindex.exe}] This is a CygWin binary from the C source -% file \File{splitindex.c}. A CygWin binary is a Windows (Win32) binary -% using the CygWin DLL. At section~\ref{C} you find a introduction in how to -% use a CygWin binary without installing a whole CygWin -% environment\,---\,nevertheless it is nice to have a almost complete -% CygWin. -% \item[\Program{splitindex.tex}] This is a \TeX{} version of the -% program. Yes, you are right: it is a program written in \TeX{}. It has not -% the whole functionality of the other programs (see section~\ref{TeX}), but -% it is system independent and you don't need to install a other program -% like perl or Sun Java 1.4. It is not impossible to fix all the -% disadvantages of this program\,---\,but it isn't easy and much more work -% than all the other program. -% \end{description} -% Without the \TeX{} version of \Program{splitindex} all of these programs are -% also able to call the index processor after creating the raw index files. -% -% And where is the lisp, the smalltalk, the prolog, the \dots{} version of -% \Program{splitindex}? Hey, four languages are enough for me! If you need one -% more, write it! -% -% -% \section{Using the \Package{splitidx} package} -% \label{package} -% -% -% \subsection{Generating a raw index} -% -% You may use \Package{splitidx} as a drop-in-replacement for -% \Package{makeidx}. If you do so, you just have to replace: -% \begin{verbatim} -% \usepackage{makeidx} -% \end{verbatim}\vspace{-\baselineskip} -% by -% \begin{verbatim} -% \usepackage{splitidx} -% \end{verbatim}\vspace{-\baselineskip} -% -% \DescribeMacro{\makeindex} -% To activate index generation you may use \cs{makeindex}, which is declared -% by the \LaTeX{} kernel. -% You may also load the package with option -% \texttt{makeindex}: -% \begin{verbatim} -% \usepackage[makeindex]{splitidx} -% \end{verbatim}\vspace{-\baselineskip} -% which is almost the same like: -% \begin{verbatim} -% \usepackage{splitidx}\makeindex -% \end{verbatim}\vspace{-\baselineskip} -% -% \DescribeMacro{\index} -% After loading the package you may use command \cs{index}. You can find the -% description of the argument and features of this command at -% \cite{makeindex}. The \Program{splitindex} programs (see -% section~\ref{program}) put all index entries, which are produced with -% \cs{index} to the index with shortcut ``\texttt{idx}''. -% -% \DescribeMacro{\sindex} -% The \Package{splitidx} package also defines the command \cs{sindex} with the -% syntax: -% \begin{quote} -% \cs{sindex}\oarg{shortcut}\marg{index-entry} -% \end{quote} -% to be used to put an index -% entry into the index with the optional given shortcut. If you omit optional -% \meta{shortcut} the shortcut ``\texttt{idx}'' will be used. -% If you use \cs{sindex} you need to split the raw index file into several raw -% index files, before generating the index with an index processor like -% \Program{MakeIndex}. See section~\ref{program} for more information about -% splitting the raw index file. -% -% The shortcut is used not only to distinguish between the different -% indices. It is also used as part of the name of the raw index file generated -% by a \Program{splitindex} program (see section~\ref{program}) and the -% corresponding index file generated by an index processor like -% \Program{MakeIndex} (see \cite{makeindexmanual}). So you should not use -% characters or symbols at \meta{shortcut} which are not allowed at -% filenames. At file systems, which are not case sensitive, you should not mix -% upper and lower case letters. Best would be, if you'll use only lower case -% letters. -% -% Under some unfortunate circumstances you may be forced to put all your index -% entries back to one index. The easiest way to do this without changing all -% \cs{sindex} commands into \cs{index} commands is the package option -% \texttt{allatone}. If you load the package with: -% \begin{verbatim} -% \usepackage[allatone]{splitidx} -% \end{verbatim}\vspace{-\baselineskip} -% or -% \begin{verbatim} -% \usepackage[allatone,makeindex]{splitidx} -% \end{verbatim}\vspace{-\baselineskip} -% \cs{sindex}\oarg{shortcut}\marg{indexentry} will result in -% \cs{index}\marg{indexentry}. -% -% If you like, you may also declare that \cs{index} should be the same -% like command \cs{sindex}. In this case, you may use package -% option \texttt{useindex}, e.g.: -% \begin{verbatim} -% \usepackage[useindex]{splitidx} -% \end{verbatim}\vspace{-\baselineskip} -% This may be usefull using packages like \textsf{jurabib} that expects -% \cs{index} to be the index command. -% -% \emph{Note: Currently only one of the options \texttt{allatone} and -% \texttt{useindex} can be used at same time. If you are using both -% \texttt{useindex} will be disabled! This may result in many error -% messages!} -% -% -% \subsection{Printing an index} -% -% \DescribeMacro{\newindex} -% If you want to generate more than one index without shortcut, you should -% declare this using \cs{newindex} with syntax: -% \begin{quote} -% \cs{newindex}\oarg{index name}\marg{shortcut}. -% \end{quote} -% The mandatory argument \meta{shortcut} is used to distinguish the different -% indices. See description of \cs{sindex} for more information about this. The -% optional argument \meta{index name} is the name of the index. This is also -% the default heading of this index used from \cs{printindex} and -% \cs{printsubindex}. If you omit \meta{index name} the shortcut will be used -% as index name. -% -% Some people do not like to call an extra program like -% \Program{splitindex}. For those the package option \texttt{split} has been -% implemented. With this option \Package{splitidx} opens a new file for each -% index, which is declared using \cs{newindex}. If you are using this option, -% you have to declare all indices you want to use at the preamble of your -% document. This also uses the default \File{idx} file for index entries to -% index with shortcut \texttt{idx}. The number of index files, you can open is -% limited, if you are using this option. This is because of the limitation of -% output streams \TeX{} provides. With this option not only \cs{newindex} may -% result in an error but also \cs{tableofcontents}, \cs{listoffigures}, -% \cs{listoftables} and each other command, which allocates an output stream. -% -% Some people do not like to write \cs{sindex[foo]}\marg{entry}. They want to -% write \cs{foo}\marg{entry}. For those of you the package option -% `\texttt{idxcommands}' has been implemented. This defines a command with the -% name of the \meta{shortcut} for each declared index. If you are using this -% option, you'll get an error, if a shortcut is the name of an already defined -% command. And if you are using this option, the characters of the shortcuts -% must be letters. -% -% \DescribeMacro{\newprotectedindex} -% Using standard index package \textsf{makeidx} the \LaTeX{} kernel command -% \cs{index} may expand the argument of \cs{index}. The kernel uses -% \cs{@santize} to avoid this in some cases. But this fails, if the argument -% was already read e.g. by another macro. So if you define a macro, that reads -% an argument, does something with the argument and write it to the index this -% may expand the argument. Try following: -% \begin{verbatim} -% \documentclass{article} -% \usepackage{ngerman} -% \usepackage{makeidx}\makeindex -% \newcommand*{\Test}[1]{#1\index{#1}} -% \begin{document} -% \Test{"Anderung} -% "Anderung\index{"Anderung} -% \end{document} -% \end{verbatim}\vspace{-\baselineskip} -% This will result in two entries at the \texttt{.idx} file: -% \begin{verbatim} -% \indexentry{\active@dq \dq@prtct{A}nderung}{1} -% \indexentry{"Anderung}{1} -% \end{verbatim}\vspace{-\baselineskip} -% The first one is something expanded that is not wanted. Package -% \textsf{splitindx} behaves same by default. But if you are using -% \cs{newprotectedindex} to define a new index, it uses a trick so avoid -% expansion. If all indices should behave like this, you may simply use -% package option \texttt{protected}. -% \begin{verbatim} -% \documentclass{article} -% \usepackage{ngerman} -% \usepackage[protected,useindex,makeindex]{makeidx} -% \newcommand*{\Test}[1]{#1\index{#1}} -% \begin{document} -% \Test{"Anderung} -% "Anderung\index{"Anderung} -% \end{document} -% \end{verbatim}\vspace{-\baselineskip} -% Will result in two entries at the \texttt{.idx} file: -% \begin{verbatim} -% \indexentry{"Anderung}{1} -% \indexentry{"Anderung}{1} -% \end{verbatim}\vspace{-\baselineskip} -% If you want to know more about the trick, see command -% \cs{@onelevel@sanitize} at the \LaTeX{} kernel documentation, -% \texttt{source2e}. -% -% -% \DescribeMacro{\printindex} -% \changes{v0.2a}{2003/01/05}{fix of documentation bug} -% The \cs{printindex} command is used to print one index or all indices, which -% are declared using \cs{newindex}. How it behaves depends on the syntax you -% are using. -% -% With syntax -% \begin{quote} -% \cs{printindex}\oarg{shortcut}\oarg{index name} -% \end{quote} -% the index file with the optional shortcut will be loaded and titled with -% optional given index name. If \meta{index name} is omitted the default index -% name declared with \cs{newindex} will be used. -% -% If the both optional arguments, \meta{shortcut} and \meta{index name}, are -% omitted and you are using simply -% \begin{quote} -% \cs{printindex} -% \end{quote} -% it behaves like \cs{printindex} from package \Package{makeidx}. You should -% not use this, if you are using \cs{sindex} with optional argument. -% -% You may also print all indices, which were declared using \cs{newindex}. Use -% syntax: -% \begin{quote} -% \cs{printindex*} -% \end{quote} -% to do so. The indices will be printed in the order you declared them using -% \cs{newindex}. -% -% \cs{printindex} uses the default index output of the class and the -% index processor you are using. Most this will be \texttt{theindex} -% environment, but it needn't. But \cs{printindex} will fail to set the name -% of the index if \cs{indexname} isn't use to print the name of the -% index. This would be a failure of the class not of the \Package{splitidx} -% package. I don't know any class with this failure. -% -% -% \DescribeMacro{\printsubindex} -% The \cs{printsubindex} command behaves like \cs{printindex} with same syntax -% but it does some redefinitions before printing the index, to: -% \begin{itemize} -% \item use \cs{section} instead of \cs{chapter} level at classes, which have -% \cs{chapter} and \cs{subsection} instead of \cs{section} level at classes, -% which haven't \cs{chapter}, -% \item deactivate \cs{onecolumn}, \cs{twocolumn} and \cs{clearpage}, -% \cs{cleardoublepage} to start a new page at each index, -% \item change the mark mechanism not to use \cs{markboth} but \cs{markright} -% for setting up the running headline. -% \end{itemize} -% Using this you can print multiple indices at one chapter, if you are using a -% class with \cs{chapter}, or at one section, if you are using a class without -% \cs{chapter}. -% -% -% \DescribeMacro{\setindexpreamble} -% If you are using a KOMA-Script class, you'll know this command. Package -% \Package{splitidx} redefines this command to syntax: -% \begin{quote} -% \cs{setindexpreamble}\oarg{shortcut}\marg{preamble} -% \end{quote} -% So you can define a preamble for each index. Note: Package -% \Package{splitidx} doesn't print the preamble itself. But it lets -% \cs{index@preamble} to be the preamble of the index with the actual -% shortcut, before printing an index using \cs{printindex} or -% \cs{printsubindex}. -% -% -% \DescribeMacro{\useindexpreamble} -% If you are defining your own index environment or if you extend -% \texttt{theindex} environment using e.g. \cs{extendtheindex}, you may use -% \cs{useindexpreamble} with syntax: -% \begin{quote} -% \cs{useindexpreamble}\oarg{additional commands} -% \end{quote} -% to print the preamble of the actual index, which was set using -% \cs{setindexpreamble}. This is not related to the KOMA-Script classes, it -% can also be used e.g. with the standard classes. The commands from optional -% argument \meta{additional commands} are only used, if the preamble is -% defined and not empty. -% -% -% \DescribeMacro{\indexshortcut} -% The macro \cs{indexshortcut} is only defined at \cs{printindex} and -% \cs{printsubindex}. It expands to the shortcut of the actual index. So you -% may use it at your own index environment or extending the \texttt{theindex} -% environment using e.g. \cs{extendtheindex}. -% -% -% \DescribeMacro{\extendtheindex} -% Most classes define the environment \texttt{theindex} to be used for -% printing the index. Using \cs{extendtheindex} with syntax -% \begin{quote} -% \cs{extendtheindex}\marg{before begin}\marg{after begin}^^A -% \marg{before end}\mbox{\marg{after end}} -% \end{quote} -% you may extend this command. The commands from \meta{before begin} are used -% at \cs{begin\{theindex\}} just after starting the group but before starting -% the index. The commands from \meta{after begin} are used after -% \cs{begin\{theindex\}}. The commands from \meta{before end} are used before -% \cs{end\{theindex\}}. The commands from \meta{after end} are used at -% \cs{end\{theindex\}} just after ending the index but just before ending the -% group. -% -% -% \subsection{Examples} -% \label{examples} -% -% Let's see how you may get more than one index. The text of the example is -% silly, so don't think about the text, think about the usage of -% \Package{splitidx}. -% -% \begin{flushleft}\ttfamily -% \cs{documentclass}\{article\} \percentchar \textit{ We use \Class{article} -% class \dots}\\ -% \cs{usepackage}\{splitidx\} \percentchar \textit{ \dots\ and the -% \Package{splitidx} package}\\ -% \cs{makeindex} \percentchar \textit{ And we want index generation}\\ -% ~\\ -% \percentchar \textit{ We define 4 indices:}\\ -% \cs{newindex}[General Index]\{idx\} \percentchar \textit{ Name and shortcut -% of the 1st index}\\ -% \cs{newindex}[Index of Animals]\{ani\} \percentchar \textit{ \dots\ 2nd -% index}\\ -% \cs{newindex}[Index of Fruits]\{fru\} \percentchar \textit{ \dots\ 3rd -% index}\\ -% \cs{newindex}[Index of Vegetables]\{veg\} \percentchar \textit{ \dots\ 4th -% index}\\ -% ~\\ -% \cs{begin}\{document\}\\ -% Apples\cs{sindex}[fru]\{apple\} \percentchar \textit{ an entry to -% }fru\texttt{ index}\\ -% and oranges\cs{sindex}[fru]\{orange\} \percentchar \textit{ an entry to -% }fru\texttt{ index}\\ -% are fruits\cs{sindex}\{fruits\}.\ \percentchar \textit{ an implicit entry -% to }idx\textit{ index}\\ -% Tomatoes\cs{sindex}[veg]\{tomato\} \percentchar \textit{ an entry to -% }veg\textit{ index}\\ -% are\\ -% vegetables\cs{index}\{vegetables\}.\ \percentchar \textit{ an implicit -% entry to }idx\textit{ index}\\ -% Cats\cs{sindex}[ani]\{cat\} \percentchar \textit{ an entry to -% }ani\textit{ index}\\ -% are animals\cs{sindex}[idx]\{animals\}.\ \percentchar \textit{ an explicite -% entry to }idx\textit{ index}\\ -% ~\\ -% \cs{printindex*} \percentchar \textit{ print all indices}\\ -% \cs{end}\{document\} -% \end{flushleft} -% After processing the file above with \LaTeX{} you'll get a raw index file -% with following contents: -% \begin{verbatim} -% \indexentry[fru]{apple}{1} -% \indexentry[fru]{orange}{1} -% \indexentry{fruits}{1} -% \indexentry[veg]{tomato}{1} -% \indexentry{vegetables}{1} -% \indexentry[ani]{cat}{1} -% \indexentry[idx]{animals}{1} -% \end{verbatim}\vspace{-\baselineskip} -% Section~\ref{program} shows, how you can process this raw index file to get -% several raw index files and several index files. You will get four index -% files. Each of it will be input with the single \cs{printindex*} command at -% the example above. Each will produce a single section starting on an new -% page with one column section headings ``General Index'', ``Index of -% Animals'', ``Index of Fruits'' and ``Index of Vegetables''. Each index is -% printed in twocolumn mode. -% -% Maybe you would like to have all indices being subsections at one -% section. You can do this, if you replace the \cs{printindex*} command at the -% example above by the following: -% \begin{flushleft}\ttfamily -% \cs{twocolumn}[\percentchar\textit{ set the title onecolumn}\\ -% \ \cs{section*}\{Indices\} \percentchar\textit{ the section with the -% indices}\percentchar\\ -% \ \cs{markboth}\{Indices\}\{Indices\} \percentchar\textit{ setting up the -% running headline }\percentchar\\ -% ]\percentchar\textit{ but the indices twocolumn}\\ -% \cs{printsubindex*} \percentchar\textit{ print all indices} -% \end{flushleft} -% Note that I've used \cs{printsubindex*} instead of \cs{printindex*} at this -% modification. You don't need to setup the running headline, if you are using -% page style \texttt{plain}, which is default at \Class{article} class. But if -% you're using page style \texttt{headings} you should do this, if you are -% using \cs{section*}. If you are using a KOMA-Script class, you can use -% \cs{addsec} or \cs{addsec*} instead of \cs{section*} to not need manual -% updating of the running headline. -% -% Maybe you want the general index to be the section, while the other indices -% should be subsections of the general index. Maybe you'll try to replace the -% above by the following: -% \begin{flushleft}\ttfamily -% \percentchar\textit{\#\#\#\#\# This will not do the thing you wanted! -% \#\#\#\#\#}\\ -% \cs{printindex}[idx] \percentchar\textit{ print index }idx\textit{ as -% section}\\ -% \cs{printsubindex}[ani] \percentchar\textit{ print index }ani\textit{ as -% subsection}\\ -% \cs{printsubindex}[fru] \percentchar\textit{ print index }fru\textit{ as -% subsection}\\ -% \cs{printsubindex}[veg] \percentchar\textit{ print index }veg\textit{ as -% subsection}\\ -% \end{flushleft} -% But this will result in a twocolumn section with general index \texttt{idx} -% and three onecolumn subsections with the other indices and a page break -% after the general index. Why? At the end of \texttt{theindex} environment of -% \cs{printindex} the onecolumn mode, which was valid before \cs{printindex} -% will be restored. If twocolumn mode was valid before \cs{printindex} a -% \cs{clearpage} command will be included at the end of \texttt{theindex}. -% So what's the solution? Remembering the \cs{extendtheindex} command you can -% write: -% \begin{flushleft}\ttfamily -% \cs{begingroup} \percentchar\textit{ hold following extension local to this -% group}\\ -% \ \cs{extendtheindex}\percentchar \textit{ some changes of -% }theindex\textit{ environment}\\ -% \ \ \{\}\percentchar\textit{ no change before beginning}\\ -% \ \ \{\}\percentchar\textit{ no change after beginning}\\ -% \ \ \{\cs{let}\cs{onecolumn}\cs{relax} \percentchar\textit{ deactivate -% \cs{onecolumn} before ending}\\ -% \ \ \ \cs{let}\cs{clearpage}\cs{relax} \percentchar\textit{ deactivate -% \cs{clearpage} before ending}\\ -% \ \ \}\percentchar \textit{ changes before ending}\\ -% \ \ \{\}\percentchar\textit{ no change after ending}\\ -% \ \cs{printindex}[idx] \percentchar\textit{ print index }idx\textit{ as -% section}\\ -% \cs{endgroup} \percentchar\textit{ end group with extended }theindex\textit{ -% environment}\\ -% \cs{printsubindex}[ani] \percentchar\textit{ print index }ani\textit{ as -% subsection}\\ -% \cs{printsubindex}[fru] \percentchar\textit{ print index }fru\textit{ as -% subsection}\\ -% \cs{printsubindex}[veg] \percentchar\textit{ print index }veg\textit{ as -% subsection}\\ -% \cs{onecolumn} \percentchar\textit{ finish the indices} -% \end{flushleft} -% With this extension the whole index will be set twocolumn with no page break -% before the first subsection. But you have to switch back to onecolumn mode -% manually at the end of the indices. -% -% The example above may be modified, if you want a onecolumn index: -% \begin{flushleft}\ttfamily -% \cs{begingroup} \percentchar\textit{ hold following extension local to this -% group}\\ -% \ \cs{makeatletter} \percentchar\textit{ allow }@\textit{ at macro names}\\ -% \ \cs{extendtheindex}\percentchar \textit{ some changes of -% }theindex\textit{ environment}\\ -% \ \ \{\cs{let}\cs{twocolumn}\cs{@firstoptofone} \percentchar\textit{ -% deactivate \cs{twocolumn}}\\ -% \ \ \ \cs{let}\cs{onecolumn}\cs{@firstoptofone} \percentchar\textit{ -% deactivate \cs{twocolumn}}\\ -% \ \ \ \cs{let}\cs{clearpage}\cs{relax} \percentchar\textit{ deactivate -% \cs{clearpage}}\\ -% \ \ \}\percentchar \textit{ changes before beginning}\\ -% \ \ \{\}\percentchar\textit{ no change after beginning}\\ -% \ \ \{\}\percentchar\textit{ no change before ending}\\ -% \ \ \{\}\percentchar\textit{ no change after ending}\\ -% \ \cs{makeatother} \percentchar\textit{ deactivate \cs{makeatletter}}\\ -% \ \cs{printindex} \percentchar\textit{ print index}\\ -% \cs{endgroup} \percentchar\textit{ end group with extended }theindex\textit{ -% environment} -% \end{flushleft} -% This not only works with splitted index. You may use this also with one -% single index. -% -% I hope, that these examples were useful to understand, how to use -% \Package{splitidx}. Next section will show you, how to generate the indices -% from a single raw index. -% -% -% \section{Splitting the index} -% \label{program} -% -% At most you'll call one of the \Program{splitindex} programs with one -% parameter, the name of the raw index file, to split the raw index file into -% several raw index files and call the index processor -% \Program{MakeIndex}. Some of you will also set options to use another index -% processor e.g. \Program{xindy} or to set some options of the index processor -% e.g. ``\Cmdline{-g}'' to use German sorting with \Program{MakeIndex}. Only -% few of you will also change the parsing of the raw index file and the -% generation if the filenames and contents of the several new raw index files. -% -% The names of the options and the syntax of the Arguments is same at all of -% the programs except \Program{splitindex.tex} (see section~\ref{TeX}): -% \begin{description}\setlength{\labelsep}{1em} -% \item[\texttt{--help}] -% \item[{\makebox[1.2em][l]{\texttt{-h}}}]\vspace{-2\itemsep} -% Show information about usage, options and arguments and terminate without -% processing a index file. -% \item[\texttt{--makeindex} \meta{program name}]~ -% \item[\texttt{-m} \meta{program name}]\vspace{-2\itemsep} -% Call \meta{program name} -% instead of \Program{makeindex} to process each generated raw index -% file. You may set this variable to an empty value. How this may be done -% depends on the shell, which you are using. Using bash you may achieve an -% empty value e.g. using \texttt{""} or \texttt{''}. An empty value means: -% Don't call an index processor. -% \item[\texttt{--identify} \meta{regular expression}]~ -% \item[\texttt{-i} \meta{regular expression}]\vspace{-2\itemsep} -% Uses \meta{regular -% expression} to identify the index short cut and the contents of the -% raw index file with this shortcut. The default value is: -% ``\verb|^(\\indexentry)\[([^]]*)\](.*)$|''. This means: -% \begin{description} -% \item[{\makebox[1em][l]{\texttt{\textasciicircum}}}] -% Search from beginning of the line. -% \item[\texttt{(\string\\indexentry)}]~\par -% Search for ``\verb|\indexentry|'' and -% set group 1 to this. -% \item[{\makebox[1em][l]{\texttt{\string\[}}}] -% Search for ``\verb|[|'' and ignore it. -% \item[\texttt{([\textasciicircum]]*)}]~\par -% Search for any character which is not ``]'' and set group 2 to this. -% \item[{\makebox[1em][l]{\texttt{\string\]}}}] -% Search for ``\verb|]|'' and ignore it. -% \item[\texttt{(.*)\$}]~\par -% Search for all characters till end of line and set group 3 to these. -% \end{description} -% The \meta{regular expression} is POSIX~1003.2 compatible. -% \item[\texttt{--resultis} \meta{pattern}]~ -% \item[\texttt{-r} \meta{pattern}]\vspace{-2\itemsep} -% Set the lines, which are written to the -% generated raw index files after identification (see option -% \texttt{--identify}) to \meta{pattern}. Each \texttt{\$}\meta{digit} at -% \meta{pattern} will be replaced by the corresponding group, e.g. \verb|$1| -% will be replaced by the first group (see \texttt{--identify}). The default -% is: ``\verb|$1$3|'', which means: contents of group 1 and group 3. -% -% If the \meta{regular expression} of option \texttt{--identify} doesn't -% match a line at the raw index file the line itself will be written. -% \item[\texttt{--suffixis} \meta{pattern}]~ -% \item[\texttt{-s} \meta{pattern}]\vspace{-2\itemsep} -% Set the suffix of the names of the generated raw index files after -% identification (see option \texttt{--identify}) to \meta{pattern}. Each -% \texttt{\$}\meta{digit} at \meta{pattern} will be replaced by the -% corresponding group, e.g. \verb|$1| will be replaced by the first group -% (see \texttt{--identify}). The default is: ``\verb|-$2|'', which means: -% character `\texttt{-}' followed by contents of group 2. -% -% If the \meta{regular expression} of option \texttt{--ifentify} doesn't -% match a line at the raw index file, all groups will be set to -% ``\texttt{idx}''. -% \item[\texttt{--verbose}] -% \item[{\makebox[1.2em][l]{\texttt{-v}}}]\vspace{-2\itemsep} -% Increase verbosity by one. More verbose means: tell the user more about, -% what the program is doing. -% \item[\texttt{--version}] -% \item[{\makebox[1.2em][l]{\texttt{-V}}}]\vspace{-2\itemsep} -% Show information about program version and terminate without processing a -% index file. -% \end{description} -% The OpenBSD binary \Program{splitindex-OpenBSD-i386} doesn't understand the -% long option names (\texttt{--makeindex}, \texttt{--identify} \dots). But you -% can use the alternative short option names (\texttt{-m}, \texttt{-i} \dots). -% -% The first no-option-argument at the command line is the name if the raw -% index file, which has to be processed. All arguments, which follow the -% argument ``\texttt{--}'' are interpreted as no-optional-arguments. All but -% the first no-option-arguments will be passed to the index processor. -% -% You will find some examples at the following subsections. -% -% -% \subsection{Using \Program{splitindex.pl}} -% \label{perl} -% -% This is the reference implementation. Let's use an example to demonstrate, -% how it works. If you have following \LaTeX{} file ``\File{allabout.tex}'': -% \begin{verbatim} -% \documentclass{article} -% \usepackage[makeindex]{splitidx} -% \begin{document} -% Apples\sindex[fru]{apple} and oranges\sindex[fru]{orange} are -% fruits\sindex{fruits}. -% Tomatos\sindex[veg]{tomato} are vegetables\sindex{vegetables}. -% Cats\sindex[ani]{cat} are animals\sindex[idx]{animals}. -% \end{document} -% \end{verbatim}\vspace{-\baselineskip} -% this generates a file ``File{allabout.idx}'': -% \begin{verbatim} -% \indexentry[fru]{apple}{1} -% \indexentry[fru]{orange}{1} -% \indexentry{fruits}{1} -% \indexentry[veg]{tomato}{1} -% \indexentry{vegetables}{1} -% \indexentry[ani]{cat}{1} -% \indexentry[idx]{animals}{1} -% \end{verbatim}\vspace{-\baselineskip} -% -% This file can't be processed by a index processor like -% \Program{MakeIndex}. If you want so split these raw index file into several -% and run the default index processor, you do the following call (the -% \Prompt{} is a symbol for the shell prompt): -% \begin{quote} -% \Prompt{}\verb|splitindex.pl allabout.idx| -% \end{quote} -% You may omit the extension ``\File{.idx}'': -% \begin{quote} -% \Prompt{}\verb|splitindex.pl allabout| -% \end{quote} -% Both commands will result in a file \File{allabout-fru.idx}: -% \begin{verbatim} -% \indexentry[fru]{apple}{1} -% \indexentry[fru]{orange}{1} -% \end{verbatim}\vspace{-\baselineskip} -% a file \File{allabout-idx.idx} -% \begin{verbatim} -% \indexentry{fruits}{1} -% \indexentry{vegetables}{1} -% \indexentry{animals} -% \end{verbatim}\vspace{-\baselineskip} -% a file \File{allabout-veg.idx}: -% \begin{verbatim} -% \indexentry[veg]{tomato}{1} -% \end{verbatim}\vspace{-\baselineskip} -% and a file \File{allabout-ani.idx}: -% \begin{verbatim} -% \indexentry[ani]{cat}{1} -% \end{verbatim}\vspace{-\baselineskip} -% After generation of these files, it calls the default index processor using -% the command lines: -% \begin{verbatim} -% makeindex allabout-fru.idx -% makeindex allabout-idx.odx -% makeindex allabout-veg.idx -% makeindex allabout-ani.idx -% \end{verbatim}\vspace{-\baselineskip} -% These calls create the raw index files \File{allabout-fru.ind}, -% \File{allabout-idx.ind}, \File{allabout-veg.ind} and -% \File{allabout-ani.ind}, which can be loaded to the document using -% e.g. \cs{printindex} from package \Package{splitidx}. -% -% If you don't want \Program{splitindex} to call any index processor, use -% \begin{quote} -% \Prompt{}\verb|splitindex.pl -m "" allabout| -% \end{quote} -% instead of the shell command above. -% -% You may achieve the same files like above using (it's one input line not two -% like shown here): -% \begin{quote}\raggedright -% \Prompt{}\verb|splitindex.pl -i '^\\indexentry\[([^]]*)\](.*)$'| -% \verb|-s '-$1'| \verb|-r '\\indexentry$2' allabout| -% \end{quote} -% -% If you want \Program{splitindex} to call \Program{makeindex} with additional -% options ``\verb|-s foo.ist|'' to use the MakeIndex style file -% \File{foo.ist}, you can do this call: -% \begin{quote} -% \Prompt{}\verb|splitindex.pl allabout -- -s foo.ist| -% \end{quote} -% As you see ``\verb|--|'' is used to tell \Program{splitindex} to not -% interprete ``\verb|-s foo.ist|'' as option ``\verb|--suffixis foo.ist|''. -% All \Program{splitindex} options must be put before ``\verb|--|'' but you -% can put the raw file argument ``\verb|allabout|'' after that: -% \begin{quote} -% \Prompt{}\verb|splitindex.pl -- allabout -s foo.ist| -% \end{quote} -% -% If you want so use index processor \Program{xindy} instead of default index -% processor \Program{MakeIndex} you can do this call: -% \begin{quote} -% \Prompt{}\verb|splitindex.pl -m xindy allabout| -% \end{quote} -% If this is not at the standard \texttt{PATH} you may set the whole path: -% \begin{quote} -% \Prompt{}\verb|splitindex.pl -m /home/me/bin/xindy allabout| -% \end{quote} -% With most perl implementations perl module \verb|Getopt::Long| allows to -% put options after no-option-arguments. So you may also write: -% \begin{quote} -% \Prompt{}\verb|splitindex.pl allabout -m /home/me/bin/xindy| -% \end{quote} -% with the same result. -% -% -% \subsection{Using \Program{splitindex.jar}} -% \label{Java} -% -% This should also be portable. If you are not using Sun Java 1.4.1 you may -% try to recompile this using the shell command: -% \begin{quote} -% \Prompt{}\verb|javac splitindex.java| -% \end{quote} -% This should result in a new \File{splitindex.class}. But it will fail -% e.g. with Sun Java 1.3, because regular expressions are needed, which are -% not available at Sun Java 1.3. -% -% The call of \Program{splitindex.class} is almost the same like shown at -% section~\ref{perl} for \Program{splitindex.pl}, but you have to replace -% ``\verb|splitindex.pl|'' by ``\verb|java splitindex|''. So the last example -% from section~\ref{perl} becomes: -% \begin{quote} -% \Prompt{}\verb|java splitindex allabout -m /home/me/bin/xindy| -% \end{quote} -% -% -% \subsection{Using \Program{splitindex} or \Program{splitindex.exe}} -% \label{C} -% -% The Linux program \Program{splitindex} was compiled using glibc, so it works -% same like \Program{splitindex.pl} and you may use not only: -% \begin{quote} -% \Prompt{}\verb|splitindex -m /home/me/bin/xindy allabout| -% \end{quote} -% but also: -% \begin{quote} -% \Prompt{}\verb|splitindex allabout -m /home/me/bin/xindy| -% \end{quote} -% -% But the CygWin program \Program{splitindex.exe} was compiled using a -% CygWin library. Because of this all options must be put before the first -% no-option-argument. So you have to use: -% \begin{quote} -% \Prompt{}\verb|splitindex.exe -m /home/me/bin/xindy allabout| -% \end{quote} -% At: -% \begin{quote} -% \Prompt{}\verb|splitindex.exe allabout -m /home/me/bin/xindy| -% \end{quote} -% the arguments ``\verb|-m /home/me/bin/xindy|'' will be passed to the default -% index processor \Program{MakeIndex}! -% -% You need the CygWin-DLL \File{cygwin1.dll} to run -% \Program{splitindex.exe}. If you haven't already installed it, you may -% download the DLL from \url{http://cygwin.com/snapshots}. You need -% \Program{bzip2}, which can be found at \url{http://source.redhat.com/bzip2}, -% to decompress it. You may use \url{http://cygwin.com/setup.exe} to download -% and install a minimal CygWin environment alternatively. -% -% The Linux-i386-ELF binary \Program{splitindex} was compiled and linked -% using: -% \begin{quote}\raggedright -% \Prompt{}\verb|gcc -O3 -Wall -osplitindex splitindex.c|\\ -% \Prompt{}\verb|strip splitindex|\\ -% \end{quote} -% The \Program{gcc} was: -% \begin{verbatim} -% gcc (GCC) 3.2 -% Copyright (C) 2002 Free Software Foundation, Inc. -% \end{verbatim}\vspace{-\baselineskip} -% The used \Program{glibc} is version 2.1. -% -% If you compile another binary e.g. for BSD, please contact me, so we may put -% the new binary into the distribution or can build another binary -% distribution. -% -% -% \subsection{Using \Program{splitindex.tex}} -% \label{TeX} -% -% The \TeX{} or \LaTeX{} program \Program{splitindex.tex} doesn't know any -% options or arguments. It number of files, which can be generated, is limited -% to to number of \TeX's free write handles. If there are other lines than -% ``\verb|\indexentry|''-lines at the raw index file, running -% \Program{splitindex.tex} will result in an error. -% -% You may use \Program{splitindex.tex} interactive: -% \begin{quote} -% \Prompt{}\verb|tex splitindex| -% \end{quote} -% or -% \begin{quote} -% \Prompt{}\verb|latex splitindex| -% \end{quote} -% If you do so, you will be asked for the name of the raw index file. You have -% to omit the extension ``\File{.idx}'' answering that question. -% -% You may also use the \Program{splitindex.tex} not interactive e.g. if you -% are working with a batch. To do so you have to define macro \cs{IDX} to the -% name of the raw index file without extension ``\texttt{.idx}''. So the first -% example of section~\ref{perl} would become: -% \begin{quote} -% \Prompt{}\verb|tex \def\IDX{allabout}\input splitindex| -% \end{quote} -% You may also use \LaTeX{} instead of \TeX: -% \begin{quote} -% \Prompt{}\verb|latex \def\IDX{allabout}\input splitindex| -% \end{quote} -% -% The current version of \Program{splitindex.tex} doesn't call any index -% processor. But maybe in future a version will be able to do so. -% -% \StopEventually{^^A -% \begin{thebibliography}{99} -% \bibitem{makeindex} \textsc{Leslie Lamport}: \textit{MakeIndex: An Index -% Processor For \LaTeX}, 17 February 1987 -% \bibitem{makeindexmanual} \textsc{Pehong Chen}, \textsc{Rick P. C. Rodgers}: -% \textit{MAKEINDEX(1L)}, Manual page, 10 December 1991 -% \end{thebibliography} -% \PrintIndex\PrintChanges} -% -% -% \section{Combining Indices} -% -% Now you should know, how to use package \Package{splitidx} and the -% \Program{SplitIndex} programs to split the index. But what about combining -% two or more indices to one, e.g. you don't want vegetables and fruits in the -% same index? Try this: -% \begin{flushleft}\ttfamily -% \cs{documentclass}\{article\} \percentchar \textit{ We use \Class{article} -% class \dots}\\ -% \cs{usepackage}\{splitidx\} \percentchar \textit{ \dots\ and the -% \Package{splitidx} package}\\ -% \cs{makeindex} \percentchar \textit{ And we want index generation}\\ -% ~\\ -% \percentchar \textit{ We define 4 indices:}\\ -% \cs{newindex}[General Index]\{idx\} \percentchar \textit{ Name and shortcut -% of the 1st index}\\ -% \cs{newindex}[Index of Animals]\{ani\} \percentchar \textit{ \dots\ 2nd -% index}\\ -% \cs{newindex}[Index of Fruits And Vegetables]\{fru\} \percentchar -% \textit{ \dots\ 3rd -% index}\\ -% ~\\ -% \cs{begin}\{document\}\\ -% Apples\cs{sindex}[fru]\{apple\} \percentchar \textit{ an entry to -% }fru\texttt{ index}\\ -% and oranges\cs{sindex}[fru]\{orange\} \percentchar \textit{ an entry to -% }fru\texttt{ index}\\ -% are fruits\cs{sindex}\{fruits\}.\ \percentchar \textit{ an implicit entry -% to }idx\textit{ index}\\ -% Tomatoes\cs{sindex}[veg]\{tomato\} \percentchar \textit{ an entry to -% }veg\textit{ index}\\ -% are\\ -% vegetables\cs{index}\{vegetables\}.\ \percentchar \textit{ an implicit -% entry to }idx\textit{ index}\\ -% Cats\cs{sindex}[ani]\{cat\} \percentchar \textit{ an entry to -% }ani\textit{ index}\\ -% are animals\cs{sindex}[idx]\{animals\}.\ \percentchar \textit{ an explicite -% entry to }idx\textit{ index}\\ -% ~\\ -% \cs{printindex*} \percentchar \textit{ print all indices}\\ -% \cs{end}\{document\} -% \end{flushleft} -% And do the following call after splitting the index using -% \Program{SplitIndex}: -% \begin{quote}\raggedright -% \Prompt{}\verb|makeindex allabout-veg.idx allabout-fru.idx|\\ -% \end{quote} -% Alternatively you can concatenate \File{allabout-fru.idx} to -% \File{allabout-veg.idx} before running the index processor on -% \File{allabout-veg.idx}. -% -% -% -% \section{Implementation of \Package{splitidx}} -% -% \begin{macrocode} -%<*package> -% \end{macrocode} -% -% \subsection{Options} -% -% The first option is used to activate index generation. -% \begin{macrocode} -\DeclareOption{makeindex}{\AtEndOfPackage{\makeindex}} -% \end{macrocode} -% -% \changes{v0.9}{2006/05/07}{new option \texttt{useindex}} -% With option \texttt{useindex} the original command \cs{index} behaves like -% \cs{sindex}. -% \begin{macrocode} -\DeclareOption{useindex}{% - \def\@se@nd@xc@d@{\let\index\sindex}% - \AtEndOfPackage{\@se@nd@xc@d@}% -} -\let\@se@nd@xc@d@\relax -% \end{macrocode} -% -% There is also an option to make \cs{sindex} ignores the optional argument and -% behaves like \cs{index}. -% \begin{macrocode} -\DeclareOption{allatone}{% - \ifx\@se@nd@xc@d@\relax\else - \PackageInfo{splitidx}{option `allatone' overwrites option `useindex'}% - \let\@se@nd@xc@d@\relax - \fi - \AtEndOfPackage{% - \renewcommand*{\sindex}[1][]{\index}% - \g@addto@macro\makeindex{\renewcommand*{\sindex}[1][]{\index}}% - }% -} -% \end{macrocode} -% -% \changes{v0.9}{2006/05/07}{new option \texttt{protected}} -% Do not expand index arguments. -% \begin{macrocode} -\newif\if@verbindex\@verbindexfalse -\DeclareOption{protected}{\@verbindextrue} -% \end{macrocode} -% -% \changes{v0.2}{2002/11/15}{new option \texttt{idxcommands}} -% With option \texttt{idxcommands} every \cs{newindex} also defines a new index -% command. -% \begin{macrocode} -\newif\if@newidxcmd\@newidxcmdfalse -\DeclareOption{idxcommands}{\@newidxcmdtrue} -% \end{macrocode} -% -% \changes{v0.2}{2002/11/15}{new option \texttt{split}} -% With option \texttt{split} each index uses its own index file. -% \begin{macrocode} -\newif\if@splitidx\@splitidxfalse -\DeclareOption{split}{\@splitidxtrue} -% \end{macrocode} -% -% Processing the options -% \begin{macrocode} -\ProcessOptions\relax -% \end{macrocode} -% -% -% \subsection{Setting an Index Entry} -% -% \begin{macro}{\see} -% \begin{macro}{\seealso} -% \begin{macro}{\seename} -% \begin{macro}{\alsoname} -% These are four standard macros, which are also defined at -% \Package{makeidx}. Hey, these definitions are stolen from \Package{makeidx}! -% No, no, I'm not a bad guy, read ``\File{legal.txt}'', which comes with -% \Package{makeidx}. -% \begin{macrocode} -\newcommand*\see[2]{\emph{\seename} #1} -\providecommand*\seealso[2]{\emph{\alsoname} #1} -\providecommand\seename{see} -\providecommand*\alsoname{see also} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\sindex} -% \begin{macro}{\@wrsindex} -% \changes{v0.9}{2006/03/07}{optionally do not expand the index argument} -% \begin{macro}{\@@wrsindex} -% This works similar to original \cs{index} but uses a splitted index. So it -% allows an optional argument. -% \begin{macrocode} -\newcommand*{\sindex}[2][]{% -} -\g@addto@macro\makeindex{% - \renewcommand*{\sindex}{% - \@bsphack\begingroup - \@sanitize - \@wrsindex - }% - \typeout{Using splitted index at \jobname.idx}% - \@se@nd@xc@d@ -} -% \end{macrocode} -% At the following \cs{@@wrsindex} is used as a hook. If it is defines, it is -% used to write out the index entry. This hook may be used from -% e.g. \Package{hyperref} to add \verb|hyperpage| to the font selection of the -% page number. This only works with \verb+encap |+. -% \changes{v1.0}{2006/07/30}{one level expansion of \cs{\@tempa} for -% hyperref hook} -% \begin{macrocode} -\newcommand*{\@wrsindex}[2][]{% - \ifx\relax#1\relax - \if@splitidx - \@wrsindex[idx]{#2}% - \else - \def\@tempa{#2}% - \if@verbindex\@onelevel@sanitize\@tempa\fi - \@wrindex{\@tempa}% - \fi - \else - \def\@tempa{#2}% - \csname index@#1@hook\endcsname - \expandafter\ifx\csname @@wrsindex\endcsname\relax - \@@@wrsindex{#1}{{\@tempa}{\thepage}}% - \else - \def\@tempb{\@@wrsindex{#1}}% - \expandafter\@tempb\@tempa||\\% - \fi - \endgroup - \@esphack - \fi -} -\newcommand*{\@@@wrsindex}[2]{% - \begingroup - \if@splitidx - \expandafter\ifx\csname @indexfile@#1\endcsname\relax - \PackageError{splitidx}{% - Index entry for not existing index% - }{% - You've tried to set an index to index `#1', without - defining\MessageBreak - that index before using \string\newindex.\MessageBreak - This is only allowed, if you are not using package option - `split'.% - }% - \else - \expandafter\protected@write\csname @indexfile@#1\endcsname{}{% - \string\indexentry#2% - }% - \fi - \else - \protected@write\@indexfile{}{% - \string\indexentry[#1]#2% - }% - \fi - \endgroup -} -% \end{macrocode} -% If \Package{hyperref} was loaded at \cs{begin\{document\}} and -% \Package{hyperref}-option \texttt{hyperindex} isn't disabled, and the hook -% is not used, define it: -% \begin{macrocode} -\AtBeginDocument{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname ifHy@hyperindex\endcsname\relax - \else - \csname ifHy@hyperindex\endcsname - \expandafter\ifx\csname @@wrsindex\endcsname\relax - \def\@@wrsindex#1#2|#3|#4\\{% - \ifx\\#3\\% - \@@@wrsindex{#1}{{#2|hyperpage}{\thepage}}% - \else - \def\Hy@temp@A{#3}% - \ifx\Hy@temp@A\HyInd@ParenLeft - \@@@wrsindex{#1}{{#2|#3hyperpage}{\thepage}}% - \else - \ifx\Hy@temp@A\HyInd@ParenRight - \@@@wrsindex{#1}{{#2|#3hyperpage}{\thepage}}% - \else - \@@@wrsindex{#1}{{#2|#3}{\thepage}}% - \fi - \fi - \fi - }% - \fi - \csname fi\endcsname - \fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% -% \subsection{Printing One Or More Indices} -% -% \begin{macro}{\printindex} -% \begin{macro}{\printindex*} -% This is used to print an index in the normal way. In most cases this uses -% |theindex| environment, but it need not. -% \begin{macrocode} -\newcommand*{\printindex}{% -% \end{macrocode} -% The command may be called in the star version, which prints all defined -% indices. This is same as \cs{printindices}. -% \begin{macrocode} - \@ifstar {% - \begingroup - \let\printindex@@endhook=\printindex@endhook - \let\printindex@endhook=\relax - \printindices% - \csname printindex@@endhook\endcsname - \endgroup - }{% -% \end{macrocode} -% It may also be called with optional arguments to print one of the indices: -% \begin{macrocode} - \@ifnextchar [\@printindex%] brace check comment -% \end{macrocode} -% Or it is called without any parameter and so it is same as at -% \Package{makeidx} package: -% \begin{macrocode} - {% - \@input@{\jobname.ind}% - \csname printindex@endhook\endcsname - }% - }% -} -% \end{macrocode} -% \begin{macro}{\@printindex} -% This is used to print one of the indices. The optional (here obligatory) -% argument is the shortcut of the index. -% \begin{macrocode} -\newcommand*{\@printindex}{} -\def\@printindex[#1]{% -% \end{macrocode} -% There can be one more optional argument, which is the title of the index. If -% not, the default title \cs{index@\meta{shortcut}@name} is used. -% \begin{macrocode} - \@ifnextchar [% - {\@@printindex[{#1}]}% - {\@@printindex[{#1}][\csname index@#1@name\endcsname]}% -} -% \end{macrocode} -% \begin{macro}{\@@pintindex} -% \changes{v0.2}{2002/11/15}{with option \texttt{split} general index has no -% suffix} -% We use the default environment to print one of the indices, but we redefine -% \cs{indexname} to the title of the wanted index, \cs{indexshortcut} to the -% shortcut of the wanted index and \cs{index@preamble} to the preamble of the -% wanted index. We do this in a group so it is local. -% \begin{macrocode} -\newcommand*{\@@printindex}{} -\def\@@printindex[#1][#2]{% - \begingroup - \edef\indexshortcut{#1}% - \def\indexname{#2}% - \let\index@preamble\relax - \expandafter\let\expandafter\index@preamble - \csname index@\indexshortcut @preamble\endcsname - \if@splitidx - \def\@tempa{idx}\def\@tempb{#1}% - \ifx\@tempa\@tempb\let\@indexsuffix\@gobble\fi - \fi - \@input@{\jobname\@indexsuffix{#1}.ind}% - \endgroup - \csname printindex@endhook\endcsname -} -% \end{macrocode} -% \begin{macro}{\@indexsuffix} -% This generated the suffix from the shortcut. You may redefine this -% function, if you need. I`m using a trick here, to define the macro with -% proper catcodes but not to define it global. You may also use -% \cs{@firstofone} instead of \cs{lowercase}. -% \begin{macrocode} -\begingroup -\catcode`\-12 -\lowercase{\endgroup - \newcommand*{\@indexsuffix}[1]{-#1}% -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\printindices} -% This is used to print all defined indices in the order of their definition -% and with their default titles. If the list is empty, is behaves like -% \cs{printindex} without star and optional arguments. -% \begin{macrocode} -\newcommand*{\printindices}{% - \ifx\@indices\@empty - \printindex - \else - \begingroup - \@for\@tempa:=\@indices\do{% - \expandafter\printindex\expandafter[\@tempa]% - }% - \endgroup - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\newindex} -% \changes{v0.2}{2002/11/15}{optional definition of index-shortcut-command} -% \changes{v0.2}{2002/11/15}{optional opening a new index file} -% The definition of a new index has an obligatory argument, the shortcut for -% this index, and an optional argument, the name of this index. If you omit -% the optional argument the shortcut is used for the default name if the -% index. The definition will be done global! -% \begin{macrocode} -\newcommand*{\newindex}[2][\relax]{% - \@ifundefined{index@#2@name}{% - \if@verbindex - \expandafter\gdef\csname index@#2@hook\endcsname{% - \@onelevel@sanitize\@tempa - }% - \else - \expandafter\gdef\csname index@#2@hook\endcsname{}% - \fi - \ifx\@indices\@empty - \xdef\@indices{#2}% - \else - \xdef\@indices{\@indices,#2}% - \fi - \ifx \relax#1 - \expandafter\xdef\csname index@#2@name\endcsname{#2}% - \else - \expandafter\xdef\csname index@#2@name\endcsname{#1}% - \fi - \if@newidxcmd - \expandafter\newcommand\expandafter*\csname #2\endcsname{}% - \expandafter\gdef\csname #2\endcsname{% - \sindex[#2]% - }% - \fi - \if@splitidx - \def\@tempa{#2}\def\@tempb{idx}% - \ifx\@tempa\@tempb - \global\let\@indexfile@idx=\@indexfile - \else - \expandafter\newwrite\csname @indexfile@#2\endcsname - \expandafter\immediate\expandafter\openout - \csname @indexfile@#2\endcsname=\jobname-#2.idx - \fi - \fi - }{% -% \end{macrocode} -% If the index is already defined, an error occurs: -% \begin{macrocode} - \PackageError{splitidx}{% - index `#2' already defined% - }{% - You have already defined an index with shortcut `#2'.\MessageBreak - You can't define a new index with the same shortcut. If you'll continue - \MessageBreak - The new definition will be ignored.% - }% - }% -} -\if@splitidx - \@onlypreamble\newindex -\fi -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\newprotectedindex} -% \changes{v0.9}{2006/07/03}{new command} -% Same like \cs{newindex} but always define an index with protected arguments. -% \begin{macrocode} -\newcommand*{\newprotectedindex}[2][\relax]{% - \begingroup\@verbindextrue\newindex[{#1}]{#2}\endgroup -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@indices} -% This macro stores a list of the index shortcuts. This is needed by -% e.g. \cs{printindices} and build by \cs{newindex}. -% \begin{macrocode} -\newcommand*{\@indices}{} -\gdef\@indices{} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\extendtheindex} -% Extend \verb|theindex| by some macros called before starting the index, -% after starting the index, before stopping the index and after stopping the -% index. This may be used to change index behaviour. One additional change is -% done, which may be useful: before the index \cs{index@preamble} is set to -% \cs{index@\meta{shortcut}@preamble}. -% \begin{macrocode} -\newcommand{\extendtheindex}[4]{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname splitindex@theindex\endcsname\relax - \let\splitindex@theindex=\theindex - \let\endsplitindex@theindex=\endtheindex - \fi - \renewcommand*{\theindex}{% - #1\splitindex@theindex #2% - }% - \renewcommand*{\endtheindex}{% - #3\endsplitindex@theindex #4% - }% -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\setindexpreamble} -% Set one of the splitted index preambles or the original one. -% \begin{macrocode} -\newcommand{\splitindex@setip}{} -\let\splitindex@setip\setindexpreamble -\let\setindexpreamble\relax -\newcommand{\setindexpreamble}[2][]{% - \ifx \relax#1\relax - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname splitindex@setip\endcsname\relax - \@namedef{index@preamble}{#2}% - \else - \splitindex@setip{#2}% - \fi - \else - \@namedef{index@#1@preamble}{#2}% - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\useindexpreamble} -% Use the index preamble and optional add additional information after it, if -% it exists and if it is not empty: -% \begin{macrocode} -\newcommand{\useindexpreamble}[1][]{% - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname index@preamble\endcsname\relax\else - \ifx\index@preamble\@empty\else - \index@preamble #1% - \fi - \fi -} -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\printsubindex} -% \begin{macro}{\printsubindex*} -% Works like \cs{printindex} but changes some macros before to level down the -% headings at the index generation. -% \begin{macrocode} -\newcommand*{\printsubindex}{% - \begingroup - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname chapter\endcsname\relax - \let\section\subsection - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname addsec\endcsname\relax\else - \def\addsec{\setcounter{secnumdepth}{0}\subsection}% - \fi - \else - \let\chapter\section - \def\@makeschapterhead{\section*} - \let\@makechapterhead\section - \begingroup\expandafter\expandafter\expandafter\endgroup - \expandafter\ifx\csname addchap\endcsname\relax\else - \let\addchap\addsec - \fi - \fi -% \end{macrocode} -% Also, \cs{onecolumn} and \cs{twocolumn} and even \cs{clearpage} must be -% disabled. The macros \cs{onecolumn} and \cs{twocolumn} cannot be let -% \cs{relax} because the have an optional argument which must be used. -% \begin{macrocode} - \let\onecolumn\@firstoptofone - \let\twocolumn\@firstoptofone - \let\clearpage\relax - \let\cleardoublepage\relax -% \end{macrocode} -% And the mark mechanism must also use one down: -% \begin{macrocode} - \def\markboth{\expandafter\markright\@gobble}% - \ifx\@mkboth\@gobble\else\let\@mkboth\markboth\fi -% \end{macrocode} -% And the page style shouldn't change too: -% \begin{macrocode} - \let\thispagestyle\@gobble -% \end{macrocode} -% Now, using \cs{printindex} enables all of it's features: -% \begin{macrocode} - \let\printindex@endhook=\endgroup - \printindex -} -% \end{macrocode} -% \begin{macro}{\@firstoptofone} -% Read the optional argument and do it. -% \begin{macrocode} -\providecommand{\@firstoptofone}[1][]{#1} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -%</package> -% \end{macrocode} -% -% \Finale -% -\endinput -% -% end of file `splitindex.dtx' -%%% Local Variables: -%%% mode: doctex -%%% TeX-master: t -%%% End: diff --git a/Master/texmf-dist/source/latex/splitindex/splitidx.ins b/Master/texmf-dist/source/latex/splitindex/splitidx.ins deleted file mode 100644 index a46c36533e2..00000000000 --- a/Master/texmf-dist/source/latex/splitindex/splitidx.ins +++ /dev/null @@ -1,93 +0,0 @@ -%% -%% splitindex.ins -%% Copyright (c) Markus Kohm, 2002 -%% -%% $Id: splitidx.ins,v 1.2 2006/03/07 10:41:51 mjk Exp $ -%% -%% This file is part of the `SplitIndex bundle'. -%% --------------------------------------------- -%% -%% This file can be redistributed and/or modified under the conditions -%% of the LaTeX Project Public License, either version 1.3a 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.3a or later is part of all distributions of LaTeX -%% version 2005/12/01 or later. -%% -%% This work has status 'maintained'. -%% Maintainer is Markus Kohm <komascript@gmx.info>. -%% -%% In particular, NO PERMISSION is granted to modify the contents of this -%% file since it contains the legal notices that are placed in the files -%% it generates. -%% -%% You are not allowed to redistribute this file without all the -%% other files of the `SplitIndex bundle'. The list of all files -%% belonging to the `SplitIndex bundle' is given in the file -%% `manifest.txt'. -%% -%% This file will generate fast loadable files and documentation -%% driver files from the doc files in this package when run through -%% LaTeX or TeX. -%% -%% -%% --------------- start of docstrip commands ------------------ -%% - -\input docstrip - -\preamble - -This is a generated file. - -Copyright (c) Markus Kohm, 2002 - -This file was generated from file(s) of the `SplitIndex bundle'. ----------------------------------------------------------------- - -It may be distributed and/or modified under the conditions of -the LaTeX Project Public License, either version 1.3a 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.3a or later is part of all distributions of LaTeX -version 2005/12/01 or later. - -This work has status 'maintained'. -Maintainer is Markus Kohm <komascript@gmx.info>. - -This file may only be distributed together with a copy of the -`SplitIndex bundle'. You may however distribute the `SpitIndex -bundle' without such generated files. - -The list of all files belonging to the `SplitIndex bundle' is -given in the file `manifest.txt'. - -\endpreamble - -\keepsilent -\usedir{tex/latex/misc} - -\generate{\file{splitidx.sty}{\from{splitidx.dtx}{package}}} - -\Msg{*************************************************************} -\Msg{*} -\Msg{* To finish the installation you have to move `splitidx.sty'} -\Msg{* files into a directory searched by TeX.} -\Msg{* Using a TDS compatible TeX distribution, this would be e.g.} -\Msg{* tex/latex/misc of your main or your local or your private} -\Msg{* texmf path. If you don't know these paths, have a look} -\Msg{* at your `texmf.cnf' or try:} -\Msg{* \space\space kpsexpand \string\$TEXMFMAIN} -\Msg{* \space\space kpsexpand \string\$TEXMFLOCAL} -\Msg{* \space\space kpsexpand \string\$HOMETEXMF} -\Msg{* You may also use another folder at your TEXINPUTS path.} -\Msg{*} -\Msg{* To produce the documentation run splitidx.dtx files} -\Msg{* through LaTeX.} -\Msg{*} -\Msg{* Happy TeXing} -\Msg{************************************************************} - -\endbatchfile diff --git a/Master/texmf-dist/source/latex/splitindex/splitindex.c b/Master/texmf-dist/source/latex/splitindex/splitindex.c deleted file mode 100644 index 41a092af734..00000000000 --- a/Master/texmf-dist/source/latex/splitindex/splitindex.c +++ /dev/null @@ -1,576 +0,0 @@ -/* - * splitindex.c - * Copyright (c) Markus Kohm, 2002 - * - * $Id: splitindex.c,v 1.6 2003/01/05 10:50:07 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 - */ - -#include <sys/types.h> -#include <sys/wait.h> - -#include <ctype.h> -#include <errno.h> -#include <regex.h> -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <unistd.h> - -enum { - OPT_HELP = 'h', OPT_MAKEINDEX = 'm', OPT_IDENTIFY = 'i', - OPT_RESULTIS = 'r', OPT_VERBOSE = 'v', OPT_SUFFIXIS = 's', - OPT_VERSION = 'V' -}; - -#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined (NO_LONGOPT) - -#define HAS_LONGOPT 0 -#define HAPAR "" - -#else /* defined(__OpenBSD__) || defined(__FreeBSD__) || defined(NO_LONGOPT) */ - -#define HAS_LONGOPT 1 -#define HAPAR "\n\t\t" - -#include <getopt.h> - -static const struct option long_options[] = { - { "help", 0, NULL, OPT_HELP }, - { "makeindex", 1, NULL, OPT_MAKEINDEX }, - { "identify", 1, NULL, OPT_IDENTIFY }, - { "resultis", 1, NULL, OPT_RESULTIS }, - { "suffixis", 1, NULL, OPT_SUFFIXIS }, - { "verbose", 0, NULL, OPT_VERBOSE }, - { "version", 0, NULL, OPT_VERSION }, - { NULL, 0, NULL, 0 }, -}; - -#endif - -static const char short_options[] = { - OPT_HELP, - OPT_MAKEINDEX, ':', - OPT_IDENTIFY, ':', - OPT_RESULTIS, ':', - OPT_SUFFIXIS, ':', - OPT_VERBOSE, - OPT_VERSION, -}; - -int Verbose = 0; - -char *MakeIndex = "makeindex"; -char *Identify = "^(\\\\indexentry)\\[([^]]*)\\](.*)$"; -char *ResultIs = "$1$3"; -char *SuffixIs = "-$2"; -char *IDX = NULL; -char *Jobname = NULL; -char * const * MakeIndexArgs = NULL; -char *prgname = "splitindex"; -int MakeIndexArgc = 0; - -static void show_version( void ) { - printf( "splitindex 0.2a\n" - "Copyright (c) 2002 Markus Kohm <kohm@gmx.de>\n" ); -} - -static void show_usage( FILE *out ) { - fputs( "Usage: splitindex [OPTION]... RAWINDEXFILE [MAKEINDEXOPTION]...\n", - out ); -} - -static void usage_error( const char *format, ... ) { - if ( format != NULL ) { - va_list ap; - va_start( ap, format ); - vfprintf( stderr, format, ap ); - va_end( ap ); - } - fputs( "Try `splitindex " -#if HAS_LONGOPT - "--help" -#else - "-h" -#endif - "' for more information.\n", stderr ); - exit( 1 ); -} - -static void show_help( void ) { - show_version(); - printf( "\n" ); - show_usage( stdout ); - printf( - "Split a single raw index file into multiple raw index files.\n" - "Example: splitindex.pl foo.idx.\n" - "\n" - "Options:\n" - " -h" -#if HAS_LONGOPT - ", --help " -#else - " " -#endif - "\tshow this help and terminate\n" - " -m" -#if HAS_LONGOPT - ", --makeindex" -#endif - " PROGNAME " HAPAR - "\tcall PROGNAME instead of default `%s'.\n", - MakeIndex - ); - printf( - " -i" -#if HAS_LONGOPT - ", --identify" -#endif - " EXPRESSION " HAPAR - "\tuse regular EXPRESSION to match entries\n" - "\t\t\t(see also option --resultis and --suffixis).\n" - "\t\t\tDefault is `%s'.\n", - Identify - ); - printf( - " -r" -#if HAS_LONGOPT - ", --resultis" -#endif - " PATTERN " HAPAR - "\tcreate line to be written from PATTERN after matching\n" - "\t\t\tlines (see also option --identify).\n" - "\t\t\tDefault is `%s'.\n", - ResultIs - ); - printf( - " -s" -#if HAS_LONGOPT - ", --suffixis" -#endif - " PATTERN " HAPAR - "\tcreate suffix to be used from PATTERN after matching\n" - "\t\t\tlines (see also option --identify).\n" - "\t\t\tDefault is `%s'.\n", - SuffixIs - ); - printf( - " -v" -#if HAS_LONGOPT - ", --verbose " -#else - " " -#endif - "\tbe more verbose\n" - "\t\t\t(can be used multiple to increase verbosity)\n" - " -V" -#if HAS_LONGOPT - ", --version " -#else - " " -#endif - "\tshow version and terminate\n" - ); - exit(0); -} - -static void ScanArguments( int argc, char * const argv[] ) { - int retVal; - char *hs; - if ( argc > 0 ) - prgname = argv[0]; -#if HAS_LONGOPT - while ( ( retVal = getopt_long( argc, argv, short_options, - long_options, NULL ) ) != - 1 ) { -#else - while ( ( retVal = getopt( argc, argv, short_options ) ) != - 1 ) { -#endif - switch( retVal ) { - case OPT_HELP: - show_help(); - break; /* should never be reached */ - case OPT_VERSION: - show_version(); - exit( 0 ); - break; /* should never be reached */ - case OPT_MAKEINDEX: - MakeIndex = optarg; - break; - case OPT_IDENTIFY: - Identify = optarg; - break; - case OPT_RESULTIS: - ResultIs = optarg; - break; - case OPT_SUFFIXIS: - SuffixIs = optarg; - break; - case OPT_VERBOSE: - Verbose++; - break; - case ':': - case '?': - usage_error( NULL ); - break; /* should never be reached */ - } - } - if ( optind < argc ) { - IDX = argv[optind++]; - MakeIndexArgc = argc - optind; - MakeIndexArgs = argv + optind; - } else { - usage_error( "missing raw index file\n" ); - return; /* should never be reached */ - } - - if ( ( Jobname = strdup( IDX ) ) == NULL ) { - perror( prgname ); - exit( errno ); - } - - if ( ( ( hs = strrchr( Jobname, '.' ) ) != NULL ) - && !strcmp( hs, ".idx" ) ) - *hs = 0; -} - -static char *regsub( const char *string, const char *replace, - int nmatch, regmatch_t pmatch[] ) { - int pass; - int size, n; - const char *hs; - char c; - char *retVal = NULL; - char *ts; - - /* Two times parsing to get size and replace */ - for ( pass = size = 0; pass < 2; pass++ ) { - ts = retVal; - for ( hs = replace; *hs; hs++ ) { - switch( *hs ) { - case '$': - if ( isdigit( hs[1] ) ) { - n = *++hs - '0'; - if ( ( pmatch[n].rm_so >= 0 ) - && ( pmatch[n].rm_so < pmatch[n].rm_eo ) ) { - /* maybe group n is not empty */ - if ( pass ) { - strncpy( ts, - string + pmatch[n].rm_so, - pmatch[n].rm_eo - pmatch[n].rm_so ); - ts += pmatch[n].rm_eo - pmatch[n].rm_so; - } else { - size += pmatch[n].rm_eo - pmatch[n].rm_so; - } - } - } else { - if ( pass ) { - *ts++ = '$'; - } else { - size++; - } - } - break; - case '\\': - switch( c = *++hs ) { - case 0: c = '\\'; hs--; break; - case 'b': c = '\b'; break; - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - } - if ( pass ) { - *ts++ = c; - } else { - size++; - } - break; - default: - if ( pass ) { - *ts++ = *hs; - } else { - size++; - } - break; - } - } - if ( pass ) { - *ts = '\0'; - } else { - if ( ( retVal = malloc( size + 1 ) ) == NULL ) { - perror( prgname ); - exit( 1 ); - } - } - } - - return retVal; -} - -static struct list { - struct list *next; - char *name; - FILE *file; -} *IDXfiles = NULL; - -static FILE *findsuffix( const char *name ) { - struct list *run; - for ( run = IDXfiles; - run != NULL; - run = run->next ) { - const char *suffix = strchr( run->name, '\0' ); - suffix -= 4; /* .idx */ - suffix -= strlen( name ); - if ( ( suffix >= run->name ) - && !strncmp( suffix, name, strlen( name ) ) ) { - return run->file; - } - } - return NULL; -} - -static struct list *addentry( char *name, FILE *file ) { - struct list *newentry = malloc( sizeof( struct list ) ); - if ( !newentry ) { - perror( prgname ); - exit( 1 ); - } - newentry->name = name; - newentry->file = file; - if ( IDXfiles == NULL ) { - newentry->next = NULL; - } else { - newentry->next = IDXfiles; - } - IDXfiles = newentry; - return IDXfiles; -} - -static FILE *newentry( const char *suffix ) { - char *name; - FILE *file; - - if ( ( name = malloc( strlen( Jobname ) + strlen( suffix ) + 5 ) ) == NULL ) { - perror( prgname ); - exit( 1 ); - } - - strcpy( name, Jobname ); - strcat( name, suffix ); - strcat( name, ".idx" ); - - if ( ( file = fopen( name, "w" ) ) == NULL ) { - perror( name ); - exit( errno ); - } - - if ( Verbose > 1 ) - printf( "New index file %s\n", name ); - addentry( name, file ); - return file; -} - -static void CloseAllIDX( void ) { - struct list *run; - for ( run = IDXfiles; run != NULL; run = run->next ) - if ( fclose( run->file ) ) { - perror( run->name ); - exit( 1 ); - } -} - -static void CallMakeIndex( void ) { - char **argv; - int idx; - struct list *run, *next; - - if ( ( argv = calloc( MakeIndexArgc + 3, sizeof( char * ) ) ) == NULL ) { - perror( prgname ); - exit( 0 ); - } - - for ( idx = 0; idx < MakeIndexArgc; idx++ ) - argv[idx+1] = MakeIndexArgs[idx]; - - idx++; - argv[0] = MakeIndex; - - for ( run = IDXfiles; run != NULL; run = next ) { - pid_t fret; - int status; - argv[idx] = run->name; - - if ( ( fret = fork() ) == 0 ) { - /* This is the child */ - if ( Verbose > 1 ) { - int i; - for ( i = 0; argv[i] != NULL; i++ ) - printf( "\"%s\" ", argv[i] ); - printf( "\n" ); - } - if ( execvp( MakeIndex, argv ) ) { - perror( MakeIndex ); - exit( 1 ); - } - } else if ( fret == -1 ) { - perror( prgname ); - exit( 1 ); - } else { - /* Parent */ - waitpid( fret, &status, 0 ); - if ( ! WIFEXITED( status ) ) { - fprintf( stderr, "%s terminated abnormally!\n", MakeIndex ); - exit( 1 ); - } - } - - free( (void *)run->name ); - next = run->next; - free( run ); - } - - -} - -static void ProcessIDXFile( void ) { - FILE *fIDX; - char *line; - regex_t preg; - int retVal; - int buffersize = 2050; - regmatch_t pmatch[10]; - - if ( ( line = malloc( buffersize ) ) == NULL ) { - perror( prgname ); - exit( errno ); - } - - if ( ( retVal = regcomp( &preg, Identify, REG_EXTENDED ) ) != 0 ) { - regerror( retVal, &preg, line, buffersize ); - fprintf( stderr, "Error at identify: %s\n", line ); - free( line ); - exit( 1 ); - } - - if ( ( fIDX = fopen( IDX, "r" ) ) == NULL ) { - if ( !strcmp ( IDX, Jobname ) ) { - if ( ( IDX = malloc( strlen( Jobname + 5 ) ) ) == NULL ) { - perror( prgname ); - regfree( &preg ); - free( line ); - exit( errno ); - } - strcpy( IDX, Jobname ); - strcat( IDX, ".idx" ); - if ( ( fIDX = fopen( IDX, "r" ) ) == NULL ) { - fprintf( stderr, - "Can read neither file %s nor file %s\n", - Jobname, IDX ); - regfree( &preg ); - free( line ); - exit( 1 ); - } - } else { - fprintf( stderr, - "Can't red file %s\n", IDX ); - regfree( &preg ); - free( line ); - exit( 1 ); - } - } - - while ( fgets( line, buffersize, fIDX ) != NULL ) { - char *hs; - char *result, *suffix; - FILE *f; - while ( ( ( hs = strchr( line, '\n' ) ) == NULL ) - && ! feof( fIDX ) ) { - if ( ( line = realloc( line, 2 * buffersize ) ) == NULL ) { - perror( prgname ); - exit( errno ); - } - if ( fgets( line + buffersize - 1, buffersize + 1, fIDX ) == NULL ) - break; - buffersize *= 2; - } - if ( ferror( fIDX ) ) - break; - if ( ( hs = strchr( line, '\n' ) ) != NULL ) // remove newline - *hs = 0; - if ( ( retVal = regexec( &preg, line, 10, pmatch, 0 ) ) == 0 ) { - result = regsub( line, ResultIs, 10, pmatch ); - suffix = regsub( line, SuffixIs, 10, pmatch ); - } else { - int i; - result = strdup( line ); - for ( i = 0; i < 10; i++ ) { - pmatch[i].rm_so = 0; - pmatch[i].rm_eo = 3; - } - suffix = regsub( "idx", SuffixIs, 10, pmatch ); - } - if ( !result || !suffix ) { - perror( prgname ); - exit ( 1 ); - } - - if ( ( f = findsuffix( suffix ) ) == NULL ) - f = newentry( suffix ); - fprintf( f, "%s\n", result ); - - free( suffix ); - free( result ); - } - - regfree( &preg ); - free( line ); - if ( ferror( fIDX ) ) { - perror( IDX ); - fclose( fIDX ); - exit( errno ); - } - fclose( fIDX ); - - CloseAllIDX(); - - CallMakeIndex(); -} - -int main( int argc, char * const argv[] ) { - int retVal = 0; - - ScanArguments( argc, argv ); - - if ( Verbose > 0 ) { - show_version(); - if ( Verbose > 9 ) { - int i; - printf( "Identify: \"%s\"\n", Identify ); - printf( "ResultIs: \"%s\"\n", ResultIs ); - printf( "SuffixIs: \"%s\"\n", SuffixIs ); - printf( "IDX: \"%s\"\n", IDX ); - printf( "Jobname: \"%s\"\n", Jobname ); - printf( "MakeIndex: \"%s\"", MakeIndex ); - for ( i = 0; i < MakeIndexArgc; i++ ) - printf( " \"%s\"", MakeIndexArgs[i] ); - printf( "\n" ); - } - } - - ProcessIDXFile(); - - return retVal; -} |