]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.1.14 release/1.1.14
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 9 Dec 1998 13:23:24 +0000 (14:23 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Wed, 9 Dec 1998 13:23:24 +0000 (14:23 +0100)
46 files changed:
Documentation/man/lilypond.yo
Documentation/man/out/lilypond.1
Documentation/tex/computer-notation.bib
Documentation/tex/tutorial.yo
INSTALL.txt
NEWS
TODO
VERSION
debian/out/control
init/init.fly
init/property.ly
input/GNUmakefile
input/test/GNUmakefile
input/twinkle-pop.ly
lily/chord-name-engraver.cc
lily/command-request.cc
lily/compressed-music.cc
lily/ctie-engraver.cc [new file with mode: 0644]
lily/include/command-request.hh
lily/include/ctie-engraver.hh [new file with mode: 0644]
lily/include/lily-proto.hh
lily/include/main.hh
lily/include/music-list.hh
lily/include/music-wrapper.hh
lily/include/my-lily-parser.hh
lily/include/request-chord.hh [new file with mode: 0644]
lily/lexer.ll
lily/main.cc
lily/music-list.cc
lily/music-wrapper-iterator.cc
lily/music-wrapper.cc
lily/musical-pitch.cc
lily/my-lily-parser.cc
lily/parser.yy
lily/relative-octave-music.cc
lily/tuplet-engraver.cc
make/lilypond-vars.make
make/out/lelievijver.lsm
make/out/lilypond.lsm
make/out/lilypond.spec
make/toplevel.make.in
mutopia/F.Schubert/standchen.ly
ps/lily.ps
scm/lily.scm
stepmake/make/out/stepmake.lsm
stepmake/make/out/stepmake.spec

index 45e87bde237c1492f9b5b3198f19d108e12c5417..0268efdc9f32e4f6b08ca5b57be7da7f0984530f 100644 (file)
@@ -53,9 +53,6 @@ dit(--include, -I=DIRECTORY)
     Add file(DIRECTORY) to the search path for input files.
 dit(--ignore-version, -V)
     Make incompatible mudela version non-fatal.
-dit(--find-fourths, -Q)
-    Warn about melodic intervals larger than a fourth.  Useful for 
-    converting absolute octave mode stuff to relative octaves.
 )
 
 manpagesection(FEATURES)
index 4cea9bf664a986c82db33e8d8f6a82f306bb79a7..9c844fb6b0f1cc75f9b77ddbbed6c02f90f9a08d 100644 (file)
@@ -13,8 +13,8 @@ LilyPond is the GNU Project music typesetter\&.  This program can print
 beautiful sheet music from a music definition file\&.  It can also play
 mechanical performances to a MIDI file\&.  Features include multiple
 staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
-beams, slurs, triplets, formatting scores, part extraction\&.  It includes
-a nice font of musical symbols\&.
+beams, slurs, triplets, named chords, transposing, formatting scores, 
+part extraction\&.  It includes a nice font of musical symbols\&.
 .PP 
 .SH "OPTIONS" 
 .IP "-I,--include=FILE" 
@@ -46,9 +46,6 @@ Set init file to \fBFILE\fP (default: \fBinit\&.ly\fP)\&.
 Add \fBDIRECTORY\fP to the search path for input files\&.
 .IP "--ignore-version, -V" 
 Make incompatible mudela version non-fatal\&.
-.IP "--find-fourths, -Q" 
-Warn about melodic intervals larger than a fourth\&.  Useful for 
-converting absolute octave mode stuff to relative octaves\&.
 .PP 
 .SH "FEATURES" 
 .PP 
index b5d801d4319386f87c3cf0bce83ea91f5682bab6..eaa4ba804310fecc1e4aaad0077e7f6b1da92f6b 100644 (file)
@@ -24,6 +24,7 @@
   year =       1986
 }
 
+% byrd
 @PhdThesis {byrd85,
   year =  {1985},
   title = {Music Notation by Computer},
   school = {Indiana University},
 }
 
+@Article {byrd74,
+  year =  {1974},
+  title = {A System for Music Printing by Computer},
+  author = {Donald Byrd},
+  journal = {Computers and the Humanities},
+  volume ={8},
+  pages ={161-72},
+}
+
 @Article{byrd94,
   author =      {Donald Byrd},
   title =       {Music Notation Software and Intelligence},
@@ -43,22 +53,24 @@ pages = {17--20},
   note = {Byrd (author of Nightinggale) shows four problematic
 fragments of notation, and rants about notation programs that try to
 exhibit intelligent behaviour. HWN}
-
 }
 
 
 
-@Article{erickson75,
-  author =      {R. F. Erickson},
+@Article{ericson75,
+  author =      {R. F. Ericson},
   title =       {The DARMS Project: A status report},
   journal =     {Computing in the humanities},
   year =        1975,
   volume =      9,
   number =      6,
   pages =       {291--298}
+
+  note = {Gourlay\cite{gourlay86} writes: A discussion of the design
+  and potential uses of the DARMS music-description language.}
 }
 
-c
+
 @Article{field-richards93,
   author =      {H.S. Field-Richards},
   title =       {Cadenza: A Music Description Language},
@@ -70,7 +82,6 @@ c
   note = {A description through examples of a music entry language.
 Apparently it has no formal semantics.  There is also no
 implementation of notation convertor. HWN}
-  
 }
 
 
@@ -156,30 +167,17 @@ note = {A no-science-here review of Encore. HWN}
 
 }
 
-@Article {byrd74,
-  year =  {1974},
-  title = {A System for Music Printing by Computer},
-  author = {Donald Byrd},
-  journal = {Computers and the Humanities},
-  volume ={8},
-  pages ={161-72},
-}
-
-
 @Book {smith73,
-  note = {If I remember correctly, this was concerned more with an input language than with the typography. SP},
   year =  {1973},
   title = {Editing and Printing Music by Computer},
   author = {Leland Smith},
   totalentry = {Journal of Music Theory},
   volume={17},
   pages ={292-309},
+  note = {Gourlay\cite{gourlay86} writes: A discussion of Smith's music-printing system}
 }
 
 
-
-
-
 @InProceedings{montel97,
   author =      {Dominique Montel},
   title =       {La gravure de la musique, lisibilit\'e esth\'etique, respect de l'oevre},
@@ -189,6 +187,8 @@ note = {A no-science-here review of Encore. HWN}
   editors ={Genevois \& Orlarey}
 }
 
+
+% Gomberg
 @PhdThesis {gomber75,
   year =  {1975},
   title = {A Computer-Oriented System for Music Printing},
@@ -196,6 +196,21 @@ note = {A no-science-here review of Encore. HWN}
   school = {Washington University},
 }
 
+@Book {gomberg,
+  title = {A Computer-oriented System for Music Printing},
+  author = {David A.  Gomberg},
+  journal  = CitH,
+  volume={11},
+  month = {march},
+  year = {1977},
+  pages = {63-80},
+  note = {Gourlay \cite{gourlay86} writes: "A discussion of the
+  problems of representing the conventions of musical notation in
+  computer algorithms."}
+
+}
+
+
 
 @Book {CASR,
   note = {Annual editions since 1985, many containing surveys of music typesetting technology. SP},
@@ -205,14 +220,41 @@ note = {A no-science-here review of Encore. HWN}
 }
 
 
-@Book {gomberg,
-  title = {A Computer-oriented System for Music Printing},
-  author = {David A.  Gomberg},
-  journal  = CitH,
-  volume={11},
-  pages = {63-80},
+
+% LIME
+@Article {haken93,
+  note = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures somewhat) HWN},
+  year =  {1993},
+  title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor},
+  author = {Lippold Haken and Dorothea Blostein},
+  journal = {Computer Music Journal},
+  volume= {17},
+  number={3},
+  pages = {43--58},
+}
+
+@InProceedings{haken95,
+  year =  {1995},
+  title = {A New Algorithm for Horizontal Spacing of Printed Music},
+  author = {Lippold Haken and Dorothea Blostein},
+  booktitle = {International Computer Music Conference},
+  address={Banff},
+  month={Sept},
+  pages = {118-119},
+  note = {This describes an algorithm which uses springs between adjacent columns. This algorithm is a "subclass" of the LilyPond algorithm. HWN},
 }
 
+@Article {blostein91,
+  note = {This paper provides a shallow overview of the algorithm used in LIME for spacing individual lines. HWN},
+  year =  {1991},
+  title = {Justification of Printed Music},
+  author = {Dorothea Blostein and Lippold Haken},
+  journal   = {Communications of the ACM},
+  volume= {J34},
+  number= {3},
+  month= {March},
+  pages = {88-99},
+}
 
 
 @Article{blostein94,
@@ -225,7 +267,8 @@ note = {A no-science-here review of Encore. HWN}
   number =      {3},
   month =       {march},
   pages =       {289--306},
-  note = {A description of various conversions, decisions and issues relating to this interactive editor HWN},
+  note = {A description of various conversions, 
+decisions and issues relating to this interactive editor HWN},
 }
 
 @InProceedings{bouzaiene98:_une,
@@ -257,6 +300,9 @@ year = 1997,
   organization = {International Computer Music Association}
 }
 
+%
+% MusiCopy
+%
 @TechReport {gourlay87-spacing,
   note = {Algorithm for generating spacing in one line of (polyphonic) music, tailored for use with MusiCopy. LilyPond uses a variant of it (as of pl 76) HWN},
   year =  {1987},
@@ -278,11 +324,9 @@ year = 1997,
 
 
 @TechReport {gourlay87-formatting,
-
 note = {This paper discusses the development of algorithms for the
 formatting of musical scores (from abstract). It also appeared at
 PROTEXT III, Ireland 1986},
-
   year =  {1987},
   title = {Computer Formatting of Music},
   author = {John S. Gourlay and A. Parrish
@@ -390,39 +434,6 @@ surprising that LilyPond is more mature.
   pages = {388--401},
 }
 
-@Article {haken93,
-  note = {A description of Lime internals (which resemble older (before 0.0.68pre) LilyPond data structures somewhat) HWN},
-  year =  {1993},
-  title = {The Tilia Music Representation: Extensibility, Abstraction, and Notation Contexts for the Lime Music Editor},
-  author = {Lippold Haken and Dorothea Blostein},
-  journal = {Computer Music Journal},
-  volume= {17},
-  number={3},
-  pages = {43--58},
-}
-
-@InProceedings{haken95,
-  year =  {1995},
-  title = {A New Algorithm for Horizontal Spacing of Printed Music},
-  author = {Lippold Haken and Dorothea Blostein},
-  booktitle = {International Computer Music Conference},
-  address={Banff},
-  month={Sept},
-  pages = {118-119},
-  note = {This describes an algorithm which uses springs between adjacent columns. This algorithm is a "subclass" of the LilyPond algorithm. HWN},
-}
-
-@Article {blostein91,
-  note = {This paper provides a shallow overview of the algorithm used in LIME for spacing individual lines. HWN},
-  year =  {1991},
-  title = {Justification of Printed Music},
-  author = {Dorothea Blostein and Lippold Haken},
-  journal   = {Communications of the ACM},
-  volume= {J34},
-  number= {3},
-  month= {March},
-  pages = {88-99},
-}
 
 
 @Article {rader96,
@@ -570,6 +581,20 @@ basically say: "You can embed a NIFF or MIDI file") HWN}
   year={1983}
 }
 
