]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/quote-iterator.cc
Issue 3117: Markup/string identifiers in lyrics cause an error
[lilypond.git] / lily / quote-iterator.cc
index c8bcee378b39128ce671dd14c8e7482bbbf3e1b0..86d01304a878f28f8ffb1ad27658b3645b84a2b7 100644 (file)
@@ -1,7 +1,7 @@
 /*
   This file is part of LilyPond, the GNU music typesetter.
 
-  Copyright (C) 2004--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
+  Copyright (C) 2004--2012 Han-Wen Nienhuys <hanwen@xs4all.nl>
 
   LilyPond is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -237,11 +237,21 @@ Quote_iterator::process (Moment m)
       Pitch *quote_pitch = unsmob_pitch (scm_cdar (entry));
 
       /*
-        The pitch that sounds like central C
+        The pitch that sounds when written central C is played.
       */
+      Pitch temp_pitch;
       Pitch *me_pitch = unsmob_pitch (get_music ()->get_property ("quoted-transposition"));
       if (!me_pitch)
         me_pitch = unsmob_pitch (get_outlet ()->get_property ("instrumentTransposition"));
+      else
+        {
+          // We are not going to win a beauty contest with this one,
+          // but it is slated for replacement and touches little code.
+          // quoted-transposition currently has a different sign
+          // convention than instrumentTransposition
+          temp_pitch = me_pitch->negated ();
+          me_pitch = &temp_pitch;
+        }
       SCM cid = get_music ()->get_property ("quoted-context-id");
       bool is_cue = scm_is_string (cid) && (ly_scm2string (cid) == "cue");
 
@@ -263,8 +273,9 @@ Quote_iterator::process (Moment m)
                   if (me_pitch)
                     mp = *me_pitch;
 
-                  Pitch diff = pitch_interval (qp, mp);
+                  Pitch diff = pitch_interval (mp, qp);
                   ev = ev->clone ();
+                  ev->make_transposable ();
 
                   transpose_mutable (ev->get_property_alist (true), diff);
                   transposed_musics_ = scm_cons (ev->unprotect (), transposed_musics_);