]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into lilypond/translation
authorFrancisco Vila <francisco.vila@hispalinux.es>
Sun, 18 Mar 2012 23:45:07 +0000 (00:45 +0100)
committerFrancisco Vila <francisco.vila@hispalinux.es>
Sun, 18 Mar 2012 23:45:07 +0000 (00:45 +0100)
63 files changed:
Documentation/GNUmakefile
Documentation/contributor/administration.itexi
Documentation/contributor/regressions.itexi
Documentation/de/extending/scheme-tutorial.itely
Documentation/included/helpus.itexi
Documentation/learning/fundamental.itely
Documentation/learning/tweaks.itely
Documentation/lilypond-texi2html.init
Documentation/notation/ancient.itely
Documentation/notation/changing-defaults.itely
Documentation/notation/chords.itely
Documentation/notation/editorial.itely
Documentation/notation/expressive.itely
Documentation/notation/fretted-strings.itely
Documentation/notation/input.itely
Documentation/notation/keyboards.itely
Documentation/notation/notation-appendices.itely
Documentation/notation/percussion.itely
Documentation/notation/pitches.itely
Documentation/notation/repeats.itely
Documentation/notation/rhythms.itely
Documentation/notation/simultaneous.itely
Documentation/notation/spacing.itely
Documentation/notation/staff.itely
Documentation/notation/text.itely
Documentation/notation/unfretted-strings.itely
Documentation/notation/vocal.itely
Documentation/notation/wind.itely
Documentation/web/community.itexi
GNUmakefile.in
input/regression/beam-subdivide-tuplets.ly [new file with mode: 0644]
input/regression/tablature-open-string-handling.ly [new file with mode: 0644]
input/regression/whiteout.ly
lily/beaming-pattern.cc
lily/context-def.cc
lily/context-mod.cc
lily/context-property.cc
lily/context.cc
lily/include/context-def.hh
lily/include/page-layout-problem.hh
lily/multi-measure-rest.cc
lily/output-def-scheme.cc
lily/page-breaking.cc
lily/page-layout-problem.cc
lily/parser.yy
lily/timing-translator.cc
ly/declarations-init.ly
ly/engraver-init.ly
ly/music-functions-init.ly
ly/performer-init.ly
make/abc-rules.make
make/lilypond-book-rules.make
make/lysdoc-rules.make
make/midi-rules.make
make/website.make
scm/define-context-properties.scm
scm/lily-library.scm
scm/paper.scm
scm/translation-functions.scm
scripts/abc2ly.py
scripts/auxiliar/doc-section.sh
scripts/build/lys-to-tely.py
scripts/midi2ly.py

index 5f04dc880cf1297f4f37d1297e2ff161344313a5..d798d3ce85230f42973d5e1a2155924360aac00f 100644 (file)
@@ -280,8 +280,7 @@ $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
 # compilation during install, which is a bad thing (tm).
 
 $(outdir)/internals.texi: $(LILYPOND_BINARY)
-       cd $(outdir) && $(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation
-
+       cd $(outdir) && $(buildscript-dir)/run-and-check "$(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation" "generate-documentation.log"
 
 ###############################################
 #  Documentation and translations maintenance #
index 36886d19cb7acf89195b0850891024b6eb87bb67..5e664cb433bd1c0c113d840d3e05ecb605cbd705 100644 (file)
@@ -162,7 +162,7 @@ Administration; Users and Groups.
 @item
 Get the patchy scripts from
 @example
-https://github.com/gperciva/lilypond-extra/
+@uref{https://github.com/gperciva/lilypond-extra/}
 @end example
 Patchy is in the @file{patches/} directory.
 
index aa5aeaa4e6a583b7365f95a0a156d67864ea0c83..a5dac4822651ec72a8b5611a71d031d907747199 100644 (file)
@@ -485,13 +485,15 @@ a small @file{.ly} file demonstrating the problem was added to the regression
 tests as a proof that the fix works.  If someone will accidentally break
 breve width again, we will notice this in the output of that regression test.
 
-We are asking you to help us by checking a regtest or two from time to time.
+@subheading How can I help?
+
+We ask you to help us by checking one or two regtests from time to time.
 You don't need programming skills to do this, not even LilyPond skills -
 just basic music notation knowledge; checking one regtest takes less than
 a minute.  Simply go here:
 
 @example
-@uref{http://www.holmessoft.co.uk/homepage/private/regtests/}
+@uref{http://www.philholmes.net/lilypond/regtests/}
 @end example
 
 @subheading Some tips on checking regtests
@@ -505,6 +507,7 @@ or @rinternalsnamed{Top, Internals Reference}.
 Vague descriptions (like "behaves well", "looks reasonable") shouldn't be used.
 
 @ignore
+this may be useful for advanced regtest checking
 @subsubheading Is regtest straightforward and systematic?
 
 Unfortunately some regtests are written poorly.  A good regtest should be
index 11a42bd60c9b67f494f52e3f3fcd09a8fb00d777..a4c5d1e4c6702fa631a36a2ce92cbe7f26d92349 100644 (file)
@@ -761,9 +761,6 @@ Variable @code{twice} importiert:
 @lilypond[verbatim]
 traLaLa = { c'4 d'4 }
 
-%% dummy action to deal with parser lookahead
-#(display "this needs to be here, sorry!")
-
 #(define newLa (map ly:music-deep-copy
   (list traLaLa traLaLa)))
 #(define twice
index 1578a36174a1bbfe274f730268d26d9250006a82..9aa7be0631d81c3598df62a8e235e326791ee512 100644 (file)
@@ -29,6 +29,11 @@ Mailing list support: answer questions from fellow users.
 Bug reporting: help users create proper @rweb{Bug reports}, and/or
 join the Bug Squad to organize @rcontrib{Issues}.
 
+@item
+@rcontrib{Grand Regression Test Checking}: verify that LilyPond works correctly
+by examining output of test snippets.  Checking one snippet takes less
+than a minute!
+
 @item
 Documentation: small changes can be proposed by following the
 guidelines for @rcontrib{Documentation suggestions}.
index 423f6ee41f5e50a8c764baba1b86ec19dbc30e37..847c8489e750718470c5e6d6a4af6f3f8bb514ba 100644 (file)
@@ -672,8 +672,11 @@ used to encode three or more voices by adding more back-slash
 separators.
 
 The Voice contexts bear the names @code{"1"}, @code{"2"}, etc.
-In each of these contexts, the vertical direction of slurs,
-stems, ties, dynamics etc., is set appropriately.
+The first contexts set the @emph{outer} voices, the highest
+voice in context @code{"1"} and the lowest voice in context
+@code{"2"}.  The inner voices go in contexts @code{"3"} and
+@code{"4"}.  In each of these contexts, the vertical direction
+of slurs, stems, ties, dynamics etc., is set appropriately.
 
 @lilypond[quote,verbatim]
 \new Staff \relative c' {
@@ -797,16 +800,19 @@ later sections.
   <<  % Voice one
     { c2 aes4. bes8 }
   \\  % Voice two
-    { aes2 f4 fes }
-  \\  % No voice three
-  \\  % Voice four
     {
       % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
-      <ees c>2
+      \once \override NoteColumn #'ignore-collision = ##t
+      <ees, c>2
       \once \override NoteColumn #'force-hshift = #0.5
       des2
     }
+  \\  % No voice three
+  \\  % Voice four
+    {
+      \override NoteColumn #'force-hshift = #0
+      aes'2 f4 fes
+    }
   >> |
   <c ees aes c>1 |
 }
@@ -845,16 +851,17 @@ not understand.
     }
   \\  % Voice two
     { \voiceTwoStyle
-      aes2 f4 fes
+      % Ignore these for now - they are explained in Ch 4
+      \once \override NoteColumn #'ignore-collision = ##t
+      <ees, c>2
+      \once \override NoteColumn #'force-hshift = #0.5
+      des2
     }
   \\  % No Voice three (we want stems down)
   \\  % Voice four
     { \voiceThreeStyle
-      % Ignore these for now - they are explained in Ch 4
-      \once \override NoteColumn #'force-hshift = #0
-      <ees c>2
-      \once \override NoteColumn #'force-hshift = #0.5
-      des2
+      \override NoteColumn #'force-hshift = #0
+      aes'2 f4 fes
     }
   >> |
   <c ees aes c>1 |
@@ -871,7 +878,7 @@ enter the music of the first bar in three voices:
 \new Staff \relative c'' {
   \key aes \major
   <<
-    { c2 aes4. bes8 } \\ { aes2 f4 fes } \\ { <ees c>2 des }
+    { c2 aes4. bes8 } \\ { <ees, c>2 des } \\ { aes'2 f4 fes }
   >> |
   <c ees aes c>1 |
 }
@@ -896,27 +903,24 @@ adding another pair of @code{\\}.
   <<  % Voice one
     { c2 aes4. bes8 }
   \\  % Voice two
-    { aes2 f4 fes }
+    { <ees, c>2 des }
   \\  % Omit Voice three
   \\  % Voice four
-    { <ees c>2 des }
+    { aes'2 f4 fes }
   >> |
   <c ees aes c>1 |
 }
 @end lilypond
 
 @noindent
-We see that this fixes the stem direction, but exposes a problem
-sometimes encountered with multiple voices -- the stems of the notes
-in one voice can collide with the note heads in other voices.  In
-laying out the notes, LilyPond allows the notes or chords from two
-voices to occupy the same vertical note column provided the stems are
-in opposite directions, but the notes from the third and fourth voices
-are displaced, if necessary, to avoid the note heads colliding.  This
-usually works well, but in this example the notes of the lowest voice
-are clearly not well placed by default.  LilyPond provides several ways
-to adjust the horizontal placing of notes.  We are not quite ready yet
-to see how to correct this, so we shall leave this problem until a
+We see that this fixes the stem direction, but the horizontal
+placement of notes is not what we want.  LilyPond shifts the
+inner notes when they or their stems would collide with outer
+voices, but this is not appropriate for piano music.  In other
+situations, the shifts LilyPond applies might fail to clear
+the collisions.  LilyPond provides several ways to adjust the
+horizontal placing of notes.  We are not quite ready yet to see
+how to correct this, so we shall leave this problem until a
 later section --- see the @code{force-hshift} property in
 @ref{Fixing overlapping notation}.
 
index 806b2743338391d47e925027b0a5f760ed5de92b..569ea32b2711384e445fe5f8c38854bb2a494474 100644 (file)
@@ -2857,26 +2857,26 @@ was left looking like this:
   <<
     { c2 aes4. bes8 }
     \\
-    { aes2 f4 fes }
+    { <ees, c>2 des }
     \\
-    {
-      \voiceFour
-      <ees c>2 des
-    }
+    \\
+    { aes'2 f4 fes }
   >> |
   <c ees aes c>1 |
 }
 @end lilypond
 
 @noindent
-The lower two notes of the first chord (i.e, those in the third voice)
-should not be shifted away from the note column of the higher two
-notes.  To correct this we set @code{force-hshift}, which is a
-property of @code{NoteColumn}, of these notes to zero.  The lower note
-of the second chord is best placed just to the right of the higher
-notes.  We achieve this by setting @code{force-hshift} of this note to
-0.5, ie half a note head's width to the right of the note column of
-the higher notes.
+The inner note of the first chord (i.e. the A-flat in the fourth
+Voice) need not be shifted away from the note column of the higher
+note.  To correct this we set @code{force-hshift}, which is a property
+of @code{NoteColumn}, of this note to zero.
+
+In the second chord we prefer the F to line up with the A and the
+lowest note to be positioned slightly right to avoid a collision of
+stems.  We achieve this by setting @code{force-hshift} in the
+@code{NoteColumn} of the low D-flat to move it to the right by half
+a staff-space.
 
 Here's the final result:
 
@@ -2889,15 +2889,17 @@ Here's the final result:
   <<
     { c2 aes4. bes8 }
     \\
-    { aes2 f4 fes }
-    \\
     {
-      \voiceFour
-      \once \override NoteColumn #'force-hshift = #0
-      <ees c>2
+      <ees, c>2
       \once \override NoteColumn #'force-hshift = #0.5
       des2
     }
+    \\
+    \\
+    {
+      \override NoteColumn #'force-hshift = #0
+      aes'2 f4 fes
+    }
   >> |
   <c ees aes c>1 |
 }
index 03e0c903e6519c975505c35e63d9de9027c68297..a17428bf4bcbdc9a1b7c6c3b21b07cc8f267d913 100644 (file)
@@ -1424,11 +1424,10 @@ sub lilypond_external_href($$$)
     $href = &$default_external_href($node, $node_id, $node_xhtml_id, lc_last($file));
     $href = remove_unneeded_anchor($href);
 
-    # TODO: very yucky, but will be fixed in issue 1004
     if ($web_manual) {
-      my $only_web = $ENV{ONLY_WEB};
-      if ($only_web) {
-        $href = "../../doc/v2.13/Documentation/web/".$href;
+      my $only_web_version = $ENV{ONLY_WEB_VERSION};
+      if ($only_web_version) {
+        $href = "../../doc/".$only_web_version."/Documentation/web/".$href;
       }
     }
 
index 8dd363d71292362f051deab1f8d3f6f25a232e7b..0e7d043e61be9fda52a3a46d3f48be505a76bec4 100644 (file)
@@ -83,7 +83,6 @@ Notation Reference:
 @node Overview of the supported styles
 @subsection Overview of the supported styles
 
-
 Three styles are available for typesetting Gregorian chant:
 
 @itemize
@@ -339,12 +338,12 @@ supported are @code{vaticana}, @code{medicaea}, @code{hufnagel}, and
 Music Glossary:
 @rglos{custos}.
 
-Internals Reference:
-@rinternals{Custos}.
-
 Snippets:
 @rlsr{Ancient notation}.
 
+Internals Reference:
+@rinternals{Custos}.
+
 
 @node Figured bass support
 @unnumberedsubsubsec Figured bass support
@@ -408,7 +407,6 @@ entering the chant, as the following excerpt demonstrates:
 }
 @end lilypond
 
-
 @seealso
 Music Glossary:
 @rglos{mensural notation}.
@@ -531,7 +529,6 @@ Music Glossary:
 Notation Reference:
 @ref{Clef}.
 
-
 @knownissues
 The mensural g clef is mapped to the Petrucci g clef.
 
@@ -749,13 +746,11 @@ There is no particular flag style for neo-mensural or Petrucci notation.
 @c music, the default flag style should be used.
 There are no flags in Gregorian chant notation.
 
-
 @seealso
 Music Glossary:
 @rglos{mensural notation},
 @rglos{flag}.
 
-
 @knownissues
 The attachment of ancient flags to stems is slightly off.
 @c due to a change in early 2.3.x.
@@ -807,7 +802,6 @@ Notation Reference:
 Snippets:
 @rlsr{Ancient notation}.
 
-
 @knownissues
 The glyph for the maxima rest in mensural style is actually a perfect
 longa rest; use two (or three) longa rests to print a maxima rest.
@@ -898,7 +892,6 @@ ficta = { \once \set suggestAccidentals = ##t }
 }
 @end lilypond
 
-
 @seealso
 Internals Reference:
 @rinternals{Accidental_engraver},
@@ -1015,6 +1008,7 @@ Notation Reference:
 Horizontal spacing of ligatures is poor.
 Accidentals may collide with previous notes.
 
+
 @node Typesetting Gregorian chant
 @subsection Typesetting Gregorian chant
 
@@ -1044,6 +1038,7 @@ Notation Reference:
 @ref{White mensural ligatures},
 @ref{Ligatures}.
 
+
 @node Gregorian chant contexts
 @unnumberedsubsubsec Gregorian chant contexts
 
@@ -1220,7 +1215,6 @@ hufnagel style combined do/fa clef
 @end lilypond
 @end multitable
 
-
 @seealso
 Music Glossary:
 @rglos{clef}.
@@ -1269,7 +1263,6 @@ The style for accidentals and key signatures is controlled by the
 @code{\override Staff.Accidental #'glyph-name-alist =
 #alteration-mensural-glyph-name-alist}
 
-
 @seealso
 Music Glossary:
 @rglos{accidental},
@@ -1369,7 +1362,7 @@ Notation Reference:
 @ref{Breath marks}.
 
 Installed Files:
-@file{gregorian.ly}.
+@file{ly/gregorian.ly}.
 
 
 @node Gregorian articulation signs
@@ -1398,7 +1391,6 @@ specifically designed for use with notation in
 }
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{Articulations and ornamentations}.
@@ -1414,7 +1406,6 @@ Internals Reference:
 @rinternals{ScriptEvent},
 @rinternals{Script_engraver}.
 
-
 @knownissues
 Some articulations are vertically placed too closely to the
 corresponding note heads.
@@ -1442,7 +1433,6 @@ note that you can say @code{\augmentum @{a g@}} as a shortcut for
 }
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{Breath marks}.
@@ -2404,7 +2394,6 @@ Notation Reference:
 @ref{White mensural ligatures},
 @ref{Ligatures}.
 
-
 @knownissues
 When an @code{\augmentum} dot appears at the end of the last staff
 within a ligature, it is sometimes vertically placed wrong.  As a
@@ -2453,7 +2442,6 @@ same source.
 @c use snippet Transcription-of-ancient-music-with-incipit
 TBC
 
-
 @c @seealso
 @c ... and reference to other sections ...
 
@@ -2478,7 +2466,6 @@ orientation aids that bar lines give.
 @c from lsr and -user
 @c TBC
 
-
 @c @seealso
 @c ... and reference to other sections ...
 
@@ -2702,4 +2689,3 @@ TBC
 
 @c @seealso
 @c ... and reference to other sections ...
-
index fb19a18e387dd9c586547899a2c20b0bdeeb38e6..d533d1a48fe6bf7e0f8ee8a2ff3e2736612967cc 100644 (file)
@@ -67,7 +67,6 @@ This section describes what contexts are, and how to modify them.
 * Context layout order::
 @end menu
 
-
 @seealso
 Learning Manual:
 @rlearning{Contexts and engravers}.
@@ -565,12 +564,11 @@ words = \lyricmode { These words fol -- low the mel -- o -- dy }
 
 @c TODO Should this be Modifying engravers or Modifying contexts?
 
