summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/splitindex/splitindex.pl
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/splitindex/splitindex.pl')
-rwxr-xr-xmacros/latex/contrib/splitindex/splitindex.pl212
1 files changed, 212 insertions, 0 deletions
diff --git a/macros/latex/contrib/splitindex/splitindex.pl b/macros/latex/contrib/splitindex/splitindex.pl
new file mode 100755
index 0000000000..70c61720c9
--- /dev/null
+++ b/macros/latex/contrib/splitindex/splitindex.pl
@@ -0,0 +1,212 @@
+#! /usr/bin/perl -w
+eval 'exec perl -S $0 ${1+"$@"}'
+ if 0; #$running_under_some_shell
+
+# ======================================================================
+# splitindex.pl
+# Copyright (c) Markus Kohm, 2002-2009
+#
+# $Id: splitindex.pl,v 1.3 2009-03-20 14:55:11 mjk Exp $
+#
+# This file is part of the SplitIndex bundle.
+#
+# This work may be distributed and/or modified under the conditions of
+# the LaTeX Project Public License, version 1.3c of the license.
+# 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 and of this work.
+#
+# This work has the LPPL maintenance status "author-maintained".
+#
+# The Current Maintainer and author of this work is Markus Kohm.
+#
+# The list of all files belongig to the SplitIndex bundle is given in
+# in the file `manifest.txt'. Files generated by means of unpacking the
+# distribution (using, for example, the docstrip program) or by means
+# of compiling them from a source file, for example, from splitindex.c
+# or splitindex.java may be distributed at the distributor's discretion.
+# However if they are distributed then a copy of the SplitIndex bundle
+# must be distributed together with them.
+#
+# The list of derived (unpacked or compiled) files belongig to the
+# distribution and covered by LPPL is defined by the unpacking scripts
+# (with extension .ins) and the installation script (with name
+# install.sh) which are part of the distribution.
+#
+# Two often ignorred clauses from LPPL 1.3c you should not ignore:
+# ----------------------------------------------------------------
+# 2. You may distribute a complete, unmodified copy of the Work as you
+# received it. Distribution of only part of the Work is considered
+# modification of the Work, and no right to distribute such a Derived
+# Work may be assumed under the terms of this clause.
+# 3. You may distribute a Compiled Work that has been generated from a
+# complete, unmodified copy of the Work as distributed under Clause 2
+# above, as long as that Compiled Work is distributed in such a way that
+# the recipients may install the Compiled Work on their system exactly
+# as it would have been installed if they generated a Compiled Work
+# directly from the Work.
+# ======================================================================
+
+use strict;
+use Getopt::Long;
+
+my $makeindex = "makeindex";
+# my $identify = "^(.*)\\\\UseIndex *\\{([^\\}]*)\\}(.*)\$";
+my $identify = "^(\\\\indexentry)\\[([^]]*)\\](.*)\$";
+my $suffixis = "-\$2";
+my $lineis = "\$1\$3";
+my $verbose = 0; # option verbose with default value
+my $result = GetOptions(
+ 'help' => sub { help() },
+ 'makeindex=s' => \$makeindex,
+ 'identify=s' => \$identify,
+ 'resultis=s' => \$lineis,
+ 'suffixis=s' => \$suffixis,
+ 'verbose|v+' => \$verbose,
+ 'version' => sub { version(); exit 0; }
+ );
+
+usage("missing raw index file") if ( $#ARGV < 0 );
+
+my $indexinput = shift;
+my $jobname = ( $indexinput =~ /^(.*)\.idx$/ ) ? $1 : $indexinput;
+
+my %idxfile;
+my %linesatidxfile;
+
+version() if ($verbose > 0);
+
+if ( !( open (IDX,"<$indexinput") ) ) {
+ if ( $indexinput ne "$jobname.idx" ) {
+ open (IDX,"<$jobname.idx") ||
+ die "Cannot read raw index file $indexinput nor $jobname.idx";
+ $indexinput = "$jobname.idx";
+ } else {
+ die "Cannot read raw index file $indexinput";
+ }
+}
+
+while (<IDX>) {
+ my $line;
+ my $suffix;
+ if ( /$identify/ ) {
+ my $eval = "\$line = \"$lineis\n\"";
+ eval $eval;
+ $eval = "\$suffix = \"$suffixis\"";
+ eval $eval;
+ } else {
+ $line = $_;
+ $suffix = "";
+ $suffix .= "$1" if ( $suffixis =~ /^(.*)\$/ );
+ $suffix .= "idx";
+ $suffix .= "$1" if ( $suffixis =~ /\$[123456789](.*)$/ );
+ }
+ while ( $suffix =~ /(^[^,]+)(.*)$/ ) {
+ $suffix = $2;
+ writetoidx ($1,$line);
+ }
+}
+
+closeallind();
+
+close(IDX);
+
+generateallind(@ARGV);
+
+exit 0;
+
+sub generateallind {
+ my $name;
+ my $file;
+
+ if ( $makeindex ne "" ) {
+ while (($name,$file) = each %idxfile) {
+ system( "$makeindex @ARGV $jobname$name.idx" );
+ }
+ }
+}
+
+sub closeallind {
+ my $name;
+ my $file;
+ my $lines;
+ while (($name,$file) = each %idxfile) {
+ print "Close $jobname$name.idx\n"
+ if ( $verbose > 1 );
+ close( $file );
+ $idxfile{$name}=0;
+ }
+ if ( $verbose > 0 ) {
+ print "\n";
+ while (($name,$lines) = each %linesatidxfile) {
+ print "$jobname$name.idx with $lines lines\n";
+ }
+ }
+}
+
+sub writetoidx {
+ my $suffix = $_[0];
+ my $line = $_[1];
+ my $file = $idxfile{$suffix};
+ if ( ! $file ) {
+ open ( $file, ">$jobname$suffix.idx" ) ||
+ die "Cannot write to file $jobname$suffix.idx";
+ $idxfile{$suffix} = $file;
+ $linesatidxfile{$suffix} = 0;
+ print( "New index file $jobname$suffix.idx\n" )
+ if ( $verbose > 1 );
+ }
+ print ($file $line);
+ $linesatidxfile{$suffix}++;
+}
+
+sub help {
+ version();
+ print "\n";
+ usage();
+ print
+ "Split a single raw index file into multiple raw index files.\n".
+ "Example: splitindex.pl foo.idx.\n".
+ "\n".
+ "Options:\n" .
+ " -h, --help " .
+ "\tshow this help and terminate\n" .
+ " -m, --makeindex PROGNAME\n" .
+ "\t\t\tcall PROGNAME instead of default \`makeindex\'.\n" .
+ " -i, --identify EXPRESSION\n" .
+ "\t\t\tuse regular EXPRESSION to match entries\n".
+ "\t\t\t(see also option --resultis and --suffixis).\n".
+ "\t\t\tDefault is \'$identify\'.\n".
+ " -r, --resultis PATTERN\n" .
+ "\t\t\tcreate line to be written from PATTERN after matching\n".
+ "\t\t\tlines (see also option --identify).\n".
+ "\t\t\tDefault is \'$lineis\'.\n".
+ " -s, --suffixis PATTERN\n" .
+ "\t\t\tcreate suffix to be used from PATTERN after matching\n".
+ "\t\t\tlines (see also option --identify).\n".
+ "\t\t\tDefault is \'$suffixis\'.\n".
+ " -v, --verbose " .
+ "\tbe more verbose\n".
+ "\t\t\t(can be used multiple to increase verbosity)\n" .
+ " --version " .
+ "\tshow version and terminate\n";
+ exit 0;
+}
+
+sub version {
+ print "splitindex.pl 0.1\n" .
+ "Copyright (c) 2002 Markus Kohm \<kohm\@gmx.de\>\n";
+}
+
+sub usage {
+ my $text = "Usage: splitindex.pl [OPTION]... RAWINDEXFILE [MAKEINDEXOPTION]...\n";
+ if ( $#_ >= 0 ) {
+ print STDERR @_;
+ print STDERR "\n$text";
+ print STDERR "Try \`splitindex.pl --help\' for more information.\n";
+ exit 1;
+ } else {
+ print $text;
+ }
+}