]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.1.56 release/1.1.56
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 11 Jul 1999 20:23:58 +0000 (22:23 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 11 Jul 1999 20:23:58 +0000 (22:23 +0200)
97 files changed:
AUTHORS.txt
BUGS
Documentation/man/out/lilypond.1
Documentation/man/out/ly2dvi.1
Documentation/programs.yo
Documentation/tex/feta.tex
Documentation/tex/lilypond-regtest.doc
Documentation/tex/reference-manual.yo
Documentation/tex/tutorial.yo
Documentation/topdocs/INSTALL.yo
Documentation/topinfo.yo
INSTALL.txt
NEWS
PATCHES.txt
README.txt
TODO
VERSION
buildscripts/lilypond-login.sh
buildscripts/lilypond-profile.sh
buildscripts/ps-to-gifs.sh
buildscripts/set-lily.sh
dstreamrc
input/bugs/refman-sv.ly [new file with mode: 0644]
input/test/grace.ly
input/test/time.fly
input/test/volta.fly [new file with mode: 0644]
lily/atom.cc
lily/auto-beam-engraver.cc
lily/include/atom.hh
lily/include/auto-beam-engraver.hh
lily/include/lookup.hh
lily/include/spanner.hh
lily/lexer.ll
lily/lookup.cc
lily/multi-measure-rest.cc
lily/paper-outputter.cc
lily/stem.cc
lily/time-description.cc
lily/tuplet-engraver.cc
lily/volta-spanner.cc
make/lilypond.spec.in
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
mf/feta-banier.mf
mf/feta-generic.mf
mf/feta-timesig.mf
mf/graycx.mf
midi2ly/TODO
midi2ly/include/mi2mu-proto.hh [deleted file]
midi2ly/include/midi-parser.hh
midi2ly/include/midi-score-parser.hh
midi2ly/include/midi-track-parser.hh
midi2ly/include/midi2ly-proto.hh [new file with mode: 0644]
midi2ly/include/mudela-column.hh
midi2ly/include/mudela-item.hh
midi2ly/include/mudela-score.hh
midi2ly/include/mudela-staff.hh
midi2ly/include/mudela-stream.hh
midi2ly/include/mudela-voice.hh
midi2ly/main.cc
midi2ly/midi-parser.cc
midi2ly/midi-score-parser.cc
midi2ly/midi-track-parser.cc
midi2ly/mudela-item.cc
midi2ly/mudela-score.cc
midi2ly/mudela-staff.cc
midi2ly/mudela-stream.cc
midi2ly/mudela-voice.cc
midi2ly/version.cc
mutopia/J.S.Bach/Duette/global-ii.ly
mutopia/J.S.Bach/Duette/viola-ii.ly
mutopia/J.S.Bach/Duette/viola-part.ly
mutopia/J.S.Bach/Duette/violino-ii.ly
mutopia/J.S.Bach/Duette/violino-part.ly
mutopia/J.S.Bach/Duette/violino-viola.ly
mutopia/J.S.Bach/Duette/violino-violoncello.ly
mutopia/J.S.Bach/Duette/violoncello-part.ly
mutopia/N.W.Gade/brass.ly
mutopia/N.W.Gade/global.ly
mutopia/N.W.Gade/global.tex
mutopia/N.W.Gade/parts.ly
mutopia/N.W.Gade/score.ly
mutopia/W.A.Mozart/horn-concerto-3.ly
ps/lily.ps
scm/lily.scm
scripts/abc-2-ly.py [deleted file]
scripts/abc2ly.py [new file with mode: 0644]
scripts/convert-mudela.py
scripts/mudela-book.py
stepmake/stepmake/yodl-rules.make
tex/fetdefs.tex [deleted file]
tex/lilypond-latex.tex
tex/lilypond-plaintex.tex
tex/lilyponddefs.tex
tex/mudela-book.tex
tex/titledefs.tex

index 116662589aa8d089a33409edf884d1748dca7da4..692c32e9d4ae4919893d1319eee6174307210550 100644 (file)
@@ -1,53 +1,71 @@
 
-TITLE INFORMATION: AUTHORS - who did what on GNU LilyPond? 
-
-Contents 
-
-This file lists authors of GNU LilyPond, and what they wrote.  This
-list is alphabetically ordered.
-
-o Tom Cato Amundsen <tomcato@xoommail.com>,
-    cembalo-partita in mudela, accordion symbols, some mudela-book.py
-o Mats Bengtsson <matsb@s3.kth.se>,
-    http://www.s3.kth.se/~matsb/
-    lots of testing, fixes, general comments and contributions.
-o Eric Bullinger <eric@aut.ee.ethz.ch>,
-    accidental transposition.
-o Jan Arne Fagertun <Jan.A.Fagertun@energy.sintef.no>,
-    TeX titling and lytodvi.sh
-o Anthony Fok <foka@debian.org>, 
-    debian package: debian/*
-o Bjoern Jacke <bjoern.jacke@gmx.de>
-    german glossary stuff.
-o Neil Jerram <nj104@cus.cam.ac.uk>. 
-    parts of Documentation/Vocab*
-o Donald Ervin Knuth,  http://www-cs-staff.stanford.edu/~knuth/
-    mf/ital-*.mf (these were taken from the CM fonts)
-o Michael Krause <m.krause@tu-harburg.de>,
-    breathing signs
-o Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>,
-    misc bugfixes, some Beam and Stem code. 
-o David R. Linn <drl@vuse.vanderbilt.edu>,
-    Mailing list maintenance.
-o Adrian Mariano <>
-    Reference manual, tutorial fixes, glossary.
-o Han-Wen Nienhuys <hanwen@cs.uu.nl>, 
-    http://www.cs.uu.nl/~hanwen/
-    Main author (initials: HWN).
-o Jan Nieuwenhuizen <janneke@gnu.org>, 
-    http://www.xs4all.nl/~jantien/
-    Main author (initials: JCN).
-o Alexandre Oliva <oliva@dcc.unicamp.br>, 
-    http://sunsite.unicamp.br/~oliva/
-    testing
-o Franc,ois Pinard <pinard@iro.umontreal.ca>, 
-    parts of Documentation/Vocab*, started internationalization stuff
-o Glen Prideaux <glenprideaux@iname.com>,
-    minor bug fix to script used to generate doc++ documentation
-o Jeffrey B. Reed <daboys@austin.rr.com>,
-    Windows-NT support.
-o Shay Rojanski
-    Some mudela source.
-
-Your name could be here! If you want to fix something, do it, and send
-us a patch!
+          AUTHORS - who did what on GNU LilyPond?
+
+Contents
+
+This  file  lists  authors  of  GNU  LilyPond, and what they
+wrote.  This list is alphabetically ordered.
+
+o    Tom Cato Amundsen <tomcato@xoommail.com>,  cembalo-par-
+     tita in mudela, accordion symbols, some mudela-book.py
+
+o    Mats            Bengtsson            <matsb@s3.kth.se>,
+     http://www.s3.kth.se/~matsb/ lots  of  testing,  fixes,
+     general comments and contributions.
+
+o    Eric Bullinger <eric@aut.ee.ethz.ch>, accidental trans-
+     position.
+
+o    Jan  Arne  Fagertun  <Jan.A.Fagertun@energy.sintef.no>,
+     TeX titling and lytodvi.sh
+
+o    Anthony Fok <foka@debian.org>, debian package: debian/*
+
+o    Bjoern  Jacke  <bjoern.jacke@gmx.de>  german   glossary
+     stuff.
+
+o    Neil Jerram <nj104@cus.cam.ac.uk>.  parts of Documenta-
+     tion/Vocab*
+
+o    Donald    Ervin    Knuth,     http://www-cs-staff.stan-
+     ford.edu/~knuth/  mf/ital-*.mf  (these  were taken from
+     the CM fonts)
+
+o    Michael  Krause   <m.krause@tu-harburg.de>,   breathing
+     signs
+
+o    Werner  Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
+     bugfixes, some Beam and Stem code.
+
+o    David R. Linn <drl@vuse.vanderbilt.edu>,  Mailing  list
+     maintenance.
+
+o    Adrian  Mariano  <>  Reference  manual, tutorial fixes,
+     glossary.
+
+o    Han-Wen           Nienhuys           <hanwen@cs.uu.nl>,
+     http://www.cs.uu.nl/~hanwen/   Main  author  (initials:
+     HWN).
+
+o    Jan          Nieuwenhuizen           <janneke@gnu.org>,
+     http://www.xs4all.nl/~jantien/  Main  author (initials:
+     JCN).
+
+o    Alexandre  Oliva  <oliva@dcc.unicamp.br>,   http://sun-
+     site.unicamp.br/~oliva/ testing
+
+o    Franc,ois  Pinard  <pinard@iro.umontreal.ca>,  parts of
+     Documentation/Vocab*,   started    internationalization
+
+     stuff
+
+o    Glen  Prideaux  <glenprideaux@iname.com>, minor bug fix
+     to script used to generate doc++ documentation
+
+o    Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT sup-
+     port.
+
+o    Shay Rojanski Some mudela source.
+
+Your  name  could  be here! If you want to fix something, do
+it, and send us a patch!
diff --git a/BUGS b/BUGS
index 76d8f8e1a038dd627127ea6a0b3323260dcc279b..59f9f827ab5726b77eedefc94d8ce4427bc08891 100644 (file)
--- a/BUGS
+++ b/BUGS
@@ -3,41 +3,33 @@ This documents serious bugs
 
 ********
 
-[Linux ppc, egcs-1.0.2]
+[LinuxPPC-R5, egcs-1.1.2-12c]
 
-All compiling with -O2 is suspect, in particular guile-1.3, and
-Lily herself will break.
+Serious egcs-1.1.2-12c (stock LinuxPPC R5) bug on ppc:
 
+       *dest++ = *src++;
 
-[All platforms] 
+Bug report filed, fixed in egcs-1.1.2-12f.
+Although we've currently got a workaround in place, the compiler
+is buggy; you should upgrade:
 
-When dealing with beaming that is not correct (eg quarter notes in
-beams.), you can get the following assert.  This is a serious bug, but
-a good solution is quite a lot of work.
+       ftp://dev.linuxppc.org/users/fsirl/R5/RPMS/ppc/ 
 
-       \score{
-               \melodic{
-                       [c2 c]
-               }
-       }
 
-results in
+[LinuxPPC-R4, egcs-1.0.2]
+
+All compiling with -O2 is suspect, in particular guile-1.3, and
+Lily herself will break.
 
-       lilypond: ../flower/include/varray.hh:141: struct Rhythmic_grouping *& Array<Rhythmic_grouping *>::elem(int) const: Assertion `i >=0&&i<size_' failed.
 
-And this
+[LinuxPPC, egcs-1.1b]
 
-       \score{
-               \melodic{
-                       [c]
-               }
-       }
+Lilypond 1.1.35-1.1.51,...:  Wierd errors in guile scm_gc_mark ()
 
-in
 
-       lilypond: ../flower/include/cursor.tcc:104: int Cursor<void *>::operator -(class Cursor<void *>) const: Assertion `c.ok()' failed.
-       Aborted (core dumped)
+[All platforms] 
 
+Some bugs may be captured in input/bugs/*y
 
 [Linux libg++ 2.7]
 
index e6cf0e3d619c99faffb6ba56909ce013ac6533c9..45d2a60fff8323c9befe4252e2194853029b906d 100644 (file)
@@ -9,12 +9,9 @@ LilyPond \- the GNU Music Typesetter
 .PP 
 .SH "DESCRIPTION" 
 .PP 
-LilyPond is the GNU Project music typesetter\&.  This program can print
-beautiful sheet music from a music definition file\&.  It can also play
-mechanical performances to a MIDI file\&.  Features include multiple
-staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
-beams, slurs, triplets, named chords, transposing, formatting scores, 
-part extraction\&.  It includes a nice font of musical symbols\&.
+LilyPond is the GNU Project music typesetter\&. It transforms a musical
+description file into beautiful sheet music\&.
+.PP 
 .PP 
 .SH "OPTIONS" 
 .IP "-I,--include=" 
index dc275b5044079e81d44f2107733d3af9d709a2a2..8ef4efaf7240e09fd263780c5258d5f2b38b0f45 100644 (file)
@@ -233,7 +233,7 @@ Send a description of the LilyPond and ly2dvi version you use\&.
 .IP o 
 Send a description of the bug itself\&.
 .IP o 
-Send it to bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org> (you don\'t have to subscribe
+Send it to bug-gnu-music@gnu\&.org (you don\'t have to subscribe
 to this mailinglist)\&.
 .PP 
 .SH "Remarks" 
index e3efaf6ed54ff11dc46e9dea9f9a05fcec82d58b..eae4f59d231351283c4bd96c8708e5ddd0f18b47 100644 (file)
@@ -16,6 +16,6 @@ redef(includefile)(1)(INCLUDEFILE(man/ARG1))
 includefile(convert-mudela.yo)
 includefile(lilypond.yo)
 includefile(ly2dvi.yo)
-includefile(mi2mu.yo)
+includefile(midi2ly.yo)
 includefile(mudela-book.yo)
 )
index 296fddc14336dfab6504639658b7d803e915f16f..e7a84aff10e4f7a058c51f7ed5018549ebe2df2f 100644 (file)
@@ -42,7 +42,7 @@
 
 \vskip5mm
 
-\listfont{\fetatwenty}{0}{102}
+\listfont{\fetatwenty}{0}{105}
 % urg
 \vskip-\charheight
 \listfont{\fetanumber}{48}{58}
index 0dc04fde80f339a17d39565a380f5fd8e709970e..d774479de65bcc079c3d75c5db2f86070af1e997 100644 (file)
@@ -49,7 +49,8 @@ point) are mixed.
 Grace notes are typeset as an encapsulated piece of music. You can
 have beams, notes, chords, stems etc. within a \verb|\grace|
 section. Slurs that start within a grace section, but aren't ended are
-attached to the next normal note.  Grace notes have zero duration 
+attached to the next normal note.  Grace notes have zero duration.  If
+there are tuplets, the grace notes won't be under the brace.
 
 
 
index e56c15ddfe6dcab9acda0096bd3e63d76d48df62..8ff34fad88eae8c8f8a093dc1c50a81e1b0e7f95 100644 (file)
@@ -624,9 +624,11 @@ Note that code(\!) must go before the last note of the dynamic mark whereas
 code(\rc) and code(\rced) go after the last note.  Because these marks are
 bound to notes, if you want to get several marks during one note, you must use
 spacer notes. 
-mudela(fragment,verbatim,center)(
+COMMENT(Broken
+m udela(fragment,verbatim,center)(
 c'' \< \! c''   d'' \decr e'' \rced 
 < f''1 {s4 \< \! s4 \> \! s2 } >)
+)
 
 
 COMMENT(Broken!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
@@ -752,9 +754,7 @@ sect(Chords)
 
 Chords can be entered either by name or by listing the notes in angle brackets.
 Chords can be displayed either as notes or by name.  To enter chords by name,
-either place them inside the code(\chords) keyword, or use
-code(\notes) and surround them with
-code(@) characters. 
+either place them inside the code(\chords) keyword.
 Chord names have the form
 var(tonic)[var(duration)][code(-)var(modifier)][code(^)var(subtractions)][code(/)var(inversion)]
 The var(tonic) should be the tonic note of the chord, and the var(duration) is
@@ -764,15 +764,14 @@ by dots.  An interval is written by its number with an optional code(+) or
 code(-) to indicate raising or lowering by half a step.  A chord additions has
 two effects:  it adds the specified interval and all lower odd numbered
 intervals to the chord, and it may lower or raise the specified interval.
-Intervals can be separated by a dot (code(.)) if you need to list
-several unmodified intervals.
+Intervals must be separated by a dot (code(.)).
 Repeating a code(-) character will remove a half step from the preceeding
 interval.  
 mudela(fragment,verbatim,center)(
 \transpose c''{ 
 \chords{
   c1 c-3- c-7 c-8 c-9  
-  c-9-5+7+ c-3-5- c-4.6.8
+  c-9-.5+.7+ c-3-.5- c-4.6.8
 }}) 
 The second type of modifier that may appear after the code(-) is 
 a named modifier. 
@@ -801,7 +800,7 @@ an octave so it becomes the lowest note in the chord.  If the
 specified note is not in the chord then a warning will be printed.  
 mudela(fragment,verbatim,center)(
 \transpose c'''{ 
- @c1@ @c/e@ @c/g@ @c-7/e@
+  \chords { c1 c/e c/g c-7/e }
 }) 
 Throughout these examples, chords have been shifted around the staff
 using code(\transpose).  The code(\relative) keyword has odd effects
@@ -1675,15 +1674,16 @@ dit(code(timeSignatureStyle)) Changes the default two-digit layout
    description(
       dit(code(C)) 4/4 and 2/2 are typeset as C and struck C,
       respectively. All other time signatures are written with two digits.
-      dit(code(old)) 2/2, 3/2, 3/4, 4/4, 6/4, 9/4, 6/8 and 9/8 are typeset 
-      with old-style mensuration marks. All other time signatures are 
-      written with two digits.
+      dit(code(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 old-style mensuration marks. All other time
+      signatures are written with two digits.
       dit(code(1)) All time signatures are typeset with a single
       digit, e.g. 3/2 is written as 3.
       dit(code(C2/2), code(C4/4), code(old2/2), code(old3/2),
-      code(old3/4), code(old4/4), code(old6/4), code(old9/4), 
-      code(old6/8) or code(old9/8))Tells Lilypond to use a 
-      specific symbol as time signature.
+      code(old2/4), code(old3/4), code(old4/4), code(old6/4), 
+      code(old9/4), code(old4/8), code(old6/8), code(old6/8alt)
+      or code(old9/8))Tells Lilypond to use a specific symbol as 
+      time signature.
    )
 The different time signature characters are shown below with
 their names:
@@ -1699,14 +1699,20 @@ mudela(center)(
 \time 2/2; a2^"old2/2" a2 
 \property Staff.timeSignatureStyle = "old3/2"
 \time 2/2; a2^"old3/2" a2 
+\property Staff.timeSignatureStyle = "old2/4"
+\time 2/2; a2^"old2/4" a2 
 \property Staff.timeSignatureStyle = "old4/4"
 \time 2/2; a2^"old4/4" a2 
 \property Staff.timeSignatureStyle = "old6/4"
 \time 2/2; a2^"old6/4" a2 
 \property Staff.timeSignatureStyle = "old9/4"
 \time 2/2; a2^"old9/4" a2 
+\property Staff.timeSignatureStyle = "old4/8"
+\time 2/2; a2^"old4/8" a2 
 \property Staff.timeSignatureStyle = "old6/8"
 \time 2/2; a2^"old6/8" a2 
+\property Staff.timeSignatureStyle = "old6/8alt"
+\time 2/2; a2^"old6/8alt" a2 
 \property Staff.timeSignatureStyle = "old9/8"
 \time 2/2; a2^"old9/8" a2 
 }
index cad569fc22768bc47e9c33b2dcb68e2f263c4330..5c8a6ea966bd977010b82d4553aa40dc7ff4c649 100644 (file)
@@ -797,8 +797,8 @@ Example:
   )
 )
 
-The commands described above do not music that you could hear, but
-within the language, they are "Music": they are grammatically
+The commands described above do not give music that you could hear, 
+but within the language, they are "Music": they are grammatically
 equivalent to notes, so they can appear in the same places as notes.
 
 sect(Notation context)
index e4d9dc3412ffac11f08d59a36b576662eca57fbd..190b2bf382d8c821e37dec740c1b7e8784ea9786 100644 (file)
@@ -120,12 +120,15 @@ verb( tar xzf libgr-2.0.13.tar.gz
       make pnmtopng
 )
 
-You can then install the new pnmtopng into /usr/local/bin/
+You can then install the new pnmtopng into file(/usr/local/bin/)
 
 it()Bib2html lurl(http://pertsserver.cs.uiuc.edu/~hull/bib2html.)
     Which, in turn depends on man2html for proper installation.
 man2html can be had from lurl(http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05).
 
+The website will build without this utility, but you will not see our
+hypertextified bibliography.
+
     TeTeX users should not forget to rerun texhash.
 )
 
index 9e0980fcaea88af5403152ebab46002ce0c60331..df5cae5bc2f9ca17d5631babe1205ff0a5c3abb2 100644 (file)
@@ -34,7 +34,7 @@ COMMENT(yodl2texinfo should be able to cope now, although ugly...)
 redef(article)(3)(chapter(ARG1))
 
 redef(includefile)(1)(INCLUDEFILE(tex/ARG1))
-includefile(refman.yo)
+includefile(reference-manual.yo)
 
 redef(article)(3)(nodeprefix()chapter(ARG1)nodeprefix(Mutopia ))
 COMMENT(yodl2texinfo should be able to cope now, although ugly...)
index d17023348ffb78af2b63784ffec355f2e78b868e..dccba82a8d0c0a09a6bbbe6aac9336c42ddbf9d0 100644 (file)
 
-TITLE INFORMATION: INSTALL - compiling and installing GNU LilyPond 
-AUTHOR INFORMATION: HWN & JCN 
-
-Contents 
-
-1: ABSTRACT 
-2: OBTAINING 
-3: PREREQUISITES 
-4: RUNNING 
-5: WEBSITE 
-6: CONFIGURING and COMPILING 
-7: CONFIGURING FOR MULTIPLE PLATFORMS 
-8: INSTALLING 
-9: REDHAT LINUX 
-10: DEBIAN GNU/LINUX 
-11: WINDOWS NT/95 
-12: AUTHORS 
+      INSTALL - compiling and installing GNU LilyPond
+
+                         HWN & JCN
+
+Contents
+
+     1: ABSTRACT
+2: OBTAINING
+3: PREREQUISITES
+4: RUNNING
+5: WEBSITE
+6: CONFIGURING and COMPILING
+7: CONFIGURING FOR MULTIPLE PLATFORMS
+8: INSTALLING
+9: REDHAT LINUX
+10: DEBIAN GNU/LINUX
+11: WINDOWS NT/95
+12: AUTHORS
 
 1: ABSTRACT
 
-This document explains what you need to install LilyPond, and what you
-should do.  If you are going to compile and install LilyPond often,
-e.g. when doing development, you might want to check out the 
-buildscripts/set-lily.sh script.  It sets some environment 
-variables and symlinks, which comes in handly when you have to compile 
-LilyPond more often.  
+This  document  explains  what you need to install LilyPond,
+and what you should do.  If you are  going  to  compile  and
+install  LilyPond  often,  e.g.  when doing development, you
+might want to check out the buildscripts/set-lily.sh script.
+It sets some environment variables and symlinks, which comes
+in handly when you have to compile LilyPond more often.
 
 2: OBTAINING
 
-You can get the latest version of LilyPond at
-ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/.  Refer to the links
+You  can   get   the   latest   version   of   LilyPond   at
+ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/.   Refer  to  the links
 document for mirror sites.
 
-If you upgrade by patching do remember to rerun autoconf after
-applying the patch.
+If you upgrade by patching do  remember  to  rerun  autoconf
+after applying the patch.
 
 3: PREREQUISITES
 
 For compilation you need:
 
-o A GNU system: GNU LilyPond is known to run on these GNU systems: Linux
-    (PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and
-Solaris.
+o    A GNU system: GNU LilyPond is known to run on these GNU
+     systems: Linux (PPC, intel),  FreeBSD,  AIX,  NeXTStep,
+     IRIX, Digital Unix and Solaris.
 
-o Lots of disk space: LilyPond takes between 30 and 100 mb to
-compile if you use debugging information.  If you are short on
-disk-space run configure with --disable-debugging.
+o    Lots  of  disk space: LilyPond takes between 30 and 100
+     mb to compile if you use debugging information.  If you
+     are  short  on disk-space run configure with --disable-
+     debugging.
 
-Although we recommend to use Unix, LilyPond is known to run on Windows
-NT/95/98 as well.  See Section [w32].
+     Although we recommend to use Unix, LilyPond is known to
+     run on Windows NT/95/98 as well.  See Section 11.
 
-o  EGCS 1.1 or newer.
+o    EGCS 1.1 or newer.
 
-o  Python 1.5,
-Check out
-ftp://ftp.python.org or ftp://ftp.cwi.nl/pub/python.
+o    Python   1.5,   Check   out   ftp://ftp.python.org   or
+     ftp://ftp.cwi.nl/pub/python.
 
-o  GUILE 1.3,  check out http://www.gnu.org/software/guile/guile.html.
+o    GUILE   1.3,    check   out    http://www.gnu.org/soft-
+     ware/guile/guile.html.
 
-o GNU make. 
-Check out ftp://ftp.gnu.org.
+o    GNU make.  Check out ftp://ftp.gnu.org.
 
-o Flex (version 2.5.4 or newer). 
-Check out ftp://ftp.gnu.org.
+o    Flex    (version    2.5.4   or   newer).    Check   out
+     ftp://ftp.gnu.org.
 
-o Bison (version 1.25 or newer).
-Check out ftp://ftp.gnu.org.
+o    Bison   (version   1.25   or   newer).     Check    out
+     ftp://ftp.gnu.org.
 
-o Yodl.  All documentation will be in Yodl. (1.30.17)
-ftp://ftp.lilypond.org/pub/yodl
+o    Yodl.   All  documentation  will  be in Yodl. (1.30.17)
+     ftp://ftp.lilypond.org/pub/yodl
 
-o The geometry package for LaTeX is needed to use ly2dvi.  
-Available at 
-ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry
-or at mirror site ftp://ftp.dante.de
+o    The geometry package for LaTeX is needed to use ly2dvi.
+     Available           at          ftp://ftp.ctan.org/tex-
+     archive/macros/latex/contrib/supported/geometry  or  at
+     mirror site ftp://ftp.dante.de
 
 4: RUNNING
 
-GNU LilyPond does use a lot of resources. For operation you need the
-following software
+GNU  LilyPond does use a lot of resources. For operation you
+need the following software
+
+o    TeX
+
+o    A   PostScript   printer   and/or   viewer   (such   as
+     Ghostscript)  is  strongly recommended.  Xdvi will show
+     all embedded PostScript too  if  you  have  Ghostscript
+     installed.
 
-o TeX
-o A PostScript printer and/or viewer (such as Ghostscript) is strongly
-    recommended.  Xdvi will show all embedded PostScript too if you have
-    Ghostscript installed.
-o  GUILE 1.3, check out http://www.gnu.org/programs/guile.html
+o    GUILE    1.3,    check    out   http://www.gnu.org/pro-
+     grams/guile.html
 
-For running LilyPond successfully you have to help TeX and MetaFont
-find various files.  The recommended way of doing so is adjusting the
-environment variables in the start-up scripts of your shell.  An
-example is given here for the Bourne shell:
-export MFINPUTS="/usr/local/share/lilypond/mf:"
-export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
+For running LilyPond successfully you have to help  TeX  and
+MetaFont  find  various files.  The recommended way of doing
+so is adjusting the environment variables  in  the  start-up
+scripts  of  your  shell.   An example is given here for the
+Bourne shell:
 
-The empty path component
-represents TeX and MetaFont's default search paths.  Scripts with
-the proper paths for the bourne and C-shell respectively are generated in
-buildscripts/out/lilypond-profile and
-buildscripts/out/lilypond-login during compilation. 
+     export MFINPUTS="/usr/local/share/lilypond/mf:"
+     export TEXINPUTS="/usr/local/share/lilypond/tex:/usr/local/share/lilypond/ps:"
 
-LilyPond is a hideously slow program.  A fast CPU and plenty of RAM is
-recommended for comfortable use.
+The empty path component represents  and MetaFont's  default
+
+search  paths.  Scripts with the proper paths for the bourne
+and   C-shell   respectively   are   generated   in   build-
+scripts/out/lilypond-profile  and buildscripts/out/lilypond-
+login during compilation.
+
+LilyPond is a hideously slow program.  A fast CPU and plenty
+of RAM is recommended for comfortable use.
 
 5: WEBSITE
 
-If you want to auto-generate Lily's website, you'll need some additional
-conversion tools.
+If  you  want  to  auto-generate Lily's website, you'll need
+some additional conversion tools.
+
+o    xpmtoppm (from the Portable Bitmap Utilities) (For Red-
+     Hat  Linux  users:  it  is  included within the package
+     libgr-progs).  the original is at  ftp://ftp.x.org/con-
+     trib/utilities/netpbm-1mar1994.p1.tar.gz
 
-o xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
-            users: it is included within the package libgr-progs).
-       the original is at
-ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz
+o    pnmtopng,  which is also in libgr-progs for RedHat. The
+     original                     is                      at
+     ftp://swrinde.nde.swri.edu/pub/png/applications/pnm-
+     topng-2.37.2.tar.gz.i
 
-o pnmtopng, which is also in libgr-progs for RedHat. The original is
-at
-ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz.i
+     The version of pnmtopng that is distributed with RedHat
+     5.1  and  5.2  contains  a bug: pnmtopng is dynamically
+     linked to the wrong version of  libpng.   Recompile  it
+     from  source, and make sure that the pnmtopng binary is
+     linked statically to the libpng  that  is  included  in
+     libgr.  RedHat 6.0 does not have this problem.
 
-The version of pnmtopng that is distributed with RedHat 5.1 and
-5.2 contains a bug: pnmtopng is dynamically linked to the wrong
-version of libpng.  Recompile it from source, and make sure that the
-pnmtopng binary is linked statically to the libpng that is included in
-libgr.  RedHat 6.0 does not have this problem.
+           tar xzf libgr-2.0.13.tar.gz
+                make
+                cd png
+                rm libpng.so*
+                make pnmtopng
 
- tar xzf libgr-2.0.13.tar.gz
-      make
-      cd png
-      rm libpng.so*
-      make pnmtopng
+     You   can   then   install   the   new   pnmtopng  into
+     /usr/local/bin/
 
-You can then install the new pnmtopng into /usr/local/bin/
+o    Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
+     Which,   in   turn   depends  on  man2html  for  proper
 
-o Bib2html http://pertsserver.cs.uiuc.edu/~hull/bib2html.
-    Which, in turn depends on man2html for proper installation.
-man2html can be had from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05.
+     installation.  man2html can be had from  http://askdon-
+     ald.ask.uni-karlsruhe.de/hppd/hpux/Network-
+     ing/WWW/Man2html-1.05.
 
-    TeTeX users should not forget to rerun texhash.
+     The website will build without this  utility,  but  you
+     will not see our hypertextified bibliography.
 
-You also have to install buildscripts/out/ps-to-gifs in a
+     TeTeX users should not forget to rerun texhash.
+
+You  also  have  to install buildscripts/out/ps-to-gifs in a
 directory that is in the path.
 
 6: CONFIGURING and COMPILING
 
 to install GNU LilyPond, simply type:
 
-       gunzip -c lilypond-x.y.z | tar xf -
-       cd lilypond-x.y.z
-       ./configure             # fill in your standard prefix with --prefix
-       make
-       make install
+          gunzip -c lilypond-x.y.z | tar xf -
+          cd lilypond-x.y.z
+          ./configure         # fill in your standard prefix with --prefix
+          make
+          make install
 
 This will install a number of files, something close to:
 
-       /usr/local/man/man1/mi2mu.1
-       /usr/local/man/man1/convert-mudela.1
-       /usr/local/man/man1/mudela-book.1
-       /usr/local/man/man1/lilypond.1
-       /usr/local/bin/lilypond
-       /usr/local/bin/mi2mu
-       /usr/local/share/lilypond/*
-       /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
+          /usr/local/man/man1/mi2mu.1
+          /usr/local/man/man1/convert-mudela.1
+          /usr/local/man/man1/mudela-book.1
+          /usr/local/man/man1/lilypond.1
+          /usr/local/bin/lilypond
+          /usr/local/bin/mi2mu
+          /usr/local/share/lilypond/*
+          /usr/local/share/locale/{it,nl}/LC_MESSAGES/lilypond.mo
+
+The above assumes that you are root and have the GNU  devel-
+opment tools, and your make is GNU make.  If this is not the
+case, you can adjust  your  environment  variables  to  your
 
-The above assumes that you are root and have the GNU development
-tools, and your make is GNU make.  If this is not the case, you can
-adjust your environment variables to your taste:
+taste:
 
-       export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR" 
-       ./configure
+          export CPPFLAGS="-I /home/me/my_include -DWEIRD_FOOBAR"
+          ./configure
 
-CPPFLAGS are the preprocessor flags. 
+CPPFLAGS are the preprocessor flags.
 
 The configure script is Cygnus configure, and it will accept
---help. If you are not root, you will probably have to make it
-with a different --prefix option.  Our favourite location is
+--help. If you are not root, you will probably have to  make
+it with a different --prefix option.  Our favourite location
+is
 
-       ./configure --prefix=$HOME/usr
+          ./configure --prefix=$HOME/usr
 
-In this case, you will have to set up MFINPUTS, and TEXINPUTS accordingly.
+In this case, you will have to set up MFINPUTS,  and  TEXIN-
+PUTS accordingly.
 
-Since GNU LilyPond currently is beta, you are advised to also use
+Since  GNU  LilyPond  currently  is beta, you are advised to
+also use
 
-       --enable-debugging
-       --enable-checking
+          --enable-debugging
+          --enable-checking
 
 Options to configure include:
 
-o --enable-printing
-    Enable debugging print routines (lilypond -D option)
-o --enable-optimise
-    Set maximum optimisation: compile with -O2.  This can be
-unreliable on some compiler/platform combinations (eg, DEC Alpha and PPC)
-o --enable-profiling
-    Compile with support for profiling.
-o --enable-config
-    Output to a different configuration file.  Needed for multi-platform
-    builds
+--enable-printing
+     Enable debugging print routines (lilypond -D option)
+
+--enable-optimise
+     Set maximum optimisation: compile with -O2.   This  can
+     be  unreliable  on  some compiler/platform combinations
+     (eg, DEC Alpha and PPC)
 
-All options are documented in the configure help
-The option --enable-optimise is recommended for Real Life usage.
+--enable-profiling
+     Compile with support for profiling.
+
+--enable-config
+     Output to a different configuration file.   Needed  for
+     multi-platform builds
+
+All  options are documented in the configure help The option
+--enable-optimise is recommended for Real Life usage.
 
 If you do
 
-       make all
+          make all
 
-everything will be compiled, but nothing will be installed.  The
-resulting binaries can be found in the subdirectories out/ (which
-contain all files generated during compilation).
+everything will be compiled, but nothing will be  installed.
+The  resulting  binaries  can be found in the subdirectories
+out/ (which contain all files generated during compilation).
 
 7: CONFIGURING FOR MULTIPLE PLATFORMS
 
-If you want to compile LilyPond with different configuration settings,
-then, you can use the --enable-config option.  Example: suppose I
-want to build with and   without profiling.  Then I'd use the
-following for the normal build, 
+If you want to compile LilyPond with different configuration
+settings, then, you  can  use  the  --enable-config  option.
+Example:  suppose I want to build with and   without profil-
+ing.  Then I'd use the following for the normal build,
 
-      ./configure --prefix=~ --disable-optimise --enable-checking
-      make
-      make install
+           ./configure --prefix=~ --disable-optimise --enable-checking
+           make
+           make install
 
-and for the profiling version, I specify a different configuration.
+and for the profiling version, I specify a different config-
+uration.
 
-      ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
-      make config=optprof
-      make config=optprof install
+           ./configure --prefix=~ --enable-profiling --enable-config=optprof --enable-optimise --disable-checking
+           make config=optprof
+           make config=optprof install
 
 8: INSTALLING
 
 If you have done a successful make, then a simple
 
-       make install
+          make install
 
 should do the trick.
 
-If you are doing an upgrade, please remember to remove obsolete
-.pk and .tfm files of the fonts.  A script has been
+If you are doing an upgrade, please remember to remove obso-
+lete .pk and .tfm files of the fonts.   A  script  has  been
 provided to do the work for you, see bin/clean-fonts.sh.
 
 CAVEATS
 
-o The -O2 option  triggers  bugs on various platforms (PowerPC, Alpha).
-    If you experience problems, you  should first try  turning off
-    this.
-o  On PPC you need at least EGCS-1.1.2f.
+o    The  -O2  option   triggers   bugs on various platforms
+     (PowerPC, Alpha).   If  you  experience  problems,  you
+     should first try  turning off this.
+
+o    On PPC you need at least EGCS-1.1.2f.
 
 EXAMPLE
 
 This is what I type in my xterm:
 
-       lilypond someinput.ly
-       tex someinput.tex
-       xdvi someinput&
+          lilypond someinput.ly
+          tex someinput.tex
+          xdvi someinput&
 
 This is what the output looks like over here:
 
-       GNU LilyPond 0.0.78 #4/FlowerLib 1.1.24 #0
-       Parsing ... [/home/hw/share/lilypond/init//
-               <..etc..>
-               init//performer.ly]]][input/kortjakje.ly]
-       Creating elements ...[8][16][24][25]
-       Preprocessing elements... 
-       Calculating column positions ... [14][25]
-       Postprocessing elements...
-       TeX output to someinput.tex ...
-       Creating MIDI elements ...MIDI output to someinput.midi ...
+          GNU LilyPond 0.0.78 #4/FlowerLib 1.1.24 #0
+          Parsing ... [/home/hw/share/lilypond/init//
+               <..etc..>
+               init//performer.ly]]][input/kortjakje.ly]
+          Creating elements ...[8][16][24][25]
+          Preprocessing elements...
+          Calculating column positions ... [14][25]
+          Postprocessing elements...
+          TeX output to someinput.tex ...
+          Creating MIDI elements ...MIDI output to someinput.midi ...
 
-       hw:~/musix/spacer$ xdvi someinput&
-       [1] 855
+          hw:~/musix/spacer$ xdvi someinput&
+          [1] 855
 
-Check out the input files, some of them have comments
-Please refer to the man page for more information.
+Check out the input files, some of them have comments Please
+refer to the man page for more information.
 
 9: REDHAT LINUX
 
-RedHat Linux users can compile an RPM. A spec file is in
-make/out/lilypond.spec, it is distributed along with the
+RedHat Linux users can compile an RPM. A  spec  file  is  in
+make/out/lilypond.spec,  it  is  distributed  along with the
 sources.
 
 You can make the rpm by issuing
 
-       rpm -tb lilypond-x.y.z.tar.gz
-       rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
+          rpm -tb lilypond-x.y.z.tar.gz
+          rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
 
-Precompiled i386 RedHat RPMS are available from
+Precompiled   i386   RedHat   RPMS   are   available    from
 http://linux.umbc.edu/software/lilypond/rpms/.
 
 10: DEBIAN GNU/LINUX
 
-A Debian package is also available; contact Anthony Fok
-foka@debian.org.  The build scripts are in the subdirectory
+A  Debian  package  is  also  available; contact Anthony Fok
+foka@debian.org.  The build scripts are in the  subdirectory
 debian/.
 
 11: WINDOWS NT/95
 
-Separate instructions on building for W32 are avaible
-in the file README-W32.yo.
+Separate instructions on building for W32 are avaible in the
+file README-W32.yo.
 
 12: AUTHORS
 
diff --git a/NEWS b/NEWS
index 614d60fffaaa8a54a1c11124c186cab52e7e7409..f2193e35fdbd7614337ef1b17bfa44deb423c287 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,49 @@
+pl 55.uu1
+       - use GS' anti aliasing
+
+pl 55.jcn1
+       - auto-beamer: consider current duration first in ending/starting beam
+         this way, you can have 16ths auto-beamed, in some way, but 8ths never
+           beamAutoEnd_16 = 1;
+           beamAutoEnd_8 = 1/8;
+       - added some classes and few lines of doco to .dstreamrc
+       - refman:
+         * comment out broken
+         * commented out stale tex macros (tex/* dir too)
+         * bfs/new syntax: chords
+       - more midi2ly renaming stuff
+       - bf: make info (midi2ly and other renaming)
+
+pl 54.jcn2
+       - bf: auto-beamer: don't beam over skips
+       - update BUGS
+
+
+pl 55.mb2
+       - Font update: added more mensural style time signatures, 
+         old2/4, old6/8alt, old4/8 thanks to Christian Mondrup.
+       - bf: correct indentation of first line (removed \leavevmode)
+         plain TeX still gives wrong indentation
+       - bf: volta brackets broken over several lines get open end.
+         Final bracket gets vertical end if it stops at double bar.
+       - Dashed grace flags also for durations shorter than 8.
+       - N.W.Gade: fixed some details
+
+pl 55.mb1
+       - bf: font magnification also in PS output
+       - bf: set the GS_* variables correctly in buildscripts/lilypond-*.sh
+       - bf, lily.scm: errors in (de)crescendo
+       - bf, lilyponddefs: removed \noindent 
+
+
+pl 55.hwn1
+       - fixes: horn-concerto-3.ly
+       - bf: grace before tuplet.
+       - bf: decrescendo
+       - bf: multimeasrest numbers centered.
+
+****************
+
 pl 53.jbr2
         - Documentation/ntweb/index.html: Updated nt distribution web page
 
index 800a025cf64655226950749d6d26d71b45336432..55e1a71ea74b41882defb681f37b3a9d5e60feb6 100644 (file)
 
 NAME
 
-PATCHES - track and distribute your code changes
+     PATCHES - track and distribute your code changes
 
 DESCRIPTION
 
-This page documents how to distribute your changes to GNU lilypond
+     This  page  documents how to distribute your changes to
+GNU lilypond
 
 ABSTRACT
 
-We would like to have unified context diffs with full pathnames.  A
-script automating supplied with Lily.
+     We would like to have unified context diffs  with  full
+pathnames.   A  script  automating supplied with Lily.  Dis-
+tributing a change normally goes like this:
 
- Distributing a change normally
-goes like this:
+o    make your fix/add your code
 
-o make your fix/add your code 
-o Add changes to NEWS, and add yourself to Documentation/AUTHORS.yo
-o generate a patch, 
-o e-mail your patch to one of the mailing lists
-    gnu-music-discuss@gnu.org or bug-gnu-music@gnu.org
+o    Add changes to NEWS, and  add  yourself  to  Documenta-
+     tion/AUTHORS.yo
+
+o    generate a patch,
+
+o    e-mail  your  patch  to  one  of the mailing lists gnu-
+     music-discuss@gnu.org or bug-gnu-music@gnu.org
 
 GENERATING A PATCH
 
-In VERSION, set MY_PATCH_LEVEL:
+     In VERSION, set MY_PATCH_LEVEL:
 
-    VERSION:
-       ...
-       MY_PATCH_LEVEL=jcn1
+         VERSION:
+          ...
+          MY_PATCH_LEVEL=jcn1
 
 In NEWS, enter a summary of changes:
 
-    NEWS:
-       pl 0.1.73.jcn1
-               - added PATCHES.yo
+         NEWS:
+          pl 0.1.73.jcn1
+               - added PATCHES.yo
 
 Then, from the top of Lily's source tree, type
 
-    make dist
-    make diff
+         make dist
+         make diff
 
-which rolls the tarball ../releases/lilypond-0.1.73.tar.gz
-and leaves your patch as ./lilypond-0.1.73.jcn1.diff.
- ('Make diff' generates a patch between two tarballs.  For 
-more info type 'make diff help=='.)  We assume that there is a tarball 
-lilypond-0.1.73.tar.gz in the directory ../releases.
+which rolls the  tarball  ../releases/lilypond-0.1.73.tar.gz
+and leaves your patch as  ./lilypond-0.1.73.jcn1.diff.   [1]
+We  assume that there is a tarball lilypond-0.1.73.tar.gz in
+the directory ../releases.
 
 If you didn't configure Lily using --srcdir, you can do:
 
-    make release
+         make release
 
-    tar-ball: ../patches/lilypond-0.1.73.jcn1.gz
-    patch: ../patches/lilypond-0.1.73.jcn1.gz
-    updeet: ../test/updeet
+         tar-ball: ../patches/lilypond-0.1.73.jcn1.gz
+         patch: ../patches/lilypond-0.1.73.jcn1.gz
+         updeet: ../test/updeet
 
 PREREQUISITES
 
 For creating a patch you need
 
-o All items mentioned in INSTALL.  You're not going to send a patch
-    that you haven't even built, right?
-o GNU diff
-o Python (version 1.5 or newer).  
-    You can of course make a patch by hand, which would go something like:
+o    All items mentioned in INSTALL.  You're  not  going  to
+     send a patch that you haven't even built, right?
+
+o    GNU diff
 
-    make distclean
-    cd ..
-    diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1
+o    Python  (version 1.5 or newer).  You can of course make
+     a patch by hand, which would go something like:
 
-but there are handy python scripts available.  If you're doing development,
-you'll need Python for other LilyPond scripts anyway.
+-----------
+[1] 'Make diff' generates a patch between two tar-
+balls.  For more info type 'make diff help=='.
 
-o The Lily directory structure, which looks like:
+              make distclean
+              cd ..
+              diff -urN lilypond-0.1.73 lilypond-0.1.73.jcn1 > lilypond-0.1.73.jcn1
 
-    doos/                        # gnu/windows32 build and binary releases
-    harmonia -> harmonia-x.y.z 
-    harmonia-x.y.z/
-    lilypond -> lilypond-x.y.z   # symlink to development directory
-    lilypond-x.y.z/              # current development
-    patches/                    # patches between different releases
-    RedHat/BUILD                 # RedHat build and binary releases
-    RedHat/RPMS
-    RedHat/SPECS
-    releases/                    # .tar.gz releases
-    test/                        # tarballs and diffs from current version
-    yodl -> yodl-1.30.17
-    yodl-1.30.17
+     but there  are  handy  python  scripts  available.   If
+     you're  doing development, you'll need Python for other
+     LilyPond scripts anyway.
 
-with prefix $HOME/usr/src
-and (for building rpms only) in $HOME/.rpmrc:
+o    The Lily directory structure, which looks like:
 
-    topdir: /home/fred/usr/src/RedHat
+              doos/                        # gnu/windows32 build and binary releases
+              harmonia -> harmonia-x.y.z
+              harmonia-x.y.z/
+              lilypond -> lilypond-x.y.z   # symlink to development directory
+              lilypond-x.y.z/              # current development
+              patches/                 # patches between different releases
+              RedHat/BUILD                 # RedHat build and binary releases
+              RedHat/RPMS
+              RedHat/SPECS
+              releases/                    # .tar.gz releases
+              test/                        # tarballs and diffs from current version
+              yodl -> yodl-1.30.17
+              yodl-1.30.17
+
+     with prefix $HOME/usr/src and (for building rpms  only)
+     in $HOME/.rpmrc:
+
+              topdir: /home/fred/usr/src/RedHat
 
 APPLYING PATCHES
 
-If you're following LilyPond development regularly, you probably want to
-download just the patch for each subsequent release.
-After downloading the patch (into the patches directory, of course), simply 
-apply it:
+If  you're  following  LilyPond  development  regularly, you
+probably want to download just the patch for each subsequent
+release.   After  downloading  the  patch  (into the patches
+directory, of course), simply apply it:
 
-    gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E
+         gzip -dc ../patches/lilypond-0.1.74.diff.gz | patch -p1 -E
 
 and don't forget to make automatically generated files:
 
-    autoconf footnote(patches don't include automatically generated files, 
-    i.e. file(configure) and files generated by file(configure).)
+         autoconf footnote(patches don't include automatically generated files,
+         i.e. file(configure) and files generated by file(configure).)
 
-    configure
+         configure
 
 SYNCHRONISE
 
-If you're not very quick with sending your patch, there's a good
-chance that an new release of LilyPond comes available.  In such a
-case, the maintainer will probably ask you to make a new patch against
-the latest release.  Your best bet is to download the latest release,
-and apply your patch against this new source tree:
-
-    cd lilypond-0.1.74
-    gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E
-    autoconf
-    configure
+If you're not very quick with sending your patch, there's  a
+good chance that an new release of LilyPond comes available.
+In such a case, the maintainer will probably ask you to make
+a new patch against the latest release.  Your best bet is to
+download the latest release, and apply  your  patch  against
+this new source tree:
+
+         cd lilypond-0.1.74
+         gzip -dc ../patches/lilypond-0.1.73.jcn1.diff.gz | patch -p1 -E
+         autoconf
+         configure
 
 Then, make a patch as shown above.
 
index e96abe18a2b7bfb7789374b72e30dd478a986b77..edc1dd003ff51fd87ce56674bd044cf23577f109 100644 (file)
@@ -1,82 +1,85 @@
 
-TITLE INFORMATION: This is the toplevel README to LilyPond 
+          This is the toplevel README to LilyPond
 
-    LilyPond is the GNU Project music typesetter.  This program can print
-beautiful sheet music from a music definition file.  It can also play
-mechanical performances to a MIDI file.  Features include multiple
-staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
-beams, slurs, triplets, named chords, transposing, formatting scores, 
-part extraction.  It includes a nice font of musical symbols.
+LilyPond  is the GNU Project music typesetter. It transforms
+a musical description file into beautiful sheet music.
 
 1: VERSIONING
 
-LilyPond uses a versioning scheme similar to the Linux kernel.  In a
-version "x.y.z", an even second number 'y' denotes a stable version.
-For development versions 'y' is odd.  For using straightforward score
-production, please use the latest stable version.  Development versions
-may not produce good or nice scores.
+LilyPond uses a versioning scheme similar to the Linux  ker-
+nel.   In  a  version  "x.y.z",  an  even  second number 'y'
+denotes a stable version.  For development versions  'y'  is
+odd.  For using straightforward score production, please use
+the latest stable version.   Development  versions  may  not
+produce good or nice scores.
 
 2: REQUIREMENTS
 
-For the compilation and running of LilyPond you need some additional
-packages.  Please refer to the installation instructions.
+For  the  compilation  and running of LilyPond you need some
+additional  packages.   Please  refer  to  the  installation
+instructions.
 
-NOTE: If you downloaded a binary (.rpm or a W95/NT .zip file), then
-you don't have to compile LilyPond.
+NOTE:  If  you  downloaded  a  binary (.rpm or a W95/NT .zip
+file), then you don't have to compile LilyPond.
 
 3: INSTALLATION
 
-For your convenience, a formatted copy of the INSTALL instructions are
-in the toplevel directory, as INSTALL.txt
+For your  convenience,  a  formatted  copy  of  the  INSTALL
+instructions are in the toplevel directory, as INSTALL.txt
 
-The process is fairly straightforward, but chances are that you have
-to specify directories for TeX to configure: this is done with
-the options --enable-tex-dir and --enable-mf-dir
+The  process is fairly straightforward, but chances are that
+you have to specify directories for  to configure:  this  is
+done with the options --enable-tex-dir and --enable-mf-dir
 
 4: DOCUMENTATION
 
 The real documentation is the directory Documentation/
 
-To generate the pretty-printed docs, you have to run configure first,
-and then do this:
+To generate the pretty-printed docs, you have to run config-
+ure first, and then do this:
 
-       make doc
+make doc
 
-You can also simply read the .yo sources.  They are ASCII text.
-The complete documentation is accessible in formatted form at the 
-website http://www.cs.uu.nl/people/hanwen/lilypond/index.html
+You can also simply read the .yo sources.   They  are  ASCII
+text.  The complete documentation is accessible in formatted
+form at the website  http://www.cs.uu.nl/people/hanwen/lily-
+pond/index.html
 
 5: COMMENTS
 
-LilyPond is a long way from finished and polished.  We do appreciate
-criticism, comments, bugreports, patches, etc.
+LilyPond  is  a  long way from finished and polished.  We do
+appreciate criticism, comments, bugreports, patches, etc.
 
-          Please send your e-mail to one of the MAILING LISTS
+             Please send your e-mail to one of the MAILING LISTS
 
-and not to us personally.  See Documentation/links.yo for more info.
+and not to us personally.   See  Documentation/links.yo  for
+more info.
 
 6: WINDOWS 32
 
-If you have received this file as part of a DOS/Window32 distribution
-(LilyPond-*.zip), then it is advisable to also download the source
-package, since it might contain more documentation
-ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/
+If  you  have  received  this file as part of a DOS/Window32
+distribution (LilyPond-*.zip), then it is advisable to  also
+download  the  source  package,  since it might contain more
+documentation ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/
 
-If you decide to build LilyPond from source, please read the INSTALL.txt
-document first, especially the Windows NT/95 section.
+If you decide to build LilyPond from source, please read the
+INSTALL.txt  document  first,  especially  the Windows NT/95
+section.
 
 7: CAVEATS
 
-* Please read the file BUGS for some ugly bugs.  
+* Please read the file BUGS for some ugly bugs.
 
-* If you have installed a previous version, be sure to remove old font
-files, eg
-rm `find /var/lib/texmf/fonts -name 'feta*'`
+* If you have installed  a  previous  version,  be  sure  to
+remove old font files, eg
 
-a script to do this for you is in buildscripts/clean-fonts.sh
+     rm `find /var/lib/texmf/fonts -name 'feta*'`
+
+a  script  to  do  this  for  you  is in buildscripts/clean-
+fonts.sh
 
 8: CDROM DISTRIBUTIONS
 
-If you have received LilyPond on a cdrom, chances are that development
-has moved a some patchlevels up.  Please check the latest version of
-LilyPond before reporting bugs.
+If you have received LilyPond on a cdrom, chances  are  that
+development  has  moved a some patchlevels up.  Please check
+the latest version of LilyPond before reporting bugs.
diff --git a/TODO b/TODO
index a8215f79151aa907d10dabc13b9c73540dd36a0a..3939b22ad5689848fa594190b9ec2922c1d5d15c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -8,48 +8,96 @@ done, might be done, or is an idea that I want to think about
 Most of the items are marked in the code as well
 Grep for TODO and ugh/ugr/urg.  
 
-.* BUGS
+.* TODO before 1.2
+. * rename abc2ly mup2ly
+. * rename 'staff_line_leading' (who is being lead where?) to
+staff_space, interline; (or other meaningful name) and use throughout lily
+. * rename files to class-name:
+.  * heads-engraver
+.  * request-iterator
+.  * p-score
+.  * engraver-group
+. * standardise(d) switches: -v, --version; -d, --debug,
+. * Auto_beam debugging output (waarom/wanneer heb jij die weggehaald?)
+. * Auto_beam debugging output (waarom/wanneer heb jij die weggehaald?)
+.  * Rename illegal to invalid
+.  * Mats:
+
+- The Postscript output is still very experimental
+
+- The reference manual contain a number of exampels that don't
+  pass lilypond, among other the chord syntax.
+
+- Accidentals for grace notes are drawn at the wrong place. See
+  comment in grace.ly
+
+- It is impossible to typeset two textual scripts that are stacked
+  on top of eachother and avoids note collisions and at the same
+  time are typeset with different textStyle. I tried to move around
+  the text_engraver and other engravers between Voice and Thread 
+  but the granularity is not fine enough, the scripts have to 
+  share the same engraver in order to be get correct vertical 
+  position but than they cannot have different style.
+  In my opinion, all scripts that share the same staff, should
+  be stacked vertically, avoiding collisions with the notes
+  in all voices.
+
+- If an \alternative is directly followed by a new \repeat, 
+  Lily gives an assertion failure. See the comment in volta.fly
+
+- I'd like to change the \repetitions command to Jan's suggested
+  syntax: \repeat "repeatsymbol" 2 {...}, but I'm not sure that
+  I understand the implementation of repeats well enough.
+
+- The paper11/13/26 files have to be updated.
+. * Grace_slur_engraver.
+. * Break_req handling is silly (break_forbid () + \break fucks up.)
+. * hangOnClef with non-breakable clefs.
+. * do scaled fonts generally 
+. * fix partial measures in meaningful way.
+. * relative mode for midi2ly
+. * uniformise recent feta contributions.
+.  * bigger and fatter 4/4 C
+. * sort out directory stuff.
+.  * --prefix option?
+.  * -I option per filetype?
+.  * kpathsea?
+. * ly2dvi/lilypond logfile.
+. * fractional chord durs.
+. * hang Item on Spanner
+. * do --safe for PS output?
+. * convert-mudela --output
+. * Staff_margin (with a partial measure.)
+. * fix convert-mudela manpage
+. * decimal point in \paper {}
+. * msgfmt -o check?
+. * add new glyphs to font.ly
+. * formatting of input stuff. 
+.  * deps for ly2dvi
+. * decide wether to junk _ in lyrics. 
 . * sane strategy for extensions (assume .ly):
 02:22:24 appel ~/usr/src/lilypond$ lilypond foo
 GNU LilyPond 1.1.54.
 [/home/fred/usr/src/lilypond/scm/lily.scm]
 warning: can't find file: `init'
 . * indent = 0.0 with linewidth=-1.0
+. * auto-beaming in input/test/spacing.ly.
+huh, snap niks van: gewone beam gaat wel goed.  hoe kan abe nu
+invloed hebben op beam-creatie, stopt toch gewoon stokken in?
 . * music ending in grace notes.
 . * PostScript
 .  * half notes in pfa
 . * didot / big point.
-. * check EGCS version
-. * input/test/stem-spacing.ly: 12/4 touches first note
 . * \shape 1st dim skipped? 
 . * turn slope-damping on/off
 . * We need feta-din*.mf files for more sizes than 10.
 . * fix dynamics decently, ie. use kerning & ligatures.  
-. * dots & rest collisions?
 . * behavior of  "that the obvious solution
 \lyrics { foo1*4 __ _ }" is unintuitive.
 . * Lyrics and scripts collide.
-. * a note with a circle after it, meaning:
-
-   note + circle = note + 1/4 of its length
-
-   the circle is like a dot that's not filled in.  for example, on
-   page three, the c-sharp on the second line should be a quarter with 
-   a circle, not a quarter tied to a sixteenth.  is this at all
-   possible with lily?
 . * grace_align_item -> stackingdir = left, weird placement.
-. * grace before triplet, see standchen
-. * tuplets that are written as "number : note", for example
-   "3 : [image of a half note here]".  possible?
-
 . * filenames : junk lily.x 
 
-. * Matanya's tips: 
-.  * don't  shorten stems/staffs closer to each other.
-.  * accidentals closer to note head
-.  * to space the staffs/staffgroups contained in the score.  
-.  * heavier beams?
-
 .* Cleanups needed
 . * \$ and $ identifier syntax in examples.
 . * bracket ps code.
@@ -64,58 +112,35 @@ warning: can't find file: `init'
 . * clef engraver 
 . * parser
 
-.* TODO before 1.2
-. * rename midi2ly, abc2ly mup2ly
-. * Grace_slur_engraver.
-. * Break_req handling is silly (break_forbid () + \break fucks up.)
-. * Morally pure LilyPond.
-.  * Remove non-free software links.
-.  * Remove meta article LilyPond.
+.* BUGS
+. * [c8. c16 c16 c16] in 6/8 timesig. 
+
+.* STUFF
 . * break priority setting from SCM.
-. * hangOnClef with non-breakable clefs.
+. * Matanya's tips: 
+.  * don't  shorten stems/staffs closer to each other.
+.  * accidentals closer to note head
+.  * to space the staffs/staffgroups contained in the score.  
+.  * heavier beams?
+
+. * tuplets that are written as "number : note", for example
+   "3 : [image of a half note here]".  possible?
+. * a note with a circle after it, meaning:
+
+   note + circle = note + 1/4 of its length
+
+   the circle is like a dot that's not filled in.  for example, on
+   page three, the c-sharp on the second line should be a quarter with 
+   a circle, not a quarter tied to a sixteenth.  is this at all
+   possible with lily?
+. * scm-ify \property values.
+. * make dependencies () a virtual function.
 . * Abstraction for engravers:
 .  * make "in-between" engraver (Tie, Extender)
 .  * make wide_spanner_engraver (line_group_spanner, staff_symbol)
-. * do scaled fonts generally 
-. * make dependencies () a virtual function.
 . * store req -> element, element -> element causes for warnings
-. * include examples in RPM.
-. * fix partial measures in meaningful way.
-. * relative mode for mi2mu
-. * uniformise recent feta contributions.
-.  * bigger and fatter 4/4 C
-. * sort out directory stuff.
-.  * --prefix option?
-.  * -I option per filetype?
-.  * kpathsea?
-. * ly2dvi/lilypond logfile.
-. * fractional chord durs.
-. * hang Item on Spanner
-. * do --safe for PS output?
-. * convert-mudela --output
-. * Staff_margin (with a partial measure.)
-. * fix convert-mudela manpage
-. * decimal point in \paper {}
-. * scm-ify \property values.
-. * move class Lookup {} into scm
-. * msgfmt -o check?
-. * add new glyphs to font.ly
-. * formatting of input stuff. 
-. * broken scripts:
-       lbheel = \script { "bheel" 0 0 -1  0 0 }
-       rbheel = \script { "bheel" 0 0 1 0 0 }
-       lbtoe = \script { "btoe" 0 0 -1 0 0 }
-       rbtoe = \script { "btoe" 0 0 1 0 0 }
-       lfheel = \script { "fheel" 0 0 -1  0 0 }
-       rfheel = \script { "fheel" 0 0 1 0 0 }
-       lftoe = \script { "ftoe" 0 0 -1 0 0 }
-       rftoe = \script { "ftoe" 0 0 1 0 0 }
-.  * deps for ly2dvi
-
-. * decide wether to junk _ in lyrics. 
-
-.* STUFF
 . * 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
@@ -132,9 +157,6 @@ important) to be able to have some form of automatic numbering at the
 beginning of each new line. This would make it easier to follow songs with a
 large number of stanzas.
 
-2. Hyphens between syllables. At the moment there appears to be no easy way
-to position a hyphen mid-way between the syllables it breaks.
-
 3. Notes centred above/below lyrics rather than left-aligned.
 
 4. It would be very nice to be able to build some kind of phrasing into the
@@ -161,7 +183,7 @@ repeated section with different words for each repeat.
 . * strip EXEs before installing
 . * zip target for binary windows dist (JBR)
 . * junking \skip req in lyrics
-. * mi2mu empty staffs.
+. * midi2ly empty staffs.
 . * use Fourier transformation for rhythmic quantisation.
 . * horizontal centering of dynamics 
 . * $DEPENDENCIES_OUTPUT support
@@ -263,12 +285,7 @@ touching it.
 . * tetex: mfplain.mem
 . * timesig: sometimes bottom digit  too high: Xdvi doesn't handle
     newly created fonts correctly.
-.* 3RD PARTY PROJECTS:
-. * make GCC warn about ctor that leaves member vars  uninitialised.
-. * GNU patch 
-.  * 'double-fix' mode: ignore identical fix, rather than suggest 
-           to revert patch direction when (more or less? exactly) the same 
-           thing is fixed
+
 .* PROJECTS
 . * Scripts:
 .  * stack scripts in chords:
@@ -338,7 +355,7 @@ languages:
 . * Debug logs:
 .  * derive lily_stream, Dstream, texstream from ostream?
 .  * indentable stream as baseclass for TeX stream, lily stream, Dstream.
-.  * use dstream feature in mi2mu
+.  * use dstream feature in midi2ly
 .  * integrate IO checking into stream class
 
 . * input converters
@@ -460,7 +477,6 @@ hesitate to ask.
 .  * input property
 .  * abstract grammar.
 . * Figure out semicolons.
-. * c4 4 4 4 for c4 c4 c4 c4?
 . * <c f a>4 ?
 . * Viola mode?
 
diff --git a/VERSION b/VERSION
index 294cc5ec434a62227b0a582a30a4b82dac0568e8..08044eed796441db1fb55278b5d1318c281eaf6a 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=1
-PATCH_LEVEL=55
+PATCH_LEVEL=56
 MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
index d2c7b96047a2346631ca4624ce327ac0f4af7bc1..feb3dfc8bda91a808a8b8f49428b1d2edfb7e4b4 100644 (file)
@@ -3,8 +3,8 @@
 # env. vars for the C-shell.
 
 # set environment for LilyPond.  To be installed in /etc/profile.d/
-setenv GS_LIB "@datadir@/afm"
-setenv GS_FONTPATH "@datadir@/ps"
+setenv GS_LIB "@datadir@/ps"
+setenv GS_FONTPATH "@datadir@/afm"
 # bit silly. for ly2dvi, overrules compiled-in datadir...
 setenv LILYPONDPREFIX "@datadir@"
 
index 4d56f7248abfcf542d4d6dde45bce6cf87e56c3e..7bc2a25c4c86338e42539e46aed7506d0a19a199 100644 (file)
@@ -2,8 +2,8 @@
 
 
 # set environment for LilyPond.  To be installed in /etc/profile.d/
-GS_LIB="@datadir@/afm"
-GS_FONTPATH="@datadir@/ps"
+GS_LIB="@datadir@/ps"
+GS_FONTPATH="@datadir@/afm"
 # bit silly. for ly2dvi, overrules compiled-in datadir...
 LILYPONDPREFIX="@datadir@"
 
index 0f4afe0a5ab7177bd0a7916f0e681687fc697f60..bf9c8c8c754f1967f4a75e98ad52eec5ded65583 100755 (executable)
@@ -75,13 +75,13 @@ fi
 rm -f $BASE{.ppm,.$GIF} $BASE-page*{.ppm,.$GIF}
 
 # generate the pixmap at twice the size, then rescale (for antialiasing)
-cat $FILE | gs -sDEVICE=ppmraw $SIZE -sOutputFile="$BASE-page%d.ppm" -r180 -dNOPAUSE - -c quit $FILE
+cat $FILE | gs -sDEVICE=pgm $SIZE -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sOutputFile="$BASE-page%d.ppm" -r90 -dNOPAUSE - -c quit $FILE
 # quant is soo slow
 # cat $PPMFILE | ppmquant 2 | pnmscale 0.3333 | pnmcrop | $PNMTOGIF $color > $OUTFILE
 PPMS=`ls $BASE*ppm`
 for i in $PPMS; do
     o=`dirname $i`/`basename $i .ppm`.$GIF
-    cat $i | pnmscale 0.5 | $CROP | $PNMTOGIF $color > $o
+    cat $i | $CROP | $PNMTOGIF $color > $o
     rm $i
 done
 
index 7371d675a6e88b0fb5da3df58a829680fa4ce7f0..6446b9624fc4e22f8312193ef4e07a989c92300a 100755 (executable)
@@ -50,7 +50,7 @@ echo
 echo Setting up links
 echo
 showln -sf $LILYPOND_SOURCEDIR/lily/out/lilypond $prefix/bin/lilypond
-showln -sf $LILYPOND_SOURCEDIR/mi2mu/out/mi2mu $prefix/bin/mi2mu
+showln -sf $LILYPOND_SOURCEDIR/midi2ly/out/midi2ly $prefix/bin/midi2ly
 showln -sf $LILYPOND_SOURCEDIR/scripts/out/ly2dvi $prefix/bin/ly2dvi
 showln -sf $LILYPOND_SOURCEDIR/scripts/out/mudela-book $prefix/bin/mudela-book
 showln -sf $LILYPOND_SOURCEDIR/buildscripts/out/genheader $prefix/bin/genheader
index a13bedba995ded4d120ddbe5acb61b6fc161486a..479e6c5915cc4921a454d662d4b8745dd5050ef0 100644 (file)
--- a/dstreamrc
+++ b/dstreamrc
@@ -2,7 +2,15 @@
 # rename to .dstreamrc and place in the directory where you're doing
 # the debugging.
 
+# Set this to 1 to get default silence for unlisted classes
+Dstream_default_silence 0
+
+# In any case: for listed classes:  
+# 0: verbose
+# 1: silent
+
 # class name           silence?
+
 Dstream                        0
 
 # yydebug
@@ -29,7 +37,8 @@ Absolute_dynamic_req  1
 Atom                   1
 Axis_group_administration      1
 Axis_group_spanner     1
-Auto_beam_engraver     0
+Articulation_req       1
+Auto_beam_engraver     1
 Audio_column           1
 Audio_element          1
 Audio_item             1
@@ -57,6 +66,7 @@ Duration_identifier   1
 Engraver               1
 Engraver_group_engraver 1
 General_script_def     1
+Global_translator      1
 Graphical_element      1
 Graphical_axis_group   1
 Group_change_req       1
@@ -86,6 +96,7 @@ Note_head             1
 Note_performer         1
 Note_req               1
 Paper_column           1
+Paper_outputter                1
 Paper_score                    1
 Paper_def              1
 Partial_measure_req    1
@@ -121,7 +132,7 @@ Skip_req            1
 Staff_commands         1
 Staff_symbol           1
 Stem                   1
-Stem_info              1
+Stem_info              0
 Stem_req               1
 String_identifier      1
 Relative_octave_music  1
@@ -131,6 +142,7 @@ Symtables           1
 Text_def               1
 Text_item              1
 Text_req               1
+Text_script_req                1
 Time_description       1
 Time_signature_change_req      1
 Translation_property   1
diff --git a/input/bugs/refman-sv.ly b/input/bugs/refman-sv.ly
new file mode 100644 (file)
index 0000000..a145051
--- /dev/null
@@ -0,0 +1,4 @@
+\score{\notes{
+c'' \< \! c''   d'' \decr e'' \rced 
+< f''1 {s4 \< \! s4 \> \! s2 } >
+}}
index 47e235cb33538a6404fef18ac8ca9937d20d8114..2155314bed2e3fa24c800843e8e95a0e98c1e401 100644 (file)
@@ -1,8 +1,9 @@
 
 \score {\notes \context Voice = VA \relative c'' {
        \grace c8 c4
-       \grace { [c32 c32] } c4
+       \grace { [c32 cis32] } c4
+       \grace { [c32 c32] } \times 2/3 { [c8 c c] }    
         \grace { [b32 ( c32] } c4
-       \grace c8 [c8 c8]
+       \grace c16 [c8 c8]
 }
 }
index 1ee912c0aed6ac221b4d4bad36aec4be60816332..4517587b1423601649031abaf975173bc7363b8d 100644 (file)
@@ -5,6 +5,8 @@
 c''1^"timeSignatureStyle = \"C\"" 
 \time 2/2; 
 c1 
+\time 2/4; 
+c2 
 \time 3/4; 
 c2. 
 \time 4/4; 
@@ -27,6 +29,8 @@ c2. c2. c2.
 c1^"timeSignatureStyle = \"old\"" 
 \time 2/2; 
 c1 
+\time 2/4; 
+c2 
 \time 3/4; 
 c2. 
 \time 4/4; 
@@ -53,6 +57,8 @@ c4. c4. c4.
 c1^"timeSignatureStyle = \"\"" 
 \time 2/2; 
 c1
+\time 2/4; 
+c2 
 \time 3/4; 
 c2.
 \time 4/4; 
@@ -75,6 +81,8 @@ c2. c2. c2.
 c1^"timeSignatureStyle = \"1\""
 \time 2/2; 
 c1
+\time 2/4; 
+c2 
 \time 3/4; 
 c2.
 \time 4/4; 
@@ -99,6 +107,9 @@ c1^"old9/8"
 \property Staff.timeSignatureStyle = "old6/8" 
 \time 1/1; 
 c1^"old6/8" 
+\property Staff.timeSignatureStyle = "old6/8alt" 
+\time 1/1; 
+c1^"old6/8alt" 
 \property Staff.timeSignatureStyle = "old9/4"
 \time 1/1; 
 c1^"old9/4" 
@@ -114,6 +125,12 @@ c1^"old4/4"
 \property Staff.timeSignatureStyle = "old2/2"
 \time 1/1; 
 c1^"old2/2"
+\property Staff.timeSignatureStyle = "old2/4"
+\time 1/1; 
+c1^"old2/4" 
+\property Staff.timeSignatureStyle = "old4/8"
+\time 1/1; 
+c1^"old4/8"
 \property Staff.timeSignatureStyle = "C4/4"
 \time 1/1; 
 c1^"C4/4" 
diff --git a/input/test/volta.fly b/input/test/volta.fly
new file mode 100644 (file)
index 0000000..17b42bd
--- /dev/null
@@ -0,0 +1,18 @@
+% Test of prima/secunda volta brackets in conjunction with 
+% line breaks and special bars.
+
+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!!
+\repeat semi 2 { g a b c }
+\alternative { { c b a g \break a g a g} { f e d c } } \break
+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
+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
+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 "|.";} }
index b6bbb7e598a768c4c2e234edc524013cc962823b..c222778aba3fd4734ed0b6827dc1218810afed64 100644 (file)
@@ -19,4 +19,5 @@
 Atom::Atom(SCM s)
 {
   func_ = s;
+  magn_ = gh_int2scm (0);
 }
index f80d36ec651f5de949ea5fffa7347a2f05b52119..77094004d368cc2bb6b450dd0eb620b541afb910 100644 (file)
@@ -36,14 +36,30 @@ Auto_beam_engraver::do_creation_processing ()
   timer_l_ = dynamic_cast<Timing_engraver*> (t);
 }
 
+bool
+Auto_beam_engraver::do_try_music (Music* m) 
+{
+  /*
+    Mag dit?  Nu word-i toch maar geswallowed, en
+    komt er dus ook geen announce...
+   */
+  if (Skip_req* s = dynamic_cast <Skip_req*> (m))
+    {
+      if (stem_l_arr_p_)
+       end_beam ();
+      return true;
+    }
+  return false;
+} 
+
 void
 Auto_beam_engraver::do_process_requests ()
 {
-  consider_end_and_begin ();
+  consider_end_and_begin (shortest_mom_);
 }
 
 void