-Notation contexts (like @code{Score} and @code{Staff}) not only
-store properties,
-they also contain plug-ins called @q{engravers} that create notation
-elements.  For example, the @code{Voice} context contains a
+Notation contexts (like @code{Score} and @code{Staff}) not only store
+properties, they also contain plug-ins called @q{engravers} that create
+notation elements.  For example, the @code{Voice} context contains a
 @code{Note_heads_engraver} and the @code{Staff} context contains a
-@code{Key_signature_engraver}.
+@code{Key_engraver}.
 
 For a full a description of each plug-in, see
 @ifhtml
@@ -1010,18 +1008,16 @@ is encountered when there is no suitable context available to
 contain it.  This can give rise to unexpected new staves or scores.
 
 @seealso
-Usage Manual:
+Application Usage:
 @rprogram{An extra staff appears}.
 
 Installed Files:
 @file{ly/engraver-init.ly}.
 
 
-
 @node Explaining the Internals Reference
 @section Explaining the Internals Reference
 
-
 @menu
 * Navigating the program reference::
 * Layout interfaces::
@@ -1474,22 +1470,19 @@ such as
 @end ignore
 
 @seealso
-Internals:
+Internals Reference:
 @rinternals{Backend},
 @rinternals{All layout objects},
 @rinternals{OverrideProperty},
 @rinternals{RevertProperty},
 @rinternals{PropertySet}.
 
-
 @knownissues
-
 The back-end is not very strict in type-checking object properties.
 Cyclic references in Scheme values for properties can cause hangs
 or crashes, or both.
 
 
-
 @node The set command
 @subsection The @code{@bs{}set} command
 
@@ -1624,12 +1617,9 @@ Translation @expansion{} Tunable context properties.
 @end ifnothtml
 
 @seealso
-
 Internals Reference:
-
 @rinternals{Tunable context properties}.
 
-
 @cindex grob properties
 @cindex properties, grob
 @funindex \override
@@ -1792,10 +1782,10 @@ and the program reference.
 @end ignore
 
 @seealso
-
 Internals Reference:
 @rinternals{Backend}
 
+
 @node The tweak command
 @subsection The @code{\tweak} command
 
@@ -1956,18 +1946,16 @@ determining what may be modified by a @code{\tweak} command, or
 in determining how to adjust the input to make a @code{\tweak}
 apply.
 
-
 @seealso
 Learning Manual:
 @rlearning{Tweaking methods}.
 
-Extending:
+Extending LilyPond:
 @rextend{Displaying music expressions}.
 
-
 @knownissues
-
 @cindex tweaks in a variable
+
 The @code{\tweak} command cannot be used inside a variable.
 
 @cindex tweaks in lyrics
@@ -1979,6 +1967,7 @@ The @code{\tweak} commands cannot be used in @code{\lyricmode}.
 The @code{\tweak} command will apply to only the first of several
 generated ties in a chord.
 
+
 @node set versus override
 @subsection @code{\set} vs. @code{\override}
 
@@ -2274,31 +2263,30 @@ c2^( c)
 
 @strong{The direction property}
 
-The position or direction of many layout objects is controlled
-by the @code{direction} property.
+The position or direction of many layout objects is controlled by the
+@code{direction} property.
 
-The value of the @code{direction} property may be
-set to @code{1}, meaning @qq{up} or @qq{above}, or to @w{@code{-1}},
-meaning @qq{down} or @qq{below}.  The symbols @code{UP} and
-@code{DOWN} may be used instead of @code{1} and @w{@code{-1}}
-respectively.  The default direction may be specified by setting
-@code{direction} to @code{0} or @code{CENTER}.  Alternatively,
-in many cases predefined commands
-exist to specify the direction.  These are all of the form
+The value of the @code{direction} property may be set to @code{1},
+meaning @qq{up} or @qq{above}, or to @w{@code{-1}}, meaning @qq{down} or
+@qq{below}.  The symbols @code{UP} and @code{DOWN} may be used instead
+of @code{1} and @w{@code{-1}} respectively.  The default direction may
+be specified by setting @code{direction} to @code{0} or @code{CENTER}.
+Alternatively, in many cases predefined commands exist to specify the
+direction.  These are of the form
 
-@noindent
-@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
+@example
+@code{\xxxUp}, @code{\xxxDown} or @code{\xxxNeutral}
+@end example
 
 @noindent
-where @code{xxxNeutral} means @qq{use the default direction}.
+where @code{\xxxNeutral} means @qq{use the default} direction.
 See @rlearning{Within-staff objects}.
 
-In a few cases, arpeggio being the only common example, the value
-of the @code{direction} property specifies whether the object
-is to be placed to the right or left of the parent object.  In
-this case @w{@code{-1}} or @code{LEFT} means @qq{to the left} and
-@code{1} or @code{RIGHT} means @qq{to the right}.  @code{0}
-or @code{CENTER} means @qq{use the default} direction, as before.
+In a few cases, arpeggio for example, the value of the @code{direction}
+property can specify whether the object is to be placed to the right or
+left of the parent.  In this case @w{@code{-1}} or @code{LEFT} means
+@qq{to the left} and @code{1} or @code{RIGHT} means @qq{to the right}.
+@code{0} or @code{CENTER} means @qq{use the default} direction.
 
 @ignore
 These all have side-axis set to #X
@@ -2320,6 +2308,17 @@ c2( c)
 c2( c)
 @end lilypond
 
+In polyphonic music, it is generally better to specify an explicit
+@code{voice} than change an object's direction.  For more information.
+See @ref{Multiple voices}.
+
+@seealso
+Learning Manual:
+@rlearning{Within-staff objects}.
+
+Notation Reference:
+@ref{Multiple voices}.
+
 
 @node Distances and measurements
 @subsection Distances and measurements
@@ -2369,7 +2368,6 @@ convert from a font size change to the equivalent change in
 @code{staff-space}.  For an explanation and an example of its use,
 see @rlearning{Length and thickness of objects}.
 
-
 @seealso
 Learning Manual:
 @rlearning{Length and thickness of objects}.
@@ -2705,7 +2703,6 @@ When using @code{\endSpanners} it is not necessary to close
 \startTextSpan with \stopTextSpan, nor is it necessary to close
 hairpins with @code{\!}.
 
-
 @seealso
 Internals Reference:
 @rinternals{TextSpanner},
@@ -3047,10 +3044,9 @@ For explicit clef changes, the @code{explicitClefVisibility}
 property controls both the clef symbol and any octavation symbol
 associated with it.
 
-
 @seealso
 Learning Manual:
-@rlearning{Visibility and color of objects}
+@rlearning{Visibility and color of objects}.
 
 
 @node Line styles
@@ -3180,7 +3176,6 @@ appearance of the printed score.
 * Unpure-pure containers::
 @end menu
 
-
 @seealso
 Learning Manual:
 @rlearning{Tweaking output},
@@ -3190,15 +3185,15 @@ Notation Reference:
 @ref{Explaining the Internals Reference},
 @ref{Modifying properties}.
 
+Extending LilyPond:
+@rextend{Interfaces for programmers}.
+
 Installed Files:
 @file{scm/define-grobs.scm}.
 
 Snippets:
 @rlsr{Tweaks and overrides}.
 
-Extending:
-@rextend{Interfaces for programmers}.
-
 Internals Reference:
 @rinternals{All layout objects}.
 
@@ -3243,7 +3238,10 @@ are special properties to be found in the @code{break-aligned-interface}
 for positioning rehearsal marks on such objects.
 
 @seealso
-@ref{Using the break-alignable-interface},
+Notation Reference:
+@ref{Using the break-alignable-interface}.
+
+Extending LilyPond:
 @rextend{Callback functions}.
 
 @menu
@@ -3593,7 +3591,6 @@ Any of the glyphs in the feta Font can be supplied to the
 
 @c TODO Add inserting Postscript or ref to later
 
-
 @seealso
 Notation Reference:
 @ref{Graphic notation inside markup},
@@ -3698,6 +3695,7 @@ Internals Reference:
 @cindex unpure containers, Scheme
 @cindex horizontal spacing, overriding
 
+
 @node Unpure-pure containers
 @subsection Unpure-pure containers
 
@@ -3872,13 +3870,11 @@ For a list of available type predicates, see
 @ref{Predefined type predicates}.  User-defined type predicates
 are also allowed.
 
-
 @seealso
-
 Notation Reference:
 @ref{Predefined type predicates}.
 
-Extending:
+Extending Lilypond:
 @rextend{Music functions}.
 
 Installed Files:
index 2d2975bc9ec9a7e452d7d7ac2fca569d1e4804a4..2a360698cb761012616315028a3709e3f07325bb 100644 (file)
@@ -75,7 +75,6 @@ Chord mode and note mode can be mixed in sequential music:
 \chordmode { f2 g }
 @end lilypond
 
-
 @seealso
 Music Glossary:
 @rglos{chord}.
@@ -87,9 +86,7 @@ Notation Reference:
 Snippets:
 @rlsr{Chords}.
 
-
 @knownissues
-
 Predefined shorthands for articulations and ornaments cannot be used
 on notes in chord mode, see @ref{Articulations and ornamentations}.
 
@@ -112,6 +109,7 @@ To avoid this behavior, explicitly create the @code{Staff} context:
 }
 @end lilypond
 
+
 @node Common chords
 @unnumberedsubsubsec Common chords
 
@@ -229,7 +227,6 @@ to create a major triad.
 
 @end multitable
 
-
 @seealso
 Notation Reference:
 @ref{Common chord modifiers},
@@ -238,7 +235,6 @@ Notation Reference:
 Snippets:
 @rlsr{Chords}.
 
-
 @knownissues
 Only one quality modifier should be used per chord, typically on the
 highest step present in the chord.  Chords with more than quality
@@ -383,7 +379,6 @@ Chord modifiers that can be used to produce a variety of
 standard chords are shown in
 @ref{Common chord modifiers}.
 
-
 @seealso
 Notation Reference:
 @ref{Common chord modifiers}.
@@ -391,9 +386,7 @@ Notation Reference:
 Snippets:
 @rlsr{Chords}.
 
-
 @knownissues
-
 Each step can only be present in a chord once.  The following
 simply produces the augmented chord, since @code{5+} is
 interpreted last.
@@ -412,6 +405,7 @@ the chord.
 }
 @end lilypond
 
+
 @node Displaying chords
 @subsection Displaying chords
 
@@ -521,7 +515,6 @@ Rests passed to a @code{ChordNames} context will cause the
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {simple-lead-sheet.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{chord}.
@@ -539,9 +532,7 @@ Internals Reference:
 @rinternals{Volta_engraver},
 @rinternals{Bar_engraver}.
 
-
 @knownissues
-
 Chords containing inversions or altered bass notes are not named
 properly if entered using simultaneous music.
 
@@ -756,7 +747,6 @@ used when the root is altered.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-chord-separator.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Chord name chart},
@@ -773,12 +763,7 @@ Installed Files:
 Snippets:
 @rlsr{Chords}.
 
-@c Internals Reference:
-@c @r internals{}.
-
-
 @knownissues
-
 Chord names are determined from both the pitches that are present
 in the chord and the information on the chord structure that may
 have been entered in @code{\chordmode}.  If the simultaneous pitches
@@ -861,7 +846,6 @@ example, the vertical spacing of the figures may be set with
 @code{baseline-skip}.
 @end ignore
 
-
 @seealso
 Music Glossary:
 @rglos{figured bass}.
@@ -1045,23 +1029,7 @@ End of continuation line
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-the-positions-of-figured-bass-alterations.ly}
 
-
 @seealso
-@c Music Glossary:
-@c @rglos{}.
-@c
-@c Learning Manual:
-@c @rlearning{}.
-@c
-@c Notation Reference:
-@c @ref{}.
-@c
-@c Application Usage:
-@c @rprogram{}.
-@c
-@c Installed Files:
-@c @file{}.
-@c
 Snippets:
 @rlsr{Chords}.
 
@@ -1074,9 +1042,6 @@ Internals Reference:
 @rinternals{FiguredBass}.
 
 
-@c @knownissues
-
-
 @node Displaying figured bass
 @unnumberedsubsubsec Displaying figured bass
 
@@ -1146,7 +1111,6 @@ or below the staff.
 >>
 @end lilypond
 
-
 @predefined
 @cindex figured bass alignment
 @code{\bassFigureStaffAlignmentDown},
@@ -1154,26 +1118,7 @@ or below the staff.
 @code{\bassFigureStaffAlignmentNeutral}.
 @endpredefined
 
-
-@c @snippets
-
-
 @seealso
-@c Music Glossary:
-@c @rglos{}.
-@c
-@c Learning Manual:
-@c @rlearning{}.
-@c
-@c Notation Reference:
-@c @ref{}.
-@c
-@c Application Usage:
-@c @rprogram{}.
-@c
-@c Installed Files:
-@c @file{}.
-@c
 Snippets:
 @rlsr{Chords}.
 
@@ -1185,9 +1130,7 @@ Internals Reference:
 @rinternals{BassFigureContinuation},
 @rinternals{FiguredBass}.
 
-
 @knownissues
-
 To ensure that continuation lines work properly, it is
 safest to use the same rhythm in the figure line as in
 the bass line.
@@ -1246,4 +1189,3 @@ begins the extender line and turn them off at the end of the extender line.
   }
 >>
 @end lilypond
-
index 56c05e8335c1a701f4d785435107fe78382b0b7d..0f7c96a5878374260dd8cf8e57b7a5f83cbdd5f0 100644 (file)
@@ -130,7 +130,6 @@ that use fonts.  These are the ones supporting the
 @code{\huge}.
 @endpredefined
 
-
 @seealso
 Snippets:
 @rlsr{Editorial annotations}.
@@ -198,7 +197,6 @@ staff, see @ref{Direction and placement}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {avoiding-collisions-with-chord-fingerings.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Direction and placement}.
@@ -248,13 +246,14 @@ b
 c
 @end lilypond
 
-Notation objects which are attached to invisible notes are still
-visible.
+Note heads, stems, and flags, and rests are invisible.  Beams
+are invisible if they start on a hidden note.  Objects that are
+attached to invisible notes are still visible.
 
 @lilypond[verbatim,quote,relative=2]
-c4( d)
+e8(\p f g a)--
 \hideNotes
-e4(\p f)--
+e8(\p f g a)--
 @end lilypond
 
 
@@ -263,7 +262,6 @@ e4(\p f)--
 @code{\unHideNotes}.
 @endpredefined
 
-
 @seealso
 Learning Manual:
 @rlearning{Visibility and color of objects}.
@@ -365,7 +363,6 @@ gis8 a
 gis4 a
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{List of colors}, @ref{The
@@ -374,7 +371,6 @@ tweak command}.
 Snippets:
 @rlsr{Editorial annotations}.
 
-
 @cindex x11 color
 @cindex colored notes in chords
 @cindex notes, colored in chords
@@ -391,7 +387,6 @@ a web browser might not display a difference between @code{LimeGreen}
 and @code{ForestGreen}.  For web use normal colors are recommended
 (i.e., @code{blue}, @code{green}, @code{red}).
 
-
 Notes in a chord cannot be colored with @code{\override}; use
 @code{\tweak} instead, see @ref{The tweak command}.
 
@@ -425,7 +420,6 @@ c2-\parenthesize -. d
 c2 \parenthesize r
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Editorial annotations}.
@@ -435,9 +429,7 @@ Internals Reference:
 @rinternals{ParenthesesItem},
 @rinternals{parentheses-interface}.
 
-
 @knownissues
-
 Parenthesizing a chord prints parentheses around each individual
 note, instead of a single large parenthesis around the entire
 chord.
@@ -481,7 +473,6 @@ Stems may be manually placed to point up or down; see
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {default-direction-of-stems-on-the-center-line-of-the-staff.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Direction and placement}.
@@ -563,13 +554,11 @@ altered:
 }
 @end lilypond
 
-
 @predefined
 @code{\balloonLengthOn},
 @code{\balloonLengthOff}.
 @endpredefined
 
-
 @seealso
 Snippets:
 @rlsr{Editorial annotations}.
@@ -636,7 +625,6 @@ lines.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {grid-lines--changing-their-appearance.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Editorial annotations}.
@@ -701,7 +689,6 @@ Analysis brackets may be nested.
 }
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Editorial annotations}.
@@ -711,4 +698,3 @@ Internals Reference:
 @rinternals{HorizontalBracket},
 @rinternals{horizontal-bracket-interface},
 @rinternals{Staff}.
-
index 062723812345198fe8af77b187b51d632f85c163..0d86f3e639dd7b1344726ce61b11e680dd37e088 100644 (file)
@@ -481,7 +481,6 @@ items such as text scripts, text spanners, and piano pedal marks.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-text-and-spanner-styles-for-text-dynamics.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{al niente},
@@ -608,7 +607,6 @@ moltoF = #(make-dynamic-script
 Font settings in markup mode are described in
 @ref{Selecting font and font size}.
 
-
 @seealso
 Notation Reference:
 @ref{Formatting text},
@@ -616,12 +614,11 @@ Notation Reference:
 @ref{What goes into the MIDI output?},
 @ref{Controlling MIDI dynamics}.
 
-Snippets:
-@rlsr{Expressive marks}.
-
-Extend:
+Extending LilyPond:
 @rextend{Markup construction in Scheme}.
 
+Snippets:
+@rlsr{Expressive marks}.
 
 
 @node Expressive marks as curves
