]> git.donarmstrong.com Git - lilypond.git/commitdiff
release: 1.3.128 release/1.3.128
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 4 Feb 2001 22:57:49 +0000 (23:57 +0100)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sun, 4 Feb 2001 22:57:49 +0000 (23:57 +0100)
============
* Mutopia preparations and Coriolan fixes.

* Small beam cleanup, changed y-position-hs,height-hs user overrides to
  staff-position,height (height:name suggestions?), now in staff-spaces.

* Beam (y, dy) calculations now as list of scm functions.

* Added cleaned-up excerpt from Coriolan for tutorial.

* Bugfix: beam looks at smallest gap for auto knees.

* Property-description-fix: allow auto-knee-gap to be set to false.

* Small doco fixes.

* Bugfix: repeats without alternatives.

1.3.127.

31 files changed:
CHANGES
Documentation/user/bugs.itexi
Documentation/user/convertors.itely
Documentation/user/internals.itely
Documentation/user/invoking.itexi
Documentation/user/lilypond.tely
Documentation/user/literature.itely
Documentation/user/ly2dvi.itexi
Documentation/user/macros.itexi
Documentation/user/refman.itely
Documentation/user/tricks.itely
Documentation/user/tutorial.itely
VERSION
input/bugs/textstyle.ly [new file with mode: 0644]
input/test/coriolan-margin.ly
input/test/mark.ly
input/test/orchestscore.ly
input/tutorial/menuet.ly
input/tutorial/orchestral.ly [deleted file]
lily/chord-tremolo-engraver.cc
lily/lily-guile.cc
lily/mark-engraver.cc
lily/moment.cc
lily/parser.yy
lily/side-position-interface.cc
lily/stem-engraver.cc
lily/stem-tremolo-engraver.cc [new file with mode: 0644]
ly/engraver.ly
make/out/lilypond.lsm
make/out/lilypond.spec
scripts/ly2dvi.py

diff --git a/CHANGES b/CHANGES
index b84e4d35aa1a89ef5b89533992d546772cfc3d80..fc3f3695372358a0a3d358faa378997a80b80fcd 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,17 +1,10 @@
-1.3.127.jcn4
-============
-
-* Mutopia preparations and Coriolan fixes.
-
 1.3.127.jcn3
 ============
+* Mutopia preparations and Coriolan fixes.
 
 * Small beam cleanup, changed y-position-hs,height-hs user overrides to
   staff-position,height (height:name suggestions?), now in staff-spaces.
 
-1.3.127.jcn2
-============
-
 * Beam (y, dy) calculations now as list of scm functions.
 
 * Added cleaned-up excerpt from Coriolan for tutorial.
 
 * Property-description-fix: allow auto-knee-gap to be set to false.
 
-1.3.127.jcn1
-============
-
 * Small doco fixes.
 
-* Bugfix: no alternatives.
+* Bugfix: repeats without alternatives.
 
-1.3.126.jcn2
+1.3.127.uu3
 ============
 
+* Bugfix: staccato dot on outer staff lines.
+
+* Documentation: lots of updates and revisions.
+
+* \repeat tremolo for single notes, \repeat tremolo 4 c16
+produces the same effect as c4:16
+
+1.3.126.mb1
+===========
+
+* ly2dvi: bugfix --number.
+Added header field latexpackages, see input/test/orchestscore.ly
+
+* \mark: add possibility to use font selection markup, see input/test/mark.ly
+
+1.3.127
+=======
+
 * Grand Refman restructuring, featuring outline mode.
 
 * Fixed missing menus and cross references.
index 1b414e2a0084be14f7d8f8ebebb1fdbdb449b68f..206b56b704b1860a74797be471029600a8c87378 100644 (file)
@@ -19,9 +19,6 @@ verify your problem.
 @item which LilyPond version you use. Without this, we can not verify
 your problem.
 
-
-This information tells us if you've found a new bug, or an old one.
-
 @item A description of the platform you use (i.e., operating system,
 system libraries, whether you downloaded a binary release)
 
index 5d7a0523493eed5b2d644597f5c81429314599a1..92848556d9e9a2c1cf3e3de9cf37e7f9445d6bb2 100644 (file)
@@ -8,12 +8,24 @@
 Midi2ly translates a MIDI input file to a LilyPond source file.
 Midi2ly is part of the GNU LilyPond music typesetting package.
 
+
+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.
+
+Hackers who know about signal processing are invited to write  a more
+robust midi2ly.
+
 @subsection Invoking midi2ly
 
 @example
         midi2ly [options] midi-file
 @end example
 
+@unnumberedsec Options
+
 @table @code
 @item -b, --no-quantify,
     Write exact durations, e.g.: `a4*385/384'.
@@ -69,7 +81,7 @@ version information
 @end table
 
 Enigma Transport Format is a format used by Coda Music Technology's
-Finale product. This program will convert a subset of ETF to a
+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
index aaf03d8da616978d53d4f3bf0ee0f4961d93cc7a..3f37cc89b7c06c0e62f9ea5d2509c1110937fcfa 100644 (file)
@@ -67,8 +67,11 @@ The lines and horizontal positions of the columns are determined.
 
 @item Breaking
 
-Relations between all grobs are modified to reflect line breaks. See
-also @ref{Pointer substitution}.
+Relations between all grobs are modified to reflect line breaks: When a
+spanner, eg. a slur, crosses a line-break, then the spanner is "broken
+into pieces", for every line that the spanner is in, a copy of the grob
+is made. A substitution process redirects all grob-reference so that
+spanner grob will only reference other grobs in the same line.
 
 @item Outputting:
 
@@ -117,13 +120,16 @@ how grobs work.
 * Callbacks::                  
 * Setting grob properties::    
 * Items and Spanners::         
-* Pointer substitution::       
 * Grob Scheme functions::      
 @end menu
 
+
+
 @node What is a grob?
 @subsection What is a grob?
 
+[TODO: document/explain interfaces]
+
 In music notation, lots of symbols are related in some way.  You can
 think of music notation as a graph where nodes are formed by the
 symbols, and the arcs by their relations. A grob is node in that
@@ -147,7 +153,7 @@ to. Whenever the note head is moved, the staccato dot moves along
 automatically.
 
 If you keep following offset reference points, you will always end up at
-the root-object. This root object is called @rgrob{Line_of_score}, and it
+the root-object. This root object is called @code{Line_of_score}, and it
 represents a system (ie. a line of music).
 
 All grobs carry a set of grob-properties.  In the Stem example above,
@@ -157,17 +163,17 @@ that draws the symbol (@code{Stem::brew_molecule}) uses the value of
 appearance of a grob is determined solely by the values of its
 properties.
 
-Often, a grob also is associated with a symbol. On the other hand,
-Some grobs do not print any symbols, but take care of grouping
-objects. For example, there is a separate grob that stacks staffs
-vertically, so they are not printed in overstrike. The
-@rgrob{NoteCollision} is another example of an abstract grob.  It only
-moves around chords, but doesn't print anything.
+Often, a grob also is associated with a symbol. However, some
+grobs do not print any symbols, but take care of grouping objects. For
+example, there is a separate grob that stacks staffs vertically, so they
+are not printed in overstrike. The @code{NoteCollision} is another
+example of an abstract grob.  It only moves around chords, but doesn't
+print anything.
 
-A complete list of grob types is found in
+A complete list of grob types is found in 
 @ref{(lilypond-internals)LilyPond backend}
 
-Grobs are created in the "Interpreting music" phase, by things in
+Grobs are created in the "Interpreting music" phase, by objects in
 LilyPond called engravers.  In this phase of the translation, a load of
 grobs are created, and they are linked into a giant network of objects.
 This network of grobs forms the "specification" of the print
@@ -187,7 +193,7 @@ direction.
 Suppose you have the following code in a .ly file.
 @example
         #(define (my-callback gr axis)
-                (*  2.0 (get-gr-property grob 'direction))
+                (*  2.0 (get-grob-property gr 'direction))
         )
 
 ....
@@ -214,17 +220,17 @@ Offset callbacks can be stacked, ie.
 
 The callbacks will be executed in the order callback3 callback2
 callback1. This is used for quantized positioning: the staccato dot is
-above or below a note head, and it must not be on a staff-line.
-
-To achieve this, for the staccato there are two callbacks: one callback
+above or below a note head, and it must not be on a staff-line.  To
+achieve this, for the staccato there are two callbacks: one callback
 that positions the grob above or below the note head, and one callback
 that rounds the Y-position of the grob to the nearest open space.
 
 Similarly, the size of a grob are determined through callbacks, settable
-with grob properties @code{X-extent-callback} and @code{Y-extent-callback}.
-There can be only one extent-callback for each axis. No callback (value #f)
-means: "empty in this direction". If you fill in a pair, that pair
-hard-codes the extent in that coordinate.
+with grob properties @code{X-extent-callback} and
+@code{Y-extent-callback}.  There can be only one extent-callback for
+each axis. No callback (Scheme value @code{#f}) means: "empty in this
+direction". If you fill in a pair of numbers, that pair hard-codes the
+extent in that coordinate.
 
 
 @node Setting grob properties
@@ -340,15 +346,6 @@ the outcome of the visibility-lambda. This is a function taking a
 direction (-1, 0 or 1) and returns a cons of booleans, signifying wether
 this grob should be transparent and have no extent.
 
-@node Pointer substitution
-@unnumberedsubsec Pointer substitution
-
-
-Symbols that cross line-breaks (such as slurs) cause some more
-complications. When a  spanner crosses a line-break, then the spanner is
-"broken into pieces", for every line that the spanner is in, a copy of
-the grob is made. A substitution process redirects all grob-reference
-so that spanner grob will only reference other grobs in the same line.
 
 @node Grob Scheme functions
 @unnumberedsubsec Grob Scheme functions
@@ -360,29 +357,34 @@ will return @code{'()} (end-of-list) if @var{g} doesn't have @var{sym} set.
 @end  defun
 
 @defun ly-set-grob-property g sym val
+Set @var{sym} in grob @var{g} to value @var{val}
 @end defun
 
 @defun ly-get-spanner-bound spanner dir
+Get one of the bounds of @var{spanner}. @var{dir} may be @code{-1} for
+left, and @code{1} for right.
 @end defun
 
 @defun ly-grob? g
+Typecheck: is @var{g} a grob?
 @end defun
 
 @node Duration
 @section Duration
 
-@menu
-@end menu
 @defun make-duration length dotcount
 
 @var{length} is the negative logarithm (base 2) of the duration:
 1 is a half note, 2 is a quarter note, 3 is an eighth
 note, etc.  The number of dots after the note is given by
 @var{dotcount}.
-
 @end defun
 
 
+@defun duration? d
+type predicate for Duration
+@end defun
+
 @node Pitch data type
 @section Pitch data type
 
@@ -396,43 +398,62 @@ corresponding to C and 7 corresponding to B.  The shift is zero for a
 natural, negative to add flats, or positive to add sharps.
 @end defun
 
-@defun pitch-octave
+@defun pitch-octave p 
+extract the octave from pitch @var{p}.
 @end defun
 
 @defun pitch-notename
+extract the note name from pitch  @var{p}.
 @end defun
 
 @defun pitch-alteration
+extract the alteration from pitch  @var{p}.
 @end defun
 
 @defun pitch-semitones
+calculate the number of semitones of @var{p} from central C.
 @end defun
 
-@defun Pitch::transpose
+@defun Pitch::transpose t p
+Transpose @var{p} by the amount @var{t}, where @var{t} is the pitch that
+central C is transposed to. 
 @end defun
 
 @node Engraver
 @section Engraver
 
-@defun ly-get-trans-property
+Engravers are building blocks of contexts. They are not yet user accessible.
+
+@defun ly-get-trans-property tr sym
+retrieve the value of @var{sym} from context @var{tr}
 @end defun
 
-@defun ly-set-trans-property
+@defun ly-set-trans-property tr sym val
+set value of property @var{sym} in context @var{tr} to @var{val}.
 @end defun
 
 @node Music_iterator
 @section Music_iterator
 
+This data-type is a direct hook into some C++ constructor functions. It
+is not yet user-serviceable.
+
 @defun c++-function?
+type predicate for c++-function.
 @end defun
 
 @node Music
 @section Music
 
-@defun ly-get-mus-property
+Music is the data type that music expressions are stored in. The data
+type does not yet offer many manipulations.
+
+@defun ly-get-mus-property m sym
+Get the property @var{sym} of music expression @var{m}.
 @end defun
 
-@defun ly-set-mus-property
+@defun ly-set-mus-property m sym val
+Set property @var{sym} in music expression @var{m} to @var{val}.
 @end defun
 
 
@@ -470,7 +491,7 @@ notation:
  Molecule = COMBINE Molecule Molecule
            | TRANSLATE Offset Molecule
            | GLYPH-DESCRIPTION
-          ;
+           ;
 @end example
 
 If you are interested in seeing how this information is stored, you
@@ -478,21 +499,32 @@ can run with the @code{-f scm} option. The scheme expressions are then
 dumped onto the output file.
 
 (refer to the C++ code for more details). All visible,
-ie. non-transparant, grobs have a callback to create a Molecule. The
+i.e. non-transparant, grobs have a callback to create a Molecule. The
 name of the property is @code{molecule-callback}, and its value should
 be a Scheme function taking one argument (the grob) and returning a
 Molecule.
 
+[insert example of write your own.]
+
 @defun molecule? m
+type predicate.
 @end defun
 
 @defun ly-combine-molecule-at-edge  mol1 axis dir mol2 padding
+Construct a molecule by putting @var{mol2} next to
+@var{mol1}. @var{axis} can be 0 (x-axis) or 1 (y-axis), @var{dir} can be
+-1 (left or down) or 1 (right or up).  @var{padding} specifies extra
+space to add in between.  The unit is global staff space.  is the
 @end defun
 
 @defun ly-get-molecule-extent! mol axis
+Return a pair of numbers signifying the extent of @var{mol} in
+@var{axis} direction (0 or 1 for x and y axis respectively).
 @end defun
 
 @defun ly-set-molecule-extent! mol axis extent
+Set the extent (@var{extent} must be a pair of numbers) of @var{mol} in 
+@var{axis} direction (0 or 1 for x and y axis respectively).
 @end defun
 
 @node Font metrics
@@ -502,12 +534,10 @@ The font object represents the metric information of a font. Every font
 that is loaded into LilyPond can be accessed via Scheme. 
 
 LilyPond only needs to know the dimension of glyph to be able to process
-them. This information is present in font-metric files. LilyPond can
+them. This information is stored in font metric files. LilyPond can
 read two types of font-metrics: @TeX{} Font Metric files (tfm files) and
-Adobe Font Metric files (afm files).  AFM files are more versatile, and
-LilyPond needs those features to typeset musical symbols. So LilyPond
-will always try to load afm files first. 
-
+Adobe Font Metric files (@file{.afm} files).  LilyPond will always try
+to load afm files first since @file{.afm} files are more versatile.
 
 @defun ly-get-default-font gr
 This returns the default font for grob @var{gr}.
@@ -524,21 +554,31 @@ This function retrieves a Molecule for the glyph named @var{name} in
 @section Miscellaneous Scheme functions
 
 @defun ly-input-location?
+type predicate
 @end defun
-
-@defun ly-warn
+@defun ly-warn msg
+Scheme callable function to issue the warning @code{msg}.
 @end defun
 
 @defun ly-version
+Return the current lilypond version as a list, e.g.
+@code{(1 3 127 uu1)}. 
 @end defun
 
-@defun ly-gulp-file
+@defun ly-gulp-file name
+read file named @var{name}, and return its contents in a string. This
+uses the lilypond search path.
+
 @end defun
 
 @defun dir?
+type predicate. A direction is a -1, 0 or 1.
 @end defun
 
-@defun ly-number->string
+@defun ly-number->string num
+ converts @var{num} without generating many decimals. It leaves a space
+at the end.
 @end defun
 
 
index 3883fef5ebb85a25c78621fc40dc3638b052dee3..55a3b804067d2f127d76e977da6f7d84624ba054 100644 (file)
@@ -11,7 +11,7 @@
         lilypond [OPTION]... [MUDELA-FILE]...
 @end example
 
-@unnumberedsec Lilypond Command Options
+@unnumberedsec Command Options
 
 @table @code
 @item -f,--format=
@@ -42,8 +42,8 @@ show all changes needed to convert a file to  relative octave syntax.
 Disallow untrusted @code{\include} directives, in-line
 Scheme evaluation, backslashes in @TeX{}, code.
 
-@strong{WARNING}: the @code{--safe} option has not been reviewed for
-over a year; do not rely on it for automatic invocation (e.g. over the
+@strong{WARNING}: the @code{--safe} option has not been reviewed for a
+long time; do not rely on it for automatic invocation (e.g. over the
 web). Volunteers are welcome to do a new audit.
 
 @item -T,--no-timestamps
index a4c404abf50e7ac58f059ba2570f14185cb45cc5..78a8c0bb85fab49970d72232e89bb52cd5bcee02 100644 (file)
@@ -71,8 +71,9 @@ this and other documentation.
 * Bug reports::                   Where to report bugs.
 * ly2dvi::                         Generating nice output with titles.
 * convert-ly::                     Upgrading input files.
-* Conversion tools::                        Converting from MIDI input.
+* Conversion tools::               Converting from MIDI input.
 * Internals::                      How it all works.
+* Literature::                     additional reading
 * Index of internals:(lilypond-internals).  Auto generated detailed documentation.
 * Index::                  Unified index.
 * Function Index::         Function index.
index 5a8d93041e277ac1713b3ece27e71365b55718d8..86629ec9b139ec7d29226a7f005fac45e3e21391 100644 (file)
@@ -3,9 +3,9 @@
 
 If you need to know more about music notation, here are some interesting titles to read
 
-@table @emph
+@table @cite
 @item banter
-Harald Banter, Akkord Lexikon.  Schott's S\"ohne
+Harald Banter, Akkord Lexikon.  Schott's S@"{o}hne
 1987. Mainz, Germany ISBN 3-7957-2095-8
 
 Comprehensive overview of commonly used chords.  Suggests (and uses) a
@@ -13,15 +13,6 @@ unification for all different kinds of chord names.
 
 
 
-@item ross,
-Ted Ross, Teach yourself the art of music engraving and processing.
-Hansen House, Miami, Florida    1987
-
-This is about engraving, i.e.  professional typesetting.  It contains
-directions on good typesetting, but the sections on reproduction
-technicalities, how to use pens and history are interesting.
-Especially the section on Music Typewriters is amusing....
-
 @item gerou96
 
 Tom Gerou and Linda Lusk, Essential Dictionary of Music
@@ -31,45 +22,57 @@ 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.]
+
 
 @item Stone80
 
 Kurt Stone, Music Notation in the Twentieth Century
 Norton, New York 1980.
 
-The most important book on notation in recent years.
+The most important book on notation in recent years: it describes music
+notation for modern serious music, but starts out with a thorough
+overview of existing traditional notation practices.
+
+@item read-notation,
+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.
 
 @item hader48,
 
 Karl Hader, Aus der Werkstatt eines Notenstechers. Waldheim--Eberle
 Verlag, Vienna 1948.
 
-
 Hader was the chief-engraver of the Waldheim-Eberle music publishers.
-This beautiful booklet was intended as an introduction for laymen on
-the art of engraving.  It contains a step by step, in-depth
-explanation of how to cut and stamp music into zinc plates.  It also
-contains a few compactly formulated rules on musical orthography. Out
-of print.
+This beautiful booklet was intended as an introduction for laymen on the
+art of engraving.  It contains a step by step, in-depth explanation of
+how to cut and stamp music into zinc plates.  It also contains a few
+compactly formulated rules on musical orthography. This book is out of
+print.
+
+
+@item ross,
+Ted Ross, Teach yourself the art of music engraving and processing.
+Hansen House, Miami, Florida    1987
+
+This book is about engraving, i.e.  professional typesetting.  It contains
+directions on good typesetting, but the sections on reproduction
+technicalities, how to use pens and history are interesting.
 
 @item  wanske,
 
-1988
-Helene Wanske, Musiknotation --- Von der Syntax des Notenstichs zum EDV-gesteuerten Notensatz.
-Schott-Verlag, Mainz 1988.
-ISBN 3-7957-2886-x
+Helene Wanske, Musiknotation --- Von der Syntax des Notenstichs zum
+EDV-gesteuerten Notensatz.  Schott-Verlag, Mainz 1988.  ISBN
+3-7957-2886-x
 
 I. A very thorough overview of engraving practices of various
 craftsmen. It includes detailed specs of characters, dimensions
 etc. II. a thorough overview of a anonymous (by now antiquated)
-automated system. EDV Means e(lektronischen) D(aten)v(erarbeitung),
-electronic data processing HWN.
+automated system. EDV means E(lektronischen) D(aten)v(erarbeitung),
+electronic data processing.
 
-@item read-notation,
-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.
 @end table
index e32f596e388452e51616fa987eac51b9e812fc34..8b7bddfd71016c8b1253b49aaf88f26b54781d2f 100644 (file)
@@ -3,7 +3,7 @@
 @node ly2dvi
 @chapter ly2dvi
 
-Ly2dvi is a Python script which creates input file for La@TeX{},
+@file{ly2dvi} is a Python script which creates input file for La@TeX{},
 based on information from the output files from LilyPond.
 The script handles multiple files. If a LilyPond file name is
 specified LilyPond is run to make an output (@TeX{}) file.
@@ -17,8 +17,11 @@ Arne Fagertun name @file{ly2dvi}.
 
 @subsection Invoking ly2dvi
 
+@example
         ly2dvi [options] inputfile[.ly] [....]
+@end example
 
+@unnumberedsec Options
 
 @table @code
 @item -D,--debug
@@ -67,7 +70,7 @@ Arne Fagertun name @file{ly2dvi}.
 @end table
 
 
-@subsection Ly2dvi Features
+@subsection  Features
 
 Ly2dvi responds to several parameters specified in the LilyPond
 file. They are overridden by corresponding command line options.
@@ -85,7 +88,7 @@ file. They are overridden by corresponding command line options.
     Specify name of papersize.
 @end table
 
-@subsection Ly2dvi Environment
+@subsection  Environment
 
 @table @code
 @item LILYPONDPREFIX
@@ -96,7 +99,7 @@ file. They are overridden by corresponding command line options.
     Temporary directory name. Default is /tmp
 @end table
 
-@subsection Ly2dvi Files
+@subsection  Files
 
 @file{titledefs.tex} is inspected for definitions used to extract
 additional text definitions from the LilyPond file. In the current
@@ -197,7 +200,7 @@ present.  Possible value is a valid directory specification that is
 writable to the user.
 @end table
 
-@subsection Ly2dvi Initialization Sequence
+@subsection  Initialization Sequence
 The initialization process reads inputs for several sources.  Below is
 a list of priorities for lowest to hightest proirity.
 
@@ -213,7 +216,7 @@ a list of priorities for lowest to hightest proirity.
 @item  command line options
 @end itemize
 
-@subsection Ly2dvi Bugs
+@subsection  Bugs
 
 See @ref{Bug reports}.  If you have found a bug, you should send a
 bugreport.
@@ -227,7 +230,7 @@ bugreport.
     to this mailinglist).
 @end itemize
 
-@subsection Ly2dvi Remarks
+@subsection  Remarks
 
 Many papersizes are now supported. Information on other sizes
 (La@TeX{} names, horizontal and vertical sizes) should be mailed to
@@ -239,7 +242,7 @@ a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, archA, archB, archC, archD,
 archE, b0, b1, b2, b3, b4, b5, flsa, flse, halfletter, ledger, legal,
 letter, note
 
-@subsection Ly2dvi Authors
+@subsection  Authors
 Python Version author:
 @email{daboys@@austin.rr.com, Jeffrey B. Reed},
 @uref{http://home.austin.rr.com/jbr/jeff/lilypond/}
index 11e225ff77e31f7bd24d6b992a189c2955a07135..b6110ced05fc8b4ea81802fab0ad20a93966fe8b 100644 (file)
@@ -1,8 +1,4 @@
 @ifinfo
-@macro rgrob {word}
-@ref{ (lilypond-internals)\word\, \word\ },
-
-@end macro
 @macro reng {word}
 @ref{ (lilypond-internals)Engraver \word\, \word\ },
 
@@ -10,10 +6,6 @@
 @end ifinfo
 
 @ifnotinfo
-@macro rgrob {word}
-@ref{ (lilypond-internals)\word\, \word\ }
-
-@end macro
 @macro reng {word}
 @ref{ (lilypond-internals)Engraver \word\, \word\ }
 
index dce6226bdd6b5f51ca6502f8230611e87560f169..018f69c99705d27c1e20fc94e79c4c2298d85035 100644 (file)
    fix all FIXMEs
 
    Rhythm staff (clef, x-notehead)
-   Piano pedals
-   \addlyrics, \autochange, \partcombine: music (re)grouping
+   \partcombine: ->  orchestral part-HOWTO.
    markup text
    postscript, scheme output?
    (links to?) using/existance of ly2dvi, lilypond-book
 @end ignore
 
 
-@c.{Reference Manual}
+@c .{Reference Manual}
 
 @node Reference Manual
 @chapter Reference Manual
+
+This document describes GNU LilyPond and its input format. This document
+has been revised for LilyPond 1.3.125
+
+
+
 @menu
 * Overview::                    
 * Music constructs::            
 * Modifying music::             
+* Repeats::                     
 * Note entry::                  
-* Note specification::          
 * Music notation::              
-* Lyrics entry::                
-* Chord entry::                 
+* Polyphony::                   
+* Spanners::                    
+* Piano music::                 
+* Lyrics::                      
+* Chords::                      
 * Page layout::                 
 * Sound::                       
 * Music entry::                 
 * Engravers::                   
-* Lexer innards::               
+* Syntactic details::           
 * Unsorted::                    
 @end menu
 
-@c. {Overview}
+@c . {Overview}
 @node Overview
 @section Overview
 
-This document
-describes the the GNU LilyPond input format This format represents a
-piece of music in an elegant way, but contains enough information for
-both automatic typesetting and automatic performances.
-
-This document has been revised for LilyPond 1.3.125
-
-[todo: ]
-
-There are two things to note here. The format contains musical
-concepts like pitches and durations, instead of symbols and positions:
-the input format tries to capture the meaning of @emph{music}, and not
-notation.  Second, the format tries to be @emph{context-free}:
-a note will sound the same regardless of the current time signature,
-the key, etc.
 
 The purpose of LilyPond is explained informally by the term `music
 typesetter'.  This is not a fully correct name: not only does the
 program print musical symbols, it also makes esthetic decisions.  All