-Auto_beam_engraver::consider_end_and_begin ()
+Auto_beam_engraver::consider_end_and_begin (Moment test_mom)
 {
   if (!timer_l_)
       return;
@@ -52,11 +68,12 @@ Auto_beam_engraver::consider_end_and_begin ()
   int num = time->whole_per_measure_ / time->one_beat_;
   int den = time->one_beat_.den_i ();
   String time_str = String ("time") + to_str (num) + "_" + to_str (den);
+
   String type_str;
-  if (shortest_mom_.num () != 1)
-    type_str = to_str (shortest_mom_.num ());
-  if (shortest_mom_.den () != 1)
-    type_str = type_str + "_" + to_str (shortest_mom_.den ());
+  if (test_mom.num () != 1)
+    type_str = to_str (test_mom.num ());
+  if (test_mom.den () != 1)
+    type_str = type_str + "_" + to_str (test_mom.den ());
 
   /*
     Determine end moment for auto beaming (and begin, mostly 0==anywhere) 
@@ -305,12 +322,15 @@ Auto_beam_engraver::acknowledge_element (Score_element_info info)
                reconsider ending/starting beam first.
              */
              Moment mom = rhythmic_req->duration_.length_mom ();
+             consider_end_and_begin (mom);
+             if (!stem_l_arr_p_)
+               return;
              if (mom < shortest_mom_)
                {
                  if (stem_l_arr_p_->size ())
                    {
                      shortest_mom_ = mom;
-                     consider_end_and_begin ();
+                     consider_end_and_begin (shortest_mom_);
                      if (!stem_l_arr_p_)
                        return;
                    }
index 3c23232be77ff37ba7eb2c99c9c46283576d3b6d..ab67d0881d309b994746ad25406051b8abdac8aa 100644 (file)
@@ -24,6 +24,7 @@ public:
 representing a musical notation symbol.  */
   Protected_scm func_;
   Protected_scm font_;
+  Protected_scm magn_;
 };
 
 
index ce8655dd24f4415ded5f53c0af749b10ae8756d0..6621ecce1ac3c8870a96b63100adc19fee728ac2 100644 (file)
@@ -19,6 +19,7 @@ public:
   VIRTUAL_COPY_CONS (Translator);
 
 protected:
+  virtual bool do_try_music (Music*);
   virtual void do_pre_move_processing ();
   virtual void do_post_move_processing ();
   virtual void do_removal_processing ();
@@ -28,7 +29,7 @@ protected:
   virtual void do_creation_processing ();
 private:
   void begin_beam ();
-  void consider_end_and_begin ();
+  void consider_end_and_begin (Moment test_mom);
   Beam* create_beam_p ();
   void end_beam ();
   void junk_beam ();
index b7fcda070618dc6cfa87fb35322f81998e059805..27ac98459a646116118ff035a61c6ff204462d8a 100644 (file)
@@ -46,7 +46,7 @@ public:
   Molecule text (String style, String text, Paper_def*) const;
   Molecule staff_brace (Real dy, int) const;
   Molecule staff_bracket (Real dy) const;
-  Molecule volta (Real h, Real w,  Real thick,  bool last_b) const;
+  Molecule volta (Real h, Real w,  Real thick,  bool vert_start, bool vert_end) const;
   Molecule special_time_signature (String, int,int, Paper_def*) const;
   Molecule time_signature (int n,int d, Paper_def*) const;
 
index 8ad3caa31fa0dab0385c236ca039367ff6d33439..9e4ee574a39806e9258f6bd83c456ff15715a3fd 100644 (file)
@@ -49,6 +49,7 @@ class Axis_group_spanner;
 class Spanner : public virtual Score_element {
 public:
   Drul_array<Item*> spanned_drul_;
+  Array<Breaking_information> broken_info_;
   void set_bounds (Direction d, Item*);
 
   
@@ -68,7 +69,6 @@ protected:
     */
   virtual void break_into_pieces ();
 
-  Array<Breaking_information> broken_info_;
   friend Axis_group_spanner; // UGH
 
   virtual void do_space_processing ();
index 8c340af25c94a23ec9ccfd29339a1e0d57d9e851..3dd6d59e8c5fbd7ca29a7beeb474993cc712d61c 100644 (file)
@@ -364,7 +364,7 @@ HYPHEN              --
 }
 
 <*>.           {
-       String msg = _f ("illegal character: `%c\'", YYText ()[0]);
+       String msg = _f ("invalid character: `%c\'", YYText ()[0]);
        LexerError (msg.ch_C ());
        return YYText ()[0];
 }
index 38412301cbc4b2c2c65b25279c6ec5238ccdd9ac..e82dd2f808ba2e620eee290fcce3226c799e1c83 100644 (file)
@@ -120,6 +120,8 @@ Lookup::afm_find (String s, bool warn) const
                    gh_int2scm (cm.code ()),
                    SCM_UNDEFINED));
   at.font_ = ly_symbol (font_name_.ch_C());
