]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/chord-name.cc
release: 1.3.93
[lilypond.git] / lily / chord-name.cc
index c05ebfc18799a7e40b2c0d9af2ee37f0831cc7de..80955b20d7404b1063057bbb156dae20f685fd0d 100644 (file)
@@ -11,6 +11,8 @@
 #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
@@ -124,31 +126,49 @@ Chord_name::ly_text2molecule (Score_element * me, SCM text)
   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");
-  if (inversion != SCM_BOOL_T)
+  SCM inversion = me-> get_elt_property ("inversion");
+  if (inversion == SCM_EOL)
     inversion = SCM_BOOL_F;
 
-  SCM bass =  sc->get_elt_property ("bass");
-  if (bass != SCM_BOOL_T)
+  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 ();
 }