]> git.donarmstrong.com Git - lilypond.git/commitdiff
parser.yy: strip music-wrapper-music inside of EventChord
authorDavid Kastrup <dak@gnu.org>
Sun, 22 Jan 2012 17:39:59 +0000 (18:39 +0100)
committerDavid Kastrup <dak@gnu.org>
Wed, 25 Jan 2012 20:57:28 +0000 (21:57 +0100)
This makes things like

<fis \transpose c g fis>

work.

lily/event-chord-iterator.cc
lily/parser.yy

index 899287a99990036b4ccdf78a0c6638bd56254f40..4f3c081e269bd13b6e6a470cf2886c12f9554769 100644 (file)
@@ -47,7 +47,10 @@ Event_chord_iterator::process (Moment m)
            scm_is_pair (s); s = scm_cdr (s))
         {
           Music *mus = unsmob_music (scm_car (s));
-          report_event (mus);
+         while (mus && mus->is_mus_type ("music-wrapper-music"))
+           mus = unsmob_music (mus->get_property ("element"));
+         if (mus)
+           report_event (mus);
         }
       for (SCM s = get_music ()->get_property ("events");
            scm_is_pair (s); s = scm_cdr (s))
index e913d88cf1df3ecfe52e41f136643026d9c58687..bc89663f9e4a05a5f2f95151f935227b035f3380 100644 (file)
@@ -2146,7 +2146,12 @@ chord_body_element:
        }
        | music_function_chord_body
        {
-               if (!unsmob_music ($$)->is_mus_type ("rhythmic-event")) {
+               Music *m = unsmob_music ($1);
+
+               while (m && m->is_mus_type ("music-wrapper-music"))
+                       m = unsmob_music (m->get_property ("element"));
+
+               if (!(m && m->is_mus_type ("rhythmic-event"))) {
                        parser->parser_error (@$, _ ("not a rhythmic event"));
                        $$ = SCM_UNDEFINED;
                }