]> git.donarmstrong.com Git - lilypond.git/blob - lily/accidental.cc
''
[lilypond.git] / lily / accidental.cc
1 #include "font-interface.hh"
2 #include "item.hh"
3 #include "molecule.hh"
4
5 class Accidental_interface
6 {
7 public:
8   DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM));
9   static bool has_interface (Grob*);
10 };
11
12 Molecule
13 parenthesize (Grob*me, Molecule m)
14 {
15   Molecule open = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-leftparen"));
16   Molecule close = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-rightparen"));
17   m.add_at_edge (X_AXIS, LEFT, Molecule (open), 0);
18   m.add_at_edge (X_AXIS, RIGHT, Molecule (close), 0);
19
20   return m;
21 }
22
23 MAKE_SCHEME_CALLBACK (Accidental_interface,brew_molecule,1);
24 SCM
25 Accidental_interface::brew_molecule (SCM smob)
26 {
27   Grob *me = unsmob_grob (smob);
28
29   SCM scm_style = me->get_grob_property ("style");
30  
31   String style;
32   if (gh_symbol_p (scm_style))
33     {
34       style = ly_scm2string (scm_symbol_to_string (scm_style));
35     }
36   else
37     {
38       /*
39         preferably no name for the default style.
40        */
41       style = "";
42     }
43
44   
45   Molecule mol;
46   for (SCM s = me->get_grob_property ("accidentals");
47        gh_pair_p (s);  s= gh_cdr (s))
48     {
49       SCM entry  = gh_car (s);
50       
51       
52       Molecule acc (Font_interface::get_default_font (me)->
53                     find_by_name (String ("accidentals-") +
54                                   style +
55                                   to_str (gh_scm2int(entry))));
56       
57       mol.add_at_edge (X_AXIS,  RIGHT, acc, 0.0);
58     }
59
60   if (to_boolean (me->get_grob_property ("parenthesize")))
61     mol = parenthesize (me, mol); 
62   
63   return mol.smobbed_copy();
64 }
65
66
67
68 ADD_INTERFACE(Accidental_interface, "accidental-interface",
69               "a single accidental",
70               "accidentals parenthesize");