forced property.
* lily/accidental.cc (after_line_breaking): read forced property.
* lily/accidental-engraver.cc (process_acknowledged): set 'forced
property.
* input/regression/accidental-forced-tie.ly: new file.
+2006-09-26 Han-Wen Nienhuys <hanwen@lilypond.org>
+
+ * scm/define-grob-properties.scm (all-user-grob-properties): add
+ forced property.
+
+ * lily/accidental.cc (after_line_breaking): read forced property.
+
+ * lily/accidental-engraver.cc (process_acknowledged): set 'forced
+ property.
+
+ * input/regression/accidental-forced-tie.ly: new file.
+
2006-09-25 Han-Wen Nienhuys <hanwen@lilypond.org>
* ly/engraver-init.ly: set ignoreFiguredBassRest in Staff context.
rename make_foo_from_properties to internal_make_foo and
move it from context-property.cc to a member function of
Engraver.
-
+
* lily/include/lily-guile-macros.hh:
overload ly_symbol2scm macro so that there is no more need
to use internal_foo
--- /dev/null
+\version "2.9.18"
+
+\header {
+ texidoc = "Accidentals can be forced with ! and ? even if the notes are tied."
+}
+
+\layout {
+ ragged-right = ##t
+}
+
+\relative {
+ gis'4 ~ gis!~ gis?
+ }
pitch, origin,
cautionaries, barnum);
- bool cautionary = to_boolean (note->get_property ("cautionary"));
+ bool cautionary = to_boolean (note->get_property ("cautionary"));
if (num_caut > num)
{
num = num_caut;
cautionary = true;
}
- if (num == 0 && to_boolean (note->get_property ("force-accidental")))
+ bool forced = to_boolean (note->get_property ("force-accidental"));
+ if (num == 0 && forced)
num = 1;
/* Cannot look for ties: it's not guaranteed that they reach
if (num
&& !note->in_event_class ("trill-span-event"))
create_accidental (&accidentals_[i], num > 1, cautionary);
+
+
+ if (forced || cautionary)
+ accidentals_[i].accidental_->set_property ("forced", SCM_BOOL_T);
}
}
}
Grob *me = unsmob_grob (smob);
Grob *tie = unsmob_grob (me->get_object ("tie"));
- if (tie && !tie->original ())
- me->suicide ();
+ if (tie && !tie->original ()
+ && !to_boolean (me->get_property ("forced")))
+ {
+ me->suicide ();
+ }
+
return SCM_UNSPECIFIED;
}
"avoid-slur "
"cautionary "
"cautionary-style "
+ "forced "
"style "
"tie "
);
typedef enum Outlet_type
{
- CONTEXT_ONE, CONTEXT_TWO, CONTEXT_SHARED, CONTEXT_SOLO, CONTEXT_NULL, NUM_OUTLETS
+ CONTEXT_ONE, CONTEXT_TWO,
+ CONTEXT_SHARED, CONTEXT_SOLO,
+ CONTEXT_NULL, NUM_OUTLETS
};
static const char *outlet_names_[NUM_OUTLETS] =
(font-shape ,symbol? "Select the shape of a font. Choices include @code{upright},
@code{italic}, @code{caps}.")
+ (forced ,boolean? "manually forced accidental")
(forced-distance ,ly:dimension? "A fixed distance between object
reference points in an alignment.")