+  at.magn_ = gh_int2scm (0);
+  
   m.dim_ = cm.dimensions();
   m.add_atom (&at);
   return m;
@@ -373,7 +375,7 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
   if (style.empty_b ())
     style = "roman";
   
-  int font_mag = 1;
+  int font_mag = 0;
   Real font_h = paper_l->get_var ("font_normal");
   if (paper_l->scope_p_->elem_b ("font_" + style))
     {
@@ -427,7 +429,6 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
   if (font_mag > 1 && font_mag < 7 )
     {
       /* UGH  */ 
-      style = style + String(" scaled \\magstep ") + to_str (font_mag);
       w *= mag_steps[font_mag];
       ydims *= mag_steps[font_mag];
     }
@@ -456,6 +457,7 @@ Lookup::text (String style, String text, Paper_def *paper_l) const
                     gh_str02scm (text.ch_C()),
                     SCM_UNDEFINED));
   at.font_ = ly_symbol (style);
+  at.magn_ = gh_int2scm (font_mag);
   
   m.add_atom (&at);
   return m;
@@ -508,10 +510,10 @@ Lookup::hairpin (Real width, Real height, Real thick, bool decresc, bool continu
 
   String hairpin = String (decresc ? "de" : "") + "crescendo";
   Atom at  (gh_list (ly_symbol (hairpin),
+                    gh_double2scm (thick),
                     gh_double2scm (width),
                     gh_double2scm (height),
                     gh_double2scm (continued ? height/2 : 0.0),
-                    gh_double2scm (thick),
                     SCM_UNDEFINED));
   m.dim_.x () = Interval (0, width);
   m.dim_.y () = Interval (-2*height, 2*height);
@@ -581,7 +583,7 @@ Lookup::staff_bracket (Real y) const
 }
 
 Molecule
