--- /dev/null
+\header {
+
+ texidoc = "Glissandi are not broken. Here a @code{\break} is ineffective.
+Use @code{breakable} grob property to override."
+
+}
+\version "2.11.10"
+\layout {
+ ragged-right = ##t
+}
+\relative c' {
+ c1
+ c1\glissando
+ \break
+ d'1
+ d1
+}
void
Beam_engraver::process_music ()
{
- if (beam_ && !to_boolean (get_property ("allowBeamBreak")))
- context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
-
if (start_ev_)
{
if (beam_)
/* read */
"beamMelismaBusy "
"beatLength "
- "allowBeamBreak "
"subdivideBeams "
,
/* write */ "");
*/
#include "engraver.hh"
+
#include "international.hh"
#include "rhythmic-head.hh"
#include "spanner.hh"
--- /dev/null
+/*
+ spanner-break-forbid-engraver.cc -- implement Spanner_break_forbid_engraver
+
+ source file of the GNU LilyPond music typesetter
+
+ (c) 2007 Han-Wen Nienhuys <hanwen@lilypond.org>
+*/
+
+
+
+#include "engraver.hh"
+#include "international.hh"
+#include "spanner.hh"
+#include "stream-event.hh"
+#include "warn.hh"
+#include "context.hh"
+
+#include "translator.icc"
+
+class Spanner_break_forbid_engraver : public Engraver
+{
+ TRANSLATOR_DECLARATIONS (Spanner_break_forbid_engraver);
+ vector<Spanner*> running_spanners_;
+protected:
+ DECLARE_ACKNOWLEDGER (unbreakable_spanner);
+ DECLARE_END_ACKNOWLEDGER (unbreakable_spanner);
+
+ void process_music ();
+};
+
+
+void
+Spanner_break_forbid_engraver::process_music ()
+{
+ if (running_spanners_.size ())
+ {
+ context ()->get_score_context ()->set_property ("forbidBreak", SCM_BOOL_T);
+ }
+}
+
+void
+Spanner_break_forbid_engraver::acknowledge_end_unbreakable_spanner (Grob_info gi)
+{
+ vector<Spanner*>::iterator i = find (running_spanners_.begin (), running_spanners_.end (),
+ gi.spanner ());
+ if (i != running_spanners_.end ())
+ running_spanners_.erase (i);
+}
+
+void
+Spanner_break_forbid_engraver::acknowledge_unbreakable_spanner (Grob_info gi)
+{
+ if (!to_boolean (gi.grob ()->get_property ("breakable")))
+ running_spanners_.push_back (gi.spanner ());
+}
+
+Spanner_break_forbid_engraver::Spanner_break_forbid_engraver ()
+{
+}
+
+
+ADD_END_ACKNOWLEDGER (Spanner_break_forbid_engraver, unbreakable_spanner);
+ADD_ACKNOWLEDGER (Spanner_break_forbid_engraver, unbreakable_spanner);
+ADD_TRANSLATOR (Spanner_break_forbid_engraver,
+ /* doc */ "Forbid breaks in certain spanners",
+ /* create */ "",
+ /* read */ "",
+ /* write */ "");
\consists "Script_column_engraver"
\consists "Rhythmic_column_engraver"
\consists "Note_spacing_engraver"
+ \consists "Spanner_break_forbid_engraver"
\consists "Phrasing_slur_engraver"
\consists "Cluster_spanner_engraver"
\consists "Slur_engraver"
return str
conversions.append (((2, 11, 6), conv, """Rename accidental glyphs, use glyph-name-alist."""))
+
+
+def conv (str):
+ str = re.sub (r'(\\set\s+)?([A-Z][a-zA-Z]+\s*\.\s*)allowBeamBreak',
+ r"\override \2Beam #'breakable", str)
+ str = re.sub (r'(\\set\s+)?allowBeamBreak',
+ r"\override Beam #'breakable", str)
+ return str
+
+conversions.append (((2, 11, 10), conv, """allowBeamBreak -> Beam #'breakable = ##t"""))
(alignBassFigureAccidentals ,boolean?
"If true, then the accidentals are aligned in bass figure context.")
- (allowBeamBreak ,boolean? "If true allow line breaks for beams over bar lines.")
(associatedVoice ,string? "Name of the
@code{Voice} that has the melody for this @code{Lyrics} line.")
(autoBeamSettings ,list? "Specifies
"An interface for any notes set in a tablature staff"
'())
+(ly:add-interface
+ 'unbreakable-spanner-interface
+ "A spanner that should not be broken across line breaks. Override
+with @code{breakable=##t}. "
+
+ '(breakable))
+
(ly:add-interface
'vertically-spaceable-interface
"Objects that should be kept at constant vertical distances. Typically:
(bracket-flare ,number-pair? "A pair of numbers specifying how
much edges of brackets should slant outward. Value 0.0 means straight
edges")
+ (breakable ,boolean? "Allow breaks here.")
(break-align-symbol ,symbol? "This key is used for aligning and
spacing breakable items.")
(break-align-orders ,vector? " Defines the order in which
(after-line-breaking . ,ly:line-spanner::after-line-breaking)
(meta . ((class . Spanner)
(interfaces . (line-interface
+ unbreakable-spanner-interface
line-spanner-interface))))))
(GraceSpacing