- SCM s = ly_symbol2scm (k);
- set_mus_property (s, v);
-}
+ if (to_boolean (get_property ("untransposable")))
+ return;
+
+ for (SCM s = this->get_property_alist (true); scm_is_pair (s); s = scm_cdr (s))
+ {
+ SCM entry = scm_car (s);
+ SCM val = scm_cdr (entry);
+
+ if (Pitch *p = unsmob_pitch (val))
+ {
+ Pitch transposed = p->transposed (delta);
+ scm_set_cdr_x (entry, transposed.smobbed_copy ());
+
+ if (abs (transposed.get_alteration ()) > DOUBLE_SHARP)
+ {
+ warning (_f ("Transposition by %s makes alteration larger than double",
+ delta.to_string ()));
+ }
+ }
+ }
+
+ SCM elt = get_property ("element");
+
+ if (Music *m = unsmob_music (elt))
+ m->transpose (delta);
+
+ transpose_music_list (get_property ("elements"), delta);
+
+ /*
+ UGH - how do this more generically?
+ */
+ SCM pa = get_property ("pitch-alist");
+ if (scm_is_pair (pa))
+ {
+ set_property ("pitch-alist", ly_transpose_key_alist (pa, delta.smobbed_copy ()));
+ }