]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge remote-tracking branch 'origin/stable/2.16' into translation
authorJohn Mandereau <john.mandereau@gmail.com>
Wed, 15 Aug 2012 17:01:14 +0000 (19:01 +0200)
committerJohn Mandereau <john.mandereau@gmail.com>
Wed, 15 Aug 2012 17:01:14 +0000 (19:01 +0200)
87 files changed:
Documentation/contributor/administration.itexi
Documentation/contributor/build-notes.itexi
Documentation/contributor/doc-work.itexi
Documentation/contributor/programming-work.itexi
Documentation/contributor/quick-start.itexi
Documentation/contributor/source-code.itexi
Documentation/learning/tweaks.itely
Documentation/notation/rhythms.itely
Documentation/snippets/adding-drum-parts.ly
Documentation/snippets/arabic-improvisation.ly
Documentation/snippets/center-text-below-hairpin-dynamics.ly
Documentation/snippets/changing-midi-output-to-one-channel-per-voice.ly
Documentation/snippets/defining-predefined-fretboards-for-other-instruments.ly
Documentation/snippets/displaying-complex-chords.ly
Documentation/snippets/drawing-boxes-around-grobs.ly
Documentation/snippets/generating-random-notes.ly
Documentation/snippets/heavily-customized-polymetric-time-signatures.ly
Documentation/snippets/keyboards.snippet-list
Documentation/snippets/marking-notes-of-spoken-parts-with-a-cross-on-the-stem.ly
Documentation/snippets/markup-lines.ly
Documentation/snippets/pitches.snippet-list
Documentation/snippets/recorder-fingering-chart.ly
Documentation/snippets/screech-and-boink.ly
Documentation/snippets/staff-notation.snippet-list
Documentation/snippets/table-of-contents.ly
Documentation/snippets/tweaking-grace-layout-within-music.ly
Documentation/snippets/unfretted-headword.ly
Documentation/snippets/using-autochange-with-more-than-one-voice.ly [new file with mode: 0644]
Documentation/usage/running.itely
Documentation/usage/suggestions.itely
Documentation/web/download.itexi
Documentation/web/introduction.itexi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
flower/include/direction.hh
flower/include/yaffut.hh
input/regression/morgenlied.ly
input/regression/repeat-sign-global-size-10.ly [new file with mode: 0644]
input/regression/repeat-sign-global-size-30.ly [new file with mode: 0644]
input/regression/repeat-sign-layout-size.ly [new file with mode: 0644]
input/regression/repeat-sign.ly [new file with mode: 0644]
input/regression/typography-demo.ly
input/regression/zero-staff-space.ly
lily/audio-item.cc
lily/beam.cc
lily/breathing-sign.cc
lily/completion-note-heads-engraver.cc
lily/context-mod-scheme.cc
lily/context-scheme.cc
lily/custos.cc
lily/dispatcher-scheme.cc
lily/dispatcher.cc
lily/dynamic-performer.cc
lily/footnote-engraver.cc
lily/global-context.cc
lily/include/lily-lexer.hh
lily/include/translator.icc
lily/lily-guile.cc
lily/moment-scheme.cc
lily/music.cc
lily/note-collision.cc
lily/one-line-page-breaking.cc
lily/page-layout-problem.cc
lily/parse-scm.cc
lily/part-combine-iterator.cc
lily/phrasing-slur-engraver.cc
lily/pitch-scheme.cc
lily/pure-from-neighbor-engraver.cc
lily/repeat-acknowledge-engraver.cc
lily/rest-collision.cc
lily/rest.cc
lily/rhythmic-music-iterator.cc
lily/slur-engraver.cc
lily/slur-scoring.cc
lily/spanner.cc
lily/staff-symbol-engraver.cc
lily/tie-formatting-problem.cc
lily/time-signature.cc
lily/tweak-engraver.cc
lily/vaticana-ligature.cc
ly/performer-init.ly
po/lilypond.pot
scm/framework-ps.scm
scm/fret-diagrams.scm
scm/markup.scm
scripts/build/create-weblinks-itexi.py

