+2004-09-12 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/new-fingering-engraver.cc (stop_translation_timestep): new
+ property: add-stem-support
+
2004-09-11 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * lily/slur-scoring.cc (get_bound_info): only do
+ broken trend at the end of the line.
+
* VERSION (PACKAGE_NAME): release 2.3.16.
* input/regression/phrasing-slur.ly (Module): remove (duplicate
@code{toplevel-book-handler}. By changing these variables, different
results can be obtained.
-This required a small change in the syntax. Mode changing commands,
-such as @code{\chords} and @code{\figures} now be directly followed by
-delimeters. The following example demonstrates the new behavior,
+@item Mode changing commands,
+such as @code{\chords} and @code{\figures} must now be directly
+followed by delimiters. The following example demonstrates the new
+behavior,
@verbatim
\figures \context Figures { .. } % wrong
@end verbatim
-@item Start pitch for @code{relative} music is optional for music lists.
+@item The starting pitch for @code{relative} music is optional for music lists.
The default value is middle C.
@c update-me? formal definition of newaddlyrics, once it works
-@item Combining lyrics with music can be done with @code{\newlyrics}
+@item Combining lyrics with music can be done with @code{\addlyrics}
@example
\relative @{
@}
@end example
-Syntactically, @code{\newlyrics} acts like an infix operator.
+Syntactically, @code{\addlyrics} acts like an infix operator.
@item The parser is encapsulated in a Scheme function
@code{ly:parse-file}, so the following fragment processes two files
@}
@end example
-Titling and page breaks are handled by LilyPond. For automatic page
-breaking, two algorithms are available, the classic ragged pages (the
-default), and optimal page breaking.
-Page breaks may be inserted manually with
+
+@item
+Titling and page breaks are handled by LilyPond. Page breaks may be
+inserted manually with
@example
\pageBreak
@end example
cis''''4^\markup { \small \italic "m.g." }\arpeggio~
\grace {
cis8
- \slurBoth % Tweak
+ \override Stem #'direction = #CENTER
- \override Stem #'direction = #0
-
- a16[-5( fis dis]
+ a16[-5_( fis dis]
#(set-octavation 0)
cis32[ a-1 fis-4 dis] cis[ a fis)-2]
\override Fingering #'direction = #1
% Manual fix for collision with slur
- \override Fingering #'extra-offset = #'(0 . 1) %tweak
+ \override Fingering #'inside-slur = ##f
<gis gis,> <fis fis,> e)-1-4-5 r
| %6
\slurDown
% \fingerDown
\override Fingering #'direction = #-1
- \override Fingering #'extra-offset = #'(0 . 1.2)
s2
| %1
s1*2
<e, gis, e d!>2
| %5
s8 cis4. d4
- %%<cis e,>8[( <b-3 d,-1>
- <cis e,>8[( <b d,>-3-1
+ \override Fingering #'add-stem-support = ##t
+ \override Fingering #'padding = #0.1
+ <cis e,>8[( <d,_3 b'_1>
| %6
- %%<a-2 cis,-1>)] cis4. d4
- <a cis,>)]-2-1 cis4. d4
+ <cis_1 a'_2>)] cis'4. d4
<cis e,>8[( <b d,>
| %7
<a cis,>)]
\partial 2
\key a \major
- % Allow ugly (highly blown-up) slurs
- \override Slur #'beautiful = #5.0 %tweak
- \override Slur #'attachment-offset = #'((0 . 3) . (0 . -4)) %tweak
\slurDown
-
\dynamicUp
r8. e,16(\f_2 <a a,>8[ <b b,>]
<cis cis,>4\sustainDown
\change Staff=treble
\stemDown
- \override Slur #'attachment = #'(stem . stem) %tweak
<a'' eis cis>4)\arpeggio
- \revert Slur #'attachment %tweak
\change Staff=bass
\stemBoth
- \revert Slur #'y-free %tweak
- \override Slur #'y-free = #0.1 %tweak
- \revert Slur #'attachment-offset %tweak
- \override Slur #'attachment-offset = #'((0 . 3) . (0 . 8)) %tweak
r8. cis,,16(\sustainUp <fis fis,>8 <gis gis,>
| %3
r2
| %4
- \revert Slur #'beautiful %tweak
- \revert Slur #'attachment-offset %tweak
\stemDown
<b,, b,>4
\clef treble
>>
\break
c4) f='2.(\break
- a4)
+ a2.)
+ \stemUp
+ <d='' d'>8( <c c'> \break
+ <bis f' b>)
}
{
if (fingerings_.size ())
{
+ for (int i = 0; i < fingerings_.size(); i++)
+ if (stem_ && to_boolean (fingerings_[i].script_->get_property ("add-stem-support")))
+ Side_position_interface::add_support (fingerings_[i].script_, stem_);
position_scripts ();
fingerings_.clear ();
}
for (int i = articulations_.size (); i--;)
{
- Grob *sc = articulations_[i].script_;
+ Grob *script = articulations_[i].script_;
for (int j = heads_.size () ; j--;)
- Side_position_interface::add_support (sc, heads_[j]);
+ Side_position_interface::add_support (script, heads_[j]);
- if (stem_ && to_dir (sc->get_property ("side-relative-direction")))
- sc->set_property ("direction-source", stem_->self_scm ());
+ if (stem_ && to_dir (script->get_property ("side-relative-direction")))
+ script->set_property ("direction-source", stem_->self_scm ());
+
+
+ if (stem_ && to_boolean (script->get_property ("add-stem-support")))
+ Side_position_interface::add_support (script, stem_);
if (articulations_[i].follow_into_staff_)
{
- sc->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS);
- sc->set_property ("staff-padding" , SCM_EOL);
+ script->add_offset_callback (Side_position_interface::quantised_position_proc, Y_AXIS);
+ script->set_property ("staff-padding" , SCM_EOL);
}
}
ADD_INTERFACE (Text_script,"text-script-interface",
"An object that is put above or below a note",
- "slur script-priority inside-slur");
+ "add-stem-support slur script-priority inside-slur");
+
+/*
+ Hmm. Where should we put add-stem-support ?
+ */
ADD_INTERFACE (Script_interface, "script-interface",
"An object that is put above or below a note",
- "slur script-priority script-stencil inside-slur");
+ "add-stem-support slur script-priority script-stencil inside-slur");
/* descr */ "Build slurs grobs from slur events",
/* creats*/ "Slur",
/* accepts */ "slur-event",
- /* acks */ "note-column-interface accidental-interface fingering-interface script-interface tie-interface",
+ /* acks */ "note-column-interface accidental-interface fingering-interface script-interface tie-interface text-script-interface",
/* reads */ "slurMelismaBusy doubleSlurs",
/* write */ "");
extremes[d].staff_space_ = Staff_symbol_referencer
::staff_space (extremes[d].stem_);
}
- else
+ else if (d == RIGHT)
+ /*
+ right side anticipates on the next note.
+ */
extremes[d].neighbor_y_ = broken_trend_y (me, common, d);
+
+ else
+ {
+ Link_array<Grob> columns
+ = Pointer_group_interface__extract_grobs (me, (Grob *) 0, "note-columns");
+ extremes[d].neighbor_y_ = columns[0]->extent (common[Y_AXIS], Y_AXIS)[dir];
+ }
}
while (flip (&d) != LEFT);
return extremes;
(Y-offset-callbacks ,list? "see @code{X-offset-callbacks}.")
(accidentals ,list? "List of alteration numbers.")
+ (add-stem-support ,boolean? "If set, the Stem object is included in this script's support")
(align-dir ,ly:dir? "Which side to align? @code{-1}: left side,
@code{0}: around center of width, @code{1}: right side.")
stems that are placed in tight configurations. For opposite
directions, this amount is the correction for two normal sized stems
that overlap completely.")
+
+
(string-count ,integer? "The number of strings in a fret diagram.")
(stroke-style ,string? "set to \"grace\" to turn stroke through flag on.")