]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.1.50 release/1.1.50
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 25 Jun 1999 09:50:41 +0000 (11:50 +0200)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Fri, 25 Jun 1999 09:50:41 +0000 (11:50 +0200)
70 files changed:
AUTHORS.txt
Documentation/faq.yo
Documentation/mail.yo
Documentation/man/lilypond.yo
Documentation/man/out/lilypond.1
Documentation/tex/engraving.bib
Documentation/tex/glossary-table.data
Documentation/tex/lilypond-regtest.doc
Documentation/tex/mudela-book-doc.doc
Documentation/tex/refman.yo
Documentation/topdocs/AUTHORS.yo
Documentation/topinfo.yo
NEWS
TODO
VERSION
buildscripts/lilypond.sh [new file with mode: 0644]
input/bugs/rep.ly
input/bugs/threads.ly [new file with mode: 0644]
input/bugs/unfold.ly
input/test/breathing-sign.ly [new file with mode: 0644]
input/test/coda-kludge.ly
input/test/dynamics.fly
input/test/repeat-semifold.ly [new file with mode: 0644]
input/test/repeat-unfold.ly [new file with mode: 0644]
input/test/reps.ly [new file with mode: 0644]
input/test/rest-collision.ly
input/von-guten-maechten.ly [new file with mode: 0644]
lily/audio-item.cc
lily/bar.cc
lily/bow.cc
lily/breathing-sign-engraver.cc [new file with mode: 0644]
lily/breathing-sign.cc [new file with mode: 0644]
lily/dynamic-engraver.cc
lily/include/beam.hh
lily/include/breathing-sign-engraver.hh [new file with mode: 0644]
lily/include/breathing-sign.hh [new file with mode: 0644]
lily/include/command-request.hh
lily/include/music-list.hh
lily/include/new-repeated-music.hh
lily/include/spring-spacer.hh
lily/include/unfolded-repeat-iterator.hh
lily/midi-walker.cc
lily/music-list.cc
lily/music-sequence.cc
lily/musical-request.cc
lily/my-lily-lexer.cc
lily/new-repeated-music-iterator.cc [deleted file]
lily/new-repeated-music.cc [deleted file]
lily/note-column.cc
lily/note-head.cc
lily/paper-outputter.cc
lily/paper-stream.cc
lily/parser.yy
lily/repeated-music-iterator.cc [new file with mode: 0644]
lily/repeated-music.cc [new file with mode: 0644]
lily/specialty-engraver.cc [new file with mode: 0644]
lily/spring-spacer.cc
lily/unfolded-repeat-iterator.cc
ly/engraver.ly
ly/paper16.ly
ly/paper20.ly
ly/script.ly
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
mutopia/E.Satie/gnossienne-4.ly
mutopia/F.Schubert/standchen.ly
scm/lily.scm
scripts/abc-2-ly.py
scripts/ly2dvi.py

index fcae67073ed6a001b38016067de9c49395625357..292a11b1fa2e35de2192685a775a858fdbdb5395 100644 (file)
@@ -31,28 +31,32 @@ o    Donald    Ervin    Knuth,     http://www-cs-staff.stan-
      ford.edu/~knuth/  mf/ital-*.mf  (these  were taken from
      the CM fonts)
 
-o    Werner Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>,  misc
+o    Michael  Krause   <m.krause@tu-harburg.de>,   breathing
+     signs
+
+o    Werner  Lemberg <xlwy01@uxp1.hrz.uni-dortmund.de>, misc
      bugfixes, some Beam and Stem code.
 
-o    David  R.  Linn <drl@vuse.vanderbilt.edu>, Mailing list
+o    David R. Linn <drl@vuse.vanderbilt.edu>,  Mailing  list
      maintenance.
 
-o    Adrian Mariano <>  Reference  manual,  tutorial  fixes,
+o    Adrian  Mariano  <>  Reference  manual, tutorial fixes,
      glossary.
 
 o    Han-Wen           Nienhuys           <hanwen@cs.uu.nl>,
-     http://www.cs.uu.nl/~hanwen/  Main  author   (initials:
+     http://www.cs.uu.nl/~hanwen/   Main  author  (initials:
      HWN).
 
-o    Jan           Nieuwenhuizen          <janneke@gnu.org>,
-     http://www.xs4all.nl/~jantien/ Main  author  (initials:
+o    Jan          Nieuwenhuizen           <janneke@gnu.org>,
+     http://www.xs4all.nl/~jantien/  Main  author (initials:
      JCN).
 
-o    Alexandre   Oliva  <oliva@dcc.unicamp.br>,  http://sun-
+o    Alexandre  Oliva  <oliva@dcc.unicamp.br>,   http://sun-
      site.unicamp.br/~oliva/ testing
 
-o    Franc,ois Pinard  <pinard@iro.umontreal.ca>,  parts  of
-     Documentation/Vocab*,    started   internationalization
+o    Franc,ois  Pinard  <pinard@iro.umontreal.ca>,  parts of
+     Documentation/Vocab*,   started    internationalization
+
      stuff
 
 o    Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT sup-
@@ -60,5 +64,5 @@ o    Jeffrey B. Reed <daboys@austin.rr.com>, Windows-NT sup-
 
 o    Shay Rojanski Some mudela source.
 
-Your  name  could  be here! If you want to fix something, do
+Your name could be here! If you want to  fix  something,  do
 it, and send us a patch!
index a87888661023605873613fbb1fad71c012d84fc8..f20726e49b4deab73b2c98cbc6f61bd9f01d8d4c 100644 (file)
@@ -14,8 +14,8 @@ Note: relative paths are meant to be relative to the source directory
 
 sect(Installing)
 
-question(If I install the .exe file on my DOS/windows 3.11 machine, it
-doesn't work.)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(If I install the .exe file on my DOS/windows 3.11 machine, it doesn't work)
 
 The DOS port is done with the cygnus gnu/windows32 port of the GNU utils.
 It does em(not) work with windows 3.x; you need Windows-NT (95/98?).  This
@@ -206,9 +206,8 @@ question(How do I change the TeX layout?)
 
 See file(lilyponddefs.tex), it has some comments.  Or use file(ly2dvi).
 
-question(How do I place lyrics under em(each) of the staves in a
-score, as choral music. I can work out how to put lyrics for each line
-all under the top line, or at the bottom but not between!)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(How do I place lyrics under em(each) of the staves in a score, as choral music. I can work out how to put lyrics for each line all under the top line, or at the bottom but not between!) 
 
 You change the order lyrics and staves.  You have to name all
 staves (lyric and melodic), otherwise they will end up in the same
@@ -251,15 +250,14 @@ See file(input/test/bar-scripts.ly).
 
 sect(Development)
 
-question(Could you implement feature XXXX? It is really easy, just extend
-the syntax to allow YYYY!)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(Could you implement feature XXXX? It is really easy, just extend the syntax to allow YYYY!) 
 
 If it is reasonable, I'll add XXXX to the TODO list. In general
 finding a cute syntax (such as YYYY) isn't very hard. The complicated
 issue how to adapt the internals to do XXXX. The parser is really a
 simple front end to the complicated internals. 
 
-
 question(Can I join in on LilyPond development?  How do I do this?)
 
 LilyPond development is open for anyone who wants to join.  We try
@@ -288,14 +286,21 @@ easier or quicker to use than mudela.  But for composing a graphical
 environment probably is indispensable.
 
 In any case email(Derek Wyatt)(wyatt@scar.utoronto.edu) is working on
