---- ../lilypond-1.3.94.jcn2/CHANGES Tue Oct 10 15:50:19 2000
-++ b/CHANGES Tue Oct 10 19:36:50 2000
-@@ -1,3 +1,10 @@
+1.3.94.uu1
+==========
+
+* Use music property for setting type. This prevents accidental
+forgotten copies.
+
1.3.94.jcn3
===========
* Yet another bugfix for output-property (Han-Wen)
- 1.3.94.jcn2
- ===========
- --- ../lilypond-1.3.94/CHANGES Sun Oct 8 10:27:38 2000
-++ b/CHANGES Tue Oct 10 17:28:55 2000
-@@ -1,3 +1,13 @@
-1.3.94.lec1
-===========
-
-* fix abc2ly so that it doesn't ignor an L: field before an M: field
-
-* fix abc2ly so that bar lines are preserved
-
-* fix basic_properties.scm so that setting the default bar type to empty
- doesn't give warnings about unknown barline glyph.
-
- 1.3.93.uu1
- ==========
- 1.3.94.jcn2
-===========
-
* Made some fixes to les-nereides.
* Fixed output-property (Dankje).
-1.3.94.jcn1
-===========
-
* Added backend framework for arpeggios.
* Fixes for les-nereides. Should we do asymmetric slurs...?
+* Don't print repeat bars at start of line.
+
1.3.94
======
<a href="@TOP@Documentation/out-www/index.html"><b>Documentation</b></a>
</td></tr>
<tr><td><font size=-1>
- <a href="@TOP@Documentation/out-www/NEWS.html">NEWS</a><br>
<a href="@TOP@Documentation/out-www/CHANGES.html">Change Log</a><br>
<a href="http://appel.lilypond.org/wiki/index.php3?LilyPondFaqs">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.lilypond.org/lilypond/todo.html">Todo</a><br>
- <br>
+ <a href="http://appel.lilypond.org/wiki/index.php3?LilyPondToDo">To do</a><br>
+<br>
</td></tr>
<tr><td bgcolor="#e8e8ff">
<a href="@INDEX@#download-source"><b>Download Source</b></a>
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=3
-PATCH_LEVEL=94
-MY_PATCH_LEVEL=jcn3
+PATCH_LEVEL=95
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
a.translate_axis (i * staff_space, Y_AXIS);
mol.add_molecule (a);
}
- mol.translate (Offset (-2 * staff_space, 0);
+ mol.translate (Offset (-2 * staff_space, 0));
return mol.create_scheme ();
}
String to_id = (s >= 0) ? "up" : "down";
Auto_change_music const * auto_mus = dynamic_cast<Auto_change_music const* > (music_l_);
- change_to (child_iter_p_, auto_mus->what_str_, to_id);
+ String wh = ly_scm2string (auto_mus->get_mus_property ("what"));
+ change_to (child_iter_p_, wh, to_id);
}
}
}
#include "auto-change-music.hh"
-Auto_change_music::Auto_change_music (String what, Music * m)
+Auto_change_music::Auto_change_music (Music * m)
: Music_wrapper (m)
{
- what_str_ = what;
+ set_mus_property ("type", ly_symbol2scm ("auto-change-music"));
}
#include "change-iterator.hh"
#include "translator-group.hh"
-#include "change-translator.hh"
+#include "music.hh"
#include "debug.hh"
void
Change_iterator::error (String reason)
{
- Change_translator const * t = dynamic_cast<Change_translator const*> (music_l_);
- String to_type = t->change_to_type_str_;
- String to_id = t->change_to_id_str_;
+ String to_type = ly_scm2string (music_l_->get_mus_property ("change-to-type"));
+ String to_id = ly_scm2string (music_l_->get_mus_property ("change-to-id"));
String warn1 = _f ("can't change `%s' to `%s'", to_type, to_id)
+ ": " + reason;
+ report_to_l ()->type_str_ + " = `"
+ report_to_l ()->id_str_ + "': ";
warning (warn2);
- t->origin ()->warning (warn1);
+ music_l_->origin ()->warning (warn1);
}
/*
Translator_group * current = report_to_l ();
Translator_group * last = 0;
- Change_translator const * t = dynamic_cast<Change_translator const*> (music_l_);
- String to_type = t->change_to_type_str_;
- String to_id = t->change_to_id_str_;
+ String to_type = ly_scm2string (music_l_->get_mus_property ("change-to-type"));
+ String to_id = ly_scm2string (music_l_->get_mus_property ("change-to-id"));
+
/* find the type of translator that we're changing.
-/*
- change-translator.cc -- implement Change_translator
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "change-translator.hh"
-#include "debug.hh"
-
-
Context_specced_music::Context_specced_music(Music *m)
: Music_wrapper (m)
{
+ set_mus_property ("type", ly_symbol2scm ("context-specced-music"));
}
Grace_music::Grace_music (Music *p)
: Music_wrapper (p)
{
+ set_mus_property ("type", ly_symbol2scm ("grace-music"));
}
#include "music-wrapper.hh"
+
class Auto_change_music : public Music_wrapper
{
public:
- Auto_change_music (String what, Music *);
- String what_str_;
+ Auto_change_music (Music *);
+
};
-/*
- change-translator.hh -- declare Change_translator
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef CHANGE_TRANSLATOR_HH
-#define CHANGE_TRANSLATOR_HH
-
-#include "music.hh"
-
-class Change_translator : public Music
-{
-public:
- String change_to_type_str_;
- String change_to_id_str_;
-
-protected:
- VIRTUAL_COPY_CONS(Music);
-};
-
-
-#endif // CHANGE_TRANSLATOR_HH
#include "lily-guile.hh"
#include "molecule.hh"
-/** ball at the end of the stem. Takes care of:
+/** ball at the end of the stem. Also takes care of ledger lines.
- * help lines
-
- Properties
+ NoteHead is a kind of RhythmicHead, see there.
+ Read-only:
+
style -- symbol that sets note head style
-
- */
+*/
class Note_head
{
};
#endif /* OUTPUT_PROPERTY_HH */
+
+#error
*/
class Request : public Music {
public:
+ Request ();
VIRTUAL_COPY_CONS(Music);
bool equal_b (Request const*) const;
protected:
/**
A pause.
+
+ See also Rhythmic_head, Staff_symbol_referencer.
- Properties
+ Read-only properties:
style -- string specifying glyph style
*/
/*
Properties
- duration-log -- 2-log of the notehead duration
-
dot -- reference to Dots object.
+ stem -- pointer to Stem object
+
+ Read-only
+
+ duration-log -- 2-log of the notehead duration
+
*/
class Rhythmic_head
{
#include "spanner.hh"
+/**
+ Read-only properties
+
+ maximum-duration-for-spacing -- rational: space as if a duration of
+ this type is available in this measure.
+
+
+
+ Read properties from paper-column
+
+ dir-list -- list of stem directions
+
+ shortest-playing-duration -- duration of the shortest playing in that column.
+
+ shortest-starter-duration -- duration of the shortest notes that starts
+ exactly in that column.
+
+ contains-grace -- boolean. Used to widen entries for grace notes.
+
+ extra-space -- pair of distances
+
+ stretch-distance -- pair of distances
+ */
class Spacing_spanner
{
public:
+#if 0
/*
translation-property.hh -- declare Translation_property
class Translation_property : public Music
{
public:
+ Translation_property ();
VIRTUAL_COPY_CONS(Music);
};
#endif // PROPERTY_HH
+#endif
{
set_mus_property ("music", m->self_scm ());
set_mus_property ("lyrics", l->self_scm ());
+
+ set_mus_property ("type", ly_symbol2scm ("lyric-combine-music"));
}
UGH. too many includes.
*/
#include "debug.hh"
-#include "music-list.hh"
#include "music-iterator.hh"
#include "property-iterator.hh"
#include "request-chord-iterator.hh"
#include "sequential-music-iterator.hh"
#include "simultaneous-music-iterator.hh"
#include "translator-group.hh"
-#include "translation-property.hh"
#include "change-iterator.hh"
-#include "change-translator.hh"
#include "music-wrapper.hh"
#include "music-wrapper-iterator.hh"
#include "time-scaled-music-iterator.hh"
-#include "time-scaled-music.hh"
-#include "context-specced-music.hh"
#include "repeated-music.hh"
#include "folded-repeat-iterator.hh"
#include "unfolded-repeat-iterator.hh"
#include "grace-iterator.hh"
-#include "grace-music.hh"
-#include "lyric-combine-music.hh"
#include "lyric-combine-music-iterator.hh"
-#include "auto-change-music.hh"
#include "auto-change-iterator.hh"
-#include "part-combine-music.hh"
#include "part-combine-music-iterator.hh"
-#include "request.hh"
#include "simple-music-iterator.hh"
-#include "output-property.hh"
#include "output-property-music-iterator.hh"
#include "chord-tremolo-iterator.hh"
+#include "context-specced-music.hh"
Music_iterator::Music_iterator ()
{
return SCM_EOL;
}
+
+
+/* We could do this decentrally:
+
+ - Declare a new smob-type, which stores a function ptr in its CDR
+ (and not a struct ptr). The function ptr has signature
+
+ Music_iterator* (*)()
+
+ - initialize all music with a set_mus_property("iterator-ctor"),
+
+ - do
+
+ func_ptr p = (func_ptr) gh_cdr (get_mus_property ("iterator-ctor"));
+ iter_p = (*p)();
+
+*/
+
Music_iterator*
Music_iterator::static_get_iterator_p (Music *m)
{
Music_iterator * p =0;
- /* It would be nice to do this decentrally, but the order of this is
- significant. */
- if (dynamic_cast<Request_chord *> (m))
+ SCM type = m->get_mus_property ("type") ;
+
+ if (type == ly_symbol2scm ("property-set"))
+ p = new Property_iterator;
+ else if (type == ly_symbol2scm ("property-push"))
+ p = new Push_property_iterator;
+ else if (type == ly_symbol2scm ("property-pop"))
+ p = new Pop_property_iterator;
+ else if (type == ly_symbol2scm ("output-property"))
+ p = new Output_property_music_iterator;
+ else if (type == ly_symbol2scm ("request-chord"))
p = new Request_chord_iterator;
- else if (dynamic_cast<Lyric_combine_music *> (m))
+ else if (type == ly_symbol2scm ("lyric-combine-music"))
p = new Lyric_combine_music_iterator;
- else if (dynamic_cast<Simultaneous_music *> (m))
+ else if (type == ly_symbol2scm ("simultaneous-music"))
p = new Simultaneous_music_iterator;
- else if (dynamic_cast<Sequential_music *> (m))
+ else if (type == ly_symbol2scm ("sequential-music"))
p = new Sequential_music_iterator;
- else if (dynamic_cast<Translation_property *> (m))
- p = new Property_iterator;
- else if (dynamic_cast<Change_translator *> (m))
+ else if (type == ly_symbol2scm ("change-translator"))
p = new Change_iterator;
- else if (dynamic_cast<Push_translation_property*> (m))
- p = new Push_property_iterator;
- else if (dynamic_cast<Pop_translation_property*> (m))
- p = new Pop_property_iterator;
- else if (dynamic_cast<Time_scaled_music *> (m))
+ else if (type == ly_symbol2scm ("time-scaled-music"))
p = new Time_scaled_music_iterator;
- else if (dynamic_cast<Grace_music *> (m))
+ else if (type == ly_symbol2scm ("grace-music"))
p = new Grace_iterator;
- else if (dynamic_cast<Auto_change_music *> (m))
+ else if (type == ly_symbol2scm ("auto-change-music"))
p = new Auto_change_iterator;
- else if (dynamic_cast<Output_property *> (m))
- p = new Output_property_music_iterator;
- else if (dynamic_cast<Part_combine_music *> (m))
+ else if (type == ly_symbol2scm ("part-combined-music"))
p = new Part_combine_music_iterator;
else if (dynamic_cast<Music_wrapper *> (m))
p = new Music_wrapper_iterator;
Simultaneous_music::Simultaneous_music(SCM head)
: Music_sequence (head)
{
-
+ set_mus_property ("type", ly_symbol2scm ("simultaneous-music"));
}
Sequential_music::Sequential_music(SCM head)
: Music_sequence (head)
{
+ set_mus_property ("type", ly_symbol2scm ("sequential-music"));
}
Request_chord::Request_chord(SCM s)
: Simultaneous_music (s)
{
+ set_mus_property ("type", ly_symbol2scm ("request-chord"));
}
Musical_pitch
Request_chord::to_relative_octave (Musical_pitch last)
{
- for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
- {
- Music * mus = unsmob_music (gh_car (s));
+ for (SCM s = music_list (); gh_pair_p (s); s = gh_cdr (s))
+ {
+ Music * mus = unsmob_music (gh_car (s));
if (Melodic_req *m= dynamic_cast <Melodic_req *> (mus))
{
Musical_pitch &pit = m->pitch_;
*/
-#include "output-property.hh"
#include "engraver.hh"
#include "score-element.hh"
public:
VIRTUAL_COPY_CONS(Translator);
protected:
+
+ /*
+ should do this with \once and \push ?
+
+
+ \property Voice.outputProperties \push #pred = #modifier
+
+ where both MODIFIER and PRED are functions taking a
+ score-element.
+
+ */
+
- Link_array<Output_property> props_;
+ Link_array<Music> props_;
virtual void do_pre_move_processing ();
virtual void acknowledge_element (Score_element_info);
bool
Output_property_engraver::do_try_music (Music* m)
{
- if (Output_property * o = dynamic_cast<Output_property*> (m))
+ if (m->get_mus_property ("type") == ly_symbol2scm ("output-property"))
{
- props_.push (o);
+ props_.push (m);
return true;
}
return false;
{
for (int i=props_.size (); i--; )
{
- Output_property * o = props_[i];
+ Music * o = props_[i];
SCM pred = o->get_mus_property ("predicate");
/*
+++ /dev/null
-/*
- output-property.cc -- implement Output_property
-
- source file of the GNU LilyPond music typesetter
-
- (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-
- */
-#include "output-property.hh"
-#include "lily-guile.hh"
-
-Output_property::Output_property(SCM pred, SCM sym, SCM val)
-{
- set_mus_property ("predicate", pred);
- set_mus_property ("symbol", sym);
- set_mus_property ("value", val);
-}
-
#include <iostream.h>
#include "translator-def.hh"
#include "lily-guile.hh"
-#include "translation-property.hh"
+
#include "lookup.hh"
#include "misc.hh"
#include "my-lily-lexer.hh"
#include "context-specced-music.hh"
#include "score.hh"
#include "music-list.hh"
-#include "change-translator.hh"
+
#include "file-results.hh"
#include "input.hh"
#include "scope.hh"
#include "grace-music.hh"
#include "auto-change-music.hh"
#include "part-combine-music.hh"
-#include "output-property.hh"
+
#include "chord.hh"
bool
{
THIS->parser_error (_("First argument must be a procedure taking 1 argument"));
}
-
- $$ = new Output_property (pred,$3, $5);
+
+ Music *m = new Music;
+ m->set_mus_property ("predicate", pred);
+ m->set_mus_property ("symbol", $3);
+ m->set_mus_property ("value", $5);
+ m->set_mus_property ("type", ly_symbol2scm ("output-property"));
+
+ $$ = m;
}
| MUSIC_IDENTIFIER {
$$ = unsmob_music ($1)->clone ();
$$ = csm;
}
| AUTOCHANGE STRING Music {
- Auto_change_music * chm = new Auto_change_music (ly_scm2string ($2), $3);
+ Auto_change_music * chm = new Auto_change_music ($3);
+ chm->set_mus_property ("what", $2);
$$ = chm;
chm->set_spot (*$3->origin ());
translator_change:
TRANSLATOR STRING '=' STRING {
- Change_translator * t = new Change_translator;
- t-> change_to_type_str_ = ly_scm2string ($2);
- t-> change_to_id_str_ = ly_scm2string ($4);
+ Music * t = new Music;
+ t->set_mus_property ("type",
+ ly_symbol2scm ("change-translator"));
+ t-> set_mus_property ("change-to-type", $2);
+ t-> set_mus_property ("change-to-id", $4);
$$ = t;
$$->set_spot (THIS->here_input ());
property_def:
PROPERTY STRING '.' STRING '=' scalar {
- Translation_property *t = new Translation_property;
+ Music *t = new Music;
+ t->set_mus_property ("type", ly_symbol2scm ("property-set"));
t->set_mus_property ("symbol", scm_string_to_symbol ($4));
t->set_mus_property ("value", $6);
csm-> translator_type_str_ = ly_scm2string ($2);
}
| PROPERTY STRING '.' STRING PUSH embedded_scm '=' embedded_scm {
- Push_translation_property *t = new Push_translation_property;
-
+ Music *t = new Music;
+ t->set_mus_property ("type", ly_symbol2scm ("property-push"));
t->set_mus_property ("symbols", scm_string_to_symbol ($4));
t->set_mus_property ("element-property", $6);
t->set_mus_property ("element-value", $8);
csm-> translator_type_str_ = ly_scm2string ($2);
}
| PROPERTY STRING '.' STRING POP embedded_scm {
- Pop_translation_property *t = new Pop_translation_property;
-
+ Music *t = new Music;
+ t->set_mus_property ("type", ly_symbol2scm ("property-pop"));
t->set_mus_property ("symbols", scm_string_to_symbol ($4));
t->set_mus_property ("element-property", $6);
$1-> set_spot (THIS->here_input ());
}
| PARTIAL duration_length ';' {
- Translation_property * p = new Translation_property;
+ Music * p = new Music;
p->set_mus_property ("symbol", ly_symbol2scm ( "measurePosition"));
+ p->set_mus_property ("type", ly_symbol2scm ("property-set"));
+
Moment m = - $2->length_mom ();
p->set_mus_property ("value", m.make_scm());
delete $2; // ugh
scm_unprotect_object (f->self_scm());
scm_unprotect_object (s->self_scm());
+
+ set_mus_property ("type", ly_symbol2scm ("part-combined-music"));
}
void
*/
#include "property-iterator.hh"
-#include "translation-property.hh"
+#include "music.hh"
#include "translator-def.hh"
#include "translator-group.hh"
: Music_wrapper (p)
{
last_pitch_ = element ()->to_relative_octave (def);
+ set_mus_property ("type", ly_symbol2scm ("relative-octave-music"));
}
void
Repeat_acknowledge_engraver::do_process_music ()
{
+ /*
+ At the start of a piece, we don't print any repeat bars.
+ */
+ if (now_mom () == Moment (0))
+ return ;
+
SCM cs = get_property ("repeatCommands");
String s = "";
set_mus_property ("alternatives", alts->self_scm ());
scm_unprotect_object (alts->self_scm ());
}
+ set_mus_property ("type", ly_symbol2scm ("repeated-music"));
}
Repeated_music::Repeated_music (Repeated_music const &s)
return true;
}
+
+Request::Request ()
+{
+ set_mus_property ("type", ly_symbol2scm ("request"));
+}
+/*
+ maximum-duration-for-spacing
+From: bf250@freenet.carleton.ca (John Sankey)
+To: gnu-music-discuss@gnu.org
+Subject: note spacing suggestion
+Date: Mon, 10 Jul 2000 11:28:03 -0400 (EDT)
+
+Currently, Lily spaces notes by starting with a basic distance,
+arithmetic_multiplier, which it applies to the minimum duration note
+of the bar. Then she adds a logarithmic increment, scaled from
+arithmetic_basicspace, for longer notes. (Then, columns are aligned
+and justified.) Fundamentally, this matches visual spacing to musical
+weight and works well.
+
+A lot of the time in music, I see a section basically in melodic
+notes that occasionally has a rapid ornamental run (scale). So, there
+will be a section in 1/4 notes, then a brief passage in 1/32nds, then
+a return to long notes. Currently, Lily gives the same horizontal
+space to the 1/32nd notes in their bar (even if set in small size as
+is commonly done for cadenzii) as she gives to 1/4 notes in bars
+where 1/4 note is the minimum duration. The resulting visual weight
+does not match the musical weight over the page.
+
+Looking at the music I am typesetting, I feel that Lily's spacing
+could be significantly improved if, with no change in the basic
+method used, arithmetic_multiplier could be applied referred to the
+same duration throughout a piece. Of course, the current method
+should be retained for those who have already set music in it, so I
+suggest a property called something like arithmetic_base=16 to fix
+1/16 duration as the reference for arithmetic_multiplier; the default
+would be a dynamic base is it is now.
+
+Does anyone else feel that this would be a useful improvement for
+their music? (Of course, if arithmetic_multiplier became a regular
+property, this could be used to achieve a similar result by
+tweaking.)
+
+ */
a.translate_axis (i * staff_space, Y_AXIS);
mol.add_molecule (a);
}
- mol.translate (Offset (-2 * staff_space, 0);
+ mol.translate (Offset (-2 * staff_space, 0));
return mol.create_scheme ();
}
num_i_ = n;
den_i_ = d;
compress (Moment (num_i_,den_i_));
+ set_mus_property ("type", ly_symbol2scm ("time-scaled-music"));
}
{
transpose_to_pitch_ = pit;
p->transpose (pit);
+ set_mus_property ("type", ly_symbol2scm ("transposed-music"));
}
Musical_pitch
Transposed_music::to_relative_octave (Musical_pitch p)
{
-
return p;
}
(interfaces . (dot-interface))
(molecule-callback . ,Dots::brew_molecule)
(dot-count . 1)
- (position . 0.0)
+ (staff-position . 0.0)
(Y-offset-callbacks . (,Dots::quantised_position_callback ,Staff_symbol_referencer::callback))
(name . "Dots")
Begin3
Title: LilyPond
-Version: 1.3.94
-Entered-date: 08OCT00
+Version: 1.3.95
+Entered-date: 11OCT00
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.94.tar.gz
+ 1000k lilypond-1.3.95.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 1000k lilypond-1.3.94.tar.gz
+ 1000k lilypond-1.3.95.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.3.94
+Version: 1.3.95
Release: 1
License: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.94.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.95.tar.gz
Summary: A program for printing sheet music.
URL: http://www.cs.uu.nl/~hanwen/lilypond
# Icon: lilypond-icon.gif