From 424aa48b8ef4e5f7c11e4e2c77a01337462dbc4b Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 20:06:10 +0000 Subject: [PATCH] lilypond-0.1.47 --- bin/convert-mudela.pl | 2 +- bin/convert-mudela.py | 318 +++++++++++++++++++++++++++++++++++++ bin/cvm.py | 318 +++++++++++++++++++++++++++++++++++++ input/praeludium-fuga-E.ly | 188 ++++++++++++++++++++++ 4 files changed, 825 insertions(+), 1 deletion(-) create mode 100644 bin/convert-mudela.py create mode 100644 bin/cvm.py create mode 100644 input/praeludium-fuga-E.ly diff --git a/bin/convert-mudela.pl b/bin/convert-mudela.pl index 06578f3157..3be80d97da 100644 --- a/bin/convert-mudela.pl +++ b/bin/convert-mudela.pl @@ -336,7 +336,7 @@ sub do_one_arg identify; -GetOptions ("help", "output=s", "from=i", "to=i", "minor=i", "edit", "show-rules"); +GetOptions ("help", "output=s", "from=s", "to=s", "minor=i", "edit", "show-rules"); if ($opt_help) { usage(); diff --git a/bin/convert-mudela.py b/bin/convert-mudela.py new file mode 100644 index 0000000000..9654db9377 --- /dev/null +++ b/bin/convert-mudela.py @@ -0,0 +1,318 @@ +#!@PYTHON@ -w +# -*-perl-*- + +version = "0.2"; + +################################################################ + +sub no_conv +{ +} + +sub convert_0_0_52_to_0_0_53 +{ + + s/include \"/$1\\include \"/g; +} + + +sub convert_0_0_54_to_0_0_55 +{ + s/%{/% {/g; +} + + +sub convert_0_0_53_to_0_0_54 +{ + print STDERR "Not smart enough to convert \\transpose\n" if (/\\transpose/) ; +} + +# we-re not at 58 yet, but this is at least one of the rules +sub convert_0_0_55_to_0_0_56 +{ + s/\"\|\|\"/\"|.\"/g; +} + +sub convert_0_0_56_to_0_0_57 +{ + s/\(([ \]\[|\t-\.>]|\\[a-z]+)*\)/\~ $1/g; +} + +sub convert_0_0_57_to_0_0_58 +{ + s/\[ *([^\[\]]*)\] *([1-9]*) *\/ *([1-9]*)/[$2\/$3 $1]1\/1/g; +} + +sub convert_0_0_58_to_0_0_59 +{ + die "Not smart enough to convert 0.0.58 to 0.0.59\n"; +} + +sub convert_0_0_59_to_0_0_60 +{ + s/(\\unitspace [0-9.mcptin\\ ]+|\\geometric [0-9.]+|\\width [0-9.mcp\\tin]+)/$1;/g; + s/(\\output \"[^\"]+\")/$1;/; + s/(\\tempo [0-9: ]+)/$1;/; +} + +sub convert_0_0_60_to_0_0_61 +{ + s/(\\unitspace|\\geometric|\\width)/$1=/g; + +} + +sub convert_0_1_0_to_0_1_1 +{ + s/\\tempo (.*):(.*);/\\tempo $1 = $2;/g +} + +sub convert_0_1_2_to_0_1_3 +{ + s/\\stem *(\\up|1) *;/\\stemup/g; + s/\\stem *(\\down|-1) *;/\\stemdown/g; + s/\\stem *0 *;/\\stemboth/g; + s/\\hshift ([^;]+) *;/\\property Voice.hshift = $1/g; +} + +my $header_b = 0; + +sub generic_conversion_scan +{ + if (/\\header *\{/) + { + $header_b = 1; + } + if ($header_b && /^ *\}/) + { + $header_b = 0; + } +} +sub convert_0_1_4_to_0_1_5 +{ + s/([<{]) *\\id "Piano" (.+);/\\type Grandstaff = $3 $1/; + s/([<{]) *\\id (.+) (.+);/\\type $2 = $3 $1/; +} + + +sub convert_0_1_5_to_0_1_6 +{ + s/< *\\multi (.*);/\\multi $1 \&no_conv, + "0.0.52" => \&convert_0_0_50_to_0_0_52, + "0.0.53" => \&convert_0_0_52_to_0_0_53, + "0.0.54" => \&convert_0_0_53_to_0_0_54, + "0.0.55" => \&convert_0_0_54_to_0_0_55, + "0.0.56" => \&convert_0_0_55_to_0_0_56, + "0.0.57" => \&convert_0_0_56_to_0_0_57, + "0.0.58" => \&convert_0_0_57_to_0_0_58, + "0.0.59" => \&convert_0_0_58_to_0_0_59, + "0.0.60" => \&convert_0_0_59_to_0_0_60, + "0.0.61" => \&convert_0_0_60_to_0_0_61, + "0.1.1" => \&convert_0_1_0_to_0_1_1, + "0.1.2" => \&no_conv, + "0.1.3" => \&convert_0_1_2_to_0_1_3, + "0.1.4" => \&no_conv, + "0.1.5" => \&convert_0_1_4_to_0_1_5, + "0.1.6" => \&convert_0_1_5_to_0_1_6 + ,"0.1.7" => \&convert_0_1_6_to_0_1_7 + ,"0.1.8" => \&convert_0_1_7_to_0_1_8 + ,"0.1.9" => \&convert_0_1_8_to_0_1_9 + ); + + + +sub versions +{ + return (sort { cmpver; } (keys %minor_conversions)); +} + + +sub show_rules +{ + my (@v) = versions; + + print "Rules: ", join(", ", @v), "\n"; + +} + +sub do_conversion +{ + my ($from,$to) = @_; + + my @applicable_conversion; + my @mudela_levels; + + my @v = versions; + foreach $ver (@v) { + if (version_compare($ver, $from) > 0 && version_compare($ver,$to) <= 0 ){ + push @applicable_conversion, $minor_conversions{$ver}; + push @mudela_levels, $ver; + } + } + + print STDERR "Applying following rules: ", join(", ", @mudela_levels) , "\n"; + + while () { + generic_conversion_scan; + foreach $subroutine (@applicable_conversion) { + + &$subroutine; + + } + version_string_conv $from, $to; + print OUTLY; + } +} + +sub get_auto_from +{ + my ($fn)=@_; + my ($ver); + open INLY, $fn || die "Can't open"; + + while () { + s/^.*\\version \"([^\"]*)\".*$//; + if (defined ($1)) { + print STDERR "Guessing version: ", $1, ".. "; + $ver = $1; + last; + } + } + if (!defined($ver)){ + print STDERR "can't determine mudela version in $fn.\n"; + my $u; + return $u; + } + close INLY; + return $ver; +} + +sub set_files +{ + $infile = "-"; + $outfile = "-"; + $outfile = $opt_output if (defined($opt_output)); + + if ($ARGV [0]) { + $infile = $ARGV[0]; + } + if (!(-f $infile) && !($infile =~ /\.ly$/s)) { + $infile .= ".ly"; + } + if ($opt_edit && $infile ne "-") { + $opt_edit = 1; + $outfile = "$infile.NEW"; + $infile = "$infile"; + } + print STDERR "Input ", (($infile eq "-") ?"STDIN" : $infile), " .. "; + +} + +sub do_one_arg +{ + set_files; + + local ($from_version, $to_version); + $from_version = $opt_from; + $to_version = $opt_to; + + ($from_version = get_auto_from $infile) unless defined($opt_from); + return if (!defined($from_version)); + + ($to_version = last_conversion) unless (defined($opt_to)); + + die "can't open \`$infile\'" unless open INLY,$infile ; + die "can't open \`$outfile\'" unless open OUTLY, ">$outfile"; + + do_conversion $from_version, $to_version; + close INLY; + close OUTLY; + + if ($opt_edit) { + rename $infile, "$infile~"; + rename $outfile, "$infile"; + } +} + +## "main" + +identify; + + +GetOptions ("help", "output=s", "from=i", "to=i", "minor=i", "edit", "show-rules"); + +if ($opt_help) { + usage(); + $opt_help = 0; # to extinguish typo check. + exit 0; +} + +if ($opt_show_rules) { + show_rules ; + $opt_show_rules = 0; # to extinguish typo check. + exit 0; +} + +local ( $infile,$outfile); +my $processed_one=0; + +while (defined($ARGV[0])) { + do_one_arg; + shift @ARGV; + $processed_one = 1; +} +do_one_arg unless ($processed_one); + + diff --git a/bin/cvm.py b/bin/cvm.py new file mode 100644 index 0000000000..9654db9377 --- /dev/null +++ b/bin/cvm.py @@ -0,0 +1,318 @@ +#!@PYTHON@ -w +# -*-perl-*- + +version = "0.2"; + +################################################################ + +sub no_conv +{ +} + +sub convert_0_0_52_to_0_0_53 +{ + + s/include \"/$1\\include \"/g; +} + + +sub convert_0_0_54_to_0_0_55 +{ + s/%{/% {/g; +} + + +sub convert_0_0_53_to_0_0_54 +{ + print STDERR "Not smart enough to convert \\transpose\n" if (/\\transpose/) ; +} + +# we-re not at 58 yet, but this is at least one of the rules +sub convert_0_0_55_to_0_0_56 +{ + s/\"\|\|\"/\"|.\"/g; +} + +sub convert_0_0_56_to_0_0_57 +{ + s/\(([ \]\[|\t-\.>]|\\[a-z]+)*\)/\~ $1/g; +} + +sub convert_0_0_57_to_0_0_58 +{ + s/\[ *([^\[\]]*)\] *([1-9]*) *\/ *([1-9]*)/[$2\/$3 $1]1\/1/g; +} + +sub convert_0_0_58_to_0_0_59 +{ + die "Not smart enough to convert 0.0.58 to 0.0.59\n"; +} + +sub convert_0_0_59_to_0_0_60 +{ + s/(\\unitspace [0-9.mcptin\\ ]+|\\geometric [0-9.]+|\\width [0-9.mcp\\tin]+)/$1;/g; + s/(\\output \"[^\"]+\")/$1;/; + s/(\\tempo [0-9: ]+)/$1;/; +} + +sub convert_0_0_60_to_0_0_61 +{ + s/(\\unitspace|\\geometric|\\width)/$1=/g; + +} + +sub convert_0_1_0_to_0_1_1 +{ + s/\\tempo (.*):(.*);/\\tempo $1 = $2;/g +} + +sub convert_0_1_2_to_0_1_3 +{ + s/\\stem *(\\up|1) *;/\\stemup/g; + s/\\stem *(\\down|-1) *;/\\stemdown/g; + s/\\stem *0 *;/\\stemboth/g; + s/\\hshift ([^;]+) *;/\\property Voice.hshift = $1/g; +} + +my $header_b = 0; + +sub generic_conversion_scan +{ + if (/\\header *\{/) + { + $header_b = 1; + } + if ($header_b && /^ *\}/) + { + $header_b = 0; + } +} +sub convert_0_1_4_to_0_1_5 +{ + s/([<{]) *\\id "Piano" (.+);/\\type Grandstaff = $3 $1/; + s/([<{]) *\\id (.+) (.+);/\\type $2 = $3 $1/; +} + + +sub convert_0_1_5_to_0_1_6 +{ + s/< *\\multi (.*);/\\multi $1 \&no_conv, + "0.0.52" => \&convert_0_0_50_to_0_0_52, + "0.0.53" => \&convert_0_0_52_to_0_0_53, + "0.0.54" => \&convert_0_0_53_to_0_0_54, + "0.0.55" => \&convert_0_0_54_to_0_0_55, + "0.0.56" => \&convert_0_0_55_to_0_0_56, + "0.0.57" => \&convert_0_0_56_to_0_0_57, + "0.0.58" => \&convert_0_0_57_to_0_0_58, + "0.0.59" => \&convert_0_0_58_to_0_0_59, + "0.0.60" => \&convert_0_0_59_to_0_0_60, + "0.0.61" => \&convert_0_0_60_to_0_0_61, + "0.1.1" => \&convert_0_1_0_to_0_1_1, + "0.1.2" => \&no_conv, + "0.1.3" => \&convert_0_1_2_to_0_1_3, + "0.1.4" => \&no_conv, + "0.1.5" => \&convert_0_1_4_to_0_1_5, + "0.1.6" => \&convert_0_1_5_to_0_1_6 + ,"0.1.7" => \&convert_0_1_6_to_0_1_7 + ,"0.1.8" => \&convert_0_1_7_to_0_1_8 + ,"0.1.9" => \&convert_0_1_8_to_0_1_9 + ); + + + +sub versions +{ + return (sort { cmpver; } (keys %minor_conversions)); +} + + +sub show_rules +{ + my (@v) = versions; + + print "Rules: ", join(", ", @v), "\n"; + +} + +sub do_conversion +{ + my ($from,$to) = @_; + + my @applicable_conversion; + my @mudela_levels; + + my @v = versions; + foreach $ver (@v) { + if (version_compare($ver, $from) > 0 && version_compare($ver,$to) <= 0 ){ + push @applicable_conversion, $minor_conversions{$ver}; + push @mudela_levels, $ver; + } + } + + print STDERR "Applying following rules: ", join(", ", @mudela_levels) , "\n"; + + while () { + generic_conversion_scan; + foreach $subroutine (@applicable_conversion) { + + &$subroutine; + + } + version_string_conv $from, $to; + print OUTLY; + } +} + +sub get_auto_from +{ + my ($fn)=@_; + my ($ver); + open INLY, $fn || die "Can't open"; + + while () { + s/^.*\\version \"([^\"]*)\".*$//; + if (defined ($1)) { + print STDERR "Guessing version: ", $1, ".. "; + $ver = $1; + last; + } + } + if (!defined($ver)){ + print STDERR "can't determine mudela version in $fn.\n"; + my $u; + return $u; + } + close INLY; + return $ver; +} + +sub set_files +{ + $infile = "-"; + $outfile = "-"; + $outfile = $opt_output if (defined($opt_output)); + + if ($ARGV [0]) { + $infile = $ARGV[0]; + } + if (!(-f $infile) && !($infile =~ /\.ly$/s)) { + $infile .= ".ly"; + } + if ($opt_edit && $infile ne "-") { + $opt_edit = 1; + $outfile = "$infile.NEW"; + $infile = "$infile"; + } + print STDERR "Input ", (($infile eq "-") ?"STDIN" : $infile), " .. "; + +} + +sub do_one_arg +{ + set_files; + + local ($from_version, $to_version); + $from_version = $opt_from; + $to_version = $opt_to; + + ($from_version = get_auto_from $infile) unless defined($opt_from); + return if (!defined($from_version)); + + ($to_version = last_conversion) unless (defined($opt_to)); + + die "can't open \`$infile\'" unless open INLY,$infile ; + die "can't open \`$outfile\'" unless open OUTLY, ">$outfile"; + + do_conversion $from_version, $to_version; + close INLY; + close OUTLY; + + if ($opt_edit) { + rename $infile, "$infile~"; + rename $outfile, "$infile"; + } +} + +## "main" + +identify; + + +GetOptions ("help", "output=s", "from=i", "to=i", "minor=i", "edit", "show-rules"); + +if ($opt_help) { + usage(); + $opt_help = 0; # to extinguish typo check. + exit 0; +} + +if ($opt_show_rules) { + show_rules ; + $opt_show_rules = 0; # to extinguish typo check. + exit 0; +} + +local ( $infile,$outfile); +my $processed_one=0; + +while (defined($ARGV[0])) { + do_one_arg; + shift @ARGV; + $processed_one = 1; +} +do_one_arg unless ($processed_one); + + diff --git a/input/praeludium-fuga-E.ly b/input/praeludium-fuga-E.ly new file mode 100644 index 0000000000..23c66d0c1e --- /dev/null +++ b/input/praeludium-fuga-E.ly @@ -0,0 +1,188 @@ +\header { + filename = "praeludium-fuga-E.ly"; + title = "praeludium and fuga in E-major"; + opus = "BWV 566"; + description = "Praeludium 3 bar excerpt, " + "2nd fuga transposed subject -- 4 bar excerpt. " + "We try to imitate the Griepenkerl/Keller edition which " + "gives the best approximation to Bach's original layout."; + composer = "Johann Sebastian Bach (1685-1750)"; + enteredby = "JCN, WL"; + copyright = "public domain"; +} + +%{ + Tested Features: + purpose of this file is testing: + * real-life collisions + * multi-voice input --- splitting? + * organ staff... +%} + + +\version "0.1.9"; + +praeludium_commands = \melodic { + \meter 4/4; + \key fis cis gis dis; % E-major +} + +doshift = \property Voice.hshift = 1 +noshift = \property Voice.hshift = 0 + +praeludium_right = \melodic { + \$praeludium_commands + \octave c'; + \clef violin; + + % 13 -- how to type -- where to split -- this more neatly? + \multi 2 < + { \stemup r4 dis'4 e'4. e'8 ~ | + \doshift e'4 [d'8 fis'8] + \noshift gis'4 ~ [gis'8 fis'16 e'16] | + fis'4 ~ [fis'8 e'16 dis'16] e'4 r8 e'8 } + { \stemup r4 bis4 cis'4 cis'4 | + \noshift a'4 ~ [a'16 gis'16 a'16 b'16] + \doshift dis'4 cis'4 ~ | + [cis'8 dis'16 ais16] bis4 cis'4 r8 b8 } + { \stemup \property Voice.hshift = 2 s4 gis4 } + { \stemdown \property Voice.hshift = 2 r4 fis4 + \noshift gis4 gis4 | + a4. cis'8 gis2 | + fis4 gis4 gis4 r8 e8 } + > | + % 16 +} + +praeludium_left = \melodic { + \$praeludium_commands + \octave c; + \clef bass; + + % 13 + \multi 2 < + { \stemup r4 dis'4 cis'4 cis'4 ~ | + [cis'8 a8 d'8 cis'8] [bis8 gis8] cis'4 | + dis'2 cis'4 r8 cis'8 } + { \stemup bis2 } + { \stemup \doshift r4 gis4 ~ + [gis 8 gis8] ~ \stemdown \noshift gis4 | + a4. fis8 gis4. a8 ~ | + a4 gis4 gis4 r8 gis8 } + { \stemup \property Voice.hshift = 2 s4 fis4 e} + { \stemdown s4 dis4 cis4 } + > | + % 16 +} + +praeludium_pedal = \melodic { + \$praeludium_commands + \octave c; + \clef bass; + + % 13 + r4 'fis4-\ltoe 'e4.-\lheel e8-\rheel | + fis4.-\rtoe fis8-\rtoe fis4-\rtoe [e8-\ltoe a8-\rtoe] | + dis4-\ltoe gis4-\rtoe [cis8-\ltoe 'b!8-\lheel 'ais8-\rtoe 'gis8-\ltoe] | + % 16 +} + + +fuga2_commands = \melodic{ + \meter 3/4; + \key fis cis gis dis; % E-major +} + +fuga2_right = \melodic { + \$fuga2_commands + \octave c'; + \clef violin; + + % 15 + \multi 2 < + { \stemup [b8 fis8] b4 } + { \stemdown fis2 } + > + %{ this chord is usually set like this: + | + x|| + x|| + x| + |x + | + %} + \multi 2 < + { \stemup \noshift e'4 } + { \stemup \doshift cis'4 } + { \stemup \property Voice.hshift = 2 ais4 } + { \stemdown fis4 } + > | + % 16 + \multi 2 < + { \stemup dis'2 dis'4 | + cis'2 cis'4 | + b4. [cis'8 dis'8 e'8] } + { \stemup \doshift [b8 fis8] b2 ~ | + [b8 a!16 gis16] a2 ~ | + a4 gis2 } + { \stemdown fis2. ~ | + fis2. ~ | + fis4 e2 } + > | + % 19 +} + +fuga2_left = \melodic { + \$fuga2_commands + \octave c; + \clef bass; + + % 15 + \multi 2 < + { \stemdown b2 \stemup ais4 | + b2 b4 } + { \stemdown s2 e4 | + fis2 fis4 } + > + \stemdown cis'2 e'4 | + b4. b8 b4 | + % 19 +} + +fuga2_pedal = \melodic { + \$fuga2_commands + \octave c; + \clef bass; + + % 15 + dis4.-\ltoe e8-\rtoe cis4 | + 'b4.-\lheel [cis8-\ltoe dis8-\rtoe e8-\rheel] | + fis4.-\rtoe [e8-\rheel dis8-\rtoe cis8-\ltoe] | + dis4-\rtoe e4-\rheel 'e4-\ltoe | + % 19 +} + +break = \melodic { + %\meter 4/4; + r1 +} + + +% these should be two separate scores... +\score{ + \type Score < + \type Grandstaff < + \type Staff = treble { + \praeludium_right \break \fuga2_right } + \type Staff = bass { + \praeludium_left \break \fuga2_left } + > + \type Staff = pedal { + \praeludium_pedal \break \fuga2_pedal } + > + + \paper{} + + \midi { + \tempo 4 = 96; } +} -- 2.39.5