From 7f9543ffaf295484b99beae71350a519562df613 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 12 Jan 2006 23:58:20 +0000
Subject: ltxindex

git-svn-id: svn://tug.org/texlive/trunk@1055 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty | 235 ++++++++++++++++++++++
 1 file changed, 235 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty

(limited to 'Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty')

diff --git a/Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty b/Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty
new file mode 100644
index 00000000000..6e42246fa5c
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/ltxindex/ltxindex.sty
@@ -0,0 +1,235 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%   ltxindex.sty, a LaTeX package to typeset indices with GNU's Texindex
+%   Copyright (C) 2004 by Jose-Luis Rivera
+%
+%   This program is free software; you can redistribute it and/or modify
+%   it under the terms of the GNU General Public License as published by
+%   the Free Software Foundation; either version 2, or (at your option)
+%   any later version.
+%
+%   This program is distributed in the hope that it will be useful,
+%   but WITHOUT ANY WARRANTY; without even the implied warranty of
+%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+%   GNU General Public License for more details.
+%
+%   You should have received a copy of the GNU General Public License
+%   along with this program; if not, write to the Free Software
+%   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%              WARNING!!! This code is fairly experimental.             %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% 
+
+
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\ProvidesPackage{ltxindex}
+           [2004/06/30 v0.1]
+\message{indexing, texindex style}
+
+\RequirePackage{multicol}
+
+% Index generation facilities
+
+% Define the texinfo user-accessible indexing commands for backwards 
+% compatability.
+
+\def\cindex{\cpindex}
+\def\pindex{\pgindex}
+\def\vindex{\vrindex}
+\def\tindex{\tpindex}
+\def\kindex{\kyindex}
+\def\findex{\fnindex}
+
+
+% \newindex {foo} defines an index named foo.
+% It automatically defines \fooindex such that
+% \fooindex ...rest of line... puts an entry in the index foo.
+% It also defines \fooindfile to be the number of the output channel for
+% the file that	accumulates this index.  The file's extension is foo.
+% The name of an index should be no more than 2 characters long
+% for the sake of vms.
+
+\def\newindex#1{\csname newindex#1\endcsname}
+
+% Yes I know this could be done shorter, but safer??
+
+\def\newindexcp{\if@filesw \newwrite\@cpindexfile
+  \immediate\openout\@cpindexfile=\jobname.cp
+  \def\cpindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindex\@cpindexfile}%
+  \def\cpsubindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrsubindex\@cpindexfile}%
+  \def\cpindexbold{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindexbold\@cpindexfile}
+   \typeout{Writing concepts index file \jobname.cp }%
+   \fi}
+
+\def\cpindex{\@bsphack\begingroup \@sanitize\@index}
+\def\cpsubindex{\@bsphack\begingroup \@sanitize\@index}
+\def\cpindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\@wrindex#1#2{\let\thepage\relax
+   \xdef\@gtempa{\write#1{\string \entry{#2}{\thepage}{#2}}}\endgroup
+   \def\@tempa{}\def\thing{#2}\ifx\thing\@tempa\relax\else\@gtempa\fi
+   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@wrindexbold#1#2{\let\thepage\relax \let\bf\relax
+   \xdef\@gtempa{\write#1{\string \entry{#2}{\b{\thepage}}{#2}}}\endgroup
+   \def\@tempa{}\def\thing{#2}\ifx\thing\@tempa\relax\else\@gtempa\fi
+   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@wrsubindex#1#2#3{\let\thepage\relax
+	\xdef\@gtempa{\write#1{\string \entry{#2 #3}{\thepage}{#2}{#3}}}\endgroup%
+	\@gtempa
+   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
+
+\def\@index#1{\endgroup\@esphack}
+
+\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
+\def\newindexpg{\if@filesw \newwrite\@pgindexfile
+  \immediate\openout\@pgindexfile=\jobname.pg
+  \def\pgindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindex\@pgindexfile}
+  \def\pgindexbold{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindexbold\@pgindexfile}
+	\typeout{Writing index file \jobname.pg }\fi}
+
+\def\pgindex{\@bsphack\begingroup \@sanitize\@index}
+\def\pgindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexvr{\if@filesw \newwrite\@vrindexfile
+  \immediate\openout\@vrindexfile=\jobname.vr
+  \def\vrindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindex\@vrindexfile}
+  \def\vrindexbold{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindexbold\@vrindexfile}
+	\typeout{Writing variable index file \jobname.vr }\fi}
+
+\def\vrindex{\@bsphack\begingroup \@sanitize\@index}
+\def\vrindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindextp{\if@filesw \newwrite\@tpindexfile
+  \immediate\openout\@tpindexfile=\jobname.tp
+  \def\tpindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindex\@tpindexfile}
+  \def\tpindexbold{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindexbold\@tpindexfile}
+	\typeout{Writing datatype index file \jobname.tp }\fi}
+
+\def\tpindex{\@bsphack\begingroup \@sanitize\@index}
+\def\tpindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexky{\if@filesw \newwrite\@kyindexfile
+  \immediate\openout\@kyindexfile=\jobname.ky
+  \def\kyindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindex\@kyindexfile}\typeout{Writing key index file \jobname.ky }\fi}
+
+\def\kyindex{\@bsphack\begingroup \@sanitize\@index}
+\def\kyindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+\def\newindexfn{\if@filesw \newwrite\@fnindexfile
+  \immediate\openout\@fnindexfile=\jobname.fn
+  \def\fnindex{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindex\@fnindexfile}
+  \def\fnindexbold{\@bsphack\begingroup
+             \def\protect####1{\string####1\space}\@sanitize
+             \@wrindexbold\@fnindexfile}
+	\typeout{Writing function index file \jobname.fn }\fi}
+
+\def\fnindex{\@bsphack\begingroup \@sanitize\@index}
+\def\fnindexbold{\@bsphack\begingroup \@sanitize\@index}
+
+% \synindex{foo}{bar}    makes index foo feed into index bar.
+\def\synindex#1#2{\expandafter\xdef \csname @#1index\endcsname{%
+	\noexpand\csname @#2index\endcsname}%
+\expandafter \chardef \csname @#1indexfile\endcsname=\csname @#2indexfile\endcsname}
+
+% \syncodeindex{foo}{bar}   similar, but put all entries made for index foo
+% inside bold.
+\def\syncodeindex#1#2{%
+\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname
+\expandafter\let\csname#1indfile\endcsname=\synindexfoo
+\expandafter\xdef\csname#1index\endcsname{%	% Define \xxxindex
+\csname#1boldindex\endcsname{#2}}%
+}
+
+% Define the macros used in formatting output of the sorted index material.
+% This is what you call to cause a particular index to get printed.
+% Write
+% \section*{Function Index}
+% \printindex{fn}
+
+\newskip\secondaryindent
+\secondaryindent=0.5cm
+
+% In case index foo is undefined, or sorted index foo.??s is empty...
+\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
+\ifx\putwordIndexIsEmpty\undefined     \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
+
+\def\printindex#1{
+\def\indexbackslash{\rawbackslashxx}
+\tolerance=9500 \advance\baselineskip -1pt
+\openin 1 \jobname.#1s
+\ifeof 1 
+    \putwordIndexNonexistent 
+  \else 
+    \read 1 to \temp
+  \ifeof 1
+    \putwordIndexIsEmpty
+  \else 
+    \begin{multicols}{2}
+    \input \jobname.#1s
+    \end{multicols}
+  \fi
+\fi
+\closein 1 
+}
+
+% These macros are used by the sorted index file itself.
+% Change them to control the appearance of the index.
+
+\def\Dotsbox{\hbox to 1em{\hss.\hss}} % Used by index macros
+\def\pline{\hbox to\hsize}
+
+\def\initial#1{%
+{\bigbreak\pline{\large\bf#1\hfill}\kern 2pt\penalty3000}}
+
+\def\entry #1#2{
+{\parfillskip=0in \parskip=0in \parindent=0in \small
+\hangindent=1in \hangafter=1%
+\noindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll\relax #2\par
+}}
+
+\def\primary #1{\pline{\small#1\hfil}}
+
+\def\secondary #1#2{
+{\parfillskip=0in \parskip=0in \small
+\hangindent =1in \hangafter=1
+\noindent\hskip\secondaryindent\hbox{#1}\leaders\Dotsbox\hskip 0pt plus 1filll#2\par
+}}
+
+%%% Args are the skip and penalty (usually negative)
+\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
+
+% Now we set up the default concept index...
+\newindex{cp}
+
+% ...and two useful macros to save typing time
+\newcommand{\indexcp}[1]{#1\cpindex{#1}}
+\newcommand{\subindexcp}[2]{#1\cpsubindex{#2}{#1}}
+
+% et voil\`a!
+\endinput
-- 
cgit v1.2.3

