]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.3.132 release/1.3.132
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 25 Feb 2001 22:58:52 +0000 (23:58 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 25 Feb 2001 22:58:52 +0000 (23:58 +0100)
============

* Fixes for ascii-script output.  Stylesheet needs some work, just as
PostScript output.

* Bugfix: convert-ly --to accepts argument.

* Prepared Petites Preludes for (first?) submission to mutopia.

* Bugfix: out-letter/%.ps generation for mutopia.

* Bugfix: don't use $(message ) in makefiles; some versions of make
choke on this.

* Bugfix: ly2dvi.py: don't add magic `//' to TEXINPUTS,MFINPUTS; this
chokes kpsewhich 3.3.1 (bug report filed).

* Bugfix: file-path.cc: don't interpret relative path as system root.

* Bugfix: --srcdir install.

1.3.131.h

30 files changed:
CHANGES
Documentation/user/convertors.itely
Documentation/user/invoking.itexi
Documentation/user/literature.itely
Documentation/user/ly2dvi.itexi
Documentation/user/refman.itely
Documentation/user/tutorial.itely
VERSION
buildscripts/mutopia-index.py
configure
input/bugs/grace-dynamic.ly [new file with mode: 0644]
input/bugs/ss.ly [deleted file]
input/regression/lyrics-multi-stanza.ly
lily/align-interface.cc
lily/break-align-engraver.cc
lily/break-align-item.cc
lily/dynamic-engraver.cc
lily/include/align-interface.hh
lily/parser.yy
lily/stem.cc
make/out/lilypond.lsm
make/out/lilypond.spec
mutopia/Coriolan/clarinetti.ly
mutopia/Coriolan/corni.ly
scm/grob-description.scm
scm/grob-property-description.scm
scm/interface-description.scm
scm/translator-description.scm
scm/translator-property-description.scm
stepmake/configure

diff --git a/CHANGES b/CHANGES
index 281ffa35d8383d1eab7a04bfb5060b9864ec13c1..91841f2b9a14c45365e10e06f37ac1a492e3052a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,9 +8,6 @@ PostScript output.
 
 * Prepared Petites Preludes for (first?) submission to mutopia.
 
 
 * Prepared Petites Preludes for (first?) submission to mutopia.
 
-1.3.131.jcn1
-============
-
 * Bugfix: out-letter/%.ps generation for mutopia.
 
 * Bugfix: don't use $(message ) in makefiles; some versions of make
 * Bugfix: out-letter/%.ps generation for mutopia.
 
 * Bugfix: don't use $(message ) in makefiles; some versions of make
@@ -23,6 +20,28 @@ chokes kpsewhich 3.3.1 (bug report filed).
 
 * Bugfix: --srcdir install.
 
 
 * Bugfix: --srcdir install.
 
+1.3.131.hwn1
+============
+
+* Documentation: piano pedals, breath marks, tutorial fixes,
+convertors, autochange, \override/\set/\revert, multi-stanza lyrics,
+\outputproperty
+
+* Bugfix: another fix for collapsing dynamics with partcombine.
+
+* Bugfix: add functionality of
+Side_position_interface::self_align_callback() into
+Align_interface::align_elements_to_extents(). Otherwise, combining
+both (such as in a break alignment) leads to weird behavior: the
+spacing information is written halfway during a callback sequence,
+leading to weird results.
+
+This fixes input/test/orchestscore.ly
+
+* Bugfix: x-offset of stem was off by 0.5 stem thickness.
+
+* Add grob-property attachment-angle: angle for stem to attach to note head. 
+
 1.3.130.hwn2
 ============
 
 1.3.130.hwn2
 ============
 
index 92848556d9e9a2c1cf3e3de9cf37e7f9445d6bb2..81174826e37369cadde0a698cb3d86619ec76b8e 100644 (file)
@@ -3,21 +3,37 @@
 @node Conversion tools
 @chapter Converting to LilyPond format.
 
 @node Conversion tools
 @chapter Converting to LilyPond format.
 
-@section midi2ly
 
 
-Midi2ly translates a MIDI input file to a LilyPond source file.
-Midi2ly is part of the GNU LilyPond music typesetting package.
+@menu
+* midi2ly::                     
+* etf2ly::                      
+* abc2ly::                      
+* pmx2ly::                      
+* musedata2ly::                 
+@end menu
+
+@node midi2ly
+@section midi2ly
 
 
+Midi2ly translates a MIDI input file to a LilyPond source file. MIDI
+(Music Instrument Digital Interface) is a standard for digital
+instruments: it specifies cabling, a serial protocol and a file format.
 
 
-Human players usually are rhythmically not very exact when they record
-MIDI files.  midi2ly tries to compensate for these errors, but is not
-very good at this. It is therefore not recommended to use midi2ly for
-human-generated midi files. Correcting the quantization mistakes of the
-human player takes a lot of time.
+It is possible to record a MIDI file using a digital keyboard, and then
+convert it to @file{.ly}. However, human players can not rhythmically
+exact enough to make a MIDI to .ly conversion trivial.  midi2ly tries to
+compensate for these timing errors, but is not very good at this. It is
+therefore not recommended to use midi2ly for human-generated midi
+files. Correcting the quantization mistakes of the human player takes a
+lot of time.
 
 Hackers who know about signal processing are invited to write  a more
 robust midi2ly.
 
 
 Hackers who know about signal processing are invited to write  a more
 robust midi2ly.
 
+MIDI is also a de facto standard format for exporting music from other
+programs, so this capability may come in useful when you want to import
+files from a program that has no convertor for its native format.
+
 @subsection Invoking midi2ly
 
 @example
 @subsection Invoking midi2ly
 
 @example
@@ -56,13 +72,16 @@ robust midi2ly.
     Assume no double dotted notes.
 @end table
 
     Assume no double dotted notes.
 @end table
 
-
+@node etf2ly
 @section etf2ly
 
 @section etf2ly
 
-@subsection Invoking etf2ly
-Usage:
 
 
+ETF (Enigma Transport Format) is a format used by Coda Music
+Technology's Finale product. This program will convert part of an ETF
+file to a ready-to-use lilypond file.
 
 
+@subsection Invoking etf2ly
+Usage:
 
 @example
         etf2ly [OPTION]... ETF-FILE
 
 @example
         etf2ly [OPTION]... ETF-FILE
@@ -80,13 +99,108 @@ set output filename to FILE
 version information
 @end table
 
 version information
 @end table
 
-Enigma Transport Format is a format used by Coda Music Technology's
-Finale product. This program will convert part of an ETF file to a
-ready-to-use lilypond file.
 
 
-Report bugs to bug-gnu-music@@gnu.org
+Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
+
+
+@subsection Bugs
+
+Known: articulation scripts are buggy.  Empty measures confuse etf2ly.
+Report bugs to @email{bug-gnu-music@@gnu.org}.
+
+@node abc2ly
+@section abc2ly
+
+ABC is a fairly simple ASCII based format. It is described at
+@uref{http://www.gre.ac.uk/~c.walshaw/abc2mtex/abc.txt}.
+
+
+@example
+        abc2ly [OPTION]... ABC-FILE
+@end example
+
+Convert ABC to LilyPond.
+
+Options:
+@table @code
+@item   -h,--help
+this help
+@item  -o,--output=FILE
+set output filename to FILE
+@item  -v,--version
+version information
+@end table
+
+@subsection Bugs
+
+The ABC standard is not very "standard". For extended features
+(eg. polyphonic music) different conventions exist. 
+
+[TODO: describe limitations]
+
+
+@node pmx2ly
+@section pmx2ly
+
+PMX is a Musixtex preprocessor written by Don Simons, see
+@uref{http://www.gmd.de/Misc/Music/musixtex/software/pmx/}.
+
+Report bugs to @email{bug-gnu-music@@gnu.org}.
+
+@example
+        pmx2ly [OPTION]... PMX-FILE
+@end example
+
+Convert PMX to LilyPond.
+
+Options:
+@table @code
+@item   -h,--help
+this help
+@item  -o,--output=FILE
+set output filename to FILE
+@item  -v,--version
+version information
+@end table
+
+
+@node musedata2ly
+@section musedata2ly
+
+PMX is a Musixtex preprocessor written by Don Simons, see
+@uref{http://www.gmd.de/Misc/Music/musixtex/software/pmx/}.
+
+Report bugs to @email{bug-gnu-music@@gnu.org}.
+
+@example
+        musedata2ly [OPTION]... MUSEDATA-FILE
+@end example
+
+Convert Musedata to LilyPond. Musedata (@uref{http://www.musedata.org/})
+is an electronic library of classical music scores, currently comprising
+about 800 composition dating from 1700 to 1825.  The music is encoded in
+so-called Musedata format
+(@uref{http://www.ccarh.org/publications/books/beyondmidi/online/musedata}).
+musedata2ly converts a set of musedata files to one .ly file, and will
+include a \header field if a .ref file is supplied
+
+Report bugs to @email{bug-gnu-music@@gnu.org}.
+
+Written by @email{Han-Wen Nienhuys,hanwen@@cs.uu.nl}.
+
+
+Options:
+@table @code
+@item   -h,--help
+this help
+@item  -o,--output=@var{file}
+set output filename to @var{file}
+@item  -v,--version
+version information
+@item  -r,--ref=@var{reffile}
+ read background information from ref-file
+@var{REFFILE}
+@end table
 
 
-Written by  Han-Wen Nienhuys
 
 
-[descibe abc2ly, pmx2ly, etf2ly, musedata2ly here]
 
 
index e5e8dd30e678edf5f39f8f926eab066b86714092..96f19453cbf239f490a1be02eee9acb04a690fbd 100644 (file)
@@ -21,9 +21,9 @@ dump).
 
 For processing both the @TeX{} and the PostScript output, you must
 have appropriate environment variables set.  For @TeX{}, you have to
 
 For processing both the @TeX{} and the PostScript output, you must
 have appropriate environment variables set.  For @TeX{}, you have to
-set @var{MFINPUTS} and @var{TEXINPUTS} to point to the directory
+set @code{MFINPUTS} and @code{TEXINPUTS} to point to the directory
 containing LilyPond metafont and .tex files.  For processing the
 containing LilyPond metafont and .tex files.  For processing the
-PostScript with Ghostscript, you have to set @var{GS_FONTPATH} to
+PostScript with Ghostscript, you have to set @code{GS_FONTPATH} to
 point to the directory containing LilyPond @file{pfa} files.
 
 Scripts to do this are included in
 point to the directory containing LilyPond @file{pfa} files.
 
 Scripts to do this are included in
index 86629ec9b139ec7d29226a7f005fac45e3e21391..0140a5e529017e2509a8d60bc15796053cdd0270 100644 (file)
@@ -19,11 +19,7 @@ Tom Gerou and Linda Lusk, Essential Dictionary of Music
 Notation.  Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6
 
 A concise, alphabetically ordered list of typesetting and music
 Notation.  Alfred Publishing, Van Nuys CA ISBN 0-88284-768-6
 
 A concise, alphabetically ordered list of typesetting and music
-(notation) issues with a rather simplistic attitude but in most cases
-"good-enough" answers.
-
-[graag zonder neertrappen.]
-
+(notation) issues which covers most of the normal  cases.
 
 @item Stone80
 
 
 @item Stone80
 
@@ -38,8 +34,7 @@ overview of existing traditional notation practices.
 Gardner Read,  Music Notation: a Manual of Modern Practice.
 Taplinger Publishing, New York (2nd edition).
 
 Gardner Read,  Music Notation: a Manual of Modern Practice.
 Taplinger Publishing, New York (2nd edition).
 
-This is as close to the ``standard'' reference work for music notation
-issues as one is likely to get.
+A standard work on music notation.  
 
 @item hader48,
 
 
 @item hader48,
 
index 8b7bddfd71016c8b1253b49aaf88f26b54781d2f..3c54dbd2f0a74c3a438440688f6d6f57aad702e1 100644 (file)
@@ -218,17 +218,8 @@ a list of priorities for lowest to hightest proirity.
 
 @subsection  Bugs
 
 
 @subsection  Bugs
 
-See @ref{Bug reports}.  If you have found a bug, you should send a
-bugreport.
-
-@itemize @bullet
-@item Send a copy of the input which causes the error.
-@item Send a description of the platform you use.
-@item Send a description of the LilyPond and ly2dvi version you use.
-@item Send a description of the bug itself.
-@item Send it to @email{bug-gnu-music@@gnu.org} (you don't have to subscribe
-    to this mailinglist).
-@end itemize
+If find something that you consider a bug, please send a bugreport (See
+@ref{Bug reports}) to @email{bug-gnu-music@@gnu.org}.
 
 @subsection  Remarks
 
 
 @subsection  Remarks
 
index 4a8652b6f52ee5185c1e94ba91cfb32261d5d5a7..f882840e7e156773922c4a002156b0fe11474d03 100644 (file)
 
    Rhythm staff (clef, x-notehead)
 
 
    Rhythm staff (clef, x-notehead)
 
-   postscript, scheme output?
-
-   (links to?) using/existance of ly2dvi, lilypond-book
-
 @end ignore
 
 
 @end ignore
 
 
 @chapter Reference Manual
 
 This document describes GNU LilyPond and its input format. This document
 @chapter Reference Manual
 
 This document describes GNU LilyPond and its input format. This document
-has been revised for LilyPond 1.3.125
+has been revised for LilyPond 1.3.131
 
 
 
 @menu
 * Overview::                    
 
 
 
 @menu
 * Overview::                    
-* Repeats::                     
 * Note entry::                  
 * Music notation::              
 * Polyphony::                   
 * Spanners::                    
 * Note entry::                  
 * Music notation::              
 * Polyphony::                   
 * Spanners::                    
+* Repeats::                     
 * Piano music::                 
 * Lyrics::                      
 * Chords::                      
 * Writing parts::               
 * Custodes::                    
 * Piano music::                 
 * Lyrics::                      
 * Chords::                      
 * Writing parts::               
 * Custodes::                    
+* Tuning output::               
 * Page layout::                 
 * Sound::                       
 * Music entry::                 
 * Engravers::                   
 * Syntactic details::           
 * Page layout::                 
 * Sound::                       
 * Music entry::                 
 * Engravers::                   
 * Syntactic details::           
-* Unsorted::                    
 @end menu
 
 @c . {Overview}
 @end menu
 
 @c . {Overview}
@@ -114,196 +110,6 @@ can enter and edit them in manageable chunks.
 
 
 
 
 
 
-@c .  {Repeats}
-@node Repeats
-@section Repeats
-
-
-@cindex repeats
-@cindex @code{\repeat}
-
-In order to specify repeats, use the @code{\repeat}
-keyword.  Since repeats look and sound differently when played or
-printed, there are a few different variants of repeats.
-
-@table @asis
-@item unfolded  
-Repeated music is fully written (played) out.  Useful for MIDI
-output.
-
-@item volta  
-This is the normal notation: Repeats are not written out, but
-alternative endings (voltas) are printed, left to right.
-
-@item folded  
-Alternative endings are written stacked.  Which is unfortunately not
-practical for anything right now.
-
-@item tremolo
-Make tremolo beams.
-@end table  
-
-@menu
-* Repeat syntax::               
-* Manual repeat commands::      
-* Tremolo repeats::             
-* Tremolo subdivision::         
-@end menu
-
-@node Repeat syntax
-@subsection Repeat syntax
-
-The syntax for repeats is
-
-@example
-  \repeat @var{variant} @var{repeatcount} @var{repeatbody}
-@end example
-
-If you have alternative endings, you may add
-
-@cindex @code{\alternative}
-@example
- \alternative @code{@{} @var{alternative1}
-            @var{alternative2}
-            @var{alternative3} @dots{} @code{@}}
-@end example
-
-where each @var{alternative} is a Music expression.
-
-Normal notation repeats are used like this:
-
-@quotation
-
-@lilypond[fragment,verbatim]
-  c'1
-  \repeat volta 2 { c'4 d' e' f' }
-  \repeat volta 2 { f' e' d' c' }
-@end lilypond
-@end quotation
-
-With alternative endings:
-
-@quotation
-
-@lilypond[fragment,verbatim]
-  c'1
-  \repeat volta 2 {c'4 d' e' f'} 
-  \alternative { {d'2 d'} {f' f} }
-@end lilypond
-@end quotation
-
-Folded repeats look like this:@footnote{Folded repeats offer little
-more over simultaneous music.  However, it is to be expected that
-more functionality -- especially for the MIDI backend -- will be
-implemented at some point in the future.}
-
-@quotation
-
-@lilypond[fragment,verbatim]
-  c'1
-  \repeat fold 2 {c'4 d' e' f'} 
-  \alternative { {d'2 d'} {f' f} }
-
-@end lilypond
-@end quotation
-
-
-If you don't give enough alternatives for all of the repeats, then
-the first alternative is assumed to be repeated often enough to equal
-the specified number of repeats.
-
-@quotation
-@lilypond[fragment,verbatim]
-\context Staff {
-  \relative c' {
-    \partial 4;
-    \repeat volta 3 { e | c2 d2 | e2 f2 | }
-    \alternative { { g4 g g } { a | a a a a | b2. } }
-  }
-}
-
-@end lilypond
-@end quotation
-
-
-As you can see, LilyPond doesn't remember the timing information, nor
-are slurs or ties repeated, so you have to reset timing information
-after a repeat, eg using bar-checks, @code{Score.measurePosition} or
-@code{\partial}. We hope to fix this after 1.4.
-
-It is possible to nest @code{\repeat}, although it probably is only
-meaningful for unfolded repeats.
-
-@node Manual repeat commands
-@subsection Manual repeat commands
-
-@cindex @code{repeatCommands}
-
-The property @code{repeatCommands} can be used to control the layout of
-repeats. Its value is a Scheme list of repeat commands, where each repeat
-command can be
-
-@table @code
-@item 'start-repeat
- Print a |: bar line
-@item 'stop-repeat
- Print a :| bar line
-@item (volta . @var{text})
-  Print a volta bracket saying @var{text}.
-@item (volta . #f)
-  Stop a running volta bracket
-@end table
-
-@lilypond[verbatim, fragment]
- c''4
-    \property Score.repeatCommands = #'((volta "93") end-repeat)
- c4 c4
-    \property Score.repeatCommands = #'((volta #f))
- c4 c4
-@end lilypond
-
-
-@node Tremolo repeats
-@subsection Tremolo repeats
-@cindex tremolo beams
-
-To place tremolo marks between notes, use @code{\repeat} with tremolo
-style.  
-@lilypond[verbatim,center]
-\score { 
-  \context Voice \notes\relative c' {
-    \repeat "tremolo" 8 { c16 d16 }
-    \repeat "tremolo" 4 { c16 d16 }    
-    \repeat "tremolo" 2 { c16 d16 }
-    \repeat "tremolo" 4 c16
-  }
-  \paper {
-    linewidth = 40*\staffspace;
-  }  
-}
-@end lilypond
-
-@node Tremolo subdivision
-@subsection Tremolo subdivision
-@cindex tremolo marks
-@cindex @code{tremoloFlags}
-
-Tremolo marks can be printed on a single note by adding
-`@code{:}[@var{length}]' after the note.  The length must be at least 8.
-A @var{length} value of 8 gives one line across the note stem.  If the
-length is omitted, then the last value is used, or the value of the
-@code{tremoloFlags} property if there was no last value.
-
-@lilypond[verbatim,fragment,center]
-  c'2:8 c':32
-@end lilypond
-
-Tremolos in this style do not carry over into the MIDI output.
-
-Using this mechanism pays off when you entering many tremolos, since the
-default argument saves a lot of typing.
-
-
 @c . {Note entry}
 @node Note entry
 @section Note entry
 @c . {Note entry}
 @node Note entry
 @section Note entry
@@ -485,8 +291,9 @@ r1 r2 r4 r8 r16 r32 r64 r64
 @end lilypond
 @end quotation
 
 @end lilypond
 @end quotation
 
-As you  can see, the longa is not printed. To get a longa note head, you
-have to use a different style of note heads. See [TODO].
+As you can see, the longa is not printed. To get a longa note head, you
+have to use a mensural note heads. This is done accomplished by setting
+the @code{style} property of the NoteHead grob to @code{mensural}.
 
 If the duration is omitted then it is set equal to the previous duration
 entered.  At the start of parsing there is no previous duration, so then
 
 If the duration is omitted then it is set equal to the previous duration
 entered.  At the start of parsing there is no previous duration, so then
@@ -566,6 +373,7 @@ this has the same effect as the spacer rest.
 @cindex Music notation
 @menu
 * Key::                         
 @cindex Music notation
 @menu
 * Key::                         
+* Breath marks::                
 * Time signature::              
 @end menu
 
 * Time signature::              
 @end menu
 
@@ -637,8 +445,6 @@ Supported clef-names include
 @item percussion: percussion clef
 @end itemize
 
 @item percussion: percussion clef
 @end itemize
 
-[todo: ancient clefs]
-
 Supported associated symbols (for Staff.clefGlyph) are:
 
 @itemize @bullet
 Supported associated symbols (for Staff.clefGlyph) are:
 
 @itemize @bullet
@@ -666,6 +472,17 @@ Supported associated symbols (for Staff.clefGlyph) are:
 historic editions".  @emph{Editio XXX style} means "as is/was printed in
 Editio XXX".
 
 historic editions".  @emph{Editio XXX style} means "as is/was printed in
 Editio XXX".
 
+@node Breath marks
+@subsection Breath marks
+
+Breath marks are entered using @code{\breathe}:
+
+@lilypond[fragment,relative]
+c'4 \breathe d4
+@end lilypond
+
+
+
 @c .  {Time signature}
 @node Time signature
 @subsection Time signature
 @c .  {Time signature}
 @node Time signature
 @subsection Time signature
@@ -708,6 +525,9 @@ Short cut for
 See the documentation of @code{measurePosition}.
 
 
 See the documentation of @code{measurePosition}.
 
 
+
+
+
 @c .   {Polyphony}
 @node Polyphony
 @section Polyphony
 @c .   {Polyphony}
 @node Polyphony
 @section Polyphony
@@ -998,6 +818,8 @@ note in the phrasing slur.
   \time 6/4; c''\((d)e f(e)\)d
 @end lilypond
 
   \time 6/4; c''\((d)e f(e)\)d
 @end lilypond
 
+[TODO: put together with breath mark.]
+
 
 @c .   {Tie}
 @menu
 
 @c .   {Tie}
 @menu
@@ -1095,12 +917,13 @@ their written length:
 
 Define a spanning request. The @var{startstop} parameter is either -1
 (@code{\start}) or 1 (@code{\stop}) and @var{type} is a string that
 
 Define a spanning request. The @var{startstop} parameter is either -1
 (@code{\start}) or 1 (@code{\stop}) and @var{type} is a string that
-describes what should be started.  Supported types are @code{crescendo},
-@code{decrescendo}, @code{beam}, @code{slur}.  [FIXME: many more] This
-is an internal command.  Users should use the shorthands which are
-defined in the initialization file @file{spanners.ly}.
+describes what should be started.  Among the supported types are
+@code{crescendo}, @code{decrescendo}, @code{beam}, @code{slur}.This is
+an internal command.  Users should use the shorthands which are defined
+in the initialization file @file{spanners.ly}.
 
 
-You can attach a (general) span request to a note using
+You can attach a (general) span request to a note using the following
+syntax.
 
 @lilypond[fragment,verbatim,center]
   c'4-\spanrequest \start "slur"
 
 @lilypond[fragment,verbatim,center]
   c'4-\spanrequest \start "slur"
@@ -1109,7 +932,6 @@ You can attach a (general) span request to a note using
 
 The slur syntax with parentheses is a shorthand for this.
 
 
 The slur syntax with parentheses is a shorthand for this.
 
-
 @c .  {Ornaments}
 @node Ornaments
 @subsection Ornaments
 @c .  {Ornaments}
 @node Ornaments
 @subsection Ornaments
@@ -1331,13 +1153,12 @@ implemented.
 
 
 
 
 
 
-@c .   {Stem tremolo}
+
 @menu
 * Glissando ::                  
 * Dynamics::                    
 * Crescendo and Decrescendo::   
 * Bar lines::                   
 @menu
 * Glissando ::                  
 * Dynamics::                    
 * Crescendo and Decrescendo::   
 * Bar lines::                   
-* Breath marks::                
 @end menu
 
 
 @end menu
 
 
@@ -1467,12 +1288,6 @@ You are encouraged to use @code{\repeat} for repetitions.  See
 
 [FIXME]
 
 
 [FIXME]
 
-@c .   {Breath marks}
-@node Breath marks
-@subsubsection Breath marks
-@cindex Breath marks
-
-
 
 @c .  {Bar check}
 @node Bar check
 
 @c .  {Bar check}
 @node Bar check
@@ -1496,37 +1311,250 @@ A bar check is entered using the bar symbol, @code{|}
 
 
 
 
 
 
+@c .  {Repeats}
+@node Repeats
+@section Repeats
 
 
 
 
+@cindex repeats
+@cindex @code{\repeat}
 
 
-@c . {Piano music}
-@node Piano music
-@section Piano music
-@menu
-* Automatic staff changes::     
-* Manual staff switches::       
-* Pedals::                      
-* Arpeggio::                    
-* Follow Thread::               
-@end menu 
-
+In order to specify repeats, use the @code{\repeat}
+keyword.  Since repeats look and sound differently when played or
+printed, there are a few different variants of repeats.
 
 
-@c .   {Automatic staff changes}
-@node Automatic staff changes
-@subsection Automatic staff changes
-@cindex Automatic staff changes
+@table @asis
+@item unfolded  
+Repeated music is fully written (played) out.  Useful for MIDI
+output.
 
 
-[\autochange]
+@item volta  
+This is the normal notation: Repeats are not written out, but
+alternative endings (voltas) are printed, left to right.
 
 
-@node Manual staff switches
-@subsection Manual staff switches
+@item folded  
+Alternative endings are written stacked.  Which is unfortunately not
+practical for anything right now.
 
 
-@cindex manual staff switches
-@cindex staff switch, manual
+@item tremolo
+Make tremolo beams.
+@end table  
 
 
-@cindex @code{\translator}
-@example
-  \translator @var{contexttype} = @var{name}
+@menu
+* Repeat syntax::               
+* Manual repeat commands::      
+* Tremolo repeats::             
+* Tremolo subdivision::         
+@end menu
+
+@node Repeat syntax
+@subsection Repeat syntax
+
+The syntax for repeats is
+
+@example
+  \repeat @var{variant} @var{repeatcount} @var{repeatbody}
+@end example
+
+If you have alternative endings, you may add
+
+@cindex @code{\alternative}
+@example
+ \alternative @code{@{} @var{alternative1}
+            @var{alternative2}
+            @var{alternative3} @dots{} @code{@}}
+@end example
+
+where each @var{alternative} is a Music expression.
+
+Normal notation repeats are used like this:
+
+@quotation
+
+@lilypond[fragment,verbatim]
+  c'1
+  \repeat volta 2 { c'4 d' e' f' }
+  \repeat volta 2 { f' e' d' c' }
+@end lilypond
+@end quotation
+
+With alternative endings:
+
+@quotation
+
+@lilypond[fragment,verbatim]
+  c'1
+  \repeat volta 2 {c'4 d' e' f'} 
+  \alternative { {d'2 d'} {f' f} }
+@end lilypond
+@end quotation
+
+Folded repeats look like this:@footnote{Folded repeats offer little
+more over simultaneous music.  However, it is to be expected that
+more functionality -- especially for the MIDI backend -- will be
+implemented at some point in the future.}
+
+@quotation
+
+@lilypond[fragment,verbatim]
+  c'1
+  \repeat fold 2 {c'4 d' e' f'} 
+  \alternative { {d'2 d'} {f' f} }
+
+@end lilypond
+@end quotation
+
+
+If you don't give enough alternatives for all of the repeats, then
+the first alternative is assumed to be repeated often enough to equal
+the specified number of repeats.
+
+@quotation
+@lilypond[fragment,verbatim]
+\context Staff {
+  \relative c' {
+    \partial 4;
+    \repeat volta 3 { e | c2 d2 | e2 f2 | }
+    \alternative { { g4 g g } { a | a a a a | b2. } }
+  }
+}
+
+@end lilypond
+@end quotation
+
+
+As you can see, LilyPond doesn't remember the timing information, nor
+are slurs or ties repeated, so you have to reset timing information
+after a repeat, eg using bar-checks, @code{Score.measurePosition} or
+@code{\partial}. We hope to fix this after 1.4.
+
+It is possible to nest @code{\repeat}, although it probably is only
+meaningful for unfolded repeats.
+
+@node Manual repeat commands
+@subsection Manual repeat commands
+
+@cindex @code{repeatCommands}
+
+The property @code{repeatCommands} can be used to control the layout of
+repeats. Its value is a Scheme list of repeat commands, where each repeat
+command can be
+
+@table @code
+@item 'start-repeat
+ Print a |: bar line
+@item 'stop-repeat
+ Print a :| bar line
+@item (volta . @var{text})
+  Print a volta bracket saying @var{text}.
+@item (volta . #f)
+  Stop a running volta bracket
+@end table
+
+@lilypond[verbatim, fragment]
+ c''4
+    \property Score.repeatCommands = #'((volta "93") end-repeat)
+ c4 c4
+    \property Score.repeatCommands = #'((volta #f))
+ c4 c4
+@end lilypond
+
+
+@node Tremolo repeats
+@subsection Tremolo repeats
+@cindex tremolo beams
+
+To place tremolo marks between notes, use @code{\repeat} with tremolo
+style.  
+@lilypond[verbatim,center]
+\score { 
+  \context Voice \notes\relative c' {
+    \repeat "tremolo" 8 { c16 d16 }
+    \repeat "tremolo" 4 { c16 d16 }    
+    \repeat "tremolo" 2 { c16 d16 }
+    \repeat "tremolo" 4 c16
+  }
+  \paper {
+    linewidth = 40*\staffspace;
+  }  
+}
+@end lilypond
+
+@node Tremolo subdivision
+@subsection Tremolo subdivision
+@cindex tremolo marks
+@cindex @code{tremoloFlags}
+
+Tremolo marks can be printed on a single note by adding
+`@code{:}[@var{length}]' after the note.  The length must be at least 8.
+A @var{length} value of 8 gives one line across the note stem.  If the
+length is omitted, then the last value is used, or the value of the
+@code{tremoloFlags} property if there was no last value.
+
+@lilypond[verbatim,fragment,center]
+  c'2:8 c':32
+@end lilypond
+
+Tremolos in this style do not carry over into the MIDI output.
+
+Using this mechanism pays off when you entering many tremolos, since the
+default argument saves a lot of typing.
+
+
+
+
+
+@c . {Piano music}
+@node Piano music
+@section Piano music
+@menu
+* Automatic staff changes::     
+* Manual staff switches::       
+* Pedals::                      
+* Arpeggio::                    
+* Follow Thread::               
+@end menu 
+
+
+@c .   {Automatic staff changes}
+@node Automatic staff changes
+@subsection Automatic staff changes
+@cindex Automatic staff changes
+
+Voices can be switched from top to bottom staff automatically. The
+syntax for this is
+@example
+        \autochange @var{contexttype} @var{musicexp}
+@end example
+This will switch notation context of @var{musicexp} between a
+@var{contexttype} named @code{up} and @code{down}. Typically, you use
+@code{Staff} for @var{contexttype}.  The autochanger switches on basis
+of pitch (central C is the turning point), and it looks ahead skipping
+over rests to switch rests in advance.
+        
+@lilypond[verbatim,singleline]
+\score { \notes \context PianoStaff <
+       \context Staff = "up" {
+               \autochange Staff \context Voice = VA < \relative c' { g4 a  b c d r4 a g } >
+       }
+       \context Staff = "down" {
+               \clef bass; 
+               s1*2
+       } > }
+@end lilypond
+
+
+
+
+@node Manual staff switches
+@subsection Manual staff switches
+
+@cindex manual staff switches
+@cindex staff switch, manual
+
+@cindex @code{\translator}
+@example
+  \translator @var{contexttype} = @var{name}
 @end example
 
 A music expression indicating that the context which is a direct
 @end example
 
 A music expression indicating that the context which is a direct
@@ -1545,7 +1573,28 @@ Usually this is used to switch staffs in Piano music, e.g.
 @subsection Pedals
 @cindex Pedals
 
 @subsection Pedals
 @cindex Pedals
 
-[todo]
+Piano pedals can be entered using the following span requests of the
+types @code{Sustain}, @code{UnaChorda} and @code{Sostenuto}:
+@lilypond[fragment,verbatim]
+c''4 \spanrequest \start "Sustain"  c4 c4  \spanrequest \stop "Sustain"
+@end lilypond
+
+For these verbose expressions, standard shorthands have been defined:
+@table @code
+@item sustainDown
+@item sustainUp
+@item unaChorda
+@item treChorde
+@item sostenutoDown
+@item sostenutoUp
+@end table
+
+The symbols that are printed can be modified by setting pedalXStrings,
+where one of the pedal types. Refer to the generaetd documentation for
+more information.
+
+Currently, brackets are not supported, only text markings (ie. Ped*
+style).
 
 
 @c .   {Arpeggio}
 
 
 @c .   {Arpeggio}
@@ -1622,6 +1671,7 @@ can be printed automatically. This is enabled if the property
 * Lyrics mode::                 
 * Printing lyrics::             
 * Automatic syllable durations::  
 * Lyrics mode::                 
 * Printing lyrics::             
 * Automatic syllable durations::  
+* More stanzas::                
 @end menu
 
 @c .  {Lyrics mode}
 @end menu
 
 @c .  {Lyrics mode}
@@ -1774,7 +1824,6 @@ For example:
 @cindex Automatic syllable durations
 
 
 @cindex Automatic syllable durations
 
 
-[explain automatic phrasing]
 @cindex automatic lyric durations
 @cindex @code{\addlyrics}
 
 @cindex automatic lyric durations
 @cindex @code{\addlyrics}
 
@@ -1827,6 +1876,40 @@ undesired effects when using multiple stanzas:
 It is valid (but probably not very useful) to use notes instead of
 lyrics for @var{musicexpr2}.
 
 It is valid (but probably not very useful) to use notes instead of
 lyrics for @var{musicexpr2}.
 
+@node More stanzas
+@subsection More stanzas
+
+@cindex phrasing
+
+If you have multiple stanzas printed underneath each other, the separate
+syllables should be aligned around punctuation. LilyPond can do this if
+you explain it which lyric lines belong to which melody.
+
+To this end, give the Voice context an identity, and set the LyricsVoice
+to name starting with that identity. In the following example, the Voice
+identity is @code{duet}, and the identities of the LyricsVoices are
+@code{duet-1} and @code{duet-2}.
+
+
+@lilypond[singleline,verbatim]
+\score {
+\addlyrics
+  \notes \relative c'' \context Voice = duet { \time 3/4; g2 e4 a2 f4 g2.  }
+  \lyrics \context Lyrics <
+  \context LyricsVoice = "duet-1" {
+    \property LyricsVoice . stanza = "Bert"
+    Hi, my name is bert.    }
+  \context LyricsVoice = "duet-2" {
+    \property LyricsVoice . stanza = "Ernie" 
+    Ooooo, ch\'e -- ri, je t'aime. }
+  >
+}
+@end lilypond
+
+You can add stanza numbers by setting @code{LyricsVoice.Stanza} (for the
+first system) and @code{LyricsVoice.stz} for the following systems.
+
+@cindex stanza numbering
 
 
 @c . {Chords}
 
 
 @c . {Chords}
@@ -1992,7 +2075,7 @@ For displaying printed chord names, use the @code{ChordNames} and
 the notation described above, or directly using simultaneous music.
 
 @quotation
 the notation described above, or directly using simultaneous music.
 
 @quotation
-@lilypond[verbatim]
+@lilypond[verbatim,singleline]
 scheme = \notes {
   \chords {a1 b c} <d f g>  <e g b>
 }
 scheme = \notes {
   \chords {a1 b c} <d f g>  <e g b>
 }
@@ -2001,7 +2084,6 @@ scheme = \notes {
     \context ChordNamesVoice \scheme
     \context Staff \transpose c'' \scheme
   >
     \context ChordNamesVoice \scheme
     \context Staff \transpose c'' \scheme
   >
-  \paper { linewidth = -1.; }
 }
 @end lilypond
 @end quotation
 }
 @end lilypond
 @end quotation
@@ -2042,7 +2124,7 @@ identify chord inversions or added base, which may result in strange
 chord names when chords are entered as a list of pitches:
 
 @quotation
 chord names when chords are entered as a list of pitches:
 
 @quotation
-@lilypond[verbatim,center]
+@lilypond[verbatim,center,singleline]
 scheme = \notes {
   <c'1 e' g'>
   <e' g' c''>
 scheme = \notes {
   <c'1 e' g'>
   <e' g' c''>
@@ -2054,7 +2136,6 @@ scheme = \notes {
     \context ChordNamesVoice \scheme
     \context Staff \scheme
   >
     \context ChordNamesVoice \scheme
     \context Staff \scheme
   >
-  \paper { linewidth = -1.; }
 }
 @end lilypond
 @end quotation
 }
 @end lilypond
 @end quotation
@@ -2063,7 +2144,7 @@ To specify chord inversions, append @code{/<notename>}.  To specify an
 added bass note, append @code{/+<notename}:
 
 @quotation
 added bass note, append @code{/+<notename}:
 
 @quotation
-@lilypond[verbatim,center]
+@lilypond[verbatim,center,singleline]
 scheme = \chords {
   d1 d/a d/+gis
 }
 scheme = \chords {
   d1 d/a d/+gis
 }
@@ -2073,7 +2154,6 @@ scheme = \chords {
     \context ChordNames \scheme
     \context Staff \transpose c'' \scheme
   >
     \context ChordNames \scheme
     \context Staff \transpose c'' \scheme
   >
-  \paper { linewidth = -1.; }
 }
 @end lilypond
 @end quotation
 }
 @end lilypond
 @end quotation
@@ -2202,21 +2282,11 @@ scheme = \chords {
 * Rehearsal marks::             
 * Instrument names::            
 * Transpose::                   
 * Rehearsal marks::             
 * Instrument names::            
 * Transpose::                   
+* Sound output for transposing instruments::  
 * Multi measure rests::         
 * Multi measure rests::         
+* Automatic part combining::    
 @end menu
 
 @end menu
 
-[TODO:
-
-partcombine
-
-rehearsal marks
-
-tranposing midi property.
-
-instrument names
-
-] 
-
 @c .   {Rehearsal marks}
 @node Rehearsal marks
 @subsection Rehearsal marks
 @c .   {Rehearsal marks}
 @node Rehearsal marks
 @subsection Rehearsal marks
@@ -2255,10 +2325,10 @@ You can specify an instrument name for a staff by setting
 before the start of the staff. For the first start, @code{instrument} is
 used, for the next ones @code{instr} is used.
 
 before the start of the staff. For the first start, @code{instrument} is
 used, for the next ones @code{instr} is used.
 
-@lilypond[verbatim]
+@lilypond[verbatim,singleline]
 \score { \notes {
   \property Staff.instrument = "instr " { c''4 } }
 \score { \notes {
   \property Staff.instrument = "instr " { c''4 } }
-  \paper { linewidth = -1.;
+  \paper { 
     \translator { \StaffContext
     \consists "Instrument_name_engraver"; } } }
 @end lilypond
     \translator { \StaffContext
     \consists "Instrument_name_engraver"; } } }
 @end lilypond
@@ -2304,6 +2374,21 @@ If you want to use both @code{\transpose} and @code{\relative}, then
 you must use @code{\transpose} first.  @code{\relative} will have no
 effect music that appears inside a @code{\transpose}.
 
 you must use @code{\transpose} first.  @code{\relative} will have no
 effect music that appears inside a @code{\transpose}.
 
+@node Sound output for transposing instruments
+@subsection Sound output transposing instruments
+
+When you want to play a score containing transposed and untransposed
+instruments, you have to instruct LilyPond the pitch offset (in
+semitones) for the transposed instruments. This is done using
+@code{transposing}.
+
+@cindex @code{transposing}
+
+@example
+       \property Staff.instrument = #"Cl. in B-flat"
+       \property Staff.transposing = #-2
+@end example
+
 
 @c .  {Multi measure rests}
 @node  Multi measure rests
 
 @c .  {Multi measure rests}
 @node  Multi measure rests
@@ -2328,6 +2413,12 @@ multimeasure rest.
 
 @cindex condensing rests
 
 
 @cindex condensing rests
 
+@node Automatic part combining
+@subsection Automatic part combining
+
+[TODO]
+
+
 @c . {Custodes}
 @node Custodes
 @section Custodes
 @c . {Custodes}
 @node Custodes
 @section Custodes
@@ -2378,15 +2469,257 @@ are @code{vaticana}, @code{medicaea}, @code{hufnagel} and
 @}
 @end quotation
 
 @}
 @end quotation
 
-The property can also be set locally, for example in a @code{\notes}
-block:
+The property can also be set locally, for example in a @code{\notes}
+block:
+
+@quotation
+\notes @{
+  \property Staff.Custos \override #'style = #'vaticana
+  c'1 d' e' d' \break c' d' e' d'
+@}
+@end quotation
+
+@c . {Tuning output}
+@node Tuning output
+@section Tuning output
+
+LilyPond tries to take as much formatting as possible out of your
+hands. Nevertheless, there are situations where it needs some help, or
+where you want to override its decisions.
+
+Here we discuss how you can do that.
+
+Notational output is specified in so called grobs (graphic
+objects). Each grob carries with it a set of properties (grob
+properties) specific to that grob.  For example, a stem grob has grob
+properties that specify its direction, length and thickness.
+
+The most common way of tuning the output is to alter the values of these
+properties. There are two ways of doing that: first, you can
+specifically select a set of grobs at one point, and set properties as
+you wish, or secondly, you can (temporarily) modify the definition of a
+grob, thereby affecting an entire group of grobs.
+
+@menu
+* Tuning groups of grobs ::     
+* Tuning per grob ::            
+* What to tune?::               
+* Text markup::                 
+@end menu
+
+@node Tuning groups of grobs 
+@subsection Tuning groups of grobs 
+
+@cindex grob description
+
+A grob definition is an association list, that is stored in a context
+property.  By assigning to that property (using plain @code{\property}),
+you can change the resulting grobs.  
+@lilypond[verbatim, fragment]
+c'4 \property Voice.Stem = #'((meta .  ((interfaces . ())))) c'4
+@end lilypond
+The @code{\property} statement effectively empties the definition of the
+Stem object. One of the effects is that property specifying how it
+should be printed is erased, with the effect of rendering it invisible.
+
+@cindex \override
+@cindex \revert
+@cindex \set
+
+
+This mechanism is fairly crude, since you can only set, but not modify,
+the definition of a grob. For this reason, there is a more advanced
+mechanism: you can add a property on top of an existing definition, or
+remove a property: @code{\override} adds a settings, @code{\revert}
+removes that setting.
+@lilypond[verbatim]
+c'4 \property Voice.Stem \override #'thickness = #4.0
+c'4 \property Voice.Stem \revert #'thickness
+c'4
+@end lilypond
+
+For the digirati, the grob description is an Scheme association
+list. Since it is singly linked, we can treat it as a stack, and
+@code{\override} and @code{\revert} are just push and pop
+operations. This pushing and popping is also used in the
+@code{autoBeamSettings} property.
+
+If you revert a setting which was not set in the first place, then it
+has no effect. However, if the setting was set as a system default, it
+may remove the default value, and this may give surprising results,
+including crashes.  In other words, if you use @code{\override} and
+@code{\revert}, be sure to balance the overrides and reverts.
+
+If balancing them is too much work, use the following shorthand:
+@code{\set} performs a revert followed by an override:
+@example
+\property Voice.Stem \set #'thickness = #2.0
+@end example
+
+Formally the syntax for these constructions is
+@example
+\property @var{context}.@var{grobname} \override @var{symbol} = @var{value}
+\property @var{context}.@var{grobname} \set @var{symbol} = @var{value}
+\property @var{context}.@var{grobname} \revert @var{symbol}
+@end example
+Here @var{symbol} is a Scheme expression of symbol type, @var{context}
+and @var{grobname} are strings and @var{value} is a Scheme expression.
+
+LilyPond will hang or crash if @var{value} contains cyclic references.
+
+
+
+@node Tuning per grob 
+@subsection Tuning per grob 
+
+@cindex \outputproperty
+
+A second way of tuning grobs is the more arcane @code{\outputproperty}
+feature.
+Syntax is as follows
+@example
+\outputproperty @var{predicate} @var{symbol} = @var{value}
+@end example
+Here @code{predicate} is a Scheme functoin taking a grob a argument
+argument, and returning a boolean.  This statement is processed by the
+@code{Output_property_engraver}.  It instructs the engraver to feed all
+grobs that it sees to @var{predicate}. Whenever the predicate returns
+true, the grob property @var{symbol} will be set to @var{value}.
+
+You will need to combine this statement with @code{\context} to select
+the appropriate context to apply this to.
+
+If possible, avoid this feature: the semantics are not very clean, and
+the syntax and semantics are up for rewrite.
+
+Here are some random examples:
+
+@lilypond[fragment,verbatim,singleline]
+\relative c'' { c4
+  \context Staff \outputproperty
+  #(make-type-checker 'note-head-interface)
+  #'extra-offset = #'(0.5 . 0.75)
+  <c8 e g> }
+@end lilypond
+
+@cindex @code{extra-offset}
+
+This selects all note heads occurring at current staff level, and sets
+the @code{extra-offset} of those heads to @code{(0.5,0.75)}, shifting
+them up and right.
+
+Move the text "m.d.", but not the fingering instruction "2".
+@lilypond[verbatim,singleline]
+#(define (make-text-checker text)
+   (lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
+
+\score {    
+  \notes\relative c''' {
+    \property Voice.Stem \set #'direction = #1
+    \outputproperty #(make-text-checker "m.d.")
+      #'extra-offset = #'(-3.5 . -4.5)
+    a^2^"m.d."    
+  }
+}
+@end lilypond
+
+
+
+
+@node What to tune?
+@subsection What to tune?
+
+This all tells you how to tune grobs, but what variables are there? The
+question is not  answered in this manual (although you may encounter
+some examples.).
+
+Grob properties are tied directly to the implementation of LilyPond, and
+they are thus a moving target. Refer to the automatically generated
+documentation of the internals (available from the website).
+
+You need the following information
+
+@itemize @bullet
+@item
+which grob to modify
+@item
+which property to modify
+@item
+which context the grob comes from.
+@end itemize
+
+Included with the automatically generated documentation is a master list
+of grobs. Each one can be clicked, taking you to a overview of the
+available properties.
+
+There is also a master list of contexts. Clicking each takes you to an
+overview of the context, listing which grob types are created there.
+
+
+
+@node Text markup
+@subsection Text markup
+@cindex text markup
+@cindex markup text
+
+LilyPond has an internal mechanism to typeset texts. You can
+form text markup expressions by composing scheme expressions
+in the following way.
+
+@lilypond[verbatim]
+\score { \notes \relative c' {
+  b-#"text"
+  c-#'(bold "text")
+  d-#'(lines "one" (bold "text"))
+  e-#'(music (named "noteheads-2" "flags-u3"))
+}
+\paper { linewidth = 10.\cm; } }
+@end lilypond
+
+Normally, the Scheme markup text is stored in the @code{text} property
+of a grob.  Formally, it is defined as follows:
+
+@example
+text: string | (head? text+)
+head: markup | (markup+)
+markup-item: property | abbrev | @var{fontstyle}
+property: (@var{key} . @var{value})
+abbrev: @code{rows lines roman music bold italic named super sub text}
+@end example
+
+The markup is broken down and converted into a list of grob properties,
+which are prepended to the grop's property list.  The
+@var{key}-@var{value} pair is a grob property.
+
+The following abbreviations are currently
+defined:
+
+@table @code
+@item rows
+horizontal mode: set all text on one line (default)
+@item lines
+ vertical mode: set every text on new line
+@item roman
+ select roman font
+@item music
+ select feta font
+@item bold
+ select bold series
+@item italic
+ select italic shape
+@item named
+ lookup by character name
+@item text
+ plain text lookup (by character value)
+@item super
+ superscript
+@item sub
+ subscript
+@end table
+
+@var{fontstyle} may be any of @code{finger volta timesig mmrest mark
+script large Large dynamic}
 
 
-@quotation
-\notes @{
-  \property Staff.Custos \override #'style = #'vaticana
-  c'1 d' e' d' \break c' d' e' d'
-@}
-@end quotation
 
 @c . {Page layout}
 @node Page layout
 
 @c . {Page layout}
 @node Page layout
@@ -2420,7 +2753,7 @@ where each of the items is one of
   @item  An assignment.  The assignment must be terminated by a
        semicolon.  
 
   @item  An assignment.  The assignment must be terminated by a
        semicolon.  
 
-  @item  A context definition.  See section @ref{Context definitions} for
+  @item  A context definition.  See Section @ref{Notation contexts} for
        more information on context definitions.
 
   @item  \stylesheet  declaration.  Its syntax is
        more information on context definitions.
 
   @item  \stylesheet  declaration.  Its syntax is
@@ -2596,6 +2929,14 @@ example file @file{input/test/between-systems.ly}
 @node Sound
 @section Sound
 @cindex Sound
 @node Sound
 @section Sound
 @cindex Sound
+
+LilyPond allows MIDI output, with the purpose of proof-hearing the music
+you enter. The performance lacks lots of interesting effects, such as
+swing, articulation, slurring, tieing, etc.
+
+Also note that it is not possible to use the percussion channel
+(generally channel 10 of a MIDI file).
+
 @menu
 * MIDI block::                  
 * MIDI instrument names::       
 @menu
 * MIDI block::                  
 * MIDI instrument names::       
@@ -2807,7 +3148,8 @@ relative within transposed music, you must place an additional
 * Creating contexts::           
 * Default contexts::            
 * Context properties::          
 * Creating contexts::           
 * Default contexts::            
 * Context properties::          
-* Context definitions::         
+* Changing context definitions::  
+* Defining new contexts::       
 @end menu
 
 @c .  {Music expressions}
 @end menu
 
 @c .  {Music expressions}
@@ -2866,7 +3208,7 @@ context does not exist, it will be created.
 
 @quotation
 
 
 @quotation
 
-@lilypond[verbatim]
+@lilypond[verbatim,singleline]
 \score {
   \notes \relative c'' {
     c4 <d4 \context Staff = "another" e4> f
 \score {
   \notes \relative c'' {
     c4 <d4 \context Staff = "another" e4> f
@@ -2894,7 +3236,7 @@ notation context from their parent. Each note is a music expression, and
 as you can see in the following example, only the sequential music
 enclosing the three notes has an explicit context. 
 
 as you can see in the following example, only the sequential music
 enclosing the three notes has an explicit context. 
 
-@lilypond[verbatim]
+@lilypond[verbatim,singleline]
 \score { \notes \context Voice = goUp { c'4 d' e' } } 
 @end lilypond
 
 \score { \notes \context Voice = goUp { c'4 d' e' } } 
 @end lilypond
 
@@ -2910,7 +3252,7 @@ words, you may think of @code{\score} working like
 @end example
 
 Sequential music follows the contexts of its "children".  Take this example
 @end example
 
 Sequential music follows the contexts of its "children".  Take this example
-@lilypond
+@lilypond[verbatim, singleline]
 \score { \context Score \notes { c'4 (  d' )e' } }
 @end lilypond
 
 \score { \context Score \notes { c'4 (  d' )e' } }
 @end lilypond
 
@@ -2922,15 +3264,17 @@ music is also interpreted with the same Thread, Voice and Staff context,
 putting the notes on the same staff, in the same voice.
 
 This is a convenient mechanism, but do not expect opening chords to work
 putting the notes on the same staff, in the same voice.
 
 This is a convenient mechanism, but do not expect opening chords to work
-without @code{\context}. For every note, a separate staff
-@lilypond
+without @code{\context}. For every note, a separate staff is
+instantiated.
+
+@lilypond[verbatim, singleline]
 \score { \notes <c'4 es'> } 
 @end lilypond
 
 Of course, if the chord is preceded by a normal note in sequential
 music, the chord will be interpreted by the Thread of the preceding
 note:
 \score { \notes <c'4 es'> } 
 @end lilypond
 
 Of course, if the chord is preceded by a normal note in sequential
 music, the chord will be interpreted by the Thread of the preceding
 note:
-@lilypond
+@lilypond[verbatim,singleline]
 \score { \notes { c'4 <c'4 es'> }  }
 @end lilypond
 
 \score { \notes { c'4 <c'4 es'> }  }
 @end lilypond
 
@@ -2960,33 +3304,94 @@ example) and thus take effect in all @code{Voice} contexts.
 
 
 @c .  {Context definitions}
 
 
 @c .  {Context definitions}
-@node Context definitions
-@subsection Context definitions
+@node Changing context definitions
+@subsection Changing context definitions
 
 @cindex context definition
 @cindex translator definition
 
 
 @cindex context definition
 @cindex translator definition
 
-[todo: ]
+The most common way to define a context is by extending an existing
+context.  You can change an existing context from the paper block, by
+first initializing a translator with an existing context identifier:
+@example
+\paper @{
+  \translator @{
+    @var{context-identifier}
+  @} @}
+@end example
+Then you can add engravers, remove engravers and set context
+properties. The syntax for these operations are respectively
+@example
+ \remove @var{engravername}
+ \consists @var{engravername}
+ @var{propname} = @var{value} 
+@end example
 
 
-A notation contexts is defined by the following information
+Here @var{engravername} is a string, the name of an engraver in the
+system. @var{propname} is a string and @var{value} is a Scheme
+expression.
 
 
-@enumerate 1
-  @item  A name.
+@lilypond[verbatim,singleline]
+\score {  \notes {
+        c'4 c'4 }
+  \paper {
+    \translator  { \StaffContext
+        \consists Instrument_name_engraver;
+        instrument = #"foo"
+        \remove Clef_engraver;
+       } } }
+@end lilypond
 
 
-  @item  The LilyPond modules that do the actual conversion of music to
-       notation.  Each module is a so-called
-       @emph{engraver}
 @cindex engraver
 @cindex engraver
-.
 
 
-  @item  How these modules should cooperate, i.e. which ``cooperation
-       module'' should be used.  This cooperation module is a special
-       type of engraver.
+These type of property assignments happen before interpretation starts,
+so a @code{\property} expression will override any predefined settings.
+
+Engravers are the actual C++ modules that do the work in the
+interpretation phase.
+
+
+There are some pre-defined identifiers to simplify editing translators,
+they are defined in @file{ly/engraver.ly}.  These pre-defined
+identifiers are:
+
+@table @code
+@cindex @code{StaffContext}
+  @item @code{StaffContext}  
+    Default Staff context. 
+@cindex @code{RhythmicStaffContext}
+
+  @item @code{RhythmicStaffContext}  
+    Default RhythmicStaff context. 
+@cindex @code{VoiceContext}
+
+  @item @code{VoiceContext}  
+    Default Voice context.  
+@cindex @code{ScoreContext}
+
+  @item @code{ScoreContext}  
+    Default Score context. 
+
+@cindex @code{HaraKiriStaffContext}
+
+  @item @code{HaraKiriStaffContext}  
+    Staff context that does not print if it only contains rests. 
+    Useful for orchestral scores.@footnote{Harakiri, also called
+    Seppuku, is the ritual suicide of the Japanese Samourai warriors.}
+@end table
+
+@node Defining new contexts
+@subsection Defining new contexts
+
+If you want to build a context from scratch, you must also supply the
+following extra information:
+@itemize @bullet
+  @item  A name, specified by @code{\name @var{contextname};}.
 
 
-  @item  What other contexts the context can contain,
+  @item A cooperation engraver. This is specified by   @code{\type
+@var{typename};}.
+@end itemize
 
 
-  @item  What properties are defined.
-@end enumerate
 
 A context definition has this syntax:
 
 
 A context definition has this syntax:
 
@@ -2999,18 +3404,24 @@ A context definition has this syntax:
 
 @var{translatorinit} can be an identifier or 
 @example
 
 @var{translatorinit} can be an identifier or 
 @example
-  \type @var{typename} @code{;}
+
 @end example
 where @var{typename} is one of
 
 @end example
 where @var{typename} is one of
 
+The cooperation engraver groups other engravers, and specifies how they
+should cooperate. Choices are:
+
 @table @code
 @cindex @code{Engraver_group_engraver}
   @item @code{Engraver_group_engraver}  
     The standard cooperation engraver.
 @table @code
 @cindex @code{Engraver_group_engraver}
   @item @code{Engraver_group_engraver}  
     The standard cooperation engraver.
+
 @cindex @code{Score_engraver}
 
   @item @code{Score_engraver}  
 @cindex @code{Score_engraver}
 
   @item @code{Score_engraver}  
-    This is cooperation module that should be in the top level context.
+    This is cooperation module that should be in the top level context,
+and only the toplevel context.
+
 @cindex @code{Grace_engraver_group}
 
   @item @code{Grace_engraver_group}  
 @cindex @code{Grace_engraver_group}
 
   @item @code{Grace_engraver_group}  
@@ -3084,52 +3495,6 @@ such an identifier outside of @code{\score}, you must do
 
 @cindex paper types, engravers, and pre-defined translators
 
 
 @cindex paper types, engravers, and pre-defined translators
 
-Some pre-defined identifiers can simplify modification of
-translators.  The pre-defined identifiers are:
-
-@table @code
-@cindex @code{StaffContext}
-  @item @code{StaffContext}  
-    Default Staff context. 
-@cindex @code{RhythmicStaffContext}
-
-  @item @code{RhythmicStaffContext}  
-    Default RhythmicStaff context. 
-@cindex @code{VoiceContext}
-
-  @item @code{VoiceContext}  
-    Default Voice context.  
-@cindex @code{ScoreContext}
-
-  @item @code{ScoreContext}  
-    Default Score context. 
-
-@cindex @code{HaraKiriStaffContext}
-
-  @item @code{HaraKiriStaffContext}  
-    Staff context that does not print if it only contains rests. 
-    Useful for orchestral scores.@footnote{Harakiri, also called
-    Seppuku, is the ritual suicide of the Japanese Samourai warriors.}
-
-@end table
-
-Using these pre-defined values, you can remove or add items to the
-translator:
-
-@quotation
-
-@example 
-\paper @{
-  \translator @{
-    \StaffContext
-    \remove Some_engraver;
-    \consists Different_engraver;
-  @}
-@} 
-@end example 
-
-@end quotation
-
       
 
 
       
 
 
@@ -3141,9 +3506,6 @@ is
   @var{propname} @code{=} @var{value}
 @end example
 
   @var{propname} @code{=} @var{value}
 @end example
 
-This assignment happens before interpretation starts, so a
-@code{\property} expression will override any predefined settings.
-
 The property settings are used during the interpretation phase.  They
 are read by the LilyPond modules where interpretation contexts are
 built of.  These modules are called @emph{translators}.  Translators for
 The property settings are used during the interpretation phase.  They
 are read by the LilyPond modules where interpretation contexts are
 built of.  These modules are called @emph{translators}.  Translators for
@@ -3176,7 +3538,10 @@ called @emph{performers}.
 This section describes what you may enter at top level.
 
 
 This section describes what you may enter at top level.
 
 
-@unnumberedsubsec Score definition
+@c .   {Score}
+@subsubsection Score
+@cindex Score
+
 @cindex score definition
 
 The output is generated combining a music expression with an output
 @cindex score definition
 
 The output is generated combining a music expression with an output
@@ -3190,17 +3555,12 @@ definition.  A score block has the following syntax:
 definition is supplied, the default @code{\paper} block will be added.
 
 
 definition is supplied, the default @code{\paper} block will be added.
 
 
-@c .   {Score}
-@subsubsection Score
-@cindex Score
 
 
-@c .   {Paper}
-@subsubsection Paper
-@cindex Paper
+@c .   {Default output}
+@subsubsection Default output
 
 
-@c .   {Midi}
-@subsubsection Midi
-@cindex Midi
+Default values for the @code{\paper} and @code{\midi} block are set by
+entering such a block at top-level.
 
 @c .   {Header}
 @subsubsection Header
 
 @c .   {Header}
 @subsubsection Header
@@ -3334,22 +3694,16 @@ However, in some cases, LilyPond will also try to choose contexts, and
 use the structure of the music expression  to do so. This can have
 undesired effects: for example, LilyPond will create a separate staff
 for each note if you start a @code{\score} with a  chord:
 use the structure of the music expression  to do so. This can have
 undesired effects: for example, LilyPond will create a separate staff
 for each note if you start a @code{\score} with a  chord:
-@lilypond[verbatim,center]
+@lilypond[verbatim,center,singleline]
   \score {
     \notes <c''4 e''>
   \score {
     \notes <c''4 e''>
-    \paper {
-      linewidth = -1.;
-    }
   }
 @end lilypond
   The solution is to explicitly instantiate the context you desire.
 In this case this is typically a Voice context
   }
 @end lilypond
   The solution is to explicitly instantiate the context you desire.
 In this case this is typically a Voice context
-@lilypond[verbatim,center]
+@lilypond[verbatim,center,singleline]
   \score {
     \notes\context Voice <c''4 e''>
   \score {
     \notes\context Voice <c''4 e''>
-    \paper {
-      linewidth = -1.;
-    }
   }
 @end lilypond
 If you use @code{\context Staff} you will get separate stems for each
   }
 @end lilypond
 If you use @code{\context Staff} you will get separate stems for each
@@ -3714,229 +4068,6 @@ foo = -6
 
 
 
 
 
 
-@c . {Unsorted}
-@node Unsorted
-@section Unsorted
-
-[mucho todo]
-
-Translation?
-
-@cindex properties
-@unnumberedsubsec Translation property
-
-
-[todo: add \set/\override/\revert]
-
-
-
-@cindex output properties
-@unnumberedsubsec Output properties
-
-These allow you to tweak what is happening in the back-end
-directly. If you want to control every detail of the output
-formatting, this is the feature to use. The downside to this is that
-you need to know exactly how the backend works. Example:
-
-
-@lilypond[fragment,verbatim]
-\relative c'' { c4
-  \context Staff \outputproperty
-  #(make-type-checker 'note-head-interface)
-  #'extra-offset = #'(0.5 . 0.75)
-  <c8 e g> }
-@end lilypond
-
-This selects all note heads occurring at current staff level, and sets
-the @code{extra-offset} of those heads to @code{(0.5,0.75)}, shifting
-them up and right.
-
-Use of this feature is entirely on your own risk: if you use this, the
-result will depend very heavily on the implementation of the backend,
-which we change regularly and unscrupulously.
-
-
-Don't move the finger 2, only text "m.d." ...
-@lilypond[verbatim]
-#(define (make-text-checker text)
-   (lambda (grob) (equal? text (ly-get-elt-property grob 'text))))
-
-\score {    
-  \notes\relative c''' {
-    \property Voice.Stem \set #'direction = #1
-    \outputproperty #(make-text-checker "m.d.")
-      #'extra-offset = #'(-3.5 . -4.5)
-    a^2^"m.d."    
-  }
-  \paper { linewidth = -1.; }
-}
-@end lilypond
-
-
-@menu
-* Text markup::                 
-@end menu
-
-@node Text markup
-@subsection Text markup
-@cindex text markup
-@cindex markup text
-
-LilyPond has an internal mechanism to typeset texts: you can
-form text markup expressions by composing scheme expressions
-in the following way:
-
-@lilypond[verbatim]
-\score { \notes \relative c' {
-  b-#"text"
-  c-#'(bold "text")
-  d-#'(lines "one" (bold "text"))
-  e-#'(music (named "noteheads-2" "flags-u3"))
-}
-\paper { linewidth = 10.\cm; } }
-@end lilypond
-
-Formally, Scheme markup text is defined as follows:
-
-@example
-text: string | (head? text+)
-head: markup | (markup+)
-markup-item: property | abbrev | @var{fontstyle}
-property: (@var{key} . @var{value})
-abbrev: @code{rows lines roman music bold italic named super sub text}
-@end example
-
-The markup is broken down and converted into a list of grob properties,
-which are prepended to the grop's property list.  The
-@var{key}-@var{value} pair is a grob property.
-@ignore
-[Why is this useful?]
-
-?Snapnie: markup text is eerste item dat voldoet aan mijn gewelfdige,
-ideale idee van direct-en-eenmalig-per-item te zetten properties, ipv
-gehaspel via \property en hopen dat je property (enkel) in juiste item
-terecht gaat komen.  Heb je deze wel bewust meegemaakt:
-
-Sender: jan@appel.lilypond.org
-To: Han-Wen <hanwen@cs.uu.nl>   
-Subject: (elt) properties
-Organization: Jan at Appel
-From: janneke@gnu.org
-Date: 01 Nov 2000 10:39:10 +0100
-Message-ID: <m3og00av5t.fsf@appel.lilypond.org>
-User-Agent: Gnus/5.0807 (Gnus v5.8.7) Emacs/20.7
-MIME-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Lines: 77
-Xref: appel.lilypond.org vers:1991
-
-Hi,
-
-Wat ik vooral mis, is een koele manier om een propertie eenmalig aan
-een element te hangen.  Hoop dat je zinvol over wilt meedenken; zie
-het monster van les-nereides.  Misschien dat we 't niet moeten doen
-voor 1.4 maar wachten tot properties nog wat verder
-uitgekristalliseerd zijn?
-
-Nu moet je
-
-   \property Voice.Stem \push #'length = #'6
-   a
-   \property Voice.Stem \pop #'length
-   b
-
-waarmee je in feite zeg tegen de stem-engraver: vanaf nu aan moet je
-alle stems 6 lang maken (maakt stem); onee, doe maar weer default
-lengte.
-
-Maar dat is eigenlijk niet wat je bedoelt, wat je zou willen is net
-zo'n directe interface als wat we nu hebben voor markup text, bv. iets
-van:
-
-   a+#'(Stem::length . 6) b
-
-Bij markup text kun je direct en eenmalig een reeks properties aan een
-enkel item toevoegen; iets wat je volgens mij vaak nodig hebt.
-
-Ik zat eerst te denken aan ``request properties'': properties
-toevoegen aan request, die dan worden doorgegeven aan alle items die
-door dat request worden gemaakt.
-
-Maar misschien zuigt dat wel te vreselijk en moeten we iets van
-``volatile'' properties maken.
-
-Btw,
-
-    \property Voice.Slur \push #'dash = #1
-    \property Voice.Slur \pop #'dash
-    a()b
-    \property Voice.Slur \push #'direction = #-1
-    \property Voice.Slur \pop #'direction
-    ()c
-
-of de kluts waar ik brr van word, eigenlijk ook alleen doenbaar is
-voor wat veelgebruikte properties:
-
-    slurDotted = \property Voice.Slur \push #'dash = #1
-    slurNoDots = \property Voice.Slur \pop #'dash
-    slurUp = \property Voice.Slur \push #'direction = #1
-    slurDown = \property Voice.Slur \push #'direction = #-1
-    slurBoth = \property Voice.Slur \pop #'direction
-
-    [..]
-
-    \slurDotted\slurDown
-    a()b
-    ()c
-    \slurNoDots\slurBoth
-
-zou toch graag meer iets in trant van, als je begrijpt wat ik bedoel
-
-    Slur+#'((dash . 1) (direction . 1))
-    b () c
-    Slur-#'(dash direction)
-
-ofwel
-
-    a(+#'((dash . 1) (direction . 1))
-    )b(+#'((dash . 1) (direction . 1))
-    )c
-@end ignore
-
-The following abbreviations are currently
-defined:
-
-@table @code
-@item rows
-horizontal mode: set all text on one line (default)
-@item lines
- vertical mode: set every text on new line
-@item roman
- select roman font
-@item music
- select feta font
-@item bold
- select bold series
-@item italic
- select italic shape
-@item named
- lookup by character name
-@item text
- plain text lookup (by character value)
-@item super
- superscript
-@item sub
- subscript
-@end table
-
-
-@var{fontstyle} may be any of @code{finger volta timesig mmrest mark
-script large Large dynamic}
-
-@ignore
-[kern, raise ??]
-Wat is daarmee, zijn toch gewoon grob properties van text-interface?
-@end ignore
 
 @c .{Local emacs vars}
 @c Local variables:
 
 @c .{Local emacs vars}
 @c Local variables:
index c86ccfae3d668cbc705748676bc4ab2e58828166..2160899c590386d964f33e1355e9342019c805bf 100644 (file)
@@ -33,8 +33,8 @@ subdirectory @file{input/tutorial/}.@footnote{When we refer
 to filenames, they are relative to the top directory of the source
 package.
 @cindex file names
 to filenames, they are relative to the top directory of the source
 package.
 @cindex file names
-} We recommend that you experiment with writing Lilypond input yourself,
-to get a feel for how the program behaves.
+}. We recommend that you experiment with writing Lilypond input
+yourself, to get a feel for how the program behaves.
 
 
 @node Running LilyPond
 
 
 @node Running LilyPond
@@ -66,7 +66,7 @@ If you run Unix, proceed as follows: run lilypond on the file, i.e.,
 @example
   lilypond test
 @end example
 @example
   lilypond test
 @end example
-You will the following on your screen:
+You will see the following on your screen:
 @example
 GNU LilyPond 1.3.125.
 Now processing: `input/tutorial/test.ly'
 @example
 GNU LilyPond 1.3.125.
 Now processing: `input/tutorial/test.ly'
@@ -78,7 +78,7 @@ paper output to test.tex...
 @end example
 
 Now, run @TeX{}@footnote{@TeX{} is a text-typesetting system that is
 @end example
 
 Now, run @TeX{}@footnote{@TeX{} is a text-typesetting system that is
-especially suited for typesetting mathematics}. The result should
+especially suited for typesetting mathematics.}. The result should
 resemble this: 
 @example
 This is TeX, Version 3.14159 (Web2C 7.3.1)
 resemble this: 
 @example
 This is TeX, Version 3.14159 (Web2C 7.3.1)
@@ -101,7 +101,7 @@ To view the output, run Xdvi, i.e.
 @example
         xdvi test
 @end example
 @example
         xdvi test
 @end example
-You should will see this
+You should see the following in  a window next to some buttons.
 @lilypond
 \header {
  title = "Test";
 @lilypond
 \header {
  title = "Test";
@@ -112,7 +112,6 @@ You should will see this
   \paper { }
 } 
 @end lilypond
   \paper { }
 } 
 @end lilypond
-along with some buttons in a window.
 
 @cindex postscript, converting to
 When you're satisfied with the result, you can print it. For printing,
 
 @cindex postscript, converting to
 When you're satisfied with the result, you can print it. For printing,
@@ -132,12 +131,12 @@ This is dvips(k) 5.86 Copyright 1999 Radical Eye Soft ...
 @cindex GhostScript
 @cindex @code{lpr}
 PostScript is a page description language, similar to PDF. Some printers
 @cindex GhostScript
 @cindex @code{lpr}
 PostScript is a page description language, similar to PDF. Some printers
-can understand a postscript file directly, but the cheapers need the
-intervention of GhostScript, a PostScript   emulator that runs on your
+can understand a postscript file directly, but the cheaper ones need the
+intervention of GhostScript, an emulator that runs PostScript on your
 computer instead of your printer. Most Linux distributions nowadays have
 computer instead of your printer. Most Linux distributions nowadays have
-GhostScript running ``in the  background'', so any configured printer
-will act as a PostScript printer.  Assuming this,  the
-following command will print the  file
+GhostScript running ``in the background'', so any configured printer
+will act as a PostScript printer.  Assuming this, the following command
+will print the file
 @example
         lpr test.ps
 @end example
 @example
         lpr test.ps
 @end example
@@ -145,11 +144,11 @@ If this does not make your printer produce a page of music, then you
 should look into installing and configuring ghostscript.  Refer to
 GhostScript's website at @uref{http://www.ghostscript.com}.  
 
 should look into installing and configuring ghostscript.  Refer to
 GhostScript's website at @uref{http://www.ghostscript.com}.  
 
-There are two different routes: firstly, you can add titling to the
-output. This is done by a separate program called ly2dvi: this program
-first calls LilyPond to process the @file{.ly} file, and then runs
-@TeX{} on it to produce a @file{.dvi} file with proper margin settings
-and titling.
+There are three other routes: firstly, you can add titling to the
+output. This is done by a separate program called @file{ly2dvi}: this
+program first calls LilyPond to process the @file{.ly} file, and then
+runs @TeX{} on it to produce a @file{.dvi} file with proper margin
+settings and titling.
 
 @cindex titles, adding
 @cindex ly2dvi
 
 @cindex titles, adding
 @cindex ly2dvi
@@ -158,20 +157,27 @@ and titling.
         ly2dvi test.ly
 @end example
 After some disk-activity, you should end up with a @file{.dvi} file.
         ly2dvi test.ly
 @end example
 After some disk-activity, you should end up with a @file{.dvi} file.
-6
-Secondly, you can generate PostScript directly. This is not very useful
-currently, but here goes:
+Ly2dvi is further described in the Chapter @ref{ly2dvi}.
+
+Secondly, you can generate PostScript directly. This is  useful if you
+can not or do not want to  run @TeX{} on your system. 
+To obtain PS output, invoke LilyPond as follows:
 @cindex PostScript output
 @example
       lilypond -f ps test.ly  
 @end example
 
 @cindex PostScript output
 @example
       lilypond -f ps test.ly  
 @end example
 
-[treat FAQs here, eg. about env vars.]
+You have to set some environment variables to view or print this
+output. More information can be found in the Section @ref{Invoking
+LilyPond}.
 
 
+Finally, there is a script called lilypond-book, that allows you to
+freely mix LilyPond input with Texinfo or LaTeX input. For example, this
+manual was written using lilypond-book.
 
 @unnumberedsubsec Windows
 
 
 @unnumberedsubsec Windows
 
-[todo]
+[TODO]
 
 
 @node The first tune
 
 
 @node The first tune
diff --git a/VERSION b/VERSION
index 76280b660068c1558cfd6325af5c8d1f7ad25d6c..ab4bed8b3f0cecac44a5ebb79710b46f28cef247 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
-PATCH_LEVEL=131
-MY_PATCH_LEVEL=jcn2
+PATCH_LEVEL=132
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index f56ab3bca2b4d4a524d3b065b04359f8bf1274ed..a79e99cc6eea2059d6c47deda1a2d674f991b3a0 100755 (executable)
@@ -3,7 +3,35 @@
 
 name = 'mutopia-index'
 
 
 name = 'mutopia-index'
 
-import find
+# find.py -- deprecated in python 2.0
+import fnmatch
+import os
+
+_debug = 0
+
+_prune = ['(*)']
+
+def find(pattern, dir = os.curdir):
+        list = []
+        names = os.listdir(dir)
+        names.sort()
+        for name in names:
+                if name in (os.curdir, os.pardir):
+                        continue
+                fullname = os.path.join(dir, name)
+                if fnmatch.fnmatch(name, pattern):
+                        list.append(fullname)
+                if os.path.isdir(fullname) and not os.path.islink(fullname):
+                        for p in _prune:
+                                if fnmatch.fnmatch(name, p):
+                                        if _debug: print "skip", `fullname`
+                                        break
+                        else:
+                                if _debug: print "descend into", `fullname`
+                                list = list + find(pattern, fullname)
+        return list
+
+
 import re
 import os
 import sys
 import re
 import os
 import sys
@@ -154,7 +182,7 @@ for opt in options:
 
 dirs  = []
 for f in files:
 
 dirs  = []
 for f in files:
-       dirs = dirs + find.find ('out-www', f);
+       dirs = dirs + find ('out-www', f)
 
 if not dirs:
        dirs = ['.']
 
 if not dirs:
        dirs = ['.']
@@ -162,7 +190,7 @@ if not dirs:
 allfiles = []
 
 for d in dirs:
 allfiles = []
 
 for d in dirs:
-       allfiles = allfiles + find.find ('*.ly.txt', d)
+       allfiles = allfiles + find ('*.ly.txt', d)
 
 print allfiles
 
 
 print allfiles
 
index 143b7e2aba017a861cdb3dffa6fc80664d6baddd..84d71f989695311716824d81da4b2ff919c9c020 100755 (executable)
--- a/configure
+++ b/configure
@@ -1151,7 +1151,7 @@ fi
        PATHSEP=':'
        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
        PATHSEP=':'
        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
-       ROOTSEP='/'
+       ROOTSEP=':'
        DIRSEP='/'
        PATHSEP=':'
        LN=ln
        DIRSEP='/'
        PATHSEP=':'
        LN=ln
diff --git a/input/bugs/grace-dynamic.ly b/input/bugs/grace-dynamic.ly
new file mode 100644 (file)
index 0000000..3f0767d
--- /dev/null
@@ -0,0 +1,2 @@
+
+\score { \notes {\grace {c'_\f} d e f g}}
diff --git a/input/bugs/ss.ly b/input/bugs/ss.ly
deleted file mode 100644 (file)
index f0585ae..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-\version "1.3.129"
-\include "paper16.ly"
-\score{
-  \notes \context Staff = pr {
-         \context Voice < a b c' e'>
-  }
-  \paper{
-    \translator {
-        \StaffContext
-        StaffSymbol \override #'staff-space = #1.3
-    }
-  }
-}
-
index a7dee3a6a4bd0ae912f0c7a9d16c7b382684cd6a..9d879a06ea544774bee69fc97027abefaea52b71 100644 (file)
 
 
-\version "1.3.117";
-\include "english.ly"
-
-\header{
-texidoc="
-Multiple stanzas
-
- Tests a number of features:
- * Lyric_phrasing_engraver
- * Stanza_number_engraver
- * Automatic melismata on beamed notes
-
-";
-
-    title = "Crowned with Honour";
-    composer = "Oliver Holden (1765-1844)";
-    poet = "Thomas Kelly (1769-1855)";
-}
-
-allup =  \notes{
-       \stemUp
-       \slurUp
-        \tieUp
-       \property Voice.DynamicLineSpanner \override #'direction = #1
-       \autoBeamOff
-}
-
-alldown =  \notes{
-       \stemDown
-       \slurDown
-        \tieDown
-       \property Voice.DynamicLineSpanner \override #'direction = #-1
-       \autoBeamOff
-}
-
-Global =   \notes{
-        \key g \major;
-        \time 4/4;
-       \partial 4;
-}
-
-Soprano =  \notes \relative c' {
-       \allup
-       d4 | g g b b a g a b a g b a g( a )g % modified to test melisma align right
-
-       [a8 b] | b4 % modified to test melisma align left
-        a g b [d16 d c8] [b a] b4 % modified to test beam melisma
-%      a4 | b a g b [d8 \melisma c] \melismaEnd [b \melisma a] \melismaEnd b4
-
-       d d2 d e d4( cs8 ~ )cs d2.
-
-       b4 | d b g b [a8  g]  [a b]  a4
-%      b4 | d b g b [a8 \melisma g] \melismaEnd [a \melisma b] \melismaEnd a4
-
-       g d'2 c b4.( c8 )a4 a g2.
-}
-Alto =  \notes \relative c'{
-       \alldown
-       d4 | d d g g fs g fs g fs e g fs d2.
-       d4 | g d b g' [b8 a] [g fs] g4 fs g2 a g fs4( e8 )g fs2.
-       d4 | g g d g [fs8 e] [fs g] fs4 g f2 e d4.( d8 )d4 fs4 d2.
-}
-Tenor =  \notes \relative c{
-       \allup
-       d4 | b' b d d c  b c  d c  b d c  b2.
-       a4 | b a g b  [d8 c] [b a] b4 a  b2 c b  a   a2.
-       g4 | b d b d [c8  b] [c  d]  c4 b g2 g g4.( a8 [fs )a] c4 b2.
+       
+\score {
+\addlyrics
+  \notes \relative c'' \context Voice = duetto { \time 3/4; g2 e4 a2 f4 g2.  }
+  \lyrics \context Lyrics <
+  \context LyricsVoice = "duet-1" {
+    \property LyricsVoice . stanza = "Bert"
+    Hi, my name is bert.    }
+  \context LyricsVoice = "duet-2" {
+    \property LyricsVoice . stanza = "Ernie" 
+    Ooooo, ch\'e -- ri, je t'aime. }
+  >
+  \paper { linewidth = -1.0;}
 }
 }
-Bass =  \notes \relative c{
-       \alldown
-       d4 | g g g g d d d g d e d d g,2.
-       d'4 | g d b g' [b8 a] [g fs] g4 d g2 fs e a d,2.
-       g4 | g g g g d d d e b2 c d2. d4 g,2.
-}
-
-TheLyrics =   \lyrics <
-        {
-           \context LyricsVoice = "Soprano-1"
-           \property LyricsVoice .stanza = "1:"
-           \property LyricsVoice .stz = "(1)"
-                The4 head    that once was crowned with thorns
-                Is   crowned with glo -- ry  now;
-                A roy -- al di -- a -- dem a -- dorns
-                The might -- y Vic -- tor's  brow.
-                A roy -- al di -- a -- dem a -- dorns
-                The might -- y Vic -- tor's  brow.
-        }
-        {
-           \context LyricsVoice = "Soprano-2"
-           \property LyricsVoice .stanza = "2:"
-           \property LyricsVoice .stz = "(2)"
-                The4 high -- est place that heav'n af -- fords
-                Is His by sov -- 'reign  right;
-                The King of kings, the Lord of lords,
-                He reigns in glo -- ry  bright,
-                The King of kings, the Lord of lords, 
-                He reigns in glo -- ry  bright.
-        }
-        {
-           \context LyricsVoice = "Soprano-3"
-           \property LyricsVoice .stanza = "3:"
-           \property LyricsVoice .stz = "(3)"
-                The joy of all who dwell a -- bove,
-                The joy of saints be --  low,
-                To4 whom He man -- i -- fests His love,
-                And grants His name to  know,
-                To4 whom He man -- i -- fests His love,
-                And grants His name to4  know.
-        }
->
-
 
 
-\score{
-  \context ChoirStaff
-    \notes
-    <
-      \property Score.barNumberScriptPadding = #10.0
-      \context Staff = "treblestaff"{
-        <
-         \context Voice = "Soprano" { }
-         \context Voice = "Alto" { }
-        >
-      }
-      \context Lyrics = mainlyrics { }
-      \context Staff = "treblestaff"{
-       <
-         \Global
-         \addlyrics { \context Voice = "Soprano" \Soprano }
-           { \context Lyrics = mainlyrics \TheLyrics }
-         \context Voice = "Alto"  \Alto
-        >
-       \bar "|.";
-      }
-      \context Staff = "bassstaff"{
-        \clef "bass";
-       <
-         \context Voice = "Tenor" { \Tenor }
-         \context Voice = "Bass"  { \Bass }
-       >
-        \bar "|.";
-      }
-    >
-
-   \paper {
-      \translator{
-       \VoiceContext
-       automaticMelismata = ##t;
-       noAutoBeaming = ##t;
-        \remove   "Auto_beam_engraver";
-      }
-
-   }
-}
index dfb79e812b60cc55f852988c4145a5249c8ab93c..5df19061aad3e580d2ec1f6c28a4c8c5bbc7e7c9 100644 (file)
@@ -26,7 +26,7 @@ Align_interface::alignment_callback (SCM element_smob, SCM axis)
   Grob * par = me->parent_l (ax);
   if (par && !to_boolean (par->get_grob_property ("alignment-done")))
     {
   Grob * par = me->parent_l (ax);
   if (par && !to_boolean (par->get_grob_property ("alignment-done")))
     {
-      Align_interface::align_to_extents (par, ax);
+      Align_interface::align_elements_to_extents (par, ax);
     }
   return gh_double2scm (0.0);
 }
     }
   return gh_double2scm (0.0);
 }
@@ -81,7 +81,7 @@ Align_interface::align_to_fixed_distance (Grob *me , Axis a)
   from the outside by setting minimum-space and extra-space in its
   children */
 void
   from the outside by setting minimum-space and extra-space in its
   children */
 void
-Align_interface::align_to_extents (Grob * me, Axis a)
+Align_interface::align_elements_to_extents (Grob * me, Axis a)
 {
   me->set_grob_property ("alignment-done", SCM_BOOL_T);
   
 {
   me->set_grob_property ("alignment-done", SCM_BOOL_T);
   
@@ -139,15 +139,30 @@ Align_interface::align_to_extents (Grob * me, Axis a)
     }
   
  
     }
   
  
-  Real where_f=0;
+  /*
+    Read self-alignment-X and self-alignment-Y. This may seem like
+    code duplication. (and really: it is), but this is necessary to
+    prevent ugly cyclic dependencies that arise when you combine
+    self-alignment on a child with alignment of children.
+  */
+
+  String s ("self-alignment-");
+
+  s +=  (a == X_AXIS) ? "X" : "Y";
+
+  SCM align (me->get_grob_property (s.ch_C()));
+     
   Array<Real> translates ;
   Array<Real> translates ;
+  Interval total;
+  Real where_f=0;
+  
   for (int j=0 ;  j < elems.size(); j++) 
     {
       Real dy = 0.0;
       dy = - stacking_dir * dims[j][-stacking_dir];
       if (j)
        dy += stacking_dir * dims[j-1][stacking_dir];
   for (int j=0 ;  j < elems.size(); j++) 
     {
       Real dy = 0.0;
       dy = - stacking_dir * dims[j][-stacking_dir];
       if (j)
        dy += stacking_dir * dims[j-1][stacking_dir];
-      
+
       if (j)
        {
          dy = (dy >? threshold[SMALLER] )
       if (j)
        {
          dy = (dy >? threshold[SMALLER] )
@@ -155,12 +170,19 @@ Align_interface::align_to_extents (Grob * me, Axis a)
        }
 
       where_f += stacking_dir * dy;
        }
 
       where_f += stacking_dir * dy;
+      total.unite ( dims[j] +   where_f);
       translates.push (where_f);
     }
 
       translates.push (where_f);
     }
 
+  
+
+  Grob * align_center = unsmob_grob (align);
+  Real center_offset = 0.0;
+  
   /*
     also move the grobs that were empty, to maintain spatial order. 
    */
   /*
     also move the grobs that were empty, to maintain spatial order. 
    */
+  Array<Real> all_translates;
   if (translates.size  ())
     {
       int i =0;
   if (translates.size  ())
     {
       int i =0;
@@ -172,11 +194,20 @@ Align_interface::align_to_extents (Grob * me, Axis a)
            {
              w = translates[i++];
            }
            {
              w = translates[i++];
            }
-         all_grobs[j]->translate_axis (w, a);
-
+         if (all_grobs[j] == align_center)
+           center_offset = w;
+         all_translates .push (w);
          j++;
        }
     }
          j++;
        }
     }
+
+  if (isdir_b  (align))
+    {
+      center_offset = total.linear_combination (gh_scm2double (align));
+    }
+
+  for (int j = 0 ;  j < all_grobs.size (); j++)
+    all_grobs[j]->translate_axis (all_translates[j] - center_offset, a);
 }
 
 Axis
 }
 
 Axis
index 057ea369457d3236f043768ab698f6b3a16841b0..f17922a0179335610024ca71ad2dd4fc8d29b1a2 100644 (file)
@@ -110,12 +110,7 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
          SCM edge_sym = ly_symbol2scm ("Left_edge_item");
          Item * edge = new Item (get_property ("LeftEdge"));
 
          SCM edge_sym = ly_symbol2scm ("Left_edge_item");
          Item * edge = new Item (get_property ("LeftEdge"));
 
-         /*
-           We must have left-edge in the middle.  Instrument-names
-           are left to left-edge, so they don't enter the staff.
-         */
-         align_l_->set_grob_property ("self-alignment-X", edge->self_scm ());
-         
+        
 
          /*
            If the element is empty, it will be ignored in the break
 
          /*
            If the element is empty, it will be ignored in the break
@@ -125,8 +120,12 @@ Break_align_engraver::acknowledge_grob (Grob_info inf)
          */
          edge->set_extent_callback (Grob::point_dimension_callback_proc, X_AXIS);
          
          */
          edge->set_extent_callback (Grob::point_dimension_callback_proc, X_AXIS);
          
+         /*
+           We must have left-edge in the middle.  Instrument-names
+           are left to left-edge, so they don't enter the staff.
+         */
          align_l_->set_grob_property ("self-alignment-X", edge->self_scm ());
          align_l_->set_grob_property ("self-alignment-X", edge->self_scm ());
-
+         
          announce_grob (edge, 0);
          column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm ());
        }
          announce_grob (edge, 0);
          column_alist_ = scm_assoc_set_x (column_alist_, edge_sym, edge->self_scm ());
        }
