summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/stex/bin/msplit
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/stex/bin/msplit')
-rwxr-xr-xMaster/texmf-dist/source/latex/stex/bin/msplit140
1 files changed, 140 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/stex/bin/msplit b/Master/texmf-dist/source/latex/stex/bin/msplit
new file mode 100755
index 00000000000..cf178ce9b5f
--- /dev/null
+++ b/Master/texmf-dist/source/latex/stex/bin/msplit
@@ -0,0 +1,140 @@
+#!/usr/bin/perl -w
+##############################################################################################
+# Program: msplit (a utility for splitting STeX documents along module boundaries)
+##############################################################################################
+# $URL: svn://kwarc.faculty.iu-bremen.de/kohlhase/kwarc/projects/content/bin/msplit$
+# $Rev: 3722 $; last modified by $Author: $
+# $Date: 2005-07-27 03:22:19 +0200 (Wed, 27 Jul 2005) $
+# Copyright (c) 2005 Ioan Sucan
+##############################################################################################
+# 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
+# of the License, 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 [http://www.gnu.org/copyleft/gpl.html]
+# for more details.
+##############################################################################################
+use strict;
+use Getopt::Long;
+use File::Path;
+use Pod::Usage;
+
+my $input='-', my $output='-', my $path='', my $verbose=0, my $stop_at_end=0;
+my $flag = "include";
+my $header='', my @hdr_data;
+
+sub texf {
+ my $fn = shift;
+ $fn.='.tex' if $fn !~ /\.tex$/;
+ return $fn; }
+
+sub write_file_data{
+ my $filename = shift;
+ open(FS,$filename) or die "Cannot write $filename\n";
+ print FS @_;
+ close(FS); }
+
+# remove the last component in a path
+sub justpath{
+ my $arg = shift;
+ return '' if ($arg !~ m!\/!);
+ while ($arg !~ m!\/$!) {chop($arg);}
+ return $arg; }
+# end justpath
+
+
+sub go {
+ my ($input, $output) = @_;
+ my $path = justpath($output);
+
+ my @module_file=();
+ my @out_data=();
+
+ print "Splitting $input...\n" if $verbose;
+ `mv $output $output~` if (-e $output);
+ $input="$input~" if ($input eq $output);
+
+ open(FIN,$input) or die "Can't open $input\n";
+ my $in_module=0; my $path_name;
+ foreach (<FIN>){
+ chomp;
+ /([^%]*)((%.*)?)/;
+ ($_,my $comment)=($1,$2);
+ if (/\\begin\s*\{module\}/){
+ $_ =~ s/\s//g;
+ /id=([\w-]*)/;
+ my $module_name = $1;
+ $path_name = "$path$module_name.tex";
+ print "$path_name\n" if $verbose;
+ `mv $path_name $path_name~` if (-e $path_name);
+ push(@module_file,@hdr_data) if $header;
+ push(@module_file,"\n$_$comment\n");
+ push(@out_data,"\\requiremodules[$flag]{$module_name}\n");
+ $in_module=1;
+ next; }
+ if (/\\end\s*\{module\}/){
+ $_ =~ s/\s//g;
+ push(@module_file,"$_$comment\n");
+ mkpath(justpath($path_name));
+ write_file_data(">$path_name",@module_file);
+ $in_module=0;
+ next; }
+ if ($stop_at_end && /\\end\s*\{document\}/){
+ $_ =~ s/\s//g;
+ push(@out_data,"$_$comment\n");
+ last; }
+ $_="$_$comment\n";
+ if ($in_module) {push(@module_file,$_);}
+ else {push(@out_data,$_); }}
+ close(FIN);
+ mkpath($path) if $path;
+ write_file_data(">$output",@out_data); }
+
+GetOptions("output=s" => \$output,
+ "path=s" => \$path,
+ "header=s" => \$header,
+ "exclude" => sub { $flag = "exclude"; },
+ "verbose" => sub { $verbose=1; },
+ "stop" => sub { $stop_at_end=1; },
+ "help" => sub { pod2usage(2)});
+
+$input = $ARGV[0] if ($#ARGV>=0);
+die "Input file does not exist\n" if (! defined $input || ! -e $input);
+$output = $input if (! defined $output);
+
+if ($header && -e $header) {
+ open(HDR,$header);
+ @hdr_data = <HDR>;
+ close(HDR); }
+
+$path.='/' if $path && $path !~ m!\/$!;
+go($input,$path.$output);
+print "Done.\n" if $verbose;
+
+__END__
+
+
+=head1 SYNOPSIS
+
+msplit <inputfile> [options]
+
+Options:
+
+ --output filename of new main .tex file; default: same as input
+ --path path where to generate the new documents; '.' by default
+ --header file to be copied at beginning of all new module files
+ --exclude modules exluded by default; if not mentioned, modules
+ are included by default
+ --verbose verbose on
+ --stop stop when \end{document} is found; default is to go on
+ --help this screen
+
+
+
+ This program splits a .tex file into more files, each containing a module.
+ Example usage:
+ ./msplit slides.tex -o sl.tex -p ./modules -s