index 73c317855eb84dc09c65a0b8c96ffa25a79e319b..669537580732a6549c9faf088ce854fdc0fd090c 100644 (file)
@@ -935,7 +935,7 @@ open-source software.  For example,
 @uref{http://foundation.gnome.org/legal/}   board members pledge
 to keep certain matters confidential
 
-every security team of every linux distribution and OS
+every security team of every GNU/Linux distribution and OS
 @end example
 
 In fact, Karl Fogel's @qq{Producing Open Source Software}
index 7891063c202e5eaa50e6ca00bd577f6f32becfc7..e00cfc7e7eedbad98a0e8b1b860d701f46628494 100644 (file)
@@ -199,9 +199,15 @@ which expands to the following files:
 
 One little feature to notice here - these are all absolute file
 locations - the line prior to this used relative locations.  And
-none of these files exist, either.  (Further note - I'm assuming
-all these lines of make I'm following are autogenerated, but
-that'll be something else to discover.)
+none of these files exist, either.
+
+(Further note - I'm assuming all these lines of make I'm following are
+autogenerated, but that'll be something else to discover.)
+
+JM: @emph{``No, these lines are not useful in LilyPond (this is why
+you think they are autogenerated), but they are part of StepMake,
+which was meant to be a package to be installed as a build system over
+autoconf/make in software project source trees.''}
 
 Next in @file{stepmake.make}:
 
@@ -289,11 +295,11 @@ are:
 
 @example
 $(outdir)/%.ly: %.lym4
-        $(M4) $< | sed "s/\`/,/g" > $@
+        $(M4) $< | sed "s/\`/,/g" > $@@
 
 $(outdir)/%: %.in
-        rm -f $@
-        cat $< | sed $(sed-atfiles) | sed $(sed-atvariables) > $@
+        rm -f $@@
+        cat $< | sed $(sed-atfiles) | sed $(sed-atvariables) > $@@
 @end example
 
 I believe the first rule is for *.ly files, and has a prerequisite
@@ -445,10 +451,10 @@ From git grep:
 stepmake/stepmake/generic-vars.make has this:
 
 @smallexample
-LOOP=+$(foreach i, $(SUBDIRS), $(MAKE) PACKAGE=$(PACKAGE) package=$(package) -C $(i) $@ &&) true
+LOOP=+$(foreach i, $(SUBDIRS), $(MAKE) PACKAGE=$(PACKAGE) package=$(package) -C $(i) $@@ &&) true
 @end smallexample
 
-$@ is the name of the target - WWW-1 in this case.
+$@@ is the name of the target - WWW-1 in this case.
 
 In GNUmakefile.in we find:
 
@@ -557,13 +563,16 @@ they're up to date.
 
 (From the make manual:
 
-To this end, after reading in all makefiles, make will consider each as a goal target and
-attempt to update it. If a makefile has a rule which says how to update it (found either
-in that very makefile or in another one) or if an implicit rule applies to it (see Chapter 10
-[Using Implicit Rules], page 103), it will be updated if necessary. After all makefiles have
-been checked, if any have actually been changed, make starts with a clean slate and reads
-all the makefiles over again. (It will also attempt to update each of them over again, but
-normally this will not change them again, since they are already up to date.)
+To this end, after reading in all makefiles, make will consider each
+as a goal target and attempt to update it. If a makefile has a rule
+which says how to update it (found either in that very makefile or in
+another one) or if an implicit rule applies to it (see Chapter 10
+[Using Implicit Rules], page 103), it will be updated if
+necessary. After all makefiles have been checked, if any have actually
+been changed, make starts with a clean slate and reads all the
+makefiles over again. (It will also attempt to update each of them
+over again, but normally this will not change them again, since they
+are already up to date.)
 
 So my assumption seems correct)
 
index e8d993703a8f9db8b6a66351afb299c28ff0422b..8695d340ee6bf025063629b37ebf1fbe372707a6 100644 (file)
@@ -1804,11 +1804,6 @@ Spanish translation blah
 "
 @end example
 
-@noindent
-Then, you should get these translated strings into compiled snippets in
-@file{Documentation/snippets}, see @q{General guidelines} in @ref{Adding
-and editing snippets}.
-
 @code{@@example} blocks need not be verbatim copies, e.g. variable
 names, file names and comments should be translated.
 
index 9644cf78682e6746a1b85d79a0dd9f2f51046d18..d72424ab4c17df1fefb22917797e2fe819e616ac 100644 (file)
@@ -1453,7 +1453,7 @@ When these commands complete without error, the patch is
 considered to function successfully.
 
 Developers on Windows who are unable to build LilyPond should
-get help from a Linux or OSX developer to do the make tests.
+get help from a GNU/Linux or OSX developer to do the make tests.
 
 
 @node Verify regression tests
index a549c4ef5747156a4b2730b0965c50994f26b0c2..2172677054daedd1d6866936609af73dfa6b5b90 100644 (file)
@@ -17,7 +17,7 @@ for you and will help you do this as quickly and easily as possible.
 @node LilyDev
 @section LilyDev
 
-There is a disk image of a @q{remix} of Ubuntu Linux available for
+There is a disk image of a @q{remix} of Ubuntu GNU/Linux available for
 download which includes all the necessary software and tools to compile
 both LilyPond and the documentation.  Called the
 @qq{Ubuntu LilyPond Developer Remix}, but known simply as @qq{LilyDev}
@@ -25,14 +25,14 @@ for short.  Although it is not possible to compile LilyPond on Windows
 and extremely difficult on MacOS, LilyDev can be installed and run
 inside a @q{virtual machine} on any of these operating systems without
 disturbing your main operating system.  The LilyDev disk image can also
-be burnt to a DVD and installed like any other Ubuntu Linux
+be burnt to a DVD and installed like any other Ubuntu GNU/Linux
 distribution.
 
 Most virtualization software can be used but we recommend VirtualBox as
 it is available for all major operating systems and is easy to install
 & configure.
 
-If you are not familiar with Linux, it may be beneficial to read a
+If you are not familiar with GNU/Linux, it may be beneficial to read a
 couple of @qq{introduction to Ubuntu} web pages.
 
 Some contributors have recommended a free PDF:
index 2567484e7075ab4627ad1ab8c51479d9a275ea4f..d3f4f3a11b8dc11e7813f658d286606a46d97c27 100644 (file)
@@ -549,7 +549,7 @@ environment variable to point to that repository.
 @end example
 
 To configure an environment variable in bash (the default for most
-Linux distributions),
+GNU/Linux distributions),
 
 @example
 export LILYPOND_WEB_MEDIA_GIT=$HOME/dir/of/lilypond-extra/
index 675e585ca50f1189c1e0df0b57b13e7d169bcd85..5f9f1dc7b14b16139f92c3d133a35014145932b3 100644 (file)
@@ -4009,14 +4009,14 @@ first find the directory appropriate to your system.  The location
 of this directory depends (a) on whether you obtained LilyPond
 by downloading a precompiled binary from lilypond.org
 or whether you installed it from a package manager (i.e.
-distributed with Linux, or installed under fink or cygwin) or
+distributed with GNU/Linux, or installed under fink or cygwin) or
 compiled it from source, and (b) on which operating system it is
 being used:
 
 @strong{Downloaded from lilypond.org}
 
 @itemize @bullet
-@item Linux
+@item GNU/Linux
 
 Navigate to
 @example
index d46674a12a061c8fe30805af73cad894e5f4fe70..fc3af0d5efefc532b3cdd9ac5c20f7b1e5cdb290 100644 (file)
@@ -1984,6 +1984,28 @@ new beam starts.
 @funindex \set
 @funindex set
 
+When automatic beaming is enabled, the placement of automatic beams
+is determined by three context properties:
+@code{baseMoment}, @code{beatStructure}, and @code{beamExceptions}.
+If a @code{beamExceptions} rule is defined for the time signature in
+force, that rule is used to determine the beam placement.  If no
+@code{beamExceptions} rule is defined for the time signature in force,
+the beam placement is determined by the settings of @code{baseMoment}
+and @code{beatStructure}.
+
+By default, @code{beamExceptions} rules are defined for most common
+time signatures, so the @code{beamException} rules must be disabled
+if automatic beaming is to be based on @code{baseMoment} and
+@code{beatStructure}.  The @code{beamExceptions} rules are disabled
+by
+
+@example
+\set Timing.beamExceptions = #'()
+@end example
+
+
+@subsubheading @i{Beaming based on @code{baseMoment} and @code{beatStructure}}
+
 In most instances, automatic beams will end at the end of a beat.
 The ending points for beats are determined by the context properties
 @code{baseMoment} and @code{beatStructure}.  @code{beatStructure}
@@ -2001,6 +2023,25 @@ c16^"(2+3)" c c c c |
 c16^"(3+2)" c c c c |
 @end lilypond
 
+If a common time signature is being used, @code{beamExceptions}
+@emph{must} be disabled to enable @code{beatStructure} to work.
+The @code{\set Timing.beamExceptions = #'()} command can always
+be included if beaming is being determined by @code{beatStructure}.
+
+@lilypond[quote,relative=2,verbatim]
+\time 4/4
+a8^"default" a a a a a a a
+
+\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.beatStructure = #'(1 1 1 1)
+a8^"no change" a a a a a a a
+
+\set Timing.beamExceptions = #'()
+\set Timing.baseMoment = #(ly:make-moment 1 4)
+\set Timing.beatStructure = #'(1 1 1 1)
+a8^"changed" a a a a a a a
+@end lilypond
+
 Beam setting changes can be limited to specific contexts.  If no
 setting is included in a lower-level context, the setting of the
 enclosing context will apply.
@@ -2065,6 +2106,8 @@ By default @code{baseMoment} is set to one over the denominator of
 the time signature. Any exceptions to this default can be found in
 @file{scm/time-signature-settings.scm}.
 
+@subsubheading @i{Beaming based on @code{beamExceptions}}
+
 Special autobeaming rules (other than ending a beam on a beat)
 are defined in the @code{beamExceptions} property.
 
@@ -2176,7 +2219,7 @@ r4. a8 a a |
 r4. a8 a a |
 @end lilypond
 
-@i{@strong{How automatic beaming works}}
+@subsubheading @i{How automatic beaming works}
 
 When automatic beaming is enabled, the placement of automatic beams
 is determined by the context properties
index 91d8006eb8465c73736c37e32512c5db9981ea40..4e3d49266d00652c8d9f0fdd30368ecdee418a53 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "percussion, preparing-parts, really-simple, rhythms, specific-notation"
index 96644f60426df8e44569f8da6d8105b6a7160c6b..5af9a3053ea8a30147c5fea1b0f758579a45051e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "world-music"
index ea94a55dceead836b58af35f4005cc4bde980897..77e171d7765e15357cd2b6235116144f1568784e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "expressive-marks, really-cool, scheme-language, text"
index aa46bd80aa61308328a86975bf8819801f323e5a..6c6f0a56f7d51eedaf0bdc4e0def6424f1baecbc 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "contexts-and-engravers, midi, real-music"
index 35561348602c6130f9b23bb8c4caa8429d64f456..3b608b6ce3ac7cddd3642e57c9b36e5004a4c656 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.42"
+\version "2.15.43"
 
 \header {
   lsrtags = "fretted-strings"
index 01fca8bf028632135bf9153d46efaa73ab4f4fee..dc4dff6de36d4fa043af35f625b7e47cbc799219 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "chords, simultaneous-notes, workaround"
index c81b01c80ec8dae51a0dcd604a81a8fef71333aa..64da9f709ace8e56056e9eaa0ba54bc1dcb388d3 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "editorial-annotations, scheme-language, tweaks-and-overrides"
index 43b32ca530775c86c530516556f1554cddd3d34b..9e720ecd321ccc7c08ba50c203e56fb68138cc18 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "pitches, really-cool, scheme-language"
index 9da14b8dbdaf4f12d7267121c671d9ff45f1a8b4..fadfcf5e5a2095661868c799a69fa067deaaaa1e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "contemporary-notation, percussion, real-music, rhythms"
index f47f9c0d6ab19c538641d3b7faa2c4f904a9c134..415afb73bdc72a72a461d0a7f39e1cf4479a6570 100644 (file)
@@ -12,4 +12,5 @@ laissez-vibrer-ties.ly
 piano-template-simple.ly
 piano-template-with-centered-lyrics.ly
 piano-template-with-melody-and-lyrics.ly
+using-autochange-with-more-than-one-voice.ly
 vocal-ensemble-template-with-automatic-piano-reduction.ly
index 12310d82f5f2aca9f5db3f464e95d02e95acf78f..e2894fa4dc8448df4b440e575ce568499d7d242e 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "contemporary-notation, editorial-annotations, vocal-music, workaround"
index 11ffcb5735edae014473b275e083dc508f717217..8df1c1e37ac0b6793700c2f462d42ba2d7a0c2e6 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "text"
index 756236dd17143cf8677feef095066eb5e2256e04..911ef6f5da0111c2d82e2c16f4f6a34076d1e4cc 100644 (file)
@@ -23,3 +23,4 @@ quoting-another-voice-with-transposition.ly
 separating-key-cancellations-from-key-signature-changes.ly
 transposing-pitches-with-minimum-accidentals-smart-transpose.ly
 tweaking-clef-properties.ly
+using-autochange-with-more-than-one-voice.ly
index e390eb7df0c57271e6c092721a125f6d5f9eb8ff..86ea097d1ff8dbc16f8ab9e5d80d45900db45667 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "winds"
index a88804bd470529748fa4dbdf7bd5f68e3a859b68..9aa407a0c5a1da6e143b2c4b3d7fa5f6ad501deb 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "headword"
index e4d07d7bc425f1ccecfa2d1846144962b2d0b72e..483a17253e8a47792de399b02bebf7801f4b1fc9 100644 (file)
@@ -33,5 +33,6 @@ time-signature-in-parentheses---method-3.ly
 time-signature-in-parentheses.ly
 tweaking-clef-properties.ly
 use-square-bracket-at-the-start-of-a-staff-group.ly
+using-autochange-with-more-than-one-voice.ly
 volta-below-chords.ly
 volta-multi-staff.ly
index cae2479773e27d1ee3f03b15b08ec9795a9e3f43..b7b814eb20b3ef2330d6f198f953adb37248bac5 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "paper-and-layout"
index d71de8ece87546e114fc48656fded9ee52eb14d5..5ccff8d76de46507bbdd9a886336eecac85ae628 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "rhythms, tweaks-and-overrides"
index b6f116f946a407514a42c752484a26fe5e0b7aba..c382a7df228435862a99498679648fde0557daf5 100644 (file)
@@ -4,7 +4,7 @@
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.15.40"
+\version "2.15.43"
 
 \header {
   lsrtags = "headword"
diff --git a/Documentation/snippets/using-autochange-with-more-than-one-voice.ly b/Documentation/snippets/using-autochange-with-more-than-one-voice.ly
new file mode 100644 (file)
index 0000000..247db1b
--- /dev/null
@@ -0,0 +1,51 @@
+%% DO NOT EDIT this file manually; it is automatically
+%% generated from LSR http://lsr.dsi.unimi.it
+%% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
+%% and then run scripts/auxiliar/makelsr.py
+%%
+%% This file is in the public domain.
+\version "2.14.2"
+
+\header {
+  lsrtags = "keyboards, pitches, staff-notation"
+
+  texidoc = "
+Using @code{autochange} with more than one voice.
+
+"
+  doctitle = "Using autochange with more than one voice"
+} % begin verbatim
+
+\score
+{
+  \new PianoStaff
+  <<
+    \new Staff = "up" {
+      <<
+        \set Timing.beamExceptions = #'()
+        \set Timing.beatStructure = #'(4)
+        \new Voice {
+          \voiceOne
+          \autochange
+          \relative c' {
+            g8 a b c d e f g
+            g,8 a b c d e f g
+          }
+        }
+
+        \new Voice {
+          \voiceTwo
+          \autochange
+          \relative c' {
+            g8 a b c d e f g
+            g,,8 a b c d e f g
+          }
+        }
+      >>
+    }
+
+    \new Staff = "down" {
+      \clef bass
+    }
+  >>
+}
index 7522cec85b74b3aca677cd51454e89a81e985751..2c1ea3126dd37ceb1308f7c29d56c6bd8da458b8 100644 (file)
@@ -721,7 +721,7 @@ smaller value means more CPU time is used.  The default value is
 
 Setting up the server to run LilyPond in a chroot jail is a complicated
 task.  The steps are listed below.  Examples in the steps are from
-Ubuntu Linux, and may require the use of @code{sudo} as appropriate.
+Ubuntu GNU/Linux, and may require the use of @code{sudo} as appropriate.
 
 @itemize
 
index 8b3314257a5997e1a5c8c3ad59fd01936c8c96be..421782ce162e910bf02044966190fae7026b9cc8 100644 (file)
@@ -281,11 +281,11 @@ See the @strong{GNU Make Manual} for full details on using
 can do.
 
 The commands to define rules in a makefile differ
-according to platform; for instance the various forms of Linux and
+according to platform; for instance the various forms of GNU/Linux and
 MacOS use @code{bash}, while Windows uses @code{cmd}.  Note that on
 MacOS X, you need to configure the system to use the command-line
 interpreter.  Here are some example makefiles, with versions for both
-Linux/MacOS and Windows.
+GNU/Linux/MacOS and Windows.
 
 The first example is for an orchestral work in four
 movements with a directory structure as follows:
index 365ecedaa3595aac6da3db6860c35f72d1653778..dd6dabb46491dc41a5a97ccc46557d16a33cb25b 100644 (file)
@@ -47,7 +47,7 @@ our @ref{Text input}.}
 @c ref is duplicated to avoid underlining ref as image.
 @ref{Unix, @sourceimage{logo-linux,,,}
 @sourceimage{logo-freebsd,,,}}
-@ref{Unix, Unix (Linux and FreeBSD)}
+@ref{Unix, Unix (GNU/Linux and FreeBSD)}
 
 @item
 @ref{MacOS X, @sourceimage{logo-macosx,,,}}
index 127d174d096e28f1a38ebda751e94f8075b3755a..e07321bb3ccee04a637b12350f4d429345c78598 100644 (file)
@@ -1089,7 +1089,7 @@ viewer with advanced point-and-click support.
 
 Frescobaldi is lightweight, yet powerful LilyPond music and text editor
 with a built-in PDF viewer.  It is easy to use and will run on all major
-operating systems (Linux, Mac OS X and Windows).
+operating systems (GNU/Linux, Mac OS X and Windows).
 
 @divEnd
 
index 940fc578c74977ef8f7e3f50046c62a62c6a0227..b67db0a75e70d3ed61d6a25661bc7eaca0289230 100644 (file)
@@ -8,6 +8,22 @@
 
 @c used for news about the upcoming release; see CG 10.2
 
+@newsItem
+@subsubheading Lilypond 2.15.95 released!  @emph{August 11, 2012}
+
+We are excited to announce the release of LilyPond 2.15.95.
+With this release, development on version 2.15 is frozen for the
+upcoming 2.16 stable release and only open to bug fixes.
+
+All users are urged to try this version to ensure the best
+quality of the upcoming stable release.  If you discover any
+problems, please send us @ref{Bug reports}.
+
+New features since 2.14.2 are listed in the @qq{Changes} manual
+on the website section about @ref{Development}.
+
+@newsEnd
+
 
 @newsItem
 @subsubheading LilyPond 2.15.42 released!  @emph{August 02, 2012}
@@ -39,32 +55,3 @@ LilyPond Report 27} now; comments and contributions are
 warmly encouraged!
 
 @newsEnd
