X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fproperty-engraver.cc;h=4ece8f391927ecc1ceb4b71c40fad3eedd5d9584;hb=f9a3a6ccb7cab73028819954312508f1bdb2dfff;hp=312e1022be9019c9bc9d6019aa8590a2e9cabb97;hpb=f988425624a6f6d1a48aea0ac0c1c84ff0857e56;p=lilypond.git diff --git a/lily/property-engraver.cc b/lily/property-engraver.cc index 312e1022be..4ece8f3919 100644 --- a/lily/property-engraver.cc +++ b/lily/property-engraver.cc @@ -10,7 +10,7 @@ #include "lily-guile.hh" #include "engraver.hh" #include "dictionary.hh" -#include "score-element.hh" +#include "grob.hh" #include "scm-hash.hh" #include "translator-group.hh" @@ -24,12 +24,12 @@ class Property_engraver : public Engraver UGH. Junk Dictionary */ Scheme_hash_table *prop_dict_; // junkme - void apply_properties (SCM, Score_element*, Translator_group *origin); + void apply_properties (SCM, Grob*, Translator_group *origin); protected: - virtual void acknowledge_element (Score_element_info ei); - virtual void do_creation_processing (); - virtual void do_removal_processing (); + virtual void acknowledge_grob (Grob_info ei); + virtual void initialize (); + virtual void finalize (); public: ~Property_engraver(); Property_engraver(); @@ -43,7 +43,7 @@ Property_engraver::Property_engraver() prop_dict_ = 0; } void -Property_engraver::do_removal_processing() +Property_engraver::finalize() { } @@ -55,7 +55,7 @@ Property_engraver::~Property_engraver () } void -Property_engraver::do_creation_processing () +Property_engraver::initialize () { prop_dict_ = new Scheme_hash_table; @@ -68,9 +68,9 @@ Property_engraver::do_creation_processing () } void -Property_engraver::acknowledge_element (Score_element_info i) +Property_engraver::acknowledge_grob (Grob_info i) { - SCM ifs = i.elem_l_->get_elt_property ("interfaces"); + SCM ifs = i.elem_l_->get_grob_property ("interfaces"); SCM props; for (; gh_pair_p (ifs); ifs = gh_cdr (ifs)) { @@ -88,7 +88,7 @@ Property_engraver::acknowledge_element (Score_element_info i) void -Property_engraver::apply_properties (SCM p, Score_element *e, Translator_group*origin) +Property_engraver::apply_properties (SCM p, Grob *e, Translator_group*origin) { for (; gh_pair_p (p); p = gh_cdr (p)) { @@ -109,45 +109,44 @@ Property_engraver::apply_properties (SCM p, Score_element *e, Translator_group*o SCM val = get_property (prop_sym); - if (val == SCM_UNDEFINED) + if (val == SCM_EOL) ; // Not defined in context. else if (gh_apply (type_p, scm_listify (val, SCM_UNDEFINED)) == SCM_BOOL_T) // defined and right type: do it { - e->set_elt_property (elt_prop_sym, val); - - String msg = "Property_engraver is deprecated. Use\n \\property " - + origin->type_str_ - + ".basicXXXXProperties" - + " \\push #'" - + ly_symbol2string (elt_prop_sym) - + " = #"; - warning (msg); - scm_display (val, scm_current_error_port ()); + e->set_grob_property (elt_prop_sym, val); + + SCM meta = e->get_grob_property ("meta"); + SCM name = scm_assoc (ly_symbol2scm ("name"), meta); + warning (_f ("%s is deprecated. Use\n \\property %s.%s \\override #'%s = #%s", + ly_symbol2string (prop_sym).ch_C (), + origin->type_str_.ch_C (), + ly_scm2string (gh_cdr (name)).ch_C (), + ly_symbol2string (elt_prop_sym).ch_C (), + ly_scm2string (ly_write2scm (val)).ch_C ())); } else /* - we don't print a warning if VAL == #f, because we would + we don't print a warning if VAL == (), because we would get lots of warnings when we restore stuff to default, eg. - slurDash = #1 [...] slurDash = ##f + slurDash = #1 [...] slurDash = () should not cause "type error: slurDash expects number not - boolean" + boolean */ - if (val != SCM_BOOL_F) + if (val != SCM_EOL) { // not the right type: error message. SCM errport = scm_current_error_port (); - warning (_("Wrong type for property")); - scm_display (prop_sym, errport); - scm_puts (", type predicate: ", errport); - scm_display (type_p, errport); - scm_puts (", value found: ", errport); - scm_display (val, errport); - scm_puts (" type: ", errport); - scm_display (ly_type (val), errport); + SCM typefunc = scm_eval2 (ly_symbol2scm ("type-name"), SCM_EOL); + SCM type_name = gh_call1 (typefunc, type_p); + warning (_f ("Wrong type for property: %s, type: %s, value found: %s, type: %s", + ly_symbol2string (prop_sym).ch_C (), + ly_scm2string (type_name).ch_C (), + ly_scm2string (ly_write2scm (val)).ch_C (), + ly_scm2string (ly_type (val)).ch_C ())); scm_puts ("\n", errport); } }