index 36f536ba0fd4d2313b312feff9d9c26ae6e2abbf..4318f0b78d534e5e058987f08e5cf276494c7043 100644 (file)
@@ -64,6 +64,11 @@ Break_align_interface::self_align_callback (SCM element_smob, SCM axis)
       me->set_grob_property ("self-alignment-X", gh_int2scm (RIGHT));
     }
 
       me->set_grob_property ("self-alignment-X", gh_int2scm (RIGHT));
     }
 
+  /*
+    Force break alignment itself to be done first, in the case
+   */
+  
+  
   return Side_position::aligned_on_self (element_smob, axis);  
 }
 
   return Side_position::aligned_on_self (element_smob, axis);  
 }
 
@@ -169,7 +174,7 @@ Break_align_interface::do_alignment (Grob *me)
   /*
     Force callbacks for alignment to be called   
   */
   /*
     Force callbacks for alignment to be called   
   */
-  Align_interface::align_to_extents (me, X_AXIS);
+  Align_interface::align_elements_to_extents (me, X_AXIS);
 
   Real pre_space = elems[0]->relative_coordinate (column, X_AXIS);
 
 
   Real pre_space = elems[0]->relative_coordinate (column, X_AXIS);
 
@@ -199,10 +204,33 @@ Break_align_interface::do_alignment (Grob *me)
       stretch_distance = spring_len;
     }
 
       stretch_distance = spring_len;
     }
 