-
-
-@newsItem
-@subsubheading Release candidate withdrawn  @emph{July 11, 2012}
-
-We have discovered a regression since 2.14.2, so lilypond 2.15.41
-is no longer a candidate for the 2.16.0 release.  However, please
-continue testing it -- we would like to discover (and fix!) any
-more regressions as soon as possible.  If you discover any
-problems, please send us @ref{Bug reports}.
-
-@newsEnd
-
-
-@newsItem
-@subsubheading Release candidate 8 of 2.16 - LilyPond 2.15.41 released!  @emph{July 4, 2012}
-
-LilyPond 2.15.41 is out; this is the eighth release candidate of
-the upcoming 2.16 stable release.  All users are invited to
-experiment with this version.  New features since 2.14.2 are
-listed in the @qq{Changes} manual on the website section about
-@ref{Development}.
-
-There are no known Critical issues with this release.  If no
-Critical bugs are found, then the official 2.16.0 release will be
-on 18 July 2012.  If you discover any problems, please send us
-@ref{Bug reports}.
-
-@newsEnd
index 2cf3adf4b6a6d70b097961a7868ab556f9227feb..0a21c0de225105d56f9e75c10bbfad5aacdb4121 100644 (file)
@@ -27,6 +27,35 @@ NOTE:
 @end ignore
 
 
+@newsItem
+@subsubheading Release candidate withdrawn  @emph{July 11, 2012}
+
+We have discovered a regression since 2.14.2, so lilypond 2.15.41
+is no longer a candidate for the 2.16.0 release.  However, please
+continue testing it -- we would like to discover (and fix!) any
+more regressions as soon as possible.  If you discover any
+problems, please send us @ref{Bug reports}.
+
+@newsEnd
+
+
+@newsItem
+@subsubheading Release candidate 8 of 2.16 - LilyPond 2.15.41 released!  @emph{July 4, 2012}
+
+LilyPond 2.15.41 is out; this is the eighth release candidate of
+the upcoming 2.16 stable release.  All users are invited to
+experiment with this version.  New features since 2.14.2 are
+listed in the @qq{Changes} manual on the website section about
+@ref{Development}.
+
+There are no known Critical issues with this release.  If no
+Critical bugs are found, then the official 2.16.0 release will be
+on 18 July 2012.  If you discover any problems, please send us
+@ref{Bug reports}.
+
+@newsEnd
+
+
 @newsItem
 @subsubheading LilyPond 2.15.40 released!  @emph{June 05, 2012}
 
diff --git a/VERSION b/VERSION
index 019ae0d469b81f4d6cd25fc59712fb4175830f9d..9bbefc83ab313e81436614915bc024d29ab3108f 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=15
-PATCH_LEVEL=43
+PATCH_LEVEL=96
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.14.2
-VERSION_DEVEL=2.15.42
+VERSION_DEVEL=2.15.95
index 97c0f6d79bb59ee9f790c250a71f66c120df3a99..dcb794eea169f5225d6a97ac63b4050c8e73c96e 100644 (file)
@@ -80,7 +80,6 @@ flip (Direction *i)
 #define LEFT_and_RIGHT(d) \
   Direction d = LEFT; d != CENTER; d = (d == LEFT ? RIGHT : CENTER)
 
-
 /**
    if d > 0: the max operator
    if d < 0: the min operator
index 38fba30801089b87e10475e282e1ccc8ff88969e..aa54fa66168363eec4fe87484103c1001297f2d6 100644 (file)
@@ -398,7 +398,6 @@ void assert_throw (void (*pf) (), const char *at = "")
 #include <sys/types.h>
 #include <unistd.h>
 
-
 int main (int argc, const char *argv[])
 {
   std::cout << "pid(" << getpid () << ")" << std::endl;
index 182cc640864970706951b12db58e3df5069121df..49fd4b1826201f40b382f37f03852f0b9a7f125c 100644 (file)
@@ -112,7 +112,7 @@ pianoRH =  \relative c''' \repeat volta 2 {
     <g e>8( <es fis a> <d f b> <c e c'>) r8 r | 
     r8 c'( e,) f r a |
     \once \override DynamicLineSpanner   #'padding =#3
-    r8 << { s8 s8 }  << { fis(\> g)\!
+    r8 << { s8\> s8\! }  << { fis( g)
                            } \\ { c,4 } >> >> r8 <e c g> <e c g> |
     <d c a>4. r8 \clef bass  <d b f> <d b f> |
     e,16_" "_\markup { \bold\italic cresc. } g c g e g d gis b gis d gis |
diff --git a/input/regression/repeat-sign-global-size-10.ly b/input/regression/repeat-sign-global-size-10.ly
new file mode 100644 (file)
index 0000000..97c5d92
--- /dev/null
@@ -0,0 +1,43 @@
+\version "2.15.42"
+\header {
+  texidoc = "The two dots of a repeat sign should be symmetric
+to the staff centre and avoid staff lines even for exotic staves.
+Test set-global-staff size 10 (with layout-set-staff-size)."
+}
+
+#(set-global-staff-size 10)
+
+\score {
+  <<
+    \context Staff = "s1" \with {
+      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+    } {
+      s1 \bar ":|"
+    }
+
+    \context Staff = "s2" \with {
+      \override StaffSymbol #'staff-space = #0.75
+    } {
+      s1 \bar ":|"
+    }
+  >>
+}
+
+\score {
+  <<
+    \context Staff = "s1" {
+      s1 \bar ":|"
+    }
+
+    \context Staff = "s2" \with {
+      \override StaffSymbol #'staff-space = #2
+      \override StaffSymbol #'line-count = #4
+    } {
+      s1 \bar ":|"
+    }
+  >>
+
+  \layout {
+    #(layout-set-staff-size 30)
+  }
+}
diff --git a/input/regression/repeat-sign-global-size-30.ly b/input/regression/repeat-sign-global-size-30.ly
new file mode 100644 (file)
index 0000000..e143d55
--- /dev/null
@@ -0,0 +1,46 @@
+\version "2.15.42"
+\header {
+  texidoc = "The two dots of a repeat sign should be symmetric
+to the staff centre and avoid staff lines even for exotic staves.
+Test set-global-staff size 30 (with layout-set-staff-size)."
+}
+
+#(set-global-staff-size 30)
+
+\score {
+  <<
+    \context Staff = "s1" \with {
+      \override StaffSymbol #'staff-space = #0.65
+    } {
+      s1 \bar ":|"
+    }
+
+    \context Staff = "s2" \with {
+      \override StaffSymbol #'staff-space = #0.7
+      \override StaffSymbol #'line-positions = #'(-4 -2 0 2)
+    } {
+      s1 \bar ":|"
+    }
+  >>
+}
+
+\score {
+  <<
+    \context Staff = "s1" \with {
+      \override StaffSymbol #'staff-space = #0.25
+    } {
+      s1 \bar ":|"
+    }
+
+    \context Staff = "s2" \with {
+      \override StaffSymbol #'staff-space = #0.3
+      \override StaffSymbol #'line-count = #4
+    } {
+      s1 \bar ":|"
+    }
+  >>
+
+  \layout {
+    #(layout-set-staff-size 10)
+  }
+}
diff --git a/input/regression/repeat-sign-layout-size.ly b/input/regression/repeat-sign-layout-size.ly
new file mode 100644 (file)
index 0000000..56ff720
--- /dev/null
@@ -0,0 +1,43 @@
+\version "2.15.42"
+\header {
+  texidoc = "The two dots of a repeat sign should be symmetric
+to the staff centre and avoid staff lines even for exotic staves.
+Test layout-set-staff-size."
+}
+
+\score {
+  <<
+    \context Staff = "s1" \with {
+      \override StaffSymbol #'staff-space = #0.4
+    } {
+      s1 \bar ":|"
+    }
+
+    \context Staff = "s2" \with {
+      \override StaffSymbol #'staff-space = #0.5
+    } {
+      s1 \bar ":|"
+    }
+  >>
+
+  \layout {
+    #(layout-set-staff-size 10)
+  }
+}
+
+\score
+{
+  <<
+    \context Staff = "s1" \with {
+      \override StaffSymbol #'staff-space = #0.7
+    } {
+      s1 \bar ":|"
+    }
+
+    \context Staff = "s2" \with {
+      \override StaffSymbol #'staff-space = #0.75
+    } {
+      s1 \bar ":|"
+    }
+  >>
+}
diff --git a/input/regression/repeat-sign.ly b/input/regression/repeat-sign.ly
new file mode 100644 (file)
index 0000000..09ed993
--- /dev/null
@@ -0,0 +1,139 @@
+\version "2.15.42"
+\header {
+  texidoc = "The two dots of a repeat sign should be symmetric
+to the staff centre and avoid staff lines even for exotic staves."
+}
+
+
+mus = \context Voice { \relative f' { d e f g \bar ":|" } }
+
+\new Staff {
+  <<
+    \mus
+    \context Voice { s1^"standard staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-6 -4 -2 0 2)
+} {
+  <<
+    \clef french
+    \mus
+    \context Voice { s1^"excentric staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-count = #4
+} {
+  <<
+    \mus
+    \context Voice { s1^"standard four-line staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-2 0 2 4)
+} {
+  <<
+    \mus
+    \context Voice { s1^"excentric four-line staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-7 -4)
+} {
+  <<
+    \clef french
+    \mus
+    \context Voice { s1^"very excentric staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'staff-space = #1.5
+  \override StaffSymbol #'line-positions = #'(-2 0)
+} {
+  <<
+    \mus
+    \context Voice { s1^"as wide as previous" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-2.9 -2)
+} {
+  <<
+    \mus
+    \context Voice { s1^"narrow staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-4 -3 -2)
+} {
+  <<
+    \mus
+    \context Voice { s1^"dense staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-4 -3 -2)
+  \override StaffSymbol #'staff-space = #0.8
+} {
+  <<
+    \mus
+    \context Voice { s1^"denser staff" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-6 -2 0 5)
+} {
+  <<
+    \mus
+    \context Voice { s1^"irregular staff, standard spacing" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-4 -2 -1)
+  \override StaffSymbol #'staff-space = #1.5
+} {
+  <<
+    \mus
+    \context Voice { s1^"irregular staff, nonstandard spacing" }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'thickness = #4
+} {
+  <<
+    \clef french
+    \mus
+    \context Voice {
+      s1^"thick-lined staff"
+    }
+  >>
+}
+
+\new Staff \with {
+  \override StaffSymbol #'line-positions = #'(-2)
+} {
+  <<
+    \mus
+    \context Voice { s1^"single line staff (zero height)" }
+  >>
+}
+
+\new Staff {
+  \stopStaff
+  <<
+    \mus
+    \context Voice { s1^"no staff" }
+  >>
+}
index d6d87d15d8f1d10e170d7d7daf9638efa1d85f73..b6d2c74f88812cb2e3933bdb7b8baacb63089cdc 100644 (file)
@@ -9,6 +9,8 @@ heavily mutilated Edition Peters Morgenlied by Schubert"
 }
 
 \version "2.15.32"
+#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
+#(ly:expect-warning (_ "(De)crescendo with unspecified starting volume in MIDI."))
 
 ignoreMelisma =        \set ignoreMelismata = ##t
 ignoreMelismaOff = \unset ignoreMelismata 
index 62e2e16bc9397d30801a09d3c26e9b4ef078fbb7..fc1c162c065aa3eafaffa0cdb16b6fff8b93de00 100644 (file)
@@ -10,6 +10,6 @@ Setting staff-space to 0 does not cause a segmentation fault.
   \override StaffSymbol #'staff-space = #0
   } {
   \relative c' {
-    c1
+    c1 \bar ":|"
   }
 }
index 8460ee8e5eeb1b917f30b8c3ed1c335564c7b101..201e8fd98e7cf4939c1de6b4a7e8ca64efc540d6 100644 (file)
@@ -133,13 +133,16 @@ Audio_span_dynamic::render ()
       return;
     }
 
-  Real delta_v = grow_dir_ * 0.1;
-
   Real start_v = dynamics_[0]->volume_;
   if (dynamics_.back ()->volume_ < 0)
-    dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, max_volume_), min_volume_);
+    {
+      // The dynamic spanner does not end with an explicit dynamic script
+      // event.  Adjust the end volume by at most 1/4 of the available
+      // volume range in this case.
+      dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * (max_volume_ - min_volume_) * 0.25, max_volume_), min_volume_);
+    }
 
-  delta_v = dynamics_.back ()->volume_ - dynamics_[0]->volume_;
+  Real delta_v = dynamics_.back ()->volume_ - dynamics_[0]->volume_;
 
   Moment start = dynamics_[0]->get_column ()->when ();
 
index 49253434c05d94faab4e471b44cc42898841f1e9..d73169a917181d046e8dfc50f9bd9cbc40b9d112 100644 (file)
@@ -675,7 +675,7 @@ Beam::print (SCM grob)
 
       // we need two translations: the normal one and
       // the one of the lowest segment
-      int idx[] = {i, extreme};
+      size_t idx[] = {i, extreme};
       Real translations[2];
 
       for (int j = 0; j < 2; j++)
@@ -1274,16 +1274,16 @@ Beam::rest_collision_callback (SCM smob, SCM prev_offset)
   Real shift = d * min (d * (beam_y - d * minimum_distance - rest_dim), 0.0);
 
   shift /= staff_space;
-  Real rad = Staff_symbol_referencer::line_count (rest) * staff_space / 2;
 
   /* Always move discretely by half spaces */
   shift = ceil (fabs (shift * 2.0)) / 2.0 * sign (shift);
 
