]> git.donarmstrong.com Git - lilypond.git/blob - lily/accidental.cc
tie accs
[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   DECLARE_SCHEME_CALLBACK (after_line_breaking, (SCM));  
18   static bool has_interface (Grob*);
19 };
20
21 Molecule
22 parenthesize (Grob*me, Molecule m)
23 {
24   Molecule open = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-leftparen"));
25   Molecule close = Font_interface::get_default_font (me)->find_by_name (String ("accidentals-rightparen"));
26   m.add_at_edge (X_AXIS, LEFT, Molecule (open), 0);
27   m.add_at_edge (X_AXIS, RIGHT, Molecule (close), 0);
28
29   return m;
30 }
31
32
33 MAKE_SCHEME_CALLBACK (Accidental_interface,after_line_breaking,1);
34 SCM
35 Accidental_interface::after_line_breaking (SCM smob)
36 {
37   Grob *me  = unsmob_grob (smob);
38   Grob *tie = unsmob_grob (me->get_grob_property ("tie"));
39
40   if (tie && !tie->original_l_)
41     {
42       me->suicide ();
43     }
44   return SCM_UNSPECIFIED;
45 }
46   
47 MAKE_SCHEME_CALLBACK (Accidental_interface,brew_molecule,1);
48 SCM
49 Accidental_interface::brew_molecule (SCM smob)
50 {
51   Grob *me = unsmob_grob (smob);
52
53   SCM scm_style = me->get_grob_property ("style");
54  
55   String style;
56   if (gh_symbol_p (scm_style))
57     {
58       style = ly_scm2string (scm_symbol_to_string (scm_style));
59     }
60   else
61     {
62       /*
63         preferably no name for the default style.
64        */
65       style = "";
66     }
67
68   
69   Molecule mol;
70   for (SCM s = me->get_grob_property ("accidentals");
71        gh_pair_p (s);  s= gh_cdr (s))
72     {
73       SCM entry  = gh_car (s);
74       
75       
76       Molecule acc (Font_interface::get_default_font (me)->
77                     find_by_name (String ("accidentals-") +
78                                   style +
79                                   to_str (gh_scm2int(entry))));
80       
81       mol.add_at_edge (X_AXIS,  RIGHT, acc, 0.1);
82     }
83
84 #if 0
85   // TODO.
86   if (to_boolean (me->get_grob_property ("parenthesize")))
87     mol = parenthesize (me, mol); 
88 #endif
89   return mol.smobbed_copy();
90 }
91
92
93
94 ADD_INTERFACE(Accidental_interface, "accidental-interface",
95               "a single accidental",
96               "style tie accidentals");