-1.3.87.jcn2
+1.3.87.hwn1
===========
-* Added skip (M) to music-iterator which fixes ugly non-const hack
- of get-music (M).
+* Sequential_iterator::get_music (), part combiner now works.
-1.3.87.jcn1
-===========
+* Changed paper variables into elt properties:
+ Beam:
+ - beam-space-function, Removed Paper_def::interbeam_f(), Smaller
+ beams for grace notes.
+ - beam-flag-width-function to Beam.
+
+ Grace_align_item:
+ - horizontal-space: spacing of is configurable
+
+ Volta_spanner:
+ - height
+ - thickness
+
+ Multi_measure_rest:
+ - expand-limit
+ - minimum-width
+ - padding
-* Made bugfix in Simple-music-iterator copy constructor.
+ Lyric_extender:
+ - height
-* Fixed get_music for sequential-music-iterator and request-chord-iterator.
+ Stem
+ - thickness
+ Collision
+ - note-width to Collision
+
+* removed various obsolete variables from params.ly
+
+* added input/test/bagpipe.ly
1.3.87
======
-1.3.86.jcn2
-================
-
* Made fixes to part-combine examples and Coriolan.
* Bugfix: don't dump core on unterminated (de)crescendo.
<tr><td bgcolor="#e8e8ff"><a href="@INDEX@"><b>Home</b></a></td></tr>
<tr><td><font size=-1>
<a href="http://www.cs.uu.nl/~hanwen/lilypond">Development</a><br>
- <a href="http://appel.dyndns.org/lilypond">Hacking</a><br>
+ <a href="http://appel.lilypond.org/lilypond">Hacking</a><br>
<a href="http://www.gnu.org">GNU Project</a><br>
<a href="http://www2.iro.umontreal.ca/~pinard/po/registry.cgi?domain=lilypond">Translations</a><br>
<a href="http://www.lilypond.org">LilyPond dot org</a><br>
<a href="@TOP@Documentation/out-www/faq.html">FAQ</a><br>
<a href="@TOP@Documentation/user/out-www/lilypond.html">User manual</a><br>
<a href="@TOP@Documentation/out-www/regression-test.html">Features</a><br>
- <a href="http://appel.dyndns.org/lilypond/todo.html">Todo</a><br>
+ <a href="http://appel.lilypond.org/lilypond/todo.html">Todo</a><br>
<br>
</td></tr>
<tr><td bgcolor="#e8e8ff">
<a href="ftp://ftp.debian.org/debian/dists/unstable/main/binary-i386/tex">Debian i386</a><br>
<a href="ftp://ftp.debian.org/debian/dists/unstable/main/binary-powerpc/tex">Debian PowerPC</a><br>
<a href="http://home.austin.rr.com/jbr/jeff/lilypond/">Windows Stable</a><br>
- <a href="http://appel.dyndns.org/lilypond/gnu-windows">Windows Testing</a><br>
+ <a href="http://appel.lilypond.org/lilypond/gnu-windows">Windows Testing</a><br>
<br>
</td></tr>
<tr><td bgcolor="#e8e8ff">
<a href="@INDEX@#mailing-lists"><b>Mailing Lists</b></a>
</td></tr>
<tr><td><font size=-1>
- <a href="http://www.mail-archive.com/gnu-music-discuss@gnu.org">Discussion</a><br>
- <a href="http://www.mail-archive.com/help-gnu-music@gnu.org">Help</a><br>
- <a href="http://www.mail-archive.com/bug-gnu-music@gnu.org">Bugs</a><br>
+ <a href="http://mail.gnu.org/mailman/listinfo/gnu-music-discuss/">Discussion</a><br>
+ <a href="http://mail.gnu.org/mailman/listinfo/help-gnu-music">Help</a><br>
+ <a href="http://mail.gnu.org/mailman/listinfo/bug-gnu-music/">Bugs</a><br>
+ <a href="http://mail.gnu.org/mailman/listinfo/info-gnu-music">Announcements</a><br>
<br>
</td></tr>
</table>
@uref{ftp://ftp.debian.org/debian/dists/unstable/main/binary-powerpc/tex,
Debian GNU/Linux PowerPC}
@item @uref{http://home.austin.rr.com/jbr/jeff/lilypond/, Windows Stable}
-@item @uref{http://appel.dyndns.org/lilypond/gnu-windows, Windows
+@item @uref{http://appel.lilypond.org/lilypond/gnu-windows, Windows
Testing}
@end itemize
This list is moderated; ask
@email{drl@@gnu.org, David R. Linn} or
@email{hanwen@@cs.uu.nl, Han-Wen} to send announcements for this list.
-@item @uref{http://mail.gnu.org/mailman/listinfo/help-gnu-music,@samp{help-gnu-music@@gnu.org}}
+@item @uref{http://mail.gnu.org/mailman/listinfo/help-gnu-music,help-gnu-music@@gnu.org}
For help with using LilyPond.
@item @uref{http://mail.gnu.org/mailman/listinfo/bug-gnu-music,bug-gnu-music@@gnu.org}
If you have bugreports, you should send them to this list.
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=87
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=88
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
--- /dev/null
+% bagpipe music.
+
+\header
+{
+ title="Flower of Scotland";
+}
+
+\paper {
+ linewidth = 14.0 \cm;
+ indent = 0.0 \cm;
+ \translator {
+ \GraceContext
+
+ basicNoteHeadProperties \push #'font-size = #-2
+ basicNoteHeadProperties \push #'font-size = #-2
+ basicStemProperties \push #'flag-style = ##f
+ % The following determines the length of stems without beams
+ % default is between 2.8 and 4.0 depending on the number of flags
+ basicStemProperties \push #'length = #6
+ basicStemProperties \push #'font-size = #-2
+ basicGraceAlignItemProperties \push #'horizontal-space = #1
+ basicStemProperties \push #'flag-style = #""
+
+ }
+ \translator { \StaffContext
+ basicTimeSignatureProperties \push #'style = #"C4/4"
+ basicTimeSignatureProperties \push #'visibility-function = #begin-of-line-visible
+ }
+}
+
+
+\notenames #'(
+ (g . ( 0 4 0 ))
+ (a . ( 0 5 0 ))
+ (b . ( 0 6 0 ))
+ (c . ( 1 0 0 ))
+ (d . ( 1 1 0 ))
+ (e . ( 1 2 0 ))
+ (f . ( 1 3 0 ))
+)
+
+
+
+taor = \notes{ \grace { [g32 d g e]}}
+grip = \notes{ \grace { [g32 b g ]}}
+thrd = \notes{ \grace { [g32 d c] }}
+birl = \notes{ \grace { [g32 a g] }}
+gstd = \notes{ \grace { [g'32 d g] }}
+ lgg = \notes{ \grace { g32 }}
+ lag = \notes{ \grace { a32 }}
+ fgg = \notes{ \grace { [f32 g'32] }}
+dblb = \notes{ \grace { [g'32 b d] }}
+dblc = \notes{ \grace { [g'32 c d] }}
+dble = \notes{ \grace { [g'32 e f] }}
+dblf = \notes{ \grace { [g'32 f g'] }}
+dblg = \notes{ \grace { [g'32 f] }}
+dbla = \notes{ \grace { [a'32 g'] }}
+cg = \notes{ \grace { c32 }}
+eg = \notes{ \grace { e32 }}
+gg = \notes{ \grace { g'32 }}
+dg = \notes{ \grace { d32 }}
+hag = \notes{ \grace { a'32 }}
+gefg = \notes{ \grace { [g'32 e f] }}
+efg = \notes{ \grace { [e32 f] }}
+gdcg = \notes{ \grace { [g'32 d c]}}
+gcdg = \notes{ \grace { [g'32 c d]}}
+
+
+
+%
+\score {
+ \notes { \time 6/8; \partial 4;
+ \property Voice.tieVerticalDirection = \up
+ \slurup
+f4 |
+\gg f4 e8 \thrd d4. |
+\eg a4.()a4 d8 |
+\gg d4 f8 \dble e4. ( | \nobreak
+)e8 d4 \gg d4 e8 |
+
+\break
+\time 9/8;
+\dblf f2.( )f4 d8 |
+\time 6/8;
+\dblg g'4 a'8 \gg a'4. |
+\thrd d4.( )d4 \eg a8 |
+\time 9/8;
+\dble e4 \lag e8 \gg [e16 d8. e8] \gg f4 g'8 |
+
+\break
+\time 6/8;
+\gg f4 e8 \thrd d4. |
+\eg a4.( )a4 d8 |
+\dblg g'4 a'8 \gg a'4. |
+\thrd d4.( )d4 f8 |
+
+\break
+\dblg g'4 e4 \dblf [f8. e16] |
+\thrd d4.( )d4 \cg d8 |
+\gg c4 e8 \thrd d4.( |
+)d4. \gdcg d4.
+ }
+}
+++ /dev/null
-\score{
- <
- \context Staff \notes { c () c () c c }
- \context Lyrics \lyrics { bla __ alb xxx __ yyy }
- >
-}
-
-\version "1.3.59";
+++ /dev/null
-\score{
- <
- \context Staff \notes { c' () c' () c' c' }
- \context Lyrics \context LyricVoice \lyrics { bla -- alb xxx -- yyy }
- >
-}
-
-\version "1.3.59";
-
-
-
--- /dev/null
+\score{
+ <
+ \context Staff \notes { c () c () c c }
+ \context Lyrics \lyrics { bla __ alb xxx __ yyy }
+ >
+}
+
+\version "1.3.59";
--- /dev/null
+\score{
+ <
+ \context Staff \notes { c' () c' () c' c' }
+ \context Lyrics \context LyricVoice \lyrics { bla -- alb xxx -- yyy }
+ >
+}
+
+\version "1.3.59";
+
+
+
B. it has no pscore_l_ field.
+
+ UGH UGH: separate note-spacing into separate class, and
+ use that to space grace notes.
*/
SCM grsp = get_property ("graceAccidentalSpace");
if (gh_number_p(grsp))
Real
Beam::calc_stem_y_f (Score_element*me,Item* s, Real y, Real dy)
{
- Real thick = gh_scm2double (me->get_elt_property ("beam-thickness"));
- thick *= me->paper_l ()->get_var ("staffspace");
-
int beam_multiplicity = get_multiplicity (me);
int stem_multiplicity = (Stem::flag_i (s) - 2) >? 0;
- Real interbeam_f = me->paper_l ()->interbeam_f (beam_multiplicity);
+ Real staffspace = me->paper_l ()->get_var ("staffspace");
+
+ SCM space_proc = me->get_elt_property ("beam-space-function");
+ SCM space = gh_call1 (space_proc, gh_int2scm (beam_multiplicity));
+
+ Real thick = gh_scm2double (me->get_elt_property ("beam-thickness")) *staffspace;
+ Real interbeam_f = gh_scm2double (space) * staffspace;
+
// ugh -> use commonx
Real x0 = first_visible_stem (me)->relative_coordinate (0, X_AXIS);
Real dx = last_visible_stem (me)->relative_coordinate (0, X_AXIS) - x0;
Real staffline_f = me->paper_l ()->get_var ("stafflinethickness");
int multiplicity = get_multiplicity (me);
+ Real staffspace =me->paper_l ()->get_var ("staffspace");
+ SCM space_proc = me->get_elt_property ("beam-space-function");
+ SCM space = gh_call1 (space_proc, gh_int2scm (multiplicity));
- Real interbeam_f = me->paper_l ()->interbeam_f (multiplicity);
- Real thick = gh_scm2double (me->get_elt_property ("beam-thickness"));
- thick *= me->paper_l ()->get_var ("staffspace");
+ Real thick = gh_scm2double (me->get_elt_property ("beam-thickness")) *staffspace;
+ Real interbeam_f = gh_scm2double (space) * staffspace;
Real bdy = interbeam_f;
Real stemdx = staffline_f;
Molecule leftbeams;
Molecule rightbeams;
- // UGH
+ /*
+ UGH: make a property of this.
+ */
Real nw_f;
if (!Stem::first_head (here))
nw_f = 0;
- else if (Stem::type_i (here)== 1)
- nw_f = me->paper_l ()->get_var ("wholewidth");
- else if (Stem::type_i (here) == 2)
- nw_f = me->paper_l ()->get_var ("notewidth") * 0.8;
- else
- nw_f = me->paper_l ()->get_var ("quartwidth");
+ else {
+ int t = Stem::type_i (here);
+
+ SCM proc = me->get_elt_property ("beam-flag-width-function");
+ SCM result = gh_call1 (proc, gh_int2scm (t));
+ nw_f = gh_scm2double (result) * staffspace;
+ }
Direction dir = Directional_element_interface::get (me);
Link_array<Score_element> done;
- Real wid = me->paper_l ()->get_var ("collision_note_width"); // elt prop
+ Real wid
+ = gh_scm2double (me->get_elt_property ("note-width"))
+ * me->paper_l ()->get_var ("staffspace");
+
for (; gh_pair_p (hand); hand =gh_cdr (hand))
{
Score_element * s = unsmob_element (gh_caar (hand));
#include "paper-column.hh"
#include "paper-def.hh"
-/*
- TODO: cfg-able
- */
MAKE_SCHEME_CALLBACK(Grace_align_item,before_line_breaking);
SCM
Grace_align_item::before_line_breaking (SCM smob)
{
Score_element*me = unsmob_element (smob);
- Real nhw = // lookup_l ()->notehead (2, "")..extent (X_AXIS).length();
- me->paper_l ()->get_var ("quartwidth");
+
+ SCM space = me->get_elt_property ("horizontal-space");
+ Real ss = me->paper_l ()->get_var ("staffspace");
me->set_elt_property ("threshold",
- gh_cons (gh_double2scm (nhw* 1.5),
+ gh_cons (gh_double2scm (ss *gh_scm2double (space)),
gh_double2scm (infinity_f)));
dynamic_cast<Item*>(me)->column_l ()->set_elt_property ("contains-grace", SCM_BOOL_T);
damping -- amount of beam slope damping. (int)
should beam slope be damped? 0: no, 1: yes, 100000: horizontal beams
+
+
+ molecule-callback --
+
+ beam-thickness -- weight of beams, in staffspace
+
+ beam-space-function -- function of type multiplicity -> real (in staffspace)
+
+ default-neutral-direction -- which direction to choose if we're in
+ the middle of the staff
+
+ after-line-breaking-callback --
+
+ damping -- damping factor (real).
+
+
*/
class Beam
{
force-hshift -- amount of collision_note_width that overides automatic collision settings.
Read and removed from elements.
+
+ note-width -- unit for horizontal translation, measured in staff-space.
*/
class Collision // interface
#include "lily-guile.hh"
#include "lily-proto.hh"
+/*
+ horizontal-space -- amount of space to add after a note (in staff-space)
+ */
+
class Grace_align_item
{
public:
with the left side of the last note of the melissima, and not
extend beond, lasting the whole duration of the melissima
(as in MUP, urg).
+
+ Properties:
+
+ word-space --
+
+ height -- in stafflinethickness
+
+ right-trim-amount --
+
*/
class Lyric_extender // interface
{
properties:
columns -- list of paper-columns
- */
+
+ expand-limit -- int : max number of measures expanded in church rests
+
+ minimum-width -- Real in staffspace
+
+ padding -- staffspace
+*/
class Multi_measure_rest
{
public:
thus changing the state of the interpretation context.
get_music (M) -- return all events starting at M (pre: no events
- before M).
+ before M). Side effects:
- skip (M) -- remove all events at M from the pending queue.
+ * This removes all events at M from the pending queue.
+ Because next (M) is rolled into process () as a side effect,
+ we need to roll next (M) into get_music too. Urg.
+
*/
class Music_iterator
{
virtual bool ok () const;
virtual SCM get_music (Moment until)const;
virtual void process (Moment until);
- virtual void skip (Moment until);
/**
Construct sub-iterators, and set the translator to
void set_lookup (int, SCM lookup_smob);
Paper_def (Paper_def const&);
- /** The distance between beams of multiplicity_i
- JUNKME
- */
- Real interbeam_f (int multiplicity_i) const;
Interval line_dimensions_int (int) const;
void print () const;
Lookup const * lookup_l (int sz) const; // TODO naming
Simple_music_iterator ();
Simple_music_iterator (Simple_music_iterator const &);
virtual void process (Moment);
- virtual bool ok ()const;
- virtual void skip (Moment);
+ virtual bool ok()const;
virtual Moment pending_moment ()const;
virtual void construct_children ();
};
#include "lily-proto.hh"
#include "rod.hh"
+/**
+
+ de-uglify-parameters -- list of 3 real constants. They define the
+ valid areas for the middle control points. Used in de_uglyfy.
+ They are a bit empirical.
+
+
+ */
class Slur
{
public:
bars -- list of barline ptrs.
+thickness -- in stafflinethickness
+
+height -- in staffspace
+
*/
class Volta_spanner
/*
We can't reach the notehead where we're centered from here. So
we kludge.
+
+ (UGH UGH, pulled amount of space out of thin air value )
*/
- text_p_->translate_axis (paper_l()->get_var ("quartwidth")/2, X_AXIS);
+
+ text_p_->translate_axis (paper_l()->get_var ("staffspace")*0.66, X_AXIS);
announce_element (text_p_, req_l_);
}
Real leftext = sp->get_bound (LEFT)->extent (X_AXIS).length ();
Real ss = sp->paper_l ()->get_var ("staffspace");
+ Real sl = sp->paper_l ()->get_var ("stafflinethickness");
Real righttrim = 0.5; // default to half a staffspace gap on the right
SCM righttrim_scm = sp->get_elt_property("right-trim-amount");
if (gh_number_p (righttrim_scm)) {
}
Real w = sp->spanner_length () - leftext - righttrim*ss;
- Real h = sp->paper_l ()->get_var ("extender_height");
+ Real h = sl * gh_scm2double (sp->get_elt_property ("height"));
Molecule mol (sp->lookup_l ()->filledbox ( Box (Interval (0,w), Interval (0,h))));
mol.translate (Offset (leftext, 0));
return mol.create_scheme();
}
- if (measures <= me->paper_l() ->get_var ("multi_measure_rest_expand_limit"))
+ SCM limit = me->get_elt_property ("expand-limit");
+ if (measures <= gh_scm2int (limit))
{
/*
Build a rest from smaller parts. Distances inbetween are
}
Real pad = s.empty_b ()
- ? 0.0 : me->paper_l ()->get_var ("multi_measure_rest_padding");
-
+ ? 0.0 : gh_scm2double (me->get_elt_property ("padding")) * staff_space;
+
Molecule r (me->lookup_l ()->afm_find ("rests-" + to_str (k)));
if (k == 0)
r.translate_axis (staff_space, Y_AXIS);
should do something more advanced.
*/
rod.distance_f_ = l->extent (X_AXIS)[BIGGER] - r->extent (X_AXIS)[SMALLER]
- + me->paper_l ()->get_var ("multi_measure_rest_x_minimum");
+ + gh_scm2double (me->get_elt_property ("minimum-width"));
rod.add_to_cols ();
}
}
-void
-Music_iterator::skip (Moment)
-{
- assert (0);
-}
-
void
Music_iterator::process (Moment)
{
}
-/*
- junkme.
- */
-Real
-Paper_def::interbeam_f (int multiplicity_i) const
-{
- if (multiplicity_i <= 3)
- return get_var ("interbeam");
- else
- return get_var ("interbeam4");
-}
-
void
Paper_def::print () const
return (Request_chord*) music_l_;
}
+
SCM
-Request_chord_iterator::get_music (Moment) const
+Request_chord_iterator::get_music (Moment)const
{
SCM s = SCM_EOL;
if (music_l_)
void
Request_chord_iterator::process (Moment m)
{
+ last_processed_mom_ = m;
if (music_l_)
{
for (SCM s = dynamic_cast<Music_sequence *> (music_l_)->music_list ();
mus->origin ()->warning (_f ("Huh? Not a Request: `%s'",
classname (mus)));
}
+
+ music_l_ =0;
}
- skip (m);
}
set_translator (child_report);
}
+/*
+ [todo: translate]
+
+ Hier staat in feite: haal alle muziek op (startend op tijd HERE) tot
+ je iets met lengte L > 0 tegenkomt. Aangezien de preconditie is dat
+ UNTIL het eerstvolgende event is, weet je (per definitie)
+
+ L >= (UNTIL - HERE)
+
+ en iets wat hierna komt (op tijd T) komt dus na tijd
+
+ HERE + L >= HERE + (UNTIL - HERE) = UNTIL
+
+ Dus als je een L>0 tegenkomt, wil je de rest niet meer. Aangezien
+ alles wat tot nu toe hebt gespaard op HERE begint, is dat precies wat
+ je nodig hebt.
+
+ Misschien kan je deze comment erbij stoppen, en moeten we de
+ eigenschappen van het muziek datatype wat formaliseren, zodat deze
+ redenering helderder is.
+*/
SCM
-Sequential_music_iterator::get_music (Moment until) const
+Sequential_music_iterator::get_music (Moment until)const
{
- Sequential_music_iterator* i = dynamic_cast<Sequential_music_iterator *> (this->clone ());
SCM s = SCM_EOL;
- while (1)
- {
- Moment local_until = until - i->here_mom_;
- while (i->iter_p_->ok ())
- {
- Moment here = i->iter_p_->pending_moment ();
- if (here != local_until)
- goto finalise;
-
- s = gh_append2 (i->iter_p_->get_music (local_until), s);
- i->iter_p_->skip (local_until);
- }
-
- if (!i->iter_p_->ok ())
- {
- i->leave_element ();
-
- if (gh_pair_p (i->cursor_))
- i->start_next_element ();
- else
- goto finalise;
- }
- }
- finalise:
- delete i;
+ SCM curs = cursor_;
+ Music_iterator * iter = iter_p_->clone ();
+ while (1)
+ {
+ SCM nm = iter->get_music (until - here_mom_);
+ s = gh_append2 (nm, s);
+
+ Moment m = 0;
+ for (SCM i = nm; gh_pair_p(i); i = gh_cdr (i))
+ m = m >? unsmob_music (gh_car (i))->length_mom ();
+
+ delete iter;
+
+ curs = gh_cdr (curs);
+
+ if (!gh_pair_p (curs) || m > Moment (0))
+ return s;
+ else
+ {
+ iter = get_iterator_p (unsmob_music (gh_car (curs)));
+ }
+ }
return s;
}
-
+
void
Sequential_music_iterator::process (Moment until)
{
Simple_music_iterator::Simple_music_iterator (Simple_music_iterator const &src)
: Music_iterator (src)
{
- last_processed_mom_ = src.last_processed_mom_;
- length_mom_ = src.length_mom_;
+ last_processed_mom_ = -1;
}
void
return length_mom_;
}
-void
-Simple_music_iterator::skip (Moment m)
-{
- music_l_ = 0;
- last_processed_mom_ = m;
-}
-
void
Simple_music_iterator::process (Moment m)
{
classname (music_l_)));
}
#endif
- skip (m);
+ music_l_ = 0;
+ last_processed_mom_ = m;
}
Real h = bb->curve_.control_[i][Y_AXIS] * ff / length;
Real f = default_height / length;
- Real c1 = me->paper_l ()->get_var ("bezier_control1");
- Real c2 = me->paper_l ()->get_var ("bezier_control2");
- Real c3 = me->paper_l ()->get_var ("bezier_control3");
+ SCM up = me->get_elt_property ("de-uglify-parameters");
+
+ Real c1 = gh_scm2double (gh_car (up));
+ Real c2 = gh_scm2double (gh_cadr (up));
+ Real c3 = gh_scm2double (gh_caddr (up));
+
if (h > c1 * f)
{
h = c1 * f;
tremolo_flags = 1;
int mult = beam ? Beam::get_multiplicity (beam) : 0;
- Real interbeam_f = me->paper_l ()->interbeam_f (mult);
+ SCM space_proc = me->get_elt_property ("beam-space-function");
+ SCM space = gh_call1 (space_proc, gh_int2scm (mult));
+ Real interbeam_f = gh_scm2double (space) * ss;
+
+
Molecule mol;
for (int i = 0; i < tremolo_flags; i++)
{
if (!invisible_b (me))
{
- Real stem_width = me->paper_l ()->get_var ("stemthickness");
+ Real stem_width = gh_scm2double (me->get_elt_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
Molecule ss =me->lookup_l ()->filledbox (Box (Interval (-stem_width/2, stem_width/2),
Interval (stem_y[DOWN]*dy, stem_y[UP]*dy)));
mol.add_molecule (ss);
if (to_boolean (me->get_elt_property ("stem-centered")))
return head_wid.center ();
- Real rule_thick = me->paper_l ()->get_var ("stemthickness");
+ Real rule_thick = gh_scm2double (me->get_elt_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
Direction d = get_direction (me);
r = head_wid[d] - d * rule_thick ;
}
Real staff_space = Staff_symbol_referencer::staff_space (me);
Real half_space = staff_space / 2;
- Real interbeam_f = me->paper_l ()->interbeam_f (Beam::get_multiplicity (beam));
- Real thick = gh_scm2double (beam->get_elt_property ("beam-thickness"));
int multiplicity = Beam::get_multiplicity (beam);
+
+ SCM space_proc = beam->get_elt_property ("beam-space-function");
+ SCM space = gh_call1 (space_proc, gh_int2scm (multiplicity));
+ Real interbeam_f = gh_scm2double (space) * staff_space;
+
+ Real thick = gh_scm2double (beam->get_elt_property ("beam-thickness"));
Stem_info info;
info.idealy_f_ = chord_start_f (me);
#include "directional-element-interface.hh"
#include "spanner.hh"
-
-
void
Tuplet_spanner::set_interface (Score_element*me)
{
+ me->set_interface (ly_symbol2scm ("tuplet-bracket"));
}
/*
#endif
Real staff_space = me->paper_l ()->get_var ("interline");
+ Real staff_thick = me->paper_l ()->get_var ("stafflinethickness");
Real half_space = staff_space / 2;
Real left = dynamic_cast<Spanner*>(me)->get_broken_left_end_align ();
Real w = dynamic_cast<Spanner*>(me)->spanner_length () - left - half_space;
- Real h = me->paper_l()->get_var ("volta_spanner_height");
- Real t = me->paper_l ()->get_var ("volta_thick");
+ Real h = staff_space * gh_scm2double (me->get_elt_property ("height"));
+ Real t = staff_thick * gh_scm2double (me->get_elt_property ("thickness"));
/*
ugh: should build from line segments.
-#(gc)
-
breve = \duration #'( -1 0)
longa = \duration #'( -2 0 )
maxima = \duration #'( -3 0 )
-#(gc)
-#(eval-string (ly-gulp-file "generic-property.scm"))
-
-#(gc)
-
-% urg, move to basic property?
-#(eval-string (ly-gulp-file "slur.scm"))
-
-#(gc)
+#(begin
+ (eval-string (ly-gulp-file "slur.scm"))
+ (eval-string (ly-gulp-file "generic-property.scm"))
+ (eval-string (ly-gulp-file "basic-properties.scm"))
+ )
\include "nederlands.ly" % dutch
-
-#(gc)
-
\include "chord-modifiers.ly"
-#(gc)
-
\include "script.ly"
-#(gc)
+
% declarations for standard directions
papersize = "a4"
+
\include "generic-paper.ly"
\include "paper20.ly"
RhythmicStaffContext=\translator{
\type "Engraver_group_engraver";
- numberOfStaffLines = #1
+
\consists "Property_engraver";
\consists "Output_property_engraver";
Generic_property_list = #generic-staff-properties
- barSize = 4.0 * \staffspace ; % urg: pt
+ barSize = 4.0 * \staffspace ; % JUNKME
\consists "Pitch_squash_engraver";
\consists "Separating_line_group_engraver";
basicVoltaSpannerProperties \push #'minimum-space = #15 % urg, in \pt
basicVoltaSpannerProperties \push #'padding = #5 % urg, in \pt
-
-
+ basicStaffSymbolProperties \push #'line-count = #1
\consists "Repeat_engraver";
\consists "Bar_engraver";
basicTextScriptProperties \push #'font-size = #-1
basicSlurProperties \push #'font-size = #-1
basicLocalKeyProperties \push #'font-size = #-1
-
- weAreGraceContext = ##t
- graceAccidentalSpace= 1.5 * \staffspace;
+ basicBeamProperties \push #'beam-thickness = #0.3
+ basicBeamProperties \push #'beam-space-function = #(lambda (x) 0.5)
+
+ weAreGraceContext = ##t
+ graceAccidentalSpace= 1.5 * \staffspace; % JUNKME
};
\translator{\GraceContext}
alignmentReference = \center;
\consists "Vertical_align_engraver";
+
+ % JUNKME
minVerticalAlign = 3.0*\staffheight;
maxVerticalAlign = 3.0*\staffheight;
(name . "barnumber")
)
- basicBeamProperties = #`(
- (molecule-callback . ,Beam::brew_molecule)
- (beam-thickness . 0.42) ; staff-space
- (before-line-breaking-callback . ,Beam::before_line_breaking)
- (after-line-breaking-callback . ,Beam::after_line_breaking)
- (default-neutral-direction . 1)
- (interfaces . (beam-interface))
- (damping . 1)
- (name . "beam")
- )
-
+ basicBeamProperties = #basic-beam-properties
basicBreakAlignProperties = #`(
(breakable . #t)
(interfaces . (break-align-interface))
basicCollisionProperties = #`(
(axes 0 1)
(interfaces . (collision-interface))
+ (note-width . 1.65)
(name . "note collision")
)
basicCrescendoProperties = #`(
(name . "left edge")
)
basicGraceAlignItemProperties = #`(
- (axes . (0))
(interfaces . (axis-group-interface align-interface))
+ (axes . (0))
+ (horizontal-space . 1.2)
+ (padding . 1.0)
(before-line-breaking-callback . ,Grace_align_item::before_line_breaking)
(name . "grace alignment")
)
basicLyricExtenderProperties = #`(
(interfaces . (lyric-extender-interface))
(molecule-callback . ,Lyric_extender::brew_molecule)
+ (height . 0.8) ; stafflinethickness;
(right-trim-amount . 0.5)
(name . "extender line")
)
(spacing-procedure . ,Multi_measure_rest::set_spacing_rods)
(molecule-callback . ,Multi_measure_rest::brew_molecule)
(staff-position . 0)
+ (expand-limit . 10)
+ (padding . 2.0) ; staffspace
+ (minimum-width . 12.5) ; staffspace
+
(name . "multi-measure rest")
)
basicNoteColumnProperties = #`(
(spacing-procedure . ,Slur::set_spacing_rods)
(minimum-length . 1.5)
(after-line-breaking-callback . ,Slur::after_line_breaking)
+
+ (de-uglify-parameters . ( 1.5 0.8 -2.0))
(name . "slur")
)
basicSpacingSpannerProperties =#`(
(molecule-callback . ,Stem_tremolo::brew_molecule)
(beam-width . 2.0) ; staff-space
(beam-thickness . 0.42) ; staff-space
+ (beam-space-function . ,default-beam-space-function)
(name . "stem tremolo")
)
basicStemProperties = #`(
(interfaces . (stem-interface))
(before-line-breaking-callback . ,Stem::before_line_breaking)
(molecule-callback . ,Stem::brew_molecule)
+ (thickness . 0.8)
; if stem is on middle line, choose this direction.
(default-neutral-direction . 1)
(interfaces . (volta-spanner-interface side-position-interface))
(direction . 1)
(padding . 5)
+ (thickness . 1.6) ; stafflinethickness
+ (height . 2.0) ; staffspace;
(minimum-space . 25)
(name . "volta brace")
)
% Ugh
magnification_dynamic = 2.;
- % ugh see table20 for sizes
- quartwidth = 3.\char;
- wholewidth = 3.\char;
-2 = \font "as5"
-1 = \font "as5"
% Ugh
magnification_dynamic = 2.;
- % ugh see table20 for sizes
- quartwidth = 3.\char;
- wholewidth = 3.\char;
-2 = \font "as9"
-1 = \font "as9"
paper_eleven = \paper {
staffheight = 11.0\pt;
- % ugh see table11 for sizes
- quartwidth = 3.63 \pt;
- wholewidth = 5.45 \pt;
font_Large = 8.;
font_large = 6.;
paper_thirteen = \paper {
staffheight = 13.0\pt;
- % ugh see table13 for sizes
- quartwidth = 4.29\pt;
- wholewidth = 6.44\pt;
-
font_Large = 8.;
font_large = 6.;
paper_sixteen = \paper {
staffheight = 16.0\pt;
-
- % ugh, see table16 for sizes
- quartwidth = 5.28\pt;
- wholewidth = 7.92\pt;
-
font_Large = 12.;
font_large = 10.;
font_normal = 8.;
% Ugh
magnification_dynamic = 2.;
- % ugh see table20 for sizes
- quartwidth = 6.61\pt;
- wholewidth = 9.90\pt;
-
0 = \font "feta20"
-1 = \font "feta16"
-2 = \font "feta13"
% Ugh
magnification_dynamic = 3.;
-
- % ugh see table20 for sizes
- quartwidth = 6.61\pt;
- wholewidth = 9.90\pt;
-2 = \font "feta16"
-1 = \font "feta20"
paper_twentysix = \paper {
staffheight = 26.0\pt;
-
- quartwidth = 8.59\pt;
- wholewidth = 12.87\pt;
-
font_Large = 17.;
font_large = 14.;
font_normal = 12.;
staffspace = (\staffheight - 1.0 ) / 4.0;
stafflinethickness = \staffspace / 2.0;
-% deprecated
-interline = \staffspace;
-
-% urg, need grace_ versions of these too?
-beam_thickness = 0.52 * (\staffspace - \stafflinethickness);
-
-interbeam = (2.0 * \staffspace + \stafflinethickness - \beam_thickness) / 2.0;
-interbeam4 = (3.0 * \staffspace - \beam_thickness) / 3.0;
-
%{
The space taken by a note is determined by the formula
% length of a tie that's a staffspace high
tie_staffspace_length = 4.0 * \staffspace;
-% ugh: rename to bow (in bezier.cc and fonts.doc too...)
-
-% used to be 1.4 .
-slur_thickness = 1.2 * \stafflinethickness;
-tie_thickness = 1.2 * \stafflinethickness;
%{
Specifies the maximum height of slurs.
slur_clip_angle = 100.0;
slur_rc_factor = 2.4;
-% ugh
-notewidth = 3.0\char;
-
-gourlay_energybound = 100000.;
-%{
-Maximum number of measures per line to try when using Gourlay
-method.
-%}
-gourlay_maxmeasures = 10.;
-
% vertical space between lines.
line_kern = \staffspace;
-volta_thick = 1.0\char;
-volta_spanner_height = 1.0\char;
-
-% relative thickness of thin lines 1.6 : 1 : 0.8
-stemthickness = 1.0\char;
-rulethickness = 1.0\char;
-
-
-extender_height = 0.8*\stafflinethickness;
-
-hyphen_thickness = 0.05*\font_normal;
-hyphen_height = 0.2*\font_normal;
-hyphen_minimum_length = 0.25*\font_normal;
-
-% Multi-measure rests
-multi_measure_rest_x_minimum = 2.5*\staffheight;
-multi_measure_rest_padding = 2.0 *\staffspace;
-multi_measure_rest_expand_limit = 10.0;
% chop off this much when next to pp / ff sign.
crescendo_shorten = 4.0 * \staffspace;
crescendo_thickness = \stafflinethickness;
crescendo_height = 0.666 * \staffspace;
-% in internote.
-restcollision_minimum_dist = 3.0;
-restcollision_minimum_beamdist = 1.5;
-
-
-% unit for note collision resolving
-collision_note_width = \notewidth; %ugh.
-
% deprecated!
postBreakPadding = 0.0;
% if stem is on middle line, choose this direction.
stem_default_neutral_direction = 1.0;
-% in staffspace
-articulation_script_padding_default = 1.0;
-
% Backward compatibility -- has no function;
Gourlay = 0.0;
Wordwrap =0.0;
% deprecated
interline = \staffspace;
-
-% urg, need grace_ versions of these too?
-beam_thickness = 0.52 * (\staffspace - \stafflinethickness);
-
-
-
-interbeam = (2.0 * \staffspace + \stafflinethickness - \beam_thickness) / 2.0;
-interbeam4 = (3.0 * \staffspace - \beam_thickness) / 3.0;
-
%{
The space taken by a note is determined by the formula
%}
% We use 0.9*\quartwidth, because 1.0 seems to wide.
+% quartwidth == 1.32 * staffspace
% We don't adjust arithmetic_basicspace accordingly (why not?)
-arithmetic_multiplier = 0.9 * \quartwidth ;
+arithmetic_multiplier = 0.9 * 1.32 * \staffspace ;
arithmetic_basicspace = 2.0;
Slur parameters.
See Documentation/programmer/fonts.doc
+
+ TODO: -> elt-properties.
%}
% Height-limit (h_inf) = factor * staff_space
slur_height_limit_factor = 2.0;
slur_y_free = 0.75 * \staffspace;
slur_x_minimum = 1.5 * \staffspace;
-
-% The constants that define the valid areas for the middle control points
-% Used in de_uglyfy. Bit empirical.
-bezier_control1 = 1.5;
-bezier_control2 = 0.8;
-bezier_control3 = -2.0;
-
% URG: the magic constants for area asymmetry
bezier_pct_c0 = -0.2;
bezier_pct_c3 = 0.000006;
tie_ratio = \slur_ratio;
% OSU: tie gap == slur gap
-tie_x_gap = \slur_x_gap;
-
+tie_x_gap = 0.2 * \staffspace;
tie_staffline_clearance = 2.0 *\slur_thickness;
-
-% ugh
-notewidth = (\quartwidth + \wholewidth) / 2.0;
-
-gourlay_energybound = 100000.;
-%{
-Maximum number of measures per line to try when using Gourlay
-method.
-%}
-gourlay_maxmeasures = 10.;
-
-% vertical space between lines.
+% vertical space between lines of text.
line_kern = \staffspace;
-volta_thick = 1.6*\stafflinethickness;
-volta_spanner_height = 2.0 *\staffspace;
-
-% relative thickness of thin lines 1.6 : 1 : 0.8
-stemthickness = 0.8*\stafflinethickness;
-rulethickness = \stafflinethickness;
-
-
-extender_height = 0.8*\stafflinethickness;
-
-
-% Multi-measure rests
-multi_measure_rest_x_minimum = 2.5*\staffheight;
-multi_measure_rest_padding = 2.0 *\staffspace;
-multi_measure_rest_expand_limit = 10.0;
-
% chop off this much when next to pp / ff sign.
crescendo_shorten = 4.0 * \staffspace;
crescendo_thickness = \stafflinethickness;
crescendo_dash_thickness = 1.2*\stafflinethickness;
crescendo_dash = 4.0*\staffspace;
-% in internote.
-
-
-% unit for note collision resolving
-collision_note_width = \notewidth; %ugh.
% optical correction amount.
stemSpacingCorrection = 0.5*\staffspace;
compression_energy_factor = 0.6;
-% in staffspace
-articulation_script_padding_default = 1.0;
\include "engraver.ly";
Begin3
Title: LilyPond
-Version: 1.3.87
-Entered-date: 18SEP00
+Version: 1.3.88
+Entered-date: 20SEP00
Description:
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.3.87.tar.gz
+ 1000k lilypond-1.3.88.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.87.tar.gz
+ 1000k lilypond-1.3.88.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.87
+Version: 1.3.88
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.87.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.88.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif
--- /dev/null
+; Definition of backend properties (aka. element properties).
+
+;; See documentation of Item::visibility_lambda_
+(define (begin-of-line-visible d) (if (= d 1) '(#f . #f) '(#t . #t)))
+(define (spanbar-begin-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f)))
+(define (all-visible d) '(#f . #f))
+(define (all-invisible d) '(#t . #t))
+(define (begin-of-line-invisible d) (if (= d 1) '(#t . #t) '(#f . #f)))
+(define (end-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f)))
+
+
+(define mark-visibility end-of-line-invisible)
+
+; ugh: should calculate from beam-thickness.
+; result in staff-space
+
+;beam_thickness = 0.52 * (\staffspace - \stafflinethickness);
+;interbeam = (2.0 * \staffspace + \stafflinethickness - \beam_thickness) / 2.0;
+;interbeam4 = (3.0 * \staffspace - \beam_thickness) / 3.0;
+
+
+(define (default-beam-space-function multiplicity)
+ (if (<= multiplicity 3) 0.816 0.844)
+ )
+
+;
+; width in staff space.
+;
+(define (default-beam-flag-width-function type)
+ (cond
+ ((eq? type 1) 1.98)
+ ((eq? type 1) 1.65)
+ (else 1.32)
+ ))
+
+
+(define basic-beam-properties
+ `(
+ (interfaces . (beam-interface))
+ (molecule-callback . ,Beam::brew_molecule)
+ (beam-thickness . 0.42) ; staff-space, should use stafflinethick?
+ (before-line-breaking-callback . ,Beam::before_line_breaking)
+ (after-line-breaking-callback . ,Beam::after_line_breaking)
+ (default-neutral-direction . 1)
+
+ (beam-flag-width-function . ,default-beam-flag-width-function)
+ (beam-space-function . ,default-beam-space-function)
+ (damping . 1)
+ (name . "beam")
+ )
+ )
(define security-paranoia #f)
-
-;; See documentation of Item::visibility_lambda_
-(define (begin-of-line-visible d) (if (= d 1) '(#f . #f) '(#t . #t)))
-(define (spanbar-begin-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f)))
-(define (all-visible d) '(#f . #f))
-(define (all-invisible d) '(#t . #t))
-(define (begin-of-line-invisible d) (if (= d 1) '(#t . #t) '(#f . #f)))
-(define (end-of-line-invisible d) (if (= d -1) '(#t . #t) '(#f . #f)))
-
-
-(define mark-visibility end-of-line-invisible)
-
;; Spacing constants for prefatory matter.
;;
;; rules for this spacing are much more complicated than this. See [Wanske] page 126 -- 134, [Ross] pg 143 -- 147