itemize(
-it()url(Mudela)(../tex/DOEXPAND(outdir)/tutorial.html)
it()url(User documentation)(../tex/DOEXPAND(outdir)/index.html)
it()url(Hacker documentation)(../metadoc/DOEXPAND(outdir)/index.html)
it()url(Manual pages)(../man/DOEXPAND(outdir)/index.html)
-it()url(Bibliography)(../bibliography/DOEXPAND(outdir)/vocabulary.html)
+it()url(Bibliography)(../bibliography/DOEXPAND(outdir)/)
it()url(Musical vocabulary)(../tex/DOEXPAND(outdir)/vocabulary.html)
)
sect(Backlinks)
description(
+dit(lurl(http://sca.uwaterloo.ca/Mutopia/))
+ Mutopia project (under construction).
dit(lurl(http://www.ssc.com/linux/))
The Number One Free Operating System Kernel: Linux
dit(lurl( http://sound.condorow.net))
STEPMAKE_TEMPLATES=documentation
TO_TOP_FILES=$(addprefix $(outdir)/, $(README_TOP_FILES))
+PLAIN_FILES=angels.ly guile.patch
include $(depth)/make/stepmake.make
--index=http://www.cs.ruu.nl/people/hanwen/lilypond/index.html \
--news=$(depth)/NEWS $@
+dist-plain:
+ cp $(PLAIN_FILES) $(out-dir)
+
local-WWW:
subsect(NEWS) label(news)
+description(
+ dit(BUG FIXES)
+ itemize(
+ it() Error: Python path: Python installation is required nl()
+ Users reported problems with the installer finding the python
+ path for some versions of Python namely 1.5. I am using a
+ slightly different approach so that problem should be solved.
+ Thanks to Mats Bengtsson and Wolfgang Fischler reporting and
+ helping with this issue.
+ it() Unable to find lilyponddefs.tex nl()
+ This was due to using version version 1.07 of MiKTeX. I have
+ add known working versions for all of the required software
+ packages, per Mats suggestion. See link(Required
+ Packages)(packages).
+ )
+)
+
+description(
+ dit(NOTES)
+ itemize(
+ it() Please use the Add/Remove program control panel entry to
+ unistall your current version of Lilypond before you attempt to
+ install this one.
+
+ it() If you are upgrading from a previous version of lilypond you will most
+ likely need to flush your font cache. I generally just toss
+ file(D:\localtexmf\fonts\tfm\public\ehrhardt) and
+ file(D:\localtexmf\fonts\pk\ljfour\public\ehrhardt) in the Recyle
+ Bin. Your local font directory may be different, please refer to your
+ local installation of code(TeX).
+ )
+)
+
+
The FAT16, FAT32, and NTFS file system problems have been corrected.
I have tested various installations that are known to be operational.
The following configurations that have been tested.
it()convert-mudela
it()mudela-book
it()lilypond
- it()mi2mu
+ it()midi2ly
)
-If you are upgrading from a previous version of lilypond you will most
-likely need to flush your font cache. I generally just toss
-file(D:\localtexmf\fonts\tfm\public\ehrhardt) and
-file(D:\localtexmf\fonts\pk\ljfour\public\ehrhardt) in the Recyle
-Bin. Your local font directory may be different, please refer to your
-local installation of code(TeX).
I have also converted the Manual Pages for the above tools to HTML for
easy browsing. This release has been tested on Windows NT 4.0sp3 and
clearpage()
-subsect(Required packages) label(packages)
+subsect(Required Packages) label(packages)
LilyPond uses the code(TeX) package as its rendering engine. code(TeX)
represents the state-of-the-art in computer typesetting. It is used to
LilyPond.
itemize(
- it()url(code(MiKTeX))(http://www.snafu.de/~cschenk/miktex/)
- it()url(code(Python))(http://www.python.org)
- it()url(code(gsview))(http://www.cs.wisc.edu/~ghost/gsview/index.html)
+ it()url(code(MiKTeX))(http://www.snafu.de/~cschenk/miktex/). Versions
+ 1.10b, 1.11, and 1.20b are known to work.
+ it()url(code(Python))(http://www.python.org). Version 1.5.1 and
+ possibly 1.5 work.
+ it()url(code(gsview))(http://www.cs.wisc.edu/~ghost/gsview/index.html).
+ Version 5.10 is known to work.
)
link(Back to top)(contents)
to the next normal note. Grace notes have zero duration. If there
are tuplets, the grace notes won't be under the brace. Grace notes
can have accidentals, but they are (currently) spaced at a fixed
-distance.
-
-
+distance. Grace notes (of course) come before the accidentals of the
+main note. Grace notes can also be positioned after the main note.
\mudelafile{grace.ly}
By default, time signatures are written with two numbers. With style
``C'', 4/4 and 2/2 are written with their corresponding symbols and
-with style ``old'', 2/2, 3/2, 3/4, 4/4, 6/4, 9/4, 6/8 and 9/8 are
-typeset with symbols, all other signatures retain the default layout.
-The style ``1'', gives single number signatures for all signatures.
+with style ``old'', 2/2, 3/2, 2/4, 3/4, 4/4, 6/4, 9/4, 4/8, 6/8 and
+9/8 are typeset with symbols, all other signatures retain the default
+layout. The style ``1'', gives single number signatures for all
+signatures.
\mudelafile{time.fly}
+pl 59.uu1
+ - papervar loose_column_distance
+ - scripts don't collide.
+ - midi2ly outputs \context iso \type
+
+pl 59.jbr1
+ - lily/colhpos.cc: fixed typo
+ - Documentation/ntweb: Updated News and added all the files
+ associated with Windows Distribution web page.
+ - stepmake/bin/package-zip32.sh: added the ntweb page to formated
+ distribution.
+
+pl 59.jcn1
+ - bfs: slur damping
+ - papervar slur_interstaff_snap_to_stem
+
+pl 59.hwn1
+ - \property graceAlignPosition : put grace notes after main note.
+ - moved pianobrace stuff into Lookup
+ - moved Local_key_engraver out of Voice context, and
+acknowledge Grace_align_items. Solves tie + accidental problem.
+
+pl 59.mb1
+ - Some small clean-ups and bug fixes
+
+***********
+
pl 58.uu1
- experimental pdftex support, courtesy Stephen Peters.
- --version support
- only stretch the extra space after prefatory matter, not the
entire width of prefatory matter.
- standardise(d) switches:-d for debug, -M for Make deps, -m for midi-only.
- - bf: non_musical_space_strength now works. Set to 8 (-> Strong! )
+ - bf: papervar non_musical_space_strength now works. Set to 8 (-> Strong! )
- bf: space after time_sig.
- bf: decrescendi.
- bf: barlines on voltas
[-> leading are the lead strips between the sticks (lines) of
typeface. ie. leading is vertical space --hwn]
-
+. * Rewrite \rhythm to be during interpreting.
. * move \version check to lexer.ll
. * junk delayed spanner breaking.
. * check dangling_scm_sym working.
-. * revise pianobrace to put font stuff into Lookup
. * spacing of accidentals
-. * restorations & repeats
-. * \score {
- \context Staff \notes {
-c'2 fis'~
-% accidential after bar
-fis'4 % accidential should be here
-fis' g'2
-\repeat semi 2 {
-c' c'
-}
-\alternative {
-% no bars at the beginning of alternative 1 and at the end of alternative 2
-{
-d' d'
-}
-{
-c'1 c'
-}
-}
-d'4_"normal" d' \times 2/3 {e' e' e'}
-% no triplet bracket in \tiny
-\tiny d'4_"tiny" d' \times 2/3 {e' e' e'}
- }
-}
-
+. * key restorations & repeats
. *
So how do I do what I want to do?
of the grace notes and extend to the note after the grace notes.
How do I specify these?
-
-How can I control whether a grace note takes its time from the note
-before or the note after it (for the purposes of alignment with
-lyrics)?
-. * / distance after 4/4 \key.
. * spanners from grace to normal ctxt
. * Glen:
-1. I got a vertical line where I asked for a decrescendo.
-
-2. Slurs -- good to see some spacing between slurs and lyrics, but not
-there's several times too much space.
-
-3. Slurs with wrong slopes. Where a slur between two notes goes from the
-head of one to the stem of another it can have the wrong slope:
- | ___
- | / \
- | / |
- x|/ |
- |
- x|
- The music goes down but the slur goes up (or vice versa). This looks
-wrong.
-
-4. Lyrics and \fermata collide. I know that the TODO has lyrics and scripts
-colliding; I'm just including it here because it's really an issue for me
-with fermata. Other scripts aren't a problem for me, but sometimes I need
-fermata on both sides of the staff (when sop and alto hold different notes,
-for example). In fact it's not just scripts and lyrics: In a choirstaff,
-scripts above the bass clef collide with scripts below the treble clef.
5. Sometimes lyrics extend past the right end of the staff. I guess that
this is a similar problem (if not another symptom of the same problem) as
one of the spacing bugs mentioned in the TODO.
-
-6. The bar line at the beginning of an \alternative section has disappeared
-altogether.
-
-7. When it's a tight fit to get all the notes in the first line, the first
-note collides with the time signature. Is this the same as one of the
-spacing bugs mentioned in the TODO?
-
-.* 4. Lyrics and grace sections don't go too well together.
+. * 4. Lyrics and grace sections don't go too well together.
The words are aligned with the main note, not the start of the
grace note. This is usually wrong, but is sometimes right.
. * Auto_beam debugging output (waarom/wanneer heb jij die weggehaald?)
. * add new glyphs to font.ly
. * formatting of input stuff.
. * deps for ly2dvi
-. * decide wether to junk _ in lyrics.
. * indent = 0.0 with linewidth=-1.0
. * collisions & accidentals.
. * auto-beaming in input/test/spacing.ly:
. * behavior of "that the obvious solution
\lyrics { foo1*4 __ _ }" is unintuitive.
. * Lyrics and scripts collide.
-. * grace_align_item -> stackingdir = left, weird placement.
. * filenames : junk lily.x
.* Cleanups needed
. * \$ and $ identifier syntax in examples.
+. * Junk ghost positioning objects eg, Script leans on Staffside
+ leans on Staff.
+
. * bracket ps code.
. * Key_engraver, Local_key_item
. * Think of comprehensive solution for "if (grace_b == self_grace_b_)"
. * make wide_spanner_engraver (line_group_spanner, staff_symbol)
. * store req -> element, element -> element causes for warnings
. * compulsory hshift
-. * dots & rest collisions?
. *
My wish list for lyrics. I dream of a time when I will have enough time to
become familiar enough with the source code to be able to implement some of
\cadenza , \meter, should all be \properties
. * fix singleStaffBracket
. * rename
-. * measure -> bar
. * abbreviation-beam -> (measured/unmeasured) tremolo
. * partial -> anacrouse
-. * robustify Beam (in case of no stems, 32nd notes)
. * move paper vars into engraver properties
. * check for groff / troff/ nroff et
. * more intelligent file searching
. * disable spaces in TeX stuff
. * handle ^C for tmp/file creation.
. * make LilyPond RPM fully relocatable
-. * the warning about the negative slur/tie length appears twice
-which is irritating.
. * better hshift (dots, distance, head dependent)
. * clefs (AG): The "8" should appear closer to the actual clef,
touching it.
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=1
-PATCH_LEVEL=59
+PATCH_LEVEL=60
MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl WARNING WARNING WARNING WARNING
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
+dnl WARNING WARNING WARNING WARNING
+dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl aclocal.m4 -*-shell-script-*-
dnl StepMake subroutines for configure.in
operator Rational();
Scalar() {}
bool isnum_b() const;
+ bool isdir_b() const;
+ bool isint_b() const;
operator Real();
operator int();
bool to_bool () const;
return Rational (s1.value_i (), s2.value_i ());
}
+bool
+Scalar::isdir_b () const
+{
+ int conv = length_i ();
+ if (conv)
+ {
+ long l =0;
+ conv = sscanf (strh_.ch_C (), "%ld", &l);
+ conv = conv && (l >= -1 && l <= 1);
+ }
+ return conv;
+}
+
bool
Scalar::isnum_b () const
{
+++ /dev/null
-\score { \notes {
-\context StaffGroup <\context PianoStaff = PA< c4 d4 >
- \context PianoStaff =PB < c4 d4 >
->}
-}
-
+++ /dev/null
-\score {
- \notes {
- c'\longa c'\breve
- c'1 c'2 c'4 c'8 c'16 c'32 c'64 c'64 c'2. c'8. c'16
- }
- \paper {
- linewidth = -1.0;
- \translator { \type "Score_engraver";
- \name "Score";
- \consists "Note_heads_engraver";
- \consists "Stem_engraver";
- \consists "Rhythmic_column_engraver";
- }}}
-
+++ /dev/null
-%grace-accident.ly
-\score{
- \context Staff=foo \notes\relative c''{
-% c8 % remove line to dump core
- \grace { cis8 dis } e,4
- }
-}
+++ /dev/null
-%hairy grace stuff:
-
-\score{
- \context Staff=foo \notes\relative c''{
- % two auto beams
- d4 \grace c8 d8 \grace { d16 c16 } d8 c2
- \property Voice.verticalDirection = 1
- % colliding beams
- d4 \grace c8 d8 \grace { d16 c16 } d8 c2
- \property Voice.verticalDirection = 0
- % leger lines
- d,,4 \grace c8 d8 \grace { d16 c16 } d8 c2
- }
-}
+++ /dev/null
-\score{\notes{
-c'' \< \! c'' d'' \decr e'' \rced
-< f''1 {s4 \< \! s4 \> \! s2 } >
-}}
+++ /dev/null
-shortlong = \notes{
- c4()c( c c |
- c c c c |
- c c c c |
- \break
- c c c )c |
- c c c c |
- c c c c |
- c c c c |
- c c c c |
-}
-
-\score{
- \shortlong
- \paper{
- indent = 0.0\pt;
- % linewidth= 30.\mm;
- castingalgorithm = \Wordwrap;
- }
-}
\score {\notes \context Voice = VA \relative c'' {
\grace c8 c4
- \grace { [c32 cis32] } c4
- \grace { [c32 c32] } \times 2/3 { [c8 c c] }
+ \grace { [c32 cis32] } gis4
+ \grace { [cis32 dis32] } e4
+ \grace { [c32 d] }\times 2/3 { [c8 c c] }
\grace { [b32 ( c32] } ) c4
- \grace c16 [c8 c8]
+ \grace c16 [c8 c8]
+ \grace { \property Grace.graceAlignPosition = \right c16} c4
}
\paper {linewidth = -1.;}
}
+++ /dev/null
-\version "1.1.52";
-
-% bug
-% excentric slur can't handle this ...
-\score{
- \notes{
- \stemdown
- \times 4/5 {c8( c f,, c c} c c c )c |
- }
-}
+++ /dev/null
-\version "1.1.52";
-
-
-% middle tie is wrong
-\score{
- \notes\relative c'{
- { <c4 e g > ~ <d f a>
- }
-}}
-
c' d e f |
\repeat semi 2 { g a b c }
-\alternative { { c b a g a g a g} { f e d c } } \break
-%c, d e f | % Assertion failure if this line is removed!!
+\alternative { { c b a g a g a g} { f e d c } }
\repeat semi 2 { g a b c }
-\alternative { { c b a g \break a g a g} { f e d c } } \break
+\alternative { { c b a g \break a g a g} { f e d c } }
c, d e f |
\repeat semi 2 { g a b c }
-\alternative { { c b a g \break a g a g \break a b a b } { f e d c } } \break
+\alternative { { c b a g \break a g a g \break a b a b } { f e d c } }
c, d e f |
\repeat semi 2 { g a b c }
-\alternative { { c b a g } { f e d c \break a g a g} } \break
+\alternative { { c b a g } { f e d c \break a g a g} }
c, d e f |
\repeat semi 2 { g a b c }
\alternative { { c b a g a g a g} { f e d c \bar "|.";} }
+#if 0
/*
abbreviation-beam.cc -- implement Abbreviation_beam
*/
return Beam::stem_beams (here, next, prev);
}
+#endif
*/
class Align_note_column_engraver: public Engraver
{
- Axis_align_item * align_item_p_;
+ Grace_align_item * align_item_p_;
Note_column * now_column_l_;
Local_key_item * accidental_l_;
void
Align_note_column_engraver::do_removal_processing ()
{
+ Scalar al = get_property ("graceAlignPosition", 0);
+ if (al.isdir_b ())
+ {
+ align_item_p_->notehead_align_dir_ = int (al);
+ }
+
typeset_element (align_item_p_);
align_item_p_ =0;
}
#include "axis-group-element.hh"
#include "graphical-axis-group.hh"
-
-
Link_array<Score_element>
Axis_group_element::get_extra_dependencies() const
{
- return elem_l_arr ();
+ Link_array<Score_element> e(elem_l_arr ());
+ return e;
}
Link_array<Score_element>
{
Link_array<Score_element> childs;
Link_array<Score_element> elems = elem_l_arr ();
+ elems.concat (extra_elems_ );
for (int i=0; i < elems.size (); i++)
{
Score_element* e = elems[i];
Score_element*n)
{
int i;
- while ((i = elem_l_arr_.find_i (o))>=0)
- if (n)
+ Graphical_element * go = o;
+ Graphical_element * gn = n;
+
+ while ((i = elem_l_arr_.find_i (go))>=0)
+ elem_l_arr_.substitute (go,gn);
+#if 0
+ if (n)
elem_l_arr_[i] = n;
else
elem_l_arr_.del (i);
+#endif
+ extra_elems_.substitute (o, n);
+}
+
+Interval
+Axis_group_element::extra_extent (Axis a )const
+{
+ Interval g;
+ for (int i=0; i < extra_elems_.size (); i++)
+ {
+ Interval ge = extra_elems_[i]->extent (a);
+ ge += extra_elems_[i]->relative_coordinate (dim_cache_[a], a);
+ g.unite (ge);
+ }
+ return g;
}
Interval
Axis_group_element::do_height () const
{
- return Graphical_axis_group::extent (Y_AXIS);
+ Interval gag = Graphical_axis_group::extent (Y_AXIS);
+ gag.unite (extra_extent (Y_AXIS));
+ return gag;
}
Interval
Axis_group_element::do_width () const
{
- return Graphical_axis_group::extent (X_AXIS);
+ Interval gag = Graphical_axis_group::extent (X_AXIS);
+ gag.unite (extra_extent (X_AXIS));
+ return gag;
+}
+
+
+/*
+ UGH.
+ */
+void
+Axis_group_element::add_extra_element (Score_element *e)
+{
+ Link_array<Score_element> se;
+ while (e && e != this)
+ {
+ se.push (e);
+ e = dynamic_cast<Score_element*> (e->dim_cache_[Y_AXIS]->parent_l_ ? e->dim_cache_[Y_AXIS]->parent_l_->element_l() : 0);
+ }
+
+ if (1) // e == this)
+ {
+ for (int i=0; i < se.size( ); i++)
+ {
+ extra_elems_.push (se[i]);
+ add_dependency (se[i]);
+ se[i]->set_elt_property (ly_symbol ("Axis_group_element::add_extra_element"), SCM_BOOL_T); // UGH GUH.
+ }
+
+ }
}
void
Axis_group_engraver::acknowledge_element (Score_element_info i)
{
- if (!i.elem_l_->parent_l (Y_AXIS))
- {
- elts_.push (i.elem_l_);
- }
+ elts_.push (i.elem_l_);
}
void
{
if (!elts_[i]->parent_l (Y_AXIS))
staffline_p_->add_element (elts_[i]);
+
+ /* UGH UGH UGH */
+ else if (elts_[i]->get_elt_property (ly_symbol ("Axis_group_element::add_extra_element")) == SCM_BOOL_F)
+ {
+ staffline_p_->add_extra_element (elts_[i]);
+ }
}
elts_.clear ();
}
Column_x_positions::OK() const
{
#ifndef NDEBUG
- assert (config.size() == cols.size ());
+ assert (config_.size() == cols_.size ());
#endif
}
Dot_column::Dot_column ()
{
- align_dir_ = RIGHT;
+ notehead_align_dir_ = RIGHT;
set_axes(X_AXIS,X_AXIS);
}
{
warning (_ ("Slur over rest?"));
o_[X_AXIS] = note_column->hpos_f ();
+ o_[Y_AXIS] = note_column->extent (Y_AXIS)[dir];
return;
}
o_[X_AXIS] -= 0.5 * stem_l->dir_ * note_column->extent (X_AXIS).length ();
- if (stem_l->dir_ == dir)
+ if ((stem_l->dir_ == dir)
+ && !stem_l->extent (Y_AXIS).empty_b ())
{
o_[Y_AXIS] = stem_l->extent (Y_AXIS)[dir];
+ // URG URG.
+ // some slur in choral.ly returns -inf here
+ if (abs (o_[Y_AXIS]) > 1000)
+ o_[Y_AXIS] = 0;
}
else
{
representing a musical notation symbol. */
Protected_scm func_;
Protected_scm font_;
+
+ /*
+ TODO: move this into the font_ field.
+ */
Protected_scm magn_;
};
class Axis_group_element : public virtual Score_element,
public virtual Graphical_axis_group
{
+ Link_array<Score_element> extra_elems_;
+
protected:
virtual void do_print() const;
virtual Link_array<Score_element> get_extra_dependencies() const;
- virtual Interval do_height () const;
- virtual Interval do_width () const;
-public:
virtual void do_substitute_element_pointer (Score_element*,Score_element*);
virtual Link_array<Score_element> elem_l_arr() const;
+
+ virtual Interval do_height () const;
+ virtual Interval do_width () const;
+
+
+Interval extra_extent (Axis a ) const;
+
+public:
+ /**
+ add an element that only influences size, but does not have X/Y parent
+ relationship with THIS.
+ */
+ void add_extra_element (Score_element*);
+
+
Axis_group_element ();
virtual void set_axes (Axis,Axis);
void print () const;
};
-struct Spacer_spring
-{
- Real distance_f_;
- Real hooke_f_;
- Real other_idx_;
-};
-
/// helper struct for #Spacing_problem#
struct Column_info {
Paper_column *pcol_l_;
bool ugh_b_;
Drul_array< Array<Spacer_rod> > rods_;
- // Drul_array< Array<Spacer_spring> > springs_;
-
+
Column_info();
Column_info (Paper_column *,Real const *);
#define LILY_PROTO_HH
#include "proto.hh"
-struct Absolute_dynamic_req;
-struct Stem_tremolo;
+
+
struct Abbreviation_beam;
-struct Abbreviation_beam_req;
struct Abbreviation_beam_engraver;
-struct Tremolo_req;
-struct Adobe_font_metric;
+struct Abbreviation_beam_req;
+struct Absolute_dynamic_req;
struct Adobe_font_char_metric;
+struct Adobe_font_metric;
+struct Align_element;
struct All_font_metrics;
struct Articulation_req;
struct Atom;
+struct Audio_column;
struct Audio_element;
struct Audio_element_info;
-struct Audio_column;
-struct Audio_item;
struct Audio_instrument;
+struct Audio_item;
struct Audio_key;
-struct Audio_text;
-struct Audio_time_signature;
struct Audio_note;
struct Audio_note_off;
-struct Audio_tie;
struct Audio_staff;
struct Audio_tempo;
+struct Audio_text;
+struct Audio_tie;
+struct Audio_time_signature;
struct Auto_beam_engraver;
-struct Axis_group_element;
-struct Axis_group_spanner;
-struct Axis_group_item;
struct Axis_align_item;
struct Axis_group;
+struct Axis_group_element;
+struct Axis_group_item;
+struct Axis_group_spanner;
struct Bar;
-struct Bar_column_engraver;
struct Bar_column;
+struct Bar_column_engraver;
struct Bar_engraver;
struct Bar_req;
struct Barcheck_req;
struct Bracket_req;
struct Break_align_item;
struct Break_req;
+struct CHyphen_req;
struct Cadenza_req;
struct Change_iterator;
struct Change_translator;
struct Chord;
struct Chord_name_engraver;
-struct CHyphen_req;
struct Clef_change_req;
-struct Clef_item;
struct Clef_engraver;
+struct Clef_item;
struct Clef_performer;
-struct Column_x_positions;
-struct Column_info;
-struct Column_spring;
struct Collision;
struct Collision_engraver;
+struct Column_info;
+struct Column_spring;
+struct Column_x_positions;
struct Command_req;
struct Command_script_req;
struct Command_tie_engraver;
-struct Time_scaled_music;
-struct Time_scaled_music_iterator;
struct Crescendo ;
-struct Dots;
-struct Dot_column;
struct Directional_spanner;
+struct Dot_column;
+struct Dots;
struct Durational_req;
struct Dynamic;
struct Dynamic_req;
struct Engraver_group_engraver;
struct Extender;
struct Extender_req;
-struct Script;
-struct Script_req;
-struct Staff_side_item;
-struct Text_item;
+struct Folded_repeat_iterator;
struct General_script_def;
-struct Graphical_element;
-
-struct Graphical_axis_group;
struct Global_translator;
-struct Hara_kiri_line_group_engraver;
+struct Grace_align_item;
+struct Graphical_axis_group;
+struct Graphical_element;
struct Hara_kiri_group_spanner;
+struct Hara_kiri_line_group_engraver;
struct Head_column;
-
struct Idealspacing;
struct Identifier;
struct Input_file;
struct Item;
struct Key;
struct Key_change_req;
-struct Key_item;
struct Key_engraver;
+struct Key_item;
struct Key_performer;
struct Keyword;
struct Keyword_table;
struct Line_spacer;
struct Linestaff;
struct Local_key;
-struct Local_key_item;
struct Local_key_engraver;
+struct Local_key_item;
struct Lookup;
struct Lyric_item;
struct Lyric_req;
struct Midi_header;
struct Midi_item;
struct Midi_key;
-struct Midi_time_signature;
struct Midi_note;
struct Midi_note_event;
struct Midi_note_off;
struct Midi_score;
struct Midi_stream;
struct Midi_tempo;
+struct Midi_time_signature;
struct Midi_track;
struct Midi_walker;
struct Mixed_qp;
struct Molecule;
struct Multi_measure_rest;
-struct Multi_measure_rest_req;
struct Multi_measure_rest_engraver;
+struct Multi_measure_rest_req;
struct Music;
struct Music_iterator;
-struct Musical_req;
-struct Musical_span_req;
-struct Musical_script_req;
struct Music_list;
struct Music_list_iterator;
struct Music_output;
struct Music_output_def;
-struct Musical_pitch;
struct Music_sequence;
struct Music_wrapper;
struct Music_wrapper_iterator;
+struct Musical_pitch;
+struct Musical_req;
+struct Musical_script_req;
+struct Musical_span_req;
struct My_lily_lexer;
struct My_lily_parser;
struct Note_column;
struct Note_column_engraver;
-struct Note_performer;
-struct Note_req;
struct Note_head;
struct Note_head_engraver;
+struct Note_performer;
+struct Note_req;
struct Notename_table;
-struct Repeated_music;
-struct Unfolded_repeat_iterator;
-struct Folded_repeat_iterator;
struct Offset;
struct Paper_column;
struct Paper_def;
struct Partial_measure_req;
struct Performance;
struct Performer;
-struct Tuplet_spanner;
-struct Piano_brace;
struct Performer;
struct Performer_group_performer;
+struct Piano_brace;
struct Property_iterator;
struct Rational;
-struct Request;
-struct Request_column;
-struct Relative_octave_music;
struct Re_rhythmed_music;
+struct Relative_octave_music;
struct Repeat_engraver;
struct Repeated_music;
+struct Repeated_music;
struct Repeated_music_iterator;
+struct Request;
+struct Request_chord;
+struct Request_column;
struct Rest;
struct Rest_collision;
struct Rest_collision_engraver;
struct Rest_req;
struct Rhythmic_grouping;
-struct Rhythmic_head;
struct Rhythmic_grouping_req;
+struct Rhythmic_head;
struct Rhythmic_req;
struct Scope;
-struct Separating_group_spanner;
struct Score;
struct Score_column;
struct Score_element;
struct Score_element_info;
struct Score_performer;
+struct Script;
+struct Script_req;
+struct Separating_group_spanner;
+struct Sequential_music;
struct Simple_music;
struct Simultaneous_music;
struct Single_malt_grouping_item;
struct Slur_engraver;
struct Spacing_spanner;
struct Span_bar;
-struct Span_score_bar;
struct Span_req;
+struct Span_score_bar;
struct Spanner;
struct Spring;
struct Spring_spacer;
struct Staff_bracket;
struct Staff_performer;
struct Staff_side;
+struct Staff_side_item;
struct Staff_symbol;
struct Stem;
struct Stem_beam_engraver;
struct Stem_req;
+struct Stem_tremolo;
struct String;
+struct Super_element;
struct Symtable;
struct Symtables;
-struct Super_element;
-struct Translation_property;
struct Tempo_req;
struct Tex_font_char_metric;
struct Tex_font_metric;
struct Tex_font_metric_reader;
struct Text_def;
+struct Text_engraver;
struct Text_gob;
struct Text_item ;
-struct Text_engraver;
+struct Text_item;
struct Text_req;
struct Text_spanner;
struct Tie;
struct Tie_engraver;
struct Tie_req;
struct Time_description;
+struct Time_scaled_music;
+struct Time_scaled_music_iterator;
struct Time_signature;
struct Time_signature_change_req;
struct Time_signature_engraver;
struct Time_signature_performer;
+struct Timing_engraver;
+struct Timing_req;
+struct Timing_translator;
struct Tonic_req;
+struct Translation_property;
struct Translator;
struct Translator_group;
-struct Timing_req;
-struct Timing_translator;
-struct Timing_engraver;
+struct Tremolo_req;
+struct Tuplet_spanner;
+struct Unfolded_repeat_iterator;
struct Vertical_brace;
struct Vertical_spanner;
-
struct Volta_spanner;
-struct Align_element;
-struct Sequential_music;
-struct Request_chord;
typedef Rational Moment;
typedef Scope Header;
#include "engraver.hh"
#include "key.hh"
#include "parray.hh"
-
+/**
+ Make accidentals. Catches note heads, ties and notices key-change
+ events. Due to interaction with ties (which don't come together
+ with note heads), this needs to be in a context higher than Tie_engraver.
+ (FIXME).
+ */
struct Local_key_engraver : Engraver {
Local_key_item *key_item_p_;
protected:
Link_array<Item > tied_l_arr_;
Local_key_engraver();
bool self_grace_b_;
-
+ Grace_align_item * grace_align_l_;
};
#endif // LOCALKEYGRAV_HH
{
Link_array<Item> support_l_arr_;
public:
- Direction align_dir_;
+ // naming to avoid conflict with Align_element
+ Direction notehead_align_dir_;
Note_head_side ();
void add_support (Item*);
/*
- local-key-reg.cc -- implement Local_key_engraver
+ local-key-engraver.cc -- implement Local_key_engraver
(c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "note-head.hh"
#include "time-description.hh"
#include "engraver-group-engraver.hh"
-
+#include "grace-align-item.hh"
Local_key_engraver::Local_key_engraver()
{
key_grav_l_ = 0;
key_item_p_ =0;
- self_grace_b_ = false;
+ grace_align_l_ =0;
}
void
local_key_ = key_grav_l_->key_;
}
- self_grace_b_ = get_property ("weAreGraceContext",0 ).to_bool ();
-
/*
TODO
(if we are grace) get key info from parent Local_key_engraver
local_key_.set (note_l->pitch_);
}
}
+ if (key_item_p_ && grace_align_l_)
+ {
+ grace_align_l_->add_support (key_item_p_);
+ grace_align_l_ =0;
+ }
+
}
void
typeset_element (key_item_p_);
key_item_p_ =0;
}
-
+
+ grace_align_l_ = 0;
mel_l_arr_.clear();
tied_l_arr_.clear();
support_l_arr_.clear();
void
Local_key_engraver::acknowledge_element (Score_element_info info)
-{
+{
+ bool selfgr = get_property ("weAreGraceContext", 0).to_bool ();
+ bool he_gr = info.elem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F;
+
+ Grace_align_item * gai = dynamic_cast<Grace_align_item*> (info.elem_l_);
+ if (he_gr && !selfgr && gai)
+ {
+ grace_align_l_ = gai;
+ }
Note_req * note_l = dynamic_cast <Note_req *> (info.req_l_);
Note_head * note_head = dynamic_cast<Note_head *> (info.elem_l_);
- bool gr = (info.elem_l_->get_elt_property (grace_scm_sym)!=SCM_BOOL_F);
- if (gr != self_grace_b_)
+
+
+ if (he_gr != selfgr)
return;
if (note_l && note_head)
)
*/
+ Real step = 1.0;
+ int minht = 2 * staff_size;
+ int maxht = 7 * minht;
+ int idx = ((maxht - step) <? y - minht) / step;
+ idx = idx >? 0;
- Atom at (gh_list (pianobrace_scm_sym,
- gh_double2scm (y),
- gh_int2scm (staff_size),
- SCM_UNDEFINED
- ));
+ SCM f = ly_symbol (String ("feta-braces" + to_str (staff_size)));
+ SCM e =gh_list (char_scm_sym, gh_int2scm (idx), SCM_UNDEFINED);
+ Atom at (e);
+ at.font_ = f;
m.dim_[Y_AXIS] = Interval (-y/2,y/2);
m.dim_[X_AXIS] = Interval (0,0);
if (x_int.empty_b ())
x_int = Interval(0,0);
- translate_axis (-extent(X_AXIS)[-align_dir_] + x_int[align_dir_], X_AXIS);
+ translate_axis (-extent(X_AXIS)[-notehead_align_dir_] + x_int[notehead_align_dir_], X_AXIS);
}
void
Note_head_side:: Note_head_side()
{
- align_dir_ = LEFT;
+ notehead_align_dir_ = LEFT;
}
side directly attached to note head;
no beam getting in the way
*/
- if (((stem_l->get_elt_property (transparent_scm_sym) != SCM_BOOL_F)
+ if ((stem_l->extent (Y_AXIS).empty_b ()
|| !((stem_l->dir_ == dir_) && (dir_ != d)))
&& !((dir_ == stem_l->dir_)
&& stem_l->beam_l_ && (stem_l->beams_i_drul_[-d] >= 1)))
Real height_damp_f;
Real slope_damp_f;
Real snap_f;
- Real ratio_f;
-
- if (!fix_broken_b)
- dy_f_drul_[RIGHT] += interstaff_f;
- Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
-
- Real dx_f = do_width ().length () + dx_f_drul_[RIGHT] - dx_f_drul_[LEFT];
- Real height_f = do_height ().length ();
if (!interstaff_b)
{
snap_f = paper_l ()->get_var ("slur_interstaff_snap_to_stem");
}
+ Real ratio_f;
+ if (!fix_broken_b)
+ dy_f_drul_[RIGHT] += interstaff_f;
+ Real dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
+ Real dx_f = do_width ().length () + dx_f_drul_[RIGHT] - dx_f_drul_[LEFT];
/*
Avoid too steep slurs.
Direction d = (Direction)(- dir_ * (sign (dy_f)));
if (!d)
d = LEFT;
- dy_f_drul_[d] += dir_ * (ratio_f - slope_damp_f) * dx_f;
+ Real damp_f = (ratio_f - slope_damp_f) * dx_f;
+ /*
+ must never change sign of dy
+ */
+ damp_f = damp_f <? abs (dy_f);
+ dy_f_drul_[d] += dir_ * damp_f;
}
/*
Avoid too high slurs
+
+ Wierd slurs may look a lot better after they have been
+ adjusted a bit.
+ So, we'll do this in 3 steps
*/
- ratio_f = abs (height_f / dx_f);
- if (ratio_f > height_damp_f)
+ for (int i = 0; i < 3; i++)
{
- Direction d = (Direction)(- dir_ * (sign (dy_f)));
- if (!d)
- d = LEFT;
- Real damp_f = dir_ * (ratio_f - height_damp_f) * dx_f;
- dy_f_drul_[d] += damp_f;
- /*
- if y positions at about the same height, correct both ends
- */
- if (abs (dy_f / dx_f ) < slope_damp_f)
+ Real height_f = do_height ().length ();
+ dy_f = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
+
+ ratio_f = abs (height_f / dx_f);
+ if (ratio_f > height_damp_f)
{
- dy_f_drul_[-d] += damp_f;
+ Direction d = (Direction)(- dir_ * (sign (dy_f)));
+ if (!d)
+ d = LEFT;
+ /* take third step */
+ Real damp_f = (ratio_f - height_damp_f) * dx_f / 3;
+ /*
+ if y positions at about the same height, correct both ends
+ */
+ if (abs (dy_f / dx_f ) < slope_damp_f)
+ {
+ dy_f_drul_[-d] += dir_ * damp_f;
+ dy_f_drul_[d] += dir_ * damp_f;
+ }
+ /*
+ don't change slope too much, would have been catched by slope damping
+ */
+ else
+ {
+ damp_f = damp_f <? abs (dy_f/2);
+ dy_f_drul_[d] += dir_ * damp_f;
+ }
}
}
connected.connect (fixed[i-1], fixed[i]);
/*
- connect unconnected columns with distances of 1.0;
+ If columns do not have spacing information set, we need to supply our own.
*/
+ Real d = paper_l ()->get_var ("loose_column_distance");
for (int i = cols_.size(); i--;)
{
if (! connected.equiv (fixed[0], i))
{
connected.connect (i-1, i);
- connect (i-1, i, 1.0, 1.0);
+ connect (i-1, i, d, 1.0);
}
}
}
\consists "Staff_symbol_engraver";
\consists "Collision_engraver";
\consists "Rest_collision_engraver";
+ \consists "Local_key_engraver";
+
\consistsend "Axis_group_engraver";
\type "Engraver_group_engraver";
\consists "Dynamic_engraver"; % must come before text_engraver.
\name Voice ;
- \consists "Local_key_engraver";
-
+
+ \consists "Tie_engraver";
\consists "Breathing_sign_engraver";
\consists "Rest_engraver";
\consists "Dot_column_engraver";
\consists "Rhythmic_column_engraver";
\consists "Font_size_engraver";
\consists "Slur_engraver";
- \consists "Tie_engraver";
\consists "Tuplet_engraver";
\consists "Grace_position_engraver";
\consists "Skip_req_swallow_translator";
slur_x_minimum = 3.0 * \interline;
% slope damping: keep dy/dx < slur_slope_damping
-slur_slope_damping = 0.3;
+slur_slope_damping = 0.35;
slur_interstaff_slope_damping = 0.8;
% height damping: keep h/dx < slur_height_damping
-slur_height_damping = 0.6;
-slur_interstaff_height_damping = 1.5;
+slur_height_damping = 0.45;
+slur_interstaff_height_damping = 1.2;
% snap to stem if slur ends closer to stem than
slur_snap_to_stem = 1.5 * \interline;
slur_interstaff_snap_to_stem = 2.5 * \interline;
non_musical_space_strength = 40.0;
-
+%If columns do not have spacing information set, set it to this much
+loose_column_distance = 2.0 * \interline;
\include "engraver.ly";
\property Voice.slurdash = 1
-%{
- for grace note hack, see input/test/grace.ly
-%}
tupletoff = {
\property Voice.tupletVisibility = 0
}
}
tiny = {
\property Voice.fontSize= "-2"
- \tupletoff %urg
}
small = {
normalsize = {
\property Voice.fontSize= "0"
- \tupleton %urg
-}
-
-%{
- [urg: try at] temporary grace note hack
- the total visible duration of the grace notes must be half
- the duration of the 'at' note: e.g.:
-
- \grace b8 \graceat c4 \ecarg
- \grace c16 b16 \graceat c4 \ecarg
-
-grace = {
- \tiny
-% it would be so cool not to have to specify these factors each time...
-% :-(
- \property Voice.tupletVisibility = 0
- \[1/16
}
-graceat = \melodic {
- \normalsize
- \property Voice.tupletVisibility = 0
- \] \[31/32
-}
-
-ecarg = \melodic {
- \property Voice.tupletVisibility = 0
- \]
- \property Voice.tupletVisibility = 3
-}
-%}
-
normalkey = {
\property Staff.keyoctaviation = 1
}
Begin3
Titel: LilyPond
-Versie: 1.1.59
-Inschrijf datum: 14JUL99
+Versie: 1.1.60
+Inschrijf datum: 15JUL99
Beschrijving: @FLAPTEKST@
Trefwoorden: muziek typezetten midi notatie
Auteur: hanwen@stack.nl (Han-Wen Nienhuys)
janneke@gnu.org (Jan Nieuwenhuizen)
Onderhouden door: hanwen@cs.ruu.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 770k lilypond-1.1.59.tar.gz
+ 770k lilypond-1.1.60.tar.gz
Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.59.tar.gz
+ 770k lilypond-1.1.60.tar.gz
Copi-eer voorwaarden: GPL
End
Begin3
Title: LilyPond
-Version: 1.1.59
-Entered-date: 14JUL99
+Version: 1.1.60
+Entered-date: 15JUL99
Description:
LilyPond is the GNU Project music typesetter. It transforms a musical
janneke@gnu.org (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 770k lilypond-1.1.59.tar.gz
+ 770k lilypond-1.1.60.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.59.tar.gz
+ 770k lilypond-1.1.60.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.1.59
+Version: 1.1.60
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.59.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.60.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@cs.uu.nl>
//
-// main.cc -- implement silly main () entry point
-// should have Root class.
+// main.cc -- implement main () entry point
//
// copyright 1997 Jan Nieuwenhuizen <janneke@gnu.org>
if ( (mudela_staff_p_list_.size_i () != 1)
&& (i->car_ == mudela_staff_p_list_.head_->car_))
continue;
- mudela_stream << "\\type Staff = \"" << i->car_->id_str () << "\" ";
+ mudela_stream << "\\context Staff = \"" << i->car_->id_str () << "\" ";
mudela_stream << String ("\\" + i->car_->id_str ()) << "\n";
}
if (mudela_staff_p_list_.size_i () > 1)
*os_p_ << filename_str_g;
*os_p_ << "\n\n";
// ugh
- *os_p_ << "\\version \"1.0.14\";\n";
+ *os_p_ << "\\version \"1.1.60\";\n";
}
void
)
- (define (rulesym h w)
- (string-append
- "\\vrule height " (number->dim (/ h 2))
- " depth " (number->dim (/ h 2))
- " width " (number->dim w)
- )
- )
-
(define (bezier-sandwich l thick)
(embedded-ps ((ps-scm 'bezier-sandwich) l thick)))
(define invoke-dim1 ,invoke-dim1)
(define pianobrace ,pianobrace)
(define placebox ,placebox)
- (define rulesym ,rulesym)
(define select-font ,select-font)
(define start-line ,start-line)
(define stop-line ,stop-line)
((eq? action-name 'invoke-char) invoke-char)
((eq? action-name 'invoke-dim1) invoke-dim1)
((eq? action-name 'placebox) placebox)
- ((eq? action-name 'rulesym) rulesym)
((eq? action-name 'bezier-sandwich) bezier-sandwich)
((eq? action-name 'start-line) start-line)
((eq? action-name 'stem) stem)
)
- (define (rulesym x y)
- (string-append
- (number->string x) " "
- (number->string y) " "
- " rulesym"))
-
(define (bezier-sandwich l thick)
(string-append
(apply string-append (map control->string l))
(define invoke-char ,invoke-char)
(define invoke-dim1 ,invoke-dim1)
(define placebox ,placebox)
- (define rulesym ,rulesym)
(define select-font ,select-font)
(define start-line ,start-line)
(define stem ,stem)
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl WARNING WARNING WARNING WARNING
dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
+dnl WARNING WARNING WARNING WARNING
+dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
dnl aclocal.m4 -*-shell-script-*-
dnl StepMake subroutines for configure.in
distdir=/tmp/${name}
-rm -f ${srcdir}/config.cache
-PYTHON=${PYTHON:-python} ${srcdir}/configure --prefix=${distdir} \
- --srcdir=${srcdir}
+#
+# Maybe we can get away without reconfiguring
+#
+# rm -f ${srcdir}/config.cache
+# PYTHON=${PYTHON:-python} ${srcdir}/configure --prefix=${distdir} \
+# --srcdir=${srcdir}
if ! make ; then
echo "make failed"
#
mkdir $distdir/doc
cp Documentation/man/out/*.html $distdir/doc
+
+#
+# copy web documentation to web directory
+#
+mkdir $distdir/web
+for i in index.html guile.patch angels.ly
+do
+ cp Documentation/ntweb/out/$i $distdir/web || exit 1
+done
+
+#
+# Zip it up
+#
cd $distdir/..
$ZIP_CMD $ZIP_FILE $name
echo "Wrote $ZIP_FILE"