]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/chord-name.cc
release: 1.3.75
[lilypond.git] / lily / chord-name.cc
index b2ed2442674dcb42b82a8ed34c22b8e6a6caab0e..62562e08ec1a96e57a62a66a171bdbb003211d0c 100644 (file)
@@ -7,14 +7,10 @@
 */
 
 #include "chord-name.hh"
-#include "musical-request.hh"
-#include "warn.hh"
-#include "debug.hh"
 #include "molecule.hh"
 #include "paper-def.hh"
 #include "lookup.hh"
-#include "staff-symbol-referencer.hh"
-
+#include "score-element.hh"
 
 /*
   TODO: move text lookup out of Chord_name
@@ -27,7 +23,7 @@
  */
 
 Molecule
-Chord_name::ly_word2molecule (SCM word, Real* x) const
+Chord_name::ly_word2molecule (Score_element * me, SCM word, Real* x) 
 {
   *x = 0;
 
@@ -43,10 +39,10 @@ Chord_name::ly_word2molecule (SCM word, Real* x) const
       /*
        UGH. Should read from font metric structure.
       */
-      Real ex = lookup_l ()->text ("", "x",
-                                  paper_l ()).extent (Y_AXIS).length ();
-      Real em = lookup_l ()->text ("", "m",
-                                  paper_l ()).extent (X_AXIS).length ();
+      Real ex = me->lookup_l ()->text ("", "x",
+                                  me->paper_l ()).extent (Y_AXIS).length ();
+      Real em = me->lookup_l ()->text ("", "m",
+                                  me->paper_l ()).extent (X_AXIS).length ();
 
       String w = ly_scm2string (word);
 
@@ -90,9 +86,9 @@ Chord_name::ly_word2molecule (SCM word, Real* x) const
       Molecule mol;
       s = scm_assoc (ly_symbol2scm ("font"), options_alist);
       if (s != SCM_BOOL_F && ly_scm2string (gh_cdr (s)) == "feta")
-        mol = paper_l ()->lookup_l (size)->afm_find (w);
+        mol = me->paper_l ()->lookup_l (size)->afm_find (w);
       else
-       mol = paper_l ()->lookup_l (size)->text (style, w, paper_l ());
+       mol = me->paper_l ()->lookup_l (size)->text (style, w, me->paper_l ());
 
       mol.translate (offset);
       return mol;
@@ -106,7 +102,7 @@ Chord_name::ly_word2molecule (SCM word, Real* x) const
   ;; property: align, kern, font (?), size
  */
 Molecule
-Chord_name::ly_text2molecule (SCM text) const
+Chord_name::ly_text2molecule (Score_element * me, SCM text) 
 {
   Molecule mol;
   if (gh_list_p (text))
@@ -114,7 +110,7 @@ Chord_name::ly_text2molecule (SCM text) const
       while (gh_cdr (text) != SCM_EOL)
         {
          Real x;
-         Molecule m = ly_word2molecule (gh_car (text), &x);
+         Molecule m = ly_word2molecule (me, gh_car (text), &x);
          if (!m.empty_b ())
            mol.add_at_edge (X_AXIS, RIGHT, m, x);
          text = gh_cdr (text);
@@ -122,43 +118,37 @@ Chord_name::ly_text2molecule (SCM text) const
       text = gh_car (text);
     }  
   Real x;
-  Molecule m = ly_word2molecule (text, &x);
+  Molecule m = ly_word2molecule (me,text, &x);
   if (!m.empty_b ())
     mol.add_at_edge (X_AXIS, RIGHT, m, x);
   return mol;
 }
 
-MAKE_SCHEME_SCORE_ELEMENT_NON_DEFAULT_CALLBACKS(Chord_name);
+MAKE_SCHEME_CALLBACK(Chord_name,brew_molecule);
 
 SCM
-Chord_name::scheme_molecule (SCM smob) 
+Chord_name::brew_molecule (SCM smob) 
 {
   Score_element *sc = unsmob_element (smob);
   SCM style = sc->get_elt_property ("style");
-  if (style == SCM_UNDEFINED)
+
+  if (!gh_string_p (style))
     style = ly_str02scm ("banter");
 
   SCM inversion = sc-> get_elt_property ("inversion");
-  if (inversion == SCM_UNDEFINED)
+  if (inversion == SCM_EOL)
     inversion = SCM_BOOL_F;
 
   SCM bass =  sc->get_elt_property ("bass");
-  if (bass == SCM_UNDEFINED)
+  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));
 
-  return dynamic_cast<Chord_name*> (sc)->
-    ly_text2molecule (text).create_scheme ();
-}
-
-Chord_name::Chord_name (SCM s)
-  : Item (s)
-{
+  return ly_text2molecule (sc, text).create_scheme ();
 }