-GTK based editor, but that is still in an embryonal stage (see
-lurl(http://harmonia.scar.utoronto.ca).  There is also a GUI package
-RoseGarden that could be extended to output mudela.
+GTK based editor, but that effort practically died. (see
+lurl(http://harmonia.scar.utoronto.ca).
+
+Matthew Hiller is working on extending Midiscore to handle mudela.
+lurl(http://zoo.cs.yale.edu/~meh25/MISClily/MISClily-0.0.3.tar.gz)
+
+
+There is also a GUI package RoseGarden that could be extended to
+output mudela.
 
 If you want to work on this, please send e-mail to the mailing list
 email(gnu-music-discuss@gnu.org).
 
 
+
 question(I want to implement XXXX!  How should I do this?)
 
 Your best bet of getting us to include code, is to present it as a
@@ -352,8 +357,8 @@ question(Why GPL?)
 Yes.
 
 
-question(Your make system does not adhere to GNU coding standards, could you
-please fix it?)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(Your make system does not adhere to GNU coding standards, could you please fix it?)
 
 No.  We have evaluated the standard GNU combination for compiling
 programs (autoconf, automake, libtool) and found to be inadequate in
@@ -380,24 +385,22 @@ having to support other compilers saves us a em(lot) of trouble.
 sect(Running)
 
 
-question(I use dvilj4, and there are lots of warning messages for the
-printing)
+question(I use dvilj4, and there are lots of warning messages for the printing)
 
 You should use dvips and ghostscript to print the code(dvi) output:
 the slurs and beams are PS code(\special) commands.
 
 
-question(My symbols are all messed up after I upgraded, I get the
-wrong symbols and dvi-checksum errors!)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(My symbols are all messed up after I upgraded, I get the wrong symbols and dvi-checksum errors!) 
 
 We obviously mucked with the fonts in the upgrade.  Remove em(all)
 previous fonts, including the file(.pk) and file(.tfm) fonts in
 file(/var/lib/texmf).  A script automating this has been included, see
 file(buildscripts/clean-fonts.sh).
 
-question(all the pk and tfm
-fonts are created in the directory where the mudela file is, not in
-"/var/spool/texmf" where I think they should be.)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(all the pk and tfm fonts are created in the directory where the mudela file is, not in "/var/spool/texmf" where I think they should be.)
 
 Mats Bengtsson <mats.bengtsson@s3.kth.se> writes:
 
@@ -470,8 +473,8 @@ verb(
 The bf(-M) option was added to LilyPond because processing the \paper
 block is so slow.
 
-question(A lot of musical stuff doesn't make it to the MIDI file, eg.
-dynamics, articulation, etc.)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(A lot of musical stuff doesn't make it to the MIDI file, eg.  dynamics, articulation, etc.) 
 
 The MIDI output was originally put in as a proof that MIDI could be
 done, and as a method of proof"reading" the input.  The MIDI support
@@ -480,8 +483,8 @@ is by no means finished.  Patches appreciated.
 
 sect(Copyright)
 
-question(How does copyright for sheet music work? Can I enter and
-spread my newly bought Bach urtext?)
+COMMENT(look out: can't have line breaks in subsect() macro)
+question(How does copyright for sheet music work? Can I enter and spread my newly bought Bach urtext?) 
 
 Silas S. Brown <ssb22@hermes.cam.ac.uk>:
 
@@ -586,4 +589,3 @@ They may lag several versions behind the latest version.
 question(But i want a native DOS/Windows-NT/95 port)
 
 Reconsider.  Try Linux.  It's fun!
-
index c3d4e894a9cf3f3d640ed360bd20a3cdbec57dfd..c11d059563db303b39e276e7e8438c1a2f492029 100644 (file)
@@ -35,7 +35,7 @@ dit(gnu-music-discuss@gnu.org,)
     mail with subject "subscribe" to
     email(gnu-music-discuss-request@gnu.org)
     This list is archived at
-    lurl(http://www.mail-archive.org/gnu-music-discuss@gnu.org)
+    lurl(http://www.mail-archive.com/gnu-music-discuss@gnu.org)
 )
 
 Announces of new versions will be sent to info-gnu-music and
index d680277e434b5cc97cc00adfac9de0f600a2b974..6c5bcce3066635122216f81ddac20839c9c3a788 100644 (file)
@@ -116,7 +116,7 @@ dit(file(init.ly))
     The initialisation file with symbol tables etc.  It
     includes files from the directory
     file(PREFIX/share/lilypond/ly/). (file(PREFIX) typically is file(/usr/local)
-)
+))
 
 manspagesection(environment)
 
@@ -198,4 +198,3 @@ it()nemail(Jan Nieuwenhuizen)(janneke@gnu.org)
 
 Please consult the documentation file file(AUTHORS) for more detailed
 information, and small contributions.
-
index d3e8212ed2ce71c0487fa138713e884e849096c3..036db66e6ed28c8d78e9bd78fae26ba55ee892ec 100644 (file)
@@ -116,9 +116,9 @@ The initialisation file with symbol tables etc\&.  It
 includes files from the directory
 \fBPREFIX/share/lilypond/ly/\fP\&. (\fBPREFIX\fP typically is \fB/usr/local\fP
 )
-.I
+.P
 manspagesection(environment)
-.I
+.P
 .IP "LILYINCLUDE" 
 additional directories for finding lilypond data\&.  The
 format is like the format of \fBPATH\fP\&.
@@ -126,34 +126,34 @@ format is like the format of \fBPATH\fP\&.
 [FIXME]
 .IP "LANG" 
 selects the language for the warning messages of LilyPond\&.
-.I
+.P
 .SH "BUGS" 
-.I
+.P
 Lots of them\&.  See \fBTODO\fP and \fBBUGS\fP
-.I
+.P
 .SH "SEE ALSO" 
-.I
+.P
 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 
-.I
+.P
 .IP "MANIFESTO" 
 Goals of the GNU LilyPond project\&.
 .IP "FAQ" 
 The GNU LilyPond FAQ list
-.I
+.P
 A further source for information is the website, which can be found at
 http://www\&.lilypond\&.org/\&.  The website contains on-line versions
 of the documentation
-.I
+.P
 GNU LilyPond is updated very frequently, the latest version is always
 available at: ftp://ftp\&.cs\&.uu\&.nl/pub/GNU/LilyPond\&.  This FTP
 site is mirrored at a number of sites; consult the project web pages
 for information about mirrors\&.
-.I
+.P
 For programs which are part of the GNU music project, the following
 mailing list have been setup:
-.I
+.P
 .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
@@ -169,14 +169,14 @@ bug-gnu-music-request@gnu\&.org
 For discussions concerning the GNU Music project, to subscribe: send
 mail with subject "subscribe" to
 gnu-music-discuss-request@gnu\&.org
-.I
+.P
 Announces of new versions will be sent to info-gnu-music and
 gnu-music-discuss\&.
-.I
+.P
 .SH "REMARKS" 
-.I
+.P
 GNU LilyPond has no connection with the music package Rosegarden, other
-than the names being similar :-
+than the names being similar :-)
 .PP 
 .SH "AUTHOR" 
 .PP 
@@ -189,4 +189,3 @@ http://www\&.xs4all\&.nl/~jantien
 .PP 
 Please consult the documentation file \fBAUTHORS\fP for more detailed
 information, and small contributions\&.
-.PP 
index 7552b11c18de445e39f58655c1f023cd0c4cad9f..ab4099acceda023def6712db7472737181181ad7 100644 (file)
 }
 
 
-@Book{banter,
-  author =     {Harald Banter},
-  title =      {Akkord Lexikon},
-  publisher =  {Schott's S\"ohne},
-  year =       {1987},
-  isbn =       {ISBN 3-7957-2095-8},
-  note =       {Comprehensive overview of commonly used
-  chords.  Suggests (and uses) a unification for all different kinds
-  of chord names.},
-  address =    {Mainz, Germany},
-}
-
 
 @Book {read78,
   note = {Sound (boring) review of the various hairy rhythmic notations used by avant-garde composers HWN},
index 4a830e0d5da897df99f328e37fa8875986fe6aee..2fdb48211055857283169540c9b930be13c1621c 100644 (file)
@@ -21,13 +21,15 @@ backfall, forefall@accent, chute, port de voix@Vorschlag@@korte voorslag@appogia
 bar line@barre (de mesure)@Taktstrich@@maatstreep@stanghetta@
 bar; measure@mesure@Takt@@maat, maatstreep@@
 baritone@bariton@Bariton@@bariton@@
-bass clef@clé de fa@Bass-Schlüssel, F-Schlüssel@@F sleutel, bas sleutel@chiave di basso@
+@@F-Schlüssel@@F sleutel@@A clef shaped as a curl with two dots.  The position between the dots is the\rline of the F below central C.
+bass clef@clé de fa@Bass-Schlüssel@@bas sleutel@chiave di basso@A clef setting with central C on the first top ledger line.
 bass@basse@Bass@@bas@@
 beam@barre@Balken@@waardestreep/balk@barra@
 beat@temps@Takt(-schlag)@@tel@@
 brace@accolade@Klammer@@accolade, haak@accolada@Symbol at the start of a system that connects staffs.
 brass@@Blechbläser@@koper (blazers)@@
-C clef@clé d'ut@Altschlüssel, C-Schlüssel@@C sleutel, alt sleutel@chiave di tenore@
+alto clef@clé d'ut@Altschlüssel@@alt sleutel@chiave di tenore@Clef setting that has central C on the middle staff line.  
+C clef@@@@C sleutel. @@A clef symbol that looks like a horizontally mirrored 3.  It\rindicates the position of the central C. Used in different\rpositions.
 C@do@c@@C@@
 C@ut@c@@@@
 cadence@cadence@Kadenz@@cadens@@
@@ -231,7 +233,8 @@ tonality@tonalit
 tone@ton@Ton@@toon@@
 tonic@tonique@Tonika@@tonica@@
 transposition@transposition@Transposition@@transpositie@@Shifting a melody up or down in pitch, while keeping the same relative pitches.
-treble clef@clé de sol@Violinschlüssel, G-Schlüssel@@G sleutel, viool sleutel@chiave di violino@
+G clef@@@@G sleutel@@A clef symbol with a loop at the top and a spiral in the center.  The center of the spiral indicates the G above central C.
+treble clef@clé de sol@Violinschlüssel@@viool sleutel@chiave di violino@Clef setting where the second lowest line is the G above central C.
 tremolo@trèmolo@Tremolo@@tremolo@tremolo@
 trill; shake@trille, tremblement, battement (cadence)@Triller@@triller@trillo@
 triple meter@temps ternaire@@@driedelige maatsoort@@
index bc70c38b3ddd31c45671b5806da1d8d59bf82652..37452d42b9e0b7664ed33668f2ecdfe97bcc729d 100644 (file)
@@ -38,6 +38,10 @@ tremolo must be parallel to the beam.  If the stem is invisible
 
 \mudelafile{stem-tremolo.ly}
 
+Beams, stems and noteheads often have communication troubles, since
+the two systems for y dimensions (1 unit = staffspace, 1 unit = 1
+point) are mixed.
+
 
 \section{Beams, slurs and other spanners}
 
@@ -64,6 +68,25 @@ centered in the gap in the bracket.
 
 \mudelafile{tup.ly}
 
+\section{Repeats}
+
+LilyPond has three modes for repeats: folded, unfolded and
+semi-unfolded.  Unfolded repeats are fully written out. Semi unfolded
+repeats have the body written and all alternatives sequentially.
+Folded repeats have the body written and all alternatives
+simultaneously.  If the number of alternatives is larger than the
+repeat count, the excess alternatives are ignored.  If the number of
+alternatives is smaller, the first alternative is multiplied to get to
+the number of repeats.
+
+Unfolded behavior:
+
+\mudelafile{repeat-unfold.ly}
+
+Semi (un)0folded behavior:
+
+\mudelafile{repeat-semifold.ly}
+
 \section{Multiple notes}
 
 Rests should not collide with beams, stems and noteheads.  Rests may
@@ -107,6 +130,14 @@ PianoStaff
 
 \mudelafile{staff-margin.ly}
 
+Breathing signs, also used for phrasing, do normally not influence
+global spacing -- only if space gets tight, notes are shifted to make
+room for the breathing sign. Breathing signs break beams running
+through their voice. In the following example, the notes in the first
+two bars all have the same distance from each other:
+
+\mudelafile{breathing-sign.ly}
+
 
 \section{Clefs and Time Signatures}
 
index b905979a1b98f331d37f458a0d5c9bf51f6789d2..95a439f6d7855eded67b79351b975cfa1b4c5643 100644 (file)
@@ -9,6 +9,7 @@
 %\sloppy
 \def\postMudelaExample{\setlength{\parindent}{3.25ex}}
 \title{Mudela-book tutorial}
+\author{TCA}
 \begin{document}
 \maketitle
 %\printparam
index 1ab69332373408b25c647c8d124d3918541e55ad..8b1259b003f21d79313417efefff4dd741efdd06 100644 (file)
@@ -10,25 +10,23 @@ redef(code)(1)(tt(ARG1))
 
 COMMENT(
 
-questions:
-   long lyrics don't get any space at the end
-   lyrics and scripts collide
-   \key b; \time 4/4; looks bad---no space between key sig and clef
-   \portato still DOES NOT WORK!
-   \cadenza vs. barNonAuto ?
-   not enough space for \key b;
-   I noticed that ledger lines in the previewer looked like they had
-     a double line (of different lengths).  On printed output, I think
-     I can see a slight thickening of the ledger lines in the middle. 
-     Is this supposed to happen?   
+  BUGS:
+
+    Causes segfault:
+
+    \score{
+      \notes{  \context Voice {
+         \repeat fold 2 { a b c d } {}
+     }
+     }
+    }
+    
+
    restStyle=mensural doesn't seem to work (lots of characters not found
      for rests.fly)
-   what happened to the Staff.textalignment and Lyrics.textalignment 
-     properties? 
-
 
 TODO:
-   autobeamer
+   thread
    paper size?
    paper variables
    the explanation of how lyrics mode parses words seems ridiculous.  
@@ -37,28 +35,6 @@ TODO:
    accordion symbols
    interstaff beams (beam-interstaff.ly)
    interstaff slurs (see preludes-1.ly)
-
-   Current list of undocumented properties:
-
-        "alignmentReference"  to do with minVerticalAlign, etc?
-        "beamAuto"
-        "beamAutoBegin"
-        "beamAutoBegin" + type_str
-        "beamAutoEnd"
-        "beamAutoEnd" + type_str
-        "createInitdefaultClef"
-        "dynamicStyle"
-        "postBreakPadding"
-        "staffLineLeading"
-        "stemLeftBeamCount"
-        "stemRightBeamCount"
-        time_str + "beamAutoBegin"
-        time_str + "beamAutoBegin" + type_str
-        time_str + "beamAutoEnd"
-        time_str + "beamAutoEnd" + type_str
-        type_ + "Direction"
-        type_ + "HangOnClef"
-        type_ + "ScriptPadding"
 )
 
 
@@ -81,7 +57,7 @@ latexlayoutcmds(
 
 whentexinfo(notableofcontents())
 
-article(Mudela 1.0.14 / LilyPond 1.1.40 Reference Manual)
+article(Mudela 1.0.21 / LilyPond 1.1.49 Reference Manual)
       (Adrian Mariano, Han-Wen Nienhuys and Jan Nieuwenhuizen)
       (nop()PIPETHROUGH(date "+%B %d, %Y")()()nop())
 
@@ -226,9 +202,11 @@ and code(< c e g >) represents a chord.  These items can be nested any
 way you like.  This simple example shows how three chords can be
 expressed in two different ways:
 mudela(fragment,verbatim,center)(
-\notes<{a b  c'}{c' d' e'}{e' f' g'}>
-\notes{<a c' e'><b  d' f'><c' e' g'>}
-)
+\notes{
+  c
+  <a c' e'> <b  d' f'> <c' e' g'>
+  <{a b  c'}{c' d' e'}{e' f' g'}>
+})
 
 )
 
@@ -244,23 +222,24 @@ identifier in terms of its old value: code(foo = \foo * 2.0).
 Identifier assignments must appear at the top level in the Mudela
 file.  Note that semicolons are forbidden after assignments appearing
 at the top level but they are obligatory after assignments appearing
-elsewhere.  
+elsewhere.  (Semicolons are also forbidden after code(\property) assignments.)
 
 An identifier can be created with any string for its name, but you
 will only be able to refer to identifiers whose names begin with a
 letter and are entirely alphanumeric.  It is also impossible to refer
 to an identifier whose name is the same as the name of a keyword.  The
 following words are keywords:
-verb(absdynamic     duration        mark           property   skip       
-accepts        font            midi           pt         spandynamic
-alternative    grouping        mm             relative   tempo      
-bar            header          musicalpitch   remove     time       
-cadenza        in              name           repeat     times      
-chordmodifiers include         notenames      scm        translator 
-chords         key             notes          scmfile    transpose  
-clef           keysignature    paper          score      type       
-cm             lyrics          partial        script     version    
-consists       maininput       penalty        shape)
+verb(accepts         duration      midi          relative      textscript 
+alternative     font          mm            remove        time       
+bar             grouping      musicalpitch  repeat        times      
+cadenza         header        name          scm           translator 
+chordmodifiers  in            notenames     scmfile       transpose  
+chords          include       notes         score         type       
+clef            key           paper         script        version
+cm              keysignature  partial       shape      
+consists        lyrics        penalty       skip       
+consistsend     maininput     property      spanrequest
+context         mark          pt            tempo)
 
 The right hand side of an identifier assignment is parsed completely
 when the assignment is made.  It therefore must have any context
@@ -493,7 +472,37 @@ mudela(fragment,verbatim,center)(
 R1*3 c'1 d'
 )
 
+
+subsect(Automatic Beam Generation)
+label(autobeam)
+
+By default, Lilypond will generate beams automatically.  This feature can be
+disabled by setting the code(Voice.beamAuto) property to 0.  It can be
+overridden for specific cases by specifying explicit beams as
+described in Section ref(manualbeam).  
+
+In order to decide how to generate beams, Lilypond uses a large number
+of Voice properties, whose default values appear in
+file(auto-beam-settings.ly).  In general, beams can begin anywhere,
+but their ending location is significant.  Beams can end on a beat, or
+at durations specified by the code(Voice.beamAutoEnd) property.  To
+end beams every quarter note, for example, you could use set
+code(Voice.beamAutoEnd) equal to code("1/4").  To end beams every
+three eighth notes you would set it to code("3/8").  The same syntax
+can be used to specify beam starting points using code(Voice.beamAutoBegin).
+
+To allow different settings for different time signatures, these
+property names can start with code(time)var(N)code(_)var(M) to
+restrict the definition to var(N)code(/)code(M) time.  So for example,
+to specify beams ending only for 6/8 time you would use the property
+code(Voice.time6_8beamAutoEnd).  To allow different endings for notes
+of different durations, the duration can be tacked onto the end of the
+property.  To specify beam endings for beams that contain 32nd notes,
+you would use code(Voice.beamAutoEnd_32).
+
+
 subsect(Note Spanners: Beams, Slurs and Ties)
+label(manualbeam)
 
 A beam is specified by surrounding the beamed notes with brackets
 code([) and code(]).  
@@ -545,6 +554,7 @@ mudela(fragment,verbatim,center)(
 )
 
 
+
 subsect(Note Ornaments)
 
 A variety of symbols can appear above and below notes to indicate
@@ -596,13 +606,13 @@ mudela()(
         c''4-^_"c-\\^{ }"  s4 }
         \paper { linewidth = 12.\cm; }})
 
-Dynamic marks are specified by using an identifier after a note
-without a dash: code(c4 \ff).  Note that this syntax is inconsistent
-with the syntax for other types of ornaments.  The available dynamic
-marks are: code(\pppppp), code(\ppppp), code (\pppp), code(\ppp), code(\pp), 
-code(\p), code(\mp), code(\mf), code(\f), code(\ff), code(\fff),
-code(\ffff), code(\fffff), code(\ffffff), 
-code(\fp), code(sf), code(\sff), code(\sp), code(\spp), (\sfz) and code (\rfz).
+Dynamic marks are specified by using an identifier after a note without a dash:
+code(c4 \ff).  Note that this syntax is inconsistent with the syntax for other
+types of ornaments.  The available dynamic marks are: code(\pppppp),
+code(\ppppp), code(\pppp), code(\ppp), code(\pp), code(\p), code(\mp),
+code(\mf), code(\f), code(\ff), code(\fff), code(\ffff), code(\fffff),
+code(\ffffff), code(\fp), code(\sf), code(\sff), code(\sp), code(\spp),
+code(\sfz) and code(\rfz).
 
 A crescendo mark is started with code(\cr) and terminated with
 code(\rc).  A decrescendo mark is started with code(\decr) and
@@ -691,7 +701,7 @@ determine the first note of the next chord.  But other notes within the second
 chord are determined by looking at the immediately preceeding note.  
 
 mudela(fragment,verbatim,center)(
-\relative c' { <c e g> 
+\relative c' { <c e g> 
     <c' e g> <c, e' g> }
 ) 
 
@@ -888,7 +898,8 @@ Because LilyPond knows the durations of all musical elements, the time
 signature enables LilyPond to draw bar lines automatically.  The time
 signature is specified with the code(\time) keyword: code(\time 3/4).
 If no time signature is given, LilyPond assumes 4/4.  The automatic
-generation of bar lines can toggled with the code(\cadenza) keyword,
+generation of bar lines can toggled with the code(\cadenza) keyword or the
+code(Staff.barNonAuto) property,
 and an incomplete measure at the start of the music can be created
 using the code(\partial) keyword: code(\partial 8*2;) creates a
 starting measure lasting two eighth notes.
@@ -976,27 +987,30 @@ END OF COMMENT  )
 
 sect(Repeats)
 
-
-OUTDATED. FIXME
-
 In order to specify repeats, use the code(\repeat) keyword.  By
 default, repeats are printed with repeat symbols.  
 mudela(fragment,verbatim,center)(
 c'1
-\repeat 2 { c'4 d' e' f' }
-\repeat 2 { f' e' d' c' })
+\repeat semi 2 { c'4 d' e' f' }
+\repeat semi 2 { f' e' d' c' })
 In order to specify alternate endings, use the code(\alternative)
 keyword.  
 mudela(fragment,verbatim,center)(
 c'1
-\repeat 2 {c'4 d' e' f'} 
+\repeat semi 2 {c'4 d' e' f'} 
+\alternative { {d'2 d'} {f' f} })
+The code(semi) specifies that normal repeats will be printed.  If
+code(fold) is used instead then the alternatives will be stacked:
+mudela(fragment,verbatim,center)(
+c'1
+\repeat fold 2 {c'4 d' e' f'} 
 \alternative { {d'2 d'} {f' f} })
 When the repeats involve partial measures, it will be necessary to use
 code(\partial) keywords in a somewhat unexpected way 
 to indicate some measure lengths.
 mudela(fragment,verbatim)(
 \context Staff { \relative c'{
-  \repeat 2 { \partial 4; e | c2 d2 | e2 f2 | }
+  \repeat semi 2 { \partial 4; e | c2 d2 | e2 f2 | }
   \alternative { { g4 g g } {\partial 1; a a a a | b1 } }
 }})
 Repeats can be unfolded by setting the property Staff.unfoldRepeats.
@@ -1008,7 +1022,7 @@ first alternative is assumed to be repeated enough to equal to
 specified number of repeats.  
 mudela(fragment,verbatim)(
 \context Staff { \relative c'{
-  \repeat 3 { \partial 4; e | c2 d2 | e2 f2 | }
+  \repeat semi 3 { \partial 4; e | c2 d2 | e2 f2 | }
   \alternative { { g4 g g } {\partial 1; e4 e e } 
                  {\partial 1; a a a a | b1 } }
 }})
@@ -1056,8 +1070,8 @@ has no effect on the MIDI output.
 
 dit(code(\cadenza) var(togglevalue)code(;)) Toggles the automatic generation
 of bar lines.  If var(togglevalue) is 0 then bar line generation is
-turne off.   If var(togglevalue) is  1  then a bar is  immediately
-printed and bar generation is turned  on.
+turned off.   If var(togglevalue) is  1  then a bar is  immediately
+printed and bar generation is turned on.
 
 dit(code(\clef) var(clefname)code(;)) Allowed only in music.  
 Sets the current clef.  The argument is
@@ -1106,6 +1120,16 @@ code(\translator) block.  It specifies that an engraver or performer named
 var(string) should be added to the translator.  See Section
 ref(translators).
 
+dit(code(\consistsend) var(string)code(;)) Unknown function.  
+
+dit(code(\context) var(contexttype) [code(=) var(contextname)]
+var(music) or code(\context) var(translatortype)code(;)) The first
+variant is used only within music to create an instance of a
+context.  The new context can optionally be given a name.  The
+specified var(music) is processed in the new context. The second
+variant appears within a code(\translator) block and specifies the
+type of translator being created.
+
 dit(code(\duration) code({) var(length) var(dotcount) code(})) Specify note
 duration.  The parameter var(length) is the negative logarithm (base
 2) of duration: 1 is a half note, 2 is a quarter note, 3 is an eighth
@@ -1202,7 +1226,7 @@ the music lasts only for the specified duration.  Use also to specify
 the duration of the first measure of the argument to
 code(\alternative).  
 
-dit(code(\penalty) code(=) var(int)code(;)) Allowed only in music.
+dit(code(\penalty) var(int)code(;)) Allowed only in music.
 Discourage or encourage line breaks.  See identifiers code(\break) and
 code(\nobreak) in Section ref(ident). 
 
@@ -1227,10 +1251,12 @@ dit(code(\remove) var(string)code(;)) Can appear only in a
 code(\translator) block.  Specifies that a performer or engraver named
 var(string) should be removed.  See Section ref(translators).  
 
-dit(code(\repeat) var(count) code({) var(music) code(}))
+dit(code(\repeat) var(style) var(count) code({) var(music) code(}))
 Repeats the specified
 music var(count) times.  Alternative endings can be specified by adding a
-code(\alternative) keyword after the code(\repeat).  
+code(\alternative) keyword after the code(\repeat).  The var(style)
+parameter should be either code(semi), for regular repeats,  or
+code(fold) for repeats displayed vertically. 
 
 dit(code(\scm) var(scheme)code(;)) Embeds specified Scheme code.  
 
@@ -1266,22 +1292,13 @@ var(duration).  A gap will be left for the skipped time with no notes
 printed.  It works in Note Mode or Lyrics Mode (but generates a
 mysterious error in lyrics).
 
-OBSOLETE
-
-dit(code(\spandynamic) code({) var(kind) var(toggle) code(})) Internal
-keyword for crescendo and decrescendo symbols.  The first parameter
-var(kind) is set to 1 for a crescendo and -1 for a decrescendo.  The
-second parameter is set to 1 to start the mark and 2 to stop it.
-Users should use the abbreviations which are defined in the
+dit(code(\spanrequest) var(startstop) var(type)).  Define a spanning request
+var(startstop) is either -1 (code(\start)) or 1 (code(\stop)). The var(type)
+parameter is a string that describes what should be started.  Supported types
+are "crescendo", "decrescendo", "beam", "slur".  This is an internal command.
+Users should use the abbreviations  which are defined in the
 initialization file file(dynamic.ly).
 
-FIXME:
-
-code(\spanrequest) var(startstop) var(type).  Define a
-spanning request var(startstop) is either -1 (start) or 1
-(stop). var(type) is a string that describes what should be started.
-Supported types are "crescendo", "decrescendo", "beam", "slur".
-
 dit(code(\tempo) var(duration) = var(perminute)code(;)) Used within
 code(\midi) or within music to specify the tempo.  For example, 
 `code(\midi { \tempo 4 = 76;})' requests output with 76 quarter notes
@@ -1289,6 +1306,9 @@ per minute.  Note that if the music contains several tempo commands,
 only the last one is used to set the tempo for the entire MIDI output. 
 COMMENT(Is this true?)
 
+dit(code(\textscript) var(text) var(style)) Print the specified text as a
+script in the specified style.  
+
 dit(code(\time) var(numerator)code(/)var(denominator)code(;)) Change the time
 signature.  The default time signature is 4/4.  
 
@@ -1315,13 +1335,8 @@ and if it appears inside code(\relative), then any notes specified for
 transposition should be specified inside another code(\relative).  See Section
 ref(transpose).  
 
-dit(code(\context) var(contexttype) [code(=) var(contextname)]
-var(music) or code(\context) var(translatortype)code(;)) The first
-variant is used only within music to create an instance of a
-context.  The new context can optionally be given a name.  The
-specified var(music) is processed in the new context. The second
-variant appears within a code(\translator) block and specifies the
-type of translator being created.
+dit(code(\type) var(string)code(;)) Use inside code(\translator) to
+specify the type of the translator.  
 
 dit(code(\version) var(string)) Specify the version of Mudela that a
 file was written for.  The argument is the version number, for example
@@ -1423,10 +1438,6 @@ when using code(\property) in Lyrics mode.  Because of the way strings
 are parsed, either put quotes around the arguments to code(\property)
 or be sure to leave a space on both sides of the dot.
 
-GONE dit(code(textalignment)) Controls alignment of lyrics.  Set to code(\left)
-to align the left end of the lyric with the note; set to code(\right) to
-align the right end of the lyric with the note.  Set to code(\center) to
-align the center of the lyric with the note.  
 
 )
 
@@ -1434,6 +1445,22 @@ subsubsubsect(Voice properties)
 
 description(  
 
+dit(code(stemLeftBeamCount)) Specify the number of beams to draw on
+the left side of the next note.  
+
+dit(code(stemRightBeamCount)) Specify the number of beams to draw on
+the right side of the next note.  
+
+dit(code(beamAuto)) If set to 1 then beams are generated
+automatically.  If set to zero then no beams will be automatically
+generated.  The default value is 1.  
+
+dit(code(beamAutoEnd)) Specifies when automatically generated beams
+can end.  See Section ref(autobeam).
+
+dit(code(beamAutoBegin)) Specifies when automatically generated beams
+can start.  See Section ref(autobeam). 
+
 dit(code(textEmptyDimension)) If set to 1 then text placed above or
 below the staff is assumed to have zero width.  
 
@@ -1477,7 +1504,7 @@ the number of half-steps to transpose by.
 dit(code(oldTieBehavior)) Set to 1 in order to get old tie behavior
 where ties would connect unequal pitches.  
 
-dit(code(ydirection)) Determines the direction of stems, subscripts,
+dit(code(verticalDirection)) Determines the direction of stems, subscripts,
 beams, slurs, and ties.  Set to code(\down) to force them down,
 code(\up) to force them up, or code(\free) to let LilyPond decide.
 This can be used to distinguish between voices on the same staff.  The
@@ -1485,12 +1512,12 @@ code(\stemdown), code(\stemup), and code(\stemboth) identifiers set
 this property.  See also the identifiers code(\voiceone),
 code(\voicetwo), code(\voicethree) and code(\voicefour).
 
-dit(code(slurydirection)) Set to code(\free) for free choice of slur
+dit(code(slurVerticalDirection)) Set to code(\free) for free choice of slur
 direction, set to code(\up) to force slurs up, set to code(\down) to
 force slurs down.  The shorthands code(\slurup), code(\slurdown), and
 code(\slurboth) are available.
 
-dit(code(tieydirection)) Set to code(\free) for free choice of tie
+dit(code(tieVerticalDirection)) Set to code(\free) for free choice of tie
 direction, set to code(\up) to force ties up, set to code(\down) to
 force ties down.  
 
@@ -1498,19 +1525,17 @@ dit(code(slurdash)) Set to 0 for normal slurs, 1 for dotted slurs, and
 a larger value for dashed slurs.  Identifiers code(\slurnormal) and
 code(\slurdotted) are predefined to set the first two settings.
 
-dit(code(hshift)) Set to 1 to enable LilyPond to shift notes
+dit(code(horizontalNoteShift)) Set to 1 to enable LilyPond to shift notes
 horizontally if they collide with other notes.  This is useful when
 typesetting many voices on one staff.  The identifier code(\shift) is
-defined to enable this.
+defined to enable this.  If there are several voices, every voice must
+have a distinct value of this property or no shifting will occur.
 
 dit(code(dynamicDir)) Determines location of dynamic marks.  Set to
 code(\up) to print marks above the staff; set to code(\down) to print
 marks below the staff.
 
-GONE dit(code(textalignment)) Controls alignment of superscripted and
-subscripted text.  Set to \left to align the left end of the text with
-the note; set to \right to align the right end of the text with the
-note.  Set to \center to align the center of the text with the note.
+dit(code(dynamicStyle)) Set the text style for dynamics.  
 
 dit(code(textStyle)) Set the text style for superscripts and
 subscripts.  See above for list of text styles.
@@ -1553,6 +1578,39 @@ subsubsubsect(Staff properties)
 
 description(
 
+dit(code(createInitdefaultClef)) Specify whether clefs are created on
+default?  (Doesn't seem to do anything.)
+
+dit(code(barNumberDirection)) Set to code(\up) or code(\down) to put
+bar numbers above or below the staff.  
+
+dit(code(barNumberHangOnClef)) Set to 1 to cause bar numbers to appear
+above or below the clef instead of on the bar line.
+
+dit(code(barNumberScriptPadding)) Sets extra space between the bar
+number and the bar it labels.
+
+dit(code(markHangOnClef)) Set to 1 to cause marks to appear by clefs
+instead of by bar lines.
+
+dit(code(marginDirection)) Set to code(\left) or code(\right) to
+specify location of marginal scripts.  
+
+dit(code(marginScriptPadding)) Specify extra space for marginal scripts.
+
+dit(code(forgetAccidentals)) Causes accidentals to be printed at every
+note instead of remembered for the duration of a measure.  
+
+dit(code(noResetKey)) Do not reset the key at the start of a measure.
+Accidentals will be printed only once and are in effect until
+overridden, possibly many measures later. 
+
+dit(code(staffLineLeading)) Specifies the distance (in points) between lines
+of the staff.  
+
+dit(code(postBreakPadding)) Extra space in points to be added after
+the clef, time signature and key signature on the staff.
+
 dit(code(barAtLineStart)) Set to 1 to produce a bar line after the
 clef at the start of each line (but not at the beginning of the
 music).  
@@ -1570,6 +1628,9 @@ than the music given in an code(\alternative).
 
 dit(code(barNonAuto)) If set to 1 then bar lines will not be printed
 automatically; they must be explicitly created with code(\bar) keywords.
+Unlike with the code(\cadenza) keyword, measures are still counted.  Bar
+generation will resume according to that count if this property is set to
+zero.  
 
 dit(code(defaultClef)) Determines the default clef.  See code(\clef)
 keyword.
@@ -1656,6 +1717,10 @@ subsubsubsect(GrandStaff properties)
 
 description( 
 
+dit(code(alignmentReference)) Set to code(\center) for vertical
+alignment reference point to be in the center of the vertical group.
+Set to code(\up) to put the reference point at the top of the group. 
+
 dit(code(maxVerticalAlign)) Set the maximum vertical distance between
 staffs.
 
@@ -1766,25 +1831,25 @@ dit(code(\sf)) Print a subito-forte symbol on preceeding note.
 dit(code(\sff)) Print a subito-fortissimo symbol on preceeding note.
 dit(code(\sfz)) Print a sforzato symbol on preceeding note. 
 dit(code(\shiftoff)) Disable horizontal shifting of note heads that collide.  
-Sets the Voice.hshift property.
+Sets the Voice.horizontalNoteShift property.
 dit(code(\shifton)) Enable note heads that collide with other note heads
-to be shifted horiztonally.  Sets the Voice.hshift property.
+to be shifted horiztonally.  Sets the Voice.horizontalNoteShift property.
 dit(code(\slurboth)) Allow slurs to be above or below notes.  This
-sets the Voice.slurydirection property. 
+sets the Voice.slurVerticalDirection property. 
 dit(code(\slurdown)) Force slurs to be below notes. This sets the
-Voice.slurydirection property. 
+Voice.slurVerticalDirection property. 
 dit(code(\slurup)) Force slurs to be above notes.  This sets the
-Voice.slurydirection property.  
+Voice.slurVerticalDirection property.  
 dit(code(\sp)) Print a subito-piano symbol on preceeding note.
 dit(code(\spp)) Print a subito-forte symbol on preceeding note.
 dit(code(\specialkey)) Allow keys signatures do differ in different
 octaves.  This sets the Staff.keyoctaviation property.  
 dit(code(\stemboth)) Allow stems, beams, and slurs to point either
-direction.  This sets the Voice.ydirection property. 
+direction.  This sets the Voice.verticalDirection property. 
 dit(code(\stemdown)) Force stems, beams, and slurs to point down.
-This sets the Voice.ydirection property. 
+This sets the Voice.verticalDirection property. 
 dit(code(\stemup)) Force stems, beams and slurs to point up.  This
-sets the Voice.ydirection property. 
+sets the Voice.verticalDirection property. 
 dit(code(\traditional)) Used for setting the 
 Score.beamquantisation property.  Is equal to 2.  
 dit(code(\up)) Used for setting various direction properties.  Is
@@ -1879,6 +1944,7 @@ majority selection is used.  If set to 3.0, then mean selection is
 used based on the mean center distance.  If set to 4.0 then median
 selection is used, based on the median center distance.  
 dit(code(castingalgorithm)) 
+dit(code(crescendo_shorten))
 dit(code(forced_stem_shorten)) Stems that have been forced to go the
 unnatural direction are shortened by this amount.  Equal to
 dit(code(forced_stem_shorten0))
@@ -1926,7 +1992,7 @@ dit(code(tie_x_minimum))
 subsect(MIDI Instrument Names)
 label(midilist)
 
-The MIDI instrument name is set by the code(Staff."midiInstrument")
+The MIDI instrument name is set by the code(Staff.midiInstrument)
 property or, if that property is not set, the code(Staff.instrument)
 property.  The instrument name should be chosen from this list.  If
 string does not exactly match one from this list then LilyPond uses
index 844103c86f8768f4c11855909f2ea2f1c1478eab..5594db317c65d208544a5cb9cf86b73ff231af51 100644 (file)
@@ -22,6 +22,8 @@ it()nemail(Neil Jerram)(nj104@cus.cam.ac.uk).
     parts of Documentation/Vocab*
 it()Donald Ervin Knuth,  lurl(http://www-cs-staff.stanford.edu/~knuth/)
     mf/ital-*.mf (these were taken from the CM fonts)
+it()nemail(Michael Krause)(m.krause@tu-harburg.de),
+    breathing signs
 it()nemail(Werner Lemberg)(xlwy01@uxp1.hrz.uni-dortmund.de),
     misc bugfixes, some Beam and Stem code. 
 it()nemail(David R. Linn)(drl@vuse.vanderbilt.edu),
index 88f16caa2241eb454f2dbb38a78472d5688f1995..9e0980fcaea88af5403152ebab46002ce0c60331 100644 (file)
@@ -21,6 +21,7 @@ redef(htmlbodyopt)(2)()
 COMMENT(redef(includefile)(1)(INCLUDEFILE(man/ARG1)))
 includefile(programs.yo)
 
+nodeprefix()
 redef(article)(3)(nodeprefix()chapter(ARG1)nodeprefix(Tutorial ))
 COMMENT(yodl2texinfo should be able to cope now, although ugly...)
 redef(article)(3)(chapter(ARG1))
@@ -39,9 +40,15 @@ redef(article)(3)(nodeprefix()chapter(ARG1)nodeprefix(Mutopia ))
 COMMENT(yodl2texinfo should be able to cope now, although ugly...)
 redef(article)(3)(chapter(ARG1))
 
+COMMENT( 
+
+dropped? --jcn
+
 redef(includefile)(1)(INCLUDEFILE(ARG1))
 includefile(mutopia.yo)
 
+)
+
 nchapter(Concept Index)
 COMMENT( urg makeindex())
 printindex()
diff --git a/NEWS b/NEWS
index 291186ca291439bc178e722e7a59dfe0f9ded1a0..d96fac11376c03a0b291be94520fead1a27c0e56 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,38 @@
+pl 49.mb1
+       - bf: ly2dvi -N
+       - Added dynamicPadding property (applies only to dynamic marks, 
+         not (de)crescendi.
+
+pl 49.jcn4
+       - resurrected gnossienne-4
+       - Documentation fixes (for texinfo get yodl-1.31.13, tbr)
+       - minor abc2ly fixes; successfully converted some simple abc files from
+           http://faeryland.tamu-commerce.edu/joyce/
+       - www.mail-archive.COM
+
+pl 49.jcn1
+       - guile scm_gc_mark () workaround:
+       - via scm output wrapper buildscripts/lilypond.sh, set:
+           PATH=$LILYPONDPREFIX/buildscripts/out:$PATH
+       - scm output fixes
+
+pl 48.hwn2
+       - bf: rest-collisions.
+       - cleaned up standchen
+       - bf: slur dims.
+       - bf: unfold without enough alternatives.
+       - Use Lily version for \version.
+
+
 pl 49.uu1
-       - ran purify. Fixed some small problems
+       - ran purify. Fixed some small problems, plugged some leaks.
+       - bf: linebreak at |:
+       - doc updates by Adrian Mariano
 
+pl 49-rst
+       - Breathing signs by Michael Krause
+
+************
 
 pl 48.hwn1
        - \property hshift -> \property horizontalNoteShift (mudela 1.0.21)
diff --git a/TODO b/TODO
index 3ad59da0474319d1fe0e611743abc8e829a19fae..c59decc2573ab6b06f2128850480566ebc6a52d8 100644 (file)
--- a/TODO
+++ b/TODO
@@ -9,46 +9,10 @@ Most of the items are marked in the code as well
 Grep for TODO and ugh/ugr/urg.  
 
 .* BUGS
-. * junk separate mudela versioning.
 . * indent = 0.0 with linewidth=-1.0
 . * PostScript
 .  * header for PS enteredby = "bla <bla@bar.com>"
 .  * ps/lily.ps see comments.
-. * By the way, I'm not sure the translation of 'C, G, and F clef'
-> should include Alto, Violin, Bass <clef translated>.
-[..]
-
-I understand your point.  It should be changed.
-
-
-> 
-> The terms C-clef, G-clef, F-clef stand for the signs, being
-> mutated forms of a C, a G and an F.
-> 
-> The terms Violin Clef etc. stand for the signs being used in
-> special positions on the staff.
-> 
-> The G-clef-sign indicates g' on the line around which the
-> snake centers. It is a Violin Clef if it is centered around the
-> second line (from below), and a French Violin Clef if it is
-> centered around the lowest.
-> 
-> The C-clef indicates c' on the line that gets
-> 'pinched' by it. It is a Soprano, Mezzosoprano (English?), Alto, Tenor
-> and (don't remember exactly, maybe Baritone) Clef, depending on
-> the line (from highest to lowest).
-> 
-> The F-clef-sign indicates f on the line between
-> the two dots. If it's on the second line from above, it is called
-> Bass Clef. If it's on the middle line, it is called (maybe
-> Baritone) Clef too, because it indicates the same pitches as the
-> C-Clef on the highest line. So, you could write an Alto Clef by
-> putting the F-clef sign on the lowest line (but that's _very_
-> uncommon).
-> 
-> Sorry, this is written very messy because I'm in a hurry,
-> but I hope you understand what I want to say.
-> 
 . * didot / big point.
 . * midi key.
 . * Repeats
@@ -60,11 +24,25 @@ I understand your point.  It should be changed.
 .  * kind of 'initial property' iso fold/volta(semi)/unfold strings
 . * fix singleStaffBracket
 . * declare performers in \midi
+. * input/test/stem-spacing.ly: 12/4 touches first note
+4 too high?
 . * fix MIDI
 . * \shape 1st dim skipped? 
 . * turn slope-damping on/off
 . * We need feta-din*.mf files for more sizes than 10.
 . * fix dynamics decently, ie. use kerning & ligatures.  
+. * 
+BUGS:
+> +
+> +    Causes segfault:
+> +
+> +    \score{
+> +      \notes{  \context Voice {
+> +         \repeat fold 2 { a b c d } {}
+> +     }
+> +     }
+> +    }
+> +
 . * dots & rest collisions?
 . * mudela-book.py
 .  * fix \mudelafile{} to have decent functionality
@@ -74,18 +52,8 @@ this fragment is floating eps, than 1, otherwise 2). say
 preMudelaExample[eps]{}, and change it in document body sometimes.
 .  * use less RE's
 . * slurs colllide with lyrics.
-. * Is there any reasonable way to do this: I would like to have one file
-that can generate the same tune in two different modes without having
-to go through and rewrite all the music in the other mode.
-
-Lyrics and scripts collide.
-. * Phrasing:  Indicating the textual underlay of a piece, or
-otherwise dividing a piece into phrases.
-
-There are distinct ways of specifying the first two (although at
-present, they're not properly distinguished) but no distinct way to
-specify the third.  Should there be?
-. * rest collision minimum dist.
+. * junk _ in lyric mode for " "
+. * Lyrics and scripts collide.
 . * a note with a circle after it, meaning:
 
    note + circle = note + 1/4 of its length
@@ -96,14 +64,16 @@ specify the third.  Should there be?
    possible with lily?
 . * tuplets that are written as "number : note", for example
    "3 : [image of a half note here]".  possible?
-. * repeat engraver, gallina.ly
 
 . * Matanya's tips: 
+.  * don't  shorten stems/staffs closer to each other.
 .  * accidentals closer to note head
 .  * to space the staffs/staffgroups contained in the score.  
 .  * heavier beams?
 
 .* Cleanups needed
+. * \$ and $ identifier syntax.
+. * Y dimension units: staffspace vs. Point
 . * Beam
 . * Stem
 . * Slur
@@ -139,7 +109,6 @@ specify the third.  Should there be?
 . * Abstraction for engravers:
 .  * make "in-between" engraver (Tie, Extender)
 .  * make wide_spanner_engraver (line_group_spanner, staff_symbol)
-. * remove Interval dim_ from Dimension_cache and rename the struct.
 . * do scaled fonts generally 
 . * The Lilypond accidental symbols are available through the TeX macros, 
 \textflat, \textsharp and \textnatural defined in the init file
@@ -148,14 +117,11 @@ where XX corresponds to the size. I don't know where (or even if) they
 are installed but they are generated in the mf/out/ directory during the
 compilation.
 . * make dependencies () a virtual function.
-. * one big ly2dvi input that includes *all* tests.
 . * store req -> element, element -> element causes for warnings
 . * include examples in RPM.
 . * fix partial measures in meaningful way.
-. * add scripts to bars eg.  |^"bla" 
 . * relative mode for mi2mu
 . * uniformise recent feta contributions.
-.  * use SCM and Molecules for {accordeon stuff, }
 .  * bigger and fatter 4/4 C
 . * sort out directory stuff.
 .  * --prefix option?
@@ -167,11 +133,6 @@ compilation.
 . * do --safe for PS output?
 . * convert-mudela --output
 . * Staff_margin (with a partial measure.)
-. * fix pletvisibility properties:
-.  * bracket on/off/no-bracket-when-beam
-.  * num on/off/no-num-when-beam
-. * fix: standchen.
-. * junk text{sharp,flat,etc}
 . * fix convert-mudela manpage
 . * decimal point in \paper {}
 . * {  \voiceone <a'4.*2/3  d''4.*2/3 fis''4.*2/3>  [g''8 fis'' e''] d''4 |}
@@ -182,7 +143,6 @@ compilation.
 . * scm-ify \property values.
 . * move class Lookup {} into scm
 . * msgfmt -o check?
-. * \breathmark TeX macro 
 . * add new glyphs to font.ly
 . * formatting of input stuff. 
 . * \notes{ a \< b \cr } vs \notes{ a \< b \! }
@@ -203,6 +163,38 @@ compilation.
 
 .* STUFF
 . * compulsory hshift
+. * 
+My wish list for lyrics. I dream of a time when I will have enough time to
+become familiar enough with the source code to be able to implement some of
+these myself, but I don't know when that will be, so I thought I'd "publish"
+my suggestions in case someone else is in a position to give them some
+priority. Otherwise, perhaps they could go on the todo list?
+
+If any of these are already implemented, please let me what the syntax is to
+use them!
+
+1. Stanza numbering. Numbering at the beginning of a song with the number
+set to the left of the first note. It would also be nice (but not as
+important) to be able to have some form of automatic numbering at the
+beginning of each new line. This would make it easier to follow songs with a
+large number of stanzas.
+
+2. Hyphens between syllables. At the moment there appears to be no easy way
+to position a hyphen mid-way between the syllables it breaks.
+
+3. Notes centred above/below lyrics rather than left-aligned.
+
+4. It would be very nice to be able to build some kind of phrasing into the
+lyrics of hymns, etc, so that the first words of a phrase are left aligned
+with each other, the last words are right aligned, and the words in between
+are centred.
+
+5. In a song, with (say) four stanzas and a chorus, it would be nice to be
+able to vertically align the chorus midway between the staves.
+
+6. It would be nice to be able to put vertical brackets either side of a
+repeated section with different words for each repeat.
+
 . * Give # lines in linebreaking.  
 . * arrows on slurs.
 . * rewrite context defs using Scheme
@@ -251,9 +243,9 @@ compilation.
 . * add mudela-book-doc source to webstie.
 . * Rethink Time_description
 \cadenza , \meter, \grouping should all be \properties
+. * fix singleStaffBracket
 . * rename
 .  * measure -> bar
-.  * abbrev -> tremolo
 .  * abbreviation-beam -> (measured/unmeasured) tremolo
 .  * partial -> anacrouse
 . * robustify Beam (in case of no stems, 32nd notes)
@@ -298,6 +290,16 @@ touching it.
     small sizes.
 
 .* 3RD PARTY BUGS
+. * UMR: Uninitialized memory read
+      This is occurring while in:
+            qst            [qsort.c]
+            qsort          [libc.so.1]
+            Keyword_table::Keyword_table(Keyword_ent*) [keyword.cc:28]
+            My_lily_lexer::My_lily_lexer() [my-lily-lexer.cc:78]
+            My_lily_parser::parse_file(String,String) [my-lily-parser.cc:54]
+            do_one_file(String,String) [scores.cc:124]
+      Reading 4 bytes from 0xefffeca8 on the stack.
+      Address 0xefffeca8 is 728 bytes below frame pointer in function 
 . * GNU diff 2.7: diff -rN does not see a new directory with empty file
 . * mf-to-table -> add space before ; in AFM output.  (-> check AFM
     spec. Is this a bug in afm2tfm?)
@@ -490,16 +492,15 @@ hesitate to ask.
 .  * specify number of lines
 
 .* INPUTLANGUAGE
-. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc. 
+. * \rhythms 4 16 16 16 16; c c c c c -> c4 c16 etc.
+. * convention for slurs vs. phrasing marks.
 . * Language:
 .  * \translator -> ?
 .  * fix \partial 
 .  * \bla {} vs \bla ; 
 .  * mix engraver hacking with music ?
 .  * \once\property  KEY = VAL
-.  * \addtranslator, \removetranslator
-.  * junk ^ and _ for scripts
-.  * junk _ for lyrics.
+.  * input property
 .  * abstract grammar.
 . * Figure out semicolons.
 . * c4 4 4 4 for c4 c4 c4 c4?
@@ -529,8 +530,6 @@ hesitate to ask.
 
 . * lyric in staff  (sharpsharp in staff, text below)
 
-. * half sharps/flats
-
 . * write Dynamic_line (to group dynamics horizontally)
 
 . * use Real for all y positions.
@@ -543,8 +542,6 @@ hesitate to ask.
 
 . * midi esp.: use I32 iso int where 32 bits are needed (or assumed...)
 
-. * stafftypes: voice names/ instrument names.
-
 . * lily \tempo
 
 . *   % toe to bheel   four to five
@@ -556,11 +553,8 @@ hesitate to ask.
           (where "to" is a tiny bow)
 
 . * auxilliary file for caching info.
-
 . * Text_crescendo
 
-. * revise calcideal
-
 .* IDEAS
 . * Output data structures of Mudela in XML/SGML.
 . * create libmudela, or liblily_frontend
@@ -568,104 +562,6 @@ hesitate to ask.
 . * Spacing_request for manually adjusting spacing
 . * caching breakpoints
 . * used fixedpoint arithmetic for min. energy.
-. * move towards incremental algorithms.
-. * versioning stuff (cvt mudela, mudela, etc.)
-. * dynamic loading of engravers? 
-.* SMOBS
-Han-Wen Nienhuys <hanwen@cs.uu.nl> writes:
-
->      class Foo_class {
->              Foo_smob *smob_ptr_;
->      }
-> 
->      struct Foo_smob {
->              Foo_class *class_ptr_
->      }
-
-Usually you can get away without having this interlinked structure.
-One piece of information you need when exporting objects to scheme is
-the smob tag for your class.  You might store this value (a long) into
-a class static variable, or a file static variable.  I'll use a class
-static variable in this example.
-
-I typically use code that works like this (untested code ahead):
-
-class Foo_class {
-    static long *Foo_smob_tag;
-    SCM obj; // representation as a scheme object, description comes later
-}
-
-// call this once on startup
-void init_Foo_class {
-    static scm_smobfuns type_rec;
-
-    type_rec.mark = foo_mark;
-    type_rec.free = foo_free;
-    type_rec.print = foo_display;
-    type_rec.equalp = 0;
-    Foo_class::Foo_smob_tag = new int(scm_new_smob(type_rec));
-}
-
-When you want to export an object to scheme, you put a pointer to the
-object itself in the cdr of the cell, and the tag in the car of the
-cell.  The code looks like this:
-
-// Is this a Foo?
-static int
-foo_p(SCM obj)
-{
-    return(SCM_NIMP(obj) && SCM_CAR(obj) == Foo_class::Foo_smob_tag);
-}
-
-// given a Scheme representation, return, a C++ representation
-static Foo_class *
-foo_unbox(SCM obj)
-{
-    return((Foo_class*)SCM_CDR(obj));
-}
-
-// the SCM representation of the object is stored inside itself
-// this will become useful when destructor gets called
-static SCM
-foo_box(Foo_class *foo)
-{
-    SCM_DEFER_INTS;
-    SCM_NEWCELL(foo->obj);
-    SCM_SETCAR(foo->obj, Foo_class::Foo_smob_tag);
-    SCM_SETCDR(foo->obj, (SCM)foo);
-    SCM_ALLOW_INTS;
-    return foo->obj;
-}
-
-> C++ determines life time, so what is the strategy?
-
-What happens now when the destructor gets called?  Lets set the cdr to
-NULL, and then check for that in all of the primitive functions that
-use your smob.  We'll call this notion 'live'; a scheme object is
-'live' if the C++ representation still exists, it's dead if the C++
-object is gone.  You can still have references to dead objects in
-scheme code; it's just an error to use them.  This idea is stolen from
-Emacs's handling of buffers ('buffer-live-p' and friends).
-
-Add another function, foo_live_p:
-
-static int
-foo_live_p(SCM obj)
-{
-    return(foo_p(obj) && SCM_CDR(obj) != NULL);
-}
-
-In you destructor, you need to do:
-
-~Foo_class()
-{
-    SCM_CDR(this->obj, NULL);
-}
-
-When writing new primitives, now just check foo_live_p().
-
-I hope the above helps,
-
 
 * OUTLINE SETUP
 .* .EMACS
diff --git a/VERSION b/VERSION
index 12a299d77461e26352497a41851f73660ca5a03a..0e7b01172e0f82904bdf188e9ebb7957d161ff46 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=1
-PATCH_LEVEL=49
-MY_PATCH_LEVEL=uu1
+PATCH_LEVEL=50
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
diff --git a/buildscripts/lilypond.sh b/buildscripts/lilypond.sh
new file mode 100644 (file)
index 0000000..e3d8e70
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+# via scm wrapper
+
+foo=lilypond.$$
+trap "rm $foo" 1 2 15
+touch lilypond.$$
+
+$LILYPONDPREFIX/lily/out/lilypond -f scm $*
+scm=`find . -maxdepth 1 -cnewer $foo -and -name '*.scm'`
+for i in $scm; do
+       dir=`dirname $i`
+       base=`basename $i .scm`
+       file=$dir/$base.tex
+       rm -f $file
+       guile -s $i > $file
+done
+rm -f $scm
+rm $foo
index b82928212336dffe61c9922cda8933f9dca245af..a6739d325edef857b4f945239253294582724ae8 100644 (file)
@@ -4,7 +4,7 @@
                          c4 d e f
                          \repeat semi 3 { g a b c }
                          \alternative { { c b a g } { f e d c } } c c c c
-                         \alternative { { c b a g } { f e d c } { c d e f } }
+%                        \alternative { { c b a g } { f e d c } { c d e f } }
                          g g g g
                          \repeat semi 2 { c c c c }
                          \repeat semi 2 { c c c c }
diff --git a/input/bugs/threads.ly b/input/bugs/threads.ly
new file mode 100644 (file)
index 0000000..845fea6
--- /dev/null
@@ -0,0 +1,201 @@
+%K1
+rh = {\property Thread.noteHeadStyle = ""}
+lh = {\property Thread.noteHeadStyle = "diamond"}
+\score {
+\notes {
+\context Staff = staffOne <
+\property Staff.numberOfStaffLines = "11"
+%\property Staff.timeSignatureStyle = "C"
+\keysignature bes;
+\time 4/4;
+\clef alto;
+\context ThreadedVoice = vOne <
+\context Thread=tOne{
+\stemup \slurup
+%1
+\rh [d''16 e'' f'' g''][a'' a' cis'' a'] d''4. e''8|
+%2
+[f''16 d'' g'' e''][a'' f'' e'' d''][cis''8 a''] a''4^\prall~
+%3
+[a''16 g'' f'' e''][d'' c'' bes' a'][bes'8 \lh g''] g''4^\prall~
+%4
+[g''16 f'' e'' d''][c'' bes' a' g'][a'8 \rh f''] f''4^\prall~
+%5
+[f''16 e'' d'' c''][bes' a' g' f'][g'8 \lh e''] e''4^\prall~
+%6
+[e''16 d'' cis'' b'][a' g' f' \rh e'] [f' d' g' e'][a' f' e' d']|
+%7
+[cis'16 a d' b][e' cis' f' d'][g' e' a' f'][b' g' cis'' a']|
+%8
+[d''16 b' e'' cis''][f'' d'' g'' e''] a''4 g''^\prall|
+%9
+\lh a''4 g''^\prall \rh a'' g''^\prall|
+%10
+[f''16 d'' g'' e''][a'' f'' e'' d''] [cis'' a' d'' b'][e'' g' f' e']|
+%11
+[f'16 d' g' e'][a' f' e' d'][cis' a d' b][e' cis' f' d']|
+%12
+[g'16 g' f' e'][f'8 g'16^\prall f'32 g'][a'16 e' f' d'][e' cis' \lh f'8]|
+%13
+[e'8 d'] cis'16 s8. s2 \bar "||";
+%14
+\rh [a'16 b' cis'' d''][e'' cis'' f'' d''] e''4. a'8|
+%15
+[b'16 g' cis'' a'][d'' b' e'' cis''][fis'' d'' g'' e''][a'' c'' bes' a']|
+%16
+[bes'16 g' c'' a'][d'' bes' a' g'][fis' d' g' e'][a' c' bes a]|
+%17
+\lh [bes16 g c' a][d' bes e' c'][f' d' g' e'][a' f' bes' g']|
+%18
+\rh c''4 bes'^\prall \lh c'' bes'^\prall|
+%19
+\rh [c''8 f''][bes' e''][a'16 f' c'' a'][f'' c'' a'' f'']|
+%20
+[e''16 g'' c'' e''][g' c'' bes' a'] \lh [bes' g' d'' bes'][g'' d'' bes'' g'']|
+%21
+[f''16 a'' d'' f''][a' d'' c'' b'] \rh [c'' a' e'' c''][a'' e'' c''' a'']|
+%22
+[gis''16 b'' e'' gis''][b' d'' cis'' b'][cis''8 a''] a''4^\prall^"\\textflat"~
+%23
+[a''16 g'' f'' e''][d'' c'' \lh bes' a'] [bes'8 \rh g''] g''4^\prall~
+%24
+[g''16 f'' e'' d''][c'' bes' \lh a' g'][a'8 \rh f''] f''4^\prall~
+%25
+[f''16 e'' d'' c''][bes' a' \lh g' f'][g'8 \rh e''] e''4^\prall~
+%26
+[e''16 d'' cis'' b'][a' g' f' e'] [f' d' g' e'][a' f' bes' g']|
+%27
+\lh [f'16 d' g' e'][a' f' bes' g'] \rh [f' d' g' e'][a' f' bes' g']|
+%28
+[a'8 d''][g' cis''] \lh [a' f''][g' e'']|
+%29
+\rh [a'8 d''][g' e''][f'16 d' g'16 e'][a' f' b' g']|
+%30
+[cis''16 a' d'' e''][f'' d'' e'' cis''][d'' a' bes' g'][a' f' \lh bes'8]|
+%31
+[a'8 g'] f'16 s8. s2 \bar "|.";
+}
+\context Thread=tTwo{
+s1*9|
+%10
+d''16 s4.. a'16 s4..|
+%11
+d'16 s2...|
+s1*3|
+%15
+s2 d''16 s4..|
+%16
+g'16 s4.. d'16 s4..|
+s1*2|
+%19
+s8 \rh a'' s g'' s2|
+s1*8
+%28
+s8 f'' s e'' s d'' s cis''|
+%29
+s8 f'' s cis''
+}>
+\context ThreadedVoice = vTwo <
+\context Thread=tThree{
+\stemdown \slurdown
+%1
+\lh s2 [d'16 e' f' g'][a' a cis' a]|
+%2
+[d'8 e' f' g'][a' a' a' a']|
+%3
+[a'8 a' a' f'][g \rh bes' bes' bes']|
+%4
+[g'8 g' g' e'][f \lh a' f' a']|
+%5
+[d'8 f' d' d'][e \rh g' g' g']|
+%6
+[e'8 e' e' a] [d' \lh e f g]|
+%7
+a8 s [cis' d'][e' f'][g' a']|
+%8
+[b'8 cis''][d'' e''][f''16 d'' bes' g'][e'' cis'' a' cis'']|
+%9
+\rh [f''16 d'' bes' g'][e'' cis'' a' cis''] \lh [f'' d'' bes' g'][e'' cis'' a' cis'']|
+%10
+[d'8 e' f' g'][a b cis' a]|
+%11
+[d8 e f g][a b][cis' d']|
+%12
+[e16 e' d' cis'][d'8 bes] \stemup a,4 \stemdown s8 \rh [d'16 b]|
+%13
+[cis'16 a b gis][a16 e cis e] \lh \stemup a,4^\prall^"\\textnatural" r^\fermata|
+%14
+\stemdown s2 [a16 b cis' d'][e' cis' f' d']|
+%15
+[g'8 a'][b' cis''][d' e' fis' d']|
+%16
+[g8 a bes c'][d e fis d]|
+%17
+\rh [g8 a][bes c'][d' e'][f' g']|
+%18
+\lh [a'16 f' d' bes][g' e' c' e'] \rh [a' f' d' bes][g' e' c' e']|
+%19
+\lh [a'16 f' d' bes][g' e' c' e'][f'8 f f f,]|
+%20
+[c8 c' c' fis'] \rh [g' g g g,]|
+%21
+[d8 d' d' gis'] \lh [a' a a a,]|
+%22
+[e8 e, e, e,][a, a' a' a']|
+%23
+[f,8 a' a' f'][\rh g, \lh bes' bes' bes']|
+%24
+[e,8 e' g' e'][\rh f, \lh a' a' a']|
+%25
+[d,8 f' f' d'][\rh e, \lh g' g' g']|
+%26
+[a,8 a e' a] [d' e'][f' g']|
+%27
+[d'8 e'][f' g'] \rh [d' e'][f' g']|
+%28
+\lh [f'16 d' bes g][e' cis' a cis'] \rh [f' d' bes g][e' cis' a cis']|
+%29
+\lh [f'16 d' bes g][e' cis' a cis'][d8 e][f g]|
+%30
+[a8 g a a,] \stemup d4 \stemdown s8 \rh [g'16 e']|
+%31
+[f'16 d' e' cis'][d'16 a f a] \lh \stemup d4^\prall r4^\fermata|
+}
+\context Thread=tFour{
+s1*2|
+%3
+\lh f'8 f' f' s4 \rh g'8 g' g'|
+%4
+e'8 e' e' s4 \lh f'8 a' f'|
+%5
+f'8 d' f' s4 \rh e'8 e' e'|
+%6
+a8 a a s d s4.|
+s1*16|
+%23
+\lh s8 f' f' s4 g'8 g' g'|
+%24
+s8 g' e' s4 f'8 f' f'|
+%25
+s8 d' d' s4 e'8 e' e'|
+%26
+s8 e' a s s2|
+s1*2|
+%29
+s2 d'8
+}>
+\context ThreadedVoice = vThree <
+\context Thread=tFive{
+\stemdown \slurdown
+s1*25|
+%26
+\stemup s2 \rh d''4 s|
+%27
+\lh d''4 s \rh d''4
+}>
+>}
+\paper{barsize=50.0; indent=0.0;
+\translator {\VoiceContext beamAuto=0; \remove Auto_beam_engraver;}
+\translator {\StaffContext \consists Bar_number_engraver;}
+  \translator {\VoiceContext  \remove Tuplet_engraver;}
+}}
index 76ccc3d8cbd9020430bf19d3d1ce8e02661869b7..be41b7f9063b1fea79df9b95721f3b1a0cb9d7b0 100644 (file)
@@ -1,5 +1,5 @@
 \score{
        \context Staff \notes\relative c'{ 
-               \repeat unfold 4 { g a b c }
+               \repeat unfold 4 { g a b c }%\alternative {c1 d e  f}
        }
 }
diff --git a/input/test/breathing-sign.ly b/input/test/breathing-sign.ly
new file mode 100644 (file)
index 0000000..9cc9944
--- /dev/null
@@ -0,0 +1,16 @@
+\version "1.0.21";
+
+\score {
+  \notes \relative c' {
+    \key es; \time 3/4;
+    < \context Voice = two { \stemdown es4 bes es }
+      \context Voice = one { \stemup g4 as g }
+    > |
+    < \context Voice = two { \stemdown es4 \breathe bes es }
+      \context Voice = one { \stemup g4 as g }
+    > |
+    es8 d es f g4 \breathe |
+    es8 d \breathe es f g f |
+    es2 r4 \bar "||";
+  }
+}
index b9c09685d8ef48f5c2c466f5b8bc8d9be2ce955b..2dab828183fb3cbbeb986abbeb9da0e5d2c74f1e 100644 (file)
@@ -51,4 +51,4 @@ Hi,
 }
 
 
-\version "1.0.16"; 
+%\version "1.0.16"; 
index 4b586d5c0788cbc7b7a4251359bbe15cedd8215a..01bbcd663367737d3ad27975df1348b10494c83a 100644 (file)
@@ -1,2 +1,3 @@
 c''4 \p c \ff  c^\ff 
+\property Voice.dynamicPadding = 10
 c \p \<  \! c \ff\> c \!c-\p 
diff --git a/input/test/repeat-semifold.ly b/input/test/repeat-semifold.ly
new file mode 100644 (file)
index 0000000..58d03f8
--- /dev/null
@@ -0,0 +1,10 @@
+
+%  no alts.
+\score { \notes\context Staff\relative c'' {
+\repeat semi 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat semi 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat semi 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
+}}
+
diff --git a/input/test/repeat-unfold.ly b/input/test/repeat-unfold.ly
new file mode 100644 (file)
index 0000000..78c35be
--- /dev/null
@@ -0,0 +1,9 @@
+
+\score { \notes\context Staff\relative c'' {
+\repeat unfold 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat unfold 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat unfold 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
+}}
+
diff --git a/input/test/reps.ly b/input/test/reps.ly
new file mode 100644 (file)
index 0000000..58d03f8
--- /dev/null
@@ -0,0 +1,10 @@
+
+%  no alts.
+\score { \notes\context Staff\relative c'' {
+\repeat semi 3 { c^"3$\\times$ 0alt" d }
+% less alts than body
+\repeat semi 4 { c^"4$\\times$ 2alt" d } \alternative { e f }
+% more alts than body
+\repeat semi 2 { c^"2$\\times$ 3alt" d } \alternative { e f g } 
+}}
+
index 607f1daf2bfb4c92412cedbff1ef858f9ae031d4..b97610a4ca98023d68508253207ea1c186e826d8 100644 (file)
@@ -22,9 +22,13 @@ restsII = \context Staff \notes {
        \stemup
        \transpose c'' { [c''8 r8 c''8 c''8]
        [c8 r8 c8 c8]
+       [c8 r8 r8 c'''8]        
        \stemdown
        [c8 r8 c8 c8]
-       [c''8 r8 c''8 c''8] }
+       [c''8 r8 c''8 c''8]
+       [c'8 r8 r8 c'''8]
+       
+       }
 }
 
 \score{
diff --git a/input/von-guten-maechten.ly b/input/von-guten-maechten.ly
new file mode 100644 (file)
index 0000000..a29e3a4
--- /dev/null
@@ -0,0 +1,110 @@
+
+\include "paper16.ly"
+\include "deutsch.ly"
+
+melodie = \notes \relative c' {
+  d2 d4 e f2 f g4 f e d e2 e \breathe |
+  f d4 e f g a2 b g4 g f2 r2 |
+  c'2 c4 c a2 d c4 b a g f2 g \breathe |
+  a d,4 d g2 g f4 d e2 e d2-\fermata \bar "|.";
+}
+
+righthand = \notes \relative c' {
+  a2 a4 cis4 | d2 d2 | d4 c2 a4 | d4 h cis2 \breathe |
+  d2 a4 c4 | c4 e f2 | f2 f4 e | c2 r2 |
+  e4 f g2 | f2 f2 | e4 d f e | d2. e4 \breathe |
+  f4 d b4 b | d2 d | d4 c d h | cis2 a2 |
+}
+
+lefthand = \notes \relative c {
+  f2 f4 a | a2 a2 | b4 a g f | a2 a \breathe |
+  a2 f4 g | a c c2 | d2 c4 c | a2 r2 |
+  g2 c4 c | c2 b2 | g4 f c' c | a4 b2 cis4 \breathe |
+  d4 a f f | b2 b | a4 a a2 | a2 fis2 |
+}
+
+pedal = \notes \relative c {
+  d2 d4 a d2 d g,4 a c d a2 a \breathe |
+  d2 d4 c f c f2 b,4 g c c f2 r2 |
+  c4 d e c f2 b, c4 d f c d b a2 \breathe |
+  d4 c b2 g4 a b2 d2 a a d_\fermata \bar "|.";
+}
+
+\score {
+  <
+    \context PianoStaff <
+      \context Staff = treble <
+       \notes { \key f; \time 2/2; }
+       \context Voice = melody {
+         \stemup \melodie
+       }
+       \context Voice = right {
+         \stemdown \righthand
+       }
+      >
+      \context Staff = bass {
+       \notes { \key f; \clef "bass"; }
+       \lefthand
+      }
+    > 
+    \context Staff = pedal {
+      \notes { \key f; \clef "bass"; }
+      \pedal
+    }
+  >
+
+  \header {
+    title = "Von guten Mächten treu und still umgeben";
+    composer = "Satz: Michael Krause 1999 (*1977)";
+    enteredby = "Michael Krause";
+    copyright = "dunno";
+    poet = "Dietrich Bonhoeffer 1944";
+  }
+
+  \paper{
+%    \paper_sixteen
+%    linewidth = 18.0 \cm;
+%    textheight = 28.0 \cm;
+    indent = 0.0 \mm;
+    \translator { \OrchestralScoreContext }
+  }
+}
+
+\score {
+  \context StaffGroup <
+    \context Staff = treble <
+      \notes { \key f; \time 2/2; }
+      \context Voice = sop {
+       \stemup \melodie
+      }
+      \context Voice = alt {
+       \stemdown \righthand
+      }
+    >
+    \context Staff = bass <
+      \notes { \key f; \clef "bass"; }
+      \context Voice = ten {
+       \stemup \lefthand
+      }
+      \context Voice = bas {
+       \stemdown \pedal
+      }
+    >
+  > 
+
+  \header {
+    title = "Von guten Mächten treu und still umgeben";
+    composer = "Satz: Michael Krause 1999 (*1977)";
+    enteredby = "Michael Krause";
+    copyright = "dunno";
+    poet = "Dietrich Bonhoeffer 1944";
+  }
+
+  \paper{
+%    \paper_sixteen
+%    linewidth = 18.0 \cm;
+%    textheight = 28.0 \cm;
+    indent = 0.0 \mm;
+  }
+}
+
index 36e11807b097e0d64bce4377eb443f81f28600c0..7adf3de0608578bdf7f72393cec7851426114c09 100644 (file)
@@ -96,9 +96,6 @@ Audio_text::midi_item_p()
   return text_str_.length_i() ? new Midi_text(this) : 0;
 }
 
-
-
-
 void
 Audio_item::do_print () const
 {
index ac4f39243c2d5da43b75e1a8c381484c64c97e7d..dd4e90efb81164966c4406a0ba3d8e9460e672a0 100644 (file)
@@ -56,7 +56,7 @@ static char const *bar_breaks[][3] ={
   {":|", ":|:", "|:"},
   {"|", "|", ""},
   {"", "|s", "|"},
-  {"", "|:", "|:"},
+  {"|", "|:", "|:"},
   {"|.", "|.", ""},
   {":|", ":|", ""},
   {"||", "||", ""},
index 046a95ee98812ddf1e971a61e1fd4842c02879de..6553412fa10886f579442000945f803dffffdeda 100644 (file)
@@ -48,17 +48,13 @@ Bow::do_brew_molecule_p () const
     }
   a.translate (Offset (dx_f_drul_[LEFT], dy_f_drul_[LEFT]));
 
-  Molecule* mol_p = new Molecule;
-  mol_p->add_molecule (a);
-
-  return mol_p;
+  return new Molecule (a); 
 }
 
 Offset
 Bow::center () const
 {
   Real dy = dy_f_drul_[RIGHT] - dy_f_drul_[LEFT];
-
   Real dx =  extent(X_AXIS).length ();
 
   return Offset (dx / 2, dy);
@@ -76,7 +72,7 @@ Bow::do_height () const
   Array<Offset> c (get_controls());
   for (int i=0; i < c.size (); i++)
     {
-      Real y = c[i][Y_AXIS];
+      Real y = c[i][Y_AXIS] + dy_f_drul_[LEFT];
       iv.unite (Interval (y,y));
     }
   return iv;
diff --git a/lily/breathing-sign-engraver.cc b/lily/breathing-sign-engraver.cc
new file mode 100644 (file)
index 0000000..d7a1a05
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+  breathing_sign-engraver.cc -- implement Breathing_sign_engraver
+
+  Copyright (C) 1999 Michael Krause
+
+  written for the GNU LilyPond music typesetter
+
+TODO:
+
+  . Cancel any beams running through the breathing sign
+    ([e8 \breathe f e f] should become [e8] \breathe [f e f])
+  . Spacing is not yet completely pretty
+
+*/
+
+#include "breathing-sign-engraver.hh"
+#include "breathing-sign.hh"
+#include "musical-request.hh"
+#include "command-request.hh"
+#include "engraver-group.hh"
+#include "note-head.hh"
+#include "local-key-item.hh"
+
+#include <iostream.h>
+
+Breathing_sign_engraver::Breathing_sign_engraver()
+{
+  breathing_sign_p_ = 0;
+  breathing_sign_req_l_ = 0;
+}
+
+bool
+Breathing_sign_engraver::do_try_music (Music*r_l)
+{
+  if (Breathing_sign_req  * b= dynamic_cast <Breathing_sign_req *> (r_l)) {
+    breathing_sign_req_l_ = b;
+    return true;
+  }
+  return false;
+}
+
+void
+Breathing_sign_engraver::do_process_requests()
+{
+  if(breathing_sign_req_l_) {
+    breathing_sign_p_ = new Breathing_sign;
+
+    Scalar prop = get_property ("verticalDirection", 0);
+    if(prop.isnum_b())
+      breathing_sign_p_->set_vertical_position((Direction)int(prop));
+
+    announce_element (Score_element_info (breathing_sign_p_, breathing_sign_req_l_));
+  }
+}
+
+void 
+Breathing_sign_engraver::do_pre_move_processing()
+{
+  if(breathing_sign_p_) {
+    typeset_element(breathing_sign_p_);
+    breathing_sign_p_ = 0;
+  }
+}
+
+void
+Breathing_sign_engraver::do_post_move_processing()
+{
+    breathing_sign_req_l_ = 0;
+}
+
+ADD_THIS_TRANSLATOR(Breathing_sign_engraver);
diff --git a/lily/breathing-sign.cc b/lily/breathing-sign.cc
new file mode 100644 (file)
index 0000000..c9f3b1f
--- /dev/null
@@ -0,0 +1,59 @@
+/*
+  breathing_sign.cc -- implement Breathing_sign
+
+  Copyright (C) 1999 Michael Krause
+
+  written for the GNU LilyPond music typesetter
+
+TODO: --> see breathing-sign-engraver.cc
+
+*/
+
+#include "breathing-sign.hh"
+#include "string.hh"
+#include "molecule.hh"
+#include "paper-def.hh"
+#include "lookup.hh"
+#include "debug.hh"
+#include "dimensions.hh"
+#include "direction.hh"
+
+#include <iostream.h>
+
+Breathing_sign::Breathing_sign ()
+{
+  vertical_position_i_ = UP;
+  set_elt_property (breakable_scm_sym, SCM_BOOL_T);
+  set_elt_property (break_priority_scm_sym, gh_int2scm (-4));
+  set_elt_property (visibility_lambda_scm_sym,
+                   gh_eval_str ("non_postbreak_visibility"));
+}
+
+void
+Breathing_sign::set_vertical_position (Direction updown)
+{
+  assert(updown >= -1 && updown <= +1);
+
+  if(updown != 0)
+    vertical_position_i_ = updown;
+}
+
+Molecule*
+Breathing_sign::do_brew_molecule_p () const
+{
+  Real dl = staff_line_leading_f();
+  Interval i1(0, dl / 6), i2(-dl / 2, dl / 2);
+  Box b(i1, i2);
+
+  Molecule *output = new Molecule (lookup_l()->filledbox(b));
+
+  return output;
+}
+
+void
+Breathing_sign::do_post_processing()
+{
+  Real dl = staff_line_leading_f();
+
+  translate_axis(2.0 * dl * vertical_position_i_, Y_AXIS);
+}
index b0670d523631731b106123a0a309bcd77a9b1227..e02325ee5e94d12ab5e9b227cc608f8388348a19 100644 (file)
@@ -133,7 +133,12 @@ Dynamic_engraver::do_process_requests()
              staff_side_p_->dir_ = (Direction) (int) prop;
            }
 
-
+     prop = get_property ("dynamicPadding", 0);
+         if (prop.isnum_b ())
+           {
+             staff_side_p_->set_elt_property (padding_scm_sym, 
+                                              gh_double2scm(Real(prop)));
+           }
          announce_element (Score_element_info (text_p_, absd));
          announce_element (Score_element_info (staff_side_p_, absd));
        }
index 1fdb8362a61a61eb5c9050b48ef5a4f2376911f9..e8458196eb96efb746346811e250d7dad438bdd2 100644 (file)
@@ -35,7 +35,10 @@ public:
   enum Dir_algorithm { /* DOWN=-1, UP=1, */ MAJORITY=2, MEAN, MEDIAN };
 
   Link_array<Stem> stems_;
-  /// the slope of the beam in posns / point (dimension)   
+  /**
+     the slope of the beam in (staffpositions) per (X-dimension, in PT).
+     UGH. standardise this for once and for all.
+   */
   Real slope_f_;
 
   /// position of leftmost end of beam  
diff --git a/lily/include/breathing-sign-engraver.hh b/lily/include/breathing-sign-engraver.hh
new file mode 100644 (file)
index 0000000..3c00308
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+  breathing-sign-engraver.hh -- declare Breathing_Sign_engraver
+
+  Copyright (C) 1999 Michael Krause
+
+  written for the GNU LilyPond music typesetter
+
+*/
+
+#ifndef BREATHING_SIGN_ENGRAVER_HH
+#define BREATHING_SIGN_ENGRAVER_HH
+
+#include "engraver.hh"
+#include "command-request.hh"
+#include "breathing-sign.hh"
+
+class Breathing_sign_engraver : public Engraver {
+public:
+  Breathing_sign_engraver();
+  VIRTUAL_COPY_CONS(Translator);
+  
+protected:
+  virtual bool do_try_music (Music *req_l);
+  virtual void do_process_requests();
+
+  virtual void do_pre_move_processing();
+  virtual void do_post_move_processing();
+
+private:
+  Breathing_sign_req * breathing_sign_req_l_;
+  Breathing_sign * breathing_sign_p_;
+};
+
+#endif // BREATHING_SIGN_ENGRAVER_HH
diff --git a/lily/include/breathing-sign.hh b/lily/include/breathing-sign.hh
new file mode 100644 (file)
index 0000000..c2f99c8
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+  breathing-sign.hh
+
+  Copyright (C) 1999 Michael Krause
+
+  written for the GNU LilyPond music typesetter
+
+*/
+
+#ifndef BREATHING_SIGN_HH
+#define BREATHING_SIGN_HH
+
+#include "item.hh"
+#include "staff-symbol-referencer.hh"
+#include "parray.hh"
+
+class Breathing_sign : public Item, public Staff_symbol_referencer {
+public:
+  VIRTUAL_COPY_CONS(Score_element);
+  Breathing_sign ();
+
+  void set_vertical_position (Direction);
+
+protected:
+  virtual void do_post_processing ();
+  virtual Molecule* do_brew_molecule_p () const;
+
+private:
+  Direction vertical_position_i_;
+};
+
+#endif // BREATHING_SIGN_HH
index 9e065963ce9a4542cd2f2fff6237319bf6697503..805f100031dea1b4f3db034e45aaf4714d851633 100644 (file)
@@ -124,6 +124,9 @@ protected:
   VIRTUAL_COPY_CONS(Music);
 };
 
+class Breathing_sign_req : public Request {
+  VIRTUAL_COPY_CONS(Music);
+};
 
 /**
     Handle key changes.
index f1de4e7f39347582b4a1cafbd0ce56a55f476541..5f40c5dc6b2d2ff6ca1cd4da353c3a3255c3790d 100644 (file)
@@ -41,9 +41,11 @@ public:
   virtual void transpose (Musical_pitch );
   virtual void compress (Moment);
   void add_music (Music *music_p);
-
+  int length_i () const;
   Moment cumulative_length () const;
   Moment maximum_length () const;
+  virtual ~Music_sequence ();
+  
 protected:
   virtual Musical_pitch to_relative_octave (Musical_pitch);
   virtual void do_print() const;
index 7488e3883c35be6a5f55e44d542f0d2310e1eb54..8185180203f11ff77d677a4488ea6d0a473e4d67 100644 (file)
 
 
    If the number of repeats is smaller than the number of alternatives, then
-
-   FIXME
+   the excess alternatives are ignored for all timing purposes.
 
    If the number of repeats is bigger than the number of alternatives, then
-
-   FIXME
+   the first alternative is assumed to be repeated.
    
 */
 class New_repeated_music : public Music
index 19b973edcee5930a8d0fa6407fe935a79e89a221..a76c7d47aa6229ad62caae9ffb756d4c7c284c01 100644 (file)
@@ -46,7 +46,8 @@
 
 class Spring_spacer : public Line_spacer {
   friend class Durations_iter;
-
+private:
+  Spring_spacer (Spring_spacer const&){}
   Cons<Idealspacing> *ideal_p_list_;
   Array<Column_info> cols_;
   Array<Column_info> loose_col_arr_;
@@ -86,6 +87,7 @@ public:
   static Line_spacer *constructor();
   Real energy_normalisation_f_;
   Spring_spacer ();
+  virtual ~Spring_spacer ();  
   virtual void solve (Column_x_positions*) const;
   virtual void lower_bound_solution (Column_x_positions*) const;
   virtual void add_column (Paper_column  *, bool fixed=false, Real fixpos=0.0);
@@ -95,7 +97,6 @@ public:
   virtual void OK() const;
   virtual void print() const;
   virtual void prepare();
-  virtual ~Spring_spacer(){}
 };
 
 #endif // SPRING_SPACER_HH
index 1e3e19eb925c095f8f2c83747f95ab07936bd3b1..42e78e04871247c2d11ed5b584b9b6e7c7359cd4 100644 (file)
@@ -24,6 +24,7 @@ public:
    */
   int done_count_;
 
+  
   /// are we busy doing the body?
   bool do_main_b_;
 
@@ -31,8 +32,10 @@ public:
       This excludes the elt currently being iterated.
   */
   Moment done_mom_;
-  
+  int alternative_count_i_;
   Music_iterator * current_iter_p_;
+  
+  /// pointer to the alternative that will be processed next.
   Cons<Music> *alternative_cons_l_;
   ~Unfolded_repeat_iterator();
   Unfolded_repeat_iterator ();
index acbde20646c9bde827d12fc86b6d5b15ed1cbd62..2caa2025767833da9e9f98ce3e852b50bca08df2 100644 (file)
@@ -109,6 +109,9 @@ Midi_walker::process()
   Audio_item* ptr = (*item_l_arr_l_)[index_];
   do_stop_notes (ptr->audio_column_l_->at_mom ());
 
+  /*
+    THIS IS A MEMORY LEAK. FIXME.
+   */
   Midi_item* p = ptr->midi_item_p ();
   if (!p)
     return;
index 1d32d1d08d4bff3307ed35407352dabee705adc6..c3cf8fab26bd12ed8fad534345c72cc3906e59d9 100644 (file)
@@ -119,3 +119,8 @@ Request_chord::to_relative_octave (Musical_pitch last)
 Music_list::Music_list ()
 {
 }
+
+Music_sequence::~Music_sequence ()
+{
+  delete music_p_list_p_;
+}
index d82888442999914fa84cda6639d783c2cdd0da46..60e6459a20f7e850ce1a4a4ca5186c239ff91694 100644 (file)
@@ -73,3 +73,8 @@ Music_sequence::maximum_length () const
 
   return dur;
 }
+int
+Music_sequence::length_i () const
+{
+  return cons_list_size_i (music_p_list_p_->head_);
+}
index 2716822b030c5e7ca1d4aa71a570ba8ce6653655..65b72214044e01fa8ba25c4a75ab044287f9aa0a 100644 (file)
@@ -9,7 +9,6 @@
 #include "musical-request.hh"
 #include "misc.hh"
 #include "debug.hh"
-
 #include "music-list.hh"
 
 void
index 8a16827ba2f4d2ea023d9fcca6a3e7fd639eb48e..eee264255d70190100372e56f6d2364a4f5a2771 100644 (file)
@@ -25,6 +25,7 @@ static Keyword_ent the_key_tab[]={
   {"accepts", ACCEPTS},
   {"alternative", ALTERNATIVE},
   {"bar", BAR},
+  {"breathe", BREATHE},
   {"cadenza", CADENZA},
   {"chordmodifiers", CHORDMODIFIERS},
   {"chords", CHORDS},
diff --git a/lily/new-repeated-music-iterator.cc b/lily/new-repeated-music-iterator.cc
deleted file mode 100644 (file)
index 0c168dd..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-/*   
-  new-repeated-music-iterator.cc --  implement Folded_repeat_iterator
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#include "folded-repeat-iterator.hh"
-#include "new-repeated-music.hh"
-#include "music-list.hh"
-#include "simultaneous-music-iterator.hh"
-#include "translator-group.hh"
-
-Folded_repeat_iterator::Folded_repeat_iterator ()
-{
-  main_iter_p_ = 0;
-  alternative_iter_p_ = 0;
-}
-
-bool
-Folded_repeat_iterator::ok () const
-{
-  return main_iter_p_ || alternative_iter_p_;
-}
-
-Folded_repeat_iterator::~Folded_repeat_iterator ()
-{
-  delete main_iter_p_;
-  delete alternative_iter_p_;
-}
-
-Moment
-Folded_repeat_iterator::next_moment () const
-{
-  if (main_iter_p_)
-    {
-      return main_iter_p_->next_moment ();
-    }
-  else
-    return main_length_mom_ + alternative_iter_p_->next_moment ();
-}
-
-void
-Folded_repeat_iterator::construct_children ()
-{
-  New_repeated_music const *  mus = dynamic_cast<New_repeated_music const*> (music_l_);
-  main_iter_p_ = get_iterator_p (mus->repeat_body_p_);
-  if (!main_iter_p_->ok())
-    {
-      leave_body ();
-      enter_alternative ();
-    }
-}
-
-void
-Folded_repeat_iterator::do_process_and_next (Moment m)
-{
-  if (!m)
-    {
-      bool success = report_to_l ()->try_music (music_l_);
-      if (!success)
-       music_l_->warning ( _("No one to print a volta bracket"));
-    }
-  
-  New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
-  
-  if (main_iter_p_)
-    {
-      main_iter_p_->process_and_next (m);
-      if (!main_iter_p_->ok ())
-       leave_body ();
-    }
-
-  if (!main_iter_p_ && !alternative_iter_p_)
-    {
-      enter_alternative ();
-    }
-  
-  if (alternative_iter_p_)
-    {
-      alternative_iter_p_->process_and_next (m - main_length_mom_);
-      if (!alternative_iter_p_->ok ())
-       {
-         delete alternative_iter_p_;
-         alternative_iter_p_ =0;
-       }
-    }
-}
-
-void
-Folded_repeat_iterator::leave_body ()
-{
-  New_repeated_music const *  mus = dynamic_cast<New_repeated_music const*> (music_l_);
-  delete main_iter_p_;
-  main_iter_p_ = 0;
-  main_length_mom_ +=  mus->repeat_body_p_->length_mom ();
-}
-
-void
-Folded_repeat_iterator::enter_alternative ()
-{
-  New_repeated_music const *  mus = dynamic_cast<New_repeated_music const*> (music_l_);  
-  Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
-  s->separate_contexts_b_ = true;
-  s->init_translator (mus->alternatives_p_, report_to_l ());
-  
-  alternative_iter_p_ = s;
-  alternative_iter_p_->construct_children ();
-}
-
-void
-Folded_repeat_iterator::do_print () const
-{
-#ifndef NPRINT
-#endif
-}
diff --git a/lily/new-repeated-music.cc b/lily/new-repeated-music.cc
deleted file mode 100644 (file)
index 15bd06f..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/*   
-  new-repeated-music.cc --  implement New_repeated_music
-  
-  source file of the GNU LilyPond music typesetter
-  
-  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-  
- */
-
-#include "new-repeated-music.hh"
-#include "music-list.hh"
-#include "musical-pitch.hh"
-#include "debug.hh"
-
-New_repeated_music::New_repeated_music(Music *beg, int times, Music_sequence * alts)
-{
-  repeat_body_p_ = beg;
-  fold_b_ = false;
-  repeats_i_ = times;
-  alternatives_p_ = alts;
-  semi_fold_b_ = true;
-}
-
-New_repeated_music::New_repeated_music (New_repeated_music const &s)
-  : Music (s)
-{
-  repeats_i_ = s.repeats_i_;
-  fold_b_ = s.fold_b_;
-  semi_fold_b_ = s.semi_fold_b_;
-  
-  repeat_body_p_ = s.repeat_body_p_ ? s.repeat_body_p_->clone () : 0;
-  alternatives_p_ = s.alternatives_p_
-    ? dynamic_cast<Music_sequence*> (s.alternatives_p_->clone ()):0;
-}
-
-New_repeated_music::~New_repeated_music ()
-{
-  delete repeat_body_p_;
-  delete alternatives_p_;
-}
-
-void
-New_repeated_music::do_print () const
-{
-#ifndef NPRINT
-  DOUT << "Fold = " << fold_b_ << " reps: " << repeats_i_;
-
-  if (repeat_body_p_)
-    repeat_body_p_->print();
-  
-  if (alternatives_p_)
-    alternatives_p_->print();
-#endif
-}
-
-Musical_pitch
-New_repeated_music::to_relative_octave (Musical_pitch p)
-{
-  if (repeat_body_p_)
-    p = repeat_body_p_->to_relative_octave (p);
-
-  if (alternatives_p_)
-    p = alternatives_p_->do_relative_octave (p, true);
-  return p;
-}
-
-
-void
-New_repeated_music::transpose (Musical_pitch p)
-{
-  if (repeat_body_p_)
-    repeat_body_p_->transpose (p);
-
-  if (alternatives_p_)
-    alternatives_p_->transpose (p);  
-}
-
-void
-New_repeated_music::compress (Moment p)
-{
-  if (repeat_body_p_)
-    repeat_body_p_->compress (p);
-
-  if (alternatives_p_)
-    alternatives_p_->compress (p);  
-}
-
-Moment
-New_repeated_music::alternatives_length_mom () const
-{
-  if (alternatives_p_)
-    {
-      return  (fold_b_)
-       ? alternatives_p_->maximum_length ()
-       : alternatives_p_->cumulative_length ();
-    }
-  return 0; 
-}
-
-Moment
-New_repeated_music::length_mom () const
-{
-  Moment m =0;
-  if (fold_b_)
-    {
-      if (repeat_body_p_)
-       m += repeat_body_p_->length_mom ();
-    }
-  else
-    {
-      Moment beg = (repeat_body_p_) ? repeat_body_p_->length_mom () : Rational(0);
-      if (!semi_fold_b_)
-       beg *=  Rational (repeats_i_);
-      m += beg;
-    }
-
-  m += alternatives_length_mom ();
-  return m;
-}
-
index 5f63501a47f72bb354feff3ee9fa94cb9c991b6b..282ab3cdd13b009f36f4d8669bb10202cef701f0 100644 (file)
@@ -114,7 +114,7 @@ Note_column::add_head (Rhythmic_head *h)
 }
 
 /**
-  translate the rest symbols
+  translate the rest symbols vertically by amount DY_I.
  */
 void
 Note_column::translate_rests (int dy_i)
@@ -139,16 +139,16 @@ Note_column::set_dotcol (Dot_column *d)
   add_element (d);
 }
 
-  /*
-    [TODO]
-    handle rest under beam (do_post: beams are calculated now)
-    what about combination of collisions and rest under beam.
+/*
+  [TODO]
+  handle rest under beam (do_post: beams are calculated now)
+  what about combination of collisions and rest under beam.
 
-    Should lookup
+  Should lookup
     
-      rest -> stem -> beam -> interpolate_y_position ()
+    rest -> stem -> beam -> interpolate_y_position ()
     
-   */
+*/
 
 void
 Note_column::do_post_processing ()
@@ -157,26 +157,25 @@ Note_column::do_post_processing ()
     return;
 
   Beam * b = stem_l_->beam_l_;
-  if (!b)
+  if (!b || !b->stems_.size ())
     return;
-      
-      /* ugh. Should be done by beam. */
-  Real x = stem_l_->hpos_f ();
+  
+  /* ugh. Should be done by beam. */
   Direction d = stem_l_->get_dir ();
-  Real beamy = x * b->slope_f_ + b->left_y_;
-  Interval restdim = extent (Y_AXIS);
+  Real beamy = (stem_l_->hpos_f () - b->stems_[0]->hpos_f ()) * b->slope_f_ + b->left_y_;
 
   Real staff_space = rest_l_arr_[0]->staff_line_leading_f ();      
-  Real internote_f = staff_space/2;
+  Real rest_dim = extent (Y_AXIS)[d]*2.0  /staff_space ;
+
   Real minimum_dist
-    = paper_l ()->get_var ("restcollision_minimum_beamdist") * internote_f;
+    = paper_l ()->get_var ("restcollision_minimum_beamdist") ;
   Real dist =
-    minimum_dist +  -d  * (beamy - restdim[d]) >? 0;
+    minimum_dist +  -d  * (beamy - rest_dim) >? 0;
 
   int stafflines = rest_l_arr_[0]->lines_i ();
-      
+
   // move discretely by half spaces.
-  int discrete_dist = int (ceil (dist / (0.5 *staff_space)));
+  int discrete_dist = int (ceil (dist ));
 
   // move by whole spaces inside the staff.
   if (discrete_dist < stafflines+1)
index f881c6134c9a4d58553a6dbd63f0e0edb9ff968d..9561ba341faf46d0a85cca4ce8b09e62332f5e47 100644 (file)
@@ -55,7 +55,6 @@ Note_head::do_width () const
 Molecule*
 Note_head::do_brew_molecule_p() const 
 {
-  Molecule*out = 0;
   Real inter_f = staff_line_leading_f ()/2;
   int sz = lines_i ()-1;
 
@@ -71,15 +70,12 @@ Note_head::do_brew_molecule_p() const
       type = ly_scm2string (SCM_CDR(style));
     }
   
-  Molecule head (lookup_l()->notehead (balltype_i_, type));
-
-  
-  out = new Molecule (Molecule (head));
+  Molecule*  out = new Molecule (lookup_l()->notehead (balltype_i_, type));
 
   if (streepjes_i) 
     {
       Direction dir = sign (position_i_);
-      Interval hd = head.dim_[X_AXIS];
+      Interval hd = out->dim_[X_AXIS];
       Real hw = hd.length ()/4;
       
       Molecule ledger
index 96ba69012f78fb24a8d4891b999c0a0614ae2808..d22f151e1c321245d45f688822f4b76d1ecd8daa 100644 (file)
 #include "lily-version.hh"
 #include "atom.hh"
 
+// urg
+static SCM port = 0;
+
 Paper_outputter::Paper_outputter (Paper_stream *s)
 {
+  port = 0;
   outstream_l_ = s;
   output_header ();
 }
@@ -36,6 +40,16 @@ Paper_outputter::~Paper_outputter ()
 {
   SCM scm = gh_list (ly_symbol ("end-output"), SCM_UNDEFINED);
   output_scheme (scm);
+
+  if (String (output_global_ch) == "scm")
+    {
+#if 1
+      scm_display (gh_str02scm (")))\n"), port);
+      scm_fflush (port);
+#else
+      *outstream_l_->os << ")";
+#endif
+    }
 }
 
 void
@@ -47,7 +61,7 @@ Paper_outputter::output_header ()
       //      gh_eval_str ("(set! security-paranoia #t)");
     }
   String s = String ("(eval (") + output_global_ch + "-scm 'all-definitions))";
-  gh_eval_str (s.ch_C());
+  gh_eval_str (s.ch_C ());
   
   String creator;
   if (no_timestamps_global_b)
@@ -158,7 +172,11 @@ Paper_outputter::output_scheme (SCM scm)
 {
   if (String (output_global_ch) == "scm")
     {
-      static SCM port = 0;
+#if 1
+      /*
+       we'd rather use C++ i/o iso Guile's, but how?
+       and: they can't be mixed (or synchronised) easily?
+       */
 
       // urg
       if (!port)
@@ -169,13 +187,58 @@ Paper_outputter::output_scheme (SCM scm)
            fd = of->rdbuf()->fd();
          FILE *file = fdopen (fd, "a");
          port = scm_standard_stream_to_port (file, "a", "");
-         scm_display (gh_str02scm ("(load 'lily.scm)\n"), port);
+         scm_display (gh_str02scm (
+           "(primitive-load-path 'lily.scm)\n"
+           "(eval (tex-scm 'all-definitions))\n"
+           ";(eval (ps-scm 'all-definitions))\n"
+           "(display (map (lambda (x) (string-append (eval x) \"%\\n\")) '(\n"
+           ), port);
        }
 
-      scm_display (gh_str02scm ("("), port);
       scm_write (scm, port);
-      scm_display (gh_str02scm (")\n"),port);
+      // duh
+      scm_display (gh_str02scm ("\n"), port);
       scm_fflush (port);
+#else
+      static bool first = true;
+      if (first)
+        {
+         *outstream_l_->os << ""
+           "(primitive-load-path 'lily.scm)\n"
+           "(eval (tex-scm 'all-definitions))\n"
+           ";(eval (ps-scm 'all-definitions))\n"
+           "(display (map (lambda (x) (string-append (eval x) \"\\n\")) '(\n"
+           ;
+       }
+
+      /*
+        why doesn't this work?
+
+       ERROR: In procedure gh_scm2newstr:
+       ERROR: Wrong type argument in position 3: 
+         (header "GNU LilyPond 1.1.49.jcn1" ", at Tue Jun 22 20:58:17 1999")
+
+       or:
+
+       ERROR: In procedure symbol->string:
+       ERROR: Wrong type argument in position 1: 
+         (header "GNU LilyPond 1.1.49.jcn2" ", at Wed Jun 23 18:42:14 1999")
+
+       eg, two ways to print '(foo bar)'
+
+        SCM scm = gh_list (ly_symbol ("foo"), gh_str2scm ("bar"), SCM_UNDEFINED);
+       scm_write (scm, port);
+        puts (gh_xxx2newstr (scm, 0));
+       */
+
+      char* p;
+      //p = gh_scm2newstr (scm, 0);
+      //p = gh_symbol2newstr (scm, 0);
+      //p = gh_scm2newstr (scm_symbol_to_string (scm), 0);
+      //p = gh_symbol2newstr (scm_symbol_to_string (scm), 0);
+      //*outstream_l_->os << p << endl;
+      *outstream_l_->os << symbol_to_string (scm) << endl;
+#endif
     }
   else
     {
index ef1616a382eb5ce74d800284da1445ee8235b863..01023778241cdb0687a866060585d4faaa703bf4 100644 (file)
@@ -105,6 +105,7 @@ Paper_stream::operator << (Scalar s)
 void
 Paper_stream::break_line ()
 {
+  // aaargh
   *os << "%\n";
   *os << to_str (' ', nest_level);
   line_len_i_ = 0;
index 2bbb8cf18ce6e13d00a9d4a842625bc1843e981d..70f1b62846b3de46ef155ece5fa0e011c0b99045 100644 (file)
 #include "transposed-music.hh"
 #include "time-scaled-music.hh"
 #include "new-repeated-music.hh"
+#include "version.hh"
+
 
 // mmm
 Mudela_version oldest_version ("1.0.20");
-Mudela_version version ("1.0.21");
+Mudela_version version ( MAJOR_VERSION "." MINOR_VERSION "." PATCH_LEVEL );
+
 
 void
 print_mudela_versions (ostream &os)
@@ -65,26 +68,6 @@ print_mudela_versions (ostream &os)
 // needed for bison.simple's malloc() and free()
 #include <malloc.h>
 
-struct Assignment {
-       String *name_p_;
-       Identifier *id_p_;
-       ~Assignment () {
-               delete name_p_;
-               delete id_p_;
-       }
-       Assignment () {
-               name_p_ = 0;
-               id_p_ =0;
-       }
-       Assignment (Assignment const&s)
-       {
-               name_p_ = new String (*s.name_p_);
-               id_p_ = s.id_p_->clone ();
-       }
-};
-
-Paper_def* current_paper = 0;
-
 #ifndef NDEBUG
 #define YYDEBUG 1
 #endif
@@ -156,6 +139,7 @@ yylex (YYSTYPE *s,  void * v_l)
 %token ACCEPTS
 %token ALTERNATIVE
 %token BAR
+%token BREATHE
 %token CADENZA
 %token CHORDMODIFIERS
 %token CHORDS
@@ -939,6 +923,9 @@ abbrev_command_req:
                b->span_type_str_ = "beam";
                $$ = b;
        }
+       | BREATHE {
+               $$ = new Breathing_sign_req;
+       }
        ;
 
 
diff --git a/lily/repeated-music-iterator.cc b/lily/repeated-music-iterator.cc
new file mode 100644 (file)
index 0000000..0c168dd
--- /dev/null
@@ -0,0 +1,118 @@
+/*   
+  new-repeated-music-iterator.cc --  implement Folded_repeat_iterator
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "folded-repeat-iterator.hh"
+#include "new-repeated-music.hh"
+#include "music-list.hh"
+#include "simultaneous-music-iterator.hh"
+#include "translator-group.hh"
+
+Folded_repeat_iterator::Folded_repeat_iterator ()
+{
+  main_iter_p_ = 0;
+  alternative_iter_p_ = 0;
+}
+
+bool
+Folded_repeat_iterator::ok () const
+{
+  return main_iter_p_ || alternative_iter_p_;
+}
+
+Folded_repeat_iterator::~Folded_repeat_iterator ()
+{
+  delete main_iter_p_;
+  delete alternative_iter_p_;
+}
+
+Moment
+Folded_repeat_iterator::next_moment () const
+{
+  if (main_iter_p_)
+    {
+      return main_iter_p_->next_moment ();
+    }
+  else
+    return main_length_mom_ + alternative_iter_p_->next_moment ();
+}
+
+void
+Folded_repeat_iterator::construct_children ()
+{
+  New_repeated_music const *  mus = dynamic_cast<New_repeated_music const*> (music_l_);
+  main_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+  if (!main_iter_p_->ok())
+    {
+      leave_body ();
+      enter_alternative ();
+    }
+}
+
+void
+Folded_repeat_iterator::do_process_and_next (Moment m)
+{
+  if (!m)
+    {
+      bool success = report_to_l ()->try_music (music_l_);
+      if (!success)
+       music_l_->warning ( _("No one to print a volta bracket"));
+    }
+  
+  New_repeated_music const * mus = dynamic_cast<New_repeated_music const*> (music_l_);
+  
+  if (main_iter_p_)
+    {
+      main_iter_p_->process_and_next (m);
+      if (!main_iter_p_->ok ())
+       leave_body ();
+    }
+
+  if (!main_iter_p_ && !alternative_iter_p_)
+    {
+      enter_alternative ();
+    }
+  
+  if (alternative_iter_p_)
+    {
+      alternative_iter_p_->process_and_next (m - main_length_mom_);
+      if (!alternative_iter_p_->ok ())
+       {
+         delete alternative_iter_p_;
+         alternative_iter_p_ =0;
+       }
+    }
+}
+
+void
+Folded_repeat_iterator::leave_body ()
+{
+  New_repeated_music const *  mus = dynamic_cast<New_repeated_music const*> (music_l_);
+  delete main_iter_p_;
+  main_iter_p_ = 0;
+  main_length_mom_ +=  mus->repeat_body_p_->length_mom ();
+}
+
+void
+Folded_repeat_iterator::enter_alternative ()
+{
+  New_repeated_music const *  mus = dynamic_cast<New_repeated_music const*> (music_l_);  
+  Simultaneous_music_iterator * s = new Simultaneous_music_iterator;
+  s->separate_contexts_b_ = true;
+  s->init_translator (mus->alternatives_p_, report_to_l ());
+  
+  alternative_iter_p_ = s;
+  alternative_iter_p_->construct_children ();
+}
+
+void
+Folded_repeat_iterator::do_print () const
+{
+#ifndef NPRINT
+#endif
+}
diff --git a/lily/repeated-music.cc b/lily/repeated-music.cc
new file mode 100644 (file)
index 0000000..19a7005
--- /dev/null
@@ -0,0 +1,130 @@
+/*   
+  new-repeated-music.cc --  implement New_repeated_music
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "new-repeated-music.hh"
+#include "music-list.hh"
+#include "musical-pitch.hh"
+#include "debug.hh"
+
+New_repeated_music::New_repeated_music(Music *beg, int times, Music_sequence * alts)
+{
+  repeat_body_p_ = beg;
+  fold_b_ = false;
+  repeats_i_ = times;
+  alternatives_p_ = alts;
+  semi_fold_b_ = true;
+}
+
+New_repeated_music::New_repeated_music (New_repeated_music const &s)
+  : Music (s)
+{
+  repeats_i_ = s.repeats_i_;
+  fold_b_ = s.fold_b_;
+  semi_fold_b_ = s.semi_fold_b_;
+  
+  repeat_body_p_ = s.repeat_body_p_ ? s.repeat_body_p_->clone () : 0;
+  alternatives_p_ = s.alternatives_p_
+    ? dynamic_cast<Music_sequence*> (s.alternatives_p_->clone ()):0;
+}
+
+New_repeated_music::~New_repeated_music ()
+{
+  delete repeat_body_p_;
+  delete alternatives_p_;
+}
+
+void
+New_repeated_music::do_print () const
+{
+#ifndef NPRINT
+  DOUT << "Fold = " << fold_b_ << " reps: " << repeats_i_;
+
+  if (repeat_body_p_)
+    repeat_body_p_->print();
+  
+  if (alternatives_p_)
+    alternatives_p_->print();
+#endif
+}
+
+Musical_pitch
+New_repeated_music::to_relative_octave (Musical_pitch p)
+{
+  if (repeat_body_p_)
+    p = repeat_body_p_->to_relative_octave (p);
+
+  if (alternatives_p_)
+    p = alternatives_p_->do_relative_octave (p, true);
+  return p;
+}
+
+
+void
+New_repeated_music::transpose (Musical_pitch p)
+{
+  if (repeat_body_p_)
+    repeat_body_p_->transpose (p);
+
+  if (alternatives_p_)
+    alternatives_p_->transpose (p);  
+}
+
+void
+New_repeated_music::compress (Moment p)
+{
+  if (repeat_body_p_)
+    repeat_body_p_->compress (p);
+
+  if (alternatives_p_)
+    alternatives_p_->compress (p);  
+}
+
+Moment
+New_repeated_music::alternatives_length_mom () const
+{
+  if (!alternatives_p_ )
+    return 0;
+  
+  if  (fold_b_)
+    alternatives_p_->maximum_length ();
+
+  Moment m =0;
+  int done =0;
+  Cons<Music> *p = alternatives_p_->music_p_list_p_->head_;
+  while (p && done < repeats_i_)
+    {
+      m = m + p->car_->length_mom ();
+      done ++;
+      if (repeats_i_ - done < alternatives_p_->length_i ())
+       p = p->next_;
+    }
+  return m;
+}
+
+Moment
+New_repeated_music::length_mom () const
+{
+  Moment m =0;
+  if (fold_b_)
+    {
+      if (repeat_body_p_)
+       m += repeat_body_p_->length_mom ();
+    }
+  else
+    {
+      Moment beg = (repeat_body_p_) ? repeat_body_p_->length_mom () : Rational(0);
+      if (!semi_fold_b_)
+       beg *=  Rational (repeats_i_);
+      m += beg;
+    }
+
+  m += alternatives_length_mom ();
+  return m;
+}
+
diff --git a/lily/specialty-engraver.cc b/lily/specialty-engraver.cc
new file mode 100644 (file)
index 0000000..163dfe9
--- /dev/null
@@ -0,0 +1,32 @@
+/*   
+  specialty-engraver.cc --  implement  Specialty_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+
+#include "engraver.hh"
+
+class Specialty_engraver : public Engraver
+{
+
+public:
+  VIRTUAL_COPY_CONS(Translator);
+protected:
+  void acknowledge_element (Score_element_info);
+};
+
+
+void
+Specialty_engraver::acknowledge_element (Score_element_info i)
+{
+  /*
+    We could do groovy stuff, by inserting our own custom (FUNC,FONT)
+    pairs (Atoms in fact) into acknowledged elements.
+
+    But not yet.  This would be cleaner if we had SCM as properties.
+  */
+}
index c9ecb2492e194a9e5d10ba246f5d3285aab1a558..e89060286966895aa731ce3f3cd856a3fb005009 100644 (file)
@@ -515,3 +515,8 @@ Spring_spacer::constructor()
 
 
 
+
+Spring_spacer::~Spring_spacer()
+{
+  delete ideal_p_list_;
+}
index 0550a46f06ccd3636d27e278e9919677e26965e0..4b6d40d16e499198f13efc820829c1f614b413a3 100644 (file)
@@ -24,6 +24,7 @@ Unfolded_repeat_iterator::Unfolded_repeat_iterator ()
   done_count_ =0;
   current_iter_p_ =0;
   do_main_b_ = false;
+  alternative_count_i_ =0;
 }
 
 /**
@@ -47,21 +48,42 @@ Unfolded_repeat_iterator::next_element ()
   if (do_main_b_)
     {
       done_mom_ += mus->repeat_body_p_->length_mom ();
+
+      if (!mus->semi_fold_b_)
+       done_count_ ++;
+     
       if (alternative_cons_l_)
        {
          current_iter_p_ = get_iterator_p (alternative_cons_l_->car_);
          do_main_b_ = false;
        }
+      else if (done_count_ <  mus->repeats_i_ && !mus->semi_fold_b_) 
+       {
+         current_iter_p_ = get_iterator_p (mus->repeat_body_p_);
+         do_main_b_ = true;
+       }
     }
   else
     {
+      /*
+       we're not in the main part. So we're either in an alternative, or
+       we just finished.
+      */
       if (alternative_cons_l_)
        {
          done_mom_ += alternative_cons_l_->car_->length_mom ();
-         alternative_cons_l_ = alternative_cons_l_->next_;
-         done_count_ ++;         
-       }
 
+         if (mus->semi_fold_b_ || 
+             mus->repeats_i_ - done_count_  < alternative_count_i_)
+           alternative_cons_l_ = alternative_cons_l_->next_;
+         
+         /*
+           we've done the main body as well, but didn't go over the other
+           increment.  */
+         if (mus->semi_fold_b_)
+           done_count_ ++;
+       }
+      
       if (done_count_ < mus->repeats_i_ && alternative_cons_l_)
        {
          if (mus->semi_fold_b_)
@@ -75,6 +97,7 @@ Unfolded_repeat_iterator::next_element ()
     }
 }
 
+
 bool
 Unfolded_repeat_iterator::ok () const
 {
@@ -95,6 +118,9 @@ Unfolded_repeat_iterator::construct_children ()
     ? mus->alternatives_p_->music_p_list_p_->head_
     : 0;
 
+  for (Cons<Music> *p = alternative_cons_l_; p; p = p->next_)
+    alternative_count_i_ ++;
+
   if (mus->repeat_body_p_)
     {
       current_iter_p_  = get_iterator_p (mus->repeat_body_p_);
index 7374759171869389e9cc7e506cfe1d3ff10524c8..85e811b5e363dd9e64a68c747cc8dcaf8fd8bbc8 100644 (file)
@@ -96,6 +96,7 @@ VoiceContext = \translator {
        \name Voice ;
        beamAuto = "1";
        
+       \consists "Breathing_sign_engraver";
        \consists "Rest_engraver";
        \consists "Dot_column_engraver";
        \consists "Stem_engraver";
index e439ab17b3486116dd288571ea0e6763ee0cc28e..cb2f9f3cf14db92386844bb8de88d1c8ceb2a5dc 100644 (file)
@@ -25,8 +25,8 @@ paper_sixteen = \paper {
         arithmetic_multiplier = 4.8\pt;
        texsetting = "\\input lilyponddefs \\musixsixteendefs ";
        pssetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n";
-       scmsetting = "(display \"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\");\n";
-       scmsetting = "(display \"\\\\input lilyponddefs \\\\musixsixteendefs\");\n";
+       scmsetting = "\"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\";\n";
+       scmsetting = "\"\\\\input lilyponddefs \\\\musixsixteendefs\";\n";
 
        0 = \font "feta16" 
        -1 = \font "feta13"
index 90bebc6d7d3fd015a9893b89a603ea4aa8a0f83f..86df45795e6a769aec590abc77966769e0b39b33 100644 (file)
@@ -33,8 +33,8 @@ paper_twenty = \paper {
        texsetting = "\\input lilyponddefs \\musixtwentydefs ";
        pssetting = "(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\n";
        % urg, debugging only
-       scmsetting = "(display \"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\");\n";
-       scmsetting = "(display \"\\\\input lilyponddefs \\\\musixtwentydefs\");\n";
+       scmsetting = "\"(lilyponddefs.ps) findlibfile {exch pop //systemdict /run get exec} { /undefinedfilename signalerror } ifelse\";\n";
+       scmsetting = "\"\\\\input lilyponddefs \\\\musixtwentydefs\";\n";
 
        -2 = \font "feta13"
        -1 = \font "feta16"
index c96f3e588a74f29e015f6e28fa33abcefd5ad61c..eea258c9d1a4f84c701a0825d0fa7d892452f01c 100644 (file)
@@ -14,7 +14,12 @@ accent = \script "accent"
 marcato = \script "marcato"
 staccatissimo = \script "staccatissimo"
 
-% portato is indicated by slurred & dotted notes. Not really supported. 
+% portato is indicated
+% either by
+%   *  slurred & dotted notes. 
+%or by
+%  * slur and dash notes.
+% Neither are  really supported, but c4-.-- should work.
 % portato = \script "portato"
 
 fermata = \script "fermata"
index ae3de9afdbc41cbcb8f132e7bc1d888fabe59cee..7d8962208cd25c2dabb8055735b12f48af6a041b 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.1.49
-Inschrijf datum: 21JUN99
+Versie: 1.1.50
+Inschrijf datum: 25JUN99
 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.49.tar.gz 
+       770k lilypond-1.1.50.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.49.tar.gz 
+       770k lilypond-1.1.50.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 2de95469e32e756df4be1271653671eb574e3689..65c7688fa9ea34e703f06cade3af8f3beafd2e7c 100644 (file)
@@ -1,7 +1,7 @@
 Begin3
 Title: LilyPond
-Version: 1.1.49
-Entered-date: 21JUN99
+Version: 1.1.50
+Entered-date: 25JUN99
 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.49.tar.gz 
+       770k lilypond-1.1.50.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.49.tar.gz 
+       770k lilypond-1.1.50.tar.gz 
 Copying-policy: GPL
 End
index 3a3d1793757b3b11d7391c11dc00851ac39647d9..159a0f9376ee79aca2c756336c733d4c846ac2a2 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.1.49
+Version: 1.1.50
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.49.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.50.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 fc2f0b7a1ed512a2720335e8f882179f2c0ad39e..e1bd1a22e7c1389dc771cc3ad40fbd74bd386f12 100644 (file)
@@ -9,10 +9,10 @@
 }
 
 %{
- Tested Features: cross staff beams and slurs, grace notes, no bars
+ Tested Features: cross staff auto beams and slurs, grace notes, no bars
 %}
 
-\version "1.0.21";
+\version "1.0.20";
 
 \include "nederlands.ly"
 
@@ -24,101 +24,112 @@ global = \notes {
   \bar ".|";
 }
   
+x = \context Voice=x \notes {
+  % no beams in grace notes
+  \property Voice.beamAuto = "0"
+}
+
 upper = \context Staff=treble \notes\relative c''{
   \clef violin;
   \stemup
   \context Voice=one
   r2 r r 
   r2 r r
-  r4 [a'8--(\< a--] [a-- a-- c-- \!b--] [a--\> gis f \!e]
+  r4 a'8--(\< a--  a-- a-- c-- \!b--  a--\> gis f \!e 
   % grace hack
-  < { [es8 )c] } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
+  < { es8 )c } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
   r2 r r
-  r4 [a'8--(\< a--] [a-- a-- c-- \!b--] [a--\> gis f \!e]
-  < { [es8 )c] } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
-  r4 [g16( a bes a] [g a bes a g a bes a] [g a bes a g fis es fis] 
-  )d4 \tiny fis8*1/2 ~ \normalsize gis4*3/4 ~ gis8 r r4 r2
-  r4 [g16( a bes a] [g a bes a g a bes a] [g a bes a g fis es fis] 
-  )d4 \tiny fis8*1/2 ~ \normalsize gis4*3/4 ~ gis8 r r4 r2
-  \tiny a8*1/2 ~ \normalsize f4*3/4 ~ f8 r r2 r
-  r2 r4 [a8( b][c d c b] \tiny b8*1/2 ~ \normalsize 
-  < { [e8*1/2 )g,8] } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
-  r2 r4 [a8( b][c d c b] [a b c d][c b a b][c d c b]
-  \tiny b8*1/2 ~ \normalsize 
-  < { [e8*1/2 )g,8] } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
-  a2( \tiny e'8*1/2 ~ \normalsize f4*3/4 ~ )f8 r r2
+  r4 a'8--(\< a--  a-- a-- c-- \!b--  a--\> gis f \!e 
+  < { es8 )c } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
+  r4 g16( a bes a  g a bes a g a bes a  g a bes a g fis es fis 
+  % urg, what a syntax
+  )d4 \tiny fis8 ( *1/2  \normalsize ) gis4*3/4 ~ gis8 r r4 r2
+  r4 g16( a bes a  g a bes a g a bes a  g a bes a g fis es fis 
+  )d4 \tiny fis8(*1/2 \normalsize )gis4*3/4 ~ gis8 r r4 r2
+  \tiny a8(*1/2  \normalsize )f4*3/4 ~ f8 r r2 r
+  r2 r4 a8( b c d c b \tiny b8(*1/2 \normalsize 
+  < { )e8*1/2 )g,8 } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
+  r2 r4 a8( b c d c b  a b c d c b a b c d c b 
+  \tiny b8(*1/2 \normalsize 
+  < { )e8*1/2 )g,8 } \context Voice=x { \stemup s8*1/4 \tiny a8*1/2 ~ } > r4 r2 r
+  a2( \tiny e'8(*1/2 \normalsize )f4*3/4 ~ )f8 r r2
   r2 r r
   fis,4( \tiny dis8*1/2 \normalsize <)cis4*3/4 ais> r2 r
-  \tiny b'8*1/2 ~ \normalsize 
-  < { [a8*1/2 a8] } \context Voice=x { \stemup s8*1/4 \tiny b8*1/2 ~ } > r4 r2 r
-  r4 [a'8--(\< a--] [a-- a-- c-- \!b--] [a--\> gis f \!e]
-  < { [es8 )c] } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
-  d,4( \tiny fis8*1/2 ~ \normalsize gis4*3/4 ~ )gis8 r r4 r2
+  \tiny b'8(*1/2 \normalsize 
+  < { )a8*1/2 a8 } \context Voice=x { \stemup s8*1/4 \tiny b8*1/2 ~ } > r4 r2 r
+  r4 a'8--(\< a--  a-- a-- c-- \!b--  a--\> gis f \!e 
+  < { es8 )c } \context Voice=x { \stemup s8*1/2 \tiny b8*1/2 ~ } > r4 r2 r
+  d,4( \tiny fis8(*1/2 \normalsize )gis4*3/4 ~ )gis8 r r4 r2
   f4 ~ f8 r r2 r
-  [f'8( g a b][a g f g][a b a g]
-  \tiny f8*1/2 ~ \normalsize 
-  < { [g8*1/2 )e8] } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
-  [f8( g a b][a g f g][a b a g]
-  \tiny f8*1/2 ~ \normalsize 
-  < { [g8*1/2 )e8] } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
-  a,2( \tiny e'8*1/2 ~ \normalsize f4*3/4 ~ )f8 r r2
+  f'8( g a b a g f g a b a g 
+  \tiny f8(*1/2 \normalsize 
+  < { )g8*1/2 )e8 } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
+  f8( g a b a g f g a b a g 
+  \tiny f8(*1/2 \normalsize 
+  < { )g8*1/2 )e8 } \context Voice=x { \stemup s8*1/4 \tiny d8*1/2 ~ } > r4 r2 r
+  a,2( \tiny e'8(*1/2 \normalsize )f4*3/4 ~ )f8 r r2
   r2 r r
   fis,4( \tiny dis8*1/2 \normalsize <)cis4*3/4 ais> r2 r
   <e1 g b e> ~ <e g b e>
 }
 
 basloopje = \notes\relative c{
-  d,8( a' d f a d f d a f d )a
+%      \property Voice.beamAutoEnd = "1/2"
+%  d,8( a' d f a d f d a f d )a
+  d,8( a' d f a \translator Staff=treble d f d \translator Staff=bass a f d )a
 }
 
+%{
 bassbeam = \notes{
   [s2] [s8 \translator Staff=treble s s s] [\translator Staff=bass s2]
 %   [s2] [s2] [s2]
 }
+%}
+
 
 lower = \context Voice=two \notes \relative c{
   \stemdown
   \property Staff.slurVerticalDirection = 1
 
   % snapnie, hoevaak relative c heeft ze nodig?
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
-  < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
-  < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
-  < \transpose a \notes\relative c{ \basloopje } \bassbeam >
-  < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
-  < \transpose a \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \transpose bes \notes\relative c{ \basloopje }
+  \transpose bes \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \transpose bes \notes\relative c{ \basloopje }
+  \transpose bes \notes\relative c{ \basloopje }
+  \transpose a \notes\relative c{ \basloopje }
+  \transpose bes \notes\relative c{ \basloopje }
+  \transpose a \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
   % huh? d'
-  < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose e' \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose bes \notes\relative c{ \basloopje } \bassbeam >
-  < \transpose a \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose d' \notes\relative c{ \basloopje } \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \notes\relative c \basloopje \bassbeam >
-  < \transpose e' \notes\relative c{ \basloopje } \bassbeam >
+  \transpose d' \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \transpose d' \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \transpose e' \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \transpose bes \notes\relative c{ \basloopje }
+  \transpose a \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \transpose d' \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \transpose d' \notes\relative c{ \basloopje }
+  \notes\relative c \basloopje
+  \notes\relative c \basloopje
+  \transpose e' \notes\relative c{ \basloopje }
   < e1 b' e> ~ < e b' e> 
 }
 
 \score {
-    \context GrandStaff < 
+    \context PianoStaff < 
       \context Staff = treble < 
         \global 
        \upper
@@ -138,11 +149,9 @@ lower = \context Voice=two \notes \relative c{
     % no slur damping
     slur_slope_damping = 100.0;
 
-    \translator{ \OrchestralScoreContext }
-    \translator{ 
-      \GrandStaffContext
-      minVerticalAlign = 3.0*\staffheight;
-      maxVerticalAlign = 3.0*\staffheight;
+    \translator{
+      \VoiceContext
+      beamAutoEnd = "1/2";
     }
     \translator{ 
       \StaffContext
index d76cc6f888ff97cbf20182adeb32c5c7bbddab45..cca14da911cf804d9f65b2b812fc4958ed09d5e6 100644 (file)
@@ -18,17 +18,12 @@ Note: Original key F.
 
 \version "1.0.21";
 
-$vocal_verse1 = \notes\relative c''{
-       % ugh: treble/bass
-       % ?
-       \clef treble;
+vocalVerse = \notes\relative c''{
        \property Voice.dynamicdir=1
        \times 2/3 { [ g8( )as] g } c4. g8 |
        \times 2/3 { [ f8( )g] f } c'4 f,8 r |
        g4.-> f8 \times 2/3 { [ f( )es] d } |
        es2 r4 |
-       % ugh: a whole should be a measure
-       %r1 |
        R2. |
        R2. |
        \times 2/3 { [ g8( )as] g } es'4. g,8 |
@@ -58,7 +53,7 @@ $vocal_verse1 = \notes\relative c''{
        c!2. |
 }
 
-$vocal_through = \notes\relative c{
+vocalThrough = \notes\relative c{
        \property Voice.dynamicdir=1
        g''8. g16 b8. b16 d8. d16 |
        c4 b r |
@@ -81,21 +76,21 @@ $vocal_through = \notes\relative c{
        e2 r4 |
 }
 
-$lyric_verse1 = \lyrics{
+lyricVerse1 = \lyrics{
 % 5
        \times 2/3 {  Lei-4 se8 } fleh-4. en8 |
-       \times 2/3 {  mei-4 ne8 } Lie-4 der8 _8 |
+       \times 2/3 {  mei-4 ne8 } Lie-4 der8 " "8 |
        Durch4. die8 \times 2/3 {  Nacht4 zu8 } |
-       dir;2 _4 |
-       _4 _ _ |
-       _ _ _ |
+       dir;2 " "4 |
+       " "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 |
-       _4 _ _ |
-       _ _ _ |
+       mir!2 " "4 |
+       " "4 " " " " |
+       " " " " " " |
 % 17
        Fl\"us-8. ternd16 schlan-4. ke8 |
        Wip-8. fel16 rau-4. schen8 |
@@ -112,22 +107,22 @@ $lyric_verse1 = \lyrics{
        nicht.2. |
 }
        
-$lyric_verse2 = \lyrics{
+lyricVerse2 = \lyrics{
 % 5
        \times 2/3 {  H\"orst4 die8 } Nach-4. ti-8 
-       \times 2/3 {  gal-4 len8 } schla-4 gen?8 _8
+       \times 2/3 {  gal-4 len8 } schla-4 gen?8 " "8
        ach!4. sie8 \times 2/3 {  fleh-4 en8 } 
-       dich,2 _4
-       _4 _ _ 
-       _4_ _
+       dich,2 " "4
+       " "4 " " " " 
+       " "4" " " "
 
 % 11
        \times 2/3 {  Mit4 der8 } T\"o-4. ne8
-       \times 2/3 {  s\"u-4 "\ss{}en"8 } Kla-4. gen8
+       \times 2/3 {  s\"u-4 "\ss en"8 } Kla-4. gen8
        Fleh-4. en8 \times 2/3 {  sie4 f\"ur8 }
-       mich2 _4
-       _4_ _ 
-       _4_ _
+       mich2 " "4
+       " "4" " " " 
+       " "4" " " "
 
 % 17
        Sie-8. ver-16 stehn4. des8
@@ -146,30 +141,29 @@ $lyric_verse2 = \lyrics{
        Herz.2.
 }
 
-$lyric_through = \lyrics{
+lyricThrough = \lyrics{
 % 37
        La\ss8. auch16 dir8. die16 Brust8. be-16 |
-       we-4 gen _ |
+       we-4 gen " " |
        Lieb-4. chen,8 h\"o-8. re16 |
-       mich!2 _4 |
+       mich!2 " "4 |
        Be-4. bend8 \times 2/3 {  harr'4 ich8} |
-       dir8. ent-16 ge-4 gen!8 _8 |
-       _2. |
-       _2. |
+       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 |
+       " "2 be-4 |
        gl\"u-2. |
        cke2. |
-       mich!2 _4 |
+       mich!2 " "4 |
 }
 
-$treble_intro = \notes\relative c{
+trebleIntro = \notes\relative c{
        \clef violin;
        % ugh: id like to type this!
-       %r8\pp [<g'-. c-.> <c-. es-.> <g-. c-.> <c-. es-.> <g-. c-.>] |
        r8^"\bf m\\\"assig"\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-.>] |
@@ -177,8 +171,7 @@ $treble_intro = \notes\relative c{
        \break
 }
 
-$treble_verse1 = \notes\relative c{
-%      \clef violin;
+trebleVerse1 = \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'>] |
@@ -192,7 +185,7 @@ $treble_verse1 = \notes\relative c{
        r8 [<f c'> <c' d> <f, c'> <c' d> <f, c'>] |
        r8 [<f as bes> <as bes d> <f g bes> <as bes d> <f g bes>] |
        r8 [<es g bes> <g bes es> <es g bes> <g bes es>] 
-       <{ es'~ | d4. ~ f8}{ c'~ | bes4. ~ as8 } > 
+       <{ es'( )  d4.() f8}{ c' | bes4.  as8 } > 
         \times 2/3 { < [f( as> <es g> <)d f] > } |
        %16
        <es2. g> |
@@ -214,7 +207,7 @@ $treble_verse1 = \notes\relative c{
        < {a4.- > )f8}  { a4. f8 }  > |
 }
 
-$treble_eentje = \notes \relative c'{
+trebleEentje = \notes \relative c'{
        <e2 e'> <e4 g>|
        <f2\mf as!(> [<as8.->( c> <)f16 )as>] |
        <e4. g> [<e8-. g-.(> <e-. g-.> <e-. )g-.>] |
@@ -227,23 +220,21 @@ $treble_eentje = \notes \relative c'{
        <e2. g> |
 }
 
-$treble_through = \notes \relative c'{
+trebleThrough = \notes \relative c'{
        <e2. e'> |
        %61
        R2. |
        [<g,8.\< g'> <g16 g'> <b8. b'> <\! b16\> b'16> <d8. d'> <d16 d'>] |
        < { c4( )b } { c'4( )b } > \!r |
-% ugh
-%      <g4. g> <b8 b> [<d8.-> d->> c16] |
+
        <g4. g'> <b8 b'> [<d'8.-> d,-> > c16] |
-% ugh ugh: connecting chords
        %65
        < { d,2.\f a'2} { e2. ~ e2 } { b'2. c,2 }> r4 |
        \context Staff < 
                {
                        \voiceone 
-                       [a8. b16] c4-> ~ a8 r |
-                       [a8. b16] c4-> ~ a8 r |
+                       [a8. b16] c4-> () a8 r |
+                       [a8. b16] c4-> () a8 r |
                }
                { 
                        \voicetwo 
@@ -277,7 +268,7 @@ $treble_through = \notes \relative c'{
        <g2.-\fermata e' g> |
 }
 
-$bass_intro = \notes\relative c{
+bassIntro = \notes\relative c{
        \clef bass;
        \property Voice.dynamicdir=1
 %1
@@ -287,7 +278,7 @@ $bass_intro = \notes\relative c{
        <g2 g'> r4 |
 }
 
-$bass_verse1 = \notes\relative c{
+bassVerse1 = \notes\relative c{
 %      \clef bass;
        \property Voice.dynamicdir=1
 %5
@@ -319,7 +310,7 @@ $bass_verse1 = \notes\relative c{
        c,8 [<c' e g> <e g c> <c e g> <e g c> <c e g>] |
 }
 
-$bass_eentje = \notes\relative c{
+bassEentje = \notes\relative c{
        \property Voice.dynamicdir=1
        <c,8 c'> [<c' f as!> <f as c> <c f as> <f as c> <c f as>] |
        c,8 [<c' e g> <e g c> <c e g> <e g c> <c e g>] |
@@ -331,7 +322,7 @@ $bass_eentje = \notes\relative c{
        c,8 [<e' g> <g c> <e g> <g c> <e g>] |
 }
 
-$bass_through = \notes\relative c{
+bassThrough = \notes\relative c{
        \property Voice.dynamicdir=1
        %61
        <g,8^"cresc." g'> [<g' b d> <b d f> <g b d> <as!-> b-> d->> <b d f>] |
@@ -375,73 +366,74 @@ global = \notes{
 }
 
 
-$lyric_four = \lyrics{ 
-       _4 _ _
-       _ _ _
-       _ _ _
-       _ _ _
+lyricFour = \lyrics{ 
+       " "4 " " " "
+       " " " " " "
+       " " " " " "
+       " " " " " "
 }
  
 allLyrics = {
        \time 3/4; 
 %      \skip 4 * 12; 
-       \$lyric_four
-       \$lyric_verse1
+       \lyricFour
+       \lyricVerse1
 %      \skip 4 * 24; 
-       \$lyric_four
-       \$lyric_four
-       \$lyric_verse2
-       \$lyric_through
+       \lyricFour
+       \lyricFour
+       \lyricVerse2
+       \lyricThrough
 }
 
-$lyric_staff = \context Lyrics = lyric<
+lyricStaff = \context Lyrics = lyric<
        \allLyrics
 >
                
 vocals = \notes{
+       \clef treble;
        \property Voice.dynamicdir=UP
        \skip 4 * 12; 
-       \$vocal_verse1 
+       \vocalVerse 
        \skip 4 * 24; 
-       \$vocal_verse1
-       \$vocal_through
+       \vocalVerse
+       \vocalThrough
 }
 
-$vocal_staff = \context Staff = vocal<
+vocalStaff = \context Staff = vocal<
        \property Staff.instrument = "alto sax"
        \global
-       \$vocals
+       \vocals
 >
 
 treble = {
-       \$treble_intro 
-       \$treble_verse1 
-       \$treble_eentje
-       \$treble_verse1 
-       \$treble_through
+       \trebleIntro 
+       \trebleVerse1 
+       \trebleEentje
+       \trebleVerse1 
+       \trebleThrough
 }
 
-$treble_staff = \context Staff = treble< 
+trebleStaff = \context Staff = treble< 
        \global
        \treble
 >
 
 bass = {
-       \$bass_intro 
-       \$bass_verse1 
-       \$bass_eentje
-       \$bass_verse1 
-       \$bass_through
+       \bassIntro 
+       \bassVerse1 
+       \bassEentje
+       \bassVerse1 
+       \bassThrough
 }
 
-$bass_staff = \context Staff = bass<
+bassStaff = \context Staff = bass<
        \global
        \bass
 >
 
-$grand_staff = \context GrandStaff<
-       \$treble_staff
-       \$bass_staff
+grandStaff = \context GrandStaff<
+       \trebleStaff
+       \bassStaff
 >
 
 \score{
@@ -451,12 +443,12 @@ $grand_staff = \context GrandStaff<
        % \transpose a gives a' to d'' (for basses, who sing an octave down)
        <
 % kjoet, but i like the original better -- jcn
-%              { \notes \transpose a { \$vocal_staff } }
-%              \$lyric_staff
-%              { \notes \transpose a { \$grand_staff } }
-               { \notes { \$vocal_staff } }
-               \$lyric_staff
-               { \notes { \$grand_staff } }
+%              { \notes \transpose a { \vocalStaff } }
+%              \lyricStaff
+%              { \notes \transpose a { \grandStaff } }
+               { \notes { \vocalStaff } }
+               \lyricStaff
+               { \notes { \grandStaff } }
        >
        \paper { 
 %              \translator { \OrchestralScoreContext }
index 718515e4ffdc754a7e70d94a461a81c7f2fa6d38..682a0ae46c339c17a8cc19048dcb9c6aa6897e35 100644 (file)
    (("Key_item" "begin-of-note") . (extra_space 2.5))
    (("Staff_bar" "begin-of-note") . (extra_space 1.0))
    (("Clef_item" "begin-of-note") . (minimum_space 5.0))
+   (("" "Breathing_sign") . (minimum_space 0.0))
+   (("Breathing_sign" "Key_item") . (minimum_space 1.5))
+   (("Breathing_sign" "begin-of-note") . (minimum_space 1.0))
+   (("Breathing_sign" "Staff_bar") . (minimum_space 1.5))
+   (("Breathing_sign" "Clef_item") . (minimum_space 2.0))
    )
 )
  
index b6827083f359be3e254246eafbee95817cd7a8fe..c3b28363aebc51d17c85b407f46f420e0e496da5 100644 (file)
@@ -5,6 +5,7 @@
 #   ...
 #
 # (not finished.)
+# ABC standard v1.6:  http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt
 # 
 
 program_name = 'abc-to-ly'
@@ -14,7 +15,11 @@ import getopt
 import sys
 import re
 import string
-import mpz
+try:
+       import mpz
+except:
+       sys.stderr.write ("This script needs Python 1.5.1\n")
+       sys.exit (1)
 
 
 header = {}
@@ -51,7 +56,7 @@ def dump_header (hdr):
        print '\\header {'
        for k in hdr.keys ():
                print '%s = "%s";\n'% (k,hdr[k])
-       print '};'
+       print '}'
 
 def set_default_length (s):
        m =  re.search ('1/([0-9]+)', s)
@@ -175,6 +180,7 @@ def compute_key (k):
 tup_lookup = {
        '3' : '2/3',
        '4' : '4/3',
+       '5' : '4/5',
        '6' : '4/6',
        }
 
@@ -196,12 +202,19 @@ def  try_parse_group_end (str, state):
                        print '}'
        return str
 
+def header_append (key, a):
+       s = ''
+       if header.has_key (key):
+               s = header[key] + "\n"
+       header [key ] = s + a
+
 def try_parse_header_line (ln):
        m = re.match ('^(.): *(.*)$', ln)
 
        if m:
                g =m.group (1)
                a = m.group (2)
+               a = re.sub ('"', '\\"', a)
                if g == 'T':
                        header['title'] =  a
                if g == 'M':
@@ -216,11 +229,10 @@ def try_parse_header_line (ln):
                        header ['origin'] = a
                if g == 'X': 
                        header ['crossRefNumber'] = a
-
                if g == 'A':
                        header ['area'] = a
                if g == 'H':
-                       header ['history'] = a
+                       header_append ('history', a)
                if g == 'B':
                        header ['book'] = a
                if g == 'S':
@@ -244,6 +256,7 @@ def pitch_to_mudela_name (name, acc):
        return chr (name  + ord('c'))  + s * acc
 
 def octave_to_mudela_quotes (o):
+       o = o + 2
        s =''
        if o < 0:
                o = -o
@@ -385,7 +398,7 @@ def try_parse_guitar_chord (str):
                if str:
                        str = str[1:]
 
-               print "guitar chord: %s\n" % gc
+               sys.stderr.write ("warning: ignoring guitar chord: %s\n" % gc)
                
        return str
 
@@ -399,6 +412,14 @@ def try_parse_escape (str):
 
        return str
 
+#
+# |] thin-thick double bar line
+# || thin-thin double bar line
+# [| thick-thin double bar line
+# :| left repeat
+# |: right repeat
+# :: left-right repeat
+#
 
 def try_parse_bar (str):
        if str and str[0] == '|':
@@ -409,9 +430,28 @@ def try_parse_bar (str):
                                bs = '|.'
                        if str[0] == '|':
                                bs = '||'
-
+                       if str[0] == '|:':
+                               sys.stderr.write ("warning: repeat kludge\n")
+                               bs = '|:'
                if bs:
                        print '\\bar "%s";' % bs
+                       str = str[1:]
+
+       if str and str[:2] == '[|':
+               sys.stderr.write ("warning: thick-thin bar kludge\n")
+               print '\\bar "||";'
+               str = str[2:]
+
+       if str and str[:2] == ':|':
+               sys.stderr.write ("warning: repeat kludge\n")
+               print '\\bar ":|:";'
+               str = str[2:]
+
+       if str and str[:2] == '::':
+               sys.stderr.write ("warning: repeat kludge\n")
+               print '\\bar ":|:";'
+               str = str[2:]
+
        return str
        
 
@@ -426,6 +466,19 @@ def try_parse_chord_delims (str):
 
        return str
 
+# urg, hairy to compute grace note hack using \times{}
+def try_parse_grace_delims (str):
+       if str and str[0] == '{':
+               str = str[1:]
+               sys.stderr.write ("warning: expanding grace notes\n")
+               print '\\tiny '
+
+       if str and str[0] == '}':
+               str = str[1:]
+               print '\\normalsize '
+
+       return str
+
 # Try nibbling characters off until the line doesn't change.
 def try_parse_body_line (ln, state):
        prev_ln = ''
@@ -438,13 +491,11 @@ def try_parse_body_line (ln, state):
                ln = try_parse_guitar_chord (ln)
                ln = try_parse_tuplet_begin (ln, state)
                ln = try_parse_group_end (ln, state)
+               ln = try_parse_grace_delims (ln)
                ln = junk_space (ln)
                
        if ln:
-               print 'Huh?  Don\'t understand `%s\'' % ln
-               
-
-
+               sys.stderr.write ("Huh?  Don't understand `%s'\n" % ln)
        
 
 
@@ -468,7 +519,7 @@ def parse_file (fn):
 
 
 def identify():
-       print '%s from LilyPond %s' % (program_name, version)
+       sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
 
 def help ():
        print r"""
@@ -499,7 +550,13 @@ for f in files:
        if f == '-':
                f = ''
        
+       print ("\\score{")
+       print ("    <")
+       print ("        \\context Staff=one \\notes {")
        parse_file (f)
+       print ("        }")
+       print ("    >")
        dump_header (header)
-       print global_voice_stuff, 1
+       print "%%%s" % global_voice_stuff, 1
+       print ("}")
        
index e3b42ffa8ea1934ca98a6d39d0830d3426479715..deb297b5992ae654b33950ab5d549e74ec093872 100644 (file)
@@ -760,9 +760,9 @@ class Properties:
         """
 
         if int(value) == 1:
-            this.__set('pagenumber',1,requester)
+            this.__set('pagenumber','\\pagestyle{empty}',requester)
         else:
-            this.__set('pagenumber',0,requester)
+            this.__set('pagenumber','%',requester)
 
     #
     # setSeparate
@@ -990,7 +990,7 @@ def main():
         elif o == '--landscape' or o == '-L':
            Props.setOrientation('landscape','commandline')
         elif o == '--nonumber' or o == '-N':
-           Props.setNonumber('commandline')
+           Props.setNonumber(1,'commandline')
         elif o == '--Width' or o == '-W':
            Props.setLineWidth(a,'commandline')
         elif o == '--dependencies' or o == '-d':