LilyPond is a music typesetter. It produces beautiful sheet music
-using a high level description file as input. It is part of the GNU
-project.
+using a high level description file as input. LilyPond is part of
+the GNU Project.
\mudelafile{stem-direction.sly}
+Similarly, if \verb+stem_default_neutral_direction+ is set to \verb+-1+.
+
+\mudelafile{stem-direction-down.ly}
+
\section{Grace notes}
Grace notes are typeset as an encapsulated piece of music. You can
+pl 63.lu2
+ - very tight: hinterfleisch -> 0 : input/bugs/spacing-very-tight.ly
+ - bfs: neutral beam and tie directions (daar was ik al bang voor:-)
+ - bf: abe: may beam over skip, as long as note present too
+ - bf: scsii-prelude: added slurs using skips
+
pl 63.uu1
- mutopia updates courtesy Peter Chubb
- Don't make Time_scaled_music for c4*2/3 entry, only do the
. * warning if feta-nummer.tfm not found
. * broken examples:
input/star-spangled-banner.ly: hw?
-mutopia/J.S.Bach/Solo-Cello-Suites/prelude-cello.ly: hw: slurs + autobeamer ?
mutopia/Coriolan/*
. * spacing of accidentals
. * key restorations & repeats
MAJOR_VERSION=1
MINOR_VERSION=1
PATCH_LEVEL=64
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=lu1
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
Conflicts: musixtex-fonts, tetex-base (<< 0.9)
Description: The GNU Project music typesetter.
LilyPond is a music typesetter. It produces beautiful sheet music
- using a high level description file as input. It is part of the GNU
- project.
+ using a high level description file as input. LilyPond is part of
+ the GNU Project.
.
--- /dev/null
+% when tightly spaced, hinterfleisch -> 0 (and not: -> note-width)
+% we need a mininum of about a note-width/interline space before
+% bar line
+
+% set rediculously tight
+\score {
+ \notes { \time 2/2; c'2 c'2 \time 2/2; }
+ \paper { linewidth = 2.0 \cm;
+ indent = 0.0;
+ }
+}
--- /dev/null
+\score{
+ \notes\relative c{
+ \include "stem-direction.sly";
+ }
+ \paper{
+ stem_default_neutral_direction=-1.0;
+ }
+}
}
bool
-Auto_beam_engraver::do_try_music (Music* m)
+Auto_beam_engraver::do_try_music (Music*)
{
- /*
- Mag dit? Nu word-i toch maar geswallowed, en
- komt er dus ook geen announce...
- */
- if (Skip_req* s = dynamic_cast <Skip_req*> (m))
- {
- if (stem_l_arr_p_)
- end_beam ();
- return true;
- }
return false;
}
void
Auto_beam_engraver::do_post_move_processing ()
{
+ /*
+ don't beam over skips
+ */
+ if (stem_l_arr_p_)
+ {
+ Moment now = now_mom ();
+ if (extend_mom_ < now)
+ {
+ end_beam ();
+ }
+ }
}
void
return;
}
-#if 0
/*
- Don't (start) auto-beam over empty stems.
- ugly check for rests!
- --> doesn't even work: stem-dir is not set
-
- ../flower/include/drul-array.hh:26: Real & Drul_array<double>::elem<Real>(enum Direction): Assertion `d==1 || d== -1' failed.
-/home/fred/root/usr/scripts/src/out/Linux/li: line 8: 14641 Aborted (core dumped) lilypond $opts
-
- */
- if (stem_l->extent (Y_AXIS).empty_b ())
- {
- if (stem_l_arr_p_)
- end_beam ();
- return;
- }
-#else
+ Don't (start) auto-beam over empty stems; skips or rests
+ */
if (!stem_l->head_l_arr_.size ())
{
if (stem_l_arr_p_)
end_beam ();
return;
}
-#endif
if (stem_l->beam_l_)
{
return ;
}
- /*
- now that we have last_add_mom_, perhaps we can (should) do away
- with these individual junk_beams
- */
-
int durlog =rhythmic_req->duration_.durlog_i_;
if (durlog <= 2)
{
}
Moment now = now_mom ();
- grouping_p_->add_stem (now - beam_start_moment_ + beam_start_location_, durlog - 2);
+ grouping_p_->add_stem (now - beam_start_moment_ + beam_start_location_,
+ durlog - 2);
stem_l_arr_p_->push (stem_l);
last_add_mom_ = now;
extend_mom_ = extend_mom_ >? now + rhythmic_req->length_mom ();
count[UP] = count[DOWN] = 0;
Direction d = DOWN;
- Direction beamdir;
for (int i=0; i <stems_.size (); i++)
do {
Stem *s = stems_[i];
If dir is not determined: up (see stem::get_default_dir ())
*/
+ Direction beam_dir;
+ Direction neutral_dir = (int)paper_l ()->get_var ("stem_default_neutral_direction");
+
Dir_algorithm a = (Dir_algorithm)rint(paper_l ()->get_var ("beam_dir_algorithm"));
switch (a)
{
case MAJORITY:
- beamdir = (count[UP] >= count[DOWN]) ? UP : DOWN;
+ beam_dir = (count[UP] == count[DOWN]) ? neutral_dir
+ : (count[UP] > count[DOWN]) ? UP : DOWN;
break;
case MEAN:
// mean center distance
- beamdir = (total[UP] >= total[DOWN]) ? UP : DOWN;
+ beam_dir = (total[UP] == total[DOWN]) ? neutral_dir
+ : (total[UP] > total[DOWN]) ? UP : DOWN;
break;
default:
case MEDIAN:
// median center distance
- if (!count[DOWN])
- beamdir = UP;
- if (!count[UP])
- beamdir = DOWN;
+ if (!count[DOWN] || !count[UP])
+ {
+ beam_dir = (count[UP] == count[DOWN]) ? neutral_dir
+ : (count[UP] > count[DOWN]) ? UP : DOWN;
+ }
else
- beamdir = (total[UP] / count[UP] >= total[DOWN] / count[DOWN]) ? UP : DOWN;
+ {
+ beam_dir = (total[UP] / count[UP] == total[DOWN] / count[DOWN])
+ ? neutral_dir
+ : (total[UP] / count[UP] > total[DOWN] / count[DOWN]) ? UP : DOWN;
+ }
break;
}
- return beamdir;
+ return beam_dir;
}
void
*/
Drul_array<Real> yextent_drul_;
-public: // urg, autobeamer needs to know if there are (only) rests here?
+public:
Link_array<Note_head> head_l_arr_;
Link_array<Rest> rest_l_arr_;
-public:
/// log of the duration. Eg. 4 -> 16th note -> 2 flags
int flag_i_;
{
int m = (head_l_drul_[LEFT]->position_i_
+ head_l_drul_[RIGHT]->position_i_) /2;
+
/*
If dir is not determined: inverse of stem: down
(see stem::get_default_dir ())
*/
- return (m <= 0)? DOWN : UP;
+ Direction neutral_dir = (int)paper_l ()->get_var ("stem_default_neutral_direction");
+ return (m == 0) ? other_dir (neutral_dir) : (m < 0) ? DOWN : UP;
}
void
prelude_a = \notes<
\$prelude_notes
- % Han-Wen: help: adding slurs breaks auto-beaming??
- %\$prelude_slurs
+ \$prelude_slurs
>
prelude = \context Staff \notes<