-Lookup::volta (Real h, Real w, Real thick, bool last_b) const
+Lookup::volta (Real h, Real w, Real thick, bool vert_start, bool vert_end) const
 {
   Molecule m; 
 
@@ -589,7 +591,8 @@ Lookup::volta (Real h, Real w, Real thick, bool last_b) const
                     gh_double2scm (h),
                     gh_double2scm (w),
                     gh_double2scm (thick),
-                    gh_int2scm (last_b),
+                    gh_int2scm (vert_start),
+                    gh_int2scm (vert_end),
                     SCM_UNDEFINED));
 
   m.dim_[Y_AXIS] = Interval (- h/2, h/2);
index 41d8018b05e49a67f9b4558c81ab9b0b6279af3e..fede70beb408b9c381abe2fddfa30d701e2ff8c1 100644 (file)
@@ -100,7 +100,7 @@ Multi_measure_rest::do_brew_molecule_p () const
   else if (measures_i_ > 1)
     {
       Molecule s ( lookup_l ()->text ("number", to_str (measures_i_), paper_l ()));
-
+      s.align_to (X_AXIS, CENTER);
       s.translate_axis (3.0 * interline_f, Y_AXIS);
       mol_p->add_molecule (s);
     }
index 6d82f743805d27674bff4cc8b68e3575d6e9ec14..564314efd1d6ce825b4fe5ec7a1d9736666d8599 100644 (file)
@@ -141,6 +141,7 @@ Paper_outputter::output_molecule (Molecule const*m, Offset o, char const *nm)
        {
          output_scheme (gh_list (ly_symbol ("select-font"),
                                  gh_str02scm (symbol_to_string (i->font_).ch_C()),
+                                 SCM (i->magn_),
                                  SCM_UNDEFINED));
        }
 
index 7f5129763f78f6cd537736444c1aaec9977894cd..0fd640c795e997a67a9eafed7764cb8941e9f893 100644 (file)
@@ -299,7 +299,11 @@ Stem::flag () const
     }
 
   char c = (dir_ == UP) ? 'u' : 'd';
-  return lookup_l ()->afm_find (String ("flags-") + to_str (c) + to_str (flag_i_) + style);
+  Molecule m = lookup_l ()->afm_find (String ("flags-") + to_str (c) + 
+                                     to_str (flag_i_));
+  if (!style.empty_b ())
+    m.add_molecule(lookup_l ()->afm_find (String ("flags-") + to_str (c) + style));
+  return m;
 }
 
 Interval
index 6fecdb99d89ef1f34c9dab19ee565e50ad1dc627..d66eb403e1527cfb8f606f3c50dfc0998f999d2e 100644 (file)
@@ -14,11 +14,11 @@ Time_description::str () const
 {
   String s ("Time_description { ");
   if (cadenza_b_)
-       s += String ("(") + _("cadenza") + ")";
+    s += String ("(") + _("cadenza") + ")";
   s += "at ";
   s += when_.str ();
   s +="\ntime_signature " + (whole_per_measure_/one_beat_).str () +":" +
-        (Moment (Moment (1)/one_beat_)).str ();
+    (Moment (Moment (1)/one_beat_)).str ();
   s += "\nposition " + to_str (bars_i_) + ":"+ whole_in_measure_.str () +"\n}\n";
   return s;
 }
@@ -30,12 +30,13 @@ Time_description::print() const
   DOUT << str ();
 #endif
 }
+
 void
 Time_description::OK() const
 {
 #ifndef NDEBUG
   if (!cadenza_b_)
-       assert (whole_in_measure_ < whole_per_measure_);
+    assert (whole_in_measure_ < whole_per_measure_);
   assert (Moment (0) <= whole_in_measure_);
   assert (one_beat_);
 #endif
@@ -46,11 +47,11 @@ Time_description::set_cadenza (bool b)
 {
   if (cadenza_b_ && !b)
     {
-       if (whole_in_measure_)
-         {
-           bars_i_ ++;         // should do?
-           whole_in_measure_ = 0;
-         }
+      if (whole_in_measure_)
+       {
+         bars_i_ ++;           // should do?
+         whole_in_measure_ = 0;
+       }
     }
   cadenza_b_ = b ;
 }
@@ -74,8 +75,8 @@ Time_description::add (Moment dt)
 
   while (!cadenza_b_ && whole_in_measure_ >= whole_per_measure_)
     {
-       whole_in_measure_ -= whole_per_measure_;
-       bars_i_ ++;
+      whole_in_measure_ -= whole_per_measure_;
+      bars_i_ ++;
     }
 }
 
@@ -102,9 +103,9 @@ String
 Time_description::try_set_partial_str (Moment p) const
 {
   if (p<Moment (0))
-       return (_ ("partial measure must be non-negative"));
+    return (_ ("partial measure must be non-negative"));
   if (p > whole_per_measure_)
-       return (_ ("partial measure too large"));
+    return (_ ("partial measure too large"));
   return "";
 }
 
@@ -121,22 +122,6 @@ Time_description::barleft() const
   return whole_per_measure_-whole_in_measure_;
 }
 