+  Interval staff_span = Staff_symbol_referencer::staff_span (rest);
+  staff_span *= staff_space / 2;
+
   /* Inside staff, move by whole spaces*/
-  if ((rest_extent[d] + staff_space * shift) * d
-      < rad
-      || (rest_extent[-d] + staff_space * shift) * -d
-      < rad)
+  if (staff_span.contains (rest_extent[d] + staff_space * shift)
+      || staff_span.contains (rest_extent[-d] + staff_space * shift))
     shift = ceil (fabs (shift)) * sign (shift);
 
   return scm_from_double (offset + staff_space * shift);
index a3d9637bef6d2d2e3685c8b23334b97b49804e13..02b29858af1465d042c0c16d6f57c967e82f0f27 100644 (file)
@@ -81,13 +81,19 @@ Breathing_sign::divisio_maior (SCM smob)
    * more than half the size of the staff, such that the endings of
    * the line are in the middle of a staff space.
    */
-  int lines = Staff_symbol_referencer::line_count (me);
-  int height = lines / 2; // little more than half of staff size
-  if ((lines & 1) != (height & 1))
-    height++; // ensure endings are centered in staff space
+  Interval ydim = Staff_symbol_referencer::staff_span (me);
+  ydim.widen (-0.25 * ydim.delta ());
+  for (UP_and_DOWN (i))
+    {
+      int const int_dim = (int) ydim[i];
+      if (int_dim == ydim[i]
+          && Staff_symbol_referencer::on_staff_line (me, int_dim))
+        ydim[i] += i;
+    }
+
+  ydim *= 1.0 / Staff_symbol_referencer::staff_space (me);
 
   Interval xdim (0, thickness);
-  Interval ydim (-0.5 * height, +0.5 * height);
   Box b (xdim, ydim);
   Stencil out = Lookup::round_filled_box (b, blotdiameter);
   return out.smobbed_copy ();
