+1.3.94.uu1
+==========
+
+* Use music property for setting type. This prevents accidental
+forgotten copies.
+
+1.3.94.jcn3
+===========
+
+* Added Arpeggio and Trill elements to feta font.
+
+* Yet another bugfix for output-property (Han-Wen)
+
+* Made some fixes to les-nereides.
+
+* Fixed output-property (Dankje).
+
+* Added backend framework for arpeggios.
+
+* Fixes for les-nereides. Should we do asymmetric slurs...?
+
+* Don't print repeat bars at start of line.
+
+1.3.94
+======
+
1.3.93.uu1
==========
String to_id = (s >= 0) ? "up" : "down";
Auto_change_music const * auto_mus = dynamic_cast<Auto_change_music const* > (music_l_);
- change_to (child_iter_p_, auto_mus->what_str_, to_id);
+ String wh = ly_scm2string (auto_mus->get_mus_property ("what"));
+ change_to (child_iter_p_, wh, to_id);
}
}
}
#include "auto-change-music.hh"
-Auto_change_music::Auto_change_music (String what, Music * m)
+Auto_change_music::Auto_change_music (Music * m)
: Music_wrapper (m)
{
- what_str_ = what;
+ set_mus_property ("type", ly_symbol2scm ("auto-change-music"));
}
#include "change-iterator.hh"
#include "translator-group.hh"
-#include "change-translator.hh"
+#include "music.hh"
#include "debug.hh"
void
Change_iterator::error (String reason)
{
- Change_translator const * t = dynamic_cast<Change_translator const*> (music_l_);
- String to_type = t->change_to_type_str_;
- String to_id = t->change_to_id_str_;
+ String to_type = ly_scm2string (music_l_->get_mus_property ("change-to-type"));
+ String to_id = ly_scm2string (music_l_->get_mus_property ("change-to-id"));
String warn1 = _f ("can't change `%s' to `%s'", to_type, to_id)
+ ": " + reason;
+ report_to_l ()->type_str_ + " = `"
+ report_to_l ()->id_str_ + "': ";
warning (warn2);
- t->origin ()->warning (warn1);
+ music_l_->origin ()->warning (warn1);
}
/*
Translator_group * current = report_to_l ();
Translator_group * last = 0;
- Change_translator const * t = dynamic_cast<Change_translator const*> (music_l_);
- String to_type = t->change_to_type_str_;
- String to_id = t->change_to_id_str_;
+ String to_type = ly_scm2string (music_l_->get_mus_property ("change-to-type"));
+ String to_id = ly_scm2string (music_l_->get_mus_property ("change-to-id"));
+
/* find the type of translator that we're changing.
-/*
- change-translator.cc -- implement Change_translator
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "change-translator.hh"
-#include "debug.hh"
-
-
Context_specced_music::Context_specced_music(Music *m)
: Music_wrapper (m)
{
+ set_mus_property ("type", ly_symbol2scm ("context-specced-music"));
}
Grace_music::Grace_music (Music *p)
: Music_wrapper (p)
{
+ set_mus_property ("type", ly_symbol2scm ("grace-music"));
}
#include "music-wrapper.hh"
+
class Auto_change_music : public Music_wrapper
{
public:
- Auto_change_music (String what, Music *);
- String what_str_;
+ Auto_change_music (Music *);
+
};
-/*
- change-translator.hh -- declare Change_translator
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef CHANGE_TRANSLATOR_HH
-#define CHANGE_TRANSLATOR_HH
-
-#include "music.hh"
-
-class Change_translator : public Music
-{
-public:
- String change_to_type_str_;
- String change_to_id_str_;
-
-protected:
- VIRTUAL_COPY_CONS(Music);
-};
-
-
-#endif // CHANGE_TRANSLATOR_HH
#define OUTPUT_PROPERTY_HH
#include "music.hh"
-#include "protected-scm.hh"
-
+//#include "protected-scm.hh"
/*
class Output_property : public Music
{
public:
- Output_property(SCM, SCM, SCM);
+ VIRTUAL_COPY_CONS (Music);
+ Output_property (SCM, SCM, SCM);
};
#endif /* OUTPUT_PROPERTY_HH */
+
+#error
*/
class Request : public Music {
public:
+ Request ();
VIRTUAL_COPY_CONS(Music);
bool equal_b (Request const*) const;
protected:
+#if 0
/*
translation-property.hh -- declare Translation_property
class Translation_property : public Music
{
public:
+ Translation_property ();
VIRTUAL_COPY_CONS(Music);
};
#endif // PROPERTY_HH
+#endif
{
set_mus_property ("music", m->self_scm ());
set_mus_property ("lyrics", l->self_scm ());
+
+ set_mus_property ("type", ly_symbol2scm ("lyric-combine-music"));
}
UGH. too many includes.
*/
#include "debug.hh"
-#include "music-list.hh"
#include "music-iterator.hh"
#include "property-iterator.hh"
#include "request-chord-iterator.hh"
#include "sequential-music-iterator.hh"
#include "simultaneous-music-iterator.hh"
#include "translator-group.hh"
-#include "translation-property.hh"
#include "change-iterator.hh"
-#include "change-translator.hh"
#include "music-wrapper.hh"
#include "music-wrapper-iterator.hh"
#include "time-scaled-music-iterator.hh"
-#include "time-scaled-music.hh"
-#include "context-specced-music.hh"
#include "repeated-music.hh"
#include "folded-repeat-iterator.hh"
#include "unfolded-repeat-iterator.hh"
#include "grace-iterator.hh"
-#include "grace-music.hh"
-#include "lyric-combine-music.hh"
#include "lyric-combine-music-iterator.hh"
-#include "auto-change-music.hh"
#include "auto-change-iterator.hh"
-#include "part-combine-music.hh"
#include "part-combine-music-iterator.hh"
-#include "request.hh"
#include "simple-music-iterator.hh"
-#include "output-property.hh"
+#include "output-property-music-iterator.hh"
#include "chord-tremolo-iterator.hh"
+#include "context-specced-music.hh"
Music_iterator::Music_iterator ()
{
return SCM_EOL;
}
+
+
+/* We could do this decentrally:
+
+ - Declare a new smob-type, which stores a function ptr in its CDR
+ (and not a struct ptr). The function ptr has signature
+
+ Music_iterator* (*)()
+
+ - initialize all music with a set_mus_property("iterator-ctor"),
+
+ - do
+
+ func_ptr p = (func_ptr) gh_cdr (get_mus_property ("iterator-ctor"));
+ iter_p = (*p)();
+
+*/
+
Music_iterator*
Music_iterator::static_get_iterator_p (Music *m)
{
Music_iterator * p =0;
- /* It would be nice to do this decentrally, but the order of this is
- significant. */
- if (dynamic_cast<Request_chord *> (m))
+ SCM type = m->get_mus_property ("type") ;
+
+ if (type == ly_symbol2scm ("property-set"))
+ p = new Property_iterator;
+ else if (type == ly_symbol2scm ("property-push"))
+ p = new Push_property_iterator;
+ else if (type == ly_symbol2scm ("property-pop"))
+ p = new Pop_property_iterator;
+ else if (type == ly_symbol2scm ("output-property"))
+ p = new Output_property_music_iterator;
+ else if (type == ly_symbol2scm ("request-chord"))
p = new Request_chord_iterator;
- else if (dynamic_cast<Lyric_combine_music *> (m))
+ else if (type == ly_symbol2scm ("lyric-combine-music"))
p = new Lyric_combine_music_iterator;
- else if (dynamic_cast<Simultaneous_music *> (m))
+ else if (type == ly_symbol2scm ("simultaneous-music"))
p = new Simultaneous_music_iterator;
- else if (dynamic_cast<Sequential_music *> (m))
+ else if (type == ly_symbol2scm ("sequential-music"))
p = new Sequential_music_iterator;
- else if (dynamic_cast<Translation_property *> (m))
- p = new Property_iterator;
- else if (dynamic_cast<Change_translator *> (m))
+ else if (type == ly_symbol2scm ("change-translator"))
p = new Change_iterator;
- else if (dynamic_cast<Push_translation_property*> (m))
- p = new Push_property_iterator;
- else if (dynamic_cast<Pop_translation_property*> (m))
- p = new Pop_property_iterator;
- else if (dynamic_cast<Time_scaled_music *> (m))
+ else if (type == ly_symbol2scm ("time-scaled-music"))
p = new Time_scaled_music_iterator;
- else if (dynamic_cast<Grace_music *> (m))
+ else if (type == ly_symbol2scm ("grace-music"))
p = new Grace_iterator;
- else if (dynamic_cast<Auto_change_music *> (m))
+ else if (type == ly_symbol2scm ("auto-change-music"))
p = new Auto_change_iterator;
- else if (dynamic_cast<Part_combine_music *> (m))
+ else if (type == ly_symbol2scm ("part-combined-music"))
p = new Part_combine_music_iterator;
else if (dynamic_cast<Music_wrapper *> (m))
p = new Music_wrapper_iterator;
Simultaneous_music::Simultaneous_music(SCM head)
: Music_sequence (head)
{
-
+ set_mus_property ("type", ly_symbol2scm ("simultaneous-music"));
}
Sequential_music::Sequential_music(SCM head)
: Music_sequence (head)
{
+ set_mus_property ("type", ly_symbol2scm ("sequential-music"));
}
Request_chord::Request_chord(SCM s)
: Simultaneous_music (s)
{
+ set_mus_property ("type", ly_symbol2scm ("request-chord"));
}
Musical_pitch
Request_chord::to_relative_octave (Musical_pitch last)
{
- for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
- {
- Music * mus = unsmob_music (gh_car (s));
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music * mus = unsmob_music (gh_car (s));
if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
{
Musical_pitch &pit = m->pitch_;
*/
-#include "output-property.hh"
#include "engraver.hh"
#include "score-element.hh"
public:
VIRTUAL_COPY_CONS(Translator);
protected:
+
+ /*
+ should do this with \once and \push ?
+
+
+ \property Voice.outputProperties \push #pred = #modifier
+
+ where both MODIFIER and PRED are functions taking a
+ score-element.
+
+ */
+
- Link_array<Output_property> props_;
+ Link_array<Music> props_;
virtual void do_pre_move_processing ();
virtual void acknowledge_element (Score_element_info);
bool
Output_property_engraver::do_try_music (Music* m)
{
- if (Output_property * o = dynamic_cast<Output_property*> (m))
+ if (m->get_mus_property ("type") == ly_symbol2scm ("output-property"))
{
- props_.push (o);
+ props_.push (m);
return true;
}
return false;
{
for (int i=props_.size (); i--; )
{
- Output_property * o = props_[i];
+ Music * o = props_[i];
SCM pred = o->get_mus_property ("predicate");
/*
#include <iostream.h>
#include "translator-def.hh"
#include "lily-guile.hh"
-#include "translation-property.hh"
+
#include "lookup.hh"
#include "misc.hh"
#include "my-lily-lexer.hh"
#include "context-specced-music.hh"
#include "score.hh"
#include "music-list.hh"
-#include "change-translator.hh"
+
#include "file-results.hh"
#include "input.hh"
#include "scope.hh"
#include "grace-music.hh"
#include "auto-change-music.hh"
#include "part-combine-music.hh"
-#include "output-property.hh"
+
#include "chord.hh"
bool
/* tokens which are not keywords */
%token AUTOCHANGE
+%token ARPEGGIO
%token TEXTSCRIPT
%token ACCEPTS
%token ALTERNATIVE
{
THIS->parser_error (_("First argument must be a procedure taking 1 argument"));
}
-
- $$ = new Output_property (pred,$3, $5);
+
+ Music *m = new Music;
+ m->set_mus_property ("predicate", pred);
+ m->set_mus_property ("symbol", $3);
+ m->set_mus_property ("value", $5);
+ m->set_mus_property ("type", ly_symbol2scm ("output-property"));
+
+ $$ = m;
+ }
+ | MUSIC_IDENTIFIER {
+ $$ = unsmob_music ($1)->clone ();
}
- | MUSIC_IDENTIFIER { $$ = unsmob_music ($1)->clone (); }
| property_def
| translator_change
| Simple_music '*' bare_unsigned '/' bare_unsigned {
$$ = csm;
}
| AUTOCHANGE STRING Music {
- Auto_change_music * chm = new Auto_change_music (ly_scm2string ($2), $3);
+ Auto_change_music * chm = new Auto_change_music ($3);
+ chm->set_mus_property ("what", $2);
$$ = chm;
chm->set_spot (*$3->origin ());
translator_change:
TRANSLATOR STRING '=' STRING {
- Change_translator * t = new Change_translator;
- t-> change_to_type_str_ = ly_scm2string ($2);
- t-> change_to_id_str_ = ly_scm2string ($4);
+ Music * t = new Music;
+ t->set_mus_property ("type",
+ ly_symbol2scm ("change-translator"));
+ t-> set_mus_property ("change-to-type", $2);
+ t-> set_mus_property ("change-to-id", $4);
$$ = t;
$$->set_spot (THIS->here_input ());
property_def:
PROPERTY STRING '.' STRING '=' scalar {
- Translation_property *t = new Translation_property;
+ Music *t = new Music;
+ t->set_mus_property ("type", ly_symbol2scm ("property-set"));
t->set_mus_property ("symbol", scm_string_to_symbol ($4));
t->set_mus_property ("value", $6);
csm-> translator_type_str_ = ly_scm2string ($2);
}
| PROPERTY STRING '.' STRING PUSH embedded_scm '=' embedded_scm {
- Push_translation_property *t = new Push_translation_property;
-
+ Music *t = new Music;
+ t->set_mus_property ("type", ly_symbol2scm ("property-push"));
t->set_mus_property ("symbols", scm_string_to_symbol ($4));
t->set_mus_property ("element-property", $6);
t->set_mus_property ("element-value", $8);
csm-> translator_type_str_ = ly_scm2string ($2);
}
| PROPERTY STRING '.' STRING POP embedded_scm {
- Pop_translation_property *t = new Pop_translation_property;
-
+ Music *t = new Music;
+ t->set_mus_property ("type", ly_symbol2scm ("property-pop"));
t->set_mus_property ("symbols", scm_string_to_symbol ($4));
t->set_mus_property ("element-property", $6);
$1-> set_spot (THIS->here_input ());
}
| PARTIAL duration_length ';' {
- Translation_property * p = new Translation_property;
+ Music * p = new Music;
p->set_mus_property ("symbol", ly_symbol2scm ( "measurePosition"));
+ p->set_mus_property ("type", ly_symbol2scm ("property-set"));
+
Moment m = - $2->length_mom ();
p->set_mus_property ("value", m.make_scm());
delete $2; // ugh
a->set_spot (THIS->here_input ());
$$ = a;
}
+ | ARPEGGIO {
+ Arpeggio_req *a = new Arpeggio_req;
+ a->set_spot (THIS->here_input ());
+ $$ = a;
+ }
;
sup_quotes:
scm_unprotect_object (f->self_scm());
scm_unprotect_object (s->self_scm());
+
+ set_mus_property ("type", ly_symbol2scm ("part-combined-music"));
}
void
*/
#include "property-iterator.hh"
-#include "translation-property.hh"
+#include "music.hh"
#include "translator-def.hh"
#include "translator-group.hh"
: Music_wrapper (p)
{
last_pitch_ = element ()->to_relative_octave (def);
+ set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));
}
set_mus_property ("alternatives", alts->self_scm ());
scm_unprotect_object (alts->self_scm ());
}
+ set_mus_property ("type", ly_symbol2scm ("repeated-music"));
}
Repeated_music::Repeated_music (Repeated_music const &s)
return true;
}
+
+Request::Request ()
+{
+ set_mus_property ("type", ly_symbol2scm ("request"));
+}
num_i_ = n;
den_i_ = d;
compress (Moment (num_i_,den_i_));
+ set_mus_property ("type", ly_symbol2scm ("time-scaled-music"));
}
{
transpose_to_pitch_ = pit;
p->transpose (pit);
+ set_mus_property ("type", ly_symbol2scm ("transposed-music"));
}
Musical_pitch
Transposed_music::to_relative_octave (Musical_pitch p)
{
-
return p;
}