#include "engraver.hh"
#include "chord-name.hh"
-#include "chord.hh"
#include "event.hh"
#include "paper-def.hh"
#include "font-interface.hh"
#include "pitch.hh"
#include "protected-scm.hh"
#include "translator-group.hh"
+#include "warn.hh"
class New_chord_name_engraver : public Engraver
{
SCM inversion = SCM_EOL;
SCM pitches = SCM_EOL;
+ Music* inversion_event = 0;
for (int i =0 ; i < notes_.size (); i++)
{
Music *n = notes_[i];
- SCM p = n->get_mus_property ("pitch");;
+ SCM p = n->get_mus_property ("pitch");
+ if (!unsmob_pitch (p))
+ continue;
+
if (n->get_mus_property ("inversion") == SCM_BOOL_T)
- inversion = p;
+ {
+ inversion_event = n;
+ inversion = p;
+ }
else if (n->get_mus_property ("bass") == SCM_BOOL_T)
bass = p;
else
pitches = gh_cons (p, pitches);
}
+ if (inversion_event)
+ {
+ SCM oct = inversion_event->get_mus_property ("octavation");
+ if (gh_number_p (oct))
+ {
+ Pitch *p = unsmob_pitch (inversion_event->get_mus_property ("pitch"));
+ int octavation = gh_scm2int (oct);
+ Pitch orig = p->transposed (Pitch (-octavation, 0,0));
+
+ pitches= gh_cons (orig.smobbed_copy (), pitches);
+ }
+ else
+ programming_error ("Inversion does not have original pitch.");
+ }
+
pitches = scm_sort_list (pitches, Pitch::less_p_proc);
SCM name_proc = get_property ("chordNameFunction");