@@ -102,20 +108,15 @@ Breathing_sign::divisio_maxima (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
-  Real staff_size;
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
 
-  if (Staff_symbol_referencer::get_staff_symbol (me))
-    staff_size = (Staff_symbol_referencer::line_count (me) - 1) * staff_space;
-  else
-    staff_size = 0.0;
-
   Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
 
   // like a "|" type bar
   Interval xdim (0, thickness);
-  Interval ydim (-0.5 * staff_size, +0.5 * staff_size);
+  Interval ydim = Staff_symbol_referencer::staff_span (me);
+  ydim *= staff_space / 2;
   Box b (xdim, ydim);
   Stencil out = Lookup::round_filled_box (b, blotdiameter);
   return out.smobbed_copy ();
@@ -130,20 +131,15 @@ Breathing_sign::finalis (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   Real staff_space = Staff_symbol_referencer::staff_space (me);
-  Real staff_size;
   Real thickness = Staff_symbol_referencer::line_thickness (me);
   thickness *= robust_scm2double (me->get_property ("thickness"), 1.0);
 
-  if (Staff_symbol_referencer::get_staff_symbol (me))
-    staff_size = (Staff_symbol_referencer::line_count (me) - 1) * staff_space;
-  else
-    staff_size = 0.0;
-
   Real blotdiameter = me->layout ()->get_dimension (ly_symbol2scm ("blot-diameter"));
 
   // like a "||" type bar
   Interval xdim (0, thickness);
-  Interval ydim (-0.5 * staff_size, +0.5 * staff_size);
+  Interval ydim = Staff_symbol_referencer::staff_span (me);
+  ydim *= staff_space / 2;
   Box b (xdim, ydim);
   Stencil line1 = Lookup::round_filled_box (b, blotdiameter);
   Stencil line2 (line1);
index 973fb4f28dbb14a1ca3d79c8819ee8670f60cd29..e0b57b8248395b8e755f3357a95f63d8f0896d92 100644 (file)
@@ -124,13 +124,13 @@ Completion_heads_engraver::next_moment (Rational const &note_len)
   if (unit)
     {
       Rational const now_unit = e->main_part_ / unit->main_part_;
-      if (now_unit.den() > 1)
+      if (now_unit.den () > 1)
         {
           /*
             within a unit - go to the end of that
           */
           result = unit->main_part_
-            * (Rational (1) - (now_unit - now_unit.trunc_rat ()));
+                   * (Rational (1) - (now_unit - now_unit.trunc_rat ()));
         }
       else
         {
index 9c79c37859b6203b147bca35e225bfada6d4df4f..5479581b1c14f67d174c67eac28c235a03bdcc3e 100644 (file)
@@ -57,14 +57,14 @@ LY_DEFINE (ly_make_context_mod, "ly:make-context-mod",
 }
 
 LY_DEFINE (ly_context_mod_apply_x, "ly:context-mod-apply!",
-          2, 0, 0, (SCM context, SCM mod),
-          "Apply the context modification @var{mod} to @var{context}.")
+           2, 0, 0, (SCM context, SCM mod),
+           "Apply the context modification @var{mod} to @var{context}.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_SMOB (Context_mod, mod, 2);
 
   apply_property_operations (unsmob_context (context),
-                            unsmob_context_mod (mod)->get_mods ());
+                             unsmob_context_mod (mod)->get_mods ());
   scm_remember_upto_here_1 (context);
   return SCM_UNSPECIFIED;
 }
index 4f3818ecd8a3cf87841fd7d9bccb4c34e7ca3759..64f8dd8e15a0fdb3fbf9d2f8fd1821188395c231 100644 (file)
@@ -213,9 +213,9 @@ LY_DEFINE (ly_context_events_below, "ly:context-events-below",
 }
 
 LY_DEFINE (ly_make_event_class, "ly:make-event-class",
-          2, 0, 0, (SCM context, SCM type),
-          "Make an event class (a list of types) from the given @var{type}"
-          " within the global context containing @var{context}.")
+           2, 0, 0, (SCM context, SCM type),
+           "Make an event class (a list of types) from the given @var{type}"
+           " within the global context containing @var{context}.")
 {
   LY_ASSERT_SMOB (Context, context, 1);
   LY_ASSERT_TYPE (ly_is_symbol, type, 2);
index 00da1d53d1bfee2288287e082d2c5523a641121b..1366202f725013905fb37844b874628bec5e3bf0 100644 (file)
@@ -62,7 +62,6 @@ Custos::print (SCM smob)
     = to_dir (me->get_property ("neutral-direction"));
 
   int pos = Staff_symbol_referencer::get_rounded_position (me);
-  int sz = Staff_symbol_referencer::line_count (me) - 1;
 
   string font_char = "custodes." + style + ".";
   if (pos < neutral_pos)
@@ -77,7 +76,7 @@ Custos::print (SCM smob)
     font_char += "d";
 
   if (adjust)
-    font_char += (((pos ^ sz) & 0x1) == 0) ? "1" : "0";
+    font_char += Staff_symbol_referencer::on_line (me, pos) ? "1" : "0";
   else
     font_char += "2";
 
index a87074e799bd6eecfcae58819300390834bf3a22..13854b26d783fc5bde1321064831688d2a57077d 100644 (file)
@@ -92,7 +92,6 @@ LY_DEFINE (ly_listened_event_class_p, "ly:listened-event-class?",
   return scm_from_bool (result);
 }
 
-
 LY_DEFINE (ly_broadcast, "ly:broadcast",
            2, 0, 0, (SCM disp, SCM ev),
            "Send the stream event @var{ev} to the dispatcher @var{disp}.")
index 8e6350f2949432c87e7de0c8eed20480ece2ea3a..0d899f94ba7ea27cfcc0b610ee4bd14d0eecb52f 100644 (file)
@@ -181,9 +181,9 @@ Dispatcher::is_listened_class (SCM cl)
 
 static SCM
 accumulate_types (void * /* closure */,
-                 SCM key,
-                 SCM val,
-                 SCM result)
+                  SCM key,
+                  SCM val,
+                  SCM result)
 {
   if (scm_is_pair (val))
     return scm_cons (key, result);
index 978a8d2a6e1e768bfb3995a273a32647b7c554b3..86734d7ee62fb4bce8cd54a54ab6c6832899c3ed 100644 (file)
@@ -20,6 +20,7 @@
 #include "performer.hh"
 #include "audio-item.hh"
 #include "stream-event.hh"
+#include "international.hh"
 
 #include "translator.icc"
 
@@ -40,6 +41,7 @@ private:
   Drul_array<Stream_event *> span_events_;
   Drul_array<Direction> grow_dir_;
   Real last_volume_;
+  bool last_volume_initialized_;
   Audio_dynamic *absolute_;
   Audio_span_dynamic *span_dynamic_;
   Audio_span_dynamic *finished_span_dynamic_;
@@ -47,7 +49,8 @@ private:
 
 Dynamic_performer::Dynamic_performer ()
 {
-  last_volume_ = 0.5;
+  last_volume_ = 0.0;
+  last_volume_initialized_ = false;
   script_event_ = 0;
   absolute_ = 0;
   span_events_[LEFT]
@@ -104,26 +107,41 @@ Dynamic_performer::process_music ()
 {
   if (span_events_[STOP] || script_event_)
     {
+      // End of a dynamic spanner, or an explicit dynamic script event.
       finished_span_dynamic_ = span_dynamic_;
       span_dynamic_ = 0;
     }
 
   if (span_events_[START])
     {
+      // Start of a dynamic spanner.  Create a new Audio_span_dynamic for
+      // collecting changes in dynamics within this spanner.
       span_dynamic_ = new Audio_span_dynamic (equalize_volume (0.1), equalize_volume (1.0));
       announce_element (Audio_element_info (span_dynamic_, span_events_[START]));
 
       span_dynamic_->grow_dir_ = grow_dir_[START];
+
+      if (!last_volume_initialized_ && !script_event_)
+        {
+          // No explicit dynamic script events have occurred yet, but there is
+          // nevertheless a dynamic spanner.  Initialize last_volume_ to a
+          // value within the available range.
+          span_events_[START]->origin ()->warning (_ ("(De)crescendo with unspecified starting volume in MIDI."));
+          last_volume_ = equalize_volume (0.5);
+          last_volume_initialized_ = true;
+        }
     }
 
   if (script_event_
       || span_dynamic_
       || finished_span_dynamic_)
     {
+      // New change in dynamics.
       absolute_ = new Audio_dynamic ();
 
       if (script_event_)
         {
+          // Explicit dynamic script event: determine the volume.
           SCM proc = get_property ("dynamicAbsoluteVolumeFunction");
 
           SCM svolume = SCM_EOL;
@@ -137,6 +155,7 @@ Dynamic_performer::process_music ()
 
           last_volume_
             = absolute_->volume_ = equalize_volume (volume);
+          last_volume_initialized_ = true;
         }
 
       Audio_element_info info (absolute_, script_event_);
@@ -166,6 +185,7 @@ Dynamic_performer::stop_translation_timestep ()
   else if (absolute_)
     {
       last_volume_ = absolute_->volume_;
+      last_volume_initialized_ = true;
     }
 
   absolute_ = 0;
index 2f2b9577c2b5f3e5a996147c697e585b690063f2..efa7900b00d5f570130f0dd279278c435e0b138a 100644 (file)
@@ -106,10 +106,10 @@ Footnote_engraver::acknowledge_grob (Grob_info info)
   if (mus)
     {
       if (!mus->is_mus_type ("footnote-event"))
-       {
-         mus->origin ()->programming_error (_ ("Must be footnote-event."));
-         return;
-       }
+        {
+          mus->origin ()->programming_error (_ ("Must be footnote-event."));
+          return;
+        }
 
       footnotify (info.grob (), mus->to_event (context ())->unprotect ());
 
@@ -123,16 +123,16 @@ Footnote_engraver::acknowledge_grob (Grob_info info)
       string grobname = info.grob ()->name ();
 
       for (vsize i = 0; i < events_.size (); i++)
-       {
-         SCM name = events_[i]->get_property ("symbol");
-         if (scm_is_symbol (name)
-             && grobname == ly_symbol2string (name))
-           {
-             footnotify (info.grob (), events_[i]->self_scm ());
-             // Event has exhausted its footnote
-             events_[i]->set_property ("symbol", SCM_EOL);
-           }
-       }
+        {
+          SCM name = events_[i]->get_property ("symbol");
+          if (scm_is_symbol (name)
+              && grobname == ly_symbol2string (name))
+            {
+              footnotify (info.grob (), events_[i]->self_scm ());
+              // Event has exhausted its footnote
+              events_[i]->set_property ("symbol", SCM_EOL);
+            }
+        }
     }
 }
 
index 431ffe4de371842899ef7feaf49ce2ccec307c4f..005c54b45e67b97b38e256e1d639eaea638c2e7b 100644 (file)
@@ -55,7 +55,7 @@ Global_context::Global_context (Output_def *o)
   SCM p = get_property ("EventClasses");
 
   ancestor_lookup_ = scm_make_hash_table (scm_length (p));
-  for (;scm_is_pair (p); p = scm_cdr (p))
+  for (; scm_is_pair (p); p = scm_cdr (p))
     scm_hashq_set_x (ancestor_lookup_, scm_caar (p), scm_car (p));
 
   accepts_list_ = scm_list_1 (ly_symbol2scm ("Score"));
index e078c9edc394a02b26ade5b66236f11d419197ac..caa3b4b44b5987f5c094b74a8ad96606a8c4b7d7 100644 (file)
@@ -52,7 +52,7 @@ private:
   int hidden_state_;
   SCM eval_scm (SCM, char extra_token = 0);
 public:
-  SCM eval_scm_token (SCM sval)  { return eval_scm (sval, '#'); }
+  SCM eval_scm_token (SCM sval) { return eval_scm (sval, '#'); }
   SCM extra_tokens_;
   YYSTYPE *lexval_;
   Input *lexloc_;
index fec5aaacb121f76d7e5d8774e4d66d640328f9eb..4ce8f6902e2fb5a451852389ba6869e00d6d9843 100644 (file)
@@ -36,8 +36,8 @@
   static void _ ## T ## _adder ()                                       \
   {                                                                     \
     T *t = new T;                                                       \
-    T::static_description_ =                                           \
-      scm_permanent_object (t->static_translator_description ());      \
+    T::static_description_ =                                            \
+      scm_permanent_object (t->static_translator_description ());       \
     add_translator (t);                                                 \
   }                                                                     \
   SCM T::translator_description () const                                \
index 96097e4cf0058bb8205ad83d9159ba88ce6d5a7e..e8380324fbe40f84311c5592c4100046c99e7194 100644 (file)
@@ -582,8 +582,8 @@ ly_rational2scm (Rational r)
 {
   if (r.is_infinity ())
     {
-      if (r > Rational(0))
-       return scm_inf ();
+      if (r > Rational (0))
+        return scm_inf ();
 
       return scm_difference (scm_inf (), SCM_UNDEFINED);
     }
@@ -598,17 +598,17 @@ ly_scm2rational (SCM r)
   if (scm_is_true (scm_inf_p (r)))
     {
       if (scm_is_true (scm_positive_p (r)))
-       {
-         Rational r;
-         r.set_infinite (1);
-         return r;
-       }
+        {
+          Rational r;
+          r.set_infinite (1);
+          return r;
+        }
       else
-       {
-         Rational r;
-         r.set_infinite (-1);
-         return r;
-       }
+        {
+          Rational r;
+          r.set_infinite (-1);
+          return r;
+        }
     }
 
   return Rational (scm_to_int64 (scm_numerator (r)),
@@ -628,8 +628,8 @@ bool
 ly_is_rational (SCM n)
 {
   return (scm_is_real (n)
-         && (scm_is_true (scm_exact_p (n))
-             || scm_is_true (scm_inf_p (n))));
+          && (scm_is_true (scm_exact_p (n))
+              || scm_is_true (scm_inf_p (n))));
 }
 
 SCM
index 2d81e8075e6c554c8544cfe76a82b0d61f78ab17..e7ed72f093807c0c2be7533eea62736c16c8099d 100644 (file)
@@ -29,14 +29,14 @@ LY_DEFINE (ly_make_moment, "ly:make-moment",
            " a pair of rationals (@var{m},@tie{}@var{g}), where @var{m} is"
            " the timing for the main notes, and @var{g} the timing for"
            " grace notes.  In absence of grace notes, @var{g}@tie{}is zero.\n"
-          "\n"
-          "For compatibility reasons, it is possible to write two"
-          " numbers specifying numerator and denominator instead of"
+           "\n"
+           "For compatibility reasons, it is possible to write two"
+           " numbers specifying numerator and denominator instead of"
            " the rationals.  These forms cannot be mixed, and the two-"
-          "argument form is disambiguated by the sign of the second"
-          " argument: if it is positive, it can only be a denominator"
-          " and not a grace timing."
-)
+           "argument form is disambiguated by the sign of the second"
+           " argument: if it is positive, it can only be a denominator"
+           " and not a grace timing."
+          )
 {
   LY_ASSERT_TYPE (ly_is_rational, m, 1);
   if (SCM_UNBNDP (g))
@@ -46,14 +46,14 @@ LY_DEFINE (ly_make_moment, "ly:make-moment",
     {
       LY_ASSERT_TYPE (ly_is_rational, g, 2);
       if (scm_is_true (scm_positive_p (g)))
-       {
-         LY_ASSERT_TYPE (scm_is_integer, m, 1);
-         LY_ASSERT_TYPE (scm_is_integer, g, 2);
-         return Moment (Rational (scm_to_int64 (m),
-                                  scm_to_int64 (g))).smobbed_copy ();
-       }
+        {
+          LY_ASSERT_TYPE (scm_is_integer, m, 1);
+          LY_ASSERT_TYPE (scm_is_integer, g, 2);
+          return Moment (Rational (scm_to_int64 (m),
+                                   scm_to_int64 (g))).smobbed_copy ();
+        }
       return Moment (ly_scm2rational (m),
-                    ly_scm2rational (g)).smobbed_copy ();
+                     ly_scm2rational (g)).smobbed_copy ();
     }
 
   LY_ASSERT_TYPE (scm_is_integer, m, 1);
@@ -173,7 +173,6 @@ LY_DEFINE (ly_moment_main, "ly:moment-main",
   return ly_rational2scm (unsmob_moment (mom)->main_part_);
 }
 
-
 LY_DEFINE (ly_moment_main_numerator, "ly:moment-main-numerator",
            1, 0, 0, (SCM mom),
            "Extract numerator from main timing.")
index cc814c074b456256eeb8f089781957c178091a46..7a38d7af41d84851151b65e2c5bcbdaa4cc4e010 100644 (file)
@@ -234,7 +234,7 @@ transpose_mutable (SCM alist, Pitch delta)
             m->transpose (delta);
         }
       else if (prop == ly_symbol2scm ("elements")
-              || prop == ly_symbol2scm ("articulations"))
+               || prop == ly_symbol2scm ("articulations"))
         transpose_music_list (val, delta);
       else if (prop == ly_symbol2scm ("pitch-alist")
                && scm_is_pair (val))
@@ -280,7 +280,7 @@ Music::to_event (Context *c) const
     programming_error ("Not a music type");
 
   Stream_event *e = new Stream_event (c->make_event_class (class_name),
-                                     mutable_property_alist_);
+                                      mutable_property_alist_);
   Moment length = get_length ();
   if (length.to_bool ())
     e->set_property ("length", length.smobbed_copy ());
index b6185e4458deced9394837376ee02d515cfbea57..3ab245ca5e84591fd924d65cf3334f5b7082e481 100644 (file)
@@ -178,7 +178,7 @@ check_meshing_chords (Grob *me,
   full_collide = full_collide || (close_half_collide
                                   && distant_half_collide)
                  || ( distant_half_collide // like full_ for wholes and longer
-                     && (up_ball_type <= 0 || down_ball_type <= 0));
+                      && (up_ball_type <= 0 || down_ball_type <= 0));
 
   /* Determine which chord goes on the left, and which goes right.
      Up-stem usually goes on the right, but if chords just 'touch' we can put
@@ -353,8 +353,8 @@ check_meshing_chords (Grob *me,
           Grob *stem = unsmob_grob (head_down->get_object ("stem"));
           extract_grob_set (stem, "note-heads", heads);
           for (vsize i = 0; i < heads.size (); i++)
-            unsmob_grob (heads[i]->get_object ("dot"))
-            ->set_property ("direction", scm_from_int (dir));
+            if (Grob *dot = unsmob_grob (heads[i]->get_object ("dot")))
+              dot->set_property ("direction", scm_from_int (dir));
         }
     }
 
index 018ef9cff390b4fa9e1b68e9ec0677d22a523b20..213864462fbfcca8f2af61ee8cfbf5ecd5469666 100644 (file)
@@ -55,7 +55,7 @@ One_line_page_breaking::solve ()
     {
       if (Paper_score *ps = system_specs_[i].pscore_)
         {
-          vector<Grob*> cols = ps->root_system ()->used_columns ();
+          vector<Grob *> cols = ps->root_system ()->used_columns ();
 
           // No indent, "infinite" line width, ragged.
           Column_x_positions pos = get_line_configuration (cols, numeric_limits<Real>::max (), 0, true);
index 68f870b2dc7f19959e11ea859d036e49da009d8b..7c9967055146637364524d559b0e11095482e739 100644 (file)
@@ -592,7 +592,7 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
       if (sky)
         first_skyline.merge ((*sky)[UP]);
       first_skyline.shift (indent);
-      minimum_distance = first_skyline.distance (bottom_skyline_) - bottom_loose_baseline_ ;
+      minimum_distance = first_skyline.distance (bottom_skyline_) - bottom_loose_baseline_;
     }
   bottom_skyline_ = down_skyline;
   elements_.push_back (Element (elts, minimum_offsets, minimum_distance, padding));
index 3dc07fa3d5c68e5295ebe3c6b1353c383088fa58..44b99db2adbe51f0c6c34e2ab521c5d23a2cbfac 100644 (file)
@@ -68,9 +68,9 @@ internal_ly_parse_scm (Parse_start *ps)
             form = scm_list_1 (c);
         }
       if (multiple)
-       form = scm_list_3 (ly_symbol2scm ("apply"),
-                          ly_symbol2scm ("values"),
-                          form);
+        form = scm_list_3 (ly_symbol2scm ("apply"),
+                           ly_symbol2scm ("values"),
+                           form);
       return scm_cons (form, make_input (ps->start_location_));
     }
 
index 06449fb5dca228c13dd6a9daa0269cbce80c400e..c0c9acc89306268535dca2c3a13b2fc56e0b4d54 100644 (file)
@@ -224,8 +224,8 @@ Part_combine_iterator::kill_mmrest (int in)
   if (!mmrest_event_)
     {
       mmrest_event_ = new Stream_event
-       (handles_[in].get_context ()->make_event_class
-        (ly_symbol2scm ("multi-measure-rest-event")));
+      (handles_[in].get_context ()->make_event_class
+       (ly_symbol2scm ("multi-measure-rest-event")));
       mmrest_event_->set_property ("duration", SCM_EOL);
       mmrest_event_->unprotect ();
     }
@@ -261,7 +261,7 @@ Part_combine_iterator::unisono (bool silent)
           if (!unisono_event_)
             {
               unisono_event_ = new Stream_event
-               (out->make_event_class (ly_symbol2scm ("unisono-event")));
+              (out->make_event_class (ly_symbol2scm ("unisono-event")));
               unisono_event_->unprotect ();
             }
 
@@ -290,8 +290,8 @@ Part_combine_iterator::solo1 ()
           if (!solo_one_event_)
             {
               solo_one_event_ = new Stream_event
-               (first_iter_->get_outlet ()->make_event_class
-                (ly_symbol2scm ("solo-one-event")));
+              (first_iter_->get_outlet ()->make_event_class
+               (ly_symbol2scm ("solo-one-event")));
               solo_one_event_->unprotect ();
             }
 
@@ -317,8 +317,8 @@ Part_combine_iterator::solo2 ()
           if (!solo_two_event_)
             {
               solo_two_event_ = new Stream_event
-               (second_iter_->get_outlet ()->make_event_class
-                (ly_symbol2scm ("solo-two-event")));
+              (second_iter_->get_outlet ()->make_event_class
+               (ly_symbol2scm ("solo-two-event")));
               solo_two_event_->unprotect ();
             }
 
index 5e5e7ced8cfa0650b29a81b80f42cd7487ce7f8a..123878b644b7e753e876af2f3ee18013e6f0547b 100644 (file)
@@ -83,9 +83,9 @@ Phrasing_slur_engraver::Phrasing_slur_engraver ()
 void
 Phrasing_slur_engraver::derived_mark () const
 {
-  for (vsize i=start_events_.size(); i--;)
+  for (vsize i = start_events_.size (); i--;)
     scm_gc_mark (start_events_[i]->self_scm ());
-  for (vsize i=stop_events_.size(); i--;)
+  for (vsize i = stop_events_.size (); i--;)
     scm_gc_mark (stop_events_[i]->self_scm ());
 }
 
@@ -203,7 +203,7 @@ Phrasing_slur_engraver::process_music ()
           for (vsize j = stop_events_.size (); --j > i;)
             {
               if (id == robust_scm2string (stop_events_[j]->get_property ("spanner-id"), ""))
-                stop_events_.erase (stop_events_.begin() + j);
+                stop_events_.erase (stop_events_.begin () + j);
             }
         }
       else
@@ -241,10 +241,11 @@ Phrasing_slur_engraver::process_music ()
 
               Stream_event *c = unsmob_stream_event (slurs_[j]->get_property ("cause"));
 
-              if (!c) {
-                slurs_[j]->programming_error ("phrasing slur without a cause");
-                continue;
-              }
+              if (!c)
+                {
+                  slurs_[j]->programming_error ("phrasing slur without a cause");
+                  continue;
+                }
 
               Direction slur_dir = to_dir (c->get_property ("direction"));
 
index f4231f06859ed305a70a6bdc73d2e0fabb3f6337..0433325523d9c9dbf4e20c9993fed55ee6308043 100644 (file)
@@ -105,7 +105,7 @@ LY_DEFINE (ly_pitch_notename, "ly:pitch-notename",
 }
 
 LY_DEFINE (ly_pitch_tones, "ly:pitch-tones",
-          1, 0, 0, (SCM pp),
+           1, 0, 0, (SCM pp),
            "Calculate the number of tones of@tie{}@var{pp} from"
            " middle@tie{}C as a rational number.")
 {
@@ -113,7 +113,6 @@ LY_DEFINE (ly_pitch_tones, "ly:pitch-tones",
   return ly_rational2scm (unsmob_pitch (pp)->tone_pitch ());
 }
 
-
 LY_DEFINE (ly_pitch_quartertones, "ly:pitch-quartertones",
            1, 0, 0, (SCM pp),
            "Calculate the number of quarter tones of@tie{}@var{pp} from"
index 413bfe5215d2b5c29e8b08e7799981071aa32bab..1018dc54f6efc762aab8e734cdd76f7e7c09b0b7 100644 (file)
@@ -124,12 +124,12 @@ Pure_from_neighbor_engraver::finalize ()
           for (vsize k = 0;
                k < need_pure_heights_from_neighbors[pos[j]].size ();
                k++)
-            if (!in_same_column(need_pure_heights_from_neighbors[pos[j]][k],
-                                pure_relevants_[i]))
+            if (!in_same_column (need_pure_heights_from_neighbors[pos[j]][k],
+                                 pure_relevants_[i]))
               Pointer_group_interface::add_grob
-                (need_pure_heights_from_neighbors[pos[j]][k],
-                 ly_symbol2scm ("neighbors"),
-                 pure_relevants_[i]);
+              (need_pure_heights_from_neighbors[pos[j]][k],
+               ly_symbol2scm ("neighbors"),
+               pure_relevants_[i]);
     }
 
   need_pure_heights_from_neighbors_.clear ();
index 6ebb7199940bb30d66765ec19b5bad54a0feb6ba..6d3234c6c6ce8b6145cfdf685729f1d35ddefdbd 100644 (file)
@@ -105,20 +105,17 @@ Repeat_acknowledge_engraver::process_music ()
         s = robust_scm2string (get_property ("doubleRepeatSegnoType"), ":|S|:");
       else // { segno, start }
         s = robust_scm2string (get_property ("startRepeatSegnoType"), ".S|:");
-    else
-      if (end) // { segno, end }
-        s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|S");
-      else // { segno }
-        s = robust_scm2string (get_property ("segnoType"), "S");
-  else
-    if (start)
-      if (end) // { start, end }
-        s = robust_scm2string (get_property ("doubleRepeatType"), ":|:");
-      else // { start }
-        s = robust_scm2string (get_property ("startRepeatType"), "|:");
-    else
-      if (end) // { end }
-        s = robust_scm2string (get_property ("endRepeatType"), ":|");
+    else if (end) // { segno, end }
+      s = robust_scm2string (get_property ("endRepeatSegnoType"), ":|S");
+    else // { segno }
+      s = robust_scm2string (get_property ("segnoType"), "S");
+  else if (start)
+    if (end) // { start, end }
+      s = robust_scm2string (get_property ("doubleRepeatType"), ":|:");
+    else // { start }
+      s = robust_scm2string (get_property ("startRepeatType"), "|:");
+  else if (end) // { end }
+    s = robust_scm2string (get_property ("endRepeatType"), ":|");
 
   /*
     TODO: line breaks might be allowed if we set whichBar to "".
index 8ba647e2019d8201d3698dbaa39cdd74f6671e90..e2b0db5ef2352e6e6d002259d90386bb97579bee 100644 (file)
@@ -149,7 +149,6 @@ Rest_collision::calc_positioning_done (SCM smob)
       for (LEFT_and_RIGHT (d))
         vector_sort (ordered_rests[d], rest_shift_less);
 
-
       for (LEFT_and_RIGHT (d))
         {
           if (ordered_rests[d].size () < 1)
@@ -250,19 +249,14 @@ Rest_collision::calc_positioning_done (SCM smob)
           Real y = dir * max (0.0,
                               -dir * restdim[-dir] + dir * notedim[dir] + minimum_dist);
 
-          int stafflines = Staff_symbol_referencer::line_count (me);
-          if (!stafflines)
-            {
-              programming_error ("no staff line count");
-              stafflines = 5;
-            }
-
           // move discretely by half spaces.
           int discrete_y = dir * int (ceil (y / (0.5 * dir * staff_space)));
 
+          Interval staff_span = Staff_symbol_referencer::staff_span (rest);
+          staff_span.widen (1);
           // move by whole spaces inside the staff.
-          if (fabs (Staff_symbol_referencer::get_position (rest)
-                    + discrete_y) < stafflines + 1)
+          if (staff_span.contains
+              (Staff_symbol_referencer::get_position (rest) + discrete_y))
             {
               discrete_y = dir * int (ceil (dir * discrete_y / 2.0) * 2.0);
             }
index 9057e45af1bd90deaf29c0419ac2a2b2233ee8a9..8e45405de278dbd4ea5040dfc3259c6a2164a112 100644 (file)
@@ -37,7 +37,6 @@ Rest::y_offset_callback (SCM smob)
 {
   Grob *me = unsmob_grob (smob);
   int duration_log = scm_to_int (me->get_property ("duration-log"));
-  int line_count = Staff_symbol_referencer::line_count (me);
   Real ss = Staff_symbol_referencer::staff_space (me);
 
   bool position_override = scm_is_number (me->get_property ("staff-position"));
@@ -69,7 +68,7 @@ Rest::y_offset_callback (SCM smob)
         make a semibreve rest hang from the next line,
         except for a single line staff
       */
-      if (duration_log == 0 && line_count > 1)
+      if (duration_log == 0 && Staff_symbol_referencer::line_count (me) > 1)
         pos += 2;
 
       /*
index 951c145ec83c65cee469f4cec50c6c1adafab3a5..b50122e8bb39df97cb7e33e1a6f9fcd642baa86e 100644 (file)
@@ -59,10 +59,10 @@ Rhythmic_music_iterator::process (Moment m)
           SCM unlistened = SCM_EOL;
           for (; scm_is_pair (arts); arts = scm_cdr (arts))
             {
-             SCM art = scm_car (arts);
+              SCM art = scm_car (arts);
 
               if (c->event_source ()->is_listened_class
-                 (unsmob_stream_event (art)->get_property ("class")))
+                  (unsmob_stream_event (art)->get_property ("class")))
                 listened = scm_cons (art, listened);
               else
                 unlistened = scm_cons (art, unlistened);
index 0a36aa10f2afb04439bab69b49c72263871e87ca..03f5a5c430667ca9783b9578c454202aa55d6859 100644 (file)
@@ -84,9 +84,9 @@ Slur_engraver::Slur_engraver ()
 void
 Slur_engraver::derived_mark () const
 {
-  for (vsize i=start_events_.size(); i--;)
+  for (vsize i = start_events_.size (); i--;)
     scm_gc_mark (start_events_[i]->self_scm ());
-  for (vsize i=stop_events_.size(); i--;)
+  for (vsize i = stop_events_.size (); i--;)
     scm_gc_mark (stop_events_[i]->self_scm ());
 }
 
@@ -204,7 +204,7 @@ Slur_engraver::process_music ()
           for (vsize j = stop_events_.size (); --j > i;)
             {
               if (id == robust_scm2string (stop_events_[j]->get_property ("spanner-id"), ""))
-                stop_events_.erase (stop_events_.begin() + j);
+                stop_events_.erase (stop_events_.begin () + j);
             }
         }
       else
@@ -242,10 +242,11 @@ Slur_engraver::process_music ()
 
               Stream_event *c = unsmob_stream_event (slurs_[j]->get_property ("cause"));
 
-              if (!c) {
-                slurs_[j]->programming_error ("slur without a cause");
-                continue;
-              }
+              if (!c)
+                {
+                  slurs_[j]->programming_error ("slur without a cause");
+                  continue;
+                }
 
               Direction slur_dir = to_dir (c->get_property ("direction"));
 
index d8b713265c7e79e60300bf25c8870ff5616b8a9f..e1025fa545c56c1c20ee0a476355b778229cf336 100644 (file)
@@ -595,8 +595,7 @@ Slur_score_state::move_away_from_staffline (Real y,
       * 2.0 / staff_space_;
 
   if (fabs (pos - my_round (pos)) < 0.2
-      && Staff_symbol_referencer::on_line (on_staff, (int) rint (pos))
-      && Staff_symbol_referencer::line_count (on_staff) - 1 >= rint (pos))
+      && Staff_symbol_referencer::on_staff_line (on_staff, (int) rint (pos)))
     y += 1.5 * staff_space_ * dir_ / 10;
 
   return y;
index eeff11bba7186a0d0360e886c959d0b93e2334c1..af2ea7137f0d9ab4dbddc9127d6dfc03f549e180 100644 (file)
@@ -328,7 +328,7 @@ Spanner::derived_mark () const
   for (LEFT_and_RIGHT (d))
     if (spanned_drul_[d])
       scm_gc_mark (spanned_drul_[d]->self_scm ());
-    ;
+  ;
 
   for (vsize i = broken_intos_.size (); i--;)
     scm_gc_mark (broken_intos_[i]->self_scm ());
index 66ee8002a76ca376410033e6a043c4c355dfec1f..1ca6a4dce1f57ad256f472bba2c0eda6a960a602 100644 (file)
@@ -52,10 +52,11 @@ protected:
 void
 Staff_symbol_engraver::derived_mark () const
 {
-  for (LEFT_and_RIGHT (d)) {
-    if (span_events_[d])
-      scm_gc_mark (span_events_[d]->self_scm ());
-  }
+  for (LEFT_and_RIGHT (d))
+    {
+      if (span_events_[d])
+        scm_gc_mark (span_events_[d]->self_scm ());
+    }
 }
 
 Staff_symbol_engraver::~Staff_symbol_engraver ()
index e2c3736f70d380147386b06847db5ee2849df594..f514b390957628461d0fa63940823086d09afdd8 100644 (file)
@@ -497,10 +497,10 @@ Tie_formatting_problem::generate_configuration (int pos, Direction dir,
         size.
 
        */
-      Interval staff_span =
-        Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
+      Interval staff_span
+        Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
       staff_span.widen (-1);
-      bool const within_staff = staff_span.contains(pos);
+      bool const within_staff = staff_span.contains (pos);
       if (head_positions_slice (columns[LEFT]).contains (pos)
           || head_positions_slice (columns[RIGHT]).contains (pos)
           || within_staff)
@@ -721,8 +721,8 @@ Tie_formatting_problem::score_configuration (Tie_configuration *conf) const
   Real top_y = tip_y + conf->dir_ * height;
   Real top_pos = 2 * top_y / details_.staff_space_;
   Real round_top_pos = rint (top_pos);
-  Interval staff_span =
-    Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
+  Interval staff_span
+    Staff_symbol_referencer::staff_span (details_.staff_symbol_referencer_);
   if (Staff_symbol_referencer::on_line (details_.staff_symbol_referencer_,
                                         int (round_top_pos))
       && staff_span[UP] * 0.5 > top_y)
index ad553e4229268800e94763b3d81de959213272c2..263817c7082fc82b724b9b765965a312487d85ea 100644 (file)
@@ -23,6 +23,7 @@
 #include "font-interface.hh"
 #include "international.hh"
 #include "output-def.hh"
+#include "staff-symbol.hh"
 #include "staff-symbol-referencer.hh"
 #include "text-interface.hh"
 #include "warn.hh"
@@ -57,8 +58,35 @@ Time_signature::print (SCM smob)
   else
     m = numbered_time_signature (me, n, d);
 
-  if (Staff_symbol_referencer::line_count (me) % 2 == 0)
-    m.translate_axis (Staff_symbol_referencer::staff_space (me) / 2, Y_AXIS);
+  /*
+    position the signature centred on the staff line
+    nearest to the middle of the staff
+  */
+  if (Grob *staff = Staff_symbol_referencer::get_staff_symbol (me))
+    {
+      std::vector<Real> const linepos = Staff_symbol::line_positions (staff);
+      if (!linepos.empty ())
+        {
+          Interval const span = Staff_symbol::line_span (staff);
+          Real const mid = span.center ();
+          Real pos = linepos.front ();
+          Real dist = fabs (pos - mid);
+          for (std::vector<Real>::const_iterator
+               i = linepos.begin (), e = linepos.end ();
+               ++i != e;)
+            {
+              double const d = fabs (*i - mid);
+              if (d < dist)
+                {
+                  pos = *i;
+                  dist = d;
+                }
+            }
+
+          m.translate_axis
+          (pos * Staff_symbol_referencer::staff_space (me) / 2, Y_AXIS);
+        }
+    }
 
   return m.smobbed_copy ();
 }
index d1c3c240a4a83fb7ae7fd28ff58cac68ecbca158..d6fb7855224349f018e762cc23aea1c13ed6cc14 100644 (file)
@@ -49,13 +49,15 @@ Tweak_engraver::acknowledge_grob (Grob_info info)
       for (SCM s = ev->get_property ("tweaks");
            scm_is_pair (s); s = scm_cdr (s))
         {
-         if (scm_is_pair (scm_caar (s))) {
-           if (SCM_UNBNDP (grobname))
-             grobname = scm_from_locale_symbol (info.grob ()->name ().c_str ());
-           if (scm_is_eq (scm_caaar (s), grobname))
-             info.grob ()->set_property (scm_cdaar (s), scm_cdar (s));
-         } else if (direct)
-           info.grob ()->set_property (scm_caar (s), scm_cdar (s));
+          if (scm_is_pair (scm_caar (s)))
+            {
+              if (SCM_UNBNDP (grobname))
+                grobname = scm_from_locale_symbol (info.grob ()->name ().c_str ());
+              if (scm_is_eq (scm_caaar (s), grobname))
+                info.grob ()->set_property (scm_cdaar (s), scm_cdar (s));
+            }
+          else if (direct)
+            info.grob ()->set_property (scm_caar (s), scm_cdar (s));
         }
     }
 }
