]> 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 /*
6   TODO: insert support for smaller cautionaries, tie-break-reminders.
7   Either here or in new-accidental-engraver.
8
9   'accidentals should go, for a single 'accidental property -- see
10   accidental-placement.cc
11
12 */
13 class Accidental_interface
14 {
15 public:
16   DECLARE_SCHEME_CALLBACK (brew_molecule, (SCM));
17   static bool has_interface (Grob*);
18 };
19
20 Molecule
21 parenthesize (Grob*me, Molecule m)
22 {
23   Molecule open = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-leftparen"));
24   Molecule close = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-rightparen"));
25   m.add_at_edge (X_AXIS, LEFT, Molecule (open), 0);
26   m.add_at_edge (X_AXIS, RIGHT, Molecule (close), 0);
27
28   return m;
29 }
30
31 MAKE_SCHEME_CALLBACK (Accidental_interface,brew_molecule,1);
32 SCM
33 Accidental_interface::brew_molecule (SCM smob)
34 {
35   Grob *me = unsmob_grob (smob);
36
37   SCM scm_style = me->get_grob_property ("style");
38  
39   String style;
40   if (gh_symbol_p (scm_style))
41     {
42       style = ly_scm2string (scm_symbol_to_string (scm_style));
43     }
44   else
45     {
46       /*
47         preferably no name for the default style.
48        */
49       style = "";
50     }
51
52   
53   Molecule mol;
54   for (SCM s = me->get_grob_property ("accidentals");
55        gh_pair_p (s);  s= gh_cdr (s))
56     {
57       SCM entry  = gh_car (s);
58       
59       
60       Molecule acc (Font_interface::get_default_font (me)->
61                     find_by_name (String ("accidentals-") +
62                                   style +
63                                   to_str (gh_scm2int(entry))));
64       
65       mol.add_at_edge (X_AXIS,  RIGHT, acc, 0.1);
66     }
67
68 #if 0
69   // TODO.
70   if (to_boolean (me->get_grob_property ("parenthesize")))
71     mol = parenthesize (me, mol); 
72 #endif
73   return mol.smobbed_copy();
74 }
75
76
77
78 ADD_INTERFACE(Accidental_interface, "accidental-interface",
79               "a single accidental",
80               "style accidentals");