-symbols and their placement is @emph{generated} from a high-level musical
-description.  In other words,  LilyPond would be best
-described by `music compiler' or `music to notation compiler'.
+symbols and their placement is @emph{generated} from a high-level
+musical description.  In other words, LilyPond would be best described
+by `music compiler' or `music to notation compiler'.
+
+Internally, LilyPond is written in a mixture of Scheme and C++. Most of
+the algorithms and low-level routines are written in C++, but these low
+level components are glued together using Scheme data
+structures. LilyPond is linked to GUILE, GNU's Scheme library for
+extension.
+
+When lilypond is run to typeset sheet music, the following happens:
+
+@itemize @bullet
+@item GUILE Initialization: various scheme files are read
+@item parsing: first standard .ly initialization  files are read, and
+then the user @file{.ly} file is read.
+@item interpretation: the music in the file is processed "in playing
+order", i.e. in the same order as your eyes scan sheet music, and in the
+same order that you hear the notes play.
+
+@item typesetting:
+in this step, the results of the interpretation, a typesetting
+specification, is solved.
+
+@item the visible results ("virtual ink") is written to the output file.
+@end itemize
+
+These stages, involve data of a specific type: during parsing,
+@strong{Music} objects are created.  During the interpretation,
+@strong{context} is constructed, and with this context af network of
+@strong{graphical objects} (``grobs'') is created. The grobs contain
+unknown variables, and the network forms a set of equations. After
+solving the equations and filling in these variables, the printed output
+(in the form of @strong{molecules}) is written to an output file.
+
+These threemanship of tasks (parsing, translating, typesetting) and
+data-structures (music, context, graphical objects) permeates the entire
+design of the program.  This manual is ordered in terms of user
+tasks. With each concept will be explained to which of the three parts
+it belongs.
 
 LilyPond input can be classified  into three types:
 @itemize @bullet
@@ -80,32 +110,28 @@ can enter and edit them in manageable chunks.
 @end itemize
 
 
-@c. {Music constructs}
+@c . {Music constructs}
 @node Music constructs
 @section Music constructs
 @cindex Music constructs
 @menu
 * Music expressions::           
 * Sequential music::            
-* Simultanious music::          
+* Simultaneous music::          
 * Compound music expressions::  
-* Grace music::                 
-* Explicit atomic music::       
 @end menu
 
-@c.  {Music expressions}
+@c .  {Music expressions}
 @node Music expressions
 @subsection Music expressions
 
 @cindex music expressions
 
-Music in LilyPond is entered as a music expression.  Notes, rests,
-lyric syllables are music expressions (the atomic
-expressions),
-@cindex atomic music expressions
-and you can combine music expressions to form new ones.  This example
-forms a compound expressions out of the quarter @code{c} note and a
-@code{d} note:
+Music in LilyPond is entered as a music expression.  Notes, rests, lyric
+syllables are music expressions (the atomic expressions), and you can
+combine music expressions to form new ones.  This example forms a
+compound expressions out of the quarter @code{c} note and a @code{d}
+note:
 
 @example 
 \sequential @{ c4 d4 @} 
@@ -115,12 +141,7 @@ The meaning of this compound expression is to play the @code{c}
 first, and then the @code{d} (as opposed to playing them
 simultaneously, for instance).
 
-Atomic music expression are discussed in
-subsection @ref{Atomic music expressions}.  Compound music expressions are
-discussed in subsection @ref{Compound music expressions}.
-
-
-@c.  {Sequential music}
+@c .  {Sequential music}
 @node Sequential music
 @subsection Sequential music
 @cindex Sequential music
@@ -143,10 +164,10 @@ There is a shorthand, which leaves out the keyword:
   @code{@{} @var{musicexprlist} @code{@}}
 @end example
 
-@c.  {Simultanious music}
-@node Simultanious music
-@subsection Simultanious music
-@cindex Simultanious music
+@c .  {Simultaneous music}
+@node Simultaneous music
+@subsection Simultaneous music
+@cindex Simultaneous music
 @cindex @code{\simultaneous}
 
 @example
@@ -187,7 +208,7 @@ a Voice context:
   }
 @end lilypond
 
-@c.  {Compound music expressions}
+@c .  {Compound music expressions}
 @node Compound music expressions
 @subsection Compound music expressions
 
@@ -217,98 +238,7 @@ If the context does not exist, it will be created.  The new context
 can optionally be given a name.  
 
 
-@c.  {Grace music} <-> Grace notes
-@node Grace music
-@subsection Grace music
-@cindex Grace music
-@cindex @code{\grace}
-@cindex ornaments
-@cindex grace notes
-@cindex @code{graceAlignPosition}
-
-@example
-  \grace @var{musicexpr}
-@end example
-
-A grace note expression has duration 0; the next real note is
-assumed to be the main note.
-
-You cannot have the grace note after the main note, in terms of
-duration, and main notes, but you can typeset the grace notes to the
-right of the main note using the property
-@code{graceAlignPosition}.
-@cindex @code{flagStyle}
-
-When grace music is interpreted, a score-within-a-score is set up:
-@var{musicexpr} has its own time bookkeeping, and you could (for
-example) have a separate time signature within grace notes.  While in
-this score-within-a-score, you can create notes, beams, slurs, etc.
-Unbeamed eighth notes and shorter by default have a slash through the
-stem.  This behavior can be controlled with the
-@code{flagStyle} property.
-
-@quotation
-@lilypond[fragment,verbatim]
-\relative c'' {
-  \grace c8 c4 \grace { [c16 c16] } c4
-  \grace { \property Grace.flagStyle = "" c16 } c4
-}
-
-@end lilypond
-@end quotation
-@cindex @code{\grace}
-
-At present, nesting @code{\grace} notes is not supported. The following
-may cause run-time errors:
-@example
-  @code{\grace @{ \grace c32 c16 @} c4}
-@end example
-Since the meaning of such a construct is unclear, we don't consider
-this a loss.  Similarly, juxtaposing two @code{\grace} sections is
-syntactically valid, but makes no sense and may cause runtime errors.
-
-Ending a staff or score with grace notes may also generate a run-time
-error, since there will be no main note to attach the grace notes to.
-
-The present implementation is not robust and generally kludgy. We expect
-it to change after LilyPond 1.4
-
-
-@c.  {Explicit atomic music}
-@node Explicit atomic music
-@subsection Explicit atomic music
-@cindex Explicit atomic music
-
-
-@cindex pitch
-
-The syntax for pitch specification is
-
-@cindex @code{\pitch}
-@example
-  \pitch @var{scmpitch}
-@end example
-
-@var{scmpitch} is a pitch scheme object, see @ref{Pitch}.
-
-In Note and Chord mode, pitches may be designated by names.  See
-section @ref{Other languages} for pitch names in different languages.
-
-@cindex duration
-@cindex @code{\duration}
-
-The syntax for duration specification is
-@example
- \duration @var{scmduration}
-@end example
-
-In Note, Chord, and Lyrics mode, durations may be designated by
-numbers and dots.  
-
-
-
-
-@c. {Modifying music}
+@c . {Modifying music}
 @node Modifying music
 @section Modifying music
 @cindex Modifying music
@@ -320,83 +250,10 @@ Repeated music?
 Repeating music expressions?
 
 @menu
-* Relative::                    
 * Transpose::                   
-* Repeat::                      
-* Times ::                      
 * Apply::                       
-* Transform::                   
 @end menu