-int
-Time_description::compare (Time_description const &t1,  Time_description const&t2)
-{
-  int i = sign (t1.when_-t2.when_);
-
-  if (!i)
-    {
-       assert (t1.bars_i_==t2.bars_i_);
-       assert (t1.one_beat_ == t2.one_beat_);
-       assert (t1.whole_in_measure_ == t2.whole_in_measure_);
-       assert (t1.whole_per_measure_ == t2.whole_per_measure_);
-    }
-
-  return i;
-}
-
 Moment
 Time_description::next_bar_moment() const
 {
index 347ed70c4339269bd461e90dcb3c7c5d6fc62ec3..c067169a8c4aeb906470d2fa99c291e91d44e768 100644 (file)
@@ -60,6 +60,10 @@ Tuplet_engraver::do_process_requests ()
 void
 Tuplet_engraver::acknowledge_element (Score_element_info i)
 {
+  bool grace= (i.elem_l_->get_elt_property (grace_scm_sym) != SCM_BOOL_F);
+  if (grace != get_property ("weAreGraceContext",0).to_bool ())
+    return;
+  
   if (Note_column *nc = dynamic_cast<Note_column *> (i.elem_l_))
     {
       for (int j =0; j  <started_span_p_arr_.size (); j++)
index 860a87c94cba8dd8da0d1687ea8fa2bd12f9987b..db955da97ee60fd690f2876b82c180a8a290efa5 100644 (file)
@@ -32,6 +32,16 @@ Volta_spanner::do_brew_molecule_p () const
 
   if (!bar_arr_.size ())
     return mol_p;
+  
+  bool no_vertical_start = false;
+  bool no_vertical_end = last_b_;
+  Spanner *orig_span =  dynamic_cast<Spanner*> (original_l_);
+  if (orig_span && orig_span->broken_info_[0].broken_spanner_l_ != this)
+    no_vertical_start = true;
+  if (orig_span && orig_span->broken_info_.top ().broken_spanner_l_ != this)
+    no_vertical_end = true;
+  if (bar_arr_.top ()->type_str_.length_i () > 1)
+    no_vertical_end = false;
 
   Real interline_f = paper_l ()->get_realvar (interline_scm_sym);
   Real internote_f = interline_f/2;
@@ -40,7 +50,7 @@ Volta_spanner::do_brew_molecule_p () const
   Real dx = internote_f;
   Real w = extent (X_AXIS).length () - dx;
   Real h = paper_l()->get_var ("volta_spanner_height");
-  Molecule volta (lookup_l ()->volta (h, w, t, last_b_));
+  Molecule volta (lookup_l ()->volta (h, w, t, no_vertical_start, no_vertical_end));
 
   
   Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ()));
index f42f35368ad8a606f4db870678a8bc2764512003..a88efa0ad835e525318523a0eb8372531337765a 100644 (file)
@@ -30,7 +30,8 @@ rm -rf $RPM_BUILD_ROOT
 mkdir -p $RPM_BUILD_ROOT/tmp/lilypond-rpm-doc
 mkdir htmldocs
 tar -C htmldocs -xzf out/htmldoc.tar.gz
-#tar -C $RPM_BUILD_ROOT/tmp/lilypond-rpm-doc -xzf out/htmldoc.tar.gz
+mkdir -p out/examples/
+tar -cf - input/  | tar -C out/examples/ -xf-
 
 strip lily/out/lilypond midi2ly/out/midi2ly
 make prefix="$RPM_BUILD_ROOT/usr" install
@@ -54,6 +55,7 @@ fi
 
 %files
 %doc htmldocs/
+%doc out/examples/
 
 # hairy to hook it in (possibly non-existing) emacs
 %doc mudela-mode.el
index ba753587cf3ac146b6ba85af847d562ee964bd1c..8264b668fbff23dbc90daef3f4731ac15b5f4038 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.1.55
-Inschrijf datum: 09JUL99
+Versie: 1.1.56
+Inschrijf datum: 11JUL99
 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.55.tar.gz 
+       770k lilypond-1.1.56.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.55.tar.gz 
+       770k lilypond-1.1.56.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 1a7e20b9a7d2472ac2ad3e24b31c22215ed63752..9c038fe229b261ac08d03332e920c4bc02959f24 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.1.55
-Entered-date: 09JUL99
+Version: 1.1.56
+Entered-date: 11JUL99
 Description: 
 
 LilyPond is the GNU Project music typesetter. It transforms a musical
@@ -12,8 +12,8 @@ Author: hanwen@cs.ruu.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
-       770k lilypond-1.1.55.tar.gz 
+       770k lilypond-1.1.56.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.55.tar.gz 
+       770k lilypond-1.1.56.tar.gz 
 Copying-policy: GPL
 End
index 11adbb60a4c73d69ed7b33d67b8e529fb6c239ad..6f6cd0721fc397cbde3ecfe77b04cf0dbfabed1d 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.1.55
+Version: 1.1.56
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.55.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.56.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>
@@ -34,7 +34,8 @@ rm -rf $RPM_BUILD_ROOT
 mkdir -p $RPM_BUILD_ROOT/tmp/lilypond-rpm-doc
 mkdir htmldocs
 tar -C htmldocs -xzf out/htmldoc.tar.gz
-#tar -C $RPM_BUILD_ROOT/tmp/lilypond-rpm-doc -xzf out/htmldoc.tar.gz
+mkdir -p out/examples/
+tar -cf - input/  | tar -C out/examples/ -xf-
 
 strip lily/out/lilypond midi2ly/out/midi2ly
 make prefix="$RPM_BUILD_ROOT/usr" install
@@ -58,6 +59,7 @@ fi
 
 %files
 %doc htmldocs/
+%doc out/examples/
 
 # hairy to hook it in (possibly non-existing) emacs
 %doc mudela-mode.el
index 64a289c86ef1d2b25e41856b637a1c67c13bbe3c..28aaa545d5997604239ffddbeb56a096384afa24 100644 (file)
@@ -230,32 +230,27 @@ fet_beginchar("64th Flag (up)", "u6", "sixtyfourthflag")
        draw (0, 0) .. (0,-2 interline);
 fet_endchar;
 
-fet_beginchar("grace 8th Flag (up)", "u3grace", "graceeighthflag")
+fet_beginchar("grace dash (up)", "ugrace", "gracedash")
        save flare, 
                hip_depth_ratio, hip_width,
-               foot_depth, foot_width_ratio;
+               foot_depth;
 
        flare# = 1.0 interline#;
        hip_depth_ratio = .72; 
-       foot_width_ratio = .8;
        hip_width# = upflag_width# - hip_thickness#/2;
 
        foot_depth# =  3 interline#;
 
-       set_char_box(hip_width# * hip_depth_ratio,
-         hip_width# + stemthickness#/2 + right_upflag_space#, 
-         foot_depth# + foot_thickness#/2, stemthickness#/2)
-
        define_pixels(flare, hip_width, hip_thickness,
                foot_depth, foot_thickness);
-       draw_flag((stemthickness/2,0), flare, 
-               (hip_width, foot_depth), 
-               hip_depth_ratio, foot_width_ratio, hip_thickness, foot_thickness);
+
+       set_char_box(hip_width# * hip_depth_ratio,
+         hip_width# + stemthickness#/2 + right_upflag_space#, 
+         foot_depth# * hip_depth_ratio, -flare#)
 
        pickup pencircle scaled 1.5 stemthickness;
-       draw (0, 0) .. (0,-2 interline);
-       draw (-b ,-foot_depth * hip_depth_ratio) ..
-         (w, -flare);
+       draw (-b ,-d) ..
+         (w, h);
 fet_endchar;
 
 fet_beginchar("8th (down)", "d3", "deighthflag")
@@ -411,10 +406,8 @@ fet_beginchar("64th (down)", "d6", "dsixtyfourthflag")
 fet_endchar;
 
 
-fet_beginchar("grace 8th (down)", "d3grace", "dgraceeighthflag")
-       save flare, 
-               hip_depth_ratio, hip_width,
-               foot_depth, foot_width_ratio;
+fet_beginchar("grace dash (down)", "dgrace", "dgracedash")
+       save flare, hip_depth_ratio, hip_width, foot_depth;
        save flagspace, total_depth, flag_count;
        
        flag_count = 1;
@@ -427,22 +420,15 @@ fet_beginchar("grace 8th (down)", "d3grace", "dgraceeighthflag")
 
        foot_width_ratio = .8;
 
-       set_char_box(hip_width# * hip_depth_ratio,
-         hip_width# + stemthickness#/2 + right_downflag_space#,
-         total_depth# + foot_thickness#/2, stemthickness#/2)
-
        define_pixels(flare, hip_width, hip_thickness,
-               flagspace,
-               foot_depth,  foot_thickness);
-
-       draw_flag((stemthickness/2,- (flag_count-1) *flagspace), flare, 
-               (hip_width, foot_depth), 
-               hip_depth_ratio,foot_width_ratio, hip_thickness, foot_thickness);
+               flagspace, foot_depth);
 
+       set_char_box(hip_width# * hip_depth_ratio,
+         hip_width# + stemthickness#/2 + right_downflag_space#,
+         foot_depth# * hip_depth_ratio, -flare#)
 
        pickup pencircle scaled 1.5 stemthickness;
-       draw (0, 0) .. (0,-2 interline);
-       draw (-b, -foot_depth * hip_depth_ratio) .. (w,-flare);
+       draw (-b, -d) .. (w,h);
        y_mirror_char;
 fet_endchar;
 
index ad64170dff288c119ba782e0ea9b26c9c94c71f9..a50866f73ab20929db2c4efc36eb69ea83e310bb 100644 (file)
@@ -35,7 +35,7 @@ if test = 0:
        input feta-klef;
        input feta-timesig;
 else:
-%      input feta-bolletjes;   
+       input feta-bolletjes;   
 %      input feta-banier;
 %      input feta-eindelijk;
 %      input feta-klef;
index afe2d28c10e2b84243f3560967fdae5ee677fcc6..4cdf404b329938dddd01760018c8bd55a4522bc8 100644 (file)
@@ -3,7 +3,8 @@
 % 
 % source file of the Feta (not an abbreviation of Font-En-Tja) music font
 % 
-% (c) 1998 Mats Bengtsson <matsb@s3.kth.se>
+% (c) 1998--1999 Mats Bengtsson <matsb@s3.kth.se>,
+%              Christian Mondrup <scancm@biobase.dk>
 
 fet_begingroup("timesig");
 
@@ -159,4 +160,34 @@ fet_beginchar ("Mensural 9/8 meter", "old9/8", "oldnineeight")
        draw_block((-Cthickness/2, -d), (Cthickness/2, h));
 fet_endchar;
 
+%% tempus imperfectum cum prolatione imperfecta diminutio simplex
+fet_beginchar ("Mensural 4/8 meter", "old4/8", "oldfoureightmeter")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+       .5 Cdiameter#, .5 Cdiameter#);
+       
+       pickup pencircle scaled Cthickness;
+       draw threequartercircle rotated 225 scaled Cdiameter;
+fet_endchar;
+
+%% tempus imperfectum cum prolatione perfecta diminutio simplex
+fet_beginchar ("Mensural 6/8 meter", "old6/8alt", "oldsixeightmeteralt")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               .5 Cdiameter#, .5 Cdiameter#);
+       
+       pickup pencircle scaled Cthickness;
+       draw threequartercircle rotated 225 scaled Cdiameter;
+       pickup pencircle scaled 4 stafflinethickness;
+       draw (0,0);
+fet_endchar;
+
+%% tempus imperfectum cum prolatione imperfecta diminutio duplex
+fet_beginchar ("Mensural 2/4 meter", "old2/4", "oldtwofourmeter")
+       set_char_box(.5 Cdiameter# + interline#, .5 Cdiameter# + interline#, 
+               interline#, interline#);
+       
+       pickup pencircle scaled Cthickness;
+       draw threequartercircle rotated 225 scaled Cdiameter;
+       draw_block((-Cthickness, -d), (0, h));
+fet_endchar;
+
 fet_endgroup("timesig");
index 3098b60d1aa21c195e3d9798ef482524ee9f4da6..35fb3c49292e18e983403697e2c223f49f47d89d 100644 (file)
@@ -3,6 +3,6 @@
 
 font_identifier "GRAYCX";
 
-boolean lightweight;
+%boolean lightweight;
 
 input grayf
index 2f0b77f11ef54fae5ab8ff25f758f832485b32cd..57f0488a7065f3cf77dfd805eaf6a23aa5242469 100644 (file)
@@ -1,4 +1,4 @@
-# mi2mu/TODO
+# midi2ly/TODO
 
 Most of the items are marked in the code as well, with full explanation. 
 grep for TODO and ugh/ugr
@@ -16,15 +16,15 @@ IMPORTANT
 
        * junk one in list vs. array
 
-       * add mi2mu example output (.midi.ly and .gif) to website
+       * add midi2ly example output (.midi.ly and .gif) to website
 
        * important? lily is important, go work on lily!
 
-       * faq about mi2mu midi t1. ?
+       * faq about midi2ly midi t1. ?
 
 PROJECTS
 
-       * write something interesting in mi2mu manual page
+       * write something interesting in midi2ly manual page
 
        * check/use type 0 / 1 / 2 of midi file
 
@@ -80,5 +80,5 @@ FUTURE
        * steal good ideas of other gpl midi parsers
 
        * lily: add mudela info into midi as specials
-         mi2mu: use special info
+         midi2ly: use special info
 
diff --git a/midi2ly/include/mi2mu-proto.hh b/midi2ly/include/mi2mu-proto.hh
deleted file mode 100644 (file)
index d8ad136..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-  mi2mu-proto.hh -- declare type names in mi2mu
-
-  source file of mi2mu, part of the GNU LilyPond package,
-
-  (c)  1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
-*/
-
-
-#ifndef MI2MU_PROTO_HH
-#define MI2MU_PROTO_HH
-
-class Midi_parser;
-struct Midi_parser_info;
-class Midi_score_parser;
-class Midi_track_parser;
-class Mudela_stream;
-class Mudela_item;
-class Mudela_key;
-class Mudela_time_signature;
-class Mudela_note;
-class Mudela_tempo;
-class Mudela_text;
-class Mudela_score;
-class Mudela_staff;
-class Mudela_voice;
-class Mudela_column;
-
-#endif // MI2MU_PROTO_HH
index 9dca4db212c72c41aee3938d3538621d6ce709d3..529fdf268d21d24bdba2fee64069ad3574ef6fe4 100644 (file)
@@ -37,7 +37,7 @@
 
 #include "proto.hh"
 #include "moment.hh"
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 
 struct Midi_parser_info
 {
index 0dc98237059baac11ef9893a05b61c9faf12eaf4..02d6f18aebdc3239f188ad6886d15c2e5a93032d 100644 (file)
@@ -12,7 +12,7 @@
 
 #include "midi-parser.hh"
 #include "proto.hh"
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "parray.hh"
 
 class Midi_score_parser : public Midi_parser
index d873e198df29fcbc8f5e15c5dcd63e511cb9fcd9..27eb83d2240bc2c2f96a796f677b37317de5e7da 100644 (file)
@@ -13,7 +13,7 @@
 #include "proto.hh"
 #include "cons.hh"
 #include "moment.hh"
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "midi-parser.hh"
 
 class Midi_track_parser : public Midi_parser
diff --git a/midi2ly/include/midi2ly-proto.hh b/midi2ly/include/midi2ly-proto.hh
new file mode 100644 (file)
index 0000000..5ac345a
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+  midi2ly-proto.hh -- declare type names in midi2ly
+
+  source file of midi2ly, part of the GNU LilyPond package,
+
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@stack.nl>
+*/
+
+
+#ifndef MIDI2LY_PROTO_HH
+#define MIDI2LY_PROTO_HH
+
+class Midi_parser;
+struct Midi_parser_info;
+class Midi_score_parser;
+class Midi_track_parser;
+class Mudela_stream;
+class Mudela_item;
+class Mudela_key;
+class Mudela_time_signature;
+class Mudela_note;
+class Mudela_tempo;
+class Mudela_text;
+class Mudela_score;
+class Mudela_staff;
+class Mudela_voice;
+class Mudela_column;
+
+#endif // MIDI2LY_PROTO_HH
index a09cebb4694291d9fc5c074a5bbcd4887859eaaa..cd549a1b37fb69c3bcdfb5ec198fdabd93f0a220 100644 (file)
@@ -7,7 +7,7 @@
 #define MUDELA_COLUMN_HH
 
 #include "proto.hh"
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "moment.hh"
 #include "cons.hh"
 
index e1b52b7368a8252d6d36ef7fe9bddb690a906269..e6150e4a045211bdd062b58a04dc53a31eb40d17 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef MUDELA_ITEM_HH
 #define MUDELA_ITEM_HH
 
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "string.hh"
 #include "moment.hh"
 #include "duration.hh"
index 8e75d028ccfdb7121fb7d5f31393059ec5bd78d4..b5fa1db9720588fde47eb04fc3381aa4a1019bbd 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef MUDELA_SCORE_HH
 #define MUDELA_SCORE_HH
 
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "proto.hh"
 #include "cons.hh"
 #include "parray.hh"
index 8c0afa044a4b53d6ca51ec133c9492445d5d9dbf..2367fec7015a1c24d62bda1ff42abaac22dcdac1 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef MUDELA_STAFF_HH
 #define MUDELA_STAFF_HH
 
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "proto.hh"
 #include "cons.hh"
 #include "string.hh"
index 6953a961cd3112a7b71b4434581036f86f0384ea..0ba47e8173437d7aa3d6c87314d474d107db267d 100644 (file)
@@ -8,7 +8,7 @@
 #ifndef MUDELA_STREAM_HH
 #define MUDELA_STREAM_HH
 
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "string.hh"
 #include "scalar.hh"
 
index db196da9e645305b06e5c671283fc61d56ea69e3..2c82a4b4b2e95b75f944dd03d6796f357d72f1a4 100644 (file)
@@ -6,7 +6,7 @@
 #ifndef MUDELA_VOICE_HH
 #define MUDELA_VOICE_HH
 
-#include "mi2mu-proto.hh"
+#include "midi2ly-proto.hh"
 #include "cons.hh"
 
 /// (mudela_voice)
index 26e0c66b8effd38f1e2e0780dbb475e43bc8fa39..88cf758b8880f3c7a327956fdeb73e78290e88b7 100644 (file)
@@ -13,7 +13,7 @@
 #include "duration-convert.hh"
 #include "source.hh"
 
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "midi-score-parser.hh"
 #include "mudela-item.hh"
 #include "mudela-score.hh"
@@ -40,7 +40,7 @@ Verbose level_ver = NORMAL_ver;
 void
 usage()
 {
-  cout << _f ("Usage: %s [OPTION]... [FILE]", "mi2mu");
+  cout << _f ("Usage: %s [OPTION]... [FILE]", "midi2ly");
   cout << '\n';
   cout << _ ("Translate midi-file to mudela");
   cout << '\n';
@@ -95,14 +95,14 @@ usage()
 void
 identify()
 {
-  LOGOUT(NORMAL_ver) << mi2mu_version_str() << endl;
+  LOGOUT(NORMAL_ver) << midi2ly_version_str() << endl;
 }
 
 void
 notice()
 {
   LOGOUT(NORMAL_ver) << '\n';
-  LOGOUT(NORMAL_ver) << _ ("Mi2mu, translate midi to mudela");
+  LOGOUT(NORMAL_ver) << _ ("Midi2ly, translate midi to mudela");
   LOGOUT(NORMAL_ver) << '\n';
   LOGOUT(NORMAL_ver) << _f ("Copyright (c) %s by", "1997, 1998");
   LOGOUT(NORMAL_ver) << '\n';
index eafd50c004df9446a2b34fe7d90dc22fab63513e..6b4fbe0d6d442d31d5c6cbea76a8d86dbe4905ec 100644 (file)
@@ -9,7 +9,7 @@
 #include <assert.h>
 #include "string-convert.hh"
 #include "source-file.hh"
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "midi-parser.hh"
 
 Midi_parser_info::Midi_parser_info ()
@@ -87,7 +87,7 @@ Midi_parser::get_var_i ()
 String
 Midi_parser::message (String str)
 {
-  return String ("mi2mu: ")
+  return String ("midi2ly: ")
     + info_l_->source_l_->name_str () + ": "
     + String_convert::i2dec_str (info_l_->source_l_->line_i ((char const*)info_l_->byte_L_), 0, 0) + ": "
     + str + "\n"
index c20fe468e2878389c9bfcee139692a61589dfd7c..7e1908246c12635791f96493b312e8fa280e90fa 100644 (file)
@@ -9,7 +9,7 @@
 #include "moment.hh"
 #include "source-file.hh"
 #include "source.hh"
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "midi-score-parser.hh"
 #include "midi-track-parser.hh"
 #include "mudela-item.hh"
index 49840ec77cfbd6d5a9f0f7a418524800e32246ad..b545c2ddb86ae90b9810b92acceba3b4f78f0bc0 100644 (file)
@@ -8,7 +8,7 @@
 
 #include <assert.h>
 #include "string-convert.hh"
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "midi-track-parser.hh"
 #include "mudela-column.hh"
 #include "mudela-item.hh"
index 58a1db586bbbf5bb2526200371270873ccc09bc9..1aa6105f09cad4358b4ba2b88cac81df03f36378 100644 (file)
@@ -4,7 +4,7 @@
 // copyright 1997 Jan Nieuwenhuizen <janneke@gnu.org>
 
 #include <assert.h>
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "string-convert.hh"
 #include "duration-convert.hh"
 #include "mudela-column.hh"
index 6916d80df7b1b464caa68dea13c73e87547b1b64..cfd121d430659a5df72fe6763ba1a8a7fd1acf03 100644 (file)
@@ -7,7 +7,7 @@
 #include "moment.hh"
 #include "duration.hh"
 #include "duration-convert.hh"
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "mudela-column.hh"
 #include "mudela-item.hh"
 #include "mudela-score.hh"
index d6088e1becd2436086b8c8d74ba5f2b7411de801..2f109da5d998af70db91c280b11baec2b6680f14 100644 (file)
@@ -8,8 +8,8 @@
 #include "moment.hh"
 #include "duration-convert.hh"
 #include "string-convert.hh"
-#include "mi2mu-proto.hh"
-#include "mi2mu-global.hh"
+#include "midi2ly-proto.hh"
+#include "midi2ly-global.hh"
 #include "mudela-column.hh"
 #include "mudela-item.hh"
 #include "mudela-staff.hh"
index 5bdfd11e253333ae1489c022e7bd1ac13c2f5742..6692daf874667227d9ebd29d27836972899e8ba2 100644 (file)
@@ -8,7 +8,7 @@
 #include <assert.h>
 #include <time.h>
 #include <fstream.h>
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "mudela-item.hh"
 #include "mudela-stream.hh"
 #include "string-convert.hh"
@@ -76,7 +76,7 @@ Mudela_stream::header()
   if (no_timestamps_b_g)
     *os_p_ << "GNU LilyPond\n"; 
   else
-    *os_p_ << mi2mu_version_str() << '\n';
+    *os_p_ << midi2ly_version_str() << '\n';
   *os_p_ << _ ("% Automatically generated");
   if (no_timestamps_b_g)
     *os_p_ << ".\n";
index 286d2176c9ee18e911f5ee4580931c55d5e18680..67070742efa884e48d0431fb29baf94eaaf37db9 100644 (file)
@@ -4,7 +4,7 @@
 // copyright 1997 Jan Nieuwenhuizen <janneke@gnu.org>
 
 #include "string-convert.hh"
-#include "mi2mu-global.hh"
+#include "midi2ly-global.hh"
 #include "mudela-column.hh"
 #include "mudela-item.hh"
 #include "mudela-staff.hh"
index e9f2ed4e69f1c6ff4115158d3984c99833a0ebd3..6a6306fdab8ebb721f570fed4cd808d628c85176 100644 (file)
@@ -1,13 +1,13 @@
 #include "proto.hh"
 #include "string.hh"
 
-const char * mi2mu_version_sz();
+const char * midi2ly_version_sz();
 
 // should simply have Root class...
 String
-mi2mu_version_str()
+midi2ly_version_str()
 {
-  return  String (mi2mu_version_sz ())
+  return  String (midi2ly_version_sz ())
        + " " + _("of") + " " +  __DATE__ + " " + __TIME__;
 }
 
index da22bed0ffdb19e61f643ecc0877ffa36840f1d5..3a2346ec92581f431be8f75225b777fd37cddf77 100644 (file)
@@ -1,3 +1,5 @@
+\version "1.1.52";
+
 $global_ii = \notes{
        \time 4/4;
        \property Staff.timeSignatureStyle = "C2/2"
index 5ccd1a9f72f078e4faa83a788060d0efee5b10de..f91fa3b4b3fe9d4598f65b30d0e4579bb98cd1f7 100644 (file)
@@ -8,6 +8,8 @@ enteredby =      "jcn";
 copyright =     "Public Domain";
 }
 
+\version "1.1.52";
+
 \include "global-ii.ly"
 \include "violoncello-ii.ly";
 
@@ -18,4 +20,3 @@ $viola_ii_staff = \context Staff = viola <
   \$global_ii
   \notes\transpose c'' \$violoncello_ii
 >
-\version "1.1.52";
index 66df2cd2ca037aa871008d5367aa3fb6b5c481ff..19e03a88694e567d8687a54168efaca948b575cc 100644 (file)
@@ -10,22 +10,24 @@ copyright =  "Public Domain";
 
 \version "1.1.52";
 
+% {
+
 \include "global-i.ly"
 \include "viola-i.ly"
 
-%{
 \score{
   \$viola_i_staff
   \paper{
     \translator { \BarNumberingStaffContext }
   }
   \midi{
-%urg real/duration
+%urg, real/duration
 %    \tempo 4. = 69;
     \tempo 4 . = 50;
   }
 }
-%}
+
+% }
 
 \include "global-ii.ly"
 \include "viola-ii.ly"
@@ -33,11 +35,12 @@ copyright =  "Public Domain";
 \score{
   \$viola_ii_staff
   \paper{
-    castingalgorithm=0.0;
+%    castingalgorithm=0.0;
     \translator { \BarNumberingStaffContext }
-    \translator { \ScoreContext skipBars = 1; }
+    %\translator { \ScoreContext skipBars = 1; }
   }
   \midi{
-    \tempo 2 = 96;
+%    \tempo 2 = 96;
+    \tempo 2 = 75;
   }
 }
index 5cf92fde1d13144b72e034364f63fd1c21853b9d..61b1c03ab6fe71ae03c7ba78c1d5c96f8e509628 100644 (file)
@@ -8,6 +8,8 @@ enteredby =     "jcn";
 copyright =    "Public Domain";
 }
 
+\version "1.1.52";
+
 $violino_ii = \notes\relative c''{
   R1*8 |
   r2 e | 
index f53fc6ff25903abbd8b1ecfe422c98fb45cdcf58..ff19bd3fd1901a049832ec3bbb03ea742474fc29 100644 (file)
@@ -10,10 +10,11 @@ copyright =  "Public Domain";
 
 \version "1.1.52";
 
+% {
+
 \include "global-i.ly"
 \include "violino-i.ly"
 
-%{
 \score{
   \$violino_i_staff
   \paper{
@@ -24,7 +25,8 @@ copyright =    "Public Domain";
     \tempo 4 . = 50;
   }
 }
-%}
+
+% }
 
 \include "global-ii.ly"
 \include "violino-ii.ly"
@@ -33,11 +35,11 @@ copyright =  "Public Domain";
   \$violino_ii_staff
   \paper{
     \translator { \BarNumberingStaffContext }
-    castingalgorith=0;
+%    castingalgorith=0;
   }
   \midi{
-%    \tempo 4. = 69;
-    \tempo 4 . = 50;
+%    \tempo 2 = 96;
+    \tempo 2 = 75;
   }
 }
 
index 856c58db740b2db2d92e96106a03b7ef7609dd54..df41210a368f15028b0ba0ecc0ab0331bc8b3037 100644 (file)
@@ -10,6 +10,7 @@ copyright =    "Public Domain";
 
 \version "1.1.52";
 
+% { 
 \include "violino-i.ly";
 \include "viola-i.ly";
 
@@ -30,6 +31,7 @@ copyright =    "Public Domain";
   }
 }
 
+% }
 
 \include "violino-ii.ly";
 \include "viola-ii.ly";
index 449f31774823ae1d9e4461928e1c83a9e33a2aeb..16cb715e15f791c9ac13118c76979214fb1e9757 100644 (file)
@@ -10,6 +10,7 @@ copyright =    "Public Domain";
 
 \version "1.1.52";
 
+% {
 \include "violino-i.ly";
 \include "violoncello-i.ly";
 
@@ -30,6 +31,8 @@ copyright =    "Public Domain";
   }
 }
 
+% }
+
 \include "violino-ii.ly";
 \include "violoncello-ii.ly";
 
@@ -44,7 +47,8 @@ copyright =    "Public Domain";
     }
   }
   \midi{
-    \tempo 2 = 96;
+%    \tempo 2 = 96;
+    \tempo 2 = 75;
   }
 }
 
index bdac62748d27c5e5acb4ebcefd9da34001bd806b..10878f83e642931cf0aba4b8dc11d98ad4877fd5 100644 (file)
@@ -10,10 +10,11 @@ copyright =  "Public Domain";
 
 \version "1.1.52";
 
+% {
+
 \include "global-i.ly"
 \include "violoncello-i.ly"
 
-%{
 \score{
   \$violoncello_i_staff
   \paper{
@@ -25,7 +26,8 @@ copyright =    "Public Domain";
     \tempo 4 . = 69;
   }
 }
-%}
+
+% }
 
 \include "global-ii.ly"
 \include "violoncello-ii.ly"
@@ -33,11 +35,12 @@ copyright =  "Public Domain";
 \score{
   \$violoncello_ii_staff
   \paper{
-    castingalgorithm=0.;
+    %castingalgorithm=0.;
     \translator { \BarNumberingStaffContext }
   }
   \midi{
-    \tempo 2 = 96;
+%    \tempo 2 = 96;
+    \tempo 2 = 75;
   }
 }
 
index 7a9930b7cc752576de5dab2edb0a1557accde5d9..6eb446c6703f2df49df249ff1a957bdb7a69c8ce 100644 (file)
@@ -22,8 +22,8 @@ r4 r c \p ( |
 ) g r r |
 g [g8. ( a16 ] ) g4 |
 R2. |
-r4 r [g8^""^"solo" \mf \< () \! e' ] |
-\grace d8 g2 \> ( [ \! e8. c16 ] |
+r4 r [g8^""^"solo" \mf \< () e' ] |
+\grace d8 \! g2 \> ( [ \! e8. c16 ] |
 ) g2 r4 |
 R2. |
 r4 r \times 2/3 {[e'8 \f ( g, ) g'] } |
index b679595ffc54fa165d65656e09da3b56318dacb8..5908b22d5dc410e3011090f652af623cd666a3aa 100644 (file)
@@ -15,11 +15,12 @@ global=\notes {
 \globalNoKey
 }
 
-marks=\notes {
+marks= \notes {
 \time 3/4;
-\property Voice.textStyle = "Large"
-\skip 2.*31;
-s2 s8 s^"\\Allegromoltovivace"
+%\property Thread.textStyle = "Large"
+s2.^"\\raisebox{4mm}{\\bfseries\Large Andante con moto}"
+\skip 2.*30;
+s2 s8 s^"\\raisebox{4mm}{\\bfseries\Large Allegro molto vivace}"
 \time 2/4;
 \skip 2*12;
 \mark "A";
index 5046499d6e397e365ffe053fa8abd47be91cc27d..81d102135fa93e01ed290471c89ad489bc6d61e4 100644 (file)
@@ -1,10 +1,8 @@
-% Defined as macros so Lilypond doesn't assign any horisontal spacing.
-\newcommand{\Allegromoltovivace}{\hspace{-10mm}\raise 20pt\hbox{
-    \Large \textbf{Allegro molto vivace}}}
-%\newcommand{\Andanteconmoto}{\hspace{-12mm}\raise 20pt\hbox{
-%    \Large Andante con moto}}
-\newcommand{\Andanteconmoto}{}
-\renewcommand{\thepiece}{Andante con moto}
+\def\fetdef#1#2{%
+  \def#1{\hbox{\fetchar{#2}}}}
+\font\fetasixteen = feta16
+\def\fetchar#1{{\fetasixteen\char#1}}
+\input{feta20}         %%% Add lilypond-xxx/mf/out/ to TEXINPUTS
 
 \newcommand{\okt}{$8^{va}$}
 
   \vspace*{-10mm}%
   \begin{center}
         \bfseries
-        \ifx\mudelanull\thetitle\else\sethuge{\thetitle}\\ \fi
-        \ifx\mudelanull\thesubtitle\else\setLarge{\thesubtitle}\\ \fi
+        \ifx\mudelanull\thetitle\else{\huge\thetitle}\\ \fi
+        \ifx\mudelanull\thesubtitle\else{\Large\thesubtitle}\\ \fi
   \end{center}
   \bigskip
   % urg
   \edef\saveparskip{\parskip}\parskip-5mm
   \begin{minipage}[t]{0.45\textwidth}
-        \ifx\mudelanull\thepoet\else\settext{\thepoet}\\ \fi
-        \ifx\mudelanull\themetre\else\settext{\themetre}\\ \fi
+        \ifx\mudelanull\thepoet\else{\thepoet}\\ \fi
+        \ifx\mudelanull\themetre\else{\themetre}\\ \fi
   \end{minipage}\hspace*{\fill}
   \begin{minipage}[t]{0.45\textwidth}
       \begin{flushright}
-          \ifx\mudelanull\thecomposer\else\setlarge{\normalfont\scshape\thecomposer}\\ \fi
-          \ifx\mudelanull\theopus\else\settext{\theopus}\\ \fi
-          \ifx\mudelanull\thearranger\else\settext{\thearranger}\\ \fi
+          \ifx\mudelanull\thecomposer\else{\large\normalfont\scshape\thecomposer}\\ \fi
+          \ifx\mudelanull\theopus\else{\theopus}\\ \fi
+          \ifx\mudelanull\thearranger\else{\thearranger}\\ \fi
         \end{flushright}%
   \end{minipage}\par
   \parskip\saveparskip
-%  {\center\setlarge{\theinstrument}\par}
-%  {\flushleft\setLarge{\normalfont\scshape\thepiece}}
-  {\flushleft\setLarge{\textbf\thepiece}}
-  \leavevmode
-  \enlargethispage*{5mm}
+  {\flushleft{\Large\textbf\thepiece}\par}%
+%  \leavevmode%
+  \enlargethispage*{5mm}%
 }
index 4a4ecd6446f5e43556f47e7d6f3872a7c9dd1f14..e49da7e460c977574d50f161a07a0b41cd0e89a0 100644 (file)
@@ -28,6 +28,7 @@ my_paper = \paper {
     skipBars = 1;
     markScriptPadding = "6.0";
     barNumberScriptPadding = "11.0";
+    dynamicPadding = 3.0;
     textScriptPadding = 5.0;
     textStyle = "italic";
     textEmptyDimension = 1;
@@ -83,7 +84,7 @@ my_paper = \paper {
     \clarI
   >
   \header{
-    instrument = "Clarinetto I in B\\textflat";
+    instrument = "Clarinetto I in B\\flat";
   }
   \paper{
     \my_paper
@@ -101,7 +102,7 @@ my_paper = \paper {
     \clarII
   >
   \header{
-    instrument = "Clarinetto II in B\\textflat";
+    instrument = "Clarinetto II in B\\flat";
   }
   \paper{
     \my_paper
@@ -182,7 +183,7 @@ my_paper = \paper {
     \context Voice = help \trpIhelp
   >
   \header{
-    instrument = "Tromba I in B\\textflat";
+    instrument = "Tromba I in B\\flat";
   }
   \paper{
     \my_paper
@@ -203,7 +204,7 @@ my_paper = \paper {
     \context Voice = help \trpIIhelp
   >
   \header{
-    instrument = "Tromba II in B\\textflat";
+    instrument = "Tromba II in B\\flat";
   }
   \paper{
     \my_paper
index 181725d825b245687021f845b565be088832e1b7..b42398670c60ad68b00fa645c61097013813e8d2 100644 (file)
@@ -33,13 +33,13 @@ copyright = "Mats Bengtsson, 1999. Free circulation permitted and " +
       \oboe
     >
     \context Voice = clarI <
-      \property Staff.instrument = "Clarinetto I"
+      \property Staff.instrument = "Clar. I in B\\flat  "
       \property Staff.instr = "Cl. I"
       \globalNoKey
       \clarI
     >
     \context Voice = clarII <
-      \property Staff.instrument = "Clarinetto II"
+      \property Staff.instrument = "Clar. II  in B\\flat  "
       \property Staff.instr = "Cl. II"
       \globalNoKey
       \clarII
@@ -66,7 +66,7 @@ copyright =   "Mats Bengtsson, 1999. Free circulation permitted and " +
       }
     >
     \context Staff = trp <
-      \property Staff.instrument = "2 Trp. in B\\textflat  "
+      \property Staff.instrument = "2 Trp. in B\\flat  "
       \property Staff.instr = "Trp."
       \context Voice = trpI <
        \globalNoKey
@@ -133,6 +133,7 @@ copyright = "Mats Bengtsson, 1999. Free circulation permitted and " +
     \translator { \StaffContext
        \consists "Staff_margin_engraver";
         marginScriptPadding = "15.0";
+        dynamicPadding = 3.0;
        textStyle = "italic";
        textScriptPadding = 5.0;
         textEmptyDimension = 1;
index a11757c35edca33facc062e9024f9df091e85079..e10794f19cd219f352a6e3814c7a7e7ececf9b6a 100644 (file)
@@ -1,5 +1,5 @@
 \header{
-title =         "Konzert Nr. 3 Es dur"
+title =         "Konzert Nr. 3 Es dur";
 subtitle = "f\\\"ur Horn und Orchester";
 description =   "Third horn concerto, for horn in Es";
 composer =      "W. A. Mozart (1756-1792)";
@@ -22,7 +22,7 @@ allegro =
        c, r
        R1*1
        r8 [g' g g] [g g e c]
-       g4 g, r2
+       g'4 g, r2
        R1*18
        r2 r4 g'4 |
        e'4. () c8 [f (d c )b ]
@@ -42,11 +42,11 @@ allegro =
        [g'()d ] d4-- r4 d
        [d8 () c] c4.( [d16 e] [d8 )c]
        [c8(-\trill )b] b4 r2 |
-       d2~(  [d8 e16 d] [c8 )b] |
+       d2( ~  [d8 e16 d] [c8 )b] |
        [b()a-.] a4-> r8 [a-. a-. a-.]
        a4 cis e g
-       [g16( fis e )d] d4-. r2 |  %  The g16 really is a grace note.
-       % mark B
+       [ \grace g16( fis8 e16 )d] d4-. r2 | 
+       \mark "B";
        R1*3
        r2 r4 [d8 (b ]
        [a )g d'( b] [a )g e'( c ]
@@ -59,13 +59,13 @@ allegro =
        r1
        c,2\p e4 g c e g4. e8 |
        d4. [e16 fis] [g () fis e d] [c() b a g]
-       a1(-\trill % \grace{g a}
+       a1(-\trill \grace{ g16 a}
        )g4 r r2
        R1*15
-       % mark D
+       \mark "D";
        bes2 d4 f
        g,2~ [g8 g'( es )c]|
-       bes4()a. [c8 d es]
+       bes4( )a4. [c8 d es]
        cis4()d r8 [bes (c )d]
        es2 () d4 r
        es2\p () d4 r
@@ -87,7 +87,7 @@ allegro =
        r8 [fis, b dis] fis4 r
        r8 [gis, b d] f4 r
        r8 [g, b d] f4 r
-       %mark E
+       \mark  "E";
        R1*8
        r2 r8 [g,-. g-. g-.]
        e'4.() c8 [f( d c )b]
@@ -97,10 +97,10 @@ allegro =
        c4.( [d16 e] f4 )e
        a, ( d g, )c
        d d [
-          % \grace {e}
+           \grace { e8 }
           d8. c16 d8. e16] 
        c4 r r2
-       % mark F
+       \mark "F";
        R1*3
        c,2~[c8( e g )c]
        [c8()b] b4 r2
@@ -113,7 +113,7 @@ allegro =
        r2 r4 [g'8()e]
        [d()c g'()e] [d()c a'()f]
        [e()d] d4 r [d8 d]
-       d4~( [d16 e d )e] [g8() f e d] |
+       d4(~ [d16 e d )e] [g8() f e d] |
        c4 r r2
        r1
        c1 ~
@@ -128,7 +128,7 @@ allegro =
        d1-\trill  % \grace { c d}
        c4 r r2
        r1 |
-       % mark H
+       \mark "H";
        \times 2/3 { [ c8 ()b a ] }     \times 2/3 { [ g a b] } \times 2/3 { [ c d e] } \times 2/3 { [ f()e d] } |
        \times 2/3 { [ c () b a ] } \times 2/3 { [ g a b] } \times 2/3 { [ c d e] } \times 2/3 { [ f()e d] }|
        c4 \times 2/3 {  r8 [g'()e]} c4 \times 2/3 {  r8 [e () c]} |
@@ -154,12 +154,12 @@ romanze = \notes \relative c' {
        c'4.() f8 a,4 a
        [bes8( c d bes] )g4 r8 g
        a r bes r c r [d()bes]
-       a2()[g8 a( bes )b]
+       a2( [)g8 a( bes )b]
        c4. () f8 a,4 a |
        [bes8 (c d) bes] g4 r8 c,-.
        [c8( e g )bes] [a( c f ) d]
        c r e r f r r4
-       % mark A
+       \mark "A";
        R1*8
        g4. f8  [e d c bes]
        [bes( a d )c] c4 r
@@ -170,7 +170,7 @@ romanze = \notes \relative c' {
        [c16\mf () d c-. d-.] [e () f e-. f-.] [g()e c-. c-.] [f()d b-. b-.]
        [c16\p () d c-. d-.] [e () f e-. f-.] [g()e c-. c-.] [f()d b-. b-.]
        [c8 c, c c] [c c c c]
-       % mark B
+       \mark "B";
        c1\f
        R1*9
        f'4.(\p )d8 b4 r8 g
@@ -183,7 +183,7 @@ romanze = \notes \relative c' {
        [c ()e g g] [g( f e )d]
        c4( % \grace { e}
        [d8. )c16] [c8 c--( c-- )c--]
-       % mark C
+       \mark "C";
        des1\sf %\sfp
        g,1\sf %\sfp
        c\sf   %\sfp
@@ -192,7 +192,7 @@ romanze = \notes \relative c' {
        r8 [c c c] c2~
        [c8 c' c c] c2~
        [c8 e( g f] [e d c bes]
-       % mark D
+       \mark "D";
        )a4 r r2
        R1*3
        c4. () f8 a,4 a |
@@ -247,7 +247,7 @@ rondo = \notes      \relative c'
        [g()e c-.] [d()e d-.]
        c4 r8 r4 r8 |
        R2.*7
-       % mark A
+       \mark  "A";
        c4.\p [d8 c d]
        c4 r8 r4 r8
        e4. [f8 e f]
@@ -262,7 +262,7 @@ rondo = \notes      \relative c'
        d2.~
        [d8 c b] [b a g]
        g'4()e8 b4()cis8
-       %mark B
+       \mark "B";
        d4 r8 r4 r8
        R2.*3 |
        r8 [d-. d-.] [d()g d---.]
@@ -278,7 +278,7 @@ rondo = \notes      \relative c'
        d4()g8 [c, d e]
        [d()g fis] [e d c]
        [b () e d] [c b a]
-       % mark C
+       \mark "C";
        g4 r8 r4 r8
        r2. |
        %
@@ -289,7 +289,7 @@ rondo = \notes      \relative c'
        \rondotheme
        R2.*12
        r4 r8 r4 c8
-       % mark D
+       \mark "D";
        c4 f8 c4 a8
        a4.~a4 a8
        bes4 c8 d4 bes8
@@ -306,7 +306,7 @@ rondo = \notes      \relative c'
        bes4. ~ bes4 g8
        a4 c8 [f () d b]
        d4. () c8 r r
-       % mark E
+       \mark "E";
        R2.*9  |
        \lipbreaker 
        [c8 c' c] c4.~
@@ -320,7 +320,7 @@ rondo = \notes      \relative c'
        r8 [g g] [g g g]
        es4.\f~ [es8 d c]
        b4. c4. d4. e4.
-       % mark F
+       \mark "F";
        f2.\f ~ |
        f4 r8 r4 r8
        r8 [g\> g] [g g g]
@@ -328,7 +328,7 @@ rondo = \notes      \relative c'
                 [a bes \! b]
         \rondotheme
        R2.*7
-       % mark G
+       \mark "G";
        R2.*4
        c,4.\mf c4 c8
        c4. e4 c8
@@ -338,7 +338,7 @@ rondo = \notes      \relative c'
        r4 r8 r4 g'8
        [c ()e g,-.]    [c ()e g,-.]
        [c ()e g,-.]    [c ()e g,-.]
-       % mark H
+       \mark "H";
        g'2._"cresc." bes,2.
        a4. [b16 c d e f g]
        a4. f4 d8
@@ -359,8 +359,16 @@ rondo = \notes     \relative c'
        c4 r8 r4 r8
 }
 
- \include "part-paper.ly"
 
+\paper{
+ casting_algorithm = \Wordwrap;
+ \translator { \StaffContext \consists Mark_engraver;  }
+ \translator { \ScoreContext
+       skipBars = 1;
+  }
+
+}
 \score
 {
        \allegro
@@ -370,18 +378,17 @@ rondo = \notes    \relative c'
 
 \score
 {
-       {       \property Score.skipBars = 1
-               \romanze
+       {               \romanze
        }
-               \paper{ \tempo 4 = 70; }        
-       \midi{}
+       \midi{ \tempo 4 = 70;  }
+       \paper{}
 }
 \score
 {
        \rondo
 
        \paper{
-               \tempo 4 = 100;
        }
-       \midi{}
+       \midi{          \tempo 4 = 100;
+}
 }
index 3eeb87484a6b04f79eeb0f79bf929968416c360c..f2d5c1a058093286fa13f40b3ea35d06fde31331 100644 (file)
        stroke
 } bind def
 
-/draw_volta % h w thick last
+/draw_volta % h w thick vert_start vert_end
 {
-       /last exch def
+       /vert_end exch def
+       /vert_start exch def
        setlinewidth
        /volta_w exch def
        /volta_h exch def
 %      true setstrokeadjust
        1 setlinecap
        1 setlinejoin
-       0 0 moveto
-       0 volta_h lineto
+       vert_start 0 eq {
+               0 0 moveto
+               0 volta_h lineto
+       } if
+       0 volta_h moveto
        volta_w volta_h lineto
-       last 0 eq {
+       vert_end 0 eq {
                volta_w 0 lineto
        } if
        stroke
index 003a92a63935a3311bb0d529fa007658f4eec2d5..5914bf1f8ff345bf890804af0d5fe6ab60d66306 100644 (file)
     (string-append
      "\\lilyfont"
      (make-string 1 (integer->char (+ 65 i)))))
-    
-  (define (select-font font-name)
+
+  (define (select-font font-name magnification)
       (if (not (equal? font-name current-font))
          (begin
            (set! current-font font-name)
                  (set! font-count (+ 1 font-count))
                  (if (equal? font-name "")
                      (error "Empty fontname -- SELECT-FONT"))
-                 (string-append "\\font" font-cmd "=" font-name font-cmd))
+                 (if (> magnification 0)
+                     (string-append "\\font" font-cmd "=" font-name 
+                                    " scaled \\magstep " 
+                                    (number->string magnification) font-cmd)
+                     (string-append "\\font" font-cmd "=" font-name font-cmd)))
+               
                (cdr font-cmd)))
          ""                            ;no switch needed
          ))
   (define (dashed-slur thick dash l)
     (embedded-ps ((ps-scm 'dashed-slur)  thick dash l)))
 
-  (define (crescendo w h cont)
-    (embedded-ps ((ps-scm 'crescendo) w h cont)))
+  (define (crescendo thick w h cont)
+    (embedded-ps ((ps-scm 'crescendo) thick w h cont)))
 
   (define (char i)
     (string-append "\\char" (inexact->string i 10) " "))
   
-  (define (decrescendo w h cont)
-    (embedded-ps ((ps-scm 'decrescendo) w h cont)))
+  (define (decrescendo thick w h cont)
+    (embedded-ps ((ps-scm 'decrescendo) thick w h cont)))
 
    ;This sets CTM so that you get to the currentpoint
   ; by executing a 0 0 moveto
           (maxht (* 7 minht))
           )
       (string-append
-       (select-font (string-append "feta-braces" (number->string (inexact->exact staffht))))
+       (select-font (string-append "feta-braces" (number->string (inexact->exact staffht))) 0)
        (char (max 0 (/  (- (min y (- maxht step)) minht) step))))
       )
     )
   (define (tuplet ht gapx dx dy thick dir)
     (embedded-ps ((ps-scm 'tuplet) ht gapx dx dy thick dir)))
 
-  (define (volta h w thick last)
-    (embedded-ps ((ps-scm 'volta) h w thick last)))
+  (define (volta h w thick vert_start vert_end)
+    (embedded-ps ((ps-scm 'volta) h w thick vert_start vert_end)))
 
   ;; TeX
   ;; The procedures listed below form the public interface of TeX-scm.
     (string-append
      "lilyfont"
      (make-string 1 (integer->char (+ 65 i)))))
-
-  (define (select-font font-name)
+    
+  (define (mag-to-size m)
+    (number->string (case m 
+                     ('0 12)
+                     ('1 12)
+                     ('2 14) ; really: 14.400
+                     ('3 17) ; really: 17.280
+                     ('4 21) ; really: 20.736
+                     ('5 24) ; really: 24.888
+                     ('6 30) ; really: 29.856
+                     )))
+  
+  (define (select-font font-name magnification)
       (if (not (equal? font-name current-font))
          (begin
            (set! current-font font-name)
                  (set! font-alist (acons font-name font-cmd font-alist))
                  (set! font-count (+ 1 font-count))
                  (string-append "\n/" font-cmd " {/"
-                                font-name
-                                " findfont 12 scalefont setfont} bind def \n"
+                                font-name " findfont " 
+                                (mag-to-size magnification)
+                                " scalefont setfont} bind def \n"
                                 font-cmd " \n"))
                (string-append (cdr font-cmd) " ")))
          ; font-name == current-font no switch needed
   (define (char i)
     (invoke-char " show" i))
 
-  (define (crescendo w h cont thick)
+  (define (crescendo thick w h cont )
     (string-append 
      (numbers->string (list w h (inexact->exact cont) thick))
      " draw_crescendo"))
      (number->string (* 2 thick))
      " ] 0 draw_dashed_slur"))
 
-  (define (decrescendo thick w h cont)
+  (define (decrescendo w h cont thick)
     (string-append 
      (numbers->string (list w h (inexact->exact cont) thick))
      " draw_decrescendo"))
           (maxht (* 7 minht))
           )
       (string-append
-       (select-font (string-append "feta-braces" (number->string (inexact->exact staffht))))
+       (select-font (string-append "feta-braces" (number->string (inexact->exact staffht))) 0)
        (char (max 0 (/  (- (min y (- maxht step)) minht) step))))
       )
     )
     (string-append "(" s ") show  "))
 
 
-  (define (volta h w thick last)
+  (define (volta h w thick vert_start vert_end)
     (string-append 
-     (numbers->string (list h w thick (inexact->exact last)))
+     (numbers->string (list h w thick (inexact->exact vert_start) (inexact->exact vert_end)))
      " draw_volta"))
 
   (define (tuplet ht gap dx dy thick dir)
diff --git a/scripts/abc-2-ly.py b/scripts/abc-2-ly.py
deleted file mode 100644 (file)
index dd4bcf2..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-#!@PYTHON@
-
-# once upon a rainy monday afternoon.
-#
-#   ...
-#
-# (not finished.)
-# ABC standard v1.6:  http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt
-# 
-
-program_name = 'abc-to-ly'
-version = '@TOPLEVEL_VERSION@'
-import __main__
-import getopt
-import sys
-import re
-import string
-try:
-       import mpz
-except:
-       sys.stderr.write ("This script needs Python 1.5.1\n")
-       sys.exit (1)
-
-
-header = {}
-lyrics = []
-voices = []
-global_voice_stuff = []
-default_len = 4
-global_key = [0] * 7                   # UGH
-names = ["One", "Two", "Three"]
-DIGITS='0123456789'
-HSPACE=' \t'
-
-def gcd (a, b):
-       while  a % b:
-               a,b = b, a % b
-       return b
-       
-class Rational:
-       def __init__ (self, n, d = 1):
-               self.num = n
-               self.den = d
-
-       def simplify (self):
-               g = gcd (self.num, self.den)
-               self.num = self.num /  g
-               self.den = self.den /g
-               if self.den < 0:
-                       self.den = - self.den
-                       self.num = - self.num
-
-       def __sub__ (self, other):
-               pass
-       
-
-def dump_global ():
-       print ("global = \\notes{")
-       for i in global_voice_stuff:
-               print (i);
-       print ("}")
-
-
-def dump_header (hdr):
-       print '\\header {'
-       for k in hdr.keys ():
-               print '%s = "%s";\n'% (k,hdr[k])
-       print '}'
-
-def dump_lyrics ():
-       for i in range (len (lyrics)):
-               print ("verse%s = \\lyrics {" % names [i])
-               print (lyrics [i])
-               print ("}")
-
-def dump_voices ():
-       for i in range (len (voices)):
-               print ("voice%s = \\notes {" % names [i])
-               print (voices [i])
-               print ("}")
-       
-def dump_score ():
-       print ("\\score{")
-       print ("        \\notes<")
-       print ("                \\global")
-       for i in range (len (voices)):
-               print ("        \\context Staff=%s \\voice%s" %
-                       (names [i], names [i]))
-       for i in range (len (lyrics)):
-               j = i
-               if j >= len (voices):
-                       j = len (voices) - 1
-               print ("        \\context Lyrics=%s \\rhythm \\voice%s \\verse%s" % 
-                       (names [i], names [j], names [i]))
-       print ("    >")
-       dump_header (header)
-       #print "%%%s" % global_voice_stuff, 1
-       print ("}")
-
-def set_default_length (s):
-       m =  re.search ('1/([0-9]+)', s)
-       if m:
-               __main__.default_len = string.atoi ( m.group (1))
-
-def gulp_file(f):
-       try:
-               i = open(f)
-               i.seek (0, 2)
-               n = i.tell ()
-               i.seek (0,0)
-       except:
-               sys.stderr.write ("can't open file: %s\n" % f)
-               return ''
-       s = i.read (n)
-       if len (s) <= 0:
-               sys.stderr.write ("gulped emty file: %s\n" % f)
-       i.close ()
-       return s
-
-
-# pitch manipulation. Tuples are (name, alteration).
-# 0 is (central) C. Alteration -1 is a flat, Alteration +1 is a sharp
-# pitch in semitones. 
-def semitone_pitch  (tup):
-       p =0
-
-       t = tup[0]
-       p = p + 12 * (t / 7)
-       t = t % 7
-       
-       if t > 2:
-               p = p- 1
-               
-       p = p + t* 2 + tup[1]
-       return p
-
-def fifth_above_pitch (tup):
-       (n, a)  = (tup[0] + 4, tup[1])
-
-       difference = 7 - (semitone_pitch ((n,a)) - semitone_pitch (tup))
-       a = a + difference
-       
-       return (n,a)
-
-def sharp_keys ():
-       p = (0,0)
-       l = []
-       k = 0
-       while 1:
-               l.append (p)
-               (t,a) = fifth_above_pitch (p)
-               if semitone_pitch((t,a)) % 12 == 0:
-                       break
-
-               p = (t % 7, a)
-       return l
-
-def flat_keys ():
-       p = (0,0)
-       l = []
-       k = 0
-       while 1:
-               l.append (p)
-               (t,a) = quart_above_pitch (p)
-               if semitone_pitch((t,a)) % 12 == 0:
-                       break
-
-               p = (t % 7, a)
-       return l
-
-def quart_above_pitch (tup):
-       (n, a)  = (tup[0] + 3, tup[1])
-
-       difference = 5 - (semitone_pitch ((n,a)) - semitone_pitch (tup))
-       a = a + difference
-       
-       return (n,a)
-
-
-def compute_key (k):
-       k = string.lower (k)
-       intkey = (ord (k[0]) - ord('a') + 5) % 7
-       intkeyacc =0
-       k = k[1:]
-       
-       if k and k[0] == 'b':
-               intkeyacc = -1
-               k = k[1:]
-       elif  k and k[0] == '#':
-               intkeyacc = 1
-               k = k[1:]
-
-       keytup = (intkey, intkeyacc)
-       
-       sharp_key_seq = sharp_keys ()
-       flat_key_seq = flat_keys ()
-
-       accseq = None
-       accsign = 0
-       if keytup in sharp_key_seq:
-               accsign = 1
-               key_count = sharp_key_seq.index (keytup)
-               accseq = map (lambda x: (4*x -1 ) % 7, range (1, key_count + 1))
-
-       elif keytup in flat_key_seq:
-               accsign = -1
-               key_count = flat_key_seq.index (keytup)
-               accseq = map (lambda x: (3*x + 3 ) % 7, range (1, key_count + 1))
-       else:
-               raise "Huh"
-       
-       key_table = [0] * 7
-       for a in accseq:
-                key_table[a] = key_table[a] + accsign
-               
-
-       return key_table
-
-tup_lookup = {
-       '3' : '2/3',
-       '4' : '4/3',
-       '5' : '4/5',
-       '6' : '4/6',
-       }
-
-
-def try_parse_tuplet_begin (str, state):
-       if str and str[0] in DIGITS:
-               dig = str[0]
-               str = str[1:]
-               state.parsing_tuplet = 1
-               
-               voices_append ("\\times %s {" % tup_lookup[dig])
-       return str
-
-def  try_parse_group_end (str, state):
-       if str and str[0] in HSPACE:
-               str = str[1:]
-               if state.parsing_tuplet:
-                       state.parsing_tuplet = 0
-                       voices_append ("}")
-       return str
-
-def header_append (key, a):
-       s = ''
-       if header.has_key (key):
-               s = header[key] + "\n"
-       header [key] = s + a
-
-def lyrics_append (a):
-       i = len (lyrics) - 1
-       if i < 0:
-               i = 0
-       if len (lyrics) <= i:
-               lyrics.append ('')
-       lyrics [i] = lyrics [i] + a + "\n"
-
-def voices_append (a):
-       i = len (voices) - 1
-       if i < 0:
-               i = 0
-       if len (voices) <= i:
-               voices.append ('')
-       voices [i] = voices [i] + a + "\n"
-
-def try_parse_header_line (ln):
-       m = re.match ('^(.): *(.*)$', ln)
-
-       if m:
-               g =m.group (1)
-               a = m.group (2)
-               a = re.sub ('"', '\\"', a)
-               if g == 'T':
-                       header['title'] =  a
-               if g == 'M':
-                       if a == 'C':
-                               a = '4/4'
-                       global_voice_stuff.append ('\\time %s;' % a)
-               if g == 'K':
-                       __main__.global_key  =compute_key (a)# ugh.
-
-                       global_voice_stuff.append ('\\key %s;' % a)
-               if g == 'O': 
-                       header ['origin'] = a
-               if g == 'X': 
-                       header ['crossRefNumber'] = a
-               if g == 'A':
-                       header ['area'] = a
-               if g == 'H':
-                       header_append ('history', a)
-               if g == 'B':
-                       header ['book'] = a
-               if g == 'S':
-                       header ['subtitle'] = a
-               if g == 'L':
-                       set_default_length (ln)
-               if g == 'W':
-                       if not len (a):
-                               lyrics.append ('')
-                       else:
-                               lyrics_append (a);
-       return m
-
-def pitch_to_mudela_name (name, acc):
-       s = ''
-       if acc < 0:
-               s = 'es'
-               acc = -acc
-       elif acc > 0:
-               s = 'is'
-
-       if name > 4:
-               name = name -7
-       return chr (name  + ord('c'))  + s * acc
-
-def octave_to_mudela_quotes (o):
-       o = o + 2
-       s =''
-       if o < 0:
-               o = -o
-               s=','
-       else:
-               s ='\''
-
-       return s * o
-
-def parse_num (str):
-       durstr = ''
-       while str and str[0] in DIGITS:
-               durstr = durstr + str[0]
-               str = str[1:]
-
-       n = None
-       if durstr:
-               n  =string.atoi (durstr) 
-       return (str,n)
-
-
-def duration_to_mudela_duration  (multiply_tup, defaultlen, dots):
-       base = 1
-
-       # (num /  den)  / defaultlen < 1/base
-       while base * multiply_tup[0] < defaultlen * multiply_tup[1]:
-               base = base * 2
-
-
-       return '%d%s' % ( base, '.'* dots)
-
-class Parser_state:
-       def __init__ (self):
-               self.next_dots = 0
-               self.next_den = 1
-               self.parsing_tuplet = 0
-
-
-# WAT IS ABC EEN ONTZETTENDE PROGRAMMEERPOEP  !
-def try_parse_note (str, parser_state):
-       mud = ''
-
-       slur_begin =0
-       if not str:
-               return str
-       
-       if  str[0] == '(':
-               slur_begin = 1
-               str = str[1:]
-
-       acc = 0
-       if str[0] in '^=_':
-               c = str[0]
-               str = str[1:]
-               if c == '^':
-                       acc = 1
-               if c == '=':
-                       acc = 0
-               if c == '_':
-                       acc = -1
-
-        octave = 0;
-       if str[0] in "ABCDEFG":
-               str = string.lower (str[0]) + str[1:]
-               octave = -1
-
-
-       notename = 0
-       if str[0] in "abcdefg":
-               notename = (ord(str[0]) - ord('a') + 5)%7
-               str = str[1:]
-       else:
-               return str              # failed; not a note!
-
-       while str[0] == ',':
-                octave = octave - 1
-                str = str[1:]
-       while str[0] == '\'':
-                octave = octave + 1
-                str = str[1:]
-
-       num = 0
-       den = parser_state.next_den
-       parser_state.next_den = 1
-
-       (str, num) = parse_num (str)
-       if not num:
-               num = 1
-       
-       if str[0] == '/':
-               while str[0] == '/':
-                       str= str[1:]
-                       d = 2
-                       if str[0] in DIGITS:
-                               (str, d) =parse_num (str)
-
-                       den = den * d
-
-       current_dots = parser_state.next_dots
-       parser_state.next_dots = 0
-       while str[0] == '>':
-               str = str [1:]
-               current_dots = current_dots + 1;
-               parser_state.next_den = parser_state.next_den * 2
-       
-       while str[0] == '<':
-               str = str [1:]
-               den = den * 2
-               parser_state.next_dots = parser_state.next_dots + 1
-       
-               
-       
-       voices_append ("%s%s%s" %
-               (pitch_to_mudela_name (notename, acc + global_key[notename]),
-                                       octave_to_mudela_quotes (octave),
-                duration_to_mudela_duration ((num,den), default_len, current_dots)))
-       slur_end =0
-       if str[0] == ')':
-               slur_begin = 1
-               str = str[1:]
-
-
-       return str
-
-def junk_space (str):
-       while str and str[0] in '\t\n ':
-               str = str[1:]
-
-       return str
-
-
-def try_parse_guitar_chord (str):
-       if str and str[0] == '"':
-               str = str[1:]
-               gc = ''
-               while str and str[0] != '"':
-                       gc = gc + str[0]
-                       str = str[1:]
-                       
-               if str:
-                       str = str[1:]
-
-               sys.stderr.write ("warning: ignoring guitar chord: %s\n" % gc)
-               
-       return str
-
-def try_parse_escape (str):
-       if not str or str [0] != '\\':
-               return str
-       
-       str = str[1:]
-       if str and str[0] == 'K':
-               key_table = compute_key ()
-
-       return str
-
-#
-# |] thin-thick double bar line
-# || thin-thin double bar line
-# [| thick-thin double bar line
-# :| left repeat
-# |: right repeat
-# :: left-right repeat
-#
-
-def try_parse_bar (str):
-       if str and str[0] == '|':
-               bs = ''
-               str = str[1:]
-               if str:
-                       if  str[0] == ']':
-                               bs = '|.'
-                       if str[0] == '|':
-                               bs = '||'
-                       if str[0] == '|:':
-                               sys.stderr.write ("warning: repeat kludge\n")
-                               bs = '|:'
-               if bs:
-                       voices_append ('\\bar "%s";' % bs)
-                       str = str[1:]
-
-       if str and str[:2] == '[|':
-               sys.stderr.write ("warning: thick-thin bar kludge\n")
-               voices_append ('\\bar "||";')
-               str = str[2:]
-
-       if str and str[:2] == ':|':
-               sys.stderr.write ("warning: repeat kludge\n")
-               voices_append ('\\bar ":|:";')
-               str = str[2:]
-
-       if str and str[:2] == '::':
-               sys.stderr.write ("warning: repeat kludge\n")
-               voices_append ('\\bar ":|:";')
-               str = str[2:]
-
-       return str
-       
-
-def try_parse_chord_delims (str):
-       if str and str[0] == '[':
-               str = str[1:]
-               voices_append ('<')
-
-       if str and str[0] == ']':
-               str = str[1:]
-               voices_append ('>')
-
-       return str
-
-# urg, hairy to compute grace note hack using \times{}
-def try_parse_grace_delims (str):
-       if str and str[0] == '{':
-               str = str[1:]
-               voices_append ('\\grace { ')
-
-       if str and str[0] == '}':
-               str = str[1:]
-               voices_append ('}')
-
-       return str
-
-# Try nibbling characters off until the line doesn't change.
-def try_parse_body_line (ln, state):
-       prev_ln = ''
-       while ln != prev_ln:
-               prev_ln = ln
-               ln = try_parse_chord_delims (ln)
-               ln = try_parse_note  (ln, state)
-               ln = try_parse_bar (ln)
-               ln = try_parse_escape (ln)
-               ln = try_parse_guitar_chord (ln)
-               ln = try_parse_tuplet_begin (ln, state)
-               ln = try_parse_group_end (ln, state)
-               ln = try_parse_grace_delims (ln)
-               ln = junk_space (ln)
-               
-       if ln:
-               sys.stderr.write ("Huh?  Don't understand `%s'\n" % ln)
-       
-
-
-def parse_file (fn):
-       f = open (fn)
-       ls = f.readlines ()
-
-       head = 1
-       state = Parser_state ()
-       for l in ls:
-               if re.match ('^[\t ]*(%.*)?$', l):
-                       continue
-               
-               if head:
-                       m = try_parse_header_line (l)
-                       if not m:
-                               head = 0
-
-               if not head:
-                       m = try_parse_body_line (l,state)
-
-
-def identify():
-       sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
-
-def help ():
-       print r"""
-This is a disfunctional ABC to mudela convertor.  It only gulps input, and
-says huh when confused.  Go ahead and fix me.
-
-Usage: abc-2-ly INPUTFILE
-
--h, --help   this help.
-"""
-
-
-
-identify()
-(options, files) = getopt.getopt (sys.argv[1:], 'h', ['help'])
-
-for opt in options:
-       o = opt[0]
-       a = opt[1]
-       if o== '--help' or o == '-h':
-               help ()
-       else:
-               print o
-               raise getopt.error
-
-
-for f in files:
-       if f == '-':
-               f = ''
-       parse_file (f)
-
-       dump_global ()
-       dump_lyrics ()
-       dump_voices ()
-       dump_score ()
-       
-       
diff --git a/scripts/abc2ly.py b/scripts/abc2ly.py
new file mode 100644 (file)
index 0000000..dd4bcf2
--- /dev/null
@@ -0,0 +1,617 @@
+#!@PYTHON@
+
+# once upon a rainy monday afternoon.
+#
+#   ...
+#
+# (not finished.)
+# ABC standard v1.6:  http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt
+# 
+
+program_name = 'abc-to-ly'
+version = '@TOPLEVEL_VERSION@'
+import __main__
+import getopt
+import sys
+import re
+import string
+try:
+       import mpz
+except:
+       sys.stderr.write ("This script needs Python 1.5.1\n")
+       sys.exit (1)
+
+
+header = {}
+lyrics = []
+voices = []
+global_voice_stuff = []
+default_len = 4
+global_key = [0] * 7                   # UGH
+names = ["One", "Two", "Three"]
+DIGITS='0123456789'
+HSPACE=' \t'
+
+def gcd (a, b):
+       while  a % b:
+               a,b = b, a % b
+       return b
+       
+class Rational:
+       def __init__ (self, n, d = 1):
+               self.num = n
+               self.den = d
+
+       def simplify (self):
+               g = gcd (self.num, self.den)
+               self.num = self.num /  g
+               self.den = self.den /g
+               if self.den < 0:
+                       self.den = - self.den
+                       self.num = - self.num
+
+       def __sub__ (self, other):
+               pass
+       
+
+def dump_global ():
+       print ("global = \\notes{")
+       for i in global_voice_stuff:
+               print (i);
+       print ("}")
+
+
+def dump_header (hdr):
+       print '\\header {'
+       for k in hdr.keys ():
+               print '%s = "%s";\n'% (k,hdr[k])
+       print '}'
+
+def dump_lyrics ():
+       for i in range (len (lyrics)):
+               print ("verse%s = \\lyrics {" % names [i])
+               print (lyrics [i])
+               print ("}")
+
+def dump_voices ():
+       for i in range (len (voices)):
+               print ("voice%s = \\notes {" % names [i])
+               print (voices [i])
+               print ("}")
+       
+def dump_score ():
+       print ("\\score{")
+       print ("        \\notes<")
+       print ("                \\global")
+       for i in range (len (voices)):
+               print ("        \\context Staff=%s \\voice%s" %
+                       (names [i], names [i]))
+       for i in range (len (lyrics)):
+               j = i
+               if j >= len (voices):
+                       j = len (voices) - 1
+               print ("        \\context Lyrics=%s \\rhythm \\voice%s \\verse%s" % 
+                       (names [i], names [j], names [i]))
+       print ("    >")
+       dump_header (header)
+       #print "%%%s" % global_voice_stuff, 1
+       print ("}")
+
+def set_default_length (s):
+       m =  re.search ('1/([0-9]+)', s)
+       if m:
+               __main__.default_len = string.atoi ( m.group (1))
+
+def gulp_file(f):
+       try:
+               i = open(f)
+               i.seek (0, 2)
+               n = i.tell ()
+               i.seek (0,0)
+       except:
+               sys.stderr.write ("can't open file: %s\n" % f)
+               return ''
+       s = i.read (n)
+       if len (s) <= 0:
+               sys.stderr.write ("gulped emty file: %s\n" % f)
+       i.close ()
+       return s
+
+
+# pitch manipulation. Tuples are (name, alteration).
+# 0 is (central) C. Alteration -1 is a flat, Alteration +1 is a sharp
+# pitch in semitones. 
+def semitone_pitch  (tup):
+       p =0
+
+       t = tup[0]
+       p = p + 12 * (t / 7)
+       t = t % 7
+       
+       if t > 2:
+               p = p- 1
+               
+       p = p + t* 2 + tup[1]
+       return p
+
+def fifth_above_pitch (tup):
+       (n, a)  = (tup[0] + 4, tup[1])
+
+       difference = 7 - (semitone_pitch ((n,a)) - semitone_pitch (tup))
+       a = a + difference
+       
+       return (n,a)
+
+def sharp_keys ():
+       p = (0,0)
+       l = []
+       k = 0
+       while 1:
+               l.append (p)
+               (t,a) = fifth_above_pitch (p)
+               if semitone_pitch((t,a)) % 12 == 0:
+                       break
+
+               p = (t % 7, a)
+       return l
+
+def flat_keys ():
+       p = (0,0)
+       l = []
+       k = 0
+       while 1:
+               l.append (p)
+               (t,a) = quart_above_pitch (p)
+               if semitone_pitch((t,a)) % 12 == 0:
+                       break
+
+               p = (t % 7, a)
+       return l
+
+def quart_above_pitch (tup):
+       (n, a)  = (tup[0] + 3, tup[1])
+
+       difference = 5 - (semitone_pitch ((n,a)) - semitone_pitch (tup))
+       a = a + difference
+       
+       return (n,a)
+
+
+def compute_key (k):
+       k = string.lower (k)
+       intkey = (ord (k[0]) - ord('a') + 5) % 7
+       intkeyacc =0
+       k = k[1:]
+       
+       if k and k[0] == 'b':
+               intkeyacc = -1
+               k = k[1:]
+       elif  k and k[0] == '#':
+               intkeyacc = 1
+               k = k[1:]
+
+       keytup = (intkey, intkeyacc)
+       
+       sharp_key_seq = sharp_keys ()
+       flat_key_seq = flat_keys ()
+
+       accseq = None
+       accsign = 0
+       if keytup in sharp_key_seq:
+               accsign = 1
+               key_count = sharp_key_seq.index (keytup)
+               accseq = map (lambda x: (4*x -1 ) % 7, range (1, key_count + 1))
+
+       elif keytup in flat_key_seq:
+               accsign = -1
+               key_count = flat_key_seq.index (keytup)
+               accseq = map (lambda x: (3*x + 3 ) % 7, range (1, key_count + 1))
+       else:
+               raise "Huh"
+       
+       key_table = [0] * 7
+       for a in accseq:
+                key_table[a] = key_table[a] + accsign
+               
+
+       return key_table
+
+tup_lookup = {
+       '3' : '2/3',
+       '4' : '4/3',
+       '5' : '4/5',
+       '6' : '4/6',
+       }
+
+
+def try_parse_tuplet_begin (str, state):
+       if str and str[0] in DIGITS:
+               dig = str[0]
+               str = str[1:]
+               state.parsing_tuplet = 1
+               
+               voices_append ("\\times %s {" % tup_lookup[dig])
+       return str
+
+def  try_parse_group_end (str, state):
+       if str and str[0] in HSPACE:
+               str = str[1:]
+               if state.parsing_tuplet:
+                       state.parsing_tuplet = 0
+                       voices_append ("}")
+       return str
+
+def header_append (key, a):
+       s = ''
+       if header.has_key (key):
+               s = header[key] + "\n"
+       header [key] = s + a
+
+def lyrics_append (a):
+       i = len (lyrics) - 1
+       if i < 0:
+               i = 0
+       if len (lyrics) <= i:
+               lyrics.append ('')
+       lyrics [i] = lyrics [i] + a + "\n"
+
+def voices_append (a):
+       i = len (voices) - 1
+       if i < 0:
+               i = 0
+       if len (voices) <= i:
+               voices.append ('')
+       voices [i] = voices [i] + a + "\n"
+
+def try_parse_header_line (ln):
+       m = re.match ('^(.): *(.*)$', ln)
+
+       if m:
+               g =m.group (1)
+               a = m.group (2)
+               a = re.sub ('"', '\\"', a)
+               if g == 'T':
+                       header['title'] =  a
+               if g == 'M':
+                       if a == 'C':
+                               a = '4/4'
+                       global_voice_stuff.append ('\\time %s;' % a)
+               if g == 'K':
+                       __main__.global_key  =compute_key (a)# ugh.
+
+                       global_voice_stuff.append ('\\key %s;' % a)
+               if g == 'O': 
+                       header ['origin'] = a
+               if g == 'X': 
+                       header ['crossRefNumber'] = a
+               if g == 'A':
+                       header ['area'] = a
+               if g == 'H':
+                       header_append ('history', a)
+               if g == 'B':
+                       header ['book'] = a
+               if g == 'S':
+                       header ['subtitle'] = a
+               if g == 'L':
+                       set_default_length (ln)
+               if g == 'W':
+                       if not len (a):
+                               lyrics.append ('')
+                       else:
+                               lyrics_append (a);
+       return m
+
+def pitch_to_mudela_name (name, acc):
+       s = ''
+       if acc < 0:
+               s = 'es'
+               acc = -acc
+       elif acc > 0:
+               s = 'is'
+
+       if name > 4:
+               name = name -7
+       return chr (name  + ord('c'))  + s * acc
+
+def octave_to_mudela_quotes (o):
+       o = o + 2
+       s =''
+       if o < 0:
+               o = -o
+               s=','
+       else:
+               s ='\''
+
+       return s * o
+
+def parse_num (str):
+       durstr = ''
+       while str and str[0] in DIGITS:
+               durstr = durstr + str[0]
+               str = str[1:]
+
+       n = None
+       if durstr:
+               n  =string.atoi (durstr) 
+       return (str,n)
+
+
+def duration_to_mudela_duration  (multiply_tup, defaultlen, dots):
+       base = 1
+
+       # (num /  den)  / defaultlen < 1/base
+       while base * multiply_tup[0] < defaultlen * multiply_tup[1]:
+               base = base * 2
+
+
+       return '%d%s' % ( base, '.'* dots)
+
+class Parser_state:
+       def __init__ (self):
+               self.next_dots = 0
+               self.next_den = 1
+               self.parsing_tuplet = 0
+
+
+# WAT IS ABC EEN ONTZETTENDE PROGRAMMEERPOEP  !
+def try_parse_note (str, parser_state):
+       mud = ''
+
+       slur_begin =0
+       if not str:
+               return str
+       
+       if  str[0] == '(':
+               slur_begin = 1
+               str = str[1:]
+
+       acc = 0
+       if str[0] in '^=_':
+               c = str[0]
+               str = str[1:]
+               if c == '^':
+                       acc = 1
+               if c == '=':
+                       acc = 0
+               if c == '_':
+                       acc = -1
+
+        octave = 0;
+       if str[0] in "ABCDEFG":
+               str = string.lower (str[0]) + str[1:]
+               octave = -1
+
+
+       notename = 0
+       if str[0] in "abcdefg":
+               notename = (ord(str[0]) - ord('a') + 5)%7
+               str = str[1:]
+       else:
+               return str              # failed; not a note!
+
+       while str[0] == ',':
+                octave = octave - 1
+                str = str[1:]
+       while str[0] == '\'':
+                octave = octave + 1
+                str = str[1:]
+
+       num = 0
+       den = parser_state.next_den
+       parser_state.next_den = 1
+
+       (str, num) = parse_num (str)
+       if not num:
+               num = 1
+       
+       if str[0] == '/':
+               while str[0] == '/':
+                       str= str[1:]
+                       d = 2
+                       if str[0] in DIGITS:
+                               (str, d) =parse_num (str)
+
+                       den = den * d
+
+       current_dots = parser_state.next_dots
+       parser_state.next_dots = 0
+       while str[0] == '>':
+               str = str [1:]
+               current_dots = current_dots + 1;
+               parser_state.next_den = parser_state.next_den * 2
+       
+       while str[0] == '<':
+               str = str [1:]
+               den = den * 2
+               parser_state.next_dots = parser_state.next_dots + 1
+       
+               
+       
+       voices_append ("%s%s%s" %
+               (pitch_to_mudela_name (notename, acc + global_key[notename]),
+                                       octave_to_mudela_quotes (octave),
+                duration_to_mudela_duration ((num,den), default_len, current_dots)))
+       slur_end =0
+       if str[0] == ')':
+               slur_begin = 1
+               str = str[1:]
+
+
+       return str
+
+def junk_space (str):
+       while str and str[0] in '\t\n ':
+               str = str[1:]
+
+       return str
+
+
+def try_parse_guitar_chord (str):
+       if str and str[0] == '"':
+               str = str[1:]
+               gc = ''
+               while str and str[0] != '"':
+                       gc = gc + str[0]
+                       str = str[1:]
+                       
+               if str:
+                       str = str[1:]
+
+               sys.stderr.write ("warning: ignoring guitar chord: %s\n" % gc)
+               
+       return str
+
+def try_parse_escape (str):
+       if not str or str [0] != '\\':
+               return str
+       
+       str = str[1:]
+       if str and str[0] == 'K':
+               key_table = compute_key ()
+
+       return str
+
+#
+# |] thin-thick double bar line
+# || thin-thin double bar line
+# [| thick-thin double bar line
+# :| left repeat
+# |: right repeat
+# :: left-right repeat
+#
+
+def try_parse_bar (str):
+       if str and str[0] == '|':
+               bs = ''
+               str = str[1:]
+               if str:
+                       if  str[0] == ']':
+                               bs = '|.'
+                       if str[0] == '|':
+                               bs = '||'
+                       if str[0] == '|:':
+                               sys.stderr.write ("warning: repeat kludge\n")
+                               bs = '|:'
+               if bs:
+                       voices_append ('\\bar "%s";' % bs)
+                       str = str[1:]
+
+       if str and str[:2] == '[|':
+               sys.stderr.write ("warning: thick-thin bar kludge\n")
+               voices_append ('\\bar "||";')
+               str = str[2:]
+
+       if str and str[:2] == ':|':
+               sys.stderr.write ("warning: repeat kludge\n")
+               voices_append ('\\bar ":|:";')
+               str = str[2:]
+
+       if str and str[:2] == '::':
+               sys.stderr.write ("warning: repeat kludge\n")
+               voices_append ('\\bar ":|:";')
+               str = str[2:]
+
+       return str
+       
+
+def try_parse_chord_delims (str):
+       if str and str[0] == '[':
+               str = str[1:]
+               voices_append ('<')
+
+       if str and str[0] == ']':
+               str = str[1:]
+               voices_append ('>')
+
+       return str
+
+# urg, hairy to compute grace note hack using \times{}
+def try_parse_grace_delims (str):
+       if str and str[0] == '{':
+               str = str[1:]
+               voices_append ('\\grace { ')
+
+       if str and str[0] == '}':
+               str = str[1:]
+               voices_append ('}')
+
+       return str
+
+# Try nibbling characters off until the line doesn't change.
+def try_parse_body_line (ln, state):
+       prev_ln = ''
+       while ln != prev_ln:
+               prev_ln = ln
+               ln = try_parse_chord_delims (ln)
+               ln = try_parse_note  (ln, state)
+               ln = try_parse_bar (ln)
+               ln = try_parse_escape (ln)
+               ln = try_parse_guitar_chord (ln)
+               ln = try_parse_tuplet_begin (ln, state)
+               ln = try_parse_group_end (ln, state)
+               ln = try_parse_grace_delims (ln)
+               ln = junk_space (ln)
+               
+       if ln:
+               sys.stderr.write ("Huh?  Don't understand `%s'\n" % ln)
+       
+
+
+def parse_file (fn):
+       f = open (fn)
+       ls = f.readlines ()
+
+       head = 1
+       state = Parser_state ()
+       for l in ls:
+               if re.match ('^[\t ]*(%.*)?$', l):
+                       continue
+               
+               if head:
+                       m = try_parse_header_line (l)
+                       if not m:
+                               head = 0
+
+               if not head:
+                       m = try_parse_body_line (l,state)
+
+
+def identify():
+       sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
+
+def help ():
+       print r"""
+This is a disfunctional ABC to mudela convertor.  It only gulps input, and
+says huh when confused.  Go ahead and fix me.
+
+Usage: abc-2-ly INPUTFILE
+
+-h, --help   this help.
+"""
+
+
+
+identify()
+(options, files) = getopt.getopt (sys.argv[1:], 'h', ['help'])
+
+for opt in options:
+       o = opt[0]
+       a = opt[1]
+       if o== '--help' or o == '-h':
+               help ()
+       else:
+               print o
+               raise getopt.error
+
+
+for f in files:
+       if f == '-':
+               f = ''
+       parse_file (f)
+
+       dump_global ()
+       dump_lyrics ()
+       dump_voices ()
+       dump_score ()
+       
+       
index 2c66ec21a411f26a551967951d0d305c92379e1f..bb957a03af623c328b897c8c3e0a30e16448c748 100644 (file)
@@ -374,19 +374,6 @@ if 1:
                            '\\wheel -> \\coda')
 
 
-if 1:
-       def conv(lines):
-               newlines =[]
-               for x in lines:
-                       x =  re.sub ('\\\\wheel','\\\\coda', x)
-                       newlines.append (x)
-               return newlines
-
-       conversions.append ((1,1,55), conv,
-                           '\\wheel -> \\coda')
-
-
-
 ############################
        
 
index eafc978c0e0eee1a1d639555414d39a7adf6659d..869b7907acfc7d7e1b3f917e4232e837d60a0696 100644 (file)
@@ -744,13 +744,13 @@ def main():
             do_deps = 1
         elif o == '--default-mudela-fontsize':
             if not fontsize_pt2i.has_key(a):
-                sys.stderr.write("Error: illegal fontsize: %s" % a)
+                sys.stderr.write("Error: invalid fontsize: %s" % a)
                 sys.stderr.write("  accepted fontsizes are: 11pt, 13pt, 16pt, 20pt, 26pt")
                 sys.exit()
             Props.setMudelaFontsize(fontsize_pt2i[a], 'init')
        elif o == '--force-mudela-fontsize':
             if not fontsize_pt2i.has_key(a):
-                sys.stderr.write("Error: illegal fontsize: %s" % a)
+                sys.stderr.write("Error: invalid fontsize: %s" % a)
                 sys.stderr.write("  accepted fontsizes are: 11pt, 13pt, 16pt, 20pt, 26pt")
                 sys.exit()
             Props.force_mudela_fontsize = fontsize_pt2i[a]
index 78811f5d1f40796fe442a203b89a7d2e28575d2e..66598c81ad22db04531c9860bd4b56288105a9a1 100644 (file)
@@ -22,7 +22,7 @@ $(outdir)/%.texinfo: %.yo
        $(YODL2TEXINFO) -doutdir=$(outdir) --live-data=3 -o $@ $<
 
 $(outdir)/%.txt: %.yo
-       $(YODL2TXT) -doutdir=$(outdir) --live-data=3 -o $@ $<
-#      $(YODL2MSLESS) -doutdir=$(outdir) --live-data=3 $< > $@
+#      $(YODL2TXT) -doutdir=$(outdir) --live-data=3 -o $@ $<
+       $(YODL2MSLESS) -doutdir=$(outdir) --live-data=3 $< > $@
 #      rm -f $(basename $<).ms
 
diff --git a/tex/fetdefs.tex b/tex/fetdefs.tex
deleted file mode 100644 (file)
index 730b17a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-% fetdefs.tex
-% encapsulating tex backend for auto-generated feta definitions
-\endinput
index 143a4c28c50699c56b6ca7a222b9a9f109823139..e8a60fed86cea0735044dec9a1664cd074a1010a 100644 (file)
@@ -1,51 +1,5 @@
 \message{LaTeX definitions}
 \def\texsuffix{LaTeX}
-
-\def\cmrelevenLaTeX{
-        \def\settext##1{{\normalfont\tiny ##1}}
-        \def\setitalic##1{\textit{\tiny ##1}}
-        \def\setbold##1{\textbf{\tiny ##1}}
-        \def\setlarge##1{\textbf{\footnotesize ##1}}
-        \def\setLarge##1{\textbf{\small ##1}}
-        \def\sethuge##1{\textbf{\normalsize ##1}}
-}
-\def\cmrthirteenLaTeX{
-        \def\settext##1{{\normalfont\scriptsize ##1}}
-        \def\setitalic##1{\textit{\scriptsize ##1}}
-        \def\setbold##1{\textbf{\scriptsize ##1}}
-        \def\setlarge##1{\textbf{\small ##1}}
-        \def\setLarge##1{\textbf{\normalsize ##1}}
-        \def\sethuge##1{\textbf{\large ##1}}
-}
-\def\cmrsixteenLaTeX{
-        \def\settext##1{{\normalfont\footnotesize ##1}}
-        \def\setitalic##1{\textit{\small ##1}}
-        \def\setbold##1{\textbf{\footnotesize ##1}}
-        \def\settypewriter##1{\texttt{\normalsize ##1}}
-        \def\setlarge##1{\textbf{\normalsize ##1}}
-        \def\setLarge##1{\textbf{\large ##1}}
-        \def\sethuge##1{\textbf{\Large ##1}}
-}
-\def\cmrtwentyLaTeX{
-        \def\settext##1{{\normalfont ##1}}
-        \def\setitalic##1{\textit{\normalsize ##1}}
-        \def\setbold##1{\textbf{\normalsize ##1}}
-        \def\settypewriter##1{\texttt{\normalsize ##1}}
-        \def\setlarge##1{\textbf{\large ##1}}
-        \def\setLarge##1{\textbf{\Large ##1}}
-        \def\sethuge##1{\textbf{\huge ##1}}
-}
-
-%%%%%%%%UGH
-      \def\settext#1{{\normalfont #1}}
-        \def\setitalic#1{\textit{\normalsize #1}}
-        \def\setbold#1{\textbf{\normalsize #1}}
-        \def\settypewriter#1{\texttt{\normalsize #1}}
-        \def\setlarge#1{\textbf{\large #1}}
-        \def\setLarge#1{\textbf{\Large #1}}
-        \def\sethuge#1{\textbf{\huge #1}}
-
-
 \def\lilyfooterLaTeX{
 \let\nopagenumbers\relax
         %% FIXME
index a05d5776146552b23ea37f391f8f5262ad1da886..1e4fdec9f0027b3fcbddbca05266509b598af2be 100644 (file)
@@ -1,58 +1,9 @@
 \message{LilyPond Plain TeX settings}
         \def\texsuffix{PlainTeX}
 
-\def\cmrtwentyPlainTeX{
-        \font\normaltextfont=cmr10 %\textfont is a primitive
-        \font\italicfont=cmti10 scaled \magstep1
-        \font\boldfont=cmbx10
-        \font\largefont=cmbx12
-        \font\typewriterfont=cmtt10
-        \font\Largefont=cmbx12 scaled \magstep 2
-        \font\hugefont=cmbx12 scaled \magstep 3
-}
-\def\cmrsixteenPlainTeX{
-        \font\normaltextfont=cmr8 %\textfont is a primitive
-        \font\italicfont=cmti9
-        \font\boldfont=cmbx8
-        \font\typewriterfont=cmtt9
-        \font\largefont=cmbx10
-        \font\Largefont=cmbx12
-        \font\hugefont=cmbx12 scaled \magstep 2
-}
-\def\cmrthirteenPlainTeX{
-        \font\normaltextfont=cmr7
-        \font\italicfont=cmti7
-        \font\boldfont=cmbx7
-        \font\largefont=cmbx9
-        \font\typewriterfont=cmtt7
-        \font\Largefont=cmbx10
-        \font\hugefont=cmbx12
-}
-
-\def\cmrelevenPlainTeX{
-        \font\normaltextfont=cmr6
-        \font\italicfont=cmti6
-        \font\boldfont=cmbx6
-        \font\typewriterfont=cmtt6
-        \font\largefont=cmbx8
-        \font\Largefont=cmbx9
-        \font\hugefont=cmbx10
-}   
-
 \def\lilyfooterPlainTeX{
           \footline={\ifnum\pageno=1\smalltextfont\mudelacopyright\hfil \mudelatagline
                 \else\hfil\the\pageno\hfil\fi}%
 }
 \advance\hoffset by -.6in
-
-
-\def\settext#1{\normaltextfont #1}
-\def\setitalic#1{\italicfont #1}
-\def\setbold#1{\boldfont #1}
-\def\settypewriter#1{\typewriterfont #1}
-\def\setlarge#1{\largefont #1}
-\def\setLarge#1{\Largefont #1}
-\def\sethuge#1{\hugefont #1}
-
-\def\nolilyfooterPlainTeX{\nopagenumbers
-}
+\def\nolilyfooterPlainTeX{\nopagenumbers}
index 77b02d7f7a9a49c71209008c070a870c2377b576..696bf389a3ad28485da66e0f7993d0faf624beaa 100644 (file)
         \def\SkipLilydefs{}
 \fi
 \SkipLilydefs
+
+% need to do some stuff to turn pagenumbering off
+\ifundefined{documentclass}
+        \input lilypond-plaintex
+\else
+        \input lilypond-latex
+\fi
+
+
 %
 \def\botalign#1{\vbox to 0pt{\vss #1}}
 \def\leftalign#1{\hbox to 0pt{#1\hss}}
+\font\textmusic=cmmi10
+\def\textsharp{\raise.4ex\hbox{\textmusic\char"5D}}
+\def\textnatural{\raise.4ex\hbox{\textmusic\char"5C}}
+\def\textflat{\raise.2ex\hbox{\textmusic\char"5B}}
+
+
 
 
 % stacked horizontal lines
 \input lily-ps-defs
 \def\EndLilyPondOutput{%
   \csname bye\endcsname
-  }
-  
-  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-  
+}
 \def\postheader{}
-\noindent
+
+% need to do some stuff to turn pagenumbering off
+% they seriously mess up  your fragments.
+
+\ifx\csname nolilyfooter\endcsname\relax
+        \message{[footer defined]}%
+        \csname lilyfooter\texsuffix\endcsname%
+\else
+        \message{[footer empty]}
+        \csname%
+        nolilyfooter\texsuffix\endcsname
+\fi
+
+
+\endinput
index 20a7eb0e6277b9de8d45d567f2009a9479473d91..c79076e597b2f231ecfa616500b7568e26cb1310 100644 (file)
 
 % ful of pars, needs the above
 \input lilyponddefs
+
+% generates par
+\def\interscoreline{}
 % generates par
 \musixsixteendefs
 \def\musixsixteendefs{}
-% generates par
-\turnOnPostScript%
-\def\turnOnPostScript{}
-% generates par
-\def\interscoreline{}
 \def\nolilyfooter{}
+%urg: missing \begin{document}?
+\def\noindent{}
index 07b806cbb884d90926ed3c63e73878421aa42447..fd18c5b60615e103ea3fea90b6720402dc8d835e 100644 (file)
@@ -65,7 +65,7 @@
   \parskip\saveparskip
   {\center{\large\theinstrument}\par}
   {\flushleft{\large\normalfont\scshape\thepiece}}
-  \leavevmode
+%  \leavevmode
 }
 \def\makelilypiecetitle
 {