@@ -770,7 +767,6 @@ g4( e c2)
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {making-slurs-with-complex-dash-structure.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{slur}.
@@ -911,7 +907,6 @@ complex dash patterns, see the snippets under @ref{Slurs}.
 @code{\phrasingSlurSolid}.
 @endpredefined
 
-
 @seealso
 Learning Manual:
 @rlearning{On the un-nestedness of brackets and ties}.
@@ -963,7 +958,6 @@ divisiones, are supported.  For details, see @ref{Divisiones}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {inserting-a-caesura.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{caesura}.
@@ -1012,7 +1006,6 @@ command is @emph{required} when writing falls and doits.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {adjusting-the-shape-of-falls-and-doits.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{fall},
@@ -1060,7 +1053,6 @@ Different styles of glissandi can be created.  For details, see
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {contemporary-glissando.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{glissando}.
@@ -1074,9 +1066,7 @@ Snippets:
 Internals Reference:
 @rinternals{Glissando}.
 
-
 @knownissues
-
 Printing text over the line (such as @notation{gliss.}) is not
 supported.
 
@@ -1177,7 +1167,6 @@ information, see @ref{Ties}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {creating-arpeggios-across-notes-in-different-voices.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{arpeggio}.
@@ -1194,9 +1183,7 @@ Internals Reference:
 @rinternals{Slur},
 @rinternals{PianoStaff}.
 
-
 @knownissues
-
 @cindex cross-staff parenthesis-style arpeggio
 @cindex arpeggio, parenthesis-style, cross-staff
 @cindex arpeggio, cross-staff parenthesis-style
@@ -1307,7 +1294,6 @@ eis4\startTrillSpan fis!
 eis4\stopTrillSpan
 @end lilypond
 
-
 @predefined
 @code{\startTrillSpan},
 @code{\stopTrillSpan}.
@@ -1326,4 +1312,3 @@ Snippets:
 
 Internals Reference:
 @rinternals{TrillSpanner}.
-
index f01e968b13c40a97e87acc3c6bfffaef58836f7f..94bd671fc89387c803f22004a84e0e634d25e701 100644 (file)
@@ -76,7 +76,6 @@ in @ref{Collision resolution}.
 
 @end itemize
 
-
 @seealso
 Notation Reference:
 @ref{Fingering instructions},
@@ -128,7 +127,6 @@ in the code:
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {allowing-fingerings-to-be-printed-inside-the-staff.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Fingering instructions}.
@@ -487,6 +485,7 @@ melodia = \partcombine { e4 g g g } { e4 e e e }
 
 Guitar special effects are limited to harmonics and slides.
 
+
 @node Custom tablatures
 @unnumberedsubsubsec Custom tablatures
 
@@ -667,7 +666,7 @@ Notation Reference:
 @ref{Scheme functions}.
 
 Installed Files:
-@file{ly/string-tuning-init.ly}
+@file{ly/string-tuning-init.ly},
 @file{scm/tablature.scm}.
 
 Snippets:
@@ -681,6 +680,7 @@ Automatic tablature calculations do not work properly in most
 cases for instruments where string pitches do not vary
 monotonically with string number, such as ukuleles.
 
+
 @node Fret diagram markups
 @unnumberedsubsubsec Fret diagram markups
 
@@ -1091,7 +1091,6 @@ Internals Reference:
 @node Predefined fret diagrams
 @unnumberedsubsubsec Predefined fret diagrams
 
-
 @cindex fret diagrams
 @cindex fret diagrams, ukulele
 @cindex fret diagrams, mandolin
@@ -1385,7 +1384,6 @@ the interface properties belong to @code{FretBoards.FretBoard}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {fretboards-alternate-tables.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Custom tablatures},
@@ -1553,7 +1551,6 @@ diagram, the interface properties belong to
 @code{\predefinedFretboardsOn}.
 @endpredefined
 
-
 @seealso
 Notation Reference:
 @ref{Custom tablatures}.
@@ -1612,7 +1609,6 @@ short, for example @code{RH},
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {fingerings,-string-indications,-and-right-hand-fingerings.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Fretted strings}.
@@ -1658,7 +1654,6 @@ b16 e g e b g\stopTextSpan
 e16 b g d
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{Text spanners}.
@@ -1880,8 +1875,8 @@ These may be converted to four-string tunings using the
 @end example
 
 @seealso
+Installed Files:
+@file{ly/string-tunings-init.ly}.
+
 Snippets:
 @rlsr{Fretted strings}.
-
-Installed Files:
-@file{ly/string-tunings-init.ly}
index 3c2c98b265881b66411b2cb983e9280551d238e0..8c6c1639d3c7d7024d1df1e9dca32052a52f61c2 100644 (file)
@@ -504,7 +504,6 @@ after the entire command.
 
 @end itemize
 
-
 @seealso
 Learning Manual:
 @rlearning{How LilyPond input files work}.
@@ -711,6 +710,7 @@ Notation Reference:
 Installed Files:
 @file{ly/titling-init.ly}.
 
+
 @node Default layout of headers and footers
 @unnumberedsubsubsec Default layout of headers and footers
 
@@ -1014,6 +1014,7 @@ Notation Reference:
 @ref{Title blocks explained},
 @ref{Default layout of book and score title blocks}.
 
+
 @node Creating footnotes
 @subsection Creating footnotes
 
@@ -1428,10 +1429,9 @@ Dots can be added to fill the line between an item and its page number:
 }
 @end lilypond
 
-
 @seealso
-Init files: @file{../ly/toc-init.ly}.
-
+Installed Files:
+@file{ly/toc-init.ly}.
 
 @predefined
 @funindex \table-of-contents
@@ -1814,19 +1814,18 @@ Notation Reference:
 @ref{Automatic part combining},
 @ref{Including LilyPond files}.
 
-
 @ignore
 @c This warning is more general than this placement implies.
 @c Rests are not merged whether or not they come from tagged sections.
 @c Should be deleted?  -td
 
 @knownissues
-
 Multiple rests are not merged if you create a score with more
 than one tagged section at the same place.
 
 @end ignore
 
+
 @node Using global settings
 @unnumberedsubsubsec Using global settings
 
@@ -1854,6 +1853,7 @@ Learning Manual:
 Notation Reference:
 @ref{Including LilyPond files}.
 
+
 @node Special characters
 @subsection Special characters
 
@@ -2042,7 +2042,6 @@ Installed Files:
 @file{ly/text-replacements.ly}.
 
 
-
 @node Controlling output
 @section Controlling output
 
@@ -2179,7 +2178,8 @@ existing @code{fonts} directory to @code{fonts_orig} and the
 reverse the process.
 
 @seealso
-Learning Manual: @rlearning{Other sources of information}.
+Learning Manual:
+@rlearning{Other sources of information}.
 
 @knownissues
 Gonville cannot be used to typeset @q{Ancient Music} notation and it is
index bcd955b28e20a5df6e9375e61aaed82195d4cb5c..e323958e52436d551eb9cfe2f2a94b27cc0b9509 100644 (file)
@@ -137,6 +137,7 @@ Internals Reference:
 Snippets:
 @rlsr{Keyboards}.
 
+
 @node Changing staff manually
 @unnumberedsubsubsec Changing staff manually
 
@@ -324,7 +325,6 @@ key signature in the lower staff:
 >>
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{Changing staff manually}.
@@ -337,7 +337,6 @@ Internals Reference:
 
 
 @knownissues
-
 @cindex chords, splitting across staves with \autochange
 
 The staff switches may not end up in optimal places.  For high
@@ -346,6 +345,7 @@ quality output, staff switches should be specified manually.
 Chords will not be split across the staves; they will be assigned to a
 staff based on the first note named in the chord construct.
 
+
 @node Staff-change lines
 @unnumberedsubsubsec Staff-change lines
 
@@ -391,7 +391,6 @@ notes can be printed automatically:
 @code{\hideStaffSwitch}.
 @endpredefined
 
-
 @seealso
 Snippets:
 @rlsr{Keyboards}.
@@ -454,7 +453,6 @@ Chords that cross staves may be produced:
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {indicating-cross-staff-chords-with-arpeggio-bracket.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Keyboards}.
@@ -600,7 +598,6 @@ come into use to simplify the performance instructions.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {accordion-discant-symbols.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Keyboards}.
@@ -644,6 +641,7 @@ Notation Reference:
 @ref{Arpeggio},
 @ref{Harmonics}.
 
+
 @node Harp pedals
 @unnumberedsubsubsec Harp pedals
 
index 830366ddd4d5be3f7f46e3a2180c739e0b8fa451..1c00f6fb5bd8f4f12769fda7ad04f5b23fd5d55a 100644 (file)
@@ -1149,7 +1149,6 @@ character, or a combination of two characters formating a ligature.
 A set of glyphs with a single style and shape comprise a font, and
 a set of fonts covering several styles and sizes comprise a typeface.
 
-
 @seealso
 Notation Reference:
 @ref{Fonts},
@@ -1200,6 +1199,7 @@ In apparent contradiction to the name, they can be changed using
 Notation Reference:
 @ref{mutable}.
 
+
 @node interface
 @unnumberedsubsec interface
 
@@ -1259,6 +1259,7 @@ computations are stored in mutable properties.
 Notation Reference:
 @ref{immutable}.
 
+
 @node output-def
 @unnumberedsubsec output-def
 
index cc4dd03a2c335bfff16d20a54dd5c591042be23d..3f361f0ef3c58461cf08d4a5453c3c17c990daa5 100644 (file)
@@ -48,7 +48,6 @@ discussed in @ref{Showing melody rhythms}, and
 
 @end itemize
 
-
 @seealso
 Notation Reference:
 @ref{Showing melody rhythms},
@@ -111,14 +110,13 @@ be set explicitly.  Other clefs may be used as well.
 There are a few issues concerning MIDI support for percussion
 instruments; for details please see @ref{Percussion in MIDI}.
 
-
 @seealso
 Notation Reference:
 @ref{Percussion in MIDI},
 @ref{Percussion notes}.
 
-File:
-@file{ly/drumpitch-init.ly}
+Installed Files:
+@file{ly/drumpitch-init.ly}.
 
 Snippets:
 @rlsr{Percussion}.
@@ -159,9 +157,7 @@ may be overridden to achieve a pleasing baseline.
 }
 @end lilypond
 
-
 @seealso
-
 Notation Reference:
 @ref{Tremolo repeats}.
 
@@ -176,7 +172,6 @@ Certain pitched percussion instruments (e.g. xylophone,
 vibraphone, and timpani) are written using normal staves.
 This is covered in other sections of the manual.
 
-
 @seealso
 @c TODO: possibly link to an alternate section of NR 3.5, if
 @c "percussion in MIDI" gets a separate subsubsection for
@@ -579,7 +574,6 @@ drumsB = {
 }
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Percussion}.
@@ -624,7 +618,6 @@ However, the default @code{\drummode} does not include the
 Also note that you must add chords (@code{< >} brackets)
 around each @code{\parenthesize} statement.
 
-
 @seealso
 Snippets:
 @rlsr{Percussion}.
index 491e76f03c870d18f9f7ad664678242880779b88..4bc237094ac9061cb3d0a60978cda36b86bdc02f 100644 (file)
@@ -87,7 +87,6 @@ octave.
 }
 @end lilypond
 
-
 @seealso
 Music Glossary:
 @rglos{Pitch names}.
@@ -274,7 +273,6 @@ Snippets:
 Internals Reference:
 @rinternals{RelativeOctaveMusic}.
 
-
 @cindex relative octave entry and transposition
 @cindex transposition and relative octave entry
 
@@ -285,7 +283,6 @@ Internals Reference:
 @funindex \relative
 @funindex relative
 
-
 @c DEPRECATED
 If no @code{@var{startpitch}} is specified for @code{\relative},
 then@tie{}@code{c'} is assumed.  However, this is a deprecated
@@ -293,7 +290,6 @@ option and may disappear in future versions, so its use is
 discouraged.
 
 
-
 @node Accidentals
 @unnumberedsubsubsec Accidentals
 
@@ -424,18 +420,15 @@ Internals Reference:
 @rinternals{AccidentalCautionary},
 @rinternals{accidental-interface}.
 
-
 @cindex accidental, quarter-tone
 @cindex quarter-tone accidental
 
 @knownissues
-
 There are no generally accepted standards for denoting
 quarter-tone accidentals, so LilyPond's symbol does not conform to
 any standard.
 
 
-
 @node Note names in other languages
 @unnumberedsubsubsec Note names in other languages
 
@@ -573,7 +566,6 @@ Western classical music, also referred to as
 pitches and tuning systems are also supported: see
 @ref{Common notation for non-Western music}.
 
-
 @seealso
 Music Glossary:
 @rglos{Pitch names},
@@ -666,7 +658,6 @@ checks fail, but the second one does not fail.
 }
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Pitches}.
@@ -790,7 +781,6 @@ see @ref{Instrument transpositions}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {transposing-pitches-with-minimum-accidentals-smart-transpose.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Instrument transpositions},
@@ -805,7 +795,6 @@ Snippets:
 Internals Reference:
 @rinternals{TransposedMusic}.
 
-
 @funindex \transpose
 @funindex transpose
 @funindex \chordmode
@@ -814,7 +803,6 @@ Internals Reference:
 @funindex relative
 
 @knownissues
-
 The relative conversion will not affect @code{\transpose},
 @code{\chordmode} or @code{\relative} sections in its argument.  To use
 relative mode within transposed music, an additional @code{\relative}
@@ -1266,7 +1254,6 @@ fis
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {non-traditional-key-signatures.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{church mode},
@@ -1323,7 +1310,6 @@ a2 b
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {ottava-text.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{octavation}.
@@ -1419,7 +1405,6 @@ R1
 c2 g
 @end lilypond
 
-
 @seealso
 Music Glossary:
 @rglos{concert pitch},
@@ -2548,14 +2533,12 @@ Internals Reference:
 @rinternals{AccidentalPlacement},
 @rinternals{accidental-suggestion-interface}.
 
-
 @cindex accidentals and simultaneous notes
 @cindex simultaneous notes and accidentals
 @cindex accidentals in chords
 @cindex chords, accidentals in
 
 @knownissues
-
 Simultaneous notes are not considered in the automatic
 determination of accidentals; only previous notes and the key
 signature are considered.  Forcing accidentals with@tie{}@code{!}
@@ -2605,6 +2588,7 @@ forget = #(define-music-function (parser location music) (ly:music?) #{
 }
 @end lilypond
 
+
 @node Ambitus
 @unnumberedsubsubsec Ambitus
 
@@ -2649,7 +2633,6 @@ printed if they are not part of the key signature.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-the-ambitus-gap.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{ambitus}.
@@ -2667,9 +2650,7 @@ Internals Reference:
 @rinternals{AmbitusNoteHead},
 @rinternals{ambitus-interface}.
 
-
 @knownissues
-
 There is no collision handling in the case of multiple per-voice
 ambitus.
 
@@ -2827,7 +2808,6 @@ font, see @ref{Setting the staff size}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {numbers-as-easy-note-heads.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Setting the staff size}.
@@ -2949,7 +2929,6 @@ a2 b c d \break
 
 To see all note head styles, see @ref{Note head styles}.
 
-
 @seealso
 Snippets:
 @rlsr{Pitches}.
@@ -2995,13 +2974,11 @@ rhythm.  Such note heads can be created:
 }
 @end lilypond
 
-
 @predefined
 @code{\improvisationOn},
 @code{\improvisationOff}.
 @endpredefined
 
-
 @seealso
 Snippets:
 @rlsr{Pitches}.
index 2a0d5fdbd89b8179bc1abc1708ad13af8211da1b..1aeebd69d56930df431ccdb5760c7b2d9dd3a9e1 100644 (file)
@@ -428,7 +428,6 @@ voltaAdLib = \markup { 1. 2. 3... \text \italic { ad lib. } }
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {printing-a-repeat-sign-at-the-beginning-of-a-piece.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Bar lines},
@@ -558,6 +557,7 @@ Internals Reference:
 @rinternals{RepeatedMusic},
 @rinternals{UnfoldedRepeatedMusic}.
 
+
 @node Short repeats
 @subsection Short repeats
 
@@ -723,11 +723,9 @@ c: c:
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {cross-staff-tremolos.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Repeats}.
 
 @cindex tremolo, cross-staff
 @cindex cross-staff tremolo
