]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge commit 'b9d3aec07415ad5e7ad024aa7d73e5c5bfabc82d' into translation
authorDavid Kastrup <dak@gnu.org>
Thu, 7 Nov 2013 11:19:52 +0000 (12:19 +0100)
committerDavid Kastrup <dak@gnu.org>
Thu, 7 Nov 2013 11:19:52 +0000 (12:19 +0100)
This is the last common commit between master and stable/2.18

29 files changed:
Documentation/changes.tely
Documentation/web/news-front.itexi
Documentation/web/news.itexi
VERSION
input/regression/bend-bound.ly [new file with mode: 0644]
input/regression/cadenza-grace-autobeam.ly [new file with mode: 0644]
input/regression/metronome-mark-formatter.ly [new file with mode: 0644]
input/regression/offsets.ly
input/regression/page-spacing-nonstaff-lines-and-markup.ly
lily/axis-group-engraver.cc
lily/axis-group-interface-scheme.cc
lily/axis-group-interface.cc
lily/default-bar-line-engraver.cc
lily/page-layout-problem.cc
lily/parser.yy
lily/text-interface.cc
lily/timing-translator.cc
lily/vertical-align-engraver.cc
ly/music-functions-init.ly
ly/property-init.ly
po/lilypond.pot
python/convertrules.py
scm/define-context-properties.scm
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/music-functions.scm
scm/output-lib.scm
scm/translation-functions.scm
stepmake/stepmake/po-targets.make

index 01c5e2d48e2107053e6b93561c6bdea49c55fbf1..909d8e62d26735e78f7289f549296267b3fa5def 100644 (file)
@@ -61,6 +61,40 @@ which scares away people.
 
 @end ignore
 
+@item
+Several articulations can be put into a single variable or
+returned from an event function:
+
+@lilypond[verbatim,quote]
+sempreStacc = -. ^\markup \italic sempre
+\relative { c''4\sempreStacc c c c }
+@end lilypond
+
+@item
+The baseline of score markups is now taken from the reference
+point (usually the middle of the staff) of the first bottom system
+rather than the top of the bounding rectangle.  The following
+@lilypond[verbatim,quote]
+\markup {
+  violin: \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello: \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
+}
+@end lilypond
+previously looked like
+@lilypond[quote]
+\markup {
+  violin: \general-align #Y #UP
+          \score { \new Staff { <g d' a' e''>1 }
+                   \layout { indent=0 } } ,
+  cello:  \general-align #Y #UP
+          \score { \new Staff { \clef "bass" <c, g, d a> }
+                  \layout { indent=0 } }
+}
+@end lilypond
+without a reliable way to get both scores to line up.
+
 @item
 LilyPond no longer automatically infers a @samp{\defaultchild}
 context in a context definition with @samp{\accepts} clauses.  Any
index 1b4e0cf6f2af9c19042c5e91b02536aa9c44e1ce..8d45279fb857c7aee23067d83d36de39f509ca76 100644 (file)
@@ -9,13 +9,17 @@
 @c used for news about the upcoming release; see CG 10.2
 
 @newsItem
-@subsubheading LilyPond 2.17.29 released!  @emph{October 20, 2013}
-
-We are happy to announce the release of LilyPond 2.17.29.  This
-release contains the usual number of bugfixes and enhancements, and contains
-some work in progress.  You will have access to the very latest features, but
-some may be incomplete, and you may encounter bugs and crashes.  If you require
-a stable version of Lilypond, we recommend using the 2.16 version.
+@subsubheading LilyPond 2.17.95 released!  @emph{November 3, 2013}
+
+We are excited to announce the release of LilyPond@tie{}2.17.95 as
+beta release for the upcoming stable release@tie{}2.18.  The
+developers are still busy finding solutions for some last-minute
+problems, but the release is supposed to be feature-complete, the
+documentation to be accurate, and no important issues to be
+overlooked.  For upgrading the syntax of your input files to the
+latest version, see @rprogram{Updating files with convert-ly}.
+Please test this release and report back any problems, see
+@rweb{Bug reports}.
 
 @newsEnd
 
index 20bbdb7c42c16685a13cb845ed2a051ac7a3bbe5..9a548e02d54e96d32a865527d3ed5df0b29ceacd 100644 (file)
@@ -26,6 +26,17 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subsubheading LilyPond 2.17.29 released!  @emph{October 20, 2013}
+
+We are happy to announce the release of LilyPond 2.17.29.  This
+release contains the usual number of bugfixes and enhancements, and contains
+some work in progress.  You will have access to the very latest features, but
+some may be incomplete, and you may encounter bugs and crashes.  If you require
+a stable version of Lilypond, we recommend using the 2.16 version.
+
+@newsEnd
+
 @newsItem
 @subsubheading LilyPond 2.17.28 released!  @emph{October 6, 2013}
 
