]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.1.57
authorfred <fred>
Sun, 24 Mar 2002 20:08:43 +0000 (20:08 +0000)
committerfred <fred>
Sun, 24 Mar 2002 20:08:43 +0000 (20:08 +0000)
bin/mudela-book.pl [new file with mode: 0644]

diff --git a/bin/mudela-book.pl b/bin/mudela-book.pl
new file mode 100644 (file)
index 0000000..abb9366
--- /dev/null
@@ -0,0 +1,211 @@
+#!@PERL@ -w
+# -*-Perl-*-
+my $mudcount = 0;
+my $mudela_b = 0;
+my $outname = "-";
+my $outdir;
+use Getopt::Long;
+
+
+# do something, check return status
+sub my_system
+{
+    my (@cmds) = @_;
+    foreach $cmd (@cmds) {
+       my ($ignoreret)=0;
+       if ( $cmd  =~ /^-/ ) {
+           $ignoreret = 1;
+           $cmd = substr ($cmd, 1);
+       }
+       
+       my $ret =  ( system ($cmd));
+       if ($ret) {
+           if ($ignoreret) {
+               print STDERR "ignoring failed command \`$cmd\' (status $ret)\n";
+           }else {
+               print STDERR "\nmudela-book: failed on command \`$cmd\' (status $ret)\n";
+               exit 2;
+           }
+       }
+    }
+}
+sub gen_mufile
+{
+    return "$outdir/$outname$mudcount.ly";
+}
+
+sub gen_texbase
+{
+    return "$outname$mudcount.tex";
+}
+sub gen_texfile
+{
+    return "$outdir/" . gen_texbase;
+}
+
+sub close_mudela
+{
+    $mudela_b = 0;
+    if ($fragment_b) {
+       print MUDELA "}\n \\paper { linewidth = -1.0\\cm;";
+       print MUDELA "castingalgorithm = \\Wordwrap; } }\n";
+       $fragment_b =0;
+    }
+    if ($verbatim_b)  {
+       print BOOK "\\end{verbatim}";
+    }
+    if ($center_b) {
+       print BOOK "\\end{minipage}";
+    }
+    if ($verbatim_b)  {
+       print BOOK "\\interexample";
+       $verbatim_b = 0;
+    }
+    close MUDELA;
+    my $status =0;
+    if ( -f gen_mufile ) {
+       $status = system "diff -q $outdir/book-mudela.ly " . gen_mufile;
+    } else {
+       $status = 1;
+       }
+    if ( $status ) {
+       rename "$outdir/book-mudela.ly", gen_mufile;
+       unlink gen_texfile;
+    }
+    
+    if ( ! -f gen_texfile) {
+       my_system "lilypond ". gen_mufile;
+       rename gen_texbase, gen_texfile;
+    }
+
+    if ($center_b) {
+       print BOOK "\\begin{minipage}[c]{.5\\textwidth}\n";
+    }
+    print BOOK "\\input " . gen_texfile . "\n";
+    if ($center_b) {
+       print BOOK "\\end{minipage}";
+       $center_b = 0;
+    }
+    print BOOK "\\postexample%\n";
+}
+
+sub open_mudela
+{
+    $mudcount++;
+    $mudela_b = 1      ;
+    open MUDELA, ">$outdir/book-mudela.ly";
+    print BOOK "\\preexample%\n";
+    if ($center_b) {
+       print BOOK "\\begin{minipage}[c]{.5\\textwidth}\n";
+       print MUDELA "default_paper = \\paper { \\paper_sixteen ";
+       print MUDELA "linewidth = 7.\\cm;}";
+    }
+    if ($verbatim_b) {
+       print BOOK "\\begin{verbatim}\n";
+    }
+    if ($fragment_b) {
+       print MUDELA "\\score { \\melodic { ";
+    } else {
+       print MUDELA "default_paper = \\paper { \\paper_sixteen ";
+       print MUDELA "linewidth = 15.\\cm;}";
+
+    }
+
+}
+
+sub begin_b
+{
+    my ($s) = @_;
+    return (/^\\begin{$s}/) ;    
+}
+
+sub end_b
+{
+    my ($s) = @_;
+    return (/^\\end{$s}/) ;    
+}
+sub parse_mudela_opts
+{
+   my ($s) = @_;
+   $s =~ s/[\[\]]//g;
+
+   $verbatim_b =1 if ($s =~ /verbatim/ );
+   $fragment_b = 1 if ($s =~ /fragment/ );
+   $center_b = 1 if ($s =~ /center/ );
+}   
+
+sub help
+{
+    print  "usage: convert-mudela [options] [file]
+options: 
+--help
+--outdir=DIRECTORY     write all files in directory DIRECTORY
+--outname=NAME         use NAME as base  for the output
+";
+    exit;
+}
+    
+sub main
+{
+    GetOptions( 'outdir=s', 'outname=s', 'help');
+    if ( $opt_help ) {
+       help();
+       $opt_help = 0;  # to extinguish typo check. brr, what a language
+    }
+
+    if  (defined ($opt_outdir)) {
+       $outdir = $opt_outdir .  "/";
+    } else {
+       $outdir = ".";
+    }
+   
+    if (defined ($ARGV[0])) {
+       $infile = $ARGV[0] ;
+    } else {
+       $infile = "-";
+    }
+    if (defined ($opt_outname)) {
+       $outname = $opt_outname ;
+    } else { 
+       die "Need to have an output name, use --outname" if ( $infile eq "-");
+       $outname = "$infile.tex";
+    }
+
+    my $openout ="$outdir$outname"; 
+    if  ( $infile eq $openout ) {
+       die "The input can't be the output\n";
+    }
+
+    open INFILE, "<$infile";
+    open BOOK, ">$openout";
+    while (<INFILE>) {
+       if ($mudela_b) {
+           if (end_b "mudela") {
+               close_mudela;
+               next;
+           }
+           print MUDELA;
+           if ( $verbatim_b ) {
+               my $s = $_;
+               $s =~ s/\t/    /g; #shit
+               print BOOK $s;
+           }
+           
+       } else {
+           if (/^\\begin(\[.*\])?{mudela}/ ) {
+               my $opts ="";
+               $opts = $1 if ( defined ($1));
+
+               parse_mudela_opts($opts);
+               open_mudela;
+               next;  
+           } 
+           print BOOK;
+       }
+    }
+    close INFILE;
+    close BOOK;
+}
+
+
+main;