-
-@c.  {Relative}
-@node Relative
-@subsection Relative
-@cindex Relative
-@cindex relative octave specification
-
-It is easy to get confused by octave changing marks and accidentally
-putting a pitch in the wrong octave.  A much better way of entering a
-note's octave is `the relative octave' mode.
-
-@cindex @code{\relative}
-@example
-  \relative @var{startpitch} @var{musicexpr}
-@end example
-
-The octave of notes that appear in @var{musicexpr} are calculated as
-follows: If no octave changing marks are used, the basic interval
-between this and the last note is always taken to be a fourth or
-less.@footnote{The interval is determined without regarding
-accidentals.  A @code{fisis} following a @code{ceses} will be put above
-the @code{ceses}.}  The octave changing marks @code{'} and @code{,}
-can then be added to raise or lower the pitch by an extra octave. 
-Upon entering relative mode, an absolute starting pitch must be
-specified that will act as the predecessor of the first note of
-@var{musicexpr}.
-
-Entering scales is straightforward in relative mode.
-
-@lilypond[fragment,verbatim,center]
-  \relative c' {
-    c d e f g a b c c,
-  }
-@end lilypond
-
-And octave changing marks are used for intervals greater than a fourth.
-
-@lilypond[fragment,verbatim,center]
-  \relative c'' {
-    c g c f, c' a, e'' }
-@end lilypond
-
-If the preceding item is a chord, the first note of the chord is used
-to determine the first note of the next chord.  But other notes
-within the second chord are determined by looking at the immediately
-preceding note.
-
-@lilypond[fragment,verbatim,center]
-  \relative c' {
-    c <c e g> 
-    <c' e g>
-    <c, e' g>
-  }
-@end lilypond 
-@cindex @code{\notes}
-
-The pitch after the @code{\relative} contains a notename.  To parse
-the pitch as a notename, you have to be in note mode, so there must
-be a surrounding @code{\notes} keyword (which is not
-shown here).
-
-The relative conversion will not affect @code{\transpose} or
-@code{\relative} sections in its argument.  If you want to use
-relative within transposed music, you must place an additional
-@code{\relative} inside the @code{\transpose}.
-
-It is strongly recommended to use relative pitch mode: less work,
-less error-prone, and more readable.
-
-@c.  {Transpose}
+@c .  {Transpose}
 @node Transpose
 @subsection Transpose
 @cindex Transpose
@@ -434,15 +291,47 @@ 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}.
 