index 7420db3ec1bbaffc8e0d8af5825ac9e6fe4250fd..deb0218bd08ebe92a4e710efe9f00979ed0c7862 100644 (file)
@@ -37,8 +37,7 @@ vaticana_brew_cauda (Grob *me,
                      Real blotdiameter)
 {
   bool on_staffline = Staff_symbol_referencer::on_line (me, pos);
-  int interspaces = Staff_symbol_referencer::line_count (me) - 1;
-  bool above_staff = pos > interspaces;
+  bool above_staff = pos > Staff_symbol_referencer::staff_span (me)[UP];
 
   if (delta_pitch > -1)
     {
index fdfa7add3c69ee58dc6c18b0a8ce47dfa447b5cf..ca3b77ba1d68248edfd71a3f52363fc24d4fcfa2 100644 (file)
   \consists "Tie_performer"
   \consists "Note_performer"
   \consists "Beam_performer"
+  autoBeaming = ##f  % needed for consistent melismata with engravers
   \consists "Slur_performer"
 }
 
   \consists "Tie_performer"
   \consists "Note_performer"
   \consists "Beam_performer"
+  autoBeaming = ##f  % needed for consistent melismata with engravers
   \consists "Slur_performer"
 }
 
   \consists "Tie_performer"
   \consists "Note_performer"
   \consists "Beam_performer"