diff --git a/VERSION b/VERSION
index a7174eb13775fdd6a585a636dc9c9bc9a5426293..e2867ac71cac4a1c81c8093519f22c08cfb56bf5 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=17
-PATCH_LEVEL=30
+PATCH_LEVEL=96
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.16.2
-VERSION_DEVEL=2.17.29
+VERSION_DEVEL=2.17.95
diff --git a/input/regression/bend-bound.ly b/input/regression/bend-bound.ly
new file mode 100644 (file)
index 0000000..bceb105
--- /dev/null
@@ -0,0 +1,23 @@
+\version "2.17.30"
+
+\header {
+  texidoc = "Bends should not be effected by the full width of a
+@code{NonMusicalPaperColumn}. The bends should have identical X
+spans in the two examples.
+"
+}
+
+music = \repeat unfold 16 { c''4\bendAfter #-4 }
+sixteens = \repeat unfold 64 { c'16 }
+
+\new Score {
+  << \music \sixteens >>
+}
+
+\new Score \with {
+  currentBarNumber = #200
+  barNumberVisibility = #(every-nth-bar-number-visible 1)
+  \override BarNumber.break-visibility = #end-of-line-invisible
+} {
+  << \music \sixteens >>
+}
diff --git a/input/regression/cadenza-grace-autobeam.ly b/input/regression/cadenza-grace-autobeam.ly
new file mode 100644 (file)
index 0000000..8340d26
--- /dev/null
@@ -0,0 +1,21 @@
+\version "2.17.30"
+
+\header {
+
+  texidoc = "A grace note after @code{\\cadenzaOff} does not keep
+  autobeaming from resuming properly."
+
+}
+
+\layout { ragged-right = ##t }
+
+\relative c' {
+  e8 e e e e e e e
+  \cadenzaOn <>^\markup \typewriter "\\cadenzaOn"
+  e e e e e e e e
+  \cadenzaOff
+  \bar "|"
+  <>^\markup \typewriter "\\cadenzaOff"
+  \grace f8
+  e e e e e e e e
+}
diff --git a/input/regression/metronome-mark-formatter.ly b/input/regression/metronome-mark-formatter.ly
new file mode 100644 (file)
index 0000000..480429f
--- /dev/null
@@ -0,0 +1,108 @@
+\version "2.17.27"
+
+\header {
+  texidoc = "@code{metronomeMarkFormatter} supports
+all note head styles and flags styles. Setting @code{font-name} for
+@code{MetronomeMark} does not disturb the glyphs for note-head and flag.
+"
+}
+
+\paper {
+        ragged-right = ##f
+        indent = 30
+}
+
+mus =
+\relative c'' {
+        \tempo "Allegro" 8=120-140
+        a8 b c d a b c d
+        \override Score.MetronomeMark.font-name = "Times New Roman"
+        \tempo "Allegro" 8=140
+        a b c d a b c d
+}
+
+%% Some Examples:
+\score {
+  \new Staff
+  \with {
+          instrumentName = "default"
+  }
+  \mus
+  \layout {}
+}
+
+\score {
+  \new Staff
+  \with {
+          instrumentName =
+            \markup \column { "default-note-head" "old-straight-flag" }
+  }
+  \mus
+  \layout {
+    \context {
+      \Score
+      \override MetronomeMark.flag-style = #'old-straight-flag
+    }
+  }
+}
+
+\score {
+  \new Staff
+  \with {
+          instrumentName =
+            \markup \column { "default-note-head" "modern-straight-flag" }
+  }
+  \mus
+  \layout {
+    \context {
+      \Score
+      \override MetronomeMark.flag-style = #'modern-straight-flag
+    }
+  }
+}
+
+\score {
+  \new Staff
+  \with {
+          instrumentName =
+            \markup \column { "default-note-head" "flat-flag" }
+  }
+  \mus
+  \layout {
+    \context {
+      \Score
+      \override MetronomeMark.flag-style = #'flat-flag
+    }
+  }
+}
+
+\score {
+  \new Staff
+  \with {
+          instrumentName =
+            \markup \column { "diamond-note-head" "modern-straight-flag" }
+  }
+  \mus
+  \layout {
+    \context {
+      \Score
+      \override MetronomeMark.style = #'diamond
+      \override MetronomeMark.flag-style = #'modern-straight-flag
+    }
+  }
+}
+
+\score {
+  \new MensuralStaff
+  \with {
+          instrumentName =
+            \markup \column { "mensural-note-head" "mensural-flag" }
+  }
+  \mus
+  \layout {
+    \context {
+      \Score
+      \override MetronomeMark.style = #'mensural
+    }
+  }
+}
index 53489724036b8cabc7a89217f149cf98ed8d2b9f..878664e4dd114afafc76f392e2709a1d72def3ce 100644 (file)
@@ -1,4 +1,4 @@
-\version "2.17.28"
+\version "2.17.29"
 
 \header {
   texidoc = "The @code{\\offset} command may be used to displace various properties
@@ -18,44 +18,45 @@ default appearance.  The command is demonstrated as a tweak and as an override."
   %% ARPEGGIO %%
   % default
   <c e g b>1\arpeggio
-  <c e g b>1-\offset #'positions #'(-1 . 1) \arpeggio
+  <c e g b>1-\offset positions #'(-1 . 1) \arpeggio
   \bar "||"
 
   %% BREATHING SIGN %%
   % default
   c1 \breathe
   c1
-  \once \offset #'Y-offset #1 BreathingSign
+  \once \offset Y-offset 1 BreathingSign
   \breathe
   \bar "||"
 
   %% DYNAMICS %%
   % default
   c1\f
-  \once \offset #'X-offset #-1 DynamicText
+  \once \offset X-offset #-1 DynamicText
   c1\f
   % DynamicLineSpanner
-  c1-\offset #'padding #1 \f
+  \once \offset padding 1 DynamicLineSpanner
+  c1\f
   \bar "||"
 
   %% BEAMS %%
   % default
   c'8 d e f
-  \once \offset #'positions #'(-1 . -1) Voice.Beam
+  \once \offset positions #'(-1 . -1) Voice.Beam
   c8 d e f
   % same effect as an offset of '(-2 . -2)
-  \once \offset #'positions #-2 Beam
+  \once \offset positions #-2 Beam
   c8 d e f
   \override Beam.breakable = ##t
-  c8-\offset #'positions #'((-1 . -3) (-3 . -1)) [ d e f
+  c8-\offset positions #'((-1 . -3) (-3 . -1)) [ d e f
   \break
-  g8 f e d] c-\offset #'beam-thickness #0.48 [ d e f]
+  g8 f e d] c-\offset beam-thickness 0.48 [ d e f]
   \bar "||"
 
   %% TEXT SPANNERS %%
   c4\startTextSpan d e f\stopTextSpan
-  \once \offset #'dash-fraction #'(0.1 0.3) TextSpanner
-  \once \offset #'staff-padding #'(1.0 2.0) TextSpanner
+  \once \offset dash-fraction #'(0.1 0.3) TextSpanner
+  \once \offset staff-padding #'(1.0 2.0) TextSpanner
   c4\startTextSpan d e f
   \break
   c4 d e f\stopTextSpan
@@ -63,11 +64,19 @@ default appearance.  The command is demonstrated as a tweak and as an override."
 
   %% SLURS %%
   % this duplicates the effect of the \shape command
-  \offset #'control-points #'(
+  \offset control-points #'(
    ((0 . 0) (0 . 1) (0 . 2) (0 . 1))
    ((1 . 0) (0 . 4) (0 . 4) (0 . 0))
    ) Slur
-  c4-\offset #'line-thickness #'(0 10) ( d e f
+  c4-\offset line-thickness #'(0 10) ( d e f
   \break
   c4 d e f)
+  \bar "||"
+
+  %% ACCIDENTAL, STEM %%
+  % this illustrates use of \offset as a directed tweak
+  cis2
+  \offset AccidentalPlacement.right-padding 0.5
+  \offset Stem.thickness 4.0
+  cis!2
 }
index 1e26dfe31749b194789f76703c2e78277c5a8c4a..1f7f6ef3508a80bdbac9657498788dad82258d37 100644 (file)
@@ -16,6 +16,12 @@ the page layout engine."
      \new Lyrics \lyricsto "asdf" \lyricmode { a b c d }
   >>
   }
-  \markup "blah blah blah"
+  \markup "next song"
+  \score {
+    <<
+      \new Lyrics \lyricmode {la1 la }
+      \new Staff \new Voice { a'1 a'1 }
+  >>
+  }
 }
 
