]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge remote-tracking branch 'origin/translation'
authorDavid Kastrup <dak@gnu.org>
Thu, 3 Jan 2013 13:24:00 +0000 (14:24 +0100)
committerDavid Kastrup <dak@gnu.org>
Thu, 3 Jan 2013 13:24:00 +0000 (14:24 +0100)
28 files changed:
Documentation/GNUmakefile
Documentation/changes.tely
Documentation/contributor.texi
Documentation/contributor/doc-work.itexi
Documentation/extending/scheme-tutorial.itely
Documentation/included/acknowledge.itexi [new file with mode: 0644]
Documentation/included/script-chart.ly
Documentation/notation.tely
Documentation/notation/ancient.itely
Documentation/notation/notation-appendices.itely
Documentation/notation/vocal.itely
Documentation/usage/running.itely
Documentation/web/community.itexi
Documentation/web/introduction.itexi
Documentation/web/manuals.itexi
elisp/lilypond-mode.el
lily/hara-kiri-group-spanner.cc
lily/lexer.ll
lily/music.cc
lily/parser.yy
lily/source-file.cc
ly/articulate.ly
ly/property-init.ly
ly/script-init.ly
scm/fret-diagrams.scm
scm/lily-library.scm
scm/output-ps.scm
scm/script.scm

index a3ef4bb6e7c6640249ed9244139374a09a5a2de1..924b391cbbe27bac37597458fffad054c5f88e15 100644 (file)
@@ -284,7 +284,7 @@ $(outdir)/ly-grammar.txt: $(top-src-dir)/lily/parser.yy
 # of internals every time.  however, this triggers
 # compilation during install, which is a bad thing (tm).
 
-$(outdir)/internals.texi: $(LILYPOND_BINARY)
+$(outdir)/internals.texi: $(LILYPOND_BINARY) $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
        cd $(outdir) && $(buildscript-dir)/run-and-check "$(LILYPOND_BINARY) --verbose $(top-src-dir)/ly/generate-documentation" "generate-documentation.log"
 
 ###############################################
index f0d11f45e862e1482715b49798eb459c0485be4f..630dad3bcb315d908977b70d0294a80d99dc60d9 100644 (file)
@@ -61,6 +61,13 @@ which scares away people.
 
 @end ignore
 
+@item
+Starting with version@tie{}2.17.10, error messages or the
+@code{textedit} @acronym{URI} used for point-and-click
+functionality specify column numbers starting with@tie{}1 rather
+than@tie{}0.  The byte offset (also part of @code{textedit}
+@acronym{URI}s) still starts at@tie{}0.
+
 @item
 The @code{\clef} command supports optional octavation:
 @lilypond[verbatim,quote,relative=1]
index 74d03bd1b7e8fb9a05ba3fbaeee96dcfa49733cd..9541883b74a8cec3fd307c3d70ba3cc59ee6ebc2 100644 (file)
@@ -66,6 +66,7 @@ Copyright @copyright{} 2007--2012 by the authors.
 
 Appendices
 
+* LilyPond grammar::
 * GNU Free Documentation License:: License of this document.
 @end menu
 
@@ -91,7 +92,14 @@ Appendices
 @include contributor/feta-font.itexi
 @include contributor/administration.itexi
 
+@node LilyPond grammar
+@appendix LilyPond grammar
+
+This appendix contains a description of the LilyPond grammar, as
+output from the parser.
+
+@verbatiminclude ly-grammar.txt
+
 @include fdl.itexi
 
 @bye
-
index ff6e0f07216048a90c71e31019fe01f0e79370a4..8b4e1d9b0796027c03b5f4ebee96bee4b41a7e07 100644 (file)
@@ -146,20 +146,42 @@ Please prepare a formal git patch.
 
 @end enumerate
 