-
index b5c60a19808d5015629a4ccfa9a1a0198b8c9d4d..680e96c4fdeb78cc58dfb216915a8b60c463eab1 100644 (file)
@@ -148,7 +148,6 @@ the staff; see @ref{Direction and placement}.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {changing-the-number-of-augmentation-dots-per-note.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{breve},
@@ -174,9 +173,7 @@ Internals Reference:
 @rinternals{Dots},
 @rinternals{DotColumn}.
 
-
 @knownissues
-
 @c Deliberately duplicated in Durations and Rests.  -gp
 There is no fundamental limit to rest durations (both in terms of
 longest and shortest), but the number of glyphs is limited:
@@ -271,7 +268,6 @@ see @ref{Scaling durations}.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {permitting-line-breaks-within-beamed-tuplets.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{triplet},
@@ -295,7 +291,6 @@ Internals Reference:
 @rinternals{TupletNumber},
 @rinternals{TimeScaledMusic}.
 
-
 @cindex grace notes within tuplet brackets
 
 @knownissues
@@ -375,7 +370,6 @@ and expanded:
 One application of this command is in polymetric
 notation, see @ref{Polymetric notation}.
 
-
 @seealso
 Notation Reference:
 @ref{Tuplets},
@@ -664,7 +658,6 @@ a4\rest d4\rest
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {rest-styles.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{breve},
@@ -680,9 +673,7 @@ Snippets:
 Internals Reference:
 @rinternals{Rest}.
 
-
 @knownissues
-
 @c Deliberately duplicated in Durations and Rests.  -gp
 There is no fundamental limit to rest durations (both in terms of
 longest and shortest), but the number of glyphs is limited: there
@@ -764,7 +755,6 @@ any kind.
 \skip 1 \skip1 \skip 1
 @end lilypond
 
-
 @seealso
 Learning Manual:
 @rlearning{Visibility and color of objects}.
@@ -941,7 +931,6 @@ setting, resulting bar-check warnings may not be displayed.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {multi-measure-rest-markup.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{multi-measure rest}.
@@ -960,7 +949,6 @@ Internals Reference:
 @rinternals{MultiMeasureRestNumber},
 @rinternals{MultiMeasureRestText}.
 
-
 @cindex fingerings and multi-measure rests
 @cindex multi-measure rests and fingerings
 
@@ -979,6 +967,7 @@ into a single multi-measure rest.
 
 Multi-measure rests do not take part in rest collisions.
 
+
 @node Displaying rhythms
 @subsection Displaying rhythms
 
@@ -1214,7 +1203,6 @@ for different staves by moving the @code{Timing_translator} and the
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {time-signature-printing-only-the-numerator-as-a-number-instead-of-the-fraction.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{time signature}
@@ -1230,6 +1218,7 @@ Internals Reference:
 @rinternals{TimeSignature},
 @rinternals{Timing_translator}.
 
+
 @node Metronome marks
 @unnumberedsubsubsec Metronome marks
 
@@ -1305,7 +1294,6 @@ d4 g e c
 
 For more details, see @ref{Formatting text}.
 
-
 @seealso
 Music Glossary:
 @rglos{metronome},
@@ -1409,6 +1397,7 @@ e8 | a4 c8 b[ c b] |
 r8 e,8 | a4 c8 b[ c b] |
 @end lilypond
 
+
 @node Unmetered music
 @unnumberedsubsubsec Unmetered music
 
@@ -1480,7 +1469,6 @@ shown in @ref{Polymetric notation}.
 @code{\cadenzaOff}.
 @endpredefined
 
-
 @seealso
 Music Glossary:
 @rglos{cadenza}.
@@ -1493,7 +1481,6 @@ Notation Reference:
 Snippets:
 @rlsr{Rhythms}.
 
-
 @cindex cadenza line breaks
 @cindex cadenza page breaks
 @cindex unmetered music, line breaks
@@ -1505,7 +1492,6 @@ Snippets:
 @cindex page breaks in unmetered music
 
 @knownissues
-
 LilyPond will insert line breaks and page breaks only at a
 bar line.  Unless the unmetered music ends before the end of the
 staff line, you will need to insert invisible bar lines with
@@ -1700,7 +1686,6 @@ Internals Reference:
 @rinternals{Default_bar_line_engraver},
 @rinternals{Staff}.
 
-
 @knownissues
 When using different time signatures in parallel, notes at the same
 moment will be placed at the same horizontal location.  However, the bar
@@ -1708,6 +1693,7 @@ lines in the different staves will cause the note spacing to be less
 regular in each of the individual staves than would be normal without
 the different time signatures.
 
+
 @node Automatic note splitting
 @unnumberedsubsubsec Automatic note splitting
 
@@ -1744,7 +1730,6 @@ inserts ties for notes.  One of its uses is to debug complex scores: if
 the measures are not entirely filled, then the ties show exactly how
 much each measure is off.
 
-
 @seealso
 Music Glossary:
 @rglos{tie}
@@ -1763,9 +1748,7 @@ Internals Reference:
 @rinternals{Completion_rest_engraver},
 @rinternals{Forbid_line_break_engraver}.
 
-
 @knownissues
-
 Not all durations (especially those containing tuplets) can be
 represented exactly with normal notes and dots, but the
 @code{Completion_heads_engraver} will not insert tuplets.
@@ -1849,7 +1832,6 @@ be done with the @code{Pitch_squash_engraver} and
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {guitar-strum-rhythms.ly}
 
-
 @seealso
 Snippets:
 @rlsr{Rhythms}.
@@ -2237,7 +2219,6 @@ The default beaming rules can be found in
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {beam-endings-in-score-context.ly}
 
-
 @seealso
 Installed Files:
 @file{scm/beam-settings.scm}.
@@ -2251,7 +2232,6 @@ Internals Reference:
 @rinternals{BeamForbidEvent},
 @rinternals{beam-interface}.
 
-
 @knownissues
 If a score ends while an automatic beam has not been ended and is
 still accepting notes, this last beam will not be typeset at all.
@@ -2306,6 +2286,7 @@ beaming settings for a time signature are described in
 >>
 @end lilypond
 
+
 @node Manual beams
 @unnumberedsubsubsec Manual beams
 
@@ -2390,7 +2371,6 @@ g16 a]
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {flat-flags-and-beam-nibs.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Direction and placement},
@@ -2458,7 +2438,6 @@ the last four 32nd notes are at a constant tempo.
 The spacing in the printed output represents the
 note durations only approximately, but the MIDI output is exact.
 
-
 @predefined
 @code{\featherDurations}.
 @endpredefined
@@ -2467,9 +2446,7 @@ note durations only approximately, but the MIDI output is exact.
 Snippets:
 @rlsr{Rhythms}.
 
-
 @knownissues
-
 The @code{\featherDurations} command only works with very short
 music snippets, and when numbers in the fraction are small.
 
@@ -2477,7 +2454,6 @@ music snippets, and when numbers in the fraction are small.
 @node Bars
 @subsection Bars
 
-
 @menu
 * Bar lines::
 * Bar numbers::
@@ -2717,7 +2693,6 @@ The default bar type used for automatically inserted bar lines is
 @code{"|"}.  This may be changed at any time with
 @samp{\set Timing.defaultBarType = @var{bartype}}.
 
-
 @seealso
 Notation Reference:
 @ref{Line breaking},
@@ -2904,7 +2879,6 @@ example,
 will print a warning if the @code{currentBarNumber} is not 123
 when it is processed.
 
-
 @seealso
 Snippets:
 @rlsr{Rhythms}.
@@ -3048,6 +3022,10 @@ For common tweaks to the positioning of rehearsal marks, see
 @ref{Formatting text}.  For more precise control, see
 @code{break-alignable-interface} in @ref{Aligning objects}.
 
+The file @file{scm/translation-functions.scm} contains
+the definitions of @code{format-mark-numbers} and
+@code{format-mark-letters}.  They can be used as inspiration for
+other formatting functions.
 
 @seealso
 Notation Reference:
@@ -3056,10 +3034,7 @@ Notation Reference:
 @ref{Aligning objects}.
 
 Installed Files:
-@file{scm/translation-functions.scm} contains
-the definitions of @code{format-mark-numbers} and
-@code{format-mark-letters}.  They can be used as inspiration for
-other formatting functions.
+@file{scm/translation-functions.scm}.
 
 Snippets:
 @rlsr{Rhythms}.
@@ -3220,7 +3195,6 @@ direction is overridden and then reverted.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {positioning-grace-notes-with-floating-space.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{grace notes},
@@ -3228,6 +3202,7 @@ Music Glossary:
 @rglos{appoggiatura}.
 
 Notation Reference:
+@ref{Scaling durations},
 @ref{Manual beams}.
 
 Installed Files:
@@ -3244,7 +3219,6 @@ Internals Reference:
 
 
 @knownissues
-
 @cindex acciaccatura, multi-note
 @cindex multi-note acciaccatura
 @cindex grace-note synchronization
@@ -3371,7 +3345,6 @@ MyCadenza = \relative c' {
 >>
 @end lilypond
 
-
 @seealso
 Music Glossary:
 @rglos{cadenza}.
@@ -3456,7 +3429,6 @@ duration of n/m of a whole note.  For example,
 @code{ly:make-moment 7 16} is the duration of seven sixteenths
 notes.
 
-
 @seealso
 Notation Reference:
 @ref{Bar numbers},
@@ -3468,4 +3440,3 @@ Snippets:
 Internals Reference:
 @rinternals{Timing_translator},
 @rinternals{Score}.
-
index 00740cdfcef9e5a83f42c0ec261c384877f8f139..90669730a7f8682e0d43ae6f631d9cf43a8748fe 100644 (file)
@@ -130,6 +130,7 @@ enharmonic transcription of one or more pitches,
 
 @end itemize
 
+
 @node Chord repetition
 @unnumberedsubsubsec Chord repetition
 
@@ -301,7 +302,6 @@ Ordinary notes and clusters can be put together in the same staff,
 even simultaneously.  In such a case no attempt is made to
 automatically avoid collisions between ordinary notes and clusters.
 
-
 @seealso
 Music Glossary:
 @rglos{cluster}.
@@ -314,9 +314,7 @@ Internals Reference:
 @rinternals{ClusterSpannerBeacon},
 @rinternals{Cluster_spanner_engraver}.
 
-
 @knownissues
-
 Clusters look good only if they span at least two chords; otherwise
 they appear too narrow.
 
@@ -327,6 +325,7 @@ separating rest between them.
 
 Clusters do not produce MIDI output.
 
+
 @node Multiple voices
 @subsection Multiple voices
 
@@ -538,9 +537,6 @@ music do not have the same rhythm.
 @code{\oneVoice}.
 @endpredefined
 
-Snippets:
-@rlsr{Simultaneous notes}.
-
 @seealso
 Learning Manual:
 @rlearning{Voices contain music},
@@ -551,6 +547,9 @@ Notation Reference:
 @ref{Invisible rests},
 @ref{Stems}.
 
+Snippets:
+@rlsr{Simultaneous notes}.
+
 
 @node Voice styles
 @unnumberedsubsubsec Voice styles
@@ -591,7 +590,6 @@ standard presentation.
 @code{\voiceNeutralStyle}.
 @endpredefined
 
-
 @seealso
 Learning Manual:
 @rlearning{I'm hearing Voices},
@@ -835,6 +833,7 @@ The requirements for successfully merging different note heads that
 are at the same time differently dotted are not clear.
 @end ignore
 
+
 @node Automatic part combining
 @unnumberedsubsubsec Automatic part combining
 
@@ -1001,7 +1000,6 @@ instrumentTwo = \relative c' {
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing-partcombine-texts.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{a due},
@@ -1018,7 +1016,6 @@ Internals Reference:
 @rinternals{Voice}.
 
 @knownissues
-
 All @code{\partcombine...} functions can only accept two voices and are
 not designed to work with lyrics; such that when one of the voices is
 explicitly named in order to attach lyrics to it, the partcombiner will
@@ -1163,7 +1160,6 @@ global = {
 }
 @end lilypond
 
-
 @seealso
 Learning Manual:
 @rlearning{Organizing pieces with variables}.
index 6b7f49e6bbca1395162a27ea0bf9c032e33f40f2..64af60f58eef0a2f525a195300b8e7b7416c4beb 100644 (file)
@@ -365,7 +365,6 @@ Snippets:
 @rlsr{Spacing}.
 
 @knownissues
-
 The titles (from the @code{\header} block) are treated as a
 system, so @code{ragged-bottom} and @code{ragged-last-bottom} will
 add space between the titles and the first system of the score.
@@ -680,7 +679,6 @@ Installed Files:
 @file{ly/paper-defaults-init.ly}.
 
 @knownissues
-
 Explicitly defined paper-sizes will override any user-defined left or
 right margin settings.
 
@@ -991,7 +989,6 @@ sensible default, for example:
 
 @end table
 
-
 @seealso
 Installed Files:
 @file{ly/titling-init.ly}.
@@ -999,9 +996,7 @@ Installed Files:
 Snippets:
 @rlsr{Spacing}.
 
-
 @knownissues
-
 The default page header puts the page number and the @code{instrument}
 field from the @code{\header} block on a line.
 
@@ -1078,7 +1073,6 @@ Here is an example @code{\layout} block:
 @}
 @end example
 
-
 @seealso
 Notation Reference:
 @ref{Changing context default settings}.
@@ -1180,7 +1174,6 @@ These fonts are available in any sizes.  The context property
 @rinternals{StaffSymbol}) can be used to tune the size for individual
 staves.  The sizes of individual staves are relative to the global size.
 
-
 @seealso
 Notation Reference:
 @ref{Selecting notation font size}.
@@ -1188,9 +1181,7 @@ Notation Reference:
 Snippets:
 @rlsr{Spacing}.
 
-
 @knownissues
-
 @code{layout-set-staff-size} does not change the distance between the
 staff lines.
 
@@ -1329,7 +1320,6 @@ complicated.  More details are available in
 @code{\noBreak}.
 @endpredefined
 
-
 @seealso
 Notation Reference:
 @ref{\paper variables for line breaking}.
@@ -1414,7 +1404,6 @@ book parts.
 @code{\noPageBreak}.
 @endpredefined
 
-
 @seealso
 Notation Reference:
 @ref{\paper variables for page breaking}.
@@ -1433,7 +1422,6 @@ determining page breaks.  It attempts to find a page breaking that minimizes
 cramping and stretching, both horizontally and vertically.  Unlike
 @code{ly:page-turn-breaking}, it has no concept of page turns.
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -1504,7 +1492,6 @@ The page turning commands, @code{\pageTurn}, @code{\noPageTurn} and
 @code{\allowPageTurn}, may also be used at top-level, between scores and
 top-level markups.
 
-
 @predefined
 @funindex \pageTurn
 @code{\pageTurn},
@@ -1514,14 +1501,11 @@ top-level markups.
 @code{\allowPageTurn}.
 @endpredefined
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
 
-
 @knownissues
-
 There should only be one @code{Page_turn_engraver} in a score.  If there is more
 than one, they will interfere with each other.
 
@@ -1543,7 +1527,6 @@ too slow or memory demanding, or a lot of texts.  It is enabled using:
 @}
 @end example
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -1595,7 +1578,6 @@ music = \relative c'' { c8 c c c }
 }
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -1682,7 +1664,6 @@ music = \relative c'' { c4 c c c }
 }
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{Vertical spacing}.
@@ -2043,15 +2024,15 @@ Notation Reference:
 @ref{Flexible vertical spacing \paper variables},
 @ref{Modifying alists}.
 
+Installed Files:
+@file{ly/engraver-init.ly},
+@file{scm/define-grobs.scm}.
+
 Internals Reference:
 @rinternals{Contexts},
 @rinternals{VerticalAxisGroup},
 @rinternals{StaffGrouper}.
 
-Installed Files:
-@file{ly/engraver-init.ly},
-@file{scm/define-grobs.scm}.
-
 
 @node Spacing of ungrouped staves
 @unnumberedsubsubsec Spacing of ungrouped staves
@@ -2253,7 +2234,6 @@ able to stretch much more than usual:
 >>
 @end lilypond
 
-
 @seealso
 Installed Files:
 @file{ly/engraver-init.ly},
@@ -2497,7 +2477,6 @@ to print staves or systems on top of one another.  Reasonable values
 passed to these different settings will avoid this.
 @end itemize
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -2582,7 +2561,6 @@ c4
 c''2
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -2691,8 +2669,10 @@ once with exaggerated corrections:
 
 Proportional notation is supported; see @ref{Proportional notation}.
 
-
 @seealso
+Essay on automated music engraving:
+@ressay{Optical spacing}.
+
 Snippets:
 @rlsr{Spacing}.
 
@@ -2702,15 +2682,11 @@ Internals Reference:
 @rinternals{StaffSpacing},
 @rinternals{NonMusicalPaperColumn}.
 
-Essay on automated music engraving:
-@ressay{Optical spacing}.
-
-
 @knownissues
-
 There is no convenient mechanism to manually override spacing.  The
 following work-around may be used to insert extra space into a score,
 adjusting the padding value as necessary.
+
 @example
  \override Score.NonMusicalPaperColumn #'padding = #10
 @end example
@@ -2741,7 +2717,6 @@ The @code{\newSpacingSection} command creates a new
 @code{SpacingSpanner} object, and hence new @code{\override}s
 may be used in that location.
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -2833,7 +2808,6 @@ regard for clefs, bar lines, and grace notes,
 \new Staff { c8[ c \clef alto c \grace { c16[ c] } c8 c c]  c32[ c32] }
 @end lilypond
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -2887,7 +2861,6 @@ paragraph, the last line simply takes its natural horizontal length.
 @}
 @end example
 
-
 @seealso
 Snippets:
 @rlsr{Spacing}.
@@ -3274,7 +3247,6 @@ mark both rhythmic start- and stop-points, and allow spanning elements
 to break across systems and pages.  See the respective parts of the manual
 for these related settings.
 
-
 @seealso
 Notation Reference:
 @ref{New spacing area}.
@@ -3349,7 +3321,6 @@ of @code{a6} paper in landscape orientation.  The pairs
 (@var{a},@var{b}) are intervals, where @var{a} is the lower
 edge and @var{b} the upper edge of the interval.
 
-
 @seealso
 Notation Reference:
 @ref{Setting the staff size}.
@@ -3397,6 +3368,16 @@ assignment will force a layout with 10 systems.
 @}
 @end example
 
+@item
+Force the number of pages.  For example, the following
+assignment will force a layout with 2 pages.
+
+@example
+\paper @{
+  page-count = #2
+@}
+@end example
+
 @item
 Avoid (or reduce) objects that increase the vertical size of a
 system.  For example, volta repeats (or alternate repeats) require
@@ -3459,7 +3440,6 @@ block so that it applies to the whole score.
 
 @end itemize
 
-
 @seealso
 Notation Reference:
 @ref{Page layout},
index 7093338b967912d3f394234106074cc7932c0356..a8111bd7c47a7a1a096521fb9b4c5fe5b0727537 100644 (file)
@@ -116,7 +116,6 @@ notate modern Gregorian chant.  It does not show bar lines.
 New single staff contexts may be defined.  For details, see
 @ref{Defining new contexts}.
 
-
 @seealso
 Music Glossary:
 @rglos{staff},
