source file of the GNU LilyPond music typesetter
- (c) 1997--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+ (c) 1997--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
Modified 2001--2002 by Rune Zedeler <rz@daimi.au.dk>
*/
#include "arpeggio.hh"
#include "context.hh"
#include "engraver.hh"
-#include "event.hh"
-#include "item.hh"
#include "protected-scm.hh"
#include "rhythmic-head.hh"
#include "side-position-interface.hh"
-#include "spanner.hh"
#include "tie.hh"
#include "warn.hh"
-
class Accidental_entry
{
public:
set_property_on_children (Context *trans, char const *sym, SCM val)
{
trans->set_property (sym, ly_deep_copy (val));
- for (SCM p = trans->children_contexts (); ly_c_pair_p (p); p = ly_cdr (p))
+ for (SCM p = trans->children_contexts (); scm_is_pair (p); p = scm_cdr (p))
{
- Context *trg = unsmob_context (ly_car (p));
+ Context *trg = unsmob_context (scm_car (p));
set_property_on_children (trg, sym, ly_deep_copy (val));
}
}
static bool
recent_enough (int bar_number, SCM alteration_def, SCM laziness)
{
- if (scm_is_number (alteration_def))
+ if (scm_is_number (alteration_def)
+ || laziness == SCM_BOOL_T)
return true;
-
- return (bar_number <= scm_to_int (ly_cdr (alteration_def)) + scm_to_int (laziness));
+
+ return (bar_number <= scm_to_int (scm_cdr (alteration_def)) + scm_to_int (laziness));
}
static int
{
if (scm_is_number (alteration_def))
return scm_to_int (alteration_def);
- else if (ly_c_pair_p (alteration_def))
- return scm_to_int (ly_car (alteration_def));
+ else if (scm_is_pair (alteration_def))
+ return scm_to_int (scm_car (alteration_def));
else if (alteration_def == SCM_BOOL_F)
return 0;
else
return 0;
}
+bool
+is_tied (SCM alteration_def)
+{
+ return (alteration_def == SCM_BOOL_T)
+ || (scm_is_pair (alteration_def) && scm_car (alteration_def) == SCM_BOOL_T);
+}
+
static int
number_accidentals_from_sig (bool *different, SCM sig, Pitch *pitch,
int bar_number, SCM laziness, bool ignore_octave)
scm_int2num (n)), sig, SCM_BOOL_F);
SCM from_key_signature = ly_assoc_get (scm_int2num (n), sig, SCM_BOOL_F);
SCM from_other_octaves = SCM_BOOL_F;
- for (SCM s = sig ; ly_c_pair_p (s); s = ly_cdr (s))
+ for (SCM s = sig ; scm_is_pair (s); s = scm_cdr (s))
{
- SCM entry = ly_car (s);
- if (ly_c_pair_p (ly_car (entry))
- && ly_cdar (entry) == scm_int2num (n))
- from_other_octaves = ly_cdr (entry);
+ SCM entry = scm_car (s);
+ if (scm_is_pair (scm_car (entry))
+ && scm_cdar (entry) == scm_int2num (n))
+ from_other_octaves = scm_cdr (entry);
}
previous_alteration = from_key_signature;
}
- /* UGH. prev_acc can be #t in case of ties. What is this for? */
-
- int prev = extract_alteration (previous_alteration);
- int alter = pitch->get_alteration ();
int num = 1;
- if (alter == prev)
- num = 0;
- else if ((abs (alter) < abs (prev) || prev*alter < 0) && alter != 0)
- num = 2;
-
- *different = (alter != prev);
+ if (is_tied (previous_alteration))
+ {
+ num = 1;
+ *different = true;
+ }
+ else
+ {
+ int prev = extract_alteration (previous_alteration);
+ int alter = pitch->get_alteration ();
+
+ if (alter == prev)
+ num = 0;
+ else if ((abs (alter) < abs (prev) || prev*alter < 0) && alter != 0)
+ num = 2;
+ *different = (alter != prev);
+ }
return num;
}
int number = 0;
*different = false;
- if (ly_c_pair_p (accidentals) && !scm_is_symbol (ly_car (accidentals)))
+ if (scm_is_pair (accidentals) && !scm_is_symbol (scm_car (accidentals)))
warning (_f ("Accidental typesetting list must begin with context-name: %s",
- ly_scm2string (ly_car (accidentals)).to_str0 ()));
+ ly_scm2string (scm_car (accidentals)).to_str0 ()));
- for (; ly_c_pair_p (accidentals) && origin;
- accidentals = ly_cdr (accidentals))
+ for (; scm_is_pair (accidentals) && origin;
+ accidentals = scm_cdr (accidentals))
{
// If pair then it is a new accidentals typesetting rule to be checked
- SCM rule = ly_car (accidentals);
- if (ly_c_pair_p (rule))
+ SCM rule = scm_car (accidentals);
+ if (scm_is_pair (rule))
{
- SCM type = ly_car (rule);
- SCM laziness = ly_cdr (rule);
+ SCM type = scm_car (rule);
+ SCM laziness = scm_cdr (rule);
SCM localsig = origin->get_property ("localKeySignature");
bool same_octave_b =
int bn = robust_scm2int (barnum, 0);
- Moment mp = (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+ Moment mp = robust_scm2moment (smp, Moment (0));
if (mp.main_part_ < Rational (0))
bn--;
Grob *a
= make_item_from_properties (accidentals_[i].origin_trans_,
ly_symbol2scm ("Accidental"),
- note->self_scm ());
+ note->self_scm (),
+ "Accidental"
+ );
a->set_parent (support, Y_AXIS);
if (!accidental_placement_)
update_local_key_signature ();
}
-ENTER_DESCRIPTION (Accidental_engraver,
+ADD_TRANSLATOR (Accidental_engraver,
"Make accidentals. "
"Catch note heads, ties and notices key-change events. "
"This engraver usually lives at Staff level, but "