+  
   /*
     Hint the spacing engine how much space to put in.
 
     The pairs are in the format of an interval (ie. CAR <  CDR).
   /*
     Hint the spacing engine how much space to put in.
 
     The pairs are in the format of an interval (ie. CAR <  CDR).
+  */
+  /*
+    UGH UGH UGH
+
+    This is a side effect, and there is no guarantee that this info is
+    computed at a "sane" moment.
+
+    (just spent some time tracking a bug that was caused by this info
+    being written halfway:
+
+    self_alignment_callback (*)
+    -> child->relative_coordinate (self)
+    -> break_alignment
+    -> child->relative_coordinate (column)
+
+    the last call incorporates the value that should've been computed
+    in (*), but--of course-- is not yet.
+
+    The result is that an offsets of align_elements_to_extents () are
+    not compensated for, and spring_len is completely off.
+
+    
   */
   column->set_grob_property ("extra-space",
                            scm_cons (gh_double2scm (pre_space),
   */
   column->set_grob_property ("extra-space",
                            scm_cons (gh_double2scm (pre_space),
index 223a7303bb5e21fc89da37dc1c99612cc7f42b59..2aee3603d13b643874daf05d7cea6f0bd53c333d 100644 (file)
@@ -117,7 +117,6 @@ Dynamic_engraver::try_music (Music * m)
            It will disappear by itself when stop_translation_timestep
            () finds that there is nothing to support anymore.  */
          
            It will disappear by itself when stop_translation_timestep
            () finds that there is nothing to support anymore.  */
          
-         line_spanner_ = 0;
          if (cresc_p_)
            cresc_p_->suicide ();
          cresc_p_ = 0;
          if (cresc_p_)
            cresc_p_->suicide ();
          cresc_p_ = 0;
index 94d60926c031ba95fe7b5e10250a2648615405d8..643bd531751c77ea2b80ea5811c4ed77cd92d6a4 100644 (file)
@@ -18,7 +18,7 @@ struct Align_interface {
   DECLARE_SCHEME_CALLBACK(alignment_callback, (SCM element, SCM axis));
   DECLARE_SCHEME_CALLBACK(fixed_distance_alignment_callback, (SCM element, SCM axis));
   static void align_to_fixed_distance (Grob*,Axis a);
   DECLARE_SCHEME_CALLBACK(alignment_callback, (SCM element, SCM axis));
   DECLARE_SCHEME_CALLBACK(fixed_distance_alignment_callback, (SCM element, SCM axis));
   static void align_to_fixed_distance (Grob*,Axis a);
-  static void align_to_extents (Grob*,Axis a);
+  static void align_elements_to_extents (Grob*,Axis a);
   static void set_axis (Grob*,Axis);
   static Axis axis (Grob*) ;
   static void add_element (Grob*,Grob*, SCM callback);
   static void set_axis (Grob*,Axis);
   static Axis axis (Grob*) ;
   static void add_element (Grob*,Grob*, SCM callback);
index b35335cc718c44925289a9c6f1c94e33503fa403..cad76eb68d3e730c94f46ae87e5eece4c380edc2 100644 (file)
@@ -1138,7 +1138,7 @@ shorthand_command_req:
 
 
 verbose_command_req:
 
 
 verbose_command_req:
-       COMMANDSPANREQUEST bare_int STRING {
+       COMMANDSPANREQUEST bare_int STRING { /*TODO: junkme */
                Span_req * sp_p = new Span_req;
                sp_p-> set_span_dir ( Direction($2));
                sp_p->set_mus_property ("span-type",$3);
                Span_req * sp_p = new Span_req;
                sp_p-> set_span_dir ( Direction($2));
                sp_p->set_mus_property ("span-type",$3);
index 7633af05f4a20611986733481c613c91d71d8747..f144ba137e4d47fc2522cfba3511afe8136361dc 100644 (file)
@@ -458,8 +458,6 @@ Stem::dim_callback (SCM e, SCM ax)
 }
 
 
 }
 
 
-const Real ANGLE = 20* (2.0*M_PI/360.0); // ugh! Should be settable.
-
 
 MAKE_SCHEME_CALLBACK(Stem,brew_molecule,1);
 
 
 MAKE_SCHEME_CALLBACK(Stem,brew_molecule,1);
 
@@ -479,10 +477,15 @@ Stem::brew_molecule (SCM smob)
 
   Real dy = Staff_symbol_referencer::staff_space (me)/2.0;
   Real head_wid = 0;
 
   Real dy = Staff_symbol_referencer::staff_space (me)/2.0;
   Real head_wid = 0;
-  
+
+  Real angle =0.0;
   if (Grob *hed = support_head (me))
   if (Grob *hed = support_head (me))
-    head_wid = hed->extent (hed,X_AXIS).length ();
-  stem_y[Direction(-d)] += d * head_wid * tan(ANGLE)/(2*dy);
+    {
+      head_wid = hed->extent (hed,X_AXIS).length ();
+
+      angle = gh_scm2double (hed->get_grob_property ("attachment-angle"));
+    }
+  stem_y[Direction(-d)] += d * head_wid * tan(angle)/(2*dy);
   
   if (!invisible_b (me))
     {
   
   if (!invisible_b (me))
     {
@@ -502,6 +505,9 @@ Stem::brew_molecule (SCM smob)
   return mol.smobbed_copy ();
 }
 
   return mol.smobbed_copy ();
 }
 
+/*
+  move the stem to right of the notehead if it is up.
+ */
 MAKE_SCHEME_CALLBACK(Stem,off_callback,2);
 SCM
 Stem::off_callback (SCM element_smob, SCM )
 MAKE_SCHEME_CALLBACK(Stem,off_callback,2);
 SCM
 Stem::off_callback (SCM element_smob, SCM )
@@ -518,7 +524,7 @@ Stem::off_callback (SCM element_smob, SCM )
       
       Real rule_thick = gh_scm2double (me->get_grob_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
       Direction d = get_direction (me);
       
       Real rule_thick = gh_scm2double (me->get_grob_property ("thickness")) * me->paper_l ()->get_var ("stafflinethickness");
       Direction d = get_direction (me);
-      r = head_wid[d] - d * rule_thick ;
+      r = head_wid[d] - d * rule_thick * 0.5;
     }
   return gh_double2scm (r);
 }
     }
   return gh_double2scm (r);
 }
index 9190111b3449b485f18f6a339b3a3657b10774af..cebdb1a2820b68fb02311efeab04f9979993cbd4 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
 Begin3
 Title: LilyPond
-Version: 1.3.131
-Entered-date: 24FEB01
+Version: 1.3.132
+Entered-date: 26FEB01
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.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
 Description: @BLURB@
 Keywords: music notation typesetting midi fonts engraving
 Author: hanwen@cs.uu.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
-       1000k lilypond-1.3.131.tar.gz 
+       1000k lilypond-1.3.132.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.3.131.tar.gz 
+       1000k lilypond-1.3.132.tar.gz 
 Copying-policy: GPL
 End
 Copying-policy: GPL
 End
index 08f2e52e8b7bf27a7d1fd23f32670193753a46e0..db222e14efb48b0d1825dd0a44bf96119ef10f3f 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
 %define info yes
 
 Name: lilypond
-Version: 1.3.131
+Version: 1.3.132
 Release: 1
 License: GPL
 Group: Applications/Publishing
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.131.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.132.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 # Icon: lilypond-icon.gif
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 # Icon: lilypond-icon.gif
index 34eb038cba97b3f3edb1274e00299af24cb0ea30..d1a656133d7b995c8b0325819127b312d73c47e2 100644 (file)
@@ -11,9 +11,6 @@ clarinettiStaff = \context Staff = clarinetti <
          "2 Clarinetti" (rows "(B" ,text-flat ")"))
        
        \property Staff.instr = #`(lines "Cl."  (rows "(B" ,text-flat ")"))
          "2 Clarinetti" (rows "(B" ,text-flat ")"))
        
        \property Staff.instr = #`(lines "Cl."  (rows "(B" ,text-flat ")"))