+@subheading Contributions that contain examples using overrides
+
+Examples that use overrides, tweaks, customer Scheme functions etc. are
+(with very few exceptions) not included in the main text of the manuals;
+as there would be far too many, equally useful, candidates.
+
+The correct way is to submit your example, with appropriate explanatory
+text and tags, to the LilyPond Snippet Repository (LSR).  Snippets that
+have the @qq{docs} tag can then be easily added as a
+@emph{selected snippet} in the documentation.  It will also appear
+automatically in the Snippets lists.  See @ref{Introduction to LSR}.
+
+Snippets that @emph{don't} have the @qq{docs} tage will still be
+searchable and viewable within the LSR, but will be not be included in
+the Snippets list or be able to be included as part of the main
+documentation.
+
+Generally, any new snippets that have the @qq{docs} tag are more
+carefully checked for syntax and formatting.
+
+@subheading Announcing your snippet
+
 Once you have followed these guidelines, please send a message to
 lilypond-devel with your documentation submissions.  Unfortunately
-there is a strict “no top-posting” check on the mailing list; to avoid
+there is a strict @q{no top-posting} check on the mailing list; to avoid
 this, add:
 
-> I'm not top posting.
+@code{> I'm not top posting}
+
+(you must include the > ) to the top of your documentation addition.
 
-(you must include the > ) to the top of your documentation
-addition.
+We may edit your suggestion for spelling, grammar, or style, and we may
+not place the material exactly where you suggested, but if you give us
+some material to work with, we can improve the manual much faster.
 
-We may edit your suggestion for spelling, grammar, or style, and
-we may not place the material exactly where you suggested, but if
-you give us some material to work with, we can improve the manual
-much faster.  Thanks for your interest!
+Thanks for your interest!
 
 
 @node Texinfo introduction and usage policy
index 65a28c62d272c0cff1d7312901d085e3ec2419d8..a87c6f91f0d3ebe73a65b1b0fc9a85b1b0c62226 100644 (file)
@@ -660,7 +660,7 @@ Now LilyPond's input is structured into tokens and expressions, much
 like human language is structured into words and sentences.  LilyPond
 has a lexer that recognizes tokens (literal numbers, strings, Scheme
 elements, pitches and so on), and a parser that understands the syntax,
-@ruser{LilyPond grammar}.  Once it knows that a particular syntax rule
+@rcontrib{LilyPond grammar}.  Once it knows that a particular syntax rule
 applies, it executes actions associated with it.
 
 The hash mark@tie{}@code{#} method of embedding Scheme is a natural fit
diff --git a/Documentation/included/acknowledge.itexi b/Documentation/included/acknowledge.itexi
new file mode 100644 (file)
index 0000000..c7fd2f3
--- /dev/null
@@ -0,0 +1,47 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+@c This file is part of community.itexi
+
+@ignore
+
+  This file lists projects and institutions that support LilyPond by
+  providing infrastructure:
+
+@end ignore
+
+
+@macro acknowledgementsCurrent
+
+@itemize
+
+@item
+GNU, GNU Savannah
+@uref{http://savannah.gnu.org/}
+Source code and mailing lists
+
+@item
+Webdev.nl
+@uref{http://www.webdev.nl/}
+lilypond.org hosting
+
+@item
+Linuxaudio/VirgniaTech
+@uref{http://linuxaudio.org/}
+Release downloads
+
+@item
+Google Code
+@uref{http://code.google.com/}
+Issue tracker
+
+@item
+Rietveld
+@uref{https://codereview.appspot.com/}
+Code review
+
+@item
+Maison des Sciences de l'Homme Paris Nord
+@uref{http://www.mshparisnord.fr/}
+Automated build tests
+
+@end itemize
+@end macro
index 671e9e4a2d5defe6b4d480a85c88ec88bc5a10fa..ef64790ffd1f55310ae0a0729b503f8ef8aaf0c9 100644 (file)
@@ -50,7 +50,6 @@ This chart shows all articulations, or scripts, that the feta font contains.
     '("upbow"
       "downbow"
       "flageolet"
-      "thumb"
       "snappizzicato"
       "open"
       "halfopen"
index 098d4f3593a3cb1aea7d783e310761a788987fc8..517c4dc0463a1dcb6185c2b5332fcc78b0fd9be1 100644 (file)
@@ -58,7 +58,6 @@ Appendices
 
 * Notation manual tables::         Tables and charts.
 * Cheat sheet::                    Summary of LilyPond syntax.
-* LilyPond grammar::               Syntax diagram for LilyPond parser.
 * GNU Free Documentation License:: License of this document.
 * LilyPond command index::
 * LilyPond index::
@@ -84,16 +83,6 @@ Appendices
 @include notation/cheatsheet.itely
 
 
-
-@node LilyPond grammar
-@appendix LilyPond grammar
-
-This appendix contains a description of the LilyPond grammar, as
-output from the parser.
-
-@verbatiminclude ly-grammar.txt
-
-
 @include fdl.itexi
 
 
index 0d948c77610f02f2f4b16e87ebcc04c507668428..cc5a50d2dfba5b1c30bb1a7989a1880392a57221 100644 (file)
@@ -2415,7 +2415,7 @@ with head prefixes in arbitrary order.
 @menu
 * Kievan contexts::
 * Kievan clefs::
-* Kievan note heads::
+* Kievan notes::
 * Kievan accidentals::
 * Kievan bar line::
 @end menu
@@ -2468,7 +2468,7 @@ It is used to indicate the position of @code{c}:
 
 @lilypond[quote,relative=1,notime,verbatim]
   \clef "kievan-do"
-  \override NoteHead.style = #'kievan
+  \kievanOn
   c
 @end lilypond
 
@@ -2480,14 +2480,18 @@ Music Glossary:
 Notation Reference:
 @ref{Clef}.
 
-@node Kievan note heads
-@unnumberedsubsubsec Kievan note heads
+@node Kievan notes
+@unnumberedsubsubsec Kievan notes
 
 @cindex note heads, ancient
 
 For Kievan square notation, the appropriate note head style needs
-to be chosen.  This is accomplished by setting the @code{style}
-property of the @code{NoteHead} object to @code{kievan}.
+to be chosen and the flags and stems need to be turned off.
+This is accomplished by calling the @code{\kievanOn} function,
+which sets the appropriate properties of the note head, stems,
+and flags. Once Kievan note heads are not needed, these
+properties can be reverted by calling the @code{\kievanOff}
+function.
 
 The Kievan final note, which usually comes at the end of a piece
 of music, may be selected by setting the duration to
@@ -2499,8 +2503,10 @@ demonstrates the various Kievan note heads:
 @lilypond[quote,fragment,ragged-right,verbatim]
 \autoBeamOff
 \cadenzaOn
-\override NoteHead.style = #'kievan
+\kievanOn
 b'1 b'2 b'4 b'8 b'\breve b'\longa
+\kievanOff
+b'2
 @end lilypond
 
 @seealso
@@ -2533,7 +2539,6 @@ primarily for the sake of compatibility.
 
 @lilypond[quote,relative=1,notime,verbatim]
 \clef "kievan-do"
-\override NoteHead.style = #'kievan
 \override Accidental.glyph-name-alist =
  #alteration-kievan-glyph-name-alist
 bes' dis,
@@ -2557,8 +2562,8 @@ Kievan notation, which may be called the Kievan final bar line.
 It can be invoked as @code{\bar "k"}.
 
 @lilypond[quote,relative=1,notime,verbatim]
+  \kievanOn
   \clef "kievan-do"
-  \override NoteHead.style = #'kievan
   c \bar "k"
 @end lilypond
 
index e74dae6184639caa4a96455ece846bfe9dca6557..75c12d4e4d28f3ac06784ea8e5287b7322a8cea7 100644 (file)
@@ -1530,6 +1530,7 @@ created for midi, layout and paper blocks.
 
 @cindex parser
 @cindex Bison
+@cindex LilyPond grammar
 @cindex grammar for LilyPond
 @cindex BNF
 
@@ -1542,10 +1543,10 @@ cannot be achieved the file is invalid and an appropriate error
 message is produced.  The syntactic groupings and the rules for
 constructing the groupings from their parts for the LilyPond syntax
 are defined in @file{lily/parser.yy} and shown in Backus Normal Form
-(BNF) in @ref{LilyPond grammar}.  This file is used to build the
-parser during the program build by the parser generator, Bison.  It
-is part of the source code and is not included in the LilyPond
-binary installation.
+(BNF) in @rcontrib{LilyPond grammar}.  This file is used to build the
+parser during the program build by the parser generator, Bison.  It is
+part of the source code and is not included in the LilyPond binary
+installation.
 
 
 @node parser variable
index 0f103d28924314a5c79b0fd8242af2f25a909e0b..70c502da0ecb49468524401e668eb6413dec45ab 100644 (file)
@@ -2494,7 +2494,7 @@ indicate each change.
      (middleCPosition . 6)
      (clefPosition . 2)
      (instrumentCueName . ,(markup #:fontsize 1 #:smallCaps "Melchior"))
-     (midiInstrument . "voice aahs"))
+     (midiInstrument . "choir aahs"))
 
 \relative c' {
   \instrumentSwitch "kaspar"
index b832706c760162657a347d277ff3a29a1de3b49c..5bae43cb1ee1e1fae79f068be7aae238da585a58 100644 (file)
@@ -339,9 +339,14 @@ Show the warranty with which GNU LilyPond comes.  (It comes with
 @table @code
 
 @item -d@var{[option-name]}=@var{[value]},--define-default=@var{[option-name]}=@var{[value]}
-This sets the equivalent internal Scheme function to @var{value}.  If a
-@var{value} is not supplied, then the default value is used.  The prefix
-@code{no-} may be added to @var{option-name} to switch @q{off} an
+This sets the equivalent internal Scheme function to @var{value}.
+
+@example
+-dbackend=svg
+@end example
+
+If a @var{value} is not supplied, then the default value is used.  The
+prefix @code{no-} may be added to @var{option-name} to switch @q{off} an
 option, e.g.
 
 @cindex point and click, command line
@@ -376,25 +381,25 @@ result to prevent @q{jaggies} in @code{PNG} images.
 @code{EPS} backend.
 
 @item @code{backend}
-@tab @code{'ps}
+@tab @code{ps}
 @tab Select backend.  Postscript files (default) include @code{TTF},
 @code{Type1} and @code{OTF} fonts.  No subsetting of these fonts is
 done.  Using @q{oriental} character sets can lead to very large files.
 
 @item
-@tab @code{'eps}
+@tab @code{eps}
 @tab Encapsulated PostScript.  This dumps every page (system) as a
 separate @file{EPS} file, without fonts, and as one collated @file{EPS}
 file with all pages (systems) including fonts.  Used as default by
 @command{lilypond-book}.
 
 @item
-@tab @code{'null}
+@tab @code{null}
 @tab Do not output a printed score; has the same effect as
 @code{-dno-print-pages}.
 
 @item
-@tab @code{'svg}
+@tab @code{svg}
 @tab Scalable Vector Graphics.  This creates a single @code{SVG} file,
 without embedded fonts, for every page of output.  It is recommended to
 install the Century Schoolbook fonts, included with your LilyPond
@@ -406,7 +411,7 @@ agent. There is also an option @code{svg-woff} (below) for use of woff
 font files in the SVG backend.
 
 @item
-@tab @code{'scm}
+@tab @code{scm}
 @tab Dump of the raw, internal Scheme-based drawing commands.
 
 @item @code{check-internal-types}
@@ -920,7 +925,6 @@ are easily handled.
 @menu
 * Music runs off the page::
 * An extra staff appears::
-* Apparent error in ../ly/init.ly::
 * Error message Unbound variable %::
 * Error message FT_Get_Glyph_Name::
 * Warning staff affinities should only decrease::
@@ -1009,34 +1013,6 @@ problem:
 @end lilypond
 
 
-@node Apparent error in ../ly/init.ly
-@unnumberedsubsec Apparent error in @code{../ly/init.ly}
-
-Various obscure error messages may appear about syntax errors in
-@file{../ly/init.ly} if the input file is not correctly formed,
-for example, if it does not contain correctly
-matched braces or quote signs.
-
-The most common error is a missing brace, (@code{@}}), at the end of
-a @code{score} block.  Here the solution is obvious: check the
-@code{score} block is correctly terminated.  The correct structure
-of an input file is described in @rlearning{How LilyPond input files work}.
-Using an editor which automatically highlights matching brackets and
-braces is helpful to avoid such errors.
-
-A second common cause is no white space between the last syllable
-of a lyrics block and the terminating brace, (@code{@}}).  Without
-this separation the brace is taken to be part of the syllable.  It
-is always advisable to ensure there is white space before and after
-@emph{every} brace.  For the importance of this when using lyrics,
-see @ruser{Entering lyrics}.
-
-This error message can also appear if a terminating quote sign,
-(@code{"}), is omitted.  In this case an accompanying error message
-@c keep "-matching straight in fancy editors
-should give a line number close to the line in error.  The
-mismatched quote will usually be on the line one or two above.
-
 @node Error message Unbound variable %
 @unnumberedsubsec Error message Unbound variable %
 
index 719367e35aa6eb19a71ec14275afec92070783aa..b87062c7ba7c5edf0eeeab40e10fbfcec285da86 100644 (file)
@@ -7,6 +7,7 @@
     Guide, node Updating translation committishes..
 @end ignore
 
+@include included/acknowledge.itexi
 @include included/authors.itexi
 @include included/helpus.itexi
 
@@ -53,6 +54,9 @@ discussing LilyPond.
 @item
 @ref{Authors}: the people who made LilyPond what it is today.
 
+@item
+@ref{Acknowledgements}: projects and institutions that support LilyPond
+
 @end itemize
 @divEnd
 
@@ -85,6 +89,7 @@ discussing LilyPond.
 * Development::
 * GSoC 2012::
 * Authors::
+* Acknowledgements::
 * Publications::
 * Old news::
 * Attic::
@@ -1112,6 +1117,16 @@ any patch which introduced extra warnings.
 @divEnd
 @divEnd
 
+@node Acknowledgements
+@unnumberedsec Acknowledgements
+
+@divClass{column-center-top}
+@subheading Acknowledgements
+
+@divClass{keep-bullets}
+@acknowledgementsCurrent
+@divEnd
+@divEnd
 
 
 @node Publications
index 5feb5a7f00c2385368187b94aac15578458f8883..afce3d3bb5db08d33c051fe6f86d2fd96b612cd8 100644 (file)
@@ -497,6 +497,18 @@ Some highlights:
 @divClass{keep-bullets}
 @itemize
 
+@item
+A critical edition of Tommaso Traetta's @emph{Enea nel Lazio (1760)},
+opera series with libretto by Vittorio Amedeo Cigna-Santi, in four
+parts:
+@uref{http://www.academia.edu/1987651/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_1_4_, Part One}
+@uref{http://www.academia.edu/1994533/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_2_4_, Part Two}
+@uref{http://www.academia.edu/1994558/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_3_4_, Part Three}
+@uref{http://www.academia.edu/1996242/Enea_nel_Lazio_opera_riformata_prima_lazione_poi_le_parole_-_Partitura_4_4_, Part Four}
+Created by
+@uref{http://unito.academia.edu/LucaRossettoCasel, Luca Rossetto Casel}
+for his Ph.D. Thesis.
+
 @item
 Mussorgsky's @emph{Pictures at an exhibition}, re-orchestrated and
 conducted by @uref{http://www.aurelienbello.com/,Aurélien Bello} with
@@ -516,12 +528,11 @@ Chrysalis Duo} ; @emph{thrafsmata} performed in July 2011 by the
 @uref{http://www.pnme.org/CurrentSeason/PreviousSeasons.html, Pittsburgh
 New Music Ensemble}.
 
-
 @item
 @emph{Anonymous Student Compliment or Complaint}, by
 @uref{http://www.mikesolomon.org, Mike Solomon}, winner chosen from among
 172 entries from 22 countries of the
-@uref{http://leftcoastensemble.org/contest, 2011 Left Coast Composition Contest}.
+@uref{http://leftcoastensemble.org, 2011 Left Coast Composition Contest}.
 Other works include, Norman (age 1) for clarinet solo, performed at the
 @uref{http://emu.music.ufl.edu/fems_concerts.html, University of Florida}'s
 Electroacoustic Music Festival (FEMF), October 2010.
@@ -534,16 +545,16 @@ Italy.  @uref{http://www.ascarlatti2010.net, Alessandro Scarlatti 2010},
 in celebration of the composer's 350th birthday.
 
 @item
-@uref{http://www.mercurybaroque.org/02/02109.aspx, Mercury Baroque}'s
-performance of Lully's @emph{Armide}, May 15-16, 2009, in Houston,
-Texas (engraving by @uref{http://nicolas.sceaux.free.fr/,
-Nicolas Sceaux}).
+@uref{http://www.mercurybaroque.org, Mercury Baroque}'s performance of
+Lully's @emph{Armide}, May 15-16, 2009, in Houston, Texas (engraving by
+@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
 @item
 Instrumental excerpts from Rameau's @emph{Hippolyte et Aricie} at
 St. James's Church in Manhattan, May 8, 2009, by Frederick Renz
 and his ensemble @uref{http://www.earlymusicny.org/, Early Music
-New York} (engraving by Nicolas Sceaux).
+New York} (engraving by
+@uref{http://nicolas.sceaux.free.fr/, Nicolas Sceaux}).
 
 @item
 @emph{Affaire étrangère}, an opera by
@@ -1153,10 +1164,9 @@ Emacs is a text editor with language-sensitive capabilities for
 many different computer languages.  Emacs is a highly extensible
 editor and can be used as an Integrated Development Environment.
 There is a @q{lilypond mode} which supplies the language
-definitions for working with LilyPond source files.  As well, one of
-our developers has written
-@uref{http://nicolas.sceaux.free.fr/lilypond/lyqi.html,lyqi}, an
-Emacs major mode.
+definitions for working with LilyPond source files.  A developer
+has written @uref{https://github.com/nsceaux/lyqi,lyqi}, an Emacs major
+mode.
 
 @uref{http://www.vim.org}
 
index a46ab720da6d11303708974ac47b2d4a3808a775..956ac12976dcbda17d8f66337de64224b3f8e64d 100644 (file)
@@ -144,6 +144,17 @@ these manuals are published under the GNU Free Documentation License.
 
 @divEnd
 
+@divClass{column-center-bottom}
+@subheading Manual formats
+
+The LilyPond manuals generally come in three formats: split HTML, big HTML and
+PDF.  Split HTML is good for reading online.  Big HTML (and some of these can be
+very big) contains the whole manual in a single page.  PDF is available for
+downloading and using offline.  To get to these 3 formats, follow the links
+that read @code{details of} and then the manual name.
+
+@divEnd
+
 @divEnd
 
 
@@ -194,8 +205,8 @@ and follow those cross-references for more information.
 @docLinks{Learning, learning,
   @rlearningnamed{Top,Learning},
   @manualStableLearningSplit,
-  @manualStableLearningBig, 1.5 MB,
-  @manualStableLearningPdf, 3 MB}
+  @manualStableLearningBig, 3 MB,
+  @manualStableLearningPdf, 5 MB}
 
 @divEnd
 
@@ -244,8 +255,8 @@ in the PDF version due to its higher resolution.}
 @docLinks{Essay, essay,
   @ressaynamed{Top,Essay},
   @manualStableEssaySplit,
-  @manualStableEssayBig, 2 MB,
-  @manualStableEssayPdf, 2.5 MB}
+  @manualStableEssayBig, 1 MB,
+  @manualStableEssayPdf, 2 MB}
 
 @divEnd
 
@@ -270,8 +281,8 @@ the English musical terms presented in the glossary.}
 @docLinks{Notation, notation,
   @rusernamed{Top,Notation},
   @manualStableNotationSplit,
-  @manualStableNotationBig, 7 MB,
-  @manualStableNotationPdf, 18 MB}
+  @manualStableNotationBig, 9 MB,
+  @manualStableNotationPdf, 35 MB}
 
 @divEnd
 
@@ -295,7 +306,7 @@ attempting any large projects.
   @rprogramnamed{Top,Usage},
   @manualStableUsageSplit,
   @manualStableUsageBig, 400 KB,
-  @manualStableUsagePdf, 600 KB}
+  @manualStableUsagePdf, 650 KB}
 
 @divEnd
 
@@ -325,8 +336,8 @@ linked from the @strong{See also} portion.
 @docLinks{Snippets, snippets,
   @rlsrnamed{Top,Snippets},
   @manualStableSnippetsSplit,
-  @manualStableSnippetsBig, 2.5 MB,
-  @manualStableSnippetsPdf, 8 MB}
+  @manualStableSnippetsBig, 1.5 MB,
+  @manualStableSnippetsPdf, 12.5 MB}
 
 @divEnd
 
@@ -400,8 +411,8 @@ reporting, and development.
 @docLinksBare{Web, web,
   @ref{Top,Web},
   @manualDevelWebSplit,
-  @manualDevelWebBig, 1 MB,
-  @manualDevelWebPdf, 2 MB}
+  @manualDevelWebBig, 2.5 MB,
+  @manualDevelWebPdf, 3.5 MB}
 
 @divEnd
 
@@ -422,8 +433,8 @@ LilyPond since the previous stable version.
 @docLinks{Changes, changes,
   @rchangesnamed{Top,Changes},
   @manualStableChangesSplit,
-  @manualStableChangesBig, 6 KB,
-  @manualStableChangesPdf, 200 KB}
+  @manualStableChangesBig, 90 KB,
+  @manualStableChangesPdf, 80 KB}
 
 @divEnd
 
@@ -443,8 +454,8 @@ This manual explains how to write extensions to LilyPond.
 @docLinks{Extending, extending,
   @rextendnamed{Top,Extending},
   @manualStableExtendingSplit,
-  @manualStableExtendingBig, 200 KB,
-  @manualStableExtendingPdf, 400 KB}
+  @manualStableExtendingBig, 300 KB,
+  @manualStableExtendingPdf, 500 KB}
 
 @divEnd
 
@@ -475,8 +486,8 @@ generated documentation.
 @docLinks{Internals, internals,
   @rinternalsnamed{Top,Internals},
   @manualStableInternalsSplit,
-  @manualStableInternalsBig, 2.5 MB,
-  @manualStableInternalsPdf, 2.8 MB}
+  @manualStableInternalsBig, 3 MB,
+  @manualStableInternalsPdf, 4 MB}
 
 @divEnd
 
@@ -521,12 +532,12 @@ Downloadable tarballs only available at @uref{http://lilypond.org}
 @divClass{keep-bullets}
 @itemize
 
+@item @uref{http://lilypond.org/doc/v2.14/Documentation/web/manuals,
+LilyPond 2.14 Documentation}
+
 @item @uref{http://lilypond.org/doc/v2.12/Documentation/,
 LilyPond 2.12 Documentation}
 
-@item @uref{http://lilypond.org/doc/v2.11/Documentation/,
-LilyPond 2.11 Documentation}
-
 @item @uref{http://lilypond.org/doc/v2.10/Documentation/,
 LilyPond 2.10 Documentation}
 
index 934d1d6f0b7e7cf25eff3cf4935724d6398480b8..bab58f29ed13ed44a2c15d59f6e8d60d4b943995 100644 (file)
@@ -286,15 +286,14 @@ in LilyPond-include-path."
 (defun LilyPond-compile-file (command name)
   ;; We maybe should know what we run here (Lily, lilypond, tex)
   ;; and adjust our error-matching regex ?
-  (compile-internal
+  (compilation-start
    (if (eq LilyPond-command-current 'LilyPond-command-master)
        command
      ;; use temporary directory for Commands on Buffer/Region
      ;; hm.. the directory is set twice, first to default-dir
-     (concat "cd " (LilyPond-temp-directory) "; " command))
-   "No more errors" name))
+     (concat "cd " (LilyPond-temp-directory) "; " command))))
 
-;; do we still need this, now that we're using compile-internal?
+;; do we still need this, now that we're using compilation-start?
 (defun LilyPond-save-buffer ()
   "Save buffer and set default command for compiling."
   (interactive)
index cb5aacecc551faf1055579bc47f5d5b50d146684..610ab950f4da2b00b6599fa32f83f3b10acd7f6a 100644 (file)
@@ -134,8 +134,12 @@ void
 Hara_kiri_group_spanner::consider_suicide (Grob *me)
 {
   Spanner *sp = dynamic_cast<Spanner *> (me);
-  int left = sp->get_bound (LEFT)->get_column ()->get_rank ();
-  int right = sp->get_bound (RIGHT)->get_column ()->get_rank ();
+  int left = 0;
+  int right = INT_MAX;
+  if (Item *l = sp->get_bound (LEFT))
+    left = l->get_column ()->get_rank ();
+  if (Item *r = sp->get_bound (RIGHT))
+    right = r->get_column ()->get_rank ();
   if (!request_suicide (me, left, right))
     return;
 
index 63d58527e89578cac863adb9b63ffb13a0b7836a..df05b45c38a7db4a72dcbe1e69d87313f2316574 100644 (file)
@@ -120,6 +120,7 @@ SCM (* scm_parse_error_handler) (void *);
 %x incl
 %x lyrics
 %x longcomment
+%x maininput
 %x markup
 %x notes
 %x quote
@@ -314,6 +315,9 @@ BOM_UTF8    \357\273\277
                start_main_input ();
                main_input_level_ = include_stack_.size ();
                is_main_input_ = true;
+               int state = YYSTATE;
+               yy_push_state (maininput);
+               yy_push_state (state);
        }
        else
                error (_ ("\\maininput not allowed outside init files"));
@@ -689,19 +693,32 @@ BOM_UTF8  \357\273\277
 
 <longcomment><<EOF>> {
                LexerError (_ ("EOF found inside a comment").c_str ());
-               is_main_input_ = false; // should be safe , can't have \include in --safe.
-                yylval = SCM_UNSPECIFIED;
-               if (!close_input ())
-                 yyterminate (); // can't move this, since it actually rets a YY_NULL
+               yy_pop_state ();
        }
 
+<quote><<EOF>> {
+       LexerError (_ ("EOF found inside string").c_str ());
+       yy_pop_state ();
+}
+
 <<EOF>> {
         yylval = SCM_UNSPECIFIED;
         if (is_main_input_)
        {
                is_main_input_ = include_stack_.size () > main_input_level_;
                if (!is_main_input_)
+               {
                        main_input_level_ = 0;
+                       pop_state ();
+                       if (YYSTATE != maininput)
+                       {
+                               LexerError (_ ("Unfinished main input").c_str ());
+                               do {
+                                       pop_state ();
+                               } while (YYSTATE != maininput);
+                       }
+                       pop_state ();
+               }
                if (!close_input () || !is_main_input_)
                /* Returns YY_NULL */
                        yyterminate ();
@@ -711,6 +728,13 @@ BOM_UTF8   \357\273\277
                yyterminate ();
 }
 
+<maininput>. {
+       while (include_stack_.size () > main_input_level_
+              && close_input ())
+               ;
+       yyterminate ();
+}
+
 <INITIAL>{
        {WORD}/[-_]     | // backup rule
        {WORD}  {
index 7a38d7af41d84851151b65e2c5bcbdaa4cc4e010..be1fb2ed131cb0451ab4e373db8e46d52dd9982a 100644 (file)
@@ -226,6 +226,10 @@ transpose_mutable (SCM alist, Pitch delta)
               transposed = transposed.normalized ();
             }
 
+          if (prop == ly_symbol2scm ("tonic"))
+            transposed = Pitch (-1, transposed.get_notename (),
+                                transposed.get_alteration ());
+
           new_val = transposed.smobbed_copy ();
         }
       else if (prop == ly_symbol2scm ("element"))
index 77075a2882f75eeeee2656217b8337aedd2560a7..37d5fa4e770c4d954375bc584b899a75d4f6c499 100644 (file)
@@ -3053,6 +3053,8 @@ lyric_element:
 
 lyric_element_music:
        lyric_element optional_notemode_duration post_events {
+               if (!parser->lexer_->is_lyric_state ())
+                       parser->parser_error (@1, _ ("have to be in Lyric mode for lyrics"));
                $$ = MAKE_SYNTAX ("lyric-event", @$, $1, $2);
                if (scm_is_pair ($3))
                        unsmob_music ($$)->set_property
index d847605425b0d9be7a9ec79bf66f0d2b462a8004..6ecedc9854f1880df2106802053df8dfa0aadb92 100644 (file)
@@ -182,7 +182,7 @@ Source_file::file_line_column_string (char const *context_str0) const
       get_counts (context_str0, &l, &ch, &col, &offset);
 
       return name_string () + ":" + to_string (l)
-             + ":" + to_string (col);
+             + ":" + to_string (col + 1);
     }
 }
 
index a11b55e60cda5a21c5c251b3edb2cc45f7d1dc45..6f095103a8c74037e60801e65a57e36840aea330 100644 (file)
@@ -31,7 +31,7 @@
 %
 %%%USAGE
 % In the \score section do:
-%  \unfoldRepeats \articulate <<
+% \articulate <<
 %      all the rest of the score
 % >>
 % or use the lilywrap script.
@@ -91,6 +91,7 @@
 
 \version "2.16.0"
 
+#(use-modules (srfi srfi-1))
 #(use-modules (ice-9 debug))
 #(use-modules (scm display-lily))
 
 % Start with 1/4 seconds == 1/240 minutes
 #(define ac:maxTwiddleTime (ly:make-moment 1 240))
 
+% How long ordinary grace notes should be relative to their notated
+% duration.  9/40 is LilyPond's built-in behaviour for MIDI output
+% (though the notation reference says 1/4).
+#(define ac:defaultGraceFactor 9/40)
+
+% What proportion of an ordinary grace note's time should be stolen
+% from preceding notes (as opposed to stealing from the principal note).
+% Composers' intentions for this vary.  Taking all from the preceding
+% notes is LilyPond's built-in behaviour for MIDI output.
+#(define ac:defaultGraceBackwardness 1)
+
 
 % Internal variables, don't touch.
 % (should probably be part of a context somehow)
 % for no good reason.
 #(define ac:currentDuration (ly:make-duration 2 0 1 1))
 
+% Amount of musical time (in whole notes) that we need to steal from the
+% next events seen.
+#(define ac:stealForward 0)
+
+% List of events in the output so far, in reverse order, from which we can
+% steal time.
+#(define ac:eventsBackward '())
+
+% Log events for the backward chain.
+#(define (ac:logEventsBackward music)
+  (music-map
+   (lambda (m)
+    (case (ly:music-property m 'name)
+     ((EventChord)
+      (set! ac:eventsBackward (cons m ac:eventsBackward))
+      m)
+     ((BarCheck SkipMusic)
+      (let ((wm (make-sequential-music (list m))))
+       (set! ac:eventsBackward (cons wm ac:eventsBackward))
+       wm))
+     (else
+      m)))
+   music))
+
+% Steal time from the backward chain.  Adds to ac:stealForward (with a
+% warning) if it couldn't backward-steal all that was desired.
+#(define (ac:stealTimeBackward tosteal)
+  (if (<= tosteal 0)
+   #t
+   (if (null? ac:eventsBackward)
+    (begin
+     (ly:warning (_ "articulation failed to steal ~a note backward at beginning of music; stealing forward instead") tosteal)
+     (set! ac:stealForward (+ ac:stealForward tosteal)))
+    (let*
+     ((lastev (car ac:eventsBackward))
+      (levlen (ly:moment-main (ly:music-length lastev))))
+     (if (< tosteal levlen)
+      (begin
+       (ly:music-compress lastev (ly:make-moment (/ (- levlen tosteal) levlen)))
+       #t)
+      (begin
+       (if (any (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name)))
+               (ly:music-property lastev 'elements))
+       (ly:warning (_ "stealing the entirety of a note's time")))
+       (set! (ly:music-property lastev 'elements) '())
+       (set! ac:eventsBackward (cdr ac:eventsBackward))
+       (ac:stealTimeBackward (- tosteal levlen))))))))
+
 % Debugging: display a moment plus some text.
 % Returns its moment argument so can be used in-line.
 #(define (display-moment  text m)
     (context-spec-music
     (make-property-set 'tempoWholesPerMinute  tempo) 'Score))))
 
+%
+% Totally unfold repeats, so that the non-obvious sequencing doesn't
+% confuse us.  This is necessary for time stealing to work, because
+% that relies on the sequence in which we see events matching their
+% audible sequence.  Also unfold multi-measure rests to equivalent
+% skips, with preceding and following bar checks, so that time stealing
+% can change the length of the pause without falling foul of the
+% implicit bar checks.
+%
+#(define (ac:unfoldMusic music)
+  (music-map
+   (lambda (m)
+    (case (ly:music-property m 'name)
+     ((UnfoldedRepeatedMusic)
+      (let
+       ((body (ly:music-property m 'element))
+       (altl (ly:music-property m 'elements))
+       (rc (ly:music-property m 'repeat-count)))
+       (if (null? altl)
+       (make-sequential-music
+        (list-tabulate rc (lambda (i) (ly:music-deep-copy body))))
+       (let ((ealtl (if (> (length altl) rc) (take altl rc) altl)))
+        (make-sequential-music
+         (apply append!
+          (append!
+           (list-tabulate
+            (- rc (length ealtl))
+            (lambda (i) (list (ly:music-deep-copy body) (ly:music-deep-copy (car ealtl)))))
+           (map (lambda (alt) (list (ly:music-deep-copy body) alt))))))))))
+     ((MultiMeasureRestMusic)
+      (make-sequential-music
+       (list
+       (make-music 'BarCheck)
+       (make-music 'SkipMusic 'duration (ly:music-property m 'duration))
+       (make-music 'BarCheck))))
+     (else
+      m)))
+   (unfold-repeats music)))
+
 % If there's an articulation, use it.
 % If in a slur, use (1 . 1) instead.
 % Treat phrasing slurs as slurs, but allow explicit articulation.
    (if (null? es)
     (begin
      (set! (ly:music-property music 'elements) (reverse newelements))
-     (cond
-      ((not (any (lambda (m) (music-is-of-type? m 'rhythmic-event))
-                newelements))
-       actions)
-      (ac:inTrill (cons 'trill actions))
-      ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur))
-       (append actions (list 'articulation  '(1 . 1)) ))
-      (else (append actions (list 'articulation  factor)))))
+     (if
+      (not (any (lambda (m) (music-is-of-type? m 'rhythmic-event))
+               newelements))
+      actions
+      (append
+       (let ((st ac:stealForward))
+       (if (= st 0)
+        '()
+        (begin
+         (set! ac:stealForward 0)
+         (list 'steal st))))
+       actions
+       (cond
+       (ac:inTrill '(trill))
+       ((and (eq? factor ac:normalFactor) (or ac:inSlur ac:inPhrasingSlur))
+        (list 'articulation  '(1 . 1)))
+       (else (list 'articulation  factor))))))
     ; else part
     (let ((e (car es))
          (tail (cdr es)))
 
 
 #(define (ac:articulate-chord music)
-  (begin
-   (cond
-
-    ((eq? 'EventChord (ly:music-property music 'name))
+  (cond
+   ((eq? 'EventChord (ly:music-property music 'name))
+    (ac:logEventsBackward
      (let loop ((actions (ac:getactions music)))
       (if (null? actions)
        (if (ly:moment<? (ly:make-moment 1/4) (ly:music-length music))
              (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name)))
              (ly:music-property above 'elements)))
            newmusic)))))
-     ))))
+       ((steal)
+       (let
+        ((totallen (ly:moment-main (ly:music-length music)))
+         (steallen (cadr actions)))
+        (if (>= steallen totallen)
+         (begin
+          (if (any (lambda (z) (eq? 'NoteEvent (ly:music-property z 'name)))
+                   (ly:music-property music 'elements))
+           (ly:warning (_ "stealing the entirety of a note's time")))
+          (set! ac:stealForward (- steallen totallen))
+          (make-sequential-music '()))
+         (begin
+          (ly:music-compress music (ly:make-moment (/ (- totallen steallen) totallen)))
+          (loop (cddr actions))))))
+     )))))
+
+   ((eq? 'GraceMusic (ly:music-property music 'name))
+    (let
+     ((first-ev
+       (call-with-current-continuation
+       (lambda (yield-fev)
+        (music-map
+         (lambda (m)
+          (if (eq? 'EventChord (ly:music-property m 'name))
+           (yield-fev m)
+           m))
+         music)
+        #f))))
+     (if first-ev
+      (let ((fev-pos (find-tail (lambda (m) (eq? m first-ev)) ac:eventsBackward)))
+       (if fev-pos
+       (set! ac:eventsBackward (cdr fev-pos))
+       (ly:warning (_ "articulation of grace notes has gone awry"))))))
+    (let*
+     ((gmus (ly:music-compress (ly:music-property music 'element)
+                              (ly:make-moment ac:defaultGraceFactor)))
+      (glen (ly:moment-main (ly:music-length gmus))))
+     (ac:stealTimeBackward (* glen ac:defaultGraceBackwardness))
+     (set! ac:stealForward (+ ac:stealForward (* glen (- 1 ac:defaultGraceBackwardness))))
+     gmus))
+
+   ((memq (ly:music-property music 'name) '(BarCheck SkipMusic))
+    (let ((totallen (ly:moment-main (ly:music-length music)))
+         (steallen ac:stealForward))
+     (cond
+      ((= steallen 0)
+       (ac:logEventsBackward music))
+      ((< steallen totallen)
+       (set! ac:stealForward 0)
+       (ac:logEventsBackward
+       (ly:music-compress music (ly:make-moment (/ (- totallen steallen) totallen)))))
+      (else
+       (set! ac:stealForward (- steallen totallen))
+       (make-sequential-music '())))))
 
-    ((eq? 'KeyChangeEvent (ly:music-property music 'name))
-     (set! ac:current-key music)
-     music
-   )
+   ((eq? 'KeyChangeEvent (ly:music-property music 'name))
+    (set! ac:current-key music)
+    music)
 
-    ((eq? 'PropertySet (ly:music-property music 'name))
-     (ac:adjust-props (ly:music-property music 'symbol) music)
-     music)
+   ((eq? 'PropertySet (ly:music-property music 'name))
+    (ac:adjust-props (ly:music-property music 'symbol) music)
+    music)
 
-    (else music))
- ))
+   (else music)))
 
 
 
@@ -663,9 +821,20 @@ articulate = #(define-music-function (parser location music)
               "Adjust times of note to add tenuto, staccato and
                 normal articulations.
                "
-              (set! music (event-chord-wrap! music parser))
-              (music-map ac:articulate-chord music)
-              )
+              (dynamic-wind
+               (lambda ()
+                (set! ac:stealForward 0)
+                (set! ac:eventsBackward '()))
+               (lambda ()
+                (music-map
+                 ac:articulate-chord
+                 (event-chord-wrap! (ac:unfoldMusic music) parser)))
+               (lambda ()
+                (or (= ac:stealForward 0)
+                 (begin
+                  (ly:warning (_ "articulation failed to steal ~a note at end of music") ac:stealForward)
+                  (set! ac:stealForward 0)))
+                (set! ac:eventsBackward '()))))
 
 
 % Override \afterGrace to be in terms of audio, not spacing.
index 657d10967ba035fe7651bca760bb7e2d175fa52f..633a12909ad1a0a42ccc6508b67e5118058605f7 100644 (file)
@@ -555,10 +555,13 @@ showSplitTiedTabNotes = {
 textLengthOn = {
   \override TextScript.extra-spacing-width = #'(0 . 0)
   \override TextScript.extra-spacing-height = #'(-inf.0 . +inf.0)
+  \override TextScript.outside-staff-horizontal-padding = #0
 }
+
 textLengthOff = {
   \override TextScript.extra-spacing-width = #'(+inf.0 . -inf.0)
   \override TextScript.extra-spacing-height = #'(0 . 0)
+  \revert TextScript.outside-staff-horizontal-padding
 }
 
 
index ed7aed59486874bcbc4d35182d2b6f35b5d49d21..0baf24258b2af8c41e8ebf3ef86e8ea085671082 100644 (file)
@@ -46,7 +46,9 @@ staccatissimo = #(make-articulation "staccatissimo")
 staccato = #(make-articulation "staccato")
 stopped = #(make-articulation "stopped")
 tenuto = #(make-articulation "tenuto")
-thumb = #(make-articulation "thumb")
+thumb = \tweak text \markup \scale #(cons (magstep 5) (magstep 5))
+                            \musicglyph #"scripts.thumb"
+        #(make-music 'FingeringEvent)
 trill = #(make-articulation "trill")
 turn = #(make-articulation "turn")
 upbow = #(make-articulation "upbow")
index 83c4ee6b7addef25458262764112fb01379a640e..bac631a63eff84f8927d9a7c407fc7060bffeca1 100644 (file)
@@ -229,7 +229,7 @@ with magnification @var{mag} of the string @var{text}."
               (if (> fretval maxfret) (set! maxfret fretval))
               (if (< fretval minfret) (set! minfret fretval))
               (updatemax (cdr fret-list)))))
-      (if (> maxfret my-fret-count)
+      (if (or (> maxfret my-fret-count) (> capo-fret 1))
           (set! fret-range
                 (cons minfret
                       (let ((upfret (- (+ minfret my-fret-count) 1)))
index d21e292ccf2b7f2ecc97856da3895aa182dd3d8f..da04e6c89662e769015a0f8e2b0b3491d3378de6 100644 (file)
@@ -997,11 +997,11 @@ print a warning and set an optional @var{default}."
 
 (define-public (version-not-seen-message input-file-name)
   (ly:warning-located
-    (ly:format "~a:0" input-file-name)
+    (ly:format "~a:1" input-file-name)
     (_ "no \\version statement found, please add~afor future compatibility")
     (format #f "\n\n\\version ~s\n\n" (lilypond-version))))
 
 (define-public (old-relative-not-used-message input-file-name)
   (ly:warning-located
-    (ly:format "~a:0" input-file-name)
+    (ly:format "~a:1" input-file-name)
     (_ "old relative compatibility not used")))
index 497f197aebd80e4ab8e872bbf976655dbf28ba8d..dd92175feb931066f0583562a45bd6e40746a8e3 100644 (file)
 
                             (cadr location)
                             (caddr location)
-                            (cadddr location))
+                            (1+ (cadddr location)))
                  ""))
            ""))
       ""))
index 905a9f5a623b70079193d6fdb7b70c4a2ad7d37f..125a2fee5d1348b4e5c8daa7ceef130acf3314b5 100644 (file)
        (avoid-slur . inside)
        (padding . 0.20)
        (side-relative-direction . ,DOWN)))
-    ("thumb"
-     . (
-       (script-stencil . (feta . ("thumb"  . "thumb")))
-       (avoid-slur . around)
-       (padding . 0.50)
-       (direction . ,UP)
-       (staff-padding . 0.5)))
     ("trill"
      . (
        (script-stencil . (feta . ("trill" . "trill")))