From efa1124ecea04febb6be26b164e23ef05bac1801 Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 26 Mar 2002 23:57:07 +0000 Subject: [PATCH] lilypond-1.3.95 --- CHANGES | 26 +++++++++++ lily/auto-change-iterator.cc | 3 +- lily/auto-change-music.cc | 4 +- lily/change-iterator.cc | 15 +++---- lily/change-translator.cc | 12 ----- lily/context-specced-music.cc | 1 + lily/grace-music.cc | 1 + lily/include/auto-change-music.hh | 5 ++- lily/include/change-translator.hh | 25 ----------- lily/include/output-property.hh | 8 ++-- lily/include/request.hh | 1 + lily/include/translation-property.hh | 3 ++ lily/lyric-combine-music.cc | 2 + lily/music-iterator.cc | 67 ++++++++++++++++------------ lily/music-list.cc | 10 +++-- lily/output-property-engraver.cc | 21 ++++++--- lily/parser.yy | 52 ++++++++++++++------- lily/part-combine-music.cc | 2 + lily/property-iterator.cc | 2 +- lily/relative-octave-music.cc | 1 + lily/repeated-music.cc | 1 + lily/request.cc | 5 +++ lily/time-scaled-music.cc | 1 + lily/transposed-music.cc | 2 +- 24 files changed, 162 insertions(+), 108 deletions(-) diff --git a/CHANGES b/CHANGES index e414a5881f..2092760b67 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,29 @@ +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 ========== diff --git a/lily/auto-change-iterator.cc b/lily/auto-change-iterator.cc index cf291348c0..605363c488 100644 --- a/lily/auto-change-iterator.cc +++ b/lily/auto-change-iterator.cc @@ -125,7 +125,8 @@ Auto_change_iterator::process (Moment m) String to_id = (s >= 0) ? "up" : "down"; Auto_change_music const * auto_mus = dynamic_cast (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); } } } diff --git a/lily/auto-change-music.cc b/lily/auto-change-music.cc index 82871ffd7d..c75cb9e605 100644 --- a/lily/auto-change-music.cc +++ b/lily/auto-change-music.cc @@ -10,8 +10,8 @@ #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")); } diff --git a/lily/change-iterator.cc b/lily/change-iterator.cc index 7bd04e1e89..d1fc2006f0 100644 --- a/lily/change-iterator.cc +++ b/lily/change-iterator.cc @@ -8,16 +8,15 @@ #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 (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; @@ -28,7 +27,7 @@ Change_iterator::error (String reason) + report_to_l ()->type_str_ + " = `" + report_to_l ()->id_str_ + "': "; warning (warn2); - t->origin ()->warning (warn1); + music_l_->origin ()->warning (warn1); } /* @@ -40,9 +39,9 @@ Change_iterator::process (Moment m) Translator_group * current = report_to_l (); Translator_group * last = 0; - Change_translator const * t = dynamic_cast (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. diff --git a/lily/change-translator.cc b/lily/change-translator.cc index 144aefd229..8b13789179 100644 --- a/lily/change-translator.cc +++ b/lily/change-translator.cc @@ -1,13 +1 @@ -/* - change-translator.cc -- implement Change_translator - - source file of the GNU LilyPond music typesetter - - (c) 1997--2000 Han-Wen Nienhuys -*/ - -#include "change-translator.hh" -#include "debug.hh" - - diff --git a/lily/context-specced-music.cc b/lily/context-specced-music.cc index eb3005964e..cf3f520773 100644 --- a/lily/context-specced-music.cc +++ b/lily/context-specced-music.cc @@ -11,4 +11,5 @@ Context_specced_music::Context_specced_music(Music *m) : Music_wrapper (m) { + set_mus_property ("type", ly_symbol2scm ("context-specced-music")); } diff --git a/lily/grace-music.cc b/lily/grace-music.cc index 50c0f155f6..532bd07aaf 100644 --- a/lily/grace-music.cc +++ b/lily/grace-music.cc @@ -24,4 +24,5 @@ Grace_music::length_mom () const Grace_music::Grace_music (Music *p) : Music_wrapper (p) { + set_mus_property ("type", ly_symbol2scm ("grace-music")); } diff --git a/lily/include/auto-change-music.hh b/lily/include/auto-change-music.hh index 2295eb2223..f96a354fcb 100644 --- a/lily/include/auto-change-music.hh +++ b/lily/include/auto-change-music.hh @@ -12,11 +12,12 @@ #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 *); + }; diff --git a/lily/include/change-translator.hh b/lily/include/change-translator.hh index 7dc774ca37..8b13789179 100644 --- a/lily/include/change-translator.hh +++ b/lily/include/change-translator.hh @@ -1,26 +1 @@ -/* - change-translator.hh -- declare Change_translator - source file of the GNU LilyPond music typesetter - - (c) 1997--2000 Han-Wen Nienhuys -*/ - - -#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 diff --git a/lily/include/output-property.hh b/lily/include/output-property.hh index 8590868d81..01e8ffbf13 100644 --- a/lily/include/output-property.hh +++ b/lily/include/output-property.hh @@ -11,8 +11,7 @@ #define OUTPUT_PROPERTY_HH #include "music.hh" -#include "protected-scm.hh" - +//#include "protected-scm.hh" /* @@ -24,7 +23,10 @@ props: 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 diff --git a/lily/include/request.hh b/lily/include/request.hh index f1cd68f483..3792ee507b 100644 --- a/lily/include/request.hh +++ b/lily/include/request.hh @@ -26,6 +26,7 @@ */ class Request : public Music { public: + Request (); VIRTUAL_COPY_CONS(Music); bool equal_b (Request const*) const; protected: diff --git a/lily/include/translation-property.hh b/lily/include/translation-property.hh index c8a4950783..dc332df200 100644 --- a/lily/include/translation-property.hh +++ b/lily/include/translation-property.hh @@ -1,3 +1,4 @@ +#if 0 /* translation-property.hh -- declare Translation_property @@ -23,6 +24,7 @@ class Translation_property : public Music { public: + Translation_property (); VIRTUAL_COPY_CONS(Music); }; @@ -61,3 +63,4 @@ void apply_pop_property (Translator_group*trans, SCM syms, SCM eprop); #endif // PROPERTY_HH +#endif diff --git a/lily/lyric-combine-music.cc b/lily/lyric-combine-music.cc index 2059314b25..dbbbfab278 100644 --- a/lily/lyric-combine-music.cc +++ b/lily/lyric-combine-music.cc @@ -14,6 +14,8 @@ Lyric_combine_music::Lyric_combine_music (Music * m, Music * l) { set_mus_property ("music", m->self_scm ()); set_mus_property ("lyrics", l->self_scm ()); + + set_mus_property ("type", ly_symbol2scm ("lyric-combine-music")); } diff --git a/lily/music-iterator.cc b/lily/music-iterator.cc index 8c3c2fe3a6..4a2c2ec95e 100644 --- a/lily/music-iterator.cc +++ b/lily/music-iterator.cc @@ -10,36 +10,27 @@ 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 () { @@ -108,36 +99,56 @@ Music_iterator::get_music (Moment)const 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 (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 (m)) + else if (type == ly_symbol2scm ("lyric-combine-music")) p = new Lyric_combine_music_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("simultaneous-music")) p = new Simultaneous_music_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("sequential-music")) p = new Sequential_music_iterator; - else if (dynamic_cast (m)) - p = new Property_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("change-translator")) p = new Change_iterator; - else if (dynamic_cast (m)) - p = new Push_property_iterator; - else if (dynamic_cast (m)) - p = new Pop_property_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("time-scaled-music")) p = new Time_scaled_music_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("grace-music")) p = new Grace_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("auto-change-music")) p = new Auto_change_iterator; - else if (dynamic_cast (m)) + else if (type == ly_symbol2scm ("part-combined-music")) p = new Part_combine_music_iterator; else if (dynamic_cast (m)) p = new Music_wrapper_iterator; diff --git a/lily/music-list.cc b/lily/music-list.cc index 4df9c53da4..81eee92a02 100644 --- a/lily/music-list.cc +++ b/lily/music-list.cc @@ -24,12 +24,13 @@ Simultaneous_music::length_mom () const 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")); } @@ -48,14 +49,15 @@ Simultaneous_music::to_relative_octave (Musical_pitch p) 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 (mus)) { Musical_pitch &pit = m->pitch_; diff --git a/lily/output-property-engraver.cc b/lily/output-property-engraver.cc index b20f3d7ca2..ad596bea3e 100644 --- a/lily/output-property-engraver.cc +++ b/lily/output-property-engraver.cc @@ -7,7 +7,6 @@ */ -#include "output-property.hh" #include "engraver.hh" #include "score-element.hh" @@ -16,8 +15,20 @@ class Output_property_engraver : public Engraver 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 props_; + Link_array props_; virtual void do_pre_move_processing (); virtual void acknowledge_element (Score_element_info); @@ -28,9 +39,9 @@ protected: bool Output_property_engraver::do_try_music (Music* m) { - if (Output_property * o = dynamic_cast (m)) + if (m->get_mus_property ("type") == ly_symbol2scm ("output-property")) { - props_.push (o); + props_.push (m); return true; } return false; @@ -41,7 +52,7 @@ Output_property_engraver::acknowledge_element (Score_element_info inf) { for (int i=props_.size (); i--; ) { - Output_property * o = props_[i]; + Music * o = props_[i]; SCM pred = o->get_mus_property ("predicate"); /* diff --git a/lily/parser.yy b/lily/parser.yy index 70b04f7680..8d64ac3d47 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -12,7 +12,7 @@ #include #include "translator-def.hh" #include "lily-guile.hh" -#include "translation-property.hh" + #include "lookup.hh" #include "misc.hh" #include "my-lily-lexer.hh" @@ -29,7 +29,7 @@ #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" @@ -42,7 +42,7 @@ #include "grace-music.hh" #include "auto-change-music.hh" #include "part-combine-music.hh" -#include "output-property.hh" + #include "chord.hh" bool @@ -127,6 +127,7 @@ yylex (YYSTYPE *s, void * v_l) /* tokens which are not keywords */ %token AUTOCHANGE +%token ARPEGGIO %token TEXTSCRIPT %token ACCEPTS %token ALTERNATIVE @@ -691,10 +692,18 @@ Simple_music: { 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 { @@ -719,7 +728,8 @@ Composite_music: $$ = 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 ()); @@ -804,9 +814,11 @@ part_combined_music: 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 ()); @@ -815,8 +827,9 @@ translator_change: 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); @@ -827,8 +840,8 @@ property_def: 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); @@ -839,8 +852,8 @@ property_def: 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); @@ -883,8 +896,10 @@ command_element: $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 @@ -1068,6 +1083,11 @@ verbose_request: a->set_spot (THIS->here_input ()); $$ = a; } + | ARPEGGIO { + Arpeggio_req *a = new Arpeggio_req; + a->set_spot (THIS->here_input ()); + $$ = a; + } ; sup_quotes: diff --git a/lily/part-combine-music.cc b/lily/part-combine-music.cc index c6ee771304..155f2de24c 100644 --- a/lily/part-combine-music.cc +++ b/lily/part-combine-music.cc @@ -18,6 +18,8 @@ Part_combine_music::Part_combine_music (String what, Music * f, Music * s) scm_unprotect_object (f->self_scm()); scm_unprotect_object (s->self_scm()); + + set_mus_property ("type", ly_symbol2scm ("part-combined-music")); } void diff --git a/lily/property-iterator.cc b/lily/property-iterator.cc index ea8273d761..3799ba0e2f 100644 --- a/lily/property-iterator.cc +++ b/lily/property-iterator.cc @@ -7,7 +7,7 @@ */ #include "property-iterator.hh" -#include "translation-property.hh" +#include "music.hh" #include "translator-def.hh" #include "translator-group.hh" diff --git a/lily/relative-octave-music.cc b/lily/relative-octave-music.cc index 5f8081afa0..f339aa92ca 100644 --- a/lily/relative-octave-music.cc +++ b/lily/relative-octave-music.cc @@ -21,6 +21,7 @@ Relative_octave_music::Relative_octave_music(Music*p,Musical_pitch def) : Music_wrapper (p) { last_pitch_ = element ()->to_relative_octave (def); + set_mus_property ("type", ly_symbol2scm ("relative-octave-music")); } diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc index baae892504..4cdd682761 100644 --- a/lily/repeated-music.cc +++ b/lily/repeated-music.cc @@ -40,6 +40,7 @@ Repeated_music::Repeated_music(Music *beg, int times, Music_sequence * alts) 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) diff --git a/lily/request.cc b/lily/request.cc index ad9223d274..3b39385c4b 100644 --- a/lily/request.cc +++ b/lily/request.cc @@ -23,3 +23,8 @@ Request::do_equal_b (Request const*) const return true; } + +Request::Request () +{ + set_mus_property ("type", ly_symbol2scm ("request")); +} diff --git a/lily/time-scaled-music.cc b/lily/time-scaled-music.cc index 4aa1d037af..75547b17b4 100644 --- a/lily/time-scaled-music.cc +++ b/lily/time-scaled-music.cc @@ -16,6 +16,7 @@ Time_scaled_music::Time_scaled_music (int n, int d,Music *mp) num_i_ = n; den_i_ = d; compress (Moment (num_i_,den_i_)); + set_mus_property ("type", ly_symbol2scm ("time-scaled-music")); } diff --git a/lily/transposed-music.cc b/lily/transposed-music.cc index 7c7f38ac2d..e22f19f8f2 100644 --- a/lily/transposed-music.cc +++ b/lily/transposed-music.cc @@ -15,13 +15,13 @@ Transposed_music::Transposed_music (Music *p, Musical_pitch pit) { 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; } -- 2.39.5