]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'lilypond/translation' of ssh://jomand@git.sv.gnu.org/srv/git/lilypond
authorJohn Mandereau <john.mandereau@gmail.com>
Thu, 15 Jan 2009 07:00:22 +0000 (08:00 +0100)
committerJohn Mandereau <john.mandereau@gmail.com>
Thu, 15 Jan 2009 07:00:22 +0000 (08:00 +0100)
27 files changed:
.gitignore
Documentation/devel/doc-work.itexi
Documentation/devel/git-starting.itexi
Documentation/topdocs/AUTHORS.texi
Documentation/topdocs/README.texi
Documentation/user/install.itely
Documentation/user/spacing.itely
Documentation/user/working.itely
GNUmakefile.in
input/regression/rest-collision-note-duration.ly [new file with mode: 0644]
input/regression/spacing-bar-whole-measure.ly
lily/grob.cc
lily/include/grob.hh
lily/paper-column.cc
lily/rest-collision-engraver.cc
lily/rest-collision.cc
lily/spacing-spanner.cc
ly/music-functions-init.ly
make/ly-rules.make
make/ly-vars.make
make/mutopia-rules.make
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/music-functions.scm
scripts/build/output-distance.py
scripts/build/relative.py [new file with mode: 0755]
stepmake/aclocal.m4

index af5ebb54061e07bfbf74378c2032640ac5e5c9be..63fb92cb71281fd65c65dd1c87da6c21dd75208f 100644 (file)
@@ -72,5 +72,6 @@ out-test
 pats
 tags
 test-output-distance
+ChangeLog
 Documentation/user/lilypond
 input/lsr/lilypond-snippets
index c3d264f12410131f872a9a97afff3a7aa66da3c9..55bac1d26bd4586fcdcd7b83937aeb21a0f57f74 100644 (file)
 @node Introduction to documentation work
 @section Introduction to documentation work
 
-Our documentation tries to adhere to the @ref{Documentation
-policy} as strictly as possible.  One policy in particular is
-often questioned by potential contributors: we do not repeat
-material in the Notation Reference, and instead provide links to
-the @qq{definitive} presentation of that information.
-
-Some people point out, with good reason, that this makes the
-documentation harder to read.  If we repeated certain information
-in relevant places, readers would be less likely to miss that
-information.
+Our documentation tries to adhere to our @ref{Documentation
+policy}.  This policy contains a few items which may seem odd.
+One policy in particular is often questioned by potential
+contributors: we do not repeat material in the Notation Reference,
+and instead provide links to the @qq{definitive} presentation of
+that information.  Some people point out, with good reason, that
+this makes the documentation harder to read.  If we repeated
+certain information in relevant places, readers would be less
+likely to miss that information.
 
 That reasoning is sound, but we have two counter-arguments.
 First, the Notation Reference -- one of @emph{five} manuals for
@@ -72,87 +71,135 @@ to do anything fancy, discuss it on @code{lilypond-devel} first.}
 @subsection Sectioning commands
 
 Most of the manual operates at the
+
+@example
        @@node Foo
        @@subsubsection Foo
+@end example
+
+@noindent
 level.  Sections are created with
+
+@example
        @@node Foo
        @@subsection Foo
-commands.
+@end example
+
+@itemize
+@item Please leave two blank lines above a @@node; this makes it
+easier to find sections in texinfo.
 
-* Please leave two blank lines above a @@node; this makes it easier
-  to findw sections in texinfo.
+@item Sectioning commands (@@node and @@section) must not appear
+inside an @@ignore.  Separate those commands with a space, ie @@n
+ode.
 
-* sectioning commands (@@node and @@section) must not appear inside
-  an @@ignore.  Separate those commands with a space, ie @@n ode.
+@end itemize
 
 
 
 @subsection LilyPond formatting
 