-
-       % urg: can't; only My_midi_lexer:<non-static> () parses pitch?
-       %\property Staff.transposing = "bes"
        \property Staff.transposing = #-2
        
        \Time
        \property Staff.transposing = #-2
        
        \Time
index 0bdc166596ee3652565bece3c2bdc5079a45793e..b4fe792cc642cac05b41888069cdfdcc24a84021 100644 (file)
@@ -11,9 +11,6 @@ corniStaff = \context Staff = corni <
          "2 Corni" (rows "(E" ,text-flat ")"))
        
        \property Staff.instr = #`(lines "Cor."  (rows "(E" ,text-flat ")"))
          "2 Corni" (rows "(E" ,text-flat ")"))
        
        \property Staff.instr = #`(lines "Cor."  (rows "(E" ,text-flat ")"))
-
-       % urg: can't; only My_midi_lexer:<non-static> () parses pitch?
-       %\property Staff.transposing = "es"
        \property Staff.transposing = #3
        \Time
        \notes { \key c \major; }
        \property Staff.transposing = #3
        \Time
        \notes { \key c \major; }
index 7e814f043921df7c81c276c64702a2d92dd86efc..5c9e37c15137921e50e9d8cff8b91def71f59d0f 100644 (file)
@@ -87,7 +87,6 @@
                (breakable . #t)
                (stacking-dir . 1)
                (axes 0)
                (breakable . #t)
                (stacking-dir . 1)
                (axes 0)
-               (X-offset-callbacks . (,Break_align_interface::self_align_callback))
                (space-alist . ,default-break-align-space-alist) 
                (meta . ,(grob-description "BreakAlignment"
                        axis-group-interface align-interface
                (space-alist . ,default-break-align-space-alist) 
                (meta . ,(grob-description "BreakAlignment"
                        axis-group-interface align-interface
        (NoteHead . (
                (style . default)
                (molecule-callback . ,Note_head::brew_molecule)
        (NoteHead . (
                (style . default)
                (molecule-callback . ,Note_head::brew_molecule)
-               (Y-offset-callbacks  . (,Staff_symbol_referencer::callback)) 
+               (Y-offset-callbacks  . (,Staff_symbol_referencer::callback))
+               (attachment-angle . ,(* 20/360 3.14159))
                (meta . ,(grob-description  "NoteHead"
                        rhythmic-head-interface font-interface 
                        note-head-interface ))
                (meta . ,(grob-description  "NoteHead"
                        rhythmic-head-interface font-interface 
                        note-head-interface ))
index 67f74adc87eb247dedc000983577d087d5bd6483..0430b0f73e582db87e768f4973c05c8edaf9fdde 100644 (file)
@@ -37,6 +37,8 @@ This procedure is called (using dependency resolution) after line breaking. Retu
 (grob-property-description 'arithmetic-multiplier number? "see @ref{spacing-spanner-interface}.")
 (grob-property-description 'attachment pair? "cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where both types may be alongside-stem, stem, head or loose-end.")
 
 (grob-property-description 'arithmetic-multiplier number? "see @ref{spacing-spanner-interface}.")
 (grob-property-description 'attachment pair? "cons of symbols, '(LEFT-TYPE . RIGHT-TYPE), where both types may be alongside-stem, stem, head or loose-end.")
 
+(grob-property-description 'attachment-angle number? "Where does the stem
+attach to the notehead?")
 (grob-property-description 'attachment-offset pair? "cons of offsets,
 '(LEFT-offset . RIGHT-offset).  This offset is added to the
 attachments to prevent ugly slurs.  [fixme: we need more documentation here].
 (grob-property-description 'attachment-offset pair? "cons of offsets,
 '(LEFT-offset . RIGHT-offset).  This offset is added to the
 attachments to prevent ugly slurs.  [fixme: we need more documentation here].
@@ -115,7 +117,11 @@ Align_interface::center_on_element). .")
 (grob-property-description 'expand-limit integer? "maximum number of measures expanded in church rests.")
 (grob-property-description 'extra-extent-X number-pair? "enlarge in X dimension by this much, measured in staff space.")
 (grob-property-description 'extra-extent-Y number-pair? "see @code{extra-extent-Y}.")
 (grob-property-description 'expand-limit integer? "maximum number of measures expanded in church rests.")
 (grob-property-description 'extra-extent-X number-pair? "enlarge in X dimension by this much, measured in staff space.")
 (grob-property-description 'extra-extent-Y number-pair? "see @code{extra-extent-Y}.")
-(grob-property-description 'extra-offset number-pair? "pair of reals (a cons) forcing an extra offset   before outputting.")
+(grob-property-description 'extra-offset number-pair? "pair of reals
+(a cons) forcing an extra offset before outputting.
+@code{extra-offset} is added just before `printing' the grob, so the
+typesetting engine is completely oblivious to it.
+")
 (grob-property-description 'extra-space number-pair? "pair of distances (cons LEFT RIGHT).")
 (grob-property-description 'extremity-offset-alist list? "an alist (attachment stem-dir*dir slur-dir*dir) -> offset.  The offset adds to the centre of the notehead, or stem.")
 
 (grob-property-description 'extra-space number-pair? "pair of distances (cons LEFT RIGHT).")
 (grob-property-description 'extremity-offset-alist list? "an alist (attachment stem-dir*dir slur-dir*dir) -> offset.  The offset adds to the centre of the notehead, or stem.")
 
index e7253de63f084ae1ab491e50345c0c037127cb14..d6571b3a80a7715eba00977bf5c1c7bfe71797da 100644 (file)
@@ -217,7 +217,7 @@ object."
    'note-head-interface
    "Note head"
    '(
    'note-head-interface
    "Note head"
    '(
-    style 
+    style  attachment-angle
     )
    ))
 
     )
    ))
 
index 1f0e15218cbcf6f66cbc06b3776ed5d577afaabb..754ab1cc00e77ab8e6578b81cc6d6ebd31029ddb 100644 (file)
@@ -744,12 +744,8 @@ either unison, unisilence or soloADue is set"
     (engraver-description
      "Tuplet_engraver"
      "Catch Time_scaled_music and generate appropriate bracket  "
     (engraver-description
      "Tuplet_engraver"
      "Catch Time_scaled_music and generate appropriate bracket  "
-     '(
-       TupletBracket)
-     '(
-      tupletSpannerDuration
-      tupletInvisible
-      )))
+     '( TupletBracket)
+     '(tupletNumberFormatFunction tupletSpannerDuration tupletInvisible)))
 
 
    (cons
 
 
    (cons
index 610f63a2988075fe5ecbcaed8ae27304af9b8176..3c62246ac1f3d0e206599bee8c2ce45a76d5e90a 100644 (file)
@@ -152,7 +152,13 @@ Staff.defaultBarType will have no effect.
 if they change.
 ")
 (translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
 if they change.
 ")
 (translator-property-description 'explicitClefVisibility procedure? "visibility-lambda function for clef changes.")
-(translator-property-description 'explicitKeySignatureVisibility procedure? "visibility-lambda function for explicit Key changes.")
+
+(translator-property-description 'explicitKeySignatureVisibility
+procedure? "visibility-lambda function for explicit Key changes;
+\override of #'visibility-lambda will set the visibility for normal
+(ie. at the start of the line) key signatures.")
+
+
 (translator-property-description 'followThread boolean?
                                 "if set, note heads are tracked  across staff switches by a thin line")
 (translator-property-description 'forceClef boolean? "Show clef symbol, even if it hasn't changed.")
 (translator-property-description 'followThread boolean?
                                 "if set, note heads are tracked  across staff switches by a thin line")
 (translator-property-description 'forceClef boolean? "Show clef symbol, even if it hasn't changed.")
index 0655a4f84e2816fff5d45ec9ee0ecc92c6984142..5586f5f36dc0a7441458bb4725dc330173c173f8 100755 (executable)
@@ -1137,7 +1137,7 @@ fi
        PATHSEP=':'
        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
        PATHSEP=':'
        INSTALL="\$(SHELL) \$(stepdir)/../bin/install-dot-exe.sh -c"
     else
-       ROOTSEP='/'
+       ROOTSEP=':'
        DIRSEP='/'
        PATHSEP=':'
        LN=ln
        DIRSEP='/'
        PATHSEP=':'
        LN=ln