@@ -249,7 +248,6 @@ New staff group contexts may be defined.  For details, see
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {mensurstriche-layout-bar-lines-between-the-staves.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{brace},
@@ -318,7 +316,6 @@ New nested staff group contexts can be defined.  For details, see
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {nesting-staves.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Grouping staves},
@@ -336,6 +333,7 @@ Internals Reference:
 @rinternals{SystemStartBracket},
 @rinternals{SystemStartSquare}.
 
+
 @node Separating systems
 @unnumberedsubsubsec Separating systems
 
@@ -697,7 +695,6 @@ break.  For more information about
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {vertically-aligning-ossias-and-lyrics.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{ossia},
@@ -807,7 +804,6 @@ hide empty staves in ancient music contexts.  Similarly,
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {removing-the-first-empty-line.ly}
 
-
 @seealso
 Music Glossary:
 @rglos{Frenched staff}.
@@ -834,9 +830,7 @@ Internals Reference:
 @rinternals{VerticalAxisGroup},
 @rinternals{Staff_symbol_engraver}.
 
-
 @knownissues
-
 Removing @code{Staff_symbol_engraver} also hides bar lines.  If
 bar line visibility is forced, formatting errors may occur.  In
 this case, use the following overrides instead of removing the
@@ -851,6 +845,7 @@ For the Known issues and warnings associated with
 @code{\Staff \RemoveEmptyStaves} see
 @ref{Changing context default settings}.
 
+
 @node Writing parts
 @subsection Writing parts
 
@@ -1027,7 +1022,6 @@ expression to declare the instrument switch:
 }
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{\paper variables for shifts and indents},
@@ -1185,6 +1179,9 @@ Notation Reference:
 @ref{Instrument transpositions},
 @ref{Using tags}.
 
+Installed Files:
+@file{scm/define-event-classes.scm}.
+
 Snippets:
 @rlsr{Staff notation}.
 
@@ -1193,10 +1190,6 @@ Internals Reference:
 @rinternals{QuoteMusic},
 @rinternals{Voice}.
 
-Installed Files:
-@file{scm/define-event-classes.scm}.
-
-
 @knownissues
 Only the contents of the first @code{Voice} occurring in an
 @code{\addQuote} command will be considered for quotation, so if the music
@@ -1491,7 +1484,6 @@ Alternatively, Clef changes and instrument labels can be
 collected into an instrument definition for repeated use, using
 @code{\addInstrumentDefinition} described in @ref{Instrument names}.
 
-
 @seealso
 Notation Reference:
 @ref{Quoting other voices},
@@ -1508,9 +1500,7 @@ Internals Reference:
 @rinternals{CueVoice},
 @rinternals{Voice}.
 
-
 @knownissues
-
 Collisions can occur with rests, when using @code{\cueDuring},
 between @code{Voice} and @code{CueVoice} contexts.  When using
 @code{\cueDuringWithClef} or @code{\transposedCueDuring} the extra
index a770eb1d9cf6b62712ac893c66b11e94ec1cfde0..3ba9e554a6342262a9ee34cbd49c02165b147ad5 100644 (file)
@@ -98,7 +98,6 @@ articulations, see @rlearning{Placement of objects}.
 @code{\textLengthOff}.
 @endpredefined
 
-
 @seealso
 Learning Manual:
 @rlearning{Placement of objects}.
@@ -114,13 +113,11 @@ Snippets:
 Internals Reference:
 @rinternals{TextScript}.
 
-
 @cindex text outside margin
 @cindex margin, text running over
 @cindex text, keeping inside margin
 @cindex lyrics, keeping inside margin
 
-
 @knownissues
 Checking to make sure that text scripts and lyrics are within the
 margins requires additonal calculations. In cases where slightly faster
@@ -283,7 +280,6 @@ c  c
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {printing-marks-on-every-staff.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Rehearsal marks},
@@ -362,7 +358,6 @@ requires, are described in @ref{Multi-page markup}.
 @lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
 {stand-alone-two-column-markup.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Formatting text},
@@ -482,7 +477,6 @@ allegro = \markup { \bold \large Allegro }
 An exhaustive list of @code{\markup}-specific commands can be found in
 @ref{Text markup commands}.
 
-
 @seealso
 Notation Reference:
 @ref{Text markup commands}.
@@ -493,7 +487,6 @@ Snippets:
 Installed Files:
 @file{scm/markup.scm}.
 
-
 @knownissues
 Syntax errors for markup mode can be confusing.
 
@@ -671,7 +664,6 @@ Defining custom font sets is also possible, as explained in
 @code{\larger}.
 @endpredefined
 
-
 @seealso
 Notation Reference:
 @ref{Font},
@@ -679,15 +671,15 @@ Notation Reference:
 @ref{Manual repeat marks},
 @ref{Fonts}.
 
+Installed Files:
+@file{scm/define-markup-commands.scm}.
+
 Snippets:
 @rlsr{Text}.
 
 Internals Reference:
 @rinternals{TextScript}.
 
-Installed Files:
-@file{scm/define-markup-commands.scm}.
-
 @knownissues
 Using the font sizing commands @code{\teeny}, @code{\tiny},
 @code{\small}, @code{\normalsize}, @code{\large}, and
@@ -933,7 +925,6 @@ as shown in the following example.
 An exhaustive list of text alignment commands can be found in
 @ref{Align}.
 
-
 @seealso
 Learning Manual:
 @rlearning{Moving objects}.
@@ -942,15 +933,15 @@ Notation Reference:
 @ref{Align},
 @ref{Text marks}.
 
+Installed Files:
+@file{scm/define-markup-commands.scm}.
+
 Snippets:
 @rlsr{Text}.
 
 Internals Reference:
 @rinternals{TextScript}.
 
-Installed Files:
-@file{scm/define-markup-commands.scm}.
-
 
 @node Graphic notation inside markup
 @unnumberedsubsubsec Graphic notation inside markup
 An exhaustive list of graphics-specific commands can be found in
 @ref{Graphic}.
 
-
 @seealso
 Notation Reference:
 @ref{Graphic},
 @ref{Editorial annotations},
 @ref{Align}.
 
+Installed Files:
+@file{scm/define-markup-commands.scm},
+@file{scm/stencil.scm}.
+
 Snippets:
 @rlsr{Text}.
 
 Internals Reference:
 @rinternals{TextScript}.
 
-Installed Files:
-@file{scm/define-markup-commands.scm},
-@file{scm/stencil.scm}.
-
 
 @node Music notation inside markup
 @unnumberedsubsubsec Music notation inside markup
@@ -1250,24 +1240,23 @@ c d e f
 An exhaustive list of music notation related commands can be found in
 @ref{Music}.
 
-
 @seealso
 Notation Reference:
 @ref{Music},
 @ref{The Feta font},
 @ref{Fonts explained}.
 
+Installed Files:
+@file{scm/define-markup-commands.scm},
+@file{scm/fret-diagrams.scm},
+@file{scm/harp-pedals.scm}.
+
 Snippets:
 @rlsr{Text}.
 
 Internals Reference:
 @rinternals{TextScript}.
 
-Installed Files:
-@file{scm/define-markup-commands.scm},
-@file{scm/fret-diagrams.scm},
-@file{scm/harp-pedals.scm}.
-
 
 @node Multi-page markup
 @unnumberedsubsubsec Multi-page markup
@@ -1315,23 +1304,21 @@ a list of markup lists.
 An exhaustive list of markup list commands can be found in
 @ref{Text markup list commands}.
 
-
 @seealso
 Notation Reference:
-@ref{Text markup list commands},
-
-Snippets:
-@rlsr{Text}.
+@ref{Text markup list commands}.
 
-Extending:
+Extending LilyPond:
 @rextend{New markup list command definition}.
 
-Internals Reference:
-@rinternals{TextScript}.
-
 Installed Files:
 @file{scm/define-markup-commands.scm}.
 
+Snippets:
+@rlsr{Text}.
+
+Internals Reference:
+@rinternals{TextScript}.
 
 @funindex \markuplist
 @funindex markuplist
@@ -1450,7 +1437,6 @@ Although it is easy to switch between preconfigured fonts, it is also
 possible to use other fonts, as explained in the following sections:
 @ref{Single entry fonts} and @ref{Entire document fonts}.
 
-
 @seealso
 Notation Reference:
 @ref{The Feta font},
@@ -1491,7 +1477,6 @@ operating system:
 lilypond -dshow-available-fonts x
 @end example
 
-
 @seealso
 Notation Reference:
 @ref{Fonts explained},
@@ -1539,7 +1524,6 @@ explanation of fonts, see @ref{Fonts explained}.
 @c we don't do Helvetica / Courier, since GS incorrectly loads
 @c Apple TTF fonts
 
-
 @seealso
 Notation Reference:
 @ref{Fonts explained},
index 76bf1ceb79d09e318bf161de142087d270181dd4..e421191772e8df0dd1e006aa4078fb043c1fab48 100644 (file)
@@ -65,7 +65,6 @@ added, see @ref{Arpeggio}.
 
 @end itemize
 
-
 @seealso
 Learning Manual:
 @rlearning{String quartet}.
@@ -120,7 +119,6 @@ a2^\markup { \small "sul A" }
 @code{\open}.
 @endpredefined
 
-
 @seealso
 Notation Reference:
 @ref{Articulations and ornamentations},
@@ -189,7 +187,6 @@ dots are required.
 chord construct even if there is only a single note.  Normally
 @code{@bs{}harmonicsOn} would be used in this situation.}
 
-
 @seealso
 Music Glossary:
 @rglos{harmonics}.
index 1c3c59e086857f2d9c6e533d8179967fb1de7b46..c159c4cf1882003b9030e721a76ce62c9e68bfb7 100644 (file)
@@ -91,6 +91,7 @@ Notation Reference:
 Snippets:
 @rlsr{Vocal music}.
 
+
 @node Entering lyrics
 @unnumberedsubsubsec Entering lyrics
 
@@ -224,7 +225,8 @@ Internals Reference:
 @rinternals{LyricText}.
 
 Snippets:
-@rlsr{Text}
+@rlsr{Text}.
+
 
 @node Aligning lyrics to a melody
 @unnumberedsubsubsec Aligning lyrics to a melody
@@ -339,7 +341,7 @@ Learning Manual:
 
 Notation Reference:
 @ref{Contexts explained},
-@ref{Automatic syllable durations}.
+@ref{Automatic syllable durations},
 @ref{Stanzas},
 @ref{Manual syllable durations},
 @ref{Dialogue over music},
@@ -348,6 +350,7 @@ Notation Reference:
 Internals Reference:
 @rinternals{Lyrics}.
 
+
 @node Automatic syllable durations
 @unnumberedsubsubsec Automatic syllable durations
 
@@ -513,6 +516,7 @@ Notation Reference:
 @ref{Keeping contexts alive},
 @ref{Placing lyrics vertically}.
 
+
 @node Manual syllable durations
 @unnumberedsubsubsec Manual syllable durations
 
@@ -621,7 +625,6 @@ the tilde symbol (@code{~}) to get a lyric tie.
 }
 @end lilypond
 
-
 @seealso
 Internals Reference:
 @rinternals{LyricCombineMusic}.
@@ -827,7 +830,6 @@ Internals Reference:
 @rinternals{Tunable context properties}.
 
 @knownissues
-
 Extender lines under melismata are not created automatically; they
 must be inserted manually with a double underscore.
 
@@ -868,7 +870,6 @@ distance between two syllables) and the @code{minimum-length}
 (threshold below which hyphens are removed) properties of
 @code{LyricHyphen}.
 
-
 @seealso
 Internals Reference:
 @rinternals{LyricExtender},
@@ -962,7 +963,6 @@ contraltoWords = \lyricmode { Con -- tral -- to words }
 }
 @end lilypond
 
-
 @seealso
 Notation Reference:
 @ref{Placing lyrics vertically}.
@@ -1102,6 +1102,7 @@ Notation Reference:
 @ref{Context layout order},
 @ref{Creating contexts}.
 
+
 @node Placing syllables horizontally
 @unnumberedsubsubsec Placing syllables horizontally
 
@@ -2087,6 +2088,7 @@ Notation Reference:
 Snippets:
 @rlsr{Vocal music}.
 
+
 @node Lead sheets
 @unnumberedsubsubsec Lead sheets
 
@@ -2188,6 +2190,7 @@ Internals Reference:
 @rinternals{Lyrics},
 @rinternals{PianoStaff}.
 
+
 @node Score layouts for choral
 @unnumberedsubsubsec Score layouts for choral
 
@@ -2499,6 +2502,7 @@ Notation Reference:
 Extending LilyPond:
 @rextend{Markup construction in Scheme}.
 
+
 @node Musical cues
 @unnumberedsubsubsec Musical cues
 
index a935aa121da5f79d712eb7bc5493ed86b9359386..72bb5255f6589f4a71802d95a963547e4ecf8eec 100644 (file)
@@ -83,7 +83,6 @@ See @ref{Articulations and ornamentations}.
 @lilypondfile[verbatim,quote,texidoc,doctitle]
 {changing--flageolet-mark-size.ly}
 
-
 @seealso
 Notation Reference:
 @ref{Breath marks},
@@ -120,7 +119,6 @@ Woodwind diagrams can be produced and are described in
 {recorder-fingering-chart.ly}
 
 @seealso
-
 Notation Reference:
 @ref{Woodwind diagrams}.
 
@@ -188,8 +186,8 @@ This can be indicated by @code{cflat} or @code{fflat}.  Similarly, the
 piobaireachd high g can be written @code{gflat} when it occurs in light
 music.
 
-
 @seealso
+Snippets:
 @rlsr{Winds}.
 
 
@@ -239,10 +237,11 @@ notation.
 }
 @end lilypond
 
-
 @seealso
+Snippets:
 @rlsr{Winds}.
 
+
 @node Woodwinds
 @subsection Woodwinds
 
@@ -420,12 +419,12 @@ require Scheme ability and may not be accessible to all users.
 {woodwind-diagrams-key-lists.ly}
 
 @seealso
-
 Installed Files:
 @file{scm/define-woodwind-diagrams.scm},
 @file{scm/display-woodwind-diagrams.scm}.
 
-Snippets: @rlsr{Winds}.
+Snippets:
+@rlsr{Winds}.
 
 Internals Reference:
 @rinternals{TextScript},
index 5a7662a274760d8c1d0dc980c56cc098ce16e582..f273bf114fb697f732a9b2294990629f3ddb71b6 100644 (file)
@@ -883,13 +883,9 @@ new contributors, encourage students already participating in LilyPond
 development to become more involved, and - last but not least - write some
 great code for the benefit of all!
 
