+pl 22.jcn4
+ - bf's: repeat-engraver; \bar "|:", ":|" now deprecated for repeats
+ - bf: :|, |:
+ - property barAlways changed to boolean (0/1)
+ - added boolean property: barAuto
+
pl 22.jcn3
- bf: mmrest
* fix braces
- * multibar rests: SkipBars=0
-
* ly2dvi barfs on linewidth = -1.
* fix midi output:
* repeat/volta:
- one volta spanner per score
- - repeat bars span staffs
- - placement alternative number
* latex bla.tex broken (titles / \lilyfooter stuff?)
- handle DISALLOW < penalty > FORCE
- discourage breaking of slurs
- * multibar rest
- - symbol(s)
-
* fix variable define/lookup parser global<->paper
* fix title/instrument placements; see input/test/title.ly
MAJOR_VERSION=1
MINOR_VERSION=1
PATCH_LEVEL=22
-MY_PATCH_LEVEL=jcn3
+MY_PATCH_LEVEL=jcn4
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
StaffContext=\translator {
\type "Line_group_engraver_group";
\name Staff ;
+ barAuto = "1";
%{
The Hara_kiri_line_group_engraver is a Line_group_engraver
keyoctaviation 0 Key signature only for specified octave \specialkey
keyoctaviation 1 Key signature for all octaves \normalkey
+[Staff]
+barAlways 0 none
+barAlways 1 generate bar at every moment
+
+[Staff]
+barAuto 0 none
+barAuto 1 auto-generate bar every measure
+
timeSignatureStyle C Use C and stroked C for 4/4,2/2
timeSignatureStyle old Use old style mensuration marks
timeSignatureStyle 1 Use single number
%}
\header{
title="The Star Spangled Banner";
-subtitle="(United States of America's National Anthem)";
+subtitle="(The United States National Anthem)";
poet="Text by Francis Scott Key";
composer="J. S. Smith";
arranger="Arranged by William J. Krauss";
}
$staff1_voice_1 = \notes {
- [a8.()fis16] d4 fis4 a4 d'2 [fis'8. e'16] d'4 fis4 gis4 a2 [a8 a8]
- fis'4. e'8 d'4 cis'2 [b8. cis'16] d'4 d'4 a4 fis4 d4 [a8. fis16]
- fis4 d4 [fis'8. fis'16] fis'4 g'4 a'4 a'2 [g'8 fis'8] e'4 fis'4
+ [a8.()fis16]
+ \repeat 2 { d4 fis4 a4 d'2 [fis'8. e'16] d'4 fis4 gis4 a2 [a8 a8]
+ fis'4. e'8 d'4 cis'2 [b8. cis'16] d'4 d'4 a4 }
+ \alternative { { fis4 d4 [a8. fis16] } { fis4 d4 [fis'8. fis'16] } }
+ fis'4 g'4 a'4 a'2 [g'8 fis'8] e'4 fis'4
g'4 g'2 g'4 fis'4. e'8 d'4 cis'2 [b8. cis'16] d'4 fis4 gis4 a2 a4
d'4 d'4 [d'8()cis'8] b4 b4 b4 e'4 [g'8 ()fis'8] [e'8()d'8]
d'4~cis'4 [a8. a16] d'4.~e'8 [fis'8 g'8] a'2 [d'8 e'8] fis'4. g'8
}
$staff1_voice_2 = \notes {
- [a8.()fis16] a,4 d4 e4 d4~fis4 [fis8. fis16] fis4 d4 d4 cis2 [e8
- e8] a4. a8 a4 a2 [a8. a16] a4 a4 a4 fis4 d4 [a8. fis16] fis4 d4 r4
- a4 a4 d'4 d'2 [a8 a8] cis'4 cis'4 cis'4 cis'2 a4 a4. a8 a4 a2 [a8.
- a16] d4 d4 d4 cis2 e4 fis4 e4 d4 d4 d4 dis4 g4 [g8()dis8] e4 e2
+ [a8.()fis16]
+ \repeat 2 { a,4 d4 e4 d4~fis4 [fis8. fis16] fis4 d4 d4 cis2
+ [e8 e8] a4. a8 a4 a2 [a8. a16] a4 a4 a4 }
+ \alternative { { fis4 d4 [a8. fis16] } { fis4 d4 r4 } }
+ a4 a4 d'4 d'2 [a8 a8] cis'4 cis'4 cis'4 cis'2 a4 a4. a8 a4 a2
+ [a8. a16] d4 d4 d4 cis2 e4 fis4 e4 d4 d4 d4 dis4 g4 [g8()dis8] e4 e2
[e8. e16] d4.~a8 [a8 a8] a2 [g8 g8] a4. a8 g4 fis2 s4
}
$staff2_voice_1 = \notes {
- r4 fis4 a4 a4 b2 [cis'8. cis'16] b4 b4 b4 a2 [cis'8 cis'8] d'4.
- cis'8 d'4 e'2 [e'8. e'16] d'4 d'4 a4 fis4 d4 r4 fis4 d4 r4 d4 e4
- fis4 fis'2 [e'8 d'8] e'4 e'4 e'4 e'2 cis'4 d'4. cis'8 d'4 e'2
+ r4
+ \repeat 2 { fis4 a4 a4 b2 [cis'8. cis'16] b4 b4 b4 a2 [cis'8 cis'8]
+ d'4. cis'8 d'4 e'2 [e'8. e'16] d'4 d'4 a4 }
+ \alternative { { fis4 d4 r4 } { fis4 d4 r4 } }
+ d4 e4 fis4 fis'2 [e'8 d'8] e'4 e'4 e'4 e'2 cis'4 d'4. cis'8 d'4 e'2
[e'8. e'16] a4 a4 e4 e2 cis'4 a4 a4 a4 g4 g4 b4 b4 b4 b4 a2
[cis'8. cis'16] a4.~cis'8 [d'8 d'8] d'2 [d'8 d'8] d'4. d'8 cis'4
a2 s4
}
$staff2_voice_2 = \notes {
- r4 d4 d4 cis4 b,2 [ais,8. ais,16] b,4 b,4 e4 a,2 [a8 a8] d4. e8
- [fis8 g8] a2 [g8. g16] fis4 fis4 a4 fis4 d4 r4 fis4 d4 r4 d4 d4 d4
- d2 [d8 d8] a4 a4 a4 a2 a,4 d4. e8 [fis8 g8] a2 [g8. g16] fis4 d4
- e4 a,2 a4 d4 e4 fis4 g4 g4 fis4 e4 [e8()fis8] [g8()gis8] a2 [g8.
- g16] fis4.~a,8 [d8 e8] fis2 [b8 b8] a4. a8 a,4 d2 s4
+ r4
+ \repeat 2 { d4 d4 cis4 b,2 [ais,8. ais,16] b,4 b,4 e4 a,2 [a8 a8]
+ d4. e8 [fis8 g8] a2 [g8. g16] fis4 fis4 a4 }
+ \alternative { { fis4 d4 r4 } { fis4 d4 r4 } }
+ d4 d4 d4 d2 [d8 d8] a4 a4 a4 a2 a,4 d4. e8 [fis8 g8] a2 [g8. g16]
+ fis4 d4 e4 a,2 a4 d4 e4 fis4 g4 g4 fis4 e4 [e8()fis8] [g8()gis8] a2
+ [g8. g16] fis4.~a,8 [d8 e8] fis2 [b8 b8] a4. a8 a,4 d2 s4
}
-$text1 = \lyrics{
- Oh4 __ say. can you see,2 by8. the16 dawn's4 ear- ly light2 What8
+$text = \lyrics{
+ Oh4 __ \repeat 2 { }
+ \alternative <
+ { say. can you see,2 by8. the16 dawn's4 ear- ly light2 What8
so8 proud-4. ly8 we4 hailed,2 At8. the16 twi-4 light's last gleam-
- ing. Whose8. broad16
-}
-
-$text2 = \lyrics{
- _4 stripes and bright stars,2 through8 the8 per-4 il- ous fight,2
- O'er8 the8 ram-4. parts8 we4 watched,2 were8. so16 gal-4 lant- ly
- _ _ _
-}
-
-$text3 = \lyrics{
+ ing. Whose8. broad16 }
+ % urg, lyric chords broken: 1.1.22
+% { stripes4 and bright stars,2 through8. the16 per-4 il- ous fight,2
+% O'er8 the8 ram-4. parts8 we4 watched,2 were8. so16 gal-4 lant- ly }
+ >
stream-4 ing. And8. the16 rock-4 ets' red glare,2 the8 bombs8
burst-4 ing in air,2 gave4 proof4. through8 the4 night2 that8.
our16 flag4 was still there,2 Oh4 say, does that star- span-
\key D;
\partial 4;
\skip 4;
- \bar "|:";
\skip 2.*8;
- \bar ":|";
\skip 2.*16;
\skip 2.;
\bar "|.";
\notes \transpose c'' {\voicetwo \$staff1_voice_2 }
>
\type Lyrics = one \lyrics <
-% urg, too much distance between two texts; fixme first
-% \$text1
-% { \$text2 \$text3 }
- { \$text1 \$text3 }
+ \$text
>
\type Staff=staffB <
\global
}
}
}
+
# input/test/Makefile
depth = ../..
-examples=font20 hara-kiri grace mark denneboom sleur chords chord-table repeat
+examples=font20 mark knee beam-interstaff slur-interstaff denneboom sleur chords chord-table repeat hara-kiri grace
LOCALSTEPMAKE_TEMPLATES=mutopia
include $(depth)/make/stepmake.make
-%{
-Converted from star.mup with the aid of mup-to-ly.py
-http://www.Arkkra.com/doc/star.html
-http://www.Arkkra.com/doc/star.ps
-%}
-\header{
-title="The Star Spangled Banner";
-subtitle="(The United States National Anthem)";
-poet="Text by Francis Scott Key";
-composer="J. S. Smith";
-arranger="Arranged by William J. Krauss";
-enteredby="jcn";
-copyright="public domain";
-}
-
-$staff1_voice_1 = \notes {
- [a8.()fis16]
- \repeat 2 { d4 fis4 a4 d'2 [fis'8. e'16] d'4 fis4 gis4 a2 [a8 a8]
- fis'4. e'8 d'4 cis'2 [b8. cis'16] d'4 d'4 a4 }
- \alternative { { fis4 d4 [a8. fis16] } { fis4 d4 [fis'8. fis'16] } }
- fis'4 g'4 a'4 a'2 [g'8 fis'8] e'4 fis'4
- g'4 g'2 g'4 fis'4. e'8 d'4 cis'2 [b8. cis'16] d'4 fis4 gis4 a2 a4
- d'4 d'4 [d'8()cis'8] b4 b4 b4 e'4 [g'8 ()fis'8] [e'8()d'8]
- d'4~cis'4 [a8. a16] d'4.~e'8 [fis'8 g'8] a'2 [d'8 e'8] fis'4. g'8
- e'4 d'2 s4
-}
-
-$staff1_voice_2 = \notes {
- [a8.()fis16]
- \repeat 2 { a,4 d4 e4 d4~fis4 [fis8. fis16] fis4 d4 d4 cis2
- [e8 e8] a4. a8 a4 a2 [a8. a16] a4 a4 a4 }
- \alternative { { fis4 d4 [a8. fis16] } { fis4 d4 r4 } }
- a4 a4 d'4 d'2 [a8 a8] cis'4 cis'4 cis'4 cis'2 a4 a4. a8 a4 a2
- [a8. a16] d4 d4 d4 cis2 e4 fis4 e4 d4 d4 d4 dis4 g4 [g8()dis8] e4 e2
- [e8. e16] d4.~a8 [a8 a8] a2 [g8 g8] a4. a8 g4 fis2 s4
-}
-
-$staff2_voice_1 = \notes {
- r4
- \repeat 2 { fis4 a4 a4 b2 [cis'8. cis'16] b4 b4 b4 a2 [cis'8 cis'8]
- d'4. cis'8 d'4 e'2 [e'8. e'16] d'4 d'4 a4 }
- \alternative { { fis4 d4 r4 } { fis4 d4 r4 } }
- d4 e4 fis4 fis'2 [e'8 d'8] e'4 e'4 e'4 e'2 cis'4 d'4. cis'8 d'4 e'2
- [e'8. e'16] a4 a4 e4 e2 cis'4 a4 a4 a4 g4 g4 b4 b4 b4 b4 a2
- [cis'8. cis'16] a4.~cis'8 [d'8 d'8] d'2 [d'8 d'8] d'4. d'8 cis'4
- a2 s4
-}
-
-$staff2_voice_2 = \notes {
- r4
- \repeat 2 { d4 d4 cis4 b,2 [ais,8. ais,16] b,4 b,4 e4 a,2 [a8 a8]
- d4. e8 [fis8 g8] a2 [g8. g16] fis4 fis4 a4 }
- \alternative { { fis4 d4 r4 } { fis4 d4 r4 } }
- d4 d4 d4 d2 [d8 d8] a4 a4 a4 a2 a,4 d4. e8 [fis8 g8] a2 [g8. g16]
- fis4 d4 e4 a,2 a4 d4 e4 fis4 g4 g4 fis4 e4 [e8()fis8] [g8()gis8] a2
- [g8. g16] fis4.~a,8 [d8 e8] fis2 [b8 b8] a4. a8 a,4 d2 s4
-}
-
-$text = \lyrics{
- Oh4 __ \repeat 2 { }
- \alternative <
- { say. can you see,2 by8. the16 dawn's4 ear- ly light2 What8
- so8 proud-4. ly8 we4 hailed,2 At8. the16 twi-4 light's last gleam-
- ing. Whose8. broad16 }
- { stripes4 and bright stars,2 through8. the16 per-4 il- ous fight,2
- O'er8 the8 ram-4. parts8 we4 watched,2 were8. so16 gal-4 lant- ly }
- >
- stream-4 ing. And8. the16 rock-4 ets' red glare,2 the8 bombs8
- burst-4 ing in air,2 gave4 proof4. through8 the4 night2 that8.
- our16 flag4 was still there,2 Oh4 say, does that star- span-
- gled ban- ner yet wave,2 __ O'er8. the16 land2 __ of8 the8 free2
- and8 the8 home4. of8 the4 brave.2
-}
-
-global = \notes {
- \time 3/4;
- \key D;
- \partial 4;
- \skip 4;
- \skip 2.*8;
- \skip 2.*16;
- \skip 2.;
- \bar "|.";
- }
-
-\include "paper16.ly";
-
-\score{
- \type GrandStaff <
- \type Staff=staffA <
- \global
- \notes \transpose c'' {\voiceone \$staff1_voice_1 }
- \notes \transpose c'' {\voicetwo \$staff1_voice_2 }
- >
- \type Lyrics = one \lyrics <
- \$text
- >
- \type Staff=staffB <
- \global
- \clef bass;
- {\voiceone \$staff2_voice_1 }
- {\voicetwo \$staff2_voice_2 }
- >
- >
- \paper{
- \paper_sixteen;
- textheight = 230.\mm;
- linewidth= 180.\mm;
- \translator {
- \GrandStaffContext
- \accepts "Lyrics";
- }
- \translator {
- \BarNumberingStaffContext
- }
- }
-}
-
\type Staff = o \notes\relative c,,, {
\stemdown [c8 c c c] c4 c4 \break [c8 c c c] c4 c4
}
- \type Lyrics \lyrics{
- BLA bla _2 < { BLA bla } { BLA bla } > _2
+ \type Lyrics \lyrics{
+ BLA gag _2 < { BLA gag } { BLA gag la } > _2
}
\type Staff = t \notes\relative c''''' {
\stemup [c8 c c c] c4 c [c8 c c c] c4 c
global = \notes {
\time 2/4;
- \skip 2*24;
- \bar ":|";
}
tekst = \lyrics{
>
\score{
- <
+ \repeat 2 { <
\$treble_staff
\$middle_lyrics
\$top_lyrics
\$grand_staff
\$bottom_lyrics
- >
+ > }
\paper{
gourlay_maxmeasures = 14.0;
}
/*
- bar-reg.cc -- implement Bar_engraver
+ bar-engraver.cc -- implement Bar_engraver
source file of the GNU LilyPond music typesetter
- (c) 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997, 1998, 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ Jan Nieuwenhuizen <janneke@gnu.org>
*/
#include "bar-engraver.hh"
Bar_engraver::Bar_engraver()
{
bar_p_ =0;
+ bar_l_ =0;
do_post_move_processing();
}
}
+void
+Bar_engraver::acknowledge_element (Score_element_info i)
+{
+ if (Bar *b = dynamic_cast<Bar *> (i.elem_l_))
+ {
+ bar_l_ = b;
+ // auto_create_bar_b_ = false;
+ }
+}
+
void
Bar_engraver::create_bar ()
{
{
bar_p_ = new Bar;
bar_p_->break_priority_i_ = 0;
+ // urg: "" != empty...
String default_type = get_property ("defaultBarType", 0);
if (default_type.length_i ())
{
{
create_bar ();
bar_p_->type_str_ = "";
+ Scalar prop = get_property ("barAuto", 0);
+ auto_create_bar_b_ = prop.to_bool ();
}
void
void
Bar_engraver::do_process_requests()
{
+ Time_description const *time = get_staff_info().time_C_;
if (bar_req_l_)
{
if (!bar_p_)
}
else
{
- Time_description const *time = get_staff_info().time_C_;
- String always = get_property ("barAlways", 0);
- if ((time && !time->whole_in_measure_) || always.length_i ())
- create_bar ();
+ Scalar always = get_property ("barAlways", 0);
+ if ((time && !time->whole_in_measure_) || always.to_bool ())
+ {
+ if (auto_create_bar_b_)
+ create_bar ();
+ Scalar prop = get_property ("barAuto", 0);
+ auto_create_bar_b_ = prop.to_bool ();
+ }
}
-
-
- if (!bar_p_)
+ /*
+ hmm, perhaps it's Better to create empty bars if you want none
+ displayed, and keep bars for breakpoints ?
+ */
+#if 0
+ if ((time && time->whole_in_measure_)
+ && !always.to_bool ()
+ && !bar_p_ && !bar_l_)
+#endif
+ if (!bar_p_ && !bar_l_)
{
Break_req r;
r.penalty_i_ = Break_req::DISALLOW;
void
Bar_engraver::do_pre_move_processing()
{
+ if (bar_l_)
+ {
+ bar_l_ = 0;
+ if (bar_p_)
+ {
+ bar_p_->unlink ();
+ bar_p_ = 0;
+ }
+ }
if (bar_p_)
{
typeset_element (bar_p_);
class Bar_engraver : public Engraver {
Bar_req * bar_req_l_;
Bar * bar_p_;
+ Bar * bar_l_;
+ bool auto_create_bar_b_;
void create_bar ();
public:
protected:
+ virtual void acknowledge_element (Score_element_info i);
virtual void do_creation_processing ();
virtual void do_removal_processing ();
virtual bool do_try_music (Music *req_l);
if (now > Moment (0))
announce_element (Score_element_info (bar_p, repeated_music_arr_[i]));
}
-#if 0 //urg, try pre-ceating and announcing
for (int i = 0; i < bar_p_arr_.size (); i++)
{
if (!bar_p_arr_[i] && (now >= stop_mom_arr_[i]))
announce_element (Score_element_info (bar_p, repeated_music_arr_[i]));
}
}
-#endif
int bees = volta_p_arr_.size ();
for (int i = volta_p_arr_.size (); i < alternative_music_arr_.size (); i++)
{
delete bar_p_arr_[i];
bar_p_arr_[i] = 0;
}
+ if (now >= stop_mom_arr_[i])
+ {
+ bar_p_arr_.del (i);
+ stop_mom_arr_.del (i);
+ repeated_music_arr_.del (i);
+ }
}
for (int i = volta_p_arr_.size (); i--; )
{
typeset_element (volta_p_arr_[i]);
volta_p_arr_[i] = 0;
}
+ volta_p_arr_.del (i);
+ alternative_music_arr_[i] = 0;
+ alternative_music_arr_.del (i);
+ alternative_start_mom_arr_.del (i);
+ alternative_stop_mom_arr_.del (i);
}
}
}
void
Repeat_engraver::do_post_move_processing ()
{
- Moment now = now_moment ();
- for (int i = bar_p_arr_.size (); i--; )
- {
-#if 0 // urg, try with pre-created and annouced :|
- if (now >= stop_mom_arr_[i])
- {
- if (bar_p_arr_[i])
- {
- typeset_element (bar_p_arr_[i]);
- bar_p_arr_.del (i);
- stop_mom_arr_.del (i);
- repeated_music_arr_.del (i);
- }
- else
- {
- bar_p_arr_.del (i);
- }
- }
-#else
- if (now >= stop_mom_arr_[i])
- {
- Bar* bar_p = new Bar;
- bar_p-> type_str_ = ":|";
- typeset_element (bar_p);
- bar_p_arr_.del (i);
- stop_mom_arr_.del (i);
- repeated_music_arr_.del (i);
- }
-#endif
- }
}
}
%{
- Tested Features: cross staff beams and slurs
+ Tested Features: cross staff beams and slurs, grace notes, no bars
%}
\version "1.0.14";
% no slur damping
slur_slope_damping = 100.0;
- %hmm
-% \translator { \BarNumberingScoreContext }
-% \translator { \BarNumberingStaffContext }
-% \translator{ \OrchestralScoreContext }
\translator{ \OrchestralScoreContext }
\translator{
\GrandStaffContext
minVerticalAlign = 3.0*\staffheight;
maxVerticalAlign = 3.0*\staffheight;
- % don't display bars?
- % hmm, this switches something else...
- % barAlways = 0.;
}
\translator{
\StaffContext
-% hmm, i don't want bars
-% but i do want the staffs to be connected
-% \remove "Bar_engraver";
+ % don't auto-generate bars: not a good idea: -> no breakpoints
+ % barAuto = "0";
+ % urg defaultBarType = "";
+ defaultBarType = "empty";
\remove "Time_signature_engraver";
}
}
-% \header{
-% opus = "BWV 847";
-% }
-
\midi {
\tempo 4 = 54;
}
%compatibility
%urg
-\fetdef\repeatcolon{20}
+\fetdef\repeatcolon{21}
\def\repeatbar#1{\repeatstopbar}
\def\startrepeat#1{\repeatstartbar}
\def\repeatbarstartrepeat#1{\repeatstopstart}