-* Use two spaces for indentation in lilypond examples.  (no tabs)
+@itemize
+
+@item Use two spaces for indentation in lilypond examples.  (no
+tabs)
+
+@item All text strings should be prefaced with #.  LilyPond does
+not strictly require this, but it is helpful to get users
+accustomed to this scheme construct.  ie @code{\set
+Staff.instrumentName = #"cello"}
 
-* All text strings should be prefaced with #.  LilyPond does not
-  strictly require this, but it is helpful to get users accustomed
-  to this scheme construct.  ie
-    \set Staff.instrumentName = #"cello"
+@item All engravers should have double-quotes around them:
 
-* All engravers should have double-quotes around them:
+@example
     \consists "Spans_arpeggio_engraver"
-  Again, LilyPond does not strictly require this, but it is a
-  useful standard to follow.
+@end example
 
-* Examples should end with a complete bar if possible.
+Again, LilyPond does not strictly require this, but it is a useful
+standard to follow.
 
-* If possible, only write one bar per line.  The notes on each
-  line should be an independent line -- tweaks should occur on
-  their own line if possible.
-  Bad:
-    \override textscript #'padding = #3 c1^"hi"
-  Good:
-    \override textscript #'padding = #3
-    c1^"hi"
+@item Examples should end with a complete bar if possible.
 
-* Most LilyPond input should be produced with:
-    @@lilypond[verbatim,quote,relative=2]
-  or
-    @@lilypond[verbatim,quote,relative=1]
+@item If possible, only write one bar per line.  The notes on each
+line should be an independent line -- tweaks should occur on their
+own line if possible.  Bad:
 
-  If you want to use \layout@{@} or define variables, use
-    @@lilypond[verbatim,quote]
+@example
+\override textscript #'padding = #3 c1^"hi"
+@end example
 
-  In rare cases, other options may be used (or omitted), but ask first.
+Good:
 
-* Inspirational headwords are produced with
-  @@lilypondfile[quote,ragged-right,line-width=16\cm,staffsize=16]
-  @{pitches-headword.ly@}
+@example
+\override textscript #'padding = #3
+c1^"hi"
+@end example
 
-* LSR snippets are linked with
-  @@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
-  @{filename.ly@}
-  excepted in Templates, where `doctitle' may be omitted.
+@item Most LilyPond input should be produced with:
 
-* Avoid long stretches of input code.  Noone is going to read them
-  in print.  Please create a smaller example.  (the smaller
-  example does not need to be minimal, however)
+@example
+@@lilypond[verbatim,quote,relative=2]
+@end example
 
-* Specify durations for at least the first note of every bar.
+@noindent
+or
 
-* If possible, end with a complete bar.
+@example
+@@lilypond[verbatim,quote,relative=1]
+@end example
 
-* Comments should go on their own line, and be placed before the
-  line(s) to which they refer.
+If you want to use \layout@{@} or define variables, use
 
-* Add extra spaces around @{ @} marks; ie
-  not:          \chordmode @{c e g@}
-  but instead:  \chordmode @{ c e g @}
+@example
+@@lilypond[verbatim,quote]
+@end example
+
+In rare cases, other options may be used (or omitted), but ask first.
 
-* If you only have one bar per line, omit bar checks.  If you
-  put more than one bar per line (not recommended), then include
-  bar checks.
+@item
+Inspirational headwords are produced with
 
-* If you want to work on an example outside of the manual (for
-  easier/faster processing), use this header:
+@example
+@@lilypondfile[quote,ragged-right,line-width=16\cm,staffsize=16]
+@{pitches-headword.ly@}
+@end example
 
+@item LSR snippets are linked with
+
+@example
+@@lilypondfile[verbatim,lilyquote,ragged-right,texidoc,doctitle]
+@{filename.ly@}
+@end example
+
+@noindent
+excepted in Templates, where `doctitle' may be omitted.
+
+@item Avoid long stretches of input code.  Noone is going to read
+them in print.  Please create a smaller example.  (the smaller
+example does not need to be minimal, however)
+
+@item Specify durations for at least the first note of every bar.
+
+@item If possible, end with a complete bar.
+
+@item Comments should go on their own line, and be placed before
+the line(s) to which they refer.
+
+@item Add extra spaces around @{ @} marks; ie
+
+@example
+not:          \chordmode @{c e g@}
+but instead:  \chordmode @{ c e g @}
+@end example
+
+@item If you only have one bar per line, omit bar checks.  If you
+put more than one bar per line (not recommended), then include bar
+checks.
+
+@item If you want to work on an example outside of the manual (for
+easier/faster processing), use this header:
+
+@example
 \paper @{
   #(define dump-extents #t)
   indent = 0\mm
@@ -164,41 +211,54 @@ commands.
 
 \layout @{
 @}
+@end example
 
-  You may not change any of these values.  If you are making an
-  example demonstrating special \paper@{@} values, contact the
-  Documentation Editor.
+You may not change any of these values.  If you are making an
+example demonstrating special \paper@{@} values, contact the
+Documentation Editor.
+
+@end itemize
 
 
 @subsection Text formatting
 
+@itemize
+
+@item
 * Lines should be less than 72 characters long.  (I personally
   recommend writing with 66-char lines, but don't bother modifying
   existing material.)
 
+@item
 * Do not use tabs.
 
+@item
 * Do not use spaces at the beginning of a line (except in @@example
   or @@verbatim environments), and do not use more than a single
   space between words.  `makeinfo' copies the input lines verbatim
   without removing those spaces.
 
+@item
 * Use two spaces after a period.
 
+@item
 * In examples of syntax, use @@var@{musicexpr@} for a music
   expression.
 
+@item
 * Don't use @@rinternals@{@} in the main text.  If you're tempted to
   do so, you're probably getting too close to "talking through the
   code".  If you really want to refer to a context, use @@code@{@} in
   the main text and @@rinternals@{@} in the @@seealso.
 
+@item
 * Variables or numbers which consist of a single character
   (probably followed by a punctuation mark) should be tied
   properly, either to the previous or the next word.  Example:
 
       The variable@@tie@{@}@@var@{a@} ...
 
+@item
 * To get consistent indentation in the DVI output it is better to
   avoid the @@verbatim environment.  Use the @@example environment
   instead if possible, but without extraneous indentation.  For
@@ -220,6 +280,7 @@ commands.
 
   where `@@example' starts the line (without leading spaces).
 
+@item
 * Do not compress the input vertically; this is, do not use
 
     Beginning of logical unit
@@ -244,6 +305,7 @@ commands.
   new material should simply begin without anything special on the
   line above it.
 
+@item
 * in @@itemize use @@item on a separate line like this:
   @@itemize
   @@item
@@ -254,6 +316,7 @@ commands.
 
   Do not use @@itemize @@bullet.
 
+@item
 * To get LilyPond version, use @@version@{@} (this does not work inside
   LilyPond snippets).  If you write "@@version@{@}" (enclosed with
   quotes), or generally if @@version@{@} is not followed by a space,
@@ -266,57 +329,79 @@ commands.
   @@w@{"@@version@{@}"@}
 
   to prevent an ugly line break in PDF output.
+@end itemize
 
 
 @subsection Syntax survey
 
+@itemize
+@item
 @@c - single line comments
   "@@c NOTE:" is a comment which should remain in the final
   version.  (gp only command ;)
+@item
 @@ignore ... @@end ignore - multi-line comment
 
+@item
 @@cindex - General index. Please add as many as you can.  Don't
   capitalize the first word.
+@item
 @@funindex - is for a \lilycommand.
 
+@item
 @@example ... @@end ignore - example text that should be set as a
   blockquote.  Any @{@} must be escaped with @@@{ @}@@
+@item
 @@itemize @@item A @@item B ... @@end itemize - for bulleted lists.
   Do not compress vertically like this.
 
+@item
 @@code@{@} - typeset in a tt-font. Use for actual lilypond code or
   property/context names.  If the name contains a space, wrap
   the entire thing inside @@w@{@@code@{  @}@}.
+@item
 @@notation@{@} - refers to pieces of notation, e.g.
   "@@notation@{cres.@}".  Also use to specific lyrics ("the
   @@notation@{A - men@} is centered").  Only use once per subsection
   per term.
+@item
 @@q@{@} - Single quotes. Used for `vague' terms.
+@item
 @@qq@{@} - Double quotes.  Used for actual quotes ("he said") or for
   introducing special input modes.
 
+@item
 @@tie@{@} - Variables or numbers which consist of a single character
   (probably followed by a punctuation mark) should be tied
   properly, either to the previous or the next word.  Example:
     "The letter@@tie@{@}@@q@{I@} is skipped"
 
+@item
 @@var - Use for variables.
+@item
 @@warning@{@} - produces a "Note: " box. Use for important messages.
 
+@item
 @@bs - Generates a backslash inside @@warning.
     Any `\' used inside @@warning (and @@q or @@qq) must be written as `@@bs@{@}' 
     (texinfo would also allow \\, but this breaks with PDF output).
 
+@end itemize
+
 
 
 @subsection Other text concerns
 
+@itemize
+
+@item
 * References must occur at the end of a sentence, for more
   information see @@ref@{the texinfo manual@}.  Ideally this should
   also be the final sentence of a paragraph, but this is not
   required.  Any link in a doc section must be duplicated in the
   @@seealso section at the bottom.
 
+@item
 * Introducing examples must be done with
      . (ie finish the previous sentence/paragaph)
      : (ie `in this example:')
@@ -324,8 +409,10 @@ commands.
   The old "sentence runs directly into the example" method is not
   allowed any more.
 
+@item
 * Abbrevs in caps, e.g., HTML, DVI, MIDI, etc.
 
+@item
 * Colon usage
 
   1. To introduce lists
@@ -333,10 +420,13 @@ commands.
      This usage is rarer.  Americans often just use a comma.
   3. When adding a defining example at the end of a sentence.
 
+@item
 * Non-ASCII characters which are in utf-8 should be directly used;
   this is, don't say `Ba@@ss@{@}tuba' but `Baßtuba'.  This ensures that
   all such characters appear in all output formats.
 
+@end itemize
+
 
 
 
@@ -350,6 +440,9 @@ There are four parts to the documentation: the Learning Manual,
 the Notation Reference, the Program Reference, and the Music
 Glossary.
 
+@itemize
+
+@item
 * Learning Manual:
   The LM is written in a tutorial style which introduces the most
   important concepts, structure and syntax of the elements of a
@@ -371,6 +464,7 @@ Users are encouraged to read the complete Learning Manual from
 start-to-finish.
 
 
+@item
 * Notation Reference: a (hopefully complete) description of
   LilyPond input notation.  Some material from here may be
   duplicated in the Learning Manual (for teaching), but consider
@@ -399,6 +493,7 @@ Finally, you should assume that users know what the notation
 means; explaining musical concepts happens in the Music Glossary.
 
 
+@item
 * Application Usage: information about using the program lilypond
   with other programs (lilypond-book, operating systems, GUIs,
   convert-ly, etc).  This section is written in formal technical
@@ -407,27 +502,37 @@ means; explaining musical concepts happens in the Music Glossary.
 Users are not expected to read this manual from start to finish.
 
 
+@item
 * Music Glossary: information about the music notation itself.
   Explanations and translations about notation terms go here.
 
 Users are not expected to read this manual from start to finish.
 
+@item
 * Internals Reference: not really a documentation book, since it
   is automagically generated from the source, but this is its
   name.
 
+@end itemize
+
 
 @subsection Section organization
 
-The order of headings inside documentation sections should be:
+@itemize
+
+@item The order of headings inside documentation sections should
+be:
 
+@example
 main docs
 @@predefined
 @@endpredefined
 @@snippets
 @@seealso
 @@knownissues
+@end example
 
+@item
 * You _must_ include a @@seealso.  The order of items inside the
   @@seealso section is
 
@@ -472,17 +577,22 @@ main docs
   Don't insert an empty line between @@seealso and the first entry!
   Otherwise there is excessive vertical space in the PDF output.
 
+@item
 * To create links, use @@ref@{@} if the link is within the same
   manual.
 
+@item
 * @@predefined ... @@endpredefined is for commands in ly/*-init.ly
   FIXME?
 
+@item
 * Do not include any real info in second-level sections (ie 1.1
   Pitches).  A first-level section may have introductory material,
   but other than that all material goes into third-level sections
   (ie 1.1.1 Writing Pitches).
 
+@end itemize
+
 
 @subsection Checking cross-references
 
@@ -500,6 +610,9 @@ scm/ and lily/.
 
 @subsection General writing
 
+@itemize
+
+@item
 * Do not forget to create @@cindex entries for new sections of text.
   Enter commands with @@funindex, i.e.
     @@cindex pitches, writing in different octaves
@@ -519,6 +632,7 @@ scm/ and lily/.
   and NOT
     @@funindex #(set-accidental-style modern-voice-cautionary)
 
+@item
 * Preferred terms:
     - in general, use the American spellings.  The internal
       lilypond property names use this spelling.
@@ -530,29 +644,41 @@ bar line: the symbol delimiting a measure   NOT barline
 note head   NOT notehead
 chord construct   NOT chord (when referring to <>)
 
+@end itemize
+
 
 @subsection Technical writing style
 
+@itemize
+
+@item
 * Do not refer to LilyPond in the text.  The reader knows what the
   manual is about.  If you do, capitalization is LilyPond.
 
+@item
 * If you explicitly refer to `lilypond' the program (or any other
   command to be executed), say `@@command@{lilypond@}'.
 
+@item
 * Do not explicitly refer to the reader/user.  There is no one
   else besides the reader and the writer.
 
+@item
 * Do not use abbreviations (don't, won't, etc.).  If you do, use a
   comma after it:
 
     blabla blabla, i.e., blabla blabla
 
+@item
 * Avoid fluff (``Notice that,'' ``as you can see,''
   ``Currently,'').
 
+@item
 * The use of the word `illegal' is inappropriate in most cases.
   Say `invalid' instead.
 
+@end itemize
+
 
 @node Tips for writing docs
 @section Tips for writing docs
index 6702bef1f9e44d8766c1aa5db022eb6f4751224f..7cf35b18b07e6f0a6f153a9f26019e41c5c31fd7 100644 (file)
@@ -7,7 +7,6 @@
 * Updating the source code::    
 * Sharing your changes::        
 * Other interesting Git commands::  
-* Applying git patches::        
 * Git on Windows::              
 @end menu
 
 @node Getting the source code
 @section Getting the source code
 
-The source code is kept in a git respository.
-
-@warning{These instructions assume that you are using the
-command-line version of git 1.5 or higher.}
-
-
 @menu
+* Git introduction::            
 * Main source code::            
 * Website source code::         
 * Documentation translations source code::  
@@ -30,6 +24,18 @@ command-line version of git 1.5 or higher.}
 * Git user configuration::      
 @end menu
 
+@node Git introduction
+@subsection Git introduction
+
+The source code is kept in a git respository.  This allows us to
+track changes to files, and for multiple people to work on the
+same set of files (generally) without any problems.
+
+@warning{These instructions assume that you are using the
+command-line version of git 1.5 or higher.  Windows users should
+skip to @ref{Git on Windows}.}
+
+
 @node Main source code
 @subsection Main source code
 
@@ -50,8 +56,10 @@ git checkout -b master origin/master
 
 To get the website (including translations),
 
+FIXME: test this!!!
+
 @example
-mkdir lilyweb ; cd lilyweb
+mkdir lilypod-web ; cd lilypond-web
 git init-db
 git remote add -f -t web -m web origin git://git.sv.gnu.org/lilypond.git/
 git checkout -b web origin/web
@@ -63,10 +71,10 @@ git checkout -b web origin/web
 
 To translate the documentation (@emph{not} the website),
 
-FIXME: change
+FIXME: change!!!
 
 @example
-mkdir lilytranslate ; cd lilytranslate
+mkdir lilypond-translate; cd lilypond-translate
 git init-db
 git remote add -f -t web -m web origin git://git.sv.gnu.org/lilypond.git/
 git checkout -b web origin/web
@@ -83,10 +91,11 @@ you wish to do so, you will need more familiarity with git.
 
 @item @code{gub}:
 This stores the Grand Unified Binary, our cross-platform building
-tool.
+tool.  For more info, see @uref{http://lilypond.org/gub}.  The git
+location is:
 
 @example
-FIXME: insert new gub addy
+http://github.com/janneke/gub
 @end example
 
 @item @code{dev/XYZ}:
@@ -135,6 +144,7 @@ git config --global user.email myemail@@example.net
 * Technical notes::             
 @end menu
 
+
 @node Importance of updating
 @subsection Importance of updating
 
@@ -145,6 +155,7 @@ there are generally no problems with this multiple-person editing.
 However, serious problems can arise if you do not pull before
 attempting commit.
 
+
 @node Update command
 @subsection Updating command
 
@@ -156,6 +167,7 @@ the remote @code{git.sv.gnu.org} repository:
 git pull origin
 @end example
 
+
 @node Resolving conflicts
 @subsection Resolving conflicts
 
@@ -173,35 +185,39 @@ TODO
 @node Technical notes
 @subsection Technical notes
 
-Let's explain a bit of Git vocabulary.  The @code{git pull
-origin} command is just a shortcut for this command:
+TODO: I'm not going to bother with this section. -gp
+
+Let's explain a bit of Git vocabulary.  The @code{git pull origin}
+command is just a shortcut for this command:
 
 @example
 git pull git://git.sv.gnu.org/lilypond.git/ MY-BRANCH:origin/MY-BRANCH
 @end example
 
-A commit is a set of changes made to the sources; it also includes the
-committish of the parent commit, the name and e-mail of the author
-(the person who wrote the changes), the name and e-mail of the
-committer (the person who brings these changes into the git
+A commit is a set of changes made to the sources; it also includes
+the committish of the parent commit, the name and e-mail of the
+author (the person who wrote the changes), the name and e-mail of
+the committer (the person who brings these changes into the git
 repository), and a commit message.
 
 A committish is the SHA1 checksum of a commit, a number made of 40
-hexadecimal digits, which acts as the internal unique identifier for
-this commit.  To refer to a particular revision, don't use vague
-references like the (approximative) date, simply copy'n'paste the
-committish.
-
-A branch is a tree (in the mathematical or computer science sense) of
-commits, and the topmost commit of this branch is called a head.
-
-The "git fetch" command above has created a branch called origin/web
-in your local Git repository.  As this branch is a copy of the remote
-branch web from git.sv.gnu.org LilyPond repository, it is
-called a `remote branch', and is meant to track the changes on the
-branch from git.sv.gnu.org: it will be updated every time you run 'git
-pull' or 'git fetch' with this branch reference as argument, e.g.
-by using .git/remotes/web remote file when running 'git fetch web'.
+hexadecimal digits, which acts as the internal unique identifier
+for this commit.  To refer to a particular revision, don't use
+vague references like the (approximative) date, simply
+copy'n'paste the committish.
+
+A branch is a tree (in the mathematical or computer science sense)
+of commits, and the topmost commit of this branch is called a
+head.
+
+The "git fetch" command above has created a branch called
+@code{origin/web} in your local Git repository.  As this branch is
+a copy of the remote branch web from git.sv.gnu.org LilyPond
+repository, it is called a `remote branch', and is meant to track
+the changes on the branch from git.sv.gnu.org: it will be updated
+every time you run 'git pull' or 'git fetch' with this branch
+reference as argument, e.g.  by using .git/remotes/web remote file
+when running 'git fetch web'.
 
 The 'git checkout' command above has created a branch named 'web'.  At
 the beginning, this branch is identical to 'origin/web', but it will
@@ -227,16 +243,15 @@ Manual at
 
 
 
-
 @node Sharing your changes
 @section Sharing your changes
 
-
 @menu
 * Producing a patch::           
 * Committing directly::         
 @end menu
 
+
 @node Producing a patch
 @subsection Producing a patch
 
@@ -260,7 +275,8 @@ Most contributors do not have permission to commit directly.  If
 you do, edit @file{.git/config} to contain
 
 @example
-FIXME?
+FIXME?  Is anything needed, or did the previous commands set it
+up?
 @end example
 
 You may then @code{git push}.
@@ -269,6 +285,15 @@ You may then @code{git push}.
 @node Other interesting Git commands
 @section Other interesting Git commands
 
+@menu
+* Git log::                     
+* Applying git patches::        
+@end menu
+
+
+@node Git log
+@subsection Git log
+
 The commands above don't only bring you the latest version of the
 sources, but also the full history of revisions (revisons, also
 called commits, are changes made to the sources), stored in the
@@ -282,7 +307,7 @@ gitk        # shows history graphically
 
 
 @node Applying git patches
-@section Applying git patches
+@subsection Applying git patches
 
 Well-formed git patches should be committed with
 
@@ -313,8 +338,9 @@ master repository, but we have chosen to have a master respository
 for LilyPond files.  Editors hold local copies of the master
 repository together with any changes they have made locally.  Local
 changes are held in a local @q{branch}, of which there may be
-several.  The files in the local repository always correspond to
-those on the currently @q{checked out} local branch.
+several, but these instructions assume you are using just one.  The
+files visible in the local repository always correspond to those
+on the currently @q{checked out} local branch.
 
 Files are edited on a local branch, and in that state the
 changes are said to be @q{unstaged}.  When editing is complete, the
@@ -332,9 +358,11 @@ just the differences from master).
 Obtain Git from
 @uref{http://code.google.com/p/msysgit/downloads/list}.
 (Note, not msysGit, which is for Git developers) and
-install.  Start Git by clicking on the desktop icon.
-This will bring up a command line bash shell.  This will be
-unfamiliar to most Windows users, so follow these
+install.
+
+Start Git by clicking on the desktop icon.
+This will bring up a command line bash shell.  This may be
+unfamiliar to Windows users.  If so, follow these
 instructions carefully.  Commands are entered at a $ prompt
 and are terminated by keying a newline.
 
@@ -382,7 +410,9 @@ and the $ prompt.}
 
 We now need to generate a local copy of the downloaded files
 in a new local branch.  Your local branch needs to have a
-name, here we call it @q{lily-local} - make up your own.
+name, here we call it @q{lily-local} - you may wish to make up
+your own.
+
 Then, finally, type
 
 @example
@@ -393,11 +423,11 @@ to create the lily-local branch containing the local copies of the
 master files.  You will be advised your local branch has been set
 up to track the remote branch.
 
-Return to Windows and look in your Git repository.  You
-should see lots of folders.  The LilyPond documentation
+Return to Windows Explorer and look in your Git repository.  You
+should see lots of folders.  For example, the LilyPond documentation
 can be found in Git/Documentation/user.
 
-Terminate the Git bash shell with the exit command.
+Terminate the Git bash shell by typing @code{exit}.
 
 @subsection Git GUI
 
@@ -417,15 +447,16 @@ commands under Branch, Commit, Merge or Remote.  These will
 be explained later.
 
 The two panels on the left contain the names of files which
-you are in the process of editing (Unstaged Changes),and
+you are in the process of editing (Unstaged Changes), and
 files you have finished editing and have staged ready for
 committing (Staged Changes).  At this stage these panels will
-be empty as your local branch is the same as the master branch.
+be empty as you have not yet made any changes to any file.
 After a file has been edited and saved the top panel on the right
 will display the differences between the edited file selected
-from one of the left panels and the one on master.  The
-final panel at bottom right is used to enter a descriptive
-message about the change before committing a file.
+in one of the panels on the left and the last version committed.
+
+The final panel at bottom right is used to enter a descriptive
+message about the change before committing it.
 
 The Git GUI is terminated by entering CNTL-Q while it is the
 active window or by clicking on the usual Windows close-window
@@ -452,51 +483,63 @@ both identical.  To see them click on
 Branch -> Checkout
 @end example
 
-You should have one local branch called lily-local and one
-tracking branch called origin/master.
+You should have one local branch called @w{lily-local} and one
+tracking branch called @w{origin/master}.  The latter is your
+local copy of the @w{remote/origin/master} branch in the master
+LilyPond repository.  The @w{lily-local} branch is where you
+will make your local changes.
 
 When a particular branch is selected, i.e., checked out, the
 files visible in your repository are changed to reflect the
-changes made on that branch.
+state of the files on that branch.
 
-@subsection Updating files from master
+@subsection Updating files from @w{remote/origin/master}
 
-Before starting the editing of a file ensure you have the
-latest copy from master by first clicking
+Before starting the editing of a file, ensure your local branches
+contain the latest version in @w{remote/origin/master} by first
+clicking
 
 @example
 Remote -> Fetch from -> origin
 @end example
 
+@noindent
 in the Git GUI.
 
-This will place details of all the changes made by others
+This will place the latest version of every file, including all the
+changes made by others,
 into the @q{origin/master} branch of the tracking branches
 in your git repository.  You can see these files by checking
-out this branch.  This will not affect any files
-you have modified in any of your local branches.
+out this branch.  This will not affect any files you have
+modified in your local branch.
 
-To merge the changed files into your local branch click on
+You then need to merge these fetched files into your local
+branch by clicking on
 
 @example
 Merge -> Local Merge
 @end example
 
+@noindent
 and if necessary select the local branch into which the merge
 is to be made.
 
+Note that a merge cannot be completed if there are any local
+uncommitted changes on the lily-local branch.
+
 This will update all the files in that branch to reflect the
-currect state of the origin/master branch.  If any of the changes
-conflict with changes you have made yourself recently
+current state of the @w{origin/master} branch.  If any of the
+changes conflict with changes you have made yourself recently
 you will be notified of the conflict (see below).
 
 @subsection Editing files
 
-Simply edit the files in your local Git repository with
-your favourite editor and save them back there.  If any file contains
-non-ASCII characters ensure you save it in UTF8 format.  Git will
-detect any changes whenever you restart Git GUI
-and the file names will then be listed in the Unstaged Changes panel.
+First ensure your lily-local branch is checked out, then
+simply edit the files in your local Git repository with your
+favourite editor and save them back there.  If any file contains
+non-ASCII characters ensure you save it in UTF-8 format.  Git will
+detect any changes whenever you restart Git GUI and the file names
+will then be listed in the Unstaged Changes panel.
 Or you can click the Rescan button to refresh the panel
 contents at any time.  You may break off and resume at
 editing any time.
@@ -511,18 +554,30 @@ the left of each name.  If you change your mind it can
 be moved back by clicking on the ticked box to the
 left of the name.
 
-If you wish to cancel your changes the original version
-may be recovered at any time before a commit is made
-by selecting Commit -> Revert changes.  This will even
-recover a deleted file.
-
 Finally the changes you have made may be committed to
-your local branch by entering a brief message in
+your lily-local branch by entering a brief message in
 the Commit Message box and clicking the Commit button.
 
-@subsection Sending changes to origin/master
+If you wish to amend your changes after a commit has been
+made, the original version and the changes you made in that
+commit may be recovered by selecting
+
+@example
+Commit -> Amend Last Commit
+@end example
+
+@noindent
+or by checking the Amend Last Commit radio button at bottom left.
+This will return the changes to the Staged state, so further
+editing made be carried out within that commit.  This must only be
+done @emph{before} the changes have been Pushed or sent to your
+mentor for Pushing - after that it is too late and corrections
+have to be made as a separate commit.
 
-If you do not have write access to master you will
+
+@subsection Sending changes to remote/origin/master
+
+If you do not have write access to @w{remote/origin/master} you will
 need to send your changes by email to someone who does.
 
 First you need to create a diff or patch file containing
@@ -541,50 +596,72 @@ git-format-patch -n
 @end example
 
 where n an integer, normally 1.  This will create a
-patch file for all the locally committed files which
-differ from master.  The patch file can be found in
+patch file for all the locally committed files which differ
+from @w{origin/master}.  The patch file can be found in
 [path]/Git and will have a name formed from n and the
 commit message.
 
 @subsection Resolving merge conflicts
 
-As soon as you have committed a changed file your
-local branch has diverged from master, and will
+As soon as you have committed a changed file your local
+branch has diverged from @w{origin/master}, and will
 remain diverged until your changes have been committed
-in master.  Similarly, if a new commit has been made
-to master by someone else, your branch is divergent.
-You can detect a divergent branch my clicking on
+in @w{remote/origin/master} and Fetched back into your
+@w{origin/master}.  Similarly, if a new commit has been made
+to @w{remote/origin/master} by someone else and Fetched, your
+lily-local branch is divergent.  You can detect a divergent
+branch by clicking on
 
 @example
 Repository -> Visualise all branch history
 @end example
 
 This opens up a very useful new window called @q{gitk}.
+Use this to browse all the commits made by others.
 
 If the diagram at top left of the resulting window
-does not show your branch on a single node at the
-top your branch has diverged from master.  This is
-quite normal if files you have modified yourself
-have not yet been committed to master, or if files
-have been modified and committed by others since
-your last merge.
-
-If a file being merged from master differs from
+does not show your branch's tag on the same node as
+the @w{remote/origins/master} tag your branch has diverged from
+@w{origin/master}.  This is quite normal if files you have modified
+yourself have not yet been Pushed to @w{remote/origin/master} and
+Fetched, or if files modified and committed by others have been
+Fetched since you last Merged @w{origin/master} into your lily-local
+branch.
+
+If a file being merged from @w{origin/master} differs from
 one you have modified in a way that cannot be resolved
 automatically by git, Merge will report a Conflict
 which you must resolve by editing the file to create the
 version you wish to keep.
 
-This could happen if the person updating master
+This could happen if the person updating @w{remote/origin/master}
 for you has added some changes of his own before
-committing your changes to master, or if someone
-else has updated the same parent file as you at
-the same time.
+committing your changes to @w{remote/origin/master}, or if someone
+else has changed the same file since you last
+fetched the file from @w{remote/origin/master}.
 
 Open the file in your editor and look for sections which
-are delimited with
+are delimited with ...
 
 [to be completed when I next have a merge conflict to be
 sure I give the right instructions  -td]
 
 
+@subsection Other actions
+
+The instructions above describe the simplest way of using
+git on Windows.  Other git facilities which may usefully
+supplement these include
+
+@itemize
+
+@item Using multiple local branches (Create, Rename, Delete)
+@item Resetting branches
+@item Cherry-picking commits
+@item Pushing commits to @w{remote/origin/master}
+@item Using gitk to review history
+
+@end itemize
+
+Once familiarity with using git on Windows has been gained the
+standard git manuals can be used to learn about these.
index 305d2c951e977c4d53d504625566387bcd4bd22e..1157ae013decba5c10e1fc11c46da32e42890a06 100644 (file)
@@ -33,7 +33,8 @@ al-niente hairpins.
     Type42 code.
 @item @email{david.feuer@@gmail.com, David Feuer},
     PS output code refactoring.
-@item Bernard Hurley, X11 color.
+@item @email{bernard@@fong-hurley.org.uk, Bernard Hurley},
+    X11 color.
 @item @email{chris@@fluffhouse.org.uk, Chris Jackson},
     Piano pedals, directed arpeggios.
 @item @email{heikki.junes@@hut.fi, Heikki Junes},
@@ -56,7 +57,8 @@ al-niente hairpins.
 @item @email{janneke@@gnu.org, Jan Nieuwenhuizen}, 
     @uref{http://www.xs4all.nl/~jantien/},
     Main author.
-@item @uref{http://www.juergen-reuter.de/, Jürgen Reuter},
+@item @email{reuter_j@@web.de, Jürgen Reuter},
+    @uref{http://www.juergen-reuter.de},
     Ancient notation  support (mensural notation,
     Gregorian chant notation), ambitus, clusters.
 @item @email{nicolas.sceaux@@free.fr, Nicolas Sceaux},
@@ -72,9 +74,9 @@ Font
 
 @itemize @bullet
 
-@item @uref{http://www.juergen-reuter.de/, Jürgen Reuter},
+@item @email{reuter_j@@web.de, Jürgen Reuter},
+    @uref{http://www.juergen-reuter.de},
     Ancient notation font
-@item Werner Lemberg,
     Exact Type1 font outlines for feta, feta-alphabet.
 @item @email{chris@@fluffhouse.org.uk, Chris Jackson},
     Arpeggio arrow
@@ -88,7 +90,7 @@ Font
     Main author.
 @item @email{tca@@gnu.org, Tom Cato Amundsen},
     Accordion symbols.
-@item @email{arno@@arnowaschk.de, Arno Waschk },
+@item @email{arno@@arnowaschk.de, Arno Waschk},
     "espressivo" mark.
 @end itemize
 
index 932734328ab4e99e05441a362fc9e8e8630c30a1..5fd731643cb28e86320aababb0cd5e7df78ddf5c 100644 (file)
@@ -32,7 +32,7 @@ For compiling and running LilyPond see the installation instructions.
 These instructions can be found when you unpack lilypond, as
 @file{lilypond-x.y.z/INSTALL.txt}. They are also available on the web
 at
-@uref{http://lilypond.org/doc/v2.10/Documentation/topdocs/INSTALL.html}.
+@uref{http://lilypond.org/doc/v2.12/Documentation/topdocs/INSTALL.html}.
 
 @section Documentation
 
index d9e4d4396cb9fa8918ba12705b914e1b244954bd..59e99e0481b5997ebe2b77fd5b7174712266b5ff 100644 (file)
@@ -183,14 +183,14 @@ Running LilyPond requires proper installation of the following software
 @itemize
 
 @item @uref{http://www.freetype.org/,Freetype} (version 2.1.10 or newer).
-@item @uref{http://fontconfig.org/,FontConfig} (version 2.2).
+@item @uref{http://fontconfig.org/,FontConfig} (version 2.2 or newer).
 @item @uref{http://www.pango.org/,Pango} (version 1.12 or newer).
 @item @uref{http://www.gnu.org/software/guile/guile.html,GUILE}
 (version 1.8.2 or newer), or patch 1.8.1 with
 @uref{http://lilypond.org/vc/gub.darcs/patches/guile-1.8-rational.patch}.
 @item @uref{http://www.python.org,Python} (version 2.4 or newer).
 @item @uref{http://www.ghostscript.com,Ghostscript} (version 8.15 or
-newer. 8.50 recommended)
+newer. 8.60 recommended)
 @item Dejaview.  (This is normally installed by default)
 @end itemize
 
@@ -210,12 +210,10 @@ additional tools and packages:
 @item ImageMagick
 @item International fonts (see input/regression/utf-8.ly for hints
 about which font packages are necessary for your platform)
-@item Ghostscript, 8.50 with the patch from
+@item Ghostscript 8.60 or newer, or 8.50 with the patch from
 @uref{http://bugs.ghostscript.com/show_bug.cgi?id=688154}
 and the patch from
-@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688017}, or use
-a release of Ghostscript which includes these patches, for example
-8.60 or newer.
+@uref{http://bugs.ghostscript.com/show_bug.cgi?id=688017}.
 @item @uref{http://www.nongnu.org/texi2html/,Texi2HTML} 1.79 or newer
 is strongly recommended to build documentation in HTML; support for
 building HTML documentation using @command{makeinfo} from GNU Texinfo
index 1b81a996f5a7ae5ded4fb197203e6752755d0856..a3a46c30ef3f60386b4185ef49367a4e41951a9c 100644 (file)
@@ -1780,7 +1780,7 @@ By default, outside-staff objects are placed only to avoid
 a horizontal collision with previously-positioned grobs.  This
 can lead to situations in which objects are placed very close to each
 other horizontally.  The vertical spacing between staffs can
-also be set so that outside staff objects are interleaved.  
+also be set so that outside staff objects are interleaved.
 Setting @code{outside-staff-horizontal-padding}
 causes an object to be offset vertically so that such a situation
 doesn't occur.
@@ -2485,18 +2485,37 @@ that may be altered for page formatting, set
 }
 @end lilypond
 
+
+@noindent
+All layout dimensions are displayed in staff-spaces, regardless
+of the units specified in the @code{\paper} or @code{\layout} block.
+In the above example, @code{paper-height} has a value of 59.75
+@code{staff-spaces}, and the @code{staff-size} is 20 points (the
+default value). Note that:
+
+@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm}
+
+@item 1 point
+@tab = (25.4/72.27) mm
+
+@item 1 staff-space
+@tab = (@code{staff-size})/4 pts
+@item
+@tab = (@code{staff-size})/4 * (25.4/72.27) mm
+
+@end multitable
+
 @noindent
-All layout dimensions are displayed in staff spaces, regardless of
-the units specified in the @code{\paper} or @code{\layout} block.
-For example, @code{paper-height} has a value of 59.75 staff
-spaces, using the default staff size of 20 points, which is
-equivalent to 148 millimeters, the height 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.
+In this case, one @code{staff-space} is approximately equal to
+1.757mm. Thus the @code{paper-height} measurement of 59.75
+@code{staff-spaces} is equivalent to 105 millimeters, the height
+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
+@ref{Setting the staff size}
 Snippets:
 @rlsr{Spacing}.
 
index 2ad0f2b5afa992ac6679f737f0f8d9520f6360d1..84acc5f6f4cda16e3afb2d909b029a3f7fa4006e 100644 (file)
@@ -53,6 +53,7 @@ occasionally as LilyPond improves.  Most changes can be
 done automatically with @code{convert-ly}, but some changes
 might require manual assistance.  LilyPond input files can be
 structured in order to be easier (or harder) to update.
+
 @end itemize
 
 @menu
@@ -140,6 +141,24 @@ define @code{mBreak = @{ @}} to remove all those line breaks.  This
 will allow LilyPond to place line breaks wherever it feels are
 best.
 
+@item When entering a part for a transposing instrument into a
+variable, it is recommended that the notes are wrapped in
+
+@example
+\transpose c natural-pitch @{...@}
+@end example
+(where @code{natural-pitch} is the open pitch of the instrument) so
+that the music in the variable is effectively in C. You can transpose
+it back again when the variable is used, if required, but you might
+not want to (e.g., when printing a score in concert pitch,
+converting a trombone part from treble to bass clef, etc.)
+Mistakes in transpositions are less likely if all the music in
+variables is at a consistent pitch.
+
+Also, only ever transpose to/from C. That means that the only other
+keys you will use are the natural pitches of the instruments - bes
+for a B-flat trumpet, aes for an A-flat clarinet, etc.
+
 @end itemize
 
 
index d405a7668a197d57e4a5eedbef98ac35c74a483b..a88ed6c9d6b0f549a4bf61af866a5a924483d848 100644 (file)
@@ -17,7 +17,7 @@ SUBDIRS = python scripts \
 documentation-dir=$(if $(findstring no,$(DOCUMENTATION)),,Documentation)
 
 SCRIPTS = configure autogen.sh smart-autogen.sh smart-configure.sh
-README_FILES = COPYING DEDICATION ROADMAP THANKS HACKING
+README_FILES = COPYING ChangeLog DEDICATION ROADMAP THANKS HACKING
 TOPDOC_FILES = AUTHORS INSTALL README NEWS
 TOPDOC_TXT_FILES = $(addprefix $(top-build-dir)/Documentation/topdocs/$(outdir)/,$(addsuffix .txt,$(TOPDOC_FILES)))
 IN_FILES := $(call src-wildcard,*.in)
@@ -43,7 +43,20 @@ $(outdir)/VERSION: $(config_make) VERSION
        -mkdir -p $(outdir)
        echo $(TOPLEVEL_VERSION) > $@
 
-dist-toplevel-txt-files:
+ChangeLog: $(outdir)/VERSION
+       @echo 'See http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=log;h=refs/tags/release/$(TOPLEVEL_VERSION)-1' > ChangeLog
+
+python-modules:
+       $(MAKE) -C python
+
+do-top-doc: python-modules
+
+local-clean: local-clean-ChangeLog
+
+local-clean-ChangeLog:
+       rm -f ChangeLog
+
+dist-toplevel-txt-files: do-top-doc
        -mkdir -p $(distdir)
        ln $(TOPDOC_TXT_FILES) $(distdir)/
        ln $(top-src-dir)/stepmake/aclocal.m4 $(distdir)/
@@ -60,11 +73,15 @@ install-help2man:
 install-WWW:
        -$(INSTALL) -m 755 -d $(DESTDIR)$(webdir)
        rsync -rl $(outdir)/offline-root/ $(DESTDIR)$(webdir)
+
+install-info-WWW:
        $(MAKE) -C Documentation/user install-info
        $(MAKE) -C input/lsr install-info
+       (cd $(DESTDIR)$(infodir) && rm -f lilypond && ln -sf $(shell $(PYTHON) $(buildscript-dir)/relative $(DESTDIR)$(webdir)/Documentation/user) lilypond)
 
 web-install:
        $(MAKE) out=www install-WWW
+       $(MAKE) out=www install-info-WWW
 
 uninstall-WWW:
        rm -rf $(DESTDIR)$(webdir)
diff --git a/input/regression/rest-collision-note-duration.ly b/input/regression/rest-collision-note-duration.ly
new file mode 100644 (file)
index 0000000..5ccce39
--- /dev/null
@@ -0,0 +1,12 @@
+\version "2.12.2"
+
+\header { texidoc =
+"Vertical rest positions in a multi-voice staff should obey the duration of
+notes; this is, they shouldn't return to a default position too early.
+"
+}
+
+\relative c' {
+  << { g'1  g2 } \\
+     { \repeat unfold 2 {r8 d4 d8 r d4 d8} } >>
+}
index c96228f619dba1ec55f96f8773586cad9f616c97..eac6426ea6f12ea5e1e62b3ada0e3afd5ebb644d 100644 (file)
@@ -19,4 +19,7 @@
   \time 3/4
   s2.
   c2.
+  \override Score.NonMusicalPaperColumn #'full-measure-extra-space = #3.0
+  s2.
+  c2.
 }
index 698d40457c66a069132de3327f3e88fa78981d46..e37fc94302bba8e1c2012db54952ee0287fa5e63 100644 (file)
@@ -702,7 +702,17 @@ Grob::stencil_width (SCM smob)
   return grob_stencil_extent (me, X_AXIS);
 }
 
+Stream_event*
+Grob::event_cause ()
+{
+  SCM cause = get_property ("cause");
+  if (to_boolean (Stream_event::smob_p (cause)))
+    return unsmob_stream_event (cause);
+  else if (to_boolean (Grob::smob_p (cause)))
+    return unsmob_grob (cause)->event_cause ();
 
+  return 0;
+}
 
 Grob *
 common_refpoint_of_list (SCM elist, Grob *common, Axis a)
index 66cc0530b73a0221f8f74cb93489bea5c80e0737..0eb7067b91beaecc8eae3c0ed4b1210b77cf14e6 100644 (file)
@@ -128,6 +128,7 @@ public:
   void fixup_refpoint ();
 
   virtual Interval_t<int> spanned_rank_interval () const;
+  Stream_event *event_cause ();
 };
 
 /* smob utilities */
index a6e7fa6a35fe38a1d945cc075ad5235aba0ac550..0112599371083d250512f8a83db356cf2a0b04aa 100644 (file)
@@ -359,6 +359,7 @@ ADD_INTERFACE (Paper_column,
               /* properties */
               "between-cols "
               "bounded-by-me "
+              "full-measure-extra-space "
               "grace-spacing "
               "labels "
               "line-break-system-details "
index d438566c02707e346154d10a2288fade48587c3c..23a351c2f150e03bb9acd8426606d8946547f1f6 100644 (file)
@@ -6,21 +6,27 @@
   (c) 1997--2009 Han-Wen Nienhuys <hanwen@xs4all.nl>
 */
 
-#include "warn.hh"
+#include <list>
+
+#include "duration.hh"
 #include "engraver.hh"
-#include "rest-collision.hh"
-#include "note-column.hh"
 #include "item.hh"
+#include "moment.hh"
+#include "note-column.hh"
+#include "rest-collision.hh"
+#include "stream-event.hh"
+#include "warn.hh"
 
 class Rest_collision_engraver : public Engraver
 {
   Item *rest_collision_;
   vsize rest_count_;
-  vector<Grob*> note_columns_;
+  list<pair<Grob*, Moment> > note_columns_;
 protected:
   DECLARE_ACKNOWLEDGER (note_column);
   void process_acknowledged ();
   void stop_translation_timestep ();
+  void start_translation_timestep ();
 public:
   TRANSLATOR_DECLARATIONS (Rest_collision_engraver);
 };
@@ -43,26 +49,56 @@ Rest_collision_engraver::process_acknowledged ()
 
   rest_collision_ = make_item ("RestCollision", SCM_EOL);
 
-  for (vsize i = 0; i < note_columns_.size (); i++)
-    Rest_collision::add_column (rest_collision_, note_columns_[i]);
+  list<pair<Grob*, Moment> >::iterator i;
+  for (i = note_columns_.begin (); i != note_columns_.end (); i++)
+    Rest_collision::add_column (rest_collision_, i->first);
 }
 
 void
 Rest_collision_engraver::acknowledge_note_column (Grob_info i)
 {
-  note_columns_.push_back (i.grob ());
+  Moment end = now_mom ();
   if (Note_column::has_rests (i.grob ()))
     rest_count_++;
+  else
+    {
+      // We only keep track of ending moments for columns with notes.
+      // It is safe to add a column with notes to multiple RestCollisions, but
+      // it might not be safe to add a column with rests to multiple RestCollisions.
+      Grob *stem = Note_column::get_stem (i.grob ());
+      Stream_event *ev = stem ? stem->event_cause () : 0;
+      Duration *dur_ptr = ev ? unsmob_duration (ev->get_property ("duration")) : 0;
+      if (dur_ptr)
+       {
+         if (end.grace_part_)
+           end.grace_part_ += dur_ptr->get_length ();
+         else
+           end.main_part_ += dur_ptr->get_length ();
+       }
+    }
+  note_columns_.push_back (pair<Grob*, Moment> (i.grob (), end));
 }
 
 void
 Rest_collision_engraver::stop_translation_timestep ()
 {
   rest_collision_ = 0;
-  note_columns_.clear ();
   rest_count_ = 0;
 }
 
+void
+Rest_collision_engraver::start_translation_timestep ()
+{
+  list<pair<Grob*, Moment> >::iterator i = note_columns_.begin ();
+  while (i != note_columns_.end ())
+    {
+      if (i->second <= now_mom ())
+       i = note_columns_.erase (i);
+      else
+       i++;
+    }
+}
+
 #include "translator.icc"
 
 ADD_ACKNOWLEDGER (Rest_collision_engraver, note_column);
index f18c63a10cc466be2d2cfe5099decb0a8599c610..6448492b8f5f925b954fe9fb4064b4b0cb50cb2a 100644 (file)
@@ -14,6 +14,7 @@ using namespace std;
 #include "directional-element-interface.hh"
 #include "duration.hh"
 #include "international.hh"
+#include "item.hh"
 #include "note-column.hh"
 #include "output-def.hh"
 #include "pointer-group-interface.hh"
@@ -228,7 +229,10 @@ Rest_collision::calc_positioning_done (SCM smob)
       Interval notedim;
       for (vsize i = 0; i < notes.size (); i++)
        {
-         if (Note_column::dir (notes[i]) == -dir)
+         if (Note_column::dir (notes[i]) == -dir
+             // If the note has already happened (but it has a long duration, so there is a collision),
+             // don't look at the stem. If we do, the rest gets shifted down a lot and it looks bad.
+             || dynamic_cast<Item*> (notes[i])->get_column () != dynamic_cast<Item*> (rest)->get_column ())
            {
              /* try not to look at the stem, as looking at a beamed
                 note may trigger beam positioning prematurely.
index d5dcb01cc87ac8efb496038cdb96556638bf003e..446c1413cdbe984fc61ea411d0eb704d2ffee53e 100644 (file)
@@ -513,7 +513,8 @@ Spacing_spanner::breakable_column_spacing (Grob *me, Item *l, Item *r,
       && l->break_status_dir () == CENTER
       && fills_measure (me, l, r))
     {
-      spring.set_distance (spring.distance () + 1.0);
+      Real full_measure_extra_space = robust_scm2double (l->get_property ("full-measure-extra-space"), 1.0);
+      spring.set_distance (spring.distance () + full_measure_extra_space);
       spring.set_default_strength ();
     }
   
index a112b67e64a55107686bd736531034558ffa42e2..322dfa251183ce5ffc27bc08a85aa4db170ec0bb 100644 (file)
@@ -126,6 +126,7 @@ bar =
 
 barNumberCheck =
 #(define-music-function (parser location n) (integer?)
+  (_i "Print a warning if the current bar number is not @var{n}.")
    (make-music 'ApplyContext 
               'origin location
               'procedure 
@@ -139,30 +140,30 @@ barNumberCheck =
 
 bendAfter =
 #(define-music-function (parser location delta) (real?)
-             
+  (_i "Create a fall or doit of pitch interval @var{delta}.")
   (make-music 'BendAfterEvent
    'delta-step delta))
 
 %% why a function?
 breathe =
 #(define-music-function (parser location) ()
+  (_i "Insert a breath mark.")
             (make-music 'EventChord 
               'origin location
               'elements (list (make-music 'BreathingEvent))))
 
 
 clef =
-#(define-music-function (parser location type)
-   (string?)
-   (_i "Set the current clef.")
-
+#(define-music-function (parser location type) (string?)
+  (_i "Set the current clef to @var{type}.")
    (make-clef-set type))
 
 
 cueDuring = 
 #(define-music-function
-  (parser location what dir main-music)
-  (string? ly:dir? ly:music?)
+  (parser location what dir main-music) (string? ly:dir? ly:music?)
+  (_i "Insert contents of quote @var{what} corresponding to @var{main-music},
+in a CueVoice oriented by @var{dir}.")
   (make-music 'QuoteMusic
              'element main-music 
              'quoted-context-type 'Voice
@@ -173,12 +174,15 @@ cueDuring =
 
 displayLilyMusic =
 #(define-music-function (parser location music) (ly:music?)
+  (_i "Display  the LilyPond input representation of @var{music}
+to the console.")
    (newline)
    (display-lily-music music parser)
    music)
 
 displayMusic =
 #(define-music-function (parser location music) (ly:music?)
+  (_i "Display the internal representation of @var{music} to the console.")
    (newline)
    (display-scheme-music music)
    music)
@@ -186,6 +190,7 @@ displayMusic =
 
 endSpanners =
 #(define-music-function (parser location music) (ly:music?)
+  (_i "Terminate the next spanner prematurely after exactly one note without the need of a specific end spanner.")
    (if (eq? (ly:music-property music 'name) 'EventChord)
        (let*
           ((elts (ly:music-property music 'elements))
@@ -211,9 +216,7 @@ endSpanners =
 
 featherDurations=
 #(define-music-function (parser location factor argument) (ly:moment? ly:music?)
-   (_i "Rearrange durations in ARGUMENT so there is an
-acceleration/deceleration. ")
-   
+ (_i "Adjust durations of music in @var{argument} by rational @var{factor}. ")
    (let*
        ((orig-duration (ly:music-length argument))
        (multiplier (ly:make-moment 1 1)))
@@ -236,8 +239,8 @@ acceleration/deceleration. ")
      argument))
 
 grace =
-#(def-grace-function startGraceMusic stopGraceMusic)
-
+#(def-grace-function startGraceMusic stopGraceMusic
+   (_i "Insert @var{music} as grace notes."))
 
 "instrument-definitions" = #'()
 
@@ -253,6 +256,8 @@ addInstrumentDefinition =
 instrumentSwitch =
 #(define-music-function
    (parser location name) (string?)
+   (_i "Switch instrument to @var{name}, which must be predefined with 
+@var{\addInstrumentDefinition}.")
    (let*
        ((handle  (assoc name instrument-definitions))
        (instrument-def (if handle (cdr handle) '()))
@@ -276,8 +281,8 @@ instrumentSwitch =
 
 includePageLayoutFile = 
 #(define-music-function (parser location) ()
-   (_i "If page breaks and tweak dump is not asked, and the file
-<basename>-page-layout.ly exists, include it.")
+   (_i "Include the file @var{<basename>-page-layout.ly}. Deprecated as
+part of two-pass spacing.")
    (if (not (ly:get-option 'dump-tweaks))
        (let ((tweak-filename (format #f "~a-page-layout.ly"
                                     (ly:parser-output-name parser))))
@@ -290,11 +295,10 @@ includePageLayoutFile =
                                                tweak-filename))))))
    (make-music 'SequentialMusic 'void #t))
 
-
-
 keepWithTag =
 #(define-music-function
   (parser location tag music) (symbol? ly:music?)
+  (_i "Include only elements of @var{music} that are tagged with @var{tag}.")
   (music-filter
    (lambda (m)
     (let* ((tags (ly:music-property m 'tags))
@@ -307,6 +311,7 @@ keepWithTag =
 removeWithTag = 
 #(define-music-function
   (parser location tag music) (symbol? ly:music?)
+  (_i "Remove elements of @var{music} that are tagged with @var{tag}.")
   (music-filter
    (lambda (m)
     (let* ((tags (ly:music-property m 'tags))
@@ -318,6 +323,7 @@ killCues =
 #(define-music-function
    (parser location music)
    (ly:music?)
+   (_i "Remove cue notes from @var{music}.")
    (music-map
     (lambda (mus)
       (if (string? (ly:music-property mus 'quoted-music-name))
@@ -326,7 +332,7 @@ killCues =
 
 label = 
 #(define-music-function (parser location label) (symbol?)
-   (_i "Place a bookmarking label, either at top-level or inside music.")
+   (_i "Create @var{label} as a bookmarking label")
    (make-music 'EventChord
               'page-marker #t
               'page-label label
@@ -336,6 +342,7 @@ label =
 makeClusters =
 #(define-music-function
                (parser location arg) (ly:music?)
+   (_i "Display chords in @var{arg} as clusters")
                (music-map note-to-cluster arg))
 
 musicMap =
index c8605a3173962384fa39dbe9895524012f24079b..52ee4b015ed731b0a46d47e3fa3f62dfc6d604d4 100644 (file)
@@ -4,7 +4,7 @@
 LYS_OUTPUT_OPTION= --lily-output-dir $(LYS_OUTPUT_DIR)
 LYS_OUTPUT_DIR=$(top-build-dir)/out/lybook-db/
 LILYPOND_BOOK_FLAGS += $(LYS_OUTPUT_OPTION)
-$(outdir)/%.latex:  %.doc
+$(outdir)/%.latex: %.doc $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
        LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) $(LILYPOND_BOOK_FLAGS) $<
 
 
@@ -19,11 +19,11 @@ $(eval $(firstword $(MASTER_TEXI_FILES)): $(foreach i, $(wordlist 2, $(words $(M
 
 # don't do ``cd $(outdir)'', and assume that $(outdir)/.. is the src dir.
 # it is not, for --srcdir builds
-$(outdir)/%.texi: %.tely $(outdir)/version.itexi $(DOCUMENTATION_LOCALE_TARGET)
+$(outdir)/%.texi: %.tely $(outdir)/version.itexi $(DOCUMENTATION_LOCALE_TARGET) $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
        LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
 
 
-$(outdir)/%.texi: $(outdir)/%.tely $(outdir)/version.itexi $(DOCUMENTATION_LOCALE_TARGET)
+$(outdir)/%.texi: $(outdir)/%.tely $(outdir)/version.itexi $(DOCUMENTATION_LOCALE_TARGET) $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
        LILYPOND_VERSION=$(TOPLEVEL_VERSION) $(PYTHON) $(LILYPOND_BOOK) $(LILYPOND_BOOK_INCLUDES) --process='$(LILYPOND_BOOK_PROCESS) $(LILYPOND_BOOK_INCLUDES) $(LILYPOND_BOOK_LILYPOND_FLAGS)' --output=$(outdir) --format=$(LILYPOND_BOOK_FORMAT) $(LILYPOND_BOOK_FLAGS) $<
 
 
index 498ad1ffa587281b2c072e2905b716a3c10abfc0..c3c8a24ba4be7a12edb6422211431e07388e1681 100644 (file)
@@ -1,8 +1,5 @@
 # rules for directories with LilyPond files.
 
-# empty
-
-# huh ? these are for documentation?!
 TELY_FILES := $(call src-wildcard,*.tely)
 MASTER_TEXI_FILES := $(sort $(TELY_FILES:%.tely=$(outdir)/%.texi))\
  $(OUT_MASTER_TEXI_FILES)
@@ -18,3 +15,8 @@ TEXINFO_SOURCES += $(TELY_FILES) $(ITELY_FILES) $(ITEXI_FILES)
 
 EXTRA_DIST_FILES +=$(TELY_FILES) $(LY_FILES) $(ITEXI_FILES) $(ITELY_FILES) $(ILY_FILES)
 
+# prerequisites for all rules invoking compiled lilypond binary
+ifeq ($(LILYPOND_EXTERNAL_BINARY),)
+INIT_LY_SOURCES = $(wildcard $(top-src-dir)/scm/*.scm)
+SCHEME_SOURCES = $(wildcard $(top-src-dir)/ly/*.ly)
+endif
index b73dc96aac48f7d032f80d8a13d53d013c85a2d2..82bc3ee13ce6c978fa99e3ea922f3942bf2a6519 100644 (file)
@@ -12,7 +12,7 @@ $(outdir)/%.ly: %.abc
        $(PYTHON) $(ABC2LY) --strict -o $@ $<
 
 # hmm. notdir builds src-dir builds?
-$(outdir)/%.png $(outdir)/%.pdf $(outdir)/%.ly $(outdir)/%.ps: $(outdir)/%.ly
+$(outdir)/%.png $(outdir)/%.pdf $(outdir)/%.ly $(outdir)/%.ps: $(outdir)/%.ly $(INIT_LY_SOURCES) $(SCHEME_SOURCES)
        cd $(outdir); $(LILYPOND_BINARY) --pdf --png -dlog-file="'$(basename $(notdir $<)).log"   -ddump-signatures -danti-alias-factor=2 -ddelete-intermediate-files -dno-point-and-click -I $(call absdir,$(src-dir))/ $(notdir $<)
        touch $(outdir)/$(basename $(notdir $<)).png
 
index 3240912a1d79daf7d6bbf3202c37eb2842c41f69..4dd07b245b95a6164514f329f282e2656de1c6ee 100644 (file)
@@ -381,7 +381,9 @@ circled pedals. Default value 0.15.
 @code{circle-y-padding} -- Padding in Y direction of the ellipse around
 circled pedals. Default value 0.2.
 @end itemize")
-
+     (full-measure-extra-space ,number? "Extra space that is allocated at the
+beginning of a measure with only one note. This property is read from the
+NonMusicalPaperColumn that begins the measure.")
      (head-direction ,ly:dir? "Are the note heads left or right in a
 semitie?")
      (height ,ly:dimension? "Height of an object in
index d7ed47f363f5946bed4155b01c48bc1e9a964eb0..4187a386d39a8382d9513b2f1dd9b506b944af93 100644 (file)
        (non-musical . #t)
        (line-break-permission . allow)
        (page-break-permission . allow)
+       (full-measure-extra-space . 1.0)
 
        ;; debugging stuff: print column number.
        ;;               (font-size . -6) (font-name . "sans")  (Y-extent . #f)
index f9599af572b51782c6d390608c21e3e8f730f843..42a08cc344c0ec8731d3c1f428f0d7a06a6a5c4b 100644 (file)
@@ -720,8 +720,10 @@ SkipEvent. Useful for extracting parts from crowded scores"
 
 
 
-(defmacro-public def-grace-function (start stop)
+(defmacro-public def-grace-function (start stop . docstring)
+  "Helper macro for defining grace music"
   `(define-music-function (parser location music) (ly:music?)
+     ,@docstring
      (make-music 'GraceMusic
                 'origin location
                 'element (make-music 'SequentialMusic
@@ -735,7 +737,7 @@ Syntax:
   (define-music-function (parser location arg1 arg2 ...) (arg1-type? arg2-type? ...)
     ...function body...)
 "
-  (if (and (pair? body) (pair? (car body)) (eqv? '_i (caar body)))
+(if (and (pair? body) (pair? (car body)) (eqv? '_i (caar body)))
       ;; When the music function definition contains a i10n doc string,
       ;; (_i "doc string"), keep the literal string only
       (let ((docstring (cadar body))
index afc4cf908fd6a50f8b64c9503f08611f335fb8e0..2b49689cdf69c995a63098994f7624f0db9b619d 100644 (file)
@@ -120,11 +120,11 @@ def bbox_is_empty (b):
 
 def bbox_union (b1, b2):
     return (interval_union (b1[X_AXIS], b2[X_AXIS]),
-            interval_union (b2[Y_AXIS], b2[Y_AXIS]))
+            interval_union (b1[Y_AXIS], b2[Y_AXIS]))
             
 def bbox_intersection (b1, b2):
     return (interval_intersect (b1[X_AXIS], b2[X_AXIS]),
-            interval_intersect (b2[Y_AXIS], b2[Y_AXIS]))
+            interval_intersect (b1[Y_AXIS], b2[Y_AXIS]))
 
 def bbox_area (b):
     return interval_length (b[X_AXIS]) * interval_length (b[Y_AXIS])
diff --git a/scripts/build/relative.py b/scripts/build/relative.py
new file mode 100755 (executable)
index 0000000..cb1da88
--- /dev/null
@@ -0,0 +1,17 @@
+#! @PYTHON@
+
+import os
+import sys
+
+def relative (dir, r=os.getcwd ()):
+    dir = os.path.normpath (dir) + '/'
+    r = os.path.normpath (r) + '/'
+    prefix = len (os.path.commonprefix ((dir, r)))
+    if prefix == len (dir):
+        return './'
+    if prefix > 1:
+        return '../' * len (r[prefix:].split ('/')) + dir[prefix:]
+    return dir
+
+if __name__ == '__main__':
+    print relative (sys.argv[1])
index 77074a62dca865b94151d27e0416a3fd02a9966e..a3ecf3f9a472223e619447d75fefa4fb23d5eff8 100644 (file)
@@ -215,12 +215,12 @@ AC_DEFUN(STEPMAKE_COMPILE, [
        save_cflags="$CFLAGS"
        CFLAGS=" -pipe $CFLAGS";
        AC_CACHE_CHECK([whether compiler understands -pipe],
-           [stepmake_cflags_pipe],
+           [stepmake_cv_cflags_pipe],
            AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[/* -pipe test */]])],
-               [stepmake_cflags_pipe=yes],
-               [stepmake_cflags_pipe=no]))
+               [stepmake_cv_cflags_pipe=yes],
+               [stepmake_cv_cflags_pipe=no]))
        CFLAGS=$save_cflags