+  autoBeaming = ##f  % needed for consistent melismata with engravers
   \consists "Slur_performer"
 }
 
 \context {
   \Voice
   \name TabVoice
+  autoBeaming = ##f  % needed for consistent melismata with engravers
 }
 
 \context {
   \name Score
 
   melismaBusyProperties = #default-melisma-properties
+  autoBeaming = ##t  % needed for consistent melismata with engravers
   instrumentName = #"bright acoustic"
   midiChannelMapping = #'staff
 
index aef132aee13bf06e7e5566c12bb793f74c4d6362..cad8da7fca4dc7468bc13c7c5e3d39798900701e 100644 (file)
@@ -6,13 +6,14 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.15.42\n"
+"Project-Id-Version: lilypond 2.15.95\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2012-08-02 18:31+0100\n"
+"POT-Creation-Date: 2012-08-11 14:29+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
@@ -1796,7 +1797,7 @@ msgstr ""
 msgid "cannot find or create: `%s'"
 msgstr ""
 
-#: custos.cc:88
+#: custos.cc:87
 #, c-format
 msgid "custos `%s' not found"
 msgstr ""
@@ -1843,6 +1844,13 @@ msgstr ""
 msgid "unterminated (de)crescendo"
 msgstr ""
 
+#. No explicit dynamic script events have occurred yet, but there is
+#. nevertheless a dynamic spanner.  Initialize last_volume_ to a
+#. value within the available range.
+#: dynamic-performer.cc:129
+msgid "(De)crescendo with unspecified starting volume in MIDI."
+msgstr ""
+
 #: episema-engraver.cc:75
 msgid "already have an episema"
 msgstr ""
@@ -2836,11 +2844,11 @@ msgstr ""
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr ""
 
-#: rest-collision.cc:158 rest-collision.cc:272
+#: rest-collision.cc:157 rest-collision.cc:266
 msgid "too many colliding rests"
 msgstr ""
 
-#: rest.cc:193
+#: rest.cc:192
 #, c-format
 msgid "rest `%s' not found"
 msgstr ""
@@ -2991,7 +2999,7 @@ msgstr ""
 
 #. If there is no such symbol, we default to the numbered style.
 #. (Here really with a warning!)
-#: time-signature.cc:94
+#: time-signature.cc:122
 #, c-format
 msgid "time signature symbol `%s' not found; reverting to numbered style"
 msgstr ""
@@ -3058,11 +3066,11 @@ msgstr ""
 msgid "Vaticana_ligature_engraver: setting `spacing-increment = %f': ptr =%ul"
 msgstr ""
 
-#: vaticana-ligature.cc:95
+#: vaticana-ligature.cc:94
 msgid "flexa-height undefined; assuming 0"
 msgstr ""
 
-#: vaticana-ligature.cc:100
+#: vaticana-ligature.cc:99
 msgid "ascending vaticana style flexa"
 msgstr ""
 
@@ -3083,147 +3091,142 @@ msgstr ""
 msgid "giving up"
 msgstr ""
 
-#: parser.yy:162 parser.yy:176 /home/gperciva/src/lilypond/lily/parser.yy:162
-#: /home/gperciva/src/lilypond/lily/parser.yy:176
+#: parser.yy:161 parser.yy:175
 msgid "Too much lookahead"
 msgstr ""
 
-#: parser.yy:835 parser.yy:1256 /home/gperciva/src/lilypond/lily/parser.yy:835
-#: /home/gperciva/src/lilypond/lily/parser.yy:1256
+#: parser.yy:835 parser.yy:1284
 msgid "not a context mod"
 msgstr ""
 
-#: parser.yy:1027 /home/gperciva/src/lilypond/lily/parser.yy:1027
+#: parser.yy:1027
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:1051 /home/gperciva/src/lilypond/lily/parser.yy:1051
+#: parser.yy:1051
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1176 /home/gperciva/src/lilypond/lily/parser.yy:1176
+#: parser.yy:1204
 msgid "Ignoring non-music expression"
 msgstr ""
 
-#: parser.yy:2016 /home/gperciva/src/lilypond/lily/parser.yy:2016
+#: parser.yy:2044
 msgid "only \\consists and \\remove take non-string argument."
 msgstr ""
 
-#: parser.yy:2029 /home/gperciva/src/lilypond/lily/parser.yy:2029
+#: parser.yy:2057
 msgid "Grob name should be alphanumeric"
 msgstr ""
 
-#: parser.yy:2233 /home/gperciva/src/lilypond/lily/parser.yy:2233
+#: parser.yy:2261
 msgid "not a rhythmic event"
 msgstr ""
 
-#: parser.yy:2329 parser.yy:2334
-#: /home/gperciva/src/lilypond/lily/parser.yy:2329
-#: /home/gperciva/src/lilypond/lily/parser.yy:2334
+#: parser.yy:2357 parser.yy:2362
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:2449 /home/gperciva/src/lilypond/lily/parser.yy:2449
+#: parser.yy:2477
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:2609 parser.yy:2653
-#: /home/gperciva/src/lilypond/lily/parser.yy:2609
-#: /home/gperciva/src/lilypond/lily/parser.yy:2653
+#: parser.yy:2637 parser.yy:2681
 #, c-format
 msgid "not a duration: %d"
 msgstr ""
 
-#: parser.yy:2772 /home/gperciva/src/lilypond/lily/parser.yy:2772
+#: parser.yy:2800
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:2827 /home/gperciva/src/lilypond/lily/parser.yy:2827
+#: parser.yy:2855
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: parser.yy:3087 /home/gperciva/src/lilypond/lily/parser.yy:3087
+#: parser.yy:3115
 msgid "not a markup"
 msgstr ""
 
-#: lexer.ll:224
+#: lexer.ll:218
 msgid "stray UTF-8 BOM encountered"
 msgstr ""
 
-#: lexer.ll:227
+#: lexer.ll:221
 msgid "Skipping UTF-8 BOM"
 msgstr ""
 
-#: lexer.ll:285
+#: lexer.ll:279
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr ""
 
-#: lexer.ll:302
+#: lexer.ll:296
 msgid "quoted string expected after \\version"
 msgstr ""
 
-#: lexer.ll:306
+#: lexer.ll:300
 msgid "quoted string expected after \\sourcefilename"
 msgstr ""
 
-#: lexer.ll:310
+#: lexer.ll:304
 msgid "integer expected after \\sourcefileline"
 msgstr ""
 
-#: lexer.ll:333
+#: lexer.ll:327
 msgid "\\maininput not allowed outside init files"
 msgstr ""
 
-#: lexer.ll:357
+#: lexer.ll:351
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr ""
 
-#: lexer.ll:383
+#: lexer.ll:377
 msgid "string expected after \\include"
 msgstr ""
 
-#: lexer.ll:393
+#. backup rule
+#: lexer.ll:387
 msgid "end quote missing"
 msgstr ""
 
-#: lexer.ll:551
+#: lexer.ll:558
 msgid "Brace found at end of lyric.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:662
+#: lexer.ll:672
 msgid "Brace found at end of markup.  Did you forget a space?"
 msgstr ""
 
-#: lexer.ll:674
+#: lexer.ll:684
 msgid "EOF found inside a comment"
 msgstr ""
 
-#: lexer.ll:770
+#: lexer.ll:782
 #, c-format
 msgid "invalid character: `%s'"
 msgstr ""
 
-#: lexer.ll:881
+#: lexer.ll:903 lexer.ll:904
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr ""
 
-#: lexer.ll:1164
+#: lexer.ll:1186 lexer.ll:1187
 msgid "non-UTF-8 input"
 msgstr ""
 
-#: lexer.ll:1208
+#: lexer.ll:1230 lexer.ll:1231
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr ""
 
-#: lexer.ll:1209
+#: lexer.ll:1231 lexer.ll:1232
 msgid "consider updating the input with the convert-ly script"
 msgstr ""
 
-#: lexer.ll:1215
+#: lexer.ll:1237 lexer.ll:1238
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr ""
index ae97dbaf86ffada4614241493a3f11e6507dbd93..b412ab3269412a5a4809a10ea855b4c0b1adba1d 100644 (file)
           (fallbackval (ly:modules-lookup (list header) fallbackvar))
           (val (if overrideval overrideval fallbackval)))
       (if val
-         (format port "/~a (~a)\n" field (metadata-encode (markup->string val))))))
+         (format port "/~a (~a)\n" field (metadata-encode (markup->string val (list header)))))))
   (display "[ " port)
   (metadata-lookup-output 'pdfcomposer 'composer "Author")
   (format port "/Creator (LilyPond ~a)\n" (lilypond-version))
