*/
#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
*/
Molecule
-Chord_name::ly_word2molecule (SCM word, Real* x) const
+Chord_name::ly_word2molecule (Score_element * me, SCM word, Real* x)
{
*x = 0;
- SCM options = SCM_EOL;
+ SCM options_alist = SCM_EOL;
if (gh_pair_p (word))
{
- options = gh_cdr (word);
+ options_alist = gh_cdr (word);
word = gh_car (word);
}
/*
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);
String style;
- SCM s = scm_assoc (ly_symbol2scm ("style"), options);
+ SCM s = scm_assoc (ly_symbol2scm ("style"), options_alist);
if (s != SCM_BOOL_F)
{
style = ly_scm2string (gh_cdr (s));
/*
urg, `type'
*/
- s = scm_assoc (ly_symbol2scm ("type"), options);
+ s = scm_assoc (ly_symbol2scm ("type"), options_alist);
if (s != SCM_BOOL_F && ly_scm2string (gh_cdr (s)) == "super")
{
Real super_y = ex / 2;
size = -2;
}
- s = scm_assoc (ly_symbol2scm ("size"), options);
+ s = scm_assoc (ly_symbol2scm ("size"), options_alist);
if (s != SCM_BOOL_F)
{
size = gh_scm2int (gh_cdr (s));
}
- s = scm_assoc (ly_symbol2scm ("offset"), options);
+ s = scm_assoc (ly_symbol2scm ("offset"), options_alist);
if (s != SCM_BOOL_F)
{
// hmm
}
Molecule mol;
- s = scm_assoc (ly_symbol2scm ("font"), options);
+ 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;
;; 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))
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);
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_CALLBACKS(Chord_name);
+MAKE_SCHEME_CALLBACK(Chord_name,brew_molecule);
-Molecule
-Chord_name::do_brew_molecule () const
+SCM
+Chord_name::brew_molecule (SCM smob)
{
- SCM style = get_elt_property ("style");
- if (style == SCM_UNDEFINED)
+ Score_element *sc = unsmob_element (smob);
+ SCM style = sc->get_elt_property ("style");
+
+ if (!gh_string_p (style))
style = ly_str02scm ("banter");
- SCM inversion = get_elt_property ("inversion");
- if (inversion == SCM_UNDEFINED)
+ SCM inversion = sc-> get_elt_property ("inversion");
+ if (inversion == SCM_EOL)
inversion = SCM_BOOL_F;
- SCM bass = get_elt_property ("bass");
- if (bass == SCM_UNDEFINED)
+ SCM bass = sc->get_elt_property ("bass");
+ if (bass == SCM_EOL)
bass = SCM_BOOL_F;
- SCM pitches = get_elt_property ("pitches");
-
+ 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 ly_text2molecule (text);
-}
-
-Chord_name::Chord_name (SCM s)
- : Item (s)
-{
+ return ly_text2molecule (sc, text).create_scheme ();
}