lilypond-1.3.29
[lilypond.git] / bin / mudela-book
blobc56b1050a738b03a8f5bf3aa6c93094eac073ef7
1 #!/usr/bin/perl -w
2 my $mudcount = 0;
3 my $mudela_b = 0;
4 my $outdir = "";
5 my $outname = "";
6 use Getopt::Long;
8 sub gen_mufile
10 return "$outdir/$outname$mudcount.ly";
13 sub gen_texfile
15 return "$outdir/$outname$mudcount.tex";
18 sub close_mudela
20 $mudela_b = 0;
21 if ($fragment_b) {
22 print MUDELA "}\n \\paper { linewidth = -1.0\\cm; } }\n";
23 $fragment_b =0;
25 if ( $verbatim_b) {
26 print BOOK "\\end{verbatim}\n\\interexample";
27 $verbatim_b =0;
29 close MUDELA;
30 my $status =0;
31 if ( -f gen_mufile ) {
32 $status = system "diff -q $outdir/book-mudela.ly " . gen_mufile;
33 } else {
34 $status = 1;
36 if ( $status ) {
37 rename "$outdir/book-mudela.ly", gen_mufile;
38 unlink gen_texfile;
41 if ( ! -f gen_texfile) {
42 system "lilypond ". gen_mufile;
43 rename "lelie.tex", gen_texfile;
45 print BOOK "\\preexample\\input " . gen_texfile . "\n\\postexample\n";
49 sub open_mudela
51 $mudcount++;
52 $mudela_b = 1 ;
53 open MUDELA, ">$outdir/book-mudela.ly";
54 if ($verbatim_b) {
55 print BOOK "\\begin{verbatim}\n";
57 if ($fragment_b) {
58 print MUDELA "\\score { \\melodic {";
63 sub begin_b
65 my ($s) = @_;
66 return (/^\\begin{$s}/) ;
69 sub end_b
71 my ($s) = @_;
72 return (/^\\end{$s}/) ;
74 sub parse_mudela_opts
76 my ($s) = @_;
77 $s =~ s/[\[\]]//g;
79 $verbatim_b =1 if ($s =~ /verbatim/ );
80 $fragment_b = 1 if ($s =~ /fragment/ );
83 sub main
85 GetOptions( 'outdir=s', 'outname=s');
86 $outdir = $opt_outdir;
87 $outname = $opt_outname if (defined ($opt_outname) && $opt_outname);
88 open INFILE, $ARGV[0];
90 open BOOK, ">$outdir/$outname";
91 while (<INFILE>) {
92 if ($mudela_b) {
93 if (end_b "mudela") {
94 close_mudela;
95 next;
97 print MUDELA;
98 if ( $verbatim_b ) {
99 my $s = $_;
100 $s =~ s/\t/ /g; #shit
101 print BOOK $s;
104 } else {
105 if (/^\\begin(\[.*\])?{mudela}/ ) {
106 my $opts ="";
107 $opts = $1 if ( defined ($1));
109 parse_mudela_opts($opts);
110 open_mudela;
111 next;
113 print BOOK;
116 close INFILE;
117 close BOOK;
120 main;