-In addition to getting paid for your work, you'll gain experience in
-software development, which many of previous GSoC students describe as
-@emph{invaluable} (and you'll get a t-shirt, too!).
-
-If you have any questions, read
-@uref{http://www.google-melange.com/gsoc/document/show/gsoc_program/google/gsoc2012/faqs, GSoC FAQ}
-or contact us at @code{lilypond-devel@@gnu.org}.
+We are participating in GSoC as a part of GNU Project.  See
+@uref{http://www.gnu.org/software/soc-projects/guidelines.html, GNU GSoC webpage}
+for information on how to participate.
 
 @divEnd
 
@@ -897,7 +893,7 @@ or contact us at @code{lilypond-devel@@gnu.org}.
 @subheading Our Ideas List
 
 Below is a list of projects suggested for GSoC students.  If you don't
-see a project that suits you, feel free to contact us and suggest your own!
+see a project that suits you, feel free to suggest your own!
 It's also possible to scale down a project if you feel it's too big.
 
 We require that every student has basic @code{git} knowledge, and
index 2d22f9f378202c703591eb6d7c0c50a3b89d290e..0ad3c6e30b409ecd6647e2ff91392399cf196d39 100644 (file)
@@ -120,10 +120,6 @@ WEB_TARGETS = offline
 
 WEB_ROOT_FILES = $(WEB_TARGETS:%=$(outdir)/%-root/index.html)
 
-WEB_EXAMPLE_FILES = $(wildcard input/$(outdir)/*.ly) \
-                    $(wildcard input/*/$(outdir)/*.ly) \
-                    $(wildcard input/*/*/$(outdir)/*.ly)
-
 WEB_TRACKED_FILES = $(filter-out $(outdir)/index.html, \
                     $(shell bash -O nullglob -c "echo $(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}")) \
                     $(shell bash -O nullglob -c "echo input/$(outdir)/*.{midi,html,pdf,png,jpg,jpeg,txt,ly,ily,signature,css,zip,js,idx,php}") \
diff --git a/input/regression/beam-subdivide-tuplets.ly b/input/regression/beam-subdivide-tuplets.ly
new file mode 100644 (file)
index 0000000..afd8497
--- /dev/null
@@ -0,0 +1,20 @@
+\version "2.15.34"
+
+\header {
+  
+  doctitle = "Beam subdivide tuplets"
+
+  texidoc = "
+Tuplets that span more than one beat should be
+subdivided if subdivideBeams is #t.  In this example,
+the beams should be subdivided every 1/8.
+"
+
+}
+
+\relative c' {
+    \set tupletSpannerDuration = #(ly:make-moment 1 4)
+    \set baseMoment = #(ly:make-moment 1 8)
+    \set subdivideBeams = ##t
+    \times 4/6 { \repeat unfold 24 { c16 } }
+}
diff --git a/input/regression/tablature-open-string-handling.ly b/input/regression/tablature-open-string-handling.ly
new file mode 100644 (file)
index 0000000..721c0b2
--- /dev/null
@@ -0,0 +1,18 @@
+\version "2.15.33"
+
+\header {
+
+  texidoc = "
+  Open strings are part of a chord in tablature, even when @code{minimumFret} is set.
+  This can be changed via @code{restrainOpenStrings}."
+
+}
+
+\score {
+  \new TabStaff {
+    \set TabStaff.minimumFret = #3
+    < g, d >1
+    \set TabStaff.restrainOpenStrings = ##t
+    < g, d >1
+  }
+}
index bb0fae9691c1bf2e4cc4536db5925ae7647a9191..aa367f27c68a0ee7ed152ef776e646ade897fec9 100644 (file)
@@ -1,8 +1,7 @@
 \header {
 
   texidoc = "The whiteout command underlays a white box under a
-markup.  The whitening effect only is only guaranteed for staff lines,
-since staff lines are in a lower layer than most other grobs.  "
+markup.  "
 
 }
 \version "2.14.0"
@@ -13,6 +12,7 @@ since staff lines are in a lower layer than most other grobs.  "
 }
 
 \relative c'' {
+  \override TextScript #'layer = #'2
   \override TextScript #'extra-offset = #'(2 . 4)
   c4-\markup  { \whiteout \pad-markup #0.5 foo } c
-} 
+}
index b6b9060ddaeb59a9e3a3ed30782920148cee9919..f1408497cd3f0dafc5794faf8b838904caf38571 100644 (file)
@@ -270,16 +270,11 @@ Beaming_pattern::find_rhythmic_importance (Beaming_options const &options)
           Moment tuplet_moment (tuplet);
           Moment tuplet_dt = infos_[i].start_moment_ - tuplet_start_moment;
           tuplet_number = tuplet.den ();
-          // set the beat end (if not in a tuplet) and increment the next beat
+          // set the beat end and increment the next beat
           if (infos_[i].start_moment_ == next_beat_pos)
             {
-              if (tuplet_number == 1)
-                {
-                  infos_[i].rhythmic_importance_ = -1;
-                  next_beat_pos += options.base_moment_;
-                }
-              if (infos_[i].tuplet_start_)
-                infos_[i].rhythmic_importance_ = -1;
+              infos_[i].rhythmic_importance_ = -1;
+              next_beat_pos += options.base_moment_;
             }
           // The rhythmic importance of a stem between beats depends on its fraction
           // of a beat: those stems with a lower denominator are deemed more
index 9b9628c6dcf0ea32e6cb9580975131f2eb14a07c..d4f3dc3433d8952c84b7d359007db3f1e161a58d 100644 (file)
@@ -146,7 +146,8 @@ Context_def::add_context_mod (SCM mod)
   else if (ly_symbol2scm ("pop") == tag
            || ly_symbol2scm ("push") == tag
            || ly_symbol2scm ("assign") == tag
-           || ly_symbol2scm ("unset") == tag)
+           || ly_symbol2scm ("unset") == tag
+          || ly_symbol2scm ("apply") == tag)
     property_ops_ = scm_cons (mod, property_ops_);
   else if (ly_symbol2scm ("alias") == tag)
     context_aliases_ = scm_cons (sym, context_aliases_);
@@ -326,7 +327,7 @@ Context_def::make_scm ()
 void
 Context_def::apply_default_property_operations (Context *tg)
 {
-  apply_property_operations (tg, property_ops_);
+  apply_property_operations (tg, scm_reverse (property_ops_));
 }
 
 SCM
@@ -373,6 +374,18 @@ Context_def::lookup (SCM sym) const
   return SCM_UNDEFINED;
 }
 
+bool
+Context_def::is_alias (SCM sym) const
+{
+  if (scm_is_eq (sym, ly_symbol2scm ("Bottom")))
+    return !scm_is_pair (get_accepted (SCM_EOL));
+
+  if (scm_is_eq (sym, get_context_name ()))
+    return true;
+
+  return scm_is_true (scm_c_memq (sym, context_aliases_));
+}
+
 LY_DEFINE (ly_context_def_lookup, "ly:context-def-lookup",
           2, 1, 0, (SCM def, SCM sym, SCM val),
            "Return the value of @var{sym} in output definition @var{def}"
index a51f7cf71e7ee4ca9afaecb08dfa0b7f7dfa988f..460d18bcfd79222ae0c138f798899a3746e3dfdb 100644 (file)
@@ -45,7 +45,7 @@ Context_mod::print_smob (SCM smob, SCM port, scm_print_state *)
   Context_mod *me = (Context_mod *) SCM_CELL_WORD_1 (smob);
 
   scm_puts ("#<Context_mod ", port);
-  scm_display (me->mods_, port);
+  scm_display (me->get_mods (), port);
   scm_puts (">", port);
   return 1;
 }
@@ -57,7 +57,6 @@ Context_mod::mark_smob (SCM smob)
 
   Context_mod *me = (Context_mod *) SCM_CELL_WORD_1 (smob);
 
-  scm_gc_mark (me->mods_);
   return me->mods_;
 }
 
index 11d03c5b0537be35619f173d382fb6cc59aa042b..be27388eaeb17688f2604e899725268ae567de21 100644 (file)
@@ -225,29 +225,37 @@ execute_pushpop_property (Context *context,
 void
 apply_property_operations (Context *tg, SCM pre_init_ops)
 {
-  SCM correct_order = scm_reverse (pre_init_ops);
-  for (SCM s = correct_order; scm_is_pair (s); s = scm_cdr (s))
+  for (SCM s = pre_init_ops; scm_is_pair (s); s = scm_cdr (s))
     {
       SCM entry = scm_car (s);
       SCM type = scm_car (entry);
       entry = scm_cdr (entry);
+      if (!scm_is_pair (entry))
+       continue;
+      SCM context_prop = scm_car (entry);
+      if (scm_is_pair (context_prop)) {
+       if (tg->is_alias (scm_car (context_prop)))
+         context_prop = scm_cdr (context_prop);
+       else
+         continue;
+      }
 
       if (type == ly_symbol2scm ("push"))
         {
-          SCM context_prop = scm_car (entry);
           SCM val = scm_cadr (entry);
           SCM grob_prop_path = scm_cddr (entry);
           sloppy_general_pushpop_property (tg, context_prop, grob_prop_path, val);
         }
       else if (type == ly_symbol2scm ("pop"))
         {
-          SCM context_prop = scm_car (entry);
           SCM val = SCM_UNDEFINED;
           SCM grob_prop_path = scm_cdr (entry);
           sloppy_general_pushpop_property (tg, context_prop, grob_prop_path, val);
         }
       else if (type == ly_symbol2scm ("assign"))
-        tg->set_property (scm_car (entry), scm_cadr (entry));
+        tg->set_property (context_prop, scm_cadr (entry));
+      else if (type == ly_symbol2scm ("apply"))
+       scm_apply_1 (context_prop, tg->self_scm (), scm_cdr (entry));
     }
 }
 
index be8a62980469199a70d88fc71ba35c089b74f56b..392077861828ea7683644662eb3ff1974afeca38 100644 (file)
@@ -318,7 +318,7 @@ Context::path_to_acceptable_context (SCM name) const
   // The 'accepts elements in definition_mods_ is a list of ('accepts string),
   // but the Context_def expects to see elements of the form ('accepts symbol).
   SCM accepts = SCM_EOL;
-  for (SCM s = scm_reverse (definition_mods_); scm_is_pair (s); s = scm_cdr (s))
+  for (SCM s = definition_mods_; scm_is_pair (s); s = scm_cdr (s))
     if (scm_caar (s) == ly_symbol2scm ("accepts"))
       {
         SCM elt = scm_list_2 (scm_caar (s), scm_string_to_symbol (scm_cadar (s)));
@@ -327,7 +327,7 @@ Context::path_to_acceptable_context (SCM name) const
 
   return unsmob_context_def (definition_)->path_to_acceptable_context (name,
          get_output_def (),
-         accepts);
+        scm_reverse_x (accepts, SCM_EOL));
 
 }
 
index 8f4218745bec8e05862ee040e787a459331585e2..2fddd980b7918ab0006011e9643a8c2a212782e4 100644 (file)
@@ -57,6 +57,7 @@ public:
   SCM get_translator_group_type () const { return translator_group_type_; }
   void set_acceptor (SCM accepts, bool add);
   SCM lookup (SCM sym) const;
+  bool is_alias (SCM sym) const;
 
   VIRTUAL_COPY_CONSTRUCTOR (Context_def, Context_def);
 
index 12455c6fe76d494352372a0b41c30e655e5f24e5..ccc2538905c86dc7cdd4716a84002f09e631b647 100644 (file)
@@ -22,6 +22,7 @@
 
 #include "simple-spacer.hh"
 #include "skyline.hh"
+#include "stencil.hh"
 
 class Page_layout_problem
 {
@@ -40,10 +41,10 @@ public:
   static vsize get_footnote_count (SCM lines);
   static SCM get_footnotes_from_lines (SCM lines);
   static void add_footnotes_to_lines (SCM lines, int counter, Paper_book *pb);
-  static Stencil *get_footnote_separator_stencil (Output_def *paper);
+  static Stencil get_footnote_separator_stencil (Output_def *paper);
   static SCM get_spacing_spec (Grob *before, Grob *after, bool pure, int start, int end);
   static Real get_fixed_spacing (Grob *before, Grob *after, int spaceable_index, bool pure, int start, int end);
-  static void add_footnotes_to_footer (SCM footnotes, Stencil *foot, Paper_book *pb);
+  static Stencil add_footnotes_to_footer (SCM footnotes, Stencil foot, Paper_book *pb);
 
 protected:
   void append_system (System *, Spring const &, Real indent, Real padding);
index 925ee0367e207004e5c3cc21654113c66765a81d..daa9454c4a196a5c74ca3b53033f0a203ce23249 100644 (file)
@@ -205,16 +205,20 @@ Multi_measure_rest::symbol_stencil (Grob *me, Real space)
       return s;
     }
 
-  Real staff_space = Staff_symbol_referencer::staff_space (me);
-
   Font_metric *musfont = Font_interface::get_default_font (me);
   int mdl = calc_measure_duration_log (me, true);
 
   if (measure_count == 1)
     {
-      Stencil s = musfont->find_by_name (Rest::glyph_name (me, mdl, "", true));
       if (mdl == 0 && me->get_property ("staff-position") == SCM_EOL)
-        s.translate_axis (staff_space, Y_AXIS);
+       {
+         if (Staff_symbol_referencer::on_staff_line (me, 2))
+           me->set_property ("staff-position", scm_from_int (2));
+         else if (Staff_symbol_referencer::on_staff_line (me, 3))
+           me->set_property ("staff-position", scm_from_int (3));
+       }
+
+      Stencil s = musfont->find_by_name (Rest::glyph_name (me, mdl, "", true));
 
       s.translate_axis ((space - s.extent (X_AXIS).length ()) / 2, X_AXIS);
       return s;
index 43d5b64105d0dd095f8b86cc81e35cd7c9bb0b18..a2e1e345134bae7d56926e29ff98136c1ff817bd 100644 (file)
@@ -91,6 +91,8 @@ LY_DEFINE (ly_output_description, "ly:output-description",
           1, 0, 0, (SCM output_def),
           "Return the description of translators in @var{output-def}.")
 {
+  LY_ASSERT_SMOB (Output_def, output_def, 1);
+
   Output_def *id = unsmob_output_def (output_def);
 
   SCM al = ly_module_2_alist (id->scope_);
@@ -105,6 +107,31 @@ LY_DEFINE (ly_output_description, "ly:output-description",
   return ell;
 }
 
+LY_DEFINE (ly_output_find_context_def, "ly:output-find-context-def",
+          1, 1, 0, (SCM output_def, SCM context_name),
+          "Return an alist of all context defs (matching @var{context-name}"
+          "if given) in @var{output-def}.")
+{
+  LY_ASSERT_SMOB (Output_def, output_def, 1);
+  if (!SCM_UNBNDP (context_name))
+    LY_ASSERT_TYPE (ly_is_symbol, context_name, 2);
+
+  Output_def *id = unsmob_output_def (output_def);
+
+  SCM al = ly_module_2_alist (id->scope_);
+  SCM ell = SCM_EOL;
+  for (SCM s = al; scm_is_pair (s); s = scm_cdr (s))
+    {
+      SCM p = scm_car (s);
+      Context_def *td = unsmob_context_def (scm_cdr (p));
+      if (td && scm_is_eq (scm_car (p), td->get_context_name ())
+         && (SCM_UNBNDP (context_name) || td->is_alias (context_name)))
+       ell = scm_cons (p, ell);
+    }
+  return ell;
+}
+
+
 LY_DEFINE (ly_output_def_p, "ly:output-def?",
           1, 0, 0, (SCM def),
           "Is @var{def} an output definition?")
index 61a4e82f91d3098baf29e77b800a622749902522..d81e32d230108ff61bb54979837ffd9e1d121461 100644 (file)
@@ -254,11 +254,11 @@ Page_breaking::Page_breaking (Paper_book *pb, Break_predicate is_break, Prob_bre
   min_systems_per_page_ = max (0, robust_scm2int (pb->paper_->c_variable ("min-systems-per-page"), 0));
   orphan_penalty_ = robust_scm2int (pb->paper_->c_variable ("orphan-penalty"), 100000);
 
-  Stencil *footnote_separator = Page_layout_problem::get_footnote_separator_stencil (pb->paper_);
+  Stencil footnote_separator = Page_layout_problem::get_footnote_separator_stencil (pb->paper_);
 
-  if (footnote_separator)
+  if (!footnote_separator.is_empty ())
     {
-      Interval separator_extent = footnote_separator->extent (Y_AXIS);
+      Interval separator_extent = footnote_separator.extent (Y_AXIS);
       Real separator_span = separator_extent.length ();
 
       footnote_separator_stencil_height_ = separator_span;
@@ -574,14 +574,14 @@ Page_breaking::draw_page (SCM systems, SCM configuration, int page_num, bool las
   p->set_property ("lines", paper_systems);
   p->set_property ("configuration", configuration);
 
-  Stencil *foot = unsmob_stencil (p->get_property ("foot-stencil"));
+  Stencil *foot_p = unsmob_stencil (p->get_property ("foot-stencil"));
+  Stencil foot = foot_p ? *foot_p : Stencil ();
 
   SCM footnotes = Page_layout_problem::get_footnotes_from_lines (systems);
 
-  Page_layout_problem::add_footnotes_to_footer (footnotes, foot, book_);
+  foot = Page_layout_problem::add_footnotes_to_footer (footnotes, foot, book_);
 
-  if (foot)
-    p->set_property ("foot-stencil", foot->smobbed_copy ());
+  p->set_property ("foot-stencil", foot.smobbed_copy ());
   scm_apply_1 (page_stencil, page, SCM_EOL);
 
   return page;
index 6320827c767a74b07078d328eb7041d7649f6179..cc1a0cee1164bad1393e99dd536f30de5d965f6d 100644 (file)
@@ -162,7 +162,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
     by passing its results downstream.
   */
   vector<SCM> footnote_number_markups; // Holds the numbering markups.
-  vector<Stencil *> footnote_number_stencils; // Holds translated versions of the stencilized numbering markups.
+  vector<Stencil> footnote_number_stencils; // Holds translated versions of the stencilized numbering markups.
   for (vsize i = 0; i < fn_count; i++)
     {
       if (fn_grobs[i])
@@ -176,36 +176,39 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
       if (!s)
         {
           programming_error ("Your numbering function needs to return a stencil.");
-          markup = SCM_EOL;
-          s = new Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL);
+         footnote_number_markups.push_back (SCM_EOL);
+          footnote_number_stencils.push_back (Stencil (Box (Interval (0, 0), Interval (0, 0)), SCM_EOL));
         }
-      footnote_number_markups.push_back (markup);
-      footnote_number_stencils.push_back (s);
+      else
+       {
+         footnote_number_markups.push_back (markup);
+         footnote_number_stencils.push_back (*s);
+       }
       counter++;
     }
 
   // find the maximum X_AXIS length
   Real max_length = -infinity_f;
   for (vsize i = 0; i < fn_count; i++)
-    max_length = max (max_length, footnote_number_stencils[i]->extent (X_AXIS).length ());
+    max_length = max (max_length, footnote_number_stencils[i].extent (X_AXIS).length ());
 
   /*
     translate each stencil such that it attains the correct maximum length and bundle the
     footnotes into a scheme object.
   */
-  SCM *tail = &numbers;
-  SCM *in_text_tail = &in_text_numbers;
 
   for (vsize i = 0; i < fn_count; i++)
     {
-      *in_text_tail = scm_cons (footnote_number_markups[i], SCM_EOL);
-      in_text_tail = SCM_CDRLOC (*in_text_tail);
-      footnote_number_stencils[i]->translate_axis ((max_length
-                                                    - footnote_number_stencils[i]->extent (X_AXIS).length ()),
+      in_text_numbers = scm_cons (footnote_number_markups[i], in_text_numbers);
+      footnote_number_stencils[i].translate_axis ((max_length
+                                                    - footnote_number_stencils[i].extent (X_AXIS).length ()),
                                                    X_AXIS);
-      *tail = scm_cons (footnote_number_stencils[i]->smobbed_copy (), SCM_EOL);
-      tail = SCM_CDRLOC (*tail);
+      numbers = scm_cons (footnote_number_stencils[i].smobbed_copy (), numbers);
     }
+
+  in_text_numbers = scm_reverse_x (in_text_numbers, SCM_EOL);
+  numbers = scm_reverse_x (numbers, SCM_EOL);
+
   // build the footnotes
 
   for (SCM s = lines; scm_is_pair (s); s = scm_cdr (s))
@@ -236,7 +239,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
               SCM footnote_stl = Text_interface::interpret_markup (paper->self_scm (),
                                                                    props, footnote_markup);
 
-              Stencil *footnote_stencil = unsmob_stencil (footnote_stl);
+              Stencil footnote_stencil = *unsmob_stencil (footnote_stl);
               bool do_numbering = to_boolean (footnote->get_property ("automatically-numbered"));
               if (Spanner *orig = dynamic_cast<Spanner *>(footnote))
                 {
@@ -257,21 +260,21 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
                           orig->broken_intos_[i]->set_property ("text", annotation_scm);
                     }
 
-                  Stencil *annotation = unsmob_stencil (scm_car (numbers));
-                  annotation->translate_axis ((footnote_stencil->extent (Y_AXIS)[UP]
-                                               + number_raise
-                                               - annotation->extent (Y_AXIS)[UP]),
+                  Stencil annotation = *unsmob_stencil (scm_car (numbers));
+                  annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
+                                             + number_raise
+                                             - annotation.extent (Y_AXIS)[UP]),
                                               Y_AXIS);
-                  footnote_stencil->add_at_edge (X_AXIS, LEFT, *annotation, 0.0);
+                  footnote_stencil.add_at_edge (X_AXIS, LEFT, annotation, 0.0);
                   numbers = scm_cdr (numbers);
                   in_text_numbers = scm_cdr (in_text_numbers);
                 }
-              if (!footnote_stencil->is_empty ())
+              if (!footnote_stencil.is_empty ())
                 {
                   if (to_boolean (footnote->get_property ("footnote")))
-                    mol.add_at_edge (Y_AXIS, DOWN, *footnote_stencil, padding);
+                    mol.add_at_edge (Y_AXIS, DOWN, footnote_stencil, padding);
                   else
-                    in_note_mol.add_at_edge (Y_AXIS, DOWN, *footnote_stencil, padding);
+                    in_note_mol.add_at_edge (Y_AXIS, DOWN, footnote_stencil, padding);
                 }
             }
           sys->set_property ("in-note-stencil", in_note_mol.smobbed_copy ());
@@ -285,25 +288,23 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
 
           for (SCM st = stencils; scm_is_pair (st); st = scm_cdr (st))
             {
-              Stencil footnote_stencil;
-              Stencil *footnote = unsmob_stencil (scm_caddar (st));
-              footnote_stencil.add_stencil (*footnote);
+              Stencil footnote_stencil = *unsmob_stencil (scm_caddar (st));
               bool do_numbering = to_boolean (scm_cadar (st));
               SCM in_text_stencil = Stencil ().smobbed_copy ();
               if (do_numbering)
                 {
-                  Stencil *annotation = unsmob_stencil (scm_car (numbers));
+                  Stencil annotation = *unsmob_stencil (scm_car (numbers));
                   SCM in_text_annotation = scm_car (in_text_numbers);
                   in_text_stencil = Text_interface::interpret_markup (layout,
                                                                       props,
                                                                       in_text_annotation);
                   if (!unsmob_stencil (in_text_stencil))
                     in_text_stencil = SCM_EOL;
-                  annotation->translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
-                                               + number_raise
-                                               - annotation->extent (Y_AXIS)[UP]),
-                                              Y_AXIS);
-                  footnote_stencil.add_at_edge (X_AXIS, LEFT, *annotation, 0.0);
+                  annotation.translate_axis ((footnote_stencil.extent (Y_AXIS)[UP]
+                                             + number_raise
+                                             - annotation.extent (Y_AXIS)[UP]),
+                                            Y_AXIS);
+                  footnote_stencil.add_at_edge (X_AXIS, LEFT, annotation, 0.0);
                   numbers = scm_cdr (numbers);
                   in_text_numbers = scm_cdr (in_text_numbers);
                 }
