+pl 22:
+ - doco from mpp
+ - repeat signs
+ - | checks for bar in a voice (Barcheck_req)
+Internal changes:
+ - naming (Hungarian notation, svec vs. Array)
+ - huge memleak fixed; unearthed lots of bugs
+ - bug noteheadswap
+ - cleanup PScore, Score
+ - removed Staff_commands, plugging commands into Staff_column directly
+
pl 21:
- - Move breaking stuff into a separate class Break_algorithm
- - dependencies for Staff_elem's
- scripts
- texts
- nplets (triplets!)
+Internal changes:
+ - Move breaking stuff into a separate class Break_algorithm
+ - dependencies for Staff_elem's
pl 20:
- - Rational for time measurement
- updated doco to .pod
+ - include files from .ly
+Internal changes:
+ - Rational for time measurement
- directionalspanner/textspanner
- - include files
pl 19:
- - struct Moment
- grouping code: LilyPond can set advanced multibeams.
+Internal changes:
+ - struct Moment
+
pl 18:
- robust Staff_commands
\octave {} % set the default octave
% the default note duratino is 4
%%% theme
- c c g g a a
- g2 % g2 means a "g-1" pitched half-note
- f f e e d d c2
- g g f f e e d d g g f f e e d d
+ c c | % the '|' checks if there is a new measure here.
+ g g|
+ a a|
+
+ g2| % g2 means a "g-1" pitched half-note
+ f f| e e| d d| c2
+ g g| f f| e e| d d| g g| f f| e e| d d|
%%% var 1
c r8 c8 % r8 means an 8th rest.
- ( % start a slur
+ (| % start a slur
% NOTE: the slurstart should be directly after the note
) % end a slur.
- g r8 g8 ( ) a r8 a8 ( ) g r4
- f r8 f8 ( ) e4 r8 e8 ( ) d4 r8 d8 ( ) c4 r4
+ g r8 g8 (| ) a r8 a8 (| ) g r4
+ f r8 f8 (| ) e4 r8 e8 ( |) d4 r8 d8 (| ) c4 r4
$}
% more of this.
music { begeleiding } % use the declared music
commands { % commands with Staff-wide impact.
clef bass % bass-clef
-
}
}
vstaf = staff {
melodic
music { melodie }
+ commands { clef violin }
% default clef is violin clef
}
}
commands {
meter 2 4 % a 2/4 meter.
- skip 32:0 % skip 32 measures, and generate the bars
- meter 6 8 % another meter
+ skip 33:0 % skip 32 measures, and generate the bars
+% meter 6 8 % another meter
}
}
/*
- UGR
+ UGR!! CHAOS RULEZ
*/
#include "textspanner.hh"
#include "script.hh"
#include "textitem.hh"
Rhythmic_grouping
-parse_grouping(svec<Scalar> a, Moment one_beat)
+parse_grouping(Array<Scalar> a, Moment one_beat)
{
- svec<int> r;
- for (int i= 0 ; i < a.sz(); i++)
+ Array<int> r;
+ for (int i= 0 ; i < a.size(); i++)
r.add(a[i]);
Moment here =0.0;
- svec<Rhythmic_grouping*> children;
- for (int i=0; i < r.sz(); i++) {
+ Array<Rhythmic_grouping*> children;
+ for (int i=0; i < r.size(); i++) {
Moment last = here;
here += one_beat * r[i];
void
Simple_walker::do_INTERPRET_command(Command*com)
{
- svec<Scalar> args(com->args);
+ Array<Scalar> args(com->args);
args.del(0);
if (com->args[0] == "GROUPING") {
default_grouping = parse_grouping(args,
col()->tdescription_->one_beat);
- }else if (com->args[0] == "BAR") {
+ }else if (com->args[0] == "NEWMEASURE") {
local_key_.reset(key_);
} else if (com->args[0] == "KEY") {
if (col()->when() > Moment(0)) {
assert(!oldkey_undo);
- oldkey_undo = new svec<int>( key_.oldkey_undo(args));
+ oldkey_undo = new Array<int>( key_.oldkey_undo(args));
}
typesetkey = key_.read(args);
if (processed_clef)
return;
}
-
+ if (com->args[0] == "BAR") {
+
+ if (processed_bar_priority > com->priority)
+ return;
+ else
+ processed_bar_priority = com->priority;
+ }
Item* i = staff()->get_TYPESET_item(com);
if (!i)
Item*rhythmic=0;
if (n.rq->note()) {
Note_req * req = n.rq->note() ;
- const Voice *v = req->elt->voice_;
+ const Voice *v = req->elt_l_->voice_;
Notehead*n = s->get_notehead(req, clef_.c0_pos);
rhythmic=n;
- stem_->add(n);
+ if (stem_)
+ stem_->add(n);
+
if (current_grouping) {
current_grouping->add_child(
c->tdescription_->whole_in_measure, req->duration());
error("Too many beams (t = "
+String(c->when())+")");
beam_ = new Beam;
+ assert(!current_grouping);
current_grouping = new Rhythmic_grouping;
}
- for (int i=0; i < c->slurs.sz(); i++) {
+ for (int i=0; i < c->slurs.size(); i++) {
Slur_req*sl = c->slurs[i];
if (sl->spantype == Span_req::START) {
- if (find_slur(sl->elt->voice_ )>=0)
+ if (find_slur(sl->elt_l_->voice_ )>=0)
error_t("Too many slurs in voice", col()->when());
pending_slur_reqs.add(sl);
pending_slurs.add(new Slur);
stem_ = s->get_stem(c->stem_->stem(), c->stem_requester_len);
}
- for (int i = 0; i < c->notes.sz(); i ++) {
+ for (int i = 0; i < c->notes.size(); i ++) {
do_note(c->notes[i]);
}
/* needed, otherwise placement of
local_key fucks up */
}
+
if (c->beam_&& c->beam_->spantype == Span_req::STOP) {
beam_->set_grouping(default_grouping, *current_grouping);
pscore_->typeset_spanner(beam_, s->theline);
delete current_grouping;
current_grouping =0;
}
- for (int i = 0; i < noteheads.sz(); i++) {
+ for (int i = 0; i < noteheads.size(); i++) {
c->typeset_item(noteheads[i]);
}
noteheads.set_size(0);
if (stem_) {
stem_ = 0;
}
- for (int i=0; i < c->slurs.sz(); i++) {
+ for (int i=0; i < c->slurs.size(); i++) {
Slur_req *sl = c->slurs[i];
if (sl->spantype == Span_req::STOP) {
- int idx = find_slur(sl->elt->voice_);
+ int idx = find_slur(sl->elt_l_->voice_);
if (idx < 0)
- error("can't find slur to end");
+ error_t("can't find slur to end; ", c->when());
pscore_->typeset_spanner(pending_slurs[idx],
s->theline);
}
Simple_walker::Simple_walker(Simple_staff*s)
- : Staff_walker(s, s->theline->pscore_)
+ : Staff_walker(s, s->theline->pscore_l_)
{
stem_ = 0;
beam_ =0;
{
processed_clef =false;
processed_key = false;
+ processed_bar_priority = 0;
}
int
Simple_walker::find_slur(const Voice *v)
{
- for (int i=0; i < pending_slur_reqs.sz(); i++) {
- if (pending_slur_reqs[i]->elt->voice_ == v)
+ for (int i=0; i < pending_slur_reqs.size(); i++) {
+ if (pending_slur_reqs[i]->elt_l_->voice_ == v)
return i;
}
return -1;