index a19ab52af89dcd0d52f74ec3e9e2922308322c89..295ba8b403284ec2d270dfc0435f27c0b855b01d 100644 (file)
 class Axis_group_engraver : public Engraver
 {
 protected:
+  bool active_;
   Spanner *staffline_;
   SCM interesting_;
   vector<Grob *> elts_;
   void process_music ();
+  virtual void initialize ();
   virtual void finalize ();
   DECLARE_ACKNOWLEDGER (grob);
   void process_acknowledged ();
@@ -57,6 +59,15 @@ Axis_group_engraver::Axis_group_engraver ()
 {
   staffline_ = 0;
   interesting_ = SCM_EOL;
+  active_ = false;
+}
+
+void
+Axis_group_engraver::initialize ()
+{
+  active_ = !to_boolean (get_property ("hasAxisGroup"));
+  if (active_)
+    context ()->set_property ("hasAxisGroup", SCM_BOOL_T);
 }
 
 void
@@ -75,7 +86,7 @@ Axis_group_engraver::must_be_last () const
 void
 Axis_group_engraver::process_music ()
 {
-  if (!staffline_)
+  if (!staffline_ && active_)
     {
       staffline_ = get_spanner ();
       Grob *it = unsmob_grob (get_property ("currentCommandColumn"));
@@ -105,17 +116,8 @@ Axis_group_engraver::finalize ()
 void
 Axis_group_engraver::acknowledge_grob (Grob_info i)
 {
-  if (!staffline_)
-    return;
-  if (i.grob ()->name () == "VerticalAxisGroup") {
-    i.grob ()->programming_error ("duplicate axis group");
-    if (staffline_->is_live ())
-      staffline_->suicide ();
-    staffline_ = 0;
-    elts_.clear ();
-    return;
-  }
-  elts_.push_back (i.grob ());
+  if (staffline_)
+    elts_.push_back (i.grob ());
 
   if (staffline_ && to_boolean(staffline_->get_property("remove-empty")))
     {
@@ -175,8 +177,9 @@ ADD_TRANSLATOR (Axis_group_engraver,
 
                 /* read */
                 "currentCommandColumn "
-                "keepAliveInterfaces ",
-
+                "keepAliveInterfaces "
+                "hasAxisGroup ",
+                
                 /* write */
-                ""
+                "hasAxisGroup "
                );
index 69b7c82fdf430dbcf8382e0ada7361b20892d2d9..68b3dd3746fcf97ebd33d826dfbdc327dc0b2680 100644 (file)
@@ -46,6 +46,20 @@ LY_DEFINE (ly_relative_group_extent, "ly:relative-group-extent",
   return ly_interval2scm (ext);
 }
 
+LY_DEFINE (ly_generic_bound_extent, "ly:generic-bound-extent",
+           2, 0, 0, (SCM grob, SCM common),
+           "Determine the extent of @var{grob} relative to @var{common} along"
+           " the X axis, finding its extent as a bound when it a has"
+           " @code{bound-alignment-interfaces} property list set and"
+           " otherwise the full extent.")
+{
+  LY_ASSERT_SMOB (Grob, grob, 1);
+  LY_ASSERT_SMOB (Grob, common, 2);
+
+  Interval ext = Axis_group_interface::generic_bound_extent (unsmob_grob (grob), unsmob_grob (common), X_AXIS);
+  return ly_interval2scm (ext);
+}
+
 LY_DEFINE (ly_axis_group_interface__add_element, "ly:axis-group-interface::add-element",
            2, 0, 0, (SCM grob, SCM grob_element),
            "Set @var{grob} the parent of @var{grob-element} on all axes of"
index d4d3d4102210a5896ddcd09886186beda7465294..1e945f2f9ec8e58f768dc0ae50932e4f450b70e3 100644 (file)
@@ -494,16 +494,26 @@ Axis_group_interface::internal_calc_pure_relevant_grobs (Grob *me, const string
   for (vsize i = 0; i < elts.size (); i++)
     {
       if (elts[i] && elts[i]->is_live ())
+        relevant_grobs.push_back (elts[i]);
+      /*
+        TODO (mikesol): it is probably bad that we're reading prebroken
+        pieces from potentially suicided elements.  This behavior
+        has been in current master since at least 2.16.
+
+        We need to fully suicide all Items, meaning that their
+        prebroken pieces should not be accessible, which means that
+        Item::handle_prebroken_dependencies should only be called
+        AFTER this list is composed.  The list composition function
+        should probably not check for suicided items or NULL pointers
+        but leave that to the various methods that use it.
+      */
+      if (Item *it = dynamic_cast<Item *> (elts[i]))
         {
-          relevant_grobs.push_back (elts[i]);
-          if (Item *it = dynamic_cast<Item *> (elts[i]))
+          for (LEFT_and_RIGHT (d))
             {
-              for (LEFT_and_RIGHT (d))
-                {
-                  Item *piece = it->find_prebroken_piece (d);
-                  if (piece && piece->is_live ())
-                    relevant_grobs.push_back (piece);
-                }
+              Item *piece = it->find_prebroken_piece (d);
+              if (piece && piece->is_live ())
+                relevant_grobs.push_back (piece);
             }
         }
     }
index 3b5555f5818a26cc71f3712df1dac041b57180ec..a4c1bf6e2afabd20a5c1ef4e697c3ee7d811e059 100644 (file)
@@ -52,10 +52,11 @@ ADD_TRANSLATOR (Default_bar_line_engraver,
                 "defaultBarType "
                 "measureLength "
                 "whichBar "
-                "measurePosition ",
+                "measurePosition "
+                "timing ",
 
                 /* write */
-                "automaticBars "
+                ""
                );
 
 Default_bar_line_engraver::Default_bar_line_engraver ()
@@ -76,7 +77,8 @@ Default_bar_line_engraver::start_translation_timestep ()
 
   Moment mp = measure_position (context ());
   bool start_of_measure = (last_moment_.main_part_ != now.main_part_
-                           && !mp.main_part_);
+                           && !mp.main_part_
+                           && to_boolean (get_property ("timing")));
 
   if (!scm_is_string (which) && to_boolean (automatic_bars))
     {
index 95635140bf1d223b0e68a659310654d91c08e7ee..5885a661359b6accd9055228bd11b10cf8f19f88 100644 (file)
@@ -652,8 +652,6 @@ Page_layout_problem::append_system (System *sys, Spring const &spring, Real inde
                            : 0;
 
   // Corner case: there was only one staff, and it wasn't spaceable.
-  // Mark it spaceable, because we do not allow non-spaceable staves
-  // to be at the top or bottom of a system.
   if (!found_spaceable_staff && elts.size ())
     mark_as_spaceable (elts[0]);
 }
@@ -667,7 +665,8 @@ Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding
 
   if (sky)
     {
-      minimum_distance = (*sky)[UP].distance (bottom_skyline_);
+      minimum_distance = max ((*sky)[UP].distance (bottom_skyline_),
+                              bottom_loose_baseline_);
       bottom_skyline_ = (*sky)[DOWN];
     }
   else if (Stencil *sten = unsmob_stencil (prob->get_property ("stencil")))
@@ -678,6 +677,7 @@ Page_layout_problem::append_prob (Prob *prob, Spring const &spring, Real padding
       bottom_skyline_.clear ();
       bottom_skyline_.set_minimum_height (iv[DOWN]);
     }
+  bottom_loose_baseline_ = 0.0;
 
   Spring spring_copy = spring;
   if (tight_spacing)
index fcde23ac9d9835211b7f4e4f584dc95b84d5f652..ab09f537b2a8693f413c4121d9dcb82e13916d12 100644 (file)
@@ -62,7 +62,7 @@ deleting them.  Let's hope that a stack overflow doesn't trigger a move
 of the parse stack onto the heap. */
 
 %left PREC_BOT
-%nonassoc REPEAT
+%nonassoc REPEAT REPEAT_IDENTIFIER
 %nonassoc ALTERNATIVE
 
 /* The above precedences tackle the shift/reduce problem
@@ -80,10 +80,14 @@ or
 %nonassoc COMPOSITE
 %left ADDLYRICS
 
-%right ':' UNSIGNED REAL
+%right ':' UNSIGNED REAL E_UNSIGNED EVENT_IDENTIFIER EVENT_FUNCTION '^' '_'
+       HYPHEN EXTENDER DURATION_IDENTIFIER
 
- /* The above are needed for collecting tremoli greedily, and together
-    with the next rule for putting together numbers and units
+ /* The above are needed for collecting tremoli and other items (that
+    could otherwise be interpreted as belonging to the next function
+    argument) greedily, and together with the next rule will serve to
+    join numbers and units greedily instead of allowing them into
+    separate function arguments
  */
 
 %nonassoc NUMBER_IDENTIFIER
@@ -321,6 +325,7 @@ If we give names, Bison complains.
 %token EMBEDDED_LILY "#{"
 
 %token BOOK_IDENTIFIER
+%token CHORD_BODY_IDENTIFIER
 %token CHORD_MODIFIER
 %token CHORD_REPETITION
 %token CONTEXT_DEF_IDENTIFIER
@@ -342,6 +347,7 @@ If we give names, Bison complains.
 %token NUMBER_IDENTIFIER
 %token OUTPUT_DEF_IDENTIFIER
 %token REAL
+%token REPEAT_IDENTIFIER
 %token RESTNAME
 %token SCM_ARG
 %token SCM_FUNCTION
@@ -979,12 +985,12 @@ tempo_event:
        TEMPO steno_duration '=' tempo_range    {
                $$ = MAKE_SYNTAX ("tempo", @$, SCM_EOL, $2, $4);
        }
-       | TEMPO scalar_closed steno_duration '=' tempo_range    {
+       | TEMPO scalar steno_duration '=' tempo_range   {
                $$ = MAKE_SYNTAX ("tempo", @$, $2, $3, $5);
        }
        | TEMPO scalar {
                $$ = MAKE_SYNTAX ("tempo", @$, $2);
-       }
+       } %prec ':'
        ;
 
 /*
@@ -1081,10 +1087,20 @@ repeated_music:
        {
                $$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, SCM_EOL);
        }
+       | REPEAT_IDENTIFIER music
+       {
+               $$ = MAKE_SYNTAX ("repeat", @$, scm_car ($1), scm_cdr ($1),
+                                 $2, SCM_EOL);
+       }
        | REPEAT simple_string unsigned_number music ALTERNATIVE braced_music_list
        {
                $$ = MAKE_SYNTAX ("repeat", @$, $2, $3, $4, $6);
        }
+       | REPEAT_IDENTIFIER music ALTERNATIVE braced_music_list
+       {
+               $$ = MAKE_SYNTAX ("repeat", @$, scm_car ($1), scm_cdr ($1),
+                                 $2, $4);
+       }
        ;
 
 sequential_music:
@@ -1269,11 +1285,11 @@ function_arglist_nonbackup_common:
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup post_event_nofinger
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup post_event_nofinger
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup '-' UNSIGNED
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' UNSIGNED
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n)))
@@ -1286,13 +1302,13 @@ function_arglist_nonbackup_common:
                }
                
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup '-' REAL
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' REAL
        {
                $$ = check_scheme_arg (parser, @4,
                                       scm_difference ($5, SCM_UNDEFINED),
                                       $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup '-' NUMBER_IDENTIFIER
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup '-' NUMBER_IDENTIFIER
        {
                $$ = check_scheme_arg (parser, @4,
                                       scm_difference ($5, SCM_UNDEFINED),
@@ -1307,7 +1323,7 @@ function_arglist_closed_nonbackup:
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup bare_number_closed
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup bare_number_closed
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
@@ -1380,7 +1396,7 @@ function_arglist_nonbackup:
                                               (parser, @4, $4),
                                               $3, $2);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup bare_number_common
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup bare_number_common
        {
                $$ = check_scheme_arg (parser, @4, $4, $3, $2);
        }
@@ -1454,7 +1470,7 @@ function_arglist_nonbackup_reparse:
                else
                        MYREPARSE (@4, $2, SCM_ARG, $4);
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup UNSIGNED
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup UNSIGNED
        {
                $$ = $3;
                if (scm_is_true (scm_call_1 ($2, $4)))
@@ -1467,7 +1483,7 @@ function_arglist_nonbackup_reparse:
                                MYREPARSE (@4, $2, DURATION_IDENTIFIER, d);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_nonbackup DURATION_IDENTIFIER {
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup DURATION_IDENTIFIER {
                $$ = $3;
                MYREPARSE (@4, $2, DURATION_IDENTIFIER, $4);
        }
@@ -1479,11 +1495,6 @@ function_arglist_backup:
        | function_arglist_common
        ;
 
-function_arglist_closed_backup:
-       function_arglist_backup_common
-       | function_arglist_closed_common
-       ;
-
 function_arglist_backup_common:
        EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup embedded_scm_arg_closed
        {
@@ -1495,7 +1506,32 @@ function_arglist_backup_common:
                        MYBACKUP (SCM_ARG, $4, @4);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup post_event_nofinger
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup REPEAT simple_string unsigned_number
+       {
+               $4 = MAKE_SYNTAX ("repeat", @4, $5, $6,
+                                 MY_MAKE_MUSIC ("Music", @4)->unprotect (),
+                                 SCM_EOL);
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = $3;
+                       MYREPARSE (@4, $2, REPEAT_IDENTIFIER, scm_cons ($5, $6));
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (REPEAT_IDENTIFIER, scm_cons ($5, $6), @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup chord_body
+       {
+               if (scm_is_true (scm_call_1 ($2, $4)))
+               {
+                       $$ = $3;
+                       MYREPARSE (@4, $2, CHORD_BODY_IDENTIFIER, $4);
+               } else {
+                       $$ = scm_cons (loc_on_music (@3, $1), $3);
+                       MYBACKUP (CHORD_BODY_IDENTIFIER, $4, @4);
+               }
+       }
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup post_event_nofinger
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
                {
@@ -1514,7 +1550,7 @@ function_arglist_backup_common:
                        MYBACKUP (LYRIC_ELEMENT, $4, @4);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup UNSIGNED
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup UNSIGNED
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
                {
@@ -1532,7 +1568,7 @@ function_arglist_backup_common:
                        }
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup REAL
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup REAL
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
                {
@@ -1543,7 +1579,7 @@ function_arglist_backup_common:
                        MYBACKUP (REAL, $4, @4);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup NUMBER_IDENTIFIER
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup NUMBER_IDENTIFIER
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
                {
@@ -1563,7 +1599,7 @@ function_arglist_backup_common:
                        MYBACKUP (FRACTION, $4, @4);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup '-' UNSIGNED
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' UNSIGNED
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n))) {
@@ -1583,7 +1619,7 @@ function_arglist_backup_common:
                }
                
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup '-' REAL
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' REAL
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n))) {
@@ -1594,7 +1630,7 @@ function_arglist_backup_common:
                        MYBACKUP (REAL, n, @5);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup '-' NUMBER_IDENTIFIER
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup '-' NUMBER_IDENTIFIER
        {
                SCM n = scm_difference ($5, SCM_UNDEFINED);
                if (scm_is_true (scm_call_1 ($2, n))) {
@@ -1636,7 +1672,7 @@ function_arglist_backup_common:
                        MYBACKUP (TONICNAME_PITCH, $4, @4);
                }
        }
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_closed_backup DURATION_IDENTIFIER
+       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_backup DURATION_IDENTIFIER
        {
                if (scm_is_true (scm_call_1 ($2, $4)))
                {
@@ -1677,6 +1713,16 @@ function_arglist_backup_common:
                        MYBACKUP (STRING, $4, @4);
                }
        }
+       | function_arglist_backup REPARSE music_assign
+       {
+               if (scm_is_true (scm_call_1 ($2, $3)))
+                       $$ = scm_cons ($3, $1);
+               else
+                       $$ = check_scheme_arg (parser, @3,
+                                              make_music_from_simple
+                                              (parser, @3, $3),
+                                              $1, $2);
+       }
        | function_arglist_backup REPARSE bare_number_common
        {
                $$ = check_scheme_arg (parser, @3,
@@ -1691,10 +1737,6 @@ function_arglist_backup_common:
        {
                $$ = check_scheme_arg (parser, @3, $3, $1, $2);
        }
-       | function_arglist_backup REPARSE pitch_also_in_chords
-       {
-               $$ = check_scheme_arg (parser, @3, $3, $1, $2);
-       }
        ;
 
 function_arglist:
@@ -1727,7 +1769,7 @@ function_arglist_common:
                                               (parser, @3, $3),
                                               $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional bare_number_common
+       | EXPECT_SCM function_arglist_optional bare_number_common
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
@@ -1737,12 +1779,12 @@ function_arglist_common:
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional post_event_nofinger
+       | EXPECT_SCM function_arglist_optional post_event_nofinger
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
+       | EXPECT_SCM function_arglist_optional '-' NUMBER_IDENTIFIER
        {
                SCM n = scm_difference ($4, SCM_UNDEFINED);
                $$ = check_scheme_arg (parser, @4, n, $2, $1);
@@ -1824,7 +1866,7 @@ function_arglist_common_reparse:
                        // know the predicate to be false.
                        MYREPARSE (@3, $1, SCM_ARG, $3);
        }
-       | EXPECT_SCM function_arglist_closed_optional UNSIGNED
+       | EXPECT_SCM function_arglist_optional UNSIGNED
        {
                $$ = $2;
                if (scm_is_true (scm_call_1 ($1, $3)))
@@ -1837,12 +1879,12 @@ function_arglist_common_reparse:
                                MYREPARSE (@3, $1, DURATION_IDENTIFIER, d);
                }
        }
-       | EXPECT_SCM function_arglist_closed_optional DURATION_IDENTIFIER
+       | EXPECT_SCM function_arglist_optional DURATION_IDENTIFIER
        {
                $$ = $2;
                MYREPARSE (@3, $1, DURATION_IDENTIFIER, $3);
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' UNSIGNED
+       | EXPECT_SCM function_arglist_optional '-' UNSIGNED
        {
                $$ = $2;
                SCM n = scm_difference ($4, SCM_UNDEFINED);
@@ -1859,7 +1901,7 @@ function_arglist_common_reparse:
                }
                
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' REAL
+       | EXPECT_SCM function_arglist_optional '-' REAL
        {
                $$ = $2;
                SCM n = scm_difference ($4, SCM_UNDEFINED);
@@ -1884,18 +1926,18 @@ function_arglist_closed_common:
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional bare_number_common_closed
+       | EXPECT_SCM function_arglist_optional bare_number_common_closed
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional '-' NUMBER_IDENTIFIER
+       | EXPECT_SCM function_arglist_optional '-' NUMBER_IDENTIFIER
        {
                $$ = check_scheme_arg (parser, @3,
                                       scm_difference ($4, SCM_UNDEFINED),
                                       $2, $1);
        }
-       | EXPECT_SCM function_arglist_closed_optional post_event_nofinger
+       | EXPECT_SCM function_arglist_optional post_event_nofinger
        {
                $$ = check_scheme_arg (parser, @3,
                                       $3, $2, $1);
@@ -1938,15 +1980,6 @@ function_arglist_skip_backup:
        }
        ;
 
-function_arglist_closed_optional:
-       function_arglist_closed_backup
-       | EXPECT_OPTIONAL EXPECT_SCM function_arglist_skip_backup DEFAULT
-       {
-               $$ = scm_cons (loc_on_music (@4, $1), $3);
-       }
-       | function_arglist_skip_backup BACKUP
-       ;
-
 embedded_scm_closed:
        embedded_scm_bare
        | scm_function_call_closed
@@ -2448,24 +2481,6 @@ scalar:
        | full_markup
        ;
 
-scalar_closed:
-       embedded_scm_arg_closed
-       | SCM_IDENTIFIER
-       // for scalar_closed to be an actually closed (no lookahead)
-       // expression, we'd need to use bare_number_closed here.  It
-       // turns out that the only use of scalar_closed in TEMPO is
-       // not of the kind requiring the full closedness criterion.
-       | bare_number
-       | '-' bare_number
-       {
-               $$ = scm_difference ($2, SCM_UNDEFINED);
-       }
-       | FRACTION
-       | STRING
-       | full_markup
-       ;
-
-
 event_chord:
        simple_element post_events {
                // Let the rhythmic music iterator sort this mess out.
@@ -2480,7 +2495,7 @@ event_chord:
                                $$ = MAKE_SYNTAX ("void-music", @1);
                        }
                }
-       }
+       } %prec ':'
        | simple_chord_elements post_events     {
                SCM elts = ly_append2 ($1, scm_reverse_x ($2, SCM_EOL));
 
@@ -2489,19 +2504,19 @@ event_chord:
                 * i = @$; */
                i.set_location (@1, @2);
                $$ = MAKE_SYNTAX ("event-chord", i, elts);
-       }
+       } %prec ':'
        | CHORD_REPETITION optional_notemode_duration post_events {
                Input i;
                i.set_location (@1, @3);
                $$ = MAKE_SYNTAX ("repetition-chord", i,
                                  $2, scm_reverse_x ($3, SCM_EOL));
-       }
+       } %prec ':'
        | MULTI_MEASURE_REST optional_notemode_duration post_events {
                Input i;
                i.set_location (@1, @3);
                $$ = MAKE_SYNTAX ("multi-measure-rest", i, $2,
                                  scm_reverse_x ($3, SCM_EOL));
-       }
+       } %prec ':'
        | command_element
        | note_chord_element
        ;
@@ -2522,7 +2537,7 @@ note_chord_element:
                m-> set_property ("elements", es);
                m->set_spot (@$);
                $$ = m->self_scm ();
-       }
+       } %prec ':'
        ;
 
 chord_body:
@@ -2530,6 +2545,7 @@ chord_body:
        {
                $$ = MAKE_SYNTAX ("event-chord", @$, scm_reverse_x ($2, SCM_EOL));
        }
+       | CHORD_BODY_IDENTIFIER
        ;
 
 chord_body_elements:
@@ -2811,11 +2827,6 @@ pitch:
        | PITCH_IDENTIFIER
        ;
 
-pitch_also_in_chords:
-       pitch
-       | steno_tonic_pitch
-       ;
-
 gen_text_def:
        full_markup {
                Music *t = MY_MAKE_MUSIC ("TextScriptEvent", @$);
@@ -2889,7 +2900,7 @@ duration_length:
 maybe_notemode_duration:
        {
                $$ = SCM_UNDEFINED;
-       }
+       } %prec ':'
        | multiplied_duration   {
                $$ = $1;
                parser->default_duration_ = *unsmob_duration ($$);
@@ -3160,7 +3171,7 @@ lyric_element_music:
                if (scm_is_pair ($3))
                        unsmob_music ($$)->set_property
                                ("articulations", scm_reverse_x ($3, SCM_EOL));
-       }
+       } %prec ':'
        ;
 
 new_chord:
@@ -3170,7 +3181,7 @@ new_chord:
        | steno_tonic_pitch optional_notemode_duration chord_separator chord_items {
                SCM its = scm_reverse_x ($4, SCM_EOL);
                $$ = make_chord_elements (@$, $1, $2, scm_cons ($3, its));
-       }
+       } %prec ':'
        ;
 
 chord_items:
index c406beaab5436a9a053883651ff02d1b5364ed87..936a7488e2810a001e42c8b87896e35c1a12f202 100644 (file)
@@ -207,5 +207,6 @@ ADD_INTERFACE (Text_interface,
                "text "
                "word-space "
                "text-direction "
+               "flag-style "
               );
 
index 03cbfdd3d43700c3cb30cc8ab6836519df6661d5..67832e3cc5ae60d9fc44154c5f33bfd2061e41f3 100644 (file)
@@ -186,26 +186,44 @@ Timing_translator::start_translation_timestep ()
   else
     {
       measposp = now;
-      context ()->set_property ("measurePosition",
-                                measposp.smobbed_copy ());
     }
 
-  measposp += dt;
-
   int current_barnumber = robust_scm2int (get_property ("currentBarNumber"), 0);
   int internal_barnumber = robust_scm2int (get_property ("internalBarNumber"), 0);
 
   SCM cad = get_property ("timing");
   bool c = to_boolean (cad);
 