index cd734b2ecf34616ac1e8aa4983fb78f531f1a031..a6645dc762d61024ae9cfeca770b9c03970a64de 100644 (file)
@@ -821,6 +821,8 @@ a fret-indication list with the appropriate values"
            (case (car (string->list (substring test-string 0 1)))
              ((#\s) (let ((size (get-numeric-from-key test-string)))
                       (set! props (prepend-alist-chain 'size size props))))
+             ((#\t) (let ((th (get-numeric-from-key test-string)))
+                      (set! props (prepend-alist-chain 'thickness th props))))
              ((#\f) (let* ((finger-code (get-numeric-from-key test-string))
                            (finger-id (case finger-code
                                         ((0) 'none)
@@ -1029,8 +1031,9 @@ spaces).
 Default:@tie{}1.
 
 @item
-@code{t:}@var{number} -- Set the line thickness (in staff spaces).
-Default:@tie{}0.05.
+@code{t:}@var{number} -- Set the line thickness (relative to normal
+line thickness).
+Default:@tie{}0.5.
 
 @item
 @code{h:}@var{number} -- Set the height of the diagram in frets.
index f402611d32434e5a2c9439069c14631b98b405f7..31bbaeeb420bb2d76373fb7d3a0551e40e9739eb 100644 (file)
@@ -79,7 +79,8 @@ Example:
 
 ;;; convert a full markup object to an approximate pure string representation
 
-(define-public (markup->string m)
+(define-public (markup->string m . argscopes)
+(let* ((scopes (if (pair? argscopes) (car argscopes) '())))
   ;; markup commands with one markup argument, formatting ignored
   (define markups-first-argument '(list
                                    bold-markup box-markup caps-markup dynamic-markup finger-markup
@@ -105,9 +106,9 @@ Example:
                                     translate-scaled-markup with-url-markup scale-markup ))
 
   ;; helper functions to handle string cons like string lists
-  (define (markup-cons->string-cons c)
-    (if (not (pair? c)) (markup->string c)
-        (cons (markup->string (car c)) (markup-cons->string-cons (cdr c)))))
+  (define (markup-cons->string-cons c scopes)
+    (if (not (pair? c)) (markup->string c scopes)
+        (cons (markup->string (car c) scopes) (markup-cons->string-cons (cdr c) scopes))))
   (define (string-cons-join c)
     (if (not (pair? c)) c
         (string-join (list (car c) (string-cons-join (cdr c))) "")))
@@ -115,24 +116,36 @@ Example:
   (cond
    ((string? m) m)
    ((null? m) "")
+   ((not (pair? m)) "")
 
    ;; handle \concat (string-join without spaces)
    ((and (pair? m) (equal? (car m) concat-markup))
-    (string-cons-join (markup-cons->string-cons (cadr m))) )
+    (string-cons-join (markup-cons->string-cons (cadr m) scopes)) )
 
    ;; markup functions with the markup as first arg
    ((member (car m) (primitive-eval markups-first-argument))
-    (markup->string (cadr m)))
+    (markup->string (cadr m) scopes))
 
    ;; markup functions with markup as second arg
    ((member (car m) (primitive-eval markups-second-argument))
-    (markup->string (cddr m)))
+    (markup->string (cddr m) scopes))
+
+   ;; fromproperty-markup reads property values from the header block:
+   ((equal? (car m) fromproperty-markup)
+    (let* ((varname (symbol->string (cadr m)))
+           ;; cut off the header: prefix from the variable name:
+           (newvarname (if (string-prefix? "header:" varname) (substring varname 7) varname))
+           (var (string->symbol newvarname))
+           (mod (make-module 1)))
+      ;; Prevent loops by temporarily clearing the variable we have just looked up
+      (module-define! mod var "")
+      (markup->string (ly:modules-lookup scopes var) (cons mod scopes))))
 
    ;; ignore all other markup functions
    ((markup-function? (car m)) "")
 
    ;; handle markup lists
    ((list? m)
-    (string-join (map markup->string m) " "))
+    (string-join (map (lambda (mm) (markup->string mm scopes)) m) " "))
 
-   (else "ERROR, unable to extract string from markup")))
+   (else "ERROR, unable to extract string from markup"))))
index c7e02ceb844672ff738aa387fced648f59f69899..62d5afbfbd28e41e70a2b6c6e96cb0d35ee56f4b 100644 (file)
@@ -320,11 +320,11 @@ def make_download_source(name, vstring, version, lang):
 
 def make_all_downloads(macroName, version):
     make_download("download"+macroName+"LinuxNormal", "linux-x86/",
-        "linux-x86.sh",    version, "1", "Linux x86")
+        "linux-x86.sh",    version, "1", "GNU/Linux x86")
     make_download("download"+macroName+"LinuxBig", "linux-64/",
-        "linux-64.sh", version, "1", "Linux 64")
+        "linux-64.sh", version, "1", "GNU/Linux 64")
     make_download("download"+macroName+"LinuxPPC", "linux-ppc/",
-        "linux-ppc.sh", version, "1", "Linux PPC")
+        "linux-ppc.sh", version, "1", "GNU/Linux PPC")
 
     make_download("download"+macroName+"FreeBSDNormal", "freebsd-x86/",
         "freebsd-x86.sh", version, "1", "FreeBSD i386")