-       if test $stepmake_cflags_pipe = yes; then
+       if test $stepmake_cv_cflags_pipe = yes; then
            OPTIMIZE="$OPTIMIZE -pipe"
        fi
     fi
@@ -265,12 +265,12 @@ AC_DEFUN(STEPMAKE_CXX, [
 
 AC_DEFUN(STEPMAKE_CXXTEMPLATE, [
     AC_CACHE_CHECK([whether explicit instantiation is needed],
-       lily_cv_need_explicit_instantiation,
+       stepmake_cv_need_explicit_instantiation,
        AC_LINK_IFELSE([AC_LANG_PROGRAM([[
     template <class T> struct foo { static int baz; };
     template <class T> int foo<T>::baz = 1;
-    ]], [[ return foo<int>::baz; ]])],[lily_cv_need_explicit_instantiation=no],[lily_cv_need_explicit_instantiation=yes]))
-    if test x"$lily_cv_need_explicit_instantiation"x = x"yes"x; then
+    ]], [[ return foo<int>::baz; ]])],[stepmake_cv_need_explicit_instantiation=no],[stepmake_cv_need_explicit_instantiation=yes]))
+    if test x"$stepmake_cv_need_explicit_instantiation"x = x"yes"x; then
        AC_DEFINE(NEED_EXPLICIT_INSTANTIATION)
     fi
 ])