-  Rational len = measure_length ();
-  while (c && measposp.main_part_ >= len)
+  if (c)
     {
-      measposp.main_part_ -= len;
-      current_barnumber++;
-      internal_barnumber++;
+      Rational len = measure_length ();
+
+      measposp += dt;
+
+      while (measposp.main_part_ >= len)
+        {
+          measposp.main_part_ -= len;
+          current_barnumber++;
+          internal_barnumber++;
+        }
     }
 
+
+  // Because "timing" can be switched on and off asynchronously with
+  // graces, measurePosition might get into strange settings of
+  // grace_part_.  It does not actually make sense to have it diverge
+  // from the main timing.  Updating the grace part outside of the
+  // actual check for "timing" looks strange and will lead to changes
+  // of grace_part_ even when timing is off.  However, when timing is
+  // switched back on again, this will generally happen in an override
+  // that does _not_ in itself advance current_moment.  So the whole
+  // timing advance logic will only get triggered while "timing" is
+  // still of.  Maybe we should keep measurePosition.grace_part_
+  // constantly at zero anyway?
+
+  measposp.grace_part_ = now.grace_part_;
+
+
   context ()->set_property ("currentBarNumber", scm_from_int (current_barnumber));
   context ()->set_property ("internalBarNumber", scm_from_int (internal_barnumber));
   context ()->set_property ("measurePosition", measposp.smobbed_copy ());
