mail with subject "subscribe" to
email(gnu-music-discuss-request@gnu.org)
This list is archived at
- lurl(http://www.jab.org/mail/gnu-music-discuss@gnu.org)
+ lurl(http://www.mail-archive.org/gnu-music-discuss@gnu.org)
)
Announces of new versions will be sent to info-gnu-music and
--- /dev/null
+%created by: GNU LilyPond 1.1.48.uu1, at Fri Jun 18 14:13:33 1999
+%
+% outputting Score, defined at:
+% out-www/lilypond-overview-0.2.7.ly:3:7
+\def\mudelatagline{Lily was here, 1.1.48.uu1}%
+\def\LilyPondVersion{1.1.48.uu1}%
+\def\mudelapaperbeam_steep_slope{0.200000}%
+\def\mudelapaperstem_max{3.000000}%
+\def\mudelapaperfont_number-1{8.000000}%
+\def\mudelapapermmrest_x_minimum{32.000000}%
+\def\mudelapaperhsize{597.507874}%
+\def\mudelapaperforced_stem_shorten2{2.000000}%
+\def\mudelapaperslur_clip_ratio{1.200000}%
+\def\mudelapaperminimum_stem_length3{4.000000}%
+\def\mudelapaperlinewidth{-28.452756}%
+\def\mudelapaperminimum_stem_length0{0.000000}%
+\def\mudelapaperfont_normal{8.000000}%
+\def\mudelapapernotewidth{6.600000}%
+\def\mudelapaperrestcollision_minimum_dist{3.000000}%
+\def\mudelapaperbeam_lengthened{0.800000}%
+\def\mudelapaperfont_number{8.000000}%
+\def\mudelapaperDOWN{-1.000000}%
+\def\mudelapaperslur_clip_angle{100.000000}%
+\def\mudelapaperwholewidth{7.920000}%
+\def\mudelapaperbarthick_thick{2.400000}%
+\def\mudelapapercastingalgorithm{1.000000}%
+\def\mudelapaperslur_slope_follow_music_factor{0.800000}%
+\def\mudelapaperpostBreakPadding{4.000000}%
+\def\mudelapaperscmsetting{(display "\\input lilyponddefs \\musixsixteendefs");%
+ }%
+\def\mudelapaperstemthickness{0.320000}%
+\def\mudelapaperinterline{4.000000}%
+\def\mudelapaperslur_height_limit{16.000000}%
+\def\mudelapapertextheight{611.809858}%
+\def\mudelapaperfont_large{12.000000}%
+\def\mudelapaperfont_finger{4.000000}%
+\def\mudelapaperrulethickness{0.400000}%
+\def\mudelapaperstem_length1{10.000000}%
+\def\mudelapaperslur_x_minimum{12.000000}%
+\def\mudelapaperlinewidth20{557.507874}%
+\def\mudelapaperfont_number+1{12.000000}%
+\def\mudelapaperMEAN{3.000000}%
+\def\mudelapaperpaperfile{a4.ly}%
+\def\mudelapapertexsetting{\input lilyponddefs \musixsixteendefs }%
+\def\mudelapaperforced_stem_shorten1{2.000000}%
+\def\mudelapaperinterbeam4{3.376000}%
+\def\mudelapaperminimum_stem_length2{5.000000}%
+\def\mudelapapergourlay_maxmeasures{10.000000}%
+\def\mudelapaperbeam_dir_algorithm{2.000000}%
+\def\mudelapapervsize{844.762323}%
+\def\mudelapaperstaffheight{16.000000}%
+\def\mudelapapertuplet_thick{0.400000}%
+\def\mudelapaperbarthick_score{0.640000}%
+\def\mudelapaperbar_thinkern{1.200000}%
+\def\mudelapapertie_x_gap{0.800000}%
+\def\mudelapapervolta_thick{0.640000}%
+\def\mudelapaperrestcollision_minimum_beamdist{1.500000}%
+\def\mudelapapertextheight20{764.762323}%
+\def\mudelapaperUP{1.000000}%
+\def\mudelapaperslur_rc_factor{2.400000}%
+\def\mudelapaperarithmetic_basicspace{2.000000}%
+\def\mudelapaperslur_thickness{0.560000}%
+\def\mudelapaperinterbeam{3.264000}%
+\def\mudelapaperindent{31.857593}%
+\def\mudelapaperfont_mark{10.000000}%
+\def\mudelapaperslur_ratio{0.250000}%
+\def\mudelapaperstem_length3{6.000000}%
+\def\mudelapaperslur_x_gap{0.800000}%
+\def\mudelapaperstem_length0{14.000000}%
+\def\mudelapaperfont_Large{10.000000}%
+\def\mudelapaperextender_height{0.320000}%
+\def\mudelapapercrescendo_shorten{16.000000}%
+\def\mudelapaperfont_volta{5.000000}%
+\def\mudelapaperforced_stem_shorten3{2.000000}%
+\def\mudelapaperslur_clip_height{48.000000}%
+\def\mudelapaperquartwidth{5.280000}%
+\def\mudelapaperforced_stem_shorten0{2.000000}%
+\def\mudelapaperminimum_stem_length1{6.000000}%
+\def\mudelapaperslur_slope_damping{0.600000}%
+\def\mudelapapermagnification_dynamic{2.000000}%
+\def\mudelapaperMEDIAN{4.000000}%
+\def\mudelapaperpssetting{(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec}%
+ { /undefinedfilename signalerror }%
+ ifelse%
+ }%
+\def\mudelapaperbarthick_thin{0.640000}%
+\def\mudelapaperbar_kern{1.200000}%
+\def\mudelapapertie_x_minimum{12.000000}%
+\def\mudelapaperbeam_thickness{1.872000}%
+\def\mudelapapertie_slope_damping{0.800000}%
+\def\mudelapaperfont_dynamic{10.000000}%
+\def\mudelapapergourlay_energybound{100000.000000}%
+\def\mudelapaperMAJORITY{2.000000}%
+\def\mudelapaperarithmetic_multiplier{4.800000}%
+\def\mudelapaperstaffline{0.400000}%
+\def\mudelapaperstem_length2{8.000000}%
+\def\mudelapaperbarsize{16.000000}%
+\input lilyponddefs \musixsixteendefs \turnOnExperimentalFeatures\turnOnPostScript\vbox to 32.0 pt {\hbox{%
+\placebox{-24.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-20.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-16.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-12.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-8.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \font\lilyfontA=feta16\lilyfontA\placebox{-20.0 pt }%
+ {35.8575928008999 pt }%
+ {\show{86}%
+ }%
+ \font\lilyfontB=feta-nummer8\lilyfontB\placebox{-16.0 pt }%
+ {50.3998138702358 pt }%
+ {\hbox{3}%
+ }%
+ \placebox{-24.0 pt }%
+ {49.8575928008999 pt }%
+ {\hbox{4}%
+ }%
+ \placebox{-16.0 pt }%
+ {127.564230374143 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-16.0 pt }%
+ {174.764230374143 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-27.264 pt }%
+ {79.5642303741425 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-24.0 pt }%
+ {79.5642303741425 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-27.264 pt }%
+ {69.9642303741424 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-24.0 pt }%
+ {69.9642303741424 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-27.264 pt }%
+ {60.3642303741423 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-24.0 pt }%
+ {60.3642303741423 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-16.0 pt }%
+ {60.5642303741423 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \lilyfontA\placebox{-14.0 pt }%
+ {60.3642303741423 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {70.1642303741424 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {69.9642303741424 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {79.7642303741425 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {79.5642303741425 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {89.3642303741427 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {89.1642303741427 pt }%
+ {\show{30}%
+ }%
+ \placebox{-24.736 pt }%
+ {98.7642303741428 pt }%
+ {\embeddedps{14.8000000000002 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-16.0 pt }%
+ {98.9642303741428 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 8.736 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {98.7642303741428 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {113.364230374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 8.736 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {113.164230374143 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {132.404230374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 6.0 pt height 7.03836152344995 pt }%
+ \placebox{-8.0 pt }%
+ {132.204230374143 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {151.688390374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 5.03836152344995 pt height 8.0 pt }%
+ \placebox{-22.0 pt }%
+ {146.604230374143 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {161.204230374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 6.0 pt height 7.03836152344995 pt }%
+ \placebox{-8.0 pt }%
+ {161.004230374143 pt }%
+ {\show{30}%
+ }%
+ }%
+ \vss}%
+\EndLilyPondOutput
\ No newline at end of file
--- /dev/null
+%created by: GNU LilyPond 1.1.48.uu1, at Fri Jun 18 14:13:29 1999
+%
+% outputting Score, defined at:
+% out-www/lilypond-overview-0.2.8.ly:3:7
+\def\mudelatagline{Lily was here, 1.1.48.uu1}%
+\def\LilyPondVersion{1.1.48.uu1}%
+\def\mudelapaperbeam_steep_slope{0.200000}%
+\def\mudelapaperstem_max{3.000000}%
+\def\mudelapaperfont_number-1{8.000000}%
+\def\mudelapapermmrest_x_minimum{32.000000}%
+\def\mudelapaperhsize{597.507874}%
+\def\mudelapaperforced_stem_shorten2{2.000000}%
+\def\mudelapaperslur_clip_ratio{1.200000}%
+\def\mudelapaperminimum_stem_length3{4.000000}%
+\def\mudelapaperlinewidth{-28.452756}%
+\def\mudelapaperminimum_stem_length0{0.000000}%
+\def\mudelapaperfont_normal{8.000000}%
+\def\mudelapapernotewidth{6.600000}%
+\def\mudelapaperrestcollision_minimum_dist{3.000000}%
+\def\mudelapaperbeam_lengthened{0.800000}%
+\def\mudelapaperfont_number{8.000000}%
+\def\mudelapaperDOWN{-1.000000}%
+\def\mudelapaperslur_clip_angle{100.000000}%
+\def\mudelapaperwholewidth{7.920000}%
+\def\mudelapaperbarthick_thick{2.400000}%
+\def\mudelapapercastingalgorithm{1.000000}%
+\def\mudelapaperslur_slope_follow_music_factor{0.800000}%
+\def\mudelapaperpostBreakPadding{4.000000}%
+\def\mudelapaperscmsetting{(display "\\input lilyponddefs \\musixsixteendefs");%
+ }%
+\def\mudelapaperstemthickness{0.320000}%
+\def\mudelapaperinterline{4.000000}%
+\def\mudelapaperslur_height_limit{16.000000}%
+\def\mudelapapertextheight{611.809858}%
+\def\mudelapaperfont_large{12.000000}%
+\def\mudelapaperfont_finger{4.000000}%
+\def\mudelapaperrulethickness{0.400000}%
+\def\mudelapaperstem_length1{10.000000}%
+\def\mudelapaperslur_x_minimum{12.000000}%
+\def\mudelapaperlinewidth20{557.507874}%
+\def\mudelapaperfont_number+1{12.000000}%
+\def\mudelapaperMEAN{3.000000}%
+\def\mudelapaperpaperfile{a4.ly}%
+\def\mudelapapertexsetting{\input lilyponddefs \musixsixteendefs }%
+\def\mudelapaperforced_stem_shorten1{2.000000}%
+\def\mudelapaperinterbeam4{3.376000}%
+\def\mudelapaperminimum_stem_length2{5.000000}%
+\def\mudelapapergourlay_maxmeasures{10.000000}%
+\def\mudelapaperbeam_dir_algorithm{2.000000}%
+\def\mudelapapervsize{844.762323}%
+\def\mudelapaperstaffheight{16.000000}%
+\def\mudelapapertuplet_thick{0.400000}%
+\def\mudelapaperbarthick_score{0.640000}%
+\def\mudelapaperbar_thinkern{1.200000}%
+\def\mudelapapertie_x_gap{0.800000}%
+\def\mudelapapervolta_thick{0.640000}%
+\def\mudelapaperrestcollision_minimum_beamdist{1.500000}%
+\def\mudelapapertextheight20{764.762323}%
+\def\mudelapaperUP{1.000000}%
+\def\mudelapaperslur_rc_factor{2.400000}%
+\def\mudelapaperarithmetic_basicspace{2.000000}%
+\def\mudelapaperslur_thickness{0.560000}%
+\def\mudelapaperinterbeam{3.264000}%
+\def\mudelapaperindent{31.857593}%
+\def\mudelapaperfont_mark{10.000000}%
+\def\mudelapaperslur_ratio{0.250000}%
+\def\mudelapaperstem_length3{6.000000}%
+\def\mudelapaperslur_x_gap{0.800000}%
+\def\mudelapaperstem_length0{14.000000}%
+\def\mudelapaperfont_Large{10.000000}%
+\def\mudelapaperextender_height{0.320000}%
+\def\mudelapapercrescendo_shorten{16.000000}%
+\def\mudelapaperfont_volta{5.000000}%
+\def\mudelapaperforced_stem_shorten3{2.000000}%
+\def\mudelapaperslur_clip_height{48.000000}%
+\def\mudelapaperquartwidth{5.280000}%
+\def\mudelapaperforced_stem_shorten0{2.000000}%
+\def\mudelapaperminimum_stem_length1{6.000000}%
+\def\mudelapaperslur_slope_damping{0.600000}%
+\def\mudelapapermagnification_dynamic{2.000000}%
+\def\mudelapaperMEDIAN{4.000000}%
+\def\mudelapaperpssetting{(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec}%
+ { /undefinedfilename signalerror }%
+ ifelse%
+ }%
+\def\mudelapaperbarthick_thin{0.640000}%
+\def\mudelapaperbar_kern{1.200000}%
+\def\mudelapapertie_x_minimum{12.000000}%
+\def\mudelapaperbeam_thickness{1.872000}%
+\def\mudelapapertie_slope_damping{0.800000}%
+\def\mudelapaperfont_dynamic{10.000000}%
+\def\mudelapapergourlay_energybound{100000.000000}%
+\def\mudelapaperMAJORITY{2.000000}%
+\def\mudelapaperarithmetic_multiplier{4.800000}%
+\def\mudelapaperstaffline{0.400000}%
+\def\mudelapaperstem_length2{8.000000}%
+\def\mudelapaperbarsize{16.000000}%
+\input lilyponddefs \musixsixteendefs \turnOnExperimentalFeatures\turnOnPostScript\vbox to 38.2 pt {\hbox{%
+\font\lilyfontA=feta-nummer8\lilyfontA\placebox{-22.2 pt }%
+ {50.1287033355679 pt }%
+ {\hbox{2}%
+ }%
+ \placebox{-30.2 pt }%
+ {49.8575928008999 pt }%
+ {\hbox{4}%
+ }%
+ \placebox{-30.2 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 173.026317573245 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-26.2 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 173.026317573245 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-22.2 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 173.026317573245 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-18.2 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 173.026317573245 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-14.2 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 173.026317573245 pt depth 0.2 pt height 0.2 pt }%
+ \font\lilyfontB=feta16\lilyfontB\placebox{-26.2 pt }%
+ {35.8575928008999 pt }%
+ {\show{86}%
+ }%
+ \placebox{-22.2 pt }%
+ {89.1642303741433 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-22.2 pt }%
+ {122.604230374144 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-22.2 pt }%
+ {204.243910374144 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-22.2 pt }%
+ {60.5642303741424 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height 5.03836152344995 pt }%
+ \placebox{-20.2 pt }%
+ {60.3642303741424 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.2 pt }%
+ {60.3642303741424 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {74.9642303741429 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 10.0 pt height 7.03836152344995 pt }%
+ \placebox{-18.2 pt }%
+ {74.7642303741429 pt }%
+ {\show{30}%
+ }%
+ \placebox{-14.2 pt }%
+ {74.7642303741429 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {94.0042303741434 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height 1.03836152344995 pt }%
+ \placebox{-20.2 pt }%
+ {93.8042303741434 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {98.8883903741434 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth -6.96163847655005 pt height 18.0 pt }%
+ \placebox{-16.2 pt }%
+ {93.8042303741434 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {108.404230374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 10.0 pt height 3.03836152344995 pt }%
+ \placebox{-18.2 pt }%
+ {108.204230374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {113.288390374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth -8.96163847655005 pt height 20.0 pt }%
+ \placebox{-14.2 pt }%
+ {108.204230374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-34.2 pt }%
+ {146.864070374144 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-30.936 pt }%
+ {146.864070374144 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-34.2 pt }%
+ {137.264070374144 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-30.936 pt }%
+ {137.264070374144 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-34.2 pt }%
+ {127.244230374144 pt }%
+ {\embeddedps{10.41984 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-30.936 pt }%
+ {127.244230374144 pt }%
+ {\embeddedps{10.41984 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-22.2 pt }%
+ {127.444230374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {127.244230374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-0.199999999999999 pt }%
+ {132.328390374144 pt }%
+ {\show{74}%
+ }%
+ \placebox{-22.2 pt }%
+ {132.328390374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth -10.96163847655 pt height 22.0 pt }%
+ \placebox{-12.2 pt }%
+ {127.244230374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {137.464070374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {137.264070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {147.064070374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {146.864070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {151.948230374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth -10.96163847655 pt height 22.0 pt }%
+ \placebox{-12.2 pt }%
+ {146.864070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {156.664070374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {156.464070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-34.2 pt }%
+ {185.264070374144 pt }%
+ {\embeddedps{10.41984 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-30.936 pt }%
+ {185.264070374144 pt }%
+ {\embeddedps{10.41984 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-34.2 pt }%
+ {175.664070374144 pt }%
+ {\embeddedps{10.0 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-30.936 pt }%
+ {175.664070374144 pt }%
+ {\embeddedps{10.0 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-34.2 pt }%
+ {166.064070374144 pt }%
+ {\embeddedps{10.0 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-30.936 pt }%
+ {166.064070374144 pt }%
+ {\embeddedps{10.0 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-22.2 pt }%
+ {166.264070374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {166.064070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {175.864070374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {175.664070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {185.464070374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {185.264070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-0.199999999999999 pt }%
+ {190.348230374144 pt }%
+ {\show{74}%
+ }%
+ \placebox{-22.2 pt }%
+ {190.348230374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth -10.96163847655 pt height 22.0 pt }%
+ \placebox{-12.2 pt }%
+ {185.264070374144 pt }%
+ {\show{30}%
+ }%
+ \placebox{-22.2 pt }%
+ {195.483910374144 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 12.0 pt height -0.961638476550048 pt }%
+ \placebox{-22.2 pt }%
+ {195.283910374144 pt }%
+ {\show{30}%
+ }%
+ }%
+ \vss}%
+\EndLilyPondOutput
\ No newline at end of file
--- /dev/null
+%created by: GNU LilyPond 1.1.48.uu1, at Fri Jun 18 14:13:37 1999
+%
+% outputting Score, defined at:
+% out-www/lilypond-overview-0.2.9.ly:3:7
+\def\mudelatagline{Lily was here, 1.1.48.uu1}%
+\def\LilyPondVersion{1.1.48.uu1}%
+\def\mudelapaperbeam_steep_slope{0.200000}%
+\def\mudelapaperstem_max{3.000000}%
+\def\mudelapaperfont_number-1{8.000000}%
+\def\mudelapapermmrest_x_minimum{32.000000}%
+\def\mudelapaperhsize{597.507874}%
+\def\mudelapaperforced_stem_shorten2{2.000000}%
+\def\mudelapaperslur_clip_ratio{1.200000}%
+\def\mudelapaperminimum_stem_length3{4.000000}%
+\def\mudelapaperlinewidth{-28.452756}%
+\def\mudelapaperminimum_stem_length0{0.000000}%
+\def\mudelapaperfont_normal{8.000000}%
+\def\mudelapapernotewidth{6.600000}%
+\def\mudelapaperrestcollision_minimum_dist{3.000000}%
+\def\mudelapaperbeam_lengthened{0.800000}%
+\def\mudelapaperfont_number{8.000000}%
+\def\mudelapaperDOWN{-1.000000}%
+\def\mudelapaperslur_clip_angle{100.000000}%
+\def\mudelapaperwholewidth{7.920000}%
+\def\mudelapaperbarthick_thick{2.400000}%
+\def\mudelapapercastingalgorithm{1.000000}%
+\def\mudelapaperslur_slope_follow_music_factor{0.800000}%
+\def\mudelapaperpostBreakPadding{4.000000}%
+\def\mudelapaperscmsetting{(display "\\input lilyponddefs \\musixsixteendefs");%
+ }%
+\def\mudelapaperstemthickness{0.320000}%
+\def\mudelapaperinterline{4.000000}%
+\def\mudelapaperslur_height_limit{16.000000}%
+\def\mudelapapertextheight{611.809858}%
+\def\mudelapaperfont_large{12.000000}%
+\def\mudelapaperfont_finger{4.000000}%
+\def\mudelapaperrulethickness{0.400000}%
+\def\mudelapaperstem_length1{10.000000}%
+\def\mudelapaperslur_x_minimum{12.000000}%
+\def\mudelapaperlinewidth20{557.507874}%
+\def\mudelapaperfont_number+1{12.000000}%
+\def\mudelapaperMEAN{3.000000}%
+\def\mudelapaperpaperfile{a4.ly}%
+\def\mudelapapertexsetting{\input lilyponddefs \musixsixteendefs }%
+\def\mudelapaperforced_stem_shorten1{2.000000}%
+\def\mudelapaperinterbeam4{3.376000}%
+\def\mudelapaperminimum_stem_length2{5.000000}%
+\def\mudelapapergourlay_maxmeasures{10.000000}%
+\def\mudelapaperbeam_dir_algorithm{2.000000}%
+\def\mudelapapervsize{844.762323}%
+\def\mudelapaperstaffheight{16.000000}%
+\def\mudelapapertuplet_thick{0.400000}%
+\def\mudelapaperbarthick_score{0.640000}%
+\def\mudelapaperbar_thinkern{1.200000}%
+\def\mudelapapertie_x_gap{0.800000}%
+\def\mudelapapervolta_thick{0.640000}%
+\def\mudelapaperrestcollision_minimum_beamdist{1.500000}%
+\def\mudelapapertextheight20{764.762323}%
+\def\mudelapaperUP{1.000000}%
+\def\mudelapaperslur_rc_factor{2.400000}%
+\def\mudelapaperarithmetic_basicspace{2.000000}%
+\def\mudelapaperslur_thickness{0.560000}%
+\def\mudelapaperinterbeam{3.264000}%
+\def\mudelapaperindent{31.857593}%
+\def\mudelapaperfont_mark{10.000000}%
+\def\mudelapaperslur_ratio{0.250000}%
+\def\mudelapaperstem_length3{6.000000}%
+\def\mudelapaperslur_x_gap{0.800000}%
+\def\mudelapaperstem_length0{14.000000}%
+\def\mudelapaperfont_Large{10.000000}%
+\def\mudelapaperextender_height{0.320000}%
+\def\mudelapapercrescendo_shorten{16.000000}%
+\def\mudelapaperfont_volta{5.000000}%
+\def\mudelapaperforced_stem_shorten3{2.000000}%
+\def\mudelapaperslur_clip_height{48.000000}%
+\def\mudelapaperquartwidth{5.280000}%
+\def\mudelapaperforced_stem_shorten0{2.000000}%
+\def\mudelapaperminimum_stem_length1{6.000000}%
+\def\mudelapaperslur_slope_damping{0.600000}%
+\def\mudelapapermagnification_dynamic{2.000000}%
+\def\mudelapaperMEDIAN{4.000000}%
+\def\mudelapaperpssetting{(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec}%
+ { /undefinedfilename signalerror }%
+ ifelse%
+ }%
+\def\mudelapaperbarthick_thin{0.640000}%
+\def\mudelapaperbar_kern{1.200000}%
+\def\mudelapapertie_x_minimum{12.000000}%
+\def\mudelapaperbeam_thickness{1.872000}%
+\def\mudelapapertie_slope_damping{0.800000}%
+\def\mudelapaperfont_dynamic{10.000000}%
+\def\mudelapapergourlay_energybound{100000.000000}%
+\def\mudelapaperMAJORITY{2.000000}%
+\def\mudelapaperarithmetic_multiplier{4.800000}%
+\def\mudelapaperstaffline{0.400000}%
+\def\mudelapaperstem_length2{8.000000}%
+\def\mudelapaperbarsize{16.000000}%
+\input lilyponddefs \musixsixteendefs \turnOnExperimentalFeatures\turnOnPostScript\vbox to 32.0 pt {\hbox{%
+\placebox{-24.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-20.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-16.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-12.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \placebox{-8.0 pt }%
+ {31.8575928008999 pt }%
+ {\kern0.0 pt \vrule width 143.546637573243 pt depth 0.2 pt height 0.2 pt }%
+ \font\lilyfontA=feta16\lilyfontA\placebox{-20.0 pt }%
+ {35.8575928008999 pt }%
+ {\show{86}%
+ }%
+ \font\lilyfontB=feta-nummer8\lilyfontB\placebox{-16.0 pt }%
+ {50.3998138702358 pt }%
+ {\hbox{3}%
+ }%
+ \placebox{-24.0 pt }%
+ {49.8575928008999 pt }%
+ {\hbox{4}%
+ }%
+ \placebox{-16.0 pt }%
+ {127.564230374143 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-16.0 pt }%
+ {174.764230374143 pt }%
+ {\kern0.0 pt \vrule width 0.64 pt depth 8.0 pt height 8.0 pt }%
+ \placebox{-27.264 pt }%
+ {79.5642303741425 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-24.0 pt }%
+ {79.5642303741425 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-27.264 pt }%
+ {69.9642303741424 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-24.0 pt }%
+ {69.9642303741424 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-27.264 pt }%
+ {60.3642303741423 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-24.0 pt }%
+ {60.3642303741423 pt }%
+ {\embeddedps{10.0000000000001 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-16.0 pt }%
+ {60.5642303741423 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \lilyfontA\placebox{-14.0 pt }%
+ {60.3642303741423 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {70.1642303741424 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {69.9642303741424 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {79.7642303741425 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {79.5642303741425 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {89.3642303741427 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 11.264 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {89.1642303741427 pt }%
+ {\show{30}%
+ }%
+ \placebox{-24.736 pt }%
+ {98.7642303741428 pt }%
+ {\embeddedps{14.8000000000002 0.0 1.872 draw_beam }%
+ }%
+ \placebox{-16.0 pt }%
+ {98.9642303741428 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 8.736 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {98.7642303741428 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {113.364230374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 8.736 pt height 1.03836152344995 pt }%
+ \placebox{-14.0 pt }%
+ {113.164230374143 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {132.404230374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 6.0 pt height 7.03836152344995 pt }%
+ \placebox{-8.0 pt }%
+ {132.204230374143 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {151.688390374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 5.03836152344995 pt height 8.0 pt }%
+ \placebox{-22.0 pt }%
+ {146.604230374143 pt }%
+ {\show{30}%
+ }%
+ \placebox{-16.0 pt }%
+ {161.204230374143 pt }%
+ {\kern-0.16 pt \vrule width 0.32 pt depth 6.0 pt height 7.03836152344995 pt }%
+ \placebox{-8.0 pt }%
+ {161.004230374143 pt }%
+ {\show{30}%
+ }%
+ }%
+ \vss}%
+\EndLilyPondOutput
\ No newline at end of file
concepts.} The shape of notes and rests indicates their duration
(See figure~\ref{noteshapes}) relative to the whole note.
+
\begin{figure}[h]
\begin{center}
\begin{mudela}
\StaffContext
\remove "Staff_symbol_engraver";
\remove "Time_signature_engraver";
- \remove "Bar_engraver";
+% \remove "Bar_engraver";
\remove "Clef_engraver";
}
linewidth = -1.;
\StaffContext
\remove "Staff_symbol_engraver";
\remove "Time_signature_engraver";
- \remove "Bar_engraver";
+% \remove "Bar_engraver";
\remove "Clef_engraver";
}
linewidth = -1.;
\end{center}
\end{figure}
+
Notes are printed in a grid of horizontal lines called \emph{staff} to
denote their pitch: each line represents the pitch of from the
standard scale (c, d, e, f, g, a, b). The reference point is the
\translator {
\StaffContext
\remove "Time_signature_engraver";
- \remove "Bar_engraver";
+% \remove "Bar_engraver";
\remove "Staff_symbol_engraver";
\remove "Clef_engraver";
\remove "Key_engraver";
\mudelafile{number-staff-lines.fly}
+\section{Spacing}
+
+In a limited number of cases, LilyPond corrects for optical spacing
+effects. In this example, space for opposite pointed stems is adjusted
+
+\mudelafile{stem-spacing.sly}
+
\section{Global stuff}
Markings that are attached to (invisible) barlines are
It is possible to create beams and slurs that cross staffs by switching the
context:
mudela(fragment,verbatim,center)(
-<
+\context PianoStaff <
\context Staff=one \notes\relative c'{
\stemup
[c8 c \translator Staff=two \stemup c c]
\translator Staff=one
d4( \translator Staff=two )a4
}
-\context Staff=two \notes{ \clef bass;}
+\context Staff=two \notes{ \clef bass; s1}
>
)
+pl 48.hwn1
+ - \property hshift -> \property horizontalNoteShift (mudela 1.0.21)
+ - cleaned up collision. \property hshift = 2 now supported.
+ - Spacing:
+ * bf: don't divide strength by distance if distance == 0.0
+ * cleaned up Spacing_spanner
+ * simplistic optical illusion spacing for opposite stems.
+ - don't use Protected_scm for Score_element::element_property_alist_
+ - some scsii fixes.
+ - Lookup cleanups; junked Lookup::paper_l_
+ - abc-2-ly: tuplets, guitar chords., chords,
+
+pl 48.mb2
+ - bf: correct accidentals after tied over note.
+
+pl 48.mb1
+ - bf, lookup.cc: Count '{' also directly after a TeX macro
+ - bf: textstyle->textStyle in all examples.
+
+pl 48.jcn1
+ - bd: interstaff slurs at line break
+
+pl 48.uu1
+ - add a WX field to AFM output.
+ - add space before ; in AFM output
+
+*********
pl 47.jcn1
- bf: interstaff slurs (urg: more segfaults in scm_gc_mark ())
* G_script_column
* G_script_column_engraver
- pl 37.script1
+pl 37.script1
- major Script rehack:
* G_stem_staff_side_item
* G_script
Mutopia is an archive of public domain music, free for all to
download, modify and redistribute. It should be based on free
-software. It is similar in spirit to the gutenberg archive.
+software. It is similar in spirit to the Gutenberg archive.
- setup submission guidelines,
-- acquire mutopia.org domain.
-
-- setup FTP server
-
-- cooperate with ABC folks, ftp.gmd.de
+- setup FTP/Web server
WHO DO WE NEED
-Volunteers that want to setup and maintain a website and FTP site.
-
-Volunteers with enough legal knowledge to write submission guidelines.
+Volunteers that want to setup, host and maintain a website and FTP
+site.
-A project leader.
+Volunteers to write submission guidelines, and copyright FAQs.
Signed
-Han-Wen Nienhys
+Han-Wen Nienhuys
Jan Nieuwenhuizen
[other bigwigs?]
Grep for TODO and ugh/ugr/urg.
.* BUGS
-. * junk separate mudela versioning.
-. * petite-ouverture time sig size.
+. * junk separate mudela versioning.
+. * indent = 0.0 with linewidth=-1.0
. * PostScript
. * header for PS enteredby = "bla <bla@bar.com>"
. * ps/lily.ps see comments.
. * fix MIDI
. * \shape 1st dim skipped?
. * turn slope-damping on/off
-. * tremolo stuff: tremolo over whole note.
. * We need feta-din*.mf files for more sizes than 10.
. * fix dynamics decently, ie. use kerning & ligatures.
. * dots & rest collisions?
note + circle = note + 1/4 of its length
-5 the circle is like a dot that's not filled in. for example, on
+ the circle is like a dot that's not filled in. for example, on
page three, the c-sharp on the second line should be a quarter with
a circle, not a quarter tied to a sixteenth. is this at all
possible with lily?
. * repeat engraver, gallina.ly
. * Matanya's tips:
-. * spacing for prefatory matter
. * accidentals closer to note head
. * to space the staffs/staffgroups contained in the score.
. * heavier beams?
. * Slur
. * Rhythmic_grouping
. * Duration
-. * Collision
-. * Rest_collision
-. * clef grav prop's
+. * clef engraver
. * parser
.* TODO before 1.2
. * Morally pure LilyPond.
-. * Remove mutopia ramblings.
. * Remove non-free software links.
. * Remove meta article LilyPond.
. * break priority setting from SCM.
. * add new glyphs to font.ly
. * formatting of input stuff.
. * \notes{ a \< b \cr } vs \notes{ a \< b \! }
-. * 'hinterfleisch' before bar (e.g. wtk1-fugue2)?
-. * Summary of minor spelling irregularities:
-. * capitalization/use of underscores in property names
-. * fix SkipBars -> skipBars
. * broken scripts:
lbheel = \script { "bheel" 0 0 -1 0 0 }
rbheel = \script { "bheel" 0 0 1 0 0 }
.* 3RD PARTY BUGS
. * GNU diff 2.7: diff -rN does not see a new directory with empty file
+. * mf-to-table -> add space before ; in AFM output. (-> check AFM
+ spec. Is this a bug in afm2tfm?)
. * check out GCC signatures?
. * glibc 2.0:
f = fopen ("/dev/null", "r")
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=1
-PATCH_LEVEL=48
+PATCH_LEVEL=49
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
end_autometric_re = regex.compile('@}')
include_re = regex.compile ('(\([a-zA-Z_0-9-]+\.mf\)')
autometric_re = regex.compile('@{\(.*\)@}')
-version = '0.7'
+version = '0.8'
postfixes = ['log', 'dvi', '2602gf', 'tfm']
class Feta_file(File):
self.writeline (lines[-1])
class Afm_file (File):
- def print_f_dimen(self, f):
+ def print_dimen(self, f):
f = f * 1000 / self.fontsize
dimstr = '%.2f' % f
dimstr = '0.00'
self.write( dimstr +' ');
- def neg_print_dimen(self, str):
- self.print_f_dimen(-atof(str))
- def print_dimen(self, str):
- self.print_f_dimen(atof(str))
def def_symbol (self, code, lily_id, tex_id, xdim, ydim):
- self.write ('C %s; N %s-%s; B ' % (code, self.groupname, lily_id))
+ xdim = map (atof, xdim)
+ ydim = map (atof, ydim)
+
+ wid = xdim[0] + xdim[1]
+ self.write ('C %s ; ' % code)
+ self.write ('WX ')
+ self.print_dimen (wid)
+
+ self.write (' ; N %s-%s ; B ' % (self.groupname, lily_id))
- self.neg_print_dimen(xdim [0])
- self.neg_print_dimen(ydim [0])
+ self.print_dimen(-xdim [0])
+ self.print_dimen(-ydim [0])
self.print_dimen(xdim [1])
self.print_dimen(ydim [1])
- self.write (';\n');
+ self.write (' ;\n');
def start (self,nm):
self.write ('Start%s\n' % nm)
piece = "1. Overture";
}
-\version "1.0.20";
+\version "1.0.21";
global=\notes{
\time 2/2;
+++ /dev/null
-\version "1.0.20";
-
-scales = \notes\transpose c''{
- f2 f f f f f f f f f\break
- }
-
-keys = \notes{
- \key b; s1 \key f; s1 \key f; s1 \key f; s1 \key f; s1
- }
-
-\score{
- <
- \context ChordNames \scales
- \context Staff < \scales \keys >
- >
-}
+++ /dev/null
-\score{
- \notes { R1 }
- \paper{
- linewidth = 40.0\mm;
-
-Staff = \translator {
- \type "Hara_kiri_line_group_engraver";
- defaultclef = violin;
-
- \consists "Bar_engraver";
- \consists "Clef_engraver";
- \consists "Key_engraver";
- \consists "Meter_engraver";
- \consists "Local_key_engraver";
- \consists "Staff_sym_engraver";
- \consists "Collision_engraver";
- \consists "Rest_collision_engraver";
-% {
- \consists "Bar_column_engraver";
- \consists "Bar_number_engraver";
-% }
- \consists "Staff_margin_engraver";
- \consists "Separating_line_group_engraver";
-% \consists "Line_group_engraver";
-
- \accepts "Voice";
-}
-
-% }
- }
-}
-
--- /dev/null
+
+\score { \context Staff \notes { c1 \nobreak c1 }}
--- /dev/null
+\clef alto;
+\time 3/4;
+\key F;
+[bes'16 r r ges'][es r r ges][es r r ges] |
+[bes, r r d][bes r r d][bes r r d]|
+[bes r r es][bes r r es][bes r r es]|
+[bes r r d][bes r r d][bes r r d]|
+[cis r r g'][e r r g][e r r b']|
+[g r r bes][g r r bes][g r r bes] |
+[g r r a][e r r a][e r r a]|
+[d, r r gis][d r r gis][d r r gis]|
--- /dev/null
+\score {
+ \notes \transpose c''{ c\longa*1/4 c\breve*1/2 c1 c2 c4 c8 c16 c32 c64 }
+ \paper {
+ \translator {
+ \StaffContext
+ \remove "Staff_symbol_engraver";
+ \remove "Time_signature_engraver";
+ \remove "Bar_engraver";
+ \remove "Clef_engraver";
+ }
+linewidth = -1.;
+ }}
+
+
-\version "1.0.20";
+\version "1.0.21";
one = \notes\relative c{
c'' d e f
}
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
blah = \notes {
Tested Features: example file with comments
%}
-\version "1.0.20";
+\version "1.0.21";
% the % is a comment.
% \version "1.0.16";
tempi = \notes {
- \property Voice.textstyle = "large"
+ \property Voice.textStyle = "large"
s8^"Allegro assai"
}
-\version "1.0.20";
+\version "1.0.21";
part = \notes {
c-1 c c c
r1*3
% \lbheel \lbheel \lfheel \lftoe
% \rbheel \rbtoe \rfheel \rftoe
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes {
* organ staff...
%}
-\version "1.0.20";
+\version "1.0.21";
\VoiceContext
\name "VoiceThree";
verticalDirection = "1";
- hshift = "1";
+ horizontalNoteShift = "1";
}
\translator {
\VoiceContext
\name "VoiceFour";
verticalDirection = "-1";
- hshift = "1";
+ horizontalNoteShift = "1";
}
\translator {
\StaffContext
-\version "1.0.20";
+\version "1.0.21";
ritme = \notes\transpose c'' {
\time 4/4;
% scales with accents.
%
-\version "1.0.20";
+\version "1.0.21";
blah = \notes {
\time 6/8;
\transpose c {
-\version "1.0.20";
+\version "1.0.21";
blah = \notes{ \transpose c'' {
}
-\version "1.0.20";
+\version "1.0.21";
}
}
-\version "1.0.20";
+\version "1.0.21";
}}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
onestaff = \context Staff = foo\notes {
\property Staff.instr = instr
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes\transpose c'{
}
}
-\version "1.0.20";
+\version "1.0.21";
}
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes\transpose c''{
TestedFeatures = "beams and beamflags";
}
-\version "1.0.20";
+\version "1.0.21";
\score{
<
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.20";
+\version "1.0.21";
shortlong = \notes{
c4()c( c c |
>
}
-\version "1.0.20";
+\version "1.0.21";
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
%{
Would this be acceptable/good enough/convenient for entry?
-\version "1.0.20";
+\version "1.0.21";
\score {
\notes{
copyright = "public domain";
Tested = "test the Collision resolution ";
}
-\version "1.0.20";
+\version "1.0.21";
twovoice = \context Staff \notes <
\context Voice=i { \stemdown c4 d e f g2~ g4 a [c8 d e f] c2| }
threevoice = \context Staff \notes <
\context Voice=i { \stemup g4 f e f g a g2 }
- \context Voice=ii { \stemup \property Voice.hshift = 1 e2 e2 e2 e2 }
+ \context Voice=ii { \stemup \property Voice.horizontalNoteShift = 1 e2 e2 e2 e2 }
\context Voice=iii { \stemdown c4 d e d c d es }
>
-\version "1.0.20";
+\version "1.0.21";
\score {
\include "paper20.ly"
-\version "1.0.20";
+\version "1.0.21";
oden = \lyrics{
O8 |
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes{
>
}
-\version "1.0.20";
+\version "1.0.21";
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes \relative c {
-\version "1.0.20";
+\version "1.0.21";
FontBody= \notes\transpose c''{
\bar "|:";
\transpose c'{
\time 4/4;
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
\property Voice . noteHeadStyle = "diamond"
c1^"1" d2^"2" e4^"3"
\property Voice . noteHeadStyle = "cross"
a^"0"_"9"
a'^\flageolet
- \property Voice . textstyle = "roman"
+ \property Voice . textStyle = "roman"
\time 1/2; a2 |
\time 3/2; < a1.
{ s4 \ppp \< s4 \! s4 \fff s4 \> s4 \! s4\ppp} >
% "(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.20";
+\version "1.0.21";
\include "font-body.ly"
\score{
% "(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.20";
+\version "1.0.21";
\include "paper16.ly"
\include "font-body.ly"
gourlay_maxmeasures =5.;
}
}
-\version "1.0.20";
+\version "1.0.21";
TestedFeatures = "This file tests some nasty Gourlay spacings";
}
-\version "1.0.20";
+\version "1.0.21";
%{
-\version "1.0.20";
+\version "1.0.21";
\score{
<
-\version "1.0.20";
+\version "1.0.21";
toeter_i = \notes\relative c <{
\property Staff.instrument = "Toeters"
/Mats B
%}
-\version "1.0.20";
+\version "1.0.21";
incipit = \notes\relative c'{
<b1 fis' b d>
-\version "1.0.20";
+\version "1.0.21";
%{
test key itemv breaking
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes\relative c'{
[c16 \stemdown c'' \stemboth c,, d]
-\version "1.0.20";
+\version "1.0.21";
global = \notes {
s1 | \mark "A";
>
\paper { Gourlay_maxmeaures = 2.; }
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
voice_one = \notes\transpose c''{ \stemup
R1 * 2 | f'4-. r r2 | R1 * 3 |
}
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes \transpose c''{
-\version "1.0.20";
+\version "1.0.21";
m = \notes \relative c''{
c1 | c2 c | c c | c c | c c | c c | c c | c c |
-\version "1.0.20";
+\version "1.0.21";
\score {
}
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
onestaff = \context Staff = foo\notes {
\property Staff.instr = instr
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.20";
+\version "1.0.21";
shortlong = \notes{
c4()c( c c |
}
under = \notes\transpose c'{
-
\stemdown
f'( \stemboth d d \stemdown )f'
f'( \stemboth c c \stemdown )f'
}
eccentric = \notes\transpose c'{
-
\stemup
\times 4/7 { f( a' f f f f )f } |
\times 4/7 { f( f f f f a' )f } |
-\version "1.0.20";
+\version "1.0.21";
% bug
% excentric slur can't handle this ...
% test damping
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes\relative c'{
}
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
% urg, the direction of the slur gets swapped!
\score{
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes\transpose c'{
}
}
-\version "1.0.20";
+\version "1.0.21";
TestedFeatures = "This file tests various spacings";
}
-\version "1.0.20";
+\version "1.0.21";
multipart = \notes \relative c'{
\context StaffGroup <
-\version "1.0.20";
+\version "1.0.21";
nt = \notes { c1 \break c1 c1 }
stuff = \notes \relative c'' <
\context Staff = stone { \nt }
-\version "1.0.20";
+\version "1.0.21";
\score {
}
-\version "1.0.20";
+\version "1.0.21";
>
\paper { linewidth = -1.; }
}
-\version "1.0.20";
+\version "1.0.21";
--- /dev/null
+
+\time 12/4; c''4 c c c a f' f, a
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes \transpose c'''{
\stemup
}
-\version "1.0.20";
+\version "1.0.21";
beamintervals = \notes{
\time 7/4;
instrument= "Violoncello";
}
-\version "1.0.20";
+\version "1.0.21";
% this is an example of extreme dynamics
-\version "1.0.20";
+\version "1.0.21";
$somewhat_long = \lyrics{
- \property Lyrics . textstyle = "roman"
+ \property Lyrics . textStyle = "roman"
AaaaaaA2
BbbbbbB2
CcccccC2
}
$rather_long = \lyrics{
- \property Lyrics . textstyle = "roman"
+ \property Lyrics . textStyle = "roman"
LLLLoooonggggg2
Syyllllaaabbble2
LLLLoooonggggg2
}
$quite_long = \lyrics{
- \property Lyrics . textstyle = "roman"
+ \property Lyrics . textStyle = "roman"
LLLLLLLLLooooongggggggg2
Syyyyyyyyyyyyylllllllaaaaaabbble2
LLLLLLLLLooooongggggggg2
% the thumb-script is used in cello music to indicate a note that should
% be played with your thumb.
-\version "1.0.20";
+\version "1.0.21";
\score { \notes \relative c'' {
[<a8_\thumb a'8-3(> <)b_\thumb b'-3>
-\version "1.0.20";
+\version "1.0.21";
% middle tie is wrong
-\version "1.0.20";
+\version "1.0.21";
tie = \notes\transpose c''{
instrument= "Instrument";
}
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes
}
-\version "1.0.20";
+\version "1.0.21";
vOne = \notes \relative c''{
\clef"violin";
}
}
-\version "1.0.20";
+\version "1.0.21";
{\voicetwo c}>
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
\score {
\notes <
}
}
-\version "1.0.20";
+\version "1.0.21";
}
}
-\version "1.0.20";
+\version "1.0.21";
"(Feta definitively is not an abbreviation of Font-En-TjA)";
}
-\version "1.0.20";
+\version "1.0.21";
\score{
\notes{
Tested Features lyrics and chords
%}
-\version "1.0.20";
+\version "1.0.21";
melodie = \notes\relative c'' {
\clef "violin";
}
text = \lyrics{
- \property Lyrics . textstyle = "italic"
+ \property Lyrics . textStyle = "italic"
Ah!4 vous dir- ai_- je ma man2
Ce4 qui cau- se mon tour- ment2
Tested Features: lyrics, interleaving lyrics and staffs, repeats
%}
-\version "1.0.20";
+\version "1.0.21";
melody = \notes \relative c'' {
\clef violin;
}
texte = \lyrics{
- \property Lyrics . textstyle" = "italic"
-% \property Lyrics . textstyle" = "roman"
+ \property Lyrics . textStyle" = "italic"
+% \property Lyrics . textStyle" = "roman"
Ah!4 vous dir- ai_- je ma- man2
Ce4 qui cau- se mon tour- ment2
Pa-4 pa veut que je rai- son- ne
}
texti = \lyrics{
- \property "Lyrics"."textstyle" = "roman"
+ \property "Lyrics"."textStyle" = "roman"
Twin-4 kle, twin- kle, lit- tle star,2
How4 I won- der what you are.2
Up4 a- bove the world so high,2
Molecule*
Bar::do_brew_molecule_p () const
{
- Molecule *output = new Molecule (lookup_l ()->bar (type_str_, get_bar_size ()));
+ Molecule *output = new Molecule (lookup_l ()->bar (type_str_, get_bar_size (), paper_l ()));
return output;
}
Array<Column_x_positions> h= do_solve ();
if (approx_stats_.count_i_)
- *mlog << '\n' << _f ("approximated: %s", approx_stats_.str ()) << endl;
+ *mlog << '\n' << _f ("approximated %s", approx_stats_.str ()) << endl;
if (exact_stats_.count_i_)
- *mlog << _f ("calculated exactly: %s", exact_stats_.str ()) << endl;
- *mlog << _f ("time: %.2f seconds", timer.read ()) << endl;
+ *mlog << _f ("calculated %s exactly", exact_stats_.str ()) << endl;
+ *mlog << _f ("elapsed time %.2f seconds", timer.read ()) << endl;
return h;
}
add_element (ncol_l);
add_dependency (ncol_l);
}
-/**
- should derive of Array.
- */
-static
-int idx (int dir, bool h_shift_b)
-{
- assert (abs (dir) == 1);
- int j = dir > 0 ? 0 : 3;
- if (h_shift_b)
- j += dir;
- return j;
-}
+
/** This complicated routine moves note columns around horizontally to
ensure that notes don't clash.
This should be done better, probably.
- This routine is dedicated to Stine Randmael :-)
-
+ TODO: forced hshift
+
*/
void
Collision::do_pre_processing()
{
- if (clash_l_arr_.size() <= 1)
- return;
-
- /*
- [stem up, stem up shifted, stem down shifted, stem down]
- */
- Array<Note_column*> clash_group_arr_a[4]; // TODO: use drul.
-
+ Drul_array<Link_array<Note_column> > clash_groups;
+ Drul_array<Array<int> > shifts;
+
for (int i=0; i < clash_l_arr_.size(); i++)
{
- Note_column* c_l = clash_l_arr_[i];
- Direction d = c_l->dir ();
- if (!d)
- {
- warning (_ ("No stem direction set. Ignoring column in clash."));
- continue;
- }
-
- SCM shift = c_l->remove_elt_property (horizontal_shift_scm_sym);
- bool shift_b = (shift != SCM_BOOL_F);
- clash_group_arr_a[idx (d, shift_b)].push (c_l);
+ clash_groups[clash_l_arr_[i]->dir ()].push (clash_l_arr_[i]);
}
-
- for (int j=0; j < 4; j++)
- {
- if (clash_group_arr_a[j].size() > 1)
- {
- warning (_ ("Too many clashing notecolumns. Ignoring them."));
- return;
- }
- }
+
Direction d = UP;
do
{
- if (!clash_group_arr_a[idx (d, false)].size())
- {
- clash_group_arr_a[idx (d, false)] = clash_group_arr_a[idx (d, true)];
- clash_group_arr_a[idx (d, true)].clear();
- }
- }
- while (flip (&d) != UP);
-
+ Array<int> & shift (shifts[d]);
+ Link_array<Note_column> & clashes (clash_groups[d]);
- Interval_t<int> y_extent[4];
- Note_column * col_l_a[4];
- Real x_off [4];
+ clashes.sort (Note_column::shift_compare);
- for (int j =0 ; j < 4; j++)
- {
- if (clash_group_arr_a[j].size())
- col_l_a[j] = clash_group_arr_a[j][0];
- else
- col_l_a[j] = 0;
+ for (int i=0; i < clashes.size (); i++)
+ {
+ SCM sh
+ = clashes[i]->remove_elt_property (horizontal_shift_scm_sym);
- if (col_l_a[j])
+ if (sh == SCM_BOOL_F)
+ shift.push (0);
+ else
+ shift.push (gh_scm2int (SCM_CDR (sh)));
+ }
+
+ for (int i=1; i < shift.size (); i++)
{
- y_extent[j] = col_l_a[j]->head_positions_interval();
+ if (shift[i-1] == shift[i])
+ {
+ warning (_ ("Too many clashing notecolumns. Ignoring them."));
+ return;
+ }
}
-
-
- x_off [j] = 0.0;
}
+ while ((flip (&d))!= UP);
+ Drul_array< Array < Slice > > extents;
+ Drul_array< Array < Real > > offsets;
+ d = UP;
do
{
- x_off[idx (d, true)] = d*0.5;
+ for (int i=0; i < clash_groups[d].size (); i++)
+ {
+ Slice s(clash_groups[d][i]->head_positions_interval ());
+ s[LEFT] --;
+ s[RIGHT]++;
+ extents[d].push (s);
+ offsets[d].push (d * 0.5 * i);
+ }
}
- while (flip (&d) != UP);
-
-
- // y_extent: smallest y-pos noteball interval containing all balls
- // 4 (0..3) groups: stem up/down; shift on/off;
- Interval_t<int> middle (y_extent[idx (-1,0)][BIGGER],
- y_extent[idx (1,0)][SMALLER]);
- Interval_t<int> open_middle (y_extent[idx (-1,0)][BIGGER]+1, y_extent[idx (1,0)][SMALLER]-1);
+ while ((flip (&d))!= UP);
+
do
{
- if (!open_middle.contains_b (y_extent[idx (d,true)]))
- x_off[idx (d, true)] = d *1.0 ;
- } while ((d *= -1) != 1);
-
+ for (int i=1; i < clash_groups[d].size (); i++)
+ {
+ Slice prev =extents[d][i-1];
+ prev.intersect (extents[d][i]);
+ if (prev.length ()> 0 ||
+ (extents[-d].size () && d * (extents[d][i][-d] - extents[-d][0][d]) < 0))
+ for (int j = i; j < clash_groups[d].size (); j++)
+ offsets[d][j] += d * 0.5;
+ }
+ }
+ while ((flip (&d))!= UP);
- if (!middle.empty_b()
- && middle.length() < 2 && col_l_a[idx (1,0)] && col_l_a[idx (-1,0)])
+ /*
+ if the up and down version are close, and can not be merged, move
+ all of them again. */
+ if (extents[UP].size () && extents[DOWN].size ())
{
- // reproduction of bugfix at 3am ?
- Note_head * nu_l= col_l_a[idx (1,0)]->head_l_arr_[0];
- Note_head * nd_l = col_l_a[idx (-1,0)]->head_l_arr_.top();
- if (! (nu_l->balltype_i_ == nd_l->balltype_i_
- && nu_l->dots_i_ == nd_l->dots_i_ && middle.length() == 0))
- {
+ Note_column *cu_l =clash_groups[UP][0];
+ Note_column *cd_l =clash_groups[DOWN][0];
+ Note_head * nu_l= cu_l->head_l_arr_[0];
+ Note_head * nd_l = cd_l->head_l_arr_.top();
+ int downpos = cd_l->head_positions_interval ()[SMALLER];
+ int uppos = cu_l->head_positions_interval ()[BIGGER];
+
+ bool merge =
+ downpos == uppos
+ && nu_l->balltype_i_ == nd_l->balltype_i_
+ && nu_l->dots_i_ == nd_l->dots_i_;
+
+ /*
+ notes are close, but can not be merged. Shift
+ */
+ if (abs(uppos - downpos) < 2 && !merge)
do
- {
- x_off[idx (d, false)] -= d*0.5;
- x_off[idx (d, true)] -= d*0.5;
- }
- while (flip (&d) != UP);
- }
+ {
+ for (int i=0; i < clash_groups[d].size (); i++)
+ {
+ offsets[d][i] -= d * 0.5;
+ }
+ }
+ while ((flip (&d))!= UP);
}
Real wid_f = paper_l ()->note_width ();
- for (int j=0; j < 4; j++)
+ do
{
- if (col_l_a[j])
+ for (int i=0; i < clash_groups[d].size (); i++)
{
- Offset o (x_off[j] * wid_f, 0);
- col_l_a[j]->translate (o);
+ clash_groups[d][i]->translate_axis (offsets[d][i]*wid_f, X_AXIS);
}
}
+ while (flip (&d) != UP);
}
-
-
void
Collision::do_substitute_element_pointer (Score_element*o_l,Score_element*n_l)
{
bool continued = broken[Direction (-grow_dir_)];
- return Molecule (lookup_l ()->hairpin (w_dim, grow_dir_ < 0, continued));
+ Real height = paper_l()->staffheight_f () / 6;
+
+ return Molecule (lookup_l ()->hairpin (w_dim, height, grow_dir_ < 0, continued));
}
Molecule*
#include "g-script.hh"
#include "lookup.hh"
#include "g-staff-side.hh"
+#include "paper-def.hh"
G_script::G_script ()
{
}
else if (key == ly_symbol ("accordion"))
{
- return lookup_l ()->accordion (SCM_CDR(s));
+ return lookup_l ()->accordion (SCM_CDR(s), paper_l()->get_realvar(interline_scm_sym));
}
else assert (false);
Molecule*
G_text_item::do_brew_molecule_p () const
{
- Molecule a= paper_l ()->lookup_l(0)->text (style_str_,text_str_);
+ Molecule a= paper_l ()->lookup_l(0)->text (style_str_,text_str_, paper_l ());
return new Molecule (a);
}
#include "box.hh"
/** handy interface to symbol table
+ TODO: move this into GUILE?
*/
class Lookup
{
Lookup ();
Lookup (Lookup const&);
- Molecule simple_bar (String s, Real w) const;
+ Molecule simple_bar (String s, Real w, Paper_def*) const;
Molecule accidental (int, bool cautionary) const;
Molecule afm_find (String, bool warn=true) const;
Molecule notehead (int, String) const;
- Molecule bar (String, Real height) const;
+ Molecule bar (String, Real height, Paper_def*) const;
Molecule beam (Real, Real, Real) const;
Molecule clef (String) const;
Molecule dashed_slur (Array<Offset> controls, Real thick, Real dash) const;
Molecule fill (Box b) const;
Molecule filledbox (Box b) const;
Molecule flag (int, Direction) const;
- Molecule hairpin (Real width, bool decresc, bool continued) const;
- Molecule plet (Real dy, Real dx, Direction dir) const;
+ Molecule hairpin (Real width, Real height, bool decresc, bool continued) const;
+ Molecule tuplet_bracket (Real dy, Real dx, Real thick,Real interline, Direction dir) const;
Molecule rest (int, bool outside, String) const;
- Molecule accordion (SCM arg) const;
- Molecule stem (Real y1_pos, Real y2_pos) const;
+ Molecule accordion (SCM arg, Real interline_f) const;
Molecule slur (Array<Offset> controls) const;
- Molecule text (String style, String text) const;
+ Molecule text (String style, String text, Paper_def*) const;
Molecule staff_brace (Real dy) const;
Molecule staff_bracket (Real dy) const;
- Molecule volta (Real w, bool last_b) const;
- Molecule special_time_signature (String, int,int) const;
- Molecule time_signature (int n,int d) const;
-
- Paper_def * paper_l_;
+ Molecule volta (Real w, Real h, Real il, bool last_b) const;
+ Molecule special_time_signature (String, int,int, Paper_def*) const;
+ Molecule time_signature (int n,int d, Paper_def*) const;
String font_name_;
Adobe_font_metric * afm_l_;
DECLARE_LY_SYMBOL(extremal);
DECLARE_LY_SYMBOL(extra_space);
DECLARE_LY_SYMBOL(dir_forced);
+DECLARE_LY_SYMBOL(dir_list);
DECLARE_LY_SYMBOL(extender_height);
DECLARE_LY_SYMBOL(filledbox);
DECLARE_LY_SYMBOL(fontsize);
DECLARE_LY_SYMBOL(tuplet_visibility);
DECLARE_LY_SYMBOL(visibility_lambda);
DECLARE_LY_SYMBOL(volta);
+DECLARE_LY_SYMBOL(void);
DECLARE_LY_SYMBOL(volta_thick);
virtual void do_print () const;
virtual void do_substitute_element_pointer (Score_element*,Score_element*);
public:
+
+ static int shift_compare (Note_column *const &, Note_column*const&);
+
/** The relative position of the "voice" containing this
chord. Normally this would be the same as the stem direction,
#include "parray.hh"
#include "lily-proto.hh"
#include "music-output.hh"
+#include "lily-guile.hh"
/** all stuff which goes onto paper. notes, signs, symbols in a score
#Paper_score# contains the items, the columns.
/// other elements
Link_array<Score_element> elem_p_arr_;
-
- Link_array<Score_element> to_delete_arr_;
Link_array<Score_element> break_helpers_arr_;
+ SCM protected_scms_;
public:
Paper_def *paper_l_;
/// add a Spanner
void typeset_unbroken_spanner (Spanner*);
- void schedule_for_delete (Score_element*);
virtual ~Paper_score();
protected:
-
-
/* MAIN ROUTINES */
virtual void process();
private:
-
-
- Link_array<Score_element> remove_line (Line_of_score*);
- Link_array<Score_element> remove_break_helpers ();
-
/// before calc_breaking
void preprocess();
#include "virtual-methods.hh"
#include "directed-graph.hh"
#include "graphical-element.hh"
-#include "protected-scm.hh"
#include "lily-guile.hh"
*/
class Score_element : public virtual Graphical_element {
- Protected_scm element_property_alist_;
+
+ friend class Paper_score;
+ /**
+ properties specific for this element. Destructor will not call
+ scm_unprotect, so as to allow more flexible GC arrangements. The
+ real alist is in (cdr element_property_alist_), to reduce the
+ need for more scm_protect calls.
+
+ */
+ SCM element_property_alist_;
Link_array<Score_element> dependency_arr_;
/**
The lookup, determined by the font size. Cache this value.
int col_count () const;
protected:
virtual Array<Spring> get_springs () const;
-
+
+ Real stem_dir_correction (Score_column*,Score_column*) const;
+ Real default_bar_spacing (Score_column*,Score_column*,Moment) const;
+ Real note_spacing (Score_column*,Score_column*,Moment) const;
};
#endif /* SPACING_SPANNER_HH */
virtual void do_pre_processing();
virtual Interval do_width() const;
virtual Molecule* do_brew_molecule_p() const;
+
+ void set_spacing_hints () ;
};
#endif
}
else if (m<0)
{
- assert (gradient.norm() < EPS) ;
-
+ Real n =gradient.norm();
+ if (n >= EPS)
+ {
+ programming_error ("Huh? Gradient should be zero ");
+ act.degenerate_count_i_ ++;
+ }
+ else if (n <0)
+ {
+ programming_error ("Huh? Norm should be positive");
+ act.degenerate_count_i_++;
+ }
break;
}
if (tied_l_arr_.find_l (support_l) &&
!note_l->forceacc_b_)
- continue;
+ {
+ if (!forget)
+ local_key_.set (note_l->pitch_);
+ continue;
+ }
if (!note_l->forceacc_b_
&& local_key_.different_acc (note_l->pitch_))
Lookup::Lookup ()
{
- paper_l_ = 0;
afm_l_ = 0;
}
Lookup::Lookup (Lookup const& s)
{
font_name_ = s.font_name_;
- paper_l_ = 0;
afm_l_ = 0;
}
}
Molecule
-Lookup::simple_bar (String type, Real h) const
+Lookup::simple_bar (String type, Real h, Paper_def* paper_l) const
{
SCM thick = ly_symbol ("barthick_" + type);
Real w = 0.0;
- if (paper_l_->scope_p_->elem_b (thick))
+ if (paper_l->scope_p_->elem_b (thick))
{
- w = paper_l_->get_realvar (thick);
+ w = paper_l->get_realvar (thick);
}
else
{
Molecule
-Lookup::bar (String str, Real h) const
+Lookup::bar (String str, Real h, Paper_def *paper_l) const
{
if (str == "[")
return staff_bracket (h);
else if (str == "{")
return staff_brace (h);
- Real kern = paper_l_->get_var ("bar_kern");
- Real thinkern = paper_l_->get_var ("bar_thinkern");
- Molecule thin = simple_bar ("thin", h);
- Molecule thick = simple_bar ("thick", h);
- Molecule colon = afm_find ("dots-repeatcolon");
+ Real kern = paper_l->get_var ("bar_kern");
+ Real thinkern = paper_l->get_var ("bar_thinkern");
+
+ Molecule thin = simple_bar ("thin", h, paper_l);
+ Molecule thick = simple_bar ("thick", h, paper_l);
+ Molecule colon = afm_find ("dots-repeatcolon", paper_l);
Molecule m;
}
if (str == "scorepostbreak")
{
- return simple_bar ("score", h);
+ return simple_bar ("score", h, paper_l);
}
else if (str == "|")
{
Molecule
-Lookup::special_time_signature (String s, int n, int d) const
+Lookup::special_time_signature (String s, int n, int d, Paper_def*pap) const
{
// First guess: s contains only the signature style
String symbolname = "timesig-" + s + to_str (n) + "/" + to_str (d);
return m;
// Resort to default layout with numbers
- return time_signature (n,d);
+ return time_signature (n,d,pap);
}
Molecule
return m;
}
-Molecule
-Lookup::stem (Real y1, Real y2) const
-{
- if (y1 > y2)
- {
- Real t = y1;
- y1 = y2;
- y2 = t;
- }
- Real stem_width = paper_l_->get_var ("stemthickness");
- return filledbox (Box (Interval (-stem_width/2,stem_width/2),
- Interval (y1, y2)));
-}
-
/**
*/
Molecule
-Lookup::text (String style, String text) const
+Lookup::text (String style, String text, Paper_def *paper_l) const
{
Molecule m;
if (style.empty_b ())
style = "roman";
int font_mag = 1;
- Real font_h = paper_l_->get_var ("font_normal");
- if (paper_l_->scope_p_->elem_b ("font_" + style))
+ Real font_h = paper_l->get_var ("font_normal");
+ if (paper_l->scope_p_->elem_b ("font_" + style))
{
- font_h = paper_l_->get_var ("font_" + style);
+ font_h = paper_l->get_var ("font_" + style);
}
- if (paper_l_->scope_p_->elem_b ("magnification_" + style))
+ if (paper_l->scope_p_->elem_b ("magnification_" + style))
{
- font_mag = (int)paper_l_->get_var ("magnification_" + style);
+ font_mag = (int)paper_l->get_var ("magnification_" + style);
}
/*
for (int i = 0; i < text.length_i (); i++)
{
- if (text[i]=='\\')
- for (i++; (i < text.length_i ()) && isalpha(text[i]); i++)
- ;
+ if (text[i]=='\\')
+ {
+ for (i++; (i < text.length_i ()) && isalpha(text[i]); i++)
+ ;
+ i--; // Compensate for the increment in the outer loop!
+ }
else
{
if (text[i] == '{')
Molecule
-Lookup::time_signature (int num, int den) const
+Lookup::time_signature (int num, int den, Paper_def *paper_l) const
{
String sty = "number";
- Molecule n (text (sty, to_str (num)));
- Molecule d (text (sty, to_str (den)));
+ Molecule n (text (sty, to_str (num), paper_l));
+ Molecule d (text (sty, to_str (den), paper_l));
n.align_to (X_AXIS, CENTER);
d.align_to (X_AXIS, CENTER);
Molecule m;
}
Molecule
-Lookup::hairpin (Real width, bool decresc, bool continued) const
+Lookup::hairpin (Real width, Real height, bool decresc, bool continued) const
{
Molecule m;
- Real height = paper_l_->staffheight_f () / 6;
String hairpin = String (decresc ? "de" : "") + "crescendo";
Atom at (gh_list (ly_symbol (hairpin),
}
Molecule
-Lookup::plet (Real dy , Real dx, Direction dir) const
+Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real interline_f, Direction dir) const
{
Molecule m;
- SCM thick = tuplet_thick_scm_sym;
- Real t = 0.1 PT;
- if (paper_l_->scope_p_->elem_b (thick))
- {
- t = paper_l_->get_realvar (thick);
- }
- Real interline_f = paper_l_->get_realvar (interline_scm_sym);
Atom at (gh_list(tuplet_scm_sym,
gh_double2scm (interline_f),
gh_double2scm (dx),
gh_double2scm (dy),
- gh_double2scm (t),
+ gh_double2scm (thick),
gh_int2scm (dir),
SCM_UNDEFINED));
m.add_atom (&at);
}
Molecule
-Lookup::volta (Real w, bool last_b) const
+Lookup::volta (Real w, Real thick, Real interline_f, bool last_b) const
{
Molecule m;
- SCM thick = volta_thick_scm_sym;
- Real t = 0.1 PT;
- if (paper_l_->scope_p_->elem_b (thick))
- {
- t = paper_l_->get_realvar (thick);
- }
+
Atom at (gh_list (volta_scm_sym,
gh_double2scm (w),
- gh_double2scm (t),
+ gh_double2scm (thick),
gh_int2scm (last_b),
SCM_UNDEFINED));
- Real interline_f = paper_l_->get_realvar (interline_scm_sym);
-
m.dim_[Y_AXIS] = Interval (-interline_f, interline_f);
m.dim_[X_AXIS] = Interval (0, w);
}
Molecule
-Lookup::accordion (SCM s) const
+Lookup::accordion (SCM s, Real interline_f) const
{
Molecule m;
String sym = ly_scm2string(SCM_CAR(s));
String reg = ly_scm2string(SCM_CAR(SCM_CDR(s)));
- Real interline_f = paper_l_->get_realvar(interline_scm_sym);
+
if (sym == "Discant")
{
Molecule r = afm_find("scripts-accDiscant");
}
else if (measures_i_ > 1)
{
- Molecule s ( lookup_l ()->text ("number", to_str (measures_i_)));
+ Molecule s ( lookup_l ()->text ("number", to_str (measures_i_), paper_l ()));
s.translate_axis (3.0 * interline_f, Y_AXIS);
mol_p->add_molecule (s);
return rest_l_arr_.size ();
}
+int
+Note_column::shift_compare (Note_column *const &p1, Note_column*const&p2)
+{
+ SCM s1 = p1->get_elt_property (horizontal_shift_scm_sym);
+ SCM s2 = p2->get_elt_property (horizontal_shift_scm_sym);
+
+ int h1 = (s1 == SCM_BOOL_F) ? 0 : gh_scm2int (SCM_CDR(s1));
+ int h2 = (s2 == SCM_BOOL_F) ? 0 : gh_scm2int (SCM_CDR(s2));
+ return h1 - h2;
+}
+
Note_column::Note_column()
{
set_axes (X_AXIS,X_AXIS);
head_l_arr_.sort (Note_head::compare);
}
-Interval_t<int>
+Slice
Note_column::head_positions_interval() const
{
- ((Note_column*)this)->sort();
- Interval_t<int> iv;
+ Slice iv;
iv.set_empty ();
-
- if (head_l_arr_.size ())
- iv = Interval_t<int>(head_l_arr_[0]->position_i_,
- head_l_arr_.top()->position_i_);
-
+ for (int i=0; i <head_l_arr_.size ();i ++)
+ {
+ int j = head_l_arr_[i]->position_i_;
+ iv.unite (Slice (j,j));
+ }
return iv;
}
Paper_score::Paper_score ()
{
+ protected_scms_ = scm_protect_object (gh_cons (SCM_BOOL_T, SCM_EOL));
paper_l_ =0;
outputter_l_ =0;
Line_of_score * line_p = new Line_of_score;
delete span_p_arr_[i];
for (int i=elem_p_arr_.size (); --i >=0 ; )
delete elem_p_arr_[i];
+
+ scm_unprotect_object (protected_scms_);
}
void
elem_p_arr_.push (elem_p);
elem_p->pscore_l_ = this;
-
+ // take over protection.
+ SCM_CDR(protected_scms_) = gh_cons (elem_p->element_property_alist_,
+ SCM_CDR (protected_scms_));
+ scm_unprotect_object (elem_p->element_property_alist_);
+
SCM p = elem_p->remove_elt_property (break_helper_only_scm_sym);
if (p != SCM_BOOL_F)
break_helpers_arr_.push (elem_p);
-/*
- not clean. Should update elem_p_arr_ and span_p_arr_. That would
- also repair the stats.
-
- This may be done efficiently by first sorting the arrays. */
-void
-delete_array_contents (Link_array<Score_element> &to_remove, Dictionary<int> &type_stats)
-{
- for (int i=0; i < to_remove.size (); i++)
- {
- Score_element * e = to_remove[i];
- String nm = e->name();
- if (type_stats.elem_b (nm))
- type_stats[nm] ++;
- else
- type_stats[nm] = 1;
-
- if (dynamic_cast<Item*> (e))
- type_stats["Item"] ++;
- else if (dynamic_cast<Spanner*>(e))
- type_stats["Spanner"] ++;
- type_stats["Total"] ++;
- /*
- */
-
- // delete e; //TODO!
- }
-
- to_remove.clear ();
- to_remove.tighten_maxsize ();
-}
-
-void
-Paper_score::schedule_for_delete (Score_element*e)
-{
- to_delete_arr_.push (e);
-}
-
void
Paper_score::process ()
{
Array<Column_x_positions> breaking = calc_breaking ();
- delete_array_contents (break_helpers_arr_, type_stats);
-
Paper_stream* paper_stream_p = paper_l_->paper_stream_p ();
outputter_l_ = paper_l_->paper_outputter_p (paper_stream_p, header_l_, origin_str_);
*mlog << '(' << elem_p_arr_.size () + span_p_arr_.size () << ')';
*mlog << ']' << flush;
-
- delete_array_contents (to_delete_arr_, type_stats);
}
// huh?
for (Hash_table_iter<int, Lookup*> ai(*s.lookup_p_tab_p_); ai.ok (); ai++)
{
Lookup * l = new Lookup (*ai.val ());
- l->paper_l_ = this;
set_lookup (ai.key(), l);
}
}
{
delete lookup_p_tab_p_->elem (i);
}
- l ->paper_l_ = this;
(*lookup_p_tab_p_)[i] = l;
}
// mmm
Mudela_version oldest_version ("1.0.20");
-Mudela_version version ("1.0.20");
+Mudela_version version ("1.0.21");
void
print_mudela_versions (ostream &os)
{
if (ncol_p_)
{
+ Scalar sh = get_property ("horizontalNoteShift", 0);
// egcs
- if (get_property ("hshift", 0).operator bool ())
+ if (sh.to_bool () && sh.isnum_b ())
{
- ncol_p_->set_elt_property (horizontal_shift_scm_sym, SCM_BOOL_T);
+ ncol_p_->set_elt_property (horizontal_shift_scm_sym,
+ gh_int2scm (int (sh)));
}
typeset_element (ncol_p_);
lookup_l_ =0;
status_i_ = 0;
original_l_ = 0;
- element_property_alist_ = SCM_EOL;
+ element_property_alist_ = scm_protect_object (gh_cons (gh_cons (void_scm_sym, SCM_BOOL_T) , SCM_EOL));
}
Score_element::Score_element (Score_element const&s)
{
used_b_ = true;
original_l_ =(Score_element*) &s;
- element_property_alist_ = scm_list_copy (s.element_property_alist_);
+ element_property_alist_ = scm_protect_object (scm_list_copy (s.element_property_alist_));
dependency_arr_ = s.dependency_arr_;
output_p_ =0;
status_i_ = s.status_i_;
Score_element::remove_elt_property (SCM key)
{
SCM s = get_elt_property (key);
- element_property_alist_ = scm_assq_remove_x (element_property_alist_, key);
+ SCM_CDR(element_property_alist_) = scm_assq_remove_x (SCM_CDR (element_property_alist_), key);
return s;
}
void
Score_element::set_elt_property (SCM s, SCM v)
{
- element_property_alist_ =
- scm_assoc_set_x (element_property_alist_, s, v);
+ SCM_CDR(element_property_alist_) =
+ scm_assoc_set_x (SCM_CDR (element_property_alist_), s, v);
}
Interval
pscore_l_->outputter_l_->output_molecule (output_p_,
o,
classname(this));
-
- pscore_l_->schedule_for_delete (this);
}
/*
e->used_b_ = true;
}
else
- warning("Null dependency added");
-
+ programming_error ("Null dependency added");
}
+
void
Score_element::substitute_dependency (Score_element* old, Score_element* new_l)
{
{
if (Break_req* b = dynamic_cast<Break_req *> (r))
{
+ gotcha = true;
if (b->penalty_i_ <= Break_req::DISALLOW)
break_penalty_i_ = b->penalty_i_;
else if (b->penalty_i_ >= Break_req::FORCE)
- {
- command_column_l_->break_penalty_i_ = b->penalty_i_;
- gotcha = true;
- }
+ command_column_l_->break_penalty_i_ = b->penalty_i_;
}
}
return gotcha;
// postbreak
if (broken_edge_b (LEFT))
- first--;
+ {
+ first--;
+ /*
+ interstaff postbreak: slur begins at height of last note
+ */
+ Encompass_info info (encompass_arr_[0], dir_, this);
+ notes[0][Y_AXIS] += info.interstaff_f_;
+ }
else
{
Encompass_info info (encompass_arr_[0], dir_, this);
notes.push (info.o_ - left);
}
+ /*
+ interstaff prebreak: slur ends at height of last note
+ */
+ if (broken_edge_b (RIGHT))
+ d[Y_AXIS] = notes.top ()[Y_AXIS];
+
notes.push (d);
return notes;
generate springs between columns.
- TODO
-
- * Spacing should take optical effects into account
-
The algorithm is partly taken from :
John S. Gourlay. ``Spacing a Line of Music,'' Technical Report
Array<Spring> meas_springs;
- /*
- UGR GUR URG. duplicate code for spacing generation.
- */
for (int i= col1; i < col2; i++)
{
- SCM hint = scol (i)->get_elt_property (extra_space_scm_sym);
- if (hint != SCM_BOOL_F)
- {
- hint = SCM_CDR (hint);
-
- Spring s;
- s.item_l_drul_[LEFT] = scol (i);
- s.item_l_drul_[RIGHT] = scol (i+1);
- Real unbroken_dist = gh_scm2double (SCM_CDR(hint));
+ Item * l = scol(i);
+ Item * r = scol(i+1);
+ Item * lb = l->find_prebroken_piece (RIGHT);
+ Item * rb = r->find_prebroken_piece (LEFT);
- s.distance_f_ = unbroken_dist;
- s.strength_f_ = 2.0;
-
+ Item* combinations[4][2]={{l,r}, {lb,r}, {l,rb},{lb,rb}};
- meas_springs.push (s);
+ for (int i=0; i < 4; i++)
+ {
+ Score_column * lc = dynamic_cast<Score_column*> (combinations[i][0]);
+ Score_column *rc = dynamic_cast<Score_column*> (combinations[i][1]);
+ if (!lc || !rc)
+ continue;
+ Spring s;
+ s.item_l_drul_[LEFT] = lc;
+ s.item_l_drul_[RIGHT] = rc;
- Item * l = scol(i)->find_prebroken_piece (RIGHT);
- Item * r = scol(i+1)->find_prebroken_piece (LEFT);
- if (l)
+ SCM hint = lc->get_elt_property (extra_space_scm_sym);
+ SCM next_hint = rc->get_elt_property (extra_space_scm_sym);
+
+ if (hint != SCM_BOOL_F)
{
- Spring s;
- s.item_l_drul_[LEFT] = l;
- s.item_l_drul_[RIGHT] = scol (i+1);
- hint = l->get_elt_property (extra_space_scm_sym);
-
- if (hint == SCM_BOOL_F)
- {
- programming_error ("No postbreak breakable spacing hint set.");
- s.distance_f_= unbroken_dist;
- }
- else
- s.distance_f_ = gh_scm2double (SCM_CDDR(hint));
-
- /*
- space around barlines should not stretch very much.
- */
+ hint = SCM_CDDR (hint);
+
+ s.distance_f_ = gh_scm2double (hint);
+ if (!lc->musical_b ())
s.strength_f_ = 2.0;
- meas_springs.push (s);
}
-
- if (r)
+ else if (!lc->musical_b() && i+1 < col_count())
{
- Spring s;
- s.item_l_drul_[LEFT] = scol (i);
- s.item_l_drul_[RIGHT] = r;
- s.distance_f_ = unbroken_dist;
-
- /*
- space around barlines should not stretch very much.
- */
+ s.distance_f_ = default_bar_spacing (lc,rc,shortest);
s.strength_f_ = 2.0;
- meas_springs.push (s);
}
-
- if (l&&r)
+ else if (lc->musical_b())
{
- Spring s;
- s.item_l_drul_[LEFT] = l;
- s.item_l_drul_[RIGHT] = r;
+ s.distance_f_ = note_spacing (lc, rc, shortest);
- hint = l->get_elt_property (extra_space_scm_sym);
- if (hint == SCM_BOOL_F)
- {
- programming_error ("No postbreak breakable spacing hint set.");
- s.distance_f_= unbroken_dist;
- }
- else
- s.distance_f_ = gh_scm2double (SCM_CDDR(hint));
-
- /*
- space around barlines should not stretch very much.
- */
- s.strength_f_ = 2.0;
- meas_springs.push (s);
- }
- }
- else if (!scol (i)->musical_b() && i+1 < col_count())
- {
- Real symbol_distance = scol (i)->extent (X_AXIS)[RIGHT] ;
- Real durational_distance = 0;
- Moment delta_t = scol (i+1)->when_mom () - scol (i)->when_mom () ;
- /*
- ugh should use shortest_playing distance
- */
- if (delta_t)
- {
- Real k= paper_l()->arithmetic_constant (shortest);
- durational_distance = paper_l()->length_mom_to_dist (delta_t,k);
}
- symbol_distance += -scol (i+1)->extent(X_AXIS)[LEFT];
-
- Spring s ;
- s.item_l_drul_[LEFT] = scol (i);
- s.item_l_drul_[RIGHT] = scol (i+1);
- s.distance_f_ = symbol_distance >? durational_distance;
- meas_springs.push (s);
-
- Item *l = s.item_l_drul_[LEFT]->find_prebroken_piece (RIGHT);
- Item *r = s.item_l_drul_[RIGHT]->find_prebroken_piece (LEFT);
- Spring sp_orig (s);
- if (l)
+ if (next_hint != SCM_BOOL_F)
{
- s = sp_orig;
- s.item_l_drul_[LEFT] =l ;
- meas_springs.push (s);
+ next_hint = SCM_CADR(next_hint);
+ s.distance_f_ += gh_scm2double (next_hint);
}
-
- if (l && r)
+ else
{
- s = sp_orig;
- s.item_l_drul_[RIGHT] = r;
- s.item_l_drul_[LEFT] = l;
- meas_springs.push (s);
+ Interval ext (rc->extent (X_AXIS));
+ Real correction = ext.empty_b() ? 0.0 : - ext [LEFT];
+
+ /*
+ don't want to create too much extra space for accidentals
+ */
+ if (lc->musical_b () && rc->musical_b ())
+ correction /= 2.0;
+
+ s.distance_f_ += correction;
}
+ meas_springs.push (s);
}
}
- for (int i=col1; i < col2; i++)
+ return meas_springs;
+}
+
+/**
+ Do something if breakable column has no spacing hints set.
+ */
+Real
+Spacing_spanner::default_bar_spacing (Score_column *lc, Score_column *rc, Moment shortest) const
+{
+ Real symbol_distance = lc->extent (X_AXIS)[RIGHT] ;
+ Real durational_distance = 0;
+ Moment delta_t = rc->when_mom () - lc->when_mom () ;
+
+ /*
+ ugh should use shortest_playing distance
+ */
+ if (delta_t)
{
- if (scol (i)->musical_b())
- {
- Moment shortest_playing_len = scol(i)->shortest_playing_mom_;
- if (! shortest_playing_len)
- {
- warning (_f ("can't find a ruling note at %s",
- scol (i)->when_mom ().str ()));
- shortest_playing_len = 1;
- }
- if (! shortest)
- {
- warning (_f ("no minimum in measure at %s",
- scol (i)->when_mom ().str ()));
- shortest = 1;
- }
- Moment delta_t = scol (i+1)->when_mom () - scol (i)->when_mom ();
- Real k= paper_l()->arithmetic_constant(shortest);
- Real dist = paper_l()->length_mom_to_dist (shortest_playing_len, k);
- dist *= (double)(delta_t / shortest_playing_len);
+ Real k= paper_l()->arithmetic_constant (shortest);
+ durational_distance = paper_l()->length_mom_to_dist (delta_t,k);
+ }
+ return symbol_distance >? durational_distance;
+}
- Spring sp;
- sp.distance_f_ = dist;
- sp.item_l_drul_[LEFT] = scol (i);
- sp.item_l_drul_[RIGHT] = scol (i+1);
- meas_springs.push (sp);
+Real
+Spacing_spanner::note_spacing (Score_column *lc, Score_column *rc, Moment shortest) const
+{
+ Moment shortest_playing_len = lc->shortest_playing_mom_;
+ if (! shortest_playing_len)
+ {
+ warning (_f ("can't find a ruling note at %s",
+ lc->when_mom ().str ()));
+ shortest_playing_len = 1;
+ }
+ if (! shortest)
+ {
+ warning (_f ("no minimum in measure at %s",
+ lc->when_mom ().str ()));
+ shortest = 1;
+ }
+ Moment delta_t = rc->when_mom () - lc->when_mom ();
+ Real k= paper_l()->arithmetic_constant(shortest);
+ Real dist = paper_l()->length_mom_to_dist (shortest_playing_len, k);
+ dist *= (double)(delta_t / shortest_playing_len);
- /*
- UGH. TODO: more
- advanced spacing here.
- */
- Spring sp_orig (sp);
+ dist += stem_dir_correction (lc,rc);
+ return dist;
+}
- Item *r = sp.item_l_drul_[RIGHT]->find_prebroken_piece (LEFT);
-
- if (r)
- {
- sp = sp_orig;
- sp.item_l_drul_[RIGHT] =r ;
- meas_springs.push (sp);
- }
- }
+
+/**
+ Correct for optical illusions. See [Wanske] p. 138. The combination
+ up-stem + down-stem should get extra space, the combination
+ down-stem + up-stem less.
+
+ This should be more advanced, since relative heights of the note
+ heads also influence required correction.
+
+ Also might not work correctly ico. multi voices or staff changing voices
+
+ TODO: lookup correction distances? More advanced correction?
+ Possibly turn this off?
+
+ This routine reads the DIR_LIST property of both its L and R arguments.
+*/
+Real
+Spacing_spanner::stem_dir_correction (Score_column*l, Score_column*r) const
+{
+ SCM dl = l->get_elt_property (dir_list_scm_sym);
+ SCM dr = r->get_elt_property (dir_list_scm_sym);
+ if (dl == SCM_BOOL_F || dr == SCM_BOOL_F)
+ return 0.0;
+
+ dl = SCM_CDR (dl);
+ dr = SCM_CDR (dr);
+
+ if (scm_ilength (dl) != 1 && scm_ilength (dr) != 1)
+ return 0.;
+
+ dl = SCM_CAR(dl);
+ dr = SCM_CAR(dr);
+
+ assert (gh_number_p (dl) && gh_number_p(dr));
+ int d1 = gh_scm2int (dl);
+ int d2 = gh_scm2int (dr);
+
+ if (d1 == d2)
+ return 0.0;
+
+ bool err = false;
+ Real correction = 0.0;
+ Real ssc = paper_l ()->get_realvar(ly_symbol ("stemSpacingCorrection"));
+
+
+ if (d1 && d2)
+ {
+ if (d1 == 1 && d2 == -1)
+ correction = ssc;
+ else if (d1 == -1 && d2 == 1)
+ correction = -ssc;
+ else
+ err = true;
}
- return meas_springs;
+
+ else
+ err = true;
+
+ if (err)
+ programming_error ("Stem directions not set correctly for optical correction");
+ return correction;
}
+
Array<Spring>
Spacing_spanner::get_springs () const
for (int i=1; i < col_count (); i++)
{
if (scol (i)->breakable_b ())
- {
- springs.concat (do_measure (last_break, i));
- last_break = i;
- }
+ {
+ springs.concat (do_measure (last_break, i));
+ last_break = i;
+ }
}
return springs;
}
+
+
Interval
Span_bar::do_width () const
{
- Molecule m = lookup_l ()->bar (type_str_, 40 PT);
+ Molecule m = lookup_l ()->bar (type_str_, 40 PT, paper_l ());
return m.extent (X_AXIS);
}
Molecule*output = new Molecule;
if (!iv.empty_b())
{
- output->add_molecule (lookup_l ()->bar (type_str_, iv.length ()));
+ output->add_molecule (lookup_l ()->bar (type_str_, iv.length (), paper_l ()));
output->translate_axis (iv.center (), Y_AXIS);
}
else
if (cols_[idx].pcol_l_ != cr.other_l_)
continue;
-
- connect (idx, this_rank, cr.distance_f_,
- cr.strength_f_ / cr.distance_f_);
+ Real d = cr.distance_f_;
+ if (fabs (d) < EPS)
+ {
+ connect (idx, this_rank, 0.0, 10); // large strength.
+ programming_error ("requesting zero distance.");
+ }
+ else
+ connect (idx, this_rank, cr.distance_f_,
+ cr.strength_f_ / cr.distance_f_);
}
cols_.push (c);
set_elt_property (transparent_scm_sym, SCM_BOOL_T);
}
set_empty (invisible_b ());
+ set_spacing_hints ();
+}
+
+
+
+/**
+ set stem directions for hinting the optical spacing correction.
+
+ Modifies DIR_LIST property of the Stem's Score_column
+
+ TODO: more advanced: supply height of noteheads as well, for more advanced spacing possibilities
+ */
+void
+Stem::set_spacing_hints ()
+{
+ if (!invisible_b ())
+ {
+ SCM scmdir = gh_int2scm (dir_);
+ SCM dirlist = column_l ()->get_elt_property (dir_list_scm_sym);
+ if (dirlist == SCM_BOOL_F)
+ dirlist = SCM_EOL;
+ else
+ dirlist = SCM_CDR (dirlist);
+
+ if (scm_sloppy_memq (scmdir, dirlist) == SCM_EOL)
+ {
+ dirlist = gh_cons (scmdir, dirlist);
+ column_l ()->set_elt_property (dir_list_scm_sym, dirlist);
+ }
+ }
}
if (!invisible_b ())
{
- Molecule ss =lookup_l ()->stem (stem_y[DOWN]*dy,
- stem_y[UP]*dy);
+ Real stem_width = paper_l ()->get_var ("stemthickness");
+ Molecule ss =lookup_l ()->filledbox (Box (Interval (-stem_width/2, stem_width/2),
+ Interval (stem_y[DOWN]*dy, stem_y[UP]*dy)));
mol_p->add_molecule (ss);
}
if (time_sig_type_str_[0]=='1')
{
Array<int> tmparr = args_;
- return new Molecule( lookup_l ()->time_signature (args_[0], 0));
+ return new Molecule( lookup_l ()->time_signature (args_[0], 0, paper_l ()));
}
else
{
- return new Molecule( lookup_l ()-> special_time_signature (time_sig_type_str_ ,args_[0], args_[1]));
+ return new Molecule( lookup_l ()-> special_time_signature (time_sig_type_str_ ,args_[0], args_[1], paper_l ()));
}
}
else
- return new Molecule(lookup_l ()->time_signature (args_[0], args_[1]));
+ return new Molecule(lookup_l ()->time_signature (args_[0], args_[1],paper_l ()));
}
#include "tuplet-spanner.hh"
#include "stem.hh"
#include "note-column.hh"
+#include "dimensions.hh"
+
Tuplet_spanner::Tuplet_spanner ()
{
Real ncw = column_arr_.top ()->extent (X_AXIS).length ();
Real w = extent (X_AXIS).length () + ncw;
Molecule num (lookup_l ()->text ("italic",
- number_str_));
+ number_str_, paper_l ()));
num.align_to (X_AXIS, CENTER);
num.translate_axis (w/2, X_AXIS);
Real interline = paper_l ()->get_realvar (interline_scm_sym);
num.translate_axis (dir_ * interline, Y_AXIS);
num.translate_axis (dy/2, Y_AXIS);
-
- /* if (beam_l_arr_.size () == 1 && !bracket_visibility)
- {
- num.translate_axis (dir_ * interline, Y_AXIS);
- }
- */
+ Real thick = paper_l ()->get_realvar (tuplet_thick_scm_sym);
if (bracket_visibility)
{
- mol_p->add_molecule (lookup_l ()->plet (dy, w, dir_));
+ mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, interline, dir_));
}
if (number_visibility)
if (!column_arr_.size ())
return mol_p;
-
- Real internote_f = paper_l ()->get_realvar (interline_scm_sym)/2.0;
+ Real interline_f = paper_l ()->get_realvar (interline_scm_sym);
+ Real internote_f = interline_f/2;
+ Real t = paper_l ()->get_realvar (volta_thick_scm_sym);
Real dx = internote_f;
Real w = extent (X_AXIS).length () - dx;
- Molecule volta (lookup_l ()->volta (w, last_b_));
+ Molecule volta (lookup_l ()->volta (w, t, interline_f, last_b_));
Real h = volta.dim_.y ().length ();
-
- Molecule num (lookup_l ()->text ("volta", number_str_));
+ Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ()));
Real dy = column_arr_.top ()->extent (Y_AXIS) [UP] >
column_arr_[0]->extent (Y_AXIS) [UP];
dy += 2 * h;
dy = dy >? note_column_arr_[i]->extent (Y_AXIS)[BIGGER];
dy -= h;
- Molecule two (lookup_l ()->text ("number", "2"));
+ Molecule two (lookup_l ()->text ("number", "2", paper_l ()));
Real gap = two.dim_.x ().length () / 2;
Offset off (num.dim_.x ().length () + gap,
h / internote_f - gap);
break;
}
+ /*
+ UGR! bug!
+ */
if (current.energy_f_ < minimum.energy_f_ || current.energy_f_ < 0)
{
minimum = current;
}
- else { // we're one col too far.
- break_idx--;
- while (allcols[curcol_idx] != breakpoints[break_idx])
- curcol_idx --;
- break; // do the next line.
- }
+ else
+ { // we're one col too far.
+ break_idx--;
+ while (allcols[curcol_idx] != breakpoints[break_idx])
+ curcol_idx --;
+ break; // do the next line.
+ }
// add nobreak version of breakable column
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly";
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly"
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly";
% Toplevel initialisation file.
-\version "1.0.20";
+\version "1.0.21";
\include "declarations.ly"
\maininput
}
\paper {
- linewidth=-1.0;
- indent = 0.0;
+ linewidth=-1.0;
+ % indent = 0.0;
}
\midi{ }
}
-\version "1.0.20";
+\version "1.0.21";
paper_sixteen = \paper {
staffheight = 16.0\pt;
% paper20.ly
-\version "1.0.20";
+\version "1.0.21";
paper_twenty = \paper {
staffheight = 20.0\pt;
restcollision_minimum_dist = 3.0;
restcollision_minimum_beamdist = 1.5;
-postBreakPadding = 1.0*\interline;
+% deprecated!
+postBreakPadding = 0.0;
+
+stemSpacingCorrection = 0.5*\interline;
\include "engraver.ly";
+
\property Voice.slurVerticalDirection = \down
}
-shifton = \property Voice.hshift = 1
-shiftoff = \property Voice.hshift = 0
+shifton = \property Voice.horizontalNoteShift = 1
+shiftoff = \property Voice.horizontalNoteShift = 0
onevoice = {
\stemboth \shiftoff
\shifton
}
-onestaff =
- \translator Staff=one
-
-
-staffone = {
- \translator Staff=one
- \property Staff.verticalDirection = \center
- \property Staff.hshift = 0
-}
-
-stafftwo = {
- \translator Staff=two
- \property Staff.verticalDirection = \center
- \property Staff.hshift = 0
-}
-
-staffthree = {
- \translator Staff=three
- \property Staff.verticalDirection = \center
- \property Staff.hshift = 0
-}
-
-stafffour = {
- \translator Staff=four
- \property Staff.verticalDirection = \center
- \property Staff.hshift = 0
-}
% ugh, cluttering global namespace...
Begin3
Titel: LilyPond
-Versie: 1.1.48
-Inschrijf datum: 17JUN99
+Versie: 1.1.49
+Inschrijf datum: 21JUN99
Beschrijving: @FLAPTEKST@
Trefwoorden: muziek typezetten midi notatie
Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 770k lilypond-1.1.48.tar.gz
+ 770k lilypond-1.1.49.tar.gz
Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.48.tar.gz
+ 770k lilypond-1.1.49.tar.gz
Copi-eer voorwaarden: GPL
End
Begin3
Title: LilyPond
-Version: 1.1.48
-Entered-date: 17JUN99
+Version: 1.1.49
+Entered-date: 21JUN99
Description:
LilyPond is the GNU Project music typesetter. This program can print
beautiful sheet music from a music definition file. It can also play
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 770k lilypond-1.1.48.tar.gz
+ 770k lilypond-1.1.49.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.48.tar.gz
+ 770k lilypond-1.1.49.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.1.48
+Version: 1.1.49
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.48.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.49.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
STEPMAKE_TEMPLATES=metafont metapost install install-out
-EXTRA_DIST_FILES += TODO README feta.mp mfplain.ini
+EXTRA_DIST_FILES += README feta.mp mfplain.ini
FET_FILES = $(wildcard feta[0-9]*.mf)
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "violoncello.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "clarinetti.ly"
}
-\version "1.0.20";
+\version "1.0.21";
\include "clarinetto-1.ly"
\include "clarinetto-2.ly"
}
-\version "1.0.20";
+\version "1.0.21";
clarinetto1 = \notes \relative c {
R1 *2 | d''4-.\ff r r2 | R1 *3 | e4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
clarinetto2 = \notes \relative c {
R1*2 bes''4-.\ff r r2 | R1*3 | cis4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "contrabasso.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
contrabasso = \notes \relative c {
% \translator Staff=violoncello
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\score{
<
- \property Score . textstyle = "italic"
+ \property Score . textStyle = "italic"
\$legno
\$koper
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "corni.ly"
}
-\version "1.0.20";
+\version "1.0.21";
\include "corno-1.ly"
\include "corno-2.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
corno1 = \notes \relative c {
R1 *2 | f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
corno2 = \notes \relative c {
R1 *2 | d''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "fagotti.ly"
}
-\version "1.0.20";
+\version "1.0.21";
\include "fagotto-1.ly"
\include "fagotto-2.ly"
}
-\version "1.0.20";
+\version "1.0.21";
fagotto1 = \notes \relative c {
R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
fagotto2 = \notes \relative c {
R1 *2 | f4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "flauti.ly"
}
-\version "1.0.20";
+\version "1.0.21";
\include "flauto-1.ly"
\include "flauto-2.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
flauto1 = \notes \relative c {
R1 *2 | c'''4-.\ff r r2 | R1 *3 | d4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
flauto2 = \notes \relative c {
R1 *2 | as'''4-.\ff r r2 | R1 *3 | b4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
global = \notes {
\time 4/4;
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
oboe1 = \notes \relative c'' {
R1 *2 | as'4-.\ff r r2 | R1 *3 | as4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
oboe2 = \notes \relative c{
R1 *2| f''4-.\ff r r2 | R1 *3 | f4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "oboi.ly"
}
-\version "1.0.20";
+\version "1.0.21";
\include "oboe-1.ly"
\include "oboe-2.ly"
}
-\version "1.0.20";
+\version "1.0.21";
timpani = \notes \relative c {
R1 *2 | c4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "trombe.ly"
}
-\version "1.0.20";
+\version "1.0.21";
\include "trombo-1.ly"
\include "trombo-2.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
trombo1 = \notes \relative c {
R1 *2 | c''4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
trombo2 = \notes \relative c {
R1 *2 | c'4-.\ff r r2 | R1 *3 | c4-. r r2 | R1 *3 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
viola1 = \notes \relative c {
\context Voice=one
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
viola2 = \notes \relative c {
% starts on (actualy, most part is on) same staff as viola1
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "viola-1.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "violino-1.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
violino1 = \notes \relative c {
c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "violino-2.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
violino2 = \notes \relative c {
c'1\ff ~ | c | <f4-. c'-. as'-.> r r2 | R1 |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "violoncello.ly"
}
-\version "1.0.20";
+\version "1.0.21";
violoncello = \notes \relative c {
c1\ff ~ | c | f,4-. r r2 | r1 | c'1\ff ~ | c | f,4-. r r2 |
----------------------------------------------------
-\version "1.0.20";
+\version "1.0.21";
\paper{barsize=50.0; \translator {\StaffContext \consists
Bar_number_engraver;}}
}
-\version "1.0.20";
+\version "1.0.21";
Bar_number_engraver;}}
}
-\version "1.0.20";
+\version "1.0.21";
}
-\version "1.0.20";
+\version "1.0.21";
\paper{barsize=50.0; \translator {\StaffContext \consists
Bar_number_engraver;}}
}
-\version "1.0.20";
+\version "1.0.21";
under the Gnu Public Licence.
%}
-\version "1.0.20";
+\version "1.0.21";
$voice_one = \notes \relative c' {
a'2 bes4. [c16 bes] | a4 d ~ d c ~ | c b ~ [b8 a] a4 ~|
Tested Features: cross staff beams and slurs, grace notes, no bars
%}
-\version "1.0.20";
+\version "1.0.21";
\include "nederlands.ly"
Tested Features:
%}
-\version "1.0.20";
+\version "1.0.21";
\include "nederlands.ly"
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
\include "standchen.ly"
description = "A schubert song in 20 pt";
}
-\version "1.0.20";
+\version "1.0.21";
% fool make-website
% \include "standchen.ly";
Note: Original key F.
%}
-\version "1.0.20";
+\version "1.0.21";
$vocal_verse1 = \notes\relative c''{
% ugh: treble/bass
< { a4.-> )f8 } { a4. f8 } > |
<e2 e'> r4 |
<es!2 es'! > r4 |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
<d2_"decresc." d'> r4 |
%75
<b2 b'> r4 |
<e4. g> [<e8-. g-.(> <e-. g-.> <e-. )g-.>] |
<f4. g> [<b,8-. g'-.(> <d-. g-.> <f-. )g-.>] |
%80
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
<e2._"dim." g> |
<g,2. e' g> |
<g2.-\fermata e' g> |
include $(depth)/make/stepmake.make
-EXTRA_DIST_FILES += TODO
+EXTRA_DIST_FILES +=
title = "Diademata";
metre = "6 6. 8 6. D";
}
-\version "1.0.20";
+\version "1.0.21";
sop=\notes \transpose c''{
ees2 | ees4 ees4 g2 g2 | c'1. \bar "||";
metre = "10 10 . 11 11";
}
-\version "1.0.20";
+\version "1.0.21";
sop = \notes \transpose c''{
f4 | d' bes c' | f2 \bar "||";
metre = "10 11. 11 11. and refrain";
}
-\version "1.0.20";
+\version "1.0.21";
sop=\notes \relative c'' {
b2 gis4. a8 |b2 e,2 |
metre = "8 7 8 7 D";
}
-\version "1.0.20";
+\version "1.0.21";
sop=\notes \relative c'' {
b4 b c d | d c b a | g g a b | b4. a8 a2 \bar "||";
}
-\version "1.0.20";
+\version "1.0.21";
global=\notes {
\time 6/4;
piece = "Allemande";
}
-\version "1.0.20";
+\version "1.0.21";
global = \notes{
\time 4/4;
%%
%% Noe liknende skjer også i mellom andre og tredje stemme i takt 28
-\version "1.0.20";
+\version "1.0.21";
global = \notes{
\time 2/4;
% ???
% What have i misunderstood? I want the note_head not to collide with
% i hotehead i vOne
- \property Voice.hshift = -1
+ \property Voice.horizontalNoteShift = -1
d
- \property Voice.hshift = 0
+ \property Voice.horizontalNoteShift = 0
c4 b8 |
}
vThree = \context Voice = voiceThree \notes\relative c{
copyright = "Public Domain";
}
-\version "1.0.20";
+\version "1.0.21";
global = \notes {
\time 4/4;
bes4 r16 [bes,16 bes. c32] [des8. des16]
\context Staff <
{ \stemup e4 }
- { \stemup \property Voice.hshift = 1 [des16 c32 bes c16. g32] }
+ { \stemup \property Voice.horizontalNoteShift = 1 [des16 c32 bes c16. g32] }
>
%4
f4 \stemboth r16 [f g. as32] \stemup d,4 r16 [d g. es32] |
<[es8. c> <es16 c>]
\context Staff <
{ \stemup fis4 }
- { \stemup \property Voice.hshift = 1 [es16 d32 c d16. a32] }
+ { \stemup \property Voice.horizontalNoteShift = 1 [es16 d32 c d16. a32] }
> g2
}
c4 r c r | r c c r | c r r c | c r r16 [c c. bes32] bes4 |
r16 [bes bes. as32] as4_"tr" g r16 [d' d. es32] |
\context Staff <
- { \stemdown \property Voice.hshift = 1 [f8. f16] [b,8. b16] g4 r | }
+ { \stemdown \property Voice.horizontalNoteShift = 1 [f8. f16] [b,8. b16] g4 r | }
{ \stemdown s4 g}
>
r g g2
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
% upper = \context Staff \notes\relative c {
upper = \context Staff=upper \notes\relative c {
\context Voice=i
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
% rediculous dim...
% r16\p_"legato"\< g''-1( c-3 )e-5 r g,-1( c )e
r16\p\< g''-1( c-3 )e-5 r g,-1( c )e
% lower = \context Staff \notes\relative c{
lower = \context Staff=lower \notes\relative c{
\context Voice=i
- \property Voice . textstyle = "roman"
+ \property Voice . textStyle = "roman"
c4-5 e-3 g-\mordent^"(\\textsharp)" g,4 |
d'4-\mordent-5 f-3 a-\mordent^"(\\textsharp)" a,4 |
e'-5 e'-\mordent-1 a,-4 b-\upprall |
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
upper = \context Staff \notes\relative c{
\context Voice=i
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
r8\mf c'-1( e-2 g-4 e-2 c-1 bes'-5 g-3 |
)a-4\< c,-1( f-2 a-4 f c c'-5 a-3 |
)b-4 g-1( b-2 d-4 b-2 g f'-5 \!d-3 |
g'-\mordent g, g'-\mordent g, |
g'8 g,-5( b-4 d-2 b-4 g-5 f'!-1 d-3 |
)e-2 c-4 e-2 g-1 e-3 c-5 c' e,-4 |
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
f1^"3\\_1" ~ |
f8 d-3 e-2 c-4 g'4-1 g,^"5\\_2" |
<c1 c,1>
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
one = \context Staff \notes\relative c {
\context Voice=i
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
% r16\p_"legato"
r16\p
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
d'-1( fis-3 d-1 a'-2 b-3 cis-4 a-3
d-3 cis-2 d-1 e-2 d-1 fis-3 e-2 d-1 |
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
\stemup
)cis4-2 fis-5 ~ fis8 fis-4 e4-3 ~ |
e16\< \stemboth a,16( cis a d-2 e fis d-1
<a4-5( e> <fis-4 d-2> < )g!16-5 d> fis-2 g-3 a-4
\stemboth
g-3 b a g |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
% fis_"dim." e fis-3 g fis-3 a-5 g fis
fis e fis-3 g fis-3 a-5 g fis
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
% e4-"2\\_5" ~ e16 e,( fis g |
e4 ~ e16 e,( fis g |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
% a-4_"dim." g-1 a b a-2 c-4 b a
a-4 g-1 a b a-2 c-4 b a
g-1 fis-2 g-3 a g-3 b a g |
)fis4\p
\skip 4*7; |
%10
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
% d'4.\mf cis8-"4\\_5" ~ cis b4-5 a8-"4\\_5" ~ |
d'4.\mf cis8 ~ cis b4-5 a8 ~ |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
% a g4-5 fis8-4 ~ fis16 fis-4-"dim." e-3 d-2
a g4-5 fis8-4 ~ fis16 fis-4 e-3 d-2
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
% e4-"3\\_5" ~ |
e4 ~ |
e16 e-5 d cis d4-5 ~ d16 d-5 cis b cis4-5 |
two = \context Staff \notes\relative c{
\context Voice=ii
\stemup
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
fis4-1( e8-2 a4 a4 gis8-2 |
) a8
\translator Staff=upper \stemdown
\skip 1*9;
\context Voice=iv
\stemup
- \property Voice.hshift = 1
+ \property Voice.horizontalNoteShift = 1
%10
a''2 fis |
d s |
-% \property Voice.hshift = 0
+% \property Voice.horizontalNoteShift = 0
\skip 1*2; |
s4
\translator Staff=lower \stemup
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
upper = \context Staff \notes\relative c{
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
\context Voice=i
% d'8-1\p a'-5-"legato" f-3 d-1 a'-5 f-3 |
d'8-1\p a'-5 f-3 d-1 a'-5 f-3 |
<
{
\stemup
- \property Voice . textstyle = "roman"
+ \property Voice . textStyle = "roman"
c4-\mordent^"(\\textsharp)"\p r r |
c4-\mordent^"(\\textsharp)" r r
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
}
\context Voice=ii { \stemdown a4 r r | a4 r r }
> |
g!-5 es'-1 c-1 g-5 es'-1 c-1 |
fis,4-5 r r
d-4( ) fis d-5 |
- \property Voice . textstyle = "roman"
+ \property Voice . textStyle = "roman"
g4-\mordent^"(\\textsharp)" r r8 f!8 |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
e4-\prall r r |
f4-\mordent r r8 e |
d4 r8 f-1 e d |
enteredby = "jcn";
copyright = "public domain";
}
-\version "1.0.20";
+\version "1.0.21";
one = \context Staff \notes\relative c{
e8.-\mordent f16 d8.-\prall-4 c16-5 \stemboth )c4.-5 d8-4 |
\stemdown
e4 ~ e16 f-2( e-3 d-4 cis a b cis-3 d-4 e-3 f-2 d-4 |
- \property Voice . textstyle = "finger"
+ \property Voice . textStyle = "finger"
)bes!2-"5\\_4" a ~ |
a a |
d, cis'-5 |
d2-3 cis-4 |
\skip 1*3; |
%5
- \translator Staff=upper \stemup \property Voice.hshift = 1
+ \translator Staff=upper \stemup \property Voice.horizontalNoteShift = 1
a'4 gis-2 ~ gis16 gis-3 fis e
\skip 4*1;
- \translator Staff=lower \stemdown \property Voice.hshift = 0
+ \translator Staff=lower \stemdown \property Voice.horizontalNoteShift = 0
\stemup
b2-1 a-1 |
g a4. gis16 a |
dotted slurs
%}
-\version "1.0.16";
+\version "1.0.21";
\include "allemande-urtext.ly";
\time 4/4;
\key f;
\clef bass;
- \repeat 2 {
+ \repeat "semi" 2 {
\partial 16;
s16
s1*11 |
s2 s4 s8
\partial 16*15;
s16
- } \repeat 2 {
+ } \repeat "semi" 2 {
% urg
s32 \partial 16; s32
s1*11
\paper{
\include "scs-paper.ly";
gourlay_maxmeasures = 3.0;
+
}
\midi{ \tempo 4 = 45; }
\header{ piece = "Allemande"; }
d = { \slurdotted }
comma = "\\sethuge\\ \\ ,"
+phrasingcomma = { } % { \bar "empty"; \mark "'"; \nobreak }
+
allemande_a = \context Staff \notes \relative c {
\context Voice=i
\stemup
\n a()f' g,()f e g'( a )bes |
% :-(
% bes( a g )f^\comma
- bes( a g )f^"\\sethuge{\\ \\ '}"
+ bes( a g )f \phrasingcomma
a()e f()d bes d(f)a d()a bes()g |
%21
a,(\n)g'(\n cis())d e()g, a()e f()d bes()d \d gis, f'(e)d |
% \n d( cis b )a^\comma c(a)fis d' c a( b )d
- \n d( cis b )a^"\\sethuge\\ \\ ,"
+ \n d( cis b )a \phrasingcomma %^"\\sethuge\\ \\ ,"
c(a)fis d' c a( b )d
f!(d )gis, d' |
%23
>
-\version "1.0.20";
+\version "1.0.21";
\$courante_b
>
-\version "1.0.20";
+\version "1.0.21";
\$gigue_b
>
-\version "1.0.20";
+\version "1.0.21";
dotted slurs
%}
-\version "1.0.16";
+\version "1.0.21";
\include "menuetto-urtext.ly";
\time 3/4;
\key f;
\clef bass;
- \repeat 2 {
+ \repeat "semi" 2 {
\skip 2.*8;
- } \repeat 2 {
+ }
+ \repeat "semi" 2 {
\skip 2.*1;
\slurdotted
\skip 2.*14;
\time 3/4;
\key D;
\clef bass;
- \repeat 2 {
+ \repeat "semi" 2 {
\skip 2.*8;
- } \repeat 2 {
+ }
+ \repeat "semi" 2 {
\skip 2.*1;
\slurdotted
\skip 2.*14;
\paper{
\include "scs-paper.ly";
gourlay_maxmeasures = 7.0;
+
\translator{
\VoiceContext
beamAutoEnd_8 = "3/4";
<a2\f e'> d8( e16 )f |
\slurdotted
e8( d cis )e a,()g |
- a4 ~ d cis |
+ a4 () d cis |
g'8( f e )f d() c |
%13
bes2 c4 |
% <bes,4 g' d'> <c, g' c> < d,8 bes'(> )a |
<d'4 g, bes,> <c g c,> bes8()a |
c8( bes a )bes g()bes |
- d4 ~ cis d |
+ d4 () cis d |
g,8 f g e f4 |
g,8 g' <{e4.^\trill d8 } a4.> ~ |
<d2. a d,> |
g8 \skip 8*5; |
f2 e4
d8 \skip 8*5; |
- g4 ~ f e
+ g4 () f e
f8 \skip 8*5; |
\skip 2.*3; |
es8 \skip 8*3; d4 |
>
menuetto_i = \context Staff \notes<
- { \$menuetto_i_a_voice_urg_urg }
- { \$menuetto_i_b_voice_urg_urg }
+ \repeat "semi" 2 { \$menuetto_i_a_voice_urg_urg }
+ \repeat "semi" 2 { \$menuetto_i_b_voice_urg_urg }
>
menuetto_ii = \context Staff\notes \relative c {
d2.
}
-\version "1.0.20";
+\version "1.0.21";
dotted slurs
%}
-\version "1.0.20";
+\version "1.0.21";
\include "prelude-urtext.ly";
\$prelude_b
>
-\version "1.0.20";
+\version "1.0.21";
dotted slurs
%}
-\version "1.0.20";
+\version "1.0.21";
\include "prelude-urtext.ly";
\$sarabande_b
>
-\version "1.0.20";
+\version "1.0.21";
\clef alto;
\$global_i
>
-\version "1.0.20";
+\version "1.0.21";
$violino_i_staff = \context Staff = violino <
<
%urg
- % \notes\property Voice.textstyle = "large" s4^"Moderato"
- % \notes {s4. \property Voice.textstyle = "large" s4^"Moderato"}
+ % \notes\property Voice.textStyle = "large" s4^"Moderato"
+ % \notes {s4. \property Voice.textStyle = "large" s4^"Moderato"}
\$violino_i
>
\$global_i
>
-\version "1.0.20";
+\version "1.0.21";
}
}
-\version "1.0.20";
+\version "1.0.21";
}
}
-\version "1.0.20";
+\version "1.0.21";
\clef bass;
\$global_i
>
-\version "1.0.20";
+\version "1.0.21";
%{
%}
-\version "1.0.20";
+\version "1.0.21";
global =
* auto beaming
%}
-\version "1.0.20";
+\version "1.0.21";
\include "nederlands.ly" % for correct parsing of note names
copyright = "Public Domain";
}
-\version "1.0.20";
+\version "1.0.21";
global =
\notes {
}
tempi = \notes{
- \property Voice.textstyle = "large"
+ \property Voice.textStyle = "large"
s8^"Allegro"
}
\midi{ \tempo 4 = 100; }
}
-\version "1.0.20";
+\version "1.0.21";
-\version "1.0.20";
+\version "1.0.21";
corI=\notes\relative c'' {
\key c;
marks=\notes {
\time 3/4;
-\property Voice.textstyle = "Large"
+\property Voice.textStyle = "Large"
\skip 2.*31;
s2 s8 s^"\\Allegromoltovivace"
\time 2/4;
% Process with 'ly2dvi -s parts.ly' to get the separate parts.
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "wood.ly"
markScriptPadding = "6.0";
barNumberScriptPadding = "11.0";
textScriptPadding = 5.0;
- textstyle = "italic";
+ textStyle = "italic";
textEmptyDimension = 1;
}
}
-%{
+
\score{
\context Staff <
\context Voice <
\tempo 4=120;
}
}
-%}
+
\score{
\context Staff <
\context Voice <
\tempo 4=120;
}
}
-%{
+
\score{
\context Voice <
\globalNoKey
\tempo 4=120;
}
}
-%}
\ No newline at end of file
"Statens Musikbibliotek, Stockholm, Sweden";
}
-\version "1.0.20";
+\version "1.0.21";
\include "global.ly"
\include "wood.ly"
\translator { \StaffContext
\consists "Staff_margin_engraver";
marginScriptPadding = "15.0";
- textstyle = "italic";
+ textStyle = "italic";
textScriptPadding = 5.0;
textEmptyDimension = 1;
}
-\version "1.0.20";
+\version "1.0.21";
viI=\notes\relative c'' {
-\version "1.0.20";
+\version "1.0.21";
oboe=\notes\relative c'' {
\clef "treble";
+++ /dev/null
- - more composers > 70y +
- - (more) free composers
- - Beethoven's Coriolan: brass and woodwind
- - more Cello Suites
Ugh.. Wish we had grace notes.... It adds another dimension to this
piece of music. %}
-\version "1.0.20";
+\version "1.0.21";
cad = \notes \relative c' {
}
-\version "1.0.20";
+\version "1.0.21";
allegro =
\notes
definition below. --MB
%}
-\version "1.0.18";
+\version "1.0.21";
global = \notes {
\property StaffGroup.timeSignatureStyle = "old"
copyright = "public domain";
latexheaders= "headers";
}
-\version "1.0.20";
+\version "1.0.21";
hoboonestart = \notes
\relative c'{
% ugh: cant copy: allegro/primo tempo
- \property Voice . textstyle = "large"
+ \property Voice . textStyle = "large"
[es''16-.^"Allegro" es-. es-. es-.] [es8-. d-.] |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
}
hobooneintro = \notes \relative c'{
-% \property Voice . textstyle = "roman"
+% \property Voice . textStyle = "roman"
% [es''16-.-"Allegro" es-. es-. es-.] [es8-. d-.] |
-% \property Voice . textstyle = "italic"
+% \property Voice . textStyle = "italic"
[f''8.-> es16(] [)d8 c-.] |
[bes16( c d es] [)d8 c-.] |
[bes-. as->~] [as16( g f g] |
[d16-. d-. d-. d-.] [d8.-. es16->] |
[d16 d d d] [d8 es16-.] r16-\fermata^"court"^"tr\\`es" |
% Un peu plus lent.
- \property Voice . textstyle = "bold"
+ \property Voice . textStyle = "bold"
% ugh
-% d4(\<^"Un peu plus lent" \property Voice . textstyle = "italic _"tr\\`es \\'el\\'egant"
+% d4(\<^"Un peu plus lent" \property Voice . textStyle = "italic _"tr\\`es \\'el\\'egant"
% d4(\^"Un peu plus lent et \\'el\\'egant"<
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
d4(\<
[e8 \!fis8] |
% [)b-. a-.] [g16( fis e )d] |
- \property Voice . textstyle = "bold"
+ \property Voice . textStyle = "bold"
[)b-.^"Un peu plus lent et \\'el\\'egant" a-.] [g,,16( fis' e )d] |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
[d( c b\< c] [)\!fis'8-. e-.] |
d,,4-> ~ [d16 e( fis g] |
[a b\< d fis] [)\!a8-. g-.] |
hoboonesecondstart = \notes \relative c'{
% ugh: cant copy: allegro/primo tempo
- \property Voice . textstyle = "large"
+ \property Voice . textStyle = "large"
[es''16-.\ff^"Tempo 1$^o$" es-. es-. es-.] [es8-. d-.] |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
}
[bes'16-.\ff bes-. bes-. bes-.] [bes8-. ces16->] r16^"court"-\fermata |
% ugh: eight measures rest (ugh: r1 -> four beats...)
% eiht measures rest..
- \property Voice . textstyle = "bold"
+ \property Voice . textStyle = "bold"
% r2^"Un peu plus lent et \\'el\\'egant"
R2*8
% r4 r8\p bes |
r8\p bes,, |
% g2->^"Un peu plus lent et \\'el\\'egant" ~ |
g2-> ~ |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
g8 r r c |
c2-> ~ |
c8 r r bes'\f |
g8-. r f4-> ~ |
[f8 es-. ces8.-. as16-.] |
% `a deux
- \property Voice . textstyle = "large"
+ \property Voice . textStyle = "large"
[ces8.->^"Plus vite" bes16-.(] [a bes es d] |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
[)c!8.-> bes16] [a( bes es )d] |
[c->( bes es )d] [c->( bes es )d] |
% same measure
[g )f d( es] [f g as a] |
[c )bes bes,( c] [d es f g] |
[as g f g] [as bes c d] |
- \property Voice . textstyle = "large"
+ \property Voice . textStyle = "large"
[)es-.^"Tempo 1$^o$" g,-. g-. g-.] [g8-. g-.] |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
bes4.-> g8-. |
gis2->( |
)as! |
g4.-> g8-. |
es4.-> es8-. |
bes4.-> bes8-. |
- \property Voice . textstyle = "large"
+ \property Voice . textStyle = "large"
g'4.->^"Presto" g8-. |
- \property Voice . textstyle = "italic"
+ \property Voice . textStyle = "italic"
es4.-> es8-. |
[bes-. bes-. es-. g-.] |
[bes-. bes,-. es-. g-.] |
(("Clef_item" "Span_bar") . (minimum_space 3.7))
(("Time_signature" "Span_bar") . (minimum_space 2.0))
(("Key_item" "Span_bar") . (minimum_space 2.5))
- (("Staff_bar" "Time_signature") . (minimum_space 1.0))
+ (("Staff_bar" "Time_signature") . (minimum_space 2.0))
(("Time_signature" "begin-of-note") . (extra_space 1.0)) ; Huh? see twinkle.ly
- (("Key_item" "begin-of-note") . (extra_space 3.0))
+ (("Key_item" "begin-of-note") . (extra_space 2.5))
(("Staff_bar" "begin-of-note") . (extra_space 1.0))
(("Clef_item" "begin-of-note") . (minimum_space 5.0))
)
#
program_name = 'abc-to-ly'
-version = '0.1'
+version = '@TOPLEVEL_VERSION@'
import __main__
import getopt
import sys
default_len = 4
global_key = [0] * 7 # UGH
DIGITS='0123456789'
+HSPACE=' \t'
def gcd (a, b):
while a % b:
return key_table
+tup_lookup = {
+ '3' : '2/3',
+ '4' : '4/3',
+ '6' : '4/6',
+ }
+
+
+def try_parse_tuplet_begin (str, state):
+ if str and str[0] in DIGITS:
+ dig = str[0]
+ str = str[1:]
+ state.parsing_tuplet = 1
+
+ print '\\times %s {' % tup_lookup[dig]
+ return str
+
+def try_parse_group_end (str, state):
+ if str and str[0] in HSPACE:
+ str = str[1:]
+ if state.parsing_tuplet:
+ state.parsing_tuplet = 0
+ print '}'
+ return str
+
def try_parse_header_line (ln):
m = re.match ('^(.): *(.*)$', ln)
if g == 'T':
header['title'] = a
if g == 'M':
+ if a == 'C':
+ a = '4/4'
global_voice_stuff.append ('\\time %s;' % a)
if g == 'K':
__main__.global_key =compute_key (a)# ugh.
def parse_num (str):
durstr = ''
- while str[0] in DIGITS:
+ while str and str[0] in DIGITS:
durstr = durstr + str[0]
str = str[1:]
def __init__ (self):
self.next_dots = 0
self.next_den = 1
+ self.parsing_tuplet = 0
# WAT IS ABC EEN ONTZETTENDE PROGRAMMEERPOEP !
mud = ''
slur_begin =0
- if str[0] == '(':
+ if not str:
+ return str
+
+ if str[0] == '(':
slur_begin = 1
str = str[1:]
return str
+
+def try_parse_guitar_chord (str):
+ if str and str[0] == '"':
+ str = str[1:]
+ gc = ''
+ while str and str[0] != '"':
+ gc = gc + str[0]
+ str = str[1:]
+
+ if str:
+ str = str[1:]
+
+ print "guitar chord: %s\n" % gc
+
+ return str
+
def try_parse_escape (str):
- if str [0] != '\\':
+ if not str or str [0] != '\\':
return str
str = str[1:]
- if str[0] == 'K':
- compute_key ()
+ if str and str[0] == 'K':
+ key_table = compute_key ()
return str
def try_parse_bar (str):
- if str[0] == '|':
+ if str and str[0] == '|':
+ bs = ''
str = str[1:]
+ if str:
+ if str[0] == ']':
+ bs = '|.'
+ if str[0] == '|':
+ bs = '||'
+
+ if bs:
+ print '\\bar "%s";' % bs
return str
+def try_parse_chord_delims (str):
+ if str and str[0] == '[':
+ str = str[1:]
+ print '<'
+
+ if str and str[0] == ']':
+ str = str[1:]
+ print '>'
+
+ return str
+# Try nibbling characters off until the line doesn't change.
def try_parse_body_line (ln, state):
prev_ln = ''
- while ln and ln != prev_ln:
+ while ln != prev_ln:
prev_ln = ln
+ ln = try_parse_chord_delims (ln)
ln = try_parse_note (ln, state)
ln = try_parse_bar (ln)
- ln = junk_space (ln)
ln = try_parse_escape (ln)
+ ln = try_parse_guitar_chord (ln)
+ ln = try_parse_tuplet_begin (ln, state)
+ ln = try_parse_group_end (ln, state)
+ ln = junk_space (ln)
+
if ln:
- print 'Huh %s' % ln
+ print 'Huh? Don\'t understand `%s\'' % ln
def identify():
- print '%s %s' % (program_name, version)
+ print '%s from LilyPond %s' % (program_name, version)
def help ():
print r"""
This is a disfunctional ABC to mudela convertor. It only gulps input, and
-says huh when confused. Does not do chords. Go ahead and fix me.
+says huh when confused. Go ahead and fix me.
+
+Usage: abc-2-ly INPUTFILE
-h, --help this help.
"""
return newlines
conversions.append ((1,0,18), conv,
- '\\repeat NUM Music Alternative -> \repeat FOLDSTR Music Alternative')
+ '\\repeat NUM Music Alternative -> \\repeat FOLDSTR Music Alternative')
if 1:
def conv(lines):
'{,tie,slur}ydirection -> {v,tieV,slurV}erticalDirection')
+if 1:
+ def conv(lines):
+ newlines =[]
+ for x in lines:
+ x = re.sub ('hshift','horizontalNoteShift', x)
+ newlines.append (x)
+ return newlines
+
+ conversions.append ((1,0,21), conv,
+ 'hshift -> horizontalNoteShift')
+
+
############################