@@ -321,7 +322,7 @@ Page_layout_problem::add_footnotes_to_lines (SCM lines, int counter, Paper_book
   pb->top_paper ()->set_variable (ly_symbol2scm ("number-footnote-table"), number_footnote_table);
 }
 
-Stencil *
+Stencil
 Page_layout_problem::get_footnote_separator_stencil (Output_def *paper)
 {
   SCM props = scm_call_1 (ly_lily_module_constant ("layout-extract-page-properties"),
@@ -330,24 +331,20 @@ Page_layout_problem::get_footnote_separator_stencil (Output_def *paper)
   SCM markup = paper->c_variable ("footnote-separator-markup");
 
   if (!Text_interface::is_markup (markup))
-    return NULL;
+    return Stencil ();
 
   SCM footnote_stencil = Text_interface::interpret_markup (paper->self_scm (),
                                                            props, markup);
 
   Stencil *footnote_separator = unsmob_stencil (footnote_stencil);
 
-  return footnote_separator;
+  return footnote_separator ? *footnote_separator : Stencil ();
 }
 
-void
-Page_layout_problem::add_footnotes_to_footer (SCM footnotes, Stencil *foot, Paper_book *pb)
+Stencil
+Page_layout_problem::add_footnotes_to_footer (SCM footnotes, Stencil foot, Paper_book *pb)
 {
-  if (!foot && scm_is_pair (footnotes))
-    {
-      warning ("Must have a footer to add footnotes.");
-      return;
-    }
+
   bool footnotes_found = false;
   Real footnote_padding = robust_scm2double (pb->paper_->c_variable ("footnote-padding"), 0.0);
   Real footnote_footer_padding = robust_scm2double (pb->paper_->c_variable ("footnote-footer-padding"), 0.0);
@@ -363,17 +360,19 @@ Page_layout_problem::add_footnotes_to_footer (SCM footnotes, Stencil *foot, Pape
 
       if (!stencil->is_empty ())
         {
-          foot->add_at_edge (Y_AXIS, UP, *stencil, (!footnotes_found ? footnote_footer_padding : footnote_padding));
+          foot.add_at_edge (Y_AXIS, UP, *stencil, (!footnotes_found ? footnote_footer_padding : footnote_padding));
           footnotes_found = true;
         }
     }
 
   if (footnotes_found)
     {
-      Stencil *separator = get_footnote_separator_stencil (pb->paper_);
-      if (separator)
-        foot->add_at_edge (Y_AXIS, UP, *separator, footnote_padding);
+      Stencil separator = get_footnote_separator_stencil (pb->paper_);
+      if (!separator.is_empty ())
+        foot.add_at_edge (Y_AXIS, UP, separator, footnote_padding);
     }
+
+  return foot;
 }
 
 Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM systems)
@@ -393,16 +392,18 @@ Page_layout_problem::Page_layout_problem (Paper_book *pb, SCM page_scm, SCM syst
       Stencil *head = unsmob_stencil (page->get_property ("head-stencil"));
       Stencil *foot = unsmob_stencil (page->get_property ("foot-stencil"));
 
+      Stencil foot_stencil = foot ? *foot : Stencil ();
+
       if (pb && pb->paper_)
         {
           SCM footnotes = get_footnotes_from_lines (systems);
-          add_footnotes_to_footer (footnotes, foot, pb);
+          foot_stencil = add_footnotes_to_footer (footnotes, foot_stencil, pb);
         }
       else
         warning ("A page layout problem has been initiated that cannot accommodate footnotes.");
 
       header_height_ = head ? head->extent (Y_AXIS).length () : 0;
-      footer_height_ = foot ? foot->extent (Y_AXIS).length () : 0;
+      footer_height_ = foot_stencil.extent (Y_AXIS).length ();
       page_height_ = robust_scm2double (page->get_property ("paper-height"), 100);
     }
 
index 4726a0fd5fd082105b0aa625f03fed6ce70ae521..601d63fc31e5586ad9016195f48d031644a8549b 100644 (file)
@@ -459,6 +459,8 @@ If we give names, Bison complains.
 %type <scm> context_def_spec_block
 %type <scm> context_def_spec_body
 %type <scm> context_mod
+%type <scm> context_mod_arg
+%type <scm> context_mod_embedded
 %type <scm> context_mod_list
 %type <scm> context_prop_spec
 %type <scm> direction_less_char
@@ -808,6 +810,27 @@ context_def_spec_block:
        }
        ;
 
+context_mod_arg:
+       embedded_scm
+       | composite_music
+       ;
+
+context_mod_embedded:
+       context_mod_arg
+       {
+               if (unsmob_music ($1)) {
+                       SCM proc = parser->lexer_->lookup_identifier ("context-mod-music-handler");
+                       $1 = scm_call_2 (proc, parser->self_scm (), $1);
+               }
+               if (unsmob_context_mod ($1))
+                       $$ = $1;
+               else {
+                       parser->parser_error (@1, _ ("not a context mod"));
+               }
+       }
+       ;
+
+
 context_def_spec_body:
        /**/ {
                $$ = Context_def::make_scm ();
@@ -817,18 +840,6 @@ context_def_spec_body:
                $$ = $1;
                unsmob_context_def ($$)->origin ()->set_spot (@$);
        }
-       | context_def_spec_body embedded_scm {
-               if (Context_mod *cm = unsmob_context_mod ($2)) {
-                       SCM p = cm->get_mods ();
-                       Context_def*td = unsmob_context_def ($$);
-
-                       for (; scm_is_pair (p); p = scm_cdr (p)) {
-                               td->add_context_mod (scm_car (p));
-                       }
-               } else {
-                       parser->parser_error (@2, _ ("not a context mod"));
-               }
-       }
        | context_def_spec_body context_mod {
                unsmob_context_def ($$)->add_context_mod ($2);
        }
@@ -839,6 +850,13 @@ context_def_spec_body:
                     td->add_context_mod (scm_car (m));
                 }
        }
+       | context_def_spec_body context_mod_embedded {
+                Context_def *td = unsmob_context_def ($$);
+                SCM new_mods = unsmob_context_mod ($2)->get_mods ();
+                for (SCM m = new_mods; scm_is_pair (m); m = scm_cdr (m)) {
+                    td->add_context_mod (scm_car (m));
+                }
+       }
        ;
 
 
@@ -1236,12 +1254,9 @@ context_mod_list:
                  if (md)
                      unsmob_context_mod ($1)->add_context_mods (md->get_mods ());
         }
-       | context_mod_list embedded_scm {
-               Context_mod *md = unsmob_context_mod ($2);
-               if (md)
-                       unsmob_context_mod ($1)->add_context_mods (md->get_mods ());
-               else
-                       parser->parser_error (@2, _ ("not a context mod"));
+       | context_mod_list context_mod_embedded {
+               unsmob_context_mod ($1)->add_context_mods
+                       (unsmob_context_mod ($2)->get_mods ());
         }
         ;
 
index 8d456b2d38d537169ee94faa9163e17addd74d33..81d82eec97a71d02c9c2005954304ad4e2261e41 100644 (file)
@@ -46,20 +46,35 @@ Timing_translator::stop_translation_timestep ()
 void
 Timing_translator::initialize ()
 {
-  context ()->add_alias (ly_symbol2scm ("Timing"));
-  context ()->set_property ("currentBarNumber", scm_from_int (1));
-  context ()->set_property ("internalBarNumber", scm_from_int (1));
+  Context *timing = unsmob_context (scm_call_2 (ly_lily_module_constant ("ly:context-find"),
+                                               context ()->self_scm (),
+                                               ly_symbol2scm ("Timing")));
+  if (timing != context ())
+    {
+      context ()->add_alias (ly_symbol2scm ("Timing"));
+
+      if (!timing) {
+       programming_error ("Can't find Timing context template");
+       timing = context ();
+      }
+  }
+
+  SCM barnumber = timing->get_property ("currentBarNumber");
+  if (!scm_is_integer (barnumber))
+    barnumber = scm_from_int (1);
+  context ()->set_property ("currentBarNumber", barnumber);
+  context ()->set_property ("internalBarNumber", barnumber);
 
   context ()->set_property ("timeSignatureFraction",
-                            scm_cons (scm_from_int (4), scm_from_int (4)));
+                           timing->get_property ("timeSignatureFraction"));
   /*
     Do not init measurePosition; this should be done from global
     context.
   */
   context ()->set_property ("measureLength",
-                            Moment (Rational (1)).smobbed_copy ());
+                            timing->get_property ("measureLength"));
   context ()->set_property ("baseMoment",
-                            Moment (Rational (1, 4)).smobbed_copy ());
+                            timing->get_property ("baseMoment"));
 }
 
 Rational