-@c.  {Repeat}
-@node Repeat
-@subsection Repeat
-@cindex Repeat
-@cindex repeats
+@c .  {Apply}
+@node Apply
+@subsection Apply
+@cindex Apply
+Apply allows a Scheme-function to operate directly on the internal
+representation of music.
+@example
+        \apply #@var{func} @var{music}
+@end example
+The function takes two arguments, being a function and an musical
+argument for that function. The function should return a music
+expression.
+
+This example replaces the text string of a script. It also shows a dump
+of the music it processes.
+@lilypond[verbatim]
+#(define (testfunc x)
+        (if (equal? (ly-get-mus-property x 'text) "foo")
+                (ly-set-mus-property x 'text "bar"))
+        ;; recurse
+        (ly-set-mus-property x 'elements
+          (map testfunc (ly-get-mus-property x 'elements)))
+        (display x)
+        x        
+)
+\score { \notes
+  \apply #testfunc { c4_"foo" }
+} 
+@end lilypond
+
+For more information on what is possible, see the @ref{Tricks} and the
+automatically generated documentation.
+
+
 
-@ref{Volta}
-[TODO: document #'repeatCommands.]
+@c .  {Repeat}
+@node Repeats
+@section Repeats
 
+
+@cindex repeats
 @cindex @code{\repeat}
 
 In order to specify repeats, use the @code{\repeat}
@@ -466,6 +355,16 @@ practical for anything right now.
 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
@@ -491,7 +390,6 @@ Normal notation repeats are used like this:
   c'1
   \repeat volta 2 { c'4 d' e' f' }
   \repeat volta 2 { f' e' d' c' }
-
 @end lilypond
 @end quotation
 
@@ -503,14 +401,13 @@ With alternative endings:
   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.}
+implemented at some point in the future.}
 
 @quotation
 
@@ -522,19 +419,6 @@ implemented.}
 @end lilypond
 @end quotation
 
-@quotation
-
-@lilypond[fragment,verbatim]
-\context Staff {
-  \relative c' {
-    \partial 4;
-    \repeat volta 2 { e | c2 d2 | e2 f2 | }
-    \alternative { { g4 g g } { a | a a a a | b1 } }
-  }
-}
-
-@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
@@ -544,123 +428,110 @@ the specified number of repeats.
 @lilypond[fragment,verbatim]
 \context Staff {
   \relative c' {
-    \repeat volta 3 { \partial 4; e | c2 d2 | e2 f2 | }
-    \alternative { { g4 g g }
-                   {\partial 1; e4 e e } 
-                   {\partial 1; a a a a | b1 } }
+    \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. We hope to fix this after 1.4. 
+are slurs or ties repeated. We hope to fix this after 1.4.
 
-It is possible to nest @code{\repeat}.  This is not entirely
-supported: the notes will come be in the right places, but the repeat
-bars will not.
+It is possible to nest @code{\repeat}, although it probably is only
+meaningful for nested repeats.
 
-To place tremolo marks between notes, use @code{\repeat} with tremolo
-style.
+@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 . #f)
+@item (volta . @var{text})
+  Print a volta bracket saying @var{text}.
+@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 create tremolo beams on a single note, simply attach
-`@code{:}@var{length}' to the note itself.
 
+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" 2 { c16 d16 }
+    \repeat "tremolo" 4 c16
   }
   \paper {
     linewidth = 40*\staffspace;
   }  
 }
 @end lilypond
-@cindex @code{__}
 
-@lilypond[fragment,verbatim,center]
+@node Tremolo subdivision
+@subsection Tremolo subdivision
+@cindex tremolo marks
+@cindex @code{tremoloFlags}
 
-  c'4:32
+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
 
-@c.  {Times}
-@node Times 
-@subsection Times
-@cindex Times 
-@ref{Tuplets}
-Tuplets are made out of a music expression by multiplying their
-duration with a fraction.
+Tremolos in this style do not carry over into the MIDI output.
 
-@cindex @code{\times}
-@example
-  \times @var{fraction} @var{musicexpr}
-@end example
+Using this mechanism pays off when you entering many tremolos, since the
+default argument saves a lot of typing.
 
-The duration of @var{musicexpr} will be multiplied by the fraction. 
-In print, the fraction's denominator will be printed over the notes,
-optionally with a bracket.  The most common tuplet is the triplet in
-which 3 notes have the length of 2, so the notes are 2/3 of
-their written length:
 
-@lilypond[fragment,verbatim,center]
-  g'4 \times 2/3 {c'4 c' c'} d'4 d'4
-@end lilypond
+@c . {Note entry}
+@node Note entry
+@section Note entry
+@cindex Note entry
 
+@menu
+* Notes mode::                  
+* Pitches::                     
+* Defining pitch names::        
+* Durations::                   
+* Notes::                       
+* Rests::                       
+* Multi measure rests::         
+* Skip::                        
+@end menu
 
-@c.  {Apply}
-@node Apply
-@subsection Apply
-@cindex Apply
-Apply allows a Scheme-function to operate directly on the internal
-representation of music.
-@example
-        \apply #@var{func} @var{music}
-@end example
-The function takes two arguments, being a function and an musical
-argument for that function. The function should return a music
-expression.
-
-This example replaces the text string of a script. It also shows a dump
-of the music it processes.
-@lilypond[verbatim]
-#(define (testfunc x)
-        (if (eq? (ly-get-mus-property x 'text) "foo")
-                (ly-set-mus-property x 'text "bar"))
-        ;; recurse
-        (ly-set-mus-property x 'elements
-          (map testfunc (ly-get-mus-property x 'elements)))
-        (display x)
-        x        
-)
-\score { \notes
-  \apply #testfunc { c4_"foo" }
-} 
-@end lilypond
-
-For more information on what is possible, see the @ref{Tricks} and the
-automatically generated documentation.
-
-@c.  {Transform}
-@node Transform
-@subsection Transform
-@cindex Transform
-
-
-@c. {Note entry}
-@node Note entry
-@section Note entry
-@cindex Note entry
-
-@menu
-* Notes mode::                  
-* Pitch names::                 
-@end menu
-
-@c.  {Notes mode}
-@node Notes mode
-@subsection Notes mode
+@c .  {Notes mode}
+@node Notes mode
+@subsection Notes mode
 
 @cindex note mode
 
@@ -674,33 +545,30 @@ notename is found, then @code{word} is treated as a string.
 Since combinations of numbers and dots are used for indicating
 durations, it is not possible to enter real numbers in this mode.
 
-
 @cindex Notes mode
 
-@c.  {Pitch names}
-@node Pitch names
-@subsection Pitch names
+@c .  {Pitches}
+@node Pitches
+@subsection Pitches
+
 @cindex Pitch names
-@node Note specification
-@section Note specification
 @cindex Note specification
-
 @cindex pitches
 @cindex entering notes
 
-A note specification has the form
+The verbose syntax for pitch specification is
 
+@cindex @code{\pitch}
 @example
-  @var{pitch}[@var{octavespec}][!][?][@var{duration}]
+  \pitch @var{scmpitch}
 @end example
 
-The pitch of the note is specified by the note's name.
-
+@var{scmpitch} is a pitch scheme object, see @ref{Pitch data type}.
 
-The default names are the Dutch note names.  The notes are specified
-by the letters @code{c} through @code{b}, where @code{c} is an
-octave below middle C and the letters span the octave above that C. 
-In Dutch,
+In Note and Chord mode, pitches may be designated by names.  The default
+names are the Dutch note names.  The notes are specified by the letters
+@code{c} through @code{b}, where @code{c} is an octave below middle C
+and the letters span the octave above that C.  In Dutch,
 @cindex note names, Dutch
 a sharp is formed by adding @code{-is} to the end of a pitch name.  A
 flat is formed by adding @code{-es}. Double sharps and double flats are
@@ -723,12 +591,10 @@ svenska.ly     c   d   e   f   g   a   b   h   -iss        -ess
 italiano.ly    do  re  mi  fa  sol la  sib si  -d          -b
 catalan.ly     do  re  mi  fa  sol la  sib si  -d/-s       -b 
 @end example 
+
 @cindex @code{'}
 @cindex @code{,}
 
-Pitch names can be redefined using the @code{\pitchnames} command, see
-@ref{Pitch names}.
-
 
 
 
@@ -757,48 +623,46 @@ octave; each @code{,} lowers the pitch by an octave.
   ceses' eses' geses' ases' beses'
 @end lilypond
 
-LilyPond will determine what accidentals to typeset depending on the key
-and context, so alteration refer to what note is heard, not to whether
-accidentals are printed.  A reminder accidental
-@cindex reminder accidental
-@cindex @code{?}
-can be forced by adding an exclamation mark @code{!} after the pitch.
-A cautionary accidental,
-@cindex cautionary accidental
-
-i.e., an accidental within parentheses can be obtained by adding the
-question mark `@code{?}' after the pitch.
 
-@lilypond[fragment,verbatim,center]
-  cis' d' e' cis'  c'? d' e' c'!
-@end lilypond
+@c .  {Defining pitch names}
+@node Defining pitch names
+@subsection Defining pitch names
 
+@cindex defining pitch names
+@cindex pitch names, defining 
 
-@c.  {Rests}
-@menu
-* Rests::                       
-* Durations::                   
-* Multi measure rests::         
-* Skip::                        
-@end menu
+Note names and chord modifiers can be customised for nationalities.  The
+syntax is as follows.
 
-@node  Rests
-@subsection Rests
-@cindex Rests
+@cindex @code{\pitchnames}
+@cindex @code{\chordmodifiers}
+@example
+   \pitchnames @var{scheme-alist}
+   \chordmodifiers @var{scheme-alist}
+@end example
 
-Rests are entered like notes, with note name `@code{r}'.
-There is also a note name
-`@code{s}', which produces a space of the specified
-duration.
+See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for
+specific examples how to do this.  Some national note names have been
+provided, among others: Norwegian, Swedish, German, Italian, Catalan,
+French, Dutch and English.
 
 
-@c.  {Durations}
+@c .  {Durations}
 @node Durations
 @subsection Durations
-@cindex Durations
 
-Durations are entered as their reciprocal values.  For notes longer
-than a whole note, use identifiers.
+
+@cindex duration
+@cindex @code{\duration}
+
+The syntax for an verbose duration specification is
+@example
+ \duration @var{scmduration}
+@end example
+
+In Note, Chord, and Lyrics mode, durations may be designated by numbers
+and dots: durations are entered as their reciprocal values.  For notes
+longer than a whole note, use identifiers.
 
 @quotation
 
@@ -834,15 +698,11 @@ r1 r2 r4 r8 r16 r32 r64 r64
 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].
 
-@cindex @code{.}
-
-
 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
 a quarter note is assumed.  The duration can be followed by a dot
 (`@code{.}')  to obtain dotted note lengths.
-
-
+@cindex @code{.}
 
 @lilypond[fragment,verbatim,center]
   a'4. b'4.
@@ -853,28 +713,73 @@ a quarter note is assumed.  The duration can be followed by a dot
 You can alter the length of duration by writing `@code{*}@var{fraction}'
 after it.  This will not affect the appearance of note heads or rests.
 
-@c.  {Multi measure rests}
+@c . {Notes}
+@node Notes
+@subsection Notes
+
+A note specification has the form
+
+@example
+  @var{pitch}[@var{octavespec}][!][?][@var{duration}]
+@end example
+
+
+LilyPond will determine what accidentals to typeset depending on the key
+and context, so alteration refer to what note is heard, not to whether
+accidentals are printed.  A reminder accidental
+@cindex reminder accidental
+@cindex @code{?}
+can be forced by adding an exclamation mark @code{!} after the pitch.
+A cautionary accidental,
+@cindex cautionary accidental
+
+i.e., an accidental within parentheses can be obtained by adding the
+question mark `@code{?}' after the pitch.
+
+@lilypond[fragment,verbatim,center]
+  cis' d' e' cis'  c'? d' e' c'!
+@end lilypond
+
+
+
+
+@c .  {Rests}
+@node  Rests
+@subsection Rests
+@cindex Rests
+
+Rests are entered like notes, with note name `@code{r}'.
+There is also a note name
+`@code{s}', which produces a space of the specified
+duration.
+
+
+@c .  {Multi measure rests}
 @node  Multi measure rests
 @subsection Multi measure rests
 @cindex Multi measure rests
 
 @cindex @code{R}
 
-Multi_measure_rest are entered using `@code{R}'. It is specifically
+[todo: moveme to orchestral-part section?]
+
+Multi measure rests are entered using `@code{R}'. It is specifically
 meant for entering parts: the rest can expand to fill a score with
 rests, or it can be printed as a single multimeasure rest This expansion
 is controlled by the property @code{Score.skipBars}. If this is set to true,
-Lily will not expand empty measures, and the multimeasure rests
-automatically adds the appropriate number.
+Lily will not expand empty measures, and the appropriate number is added
+automatically.
 
-@lilypond[fragment]
+@lilypond[fragment,verbatim]
  \time 3/4; R2.*2 \property Score.skipBars = ##t R2.*17  R2.*4
 @end lilypond
 
-Note that there is currently no way to condense multiple rests into a
-single multimeasure rest.
+Currently, there is  no way to condense multiple rests into a single
+multimeasure rest.
+
+@cindex condensing rests
 
-@c.  {Skip}
+@c .  {Skip}
 @node Skip
 @subsection Skip
 @cindex Skip
@@ -892,22 +797,16 @@ this has the same effect as the spacer rest.
 
 
 
-
-
-@c. {Music notation}
+@c . {Music notation}
 @node Music notation
 @section Music notation
 @cindex Music notation
 @menu
 * Key::                         
-* Clef::                        
 * Time signature::              
-* Spanners::                    
-* Ornaments::                   
-* Bar check::                   
 @end menu
 
-@c.  {Key}
+@c .  {Key}
 @node Key
 @subsection Key
 @cindex Key
@@ -939,13 +838,7 @@ major key, e.g., @code{\minor} is defined as 3.  The standard mode names
 @code{\lydian}, @code{\phrygian}, and @code{\dorian} are also defined.
 
 
-@c.  {Clef}
-@node Clef
-@subsection Clef
-@cindex Clef
-
-
-@c.   {Clef changes}
+@c .   {Clef changes}
 @subsubsection Clef changes
 @cindex @code{\clef}
 @example
@@ -955,9 +848,9 @@ major key, e.g., @code{\minor} is defined as 3.  The standard mode names
 Short-cut for
 
 @example
-  \property Clef.clefGlyph = @var{symbol associated with clefname} 
-  \property Clef.clefPosition = @var{clef Y-position for clefname}
-  \property Clef.clefOctavation = @var{extra pitch of clefname}
+  \property Staff.clefGlyph = @var{symbol associated with clefname} 
+  \property Staff.clefPosition = @var{clef Y-position for clefname}
+  \property Staff.clefOctavation = @var{extra pitch of clefname}
 @end example
 
 Supported clef-names include 
@@ -965,7 +858,7 @@ Supported clef-names include
 [todo]
 
 
-@c.  {Time signature}
+@c .  {Time signature}
 @node Time signature
 @subsection Time signature
 @cindex Time signature
@@ -984,7 +877,7 @@ A short-cut for doing
 See the documentation of @code{timeSignatureFraction}
 
 
-@c.   {Partial}
+@c .   {Partial}
 @subsubsection Partial
 @cindex Partial
 @cindex anacrusis
@@ -1007,43 +900,79 @@ Short cut for
 See the documentation of @code{measurePosition}.
 
 
+@c .   {Polyphony}
+@node Polyphony
+@section Polyphony
+@cindex Polyphony
+
+[todo : collisiosn, rest-collisinos, voiceX identifiers, how to
+which  contexts to instantiate.]
+
+
+@table @code
+@cindex @code{\shiftOff}  
+  @item @code{\shiftOff}
+    Disable horizontal shifting of note heads that collide. 
+
+@cindex @code{\shiftOn}  
+  @item @code{\shiftOn}
+    Enable note heads that collide with other note heads to be
+    shifted horiztonally. Also @code{\shiftOnn} and @code{\shiftOnnn}
+set different shift values.
+
+@cindex @code{\stemBoth}  
+  @item @code{\stemBoth}
+    Allow stems, beams, and slurs to point either upwards or
+    downwards, decided automatically by LilyPond.
+
+@cindex @code{\stemDown}  
+  @item @code{\stemDown}
+    Force stems, beams, and slurs to point down.
+
+@cindex @code{\stemUp}  
+  @item @code{\stemUp}
+    Force stems, beams and slurs to point up.
+@end table
 
-@c.  {Spanners}
+@c .  {Spanners}
 @node Spanners
-@subsection Spanners
+@section Spanners
 @cindex Spanners
 
 @menu
 * Beam::                        
-* Slur::                        
-* Tie::                         
-* Tuplet::                      
-* Volta::                       
-* Crescendo and Decrescendo::   
-* Text spanner::                
-* Ottava::                      
-* Span requests::               
+* Slur ::                       
+* Ornaments::                   
+* Grace notes::                 
+* Bar check::                   
 @end menu
 
-@c.   {Beam}
+
+
+@c .   {Beam}
 @node Beam
-@subsubsection Beam
-@cindex Beam
+@subsection Beams
+
+@cindex beams
+
+@c .    {Automatic beams}
+@subsubsection Automatic beams
 
-@c.    {Automatic beams}
-@unnumberedsubsubsec Automatic beams
 
 @cindex automatic beam generation
 @cindex autobeam
-
 @cindex @code{Voice.noAutoBeaming}
 
 LilyPond will group flagged notes and generate beams autmatically, where
-appropriate.  This feature can be disabled by setting the
-@code{Voice.noAutoBeaming} property to true, which you may find
-necessary for the melody that goes with lyrics, eg.  Automatic beaming
-can easily be overridden for specific cases by specifying explicit
-beams, see @ref{Manual beams}.
+appropriate.
+
+This feature can be disabled by setting the @code{Voice.noAutoBeaming}
+property to true, which you may find necessary for the melody that goes
+with lyrics, eg.  Automatic beaming can easily be overridden for
+specific cases by specifying explicit beams. This is discussed in the
+next subsubsection.
+
+
 
 @cindex @code{Voice.autoBeamSettings}
 @cindex @code{(end * * * *)}
@@ -1083,45 +1012,65 @@ you would use @code{(end * * 1 32)}.
 
 
 
-@c.    {Manual beams}
+@c .    {Manual beams}
 @cindex Automatic beams
-@unnumberedsubsubsec Manual beams
+@subsubsection Manual beams
 @cindex beams, manual
 @cindex @code{]}
 @cindex @code{[}
 
-For most situations, beaming can be generated automatically; see section
-@ref{Automatic Beaming}.  In certain cases it may be necessary to
-override the automatic beaming decisions that LilyPond makes.  You can
-do this by specifying beams explicitely.
+In some cases it may be necessary to override LilyPond's automatic
+beaming algorithm.  For example, the auto beamer will not beam over
+rests or bar lines, so if you want that, specify the begin and end point
+manually using @code{[} and @code{]}:
+
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \context Staff {
+    r4 [r8 g'' a r8] r8 [g | a] r8
+  }
+@end lilypond
+
 
-A manual beam is specified by surrounding the notes that should make up
-the beam, with brackets `@code{[}' and `@code{]}'.
+@cindex @code{stemLeftBeamCount}
 
-FIXME: example.  (or tell: why would the auto-beamer fail here?)
+If you have specific wishes for the number of beams, you can fully
+control the number of beams through the properties
+y@code{Voice.stemLeftBeamCount} and @code{Voice.stemRightBeamCount}.
 
-@lilypond[fragment,verbatim,center]
-  [a'8 a'] [a'16 a' a' a']
-  [a'16 <a' c''> c'' <a' c''>]
-  \times 2/3 { [e'8 f' g'] }
+@lilypond[fragment,relative,verbatim]
+  \context Staff {
+    [f'8 r16 f g a]
+    [f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
+  }
 @end lilypond
+@end quotation
+@cindex @code{stemRightBeamCount}
 
 
-
-@c.    {Adjusting beams}
+@c .    {Adjusting beams}
 @unnumberedsubsubsec Adjusting beams
 @cindex Adjusting beams
 
 FIXME
 
-@c.   {Slur}
 
-@node Slur
-@subsubsection Slur
-@cindex Slur
+        
 
+@c .   {Slur}
+@node Slur 
+@subsection Slur
 @cindex slur
 
+@menu
+* Slur attachments::            
+* Tie::                         
+* Tuplets::                     
+* Text spanner::                
+* Ottava::                      
+* Span requests::               
+@end menu
+
 Slurs connects chords and try to avoid crossing stems.  A slur is
 started with @code{(} and stopped with @code{)}.  The
 starting @code{(} appears to the right of the first note in
@@ -1133,12 +1082,102 @@ slurs from both sides:
   f'()g'()a' [a'8 b'(] a'4 g'2 )f'4
 @end lilypond
 
+@c .    {Adjusting slurs}
+@unnumberedsubsubsec Adjusting slurs
+
 
+@node Slur attachments
+@subsubsection Slur attachments
+
+The ending of a slur should whenever possible be attached to a note
+head.  Only in some instances where beams are involved, LilyPond may
+attach a slur to a stem end.  In some cases, you may want to override
+LilyPond's decision, e.g., to attach the slur to the stem end.  This can
+be done through @code{Voice.Slur}'s grob-property @code{attachment}:
+
+
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \property Voice.Slur \set #'direction = #1
+  \property Voice.Stem \set #'length = #5.5
+  g''8(g)g4
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  g8(g)g4
+@end lilypond
+@end quotation
+
+Similarly, slurs can be attached to note heads even when beams are
+involved:
+
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \property Voice.Slur \set #'direction = #1
+  \property Voice.Slur \set #'attachment = #'(head . head)
+  g''16()g()g()g()d'()d()d()d
+@end lilypond
+@end quotation
+
+If a slur would strike through a stem or beam, LilyPond will move the
+slur away vertically (upward or downward).  In some cases, this may
+cause ugly slurs that you may want to correct:
+
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \property Voice.Stem \set #'direction = #1
+  \property Voice.Slur \set #'direction = #1
+  d'32( d'4 )d8..
+  \property Voice.Slur \set #'attachment = #'(stem . stem)
+  d,32( d'4 )d8..
+@end lilypond
+@end quotation
+
+LilyPond will increase the curvature of a slur trying to stay free of
+note heads and stems.  However, if the curvature would increase too much,
+the slur will be reverted to its default shape.  This decision is based
+on @code{Voice.Slur}'s grob-property @code{beautiful} value.  In some
+cases, you may find ugly slurs beautiful, and tell LilyPond so by
+increasing the @code{beautiful} value:
+
+[hoe  gedefd?? wat betekent beautiful = X?]
+
+@quotation
+@lilypond[verbatim]
+\score {
+  \notes \context PianoStaff <
+    \time 6/4;
+    \context Staff=up { s1 * 6/4 }
+    \context Staff=down <
+      \clef bass;
+      \autochange Staff \context Voice
+        \notes \relative c {
+          d,8( a' d f a d f d a f d )a
+        }
+    >
+  >
+  \paper {
+    linewidth = -1.;
+    \translator {
+      \VoiceContext
+      Slur \override #'beautiful = #5.0
+      Slur \override #'direction = #1
+      Stem \override #'direction = #-1
+      autoBeamSettings \override #'(end * * * *)
+        = #(make-moment 1 2)
+    }
+    \translator {
+      \PianoStaffContext
+      VerticalAlignment \override #'threshold = #'(5 . 5)
+    }
+  }
+}
+@end lilypond
+@end quotation
 
-@c.    {Adjusting slurs}
-@unnumberedsubsubsec Adjusting slurs
-@c.   {Tie}
 @cindex Adusting slurs
+
+
+
+@c .   {Tie}
 @node Tie
 @subsubsection Tie
 
@@ -1159,80 +1198,47 @@ warning message will appear and no ties will be created.
 [sparseTies]
 
 
-@c.   {Tuplet}
-@node Tuplet
-@subsubsection Tuplet
-@cindex Tuplet
+@c .   {Tuplets}
+@node Tuplets
+@subsubsection Tuplets
+@cindex Tuplets
+@cindex Times 
 
-A @rgrob{TupletBracket} is typeset automatically for music that
-is time scaled, see @ref{Times}.
+Tuplets are made out of a music expression by multiplying their duration
+with a fraction.
 
+@cindex @code{\times}
+@example
+  \times @var{fraction} @var{musicexpr}
+@end example
 
-See @ref{Times}.
+The duration of @var{musicexpr} will be multiplied by the fraction. 
+In print, the fraction's denominator will be printed over the notes,
+optionally with a bracket.  The most common tuplet is the triplet in
+which 3 notes have the length of 2, so the notes are 2/3 of
+their written length:
 
-@c.   {Volta}
-@node Volta
-@subsubsection Volta
-@cindex Volta
+@lilypond[fragment,verbatim,center]
+  g'4 \times 2/3 {c'4 c' c'} d'4 d'4
+@end lilypond
 
-A @rgrob{VoltaBracket} is typeset automatically for music that contains a
-repetition, see @ref{Repeat}.
+[todo: document tupletSpannerDuration]
 
 
-@c.   {Crescendo and Decrescendo}
-@node Crescendo and Decrescendo
-@subsubsection Crescendo and Decrescendo
-@cindex Crescendo and Decrescendo
-@cindex crescendo
-@cindex @code{\cr}
-@cindex @code{\rc}
-@cindex @code{\decr}
-@cindex @code{\rced}
-@cindex @code{\<}
-@cindex @code{\>}
-@cindex @code{\"!}
-
-
-
-A crescendo mark is started with @code{\cr} and terminated with
-@code{\rc}, the textual reverse of @code{cr}.  A decrescendo mark is
-started with @code{\decr} and terminated with @code{\rced}.  There are
-also shorthands for these marks.  A crescendo can be started with
-@code{\<} and a decrescendo can be started with @code{\>}.  Either one
-can be terminated with @code{\!}.  Note that @code{\!}  must go before
-the last note of the dynamic mark whereas @code{\rc} and @code{\rced} go
-after the last note.  Because these marks are bound to notes, if you
-want to get several marks during one note, you must use spacer notes.
-
-@lilypond[fragment,verbatim,center]
-  c'' \< \! c''   d'' \decr e'' \rced 
-  < f''1 { s4 \< \! s2 \> \! s4 } >
-@end lilypond
-
-[todo: text cr] 
 
-
-@c.   {Text spanner}
+@c .   {Text spanner}
 @node Text spanner
 @subsubsection Text spanner
 @cindex Text spanner
 
-Have crescendo set a text spanner instead of hairpin
-
-@lilypond[fragment,relative,verbatim]
-  \context Voice {
-    \property Voice.crescendoText = "cresc."
-    \property Voice.crescendoSpanner = #'dashed-line
-    a''2\mf\< a a \!a 
-  }
-@end lilypond
-
-@c.   {Ottava}
+@c .   {Ottava}
 @node Ottava
 @subsubsection Ottava
 @cindex Ottava
 @unnumberedsubsubsec Ottava
 
+[move to trick. Not a supported feature.]
+
 @lilypond[fragment,relative,verbatim]
   a'''' b c a
   \property Voice.TextSpanner \set #'type = #'dotted-line
@@ -1244,12 +1250,7 @@ Have crescendo set a text spanner instead of hairpin
 
 
 
-@c.    {Text crescendo and decrescendo}
-@unnumberedsubsubsec Text crescendo and decrescendo
-
-TODO
-
-@c.   {Span requests}
+@c .   {Span requests}
 @node Span requests
 @subsubsection Span requests
 @cindex Span requests
@@ -1265,9 +1266,9 @@ TODO
 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}.  This is an internal
-command.  Users should use the shorthands which are defined in the
-initialization file @file{spanners.ly}.
+@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}.
 
 You can attach a (general) span request to a note using
 
@@ -1279,24 +1280,16 @@ You can attach a (general) span request to a note using
 The slur syntax with parentheses is a shorthand for this.
 
 
-@c.  {Ornaments}
+@c .  {Ornaments}
 @node Ornaments
 @subsection Ornaments
 @cindex Ornaments
 @menu
 * Articulation::                
 * Text scripts::                
-* Grace notes::                 
-* Stem tremolo::                
-* Arpeggio::                    
-* Glissando ::                  
-* Dynamics::                    
-* Bar lines::                   
-* Breath marks::                
-* Rehearsal marks::             
 @end menu
 
-@c.   {Articulation}
+@c .   {Articulation}
 @node Articulation
 @subsubsection Articulation
 @cindex Articulation
@@ -1347,7 +1340,7 @@ name of the corresponding symbol appearing underneath.
 
 @end lilypond
 
-@c.   {Text scripts}
+@c .   {Text scripts}
 @node Text scripts
 @subsubsection Text scripts
 @cindex Text scripts
@@ -1361,7 +1354,7 @@ can be placed by simply using digits.  All of these note ornaments
 appear in the printed output but have no effect on the MIDI rendering of
 the music.
 
-@c.    {Fingerings}
+@c .    {Fingerings}
 @unnumberedsubsubsec Fingerings
 @cindex Fingerings
 
@@ -1420,143 +1413,132 @@ This is equivalent to @code{c4-6 c4-"foo"}.
 
 @cindex @code{\script}
 @cindex scripts
+@cindex superscript
+@cindex subscript
 
 @example
-
   \script @var{alias}
 @end example
-@cindex @code{\script}
 
 Prints a symbol above or below a note.  The argument is a string which
-points into the script-alias table defined in @file{scm/script.scm}, for
-information on how to add scripts, read the comments in that file.
+points into the script-alias table defined in @file{scm/script.scm}.
 Usually the @code{\script} keyword is not used directly.  Various
 helpful identifier definitions appear in @file{script.ly}.
 
+For information on how to add scripts, consult @file{scm/script.scm}.
+
 
 
 
-@c.   {Grace notes}
+@c .   {Grace notes}
 @node Grace notes
-@subsubsection Grace notes
-@cindex Grace notes
+@subsection Grace notes
 
-See @ref{Grace music}.
 
-@c.   {Stem tremolo}
-@node Stem tremolo
-@subsubsection Stem tremolo
-@cindex tremolo marks
-@cindex @code{tremoloFlags}
 
-[FIXME: should be \repeat]
 
-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
 
 
-@c.   {Arpeggio}
-@node Arpeggio
-@subsubsection Arpeggio
-@cindex Arpeggio
+@cindex Grace music
+@cindex @code{\grace}
+@cindex ornaments
+@cindex grace notes
+@cindex @code{graceAlignPosition}
 
-@cindex broken arpeggio
-@cindex @code{\arpeggio}
+@example
+  \grace @var{musicexpr}
+@end example
 
-You can specify an @rgrob{Arpeggio} sign on a chord by issuing an
-@c FIXME
+A grace note expression has duration 0; the next real note is
+assumed to be the main note.
 
-@code{\arpeggio} request:
+You cannot have the grace note after the main note, in terms of
+duration, and main notes, but you can typeset the grace notes to the
+right of the main note using the property
+@code{graceAlignPosition}.
+@cindex @code{flagStyle}
 
+When grace music is interpreted, a score-within-a-score is set up:
+@var{musicexpr} has its own time bookkeeping, and you could (for
+example) have a separate time signature within grace notes.  While in
+this score-within-a-score, you can create notes, beams, slurs, etc.
+Unbeamed eighth notes and shorter by default have a slash through the
+stem.  This behavior can be controlled with the
+@code{flagStyle} property.
 
 @quotation
-@lilypond[fragment,relative,verbatim]
-  \context Voice <c'\arpeggio e g c>
+@lilypond[fragment,verbatim]
+\relative c'' {
+  \grace c8 c4 \grace { [c16 c16] } c4
+  \grace { \property Grace.flagStyle = "" c16 } c4
+}
+
 @end lilypond
 @end quotation
 
-Typesetting of simultanious chords with arpeggios can be controlled with
-the property @code{PianoStaff.connectArpeggios} @footnote{ FIXME:
-connectArpeggios.  Can't find the English terms for two kinds of
-arpeggio (Dutch: gebroken arpeggio vs doorlopend arpeggio).}  By
-default, LilyPond prints broken arpeggios; when set to true, one
-extended arpeggio sign is printed.
 
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \context PianoStaff <
-    \property PianoStaff.connectArpeggios = ##t
-    \context Staff \context Voice <c''\arpeggio e g c>
-    \context Staff=other \context Voice <c,\arpeggio e g>
-  >  
-@end lilypond
-@end quotation
+At present, nesting @code{\grace} notes is not supported. The following
+may cause run-time errors:
+@example
+  @code{\grace @{ \grace c32 c16 @} c4}
+@end example
+Since the meaning of such a construct is unclear, we don't consider
+this a loss.  Similarly, juxtaposing two @code{\grace} sections is
+syntactically valid, but makes no sense and may cause runtime errors.
 
+Ending a staff or score with grace notes may also generate a run-time
+error, since there will be no main note to attach the grace notes to.
 
-@c.   {Glissando}
-@node Glissando 
-@subsubsection Glissando
-@cindex Glissando 
+The present implementation is not robust and generally kludgy. We expect
+it to change after LilyPond 1.4. Syntax changes might also be
+implemented.
 
-@cindex @code{\glissando}
 
-A @rgrob{Glissando} line can be requested by issuing a
-FIXME
 
-@code{\glissando} request:
 
 
-@quotation
-@lilypond[fragment,relative,verbatim]
-  c'' \glissando c'
-@end lilypond
-@end quotation
 
-Printing of the additional text @samp{gliss.} must be done manually.
+
+@c .   {Stem tremolo}
+@menu
+* Glissando ::                  
+* Dynamics::                    
+* Crescendo and Decrescendo::   
+* Bar lines::                   
+* Breath marks::                
+* Rehearsal marks::             
+@end menu
+
 
 
-@c.    {Follow Thread}
-@subsubsection Follow Thread
-@cindex follow thread
-@cindex staff switching
-@cindex cross staff
+@c .   {Glissando}
+@node Glissando 
+@subsubsection Glissando
+@cindex Glissando 
 
-@c Documented here because it looks like a glissando...
-@cindex @code{followThread}
-A glissando-like line can be printed to connect notes whenever a thread
-switches to another staff.  This is enabled if the property
-@code{PianoStaff.followThread} is set to true:
+@cindex @code{\glissando}
+
+A glissando line can be requested by attaching a @code{\glissando} to a
+note:
 
 @quotation
 @lilypond[fragment,relative,verbatim]
-  \context PianoStaff <
-    \property PianoStaff.followThread = ##t
-    \context Staff \context Voice {
-      c'1
-      \translator Staff=two
-      b2 a
-    }
-    \context Staff=two {\clef bass; \skip 1*2;}
-  >  
+  c'' \glissando c'
 @end lilypond
 @end quotation
 
+Printing of an additional text (such as @emph{gliss.}) must be done
+manually.
+
 
 
-@c.   {Dynamics}
+@c .   {Dynamics}
 @node Dynamics
 @subsubsection Dynamics
 @cindex Dynamics
 
-@unnumberedsubsec Dynamics
+
 
 @cindex @code{\ppp}
 @cindex @code{\pp}
@@ -1575,22 +1557,62 @@ switches to another staff.  This is enabled if the property
 @cindex @code{\sfz}
 @cindex @code{\rfz}
 
+
+
+
+
+
 Dynamic marks are specified by using an identifier after a note:
-@code{c4-\ff} (the dash is optional for dynamics: `@code{c4 \ff})'.  
-The available dynamic marks are:
-@code{\ppp},
-@code{\pp}, @code{\p}, @code{\mp},
-@code{\mf}, @code{\f}, @code{\ff},
-@code{\fff}, @code{\fff},
-@code{\fp}, @code{\sf},
-@code{\sff}, @code{\sp},
-@code{\spp}, @code{\sfz}, and
-@code{\rfz}.
+@code{c4-\ff}.  The available dynamic marks are:
+@code{\ppp}, @code{\pp}, @code{\p}, @code{\mp}, @code{\mf}, @code{\f},
+@code{\ff}, @code{\fff}, @code{\fff}, @code{\fp}, @code{\sf},
+@code{\sff}, @code{\sp}, @code{\spp}, @code{\sfz}, and @code{\rfz}.
+
+@c .   {Crescendo and Decrescendo}
+@node Crescendo and Decrescendo
+@subsubsection Crescendo and Decrescendo
+
+@cindex Crescendo and Decrescendo
+@cindex crescendo
+@cindex @code{\cr}
+@cindex @code{\rc}
+@cindex @code{\decr}
+@cindex @code{\rced}
+@cindex @code{\<}
+@cindex @code{\>}
+@cindex @code{\"!}
+
+
+
+A crescendo mark is started with @code{\cr} and terminated with
+@code{\rc}, the textual reverse of @code{cr}.  A decrescendo mark is
+started with @code{\decr} and terminated with @code{\rced}.  There are
+also shorthands for these marks.  A crescendo can be started with
+@code{\<} and a decrescendo can be started with @code{\>}.  Either one
+can be terminated with @code{\!}.  Note that @code{\!}  must go before
+the last note of the dynamic mark whereas @code{\rc} and @code{\rced} go
+after the last note.  Because these marks are bound to notes, if you
+want to get several marks during one note, you must use spacer notes.
+
+@lilypond[fragment,verbatim,center]
+  c'' \< \! c''   d'' \decr e'' \rced 
+  < f''1 { s4 \< \! s2 \> \! s4 } >
+@end lilypond
+
+You can also use a text saying @emph{cresc.} instead of hairpins. Here
+is an example how to do it:
+
+@lilypond[fragment,relative,verbatim]
+  \context Voice {
+    \property Voice.crescendoText = "cresc."
+    \property Voice.crescendoSpanner = #'dashed-line
+    a''2\mf\< a a \!a 
+  }
+@end lilypond
 
-See also @ref{Crescendo and Decrescendo}
 
 
-@c.   {Bar lines}
+@c .   {Bar lines}
 @node Bar lines
 @subsubsection Bar lines
 @cindex Bar lines
@@ -1599,78 +1621,200 @@ See also @ref{Crescendo and Decrescendo}
 @cindex measure lines
 @cindex repeat bars
 
-@example
-  \bar @var{bartype};
-@end example
+@example
+  \bar @var{bartype};
+@end example
+
+This is a short-cut for doing
+@example
+  \property Score.whichBar = @var{bartype} 
+@end example
+
+You are encouraged to use @code{\repeat} for repetitions.  See
+@ref{Repeat}, and the documentation of @code{whichBar} in
+@ref{(lilypond-internals)LilyPond context properties}.
+
+
+[FIXME]
+
+@c .   {Breath marks}
+@node Breath marks
+@subsubsection Breath marks
+@cindex Breath marks
+
+@c .   {Rehearsal marks}
+@node Rehearsal marks
+@subsubsection Rehearsal marks
+@cindex Rehearsal marks
+@cindex mark
+@cindex @code{\mark}
+
+@example
+  \mark @var{unsigned};
+@cindex @code{Mark_engraver}
+  \mark @var{string};
+@end example
+
+Prints a mark over or under the staff.  
+
+
+@c .  {Bar check}
+@node Bar check
+@subsection Bar check
+@cindex Bar check
+
+@cindex bar check
+@cindex @code{barCheckNoSynchronize}
+@cindex @code{|}
+
+
+Whenever a bar check is encountered during interpretation, a warning
+message is issued if it doesn't fall at a measure boundary.  This can
+help you find errors in the input.  Depending on the value of
+@code{barCheckNoSynchronize}, the beginning of the measure will be
+relocated, so this can also be used to shorten measures.
+
+A bar check is entered using the bar symbol, @code{|}
+
+
+
+
+
+
+
+
+@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
+
+[\autochange]
+
+@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
+child of the a context of type @var{contexttype} should be shifted to
+a context of type @var{contexttype} and the specified name.
+
+Usually this is used to switch staffs in Piano music, e.g.
+
+@example
+  \translator Staff = top @var{Music}
+@end example
+
+
+@c .   {Pedals}
+@node Pedals
+@subsection Pedals
+@cindex Pedals
+
+[todo]
+
+
+@c .   {Arpeggio}
+@node Arpeggio
+@subsection Arpeggio
+@cindex Arpeggio
+
+@cindex broken arpeggio
+@cindex @code{\arpeggio}
+
+You can specify an arpeggio sign on a chord by attaching an
+@code{\arpeggio} to a note of the chord.
+
+
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \context Voice <c'\arpeggio e g c>
+@end lilypond
+@end quotation
+
+When an arpeggio crosses staffs in piano music, you attach an arpeggio
+to the chords in both staffs, and set
+@code{PianoStaff.connectArpeggios}. LilyPond will connect the arpeggios
+in both staffs.
 
-This is a short-cut for doing
-@example
-  \property Score.whichBar = @var{bartype} 
-@end example
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \context PianoStaff <
+    \property PianoStaff.connectArpeggios = ##t
+    \context Voice = one  { <c''\arpeggio e g c> }
+    \context Voice = other { \clef bass;  <c,,\arpeggio e g>}
+  >  
+@end lilypond
+@end quotation
 
-You are encouraged to use @code{\repeat} for repetitions.  See
-@ref{Repeat}, @ref{Volta}, and the documentation of @code{whichBar} in
-@ref{(lilypond-internals)LilyPond context properties}.
 
 
-[FIXME]
+@c .    {Follow Thread}
+@node Follow Thread
+@subsection Follow Thread
+@cindex follow thread
+@cindex staff switching
+@cindex cross staff
 
-@c.   {Breath marks}
-@node Breath marks
-@subsubsection Breath marks
-@cindex Breath marks
+[todo: different name, eg. voice line ? ]
 
-@c.   {Rehearsal marks}
-@node Rehearsal marks
-@subsubsection Rehearsal marks
-@cindex Rehearsal marks
-@cindex mark
-@cindex @code{\mark}
+@cindex @code{followThread}
 
-@example
-  \mark @var{unsigned};
-@cindex @code{Mark_engraver}
-  \mark @var{string};
-@end example
+Whenever a voice switches to another staff a line connecting the notes
+can be printed automatically. This is enabled if the property
+@code{PianoStaff.followThread} is set to true:
 
-Prints a mark over or under the staff.  
+@quotation
+@lilypond[fragment,relative,verbatim]
+  \context PianoStaff <
+    \property PianoStaff.followThread = ##t
+    \context Staff \context Voice {
+      c'1
+      \translator Staff=two
+      b2 a
+    }
+    \context Staff=two {\clef bass; \skip 1*2;}
+  >  
+@end lilypond
+@end quotation
 
 
-@c.  {Bar check}
-@node Bar check
-@subsection Bar check
-@cindex Bar check
 
-@cindex bar check
-@cindex @code{barCheckNoSynchronize}
-@cindex @code{|}
 
 
-Bar checks help you find errors in the input: Whenever one is
-encountered during interpretation, a warning message is issued if it
-doesn't fall at a measure boundary.  Depending on the value of
-@code{barCheckNoSynchronize},  the beginning of the measure will be
-relocated, so this can also be used to shorten measures.
 
-A bar check is entered using the bar symbol, @code{|}
 
-This can help you finding errors in the input.
 
+@c . {Lyrics}
+@node Lyrics
+@section Lyrics
 
-@c. {Lyrics entry}
-@node Lyrics entry
-@section Lyrics entry
-@cindex Lyrics entry
 
 @menu
 * Lyrics mode::                 
 * Printing lyrics::             
-* Lyric hyphen::                
-* Lyric extender::              
-* Addlyrics::                   
+* Automatic syllable durations::  
 @end menu
 
-@c.  {Lyrics mode}
+@c .  {Lyrics mode}
 @node Lyrics mode
 @subsection Lyrics mode
 @cindex Lyrics mode
@@ -1713,8 +1857,6 @@ _ _ _ _         % 4 words, each one a space
 Since combinations of numbers and dots are used for indicating
 durations, you can not enter real numbers in this mode.
 
-[todo: include short table showing differences] 
-
 @cindex lyrics expressions
 
 Syllables are entered like notes, with pitches replaced by text.  For
@@ -1727,24 +1869,17 @@ lyrics.
 Spaces can be introduced into a lyric either by using quotes
 (@code{"}) or by using an underscore without quotes: @code{He_could4
 not4}.  All unquoted underscores are converted to spaces.  Printing
-lyrics is discussed in section @ref{lyricprint}.
+lyrics is discussed in the next section.
 
 
-@c.  {Printing Lyrics}
+@c .  {Printing lyrics}
 @node Printing lyrics
-@subsection lyricprint
+@subsection Printing lyrics
 @cindex lyrics
 
 
-@cindex printing!lyrics
-
-
-Lyric syllables must be interpreted within a @code{Lyrics} context
-
-@cindex context!Lyrics
- for printing them.
-
-Here is a full example: 
+Lyric syllables must be interpreted within a @code{Lyrics} context for
+printing them. Here is a full example:
 
 @quotation
 @lilypond[verbatim]
@@ -1764,6 +1899,12 @@ Here is a full example:
 @end lilypond
 @end quotation
 
+
+
+
+@cindex extender
+@cindex lyric extender
+
 You may want a continuous line after the syllables to show melismata. 
 To achieve this effect, add a @code{__} lyric as a separate word
 after the lyric to be extended.  This will create an extender, a line
@@ -1788,7 +1929,8 @@ shorten it by using a blank lyric (using @code{_}).
 @end lilypond
 @end quotation
 
-     
+@cindex Lyric hyphen
+
 If you want to have hyphens centered between syllables (rather than
 attached to the end of the first syllable) you can use the special
 `@code{-}@code{-}' lyric as a separate word between syllables.  This
@@ -1816,34 +1958,10 @@ For example:
 @end quotation
 
 
-
-
-@c.  {Lyric hyphen}
-@node Lyric hyphen
-@subsection Lyric hyphen
-@cindex Lyric hyphen
-
-The syntax for a spanning hyphen (i.e., a hyphen that will be printed
-between two lyric syllables) is `@code{-}@code{-}'.
-
-@c.  {Lyric extender}
-@node Lyric extender
-@subsection Lyric extender
-@cindex Lyric extender
-@cindex extender
-@cindex lyric extender
-@cindex hyphen
-
-The syntax for an extender mark is @code{__}.  This syntax can only
-be used within lyrics mode.
-
-
-
-
-@c.  {Addlyrics}
-@node Addlyrics
-@subsection Addlyrics
-@cindex Addlyrics
+@c .  {Automatic syllable durations}
+@node Automatic syllable durations
+@subsection Automatic syllable durations
+@cindex Automatic syllable durations
 
 
 [explain automatic phrasing]
@@ -1901,10 +2019,12 @@ lyrics for @var{musicexpr2}.
 
 
 
-@c. {Chord entry}
-@node Chord entry
-@section Chord entry
-@cindex Chord entry
+@c . {Chords}
+@node Chords
+@section Chords
+@cindex Chords
+
+[chords vs. simultaneous music]
 
 @menu
 * Chords mode::                 
@@ -1912,7 +2032,7 @@ lyrics for @var{musicexpr2}.
 * Printing named chords::       
 @end menu
 
-@c.  {Chords mode}
+@c .  {Chords mode}
 @node Chords mode
 @subsection Chords mode
 @cindex Chords mode
@@ -1927,7 +2047,7 @@ durations, you can not enter real numbers in this mode.  Dashes
 and carets are used to indicate chord additions and subtractions,
 so scripts can not be entered in Chord mode.
 
-@c.  {Entering named chords}
+@c .  {Entering named chords}
 @node Entering named chords
 @subsection Entering named chords
 @cindex Chords names
@@ -2038,19 +2158,22 @@ so it becomes the lowest note in the chord.
 
 @end lilypond 
 
-The most interesting application is printing  chords using chord names,
-See @ref{Chord names}.
+The most interesting application is printing  chord names, which is
+explained in the next subsection.
 
 You should not combine @code{\relative} with named chords. [FIXME]
 
-@c.  {Printing named chords}
+@c .  {Printing named chords}
 @node Printing named chords
 @subsection Printing named chords
 
+
+
+
+
+@cindex printing chord names
 @cindex chord names
 @cindex chords
-
-@cindex printing!chord names
 @cindex @code{ChordNames}
 @cindex @code{ChordNameVoice}
 
@@ -2264,7 +2387,7 @@ scheme = \chords {
 
 
 
-@c. {Page layout}
+@c . {Page layout}
 @node Page layout
 @section Page layout
 @cindex Page layout
@@ -2278,7 +2401,7 @@ scheme = \chords {
 * Page break::                  
 @end menu
 
-@c.  {Paper block}
+@c .  {Paper block}
 @node Paper block
 @subsection Paper block
 @cindex Paper block
@@ -2296,34 +2419,9 @@ where each of the items is one of
   @item  An assignment.  The assignment must be terminated by a
        semicolon.  
 
-  @item  A context definition.  See section @ref{contextdefs} for
+  @item  A context definition.  See section @ref{Context definitions} for
        more information on context definitions.
 
-@ignore
-
-                FIXME
-
-
-  @item
-        
-        A margin shape declaration.  The syntax is
-@cindex @code{\shape}
-       @example
-
-         \shape @var{indent1}@code{,} @var{width1}@code{,}
-                      @var{indent2}@code{,} @var{width2} @dots{} @code{;}
-         @end example
-
-       
-
-       Each pair of @var{indent} and @var{width} values is a dimension
-       specifying how far to indent and how wide to make the line. 
-       The indentation and width of successive lines are specified by
-       the successive pairs of dimensions.  The last pair of
-       dimensions will define the characeristics of all lines beyond
-       those explicitly specified.
-@end ignore
-
   @item  \stylesheet  declaration.  Its syntax is
        @example
                \stylesheet @var{alist}
@@ -2332,7 +2430,7 @@ where each of the items is one of
         See @file{font.scm} for details of @var{alist}.
 @end itemize
 
-@c.  {Paper variables}
+@c .  {Paper variables}
 @node Paper variables
 @subsection Paper variables 
 @cindex Paper variables
@@ -2347,17 +2445,16 @@ The paper block has some variables you may want to use or change:
 
   @item @code{staffspace}
     The distance between two staff lines, calculated from the center
-    of the lines.  You should use either this or @code{rulethickness}
+    of the lines.  You should use either this or @code{stafflinethickness}
     as a unit for distances you modify.
   
 @cindex @code{linewidth}
   @item @code{linewidth}  
-    Sets the width of the lines.  If set to -1.0, a single
-    unjustified line is produced.  If you use this variable, you
-    probably want to define it in staff spaces, ie
-    @example
-        linewidth = 30 * \staffspace;
-    @end example
+    Sets the width of the lines.
+
+If set to a negative value, a single
+    unjustified line is produced.
+
 @cindex @code{textheight}
 
   @item @code{textheight}  
@@ -2382,7 +2479,8 @@ The paper block has some variables you may want to use or change:
 @end table
 
 
-@c.  {Font size}
+
+@c .  {Font size}
 @node Font Size
 @subsection Font size
 @cindex font size
@@ -2404,7 +2502,7 @@ details, see the file @file{font.scm}.
 
 
 
-@c.  {Paper size}
+@c .  {Paper size}
 @node Paper size
 @subsection Paper size
 @cindex Paper size
@@ -2440,22 +2538,9 @@ will set the paper variables @code{hsize} and @code{vsize} (used by
 
 
 
-@c.  {Line break}
+@c .  {Line break}
 @node Line break
 @subsection Line break
-@cindex Line break
-
-
-@cindex @code{\penalty}
-
-@example
-  \penalty @var{int} @code{;}
-@end example
-
-Discourage or encourage line breaks.  See @ref{Page layout}. 
-
-
-
 
 @cindex line breaks
 @cindex breaking lines
@@ -2465,37 +2550,48 @@ that the resulting spacing has low variation, and looks neither cramped
 nor loose.
 
 Occasionally you might want to override the automatic breaks; you can do
-this by specifying @code{\break} (see also @ref{Pre-defined
-Identifiers}). This will force a line break at this point. Do remember
-that line breaks can only occur at places where there are barlines.  If
-you want to have a line break where there is no barline, you can force a
-barline by entering @code{\bar "";}.
+this by specifying @code{\break}. This will force a line break at this
+point. Do remember that line breaks can only occur at places where there
+are barlines.  If you want to have a line break where there is no
+barline, you can force a barline by entering @code{\bar "";}.
+
+Similarly, @code{\noBreak} forbids a  line break at a certain point.
 
+@cindex @code{\penalty}
+
+The @code{\break} and @code{\noBreak} commands are defined in terms of
+the penalty command:
+@example
+  \penalty @var{int} @code{;}
+@end example
 
+This imposes   encourages or discourages LilyPond to make a line break
+at this point.
 
+@strong{Warning} do not use @code{\penalty} directly. It is rather
+kludgy, and slated for rewriting.
 
-@c.  {Page break}
+@c .  {Page break}
 @node Page break
 @subsection Page break
-@cindex Page break
 
+@cindex page breaks
+@cindex breaking pages
 
-Not implemented, but see @ref{Tricks}
 
 Page breaks are normally computed by @TeX{}, so they are not under direct
-control.  However, you can insert a commands into the .tex output to
+control.  However, you can insert a commands into the @file{.tex} output to
 instruct @TeX{} where to break pages. For more details, see  the
 example file @file{input/test/between-systems.ly}
 
+[or -> Tricks? ]
 
-@cindex page breaks
-@cindex breaking pages
 
 
 
 
 
-@c. {Sound}
+@c . {Sound}
 @node Sound
 @section Sound
 @cindex Sound
@@ -2505,7 +2601,7 @@ example file @file{input/test/between-systems.ly}
 * Tempo::                       
 @end menu
 
-@c.  {MIDI block}
+@c .  {MIDI block}
 @node MIDI block
 @subsection MIDI block
 @cindex MIDI block
@@ -2531,7 +2627,7 @@ Context definitions follow precisely the same syntax as within the
 The contexts for MIDI output are defined in @file{ly/performer.ly}.
 
 
-@c.  {MIDI instrument names}
+@c .  {MIDI instrument names}
 @node MIDI instrument names
 @subsection MIDI instrument names
 @cindex instrument names
@@ -2597,7 +2693,7 @@ default piano.
 
 
 
-@c.  {Tempo}
+@c .  {Tempo}
 @node Tempo
 @subsection Tempo
 @cindex Tempo
@@ -2616,69 +2712,92 @@ output with 76 quarter notes per minute.
 
 
 
-@c. {Music entry}
+@c . {Music entry}
 @node Music entry
 @section Music entry
 @cindex Music entry
 @menu
-* Pre-defined Identifiers::     
+* Relative::                    
 * Point and click::             
 @end menu
 
-@c.  {Pre-defined Identifiers}
-@node Pre-defined Identifiers
-@subsection Pre-defined Identifiers
-@cindex pre-defined identifiers
 
 
-Various identifiers are defined in the initialization files to
-provide shorthands for some settings.  Most of them are in
-@file{ly/declarations.ly} and @file{ly/property.ly}.
+@c .  {Relative}
+@node Relative
+@subsection Relative
+@cindex Relative
+@cindex relative octave specification
+
+Octaves are specified by adding @code{'} and @code{,} to pitch names.
+When you copy existing music, it is easy to accidentally put a pitch in
+the wrong octave and hard to find such an error.  To prevent these
+errors, LilyPond features octave entry.
+
+@cindex @code{\relative}
+@example
+  \relative @var{startpitch} @var{musicexpr}
+@end example
 
-@table @code
-@cindex @code{\break}  
-  @item @code{\break}
-    Force a line break in music by using a large argument for the
-    keyword @code{\penalty}.
+The octave of notes that appear in @var{musicexpr} are calculated as
+follows: If no octave changing marks are used, the basic interval
+between this and the last note is always taken to be a fourth or less.
+  The octave changing marks @code{'} and @code{,} can then
+be added to raise or lower the pitch by an extra octave.  Upon entering
+relative mode, an absolute starting pitch must be specified that will
+act as the predecessor of the first note of @var{musicexpr}.
 
-@cindex @code{\nobreak}  
-  @item @code{\nobreak}
-    Prevent a line break in music by using a large negative argument
-    for the keyword @code{\penalty}.
+This distance is determined without regarding accidentals: a
+@code{fisis} following a @code{ceses} will be put above the
+@code{ceses}.
 
-@cindex @code{\shiftOff}  
-  @item @code{\shiftOff}
-    Disable horizontal shifting of note heads that collide. 
+Entering scales is straightforward in relative mode.
 
-@cindex @code{\shiftOn}  
-  @item @code{\shiftOn}
-    Enable note heads that collide with other note heads to be
-    shifted horiztonally. Also @code{\shiftOnn} and @code{\shiftOnnn}
-set different shift values.
+@lilypond[fragment,verbatim,center]
+  \relative c'' {
+    g a b c d e f g g, g
+  }
+@end lilypond
 
-@cindex @code{\stemBoth}  
-  @item @code{\stemBoth}
-    Allow stems, beams, and slurs to point either upwards or
-    downwards, decided automatically by LilyPond.
+And octave changing marks are used for intervals greater than a fourth.
 
-@cindex @code{\stemDown}  
-  @item @code{\stemDown}
-    Force stems, beams, and slurs to point down.
+@lilypond[fragment,verbatim,center]
+  \relative c'' {
+    c g c f, c' a, e'' }
+@end lilypond
 
-@cindex @code{\stemUp}  
-  @item @code{\stemUp}
-    Force stems, beams and slurs to point up.
+If the preceding item is a chord, the first note of the chord is used
+to determine the first note of the next chord.  But other notes
+within the second chord are determined by looking at the immediately
+preceding note.
 
-@end table
+@lilypond[fragment,verbatim,center]
+  \relative c' {
+    c <c e g> 
+    <c' e g>
+    <c, e' g>
+  }
+@end lilypond 
+@cindex @code{\notes}
+
+The pitch after the @code{\relative} contains a notename.  To parse
+the pitch as a notename, you have to be in note mode, so there must
+be a surrounding @code{\notes} keyword (which is not
+shown here).
+
+The relative conversion will not affect @code{\transpose} or
+@code{\relative} sections in its argument.  If you want to use
+relative within transposed music, you must place an additional
+@code{\relative} inside the @code{\transpose}.
 
 
-@c.  {Point and click}
+@c .  {Point and click}
 @node Point and click
 @subsection Point and click
 
 [todo]
 
-@c. {Engravers}
+@c . {Engravers}
 @node Engravers
 @section Engravers
 @cindex engravers
@@ -2687,7 +2806,9 @@ set different shift values.
 * Notation Contexts::           
 @end menu
 
-@c.  {Context definitions}
+[rewrite this entirely]
+
+@c .  {Context definitions}
 @node Context definitions
 @subsection Context definitions
 
@@ -2725,14 +2846,11 @@ A context definition has this syntax:
                     @code{@}}
 @end example
 
-@var{translatorinit} can be an identifier or of the form
-
+@var{translatorinit} can be an identifier or 
 @example
-
   \type @var{typename} @code{;}
 @end example
-
-@var{typename} is one of
+where @var{typename} is one of
 
 @table @code
 @cindex @code{Engraver_group_engraver}
@@ -2786,8 +2904,7 @@ completeness, but is never used in practice.
     the name is not specified, the translator won't do anything.
 
   @item  @var{propname} @code{=} @var{value} @code{;}  
-    A property assignment.  It is allowed to use reals for
-    @var{value}.
+    A property assignment.
 @end itemize
 
 In the @code{\paper} block, it is also possible to define translator
@@ -2835,26 +2952,14 @@ translators.  The pre-defined identifiers are:
 
   @item @code{ScoreContext}  
     Default Score context. 
-@cindex @code{ScoreWithNumbers}
 
-  @item @code{ScoreWithNumbers}  
-    Score context with numbering at the Score level.
-@cindex @code{BarNumberingStaffContext}
-
-  @item @code{BarNumberingStaffContext}  
-    Staff context with numbering at the Staff level.
 @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.}
-@cindex @code{OrchestralPartStaffContext}
-
-  @item @code{OrchestralPartStaffContext}
-@cindex @code{OrchestralScoreContext}
 
-  @item @code{OrchestralScoreContext}
 @end table
 
 Using these pre-defined values, you can remove or add items to the
@@ -2877,7 +2982,7 @@ translator:
       
 
 
-@c.  {Notation Contexts}
+@c .  {Notation Contexts}
 @node Notation Contexts
 @subsection Notation Contexts
 
@@ -3032,10 +3137,10 @@ called @emph{performers}.
 
 
 
-@c. {Lexer innards}
-@node Lexer innards
-@section Lexer innards
-@cindex Lexer innards
+@c . {Syntactic details}
+@node Syntactic details
+@section Syntactic details
+@cindex Syntactic details
 @menu
 * Top level::                   
 * Identifiers::                 
@@ -3045,7 +3150,7 @@ called @emph{performers}.
 * Ambiguities::                 
 @end menu
 
-@c.  {Top level}
+@c .  {Top level}
 @node Top level
 @subsection Top level
 @cindex Top level
@@ -3067,19 +3172,19 @@ definition.  A score block has the following syntax:
 definition is supplied, the default @code{\paper} block will be added.
 
 
-@c.   {Score}
+@c .   {Score}
 @subsubsection Score
 @cindex Score
 
-@c.   {Paper}
+@c .   {Paper}
 @subsubsection Paper
 @cindex Paper
 
-@c.   {Midi}
+@c .   {Midi}
 @subsubsection Midi
 @cindex Midi
 
-@c.   {Header}
+@c .   {Header}
 @subsubsection Header
 @cindex Header
 @cindex @code{\header}
@@ -3107,7 +3212,7 @@ A @code{\midi} or @code{\paper} block at top-level sets the default
 
 paper block for all scores that lack an explicit paper block.
 
-@c.  {Identifiers}
+@c .  {Identifiers}
 @node Identifiers
 @subsection Identifiers
 @cindex  Identifiers
@@ -3119,10 +3224,9 @@ number, boolean, etc.), LilyPond has a number of specialized data types,
 @itemize @bullet
 @item Input
 @item c++-function
-@item Music: see @ref{Music expressions}
+@item Music
 @item Identifier
-@item Translator_def:
-See section @ref{contextdefs} for more information
+@item Translator_def
 @item Duration
 @item Pitch
 @item Score
@@ -3148,7 +3252,7 @@ not yet user accessible.
 @end itemize
 
 
-@c.   {Assignments}
+@c .   {Assignments}
 @node Assignments
 @subsection Assignments
 @cindex Assignments
@@ -3167,7 +3271,7 @@ that this problem will grow smaller.
 
 An identifier can be created with any string for its name, but you will
 only be able to refer to identifiers whose names begin with a letter,
-being entirely alphanumeric.  It is impossible to refer to an identifier
+being entirely alphabetical.  It is impossible to refer to an identifier
 whose name is the same as the name of a keyword.
 
 The right hand side of an identifier assignment is parsed completely
@@ -3183,26 +3287,23 @@ copied.  For this reason, an identifier reference must always be the
 first item in a block.
 @example
 \paper  @{
-foo = 1.0
-\paperIdent % wrong and invalid
+       foo = 1.0
+       \paperIdent % wrong and invalid
 @}
 
 \paper @{
-\paperIdent % correct
-foo = 1.0
-@}
+       \paperIdent % correct
+       foo = 1.0 @}
 @end example
 
-
-
-@c.  {Lexical details}
+@c .  {Lexical details}
 @node Lexical details
 @subsection Lexical details
 @cindex Lexical details
 @menu
 @end menu
 
-@c.   {Comments}
+@c .   {Comments}
 @subsubsection Comments
 @cindex Comments
 
@@ -3210,10 +3311,10 @@ foo = 1.0
 
 
 A one line comment is introduced by a @code{%} character. 
-Block comments are started by @code{%@{} and ended by `@code{%@}}'
+Block comments are started by @code{%@{} and ended by @code{%@}}
 They cannot be nested.
 
-@c.  {Direct Scheme}
+@c .  {Direct Scheme}
 @subsubsection Direct Scheme
 @cindex Scheme
 @cindex GUILE
@@ -3242,7 +3343,7 @@ the website @uref{http://www.schemers.org/} for more information on
 Scheme.
 
 
-@c.   {Keywords}
+@c .   {Keywords}
 @subsubsection Keywords
 @cindex Keywords
 
@@ -3263,7 +3364,7 @@ script stylesheet skip textscript tempo translator
 transpose type
 @end example
 
-@c.   {Integers}
+@c .   {Integers}
 @subsubsection Integers
 
 @cindex integers
@@ -3276,7 +3377,7 @@ Formed from an optional minus sign followed by digits.  Arithmetic
 operations cannot be done with integers, and integers cannot be mixed
 with reals.
 
-@c.   {Reals}
+@c .   {Reals}
 @subsubsection Reals
 @cindex real numbers
 
@@ -3302,7 +3403,7 @@ points, inches and centimeters, respectively.  This converts the number
 to a real that is the internal representation of dimensions.
 
 
-@c.   {Strings}
+@c .   {Strings}
 @subsubsection Strings
 @cindex string
 @cindex concatenate
@@ -3311,15 +3412,15 @@ Begins and ends with the @code{"} character.  To include a @code{"}
 character in a string write @code{\"}.  Various other backslash
 sequences have special interpretations as in the C language.  A string
 that contains no spaces can be written without the quotes.  See
-@ref{Lexical modes} for details on unquoted strings; their interpretation varies
-depending on the situation.  Strings can be concatenated with the
-@code{+} operator.
+@ref{Lexical modes} for details on unquoted strings; their
+interpretation varies depending on the situation.  Strings can be
+concatenated with the @code{+} operator.
 
 The tokenizer accepts the following commands. They have no grammatical
 function, hence they can appear anywhere in the input.
 
 
-@c.   {Main input}
+@c .   {Main input}
 @subsubsection Main input
 @cindex Main input
 
@@ -3328,7 +3429,7 @@ function, hence they can appear anywhere in the input.
 The @code{\maininput} command is used in init files to signal that the
 user file must be read. This command cannot be used in a user file.
 
-@c.   {File inclusion}
+@c .   {File inclusion}
 @subsubsection Main input
 @cindex Main input
 
@@ -3357,34 +3458,18 @@ See @ref{convert-ly} for more information on @code{convert-ly}.
 @cindex convert-ly
 
 
-
-
-@c.   {Pitch names}
-@subsubsection Pitch names
+@c .   {Pitch names}
+@subsubsection Defining pitch names
 @cindex Lexical modes
-@cindex pitch names
-
+@cindex definining pitch names
+@cindex pitch names, definining
 @cindex note names
 @cindex chord modifier names
 
-Note names and chord modifiers can be customised for nationalities.
-languages and conventions.  The syntax is as follows.
-@cindex @code{\pitchnames}
-@cindex @code{\chordmodifiers}
-
-@example
-   \pitchnames @var{scheme-alist}
-   \chordmodifiers @var{scheme-alist}
-@end example
-
-See @file{ly/nederlands.ly} and @file{ly/chord-modifiers.ly} for
-specific examples how to do this.  tables can be tailored specified
-using. Some national note names have been provided, see
-section @ref{Other languages}.
 A @code{\paper} block at top level sets the default paper block.  A
 @code{\midi} block at top level works similarly.
 
-@c.   {Assignments}
+@c .   {Assignments}
 @subsubsection Assignments
 @cindex assignments
 @cindex @code{#}
@@ -3393,64 +3478,46 @@ Identifier assignments may appear at top level.  @ref{Assignments}
 
 
 
-@c.    {Direct scheme}
+@c .    {Direct scheme}
 @subsubsection Direct scheme
 @cindex Direct scheme
 
 Scheme statements maybe issued to produce interesting side-effects. 
 
 
-@c.  {Lexical modes}
+@c .  {Lexical modes}
 @node Lexical modes
 @subsection Lexical modes
 @cindex Lexical modes
-
-@cindex Lexical modes
-@cindex modes
+@cindex input mode
+@cindex mode, input 
+@cindex @code{\notes}
+@cindex @code{\chords}
+@cindex @code{\lyrics}
 
 To simplify entering notes, lyrics, and chords, LilyPond has three
-special input modes on top of the default mode.  In each mode, words
-are identified on the input.  If @code{"word"} is encountered, it is
-treated as a string.  If @code{\word} is encountered, it is treated as
-a keyword or as an identifier.  The behavior of the modes differs in
-two ways: Different modes treat unquoted words differently, and
-different modes have different rules for deciding what is a word.
-
-@table  @asis
-@item Normal mode.
-@cindex normal mode
-At the start of parsing, LilyPond is in Normal mode.  In Normal
-mode, a word is an alphabetic character followed by alphanumeric
-characters.  If @code{word} is encountered on the input it is
-treated as a string.
-
-@item Note mode
-See @ref{Note entry}.
-
-@item Lyrics mode
-See @ref{Lyrics entry}.
-
-@item Chord mode
-See @ref{Chord entry}.
-@end table
-
-@cindex input modes
+special input modes on top of the default mode: note, lyrics and chords
+mode.  These input modes change the way that normal, unquoted words are
+interpreted: for example, the word @code{cis} may be interpreted as a
+C-sharp, as a lyric syllable `cis' or as a C-sharp major triad
+respectively.
 
-@cindex mode switch
+A mode switch is entered as a compound music expressions
+@example
+@code{\notes} @var{musicexpr}
+@code{\chords} @var{musicexpr}
+@code{\lyrics}  @var{musicexpr}.
+@end example
 
-@cindex @code{\notes}
-@cindex @code{\chords}
-@cindex @code{\lyrics}
+In each of these cases, these expressions do not add anything to the
+meaning of their arguments.  They are just a way to indicate that the
+arguments should be parsed in indicated mode.  The modes are treated in
+more detail in the sections @ref{Note entry}, @ref{Lyrics} and
+@ref{Chords}.
 
-Mode switching keywords form compound music expressions: @code{\notes}
-@var{musicexpr}, @code{\chords}  @var{musicexpr},
-and @code{\lyrics}  @var{musicexpr}.  These
-expressions do not add anything to the meaning of their arguments.  They
-are just a way to indicate that the arguments should be parsed in
-indicated mode.  See @ref{Lexical modes} for more information on modes.
+You may nest different input modes.
 
-@c.  {Ambiguities}
+@c .  {Ambiguities}
 @node Ambiguities
 @subsection Ambiguities
 @cindex ambiguities
@@ -3503,8 +3570,7 @@ foo = -6
 
 
 
-
-@c. {Unsorted}
+@c . {Unsorted}
 @node Unsorted
 @section Unsorted
 
@@ -3515,6 +3581,9 @@ Translation?
 @cindex properties
 @unnumberedsubsec Translation property
 
+[todo: add \set/\override/\revert]
+
+
 @cindex @code{\property}
 @example
   \property @var{contextname}.@var{propname} =  @var{value}
@@ -3525,24 +3594,6 @@ the specified @var{value}.  All three arguments are strings.
 Depending on the context, it may be necessary to quote the strings or
 to leave space on both sides of the dot.
 
-@cindex translator switches
-@unnumberedsubsec Translator switches
-
-@cindex @code{\translator}
-@example
-  \translator @var{contexttype} = @var{name}
-@end example
-
-A music expression indicating that the context which is a direct
-child of the a context of type @var{contexttype} should be shifted to
-a context of type @var{contexttype} and the specified name.
-
-Usually this is used to switch staffs in Piano music, e.g.
-
-@example
-  \translator Staff = top @var{Music}
-@end example
-
 
 @cindex output properties
 @unnumberedsubsec Output properties
@@ -3557,12 +3608,12 @@ you need to know exactly how the backend works. Example:
 \relative c'' { c4
         \context Staff \outputproperty
                #(make-type-checker 'note-head-interface)
-               #'extra-offset = #'(5.0 . 7.5)
+               #'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{(5,7.5)}, shifting them
+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
@@ -3570,13 +3621,33 @@ result will depend very heavily on the implementation of the backend,
 which we change regularly and unscrupulously.
 
 
-@c.{Local emacs vars}
+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
+
+
+
+
+
+@c .{Local emacs vars}
 @c Local variables:
 @c mode: texinfo
 @c minor-mode: font-lock
 @c minor-mode: outline
 @c outline-layout: (-1 : 0)
-@c outline-use-mode-specific-leader: "@c\."
+@c outline-use-mode-specific-leader: "@c \."
 @c outline-primary-bullet: "{"
 @c outline-stylish-prefixes: nil
 @c outline-override-protect: t
index 7f6a5d1fb18e1973344bb5dc9217613fe0c4b4d1..9e4ded359c4e01214eeaac169fac795b3b869c47 100644 (file)
@@ -36,16 +36,12 @@ yes: \property Staff.VoltaBracket = #'((meta .  ((interfaces . ()))))
 
 @menu
 * Manual beam settings::        Manual beam settings
-* Slur attachments::            Slur attachments
 * Engraver hacking::            Engraver hacking
 * Part combiner::               Part combiner
 * Markup text::                 Markup text
-* Output property::             Output property
 * Apply hacking::               Apply hacking
 * Embedded TeX::                Embedded TeX
 * Embedded PostScript::         Embedded PostScript
-@c * Index::                          Checking Feature index
-* Index::                       Checking Feature index
 @end menu
 
 
@@ -59,65 +55,6 @@ yes: \property Staff.VoltaBracket = #'((meta .  ((interfaces . ()))))
 @c auto knees
 
 
-
-
-
-@cindex @code{]}
-
-In some cases it may be necessary to override LilyPond's automatic
-beaming algorithm.  For example, the auto beamer will not beam over
-rests, so if you want that, specify the begin and end point manually
-using @code{[} and @code{]}:
-
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \context Staff {
-    r4 [r8 g'' a]
-  }
-@end lilypond
-@end quotation
-
-Similarly, for beams over bar lines:
-
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \context Staff {
-    a''8 r a2 r8 [a a]
-  }
-@end lilypond
-@end quotation
-@cindex @code{stemLeftBeamCount}
-
-If you have specific wishes for the number of beams, you can fully
-control the number of beams through the properties
-@code{Voice.stemLeftBeamCount};
-
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \context Staff {
-    [f'8 r16 f g a]
-    [f8 r16 \property Voice.stemLeftBeamCount = #1 f g a]
-  }
-@end lilypond
-@end quotation
-@cindex @code{stemRightBeamCount}
-
-and @code{Voice.stemRightBeamCount}:
-@quotation
-@lilypond[fragment,relative,verbatim]
-  f'32 g a b b a g f
-
-  \property Voice.autoBeamSettings
-    \set #'(end * * * *) = #(make-moment 1 4)
-  f32 g a b b a g f
-
-  f32 g a
-  \property Voice.stemRightBeamCount = #1 b
-  \property Voice.stemLeftBeamCount = #1 b
-  a g f
-@end lilypond
-@end quotation
 @cindex @code{no-stem-extend}
 
 Conventionally, stems and beams extend to the middle staff line.  This
@@ -209,94 +146,6 @@ your favourite algorithm isn't one of these, you can hook up your own.
 
 
 
-@node Slur attachments
-@section Slur attachments
-
-The ending of a slur should whenever possible be attached to a note
-head.  Only in some instances where beams are involved, LilyPond may
-attach a slur to a stem end.  In some cases, you may want to override
-LilyPond's decision, e.g., to attach the slur to the stem end.  This can
-be done through @code{Voice.Slur}'s grob-property @code{attachment}:
-@c FIXME: make @ref{} to backend doco
-
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \property Voice.Slur \set #'direction = #1
-  \property Voice.Stem \set #'length = #5.5
-  g''8(g)g4
-  \property Voice.Slur \set #'attachment = #'(stem . stem)
-  g8(g)g4
-@end lilypond
-@end quotation
-
-Similarly, slurs can be attached to note heads even when beams are
-involved:
-
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \property Voice.Slur \set #'direction = #1
-  \property Voice.Slur \set #'attachment = #'(head . head)
-  g''16()g()g()g()d'()d()d()d
-@end lilypond
-@end quotation
-
-If a slur would strike through a stem or beam, LilyPond will move the
-slur away vertically (upward or downward).  In some cases, this may
-cause ugly slurs that you may want to correct:
-
-@quotation
-@lilypond[fragment,relative,verbatim]
-  \property Voice.Stem \set #'direction = #1
-  \property Voice.Slur \set #'direction = #1
-  d'32( d'4 )d8..
-  \property Voice.Slur \set #'attachment = #'(stem . stem)
-  d,32( d'4 )d8..
-@end lilypond
-@end quotation
-
-LilyPond will increase the curvature of a slur trying to stay free of
-note heads and stems.  However, if the curvature would increase too much,
-the slur will be reverted to its default shape.  This decision is based
-on @code{Voice.Slur}'s grob-property @code{beautiful} value.  In some
-cases, you may find ugly slurs beautiful, and tell LilyPond so by
-increasing the @code{beautiful} value:
-
-[hoe  gedefd?? wat betekent beautiful = X?]
-
-@quotation
-@lilypond[verbatim]
-\score {
-  \notes \context PianoStaff <
-    \time 6/4;
-    \context Staff=up { s1 * 6/4 }
-    \context Staff=down <
-      \clef bass;
-      \autochange Staff \context Voice
-        \notes \relative c {
-          d,8( a' d f a d f d a f d )a
-        }
-    >
-  >
-  \paper {
-    linewidth = -1.;
-    \translator {
-      \VoiceContext
-      Slur \override #'beautiful = #5.0
-      Slur \override #'direction = #1
-      Stem \override #'direction = #-1
-      autoBeamSettings \override #'(end * * * *)
-        = #(make-moment 1 2)
-    }
-    \translator {
-      \PianoStaffContext
-      VerticalAlignment \override #'threshold = #'(5 . 5)
-    }
-  }
-}
-@end lilypond
-@end quotation
-
-
 @node Engraver hacking
 @section Engraver hacking
 
@@ -416,32 +265,6 @@ Metrome hack...
 @end lilypond
 
 
-@node Output property
-@section Output property
-
-@lilypond[fragment,relative,verbatim]
-    \outputproperty #(make-type-checker 'note-head-interface) 
-      #'extra-offset = #'(2 . 3)
-    c''2 c
-@end lilypond
-
-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
-
-
 @c  equalizer
 
 
@@ -499,15 +322,3 @@ Arbitrary lines and curves not supported...
   \paper { linewidth = 70 * \staffspace; }
 }
 @end lilypond
-
-@ignore 
-@node Index
-@section Checking Feature index
-
-@printindex cp
-
-
-@bye
-@end ignore
-
-
index 06ec22974965770391aec403eae0228344cc3cf1..c86ccfae3d668cbc705748676bc4ab2e58828166 100644 (file)
@@ -9,7 +9,7 @@
 * The first tune::                 The first tune
 * Lyrics and chords::              Lyrics and chords
 * More movements::                 More than one movement in a file
-* Piano music::                    Piano music
+* A piano excerpt::                    Piano music
 * end of tutorial::                The end
 @end menu
 
@@ -1086,8 +1086,8 @@ will be at the left.
 
 
 
-@node Piano music
-@section Piano music
+@node A piano excerpt
+@section A piano excerpt
 
 Our third subject is a piece of piano music.  The fragment in the input
 file is a piano reduction of the G major Sinfonia by Giovanni Battista
diff --git a/VERSION b/VERSION
index 48b1e42c11b8d8172e5244adee1521baf95cdb36..65caf5f0edc9a85867e9c7e2515ed800a64d34ef 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,8 +1,8 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
-PATCH_LEVEL=127
-MY_PATCH_LEVEL=jcn4
+PATCH_LEVEL=128
+MY_PATCH_LEVEL=
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
diff --git a/input/bugs/textstyle.ly b/input/bugs/textstyle.ly
new file mode 100644 (file)
index 0000000..a015574
--- /dev/null
@@ -0,0 +1,4 @@
+
+\score { \notes
+   { c4_"foo" }
+} 
index 26bd470d44ee738408d6c784e29252d967065867..7cfbd25c485601dd91168acde6a262d0bfae0e64 100644 (file)
@@ -1,3 +1,4 @@
+\version "1.3.122"
 
 #(define raisedflat '((raise . 0.4) (music (named "accidentals--1"))))
 
index f037d10dde416e2a43b6599babbfc5afaf24ac95..0222093bf12e7d3c20f1d166a2643ea988fdef0c 100644 (file)
@@ -4,12 +4,14 @@ global =  \notes {
   s1 | \mark "A";
   s1 | \mark ; 
   s1 | \mark "12";
+  s1 | \mark ; 
   s1 | \mark "A2";
+  s1 | \mark #'(music "scripts-segno") ; 
   s1
 }
 
 one =  \notes \relative c {
-  c''1 c c c c 
+  c''1 c c c c c c 
 }
 
 
index be3360d573eea63b9407e2069548f06e87bf05a8..06a8b1acf852ea8d9d9ab614e7ab6934c7562803 100644 (file)
@@ -1,4 +1,8 @@
-\version "1.3.120";
+\header{
+  latexpackages="graphicx";
+}
+
+\version "1.3.126";
 
 m =  \notes \relative c''{
 
@@ -13,7 +17,7 @@ c1 | c2 c | c c | R1*5
 \score{ < 
   \context StaffGroup = wood <
     \context Staff = flauto <
-      \property Staff.instrument = "Flauto"
+      \property Staff.instrument = "\\rotatebox[origin=c]{90}{Flauto}"
       \property Staff.instr = "Fl."
       \m
     >
@@ -97,7 +101,7 @@ c1 | c2 c | c c | R1*5
       \OrchestralScoreContext
       skipBars = ##t 
       markScriptPadding = #4.0
-      BarNumber \override $'padding = #3
+      BarNumber \override #'padding = #3
       RestCollision \override #'maximum-rest-count = #1
       marginScriptHorizontalAlignment = #1
     }
index fb7f564a34c42a5bdc6c7a7262794d63092b4f1e..a1eb48cb461bc06d5479cb269fad5c9aac3ff182 100644 (file)
@@ -4,7 +4,7 @@
     \notes                     
     \relative c''
         \sequential {          
-           \key g;
+           \key g \major;
            \time 3/4;          
 
        \repeat "volta" 2 \sequential {
diff --git a/input/tutorial/orchestral.ly b/input/tutorial/orchestral.ly
deleted file mode 100644 (file)
index e69de29..0000000
index 496baacbd0758f086771e72496847f484728586a..e990addf9b939462b3a5689cfe7f537a4f4caf6e 100644 (file)
@@ -20,6 +20,8 @@
 #include "spanner.hh"
 #include "item.hh"
 #include "chord-tremolo-iterator.hh"
+#include "stem-tremolo.hh"
+#include "music-list.hh"
 
 /**
   This acknowledges repeated music with "tremolo" style.  It typesets
@@ -52,17 +54,18 @@ protected:
   Moment beam_start_location_;
 
   int note_head_i_;
-  
+
+  bool sequential_body_b_;
   Spanner * beam_p_;
   Spanner * finished_beam_p_;
-  
+  Item * stem_tremolo_;
 protected:
   virtual void finalize();
   virtual bool try_music (Music*);
   virtual void acknowledge_grob (Grob_info);
   virtual void stop_translation_timestep();
   virtual void start_translation_timestep();
-  virtual void create_grobs ();
+  virtual void process_music ();
 };
 
 Chord_tremolo_engraver::Chord_tremolo_engraver()
@@ -70,6 +73,8 @@ Chord_tremolo_engraver::Chord_tremolo_engraver()
   beam_p_  = finished_beam_p_ = 0;
   repeat_ =0;
   note_head_i_ = 0;
+  stem_tremolo_ = 0;
+  sequential_body_b_ = false;
 }
 
 bool
@@ -84,32 +89,50 @@ Chord_tremolo_engraver::try_music (Music * m)
       repeat_ = rp;
       start_mom_ = now_mom ();
       stop_mom_ = start_mom_ + l;
+      sequential_body_b_ = dynamic_cast<Sequential_music*> (rp->body ());
 
       // ugh. should generate dots, triplet beams.      
       note_head_i_ = l.den () <? 4; 
       return true;
     }
+
   return false;
 }
 
 void
-Chord_tremolo_engraver::create_grobs ()
+Chord_tremolo_engraver::process_music ()
 {
-  if (repeat_ && !beam_p_)
+  if (repeat_)
     {
-      beam_p_ = new Spanner (get_property ("Beam"));
-      Beam::set_interface (beam_p_);
-      beam_p_->set_grob_property ("chord-tremolo", SCM_BOOL_T);
+      if (sequential_body_b_ && !beam_p_)
+       {
+         beam_p_ = new Spanner (get_property ("Beam"));
+         Beam::set_interface (beam_p_);
+         beam_p_->set_grob_property ("chord-tremolo", SCM_BOOL_T);
 
 
-      SCM smp = get_property ("measurePosition");
-      Moment mp =  (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
-      beam_start_location_ = mp;
-      announce_grob (beam_p_, repeat_);
-    }
-}
+         SCM smp = get_property ("measurePosition");
+         Moment mp
+           =  (unsmob_moment (smp)) ? *unsmob_moment (smp) : Moment (0);
+         beam_start_location_ = mp;
+         announce_grob (beam_p_, repeat_);
+       }
+      else if (!sequential_body_b_ && !stem_tremolo_)
+       {
+         int flags = intlog2(note_head_i_ * repeat_->repeat_count ()) -2;
+         if (flags)
+           {
+             stem_tremolo_ = new Item (get_property ("StemTremolo"));
+             Stem_tremolo::set_interface (stem_tremolo_);
 
+             announce_grob (stem_tremolo_, repeat_);
+             stem_tremolo_->set_grob_property ("tremolo-flags",
+                                               gh_int2scm (flags));
 
+           }
+       }
+    }
+}
 void
 Chord_tremolo_engraver::finalize ()
 {
@@ -117,12 +140,7 @@ Chord_tremolo_engraver::finalize ()
   if (beam_p_)
     {
       repeat_->origin ()->warning (_ ("unterminated chord tremolo"));
-#if 0
-      finished_beam_p_ = beam_p_;
-      typeset_beam ();
-#else
       beam_p_->suicide ();
-#endif
     }
 }
 
@@ -182,10 +200,18 @@ Chord_tremolo_engraver::acknowledge_grob (Grob_info info)
                ::warning (s);
            }
        }
-      if (Note_head::has_interface (info.elem_l_))
-       {
-         info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
-       }
+    }
+  else if (stem_tremolo_ && Stem::has_interface (info.elem_l_))
+    {
+       Stem_tremolo::set_stem (stem_tremolo_, info.elem_l_);
+
+       info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
+    }
+
+  
+  if (repeat_ && Note_head::has_interface (info.elem_l_))
+    {
+      info.elem_l_->set_grob_property ("duration-log", gh_int2scm (intlog2 (note_head_i_)));
     }
 }
 
@@ -207,6 +233,13 @@ void
 Chord_tremolo_engraver::stop_translation_timestep ()
 {
   typeset_beam ();
+
+  if (stem_tremolo_)
+    {
+      typeset_grob (stem_tremolo_);
+      stem_tremolo_ = 0;
+    }
+  
 }
 
 ADD_THIS_TRANSLATOR(Chord_tremolo_engraver);
index 4e5f166ad27757ab40059e4b21b3d2cee7465fea..d467a59e82b7c16d0e941629a671ff99a4c3edaf 100644 (file)
@@ -430,7 +430,7 @@ static void
 init_functions ()
 {
   scm_make_gsubr ("ly-warn", 1, 0, 0, (Scheme_function_unknown)ly_warning);
-  scm_make_gsubr ("ly-version", 0, 0, 0, (Scheme_function_unknown)ly_warning);  
+  scm_make_gsubr ("ly-version", 0, 0, 0, (Scheme_function_unknown)ly_version);  
   scm_make_gsubr ("ly-gulp-file", 1,0, 0, (Scheme_function_unknown)ly_gulp_file);
   scm_make_gsubr ("dir?", 1,0, 0, (Scheme_function_unknown)ly_isdir_p);
 
index 4e8f1725dd9c3725e6e161fea203f99466573758..42dcb8751389ca182a071b85f4a64d56faaf147f 100644 (file)
@@ -149,51 +149,56 @@ Mark_engraver::create_grobs ()
        */
       
       SCM m = mark_req_l_->get_mus_property ("label");
-      if (!gh_string_p (m)) 
-       m =  get_property ("rehearsalMark");
-;
-      
-      if (gh_number_p (m))
-       {
-         int mark_count = gh_scm2int (m);
-         t = to_str (mark_count);
-         mark_count ++;
-         m = gh_int2scm (mark_count);
-       }
-      else if (gh_string_p (m))
+      if (gh_pair_p (m)) // markup text
+       text_p_->set_grob_property ("text",m);
+      else 
        {
-         t = ly_scm2string (m);
-         String next;
-         if (t.length_i ())
+         if (!gh_string_p (m)) 
+           m =  get_property ("rehearsalMark");
+         ;
+         
+         if (gh_number_p (m))
            {
-             char c = t[0];
-             c++;
-             next = to_str (c);
+             int mark_count = gh_scm2int (m);
+             t = to_str (mark_count);
+             mark_count ++;
+             m = gh_int2scm (mark_count);
+           }
+         else if (gh_string_p (m))
+           {
+             t = ly_scm2string (m);
+             String next;
+             if (t.length_i ())
+               {
+                 char c = t[0];
+                 c++;
+                 next = to_str (c);
+               }
+             m = ly_str02scm (next.ch_C());
+           }
+         else
+           {
+             m = gh_int2scm (1);
            }
-         m = ly_str02scm (next.ch_C());
-       }
-      else
-       {
-         m = gh_int2scm (1);
-       }
          
-      daddy_trans_l_->set_property ("rehearsalMark", m);
-
-      
-      text_p_->set_grob_property ("text",
-                                ly_str02scm ( t.ch_C()));
+         daddy_trans_l_->set_property ("rehearsalMark", m);
+         
+         text_p_->set_grob_property ("text",
+                                     ly_str02scm ( t.ch_C()));
 
-      String style = "mark";
-      for (int i=0; i < t.length_i(); i++)
-       {
-         if (!isdigit(t[i])) 
+         String style = "mark";
+         for (int i=0; i < t.length_i(); i++)
            {
-             style = "large";
-             break;
+             if (!isdigit(t[i])) 
+               {
+                 style = "large";
+                 break;
+               }
            }
+         SCM st = ly_symbol2scm (style.ch_C());
+         text_p_->set_grob_property ("font-style",  st);
        }
-      SCM st = ly_symbol2scm (style.ch_C());
-      text_p_->set_grob_property ("font-style",  st);
+
     }
 }
 
index 9b3080f12d1138cf6046b248207e50795aad4243..cc0f2dd25d3b6bde6d803b259c62371a8306dfad 100644 (file)
@@ -45,6 +45,9 @@ Moment::print_smob (SCM s, SCM port, scm_print_state *)
   return 1;
 }
 
+/*
+  TODO: add optional factor argument.
+ */
 SCM
 make_rational (SCM n, SCM d)
 {
index cc62753a21efcc6c4a5a4c764490cf308d1d04f5..a49098a006d6b187a72a41e44383f0edf82fe0c4 100644 (file)
@@ -735,12 +735,12 @@ Simple_music:
                        THIS->parser_error (_("First argument must be a procedure taking 1 argument"));
                }
 
-         Music *m = new Music (SCM_EOL);
-         m->set_mus_property ("predicate", pred);
-         m->set_mus_property ("symbol", $3);
-         m->set_mus_property ("value",  $5);
-         m->set_mus_property ("iterator-ctor",
-                       Output_property_music_iterator::constructor_cxx_function);
+               Music *m = new Music (SCM_EOL);
+               m->set_mus_property ("predicate", pred);
+               m->set_mus_property ("symbol", $3);
+               m->set_mus_property ("value",  $5);
+               m->set_mus_property ("iterator-ctor",
+               Output_property_music_iterator::constructor_cxx_function);
 
                $$ = m;
        }
@@ -1149,17 +1149,12 @@ verbose_command_req:
                Mark_req * m = new Mark_req;
                $$ = m;
        }
-       | MARK STRING {
+       | MARK scalar {
                Mark_req *m = new Mark_req;
                m->set_mus_property ("label", $2);
                $$ = m;
 
        }
-       | MARK bare_unsigned {
-               Mark_req *m = new Mark_req;
-               m->set_mus_property ("label",  gh_int2scm ($2));
-               $$ = m;
-       }
        | PENALTY bare_int      {
                Break_req * b = new Break_req;
                b->set_mus_property ("penalty", gh_double2scm ( $2 / 100.0));
@@ -1256,12 +1251,13 @@ verbose_request:
                sp_p->set_spot (THIS->here_input ());
                $$ = sp_p;
        }
-       | tremolo_type  {
-               Tremolo_req* a = new Tremolo_req;
-               a->set_spot (THIS->here_input ());
-               a->set_mus_property ("tremolo-type", gh_int2scm ($1));
-               $$ = a;
-       }
+       | tremolo_type  {
+               Tremolo_req* a = new Tremolo_req;
+               a->set_spot (THIS->here_input ());
+               a->set_mus_property ("tremolo-type", gh_int2scm ($1));
+               $$ = a;
+        }
+
        | SCRIPT STRING         { 
                Articulation_req * a = new Articulation_req;
                a->set_mus_property ("articulation-type", $2);
index b1d3923d3f8435991718300f078afff5a1d0fa4a..1fa32c04ba8a0ffd7bd62bfd7517c5dfd231879d 100644 (file)
@@ -172,7 +172,7 @@ Side_position::quantised_position (SCM element_smob, SCM )
       Real rad = Staff_symbol_referencer::staff_radius (me) *2 ;
       int ip = int  (rp);
 
-      if (abs (ip) < rad && Staff_symbol_referencer::on_staffline (me,ip))
+      if (abs (ip) <= rad && Staff_symbol_referencer::on_staffline (me,ip))
        {
          ip += d;
          rp += d;
index f5f9546c4c9f5c06b53dae80c5d15cb1568c98ff..f49da3e650376d55b62ff68ab178442465f2da78 100644 (file)
@@ -146,7 +146,6 @@ Stem_engraver::stop_translation_timestep()
 
       
       // UGH. Should mark non-forced instead.
-
       /*
         aargh: I don't get it.  direction is being set (and then set
         to forced), if we have a Chord_tremolo.
diff --git a/lily/stem-tremolo-engraver.cc b/lily/stem-tremolo-engraver.cc
new file mode 100644 (file)
index 0000000..8b13789
--- /dev/null
@@ -0,0 +1 @@
+
index e3db961ceed47348c7821cfd8df3c81b6302982f..66664f7d28317964f9a916d8c49d2465dcd25393 100644 (file)
@@ -292,12 +292,6 @@ ChordNamesContext = \translator {
        }
 
 
-ScoreWithNumbers = \translator {
-       \type "Score_engraver";
-
-       % uncomment to bar numbers on a whole system.
-       \consists "Bar_number_engraver";
-}
 
 StupidScore = \translator {
        \type "Score_engraver";
@@ -307,10 +301,6 @@ StupidScore = \translator {
 
 
 
-BarNumberingStaffContext = \translator {
-       \StaffContext
-       \consists "Mark_engraver";
-}
 
 HaraKiriStaffContext = \translator {
        \StaffContext
@@ -326,10 +316,8 @@ HaraKiriStaffContext = \translator {
   %\translator { \HaraKiriStaffContext }
 %}
 
-OrchestralPartStaffContext = \translator {
-       \StaffContext
-       \consists "Mark_engraver";
-}
+
+
 
 ScoreContext = \translator {
        \type Score_engraver;
index d893a866dca29c80ed730e51a1c102826e9d793e..77eb380812fb778a9f77cfff69333bf526f57c43 100644 (file)
@@ -1,15 +1,15 @@
 Begin3
 Title: LilyPond
-Version: 1.3.127
-Entered-date: 31JAN01
+Version: 1.3.128
+Entered-date: 05FEB01
 Description: 
 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.127.tar.gz 
+       1000k lilypond-1.3.128.tar.gz 
 Original-site: ftp.cs.uu.nl /pub/GNU/LilyPond/development/
-       1000k lilypond-1.3.127.tar.gz 
+       1000k lilypond-1.3.128.tar.gz 
 Copying-policy: GPL
 End
index fd768c6b3d5ffc4aeec8924eb7d0656e124ab772..3f5d6842972d5ac6f7cdf5d50d359b17669e1657 100644 (file)
@@ -1,11 +1,11 @@
 %define info yes
 
 Name: lilypond
-Version: 1.3.127
+Version: 1.3.128
 Release: 1
 License: GPL
 Group: Applications/Publishing
-Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.127.tar.gz
+Source0: ftp.cs.uu.nl:/pub/GNU/LilyPond/development/lilypond-1.3.128.tar.gz
 Summary: A program for printing sheet music.
 URL: http://www.cs.uu.nl/~hanwen/lilypond
 # Icon: lilypond-icon.gif
index 704efe84ee5c775c82cb39925b16eacf5dd967cf..165e63b142e259a57ac12b356f25dacaea46d8d4 100644 (file)
@@ -7,7 +7,7 @@
 # * (c) on page 1
 # * more helpful info on lily crashes
 # * Should use files in /tmp/ only.  This potentially messes with
-# usergenerated files in the CWD
+# user generated files in the CWD
 
 
 """
@@ -25,8 +25,6 @@ Output: DVI file
 
 name = 'ly2dvi'
 version = '@TOPLEVEL_VERSION@'
-if version == '@' + 'TOPLEVEL_VERSION' + '@':
-       version = '(unknown version)'           # uGUHGUHGHGUGH
 errorlog = ''
 
 import sys
@@ -147,6 +145,7 @@ class Input:
             #   ------              ----------
             ( 'language',         Props.setLanguage ),
             ( 'latexheaders',     Props.setHeader ),
+            ( 'latexpackages',    Props.setPackages ),
             ( 'paperorientation', Props.setOrientation ),
             ( 'paperpapersize',   Props.setPaperZize ),
             ( 'papertextheight',  Props.setTextHeight ),
@@ -261,7 +260,6 @@ class TeXOutput:
 \usepackage[latin1]{inputenc} 
 %%\usepackage[T1]{fontenc} 
 %%
-%s 
 %% don not waste unused space at bottom of page
 %% (unless we have footnotes ...)
 %%\headheight9pt
@@ -276,10 +274,11 @@ class TeXOutput:
 %% UGR.
 %%\renewcommand{\@evenhead}{eve!{\small\lilypondinstrument{,}\quad\textbf{\thepage}}\hfil}%%
 \renewcommand{\@oddfoot}{\parbox{\textwidth}{\mbox{}\thefooter}}%%
+%s
 \begin{document}
 """ % ( program_id(), Props.get('filename'), now, Props.get('papersize'),
-        Props.get('language'), Props.get('pagenumber'), Props.get('linewidth'),
-        textheightsetting, Props.get('orientation'), Props.get('header') )
+        Props.get('language'), Props.get('linewidth'), textheightsetting, 
+        Props.get('orientation'), Props.get('header'), Props.get('pagenumber'))
         
         base, ext = os.path.splitext(file)
         this.__base = base
@@ -574,6 +573,7 @@ class Properties:
             ( 'KEEPLY2DVI',     this.setKeeply2dvi ),
             ( 'LANGUAGE',       this.setLanguage ),
             ( 'LATEXHF',        this.setHeader ),
+            ( 'LATEXPKG',       this.setPackages ),
             ( 'LILYINCLUDE',    this.setInclude ),
             ( 'LILYPONDPREFIX', this.setRoot ),
             ( 'NONUMBER',       this.setNonumber ),
@@ -822,7 +822,13 @@ class Properties:
     # Set latex header name
     #
     def setHeader(this,head, requester):
-       this.__set('header','\\input{' + head + '}',requester)
+       this.__set('header','\\input{' + head + '}'+this.get('header'),requester)
+
+    #
+    # Set latex package name
+    #
+    def setPackages(this,pkgs, requester):
+       this.__set('header','\\usepackage{' + pkgs + '}'+this.get('header'),requester)
 
     #
     # Set or Clear Dependencies flag to generate makefile dependencies