-pl 22.jcn5
- - auto-beaming v0: input/test/auto-beam.ly
-
pl 22.jcn4
- bf's: repeat-engraver; \bar "|:", ":|" now deprecated for repeats
- bf: :|, |:
pl 22.jcn1
- bf's: cross-staff slur
- bf: gnossienne-4
+pl 22.tca1
+ - buxfix, \mudela{ \times 2/3{ ...} } works now
+******
+
pl 22
- fixed "already have a Beam" error
Most of the items are marked in the code as well, with full explanation.
grep for TODO and ugh/ugr/urg
+
+* check out PS points vs. LilyPond points (PS = 1/72 inch, LilyPond=1/72.27)
+
+* Instrument names in the margin. Example:
+ input/test/hara-kiri.ly. The text should of course
+ be to the left of the staff lines.
+
+* There is a bug in pl 22. Try /input/test/slurs.ly and
+ you will find '#.#' instead of real numbers at some
+ places in the empedded ps code.
+
+* (Annoying but not a bug:) Slurs that are broken at line
+ breaks often extend too far into the margin, both to the
+ left and to the right. How do you adjust it?
+
+* SkipBars=0 doesn't work. My score contains lots of
+ multibar rests, which should be written out bar by bar
+ in the score (where the 'harakiri' mechanism doesn't
+ remove full staff lines that only contain rests).
+ In the parts, the multibar rests should be split
+ by the rehearsal marks I've included every here and
+ there.
+ In short, I want the multibar rests to work as they
+ used to do before pl 20 but preferably with a nice
+ centered rest symbol.
+ * junk backlinks?
+
+ * junk text{sharp,flat,etc}
+
+ * fix convert-mudela manpage
+
+ * automatic staff selection.
+
* decimal point in \paper {}
> I have changed Mark_engraver to use the G_... classes.
* update mi2mu for lilypond 1.1
BUGS:
-
- * AAARG: Rational::Rational (double x) is broken, try:
- Rational x = (double)0.25;
- see 'suck me gently...'
-
* collisions/voices \voiceone \voicetwo are broken; see
input/praeludium-fuga-E.ly
mutopia/J.S.Bach/wtk1-fugue2.ly
PACKAGE_NAME=LilyPond
MAJOR_VERSION=1
MINOR_VERSION=1
-PATCH_LEVEL=22
-MY_PATCH_LEVEL=jcn5
+PATCH_LEVEL=23
+MY_PATCH_LEVEL=
# use the above to send patches: MY_PATCH_LEVEL is always empty for a
# released version.
ln -sf $LILYPOND_SOURCEDIR/mf/out/ afm
mkdir -p $prefix/share/lilypond
ln -sf $LILYPOND_SOURCEDIR/ $prefix/share/lilypond
+rm $prefix/share/lilypond
if [ -f ../.gdbinit ];
then
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
- for ac_prog in make gmake
+ for ac_prog in gmake make
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo "configure: warning: Please install *GNU* make" 1>&2
warn_b=yes
- fi
+ fi
fi
--- /dev/null
+\header {
+title = "Parties sur les fleut Dous \\'a 3";
+composer = "Johann Christoph Faber";
+piece = "1. Overture";
+}
+
+\version "1.0.14";
+
+global=\notes{
+ \time 2/2;
+ \key C;
+}
+
+treble=\notes\relative c''' {
+%1
+ g2 c4 g |
+ g4( [f8 )e] f2 |
+ f4( [e8 )d] e2 |
+ [e8( )f g f] e4.( )d8 |
+%5
+ d2 r8 g8 [a( )e] |
+ f2 r8 f8 [g( )d] |
+ e2( [)e8 e( d )c] |
+ d2( [)d8 d( c )b] |
+ g'4. g8 g4 a |
+%10
+% implied trill on d
+ d,4 e d4. c8 |
+ c8 [g' c( )b] a2 |
+ r8 a [d( )c] [b b( a )b] |
+ [c( )b a g] fis4 [g8 a] |
+ b2 [b8( )a g a] |
+%15
+ fis4. g8 g4 f |
+ r8 g8 [f( )g] e4.( )d8 |
+% Another implied trill
+ d4 e d4. c8 |
+ % \semibreve = \dottedminim
+ \time 3/4;
+ c4 g' g |
+ [g8( )f e f g a] |
+%20
+ g4 e r |
+ r2. |
+ r4 g g |
+ c [b8( )a g bes] |
+ a4 f r |
+%25
+ r2. |
+ r4 a g |
+ a f e |
+ f [a8( )g f e] |
+ d4 g g |
+%30
+ g( )a b |
+ c e, d |
+ e f g |
+ a d, d |
+ d( )e f |
+%35
+ g r4 r |
+ r e f |
+ g( [a8 )g f e ] |
+ f4 e2 |
+ d4 g( )f |
+%40
+ e r4 r4 |
+ r g c |
+ [a8( g )f g f e] |
+ [ d8( )c d e f g ]|
+ [e ( ) f e( f g )a ]|
+%45
+% Implied trill and turn on the D
+ [f8( )e] d2 |
+ c4 r4 r4 |
+ e r4 r4 |
+ g( )a b |
+ c e, f |
+%50
+ g( [a8 )g f e] |
+ d4.( )g8 g4 |
+ [f8( )e] d4. c8 |
+ c2. \bar "|.";
+}
+
+tenor=\notes\relative c'' {
+ e2 g4 e |
+ c2( [)c8 c8( b )a] |
+ b2 c2 |
+ [c8()d e d] c4.( )b8 |
+%5
+ b4 [c8 d] e2 |
+ r8 c8 [d( )a] b2 |
+ c2 a2( |
+ [)a8 a8( g )f] g2 |
+ c2. c4|
+%10
+ b c c( )b |
+ c g' f2 |
+ r8 f [a a] [g e(] )f4 |
+ g e a, d |
+ g2. e4 |
+%15
+ d a [b8. c16 c8. d16] |
+ d2 c4.( )b8 |
+ b4 c c( )b |
+ % \semibreve = \dottedminim
+ \time 3/4;
+ c4 e e |
+ [e8( )d c d e f ]|
+%20
+ e4 c r |
+ r2. |
+ r4 e e |
+ a [g8( )f e g] |
+ f4 c r4 |
+%25
+ r2. |
+ r4 f e |
+ f a, g |
+ a [f'8( )e d c ] |
+ b4 e d |
+%30
+ e( )f d |
+ e c b |
+ c c e |
+ f b, a |
+ b( )c d |
+%35
+ e r4 r4 |
+ r c d |
+ e e e |
+ d d( )cis |
+ d e( )d |
+%40
+ c r4 r4 |
+ r4 e g |
+ [f8( e )d e d c ] |
+ [b8( )a b c d b] |
+ [c8 ( ) d c( d e )f] |
+%45
+ [d( )c] c4 b |
+ c r r
+ c r r |
+ e ( ) f d |
+ e c d |
+%50
+ e( [f8 )e d c] |
+ b4.( )e8 e4 |
+ [d8 ()c] c4 b |
+ c2. \bar "|.";
+}
+
+bass=\notes\relative c' {
+ c4 [c,8 d] e4.( [f16 )g] |
+ a2( [)a8 a( g )f] |
+ g2 [c,8 f g()a] |
+ c2 c, |
+%5
+ [g'8()f e d ] cis2 |
+ d4. d8 g4. g,8 |
+ [c8 g' c( )e, ] f2( |
+ [)f8 f( e )d] e2 |
+ e2. f4 |
+%10
+ g2 g, |
+ c r8 c [f()e] |
+ d2 g4 f |
+ [e8()d] c4 [d8()c b a]|
+ g4 a b c|
+%15
+ d2 [e8. c16 f8. d16] |
+ g2 c, |
+ f2 g |
+ % \semibreve = \dottedminim
+ \time 3/4;
+ c,4 r r |
+ r2. |
+%20
+ r4 c' a |
+ c e, g |
+ c, r r |
+ r2.
+ r4 f c |
+%25
+ f a, c |
+ f, r r |
+ r f' c |
+ f r r |
+ r c' g |
+%30
+ c f, g |
+ c, e g |
+ c, a' c |
+ f, g fis |
+ g e d |
+%35
+ c e g |
+ c, e d |
+ c cis cis |
+ d a' a, |
+ d r r |
+%40
+ r e g |
+ c, c' e, |
+ f2. |
+ g2. |
+ a4 [g8()f] e4 |
+%45
+ f g g, |
+ c e g |
+ c e, g |
+ c, f g |
+ c a [g8()f]
+%50
+ e2 f4 |
+ g4()f e |
+ f g g, |
+ c2. \bar "|.";
+}
+
+
+\score{
+ \type StaffGroup <
+ \type Staff =treble \notes {
+ \property Staff.Instrument = "Treble"
+ \global \treble
+ }
+
+ \type Staff =tenor \notes {
+ \property Staff.Instrument = "Tenor"
+ \global \tenor
+ }
+
+ \type Staff =bass \notes {
+ \property Staff.Instrument = "Bass"
+ \global \clef "bass"; \bass
+ }
+ >
+ \paper {
+ \translator { \BarNumberingStaffContext }
+ }
+}
+
+
+++ /dev/null
-%{
- Currently (1.1.22.jcn5), the auto-beam engraver will only engrave
- sensible beams (hopefully), which means that it will give up the
- whole beam if:
- * a rest is encountered
- * another beam (entered manually) is encountered
- * there's a 'gap' in the beam note's durations
-
- There's no smart algorithm, beginning a beam is considered when
-
- now / beamAutoBegin = 0
-
- the beam will be ended when
-
- * now / beamAutoEnd = 0
-%}
-
-\score{
- \notes \relative c''{
- \time 2/4;
- % one beam per measure
- c8 c c c
- % two beams per measure
- \property Voice.beamAutoBegin = "0.25"
- \property Voice.beamAutoEnd = "0.25"
- c8 c c c
- % manually override autobeam with weird beaming
- c8 [c c] c
- c8 c c r
- c8 c c4
- r8 c c c
- % no autobeaming
- \property Voice.beamAuto = "0"
- c8 c c c
- }
- \paper{
- \translator{
- \VoiceContext
- % add experimental auto-beaming
- \consists Auto_beam_engraver;
- % switch it on (perhaps a bit double, but we want to be able
- % to switch it off conveniently
- beamAuto = 1.;
- % consider starting beam at every 4 note
- % would be nice if we could enter durations here, e.g.:
- % what if we make 'dur (4)' a real_expression?
- beamAutoBegin = 0.5;
- beamAutoEnd = 0.5;
- }
- }
-}
+++ /dev/null
-/*
- auto-beam-engraver.cc -- implement Auto_beam_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999 Jan Nieuwenhuizen <janneke@gnu.org>
-
- */
-
-#include "auto-beam-engraver.hh"
-#include "musical-request.hh"
-#include "beam.hh"
-#include "grouping.hh"
-#include "rest.hh"
-#include "stem.hh"
-#include "debug.hh"
-#include "time-description.hh"
-
-ADD_THIS_TRANSLATOR (Auto_beam_engraver);
-
-Auto_beam_engraver::Auto_beam_engraver ()
-{
- beam_p_ = 0;
- finished_beam_p_ = 0;
- finished_grouping_p_ = 0;
- grouping_p_ = 0;
-}
-
-void
-Auto_beam_engraver::do_process_requests ()
-{
- Time_description const *time = get_staff_info().time_C_;
-
- //Moment begin_mom;
- Real begin_f;
- Scalar begin = get_property ("beamAutoBegin", 0);
- if (begin.isnum_b ())
- // brrr.
- // begin_mom = (Real)begin;
- begin_f = (Real)begin;
- else
- return;
-
- Scalar end = get_property ("beamAutoEnd", 0);
- //Moment end_mom;
- Real end_f;
- if (end.isnum_b ())
- // brrr.
- // end_mom = (Real)end;
- end_f = (Real)end;
- else
- return;
-
- Real epsilon_f = Moment (1, 512);
- Real f;
- if (beam_p_ && ((f=abs (fmod (time->whole_in_measure_, end_f))) < epsilon_f))
- {
- DOUT << String ("ending autobeam at: ") + now_moment ().str ();
- if (beam_p_->stems_.size () < 2)
- {
- DOUT << "junking autombeam: less than two stems";
- unbeam ();
- }
- else
- {
- finished_beam_p_ = beam_p_;
- finished_grouping_p_ = grouping_p_;
- beam_p_ = 0;
- grouping_p_ = 0;
- }
- }
-
- /*
- Allow already started autobeam to end
- */
- Scalar on = get_property ("beamAuto", 0);
- if (!on.to_bool ())
- return;
-
- if (!beam_p_ && ((f=abs (fmod (time->whole_in_measure_, begin_f))) < epsilon_f))
- {
- DOUT << String ("starting autobeam at: ") + now_moment ().str ();
- beam_p_ = new Beam;
- grouping_p_ = new Rhythmic_grouping;
-
- /* urg, copied from Beam_engraver */
- Scalar prop = get_property ("beamslopedamping", 0);
- if (prop.isnum_b ())
- beam_p_->damping_i_ = prop;
-
- prop = get_property ("beamquantisation", 0);
- if (prop.isnum_b ())
- beam_p_->quantisation_ = (Beam::Quantisation)(int)prop;
-
- // must set minVerticalAlign = = maxVerticalAlign to get sane results
- // see input/test/beam-interstaff.ly
- prop = get_property ("minVerticalAlign", 0);
- if (prop.isnum_b ())
- beam_p_->vertical_align_drul_[MIN] = prop;
-
- prop = get_property ("maxVerticalAlign", 0);
- if (prop.isnum_b ())
- beam_p_->vertical_align_drul_[MAX] = prop;
-
- announce_element (Score_element_info (beam_p_, 0));
- }
-}
-
-void
-Auto_beam_engraver::typeset_beam ()
-{
- if (finished_beam_p_)
- {
- Rhythmic_grouping const * rg_C = get_staff_info().rhythmic_C_;
- rg_C->extend (finished_grouping_p_->interval());
- finished_beam_p_->set_grouping (*rg_C, *finished_grouping_p_);
- typeset_element (finished_beam_p_);
- finished_beam_p_ = 0;
-
- delete finished_grouping_p_;
- finished_grouping_p_= 0;
- }
-}
-
-void
-Auto_beam_engraver::do_post_move_processing ()
-{
-}
-
-void
-Auto_beam_engraver::do_pre_move_processing ()
-{
- typeset_beam ();
-}
-
-void
-Auto_beam_engraver::do_removal_processing ()
-{
- typeset_beam ();
- if (beam_p_)
- {
- DOUT << "Unfinished beam";
- unbeam ();
- }
-}
-
-void
-Auto_beam_engraver::acknowledge_element (Score_element_info info)
-{
- if (Beam *b = dynamic_cast<Beam *> (info.elem_l_))
- {
- if (beam_p_)
- {
- DOUT << "junking autobeam: beam encountered";
- unbeam ();
- }
- }
-
- if (beam_p_)
- {
- Rhythmic_req *rhythmic_req = dynamic_cast <Rhythmic_req *> (info.req_l_);
- if (!rhythmic_req)
- return;
-
- if (dynamic_cast<Rest *> (info.elem_l_))
- {
- DOUT << "junking autobeam: rest encountered";
- unbeam ();
- return;
- }
-
- Stem* stem_l = dynamic_cast<Stem *> (info.elem_l_);
- if (!stem_l)
- return;
-
- if (stem_l->beam_l_ && (stem_l->beam_l_ != beam_p_))
- {
- DOUT << "junking autobeam: beamed stem encountered";
- unbeam ();
- return;
- }
-
-
- /*
- now that we have last_add_mom_, perhaps we can (should) do away
- with these individual unbeams
- */
- if (rhythmic_req->duration_.durlog_i_<= 2)
- {
- DOUT << "stem doesn't fit in beam";
- unbeam ();
- return;
- }
-
- Moment start = get_staff_info().time_C_->whole_in_measure_;
- if (!grouping_p_->child_fit_b (start))
- {
- unbeam ();
- }
- else
- {
- grouping_p_->add_child (start, rhythmic_req->duration ());
- stem_l->flag_i_ = rhythmic_req->duration_.durlog_i_;
- beam_p_->add_stem (stem_l);
- Moment now = now_moment ();
- last_add_mom_ = now;
- extend_mom_ = extend_mom_ >? now + rhythmic_req->duration ();
- }
- }
-}
-
-void
-Auto_beam_engraver::unbeam ()
-{
- assert (beam_p_);
- for (int i=0; i < beam_p_->stems_.size (); i++)
- {
- Stem* s = beam_p_->stems_[i];
- s->beams_i_drul_[LEFT] = 0;
- s->beams_i_drul_[RIGHT] = 0;
- s->mult_i_ = 0;
- s->beam_l_ = 0;
- }
-
- beam_p_->unlink ();
- beam_p_ = 0;
- delete grouping_p_;
- grouping_p_ = 0;
-}
-
-void
-Auto_beam_engraver::process_acknowledged ()
-{
- if (beam_p_)
- {
- Moment now = now_moment ();
- if ((extend_mom_ < now)
- || ((extend_mom_ == now) && (last_add_mom_ != now )))
- {
- DOUT << String ("junking autobeam: no stem added since: ")
- + last_add_mom_.str ();
- unbeam ();
- }
- else if (!beam_p_->stems_.size ())
- {
- DOUT << "junking started autobeam: no stems";
- unbeam ();
- }
- }
-}
if (d == STOP && !beam_p_)
{
- m->warning (_ ("No Beam to end"));
+ m->warning ("No Beam to end");
return false;
}
reqs_drul_[d ] = c;
if (reqs_drul_[STOP])
{
if (!beam_p_)
- reqs_drul_[STOP]->warning (_("No beam to end"));
+ reqs_drul_[STOP]->warning (_("No beam to stop"));
finished_beam_p_ = beam_p_;
finished_grouping_p_ = grouping_p_;
{
if (beam_p_)
{
- reqs_drul_[START]->warning (_ ("Already have a Beam"));
+ reqs_drul_[START]->warning ("Already have a Beam");
return;
}
typeset_beam ();
if (beam_p_)
{
- warning (_ ("Unfinished beam"));
+ warning ("Unfinished beam");
finished_beam_p_ = beam_p_;
finished_grouping_p_ = grouping_p_;
typeset_beam ();
Rhythmic_req *rhythmic_req = dynamic_cast <Rhythmic_req *> (info.req_l_);
if (!rhythmic_req)
{
- String s = _ ("Stem must have Rhythmic structure.");
+ String s=_("Stem must have Rhythmic structure.");
if (info.req_l_)
- info.req_l_->warning (s);
+ info.req_l_->warning(s);
else
::warning (s);
if (rhythmic_req->duration_.durlog_i_<= 2)
{
rhythmic_req->warning (_ ("stem doesn't fit in beam"));
- reqs_drul_[LEFT]->warning (_ ("beam was started here"));
+ reqs_drul_[LEFT]->warning (_("beam was started here"));
return;
}
if (!grouping_p_->child_fit_b (start))
{
- String s (_ ("please fix me") + ": "
+ String s (_("please fix me") + ": "
+ _f ("stem at %s doesn't fit in beam", now_moment ().str ()));
if (info.req_l_)
+++ /dev/null
-/*
- auto-beam-engraver.hh -- declare Auto_beam_engraver
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1999 Jan Nieuwenhuizen <janneke@gnu.org>
-
- */
-
-#ifndef AUTO_BEAM_ENGRAVER_HH
-#define AUTO_BEAM_ENGRAVER_HH
-
-#include "engraver.hh"
-
-class Auto_beam_engraver : public Engraver
-{
-public:
- Auto_beam_engraver ();
- VIRTUAL_COPY_CONS (Translator);
-
-protected:
- virtual void do_pre_move_processing ();
- virtual void do_post_move_processing ();
- virtual void do_removal_processing ();
- virtual void acknowledge_element (Score_element_info);
- virtual void do_process_requests ();
- virtual void process_acknowledged ();
-
-private:
- void typeset_beam ();
- void unbeam ();
-
- Beam *finished_beam_p_;
- Beam *beam_p_;
- Moment last_add_mom_;
- Moment extend_mom_;
- Rhythmic_grouping*grouping_p_;
- Rhythmic_grouping*finished_grouping_p_;
-};
-
-#endif /* AUTO_BEAM_ENGRAVER_HH */
-
/*
- beam-engraver.hh -- declare Beam_engraver
+ cbeam-engraver.hh -- declare Beam_engraver
source file of the GNU LilyPond music typesetter
*/
-#ifndef BEAM_ENGRAVER_HH
-#define BEAM_ENGRAVER_HH
+#ifndef CBEAM_ENGRAVER_HH
+#define CBEAM_ENGRAVER_HH
#include "engraver.hh"
#include "drul-array.hh"
VIRTUAL_COPY_CONS (Translator);
};
-#endif /* BEAM_ENGRAVER_HH */
+#endif /* CBEAM_ENGRAVER_HH */
struct Abbreviation_beam;
struct Abbreviation_beam_req;
struct Abbreviation_beam_engraver;
+struct G_staff_side_item;
+struct G_text_item;
struct Abbreviation_req;
struct Adobe_font_metric;
struct Adobe_font_char_metric;
struct Audio_note_off;
struct Audio_staff;
struct Audio_tempo;
-struct Auto_beam_engraver;
struct Axis_group_element;
struct Axis_group;
struct Bar;
struct Engraver_group_engraver;
struct Extender;
struct Extender_req;
-struct G_staff_side_item;
-struct G_text_item;
struct General_script_def;
struct Graphical_element;
Begin3
Titel: LilyPond
-Versie: 1.1.22
-Inschrijf datum: 15JAN99
+Versie: 1.1.23
+Inschrijf datum: 20JAN99
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.22.tar.gz
+ 770k lilypond-1.1.23.tar.gz
Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.22.tar.gz
+ 770k lilypond-1.1.23.tar.gz
Copi-eer voorwaarden: GPL
End
Begin3
Title: LilyPond
-Version: 1.1.22
-Entered-date: 15JAN99
+Version: 1.1.23
+Entered-date: 20JAN99
Description:
LilyPond is the GNU Project music typesetter. This program can print
beautiful sheet music from a music definition file. It can also play
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.22.tar.gz
+ 770k lilypond-1.1.23.tar.gz
Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
- 770k lilypond-1.1.22.tar.gz
+ 770k lilypond-1.1.23.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 1.1.22
+Version: 1.1.23
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.22.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.23.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>
--- /dev/null
+ %{
+From: bf250@freenet.carleton.ca (John Sankey)
+To: hanwen@cs.uu.nl, jantien@xs4all.nl
+Subject: the first Sonata
+Date: Sat, 16 Jan 1999 20:50:07 -0500 (EST)
+
+To give you an idea of what is involved in the Scarlatti project,
+here is the Mudela for the first sonata of the 550, organized so I
+can proofread the ps output against the original manuscripts. Lily
+mutters about clashing note columns and spans, but puts everything
+except note stems where they should be.
+
+I've set it on a double staff to separate the parts enough so they
+are readable without setting all the note stem directions manually.
+Voices 1 & 3 are the chords, 2 & 4 the notes that can't be chorded
+because of duration.
+
+I have a program that does most of the enharmonic corrections to
+mi2mu output properly. I'm mulling over how to insert beam brackets
+(so I can correct the few it gets wrong) and set stem directions
+(ditto) mostly automatically too, but that's not as easy.
+
+Suggestions welcome as always
+John
+
+%}
+
+\score {
+\header {title ="Domenico Scarlatti - Sonata K.1 L.366";}
+% staffOne is right hand, staffTwo left hand
+\notes {
+\type GrandStaff = staffAll <
+\type Staff = staffOne <
+\property Voice.pletvisibility = 0
+\keysignature bes;
+\time 4/4;
+\clef treble;
+\type Voice = vOne <
+{
+% 1
+[d''16 e'' f'' g''] [a'' a' cis'' a'] d''4. e''8 |
+% 2
+[f''16 d'' g'' e''] [a'' f'' e'' d''] [cis''8 a''] a''4^\prall |
+% 3
+[a''16 g'' f'' e''] [d'' c'' bes' a'] [bes'8 bes'] [g' bes'] |
+% 4
+[e'8 e'] [e' e'] f f'' f''4^\prall |
+% 5
+[f''16 e'' d'' c''] [bes' a' g' f'] [g'8 g'] [e' e'] |
+% 6
+[e'8 a] [a a] [d e] [f g] |
+% 7
+a16 s b s cis' s d' s e' s f' s g' s a' s |
+% 8
+b'16 s cis'' s d'' s e'' s [f'' d'' bes' g'] [e'' cis'' a' cis''] |
+% 9
+a''4 g''4^\prallmordent [f''16 d'' bes' g'] [e'' cis'' a' cis''] |
+% 10
+[f''16 d'' g'' e''] [a'' f'' e'' d''] [cis'' a' d'' b'] [e'' g' f'
+e'] |
+% 11
+[f'16 d' g' e'] [a' f' e' d'] [cis' a d' b] [e' cis' f' d'] |
+% 12
+[g'16 e' d' cis'] [f'8 g'^\prallmordent] [a'16 e' f' d'] [e' cis' d'
+b] |
+% 13
+[cis'16 a b aes] cis'4 a,4^\prall^"\\textnatural" r |
+% 14
+[a'16 b' cis'' d''] [e'' cis'' f'' d''] e''4. a'8 |
+% 15
+[b'16 g' cis'' a'] [d'' b' e'' cis''] [fis'' d'' g'' e''] [a'' c''
+bes' a'] |
+% 16
+[bes'16 g' c'' a'] [d'' bes' a' g'] [fis' d' g' e'] [a' c' bes a] |
+% 17
+g16 s a s bes s c' s d' s e' s f' s g' s |
+% 18
+[a'16 f' d' bes] [g' e' c' e'] c''4 bes'4^\prallmordent |
+% 19
+[c''8 f''] [bes' e''] [a'16 f' c'' a'] [f'' c'' a'' f''] |
+% 20
+[e''16 g'' c'' e''] [g'8 fis'] g'16 s g8 [g g,] |
+% 21
+[d8 d'] d'16 [d'' c'' b'] [c'' a' e'' c''] [a'' e'' c''' a''] |
+% 22
+[gis''16 b'' e'' aes''] [b' d'' cis'' b'] [cis''8 a'] [a' a'] |
+% 23
+f,8 a' [f' f'16 a'] [bes'8 g''] g''4^\prall |
+% 24
+[g''16 f'' e'' d''] [c'' bes' a'] s f,8 f' [f' f'] |
+% 25
+d,8 d' [f' d'16 f'] [g'8 e''] e''4^\prall |
+% 26
+[e''16 d'' cis'' b'] [a' g' f' e'] [f' d' g' e'] [a' f' bes' g'] |
+% 27
+[f'16 d' g' e'] [a' f' bes' g'] f' s g' s a' s bes' s |
+% 28
+[a'8 d''] [g' cis''] [f'16 d' bes g] [e' cis' a cis'] |
+% 29
+[a'8 d''] [g' e''] [f'16 d' g' e'] [a' f' b' g'] |
+% 30
+[cis''16 a' d'' e''] [f'' d'' e'' cis''] [d'' a' bes' g'] [a' f' g'
+e'] |
+% 31
+[f'16 d' e' cis'] d'4 d4^\prall r4 |
+} {
+s1 s
+% 3
+s2 s8 g' bes' g' |
+% 4
+g'8 g' g' s s2 |
+% 5
+s2 s8 e' g' g' |
+% 6
+a8 e' e' s s2 |
+s1 s s s s s s s s s s s
+% 19
+s8 a'' s g'' s2 |
+s1 s s
+% 23
+s8 f' a' s s2 |
+% 24
+s2 s8 a' a' a' |
+% 25
+s8 f' d' s s2 |
+% 26
+s2 d''4 s |
+% 27
+d'16 s e' s f' s g' s s2 |
+% 28
+s8 f'' s e'' s2 |
+% 29
+s8 f'' s cis''
+} >
+\type Voice = vTwo <
+{s1 s s s s
+%6
+s2 d'16 s s4. |
+s1 s s s s s s s s s s s s s s s s s s
+%26
+s2 d''4 s |
+%27
+s2 d''4}
+>>
+\type Staff = staffTwo <
+\property Voice.pletvisibility = 0
+\keysignature bes;
+\time 4/4;
+\clef treble;
+\type Voice = vThree <
+{
+% 1
+s2 [d'16 e' f' g'] [a' a cis' a] |
+% 2
+[d'8 e'] [f' g'] [a' a'] [a' a'] |
+% 3
+[a'8 a'] [a' f'] g g'' g''4^\prall |
+% 4
+[g''16 f'' e'' d''] [c'' bes' a' g'] [a'8 a'] [f' a'] |
+% 5
+[d'8 f'] [d' d'] e e'' e''4^\prall |
+% 6
+[e''16 d'' cis'' b'] [a' g' f' e'] [f' d' g' e'] [a' f' e' d'] |
+% 7
+[cis'16 a d' b] [e' cis' f' d'] [g' e' a' f'] [b' g' cis'' a'] |
+% 8
+[d''16 b' e'' cis''] [f'' d'' g'' e''] a''4 g''4^\prallmordent |
+% 9
+[f''16 d'' bes' g'] [e'' cis'' a' cis''] a''4 g''4^\prallmordent |
+% 10
+[d'8 e'] [f' g'] [a b] [cis' a] |
+% 11
+[d8 e] [f g] a16 s b s cis' s d' s |
+% 12
+e16 [g' f' e'] [d'8 bes] a,4 s8 f' |
+% 13
+[e'8 d'] [a16 e cis e] s2 |
+% 14
+s2 [a16 b cis' d'] [e' cis' f' d'] |
+% 15
+g'16 s a' s b' s cis'' s [d'8 e'] [fis' d'] |
+% 16
+[g8 a8] [bes c'] [d e] [fis d] |
+% 17
+[bes16 g c' a] [d' bes e' c'] [f' d' g' e'] [a' f' bes' g'] |
+% 18
+c''4 bes'4^\prallmordent [a'16 f' d' bes] [g' e' c' e'] |
+% 19
+[a'16 f' d' bes] [g' e' c' e'] f' s f8 [f f,] |
+% 20
+[c8 c'] [c'16 c'' bes' a'] [bes' g' d'' bes'] [g'' d'' bes'' g''] |
+% 21
+[f''16 a'' d'' f''] [a'8 gis'] a'16 s a8 [a a,] |
+% 22
+[e8 e,] [e, e,] a, a'' a''4^\prall^"\\textflat" |
+% 23
+[a''16 g'' f'' e''] [d'' c'' bes'] s g,8 bes' [bes' bes'] |
+% 24
+e,8 e' [g' e'16 g'] [a'8 f''] f''4^\prall |
+% 25
+[f''16 e'' d'' c''] [bes' a' g'] s e,8 g' [g' g'] |
+% 26
+a,8 a [e' a] d'16 s e' s f' s g' s |
+% 27
+s2 [d'16 d' e' e'] [f' f' g' g'] |
+% 28
+[f'16 d' bes g] [e' cis' a cis'] [a'8 d''] [g' e''] |
+% 29
+[f'16 d' bes g] [e' cis' a cis'] [d8 e] [f g] |
+% 30
+[a8 g] [a a,] d4 s8 bes' |
+% 31
+[a'8 g'] [f'16 a f a] s2 |
+} {
+s1 s
+% 3
+f'8 f' f' s s2 |
+% 4
+s2 s8 f' a' f' |
+% 5
+f'8 d' f' s s2 |
+s1 s s s s s s s s s s s s s s s s
+% 23
+s2 s8 g' g' g' |
+% 24
+s8 g' e' s s2 |
+% 25
+s2 s8 e' e' e' |
+% 26
+s8 e' a s s2 |
+% 27
+d''4 s s2 |
+% 28
+s2 s8 f'' s cis'' |
+} >
+\type Voice = vFour <
+{s1 s s s s s s s s
+%10
+d''16 s s4. a'16 s s4. |
+%11
+d'16 s s4. s2 |
+s1 s s
+%15
+s2 d''16 s s4. |
+%16
+g'16 s s4. d'16 s s4. |
+s1 s s s s s s s s s s s
+%29
+s2 d'16}
+>>
+>}
+\paper{indent=0.0; \translator {\ScoreContext \consists
+Bar_number_engraver;}}
+}
+
+
# and \end{mudela}. (saves keystrokes in mudela-book-doc.doc)
# - intertext="bla bla bla" option
# - mudela-book now understand latex \begin{verbatim}
+# 0.5.3:
+# - bf: \mudela{ \times 2/3{...} }
+# * \t in \times is not tab character and
+# * dont treat the first '}' as command ending
import os
import string
outdir = 'out'
initfile = ''
-program_version = '0.5.2'
+program_version = '0.5.3'
out_files = []
file.write(line)
file.close()
+# given parameter s="\mudela[some options]{CODE} some text and commands"
+# it returns a tuple:
+# (CODE, integer)
+# where the last number is the index of the ending '}'
+def extract_command(s):
+ start_found_b = 0
+ count = 0
+ start = 0
+ for idx in range(len(s)):
+ if s[idx] == '{':
+ if not start_found_b:
+ start = idx
+ start_found_b = 1
+ count = count + 1
+ if s[idx] == '}':
+ count = count - 1
+ if (start_found_b == 1) and (count == 0):
+ break
+ return s[start+1:idx], idx
+
class Tex_input:
def __init__ (self, filename):
for fn in [filename, filename+'.tex', filename+'.doc']:
% r_inc.groups()[0]
retlines.append (line)
else:
+ # This code should be rewritten, it looks terrible
r_mud = defined_mudela_cmd_re.search(line)
if r_mud:
ss = "\\\\verb(?P<xx>[^a-zA-Z])\s*\\\\%s\s*(?P=xx)" \
% re.escape(r_mud.group()[1:])
+ # just append the line if the command is inside \verb|..|
if re.search(ss, line):
retlines.append(line)
continue
while 1:
opts = r_mud.groups()[2]
+ cmd_start_idx = r_mud.span()[0]
+ if cmd_start_idx > 0:
+ retlines.append(line[:cmd_start_idx])
+
+ cmd_data, rest_idx = extract_command(line[cmd_start_idx:])
+ rest_idx = rest_idx + cmd_start_idx + 1
if opts == None:
opts = ''
else:
opts = ', '+opts
- (start, rest) = string.split(line, r_mud.group(), 1)
- retlines.append(start)#+'\n')
+
v = string.split(defined_mudela_cmd[r_mud.groups()[0]], '\n')
for l in v[1:-1]:
- l = re.sub(r'\\fontoptions', opts, l)
- l = re.sub(r'\\maininput', r_mud.groups()[3], l)
+ l = string.replace(l, '\\fontoptions', opts)
+ l = string.replace(l, '\\maininput', cmd_data)
retlines.append(l)
- r_mud = defined_mudela_cmd_re.search(rest)
+ r_mud = defined_mudela_cmd_re.search(line[rest_idx:])
if not r_mud:
- retlines.append(rest)
+ rs = line[rest_idx:]
+ while rs[0] == " ":
+ rs = rs[1:]
+ if rs != "\n":
+ retlines.append(line[rest_idx:])
break;
- line = rest
+ line = line[rest_idx:]
else:
retlines.append (line)
- else:
- return (retlines, retdeps)
+ return (retlines, retdeps)
class Main_tex_input(Tex_input):
defined_mudela_cmd = {'mudela': r"""
\begin{mudela}[eps \fontoptions]
- \maininput
+ \type Staff <
+ \type Voice{
+ \maininput
+ }
+ >
\end{mudela}
"""}
if initfile != '':
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
- for ac_prog in make gmake
+ for ac_prog in gmake make
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo "configure: warning: Please install *GNU* make" 1>&2
warn_b=yes
- fi
+ fi
fi
Begin3
Title: StepMake
-Version: 0.1.66
-Entered-date: 15JAN99
+Version: 0.1.67
+Entered-date: 18JAN99
Description:
Keywords: music notation typesetting midi fonts engraving
Author: janneke@gnu.org (Jan Nieuwenhuizen)
hanwen@cs.ruu.nl (Han-Wen Nienhuys)
Maintained-by: janneke@gnu.org (Jan Nieuwenhuizen)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 40k stepmake-0.1.66.tar.gz
+ 40k stepmake-0.1.67.tar.gz
Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
- 40k stepmake-0.1.66.tar.gz
+ 40k stepmake-0.1.67.tar.gz
Copying-policy: GPL
End
Name: stepmake
-Version: 0.1.66
+Version: 0.1.67
Release: 1
Copyright: GPL
Group: Development
-Source0: pcnov095.win.tue.nl:/pub/lilypond/development/stepmake-0.1.66.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/development/stepmake-0.1.67.tar.gz
Summary: generic make package
Packager: janneke@gnu.org (Jan Nieuwenhuizen)
Buildroot: /tmp/stepmake-install