From: fred Date: Sun, 24 Mar 2002 20:08:43 +0000 (+0000) Subject: lilypond-0.1.57 X-Git-Tag: release/1.5.59~3265 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=c54ed3402f4d8ea4dd0ec3c1c7a022d896254034;p=lilypond.git lilypond-0.1.57 --- diff --git a/bin/mudela-book.pl b/bin/mudela-book.pl new file mode 100644 index 0000000000..abb9366e02 --- /dev/null +++ b/bin/mudela-book.pl @@ -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 () { + 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;