]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.1.54 release/1.1.54
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 8 Jul 1999 10:03:06 +0000 (12:03 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 8 Jul 1999 10:03:06 +0000 (12:03 +0200)
92 files changed:
Documentation/links.yo
Documentation/man/lilypond.yo
Documentation/man/out/lilypond.1
Documentation/ntweb/index.yo
Documentation/tex/engraving.bib
Documentation/tex/lilypond-regtest.doc
Documentation/tex/refman.yo
Documentation/tex/tutorial.yo
Documentation/topdocs/INSTALL.yo
Documentation/topdocs/index.yo
INSTALL.txt
NEWS
TODO
VERSION
aclocal.m4
input/bugs/rhythm.ly [new file with mode: 0644]
input/bugs/sv.ly [deleted file]
input/test/chord-table.ly
input/test/hyphen.ly
input/test/notemode-chords.ly
input/test/perform-grace.fly [new file with mode: 0644]
input/test/perform-tie.fly
input/test/rhythm-lyric.ly [new file with mode: 0644]
input/test/rhythm-melody.fly [new file with mode: 0644]
input/test/rhythm.ly [new file with mode: 0644]
input/test/tup.ly
input/test/tuplet.fly
input/twinkle.ly
lily/atom.cc
lily/audio-element.cc
lily/audio-item.cc
lily/auto-beam-engraver.cc
lily/chord-name-engraver.cc
lily/grace-iterator.cc
lily/grace-performer-group.cc
lily/include/atom.hh
lily/include/audio-element.hh
lily/include/audio-item.hh
lily/include/grace-iterator.hh
lily/include/lily-proto.hh
lily/include/lookup.hh
lily/include/midi-item.hh
lily/include/midi-walker.hh
lily/include/music-iterator.hh
lily/include/music-list-iterator.hh
lily/include/music-list.hh
lily/include/music-wrapper-iterator.hh
lily/include/music-wrapper.hh
lily/include/music.hh
lily/include/my-lily-parser.hh
lily/include/new-repeated-music.hh
lily/include/note-performer.hh
lily/include/relative-music.hh
lily/include/request-iterator.hh
lily/include/sequential-music-iterator.hh
lily/include/transposed-music.hh
lily/lookup.cc
lily/midi-item.cc
lily/midi-walker.cc
lily/multi-measure-rest.cc
lily/music-iterator.cc
lily/music-list-iterator.cc
lily/music-list.cc
lily/music-sequence.cc
lily/music-wrapper-iterator.cc
lily/music-wrapper.cc
lily/music.cc
lily/my-lily-lexer.cc
lily/my-lily-parser.cc
lily/note-performer.cc
lily/parser.yy
lily/relative-octave-music.cc
lily/repeated-music.cc
lily/request-iterator.cc
lily/sequential-music-iterator.cc
lily/tie-performer.cc
lily/transposed-music.cc
lily/tuplet-spanner.cc
lily/volta-spanner.cc
ly/params.ly
ly/performer.ly
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
mutopia/E.Satie/gnossienne-4.ly
mutopia/F.Schubert/standchen.ly
ps/lily.ps
scm/lily.scm
scripts/abc-2-ly.py
scripts/mudela-book.py
stepmake/aclocal.m4
tex/lilyponddefs.tex

index 9addb6fc2c50838b10e936d7b19f3b7f5fff36dd..cf5797268426ebaf00b39c63542e61bcdb44aa2f 100644 (file)
@@ -56,6 +56,9 @@ lurl(http://cgi.debian.org/www-master/debian.org/Packages/stable/tex/lilypond.ht
 and
 lurl(ftp://ftp.debian.org/debian/dists/unstable/main/binary-i386/tex/lilypond_*.deb)
 
+Precompiled i386 RedHat RPMS are available from
+lurl(http://linux.umbc.edu/software/lilypond/rpms/).
+
 
 sect(News)
 
index 6c5bcce3066635122216f81ddac20839c9c3a788..d82b76d5c34219512ed11d2a623b8d3907064118 100644 (file)
@@ -136,16 +136,8 @@ Lots of them.  See file(TODO) and file(BUGS)
 
 manpageseealso()
 
-LilyPond comes with various other documentation files, but most are in
-the form of manual pages.  They are included in the source
-package. Interesting documents include 
-
-description(
-dit(MANIFESTO)
-    Goals of the GNU LilyPond project.
-dit(FAQ)
-    The GNU LilyPond FAQ list
-)
+LilyPond comes with various other documentation files.  They are
+included in the source package.
 
 A further source for information is the website, which can be found at
 lurl(http://www.lilypond.org/).  The website contains on-line versions
index dad50703064f0fe28e8c8120f5899875a372ce99..e6cf0e3d619c99faffb6ba56909ce013ac6533c9 100644 (file)
@@ -107,7 +107,7 @@ Send a description of the LilyPond 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 be subscribed
+Send it to bug-gnu-music@gnu\&.org; you don\'t have to be subscribed
 to this mailinglist\&.
 .PP 
 .SH "FILES" 
@@ -133,14 +133,8 @@ Lots of them\&.  See \fBTODO\fP and \fBBUGS\fP
 .PP 
 .SH "SEE ALSO" 
 .PP 
-LilyPond comes with various other documentation files, but most are in
-the form of manual pages\&.  They are included in the source
-package\&. Interesting documents include 
-.PP 
-.IP "MANIFESTO" 
-Goals of the GNU LilyPond project\&.
-.IP "FAQ" 
-The GNU LilyPond FAQ list
+LilyPond comes with various other documentation files\&.  They are
+included in the source package\&.
 .PP 
 A further source for information is the website, which can be found at
 http://www\&.lilypond\&.org/\&.  The website contains on-line versions
@@ -154,21 +148,21 @@ for information about mirrors\&.
 For programs which are part of the GNU music project, the following
 mailing list have been setup:
 .PP 
-.IP "info-gnu-music@gnu\&.org <info-gnu-music@gnu\&.org>
+.IP "info-gnu-music@gnu\&.org" 
 For information on the GNU Music project, to subscribe: send mail with
-subject "subscribe" to info-gnu-music-request@gnu\&.org <info-gnu-music-request@gnu\&.org>
-.IP "help-gnu-music@gnu\&.org <help-gnu-music@gnu\&.org>
+subject "subscribe" to info-gnu-music-request@gnu\&.org
+.IP "help-gnu-music@gnu\&.org" 
 For help with programs from the GNU music project\&.  To subscribe: send
-mail with subject "subscribe" to help-gnu-music-request@gnu\&.org <help-gnu-music-request@gnu\&.org>
-.IP "bug-gnu-music@gnu\&.org <bug-gnu-music@gnu\&.org>
+mail with subject "subscribe" to help-gnu-music-request@gnu\&.org
+.IP "bug-gnu-music@gnu\&.org" 
 If you have bugreports, you should send them to this list\&.  If you want
 to read all bugreports, you should subscribe to this list\&.  To
 subscribe: send mail with subject "subscribe" to
-bug-gnu-music-request@gnu\&.org <bug-gnu-music-request@gnu\&.org>
-.IP "gnu-music-discuss@gnu\&.org <gnu-music-discuss@gnu\&.org>
+bug-gnu-music-request@gnu\&.org
+.IP "gnu-music-discuss@gnu\&.org" 
 For discussions concerning the GNU Music project, to subscribe: send
 mail with subject "subscribe" to
-gnu-music-discuss-request@gnu\&.org <gnu-music-discuss-request@gnu\&.org>
+gnu-music-discuss-request@gnu\&.org
 .PP 
 Announces of new versions will be sent to info-gnu-music and
 gnu-music-discuss\&.
index 1c7f252385b7a76d1a63b588e3698f4cc40b358e..855b4aef8aa3cef9a0b5297b8c7c744d7d220690 100644 (file)
@@ -18,67 +18,12 @@ clearpage()
 
 subsect(NEWS) label(news)
 
-The FAT16, FAT32, and NTFS file system problems have been corrected.
-I have tested various installations that are known to be operational.
-The following configurations that have been tested. 
-
-description(
- dit(Windows NT)
- description(
-  dit(Installed on NTFS)
-  itemize(
-    it()Runs from NTFS partion
-    it()Runs from FAT16 partion
-  )
-  dit(Installed on FAT16)
-  itemize(
-    it()Runs from NTFS partion
-    it()Runs from FAT16 partion
-  )
- )
-)
-
-description(
- dit(Windows 95)
- description(
-  dit(Installed on FAT16)
-  itemize(
-    it()Runs from FAT16 partion
-    it()Runs from FAT32 partion
-  )
-  dit(Installed on FAT32)
-  itemize(
-    it()Runs from FAT16 partion
-    it()Runs from FAT32 partion
-  )
- )
-)
-  
-The installer was created with
-url(CreateInstall)(http://www.gentee.com/).  This is a shareware
-application that has capabilities close to the high dollar installers
-bf(InstallShield), bf(Install Vise), and bf(WiseInstaller).
-bf(CreateInstall) does cost $38 to register which is probably going to
-be frowned upon, but I was unable to find a freeware install builder
-that was suitable.  The self extracting distribution currently:
-
-itemize(
- it() Installs the lilypond distribution on any valid file system.
- it() Optionally creates a em(Lilypond) shortcut group on your start
-      menu with the following shortcuts.
-  itemize(
-   it() bf(lilyshell)
-   it() bf(uninstall)
-  )
- it() Allows unistall through the Add/Remove Program interface on the
-      control panel.
- it() The bf(lilyshell) uses the /E and /K switches to extend the
-      environment size and initialize the shell environment.
- it() It has the look and feel of a real Windows installer
-)
-
-The bf(lilyshell) shortcut initializes the environment so you can
-generate music from a MSDOS prompt with commands like:
+I have made my first attempt at distributing lilypond as a self
+extracting executable for Windows NT 4.0 and Windows 95.  The
+executable will extract the distribution in the directory specified by
+the user and create em(lilypond-@TOPLEVEL_VERSION@\lily.bat).  This
+batch file initializes the LilyPond environment and fires up a Command
+Prompt.  From this Command Prompt you may run:
 
 itemize(
     it()ly2dvi
@@ -88,13 +33,6 @@ itemize(
     it()mi2mu
 )
 
-If you are upgrading from a previous version of lilypond you will most
-likely need to flush your font cache.  I generally just toss
-file(D:\localtexmf\fonts\tfm\public\ehrhardt) and
-file(D:\localtexmf\fonts\pk\ljfour\public\ehrhardt) in the Recyle
-Bin. Your local font directory may be different, please refer to your
-local installation of code(TeX).
-
 I have also converted the Manual Pages for the above tools to HTML for
 easy browsing.  This release has been tested on Windows NT 4.0sp3 and
 Windows 95 and found to be operational.  If you have any troubles and
@@ -139,10 +77,7 @@ clearpage()
 subsect(Download) label(download)
 
 itemize(
-    it()Windows 95
-        url(lilypond-@TOPLEVEL_VERSION@-95)(lilypond-@TOPLEVEL_VERSION@-95.exe)
-    it()Windows NT 4.0
-        url(lilypond-@TOPLEVEL_VERSION@-nt)(lilypond-@TOPLEVEL_VERSION@-nt.exe)
+    it()url(lilypond-@TOPLEVEL_VERSION@)(lily1123jbr1.exe)
 )
 
 link(Back to top)(contents)
@@ -192,7 +127,11 @@ subsect(Running LilyPond) label(running)
 itemize(
   it()Take a look at url(angels.ly)(angels.ly)
   it()Save angels.ly to your local disk
-  it()Select the bf(lilyshell) shortcut from the em(Lilypond) group nl()
+  it()Execute lilypond-@TOPLEVEL_VERSION@\lily.bat nl()
+NOTE: If you get an em(out of environment memory error), simply increase
+the environment memory by selecting
+em(lilypond-@TOPLEVEL_VERSION@\lily.bat) Properties/Memory and increase
+the available environment memory to 1024.
   it() From a LilyPond Command Prompt run: nl()
   bf(ly2dvi angels.ly) nl()
   bf(dvips angels.dvi) nl()
index ab4099acceda023def6712db7472737181181ad7..bfa65238d343f7f5d1ce5cbf6c2e3ddc2a328463 100644 (file)
@@ -79,6 +79,16 @@ work for music notation issues as one is likely to get. MB},
   isbn = {ISBN 3-7957-2886-x},
 }
 
+{willemze,
+  note = {A comprehensive overview of music theory;
+the (Dutch) authority on general music theory},
+  year =  {1964-1993},
+  title = {Algemene muziekleer},
+  author = {Theo Willemze},
+  publisher = {Aula, Het Spectrum},
+  address = {Utrecht},
+  isbn = {ISBN 90-274-1817-9},
+}
 
 
 @Book {hader48,
index 4ba4489be80771a884f320c02fbe774fc3893493..0dc04fde80f339a17d39565a380f5fd8e709970e 100644 (file)
@@ -25,7 +25,9 @@ you must create a special context called Thread.
 \mudelafile{noteheadstyle.ly}
 
 Multiple measure rests do not collide with barlines and clefs.  They
-are not expanded when you set Score.SkipBars
+are not expanded when you set \verb+Score.SkipBars+.  Although the
+multi-measure-rest is a Spanner, minimum distances are set to keep it
+colliding from barlines. 
 
 \mudelafile{multi-measure-rest.ly}
 
@@ -124,7 +126,9 @@ middle voices are horizontally shifted in a limited number of cases.
 \mudelafile{collisions.ly}
 
 The number of stafflines of a staff can be set with the property
-numberOfStaffLines.  Ledger lines both on note heads and rests are adjusted.
+numberOfStaffLines.  Ledger lines both on note heads and rests are
+adjusted.  Barlines also are adjusted.
+
 
 \mudelafile{number-staff-lines.fly}
 
index a6d9cce7788d119e90d265ee20c3c6c2cda7acf8..6328f112b1bc315a7362e5d6e7d920536a5cb874 100644 (file)
@@ -231,7 +231,7 @@ to an identifier whose name is the same as the name of a keyword.  The
 following words are keywords:
 verb(accepts         duration      midi          relative      textscript 
 alternative     font          mm            remove        time       
-bar             grouping      musicalpitch  repeat        times      
+bar                   musicalpitch  repeat        times      
 cadenza         header        name          scm           translator 
 chordmodifiers  in            notenames     scmfile       transpose  
 chords          include       notes         score         type       
@@ -924,14 +924,6 @@ In order to help with error checking, you can insert bar markers in
 your music by typing code(|).  Whenever LilyPond encounters a code(|)
 that doesn't fall at a measure boundary, she prints a warning message.
 
-Rhythmic grouping is  a concept closely associated with this. 
-A default grouping is selected for the chosen time signature.  
-The default consists of combinations of 2 and 3 beats with as many
-groups of 3 as possible, and the groups of 3 coming first.  For
-example, 4/4 is divided into 2+2 and 8/8 is divided into 3+3+2.  This
-default grouping can be changed using the \grouping keyword which
-takes a list of durations to specify the grouping. 
-
 
 COMMENT(
 sect(Composition: forming bigger structures)
@@ -1155,11 +1147,6 @@ var(dotcount).
 dit(code(\font) var(string)) Internal keyword.  Used within
 code(\paper) to specify the font.
 
-dit(code(\grouping) var(durationseq)code(;))  Sets  the  metric structure of
-the measure.  Each argument specifies the duration of one metric unit.
-For example, code(\duration 16*5;) specifies a grouping of five beats
-together in 5/16 time.  The default grouping is to have as many groups
-of 3 as possible followed by groups of two.  
 
 dit(code(\header) code({) var(key1) = var(val1); var(key2) = var(val2); ... code(}))
 Specifies information about the music.  A header should appear at the
index 883447e72e6e330b7e9845c9f9baa6680176b062..d160e7abc8a247f408c90cdb1ef871922e51937a 100644 (file)
@@ -97,7 +97,7 @@ mudela(verbatim)(
            \key g;
            \time 3/4;          
 
-       \repeat 2 {
+       \repeat "semi" 2 {
            d4 g,8 a b c d4 g, g |
            e'4 c8 d e fis g4 g, g |
            c4 d8( )c b a( )b4 c8 b a g |
@@ -796,25 +796,6 @@ Example:
     [d'8 dis'] e' c''4 e'8 c''4 
   )
 
-dit(code(\grouping) var(durationslist)) sets the metric structure of the measure.
-    Its effect can best be shown by an example:
-    mudela(fragment,verbatim,center)(
-        \time 5/16;
-        \grouping 16*3 16*2;
-        [c'8 c'16 c'8]
-        \grouping 16*2 16*3;
-        [c'8 c'16 c'8]
-        \grouping 16*5 ;
-        [c'8 c'16 c'8]
-    )
-
-In practice, you won't be needing this command often: the
-grouping is switched automatically when you issue a code(\time)
-command.  It is set to a combination of groups
-of 2 and 3 beats, with as many groups of
-3 as possible (in other words: 4/4 is divided in two times two beats
-(2+2), 8/8 in 3+3+2)
-)
 
 The commands described above aren't really music, but they can best be
 thought as as notes with no duration.  Since they are grammatically
index 0c9e54d424020845048a3774938f8ec58c8322ef..e4d9dc3412ffac11f08d59a36b576662eca57fbd 100644 (file)
@@ -100,19 +100,18 @@ conversion tools.
 itemize(
 it()xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
             users: it is included within the package libgr-progs).
-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 original is at
+lurl(ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz)
 
-    TeTeX users should not forget to rerun texhash.
-)
+it()pnmtopng, which is also in libgr-progs for RedHat. The original is
+at
+lurl(ftp://swrinde.nde.swri.edu/pub/png/applications/pnmtopng-2.37.2.tar.gz).i
 
-Building the website requires pnmtopng.  The version of file(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 file(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.
 
 verb( tar xzf libgr-2.0.13.tar.gz
       make
@@ -123,6 +122,17 @@ verb( tar xzf libgr-2.0.13.tar.gz
 
 You can then install the new pnmtopng into /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).
+
+    TeTeX users should not forget to rerun texhash.
+)
+
+You also have to install file(buildscripts/out/ps-to-gifs) in a
+directory that is in the path.
+
+
 sect(CONFIGURING and COMPILING)
 
 to install GNU LilyPond, simply type:
@@ -292,7 +302,7 @@ verb(
        rpm -i /usr/src/redhat/RPMS/i386/lilypond-x.y.z
 )
 
-Precompiled i386 eRedHat RPMS are available from
+Precompiled i386 RedHat RPMS are available from
 lurl(http://linux.umbc.edu/software/lilypond/rpms/).
 
 
index 804d96aeb93556a3e320fc28fc79cb6a4259d63f..7cc1afc560ed96b5d20adb0ba5e3f3e280851f5c 100644 (file)
@@ -71,7 +71,7 @@ it()url(FAQ)(DOEXPAND(docdir)/DOEXPAND(outdir)/faq.html)
 it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html)
 it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html)
 it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html)
-it()url(The installation instructions)(DOEXPAND(tops)/INSTALL.html)
+it()url(The installation instructions)(INSTALL.html)
 )
 
 nsect(Sites)
index 2b68d258c5ca37c1d2852c503ceebd06e4c8540c..d17023348ffb78af2b63784ffec355f2e78b868e 100644 (file)
@@ -109,18 +109,18 @@ conversion tools.
 
 o xpmtoppm (from the Portable Bitmap Utilities) (For RedHat Linux
             users: it is included within the package libgr-progs).
-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.
+       the original is at
+ftp://ftp.x.org/contrib/utilities/netpbm-1mar1994.p1.tar.gz
 
-    TeTeX users should not forget to rerun texhash.
+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
 
-Building the website requires pnmtopng.  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
@@ -130,6 +130,15 @@ not have this problem.
 
 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 installation.
+man2html can be had from http://askdonald.ask.uni-karlsruhe.de/hppd/hpux/Networking/WWW/Man2html-1.05.
+
+    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:
@@ -271,13 +280,13 @@ 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
 
-Precompiled i386 eRedHat 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
+foka@debian.org.  The build scripts are in the subdirectory
 debian/.
 
 11: WINDOWS NT/95
diff --git a/NEWS b/NEWS
index ec7799fdb9eeac5053aa14c6137830097334ce50..b17aa62697989e48d44bfd2a2ca97a43fb0c460b 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,23 +1,50 @@
---- ../lilypond-1.1.53.jbr1/NEWS       Wed Jul 07 23:47:42 1999
-++ b/NEWS      Thu Jul 08 17:07:30 1999
-@@ -1,3 +1,6 @@
-pl 53.jbr2
-        - Documentation/ntweb/index.html: Updated nt distribution web page
-
- pl 53.jbr1
-       - scripts/ly2dvi.py: A fix for the multitude of file systems supported
-           by windows.  As long as the paths that the cygwin apps use are--- ../lilypond-1.1.53/NEWS   Mon Jul 05 05:56:28 1999
-++ b/NEWS      Wed Jul 07 23:47:42 1999
-@@ -1,3 +1,9 @@
 pl 53.jbr1
        - scripts/ly2dvi.py: A fix for the multitude of file systems supported
           by windows.  As long as the paths that the cygwin apps use are
           UNC style and the paths that the native windows apps use are DOS 
           style everybody is happy.  I add quick and dirty  unc2dos function
           to facilitate this approach.
- pl 52.jcn3
-       - bf: mi2mu: midi without keypl 53.gp1
+
+pl 53.hwn1
+       - bf mudela-book.
+       - better min distance for multi measure rests.
+       - junk ATOM_SMOB
+       - control tuplet gap size from paper.
+       - bf:  output header as PS strings for PS out.
+       - bf: cached-fontname 
+       - control volta height from paper block.
+
+pl 53.jcn5
+       - \rhythm-ified and text bfs: standchen.ly 
+       - walk rhythm through *_iterator::next_music_l ()
+
+pl 53.jcn4
+       - more abc2ly hacking, including lyrics and \rhythm
+       - bfs: \rhythm
+       - \rhythm-ified input/twinkle.ly
+
+pl 53.jcn3
+       - put rhythm A on pitches/lyrics B: \rhythm MUSICA MUSICB
+           input/test/rhythm-melody.fly
+           input/test/rhythm-lyrics.fly
+       - syntax changes:
+o        * dot-only duration dropped: use c4 c4. iso now invalid: c4 c.
+         * chords: optional_dot now mandatory:
+           \chords { c-1.2.3 } iso now invalid: \chords { c-1 2 3 }
+         * @c@ (notemode_chords) syntax dropped.  rather use:
+           \notes { c d \chords { e f } }
+
+pl 53.jcn2
+       - \property graceFraction: part of next note taken-up by grace(s).
+       - Note_performer: add moments for delayed notes,
+         fine for single grace notes: hear gnossienne-4.ly
+
+pl 53.jcn1
+       - grace performance
+       - fixed tie-performance
+       - bf: abe
+  
+pl 53.gp1
        - added Hyphen-engraver, Hyphen-spanner
 ************
 pl 52.jcn3
@@ -41,7 +68,8 @@ pl 52.hwn2
          * beam over barlines
          * non-fitting stems handled gracefully (eg. [c8 c4 c8] ) 
        - junked rhythmic grouping, \grouping and all associated bits.
-       - bf: do try_visibility_lambda for nonbreakable items as well (fixes \nobreak on barline)
+       - bf: do try_visibility_lambda for nonbreakable items as well
+         (fixes \nobreak on barline)
        - bf: Cons_list::truncate() 
 
 pl 52.hwn1
@@ -56,7 +84,6 @@ pl 52.mb3
        - Added barSize property. Junked barsize variable.
 
 ************
-i
 pl 51.uu2
        - grace note flags, move Lookup::flag into Stem
        - faq updates: doc++, Matt's page
@@ -597,7 +624,7 @@ pl 31.hwn3
        - Span_bar bugfix (there you go, Mats).
        - bf: Score copy ctor (-> bf declaring score)
        - new Tie behavior: only tie identical pitches, switchable with
-oldTieBehavior
+         oldTieBehavior
        - junked cautionary_b_ from Musical_pitch
 
 pl 32.jcn1
@@ -1320,7 +1347,7 @@ pl5.jcn4
 pl5.jcn3
        - website fixes
 
-opl5.jcn2
+pl5.jcn2
        - extender-*, see input/test/extender.ly
        - bf: half-beam length (urg)
        - fixes: standchen, star
@@ -1550,7 +1577,7 @@ pl 17.jcn3
        - tex output support
        - all output through scheme
        - option: f, output-format=X
-o      - geile placebox 
+       - geile placebox 
        - mf/mfplain.ini
 
 pl 17.jcn2
diff --git a/TODO b/TODO
index 776239db00c290f83aaab6c9e14226c5188a93c8..569bfdb5b877626f9ac95c5bd7b6a61eb2523950 100644 (file)
--- a/TODO
+++ b/TODO
@@ -12,11 +12,9 @@ Grep for TODO and ugh/ugr/urg.
 . * indent = 0.0 with linewidth=-1.0
 . * music ending in grace notes.
 . * PostScript
-.  * header for PS enteredby = "bla <bla@bar.com>"
 .  * ps/lily.ps see comments.
 . * didot / big point.
 . * fix singleStaffBracket
-. * declare performers in \midi
 . * check EGCS version
 . * input/test/stem-spacing.ly: 12/4 touches first note
 . * \shape 1st dim skipped? 
@@ -24,14 +22,8 @@ Grep for TODO and ugh/ugr/urg.
 . * We need feta-din*.mf files for more sizes than 10.
 . * fix dynamics decently, ie. use kerning & ligatures.  
 . * dots & rest collisions?
-. * mudela-book.py
-.  * fix \mudelafile{} to have decent functionality
-.  * P.P.S. It can be cool in mudela-book to distinguish in
-pre,postMudelaExample, whether MudelaExample is epsed or not: ( if
-this fragment is floating eps, than 1, otherwise 2). say
-preMudelaExample[eps]{}, and change it in document body sometimes.
-.  * use less RE's
-. * junk _ in lyric mode for " "
+. * behavior of  "that the obvious solution
+\lyrics { foo1*4 __ _ }" is unintuitive.
 . * Lyrics and scripts collide.
 . * a note with a circle after it, meaning:
 
@@ -72,25 +64,7 @@ preMudelaExample[eps]{}, and change it in document body sometimes.
 .  * Remove non-free software links.
 .  * Remove meta article LilyPond.
 . * break priority setting from SCM.
-. * Gade score
-.  * remove [] in favour of auto-beamer
 . * hangOnClef with non-breakable clefs.
-. * Aha, the problem is the new TeX code generation for changing fonts.
-> (The explanation below is mostly intended for Han-Wen and Jan)
-> Before, the font was changed with macros declared separately for 
-> pure TeX and LaTeX, but now all the fonts are declared directly in
-> the generated code using the low-level TeX commands. This circumvents
-> the fontencoding mechanism of LaTeX and is a potential source of
-> problems also for us users of the Latin-1 character set. 
-> I think it still works since the inputencoding latin1 is 
-> declared by ly2dvi, but it still means that e.g. an o with
-> umlaut is typeset as a combination of the two symbols 'o' and
-> 'umlaut' instead of as a single character, as would be the case
-> if fontencoding OT1 had been used. This shouldn't give any 
-> difference in layout, though. One of the main argument for using
-> fontencoding OT1 is for the hyphenation mechanism to work, an 
-> argument that's clearly irrelevant in our application. Yet we
-> see the problem for August.
 . * Abstraction for engravers:
 .  * make "in-between" engraver (Tie, Extender)
 .  * make wide_spanner_engraver (line_group_spanner, staff_symbol)
@@ -316,11 +290,23 @@ touching it.
 .  * PS output
 .  * optimal pagebreaking.
 
-. * Unicode support? -> man 7 unicode
-.  * 16 bit Strings
-.  * -u switch
-.  * detect of 16/8 bit files
-.  * examples to go with it.
+. * internationalisation for input.
+.  * Unicode support? -> man 7 unicode
+.  * (The explanation below is mostly intended for Han-Wen and Jan)
+> Before, the font was changed with macros declared separately for 
+> pure TeX and LaTeX, but now all the fonts are declared directly in
+> the generated code using the low-level TeX commands. This circumvents
+> the fontencoding mechanism of LaTeX and is a potential source of
+> problems also for us users of the Latin-1 character set. 
+> I think it still works since the inputencoding latin1 is 
+> declared by ly2dvi, but it still means that e.g. an o with
+> umlaut is typeset as a combination of the two symbols 'o' and
+> 'umlaut' instead of as a single character, as would be the case
+> if fontencoding OT1 had been used. This shouldn't give any 
+> difference in layout, though. One of the main argument for using
+> fontencoding OT1 is for the hyphenation mechanism to work, an 
+> argument that's clearly irrelevant in our application. Yet we
+> see the problem for August.
 
 . * \header
 .  * output header info to MIDI too.
@@ -352,7 +338,6 @@ languages:
 .  * SMDL?
 
 . * add to MIDI output:
-.  * tied notes for MIDI
 .  * sharp / flat on trills (in MIDI ??)
 .  * tempo change
 .  * ornaments (and trills?)
@@ -456,7 +441,6 @@ hesitate to ask.
 .  * specify number of lines
 
 .* INPUTLANGUAGE
-. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
 . * convention for slurs vs. phrasing marks.
 . * Language:
 .  * \translator -> ?
@@ -486,8 +470,6 @@ hesitate to ask.
 
 . * fix confusing naming in Engraver vs Engraver_group_engraver (context)
 
-. * progress when creating MIDI elts.
-
 . * A range for context errors (eg. mark both { and }. )
 
 . * lyric in staff  (sharpsharp in staff, text below)
diff --git a/VERSION b/VERSION
index 8293acdf2fec38a98b5ea29d9f74a88d0192871d..ceae9e617280b10edb6a3efdf1184a1b8dc67cec 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=1
-PATCH_LEVEL=53
-MY_PATCH_LEVEL=jbr2
+PATCH_LEVEL=54
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index caee78ed689c2ec3ef1c521d12b1712ad6bc8c1c..602d77213ae3deb0becaa0fd24480ff64026f68c 100644 (file)
@@ -2,8 +2,6 @@ dnl WARNING WARNING WARNING WARNING
 dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
 dnl WARNING WARNING WARNING WARNING
 dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
-dnl WARNING WARNING WARNING WARNING
-dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
 dnl aclocal.m4   -*-shell-script-*-
 dnl StepMake subroutines for configure.in
 
diff --git a/input/bugs/rhythm.ly b/input/bugs/rhythm.ly
new file mode 100644 (file)
index 0000000..e9fdd62
--- /dev/null
@@ -0,0 +1,19 @@
+text =   \lyrics { four4 syl- la ble }
+two = \notes  { c4. c8 }
+fourn = \notes  { c4. c8 c4. c8 }
+fiven = \notes  { [c16  c16 \bar "";  <{ c8 } { c16 c16 }> c8 }
+
+\score { \notes{
+       \context Staff = SA
+       < \context Staff { \two } 
+         \context Lyrics { \rhythm \fourn \text   }
+       >
+       < \context Staff { \two } 
+         \context Lyrics { \rhythm \two \text   }
+       >
+       < \context Staff { \fiven } 
+         \context Lyrics { \rhythm \fiven \text   }
+       >
+
+}
+}
diff --git a/input/bugs/sv.ly b/input/bugs/sv.ly
deleted file mode 100644 (file)
index a3856eb..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-
-%
-% Jan ->  dit is Auto_B_E bug, niet grouping bug.
-% 
-
-\score{
-  \notes{ \time 13/8;
- %    \property Voice.beamAutoBegin = "1/8"
- %         \property Voice.beamAutoEnd = "3/8"
-    \property Voice.beamAutoEnd = "10/8"
-    \property Voice."beamAutoEnd_16" = "1/8"
-    \property Voice.beamAutoBegin = "1/4"
-
-     a8 a a a16 a16 a16 a16 a16 a16 a8 a a a a a
-     a a a a a a a a a a a a a
-     a8 a8 a8 a8 a8 a a a a a a a a
-   }
-   \paper{ linewidth = -1.;}
-}
-
index 907782915f533ecc9ae523775490fbd026b31ee2..c2b30c2c920cc074c322dacf3a0feef46ac64479 100644 (file)
@@ -5,7 +5,7 @@ enteredby =     "jcn";
 }
 
 tab = \notes\transpose c'''\chords{
-       c1 c-m c-4 c-m4 c-5+ c-5- c-m5- c-5-.5+ c-6\break %c-m6\break
+       c1 c-m c-4 c-m.4 c-5+ c-5- c-m.5- c-5-.5+ c-6\break %c-m6\break
 }
 
 \score{
index 149b02d9b44b61949a49989a0825a472971e0c39..21c2f4de6fb1a72a3a5fe99318471cc029f5cf8b 100644 (file)
@@ -5,7 +5,7 @@
        >
 }
 
-\version "1.0.21"; 
+\version "1.1.53"; 
 
 
 
index 5b26d4c1c2f5379b50fd90a547e8ea30dcb3de0f..a096409a42a5d76b90a203adf270d7b5b1516b2b 100644 (file)
@@ -2,7 +2,10 @@
 
 \score{
        \notes \transpose c''{
-               @c1@ @c-7@ @c-7^5@-1-3
+% 1.1.53: @x@ syntax dropped
+% if you want fingering, write chord explicitily; eg < c1-1 e-2 g-3 >
+%              @c1@ @c-7@ @c-7^5@-1-3
+               \chords { c1 c-7 c-7^5 }
        }
 
 }
diff --git a/input/test/perform-grace.fly b/input/test/perform-grace.fly
new file mode 100644 (file)
index 0000000..c24ded8
--- /dev/null
@@ -0,0 +1,5 @@
+\context Voice=VoiceOne
+\property Voice.graceFraction = "1/4"
+\grace c8 d4 d d d d
+\property Voice.graceFraction = "1/2"
+\grace { e16 f e f } d4 d d d d 
index 484f1368c53c90a62d05e5af11733044a9356e56..5bd1eca9aae315f1ad90587177692786286a6672 100644 (file)
@@ -1,2 +1,2 @@
-c8 c c ~ c c c c ~ c ~ c ~ c ~ c c c
+c8 c c ~ c c c c ~ c ~ c ~ c c c
 %\grace { d16 c16 d16 } c8
diff --git a/input/test/rhythm-lyric.ly b/input/test/rhythm-lyric.ly
new file mode 100644 (file)
index 0000000..b9413ec
--- /dev/null
@@ -0,0 +1,12 @@
+text = \lyrics { Feel the rhy- thm }
+
+melody = \notes { 
+       e4. d8 e4. c8
+}
+
+\score{
+       <
+               \context Voice \notes\relative c'' \melody
+               \context Lyrics \rhythm \melody \text
+       >
+}
diff --git a/input/test/rhythm-melody.fly b/input/test/rhythm-melody.fly
new file mode 100644 (file)
index 0000000..7365625
--- /dev/null
@@ -0,0 +1 @@
+\rhythm { 4. 8 8. 16 } { c'' d e f }
diff --git a/input/test/rhythm.ly b/input/test/rhythm.ly
new file mode 100644 (file)
index 0000000..c4125e2
--- /dev/null
@@ -0,0 +1,5 @@
+\score{
+       \context Voice \notes\relative c''{
+               c4. 8 4. 8
+       }
+}
index 6a0e13cb0920d3bfd75a2b022d1f8565e46d3a11..e532ed30306056cc989e46d4cd8ccf6f88188f47 100644 (file)
@@ -1,5 +1,5 @@
 \score{
-       \notes \context Voice {
+       \notes \context Voice \relative c'' {
                 \times 2/3 { \times 2/3 { a8 b c}  c }
                 \times 3/4 { c4 c4 c4 c4 }
                 \time 6/8;
index 92ac4d4739c97a4804c5883010ec87da1315f40c..d9962ad89aada524e03851a9d52d27fec8b3b4dd 100644 (file)
@@ -18,7 +18,7 @@
 
 \property Voice.tupletDirection = \down
 \property Voice.tupletVisibility = 0
-\times2/3{c,4^"tupletDirection = \\textbackslash{}down" d e} 
+\times2/3{c,4^"tupletDirection = down" d e} 
   \times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 |
 \property Voice.tupletVisibility = 1
 \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
@@ -31,7 +31,7 @@
 
 \property Voice.tupletDirection = \up
 \property Voice.tupletVisibility = 0
-\times2/3{c,4^"tupletDirection = \\textbackslash{}up" d e} 
+\times2/3{c,4^"tupletDirection = up" d e} 
   \times2/3{[[f8 g a]]} \times2/3{b16 c d} c8 |
 \property Voice.tupletVisibility = 1
 \times2/3{c,4 d e} \times2/3{[f8 g a]} \times2/3{b16 c d} c8 |
index 1f5c15fa1b59ecdc90c9efe36afa56e915f7dfdc..168558215f75f5300ec51f91286bbb99a129d54f 100644 (file)
@@ -16,7 +16,8 @@ traditional song in various languages.
 %}
 
 %{
-Tested Features: lyrics, interleaving lyrics and staffs, repeats
+Tested Features: lyrics, interleaving lyrics and staffs, repeats,
+       auto beaming, applying new rhythm on lyrics
 %}
 
 \version "1.1.52";
@@ -52,12 +53,12 @@ global = \notes {
 }
 
 tekst = \lyrics{ 
-       Al-4 tijd is Kort- jak- je ziek,2
-       midden4 "in de" week maar "'s zon-" dags niet.2
-       "'s Zon-"4 dags gaat ze naar de kerk,2
-       met4 een boek vol zil- ver werk.2
-       Al-4 tijd is Kort- jak- je ziek,2
-       mid-8 den  in de week4 maar "'s zon-" dags niet.2
+       Al- tijd is Kort- jak- je ziek, " "
+       midden "in de" week maar "'s zon-" dags  " " niet.
+       "'s Zon-" dags gaat ze naar de kerk, " "
+       met een boek vol zil- ver  " " werk. " "
+       Al- tijd is Kort- jak- je ziek, " "
+       midden  "in de" week maar "'s zon-" dags  " " niet.
 }
 
 
@@ -67,64 +68,73 @@ tekst. Mogen wij ook af en toe ergens op afgeven?
 %}
 
 hegedraagjetekst = \lyrics{ 
-       Al-4 tijd zuigt Bill Gates mijn piek,2
-       "\TeX"4 is slecht- ser dan mu- ziek.2
-       "'s Zon-"4 dags gaat het door een raam,2
-       Weet4 dat ik me er- voor schaam.2
-       Al-4 tijd zuigt Bill Gates mijn piek,2
-       "\TeX"4 is slecht- ser dan mu- ziek.2
+       Al- tijd zuigt Bill Gates mijn piek, " "
+       "\TeX" is slecht- ser dan mu-  " " ziek.
+       "'s Zon-" dags gaat het door een raam, " "
+       Weet dat ik me er- voor  " " schaam.
+       Al- tijd zuigt Bill Gates mijn piek, " "
+       "\TeX" is slecht- ser dan mu-  " " ziek.
 }
 
 texte = \lyrics{ 
        \property Lyrics . textStyle" =  "italic" 
 %      \property Lyrics . textStyle" =  "roman" 
-       Ah!4 vous dir- ai- je ma- man2
-       Ce4 qui cau- se mon tour- ment2
-       Pa-4 pa veut que je rai- son- ne
-       Comm' u- ne gran- de per- son- ne
-       Moi je dis que les bon- bons2
-       Va-4 lent mieux que la rai- son2
+       Ah! vous dir- ai- je ma- man " "
+       Ce qui cau- se mon tour-  " " ment
+       Pa- pa veut que je rai- son- ne
+       Comm' u- ne gran- de per- " " son- ne
+       Moi je dis que les bon- bons " "
+       Va- lent mieux que la rai-  " " son
 }
 
 texti = \lyrics{
        \property "Lyrics"."textStyle" =  "roman"
-       Twin-4 kle, twin- kle, lit- tle star,2
-       How4 I won- der what you are.2
-       Up4 a- bove the world so high,2
-       Like4 a dia- mond in the sky.2
-       Twin-4 kle, twin- kle, lit- tle star,2
-       How4 I won- der what you are!2
+       Twin- kle, twin- kle, lit- tle star, " "
+       How I won- der what you  " " are.
+       Up a- bove the world so high, " "
+       Like a dia- mond in the  " " sky. " "
+       Twin- kle, twin- kle, lit- tle star, " "
+       How I won- der what you  " " are!
 }
 
 textii = \lyrics{
-       When4 the bla- zing sun is gone,2
-       When4 he no- thing shines up- on,2
-       Then4 you show your lit- tle light,2
-       Twin-4 kle, twin- kle, all the night.2
-       Twin-4 kle, twin- kle, lit- tle star,2
-       How4 I won- der what you are!2
-       
+       When the bla- zing sun is gone, " "
+       When he no- thing shines up-  " " on,
+       Then you show your lit- tle light, " "
+       Twin- kle, twin- kle, all the  " " night. " "
+       Twin- kle, twin- kle, lit- tle star, " "
+       How I won- der what you  " " are!
 }
 
 textiii = \lyrics{
-       Then4 the tra- veler in the dark2
-       Thanks4 you for your ti- ny spark;2
-       He4 could not see which way8 to8 go,2
-       If4 you did not twin- kle so.2
-       Twin-4 kle, twin- kle, lit- tle star,2
-       How4 I won- der what you are!2
+       Then the tra- veler in the dark " "
+       Thanks you for your ti- ny  " " spark;
+       He could not see which way to go,
+       If you did not twin- kle  " " so. " "
+       Twin- kle, twin- kle, lit- tle star, " "
+       How I won- der what you  " " are!
 }
 
 \score{
        <
                \context Staff=i \repeat semi 2 < \global\melody >
-               \context Lyrics=top \context LyricVoice \repeat fold 2 {} \alternative { \tekst \texte }
+               \context Lyrics=top \context LyricVoice 
+                       \repeat fold 2 {} 
+                       \alternative { 
+                               \rhythm \melody \tekst 
+                               \rhythm \melody \texte 
+                       }
                \context GrandStaff <
                        \context Staff=ii \repeat semi 2 < \global\melody >
                        \context Staff=iii \repeat semi 2 < \global\accompany >
                >
-               \context Lyrics =bottom \context LyricVoice \repeat fold 3 {} 
-                       \alternative { \texti \textii \textiii }
+               \context Lyrics =bottom \context LyricVoice 
+                       \repeat fold 3 {} 
+                       \alternative { 
+                               \rhythm \melody \texti 
+                               \rhythm \melody \textii 
+                               \rhythm \melody \textiii 
+                       }
        >
        \paper{
                gourlay_maxmeasures = 14.0;
index 61a1b3e32f1015c2194a34754f84b8a1bea3eb84..b6bbb7e598a768c4c2e234edc524013cc962823b 100644 (file)
@@ -20,95 +20,3 @@ Atom::Atom(SCM s)
 {
   func_ = s;
 }
-
-
-#ifdef ATOM_SMOB
-int
-Atom::smob_display (SCM smob, SCM port, scm_print_state*)
-{
-  Atom* a =(Atom*) SCM_CDR(smob);
-  String i (a->off_.str ());
-  
-  scm_puts ("#<Atom ", port);
-  scm_puts (i.ch_C(), port);
-  gh_display (a->func_);
-  scm_puts (">", port);
-
-  /* non-zero means success */
-  return 1;
-}
-
-
-scm_sizet
-Atom::smob_free (SCM smob)
-{
-  Atom * a= (Atom*) SCM_CDR(smob);
-  delete a;
-  return sizeof (Atom);
-}
-
-SCM
-Atom::smob_mark (SCM smob) 
-{
-  Atom * a= (Atom*) SCM_CDR(smob);
-  scm_gc_mark (a->func_);
-  return a->font_;
-}
-
-long Atom::smob_tag_;
-
-void
-Atom::init_smob ()
-{
-  static scm_smobfuns type_rec;
-
-  type_rec.mark = smob_mark;
-  type_rec.free = smob_free;
-  type_rec.print = smob_display;
-  type_rec.equalp = 0;
-
-  smob_tag_ = scm_newsmob (&type_rec);
-}
-
-
-SCM
-Atom::make_smob () const
-{
-  SCM smob;
-  SCM_NEWCELL (smob);
-  SCM_SETCAR (smob, smob_tag_);
-  SCM_SETCDR (smob, this);
-  return smob;
-}
-
-SCM
-Atom::make_atom (SCM outputfunc)
-{
-  Atom * a= new Atom(outputfunc);
-  return a->make_smob ();
-}
-
-SCM
-Atom::copy_self () const
-{
-  return (new Atom (*this))->make_smob ();
-}
-
-bool
-Atom::Atom_b (SCM obj)
-{
-  return(SCM_NIMP(obj) && SCM_CAR(obj) == smob_tag_);
-}
-
-Atom* 
-Atom::atom_l (SCM a)
-{
-  assert (Atom_b (a));
-  return (Atom*) SCM_CDR(a);
-}
-
-
-ADD_GLOBAL_CTOR_WITHNAME(atomsmob, Atom::init_smob);
-#endif
-
-
index 717e2b0ea11d0786ea220e6cae35b335a159bddb..b815918423ba5ceb4266ad474dd1828cecaa34a9 100644 (file)
@@ -11,6 +11,7 @@
 
 Audio_element::Audio_element ()
 {
+  grace_b_ = false;
 }
 
 Audio_element::~Audio_element()
index f48f92179c2b23c16015742e32a75e75535120fa..2e4e98747ce00bdcc46f86178face423c62a6021 100644 (file)
@@ -24,9 +24,22 @@ Audio_note::Audio_note (Musical_pitch p, Moment m, int transposing_i)
 {
   pitch_ = p;
   length_mom_ = m;
+  tied_ = 0;
   transposing_i_ = transposing_i;
 }
 
+void
+Audio_note::tie_to (Audio_note* t)
+{
+  tied_ = t;
+  Audio_note* first = t;
+  while (first->tied_)
+    first = first->tied_;
+  first->length_mom_ += length_mom_;
+  length_mom_ = 0;
+}
+
+                   
 Audio_key::Audio_key (Key_def const& k)
 {
   key_ = k;
index acca44ad5a2a2e2c14a6fcdee86c97a451dea40b..f80d36ec651f5de949ea5fffa7347a2f05b52119 100644 (file)
@@ -311,6 +311,8 @@ Auto_beam_engraver::acknowledge_element (Score_element_info info)
                    {
                      shortest_mom_ = mom;
                      consider_end_and_begin ();
+                     if (!stem_l_arr_p_)
+                       return;
                    }
                  shortest_mom_ = mom;
                }
index e730763fcf20a843b37e8019853c1929924d0cb4..487514ff26d4d89e8308fc9af1162e3e43c50b96 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 1998--1999, 1999 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--1999 Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
 #include "chord-name-engraver.hh"
index f93e13e942990681a7a6d6d987de3bfa5654bc43..b291cf29d7f798aeb29710bacf40783bded491ae 100644 (file)
 #include "global-translator.hh"
 #include "warn.hh"
 
+Grace_iterator::~Grace_iterator () 
+{
+  //  child_iter_p_ = 0;
+}
+
 void
 Grace_iterator::construct_children () 
 {
@@ -41,7 +46,13 @@ Grace_iterator::do_process_and_next (Moment m)
 }
 
 Moment
-Grace_iterator::next_moment ()  const
+Grace_iterator::next_moment () const
+{
+  return 0;
+}
+
+Music*
+Grace_iterator::next_music_l ()
 {
   return 0;
 }
index 65d4cdef7f0095709f6295c9cbc861d902c42205..004c7a4923e21fd4abc57a97b88a116ab5c68fec 100644 (file)
@@ -45,13 +45,14 @@ Grace_performer_group::do_removal_processing ()
 }
 
 void
-Grace_performer_group::announce_element (Audio_element_info inf)
+Grace_performer_group::announce_element (Audio_element_info info)
 {
-  announce_info_arr_.push (inf);
+  announce_info_arr_.push (info);
   // do not propagate to top
-  announce_to_top_.push (inf);
+  announce_to_top_.push (info);
 
   //inf.elem_l_->set_elt_property (grace_scm_sym, SCM_BOOL_T);
+  info.elem_l_->grace_b_ = true;
 }
 
 void
index 15fc068f5e7a696e27f66a1843f197b10f941010..3c23232be77ff37ba7eb2c99c9c46283576d3b6d 100644 (file)
 #include "lily-proto.hh"
 #include "lily-guile.hh"
 
-//#define ATOM_SMOB
-
-#ifdef ATOM_SMOB
-
-/// a symbol which can be translated, and freely copied
-class Atom {
-  static long smob_tag_;
-
-  static SCM smob_mark (SCM);
-  static scm_sizet smob_free (SCM);
-  static int smob_display (SCM, SCM, scm_print_state*);
-public:
-  SCM make_smob () const;
-
-  Offset off_;
-  Atom (SCM s);
-
-  static SCM make_atom (SCM outputfunc);
-  SCM copy_self () const;
-  static Atom *atom_l (SCM);
-
-  /// Is #obj# a Foo?
-  static bool Atom_b(SCM obj);
-  static void init_smob ();
-  
-  SCM func_;
-  SCM font_;
-};
-
-#else
-
 class Atom {
 public:
   Atom (SCM s);
@@ -57,6 +26,5 @@ representing a musical notation symbol.  */
   Protected_scm font_;
 };
 
-#endif
 
 #endif
index 16955f40279c55b566d7291a71ed3724687010e3..c629bcd2b15c4b9a5a3c2c6c7ae9e630ada997a9 100644 (file)
@@ -19,6 +19,9 @@ public:
   virtual ~Audio_element ();
 
   void print () const;
+
+  // should we use a scm list?
+  bool grace_b_;
   
 protected:
   virtual void do_print () const;
index 5c4f8ebce6f79c6a5492be6d52b2c28a0ac397c5..1c0dac33d34486395fbe5df0b62b51c3ac3310bb 100644 (file)
@@ -57,9 +57,14 @@ class Audio_note : public Audio_item
 public:  
   Audio_note (Musical_pitch p, Moment m, int transposing_i = 0);
 
+  void tie_to (Audio_note*);
+
   Musical_pitch pitch_;
   Moment length_mom_;
+  Moment delayed_mom_;
+  Moment delayed_until_mom_;
   int transposing_i_;
+  Audio_note* tied_;
 };
 
 class Audio_text : public Audio_item
index 5d63bcf603df420967f7c3e3565f122fd75adfc9..77d5cd75b7d12c05963b68cffc4d22cce02c8537 100644 (file)
 class Grace_iterator : public Music_wrapper_iterator
 {
 public:
+  ~Grace_iterator ();
   virtual void construct_children () ;
   virtual void do_process_and_next (Moment);
   Moment next_moment () const;
+  Music* next_music_l ();
 };
 
 
index 029309d854956c6465e27389d1112ea1830fc17a..a4cbf4e77b00449a0ea126d66657b21892dc96a4 100644 (file)
@@ -198,6 +198,7 @@ struct Rational;
 struct Request;
 struct Request_column;
 struct Relative_octave_music;
+struct Re_rhythmed_music;
 struct Repeat_engraver;
 struct Repeated_music;
 struct Repeated_music_iterator;
index 58a7e34ccb98eb13c3ea8e33c8b9ce5827b3f9e0..1d1d96c369445ed88a12c77e7d58ab1070c52d99 100644 (file)
@@ -16,8 +16,9 @@
 #include "direction.hh"
 #include "box.hh"
 
-/** handy interface to symbol table
-    TODO: move this into GUILE?
+/**
+   handy interface to symbol table
+   TODO: move this into GUILE?
  */
 class Lookup
 {
@@ -38,14 +39,14 @@ public:
   Molecule fill (Box b) const;
   Molecule filledbox (Box b) const;  
   Molecule hairpin (Real width, Real height, bool decresc, bool continued) const;
-  Molecule tuplet_bracket (Real dy, Real dx, Real thick,Real interline, Direction dir) const;
+  Molecule tuplet_bracket (Real dy, Real dx, Real gap, Real thick,Real interline, Direction dir) const;
   Molecule rest (int, bool outside, String) const;
   Molecule accordion (SCM arg, Real interline_f) const;
   Molecule slur (Array<Offset> controls) const;
   Molecule text (String style, String text, Paper_def*) const;
   Molecule staff_brace (Real dy) const;
   Molecule staff_bracket (Real dy) const;
-  Molecule volta (Real w, Real h, Real il, bool last_b) const;
+  Molecule volta (Real h, Real w,  Real thick,  bool last_b) const;
   Molecule special_time_signature (String, int,int, Paper_def*) const;
   Molecule time_signature (int n,int d, Paper_def*) const;
 
index 6a64b0b93d2ac67131f9037dc9a8fe58ae9f75e0..f24322e107bc9aaec162bac4d84e267d5105d0f5 100644 (file)
@@ -134,12 +134,11 @@ public:
 /**
   Turn a note off 
  */
-class Midi_note_off : public Midi_item
+class Midi_note_off : public Midi_note
 {
 public:
   Midi_note_off (Midi_note*); 
 
-  int pitch_i () const;
   virtual String str () const;
 
   Midi_note* on_l_;
index 20d1f95ff93f756f0b2b8c1b717e2fb06eff0229..f732324ece165c5e4c0528a43490702d0a254c00 100644 (file)
@@ -13,7 +13,7 @@
 #include "lily-proto.hh"
 #include "moment.hh"
 
-struct Midi_note_event : PQueue_ent<Moment, Midi_note_off*>
+struct Midi_note_event : PQueue_ent<Moment, Midi_note*>
 {
   bool ignore_b_;
   Midi_note_event();
index c6a8e9a7d8fd1e9efbdb8ea38c9e06148179b9c4..9d2a68f68903b36faba3c3053dc7f8e51edfa1e9 100644 (file)
@@ -74,6 +74,9 @@ public:
   ///  Find the next interesting point in time.
   virtual Moment next_moment() const;
 
+  ///  Return next Music item
+  virtual Music* next_music_l ();
+
   ///Are we finished with this piece of music?
   virtual bool ok() const;
 
index 341b103608ed833e7cbbd50556a059bc1fbe7d0c..7385230fcf3819de857eeef44575e9479e0b9ec1 100644 (file)
@@ -21,6 +21,7 @@ public:
 
   virtual void construct_children ();
   virtual Moment next_moment () const;
+  virtual Music* next_music_l ();
   virtual bool ok () const;
 
 protected:
index 5f40c5dc6b2d2ff6ca1cd4da353c3a3255c3790d..e00d9633ecb3afebb2a4e69a274deab239833912 100644 (file)
@@ -19,6 +19,7 @@ class Music_list : public Cons_list<Music>
 {
 public:
   Musical_pitch do_relative_octave (Musical_pitch, bool); 
+  Music_iterator* do_rhythm (Music_iterator*); 
   void add_music (Music*);
   Music_list (Music_list const&);
   Music_list ();
@@ -38,6 +39,7 @@ public:
   
   VIRTUAL_COPY_CONS(Music);
   Musical_pitch do_relative_octave (Musical_pitch p, bool b);
+  Music_iterator* do_rhythm (Music_iterator*);
   virtual void transpose (Musical_pitch );
   virtual void compress (Moment);
   void add_music (Music *music_p);
@@ -48,6 +50,7 @@ public:
   
 protected:
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
   virtual void do_print() const;
 };
 
@@ -62,6 +65,7 @@ public:
   
   Simultaneous_music(Music_list *);
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
   virtual Moment length_mom () const;
 };
 
@@ -76,6 +80,7 @@ public:
   VIRTUAL_COPY_CONS(Music);
   
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
   Request_chord();
 };
 
index f691270056e24374d377c4cec4cae9f47f2e89c6..deee35091331e7d1518e23e63a213bb647b2d6b6 100644 (file)
@@ -26,6 +26,7 @@ public:
 
   virtual void construct_children  () ;
   virtual Moment next_moment () const;
+  virtual Music* next_music_l ();
   virtual bool ok () const;
 
 protected:
index f01a39ff9aa055caa4e57f68b5c40fae02f8921b..7e87040acf417e6f214bff9f3ae8da4db47f5a03 100644 (file)
@@ -33,6 +33,7 @@ public:
   virtual Moment length_mom () const;
   virtual ~Music_wrapper ();
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
   virtual void compress (Moment);
 };
 
index 0bd1e966d07330c1a066670649d844c5a3be10b5..30ae02fddb30a2f5510993f5846760c9ec024f39 100644 (file)
@@ -33,6 +33,7 @@ public:
     
 
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
 
   /// The duration of this piece of music
   virtual Moment length_mom () const;
index 520797808765d6275556132295b96046c0c22938..ddd55c75171b247bd759f84f4342badeff8d5ac3 100644 (file)
@@ -15,6 +15,7 @@
 #include "lily-proto.hh"
 #include "lily-proto.hh"
 #include "duration.hh"
+#include "musical-pitch.hh"
 #include "string.hh"
 #include "array.hh"
 #include "input.hh"
@@ -36,6 +37,7 @@ public:
 
 public:
   Duration default_duration_;
+  Musical_pitch default_pitch_;
   Scope *default_header_p_;
   bool first_b_;
   int fatal_error_i_;
@@ -69,6 +71,7 @@ private:
   Simultaneous_music* get_word_element (String, Duration*);
   String notename_str (Melodic_req* melodic);
   void set_last_duration (Duration const *);
+  void set_last_pitch (Musical_pitch const *);
   friend int yyparse (void*);
 };
 
index 5cf2ff31669a6324cb2de84e764d90f98cd0430a..0f4caed5bd713e8a29b35ac390bfff258ac73013 100644 (file)
@@ -61,6 +61,7 @@ public:
   Music_sequence * alternatives_p_;
 
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
 
   /// The duration of this piece of music
   virtual Moment length_mom () const;
index bfd49375c133f4aead8cbb4b21e67d6a227f3143..0536786d8145b504ba732393404b61ad442bc380 100644 (file)
@@ -25,10 +25,13 @@ protected:
   virtual bool do_try_music (Music *req_l) ;
   virtual void do_print () const;
   virtual void do_pre_move_processing ();
+  virtual void process_acknowledged ();
+  Global_translator* global_translator_l ();
 
 private:
   Array<Note_req*> note_req_l_arr_;
   Array<Audio_note*> note_p_arr_;
+  Array<Audio_note*> delayed_p_arr_;
 };
 
 #endif // NOTE_PERFORMER_HH
index 2d7cff937bb2d318458f0e91361c492386e18de7..179362c59349efd081c803b12edcd39985a1bd24 100644 (file)
@@ -22,6 +22,7 @@ public:
   
   VIRTUAL_COPY_CONS(Music);
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
 };
 
 
index bbc1a522d910ed2bf0015bf59e53967a3ce8c975..0b35c447d62c6a3d4107d141029ee607337f2822 100644 (file)
@@ -22,6 +22,7 @@ class Request_chord_iterator : public Music_iterator {
    */
   Moment elt_length_mom_;
   bool last_b_;
+  Cons<Music>* cursor_;
 
 public:
   Request_chord_iterator ();
@@ -30,6 +31,7 @@ public:
 protected:
   virtual void do_process_and_next (Moment);
   virtual Moment next_moment() const;
+  virtual Music* next_music_l ();
   virtual void construct_children();
   virtual bool ok() const;
   virtual void do_print() const;
index f4810c836ca546a352fc0aeb5090ecec9d4b1c72..bfab2b805fe1f44205192fdb199363848467521a 100644 (file)
@@ -23,6 +23,7 @@ public:
 
   virtual void construct_children ();
   virtual Moment next_moment () const;
+  virtual Music* next_music_l ();
   virtual bool ok () const;
 
 protected:
index f6c1e130217a192a03d886d9b98789c02c229bbc..ce1314a78dfc2122cf6302a22a2c94498c103e1e 100644 (file)
@@ -23,6 +23,7 @@ public:
   
   VIRTUAL_COPY_CONS(Music);
   virtual Musical_pitch to_relative_octave (Musical_pitch);
+  virtual Music_iterator* to_rhythm (Music_iterator*);
 };
 
 #endif /* TRANSPOSED_MUSIC_HH */
index 0aedf8c2190e593e77b0c0b87d126d13254310cd..961a4b37c838a35cc718e15b23e86706789d7c80 100644 (file)
@@ -517,12 +517,13 @@ Lookup::hairpin (Real width, Real height, bool decresc, bool continued) const
 }
 
 Molecule
-Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real interline_f, Direction dir) const
+Lookup::tuplet_bracket (Real dy , Real dx, Real thick, Real gap, Real interline_f, Direction dir) const
 {
   Molecule m;
 
   Atom at  (gh_list(tuplet_scm_sym,
-                   gh_double2scm (interline_f), 
+                   gh_double2scm (interline_f),
+                   gh_double2scm (gap),
                    gh_double2scm (dx),
                    gh_double2scm (dy),
                    gh_double2scm (thick),
@@ -575,17 +576,18 @@ Lookup::staff_bracket (Real y) const
 }
 
 Molecule
-Lookup::volta (Real w, Real thick, Real interline_f, bool last_b) const
+Lookup::volta (Real h, Real w, Real thick, bool last_b) const
 {
   Molecule m; 
 
   Atom at  (gh_list (volta_scm_sym,
+                    gh_double2scm (h),
                     gh_double2scm (w),
                     gh_double2scm (thick),
                     gh_int2scm (last_b),
                     SCM_UNDEFINED));
 
-  m.dim_[Y_AXIS] = Interval (-interline_f, interline_f);
+  m.dim_[Y_AXIS] = Interval (- h/2, h/2);
   m.dim_[X_AXIS] = Interval (0, w);
 
   m.add_atom (&at);
index b52ca3cf16db5ba645fa1bfa84dbf929d76a0b68..703a66ff21f0a624b610a1b8cac92a44286cfcd8 100644 (file)
@@ -431,6 +431,7 @@ Midi_note::str () const
 }
 
 Midi_note_off::Midi_note_off (Midi_note* n)
+  : Midi_note (n->audio_l_)
 {
   on_l_ = n;
   channel_i_ = n->channel_i_;
@@ -445,12 +446,6 @@ Midi_note_off::Midi_note_off (Midi_note* n)
   i += 0x10;
 }
 
-int
-Midi_note_off::pitch_i () const
-{
-  return on_l_->pitch_i ();
-}
-
 String
 Midi_note_off::str () const
 {
index c0afd12f1504ba410e6cf03ca740e6825956481c..48c408aaa76a2c4309e0da79396db896e5328745 100644 (file)
@@ -66,7 +66,7 @@ Midi_walker::do_start_note (Midi_note* note_p)
   e.val = new Midi_note_off (note_p);
   e.key = stop_mom;
   stop_note_queue.insert (e);
-  
+      
   output_event (ptr->audio_column_l_->at_mom (), note_p);
 }
 
@@ -86,7 +86,7 @@ Midi_walker::do_stop_notes (Moment max_mom)
        }
       
       Moment stop_mom = e.key;
-      Midi_note_off* note_p = e.val;
+      Midi_note* note_p = e.val;
        
       output_event (stop_mom, note_p);
     }
index 5c604e317644c65d121e1da3a4cde8b8bee81f6e..41d8018b05e49a67f9b4558c81ab9b0b6279af3e 100644 (file)
@@ -3,7 +3,7 @@
   
   source file of the GNU LilyPond music typesetter
   
-  (c) 1998--1999, 1999 Jan Nieuwenhuizen <janneke@gnu.org>
+  (c) 1998--1999 Jan Nieuwenhuizen <janneke@gnu.org>
   
  */
 
@@ -59,7 +59,7 @@ Multi_measure_rest::do_brew_molecule_p () const
   Real x_off = 0.0;
 
 
-  Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS];
+  //  Dimension_cache * col_ref = spanned_drul_[LEFT]->column_l ()->dim_cache_[X_AXIS];
 
   Real rx  = spanned_drul_[LEFT]->absolute_coordinate (X_AXIS);
   /*
@@ -150,48 +150,35 @@ Multi_measure_rest::get_rods () const
   if (!(spanned_drul_[LEFT] && spanned_drul_[RIGHT]))
     {
       programming_error ("Multi_measure_rest::get_rods (): I am not spanned!");
-       return a;
+      return a;
     }
-      Rod r;
-      r.item_l_drul_ = spanned_drul_;
-      r.distance_f_ = paper_l ()->get_var ("mmrest_x_minimum");
-      a.push (r);
 
+  Item * l = spanned_drul_[LEFT]->column_l ();
+  Item * r = spanned_drul_[RIGHT]->column_l ();
+  Item * lb = l->find_prebroken_piece (RIGHT);
+  Item * rb = r->find_prebroken_piece (LEFT);      
   
-  /*
-    also set distances in case the left or right ending of the rest is
-    a broken column. This is very common: it happens if the rest is in
-    the beginning of the line, or at the end.
-
-    TODO: merge this code with other discretionary handling code.
-
-    TODO: calc  mmrest_x_minimum (see brew_molecule_p ())
-  */
-
-  Drul_array<Item*> discretionaries;
-  Direction d = LEFT;
-  do
+  Item* combinations[4][2]={{l,r}, {lb,r}, {l,rb},{lb,rb}};
+  for (int i=0; i < 4; i++)
     {
-      Item *i = r.item_l_drul_[d]->find_prebroken_piece (-d);
-      discretionaries[d] = i;
-      if (i)
-      {
-        Rod k (r);
-
-        k.item_l_drul_[d] = i;
-        a.push (k);
-      }
-    }
-  while ((flip (&d))!= LEFT);
-
-  if (discretionaries[LEFT] && discretionaries[RIGHT])
-    {
-      Rod k(r);
-      k.item_l_drul_ = discretionaries;
-      a.push (k);
-    }
+      Item * l =  combinations[i][0];
+      Item *r = combinations[i][1];
 
+      if (!l || !r)
+       continue;
 
+      Rod rod;
+      rod.item_l_drul_[LEFT] = l;
+      rod.item_l_drul_[RIGHT] = r;
 
+       /*
+         should do something more advanced.
+        */
+      rod.distance_f_ = l->extent (X_AXIS)[BIGGER] - r->extent (X_AXIS)[SMALLER]
+       + paper_l ()->get_var ("mmrest_x_minimum");
+  
+      a.push (rod);
+    }
+  
   return a;
 }
index e975d300a9a10184bb079553c315e1da1e977e34..b3e99c8f63c8a57a123bd0086c49d4315937f299 100644 (file)
@@ -90,6 +90,11 @@ Music_iterator::next_moment() const
   return 0;
 }
 
+Music*
+Music_iterator::next_music_l ()
+{
+  return 0;
+}
 
 void
 Music_iterator::process_and_next (Moment m)
index d5e4bbff61fe76eeccc0817104cee5521205de5e..2be250faea8762acabd28fe62911c3687d773169 100644 (file)
@@ -38,6 +38,12 @@ Music_list_iterator::next_moment () const
   return 0;
 }
 
+Music*
+Music_list_iterator::next_music_l ()
+{
+  return 0;
+}
+
 bool
 Music_list_iterator::ok () const
 {
index 36087d65c4cd31f2acbd9ecb4bab785dead207fb..3b9c830fbaac781242709085aa0b4244d0740ed0 100644 (file)
@@ -7,9 +7,11 @@
 */
 
 #include "music-list.hh"
+#include "music-wrapper.hh"
 #include "musical-pitch.hh"
 #include "request.hh"
 #include "musical-request.hh"
+#include "music-iterator.hh"
 #include "main.hh"
 #include "killing-cons.tcc"
 
@@ -44,19 +46,30 @@ Sequential_music::length_mom () const
   return cumulative_length ();
 }
 
-
 Musical_pitch
 Simultaneous_music::to_relative_octave (Musical_pitch p)
 {
   return do_relative_octave (p, true);
 }
 
+Music_iterator*
+Simultaneous_music::to_rhythm (Music_iterator* r)
+{
+  return do_rhythm (r);
+}
+
 Musical_pitch
 Music_sequence::do_relative_octave (Musical_pitch p, bool b)
 {
   return music_p_list_p_->do_relative_octave (p, b);  
 }
 
+Music_iterator*
+Music_sequence::do_rhythm (Music_iterator* r)
+{
+  return music_p_list_p_->do_rhythm (r);
+}
+
 Musical_pitch 
 Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
 {
@@ -75,6 +88,15 @@ Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
   return retval;
 }
 
+Music_iterator*
+Music_list::do_rhythm (Music_iterator* r)
+{
+  for (Cons<Music> *i = head_; i ; i = i->next_)
+    {
+      r = i->car_->to_rhythm (r);
+    }
+  return r;
+}
 
 Music_list::Music_list (Music_list const &s)
   : Cons_list<Music> (s)
@@ -114,6 +136,34 @@ Request_chord::to_relative_octave (Musical_pitch last)
   return last;
 }
 
+Music_iterator*
+Request_chord::to_rhythm (Music_iterator* it)
+{
+  for (Cons<Music>* i = music_p_list_p_->head_; i ; i = i->next_)
+    {
+      if (Rhythmic_req* r= dynamic_cast <Rhythmic_req*> (i->car_))
+       {
+         for (Music*m = it->next_music_l (); m; m = it->next_music_l ())
+           {
+#if 0
+             // is it sane to assume we don't want rests on lyrics/in rhythm?
+             if (dynamic_cast <Rest_req*> (r)
+                 || dynamic_cast <Multi_measure_rest_req*> (r)
+                 || dynamic_cast <Skip_req*> (r))
+                 {
+                   continue;
+                 }
+#endif
+             if (Rhythmic_req* d= dynamic_cast <Rhythmic_req*> (m))
+               {
+                 r->duration_ = d->duration_;
+                 return it;
+               }
+           }
+       }
+    }
+  return it;
+}
 
 Music_list::Music_list ()
 {
index 60e6459a20f7e850ce1a4a4ca5186c239ff91694..6b074c5b16367fa4a6ec28e7147aba7d4b8d8363 100644 (file)
@@ -63,6 +63,11 @@ Music_sequence::to_relative_octave (Musical_pitch p)
   return do_relative_octave (p, false);
 }
 
+Music_iterator*
+Music_sequence::to_rhythm (Music_iterator* r)
+{
+  return do_rhythm (r);
+}
 
 Moment
 Music_sequence::maximum_length () const
index f25dd82f3969ba8a739b1411099b74921c660c06..03fefdd44e90269c69b986a16a206b7ce2dd2de8 100644 (file)
@@ -56,3 +56,9 @@ Music_wrapper_iterator::next_moment () const
   return child_iter_p_->next_moment ();
 }
 
+Music*
+Music_wrapper_iterator::next_music_l ()
+{
+  return child_iter_p_->next_music_l ();
+}
+
index dff9d1fc8776d99f303b4edc2a59eb3070820666..4512e26fc2033bbb0b9ff8df701cc871dbc95ed1 100644 (file)
@@ -50,13 +50,18 @@ Music_wrapper::length_mom () const
   return element_p_->length_mom ();
 }
 
-
 Musical_pitch
 Music_wrapper::to_relative_octave (Musical_pitch p)
 {
   return element_p_->to_relative_octave (p);
 }
 
+Music_iterator*
+Music_wrapper::to_rhythm (Music_iterator* r)
+{
+  return element_p_->to_rhythm (r);
+}
+
 Music*
 Music_wrapper::element_l () const
 {
index c7bd75a435ecec314b057217db7210ab4ee8c09d..1d137e4524233a4160f2fcbf7705c9376c140e5c 100644 (file)
@@ -54,6 +54,12 @@ Music::to_relative_octave (Musical_pitch m)
   return m;
 }
 
+Music_iterator*
+Music::to_rhythm (Music_iterator* r)
+{
+  return r;
+}
+
 void
 Music::transpose (Musical_pitch )
 {
index d0521d2240521b015420ed6ac6e7d04f307ad521..1da40f6b55c38e25b3d6499740234a2962449a8a 100644 (file)
@@ -60,6 +60,7 @@ static Keyword_ent the_key_tab[]={
   {"remove", REMOVE},
   {"repeat", REPEAT},
   {"repetitions", REPETITIONS},
+  {"rhythm", RHYTHM},
   {"scm", SCM_T},
   {"scmfile", SCMFILE},
   {"score", SCORE},
index b787e2a8d528e533b311522084b2787d6facace4..46f09be71109b2950376e7a4f8ca50c7030e0ed8 100644 (file)
@@ -28,6 +28,7 @@ My_lily_parser::My_lily_parser (Sources * source_l)
   source_l_ = source_l;
   lexer_p_ = 0;
   default_duration_.durlog_i_ = 2;
+  default_pitch_ = Musical_pitch (5*7, 0);
   error_level_i_ = 0;
 
   fatal_error_i_ = 0;
@@ -95,14 +96,18 @@ My_lily_parser::parser_error (String s)
   exit_status_i_ = 1;
 }
 
-
-
 void
 My_lily_parser::set_last_duration (Duration const *d)
 {
   default_duration_ = *d;
 }
 
+void
+My_lily_parser::set_last_pitch (Musical_pitch const* p)
+{
+  default_pitch_ = *p;
+}
+
 // junk me
 Simultaneous_music*
 My_lily_parser::get_word_element (String s, Duration * duration_p)
index 5542c8e693a2919c63038e1078c834f4c1ca5ea9..1f88de4aadaf59dd8e42689887810ea079a37bab 100644 (file)
@@ -9,6 +9,8 @@
 #include "note-performer.hh"
 #include "musical-request.hh"
 #include "audio-item.hh"
+#include "audio-column.hh"
+#include "global-translator.hh"
 #include "debug.hh"
 
 
@@ -39,7 +41,7 @@ Note_performer::do_process_requests ()
       if (!prop.empty_b () && prop.isnum_b ()) 
        transposing_i = prop;
 
-      while(note_req_l_arr_.size ())
+      while (note_req_l_arr_.size ())
        {
          Note_req* n = note_req_l_arr_.pop ();
          Audio_note* p = new Audio_note (n->pitch_, n->length_mom (), transposing_i);
@@ -50,15 +52,65 @@ Note_performer::do_process_requests ()
     }
 }
 
+void
+Note_performer::process_acknowledged ()
+{
+}
+
+Global_translator*
+Note_performer::global_translator_l ()
+{
+  Translator *t = this;
+  Global_translator *global_l =0;
+  do
+    {
+      t = t->daddy_trans_l_ ;
+      global_l = dynamic_cast<Global_translator*> (t);
+    }
+  while (!global_l);
+
+  return global_l;
+}
+
+
 void
 Note_performer::do_pre_move_processing ()
 {
+
+  // why don't grace notes show up here?
+  // --> grace notes effectively do not get delayed
+  Global_translator* global_l = global_translator_l ();
+  for (int i=0; i < note_p_arr_.size (); i++)
+    {
+      Audio_note* n = note_p_arr_[i];
+      if (Moment m= n->delayed_until_mom_)
+       {
+         global_l->add_moment_to_process (m);
+         delayed_p_arr_.push (n);
+         note_p_arr_[i] = 0;
+         note_p_arr_.del (i);
+         i--;
+       }
+    }
+
+  Moment now = now_mom ();
   for (int i=0; i < note_p_arr_.size (); i++)
     {
       play_element (note_p_arr_[i]);
     }
   note_p_arr_.clear ();
   note_req_l_arr_.clear ();
+  for (int i=0; i < delayed_p_arr_.size (); i++)
+    {
+      Audio_note* n = delayed_p_arr_[i];
+      if (n->delayed_until_mom_ <= now)
+       {
+         play_element (n);
+         delayed_p_arr_[i] = 0;
+         delayed_p_arr_.del (i);
+         i--;
+       }
+    }
 }
  
 bool
index 51a26d08d785249fd0444977dc5bdc9c884710ac..7973a73d6baa8f949bef84dedfc351476d8d0b3f 100644 (file)
@@ -49,6 +49,7 @@
 #include "mudela-version.hh"
 #include "scope.hh"
 #include "relative-music.hh"
+#include "re-rhythmed-music.hh"
 #include "transposed-music.hh"
 #include "time-scaled-music.hh"
 #include "new-repeated-music.hh"
@@ -174,6 +175,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token REMOVE
 %token REPEAT
 %token REPETITIONS
+%token RHYTHM
 %token SCM_T
 %token SCMFILE
 %token SCORE
@@ -193,7 +195,7 @@ yylex (YYSTYPE *s,  void * v_l)
 /* escaped */
 %token E_EXCLAMATION E_SMALLER E_BIGGER E_CHAR
 
-%type <i>      dots exclamations questions
+%type <i>      exclamations questions
 %token <i>     DIGIT
 %token <pitch> NOTENAME_PITCH
 %token <pitch> TONICNAME_PITCH
@@ -228,7 +230,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <i>      script_dir
 %type <i>      optional_modality
 %type <id>     identifier_init  
-%type <duration> steno_duration notemode_duration
+%type <duration> steno_duration optional_notemode_duration
 %type <duration> entered_notemode_duration explicit_duration
 %type <intvec>  int_list
 %type <reqvec>  pre_requests post_requests
@@ -237,14 +239,15 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <pitch>   steno_tonic_pitch
 
 %type <pitch_arr>      pitch_list
-%type <music>  chord notemode_chord
+%type <music>  chord
 %type <pitch_arr>      chord_additions chord_subtractions chord_notes
-%type <pitch>  chord_addsub chord_note chord_inversion notemode_chord_inversion
+%type <pitch>  chord_addsub chord_note chord_inversion
 %type <midi>   midi_block midi_body
 %type <duration>       duration_length
 
 %type <scalar>  scalar
-%type <music>  Music  relative_music Sequential_music Simultaneous_music Music_sequence
+%type <music>  Music Sequential_music Simultaneous_music Music_sequence
+%type <music>  relative_music re_rhythmed_music
 %type <music>  property_def translator_change
 %type <music_list> Music_list
 %type <paper>  paper_block paper_def_body
@@ -265,7 +268,6 @@ yylex (YYSTYPE *s,  void * v_l)
 
 
 
-
 %left '-' '+'
 %left '*' '/'
 %left UNARY_MINUS
@@ -556,11 +558,6 @@ paper_block:
        ;
 
 
-optional_dot:
-       /* empty */
-       | '.'
-       ;
-
 paper_def_body:
        /* empty */                     {
                Paper_def *p = THIS->default_paper_p ();
@@ -665,6 +662,9 @@ midi_body: /* empty */              {
        }
        | MIDI_IDENTIFIER       {
                $$ = $1-> access_content_Midi_def (true);
+       }
+       | midi_body assignment semicolon {
+
        }
        | midi_body translator_spec_block       {
                $$-> assign_translator ($2);
@@ -828,6 +828,7 @@ Composite_music:
                  THIS->lexer_p_->pop_state ();
        }
        | relative_music        { $$ = $1; }
+       | re_rhythmed_music     { $$ = $1; }
        ;
 
 relative_music:
@@ -837,6 +838,12 @@ relative_music:
        }
        ;
 
+re_rhythmed_music:
+       RHYTHM Music Music {
+               $$ = new Re_rhythmed_music ($3, $2);
+       }
+       ;
+
 translator_change:
        TRANSLATOR STRING '=' STRING  {
                Change_translator * t = new Change_translator;
@@ -851,7 +858,7 @@ translator_change:
        ;
 
 property_def:
-       PROPERTY STRING '.' STRING '=' scalar   {
+       PROPERTY STRING '.' STRING '=' scalar {
                Translation_property *t = new Translation_property;
 
                t-> var_str_ = *$4;
@@ -1138,8 +1145,14 @@ explicit_musical_pitch:
        ;
 
 musical_pitch:
-       steno_musical_pitch
-       | explicit_musical_pitch
+       steno_musical_pitch {
+               $$ = $1;
+               THIS->set_last_pitch ($1);
+       }
+       | explicit_musical_pitch {
+               $$ = $1;
+               THIS->set_last_pitch ($1);
+       }
        ;
 
 explicit_duration:
@@ -1289,18 +1302,16 @@ duration_length:
        ;
 
 entered_notemode_duration:
-       dots            {
-               $$ = new Duration (THIS->default_duration_);
-               if ($1)
-                       $$->dots_i_  = $1;
-       }
-       | steno_duration        {
+       steno_duration  {
                THIS->set_last_duration ($1);
        }
        ;
 
-notemode_duration:
-       entered_notemode_duration {
+optional_notemode_duration:
+       {
+               $$ = new Duration (THIS->default_duration_);
+       }
+       | entered_notemode_duration {
                $$ = $1;
        }
        ;
@@ -1338,7 +1349,7 @@ abbrev_type:
 
 
 simple_element:
-       musical_pitch exclamations questions notemode_duration  {
+       musical_pitch exclamations questions optional_notemode_duration {
                if (!THIS->lexer_p_->note_state_b ())
                        THIS->parser_error (_ ("have to be in Note mode for notes"));
 
@@ -1360,11 +1371,42 @@ simple_element:
 
                $$ = v;
        }
-       | RESTNAME notemode_duration            {
+       /*
+       This rhythm option introduces a lot of shift/reduce conflicts;
+       ie, for every optional_notemode_duration.
+       However, we always want the default behaviour, which is to shift:
+       if an optional_notemode_duration is allowed, a following duration
+       is to be taken as this default duration.  Thus
+
+          c4 c 8 4
+
+       are three notes, ie: c4 c8 c4.
+       Parsing whitespace is a snaky thing to do.
+       * /
+       | entered_notemode_duration {
+               if (!THIS->lexer_p_->note_state_b ())
+                       THIS->parser_error (_ ("have to be in Note mode for notes"));
+
+               Note_req *n = new Note_req;
+               
+               n->pitch_ = THIS->default_pitch_;
+               n->duration_ = *$1;
+               delete $1;
+
+               Simultaneous_music*v = new Request_chord;
+               v->set_spot (THIS->here_input ());
+               n->set_spot (THIS->here_input ());
+
+               v->add_music (n);
+
+               $$ = v;
+       }
+*/
+       | RESTNAME optional_notemode_duration           {
                $$ = THIS->get_rest_element (*$1, $2);
                delete $1;  // delete notename
        }
-       | MEASURES notemode_duration    {
+       | MEASURES optional_notemode_duration   {
                Multi_measure_rest_req* m = new Multi_measure_rest_req;
                m->duration_ = *$2;
                delete $2;
@@ -1374,7 +1416,7 @@ simple_element:
                velt_p->add_music (m);
                $$ = velt_p;
        }
-       | REPETITIONS notemode_duration         {
+       | REPETITIONS optional_notemode_duration        {
                Repetitions_req* r = new Repetitions_req;
                r->duration_ = *$2;
                delete $2;
@@ -1384,7 +1426,7 @@ simple_element:
                velt_p->add_music (r);
                $$ = velt_p;
        }
-       | STRING notemode_duration                      {
+       | STRING optional_notemode_duration     {
                if (!THIS->lexer_p_->lyric_state_b ())
                        THIS->parser_error (_ ("have to be in Lyric mode for lyrics"));
                $$ = THIS->get_word_element (*$1, $2);
@@ -1395,24 +1437,13 @@ simple_element:
                        THIS->parser_error (_ ("have to be in Chord mode for chords"));
                $$ = $1;
        }
-       | '@' notemode_chord '@' {
-               if (!THIS->lexer_p_->note_state_b ())
-                       THIS->parser_error (_ ("have to be in Note mode for @chords"));
-               $$ = $2;
-       }
        ;
 
 chord:
-       steno_tonic_pitch notemode_duration chord_additions chord_subtractions chord_inversion {
+       steno_tonic_pitch optional_notemode_duration chord_additions chord_subtractions chord_inversion {
                 $$ = THIS->get_chord (*$1, $3, $4, $5, *$2);
         };
 
-notemode_chord:
-       steno_musical_pitch notemode_duration chord_additions chord_subtractions notemode_chord_inversion {
-                $$ = THIS->get_chord (*$1, $3, $4, $5, *$2);
-        };
-
-
 chord_additions: 
        {
                $$ = new Array<Musical_pitch>;
@@ -1423,12 +1454,13 @@ chord_additions:
        ;
 
 chord_notes:
-       {
+       chord_addsub {
                $$ = new Array<Musical_pitch>;
+               $$->push (*$1);
        }
-       | chord_notes chord_addsub {
+       | chord_notes '.' chord_addsub {
                $$ = $1;
-               $$->push (*$2);
+               $$->push (*$3);
        }
        ;
 
@@ -1448,8 +1480,8 @@ chord_subtractions:
 
 
 chord_addsub:
-       chord_note optional_dot
-       | CHORDMODIFIER_PITCH optional_dot
+       chord_note
+       | CHORDMODIFIER_PITCH
        ;
 
 chord_inversion:
@@ -1461,15 +1493,6 @@ chord_inversion:
        }
        ;
 
-notemode_chord_inversion:
-       {
-               $$ = 0;
-       }
-       | '/' steno_musical_pitch {
-               $$ = $2
-       }
-       ;
-
 chord_note:
        unsigned {
                $$ = new Musical_pitch;
@@ -1548,15 +1571,6 @@ string:
        ;
 
 
-
-
-dots:
-                       { $$ = 0; }
-       | dots '.'      { $$ ++; }
-       ;
-
-
-
 exclamations:
                { $$ = 0; }
        | exclamations '!'      { $$ ++; }
index 7f66ab6a6b8b8a51d5ecf8d91da5c19cf8ad0643..dc0fc9906c006e15bc69658ce65c6fe4693235b7 100644 (file)
@@ -16,11 +16,16 @@ Relative_octave_music::to_relative_octave (Musical_pitch)
   return last_pitch_;
 }
 
+Music_iterator*
+Relative_octave_music::to_rhythm (Music_iterator* r)
+{
+  return element_l ()->to_rhythm (r);
+}
 
 Relative_octave_music::Relative_octave_music(Music*p,Musical_pitch def)
   : Music_wrapper (p)
 {
-  last_pitch_ = element_l()->to_relative_octave (def);
+  last_pitch_ = element_l ()->to_relative_octave (def);
 }
 
 void
index d00a93210718b6d931fcdf93166e0846b8a027eb..6436be9bfa7adaea4d34997cece84660e3866b0e 100644 (file)
@@ -66,6 +66,17 @@ Repeated_music::to_relative_octave (Musical_pitch p)
   return p;
 }
 
+Music_iterator*
+Repeated_music::to_rhythm (Music_iterator* r)
+{
+  if (repeat_body_p_)
+    r = repeat_body_p_->to_rhythm (r);
+
+  if (alternatives_p_)
+    r = alternatives_p_->do_rhythm (r);
+  return r;
+}
+
 
 void
 Repeated_music::transpose (Musical_pitch p)
index ca103ee062132c131563a3ef012a7c02301d67a1..9cbf798a4b3fa71b6995ddd86c216c75cb6d4966 100644 (file)
@@ -30,6 +30,8 @@ Request_chord_iterator::elt_l () const
 Request_chord_iterator::Request_chord_iterator ()
 {
   last_b_ = false;
+  //  cursor_ = elt_l ()->music_p_list_p_->head_;
+  cursor_ = 0;
 }
 
 
@@ -39,8 +41,6 @@ Request_chord_iterator::ok() const
   return (elt_length_mom_ && !last_b_) || first_b_;
 }
 
-
-
 Moment
 Request_chord_iterator::next_moment() const
 {
@@ -50,6 +50,25 @@ Request_chord_iterator::next_moment() const
   return m;
 }
 
+Music*
+Request_chord_iterator::next_music_l ()
+{
+  if (first_b_)
+    {
+      cursor_ = elt_l ()->music_p_list_p_->head_;
+      first_b_ = false;
+    }
+  else
+    {
+      if (cursor_)
+       cursor_ = cursor_->next_;
+    }
+  if (cursor_)
+    return cursor_->car_;
+  else
+    return 0;
+}
+
 void
 Request_chord_iterator::do_print() const
 {
index a50a0de9a5b7e4aeea2b4b301b7e5adcf5d197d2..a6602b7709da149979392255fb0871179d7d0526 100644 (file)
@@ -127,6 +127,40 @@ Sequential_music_iterator::next_moment() const
   return iter_p_->next_moment() + here_mom_;
 }
 
+Music*
+Sequential_music_iterator::next_music_l ()
+{
+  if (!iter_p_)
+    return 0;
+
+  while (1) 
+    {
+      if (Music* m = iter_p_->next_music_l ())
+       {
+         return m;
+       }
+      else
+       {
+         // urg FIXME: grace-iterator::next_music_l () fools me!
+         if (dynamic_cast<Grace_iterator*> (iter_p_))
+           iter_p_ = 0;
+         leave_element ();
+         
+         if (cursor_)
+           {
+             start_next_element ();
+             set_sequential_music_translator ();
+           }
+         else 
+           {
+             delete iter_p_;
+             iter_p_ = 0;
+             return 0;
+           }
+       }
+    }
+}
+
 bool
 Sequential_music_iterator::ok() const
 {
index 0d7d5a0257dbe76a66dfbb0ba9383b357c1c196e..f33e9efaac2fa1fa29dc96450d97d346a58636ac 100644 (file)
@@ -121,14 +121,8 @@ Tie_performer::do_pre_move_processing ()
   for (int i=0; i<  tie_p_arr_.size (); i++)
    {
      //play_element (tie_p_arr_[i]);
-     /*
-       urg.
-       doesn't work for c ~ c ~ c
-      */
-     tie_p_arr_[i]->note_l_drul_[LEFT]->length_mom_ +=
-       tie_p_arr_[i]->note_l_drul_[RIGHT]->length_mom_;
-     tie_p_arr_[i]->note_l_drul_[RIGHT]->length_mom_ = 0;
-    }
+     tie_p_arr_[i]->note_l_drul_[RIGHT]->tie_to (tie_p_arr_[i]->note_l_drul_[LEFT]);
+   }
   tie_p_arr_.clear ();
 }
 
index 2445dc80c323310ddbcc15edc3e3304ee44c9c5e..f6de2eb3b3cce299bb76d23ba5976d0fca3218a8 100644 (file)
@@ -17,8 +17,6 @@ Transposed_music::Transposed_music (Music *p, Musical_pitch pit)
   p->transpose (pit);
 }
 
-
-
 void
 Transposed_music::do_print () const
 {
@@ -35,4 +33,10 @@ Transposed_music::to_relative_octave (Musical_pitch p)
   return p;
 }
 
+Music_iterator*
+Transposed_music::to_rhythm (Music_iterator* r)
+{
+  return r;
+}
+
 
index 3f76d659e1654b024abd491394cb5679154ac0b0..aa17ba79728cdb66c77cd8ade4b96425fc8508c2 100644 (file)
@@ -25,7 +25,7 @@ Tuplet_spanner::Tuplet_spanner ()
 }
 
 /*
-  TODO.  We should control the gap for lookup from here.
+  TODO. 
  */
 Molecule*
 Tuplet_spanner::do_brew_molecule_p () const
@@ -69,7 +69,9 @@ Tuplet_spanner::do_brew_molecule_p () const
     Real thick = paper_l ()->get_realvar (tuplet_thick_scm_sym);
     if (bracket_visibility)      
       {
-       mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, interline, dir_));
+       Real gap = paper_l () -> get_var ("tuplet_spanner_gap");
+       
+       mol_p->add_molecule (lookup_l ()->tuplet_bracket (dy, w, thick, gap, interline, dir_));
       }
 
     if (number_visibility)
index 2cf391856ce81fcd12f3cd74becab56e3c2af50e..860a87c94cba8dd8da0d1687ea8fa2bd12f9987b 100644 (file)
@@ -39,8 +39,9 @@ Volta_spanner::do_brew_molecule_p () const
 
   Real dx = internote_f;
   Real w = extent (X_AXIS).length () - dx;
-  Molecule volta (lookup_l ()->volta (w, t, interline_f, last_b_));
-  Real h = volta.dim_.y ().length ();
+  Real h = paper_l()->get_var ("volta_spanner_height");
+  Molecule volta (lookup_l ()->volta (h, w, t, last_b_));
+
   
   Molecule num (lookup_l ()->text ("volta", number_str_, paper_l ()));
   Real dy = bar_arr_.top ()->extent (Y_AXIS) [UP] > 
index 8706ac12fc82c9f8d4441031aa48dbd450185e4c..c224318fba209b4370c8c950b943bf56d34171fe 100644 (file)
@@ -143,8 +143,10 @@ barthick_thick = 6.0* \staffline;
 barthick_thin = 1.6*\staffline;
 barthick_score = 1.6*\staffline;
 
+tuplet_spanner_gap = 2.0 * \interline;
 tuplet_thick = 1.0*\staffline;
 volta_thick = 1.6*\staffline;
+volta_spanner_height = 2.0 *\interline;
 
 % relative thickness of thin lines  1.6 : 1 : 0.8
 stemthickness = 0.8*\staffline;
@@ -171,8 +173,13 @@ restcollision_minimum_beamdist = 1.5;
 % deprecated!
 postBreakPadding = 0.0;
 
+% optical correction amount.
 stemSpacingCorrection = 0.5*\interline;
 
+
+
+
+
 \include "engraver.ly";
 
 
index f9eafe68e2f3053412df202f56d0ab894c09e7a7..184f18144f814c93f3fe0d6f1e6a7c2615827922 100644 (file)
@@ -1,7 +1,7 @@
 %
 % setup for Request->Element conversion. Guru-only
 %
-\translator {
+StaffContext = \translator {
        \type "Staff_performer";
        \name Staff;
        \accepts Voice;
@@ -13,7 +13,8 @@
 
        \consists "Key_performer";
        \consists "Time_signature_performer";
-}
+};
+\translator { \StaffContext }
 
 %% urg, why (needs praeludium-*.ly) these?
 \translator
        \consists "Note_performer";
        \name VoiceThree;
 }
-\translator
-{
+\translator {
        \type "Performer_group_performer";
        \consists "Note_performer";
         \name VoiceOne;
 }
 
-\translator
-{
+VoiceContext = \translator {
        \type "Performer_group_performer";
        \name Voice;
+% All notes fall to Grace if you leave Thread out (huh?)
+       \consists "Grace_position_performer";
+       \accepts Thread;
+       \accepts Grace;
+};
+\translator { \VoiceContext }
+
+GraceContext = \translator {
+       \type "Performer_group_performer";
+       \name Thread;
        \consists "Note_performer";
        \consists "Tie_performer";
-%      \accepts Grace;
-}
+};
+\translator { \GraceContext }
 
 \translator {
        \type "Grace_performer_group";
-       \name "Grace";
+       \name Grace;
        \consists "Note_performer";
        \consists "Tie_performer";
         weAreGraceContext = "1";
 
 }
 
-\translator
-{
+GrandStaffContext = \translator {
        \type "Performer_group_performer";
-       \accepts Staff;
        \name GrandStaff;
-}
+       \accepts Staff;
+};
+\translator { \GrandStaffContext }
 
-\translator {\type "Performer_group_performer";
-       \accepts Staff; \name "PianoStaff";}
+PianoStaffContext = \translator {
+        \type "Performer_group_performer";
+       \name "PianoStaff";
+       \accepts Staff;
+};
+\translator { \PianoStaffContext }
 
 \translator {
        \type "Performer_group_performer";
        \consists "Lyric_performer";
-\name LyricVoice;
+       \name LyricVoice;
 }
 
 \translator{
        \name Lyrics;
        \consists "Time_signature_performer";
 }
-\translator
-{
+\translator {
        \type Performer_group_performer;
 
        \name StaffGroup;
        \accepts Staff;
 }
-\translator {
-       \type "Score_performer";
 
+ScoreContext = \translator {
+       \type "Score_performer";
 
        \name Score;
        instrument = "bright acoustic";
        \accepts StaffGroup;
        \accepts ChoirStaff;
        \consists "Swallow_performer";
-}
+};
+\translator { \ScoreContext }
 
index 2fad8d037db766907b13fa2ab5a5c3075a905d8f..7ea9b2519912796b5968eaa10ea53b6a699be584 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.1.53
-Inschrijf datum: 05JUL99
+Versie: 1.1.54
+Inschrijf datum: 08JUL99
 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.53.tar.gz 
+       770k lilypond-1.1.54.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.53.tar.gz 
+       770k lilypond-1.1.54.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 1acdb6762f26acac704d030fec2c4d4fcf0c7cee..3d0634270571685e08f095de69549de16998c9e5 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.1.53
-Entered-date: 05JUL99
+Version: 1.1.54
+Entered-date: 08JUL99
 Description: 
 LilyPond is the GNU Project music typesetter.  This program can print
 beautiful sheet music from a music definition file.  It can also play
@@ -14,8 +14,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.53.tar.gz 
+       770k lilypond-1.1.54.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.53.tar.gz 
+       770k lilypond-1.1.54.tar.gz 
 Copying-policy: GPL
 End
index ea0900032141a818c6ee7226c07aba12c3868df6..0337c89dfc35a88bb07e2f61172f53af1b007c3f 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.1.53
+Version: 1.1.54
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.53.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.54.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>
index ca23359ef7d9f4b20b59534844598920b03b924f..d9d499c9b35bc6b789f538f8814302b7250a9cf8 100644 (file)
@@ -26,6 +26,7 @@ global = \notes {
 melody = \notes\relative c''{
   \clef violin;
   \property Voice.verticalDirection = 1
+  \property Voice.graceFraction = "1/4"
   r2 r r 
   r2 r r
   r4 a'8--(\< a--  a-- a-- c-- \!b-- a--\> gis f \!e 
@@ -112,9 +113,9 @@ accompany = \notes \relative c{
         \property Voice.verticalDirection = 1
         \property Voice.scriptVerticalDirection = 1
         \melody 
-       }
+      }
       \context AutoSwitchContext \accompany
-      >
+    >
   }
   \paper {
     gourlay_maxmeasures = 4.;
@@ -138,8 +139,8 @@ accompany = \notes \relative c{
     }
     \translator { 
       \ScoreContext
-      \accepts AutoSwitchGrandStaff;
-      }
+      \accepts "AutoSwitchGrandStaff";
+    }
     \translator{
       \type "Engraver_group_engraver";
       \name AutoSwitchGrandStaff;
@@ -158,14 +159,31 @@ accompany = \notes \relative c{
       slurVerticalDirection = 1;
       verticalDirection = -1;
       beamAutoEnd = "1/2";
-      }
+    }
     \translator {
       \type "Engraver_group_engraver";
-      \name "AutoSwitchContext";
+      \name AutoSwitchContext;
       \consists "Staff_switching_translator";
-      }
     }
+  }
   \midi {
     \tempo 4 = 54;
+    \translator {
+      \ScoreContext
+      \accepts "AutoSwitchGrandStaff";
+    }
+    \translator {
+      \type "Performer_group_performer";
+      \name AutoSwitchGrandStaff;
+      \accepts "AutoSwitchContext";
+      \accepts "Staff";
+    }
+    \translator {
+      \type "Staff_performer";
+      \name AutoSwitchContext;
+      \accepts "Voice";
+      \consists "Key_performer";
+      \consists "Time_signature_performer";
+    }
   }
 }
index c12411366841ebb25570097c0a9c955bb1c8b202..46aabb538bfa4c06a79015f400ac2e25902bc101 100644 (file)
@@ -11,7 +11,7 @@ copyright =    "public domain";
 } 
 
 %{
- Tested Features@ multivoice accents lyrics chords piano music
+ Tested Features: multivoice accents lyrics chords piano music
 multiple \paper{}s in one \score 
 Note: Original key F.
 %}
@@ -69,104 +69,62 @@ vocalThrough = \notes\relative c{
        e2 r4 |
 }
 
-lyricVerse1 = \lyrics{
-% 5
-       \times 2/3 {  Lei-4 se8 } fleh-4. en8 |
-       \times 2/3 {  mei-4 ne8 } Lie-4 der8 " "8 |
-       Durch4. die8 \times 2/3 {  Nacht4 zu8 } |
-       dir;2 " "4 |
-       " "2.*2
-%{     " "4 " " " " |
-       " " " " " " |%}
-% 11
-       \times 2/3 {  In4 den8 } stil-4. len8 |
-       \times 2/3 {  Hain4 her-8 } nie-4. der8 |
-       Lieb-4. chen,8 \times 2/3 {  komm4 zu8 } |
-       mir!2 " "4 |
-               " "2.*2
-%{     " "4 " " " " |
-       " " " " " " |%}
-% 17
-       Fl\"us-8. ternd16 schlan-4. ke8 |
-       Wip-8. fel16 rau-4. schen8 |
-       \times 2/3 {  In4 des8 } Mon-4. des8 |
-       Licht;2. |
-       \times 2/3 {  In4 des8 } Mon-4. des8 |
-       Licht;2. |
-% 23 
-       Des8. Ver-16 r\"a-4. thers8 |
-       feind-8. lich16 Lau-4. schen8 |
-       \times 2/3 {  F\"urch-4 te8 } Hol-4. de8 |
-       nicht2. |
-       \times 2/3 {  f\"urch-4 te8 } Hol-4. de8 |
-       nicht.2. |
+lyricVerseOne = \lyrics{
+       Lei- " " se fleh- en mei- " " ne Lie- der " "
+       Durch die Nacht " " zu dir; " "
+       " "
+       " "
+       In " " den stil- len Hain " " her- nie- der
+       Lieb- chen, komm " " zu mir! " "
+       " "
+       " "
+       Fl\"us- ternd schlan- ke Wip- fel rau- schen
+       In " " des Mon- des Licht,
+       In " " des Mon- des Licht;
+
+       Des Ver- r\"a- ters feind- lich Lau- schen
+       F\"urch- " " te, Hol- de, nicht,
+       f\"urch- " " te, Hol- de, nicht.
 }
        
-lyricVerse2 = \lyrics{
-% 5
-       \times 2/3 {  H\"orst4 die8 } Nach-4. ti-8 
-       \times 2/3 {  gal-4 len8 } schla-4 gen?8 " "8
-       ach!4. sie8 \times 2/3 {  fleh-4 en8 } 
-       dich,2 " "4
-       " "2.*2
-%{     " "4 " " " " 
-       " "4" " " "
-%}
-% 11
-       \times 2/3 {  Mit4 der8 } T\"o-4. ne8
-       \times 2/3 {  s\"u-4 "\ss en"8 } Kla-4. gen8
-       Fleh-4. en8 \times 2/3 {  sie4 f\"ur8 }
-       mich2 " "4
-       " "2.*2
-%{     " "4" " " " 
-       " "4" " " "
-%}
-% 17
-       Sie-8. ver-16 stehn4. des8
-       Bus-8. ens16 Seh-4. nen8
-       \times 2/3 {  Ken-4 nen8 } Lieb-4. es-8 
-       schmerz,2.
-       \times 2/3 {  Ken-4 nen8 } Lieb-4. es-8 
-       schmerz.2.
+lyricVerseTwo = \lyrics{
+       H\"orst " " die Nach- ti- gal- " " len schla- gen? " "
+       Ach! sie fleh- " " en dich, " "
+       " "
+       " "
+       Mit " " der T\"o- ne s\"u- " " "\ss en" Kla- gen
+       Fleh- en sie " " f\"ur mich. " "
+       " "
+       " "
+       Sie- ver- "steh'n" des Bus- ens Seh- nen
+       Ken- " " nen Lieb- es- schmerz,
+       Ken- " " nen Lieb- es- schmerz.
 
-% 23
-       R\"uh-8. ren16 mit4. den8 
-       Sil-8. ber-16 t\"o-4. nen8
-       \times 2/3 {  jed-4 es8 } wei-4. che8 
-       Herz,2.
-       \times 2/3 {  jed-4 es8 } wei-4. che8 
-       Herz.2.
+       R\"uh- ren mit den Sil- ber- t\"o- nen
+       Jed- " " es wei- che Herz,
+       Jed- " " es wei- che Herz.
 }
 
 lyricThrough = \lyrics{
-% 37
-       La\ss8. auch16 dir8. die16 Brust8. be-16 |
-       we-4 gen " " |
-       Lieb-4. chen,8 h\"o-8. re16 |
-       mich!2 " "4 |
-       Be-4. bend8 \times 2/3 {  harr'4 ich8} |
-       dir8. ent-16 ge-4 gen!8 " "8 |
-       " "2. |
-       " "2. |
-       \times 2/3 {  Komm4 be-8 } gl\"u4. cke8 |
-       mich!2. |
-       \times 2/3 {  Komm4 be-8 } gl\"u4. cke8 |
-       mich,2. __ |
-       " "2 be-4 |
-       gl\"u-2. |
-       cke2. |
-       mich!2 " "4 |
+       La\ss auch dir die Brust be- we- gen " "
+       Lieb- chen, h\"o- re mich! " "
+       Be- bend harr' " " ich dir ent- ge- gen! " "
+       " "
+       " "
+       Komm, " " be- "gl\"uk-" ke mich!
+       Komm, " " be- "gl\"uk-" ke mich, __ " "  " "
+       Be- "gl\"uk-" ke mich!
 }
 
 trebleIntro = \notes\relative c{
-       r8^"\bf m\\\"a\\\ss ig"\pp <g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.> |
+       r8^"\bf M\\\"a\\ss ig"\pp <g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.> |
        r8 <as-. c-.> <c-. es-.> <as-. c-.> <c-. es-.> <as-. c-.> |
        r8 <as-. c-.> <c-. d-.> <as-. c-.> <c-. d-.> <as-. c-.> |
        r8 <g-. b-.> <b-. d-.> <g-. b-.> <b-. d-.> <g-. b-.> |
        \break
 }
 
-trebleVerse1 = \notes\relative c{
+trebleVerseOne = \notes\relative c{
        %5
        r8 <g' c> <c es> <g c> <c es> <g c> |
        r8 <f c'> <c' d> <f, c'> <c' d> <f, c'> |
@@ -274,7 +232,7 @@ bassIntro = \notes\relative c{
        <g2 g'> r4 |
 }
 
-bassVerse1 = \notes\relative c{
+bassVerseOne = \notes\relative c{
 %      \clef bass;
        \property Voice.dynamicDir=1
 %5
@@ -362,24 +320,13 @@ global = \notes{
 }
 
 
-lyricFour = \lyrics{
-       " "2.*4
-%{     " "4 " " " "
-       " " " " " "
-       " " " " " "
-       " " " " " "%}
-}
-allLyrics = {
-       \time 3/4; 
-%      \skip 4 * 12; 
-       \lyricFour
-       \lyricVerse1
-%      \skip 4 * 24; 
-       \lyricFour
-       \lyricFour
-       \lyricVerse2
-       \lyricThrough
+allLyrics = \lyrics {
+       " "4 * 12
+       \rhythm \vocalVerse \lyricVerseOne
+       " "4 * 12
+       " "4 * 12
+       \rhythm \vocalVerse \lyricVerseTwo
+       \rhythm \vocalThrough \lyricThrough
 }
 
 lyricStaff = \context Lyrics = lyric<
@@ -390,7 +337,6 @@ vocals = \notes{
        \clef treble;
        % certainly no auto-beaming for vocals
        \property Voice.beamAuto=0
 
        \property Voice.dynamicDir = \up
        \skip 4 * 12; 
@@ -410,9 +356,9 @@ treble = {
        \clef treble;
        \property Voice.beamAutoBegin=0
        \trebleIntro 
-       \trebleVerse1 
+       \trebleVerseOne 
        \trebleEentje
-       \trebleVerse1 
+       \trebleVerseOne 
        \trebleThrough
 }
 
@@ -424,9 +370,9 @@ trebleStaff = \context Staff = treble<
 bass = {
        \clef bass;
        \bassIntro 
-       \bassVerse1 
+       \bassVerseOne 
        \bassEentje
-       \bassVerse1 
+       \bassVerseOne 
        \bassThrough
 }
 
@@ -455,12 +401,9 @@ grandStaff = \context PianoStaff <
                { \notes { \grandStaff } }
        >
        \paper { 
-%              \translator { \OrchestralScoreContext }
-%              \translator { \OrchestralPartStaffContext }
                \translator { \HaraKiriStaffContext }
        }
-%broken 1.1.51
-%      \midi{
-%              \tempo 4 = 54;
-%      }
+       \midi{
+               \tempo 4 = 54;
+       }
 }
index 662ac2ec535bb5d3559b4390911f783f1c54ee3f..75991aa5f037380e72ad88eb803c31a3df913809 100644 (file)
@@ -4,14 +4,6 @@
 % round cappings
 1 setlinecap
 
-% URG
-% staffheight 4 div /interline exch def
-% interline 3 div /bracket_b exch def
-% interline 2 mul /bracket_w exch def
-% stafflinethickness 2 mul /bracket_t exch def
-% interline 1.5 mul /bracket_v exch def
-% bracket_v /bracket_u exch def
-% 50 /bracket_alpha exch def
 
 /draw_beam % width slope thick
 {
@@ -61,7 +53,7 @@
        1 copy mul exch 1 copy mul add sqrt
 } bind def
 
-/draw_tuplet % height dx dy thick dir
+/draw_tuplet % height gap dx dy thick dir
 {
 % urg: the only Level-2 PS, check effect in print
 %      true setstrokeadjust
@@ -71,8 +63,8 @@
        1 setlinejoin
        /tuplet_dy exch def
        /tuplet_dx exch def
+       /tuplet_gapx exch def
        /tuplet_h exch def
-       staffheight 2 div /tuplet_gapx exch def
        tuplet_dy tuplet_dx div tuplet_gapx mul /tuplet_gapy exch def
 
 
        stroke
 } bind def
 
-/draw_volta % w thick last
+/draw_volta % w thick last
 {
        /last exch def
        setlinewidth
        /volta_w exch def
-       staffheight 2 div /volta_h exch def
+       /volta_h exch def
 % urg: the only Level-2 PS, check effect in print
 %      true setstrokeadjust
        1 setlinecap
index 268a383d62e407fad7d8ff7c449686fee3c4eca0..dbc8381e439061ae3a54a53a59c003b2a0a71c0b 100644 (file)
@@ -49,8 +49,7 @@
    (string-append (number->string (cadr c)) " ")))
 
 
-(define
-  (font i)
+(define (font i)
   (string-append
    "font"
    (make-string 1 (integer->char (+ (char->integer #\A) i)))
   (define (text s)
     (string-append "\\hbox{" (output-tex-string s) "}"))
   
-  (define (tuplet ht dx dy thick dir)
-    (embedded-ps ((ps-scm 'tuplet) ht dx dy thick dir)))
+  (define (tuplet ht gapx dx dy thick dir)
+    (embedded-ps ((ps-scm 'tuplet) ht gapx dx dy thick dir)))
 
-  (define (volta w thick last)
-    (embedded-ps ((ps-scm 'volta) w thick last)))
+  (define (volta w thick last)
+    (embedded-ps ((ps-scm 'volta) w thick last)))
 
   ;; TeX
   ;; The procedures listed below form the public interface of TeX-scm.
   
   (define (cached-fontname i)
     (string-append
-     " lilyfont"
+     "lilyfont"
      (make-string 1 (integer->char (+ 65 i)))))
 
   (define (select-font font-name)
 
   (define (header-end) "")
   (define (lily-def key val)
-    (string-append
-     "/" key " {" val "} bind def\n"))
 
+     (if (string=? (substring  key 0 (string-length "mudelapaper") ) "mudelapaper")
+        (string-append "/" key " {" val "} bind def\n")
+        (string-append "/" key " (" val ") def\n")
+        )
+     )
   (define (header creator generate) 
     (string-append
      "%!PS-Adobe-3.0\n"
     (string-append "(" s ") show  "))
 
 
-  (define (volta w thick last)
+  (define (volta w thick last)
     (string-append 
-     (numbers->string (list w thick (inexact->exact last)))
+     (numbers->string (list w thick (inexact->exact last)))
      " draw_volta"))
 
-  (define (tuplet ht dx dy thick dir)
+  (define (tuplet ht gap dx dy thick dir)
     (string-append 
-     (numbers->string (list ht dx dy thick (inexact->exact dir)))
+     (numbers->string (list ht gap dx dy thick (inexact->exact dir)))
      " draw_tuplet"))
 
 
index 342b3d2d2cf8b2db0e2fac7beea260c9991ab7a4..dd4bcf263766dec2bdb03eb79e49c928b403006f 100644 (file)
@@ -23,9 +23,12 @@ except:
 
 
 header = {}
+lyrics = []
+voices = []
 global_voice_stuff = []
 default_len = 4
 global_key = [0] * 7                   # UGH
+names = ["One", "Two", "Three"]
 DIGITS='0123456789'
 HSPACE=' \t'
 
@@ -51,6 +54,12 @@ class Rational:
                pass
        
 
+def dump_global ():
+       print ("global = \\notes{")
+       for i in global_voice_stuff:
+               print (i);
+       print ("}")
+
 
 def dump_header (hdr):
        print '\\header {'
@@ -58,6 +67,36 @@ def dump_header (hdr):
                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:
@@ -70,11 +109,11 @@ def gulp_file(f):
                n = i.tell ()
                i.seek (0,0)
        except:
-               print 'can\'t open file: ' + f + '\n'
+               sys.stderr.write ("can't open file: %s\n" % f)
                return ''
        s = i.read (n)
        if len (s) <= 0:
-               print 'gulped empty file: ' + f + '\n'
+               sys.stderr.write ("gulped emty file: %s\n" % f)
        i.close ()
        return s
 
@@ -191,7 +230,7 @@ def try_parse_tuplet_begin (str, state):
                str = str[1:]
                state.parsing_tuplet = 1
                
-               print '\\times %s {' % tup_lookup[dig]
+               voices_append ("\\times %s {" % tup_lookup[dig])
        return str
 
 def  try_parse_group_end (str, state):
@@ -199,14 +238,30 @@ def  try_parse_group_end (str, state):
                str = str[1:]
                if state.parsing_tuplet:
                        state.parsing_tuplet = 0
-                       print '}'
+                       voices_append ("}")
        return str
 
 def header_append (key, a):
        s = ''
        if header.has_key (key):
                s = header[key] + "\n"
-       header [key ] = s + a
+       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)
@@ -239,8 +294,11 @@ def try_parse_header_line (ln):
                        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):
@@ -369,9 +427,10 @@ def try_parse_note (str, parser_state):
        
                
        
-       print '%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))
-
+       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
@@ -434,22 +493,22 @@ def try_parse_bar (str):
                                sys.stderr.write ("warning: repeat kludge\n")
                                bs = '|:'
                if bs:
-                       print '\\bar "%s";' % bs
+                       voices_append ('\\bar "%s";' % bs)
                        str = str[1:]
 
        if str and str[:2] == '[|':
                sys.stderr.write ("warning: thick-thin bar kludge\n")
-               print '\\bar "||";'
+               voices_append ('\\bar "||";')
                str = str[2:]
 
        if str and str[:2] == ':|':
                sys.stderr.write ("warning: repeat kludge\n")
-               print '\\bar ":|:";'
+               voices_append ('\\bar ":|:";')
                str = str[2:]
 
        if str and str[:2] == '::':
                sys.stderr.write ("warning: repeat kludge\n")
-               print '\\bar ":|:";'
+               voices_append ('\\bar ":|:";')
                str = str[2:]
 
        return str
@@ -458,11 +517,11 @@ def try_parse_bar (str):
 def try_parse_chord_delims (str):
        if str and str[0] == '[':
                str = str[1:]
-               print '<'
+               voices_append ('<')
 
        if str and str[0] == ']':
                str = str[1:]
-               print '>'
+               voices_append ('>')
 
        return str
 
@@ -470,11 +529,11 @@ def try_parse_chord_delims (str):
 def try_parse_grace_delims (str):
        if str and str[0] == '{':
                str = str[1:]
-               print '\\grace { '
+               voices_append ('\\grace { ')
 
        if str and str[0] == '}':
                str = str[1:]
-               print '}'
+               voices_append ('}')
 
        return str
 
@@ -548,14 +607,11 @@ for opt in options:
 for f in files:
        if f == '-':
                f = ''
-       
-       print ("\\score{")
-       print ("    <")
-       print ("        \\context Staff=one \\notes {")
        parse_file (f)
-       print ("        }")
-       print ("    >")
-       dump_header (header)
-       print "%%%s" % global_voice_stuff, 1
-       print ("}")
+
+       dump_global ()
+       dump_lyrics ()
+       dump_voices ()
+       dump_score ()
+       
        
index 46b6a61778669a897cbfc24bbc732990d2c84321..eafc978c0e0eee1a1d639555414d39a7adf6659d 100644 (file)
@@ -63,7 +63,7 @@
 #   - bf: Default fragments have linewidth=-1.0
 #   - Added 'singleline' and 'multiline' options.
 # 0.5.6:
-#   - \mudelafile{} set linewith correct, -1 for .sly and texlinewidth for .fly
+#   - \mudelafile{} set linewidth correct, -1 for .sly and texlinewidth for .fly
 #   - changes to Mudela_output
 #   - changed RE to search for pre/postMudelaExample to make it possible to
 #     comment out a definition.
@@ -85,6 +85,8 @@ fontsize_i2a = {11:'eleven', 13:'thirteen', 16:'sixteen',
                 20:'twenty', 26:'twentysix'}
 fontsize_pt2i = {'11pt':11, '13pt':13, '16pt':16, '20pt':20, '26pt':26}
 
+# perhaps we can do without this?
+
 begin_mudela_re = re.compile ('^ *\\\\begin{mudela}')
 begin_verbatim_re = re.compile ('^ *\\\\begin{verbatim}')
 end_verbatim_re = re.compile ('^ *\\\\end{verbatim}')
@@ -600,6 +602,7 @@ class Main_tex_input(Tex_input):
 
                f = open (full_path, 'r')
                lines =f.readlines ()
+               self.mudela.write ('%% This is a copy of file %s\n' % full_path)
                for x in lines:
                    self.mudela.write (x)
                r = file_ext_re.search(fn)
index 602d77213ae3deb0becaa0fd24480ff64026f68c..d579266f49ca40a49db06945fd12aab506a08eee 100644 (file)
@@ -1,7 +1,5 @@
 dnl WARNING WARNING WARNING WARNING
 dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
-dnl WARNING WARNING WARNING WARNING
-dnl do not edit! this is aclocal.m4, generated from stepmake/aclocal.m4
 dnl aclocal.m4   -*-shell-script-*-
 dnl StepMake subroutines for configure.in
 
index 5dc69f9e60945da5c218079a2247f05dbdfcefdc..5ef348b4dd8af43ea2bd2d3775c9fcca5a5ef7b6 100644 (file)
 %% set up dimensions
 % mudela-book don't like this:
 %\parindent=0pt
-\newdimen\smallspace
 \newdimen\interlinedist
 
-\newdimen\stemthickness
 \newcount\n                     %duh. meaningful identifiers.
 \newdimen\staffheight
-\newdimen\notewidth
-\newdimen\noteheight
 \newdimen\stafflinethickness
-\newdimen\interstaffline
-\newdimen\dist
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % set fonts and primary dimensions
 
 % this has to be synced with the font definition
 \def\musixcalc{
-        \notewidth=\mudelapapernotewidth pt
 
-        \smallspace=.3\interlinedist
-        \interstaffline=\staffheight
-        \divide\interstaffline by 4
         \stafflinethickness=\mudelapaperrulethickness pt
-        \stemthickness=\stafflinethickness
 }