lilypond-1.0.8
[lilypond.git] / bin / mudela-book.pl
blob09e52f2f0afe1150d411fd3f3a139cde9908131d
1 #!@PERL@ -w
2 # -*-Perl-*-
3 my $mudcount = 0;
4 my $mudela_b = 0;
5 my $outname = "-";
6 my $outdir;
7 use Getopt::Long;
10 # do something, check return status
11 sub my_system
13 my (@cmds) = @_;
14 foreach $cmd (@cmds) {
15 my ($ignoreret)=0;
16 if ( $cmd =~ /^-/ ) {
17 $ignoreret = 1;
18 $cmd = substr ($cmd, 1);
21 my $ret = ( system ($cmd));
22 if ($ret) {
23 if ($ignoreret) {
24 print STDERR "ignoring failed command \`$cmd\' (status $ret)\n";
25 }else {
26 print STDERR "\nmudela-book: failed on command \`$cmd\' (status $ret)\n";
27 exit 2;
32 sub gen_mufile
34 return "$outdir/$outname$mudcount.ly";
37 sub gen_texbase
39 return "$outname$mudcount.tex";
41 sub gen_texfile
43 return "$outdir/" . gen_texbase;
46 sub close_mudela
48 $mudela_b = 0;
49 if ($fragment_b) {
50 print MUDELA "}\n \\paper { linewidth = -1.0\\cm;";
51 print MUDELA "castingalgorithm = \\Wordwrap; } }\n";
52 $fragment_b =0;
54 if ($verbatim_b) {
55 print BOOK "\\end{verbatim}";
57 if ($center_b) {
58 print BOOK "\\end{minipage}";
60 if ($verbatim_b) {
61 print BOOK "\\interexample";
62 $verbatim_b = 0;
64 close MUDELA;
65 my $status =0;
66 if ( -f gen_mufile ) {
67 $status = system "diff -q $outdir/book-mudela.ly " . gen_mufile;
68 } else {
69 $status = 1;
71 if ( $status ) {
72 rename "$outdir/book-mudela.ly", gen_mufile;
73 unlink gen_texfile;
76 if ( ! -f gen_texfile) {
77 my_system "lilypond ". gen_mufile;
78 rename gen_texbase, gen_texfile;
81 if ($center_b) {
82 print BOOK "\\begin{minipage}[c]{.5\\textwidth}\n";
84 print BOOK "\\input " . gen_texfile . "\n";
85 if ($center_b) {
86 print BOOK "\\end{minipage}";
87 $center_b = 0;
89 print BOOK "\\postexample%\n";
92 sub open_mudela
94 $mudcount++;
95 $mudela_b = 1 ;
96 open MUDELA, ">$outdir/book-mudela.ly";
97 print BOOK "\\preexample%\n";
98 print MUDELA "\\include \"paper16.ly\"\n";
99 if ($center_b) {
100 print BOOK "\\begin{minipage}[c]{.5\\textwidth}\n";
101 print MUDELA "default_paper = \\paper { \\paper_sixteen ";
102 print MUDELA "linewidth = 7.\\cm;}";
104 if ($verbatim_b) {
105 print BOOK "\\begin{verbatim}\n";
107 if ($fragment_b) {
108 print MUDELA "\\score { \\melodic { ";
109 } else {
110 print MUDELA "default_paper = \\paper { \\paper_sixteen ";
111 print MUDELA "linewidth = 15.\\cm;}";
117 sub begin_b
119 my ($s) = @_;
120 return (/^\\begin{$s}/) ;
123 sub end_b
125 my ($s) = @_;
126 return (/^\\end{$s}/) ;
128 sub parse_mudela_opts
130 my ($s) = @_;
131 $s =~ s/[\[\]]//g;
133 $verbatim_b =1 if ($s =~ /verbatim/ );
134 $fragment_b = 1 if ($s =~ /fragment/ );
135 $center_b = 1 if ($s =~ /center/ );
138 sub help
140 print "usage: convert-mudela [options] [file]
141 options:
142 --help
143 --outdir=DIRECTORY write all files in directory DIRECTORY
144 --outname=NAME use NAME as base for the output
146 exit;
149 sub main
151 GetOptions( 'outdir=s', 'outname=s', 'help');
152 if ( $opt_help ) {
153 help();
154 $opt_help = 0; # to extinguish typo check. brr, what a language
157 if (defined ($opt_outdir)) {
158 $outdir = $opt_outdir . "/";
159 } else {
160 $outdir = ".";
163 if (defined ($ARGV[0])) {
164 $infile = $ARGV[0] ;
165 } else {
166 $infile = "-";
168 if (defined ($opt_outname)) {
169 $outname = $opt_outname ;
170 } else {
171 die "Need to have an output name, use --outname" if ( $infile eq "-");
172 $outname = "$infile.tex";
175 my $openout ="$outdir$outname";
176 if ( $infile eq $openout ) {
177 die "The input can't be the output\n";
180 open INFILE, "<$infile" or die "Can't open $infile\n";
181 open BOOK, ">$openout" or die "Can't open $openout\n";;
182 while (<INFILE>) {
183 if ($mudela_b) {
184 if (end_b "mudela") {
185 close_mudela;
186 next;
188 print MUDELA;
189 if ( $verbatim_b ) {
190 my $s = $_;
191 $s =~ s/\t/ /g; #shit
192 print BOOK $s;
195 } else {
196 if (/^\\begin{mudela}(\[.*\])?/ ) {
197 my $opts ="";
198 $opts = $1 if ( defined ($1));
200 parse_mudela_opts($opts);
201 open_mudela;
202 next;
204 print BOOK;
207 close INFILE;
208 close BOOK;
212 main;