@@ -421,7 +421,7 @@ AC_DEFUN(STEPMAKE_FLEXLEXER, [
     # in 2.5.4 <= flex < 2.5.29
     AC_LANG_PUSH(C++)
     AC_CACHE_CHECK([for yyFlexLexer.yy_current_buffer],
-       [stepmake_flexlexer_yy_current_buffer],
+       [stepmake_cv_flexlexer_yy_current_buffer],
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 using namespace std;
 #include <FlexLexer.h>
@@ -434,9 +434,9 @@ class yy_flex_lexer: public yyFlexLexer
     }
 };
 ]])],
-           [stepmake_flexlexer_yy_current_buffer=yes],
-           [stepmake_flexlexer_yy_current_buffer=no]))
-    if test $stepmake_flexlexer_yy_current_buffer = yes; then
+           [stepmake_cv_flexlexer_yy_current_buffer=yes],
+           [stepmake_cv_flexlexer_yy_current_buffer=no]))
+    if test $stepmake_cv_flexlexer_yy_current_buffer = yes; then
        AC_DEFINE(HAVE_FLEXLEXER_YY_CURRENT_BUFFER, 1, [Define to 1 if yyFlexLexer has yy_current_buffer.])
     fi
     AC_LANG_POP(C++)
@@ -985,16 +985,16 @@ AC_DEFUN(STEPMAKE_PYTHON_DEVEL, [
 AC_DEFUN(STEPMAKE_STL_DATA_METHOD, [
     AC_LANG_PUSH(C++)
     AC_CACHE_CHECK([for stl.data () method],
-       [stepmake_stl_data_method],
+       [stepmake_cv_stl_data_method],
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 #include <vector>
 using namespace std;
 vector <int> v;
 void *p = v.data ();
 ]])],
-           [stepmake_stl_data_method=yes],
-           [stepmake_stl_data_method=no]))
-    if test $stepmake_stl_data_method = yes; then
+           [stepmake_cv_stl_data_method=yes],
+           [stepmake_cv_stl_data_method=no]))
+    if test $stepmake_cv_stl_data_method = yes; then
        AC_DEFINE(HAVE_STL_DATA_METHOD, 1, [define if stl classes have data () method])
     fi
     AC_LANG_POP(C++)