+1.4.6.mb1
+=========
+
+* Allow for duplicated articulation scripts with different direction.
+
+* Added new ornaments: \upmordent, \downmordent, \pralldown, \prallup,
+ \lineprall, \thumb, \comma (to be used with scriptHorizontal = ##t),
+ see also input/test/trill.ly. [WARNING: FONT UPDATE!]
+
+* Bug fix: staccato dot placement.
+
+1.5.5.jr1
+=========
+
+* recent ancient-font.ly development branches manually merged and
+ updated;
+
+* added enhanced mensural minima/fusa noteheads (30 degrees rhomb
+ style); the former 45 degrees quadratic shapes are now available
+ under notehead style "neo_mensural"; [WARNING: FONT UPDATE]
+
+* minor ancient font corrections (in particular, enhanced set_char_box()
+ arguments).
+
+
1.5.5.jcn2
==========
- Move examples that crash lilypond to input/no-notation.
- Update examples.
+1.5.5.hwn1
+==========
+
+* Grace property fixes.
+
+* More grace nesting bugfixes.
+
1.5.5
=====
@section Grace notes
+Grace note do weird things with timing. Fragile.
+
+
@lilypondfile[printfilename]{grace.ly}
+@lilypondfile[printfilename]{grace-bar-line.ly}
+
+@lilypondfile[printfilename]{grace-nest2.ly}
+
+@lilypondfile[printfilename]{grace-nest3.ly}
+
+@lilypondfile[printfilename]{grace-nest4.ly}
+
+@lilypondfile[printfilename]{grace-nest.ly}
+
+@lilypondfile[printfilename]{grace-start.ly}
+
+@lilypondfile[printfilename]{grace-sync.ly}
@section Beams
@lilypondfile[printfilename]{rest-collision.ly}
@lilypondfile[printfilename]{collisions.ly}
+
@lilypondfile[printfilename]{collision-dots.ly}
@lilypondfile[printfilename]{number-staff-lines.ly}
@lilypondfile[printfilename]{spacing-loose.ly}
+@lilypondfile[printfilename]{spacing-accidentals.ly}
+
+@lilypondfile[printfilename]{spacing-accidentals-staff.ly}
+
+@lilypondfile[printfilename]{spacing-accidentals.ly}
+
+@lilypondfile[printfilename]{spacing-accidentals-staff.ly}
+
@lilypondfile[printfilename]{lyrics-bar.ly}
@lilypondfile[printfilename]{non-empty-text.ly}
(1.3), whose webpages are on @uref{http://www.lilypond.org/,the lilypond
site}.
-@subsection Source code
+@subsection source code
+
If you want to compile LilyPond from source, download here:
@itemize @bullet
@uref{http://www.lilypond.org/ftp/} by HTTP.
@end itemize
-Of course, if your platform supports LilyPond, such as Debian GNU/Linux,
-FreeBSD, OpenBSD or NetBSD, you're encouraged to use the native build
-from source drill.
-
-For Red Hat Linux and SuSE Linux, @file{.spec} files are included in the
-tarball; see instructions below.
-
@html
<a name="download-binaries">
@end html
-@subsection Precompiled binaries
-
-If you want to track bleeding edge development, try:
-
-@itemize @bullet
-@item @uref{ftp://ftp.debian.org/debian/pool/main/l/lilypond/, Debian
-GNU/Linux} usually has the latest binaries for the most useful stable
-and development versions, while
-@item @uref{http://rpmfind.net/linux/mandrake/cooker/contrib/RPMS/,
-Mandrake Cooker} also provides fairly recent versions.
-@end itemize
-
-Binaries are made available for other popular platforms, but as we need
-to compile them ourselves, they are not updated for every version
-released.
+@subsection Binaries
+Binaries are available, but are not updated for every version released.
@itemize @bullet
@item @uref{ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/binaries/RedHat/RPMS/, Red Hat i386}
-@item @uref{ftp://ftp.lilypond.org/pub/LilyPond/binaries/SuSE, SuSE}
-@item @uref{ftp://ftp.lilypond.org/pub/LilyPond/binaries/linuxppc/,
-LinuxPPC}
+@item @uref{ftp://ftp.lilypond.org/pub/LilyPond/binaries/linuxppc/, LinuxPPC}
+@item @uref{ftp://ftp.debian.org/debian/pool/main/l/lilypond/, Debian GNU/Linux}
@item
-@uref{http://www.lilypond.org/gnu-windows/, Windows}
+@c @uref{http://home.austin.rr.com/jbr/jeff/lilypond/, Windows Stable}
+@c @item @uref{ftp://ftp.lilypond.org/pub/lilypond/gnu-windows, Windows
+@c Testing}
+@uref{http://www.lilypond.org/gnu-windows/, Windows Testing}
+
@end itemize
@subsection Upgrading
@subsection Mandrake
Some binaries are available at rpmfind.net. Refer to
-@uref{http://rpmfind.net/linux/mandrake/cooker/contrib/RPMS/}.
+@uref{ftp://ftp.rpmfind.net/linux/Mandrake-devel/cooker/contrib/RPMS/}.
@subsection Debian GNU/Linux
c''-\rtoe c''-\turn c''-\open c''-\flageolet
c''-\reverseturn c''-\trill c''-\prall c''-\mordent
c''-\prallprall c''-\prallmordent c''-\upprall c''-\downprall
- c''-\thumb c''-\segno c''-\coda
+ c''-\upmordent c''-\downmordent c''-\pralldown c''-\prallup
+ c''-\lineprall c''-\thumb c''-\segno c''-\coda
}
\context Lyrics \lyrics {
accent__ marcato__ staccatissimo__ fermata
rtoe__ turn__ open__ flageolet
reverseturn__ trill__ prall__ mordent
prallprall__ prallmordent__ uprall__ downprall
- thumb__ segno__ coda
+ upmordent__ downmordent__ pralldown__ prallup__
+ lineprall__ thumb__ segno__ coda
}
>
\paper {
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=5
-PATCH_LEVEL=5
-MY_PATCH_LEVEL=jcn3
+PATCH_LEVEL=6
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
\header {
-
-texidoc = "Bar line should come before the grace note.";
+texidoc = "Bar line should come before the grace note."
}
\score {\notes \relative c' \context Staff {
- f1 \ngrace { [a'16 f] } g1 }
+ f1 \grace { [a'16 f] } g1 }
\paper { linewidth = -1. }
}
+++ /dev/null
-\header {
-texidoc = "grace code should not be confused by nested sequential musics, containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example."
-
-}
-\score{
-\notes
-
-{ c''2 { \grace b'16 c''2 } \bar "|." }
- \paper {
-}
- }
-
--- /dev/null
+\header {
+texidoc = "grace code should not be confused by nested sequential musics, containing grace notes; practically speaking, this means that the end-bar and measure bar coincide in this example."
+
+}
+\score{
+\notes
+
+{ c''2 { \grace b'16 c''2 } \bar "|." }
+ \paper {
+}
+ }
+
}
\score { \notes \context Voice {
- { \grace b'4 c''2 }
- \grace b'4 c''2 \bar "|."
+ { \grace b'8 c''2 }
+ \grace b'16 c''4 c''4 \bar "|."
}}
--- /dev/null
+\header {
+texidoc = "Another combination of grace note nesting."
+}
+
+\score { \notes \context Voice {
+
+ <
+ { \grace g32 f4 }
+ >
+ \grace c16 c2. \bar "|."
+}
+}
+
+
--- /dev/null
+
+\score
+{ \notes {
+ s2 <f4>
+ \grace g e4
+}
+}
\score {\notes < \context Staff { c2
\grace c8
- c2 c4 }
+ c4 c4 }
\context Staff = SB { c2 \clef bass
\grace { [dis8 ( d8] }
- ) c2 c4 }
- \context Staff = SC { c2 c2 c4 }
+ ) c4 c4 }
+ \context Staff = SC { c2 c4 c4 \bar "|." }
>
\paper { linewidth = -1. }
}
\version "1.3.146"
\header{
-
texidoc=" The number of stafflines of a staff can be set. Ledger
lines both on note heads and rests are adjusted. Barlines also are
adjusted. "
-
}
\score {
\property Staff.KeySignature \override #'style = #'vaticana
\property Staff.Accidentals \override #'style = #'vaticana
\property Staff.Custos \override #'style = #'vaticana
- \property Voice.NoteHead \override #'style = #'mensural
+ \property Voice.NoteHead \override #'style = #'vaticana_punctum
\key es \major
\clef "vaticana_fa2"
- cis!2 des! e! fis! ges!
+ c!1 des! e! f! ges!
% \property Staff.clefGlyph = #"clefs-vaticana_do"
% \property Staff.clefPosition = #1
% \property Staff.clefOctavation = #0
\clef "vaticana_do2"
- a b c'
- b as gis fes
+ \property Voice.NoteHead \override #'style = #'vaticana_subbipunctum
+ a! b! ces'
+ \property Voice.NoteHead \override #'style = #'vaticana_virga
+ b! a! ges fes
\clef "vaticana_fa1"
- es dis ces1 \bar "|"
+ \property Voice.NoteHead \override #'style = #'vaticana_quilisma
+ es d
+ \property Voice.NoteHead \override #'style = #'vaticana_rvirga
+ c d
+ \breathe
+ \property Voice.NoteHead \override #'style = #'vaticana_rvirga
+ es f
+ \property Staff.BarLine \override #'bar-size = #3.0 \bar "|"
+ \property Voice.NoteHead \override #'style = #'vaticana_lpes
+ g as
+ \property Staff.BarLine \override #'bar-size = #2.0 \bar "|"
+ \property Voice.NoteHead \override #'style = #'vaticana_upes
+ bes as
+ \breathe
+ \property Voice.NoteHead \override #'style = #'vaticana_vupes
+ g f
+ \property Voice.NoteHead \override #'style = #'vaticana_plica
+ \property Staff.BarLine \override #'bar-size = #2.0 \bar "|"
+ es d
+ \property Voice.NoteHead \override #'style = #'vaticana_epiphonus
+ \property Staff.BarLine \override #'bar-size = #3.0 \bar "|"
+ c d
+ \property Voice.NoteHead \override #'style = #'vaticana_cephalicus
+ es f
\property Staff.KeySignature \override #'style = #'medicaea
\property Staff.Accidentals \override #'style = #'medicaea
\property Staff.Custos \override #'style = #'medicaea
- \property Voice.NoteHead \override #'style = #'mensural
+ \property Voice.NoteHead \override #'style = #'medicaea_punctum
\clef "medicaea_fa2"
- ces2 des es fes ges
+ ces! des! e! f! ges!
\clef "medicaea_do2"
- as bes ces'
- bes as ges fes
+ \property Voice.NoteHead \override #'style = #'medicaea_subbipunctum
+ a! b! ces'!
+ \property Voice.NoteHead \override #'style = #'medicaea_virga
+ b! a! ges! fes!
\clef "medicaea_fa1"
- es des ces1 \bar "|"
+ \property Voice.NoteHead \override #'style = #'medicaea_rvirga
+ e! des! ces! \bar "|"
\property Staff.KeySignature \override #'style = #'hufnagel
\property Staff.Accidentals \override #'style = #'hufnagel
\property Staff.Custos \override #'style = #'hufnagel
- \property Voice.NoteHead \override #'style = #'mensural
+ \property Voice.NoteHead \override #'style = #'hufnagel_punctum
\clef "hufnagel_fa2"
- ces!2 des! es! fes! ges!
+ ces! des! es! fes! ges!
\clef "hufnagel_do2"
+ \property Voice.NoteHead \override #'style = #'hufnagel_lpes
as! bes! ces'!
+ \property Voice.NoteHead \override #'style = #'hufnagel_virga
bes! as! ges! fes!
\clef "hufnagel_do_fa"
+ \property Voice.NoteHead \override #'style = #'hufnagel_punctum
es! des! ces!1 \bar "||"
}
>
\property Staff.KeySignature \override #'style = #'mensural
\property Staff.Accidentals \override #'style = #'mensural
\property Staff.Custos \override #'style = #'mensural
- \property Voice.NoteHead \override #'style = #'mensural
+ \property Voice.NoteHead \override #'style = #'neo_mensural
\key a \major
\clef "neo_mensural_c2"
c2 dis es fis ges
\clef "mensural_g"
e d c1 \bar "|"
+ \property Voice.NoteHead \override #'style = #'mensural
\clef "petrucci_f"
c2 d e f g
\property Staff.forceClef = ##t
% \paperTwentysix
linewidth = 17.25\cm
textheight = 26.0\cm
- stafflinethickness = \staffspace / 5.0
+% stafflinethickness = \staffspace / 5.0
indent = 0.0
\translator {
\StaffContext
\consists Custos_engraver
% Custos \override #'style = #'mensural
\remove Time_signature_engraver
+ StaffSymbol \override #'thickness = #2.0
% StaffSymbol \override #'line-count = #4
}
}
}
-
\header {
texidoc="Document trills, pralls and turns"
- title="Marques des agr\'ements et leur signification"
+ title="Marques des agr\\'ements et leur signification"
+ composer="D'Anglebert"
copyright="(1689)"
}
+invisible = \property Voice.NoteHead \override #'transparent = ##t
+visible = \property Voice.NoteHead \revert #'transparent
+
+% Ugly hack to get reasonable position of the pincé and Cheute
+startHorizScript = {
+ \property Voice.scriptHorizontal = ##t
+ \property Voice.Script \override #'padding = #0.3
+ \property Voice.Script \override #'extra-offset = #'(-.6 . 0)
+ % Avoid collision with the dots of dotted notes
+ \property Voice.Dots \override #'extra-extent-X = #'(-0.7 . 0)
+}
+endHorizScript = {
+ \property Voice.scriptHorizontal \unset
+ \property Voice.Dots \revert #'padding
+ \property Voice.Script \revert #'padding
+ \property Voice.Script \revert #'extra-offset
+}
+
+
\score {
<
\property Score.TimeSignature = \turnOff
\context GrandStaff <
\context Staff=upper \notes\relative c'' {
\time 1/4
- c4-\prallprall
+ c4-\prall
\time 3/8
- c4.^"TODO"
+ c4.^\lineprall
c4.-\downprall
c4.-\upprall
\time 5/8
c4-\turn c4.-\upprall
+ d4-\turn b4.-\downprall
+ \time 3/4
+ b4 c^\turn d
+ \time 1/4
+ <\context Voice=upper{\voiceOne d4}
+ \context Voice=lower{\voiceTwo
+ \property Voice.Script \override #'extra-offset = #'(-0.8 . 2.0)
+ b_\turn}>
+ \startHorizScript c^\comma
+ \time 3/8
+ c4.^\comma
+ b8 c4_\comma
+ c8 b4_\comma
+ b8 c4^\comma _\comma \endHorizScript
+ \time 2/2 \slurDown
+ <{c2}{s4 \invisible d1*1/4 ( \visible }> ) e2
+ <{a,2}{s4 \invisible b1*1/4 ( \visible }> ) d2
+ <{a2}{s4 \invisible b1*1/4 ( \visible }> ) d2
+ \time 3/4
+ d2^\prallup e4
}
\context Lyrics=one \lyrics {
"Tremblement"4
"Cadence"
"autre"
"Double"4 "cadence"4.
+ "autre"4 _4.
+ _4 "sans tremblement"2
+ "sur une tierce"4
+ "Pinc\\'e"4
+ "autre"4.
+ "Cheute ou Port de"
+ "en descendant"
+ "Cheute et pinc\\'e"
+ "Coul\\'e Sur 2 notes"1
+ "autre"
+ "autre"
+ "Double cadence"2.
}
\context Lyrics=two \lyrics {
"simple"4
"appuy\'e"4.
+ \skip 1*3
+ \skip 4 \skip 4.
+ "voix et montant"
+ \skip 2.
+ "de suite"1
}
\context Staff=lower \notes\relative c'' {
% autobeamer has som problems here
{
count_i_ = 0;
stem_l_arr_p_ = 0;
- shortest_mom_ = Moment (1, 8);
+ shortest_mom_ = Moment (Rational (1, 8));
finished_beam_p_ = 0;
finished_grouping_p_ = 0;
grouping_p_ = 0;
delete grouping_p_;
grouping_p_ = 0;
- shortest_mom_ = Moment (1, 8);
+ shortest_mom_ = Moment (Rational (1, 8));
}
void
grouping_p_ = 0;
}
- shortest_mom_ = Moment (1, 8);
+ shortest_mom_ = Moment (Rational (1, 8));
}
void
Chord_tremolo_iterator::construct_children ()
{
Repeated_music * rep = dynamic_cast<Repeated_music*> (music_l ());
- factor_ = Moment (1, rep->repeat_count ());
+ factor_ = Moment (Rational(1, rep->repeat_count ()));
child_iter_p_ = get_iterator_p (rep->body ());
}
Duration::str () const
{
String s = to_str (durlog_i_) + to_str ('.', dots_i_);
- if (factor_ != Moment (1,1))
+ if (factor_ != Moment (Rational (1,1)))
{
s += "*" + factor_.str ();
}
if (iter-> ok ())
prev_mom_ = now_mom_ = iter->pending_moment ();
-
bool first = true;
while (iter->ok () || moments_left_i ())
{
smobify_self ();
+ /*
+ TODO:
+
+ destill this into a function, so we can re-init the immutable
+ properties with a new BASICPROPS value after creation. Convenient
+ eg. when using \override with StaffSymbol. */
+
char const*onames[] = {"X-offset-callbacks", "Y-offset-callbacks"};
char const*enames[] = {"X-extent-callback", "Y-extent-callback"};
- for (int a = X_AXIS; a <= Y_AXIS; a++){
- SCM l = get_grob_property (onames[a]);
-
- if (scm_ilength (l) >=0)
- {
- dim_cache_[a].offset_callbacks_ = l;
- dim_cache_[a].offsets_left_ = scm_ilength (l);
- }
- else
- {
- programming_error ("[XY]-offset-callbacks must be a list");
- }
-
- SCM cb = get_grob_property (enames[a]);
-
- /*
- Should change default to be empty?
- */
- if (cb != SCM_BOOL_F && !gh_procedure_p (cb) && !gh_pair_p (cb))
- cb = molecule_extent_proc;
+ for (int a = X_AXIS; a <= Y_AXIS; a++)
+ {
+ SCM l = get_grob_property (onames[a]);
+
+ if (scm_ilength (l) >=0)
+ {
+ dim_cache_[a].offset_callbacks_ = l;
+ dim_cache_[a].offsets_left_ = scm_ilength (l);
+ }
+ else
+ {
+ programming_error ("[XY]-offset-callbacks must be a list");
+ }
+
+ SCM cb = get_grob_property (enames[a]);
+
+ /*
+ Should change default to be empty?
+ */
+ if (cb != SCM_BOOL_F && !gh_procedure_p (cb) && !gh_pair_p (cb))
+ cb = molecule_extent_proc;
- dim_cache_[a].dimension_ = cb;
- }
+ dim_cache_[a].dimension_ = cb;
+ }
SCM meta = get_grob_property ("meta");
SCM ifs = scm_assoc (ly_symbol2scm ("interfaces"), meta);
public:
Moment ();
Moment (int m);
- Moment (int m, int n);
+ Moment (Rational, Rational);
Moment (Rational m);
Moment operator - () const;
by initting here_mom_ with Music::start_music (); no fixups are needed.
*/
-struct Grace_skip
+struct Grace_fixup
{
Moment start_;
- Rational length_;
+ Moment length_;
Rational grace_start_;
- Grace_skip *next_;
+ Grace_fixup *next_;
};
/** Sequential_music iteration: walk each element in turn, and
class Sequential_music_iterator : public Music_iterator
{
public:
- Grace_skip * grace_skips_;
+ Grace_fixup * grace_fixups_;
VIRTUAL_COPY_CONS (Music_iterator);
static SCM constructor_cxx_function;
Midi_def::Midi_def ()
{
// ugh
- set_tempo (Moment (1, 4), 60);
+ set_tempo (Moment (Rational (1, 4)), 60);
}
int
{
Moment m = audio_l_->length_mom_;
#if 0
- if (m < Moment (1, 1000))
+ //junkme?
+ if (m < Moment (Rational (1, 1000)))
{
warning (_ ("silly duration"));
m = 1;
Midi_walker::~Midi_walker ()
{
// ugh
- do_stop_notes (last_mom_ + Moment (10, 1));
+ do_stop_notes (last_mom_ + Moment (Rational (10, 1)));
}
/**
SCM
make_rational (SCM n, SCM d)
{
- Moment m (1,1);
+ Moment m (Rational (1,1));
if (SCM_INUMP (n) && SCM_INUMP (d))
{
- m = Moment (gh_scm2int (n), gh_scm2int (d));
+ m = Moment (Rational (gh_scm2int (n), gh_scm2int (d)));
}
else
{
grace_part_ = Rational( 0);
}
-Moment::Moment (int m, int n)
+Moment::Moment (Rational m, Rational g)
{
- main_part_ = Rational (m,n);
- grace_part_ = Rational (0);
+ main_part_ = m;
+ grace_part_ = g;
}
Moment::Moment (Rational m)
last_len.grace_part_ = Rational (0);
cumulative += last_len;
+
+ cumulative += - first_start ();
return cumulative;
}
{
Moment dur = 0;
for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
- dur = dur >? unsmob_music (gh_car (s))->length_mom ();
+ {
+ Music * m = unsmob_music (gh_car (s));
+ Moment l = m->length_mom () + m->start_mom ();
+ dur = dur >? l;
+ }
+ dur -= minimum_start ();
+
return dur;
}
int
Articulation_req const* a = dynamic_cast<Articulation_req const*> (r);
return a && gh_equal_p (get_mus_property ("articulation-type"),
- r->get_mus_property ("articulation-type"));
+ r->get_mus_property ("articulation-type"))
+ && get_direction () == a->get_direction ();
}
UGH: KLUDGE!
*/
- // if (delta_t > Moment (1,32))
+ // if (delta_t > Moment (Rational (1,32)))
hinterfleisch += stem_dir_correction (me, l, r);
}
scm_gc_unprotect_object (mp->self_scm ());
$$->set_mus_property ("numerator", gh_int2scm (n));
$$->set_mus_property ("denominator", gh_int2scm (d));
- $$->compress (Moment (n,d));
+ $$->compress (Moment (Rational (n,d)));
}
| Repeated_music { $$ = $1; }
meas_len = *unsmob_moment (m);
if (body_length_ < meas_len &&
- meas_len.main_part_.mod_rat (body_length_.main_part_) == Moment (0,0))
+ meas_len.main_part_.mod_rat (body_length_.main_part_) == Moment (Rational (0,0)))
repeat_sign_type_ = BEAT;
else if (meas_len == body_length_)
repeat_sign_type_ = MEASURE;
midi_track.add (Moment (0), &track_name);
// Some sequencers read track 0 last.
- // Audio_tempo tempo_a (midi_l_->get_tempo_i (Moment (1, 4)));
+ // Audio_tempo tempo_a (midi_l_->get_tempo_i (Moment (Rational (1, 4))));
// Midi_tempo tempo (&tempo_a);
// midi_track.add (Moment (0), &tempo);
int
Score_performer::get_tempo_i () const
{
- return performance_p_->midi_l_->get_tempo_i (Moment (1, 4));
+ return performance_p_->midi_l_->get_tempo_i (Moment (Rational (1, 4)));
}
void
*/
+/*
+
+ TODO: the grace note handling hasn't been done for skip() and
+ get_music(), meaning that staff-switching and partcombining will be
+ broken with grace notes.
+
+ */
+/*
+
+ TODO: the grace note handling hasn't been done for skip() and
+ get_music(), meaning that staff-switching and partcombining will be
+ broken with grace notes.
+
+ */
/*
Invariant for the data structure.
{
cursor_ = SCM_EOL;
here_mom_ = Moment (0);
- grace_skips_ = 0;
+ grace_fixups_ = 0;
iter_p_ =0;
}
Sequential_music_iterator::Sequential_music_iterator (Sequential_music_iterator const &src)
: Music_iterator (src)
{
- grace_skips_ = src.grace_skips_;
+ grace_fixups_ = src.grace_fixups_;
cursor_ = src.cursor_;
here_mom_ = src.here_mom_;
if (src.iter_p_)
*/
-Grace_skip *
-get_grace_skips (SCM cursor)
+Grace_fixup *
+get_grace_fixups (SCM cursor)
{
- Moment here (0);
+ Moment here;
Moment last (-1);
- Grace_skip *head = 0;
- Grace_skip **tail = &head;
-
+ Grace_fixup *head = 0;
+ Grace_fixup **tail = &head;
+
for (; gh_pair_p (cursor); cursor = gh_cdr (cursor))
{
Music * mus = unsmob_music (gh_car (cursor));
{
if (last != Moment (-1))
{
- Grace_skip *p =new Grace_skip;
+ Grace_fixup *p =new Grace_fixup;
p->start_ = last;
- p->length_ = (here - last).main_part_;
+ p->length_ = here - last;
p->grace_start_ = s.grace_part_;
p->next_ = 0;
*tail = p;
next_element ();
}
- grace_skips_ = get_grace_skips (cursor_);
-
here_mom_ = music_l ()->start_mom ();
+ grace_fixups_ = get_grace_fixups (cursor_);
/*
iter_p_->ok () is tautology, but what the heck.
Sequential_music_iterator::next_element ()
{
Moment len =iter_p_->music_length_mom ();
- Moment start = iter_p_->music_start_mom ();
- assert (!grace_skips_ || grace_skips_->start_ >= here_mom_);
+ assert (!grace_fixups_ || grace_fixups_->start_ >= here_mom_);
- if (len.main_part_ && grace_skips_ &&
- grace_skips_->start_.main_part_ == here_mom_.main_part_)
+ if (len.main_part_ && grace_fixups_ &&
+ grace_fixups_->start_ == here_mom_)
{
- Moment sk;
- sk.main_part_ = grace_skips_->length_;
- here_mom_ += sk;
- here_mom_.grace_part_ = grace_skips_->grace_start_;
-
- Grace_skip * n =grace_skips_->next_;
- delete grace_skips_;
- grace_skips_ = n;
+ here_mom_ += grace_fixups_->length_;
+ here_mom_.grace_part_ += grace_fixups_->grace_start_;
+
+ Grace_fixup * n =grace_fixups_->next_;
+ delete grace_fixups_;
+ grace_fixups_ = n;
}
else if (len.grace_part_ && !len.main_part_)
{
!len.grace_part_ || len.main_part_
We skip over a big chunk (mainpart != 0). Any starting graces
- in that chunk are compensated by subtracting START.
+ in that chunk should be in len.grace_part_
*/
- here_mom_ += len - start;
+ here_mom_ += len;
}
delete iter_p_;
Skip events till UNTIL. We don't do any other side effects such as
descending to child iterator contexts, because they might depend on
\context specs and \translator changes being executed
-
+ TODO: build support for grace notes here.
*/
void
Sequential_music_iterator::skip (Moment until)
{
while (iter_p_)
{
- if (grace_skips_ &&
- grace_skips_->start_ == here_mom_
- && (grace_skips_->start_ + grace_skips_->length_).main_part_ ==
- until.main_part_)
+ if (grace_fixups_ &&
+ grace_fixups_->start_ == here_mom_
+ && (grace_fixups_->start_ + grace_fixups_->length_
+ + Moment (Rational (0), grace_fixups_->grace_start_) == until))
{
/*
do the stuff/note/rest preceding a grace.
*/
- Moment u = until;
- u.grace_part_ = 0;
- iter_p_->process (u - here_mom_);
+ iter_p_->process (iter_p_->music_length_mom ()+
+ iter_p_->music_start_mom ());
+
}
else
iter_p_->process (until - here_mom_ + iter_p_->music_start_mom ());
/*
Fix-up a grace note halfway in the music.
*/
- if (grace_skips_ && here_mom_ == grace_skips_->start_
- && cp.main_part_ >= grace_skips_->length_)
+ if (grace_fixups_ && here_mom_ == grace_fixups_->start_
+ && grace_fixups_->length_ + iter_p_->music_start_mom () == cp)
{
- cp += here_mom_ ;
- cp.grace_part_ = grace_skips_->grace_start_;
- return cp;
-
+ return here_mom_ + grace_fixups_->length_ + Moment (0, grace_fixups_->grace_start_);
}
/*
UGH: KLUDGE!
*/
- if (delta_t > Moment (1,32))
+ if (delta_t > Moment (Rational (1,32)))
dist += stem_dir_correction (me, lc,rc);
SCM met = tempo_req_l_->get_mus_property ("metronome-count");
Duration *d = unsmob_duration (tempo_req_l_->get_mus_property ("duration"));
- Rational r = (d->length_mom () / Moment (1, 4) * Moment (gh_scm2int (met))).main_part_;
+ Rational r = (d->length_mom () / Moment (Rational (1, 4)) * Moment (gh_scm2int (met))).main_part_;
audio_p_ = new Audio_tempo (int (r));
daddy_trans_l_->set_property ("timeSignatureFraction",
gh_cons (gh_int2scm (4), gh_int2scm (4)));
- daddy_trans_l_->set_property ("measurePosition", Moment (0).smobbed_copy ());
- daddy_trans_l_->set_property ("measureLength", Moment (1).smobbed_copy ());
- daddy_trans_l_->set_property ("beatLength", Moment (1,4).smobbed_copy ());
+ daddy_trans_l_->set_property ("measurePosition", Moment (Rational (0)).smobbed_copy ());
+ daddy_trans_l_->set_property ("measureLength", Moment (Rational (1)).smobbed_copy ());
+ daddy_trans_l_->set_property ("beatLength", Moment (Rational (1,4)).smobbed_copy ());
}
Rational
\property Voice.Stem \override #'lengths =
#(map (lambda (x) (* 0.8 x)) '(3.5 3.5 3.5 4.5 5.0))
\property Voice.Stem \override #'beamed-lengths =
- #(map (lambda (x) (* 1.25 x)) '(0.0 2.5 2.0 1.5))
+ #(map (lambda (x) (* 0.8 x)) '(0.0 2.5 2.0 1.5))
\property Voice.Stem \override #'beamed-minimum-lengths =
- #(map (lambda (x) (* 1.25 x)) '(0.0 1.5 1.25 1.0))
+ #(map (lambda (x) (* 0.8 x)) '(0.0 1.5 1.25 1.0))
\property Voice.Stem \override #'no-stem-extend = ##t
\property Voice.Stem \override #'flag-style = #"grace"
\property Voice.Beam \override #'space-function = #grace-beam-space-function
- \property Voice.Beam \override #'thickness = #0.3
+ \property Voice.Beam \override #'thickness = #0.384
% Can't use Staff.fontSize, since time sigs, keys sigs, etc. will
% be smaller as well.
\property Voice.fontSize = #-2
- \property Staff.LocalKeyItem \override #'font-relative-size = #-2
+ \property Staff.Accidentals \override #'font-relative-size = #-2
}
stopGraceMusic = {
Begin3
Title: LilyPond
-Version: 1.5.5
-Entered-date: 12AUG01
+Version: 1.5.6
+Entered-date: 14AUG01
Description: @BLURB@
Keywords: music notation typesetting midi fonts engraving
Author: hanwen@cs.uu.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 1000k lilypond-1.5.5.tar.gz
+ 1000k lilypond-1.5.6.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.5.5.tar.gz
+ 1000k lilypond-1.5.6.tar.gz
Copying-policy: GPL
End
%define info yes
Name: lilypond
-Version: 1.5.5
+Version: 1.5.6
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.5.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.6.tar.gz
Summary: Create and print music notation
URL: http://www.cs.uu.nl/~hanwen/lilypond
BuildRoot: /tmp/lilypond-install
Distribution: SuSE Linux 7.0 (i386)
Name: lilypond
-Version: 1.5.5
+Version: 1.5.6
Release: 2
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.5.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.5.6.tar.gz
# music notation software for.. ?
Summary: A program for printing sheet music.
URL: http://www.lilypond.org/
draw_brevis(brevis_wid#);
fet_endchar;
-def draw_mensural_black_head (expr wid) =
+def draw_neo_mensural_black_head (expr wid) =
save head_width;
head_width# = wid;
set_char_box (0, head_width#, noteheight#/2, noteheight#/2);
filldraw z1 -- z2 -- z3 -- z4 -- cycle;
enddef;
-def draw_mensural_open_head (expr wid)=
- draw_mensural_black_head (wid);
+def draw_neo_mensural_open_head (expr wid)=
+ draw_neo_mensural_black_head (wid);
save diamNW, diamSW;
diamNW = length (z2 - z1) + blot_diameter;
diamSW = length (z4 - z1) + blot_diameter;
unfill z5 -- z6 -- z7 -- z8 --cycle;
enddef;
+fet_beginchar("Neo-mensural open head","0neo_mensural","neomensuralminimhead")
+ draw_neo_mensural_open_head (staff_space#);
+fet_endchar;
+
+fet_beginchar("Neo-mensural open head","1neo_mensural","neomensuralsemiminimhead")
+ draw_neo_mensural_open_head (staff_space#);
+fet_endchar;
+
+fet_beginchar("Neo-mensural black head","2neo_mensural","neofusahead")
+ draw_neo_mensural_black_head (staff_space#);
+fet_endchar;
+
+
+def draw_mensural_head (expr wid, open) =
+ save head_width;
+ head_width# = wid;
+ set_char_box (0, head_width#,
+ noteheight#/2, noteheight#/2);
+
+ define_pixels(head_width, noteheight);
+
+ x2 = head_width/2;
+ y2 = 1.1 noteheight/2;
+ y1 = 0;
+ (x2 - x1) / (y2 - y1) = tand(30);
+ z3 = (2x2 - x1, y1);
+ z4 = z3 + z1 - z2;
+
+ pickup pencircle
+ xscaled 0.18 head_width
+ yscaled 0.36 head_width
+ rotated -30;
+
+ if open:
+ draw z1 -- z2 -- z3 -- z4 -- cycle;
+ else:
+ filldraw z1 -- z2 -- z3 -- z4 -- cycle;
+ fi;
+enddef;
+
+
fet_beginchar("Mensural open head","0mensural","mensuralminimhead")
- draw_mensural_open_head (staff_space#);
+ draw_mensural_head (staff_space#, true);
fet_endchar;
fet_beginchar("Mensural open head","1mensural","mensuralsemiminimhead")
- draw_mensural_open_head (staff_space#);
+ draw_mensural_head (staff_space#, true);
fet_endchar;
fet_beginchar("Mensural black head","2mensural","fusahead")
- draw_mensural_black_head (staff_space#);
+ draw_mensural_head (staff_space#, false);
fet_endchar;
2beta# = ht# * b_h;
a# = beta# * a_b;
wd# = 2a# / a_w;
- set_char_box(0, wd#, 0.5 ht#, 0.5 ht#);
+ set_char_box(0.3wd#, 0.3wd#, 0.5 ht#, 0.5 ht#);
black_notehead_width# := wd#;
save za, alpha, size;
2beta# = ht# * b_h;
a# = beta# * a_b;
wd# = 2a# / a_w;
- set_char_box(0.0, 0.4wd#, 0.5ht#, 0.5ht#);
+ set_char_box(0.25wd#, 0.25wd#, 0.5ht#, 0.5ht#);
black_notehead_width# := wd#;
save convexity;
2beta#=ht#*b_h;
a# = beta#*a_b;
wd# = 2a# / a_w;
- set_char_box(0, wd#, 0.5 ht#, 0.5 ht#);
+ set_char_box(0.1wd#, 0.4wd#, 0.5 ht#, 0.5 ht#);
black_notehead_width# := wd#;
define_pixels(ht, wd);
2beta# = ht# * b_h;
a# = beta# * a_b;
wd# = 2a# / a_w;
- set_char_box(0, wd#, 0.5 ht#, 0.5 ht#);
+ set_char_box(wd#/2, wd#/2, 0.5 ht#, 0.5 ht#);
black_notehead_width# := wd#;
save za, alpha, size;
2beta# = ht# * b_h;
a# = beta# * a_b;
wd# = 2a# / a_w;
- set_char_box(wd#/2, wd#/2, 0.7 ht#, 0.7 ht#);
+ set_char_box(wd#, wd#, 0.7 ht#, 0.7 ht#);
black_notehead_width# := wd#;
- save za, zb, zc, alpha, size;
- pair za, zb, zc;
+ save za, alpha, size;
+ pair za;
define_pixels(ht, wd);
alpha = 35;
size = 0.7ht;
labels(4);
fet_endchar;
+% Hmm, changed 1.5 to 1.4 to avoid problems with "random" placement of
+% the dots because of quantization effects for almost integer values. /MB
+
+
+%
+% Hmm. Should not meddle with darkness of font. Check out the
+% correct value for radius. Maybe we'd better change padding --hwn
+%
fet_beginchar("staccato dot", "staccato", "staccato")
save radius;
- radius# = 1.5 stafflinethickness#;
+ radius# = 1.4 stafflinethickness#;
define_pixels(radius);
pickup pencircle scaled 2 radius;
draw (0,0);
fet_endchar;
+def draw_comma =
+ save alpha, thick, thin, ht;
+ alpha:=35;
+ thin# = 1.2 stafflinethickness#;
+ thick# = 3 stafflinethickness#;
+ ht# = .6staff_space#;
+ define_pixels(thin, thick,ht);
+ set_char_box(0, .5staff_space#, ht#, ht#);
+
+ penpos1(thick, alpha);
+ penpos2(thick, alpha+90);
+ penpos3(thin, 180-alpha);
+ penpos4(thin, 90-alpha);
+ x3r=0;
+ x1l=x3l;
+ y2r=-y4l=h;
+ z1=z2;
+ z3=z4;
+ penlabels(1,2,3,4);
+ fill z1l{dir (alpha+90)} .. z2r{dir alpha} .. z1r{dir (alpha-90)} ..
+ z3l{dir (270-alpha)} .. z4l{dir (alpha+180)} ..
+ z3r{dir (90-alpha)} .. cycle;
+enddef;
+
+fet_beginchar("Right Comma","rcomma","rcomma");
+ draw_comma;
+fet_endchar;
+
+fet_beginchar("Left Comma","lcomma","lcomma");
+ draw_comma;
+ xy_mirror_char;
+fet_endchar;
+
thick#:=1/24designsize;
define_blacker_pixels(thick);
fet_beginchar("mordent", "mordent", "mordent")
trills := 2;
- set_char_box(trills*twidth#-0.5toverlap#, trills*twidth#-0.5toverlap#, theight#, theight#);
+ set_char_box(trills*twidth#-0.5toverlap#, trills*twidth#-0.5toverlap#, 4/3*theight#, 4/3*theight#);
draw_trill_two;
draw_mordent(0);
fet_endchar;
fet_beginchar("prallmordent", "prallmordent", "prallmordent")
trills := 3;
- set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
+ set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, 4/3*theight#, 4/3*theight#);
draw_trill_three;
draw_mordent(twidth-0.5toverlap);
fet_endchar;
draw_trill_three;
fet_endchar;
+fet_beginchar("upmordent", "upmordent", "upmordent")
+% trills := 4;
+ trills := 3;
+ set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, 4/3*theight#, 4/3*theight#);
+% draw_slur(-2twidth#,-2theight#,0,-1);
+% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
+ draw_slur(0,-2theight#,0,-1);
+% currentpicture := currentpicture shifted (-0.5w+1.3tthin,-tfat*theight+1.5tthin);
+ currentpicture := currentpicture shifted (-0.5w+1.65tthin,-tfat*theight+1.15tthin);
+% draw_trill_four;
+ draw_trill_three;
+ draw_mordent(twidth-0.5toverlap);
+fet_endchar;
+
+fet_beginchar("downmordent", "downmordent", "downmordent")
+ trills := 3;
+ set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, 4/3*theight#, 4/3*theight#);
+% draw_slur(-2twidth#,2theight#,0,1);
+ draw_slur(0,2theight#,0,1);
+% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
+ currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.5tthin);
+ draw_trill_three;
+ draw_mordent(twidth-0.5toverlap);
+fet_endchar;
+
+fet_beginchar("lineprall", "lineprall", "lineprall")
+ trills := 3;
+ set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, 4*theight#);
+ pickup pencircle scaled tthin;
+ draw (-0.5w+tthin,-tfat*theight+0.5tthin) -- (-0.5w+tthin,h);
+ draw_trill_three;
+fet_endchar;
+
+fet_beginchar("pralldown", "pralldown", "pralldown")
+% trills := 4;
+ trills := 3;
+ set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
+% draw_slur(-2twidth#,-2theight#,0,-1);
+% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
+ draw_slur(0,-2theight#,0,-1);
+% currentpicture := currentpicture shifted (-0.5w+1.3tthin,-tfat*theight+1.5tthin);
+ currentpicture := currentpicture shifted (-0.5w+1.65tthin,-tfat*theight+1.15tthin);
+% draw_trill_four;
+ draw_trill_three;
+ currentpicture := currentpicture xscaled -1;
+fet_endchar;
+
+fet_beginchar("prallup", "prallup", "prallup")
+ trills := 3;
+ set_char_box(trills*twidth#-(trills-1)*0.5toverlap#, trills*twidth#-(trills-1)*0.5toverlap#, theight#, theight#);
+% draw_slur(-2twidth#,2theight#,0,1);
+ draw_slur(0,2theight#,0,1);
+% currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.75tthin);
+ currentpicture := currentpicture shifted (-0.5w+tthin,-tfat*theight+0.5tthin);
+ draw_trill_three;
+ currentpicture := currentpicture xscaled -1;
+fet_endchar;
+
%
%
fet_beginchar("Ed. Vat. Flat" , "vaticana-1", "vaticanaflat");
- set_char_box(0, 0.8 staff_space#, 0.6 staff_space#,
+ set_char_box(0, 0.7 staff_space#, 0.6 staff_space#,
2.0 staff_space#);
define_pixels (stafflinethickness, staff_space);
fet_endchar;
fet_beginchar("Ed. Vat. Natural" , "vaticana0", "vaticananatural");
- set_char_box(0, 0.7 staff_space#, 0.6 staff_space#,
+ set_char_box(0, 0.6 staff_space#, 0.6 staff_space#,
2.0 staff_space#);
define_pixels (stafflinethickness, staff_space);
%
%
fet_beginchar("Mensural Sharp" , "mensural1", "mensuralsharp");
- set_char_box(0, 0.7 staff_space#, 0.5 staff_space#,
+ set_char_box(0.4 staff_space#, 0.6 staff_space#, 0.5 staff_space#,
0.5 staff_space#);
save stemthick;
define_pixels (stemthick, staff_space);
fet_endchar;
fet_beginchar("Mensural Flat" , "mensural-1", "mensuralflat");
- set_char_box(0, 0.7 staff_space#, 0.4 staff_space#,
+ set_char_box(0.1 staff_space#, 0.7 staff_space#, 0.4 staff_space#,
1.8 staff_space#);
save stemthick;
define_pixels (stemthick, staff_space);
fet_endchar;
fet_beginchar("Hufnagel Flat" , "hufnagel-1", "hufnagelflat");
- set_char_box(0, 0.7 staff_space#, 0.4 staff_space#,
+ set_char_box(0.5 staff_space#, 0.7 staff_space#, 0.4 staff_space#,
1.8 staff_space#);
save stemthick;
define_pixels (stemthick, staff_space);
(grob-property-description 'left-padding number? "space left of accs.")
(grob-property-description 'length number? "Stem length for unbeamed stems, only for user override.")
(grob-property-description 'lengths list? "Stem length given multiplicity of flag.")
-(grob-property-description 'line-count integer? "Number of staff lines.")
+(grob-property-description 'line-count integer? "Number of staff
+lines. If you want to override this for staffs individually, you must
+use @code{\outputproperty}. @code{\property .. \override} will not
+work: @code{\override} is processed after the StaffSymbol is created,
+and will have no effect.
+")
(grob-property-description 'line-thickness number? "the thickness[stafflinethickness] of the line.")
(grob-property-description 'lookup symbol? "lookup method: 'value for plain text, 'name for character-name.")
(grob-property-description 'magnify number? "the magnification factor. FIXME: doesn't work for feta fonts.")
((default) '(1.0 . 0.5))
((cross) '(1.0 . 0.75))
((mensural) '(0.0 . 0.6))
+ ((neo_mensural) '(0.0 . 0.6))
((diamond) '(1.0 . 0.8))
((transparent) '(1.0 . 1.0))
((slash) '(1.0 . 1.0))
("stopped" . ((feta . ("stopped" . "stopped")) #f 0 1 0))
("staccato" . ((feta . ("staccato" . "staccato")) #t -1 0 -100))
("tenuto" . ((feta . ("tenuto" . "tenuto")) #t -1 0 0))
+ ("comma" . ((feta . ("lcomma" . "rcomma")) #t 0 1 0))
("upbow" . ((feta . ("upbow" . "upbow")) #f 0 1 0))
("downbow" . ((feta . ("downbow" . "downbow")) #f 0 1 0))
("lheel" . ((feta . ("upedalheel" . "upedalheel")) #f 0 -1 0))
("prallmordent" . ((feta . ("prallmordent" . "prallmordent")) #f 0 1 0))
("upprall" . ((feta . ("upprall" . "upprall")) #f 0 1 0))
("downprall" . ((feta . ("downprall" . "downprall")) #f 0 1 0))
+ ("upmordent" . ((feta . ("upmordent" . "upmordent")) #f 0 1 0))
+ ("downmordent" . ((feta . ("downmordent" . "downmordent")) #f 0 1 0))
+ ("lineprall" . ((feta . ("lineprall" . "lineprall")) #f 0 1 0))
+ ("pralldown" . ((feta . ("pralldown" . "pralldown")) #f 0 1 0))
+ ("prallup" . ((feta . ("prallup" . "prallup")) #f 0 1 0))
("segno" . ((feta . ("segno" . "segno")) #f 0 1 0))
("coda" . ((feta . ("coda" . "coda")) #f 0 1 0)))
default-script-alist)