@@ -144,10 +159,12 @@ ADD_TRANSLATOR (Timing_translator,
                 "",
 
                 /* read */
-                "internalBarNumber "
+               "baseMoment "
                 "currentBarNumber "
+                "internalBarNumber "
                 "measureLength "
-                "measurePosition ",
+                "measurePosition "
+               "timeSignatureFraction ",
 
                 /* write */
                 "baseMoment "
index c8671b5ef79799351982dfd5996bfc1bc9459979..45b1b87fa1c234131ad9c9718fc59b02c3524768 100644 (file)
@@ -115,6 +115,7 @@ repeatTie = #(make-music 'RepeatTieEvent)
 #(define bookpart-text-handler ly:book-add-score!)
 #(define bookpart-music-handler collect-book-music-for-book)
 #(define output-def-music-handler context-defs-from-music)
+#(define context-mod-music-handler context-mod-from-music)
 
 \include "predefined-fretboards-init.ly"
 \include "string-tunings-init.ly"
index ad4aefa58fec08b6d87974e7ed7fa01becab0211..87505e27ccdcf33665edc4ef4eb58ba4e94a85e2 100644 (file)
@@ -46,6 +46,7 @@
 
   predefinedDiagramTable = #default-fret-table
   handleNegativeFrets = #'recalculate
+  restrainOpenStrings = ##f
 }
 
 \context {
@@ -527,7 +528,14 @@ automatically when an output definition (a @code{\score} or
   \consists "Repeat_acknowledge_engraver"
   \consists "Staff_collecting_engraver"
 
-  %% move the alias along with the engraver.
+  \alias "Timing"
+
+  %% An alias for Timing is established by the Timing_translator in
+  %% whatever context it is initialized, and the timing variables are
+  %% then copied from wherever Timing had been previously established.
+  %% The alias at Score level provides a target for initializing
+  %% Timing variables in layout definitions before any
+  %% Timing_translator has been run.
 
   % timing translator must come BEFORE bar number engraver
   \consists "Timing_translator"
@@ -892,6 +900,8 @@ contexts and handles the line spacing, the tablature clef etc. properly."
   clefPosition = #0
   %% Change string if note results in negative fret number
   handleNegativeFrets = #'recalculate
+  %% Allow open strings even if minimumFret is set
+  restrainOpenStrings = ##f
 }
 
 \context {
index 7adb1b7c788ae98db097585eed68c31382007d8e..80c3020ac04b7a2574ad72b85e59cad45edffaac 100644 (file)
@@ -988,21 +988,27 @@ a context modification duplicating their effect.")
               (list 'unset
                     (ly:music-property m 'symbol)))
              ((OverrideProperty)
-              (list 'push
-                    (ly:music-property m 'symbol)
-                    (ly:music-property m 'grob-value)
-                    (ly:music-property m 'grob-property-path)))
+              (cons* 'push
+                     (ly:music-property m 'symbol)
+                     (ly:music-property m 'grob-value)
+                     (ly:music-property m 'grob-property-path)))
              ((RevertProperty)
-              (list 'pop
-                    (ly:music-property m 'symbol)
-                    (ly:music-property m 'grob-property-path)))))
+              (cons* 'pop
+                     (ly:music-property m 'symbol)
+                     (ly:music-property m 'grob-property-path)))))
           (case (ly:music-property m 'name)
-            ((SequentialMusic SimultaneousMusic)
-             (for-each musicop (ly:music-property m 'elements)))
+            ((ApplyContext)
+             (ly:add-context-mod mods
+                                 (list 'apply
+                                       (ly:music-property m 'procedure))))
             ((ContextSpeccedMusic)
              (if (or (not ctx)
                      (eq? ctx (ly:music-property m 'context-type)))
-                 (musicop (ly:music-property m 'element)))))))
+                 (musicop (ly:music-property m 'element))))
+            (else
+             (let ((callback (ly:music-property m 'elements-callback)))
+               (if (procedure? callback)
+                   (for-each musicop (callback m))))))))
      (musicop music)
      mods))
 
index 62a2a83a9242915202741e0c835d3ca9edec0043..98ae0ceb8f6bfffe46783dc4b493d2ec43462d40 100644 (file)
   \consists "Time_signature_performer"
   \consists "Control_track_performer"
   \consists "Tempo_performer"
+
+  \alias "Timing"
+
+  %% An alias for Timing is established by the Timing_translator in
+  %% whatever context it is initialized, and the timing variables are
+  %% then copied from wherever Timing had been previously established.
+  %% The alias at Score level provides a target for initializing
+  %% Timing variables in layout definitions before any
+  %% Timing_translator has been run.
+
+  timeSignatureFraction = #'(4 . 4)
+
+%% These defaults should be the same as the rules established in
+%%   scm/time-signature-settings.scm for 4/4 time
+  measureLength = #(ly:make-moment 4 4)
+  baseMoment = #(ly:make-moment 1  4)
+
   \consists "Timing_translator"
 
   \defaultchild "Staff"
index 876d54e4b59bea74d72e83562e53ebe056e77a6f..39ca43b17022d0b77c62bd32834e255cfeb0a2ef 100644 (file)
@@ -1,4 +1,4 @@
 .SUFFIXES: .abc
 
 $(outdir)/%.ly:  %.abc
-       $(PYTHON) $(ABC2LY) -o $@ $<
+       $(PYTHON) $(ABC2LY) --quiet -o $@ $<
index b0cf7663b158b43c687b6749c9b0988c1bd9c223..946e5a4759c61887101adf4bb8b7a6815b4b0611 100644 (file)
@@ -26,7 +26,7 @@ $(outdir)/%.tex:  %.latex
 # Add the tex => pdf rule only if we have pdflatex
 ifeq (,$(findstring pdflatex,$(MISSING_OPTIONAL)))
 $(outdir)/%.pdf:  $(outdir)/%.tex
-       cd $(outdir) && $(PDFLATEX) $(notdir $<)
+       cd $(outdir) && $(buildscript-dir)/run-and-check "$(PDFLATEX) -halt-on-error $(notdir $<)" "$*.pdflatex.log"
 endif
 
 ############## Texinfo ######################
index 001148aec2bd8ef09f83f8dd507e27fb976b66bb..11248f503083bec6336ad8a1a6b2b69416a0c598 100644 (file)
@@ -3,7 +3,6 @@
 # Split it up into 10 300-element chunks, and one chunk containing the rest
 # if we have more than 3000 elements.
 $(outdir)/collated-files.list: $(COLLATED_FILES)
-       echo "(Re-)Generating $@"
        @echo $(wordlist    1, 299,$^)>$@
        @echo $(wordlist  300, 599,$^)>>$@
        @echo $(wordlist  600, 899,$^)>>$@
index 7b3f149d9643832dc72e02e23d6a27b286ddbc13..18dcc17246829927afa44ed886a5899b84602fc9 100644 (file)
@@ -1,7 +1,7 @@
 .SUFFIXES: .midi
 
 $(outdir)/%.ly:  %.midi
-       $(PYTHON) $(MIDI2LY) -o $(outdir) $<
+       $(PYTHON) $(MIDI2LY) --quiet -o $(outdir) $<
 
 $(outdir)/%.midi: %.ly $(LILYPOND_BINARY)
        touch $(foreach f, $(HEADER_FIELDS), $(outdir)/$*.$f)
@@ -10,7 +10,7 @@ $(outdir)/%.midi: %.ly $(LILYPOND_BINARY)
 
 $(outdir)/%-midi.ly: $(outdir)/%.midi $(MIDI2LY)
        (echo '\header {'; for f in $(HEADER_FIELDS); do echo -n $$f'="'; cat $(outdir)/$*.$$f; echo '"'; done; echo '}') > $(outdir)/$*.header
-       $(PYTHON) $(MIDI2LY) $(shell cat $(outdir)/$*.options) --include-header=$(outdir)/$*.header -o $(outdir) $<
+       $(PYTHON) $(MIDI2LY) $(shell cat $(outdir)/$*.options) --quiet --include-header=$(outdir)/$*.header -o $(outdir) $<
 
 $(outdir)/%.diff: %.ly $(outdir)/%-midi.ly
        $(DIFF) -puN $(MIDI2LY_IGNORE_RES) $^ > $@ || cat $@
index 59ac71d8184cb555a4911aea631898320eea0aae..0c53f5434c51ef1d44ac6cdd601e66910b8e3cd2 100644 (file)
@@ -29,6 +29,8 @@ else
   include $(config_make)
 endif
 
+include $(top-src-dir)/VERSION
+
 ################################################################
 #The 4 lines below present an option to force make website to run
 # quietly only when it is run as make -s website.  However, we've
@@ -52,7 +54,7 @@ OUT=out-website
 
 WEB_LANGS := $(shell MAKEWEB=1 $(PYTHON) $(top-src-dir)/python/langdefs.py)
 
-TEXI2HTML=ONLY_WEB=1 TOP_SRC_DIR=$(top-src-dir) DEPTH=$(depth) PERL_UNICODE=SD \
+TEXI2HTML=ONLY_WEB_VERSION=v$(MAJOR_VERSION).$(MINOR_VERSION) TOP_SRC_DIR=$(top-src-dir) DEPTH=$(depth) PERL_UNICODE=SD \
        $(TEXI2HTML_PROGRAM) -D web_version --prefix=index --split=section \
                --init-file=$(texi2html-init-file) \
                --I=$(dir $<) \
index e0da636c5172e3a8905ae202aed8dfbefc5395c3..ff29b144c966e91d8179f310664b74f66f9904a8 100644 (file)
@@ -441,6 +441,8 @@ is set.")
      (restCompletionBusy ,boolean? "Signal whether a completion-rest is active.")
      (restNumberThreshold ,number? "If a multimeasure rest has more
 measures than this, a number is printed.")
+     (restrainOpenStrings ,boolean? "Exclude open strings from the
+automatic fret calculator.")
 
      (searchForVoice ,boolean? "Signal whether a search should be made
 of all contexts in the context hierarchy for a voice to provide rhythms
index a9098fd1f8520dc96011897d31bc7f4e8e4199fd..91ece1e476a360785b81614f636d59e79d9123d7 100644 (file)
@@ -257,16 +257,52 @@ bookoutput function"
                      parser
                     music))
 
+(define-public (context-mod-from-music parser music)
+  (let ((warn #t) (mods (ly:make-context-mod)))
+    (let loop ((m music) (context #f))
+      (if (music-is-of-type? m 'layout-instruction-event)
+         (let ((symbol (cons context (ly:music-property m 'symbol))))
+           (ly:add-context-mod
+            mods
+            (case (ly:music-property m 'name)
+              ((PropertySet)
+               (list 'assign
+                     symbol
+                     (ly:music-property m 'value)))
+              ((PropertyUnset)
+               (list 'unset symbol))
+              ((OverrideProperty)
+               (cons* 'push
+                      symbol
+                      (ly:music-property m 'grob-value)
+                      (ly:music-property m 'grob-property-path)))
+              ((RevertProperty)
+               (cons* 'pop
+                      symbol
+                      (ly:music-property m 'grob-property-path))))))
+         (case (ly:music-property m 'name)
+           ((ApplyContext)
+            (ly:add-context-mod mods
+                                (list 'apply
+                                      (ly:music-property m 'procedure))))
+           ((ContextSpeccedMusic)
+            (loop (ly:music-property m 'element)
+                  (ly:music-property m 'context-type)))
+           (else
+            (let ((callback (ly:music-property m 'elements-callback)))
+              (if (procedure? callback)
+                  (fold loop context (callback m))
+                  (if (and warn (ly:duration? (ly:music-property m 'duration)))
+                      (begin
+                        (ly:music-warning
+                         music
+                         (_ "Music unsuitable for context-mod"))
+                        (set! warn #f))))))))
+      context)
+    mods))
+
 (define-public (context-defs-from-music parser output-def music)
-  (let ((bottom 'Voice) (warn #t))
-    (define (get-bottom sym)
-      (or
-       (let ((def (ly:output-def-lookup output-def sym #f)))
-       (and def
-            (let ((def-child (ly:context-def-lookup def 'default-child #f)))
-              (and def-child
-                   (get-bottom def-child)))))
-       sym))
+  (let ((warn #t))
     (let loop ((m music) (mods #f))
       ;; The parser turns all sets, overrides etc into something
       ;; wrapped in ContextSpeccedMusic.  If we ever get a set,
@@ -287,39 +323,47 @@ bookoutput function"
              (list 'unset
                    (ly:music-property m 'symbol)))
             ((OverrideProperty)
-             (list 'push
-                   (ly:music-property m 'symbol)
-                   (ly:music-property m 'grob-value)
-                   (ly:music-property m 'grob-property-path)))
+             (cons* 'push
+                    (ly:music-property m 'symbol)
+                    (ly:music-property m 'grob-value)
+                    (ly:music-property m 'grob-property-path)))
             ((RevertProperty)
-             (list 'pop
-                   (ly:music-property m 'symbol)
-                   (ly:music-property m 'grob-property-path)))))
+             (cons* 'pop
+                    (ly:music-property m 'symbol)
+                    (ly:music-property m 'grob-property-path)))))
          (case (ly:music-property m 'name)
-           ((SequentialMusic SimultaneousMusic)
-            (fold loop mods (ly:music-property m 'elements)))
+           ((ApplyContext)
+            (ly:add-context-mod mods
+                                (list 'apply
+                                      (ly:music-property m 'procedure))))
            ((ContextSpeccedMusic)
-            (let ((sym (ly:music-property m 'context-type)))
-              (if (eq? sym 'Bottom)
-                  (set! sym bottom)
-                  (set! bottom (get-bottom sym)))
-              (let ((def (ly:output-def-lookup output-def sym)))
-                (if (ly:context-def? def)
-                    (ly:output-def-set-variable!
-                     output-def sym
-                     (ly:context-def-modify
-                      def
-                      (loop (ly:music-property m 'element)
-                            (ly:make-context-mod))))
-                    (ly:music-warning
-                     music
-                     (ly:format (_ "Cannot find context-def \\~a") sym))))))
-           (else (if (and warn (ly:duration? (ly:music-property m 'duration)))
-                     (begin
-                       (ly:music-warning
-                        music
-                        (_ "Music unsuitable for output-def"))
-                       (set! warn #f))))))
+            ;; Use let* here to let defs catch up with modifications
+            ;; to the context defs made in the recursion
+            (let* ((mods (loop (ly:music-property m 'element)
+                               (ly:make-context-mod)))
+                   (defs (ly:output-find-context-def
+                          output-def (ly:music-property m 'context-type))))
+              (if (null? defs)
+                  (ly:music-warning
+                   music
+                   (ly:format (_ "Cannot find context-def \\~a")
+                              (ly:music-property m 'context-type)))
+                  (for-each
+                   (lambda (entry)
+                     (ly:output-def-set-variable!
+                      output-def (car entry)
+                      (ly:context-def-modify (cdr entry) mods)))
+                   defs))))
+           (else
+            (let ((callback (ly:music-property m 'elements-callback)))
+              (if (procedure? callback)
+                  (fold loop mods (callback m))
+                  (if (and warn (ly:duration? (ly:music-property m 'duration)))
+                      (begin
+                        (ly:music-warning
+                         music
+                         (_ "Music unsuitable for output-def"))
+                        (set! warn #f))))))))
       mods)))
 
 
index b036ceb179b2139ebfabfadbd9917e8575f8dac4..bd88e11c79126e588119a9207b68aec3f796c523 100644 (file)
     ("c1" . (cons (* 648 mm) (* 917 mm)))
     ("c0" . (cons (* 917 mm) (* 1297 mm)))
     ;; Below are North American paper sizes
+    ("junior-legal" . (cons (* 8.0 in) (* 5.0 in)))
     ("legal" . (cons (* 8.5 in) (* 14.0 in)))
     ("letter" . (cons (* 8.5 in) (* 11.0 in)))
     ;; Ledger (17x11) is a 90 degree rotation of Tabloid
+    ("17x11" . (cons (* 17.0 in) (* 11.0 in)))
+    ("ledger" . (cons (* 17.0 in) (* 11.0 in)))
+    ;; Tabloid (11x17)
     ("11x17" . (cons (* 11.0 in) (* 17.0 in)))
+    ("tabloid" . (cons (* 11.0 in) (* 17.0 in)))
     ;; government-letter by IEEE Printer Working Group, for children's writing
     ("government-letter" . (cons (* 8 in) (* 10.5 in)))
     ("government-legal" . (cons (* 8.5 in) (* 13.0 in)))
index cc94b67acfbeb2aae9c3364d577e937b4d89d5c5..a535497962c07b9ae8ca5d79d1faf3901d1b7e10 100644 (file)
@@ -276,6 +276,10 @@ dot placement entries."
 along with @var{minimum-fret}, @var{maximum-stretch}, and
 @var{tuning}.  Returns a list of @code{(string fret finger) lists."
 
+
+    (define restrain-open-strings (ly:context-property context
+                                                      'restrainOpenStrings
+                                                      #f))
     (define specified-frets '())
     (define free-strings (iota (length tuning) 1))
 
@@ -326,7 +330,8 @@ if no string-number is present."
          #t
          (map (lambda (specced-fret)
                 (or (eq? 0 specced-fret)
-                     (eq? 0 fret)
+                    (and (not restrain-open-strings)
+                    (eq? 0 fret))
                     (>= maximum-stretch (abs (- fret specced-fret)))))
               specified-frets))))
 
@@ -334,7 +339,9 @@ if no string-number is present."
       "Can @var{pitch} be played on @var{string}, given already placed
 notes?"
       (let* ((fret (calc-fret pitch string tuning)))
-       (and (or (eq? fret 0) (>= fret minimum-fret))
+       (and (or (and (not restrain-open-strings)
+                     (eq? fret 0))
+                (>= fret minimum-fret))
             (close-enough fret))))
 
     (define (open-string string pitch)
index 3a0aeaedabe7776a610acbc087b358a80bab3e90..d04068fa31cdaa25a51aef3d902ac3a36a1951ec 100644 (file)
@@ -1313,8 +1313,9 @@ def parse_file (fn):
     select_voice('default', '')
     global lineno
     lineno = 0
-    sys.stderr.write ("Line ... ")
-    sys.stderr.flush ()
+    if not global_options.quiet:
+        sys.stderr.write ("Line ... ")
+        sys.stderr.flush ()
     __main__.state = state_list[current_voice_idx]
 
     for ln in ls:
@@ -1360,7 +1361,8 @@ def parse_file (fn):
 
 
 def identify():
-    sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
+    if not global_options.quiet:
+        sys.stderr.write ("%s from LilyPond %s\n" % (program_name, version))
 
 authors = """
 Written by Han-Wen Nienhuys <hanwen@xs4all.nl>, Laura Conrad
@@ -1381,16 +1383,21 @@ def get_option_parser ():
     p.add_option("--version",
                  action="version",
                  help=_ ("show version number and exit"))
-
     p.add_option("-h", "--help",
                  action="help",
                  help=_ ("show this help and exit"))
-    p.add_option ('-o', '--output', metavar='FILE',
-                  help=_ ("write output to FILE"),
-                  action='store')
-    p.add_option ('-s', '--strict', help=_ ("be strict about success"),
-                  action='store_true')
-    p.add_option ('-b', '--beams', help=_ ("preserve ABC's notion of beams"), action="store_true")
+    p.add_option ("-o", "--output", metavar='FILE',
+                  action="store",
+                  help=_ ("write output to FILE"))
+    p.add_option ("-s", "--strict",
+                  action="store_true",
+                  help=_ ("be strict about success"))
+    p.add_option ('-b', '--beams',
+                  action="store_true",
+                  help=_ ("preserve ABC's notion of beams"))
+    p.add_option ('-q', '--quiet',
+                  action="store_true",
+                  help=_ ("suppress progress messages"))
     p.add_option_group ('',
                         description=(
             _ ('Report bugs via %s')
@@ -1410,12 +1417,14 @@ for f in files:
     if f == '-':
         f = ''
 
-    sys.stderr.write ('Parsing `%s\'...\n' % f)
+    if not global_options.quiet:
+        sys.stderr.write ('Parsing `%s\'...\n' % f)
     parse_file (f)
 
     if not global_options.output:
         global_options.output = os.path.basename (os.path.splitext (f)[0]) + ".ly"
-    sys.stderr.write ('lilypond output to: `%s\'...' % global_options.output)
+    if not global_options.quiet:
+        sys.stderr.write ('lilypond output to: `%s\'...' % global_options.output)
     outf = open (global_options.output, 'w')
 
 # don't substitute @VERSION@. We want this to reflect
@@ -1428,4 +1437,5 @@ for f in files:
     dump_voices (outf)
     dump_score (outf)
     dump_lyrics (outf)
-    sys.stderr.write ('\n')
+    if not global_options.quiet:
+        sys.stderr.write ('\n')
index 2c6b557a9a6dee43ce3cd134ac53dd3f71aabf06..963476840a50f9f999c35a7bb9e27ffdf3cd07c6 100755 (executable)
 
 usage () {
     cat <<EOF >&2
-Usage: $0 MANUAL SECTION
 
+Usage: $0 MANUAL SECTION
 e.g. $0 notation rhythms
+
 EOF
     exit "$1"
 }
 
-if [ "$1" == '-h' ] || [ "$1" == '--help' ]; then
+if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
     usage 0
 fi
 
@@ -59,6 +60,13 @@ else
     echo "\$LILYPOND_GIT was not set; auto-detected source tree at $LILYPOND_GIT"
 fi
 
+if [ -n "$BROWSER" ]; then
+    echo "Using browser from \$BROWSER: $BROWSER"
+else
+    echo "\$BROWSER not set; using firefox as default"
+    BROWSER="firefox"
+fi
+
 if test ! -e "$LILYPOND_GIT/DEDICATION"; then
     echo "Error: $LILYPOND_GIT did not look like a LilyPond source tree; aborting." >&2
     exit 1
@@ -105,6 +113,7 @@ fi
 cp "$LILYPOND_GIT/Documentation/common-macros.itexi" "$OUTPUT_DIR/common-macros.itexi"
 cp "$LILYPOND_GIT/Documentation/macros.itexi" "$DOC_DIR/macros.itexi"
 cp "$DOC_DIR/version.itexi" "$OUTPUT_DIR/version.itexi"
+cp -r "$LILYPOND_GIT/Documentation/pictures/" "$OUTPUT_DIR/out/pictures"
 
 if test -e "$OUTPUT_DIR/$SECTION.html"; then
     rm "$OUTPUT_DIR/$SECTION.html"
@@ -145,19 +154,19 @@ if test -f "$OUTPUT_DIR/out/$SECTION.texi"; then
         "$OUTPUT_DIR/$SECTION.texi"
 fi
 
-cat <<EOF
+echo "Displaying output in $BROWSER; close browser window when done."
 
-The $SECTION section of the $MANUAL manual should now be viewable at
+$BROWSER $OUTPUT_DIR/out/$SECTION.html
 
-  $OUTPUT_DIR/out/$SECTION.html
+cat <<EOF
 
-If you want to keep the generated docs around for a while, answer
-'n' to the next question.  If you only needed them to quickly check
-something, view them now and then answer 'y' when you're done.
+If you want to avoid recompiling the snippets on the next 
+invocation with '$MANUAL $SECTION', answer 'n' to the next question.
 
 EOF
 
-read -p "rm -rf $OUTPUT_DIR ? (y/n): "
+echo "Delete temp files? [y/n]"
+read REPLY;
 if [ "$REPLY" = "y" ]; then
     echo "deleting files"
     rm -rf "$OUTPUT_DIR"
index a3bc4b576bdc8e08f4bc9ff0f9e2dbbe42147c53..7a8684f1949b9cf50849ea65dcc2436d030319f7 100644 (file)
@@ -163,11 +163,9 @@ if files:
     s = "\n".join (map (name2line, files))
     s = template.replace (include_snippets, s, 1)
     f = "%s/%s" % (dir, name)
-    sys.stderr.write ("%s: writing %s..." % (program_name, f))
     h = open (f, "w")
     h.write (s)
     h.close ()
-    sys.stderr.write ('\n')
 else:
     # not Unix philosophy, but hey, at least we notice when
     # we don't distribute any .ly files.
index 3a434193b083130344aa0c2f321600b0e79a000b..bf9f09f26e7f6b64a3549c4cd34bbd32974d2e1f 100644 (file)
@@ -831,7 +831,8 @@ def dump_track (track, n):
                 if vl:
                     s += '  \\voice' + vl + '\n'
                 else:
-                    warning (_ ('found more than 5 voices on a staff, expect bad output'))
+                    if not global_options.quiet:
+                        warning (_ ('found more than 5 voices on a staff, expect bad output'))
             s += '  ' + dump_voice (voice, skip)
             s += '}\n\n'
             v += 1
@@ -1027,7 +1028,8 @@ def convert_midi (in_file, out_file):
 }
 '''
 
-    progress (_ ("%s output to `%s'...") % ('LY', out_file))
+    if not global_options.quiet:
+        progress (_ ("%s output to `%s'...") % ('LY', out_file))
 
     if out_file == '-':
         handle = sys.stdout
@@ -1050,27 +1052,30 @@ def get_option_parser ():
            metavar=_ ('DUR'),
            help=_ ('quantise note durations on DUR'))
     p.add_option ('-D', '--debug',
-                  action='store_true',
-                  help=_ ('debug printing'))
+           action='store_true',
+           help=_ ('debug printing'))
     p.add_option ('-e', '--explicit-durations',
            action='store_true',
            help=_ ('print explicit durations'))
     p.add_option('-h', '--help',
-                 action='help',
-                 help=_ ('show this help and exit'))
+           action='help',
+           help=_ ('show this help and exit'))
     p.add_option('-i', '--include-header',
-                 help=_ ('prepend FILE to output'),
-                 action='append',
-                 default=[],
-                 metavar=_ ('FILE'))
+           help=_ ('prepend FILE to output'),
+           action='append',
+           default=[],
+           metavar=_ ('FILE'))
     p.add_option('-k', '--key', help=_ ('set key: ALT=+sharps|-flats; MINOR=1'),
-          metavar=_ ('ALT[:MINOR]'),
-          default=None),
+           metavar=_ ('ALT[:MINOR]'),
+           default=None),
     p.add_option ('-o', '--output', help=_ ('write output to FILE'),
            metavar=_ ('FILE'),
            action='store')
     p.add_option ('-p', '--preview', help=_ ('preview of first 4 bars'),
            action='store_true')
+    p.add_option ('-q', '--quiet',
+           action="store_true",
+           help=_ ("suppress progress messages and warnings about excess voices"))
     p.add_option ('-s', '--start-quant',help= _ ('quantise note starts on DUR'),
            metavar=_ ('DUR'))
     p.add_option ('-S', '--skip',
@@ -1083,15 +1088,13 @@ def get_option_parser ():
            help=_ ('allow tuplet durations DUR*NUM/DEN'),
            default=[])
     p.add_option ('-V', '--verbose', help=_ ('be verbose'),
-           action='store_true'
-           ),
+           action='store_true')
     p.version = 'midi2ly (LilyPond) @TOPLEVEL_VERSION@'
     p.add_option ('--version',
                  action='version',
                  help=_ ('show version number and exit'))
     p.add_option ('-w', '--warranty', help=_ ('show warranty and copyright'),
-           action='store_true',
-           ),
+           action='store_true',)
     p.add_option ('-x', '--text-lyrics', help=_ ('treat every text as a lyric'),
            action='store_true')