+
+
+@Article{Ornstein84,
+  author={Ornstein, Severo M. and John Turner Maxwell III},
+  title={Mockingbird: A Composer's Amanuensis},
+  journal= {Byte},
+  volume= 9,
+  month = {January},
+  year= { 1984},
+  note={A discussion of an interactive and graphical computer system for
+music composition}
+
+}
+
 @PhdThesis{mueller90:_inter_bearb_musik,
   author =      {Giovanni M\"uller},
   title =       {Interaktive Bearbeitung konventioneller Musiknotation},
@@ -586,6 +611,9 @@ chapters on engraving and notation are well structured and clear,
 though.}
 }
 
+
+%
+% three part study by John Gr/over
 @TechReport{grover89-symbols,
   author =      {John Gr\/over},
   title =       {A computer-oriented description of Music Notation.  Part I. The Symbol Inventory},
index 4e751abc1ae535a989b6fc7fa3661892de09aece..03b1249e626d01848f025c3108b1a3ecb4fcb4bb 100644 (file)
@@ -66,11 +66,10 @@ sect(Introduction)
 label(tutorial:introduction)
 latexcommand(\parindent2pc)
   
-If you are reading this, you probably are interested in printing
-music.  LilyPond is a program that can print music from a
-specification that you, the user, supply.  Using LilyPond may be a bit
-quaint in the beginning, because you have to give that specification
-using a em(language).  This document is a gentle introduction to that
+LilyPond is a program that can print music from a specification that
+you, the user, supply.  Using LilyPond may be a bit quaint in the
+beginning, because you have to give that specification using a
+em(language).  This document is a gentle introduction to that
 language, which is called Mudela, an abbreviation for Music Definition
 Language.
 
@@ -135,20 +134,23 @@ the input itself, line by line.
 
 verb(% lines preceded by a percent are comments.)COMMENT(
 
-)The percent sign (code(%)) introduces a line comment.  If you want
+)The percent sign, `code(%)', introduces a line comment.  If you want
 make larger comments, you can use block comments. These are delimited
-by code(%{) and code(%})
-
+by `code(%{)' and `code(%})'
 
 verb(\input "paper16.ly")
 
-By default, LilyPond will use definitions for a staff of 20 point
-high.  If you want smaller output (e.g., 16 point), you have to import
-the setting for that size.  You can do this by including a file.
-code(\include "file") is replaced by the contents of  code(file).
+By default, LilyPond will use definitions for a staff of 20
+nop(point)footnote(A point is the standard measure of length for
+printing.  One point is 1/72.27 inch.)
 
+high.  If you want smaller output (e.g., 16 point), you have to import
+the settings for that size.  You can do this by including a file.
+code(\include "file") is replaced by the contents of code(file).
+LilyPond will inspect the standard search to look for the requested 
+file.COMMENT(
 
-verb(\score {
+)verb(\score {
 ) COMMENT( 
 
 ) A mudela file combines music with directions for outputting that
@@ -165,19 +167,19 @@ verb(
 
 ) As we will see, pitches are combinations of octave, note name and
 chromatic alteration.  In this scheme, the octave is indicated by
-using raised quotes (`code (')') and ``lowered'' quotes (commas:
+using raised quotes (`code(')') and ``lowered'' quotes (commas:
 `code(,)').  The central C is denoted by code(c').  The C one octave
 higher is code(c'').  One and two octaves below central C is denoted
 by code(c) and code(c,) respectively.
 
 If you have to indicate the pitches in a long piece that is written in
 either a high or very low octave, you would have to type very many
-quotes.  To remedy this, LilyPond has a so-called "relative" octave
+quotes.  To remedy this, LilyPond has a so-called ``relative'' octave
 entry mode.  In this mode, notes without quotes are chosen in such an
 octave that they are the closest to the preceding note.  If you add a
 high-quote an extra octave is added.  The lowered quote will substract
-an octave.  Because the first note obviously has no predecessor, you
-have to give the (absolute) pitch of the note to start with.
+an extra octave.  Because the first note obviously has no predecessor,
+you have to give the (absolute) pitch of the note to start with.
 COMMENT(
 
 )verb(
@@ -229,9 +231,8 @@ COMMENT(
 
 )These are notes with pitch code(a') and code(b').  Because their
 duration is the same as the code(g), there is no need to enter the
-duration (It is not illegal to enter it anyway.  Then you would have
-to enter code(a8 b8))
-COMMENT(
+duration (It is not illegal to enter it anyway.  You would then enter
+code(a8 b8)) COMMENT(
 
 )verb(
           c]
@@ -247,9 +248,9 @@ the current time signature.  COMMENT(
           d4 g, g |
 ) COMMENT(
 
-) Three more notes:  The code(|) is a "barcheck".  When processing the
+) Three more notes:  The code(|) is a ``barcheck''.  When processing the
 music, LilyPond will check  that barchecks are found at the start of
-a bar precisely.  This makes it easy to spot where notes are forgotten
+a bar.  This can help you track down notes you forgot to enter
 verb(
         e'4 [c8 d e fis]
 ) COMMENT(
@@ -263,13 +264,12 @@ verb(
         c4 [d8( )c b a( ] )b4 [c8 b a g] |
 ) COMMENT(
 
-) The next line shows something new: a slur is a symbol that is
-printed over several notes.  In mudela, one enters a slur by marking
-the beginning and ending note of the slur with an opening and closing
-parenthesis respectively.  In the line shown above this is done for
-two slurs.  Note that parentheses (slur markers) are between the
-notes, and the brackets (beam markers) around the notes. As you can
-see, the brackets and parentheses do not have to nest.
+) The next line shows something new: In mudela, one enters a slur by
+marking the beginning and ending note of the slur with an opening and
+closing parenthesis respectively.  In the line shown above this is
+done for two slurs.  Note that parentheses (slur markers) are between
+the notes, and the brackets (beam markers) around the notes. As you
+can see, the brackets and parentheses do not have to nest.
 
 verb(
         a4 [b8 a g fis] g2.  |
@@ -288,20 +288,18 @@ Lily can not detect where you want your music to be repeated, so you
 have to instruct her: a special bar symbol can be entered by the
 code(\bar) command followed by a string that signifies the bar symbol
 that you want.  Then comes a semicolon to separate the string from the
-rest of the notes, analogously with code(\key) and code(\time).
+rest of the notes, just like with code(\key) and code(\time).
 verb(
      cis'4 [b8 cis] a4 |
 ) COMMENT(
 
-)
-This line shows that Lily will print an accidental if that is needed:
-the first C sharp will be printed with an accidental, the second without.
-verb(
-        [a8-. b-. cis-. d-. e-. fis-. ] % try some super and subscripts.
-) COMMENT(
+) This line shows that Lily will print an accidental if that is
+needed: the first C sharp will be printed with an accidental, the
+second one without.  COMMENT(
 
-)
-There is more to music than just pitches and rhythms.  An important
+)verb( [a8-. b-. cis-. d-. e-. fis-. ] % try some super and subscripts.)COMMENT(
+
+)There is more to music than just pitches and rhythms.  An important
 aspect is articulation.  You can enter articulation signs either in an
 abbreviated form, by a dash and the the character for the
 articulation to use,  e.g. code(-.) for staccato as shown above.
@@ -318,12 +316,12 @@ verb(
         d2.-\fermata
 ) COMMENT(
 
-) Finally, all articulations have a verbose form, like code(\fermata).
-The ``command'' COMMENT(Hi Adrian :-) code(\fermata) is not part of
-the core of the language (most of the other discussed elements are),
-but it is an abbreviation of a more complicated description of a
-fermata.  code(\fermata) refers to that abbreviation and is therefore
-called an em(identifier).
+) All articulations have a verbose form, like code(\fermata).  The
+``command'' COMMENT(Hi Adrian :-) code(\fermata) is not part of the
+core of the language (most of the other discussed elements are), but
+it is an abbreviation of a more complicated description of a fermata.
+code(\fermata) names that description and is therefore called an
+em(identifier).
 
 verb(
         }
@@ -343,8 +341,9 @@ to be smaller.  We do this by setting the line width to 10 centimeter
 
 verb(
         }
-)
-Finally, the last brace ends the code(\score) block.
+)COMMENT(
+
+)The last brace ends the code(\score) block.
 
 
 
@@ -363,16 +362,6 @@ the symbols and the decisions from a high-level musical description.
 In other words, the function of LilyPond would be best described by
 `music compiler' or `music to notation compiler'.
 
-We find that ---once you master the language--- there are big
-advantages of using LilyPond over GUI oriented programs: first,
-entering music is quite efficient.  Second, it is possible to explain
-exactly what the meaning piece of mudela is, and you can transform
-these pieces automatically (eg, by transposing them).  Third, the
-program that is not interactive, so much less tradeoffs have to be
-made between processing speed and the beauty of the output: you get
-prettier output by using LilyPond.
-
-
 As you can see, the most interesting part of the input is music
 itself, in this case the sequence of notes.  We will therefore focus
 on entering music for now.  Consequently, when we mean
@@ -402,7 +391,7 @@ The duration of a note is specified as a number: a whole note is
 denoted by 1, a half note by 2, a quarter by 4, and so on.  If you
 want to augment a duration with a dot, simply affix a period to the
 number.  You can also print notes longer than a whole.  You do this by
-using identifiers (code(\breve) and code(\longa):
+using identifiers (code(\breve) and code(\longa)):
 Here are some random notes to show how it works.
 
 verb(
@@ -429,19 +418,18 @@ mudela()(
 
 subsect(Basic pitches)
 
-The pitch code(c')  consists of two parts: one part for the
-note name, and one for the octave.  The letter specifies which note
-name to use: note names simply are the letters code(a) to code(g).
-The number of apostrophes specifies the octave to use: the central C
-is denoted by code(c').footnote(By convention, the A above central C
-at concert pitch is the tone that is used to tune instruments.  Its
-frequency is about 440 Hz.)  The C which is an eighth higher (the C in
-the ``two-line octave'') is denoted by code(c''): every octave adds a
+The pitch code(c') consists of two parts: one part for the note name,
+and one for the octave.  The letter specifies which note name to use:
+note names simply are the letters code(a) to code(g).  The number of
+apostrophes specifies the octave to use: the central C is denoted by
+code(c').footnote(By convention, the A above central C at concert
+pitch is the tone that is used to tune instruments.  Its frequency is
+about 440 Hz.)  The C which is an eighth higher (the C in the
+``two-line octave'') is denoted by code(c''): every octave adds a
 quote.  A note name without quotes designates the pitch below code(c')
 (the C in the ``small octave''). If you want to go down even further,
-commas should be added, e.g., the C in the ``contra octave'' is
-expressed as code(c,,).footnote(The comma is meant to represent a
-sunken apostrophe.)
+commas (sunken apostrophes) should be added, e.g., the C in the
+``contra octave'' is expressed as code(c,,).
 
 This example demonstrates pitches
 mudela(fragment,verbatim,center)(
@@ -469,7 +457,7 @@ are given in bind(Table)ref(notename-tab).
 latexcommand(\begin{table}[h])
   center(
     table(2)(ll)(
-      row(cell(english)cell(LilyPond))
+      row(cell(English)cell(LilyPond))
       rowline()
       row(cell(c double flat)cell(ceses))
       row(cell(c flat)cell(ces))
@@ -556,14 +544,13 @@ that is covered in bind(Section)ref(sec:polyphonic).
 
 sect(Adding nuances: articulation and dynamics)
 
-Having just chords and notes does not give you real music.  Real music
-has more liveliness to it: music can have articulation, dynamics
-(louder and softer), etc.  This liveliness has notation, so LilyPond
-can print it.  We'll start out by explaining how to obtain the
-smallest grains of nuance: the articulation of a single note.  Articulation
-is entered by writing a dash and the name of the desired articulation
-mark.  You have to add a backslash in front of the name to distinguish
-it from the name of a note. COMMENT(
+Music can have articulation, dynamics (louder and softer), etc.  These
+aspecs have notation, so LilyPond can print those.  We'll start out by
+explaining how to obtain the smallest grains of nuance: the
+articulation of a single note.  Articulation is entered by writing a
+dash and the name of the desired articulation mark.  You have to add a
+backslash in front of the name to distinguish it from the name of a
+note. COMMENT(
 
 )mudela(fragment,verbatim)(
   c''4-\staccato
@@ -588,7 +575,7 @@ following example: COMMENT(
         \type Lyrics\lyrics {
               "."4 "-" "+" "|" ">" "\^{ }" }
         >
-        \paper { linewidth = 12.\cm; }
+        \paper { linewidth = -1.\cm; }
 })COMMENT(
 
 )Text and digits for fingering can be entered in the same manner: add a
@@ -630,7 +617,7 @@ the one that ends it.  These are the spanners that are entered like
 this:
 
 description(
-dit(The slur)
+dit(Slur)
  The slur has the opening parenthesis as 
 start marker is.  The stopping marker is the closing parenthesis.
 For example:
@@ -647,12 +634,12 @@ mudela(fragment,verbatim,center)(
 
 dit(Beam)
 
-Another spanner is the beam.  The starting marker is the opening
-bracket, then ending marker is the closing bracket.  The brackets have
-to be em(around) the beamed notes.  footnote(Strictly speaking, a
-beam is not a musical concept: beaming doesn't change the meaning of
-music, it only clarifies the rhythmic structure.  One might argue that
-beams should not be present in a ``music'' language.  Unfortunately,
+The starting marker for the beam is the opening bracket, the ending
+marker is the closing bracket.  The brackets have to be em(around) the
+beamed notes.  footnote(Strictly speaking, a beam is not a musical
+concept: beaming doesn't change the meaning of music, it only
+clarifies the rhythmic structure.  One might argue that beams should
+not be present in a music representation language.  Unfortunately,
 LilyPond is not smart enough to insert beams into music on its own.
 
 LilyPond does have code that guesses what the pattern should look
@@ -664,17 +651,16 @@ mudela(fragment,verbatim)(
 [c'8 c'] [c'16 c' c' c'] [c'16. c'32 c' c'16.]
 )
 
-dit(The tie) The tie is similar to the slur: it  looks like a
-slur, but a slur connects whole chords, whereas the tie connects note
-heads.  Tied notes should be played as one long note.  In analogy with
-TeX()'s tie (which ties together words with a space), LilyPond's tie
-is entered as a tilde, `code(~)'.
+dit(Tie) LilyPond's tie is entered as a tilde, `code(~)', in analogy
+ with TeX()'s tie (which ties together words with a space), The tie is
+ similar to the slur: it looks like a slur, but a slur connects whole
+ chords, whereas the tie connects note heads.  
 
 The input convention for the tilde is somewhat peculiar when used in
 conjunction with chords.  Internally, the extra information that is
 represented by the tilde has to be attached to a note (or to a rest,
 for that matter).  For this reason, you can't put the tilde between
-two chords (as in code( <c' g'> ~ <c' g'>)).  The tilde sign must be
+two chords (as in code(<c' g'> ~nop( )<c' g'>)).  The tilde sign must be
 directly after a note of the chords.  It does not matter which
 one. The following example demonstrates the use of ties:
 mudela(fragment,verbatim,center)(
@@ -705,36 +691,33 @@ ending markers.
 sect(Commands)
 label(sec:commands)
 
-We have focused on printing notes. Notation contains many other
-constructs, constructs that help you with reading those notes.
-Examples of such constructs are clefs, time signatures, keys etc.
-LilyPond will try to generate these constructs as much as possible,
-but not all such hints can be inserted automatically, and you can also
-override some of the settings.  This can be done by inserting various
+Music notation constructs with no duration, like clefs and key
+signatures, can be entered by inserting various
 commands between the music.  The general form of these commands is
 COMMENT(
 
-)center(code(\keyword argument argument ... ;))
+)center(code(\keyword argument argument ... ;))COMMENT(
 
-These are the commands that are currently supported:
+)These are the commands that are currently supported in alfabetic order:
 description(
 dit(code(\bar) var(bartype))
   This command makes LilyPond print special bar
   lines and repeat symbols.  You can also use it to allow line breaks
   when entering cadenzas.  The argument var(bartype) is a string that
   describes what kind of bar line to print.
+COMMENT(
 
-mudela(fragment,verbatim)(
+)mudela(fragment,verbatim)(
     \bar "|:"; c'4 \bar ":|:";    c'4  \bar ":|";  c'4 \bar "||";
     c'4 \bar "empty"; c'4 \bar "|.";
-)
+)COMMENT(
 
-  The command `code(\bar "empty")' does not create any visible bar
-  line, but it tells LilyPond to allow a linebreak at that
-  position.  The `code(\bar)' command prints the specified symbol
-  immediately.  If you give a `code(\bar)' command at the end of a
-  measure then the specified symbol replaces the automatic bar line;
-  otherwise the specified symbol appears in the middle of the measure.
+)The command `code(\bar "empty")' does not create any visible bar
+  line, but it tells LilyPond to allow a linebreak at that position.
+  The `code(\bar)' command prints the specified symbol where you enter
+  it.  If you give a `code(\bar)' command at the end of a measure then
+  the specified symbol replaces the automatic bar line.
+  
   The code(\bar) command does not affect metric structure.
 
 dit(code(\cadenza) var(togglevalue)) This command toggles the
@@ -759,10 +742,11 @@ dit(code(\clef) var(clefname)) This command sets the current clef for notation,
 
 dit(code(\key) var(pitch) var(type)) This command changes the current
   key signature.  The key signature is printed at the start of every
-  line. The var(type) argument is set to code(\major) or code(\minor)
-  to get major or minor keys, respectively. Omitting the second
-  argument gives major keys. The key of C-minor can thus be specified
-  as `code(\key es)' or `code(\key \c minor)'. 
+  line. The var(type) argument is an integer. Useful values are
+  available as the predefined identifiers code(\major) and
+  code(\minor).  Omitting the second argument gives major keys. The
+  key of C-minor can thus be specified as `code(\key es)' or
+  `code(\key c \minor)'.
   
 dit(code(\keysignature) var(pitchlist))
 
@@ -797,7 +781,7 @@ Example:
 
 dit(code(\grouping) var(durationslist)) sets the metric structure of the measure.
     Its effect can best be shown by an example:
-    mudela(fragment,verbatim)(
+    mudela(fragment,verbatim,center)(
         \time 5/16;
         \grouping 16*3 16*2;
         [c'8 c'16 c'8]
@@ -818,7 +802,7 @@ of 2 and 3 beats, with as many groups of
 The commands described above aren't really music, but they can best be
 thought as as notes with no duration.  Since they are grammatically
 equivalent to notes, these commands can be used in the same places as
-notes:
+notes.
 
 sect(Notation context)
 
@@ -835,10 +819,9 @@ it as multiple voices on a staff).  Obviously the concept of staff is
 not really something musical.  But what is it then?
 
 The most simplistic explanation is: a staff is a graphic peculiarity
-of the notation system.  In other words, a staff is a graphic device,
-a special picture of five lines on which one can print note heads.  We
-will call this view on the concept of staff `staff symbol' from now
-on.
+of the notation system.  In other words, a staff is a picture of five
+lines on which one can print note heads.  We will call this view on
+the concept of staff `staff symbol' from now on.
 
 But 
 there is more to a staff than just the symbol.  A staff
@@ -889,7 +872,7 @@ mudela()(
   }}
  }) COMMENT(
 
-)Technically speaking you know where the strong and weak beats are, but
+)Technically speaking you can find out where the strong and weak beats are, but
 it is difficult to find them quickly.   Bar lines  help you in finding
 the location  of the notes within the measure:
 mudela()(
@@ -934,72 +917,78 @@ mudela()(\score {
 })COMMENT(
 
 ) Now you know the pitch of the notes: you look at the start of the line
-and see a clef, with this clef, you can determine the notated pitches.
+and see a clef, and with this clef, you can determine the notated pitches.
 You have found the em(context) in which the notation is to be
 interpreted!
 
 So the context determines the relationship between a piece of music
 and its notation: you, the reader, use context to deduce music from
-notation.  Because LilyPond is a notation writer instead of a reader,
-context works the other way around for Lily: with context a piece of
-music can be converted to notation.
+notation.  Because LilyPond writes notation, context works the
+other way around for LilyPond: with context a piece of music can be
+converted to notation.
 
 We see that a staff forms context, and that context is needed to
 convert between notation and music.  In LilyPond we turn around this
 reasoning: LilyPond has a notion of notation context, and the staff is
 just one example of a notation context.  In fact, the arguments of the
 code(\type) command (Staff, GrandStaff) were all names of different
-contexts.
+contexts.  A notation context is a conversion between music and
+notation.
 
 We make one final observation before listing the standard notation
-contexts.  A score can contain many staffs; A staff can contain many
-voices.  This suggests that notation contexts are objects that can be
-nested.
+contexts: a score can contain many staffs and a staff can contain many
+voices.  This suggests that notation contexts are objects that can
+contain other notation contexts.
 
-The following is a list of the contexts that are supported by
+The following
+ is a list in alfabetic order of the contexts that are supported by
 LilyPond.  Each notation context is characterised by its name, the
 notation elements it creates, and the contexts that it can contain.
 description(
-dit(Voice) The code(Voice) context is a context that corresponds to a
-  voice on a staff.  This context handles the conversion of noteheads,
-  dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests
 
-dit(Staff) The code(Staff) context handles clefs, bar lines, keys,
-  accidentals.  A code(Staff) context can contain code(Voice)
-  contexts.
-
-dit(RhythmicStaff) The code(RhythmicStaff) context is like the staff,
-  but much simpler: the notes are printed on one line, and pitches are
-  ignored.  code(RhythmicStaff) can contain code(Voice) contexts.
 
 dit(GrandStaff) A code(GrandStaff) context contains code(Staff)
   contexts, and it adds a brace to the output at the
-  nop(left.)footnote(This is a major deficiency in the current
-  implementation.  Currently stems, slurs and beams cannot be printed
-  across two staffs.  In reality, a grand staff is a hybrid of one big
-  staff and two stacked staffs.)
-  
-  A code(GrandStaff) context can contain 
-  code(Staff)s. Typically, it will contain two code(Staff)s, one
-  treble staff, and one bass staff. The bar lines of the contained
-  staffs are connected vertically.
-
-dit(StaffGroup) A code(StaffGroup) context contains code(Staff) or
-  code(Lyrics) contexts, and prints a bracket at the left.  The bar
-  lines in the participating staffs are connected.
+  nop(left.)footnote(The GrandStaff is quite limited, LilyPond can not
+  do cross staff beaming and slurring.)
+    
+    A code(GrandStaff) context can contain code(Staff)s. Typically, it
+  will contain two code(Staff)s, one treble staff, and one bass
+  staff. The bar lines of the contained staffs are connected
+  vertically.
 
 dit(Lyrics) As its name suggests, The code(Lyrics) context deals with
   typesetting lyrics.  This topic will be covered in
   bind(Section)ref(tutorial:lyrics).
   
-dit(Score) The code(Score) context is the toplevel context: no context can
-  contain a code(Score) context.  The code(Score) context handles the
-  administration of time signatures.  It also makes sure that items
-  such as clefs, time signatures, and key-signatures are aligned across staffs.
+dit(Score) The code(Score) context is the toplevel context: no context
+  can contain a code(Score) context.  The code(Score) context handles
+  the administration of time signatures.  It also makes sure that
+  items such as clefs, time signatures, and key-signatures are aligned
+  in columns across staffs.
   
   The code(Score) can contain code(Staff), code(StaffGroup),
   code(Lyrics), code(GrandStaff) and code(RhythmicStaff) contexts.
 
+dit(RhythmicStaff) The code(RhythmicStaff) context is like the staff,
+  but much simpler: the notes are printed on one line, and pitches are
+  ignored.  code(RhythmicStaff) can contain code(Voice)
+  contexts.
+
+
+dit(Staff) The code(Staff) context handles clefs, bar lines, keys,
+  accidentals.  A code(Staff) context can contain code(Voice)
+  contexts.
+
+dit(StaffGroup) A code(StaffGroup) context contains
+  code(Staff) or code(Lyrics) contexts, and prints a bracket at the
+  left.  The bar lines in the participating staffs are connected.
+
+  
+dit(Voice) The code(Voice) context is a context that corresponds to a
+  voice on a staff.  This context handles the conversion of noteheads,
+  dynamic signs, stems, beams, super- and subscripts, slurs, ties and rests
+
 COMMENT(do ChoireStaff)
 )
 
@@ -1017,10 +1006,9 @@ code(\clef) and code(\cadenza) change these properties, and this
 explains why they are fundamentally different from musical expressions
 like notes and rests.
 
-A notation context is not a primitive element of LilyPond, but rather
-  Later on, in bind(Section)ref(tutorial:engravers) we will explain
-  how you can create your own contexts.
-
+A notation context is not a primitive element of LilyPond: in
+bind(Section)ref(tutorial:engravers) it will be explained how you can
+form your own notation contexts.
 
 sect(Nested music: multiple staffs)
 label(tutorial:more-staffs)
@@ -1112,14 +1100,16 @@ context can have properties that influence the conversion from music
 to notation.  A simple example of such a property is the clef: the
 type of a clef helps determines the vertical position of note heads in
 a staff.  Some of these properties can be modified by commands such as
-code(\clef) and code(\time).  But there is more: notation contexts
-also have properties are settable in a generic fashion.  We will
-demonstrate this feature by printing multiple voices on a staff.
+code(\clef) and code(\time).  But notation contexts can have other
+properties, that are settable in
+a generic fashion.  We will demonstrate this feature by printing
+multiple voices on a staff.
 
-Printing more than one voice on a staff, is not unlike printing
-multiple   staffs stacked together.  This suggests that  the template
-to follow  is this:
-verb(
+Printing more than one voice on a staff is like printing multiple
+staffs stacked together.  This suggests that the template to follow is
+this:COMMENT(
+
+)verb(
   \type Staff <
     \type Voice = one  ...
     \type Voice = two  ...
@@ -1127,10 +1117,9 @@ verb(
 ) COMMENT(
 
 ) On the ellipsis there should be music going from left to right, in
-other words, notes enclosed in braces.  Let us try the following
-simple melodies:
+other words, notes enclosed in braces.  Let us try the following counterpoint:COMMENT(
 
-mudela(fragment,verbatim)(
+)mudela(fragment,verbatim)(
 \type "Staff" <
   \type "Voice" = "one" { r4 as'4 () as'4 g'4 }
   \type "Voice" = "two" { g'2 f'4 e'4 }
@@ -1174,13 +1163,11 @@ mudela(fragment,verbatim,center)(
       g'2 f'4 e'4 }
   >
 )
-    latexcommand(\caption{multiple voices})
+    latexcommand(\caption{Multiple voices})
     label(tutorial:multi-voice-fig)
 latexcommand(\end{figure})
 
-As you can see, this property also controls the directions of slurs,
-which explains the name code(ydirection).COMMENT(hmm)
-
+As you can see, this property also controls the directions of slurs.
 
 Other properties can also be set, and they can be within different
 contexts.  In general, you can set a property by specifying
@@ -1190,9 +1177,10 @@ should be strings.
 
 The effect of a property is pretty much hardwired into the
 implementation (and thus subject to change), so we will not deal with
-all the possible properties in detail. Among other characteristics that
-can be set are the layout of slurs and beams.  The initialisation file
-file(property.ly) explains most properties.
+all the possible properties in detail. Among other characteristics
+that can be set are the layout of slurs and beams.  The initialisation
+file file(property.ly) and the reference manual contain explanations
+of all properties.
 
 sect(Lyrics)
 label(tutorial:lyrics)
@@ -1204,11 +1192,10 @@ durations.  After this, you have to specify how to convert these to
 graphics.
 
 Lyrics consist of syllables, which are strings together with
-durations.  Previously we only entered note names, so for entering
-lyrics we have to instruct LilyPond that what we enter are not note
-names but strings.  This instruction is the keyword
-code(\lyrics).  After entering this keyword you can enter a musical
-construct---sequential music, simultaneous music, code(\type)
+durations.  For entering lyrics we have to instruct LilyPond that what
+we enter are not note names but strings.  This instruction is the
+keyword code(\lyrics).  After entering this keyword you can enter a
+musical construct---sequential music, simultaneous music, code(\type)
 entries, etc.--- but with syllables instead of pitches.  For example:
 COMMENT(
 
@@ -1220,7 +1207,7 @@ default conversion will try to put the text you entered as note heads
 onto a staff, and this will fail.  This default must be overridden
 with a code(\type) keyword.  Printing syllables of text in a line is
 done by a context called code(Lyrics).  You can select this context
-with the code(\type) keyword.  Here is a simple example:
+with the code(\type) keyword.  Here is a simple example with output:
 COMMENT(
 
 )mudela(fragment,verbatim)(
@@ -1241,9 +1228,11 @@ passed along to TeX() verbatim, so if you are proficient with TeX()
 you can do various nifty things.  Just keep in mind that a syllable
 either starts with a letter (a character in the range `code(a)' to
 `code(z)' or `code(A)' to `code(Z)'), or it is a string enclosed
-quotes. It ends with either a number for the duration, or a space.
+double quotes. It ends with either a number for the duration, or a space.
 These tricks are demonstrated in the following example:
-COMMENT( urg
+COMMENT(
+
+urg
 \type Lyrics \lyrics { 'got8 m\textbf{e}8 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
 \type Lyrics \lyrics { 'got8 m{\bf e}4 on8. m$\cal_Y$16 knees,4 Le-8 lie!4.}
 )COMMENT(
@@ -1255,19 +1244,17 @@ COMMENT( urg
 )COMMENT(
 
 
-)
-COMMENT(Groen is de kleur van geluk.)
-COMMENT(Dat geldt zeker voor Bj"ork)
+) COMMENT(Groen is de kleur van geluk.  Dat geldt zeker voor Bj"ork)
 
 sect(Toplevel Mudela)
 
-Back in bind(Section)ref(sec:firsttune) we said we would defer
-discussion of toplevel constructions (e.g., code(\score)) to a later
-moment in time: and now we will look at these constructions.  In
-general, Mudela looks like set of nested `blocks'.  The general syntax
-for a block is code(\keyword { ... }).
+Back in bind(Section)ref(sec:firsttune) we said we would ignore
+toplevel constructions (e.g., code(\score)) until some later moment.
+Now we will look at these constructions.
 
-We will now discuss identifiers.  Generally you can define an
+
+Mudela allows you to name constructs of the language.  This is done by
+using an em(identifier). Generally you can define an
 identifier by entering code(identifierName = ... ) where there can be
 a variety of things on the ellipsis.
 COMMENT(
@@ -1299,23 +1286,15 @@ mudela(verbatim)(
     >
     \paper {
       linewidth = -1.0;
-      stem_length = 6.0*\interline;
     }
   }
 )
 
-
-Another interesting feature of this example are the assignments within
-the paper block.  Some blocks, such as code(\paper), have a scope of
-their own.  In the case of the code(\paper) block, these variables
-influence the characteristics of the output.  As is shown, you can
-tune quantities like the stemlength, and enter simple
-nop(expressions.)footnote(The purpose of the negative linewidth is to
-prevent the music from being justified.)  The identifiers that are
-meaningful are for the paper block is strongly implementation
-dependent, so they will not be listed here.  Moreover, since most of
-the values are predefined to sensible defaults, there usually is no
-need to tune these values.
+You can also see identifiers in action within the code(\paper) block:
+the value code(-1.0) is assigned to code(linewidth).  Within the
+code(\paper) block, identifiers are not used as abbreviation only:
+assigning to some identifiers can influence the output: in this case,
+the music line is printed at natural width.  
 
 Recall the properties of a context, that could be set with
 code(\property).  It is a very general mechanism to tune the output of
@@ -1346,15 +1325,6 @@ a real command like code(\clef) or code(\bar).  Real commands are
 hardcoded into the language and they have to be terminated by
 semicolons.
 
-You can also use identifiers to break up the heavy nesting that can
-occur in the code(\score) block.  Another useful application is
-parametrisation of the music: if you use identifiers in the
-code(\score) block, you can make variations of the music by simply
-redefining those identifiers.  One particular application of this is
-part extraction: by using identifiers and redefining them, one can
-print extracted parts and a full orchestral score from the same music
-definition.
-
 
 sect(Sound output)
 label(tutorial:sound)
@@ -1368,8 +1338,8 @@ for prooflistening your files: typing errors stand out when you
 listen, especially if they involve accidentals.
 
 The only information that you need to enter is the
-tempo. (Unfortunately, at this time, this the only thing that can be
-tuned.  The syntax for the tempo is code(\tempo )var(duration) =
+tempo (Unfortunately, at this time, this the only thing that can be
+tuned.).  The syntax for the tempo is code(\tempo )var(duration) =
 var(beatsperminute);), for example: COMMENT(
 
 
@@ -1397,7 +1367,7 @@ it()handles specific notation constructs
 This characterization almost automatically explains what the definition of a
 context should look like:
 itemize(
-it() It should have a name
+it() It should define a name
 it()It should be part of the ``notation output definition,'' i.e., the
   code(\paper) block
 it()
@@ -1412,17 +1382,19 @@ LilyPond can create notation for a large number of symbols.  This code
 is split up into basic building blocks. Each building block is called
 an em(engraver), and an engraver generally handles only one notation
 construct: the code(Clef_engraver) takes care of the clefs, the
-code(Time_signature_engraver) takes care of printing time signatures.
+code(Time_signature_engraver) takes care of printing time signatures,
+etc.
 
 A notation context is formed by a group of engravers.  A special class
 in LilyPond---the code(Engraver_group_engraver)---allows engravers to
-cooperate in a group.  A variant of this grouping object is the
-code(Line_group_engraver_group), which puts the output of all the
-engravers (clefs, bars, etc) into a compound object, so that these
-symbols can be treated as a whole.
+cooperate in a group, thus forming a notation context.  A variant of
+this grouping object is the code(Line_group_engraver_group), which
+puts the output of all the engravers (clefs, bars, etc) into a
+compound object, so that these symbols can be treated as a whole.
 
-This explains the following definition, which is a simplified Staff context:
-verb(
+The following definition shows a simplified Staff context: COMMENT(
+
+)verb(
 \translator
 {
         \type "Line_group_engraver_group";
@@ -1447,12 +1419,7 @@ A staff can contain a Voice context.  You can also preset properties
 of contexts: for instance, the clef that is printed upon starting a
 Staff, is the treble clef.
 
-You can also declare contexts, and reference them.  This is useful in
-combination with code(\remove "..."): code(\remove) does the opposite
-of code(\consists).
 
-The real context definitions are in the standard initialisation
-file file(engraver.ly).
 
 As a practical example, we will show how to typeset polymetric music,
 i.e., music where the meter can differ for each staff.  The solution
@@ -1467,6 +1434,11 @@ generating bar lines and time signatures.  So, we can have different
 timing for every staff, by moving the code(Timing_engraver) into the
  Staff context.
 
+You can also declare contexts, and reference them.  This is useful in
+combination with code(\remove "..."): code(\remove) does the opposite
+of code(\consists).
+
+
 mudela(verbatim)(
   \score {
    \notes <
@@ -1487,6 +1459,9 @@ mudela(verbatim)(
 }
 )
 
+The context definitions provided as a default are in the standard
+initialisation file file(engraver.ly).
+
 
 sect(Urtexts and context selection)
 label(tutorial:urtext)
@@ -1561,10 +1536,10 @@ sect(Transposing)
 label(tutorial:more-grammar)
 
 
-One of the things that you can do with music is
-em(transposing) it.  If you want to transpose a piece of music, then
-you should prefix the keyword code(\transpose) along with the pitch
-(relative to the central C) for the transposition.footnote(the
+One of the things that you can do with music is em(transposing) it.
+If you want to transpose a piece of music, then you should prefix it
+with the keyword code(\transpose) along with the pitch (relative to
+the central C, i.e., code(c')) for the transposition.footnote(the
 code(\type Staff) is to make sure that no separate staffs are created
 for the code(\scale) and code(\transpose cis' \scale) part.)
 
@@ -1615,127 +1590,36 @@ switch = \type Voice = voiceA \notes { s4 \translator Staff = staffB s4
 Don't try to switch staffs when you are in the middle of a slur or
 beam, though: the spanners won't switch along.
 
-sect(Hairy durations: triplets)
-
-OUTDATED
+sect(Tuplets)
 
-In the previous section we explained an operation that changes the
-pitches of music, transposition.  In this section we will explain an
-operation that modifies the duration of the notes that you enter.
-When notes are part of a triplet, then the real of duration of the
-notes are 2/3 part of what their shape indicates:
-mudela(fragment)(
-\times 2/3 {  c'4 c'4 c'4 }
-)
+The notes in a triplet take 2/3 of their notated duration.  The syntax
+for triplet in LilyPond reflects this.  To make a triplet, you enter
+COMMENT(
 
-To support this notion, Mudela allows you to modify the duration of a
-note by multiplication or division.  A code(c'4) note that would be in  a
-triplet is written as code(c'4*2/3).  If you sequence a few of these
-notes, you get a triplet.footnote(We added a normal staff in the example to
-show the difference.)
-mudela(fragment,verbatim)(
-<  \type Staff = staffA { \times 2/3 { c'8 c'8 c'8 } c'4}
-   \type Staff = staffB { c''8 c''8 c''4 } >)
-
-LilyPond knows that these notes are no normal eighth notes, but the
-reader doesn't yet.  To help the reader a beam or a bracket with a `3'
-should be printed.  The special beam command `code([2/3)' and the
-matching close beam `code(]1/1)' will take care of that, and
-they also abbreviate the code(*2/3) part.  If you want brackets in
-stead of beams, you can use `code(\[2/3])' and `code(\]1/1)'.
-mudela(fragment,verbatim)(
-< \type Staff = staffA {
-    \times 2/3 { [ c'8 c'8 c'8 }
-    \times 2/3 {  c'8 c'8 c'8 }
-  }
-  \type Staff = staffB { [c''8 c''8 c''8 c''8] }
->)
+)mudela(fragment,center)(
+       \type Voice \times 2/3 { c''4 c''4 c''4 }
+)COMMENT(
 
-Other tuplets  can be entered in the same way.
-mudela(fragment,verbatim)(
-< \type Staff = staffA {
-    \time 7/8;
-    \times 7/6 { [c'8 c'8 c'8 c'8 c'8 c'8] }
-  }
-  \type Staff = staffB {
-    \time 7/8;
-    [c''8 c''8 c''8 c''8 c''8 c''8 c''8] } >
-)
+)Since tuplet brackets are printed by the Voice context, a Voice
+context must exist before code(\times) is interpreted.  To ensure this,
+a context is instantiated explicitly with code(\type Voice).  You
+don't need this, if a Voice context is already instantiated, like in
+the following example:
+COMMENT(
 
-For your convenience, code([2/3) can be further abbreviated to code([/3), and
-you can abbreviate code(]1/1) on the closing beam marker to code(]/1).
+)mudela(fragment,center)(
+       c''4 \times 2/3 { c''4 c''4 c''4 } c''4
+)COMMENT(
 
-mudela(fragment,verbatim)(
-< \type Staff = staffA {
-    \times 2/3 { c'8 c'8 c'8 } c'4
-  }
-  \type Staff = staffB { [c''8 c''8] c''4 } >
 )
 
-
-bf(Important) the construct with code([/3) and
-code([/1) is a hack that sets a mode in the parser.  This means that
-verb(id = \notes { c8 c8 c8 }
-notATriplet =\notes { [2/3 \id ]1/1 })
-does not produce a triplet.  It will hopefully
-soon be replaced by a construction that mixes more elegantly with the
-grammar for Music.
-
-
-
-
-
-sect(Titling)
-label(tutorial:titling)
-
-A piece of sheet music isn't complete without proper opening and
-closing titles.  LilyPond does not have any real support for setting
-text: that is a job best left to TeX().  But you can pass messages to
-TeX() from the input file.   You can  write TeX() macros to handle
-these messages.
-To do this, you add a code(\header) block
-to your input file.  The format is quite simple,
-
-verb(
-\header{
-    "key" =  "value";
-    "key" =  "value";
-    "key" =  "value";
-    % etc.
-})
-
-When  the results of the music typesetting are output, the contents of
-code(\header) are also up into the TeX() file.  Tools like
-code(ly2dvi) can use this information to generate pretty titling for
-your input file. Consult the manual page of code(ly2dvi) for more
-details.
-
-
-The code(\header) block should be at toplevel in mudela, and
-preferably at the top of the file.  If you have an input file  with
-multiple code(\score) blocks, you should add a header to every score,
-describing the different sub parts of the music piece, eg.
-
-
-verb(\header {
-        "composer" = "Ludwig Van Bavaria";
-        "title" = "Symphonie Megalomane";
-    }
-    \score{
-       ... % some music
-       \header { movement = "Mit roher Kraft wild herausfahrend!"; }
-      \paper { }
-    }
-    \score{
-       ... % some more music
-       \header { movement = "Saut\'e comme un oeuf."; }
-      \paper { }
-    }
+Of course, you can also use different ratios, and use beamed notes or
+rests:
+mudela(fragment)(
+       \type Voice \times 4/5 { [c''8 c''16 c''16] r8 [g'8 g'8] }
 )
+If you make a tuplet of  beamed notes, where the beam is as wide as
+the bracket, the bracket is omitted.
 
-If you want you can also put the code(\header) block at the top of the
-input file; it will then be put into every output file automatically.
-This will make it clear what the file contains as soon as you open it.
-
-
+sect(Repeats)
 
index dfc89fc498886e10f85f28f3f2c8bd5ca22e1a3b..2747f7e0e154be71c3fbbcff2edbc959e8374d99 100644 (file)
@@ -36,7 +36,7 @@ and what you should do.  If you are  going  to  compile  and
 install  LilyPond very often you might want to check out the
 buildscripts/set-lily.sh script.  It sets  some  environment
 variables  and symlinks, which comes in handly when you have
-to compile LilyPond very often.
+to compile LilyPond more often.
 
 
 2: PREREQUISITES
@@ -59,15 +59,15 @@ o    Lots of disk space: LilyPond takes between 50  and  100
      run on Windows NT/95/98 as well.  See Section 11.
 
 
-o    GNU C++ version 2.7 or newer (2.8  and  egcs  are  also
+o    GNU C++ version 2.8 or newer (egcs-1.1 or newer is also
      fine).
 
 o    Python  1.5  (Strictly  speaking,  you  shouldn't  need
      Python for compiling and installing, but you'll need it
      to regenerate the font tables, e.g.).
 
-o    GUILE  1.3  (no,  GUILE  1.2  won't  work),   check out
-     http://www.gnu.org/programs/guile.html
+o    GUILE  1.3  (no,  GUILE  1.2  won't  work),  check  out
+     http://www.gnu.org/programs/guile.html.
 
 
 3: RUNNING
@@ -86,7 +86,7 @@ o    A   PostScript   printer   and/or   viewer   (such   as
 
      installed.
 
-o    GUILE 1.3 (no,  GUILE  1.2  won't  work),    check  out
+o    GUILE  1.3  (no,  GUILE  1.2  won't  work),  check  out
      http://www.gnu.org/programs/guile.html
 
 For  running  LilyPond successfully you have to help TeX and
diff --git a/NEWS b/NEWS
index 5cccae0f1815f2efbd94d57ac7db1b936ac59320..ff5f32efab4127f092c29e9dd1a487ada6a46522 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,10 +1,24 @@
+pl 14
+
+pl 13.hwn1
+       - tutorial fixes.
+       - junked find-quarts
+       - junked various plet goryness.
+       - preps for <c e> ~ <c e> syntax
+       - bib fixes 
+
+pl 12.jcn3
+       - bf's: standchen
+       - added repeat, chord stuff to website
+       - bf: dashed slur
+       - hacks for barlines, dynamics
+
 pl 12.jcn2
        - bf: package-diff
        - new chord syntax, again: TONIC [DURATION] ['-' MODIFIERS/ADDITIONS]
        - shorthand prefix for note-mode: '@', no shorthand for notes in chord
            mode...
  
-pl 12.jcn1
 pl 11.jcn6
        - bf: ly2dvi: better guess LILYPONDPREFIX: <bin>../share/lilypond
        - chord-table; urg bugs:
@@ -18,6 +32,7 @@ pl 11.jcn5
 
 pl 11.jcn4
 
+**********
 pl 13
        - mutopia stuff (thanks, Peter)
        - bugfix : \maininput
diff --git a/TODO b/TODO
index 03915a7737ce91f65eddf674fda83867b522de56..47164946a313bcf77288eb6e6ecbe1b7b57379e5 100644 (file)
--- a/TODO
+++ b/TODO
@@ -7,6 +7,10 @@ Most of the items are marked in the code as well, with full explanation.
 grep for TODO and ugh/ugr/urg
 
 BUGS:
+       * c4 \! \> c4
+
+       * resurrect tremolo beams.
+
        * gallina barlines.
 
        * fix height of / collisions with lyrics (chords), 
@@ -635,7 +639,7 @@ IDEAS
        * versioning stuff (cvt mudela, mudela, etc.)
 
        * Klavarskribo?
-
+5
        * lyrics in chords still fuck up.
 
        * Use hooks/dependency graphs for properties
diff --git a/VERSION b/VERSION
index bb973035121d4553d1c1a9e3241d801cae373911..d2263c50d76144e13ddf31d284963a2e150abcd7 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=1
-PATCH_LEVEL=13
-MY_PATCH_LEVEL=uu1
+PATCH_LEVEL=14
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index 14be2746a9be339a443c7459ad5edf8c41abe9e1..8e150650c8f7ef26875a753004a9d62caa2a1341 100644 (file)
@@ -14,8 +14,8 @@ Description: The GNU Project music typesetter.
  beautiful sheet music from a music definition file.  It can also play
  mechanical performances to a MIDI file.  Features include multiple
  staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
- beams, slurs, triplets, formatting scores, part extraction.  It includes
- a nice font of musical symbols.
+ beams, slurs, triplets, named chords, transposing, formatting scores, 
part extraction.  It includes a nice font of musical symbols.
  .
   URLs: http://www.cs.uu.nl/~hanwen/lilypond/
         http://www.xs4all.nl/~jantien/lilypond/
index d3d0c5294c1348520872989b62a1558d9b0d396b..035884698498e2de3d9e6a9f3a40bd010e547e8b 100644 (file)
@@ -1,6 +1,6 @@
 % Toplevel initialisation file. 
        
-\version "1.0.7";
+\version "1.0.12";
 
 
 \include "declarations.ly"
index 7348a4f6c920a4901276f316c7a678d00ec6ef57..7140c7ce03cc7ed3e0ccc4639242a9bcd60ef044 100644 (file)
@@ -12,6 +12,7 @@ name                  value   effect                  shorthand
 ydirection             -1      force stem down         \stemdown
 ydirection             0       stem direction free     \stemboth
 ydirection             1       force stem up           \stemup
+
 pletvisibility         0       show nothing
 pletvisibility         1       show number
 pletvisibility         2       show (number and bracket)-if-no-beam
@@ -78,28 +79,22 @@ instrument          ascii   midi instrument table lookup
 % i guess they're meant as some form of doco
 % that's what i use them for...
 stemup = {
-       \skip 1*0;
        % Stupid hack to make < { \stemup } > work
        \property Voice.ydirection = \up 
        }
 stemboth= {
-       \skip 1*0;
        \property Voice.ydirection = \center
 }
 stemdown = {   
-       \skip 1*0;
        \property Voice.ydirection = \down
 }
 slurup = {
-       \skip 1*0;
        \property Voice.slurydirection = \up 
        }
 slurboth= {
-       \skip 1*0;
        \property Voice.slurydirection = \center
 }
 slurdown = {   
-       \skip 1*0;
        \property Voice.slurydirection = \down
 }
 
@@ -112,59 +107,50 @@ onevoice = {
 
 voiceone = {   
        \type Voice = one 
-       \skip 1*0;
        \stemup
 }
 
 voicetwo = {   
        \type Voice = two
-       \skip 1*0;
        \stemdown
 }
 
 voicethree = {         
        \type Voice = three
-       \skip 1*0;
        \stemup
 
 }
 
 voicefour = {  
        \type Voice = four
-       \skip 1*0;
        \stemdown
        \shifton
 }
 
 onestaff = {   
        \translator Staff=one
-       \skip 1*0;
 }
 
 staffone = {   
        \translator Staff=one
-       \skip 1*0;
        \property Staff.ydirection = \center
        \property Staff.hshift = 0
 }
 
 stafftwo = {   
        \translator Staff=two
-       \skip 1*0;
        \property Staff.ydirection = \center
        \property Staff.hshift = 0
 }
 
 staffthree = {         
        \translator Staff=three
-       \skip 1*0;
        \property Staff.ydirection = \center
        \property Staff.hshift = 0
 }
 
 stafffour = {  
        \translator Staff=four
-       \skip 1*0;
        \property Staff.ydirection = \center
        \property Staff.hshift = 0
 }
index 27d3b1bd3391269461be197a55b763fff5e32133..cb057c2c796b029175cbd5db137d12713cfc37aa 100644 (file)
@@ -4,8 +4,8 @@ depth = ..
 
 SUBDIRS=test bugs
 
-examples=example-3  praeludium-fuga-E twinkle star-spangled-banner
-flexamples=example-1 example-2 
+examples=praeludium-fuga-E star-spangled-banner twinkle-pop
+flexamples=
 
 LOCALSTEPMAKE_TEMPLATES=mutopia
 
index 39f71e418c456f7c6e7ca1a9a8782eea897269f0..117e9e67862284b064b0dd14a344ac3f71493e90 100644 (file)
@@ -1,7 +1,7 @@
 # input/test/Makefile
 
 depth = ../..
-examples=font20 hara-kiri grace mark denneboom sleur
+examples=font20 hara-kiri grace mark denneboom sleur chords chord-table repeat
 LOCALSTEPMAKE_TEMPLATES=mutopia
 
 include $(depth)/make/stepmake.make 
index b18d69be773b734cea3abbb73af166f6b0517532..2676202973ecb4fc43da376b1df154531e49d0f5 100644 (file)
@@ -1,6 +1,6 @@
 \header{
 filename =      "twinkle-pop.ly";
-title =         "Ah, vous dirais-je, maman ";
+%title =        "Ah, vous dirais-je, maman ";
 description =   "twinkle twinkle in pop-song-settings";
 composer =      "traditional";
 enteredby =     "HWN, chords by Johan Vromans";
@@ -12,31 +12,30 @@ Tested Features             lyrics and chords
 %}
 
 \version "1.0.12";
-  
+
 melodie = \notes\relative c'' {
         \clef "violin";
-          \time 2/4 ;
-  
+        \time 2/4 ;
+
         c4 c  | g' g | a a | g2  |
         f4 f  | e e  | d d | c2  |
         g'4 g | f f  | e e | d d |
         g  g  | f f  | e e | d d |
-      % copy 1-8
+       % copy 1-8
         c4 c  | g' g | a a | g2  |
         f4 f  | e e  | d d | c2 \bar "|.";
 }
 
 acc = \chords {
-      % why don't \skip, s4 work?
+       % why don't \skip, s4 work?
         c2 c f c
         f c g-7 c
-      g f c  g-7 % urg, bug!
+       g f c  g-7 % urg, bug!
         g f c  g-7
-      % copy 1-8
+       % copy 1-8
         c2 c f c
         f c g-7 c
-  }
-  
+}
 
 text = \lyrics{ 
         \property Lyrics . textstyle =  "italic"
@@ -52,24 +51,25 @@ text = \lyrics{
 
 \score {
         <  
-         \type ChordNames \acc
-         \type Staff=melody \melodie
+          \type ChordNames \acc
+          \type Staff=melody \melodie
            \type Lyrics \text
-          >
-      \header{
-              title = "Ah, vous dirais-je, maman ";
-      }
-          \paper {  }
-  }
+        >
+       \header{
+               title = "Ah, vous dirais-je, maman ";
+       }
+        \paper {  }
+}
 
 \score {
         <  
-         \chords \type ChordNames \transpose bes\acc
-         \notes \type Staff=melody \transpose bes\melodie
+          \chords \type ChordNames \transpose bes\acc
+          \notes \type Staff=melody \transpose bes\melodie
            \lyrics \type Lyrics \text
         >
-      \header{
-              piece = "clarinet in B\\textflat";
-      }
+       \header{
+               piece = "clarinet in B\\textflat";
+       }
         \paper {  }
 }
+
index 273d9afde3a0a8153b74bd5953ebb90c751527e6..133f91ae6423607948bcd85ff75da6376dac9507 100644 (file)
@@ -61,20 +61,6 @@ Chord_name_engraver::do_process_requests ()
 
    */
 
-  /*
-   Banter style chord names (almost).
-   TODO:
-     - don't print inclusive scale (i.e. no "9" in c 9/11)
-     - handle c7 / cmaj7
-     - use #,b iso -es -is on tonica
-     - switch on property, add american (?) chordNameStyle
-
-  Scalar chordNameStyle = get_property ("chordNameStyle");
-  if (chordNameStyle == "Banner")
-     chord = pitches_to_banner (pitch_arr_.size ());
-
-   */
-
   Scalar style = get_property ("textstyle");
   Scalar alignment = get_property ("textalignment");
   Text_def* text_p = new Text_def;
@@ -100,7 +86,7 @@ Chord_name_engraver::do_process_requests ()
     scale[i].transpose (tonic);
 
   //urg, should do translation in scheme.
-  char const *acc[] = {"\\textflat\\textflat", "\\textflat", "", "\\textsharp" , "\\textsharp\\textsharp"};
+  char const *acc[] = {"\\textflat\\textflat ", "\\textflat ", "", "\\textsharp " , "\\textsharp\\textsharp "};
   String tonic_str = tonic.str ();
   tonic_str = tonic_str.left_str (1).upper_str ()
     + acc[tonic.accidental_i_ + 2];
index 1ab0353bc558ab32d3c74da961a4e5e34e09e678..0ce2b67d6cdc5b95b81ed30dbe4e9da739f87fa7 100644 (file)
@@ -50,6 +50,9 @@ Bar_req::do_equal_b (Request*r) const
   return b && type_str_ == b->type_str_;
 }
 
+void
+Command_tie_req::do_print () const
+{}
 
 
 
index 5133cb57521ce3ac51077178a4f93bcfa86395b5..68953bc69bd47375dfb626928904e13e99462261 100644 (file)
@@ -15,7 +15,7 @@ Compressed_music::Compressed_music (int n, int d,Music *mp)
 {
   num_i_ = n;
   den_i_ = d;
-  element_p_->compress (Moment (num_i_,den_i_));
+  element_l ()->compress (Moment (num_i_,den_i_));
 }
 
 
diff --git a/lily/ctie-engraver.cc b/lily/ctie-engraver.cc
new file mode 100644 (file)
index 0000000..25082cd
--- /dev/null
@@ -0,0 +1,101 @@
+/*   
+  ctie-engraver.cc --  implement Command_tie_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#include "ctie-engraver.hh"
+#include "command-request.hh"
+#include "note-head.hh"
+#include "musical-request.hh"
+
+Command_tie_engraver::Command_tie_engraver()
+{
+  req_l_ = 0;
+}
+
+
+bool
+Command_tie_engraver::do_try_music (Music *m)
+{
+  if (Command_tie_req * c = dynamic_cast<Command_tie_req*> (m))
+    {
+      req_l_ = c;
+      return true;
+    }
+  return false;
+}
+
+void
+Command_tie_engraver::acknowledge_element (Score_element_info i)
+{
+  if (Note_head *nh = dynamic_cast<Note_head *> (i.elem_l_))
+    {
+      Note_req * m = dynamic_cast<Note_req* > (i.req_l_);
+      now_heads_.push (CHead_melodic_tuple (nh, m, now_moment()+ m->duration ()));
+    }
+}
+
+void
+Command_tie_engraver::do_process_requests ()
+{
+  
+}
+
+void
+Command_tie_engraver::processed_acknowledged ()
+{
+}
+
+void
+Command_tie_engraver::do_pre_move_processing ()
+{
+  for (int i=0; i < now_heads_.size (); i++)
+    {
+      past_notes_pq_.insert (now_heads_[i]);
+    }
+}
+
+void
+Command_tie_engraver::do_post_move_processing ()
+{
+  Moment now = now_moment ();
+  while (past_notes_pq_.front ().end_ < now)
+    past_notes_pq_.delmin ();
+}
+
+
+
+ADD_THIS_TRANSLATOR(Command_tie_engraver);
+
+
+CHead_melodic_tuple::CHead_melodic_tuple ()
+{
+  head_l_ =0;
+  mel_l_ =0;
+  end_ = 0;
+}
+
+CHead_melodic_tuple::CHead_melodic_tuple (Note_head *h, Melodic_req*m, Moment mom)
+{
+  head_l_ = h;
+  mel_l_ = m;
+  end_ = mom;
+}
+
+int
+CHead_melodic_tuple::pitch_compare (CHead_melodic_tuple const&h1,
+                            CHead_melodic_tuple const &h2)
+{
+  return Melodic_req::compare (*h1.mel_l_, *h2.mel_l_);
+}
+
+int
+CHead_melodic_tuple::time_compare (CHead_melodic_tuple const&h1,
+                            CHead_melodic_tuple const &h2)
+{
+  return (h1.end_ - h2.end_ ).sign ();
+}
index c03ff6eb543d7bd5f78b83446f35e2005c212a48..527ffbce016b5ab7d30b0ae03d906865de02e566 100644 (file)
@@ -47,6 +47,11 @@ public:
   REQUESTMETHODS(Command_script_req);
 };
 
+class Command_tie_req : public Command_req {
+public:
+  REQUESTMETHODS(Command_tie_req);
+};
+
 /** Baseclass for time_signature/partial req. It has to be handled by
   Staff_{walker,column} baseclass.  */
 class Timing_req  : public Command_req  {
diff --git a/lily/include/ctie-engraver.hh b/lily/include/ctie-engraver.hh
new file mode 100644 (file)
index 0000000..238db2f
--- /dev/null
@@ -0,0 +1,51 @@
+/*   
+  ctie-engraver.hh -- declare Command_tie_engraver
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef CTIE_ENGRAVER_HH
+#define CTIE_ENGRAVER_HH
+
+#include "pqueue.hh"
+#include "engraver.hh"
+
+struct CHead_melodic_tuple {
+  Melodic_req *mel_l_ ;
+  Note_head *head_l_;
+  Moment end_;
+  CHead_melodic_tuple ();
+  CHead_melodic_tuple (Note_head*, Melodic_req*, Moment);
+  static int pitch_compare (CHead_melodic_tuple const &, CHead_melodic_tuple const &);
+  static int time_compare (CHead_melodic_tuple const &, CHead_melodic_tuple const &);  
+};
+
+inline int compare (CHead_melodic_tuple const &a, CHead_melodic_tuple const &b)
+{
+  return CHead_melodic_tuple::time_compare (a,b);
+}
+
+
+class Command_tie_engraver : public Engraver
+{
+  PQueue<CHead_melodic_tuple> past_notes_pq_;
+  Command_tie_req *req_l_;
+  Array<CHead_melodic_tuple> now_heads_;
+protected:
+  virtual void do_post_move_processing ();
+  virtual void do_pre_move_processing ();
+  virtual void acknowledge_element (Score_element_info);
+  virtual bool do_try_music (Music*);
+  virtual void do_process_requests ();
+  virtual void processed_acknowledged ();
+public:
+  VIRTUAL_COPY_CONS(Translator);
+  Command_tie_engraver();
+  
+};
+
+#endif /* CTIE_ENGRAVER_HH */
+
index 3bd510b23118e3580a581604dee98a8c47c82d7a..7ae5f935f785c49e426d4af371c0a97d9e05a2a0 100644 (file)
@@ -57,6 +57,8 @@ struct Collision;
 struct Collision_engraver;
 struct Command_req;
 struct Command_script_req;
+struct Command_tie_engraver;
+struct Command_tie_req;
 struct Compressed_music;
 struct Compressed_music_iterator;
 struct Cresc_req;
index 17bd2480b436777f76f8573e7ec2a86c107cfe75..0b7340bb7541e5ab7a67d7387aac678103b2bf29 100644 (file)
@@ -23,7 +23,8 @@ extern Sources* source_global_l;
 extern bool no_paper_global_b;
 extern bool safe_global_b;
 extern bool no_timestamps_global_b;
-extern bool find_quarts_global_b;
+extern bool find_old_relative_b;
+
 extern int exit_status_i_;
 extern bool experimental_features_global_b;
 extern char const* output_global_ch;
index 7e5e310adca9f1f3007f2fad77d9886325057592..7cbbffee49f780c979d5f96f9e6bb2fe2f362bf4 100644 (file)
@@ -58,6 +58,7 @@ public:
   virtual Moment duration () const;
 };
 
+
 /**
   The request is a collection of Requests. A note that you enter in mudela is 
   one Request_chord, one syllable of lyrics is one Request_chord
@@ -70,6 +71,8 @@ public:
   virtual Musical_pitch to_relative_octave (Musical_pitch);
   Request_chord();
 };
+
+
 /**
   Sequential_music is a list of music-elements which are placed behind each other.
  */
index 14c99c6726e1eb7028096a494ec76bc71a422742..26fea0ec7bec649bdb8e482bb6dc31f072194df0 100644 (file)
   */
 class Music_wrapper : public Music
 {
-public:
   Music * element_p_;
+public:
   Music_wrapper (Music*);
+  Music * element_l () const;
   virtual void transpose (Musical_pitch);
   virtual void do_print () const;
   
index 1c40332452c3b068f17f886d32e85593b7502665..5dcb4ef38f29c3882b7212fd5f59e3093dffcb56 100644 (file)
@@ -34,7 +34,6 @@ public:
   int default_abbrev_i_;
   Duration default_duration_;
   Extender_req* extender_req;
-  Plet plet_;
   Scope *default_header_p_;
     
   bool first_b_;
@@ -46,7 +45,6 @@ public:
   bool init_parse_b_;
   My_lily_lexer * lexer_p_;
  
-  Moment plet_mom();
   Input here_input() const;
   void remember_spot();
   Input pop_spot();
diff --git a/lily/include/request-chord.hh b/lily/include/request-chord.hh
new file mode 100644 (file)
index 0000000..8a736ca
--- /dev/null
@@ -0,0 +1,15 @@
+/*   
+  request-chord.hh -- declare Request_chord
+  
+  source file of the GNU LilyPond music typesetter
+  
+  (c) 1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  
+ */
+
+#ifndef REQUEST_CHORD_HH
+#define REQUEST_CHORD_HH
+
+
+#endif /* REQUEST_CHORD_HH */
+
index a56f86aae95f00dab205662a5e93d1f95f48c64e..dc409d288a4b5981a5ba2468a644e105f3c30618 100644 (file)
@@ -92,8 +92,6 @@ RESTNAME      [rs]
 NOTECOMMAND    \\{A}+
 LYRICS         ({AA}|{TEX})[^0-9 \t\n\f]*
 ESCAPED                [nt\\'"]
-PLET           \\\[
-TELP           \\\]
 EXTENDER       [_][_]
 
 %%
@@ -292,9 +290,6 @@ EXTENDER    [_][_]
        {NOTECOMMAND}   {
                return scan_escaped_word (YYText () + 1);
        }
-       {NOTECOMMAND}   {
-               return scan_escaped_word (YYText () + 1);
-       }
        {UNSIGNED}              {
                yylval.i = String_convert::dec2_i (String (YYText ()));
                return UNSIGNED;
@@ -344,14 +339,6 @@ EXTENDER   [_][_]
        return c;
 }
 
-<lyrics,notes>{PLET}   {
-       return yylval.i = PLET;
-}
-
-<lyrics,notes>{TELP}   {
-       return yylval.i = TELP;
-}
-
 <INITIAL,notes>.       {
        return yylval.c = YYText ()[0];
 }
index 2477c9870f599aaec980d7a47cd64be3adf782ed..dfa03893142b87cf3a5be1cd9c47a027f76fd384 100644 (file)
 bool version_ignore_global_b = false;
 bool no_paper_global_b = false;
 bool no_timestamps_global_b = false;
-bool find_quarts_global_b = false;
+bool find_old_relative_b = false;
 
 char const* output_global_ch = "tex";
-// temporarily default to ps, because tex is even more broken
-//char const* output_global_ch = "ps";
 
 String default_outname_base_global =  "lelie";
 int default_count_global;
@@ -65,7 +63,7 @@ Long_option_init theopts[] = {
   {0, "no-paper", 'M'},
   {0, "dependencies", 'd'},
   {0, "no-timestamps", 'T'},
-  {0, "find-fourths", 'Q'},
+  {0, "find-old-relative", 'Q'},
   {0, "ignore-version", 'V'},
   {1, "output-format", 'f'},
   {0, "safe", 's'},
@@ -109,7 +107,7 @@ usage ()
     "  -o, --output=FILE      set FILE as default output base\n"
     );
   cout  << _ (
-    "  -Q, --find-fourths     show all intervals greater than a fourth\n"
+    "  -Q, --find-old-relative show all changes in relative syntax\n"
     );
   cout << _ (
     "  -s, --safe             inhibit file output naming and exporting TeX  macros\n");
@@ -270,7 +268,7 @@ main_prog (int argc, char **argv)
          output_global_ch = oparser.optional_argument_ch_C_;
          break;
        case 'Q':
-         find_quarts_global_b = true;
+         find_old_relative_b= true;
          break;
        case 'I':
          global_path.push (oparser.optional_argument_ch_C_);
index d6fe224a9cef7471389e5e798f8b8a454e00fc7a..3d155a90c67fc132ac966aacff0e8a62d9efff81 100644 (file)
@@ -6,16 +6,11 @@
   (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
-
-
 #include "music-list.hh"
 #include "musical-pitch.hh"
 #include "request.hh"
 #include "musical-request.hh"
-
-
-
-
+#include "main.hh"
 
 Moment
 Simultaneous_music::duration () const
@@ -85,8 +80,27 @@ Music_list::do_relative_octave (Musical_pitch last, bool ret_first)
       if (!count ++ )
        retval = last;
     }
+
+  // hmmm
+#if 0  
+  if (!ret_first && find_old_relative_b)
+    {
+      PCursor<Music*> b (bottom ());
+
+      if (b.ok ())
+       {
+         String w = _("\\relative mode changed here, old value: ");
+         w +=  last.str ();
+
+         b->warning (w);
+         retval = last;
+       }
+    }
+  
+#endif
   if (!ret_first)
     retval = last;
+  
   return retval;
 }
 
index e282bded8c60b7c1c43635810cfff418e9ee2b31..33fd876c38f8c7652b08ab25c724268918c877da 100644 (file)
@@ -27,7 +27,7 @@ Music_wrapper_iterator::do_print () const
 void
 Music_wrapper_iterator::construct_children ()
 {
-  child_iter_p_ = get_iterator_p (music_wrapper_l ()->element_p_);  
+  child_iter_p_ = get_iterator_p (music_wrapper_l ()->element_l ());  
 }
 
 Music_wrapper_iterator::~Music_wrapper_iterator ()
index 81ee24960554fda18ea8b0f8b48833dabf214570..57ab04b7414f43bcf73f4cc363e8cd58342d34ce 100644 (file)
@@ -56,3 +56,9 @@ Music_wrapper::to_relative_octave (Musical_pitch p)
 {
   return element_p_->to_relative_octave (p);
 }
+
+Music*
+Music_wrapper::element_l () const
+{
+  return element_p_;
+}
index f3dde21fcef4402e7c93cb963f8bf9f34e337609..13a4e5de0877436c93559a473e17353c57c99c6f 100644 (file)
@@ -96,9 +96,23 @@ Musical_pitch::str () const
   if (accidental_i_)
     s += String (accname[accidental_i_ + 2]);
 
+  if (octave_i_ > 0)
+    {
+      int o = octave_i_ + 1;
+      while (o--)
+       s += to_str ('\'');
+    }
+  else if (octave_i_ <0)
+    {
+      int o = (-octave_i_) - 1;
+      while (o--)
+       s += to_str (',');
+    }
+#if 0  
   if (octave_i_)
     s  += String ((octave_i_> 0)? "^": "_") + to_str (octave_i_);
-
+#endif
+  
   return s;
 }
 
@@ -126,25 +140,7 @@ Musical_pitch::to_relative_octave (Musical_pitch p)
   else
     n = down_pitch;
   
-  if (find_quarts_global_b)
-    {
-      int d = this->semitone_pitch () - n.semitone_pitch ();
-      if (d)
-       {
-         int i = 1 + (abs (d) - 1) / 12;
-         String quote_str = d < 0 ? to_str (',', i) : to_str ('\'', i);
-         Musical_pitch w = *this;
-         w.octave_i_ = 0;
-         String name_str = w.str ();
-         name_str + quote_str;
-         w.warning (_f ("Interval greater than quart, relative: %s", 
-           name_str + quote_str));
-         // don't actually do any relative stuff
-         n = *this;
-       }
-    }
-  else
-    n.octave_i_ += oct_mod;
+  n.octave_i_ += oct_mod;
 
   *this = n;
   return *this;
index 75ff14f5c7df4930f5f50e54c383adc2c85b76a8..7d43cdd8d870acf176b0fa997c4c657256b7d47a 100644 (file)
@@ -105,12 +105,6 @@ void
 My_lily_parser::set_last_duration (Duration const *d)
 {
   default_duration_ = *d;
-
-  /* 
-     forget plet part,
-     but keep sticky plet factor within plet brackets
-    */  
-  default_duration_.plet_ = plet_;
 }
 
 
@@ -293,13 +287,6 @@ My_lily_parser::get_note_element (Note_req *rq, Duration * duration_p)
 
   v->add_music (rq);
 
-  // too bad parser reads (default) duration via member access,
-  // this hack will do for now..
-  if (abbrev_beam_type_i_)
-    {
-      assert (!duration_p->plet_b ());
-      duration_p->set_plet (1, 2);
-    }
   rq->duration_ = *duration_p;
   rq->set_spot (here_input ());
   delete duration_p ;
@@ -319,13 +306,7 @@ My_lily_parser::get_parens_request (int t)
     case '~':
       reqs.push (new Tie_req);
       break;
-    case BEAMPLET:
-    case MAEBTELP:
-      {
-       Plet_req* p = new Plet_req;
-       p->plet_i_ = plet_.type_i_;
-       reqs.push (p);
-      }
+
       /* fall through */
     case '[':
     case ']':
@@ -351,14 +332,6 @@ My_lily_parser::get_parens_request (int t)
       reqs.push (new Span_dynamic_req);
       break;
 
-    case PLET:  
-    case TELP:
-      {
-       Plet_req* p = new Plet_req;
-       p->plet_i_ = plet_.type_i_;
-       reqs.push (p);
-      }
-      break;
     case ')':
     case '(':
       {
@@ -372,19 +345,13 @@ My_lily_parser::get_parens_request (int t)
 
   switch (t)
     {
-    case BEAMPLET:
-      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::START;
-      /* fall through */
     case '<':
     case '>':
     case '(':
     case '[':
-    case PLET:
-      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::START;
+      dynamic_cast<Span_req*> (reqs[0])->spantype = Span_req::START;
       break;
-    case MAEBTELP:
-      dynamic_cast<Span_req*> (reqs.top ())->spantype = Span_req::STOP;
-      /* fall through */
+      
     case '!':
     case ')':
     case ']':
index 6ebde09668a6331e1056c17e1236c75350c571c5..a0c4fbdba75e84966e20a246e0b17fb6e75de769 100644 (file)
 #include "repeated-music.hh"
 
 // mmm
-Mudela_version oldest_version ("1.0.7");
+Mudela_version oldest_version ("1.0.10");
 Mudela_version version ("1.0.12");
 
 
 // needed for bison.simple's malloc() and free()
 #include <malloc.h>
 
-int const GUESS_PLET = 5;
-int guess_plet_a[GUESS_PLET] =
-{ 
-  1,
-  3,
-  2,
-  3,
-  4
-};
-
 struct Assignment {
        String *name_p_;
        Identifier *id_p_;
@@ -136,7 +126,6 @@ Paper_def* current_paper = 0;
     char c;
     const char *consstr;
     int i;
-    int pair[2];
     int ii[10];
 }
 %{
@@ -162,7 +151,6 @@ yylex (YYSTYPE *s,  void * v_l)
 %token ACCEPTS
 %token ALTERNATIVE
 %token BAR
-%token BEAMPLET
 %token CADENZA
 %token CHORDMODIFIERS
 %token CHORDS
@@ -170,7 +158,6 @@ yylex (YYSTYPE *s,  void * v_l)
 %token CM_T
 %token CONSISTS
 %token DURATION
-%token END
 %token EXTENDER
 %token FONT
 %token GROUPING
@@ -179,21 +166,17 @@ yylex (YYSTYPE *s,  void * v_l)
 %token KEY
 %token KEYSIGNATURE
 %token LYRICS
-%token MAEBTELP
 %token MARK
 %token MEASURES
 %token MIDI
 %token MM_T
-%token MUSIC
 %token MUSICAL_PITCH
 %token NAME
 %token NOTENAMES
 %token NOTES
-%token OCTAVE
 %token PAPER
 %token PARTIAL
 %token PENALTY
-%token PLET
 %token PROPERTY
 %token PT_T
 %token RELATIVE
@@ -208,7 +191,6 @@ yylex (YYSTYPE *s,  void * v_l)
 %token SPANDYNAMIC
 %token SYMBOLTABLES
 %token TABLE
-%token TELP
 %token TEMPO
 %token TIME_T
 %token TIMES
@@ -239,7 +221,6 @@ yylex (YYSTYPE *s,  void * v_l)
 %token <id>    SCORE_IDENTIFIER
 %token <id>    MIDI_IDENTIFIER
 %token <id>    PAPER_IDENTIFIER
-%token <id>    REQUEST_IDENTIFIER
 %token <real>  REAL
 %token <string>        DURATION RESTNAME
 %token <string>        STRING
@@ -251,9 +232,8 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <box>    box
 %type <i>      open_request_parens close_request_parens
 %type <i>      open_abbrev_parens
-%type <i>      open_plet_parens close_plet_parens
 %type <i>      sub_quotes sup_quotes
-%type <music>  simple_element  request_chord command_element Simple_music  Composite_music
+%type <music>  simple_element  request_chord command_element Simple_music  Composite_music 
 %type <music>  Alternative_music Repeated_music
 %type <i>      abbrev_type
 %type <i>      int unsigned
@@ -284,7 +264,6 @@ yylex (YYSTYPE *s,  void * v_l)
 %type <real>   real_expression real dimension
 %type <request> abbrev_command_req
 %type <request>        post_request structured_post_request
-%type <pair>   plet_fraction
 %type <request> command_req verbose_command_req
 %type <request>        script_req  dynamic_req extender_req
 %type <string> string
@@ -795,6 +774,9 @@ Simple_music:
        | MUSIC_IDENTIFIER { $$ = $1->access_content_Music (true); }
        | property_def
        | translator_change
+       | Simple_music '*' unsigned '/' unsigned {  }
+       | Simple_music '*' unsigned              {  }
+
        ;
 
 
@@ -815,7 +797,7 @@ Composite_music:
                THIS->remember_spot ();
        }
        /* CONTINUED */ 
-               int '/' int Music       
+               unsigned '/' unsigned Music     
 
        {
                $$ = new Compressed_music ($3, $5, $6);
@@ -924,7 +906,10 @@ abbrev_command_req:
        | COMMAND_IDENTIFIER    {
                $$ = $1->access_content_Request (true);
        }
-/*
+/* TODO */
+/*     | '~'   {
+               $$ = new Command_tie_req;
+       }
        | '['           {
                $$ = new Beam_req;
                $$->spantype = Span_req::START;
@@ -1170,39 +1155,7 @@ dynamic_req:
        }
        ;
 
-plet_fraction:
-       unsigned '/' unsigned {
-               $$[0] = $1;
-               $$[1] = $3;
-       }
-       |
-       '/' unsigned {
-               int num = $2 >? 1;
-               $$[0] = guess_plet_a[(num <? GUESS_PLET) - 1];
-               $$[1] = num;
-       }
-       ;
 
-close_plet_parens:
-       ']' plet_fraction {
-               $$ = MAEBTELP;
-               THIS->plet_.type_i_ = $2[1];
-               THIS->plet_.iso_i_ = $2[0];
-               THIS->default_duration_.plet_ = THIS->plet_;
-       }
-       | TELP {
-               $$ = TELP;
-               THIS->plet_.type_i_ = 1;
-               THIS->plet_.iso_i_ = 1;
-               THIS->default_duration_.plet_ = THIS->plet_;
-       }
-       | TELP plet_fraction {
-               $$ = TELP;
-               THIS->plet_.type_i_ = $2[1];
-               THIS->plet_.iso_i_ = $2[0];
-               THIS->default_duration_.plet_ = THIS->plet_;
-       }
-       ;
 
 close_request_parens:
        '~'     {
@@ -1220,7 +1173,6 @@ close_request_parens:
        | E_BIGGER {
                $$ = '>';
        }
-       | close_plet_parens
        ;
 
 open_abbrev_parens:
@@ -1235,20 +1187,6 @@ open_abbrev_parens:
        }
        ;
 
-open_plet_parens:
-       '[' plet_fraction {
-               $$ = BEAMPLET;
-               THIS->plet_.type_i_ = $2[1];
-               THIS->plet_.iso_i_ = $2[0];
-               THIS->default_duration_.plet_ = THIS->plet_;
-       }
-       | PLET plet_fraction {
-               $$ = PLET;
-               THIS->plet_.type_i_ = $2[1];
-               THIS->plet_.iso_i_ = $2[0];
-               THIS->default_duration_.plet_ = THIS->plet_;
-       }
-       ;
 
 open_request_parens:
        E_EXCLAMATION   {
@@ -1261,7 +1199,6 @@ open_request_parens:
                $$='[';
        }
        | open_abbrev_parens
-       | open_plet_parens
        ;
 
 
@@ -1383,6 +1320,12 @@ duration_length:
        steno_duration {
                $$ = $1;
        }
+       | duration_length '*' unsigned {
+               $$->plet_.iso_i_ *= $3;
+       }
+       | duration_length '/' unsigned {
+               $$->plet_.type_i_ *= $3;
+       }
        ;
 
 dots:
@@ -1416,7 +1359,6 @@ steno_duration:
                        THIS->parser_error (_f ("not a duration: %d", $1));
                else {
                        $$->durlog_i_ = Duration_convert::i2_type ($1);
-                       $$->set_plet (THIS->plet_.iso_i_, THIS->plet_.type_i_);
                     }
        }
        | DURATION_IDENTIFIER   {
@@ -1425,12 +1367,6 @@ steno_duration:
        | steno_duration '.'    {
                $$->dots_i_ ++;
        }
-       | steno_duration '*' unsigned  {
-               $$->plet_.iso_i_ *= $3;
-       }
-       | steno_duration '/' unsigned {
-               $$->plet_.type_i_ *= $3;
-       }
        ;
 
 
@@ -1476,40 +1412,48 @@ simple_element:
                $$ = THIS->get_word_element (*$1, $2);
                delete $1;
        }
-       | '@' chord {
+       | chord {
                if (!THIS->lexer_p_->chord_state_b ())
                        THIS->parser_error (_ ("have to be in Chord mode for chords"));
+               $$ = $1;
+       }
+       | '@' notemode_chord {
+               if (!THIS->lexer_p_->note_state_b ())
+                       THIS->parser_error (_ ("have to be in Note mode for @chords"));
                $$ = $2;
        }
        ;
 
-
 chord:
-        notemode_duration steno_musical_pitch chord_additions chord_subtractions {
-                $$ = THIS->get_chord (*$2, $3, $4, *$1);
+       steno_tonic_pitch notemode_duration chord_additions chord_subtractions {
+                $$ = THIS->get_chord (*$1, $3, $4, *$2);
         };
 
-chord_additions:
+notemode_chord:
+       steno_musical_pitch notemode_duration chord_additions chord_subtractions {
+                $$ = THIS->get_chord (*$1, $3, $4, *$2);
+        };
+
+chord_additions: 
        {
                $$ = new Array<Musical_pitch>;
        } 
-       | chord_additions chord_note {
-               $1->push (*$2);
-               $$ = $1;
-       }
-       | chord_additions CHORDMODIFIER_PITCH {
-               /* 
-                 urg, this is kind of ugly.
-                 all but "sus" chord modifiers can be
-                 handled as chord_additions...
-                */
-               $1->push (*$2);
+       | '-' {
+               $$ = new Array<Musical_pitch>;
+       } 
+       | chord_additions chord_addsub {
                $$ = $1;
+               $$->push (*$2);
        }
        ;
 
+chord_addsub:
+       chord_note optional_dot
+       | CHORDMODIFIER_PITCH optional_dot
+       ;
+
 chord_note:
-        UNSIGNED {
+       UNSIGNED {
                $$ = new Musical_pitch;
                $$->notename_i_ = ($1 - 1) % 7;
                $$->octave_i_ = $1 > 7 ? 1 : 0;
index dafd7bf7b4160c5e2c3be8645b44944a5f8c82d2..cbf4c71c1a59c823d64c8b102f1043e3e1956f41 100644 (file)
@@ -20,7 +20,7 @@ Relative_octave_music::to_relative_octave (Musical_pitch)
 Relative_octave_music::Relative_octave_music(Music*p,Musical_pitch def)
   : Music_wrapper (p)
 {
-  last_pitch_ = element_p_->to_relative_octave (def);
+  last_pitch_ = element_l()->to_relative_octave (def);
 }
 
 void
index fc7ab50eed5dd97540f047ee5e57dbee3683364c..ea76b89d45b847f669f3ab572939fe21316e9d34 100644 (file)
 #include "compressed-music.hh"
 #include "text-def.hh"
 #include "beam.hh"
+#include "music-list.hh"
 
 bool
 Tuplet_engraver::do_try_music (Music *r)
 {
   if (Compressed_music * c = dynamic_cast<Compressed_music *> (r))
     {
-      compressed_music_arr_.push (c);
-      stop_moments_.push (now_moment () + c->duration ());
+      Music *el = c->element_l ();
+      if (!dynamic_cast<Request_chord*> (el))
+       {
+         compressed_music_arr_.push (c);
+         stop_moments_.push (now_moment () + c->duration ());
+       }
       return true;
     }
   return false;
index f912908583963d3ed46219244c41fbd39245a2e6..7fb3e57e33808017001d72221c5e20f6c06c0646 100644 (file)
@@ -2,5 +2,5 @@
 export PATH:=$(topdir)/lily/out:$(topdir)/buildscripts/out:$(PATH)
 export MFINPUTS:=$(topdir)/mf/$(PATHSEP)$(MFINPUTS)$(PATHSEP)$(PATHSEP)
 export TEXINPUTS:=$(topdir)/tex/$(PATHSEP)$(TEXINPUTS)$(PATHSEP)$(PATHSEP)
-export LILYINCLUDE:=$(topdir)/init$(PATHSEP)$(topdir)/mf/out$(PATHSEP)$(LILYINCLUDE)
+export LILYINCLUDE:=$(topdir)/scm$(PATHSEP)$(topdir)/init$(PATHSEP)$(topdir)/mf/out$(PATHSEP)$(LILYINCLUDE)
 
index 9b15bddb16c5528373f1aa15d0d0427ddf58f7f9..7f7a88a3ca78e27120537e1a2fcd916faf73d321 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Titel: LilyPond
-Versie: 1.1.13
-Inschrijf datum: 08DEC98
+Versie: 1.1.14
+Inschrijf datum: 09DEC98
 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.13.tar.gz 
+       770k lilypond-1.1.14.tar.gz 
 Oorspronkelijke plek: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.13.tar.gz 
+       770k lilypond-1.1.14.tar.gz 
 Copi-eer voorwaarden: GPL
 End
index 40370913f75659b1fe004d60ee4861144c24c680..628679c9238576d0196032f74095094ffb120b0b 100644 (file)
@@ -1,21 +1,21 @@
 Begin3
 Title: LilyPond
-Version: 1.1.13
-Entered-date: 08DEC98
+Version: 1.1.14
+Entered-date: 09DEC98
 Description: 
 LilyPond is the GNU Project music typesetter.  This program can print
 beautiful sheet music from a music definition file.  It can also play
 mechanical performances to a MIDI file.  Features include multiple
 staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
-beams, slurs, triplets, formatting scores, part extraction.  It includes
-a nice font of musical symbols.
+beams, slurs, triplets, named chords, transposing, formatting scores, 
+part extraction.  It includes a nice font of musical symbols.
 Keywords: music notation typesetting midi fonts engraving
 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.13.tar.gz 
+       770k lilypond-1.1.14.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       770k lilypond-1.1.13.tar.gz 
+       770k lilypond-1.1.14.tar.gz 
 Copying-policy: GPL
 End
index fa465fd0f988868cddbfe8e93a7285fd3f30dfb4..a5cf6f131794e69fdaaacace4873886551e777b6 100644 (file)
@@ -1,9 +1,9 @@
 Name: lilypond
-Version: 1.1.13
+Version: 1.1.14
 Release: 1
 Copyright: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.13.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.1.14.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>
@@ -17,8 +17,8 @@ LilyPond is the GNU Project music typesetter.  This program can print
 beautiful sheet music from a music definition file.  It can also play
 mechanical performances to a MIDI file.  Features include multiple
 staffs, meters, clefs, keys, lyrics, versatile input language, cadenzas,
-beams, slurs, triplets, formatting scores, part extraction.  It includes
-a nice font of musical symbols.
+beams, slurs, triplets, named chords, transposing, formatting scores, 
+part extraction.  It includes a nice font of musical symbols.
 
 %prep
 %setup
index 90b98e9ecb242741082ea4c3b98d3e063ec1544b..c5234f0e70a95900dc9398d2669774843810ccde 100644 (file)
@@ -27,7 +27,7 @@ STEPMAKE_TEMPLATES=toplevel yolily-toplevel
 include $(depth)/make/stepmake.make 
 #
 
-website: examples htmldoc doc++
+website: htmldoc examples doc++
 
 examples:
        $(MAKE) CONFIGSUFFIX='www' -C input WWW
index abf82013170ca5c96ce46e3463f3aefacc20f72f..4bc8f842f3d0de5f49086e0505cf34fd595586ed 100644 (file)
@@ -18,12 +18,12 @@ Note: Original key F.
 
 \version "1.0.10";
 
-$vocal_verse1 = \notes\relative c{
+$vocal_verse1 = \notes\relative c''{
        % ugh: treble/bass
-%      \clef treble;
-%      \clef violin;
+       % ?
+       \clef treble;
        \property Voice.dynamicdir=1
-       \times 2/3 { [ g''8( )as] g } c4. g8 |
+       \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 |
index 26b1fbc219ccfe64f6503f2914162434559d6d02..88477154c795641d97d1c0ce78d985fb3ff95931 100644 (file)
        1 setlinejoin
        setdash
        setlinewidth
+       8 -2 roll
        moveto
        curveto
        stroke
index 750b053bc873bc650d49edbefc53e2ab6fd42761..4aa093e81809d9fded7064698a7fe52ff684b8a0 100644 (file)
 (define (empty2 a b )
   "")
 
-
 (define emptybar empty1)
-(define setdynamic empty1)
-(define startrepeat empty1)
-(define repeatbar empty1)
-(define finishbar empty1)
-(define extender empty1)
-(define startbar empty1)
-(define repeatbarstartrepeat empty1)
-(define fatdoublebar empty1)
-(define setfinger empty1)
-(define doublebar empty1)
 
 ;;; and these suck as well.
+(define (setdynamic s) (text "dynamic" (string-append "\\" s)))
 (define (settext s) (text "text" s))
 (define (settypewriter s) (text "typewriter" s))
 (define (setnumber s) (text "number" s))
 (define (setbold s) (text "bold" s))
+(define (setfinger s) (text "finger" s))
 (define (setitalic s) (text "italic" s))
 (define (setnumber-1 s) (text "numberj" s))
   
   (define (decrescendo w h cont)
     (embedded-ps ((ps-scm 'decrescendo) w h cont)))
 
+  (define 
+    (doublebar h)
+    (invoke-dim1  "doublebar" h))
+
   (define (embedded-ps s)
     (string-append "\\embeddedps{" s "}"))
 
-
   (define (end-output) 
     "\n\\EndLilyPondOutput")
   
   (define (experimental-on) "\\turnOnExperimentalFeatures")
 
-  (define (extender o h)
-    ((invoke-output o "invoke-dim1") "extender" h))
+  (define (extender h)
+    (invoke-dim1 "extender" h))
+
+  (define
+    (fatdoublebar h)
+    (invoke-dim1  "fatdoublebar" h))
+
+  (define
+    (finishbar h)
+    (invoke-dim1  "finishbar" h))
 
   (define (font-switch i)
     (string-append
     (string-append
      "\n\\" s "{" (number->dim d) "}"))
 
-
   ;;
   ;; need to do something to make this really safe.
   ;;
     (string-append
      "{\\bracefont " (char  (/  (- (min y (- maxht step)) minht)   step)) "}"))
   
+  (define
+    (repeatbar h)
+    (invoke-dim1  "repeatbar" h))
+
+  (define
+    (repeatbarstartrepeat h)
+    (invoke-dim1  "repeatbarstartrepeat" h))
+
   (define (rulesym h w) 
     (string-append 
      "\\vrule height " (number->dim (/ h 2))
   (define (slur l)
     (embedded-ps ((ps-scm 'slur) l)))
 
+  (define
+    (startbar h)
+    (invoke-dim1  "startbar" h))
+
+  (define
+    (startrepeat h)
+    (invoke-dim1  "startrepeat" h))
+
   (define (start-line) 
     (string-append 
      "\\hbox{%\n")
   (define (stop-line) 
     "}\\interscoreline")
 
+  (define
+    (stoprepeat h)
+    (invoke-dim1 "stoprepeat" h))
+
   (define (text f s)
     (string-append "\\set" f "{" (output-tex-string s) "}"))
   
   (define (maatstreep h)
     (string-append "\\maatstreep{" (number->dim h) "}"))
   
+  ; urg: generate me
   (cond ((eq? action-name 'all-definitions)
         `(begin
            (define beam ,beam)
            (define tuplet ,tuplet)
            (define bracket ,bracket)
            (define crescendo ,crescendo)
-           (define volta ,volta)
-           (define slur ,slur)
            (define dashed-slur ,dashed-slur) 
+           (define doublebar ,doublebar)
+           (define emptybar ,emptybar)
            (define decrescendo ,decrescendo) 
            (define empty ,empty)
            (define end-output ,end-output)
+           (define extender ,extender)
+           (define fatdoublebar ,fatdoublebar)
+           (define finishbar ,finishbar)
            (define font-def ,font-def)
            (define font-switch ,font-switch)
            (define generalmeter ,generalmeter)
            (define invoke-char ,invoke-char) 
            (define invoke-dim1 ,invoke-dim1)
            (define placebox ,placebox)
+           (define repeatbar ,repeatbar)
+           (define repeatbarstartrepeat ,repeatbarstartrepeat)
            (define rulesym ,rulesym)
+           (define slur ,slur)
+           (define startbar ,startbar)
+           (define startrepeat ,startrepeat)
+           (define stoprepeat ,stoprepeat)
            (define start-line ,start-line)
            (define stem ,stem)
            (define stop-line ,stop-line)
            (define char  ,char)
            (define maatstreep ,maatstreep)
            (define pianobrace ,pianobrace)
+           (define volta ,volta)
            ))
 
        ((eq? action-name 'experimental-on) experimental-on)
        ((eq? action-name 'tuplet) tuplet)
        ((eq? action-name 'bracket) bracket)
        ((eq? action-name 'crescendo) crescendo)
-       ((eq? action-name 'volta) volta)
-       ((eq? action-name 'slur) slur)
        ((eq? action-name 'dashed-slur) dashed-slur) 
+       ((eq? action-name 'doublebar) doublebar)
        ((eq? action-name 'decrescendo) decrescendo) 
        ((eq? action-name 'empty) empty)
        ((eq? action-name 'end-output) end-output)
+       ((eq? action-name 'extender) extender)
+       ((eq? action-name 'fatdoublebar) fatdoublebar)
+       ((eq? action-name 'finishbar) finishbar)
        ((eq? action-name 'font-def) font-def)
        ((eq? action-name 'font-switch) font-switch)
        ((eq? action-name 'generalmeter) generalmeter)
        ((eq? action-name 'invoke-char) invoke-char) 
        ((eq? action-name 'invoke-dim1) invoke-dim1)
        ((eq? action-name 'placebox) placebox)
+       ((eq? action-name 'repeatbar) repeatbar)
+       ((eq? action-name 'repeatbarstartrepeat) repeatbarstartrepeat)
        ((eq? action-name 'rulesym) rulesym)
+       ((eq? action-name 'slur) slur)
+       ((eq? action-name 'startbar) startbar)
+       ((eq? action-name 'startrepeat) startrepeat)
+       ((eq? action-name 'stoprepeat) stoprepeat)
        ((eq? action-name 'start-line) start-line)
        ((eq? action-name 'stem) stem)
        ((eq? action-name 'stop-line) stop-line)
+       ((eq? action-name 'volta) volta)
        (else (error "unknown tag -- PS-TEX " action-name))
        )
-
   )
 
 ;;;;;;;;;;;; PS
        (else (error "unknown tag -- PS-SCM " action-name))
        )
   )
+  
 
 
 
index 004a96b08c7752ef2a7d62697d1640bf8524628c..0af85431ccf902c1a9a9cbbf343700293e2769a0 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: StepMake
-Version: 0.1.59
-Entered-date: 23OCT98
+Version: 0.1.61
+Entered-date: 08DEC98
 Description: 
 Keywords: music notation typesetting midi fonts engraving
 Author: janneke@gnu.org (Jan Nieuwenhuizen)
        hanwen@cs.ruu.nl (Han-Wen Nienhuys)
 Maintained-by: janneke@gnu.org (Jan Nieuwenhuizen)
 Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
-       40k stepmake-0.1.59.tar.gz 
+       40k stepmake-0.1.61.tar.gz 
 Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
-       40k stepmake-0.1.59.tar.gz 
+       40k stepmake-0.1.61.tar.gz 
 Copying-policy: GPL
 End
index 5131d881e98002c310bf33656d46c8633883f095..97d36df82b340b4788af279d1de6bcce0bd1dc5d 100644 (file)
@@ -1,9 +1,9 @@
 Name: stepmake
-Version: 0.1.59
+Version: 0.1.61
 Release: 1
 Copyright: GPL
 Group: Development
-Source0: pcnov095.win.tue.nl:/pub/lilypond/development/stepmake-0.1.59.tar.gz
+Source0: pcnov095.win.tue.nl:/pub/lilypond/development/stepmake-0.1.61.tar.gz
 Summary: generic make package
 Packager: janneke@gnu.org (Jan Nieuwenhuizen)
 Buildroot: /tmp/stepmake-install