#include "paper-def.hh"
#include "lookup.hh"
#include "score-element.hh"
+#include "paper-column.hh"
+#include "line-of-score.hh"
/*
TODO: move text lookup out of Chord_name
return mol;
}
-MAKE_SCHEME_CALLBACK(Chord_name,brew_molecule);
+MAKE_SCHEME_CALLBACK (Chord_name, after_line_breaking);
+SCM
+Chord_name::after_line_breaking (SCM smob)
+{
+ Item* me = dynamic_cast<Item*> (unsmob_element (smob));
+ assert (me);
+
+ SCM s = me->get_elt_property ("begin-of-line-visible");
+ if (to_boolean (s))
+ {
+ if (Paper_column::rank_i (me->column_l ()) -
+ /*
+ hmm, what's my column number in this line?
+ why doesn't this work?
+ me->line_l ()->rank_i_ > 2)
+ */
+ me->line_l ()->spanned_rank_iv ()[LEFT] > 1)
+ me->suicide ();
+ }
+ return SCM_UNSPECIFIED;
+}
+MAKE_SCHEME_CALLBACK (Chord_name, brew_molecule);
SCM
Chord_name::brew_molecule (SCM smob)
{
- Score_element *sc = unsmob_element (smob);
- SCM style = sc->get_elt_property ("style");
+ Score_element *me = unsmob_element (smob);
+ SCM style = me->get_elt_property ("style");
if (!gh_string_p (style))
style = ly_str02scm ("banter");
- SCM inversion = sc-> get_elt_property ("inversion");
+ SCM inversion = me-> get_elt_property ("inversion");
if (inversion == SCM_EOL)
inversion = SCM_BOOL_F;
- SCM bass = sc->get_elt_property ("bass");
+ SCM bass = me->get_elt_property ("bass");
if (bass == SCM_EOL)
bass = SCM_BOOL_F;
- SCM pitches = sc->get_elt_property ("pitches");
- SCM text = scm_eval (gh_list (ly_symbol2scm ("chord::user-name"),
- style,
- ly_quote_scm (pitches),
- ly_quote_scm (gh_cons (inversion, bass)),
- SCM_UNDEFINED));
+ SCM pitches = me->get_elt_property ("pitches");
+ SCM func = me->get_elt_property (ly_symbol2scm ("chord-name-function"));
+ SCM text = gh_call3 (func, style, ly_quote_scm (pitches), ly_quote_scm (gh_cons (inversion, bass)));
- return ly_text2molecule (sc, text).create_scheme ();
+ return ly_text2molecule (me, text).create_scheme ();
}