index 97f14fdce03b0e6f88aecac0be7ccc4491e0938f..65cf6e7f772d7af5086ccbe6bfab11a94664a1d7 100644 (file)
@@ -22,6 +22,7 @@
 #include "align-interface.hh"
 #include "axis-group-interface.hh"
 #include "engraver.hh"
+#include "international.hh"
 #include "spanner.hh"
 #include "pointer-group-interface.hh"
 #include "grob-array.hh"
@@ -58,7 +59,8 @@ ADD_TRANSLATOR (Vertical_align_engraver,
 
                 /* read */
                 "alignAboveContext "
-                "alignBelowContext ",
+                "alignBelowContext "
+                "hasAxisGroup ",
 
                 /* write */
                 ""
@@ -86,8 +88,15 @@ Vertical_align_engraver::initialize ()
 void
 Vertical_align_engraver::process_music ()
 {
-  if (!valign_)
+  if (!valign_ && !scm_is_null (id_to_group_hashtab_))
     {
+      if (to_boolean (get_property ("hasAxisGroup")))
+        {
+          warning (_ ("Ignoring Vertical_align_engraver in VerticalAxisGroup"));
+          id_to_group_hashtab_ = SCM_EOL;
+          return;
+        }
+      
       top_level_ = to_boolean (get_property ("topLevelAlignment"));
 
       valign_ = make_spanner (top_level_ ? "VerticalAlignment" : "StaffGrouper", SCM_EOL);
@@ -120,6 +129,9 @@ Vertical_align_engraver::qualifies (Grob_info i) const
 void
 Vertical_align_engraver::acknowledge_axis_group (Grob_info i)
 {
+  if (scm_is_null (id_to_group_hashtab_))
+    return;
+
   if (top_level_ && qualifies (i))
     {
       string id = i.context ()->id_string ();
index dbecbf2f4413cbb8b191fd617b095dea11366876..bf738074cda120346f26b231c6854bd427ac72e7 100644 (file)
@@ -701,17 +701,39 @@ offset =
 a music expression, the result is the same music expression with an
 appropriate tweak applied.")
   (if (ly:music? item)
-      #{ \tweak #property #(offsetter property offsets) #item #}
-      (if (check-grob-path item parser location
-                                #:default 'Bottom
-                                #:min 2
-                                #:max 2)
-          #{
-            \override #item . #property =
-              #(offsetter property offsets)
-          #}
-          (make-music 'Music))))
-
+      ; In case of a tweak, grob property path is Grob.property
+      (let ((prop-path (check-grob-path
+                         (if (symbol? property)
+                             (list property)
+                             property)
+                         parser location
+                         #:start 1 #:default #t #:min 2 #:max 2)))
+        (if prop-path
+            ; If the head of the grob property path is a symbol--i.e.,
+            ; a grob name, produce a directed tweak.  Otherwise, create
+            ; an ordinary tweak.
+            (if (symbol? (car prop-path))
+                #{
+                  \tweak #prop-path #(offsetter (second prop-path) offsets) #item
+                #}
+                #{
+                  \tweak #(second prop-path) #(offsetter (second prop-path) offsets) #item
+                #})
+            item))
+      ; In case of an override, grob property path is Context.Grob.property.
+      (let ((prop-path (check-grob-path
+                         (append item
+                                 (if (symbol? property)
+                                     (list property)
+                                     property))
+                         parser location
+                         #:default 'Bottom #:min 3 #:max 3)))
+        (if prop-path
+            #{
+              \override #prop-path = #(offsetter (third prop-path) offsets)
+            #}
+            (make-music 'Music)))))
 omit =
 #(define-music-function (parser location item) (symbol-list-or-music?)
    (_i "Set @var{item}'s @samp{stencil} property to @code{#f},
index 5222b232d89de76917c55266393fb186d84f110e..42a1d5100c8c2732ed72ac729fa0fe90e8124fe0 100644 (file)
@@ -124,17 +124,9 @@ bassFigureStaffAlignmentNeutral =
 
 %% cadenzas
 
-cadenzaOn  = {
-  \set Timing.timing = ##f
-  \set Timing.autoBeaming = ##f
-}
-
-cadenzaOff = {
-  \set Timing.timing = ##t
-  \set Timing.measurePosition = #ZERO-MOMENT
-  \set Timing.autoBeaming = ##t
-}
+cadenzaOn  = \set Timing.timing = ##f
 
+cadenzaOff = \set Timing.timing = ##t
 
 %% chord names
 
index 61bb80a678e3a1a41c94e43747de23657e13f830..d3a5448678f3abb1a412143a867e71d9472e4d69 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.17.29\n"
+"Project-Id-Version: lilypond 2.17.95\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2013-10-20 10:42+0100\n"
+"POT-Creation-Date: 2013-11-04 10:26+0100\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"
@@ -1202,78 +1202,78 @@ msgstr ""
 msgid "create PDF files for use with PDFTeX"
 msgstr ""
 
-#: lilypond-book.py:460
+#: lilypond-book.py:463
 msgid "Writing snippets..."
 msgstr ""
 
-#: lilypond-book.py:465
+#: lilypond-book.py:468
 msgid "Processing..."
 msgstr ""
 
-#: lilypond-book.py:470
+#: lilypond-book.py:473
 msgid "All snippets are up to date..."
 msgstr ""
 
-#: lilypond-book.py:472
+#: lilypond-book.py:475
 msgid "Linking files..."
 msgstr ""
 
-#: lilypond-book.py:492
+#: lilypond-book.py:495
 #, python-format
 msgid "cannot determine format for: %s"
 msgstr ""
 
-#: lilypond-book.py:501
+#: lilypond-book.py:504
 #, python-format
 msgid "%s is up to date."
 msgstr ""
 
-#: lilypond-book.py:514
+#: lilypond-book.py:517
 #, python-format
 msgid "Writing `%s'..."
 msgstr ""
 
-#: lilypond-book.py:577
+#: lilypond-book.py:580
 msgid "Output would overwrite input file; use --output."
 msgstr ""
 
-#: lilypond-book.py:581
+#: lilypond-book.py:584
 #, python-format
 msgid "Reading %s..."
 msgstr ""
 
-#: lilypond-book.py:588
+#: lilypond-book.py:591
 msgid "Dissecting..."
 msgstr ""
 
-#: lilypond-book.py:599
+#: lilypond-book.py:602
 #, python-format
 msgid "Compiling %s..."
 msgstr ""
 
-#: lilypond-book.py:607
+#: lilypond-book.py:610
 #, python-format
 msgid "Processing include: %s"
 msgstr ""
 
-#: lilypond-book.py:618
+#: lilypond-book.py:621
 #, python-format
 msgid "Removing `%s'"
 msgstr ""
 
-#: lilypond-book.py:711
+#: lilypond-book.py:714
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr ""
 
-#: lilypond-book.py:715
+#: lilypond-book.py:718
 #, python-format
 msgid ""
 "Setting LilyPond's loglevel to %s (from environment variable "
 "LILYPOND_LOGLEVEL)"
 msgstr ""
 
-#: lilypond-book.py:718
+#: lilypond-book.py:721
 msgid ""
 "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr ""
@@ -1700,24 +1700,24 @@ msgstr ""
 msgid "cannot change, already in translator: %s"
 msgstr ""
 
-#: axis-group-engraver.cc:147
+#: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr ""
 
-#: axis-group-engraver.cc:148
+#: axis-group-engraver.cc:150
 msgid "are there two Axis_group_engravers?"
 msgstr ""
 
-#: axis-group-engraver.cc:149
+#: axis-group-engraver.cc:151
 msgid "removing this vertical group"
 msgstr ""
 
-#: axis-group-interface.cc:704
+#: axis-group-interface.cc:714
 #, c-format
 msgid "\"%s\" is not a valid outside-staff-placement-directive"
 msgstr ""
 
-#: axis-group-interface.cc:776
+#: axis-group-interface.cc:786
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr ""
 
@@ -2429,12 +2429,12 @@ msgstr ""
 msgid "ignoring out-of-range value change for MIDI property `%s'"
 msgstr ""
 
-#: midi-item.cc:92
+#: midi-item.cc:93
 #, c-format
 msgid "no such MIDI instrument: `%s'"
 msgstr ""
 
-#: midi-item.cc:178
+#: midi-item.cc:179
 msgid "Time signature with more than 255 beats.  Truncating"
 msgstr ""
 
@@ -3097,6 +3097,10 @@ msgstr ""
 msgid "ascending vaticana style flexa"
 msgstr ""
 
+#: vertical-align-engraver.cc:95
+msgid "Ignoring Vertical_align_engraver in VerticalAxisGroup"
+msgstr ""
+
 #. fixme: be more verbose.
 #: volta-engraver.cc:110
 msgid "cannot end volta spanner"
@@ -3114,111 +3118,111 @@ msgstr ""
 msgid "giving up"
 msgstr ""
 
-#: parser.yy:154 parser.yy:168
+#: parser.yy:158 parser.yy:172
 msgid "Too much lookahead"
 msgstr ""
 
-#: parser.yy:434 parser.yy:744 parser.yy:810
+#: parser.yy:440 parser.yy:750 parser.yy:816
 msgid "bad expression type"
 msgstr ""
 
-#: parser.yy:642 parser.yy:1138
+#: parser.yy:648 parser.yy:1157
 msgid "not a context mod"
 msgstr ""
 
-#: parser.yy:845
+#: parser.yy:851
 msgid "score expected"
 msgstr ""
 
-#: parser.yy:861
+#: parser.yy:867
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr ""
 
-#: parser.yy:885
+#: parser.yy:891
 msgid "need \\paper for paper block"
 msgstr ""
 
-#: parser.yy:1025 parser.yy:1047
+#: parser.yy:1031 parser.yy:1053
 msgid "unexpected post-event"
 msgstr ""
 
-#: parser.yy:1055
+#: parser.yy:1061
 msgid "Ignoring non-music expression"
 msgstr ""
 
-#: parser.yy:1066 parser.yy:2475
+#: parser.yy:1073 parser.yy:2494
 msgid "music expected"
 msgstr ""
 
-#: parser.yy:1353
+#: parser.yy:1372
 msgid "not a symbol"
 msgstr ""
 
-#: parser.yy:2146 parser.yy:2260 parser.yy:2273 parser.yy:2282
+#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
 msgid "bad grob property path"
 msgstr ""
 
-#: parser.yy:2240
+#: parser.yy:2276
 msgid "only \\consists and \\remove take non-string argument."
 msgstr ""
 
-#: parser.yy:2301
+#: parser.yy:2337
 msgid "bad context property path"
 msgstr ""
 
-#: parser.yy:2402
+#: parser.yy:2438
 msgid "simple string expected"
 msgstr ""
 
-#: parser.yy:2420
+#: parser.yy:2456
 msgid "symbol expected"
 msgstr ""
 
-#: parser.yy:2584
+#: parser.yy:2606
 msgid "not a rhythmic event"
 msgstr ""
 
-#: parser.yy:2658
+#: parser.yy:2680
 msgid "post-event expected"
 msgstr ""
 
-#: parser.yy:2667 parser.yy:2672
+#: parser.yy:2689 parser.yy:2694
 msgid "have to be in Lyric mode for lyrics"
 msgstr ""
 
-#: parser.yy:2740
+#: parser.yy:2762
 msgid "expecting string as script definition"
 msgstr ""
 
-#: parser.yy:2835
+#: parser.yy:2852
 msgid "not an articulation"
 msgstr ""
 
-#: parser.yy:2907 parser.yy:2950
+#: parser.yy:2924 parser.yy:2967
 msgid "not a duration"
 msgstr ""
 
-#: parser.yy:2967
+#: parser.yy:2984
 msgid "bass number expected"
 msgstr ""
 
-#: parser.yy:3066
+#: parser.yy:3083
 msgid "have to be in Note mode for notes"
 msgstr ""
 
-#: parser.yy:3125
+#: parser.yy:3142
 msgid "have to be in Chord mode for chords"
 msgstr ""
 
-#: parser.yy:3140
+#: parser.yy:3157
 msgid "markup outside of text script or \\lyricmode"
 msgstr ""
 
-#: parser.yy:3145
+#: parser.yy:3162
 msgid "unrecognized string, not in text script or \\lyricmode"
 msgstr ""
 
-#: parser.yy:3362
+#: parser.yy:3379
 msgid "not a markup"
 msgstr ""
 
@@ -3824,40 +3828,40 @@ msgstr ""
 msgid "assertion failed: ~S"
 msgstr ""
 
-#: translation-functions.scm:368
+#: translation-functions.scm:388
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr ""
 
-#: translation-functions.scm:371
+#: translation-functions.scm:391
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr ""
 
-#: translation-functions.scm:414
+#: translation-functions.scm:434
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:429 translation-functions.scm:441
+#: translation-functions.scm:449 translation-functions.scm:461
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr ""
 
-#: translation-functions.scm:432
+#: translation-functions.scm:452
 msgid "Ignoring string request and recalculating."
 msgstr ""
 
-#: translation-functions.scm:444
+#: translation-functions.scm:464
 msgid "Ignoring note in tablature."
 msgstr ""
 
-#: translation-functions.scm:469
+#: translation-functions.scm:489
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr ""
 
-#: translation-functions.scm:574
+#: translation-functions.scm:594
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
index 91619737678fc3c130dcce4b8d6afa5266e0010d..e2eb3baa4ac5735055ece16dd52d2b90e50a0276 100644 (file)
@@ -3667,7 +3667,7 @@ def conv(str):
 def conv(str):
     str = re.sub (r"\\stringTuning\s*\\notemode(\s*)@?\{\s*(.*?)\s*@?}",
                   r"\\stringTuning\1\2", str)
-    if re.search (r'\bstaff-padding\b', str):
+    if re.search (r'[^-\w]staff-padding[^-\w]', str):
         stderr_write (NOT_SMART % "staff-padding")
         stderr_write (_ ("Staff-padding now controls the distance to the baseline, not the nearest point."))
     return str
index a0d3b98f7e82f1b070c92de64c36e3cfce1f036c..20d77ea72f5d100dbc5705f64b27a5023e74e057 100644 (file)
@@ -690,6 +690,9 @@ proceeding to next time step.  This is an internal variable.")
      (graceSettings ,list? "Overrides for grace notes.  This property
 should be manipulated through the @code{add-grace-property} function.")
 
+
+     (hasAxisGroup ,boolean? "True if the current context is contained
+in an axis group.")
      (hasStaffSpacing ,boolean? "True if the current
 @code{CommandColumn} contains items that will affect spacing.")
 
index 00cbaeb55c67c33cce65e628a8a07050c10f02d9..a5b0895c9bbfea3ccc2e23d9bfa26204d6c82e54 100644 (file)
@@ -283,6 +283,10 @@ set this to @code{(+inf.0 . -inf.0)}.")
 ;;; f
 ;;;
      (flag-count ,number? "The number of tremolo beams.")
+     (flag-style ,symbol? "The style of the flag to be used with
+@code{MetronomeMark}. Available are @code{'modern-straight-flag},
+@code{'old-straight-flag}, @code{flat-flag}, @code{mensural} and
+@code{'default}")
      (flat-positions ,list? "Flats in key signatures are placed
 within the specified ranges of staff-positions.  The general form
 is a list of pairs, with one pair for each type of clef, in order
index b415cee9d61cfcd304b4318dd60ed453b35505d8..a4e0d52a760b45a237b12438cae84932586fbd1f 100644 (file)
         (break-visibility . ,end-of-line-invisible)
         (direction . ,UP)
         (extra-spacing-width . (+inf.0 . -inf.0))
+        (flag-style . default)
         (outside-staff-horizontal-padding . 0.2)
         (outside-staff-priority . 1000)
         (padding . 0.8)
index ccecf4b43d0cef88d43cce97b79d5a3b61449b28..383b7f3f6defb7e85373397b08b7b1000aaec08c 100644 (file)
@@ -2086,8 +2086,9 @@ Broken measures are numbered in parentheses."
 ;; The following are used by the \offset function
 
 (define (find-value-to-offset prop self alist)
-  "Return the first value of the property @var{prop} in the property alist
-@var{alist} @em{after} having found @var{self}."
+  "Return the first value of the property @var{prop} in the property
+alist @var{alist} -- after having found @var{self}.  If @var{self} is
+not found, return the first value of @var{prop}."
   (let ((segment (member (cons prop self) alist)))
     (if (not segment)
         (assoc-get prop alist)
index 02170918a1bec6af6e72481c9f7256c59ba651fc..89d20b95509febf0f89ce443f0bd26282f9d5c29 100644 (file)
@@ -912,8 +912,8 @@ and duration-log @var{log}."
 
          (left-x (+ padding
                     (max
-                     (interval-end (ly:grob-robust-relative-extent
-                                    left-span common X))
+                     (interval-end (ly:generic-bound-extent
+                                    left-span common))
                      (if
                       (and dots
                            (close
@@ -923,7 +923,7 @@ and duration-log @var{log}."
                        (ly:grob-robust-relative-extent dots common X))
                       (- INFINITY-INT)))))
          (right-x (max (- (interval-start
-                           (ly:grob-robust-relative-extent right-span common X))
+                           (ly:generic-bound-extent right-span common))
                           padding)
                        (+ left-x minimum-length)))
          (self-x (ly:grob-relative-coordinate spanner common X))
index 9bc12cc53c170745b4c5011cfb3b72b059a4d6e9..fa3426ff0a42658aeb5a0d1640fe24234096149b 100644 (file)
@@ -38,33 +38,53 @@ way the transposition number is displayed."
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; metronome marks
 
-(define-public (format-metronome-markup event context)
-  (let ((hide-note (ly:context-property context 'tempoHideNote #f))
-        (text (ly:event-property event 'text))
-        (dur (ly:event-property event 'tempo-unit))
-        (count (ly:event-property event 'metronome-count)))
-
-    (metronome-markup text dur count hide-note)))
-
-(define-public (metronome-markup text dur count hide-note)
-  (let* ((note-mark (if (and (not hide-note) (ly:duration? dur))
-                        (make-smaller-markup
-                         (make-note-by-number-markup (ly:duration-log dur)
-                                                     (ly:duration-dot-count dur)
-                                                     1))
-                        #f))
+;; We give 'styled-metronome-markup' an optional argument, 'glyph-font', to
+;; prepare using other fonts than 'fetaMusic.
+;; Currently it ensures that the default-fonts are used by the
+;; markup-command 'note-by-number' in 'metronome-markup' (see below).
+(define*-public
+  ((styled-metronome-markup #:optional (glyph-font 'default))
+                            event context)
+   (let ((hide-note (ly:context-property context 'tempoHideNote #f))
+         (text (ly:event-property event 'text))
+         (dur (ly:event-property event 'tempo-unit))
+         (count (ly:event-property event 'metronome-count)))
+
+   (metronome-markup glyph-font text dur count hide-note)))
+
+(define-public format-metronome-markup
+  (styled-metronome-markup))
+
+(define (metronome-markup glyph-font text dur count hide-note)
+  (let* ((note-mark
+            (if (and (not hide-note) (ly:duration? dur))
+                (make-smaller-markup
+                   ;; We insert the (default)-font for flag-glyphs and
+                   ;; note-head-glyphs to prepare the possibility to use
+                   ;; other fonts and to make possible using
+                   ;; \override MetronomeMark #'font-name = #<font-name>
+                   ;; without affecting the note/flag-glyphs.
+                   (make-override-markup (cons 'font-name glyph-font)
+                    (make-note-by-number-markup
+                        (ly:duration-log dur)
+                        (ly:duration-dot-count dur)
+                        UP)))
+                      #f))
          (count-markup (cond ((number? count)
                               (if (> count 0)
-                                  (make-simple-markup (number->string count))
+                                  (make-simple-markup
+                                          (number->string count))
                                   #f))
                              ((pair? count)
                               (make-concat-markup
                                (list
-                                (make-simple-markup (number->string (car count)))
+                                (make-simple-markup
+                                        (number->string (car count)))
                                 (make-simple-markup " ")
                                 (make-simple-markup "–")
                                 (make-simple-markup " ")
-                                (make-simple-markup (number->string (cdr count))))))
+                                (make-simple-markup
+                                        (number->string (cdr count))))))
                              (else #f)))
          (note-markup (if (and (not hide-note) count-markup)
                           (make-concat-markup
index 8919dab8239e69f0378a0d6071fc1d249f8bbff0..8a0dd76053f51e8a7ef98f4e9b289a7e24c45218 100644 (file)
@@ -36,11 +36,11 @@ ifneq ($(strip $(ALL_PO_SOURCES)),)
        xgettext $(XGETTEXT_OPTIONS) --output-dir=$(po-outdir) \
         --keyword=_ --keyword=_f --keyword=_i \
         $(XGETTEXT_FLAGS) $(ALL_PO_SOURCES)
-endif
 endif
        sed -i '1,2d' $(po-outdir)/$(package).po
        sed -i -e 's/^\# This file is distributed.*/$(sed-header)/' $(po-outdir)/$(package).po
        sed -i -e 's/^\"Content-Type: text\/plain.*/$(sed-content)/' $(po-outdir)/$(package).po
+endif
 
 
 po-update: po