]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge remote branch 'origin/master' into release/unstable
authorPhil Holmes <mail@philholmes.net>
Thu, 26 Sep 2013 10:41:00 +0000 (11:41 +0100)
committerPhil Holmes <mail@philholmes.net>
Thu, 26 Sep 2013 10:41:00 +0000 (11:41 +0100)
20 files changed:
Documentation/GNUmakefile
Documentation/changes.tely
Documentation/extending/programming-interface.itely
Documentation/ly-examples/GNUmakefile
Documentation/misc/GNUmakefile
Documentation/notation/changing-defaults.itely
Documentation/topdocs/GNUmakefile
lily/align-interface.cc
lily/tuplet-bracket.cc
lily/tuplet-engraver.cc
make/doc-i18n-root-rules.make
make/doc-i18n-root-targets.make
make/doc-i18n-root-vars.make
make/lilypond-vars.make
python/convertrules.py
scm/music-functions.scm
stepmake/stepmake/generic-rules.make
stepmake/stepmake/texinfo-rules.make
stepmake/stepmake/texinfo-vars.make
stepmake/stepmake/topdocs-vars.make

index 44d4d04b02fe8a374f3a140a9addfe41aa585ac7..836213ff8d9ba5e65fbf7d56fd3f6cd6bf42243a 100644 (file)
@@ -88,6 +88,13 @@ endif
 
 include $(depth)/make/stepmake.make
 
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+  -I $(top-build-dir)/Documentation/snippets/out \
+  -I $(top-src-dir)/Documentation/included \
+  -I $(top-src-dir)/Documentation/pictures \
+  -I $(top-src-dir)/Documentation \
+  -I $(top-src-dir)/input/regression
+
 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
 
 
@@ -205,24 +212,24 @@ $(OUT_TXT_FILES:%.txt=%.html): $(outdir)/%.html: $(outdir)/%.txt
        $(buildscript-dir)/text2html $<
 
 # Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
 
 ifeq ($(out),www)
 ## Extra images dependencies
 $(OUT_TEXINFO_MANUALS): $(outdir)/pictures
 
 $(outdir)/pictures:
-       $(MAKE) -C pictures WWW-1
+       $(MAKE) -C pictures out=www WWW-1
        ln -sf ../pictures/$(outdir) $@
 
 $(outdir)/web.texi: $(outdir)/css $(outdir)/ly-examples
 
 $(outdir)/css:
-       $(MAKE) -C css
+       $(MAKE) -C css out=www WWW-1
        ln -sf ../css/$(outdir) $@
 
 $(outdir)/ly-examples:
-       $(MAKE) -C ly-examples
+       $(MAKE) -C ly-examples out=www WWW-1
        ln -sf ../ly-examples/$(outdir) $@
 endif
 
index effa7004c48d65e86a146b9898589657f1d644d3..01c5e2d48e2107053e6b93561c6bdea49c55fbf1 100644 (file)
@@ -99,6 +99,38 @@ register symbols in the @samp{scm accreg} module, see
 >>
 @end lilypond
 
+@item
+New commands @code{markLengthOn} and @code{markLengthOff} control
+the allowance of horizontal space for tempo and rehearsal marks.
+
+@lilypond[quote,relative=2]
+\markLengthOn
+\compressFullBarRests
+\tempo "Molto vivace" c2 c'
+\mark\default
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+\bar "||"
+\markLengthOff
+\tempo "Molto vivace" c2 c'
+\mark#1
+\tempo "Meno mosso" R1*16
+\mark\default
+g,2 g
+@end lilypond
+
+@item
+Rehearsal marks at the beginning of a line are now placed to the right
+of the clef and key signature by default.  As in previous versions, the
+@code{break-alignable-interface} controls the behavior.
+
+@lilypond[quote,relative=2]
+\set Score.barNumberVisibility = #all-bar-numbers-visible
+\set Timing.currentBarNumber = #72
+\bar"||" \time 3/4 \key e\major \mark#10 \tempo "Adagio" b2.
+@end lilypond
+
 @item
 Decimal numbers can now be written directly in music,
 without a hash sign.  Together with the previous change
index aafb4fc5d31759989784dc26733b4d29042803ec..311a13807362de516cd5670a88a3c37d6f2d4faf 100644 (file)
@@ -804,6 +804,26 @@ you avoid performance pitfalls by just using Scheme arguments for
 the leading arguments of markup functions that take a markup as
 their last argument.
 
+@funindex \markup
+@cindex markup macro
+@funindex interpret-markup
+Markup commands have a rather complex life cycle.  The body of a
+markup command definition is responsible for converting the
+arguments of the markup command into a stencil expression which is
+returned.  Quite often this is accomplished by calling the
+@code{interpret-markup} function on a markup expression, passing
+the @var{layout} and @var{props} arguments on to it.  Those
+arguments are usually only known at a very late stage in
+typesetting.  Markup expressions have their components assembled
+into markup expressions already when @code{\markup} in a LilyPond
+expression or the @code{markup} macro in Scheme is expanded.  The
+evaluation and typechecking of markup command arguments happens at
+the time @code{\markup}/@code{markup} are interpreted.
+
+But the actual conversion of markup expressions into stencil
+expressions by executing the markup function bodies only happens
+when @code{interpret-markup} is called on a markup expression.
+
 @node On properties
 @unnumberedsubsubsec On properties
 
@@ -1047,12 +1067,18 @@ stencils are combined using @code{ly:stencil-add}:
 
 @node New markup list command definition
 @subsection New markup list command definition
+@funindex define-markup-list-command
+@funindex interpret-markup-list
 Markup list commands are defined with the
 @code{define-markup-list-command} Scheme macro, which is similar to the
 @code{define-markup-command} macro described in
 @ref{New markup command definition}, except that where the latter returns
 a single stencil, the former returns a list of stencils.
 
+In a similar vein, @code{interpret-markup-list} is used instead of
+@code{interpret-markup} for converting a markup list into a list
+of stencils.
+
 In the following example, a @code{\paragraph} markup list command is
 defined, which returns a list of justified lines, the first one being
 indented.  The indent width is taken from the @code{props} argument.
@@ -1277,16 +1303,15 @@ my-callback = #(lambda (grob)
 @node Inline Scheme code
 @section Inline Scheme code
 
-TODO: the example for this section is ill-chosen since
-@example
-F = -\tweak font-size #-3 -\flageolet
-@end example
-(note the @samp{-} marking it as a post event) will actually work fine
-for the stated purpose.  Until this section gets a rewrite, let's
-pretend we don't know.
+TODO: after this section had been written, LilyPond has improved
+to the point that finding a @emph{simple} example where one would
+@emph{have} to revert to Scheme has become rather hard.
+
+Until this section gets a rewrite, let's pretend we don't know.
 
 The main disadvantage of @code{\tweak} is its syntactical
-inflexibility.  For example, the following produces a syntax error.
+inflexibility.  For example, the following produces a syntax error
+(or rather, it did so at some point in the past).
 
 @example
 F = \tweak font-size #-3 -\flageolet
index ad1c84ae49d5a7df0d857c50e3282b99bf5d0b86..c5c800b6e4a205b67ce8fc25164ce00ff4bc03bf 100644 (file)
@@ -10,7 +10,7 @@ OUT_PNG_PAGES = $(PNG_PAGES:%=$(outdir)/%.png)
 OUT_SMALL_PNG_FILES = $(OUT_PNG_FILES:%.png=%-small.png)
 
 ifeq ($(out),www)
-all: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
+local-WWW-1: $(OUT_PNG_FILES) $(OUT_SMALL_PNG_FILES)
 endif
 
 $(outdir)/%.png: %.ly
index c39d80119301852ab1bf65edc85ab9e1267027e3..a1db6cd710cc01ee9ba6409619c0b92101af1e8e 100644 (file)
@@ -19,9 +19,6 @@ default: local-txt-doc
 OUT_TXT_FILES = $(addprefix $(outdir)/, $(addsuffix .txt, $(TEXTS)))
 ##local-WWW-2: $(OUT_TXT_FILES) $(OUT_HTMLFILES) txt-to-html
 
-copy-for-me:
-       $(foreach a, $(README_TOP_FILES), cp ../$(a) $(outdir)/$(a).txt && ) true
-
 $(outdir)/%.txt: %
        cp $< $@
 
index d690681465dd4b06c6ca5e72e0308940c727810a..21b6841a7af3d406c8db579906ccd3e31875c9de 100644 (file)
@@ -3901,13 +3901,13 @@ Each type of object has its own default reference point, to which
 rehearsal marks are aligned:
 
 @lilypond[verbatim,quote,relative=1]
-% The rehearsal mark will be aligned to right edge of the Clef
+% The rehearsal mark will be aligned to the right edge of the Clef
 \override Score.RehearsalMark.break-align-symbols = #'(clef)
 \key a \major
 \clef treble
 \mark "↓"
 e1
-% The rehearsal mark will be centered above the Time Signature
+% The rehearsal mark will be aligned to the left edge of the Time Signature
 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
 \key a \major
 \clef treble
index ce3dc1f42beec03241cb71d546e8b2f99dd37385..43a99497c10c8c78af1b8432170123142eae2c4e 100644 (file)
@@ -2,13 +2,16 @@ depth = ../..
 
 STEPMAKE_TEMPLATES=documentation tex texinfo topdocs
 LOCALSTEPMAKE_TEMPLATES=lilypond ly
-OUT_TEXI_FILES = $(TELY_FILES:%.tely=$(outdir)/%.texi)
+OUT_TEXI_FILES = $(TEXI_FILES:%.texi=$(outdir)/%.texi) $(TELY_FILES:%.tely=$(outdir)/%.texi)
 HTML_FILES=$(TEXI_FILES:%.texi=$(outdir)/%.html) $(TELY_FILES:%.tely=$(outdir)/%.html)
 README_TOP_FILES=NEWS AUTHORS INSTALL README
 OUTTXT_FILES= $(outdir)/NEWS.txt
 
 include $(depth)/make/stepmake.make
 
+DOCUMENTATION_INCLUDES += -I $(outdir) \
+  -I $(top-src-dir)/Documentation
+
 # FIXME ad-hoc file copy?
 $(outdir)/NEWS.tely: $(top-src-dir)/Documentation/changes.tely
        cp -f $< $@
index aee6dad7058411b187c9b7388cca059e3d92aec1..8a2a8d9b819a4469f2b60c73f75f1d0899963d91 100644 (file)
@@ -61,73 +61,85 @@ Align_interface::align_to_ideal_distances (SCM smob)
   return SCM_BOOL_T;
 }
 
-/* Return upper and lower skylines for VerticalAxisGroup g. If the extent
-   is non-empty but there is no skyline available (or pure is true), just
+/* for each grob, find its upper and lower skylines. If the grob has
+   an empty extent, delete it from the list instead. If the extent is
+   non-empty but there is no skyline available (or pure is true), just
    create a flat skyline from the bounding box */
 // TODO(jneem): the pure and non-pure parts seem to share very little
 // code. Split them into 2 functions, perhaps?
-static Skyline_pair
-get_skylines (Grob *g,
+static void
+get_skylines (Grob *me,
+              vector<Grob *> *const elements,
               Axis a,
-              Grob *other_common,
-              bool pure, int start, int end)
+              bool pure, int start, int end,
+              vector<Skyline_pair> *const ret)
 {
-  Skyline_pair skylines;
+  Grob *other_common = common_refpoint_of_array (*elements, me, other_axis (a));
 
-  if (!pure)
+  for (vsize i = elements->size (); i--;)
     {
-      Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
-                                                                  ? "vertical-skylines"
-                                                                  : "horizontal-skylines"));
-      if (skys)
-        skylines = *skys;
-
-      /* This skyline was calculated relative to the grob g. In order to compare it to
-         skylines belonging to other grobs, we need to shift it so that it is relative
-         to the common reference. */
-      Real offset = g->relative_coordinate (other_common, other_axis (a));
-      skylines.shift (offset);
-    }
-  else if (Hara_kiri_group_spanner::request_suicide (g, start, end))
-    return skylines;
-  else
-    {
-      assert (a == Y_AXIS);
-      Interval extent = g->pure_height (g, start, end);
-
-      // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
-      // It's quite common for a treble clef to be the highest element of one system
-      // and for a low note (or lyrics) to be the lowest note on another. The two will
-      // never collide, but the pure-height stuff only works with bounding boxes, so it
-      // doesn't know that. The result is a significant over-estimation of the pure-height,
-      // especially on systems with many staves. To correct for this, we build a skyline
-      // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
-      // while the bit we're about to do only contains the breakable grobs at the beginning
-      // of the system. This way, the tall treble clefs are only compared with the treble
-      // clefs of the other staff and they will be ignored if the staff above is, for example,
-      // lyrics.
-      if (Axis_group_interface::has_interface (g))
+      Grob *g = (*elements)[i];
+      Skyline_pair skylines;
+
+      if (!pure)
         {
-          extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
-          Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
-          if (!begin_of_line_extent.is_empty ())
+          Skyline_pair *skys = Skyline_pair::unsmob (g->get_property (a == Y_AXIS
+                                                                      ? "vertical-skylines"
+                                                                      : "horizontal-skylines"));
+          if (skys)
+            skylines = *skys;
+
+          /* This skyline was calculated relative to the grob g. In order to compare it to
+             skylines belonging to other grobs, we need to shift it so that it is relative
+             to the common reference. */
+          Real offset = g->relative_coordinate (other_common, other_axis (a));
+          skylines.shift (offset);
+        }
+      else
+        {
+          assert (a == Y_AXIS);
+          Interval extent = g->pure_height (g, start, end);
+
+          // This is a hack to get better accuracy on the pure-height of VerticalAlignment.
+          // It's quite common for a treble clef to be the highest element of one system
+          // and for a low note (or lyrics) to be the lowest note on another. The two will
+          // never collide, but the pure-height stuff only works with bounding boxes, so it
+          // doesn't know that. The result is a significant over-estimation of the pure-height,
+          // especially on systems with many staves. To correct for this, we build a skyline
+          // in two parts: the part we did above contains most of the grobs (note-heads, etc.)
+          // while the bit we're about to do only contains the breakable grobs at the beginning
+          // of the system. This way, the tall treble clefs are only compared with the treble
+          // clefs of the other staff and they will be ignored if the staff above is, for example,
+          // lyrics.
+          if (Axis_group_interface::has_interface (g)
+              && !Hara_kiri_group_spanner::request_suicide (g, start, end))
+            {
+              extent = Axis_group_interface::rest_of_line_pure_height (g, start, end);
+              Interval begin_of_line_extent = Axis_group_interface::begin_of_line_pure_height (g, start);
+              if (!begin_of_line_extent.is_empty ())
+                {
+                  Box b;
+                  b[a] = begin_of_line_extent;
+                  b[other_axis (a)] = Interval (-infinity_f, -1);
+                  skylines.insert (b, other_axis (a));
+                }
+            }
+
+          if (!extent.is_empty ())
             {
               Box b;
-              b[a] = begin_of_line_extent;
-              b[other_axis (a)] = Interval (-infinity_f, -1);
+              b[a] = extent;
+              b[other_axis (a)] = Interval (0, infinity_f);
               skylines.insert (b, other_axis (a));
             }
         }
 
-      if (!extent.is_empty ())
-        {
-          Box b;
-          b[a] = extent;
-          b[other_axis (a)] = Interval (0, infinity_f);
-          skylines.insert (b, other_axis (a));
-        }
+      if (skylines.is_empty ())
+        elements->erase (elements->begin () + i);
+      else
+        ret->push_back (skylines);
     }
-  return skylines;
+  reverse (*ret);
 }
 
 vector<Real>
@@ -165,7 +177,7 @@ Align_interface::get_minimum_translations_without_min_dist (Grob *me,
 //   else centered dynamics will break when there is a fixed alignment).
 vector<Real>
 Align_interface::internal_get_minimum_translations (Grob *me,
-                                                    vector<Grob *> const &elems,
+                                                    vector<Grob *> const &all_grobs,
                                                     Axis a,
                                                     bool include_fixed_spacing,
                                                     bool pure, int start, int end)
@@ -192,14 +204,15 @@ Align_interface::internal_get_minimum_translations (Grob *me,
 
   Direction stacking_dir = robust_scm2dir (me->get_property ("stacking-dir"),
                                            DOWN);
+  vector<Grob *> elems (all_grobs); // writable copy
+  vector<Skyline_pair> skylines;
 
-  Grob *other_common = common_refpoint_of_array (elems, me, other_axis (a));
+  get_skylines (me, &elems, a, pure, start, end, &skylines);
 
   Real where = 0;
   Real default_padding = robust_scm2double (me->get_property ("padding"), 0.0);
   vector<Real> translates;
   Skyline down_skyline (stacking_dir);
-  Grob *last_nonempty_element = 0;
   Real last_spaceable_element_pos = 0;
   Grob *last_spaceable_element = 0;
   Skyline last_spaceable_skyline (stacking_dir);
@@ -209,18 +222,14 @@ Align_interface::internal_get_minimum_translations (Grob *me,
       Real dy = 0;
       Real padding = default_padding;
 
-      Skyline_pair skyline = get_skylines (elems[j], a, other_common, pure, start, end);
-
-      if (skyline.is_empty ())
-        dy = 0.0;
-      else if (!last_nonempty_element)
-        dy = skyline[-stacking_dir].max_height () + padding;
+      if (j == 0)
+        dy = skylines[j][-stacking_dir].max_height () + padding;
       else
         {
-          SCM spec = Page_layout_problem::get_spacing_spec (last_nonempty_element, elems[j], pure, start, end);
+          SCM spec = Page_layout_problem::get_spacing_spec (elems[j - 1], elems[j], pure, start, end);
           Page_layout_problem::read_spacing_spec (spec, &padding, ly_symbol2scm ("padding"));
 
-          dy = down_skyline.distance (skyline[-stacking_dir]) + padding;
+          dy = down_skyline.distance (skylines[j][-stacking_dir]) + padding;
 
           Real spec_distance = 0;
           if (Page_layout_problem::read_spacing_spec (spec, &spec_distance, ly_symbol2scm ("minimum-distance")))
@@ -240,7 +249,7 @@ Align_interface::internal_get_minimum_translations (Grob *me,
               Page_layout_problem::read_spacing_spec (spec,
                                                       &spaceable_padding,
                                                       ly_symbol2scm ("padding"));
-              dy = max (dy, (last_spaceable_skyline.distance (skyline[-stacking_dir])
+              dy = max (dy, (last_spaceable_skyline.distance (skylines[j][-stacking_dir])
                              + stacking_dir * (last_spaceable_element_pos - where) + spaceable_padding));
 
               Real spaceable_min_distance = 0;
@@ -254,9 +263,12 @@ Align_interface::internal_get_minimum_translations (Grob *me,
             }
         }
 
+      if (isinf (dy)) /* if the skyline is empty, maybe max_height is infinity_f */
+        dy = 0.0;
+
       dy = max (0.0, dy);
       down_skyline.raise (-stacking_dir * dy);
-      down_skyline.merge (skyline[stacking_dir]);
+      down_skyline.merge (skylines[j][stacking_dir]);
       where += stacking_dir * dy;
       translates.push_back (where);
 
@@ -267,19 +279,32 @@ Align_interface::internal_get_minimum_translations (Grob *me,
           last_spaceable_element_pos = where;
           last_spaceable_skyline = down_skyline;
         }
-      if (!skyline.is_empty ())
-        last_nonempty_element = elems[j];
+    }
+
+  // So far, we've computed the translates for all the non-empty elements.
+  // Here, we set the translates for the empty elements: an empty element
+  // gets the same translation as the last non-empty element before it.
+  vector<Real> all_translates;
+  if (!translates.empty ())
+    {
+      Real w = translates[0];
+      for (vsize i = 0, j = 0; j < all_grobs.size (); j++)
+        {
+          if (i < elems.size () && all_grobs[j] == elems[i])
+            w = translates[i++];
+          all_translates.push_back (w);
+        }
     }
 
   if (pure)
     {
       SCM mta = me->get_property ("minimum-translations-alist");
       mta = scm_cons (scm_cons (scm_cons (scm_from_int (start), scm_from_int (end)),
-                                ly_floatvector2scm (translates)),
+                                ly_floatvector2scm (all_translates)),
                       mta);
       me->set_property ("minimum-translations-alist", mta);
     }
-  return translates;
+  return all_translates;
 }
 
 void
index d211dcae38f55b39c91cb9095791816eb07396cc..1eccaabc06ffb663718f2b65fbcf5bfc4f2ce1c9 100644 (file)
@@ -92,8 +92,10 @@ Tuplet_bracket::parallel_beam (Grob *me_grob, vector<Grob *> const &cols,
 {
   Spanner *me = dynamic_cast<Spanner *> (me_grob);
 
-  if (me->get_bound (LEFT)->break_status_dir ()
-      || me->get_bound (RIGHT)->break_status_dir ())
+  Item *left = me->get_bound (LEFT);
+  Item *right = me->get_bound (RIGHT);
+  if (!left || left->break_status_dir ()
+      || !right || right->break_status_dir ())
     return 0;
 
   Drul_array<Grob *> stems (Note_column::get_stem (cols[0]),
index 4348044fbe002c5cc15f6a69802f4839766e536d..1fc30d898a178ef27e464b57fac4b925d1e4836c 100644 (file)
@@ -107,7 +107,7 @@ Tuplet_engraver::listen_tuplet_span (Stream_event *ev)
           tuplets_.pop_back ();
         }
       else if (!to_boolean (get_property ("skipTypesetting")))
-        ev->origin ()->warning (_ ("No tuplet to end"));
+        ev->origin ()->debug_output (_ ("No tuplet to end"));
     }
   else
     ev->origin ()->programming_error ("direction tuplet-span-event_ invalid.");
@@ -155,7 +155,10 @@ Tuplet_engraver::process_music ()
                                      stopped_tuplets_[i].bracket_->get_bound (LEFT));
                 }
               else
-                programming_error ("stopped tuplet bracket has neither left nor right bound");
+                {
+                  warning ("omitting tuplet bracket with neither left nor right bound");
+                  continue;
+                }
             }
           // todo: scrap last_tuplets_, use stopped_tuplets_ only.
           // clear stopped_tuplets_ at start_translation_timestep
index a8e7ab5edef58af094481bc22cf685056b893d43..a86b198fe3301e241bd16e2689661efb51768a7b 100644 (file)
@@ -2,7 +2,7 @@
 .SUFFIXES: .html .info .texi .texinfo
 
 # Explicitly list the dependencies on generated content
-$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi
+$(outdir)/web.texi: $(outdir)/we-wrote.itexi $(outdir)/others-did.itexi $(outdir)/weblinks.itexi $(outdir)/version.itexi
 
 $(top-build-dir)/Documentation/$(outdir)/%/index.$(ISOLANG).html: $(outdir)/%/index.html $(TRANSLATION_LILY_IMAGES)
        mkdir -p $(dir $@)
@@ -32,7 +32,7 @@ $(outdir)/%.png: $(top-build-dir)/Documentation/$(outdir)/%.png
 $(MASTER_TEXI_FILES): $(ITELY_FILES) $(ITEXI_FILES) $(outdir)/pictures
 
 $(outdir)/pictures:
-       $(MAKE) -C $(top-build-dir)/Documentation/pictures WWW-1
+       $(MAKE) -C $(top-build-dir)/Documentation/pictures out=www WWW-1
        ln -sf $(top-build-dir)/Documentation/pictures/$(outdir) $@
 
 $(TRANSLATION_LILY_IMAGES): $(MASTER_TEXI_FILES)
index cd5001174ae660d762b3b0ee8e05869c75f73c36..875617a5031db393e35db55c588ee500903a8e61 100644 (file)
@@ -2,10 +2,10 @@ default:
 
 ifeq ($(out),www)
 ifneq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
 endif
 ifeq ($(NO_PDF_FILES),)
-local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES)
+local-WWW-1: $(OUT_TEXINFO_MANUALS) $(MASTER_TEXI_FILES) $(PDF_FILES) $(XREF_MAPS_FILES) $(TRANSLATION_LILY_IMAGES)
 endif
 
 local-WWW-2: $(DEEP_HTML_FILES) $(BIG_PAGE_HTML_FILES) $(DOCUMENTATION_LOCALE_TARGET)
index e279c6d88d13a562c3d20b58d42cfe91a9dc43ad..48cfcdbb123c9fd43313373e492ca1553cb867ed 100644 (file)
@@ -26,12 +26,14 @@ PDF_FILES := $(TELY_FILES:%.tely=$(top-build-dir)/Documentation/$(outdir)/%.$(IS
 ITELY_FILES := $(call src-wildcard,*.itely)
 ITEXI_FILES := $(call src-wildcard,*.itexi)
 
-DOCUMENTATION_INCLUDES = \
+DOCUMENTATION_INCLUDES += \
+  -I $(top-build-dir)/Documentation/$(outdir) \
+  -I $(top-build-dir)/Documentation/snippets/out \
   -I $(top-src-dir)/Documentation/$(ISOLANG)/included \
+  -I $(top-src-dir)/Documentation/included \
   -I $(top-src-dir)/Documentation \
-  -I $(top-build-dir)/Documentation/$(outdir)
+  -I $(top-src-dir)/input/regression
 
-LILYPOND_BOOK_INCLUDES += $(DOCUMENTATION_INCLUDES)
 MAKEINFO_FLAGS += --enable-encoding $(DOCUMENTATION_INCLUDES)
 MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
 
index 985197a4db640f6bc91eeb9ac44803bdcdb294dc..e67a570c92706d79e0913034b599577ef3e656ce 100644 (file)
@@ -27,13 +27,7 @@ MUSICXML2LY = $(script-dir)/musicxml2ly.py
 CONVERT_LY = $(script-dir)/convert-ly.py
 LILYPOND_BOOK = $(script-dir)/lilypond-book.py
 
-LILYPOND_BOOK_INCLUDES = -I $(outdir) -I $(src-dir) -I $(input-dir) \
- -I $(top-src-dir)/Documentation -I $(top-build-dir)/Documentation/snippets/out \
- -I $(input-dir)/regression/ -I $(top-src-dir)/Documentation/included/ \
- -I $(top-build-dir)/mf/$(outconfbase)/ \
- -I $(top-build-dir)/mf/out/ \
- -I $(top-src-dir)/Documentation/pictures \
- -I $(top-build-dir)/Documentation/pictures/$(outdir)
+LILYPOND_BOOK_INCLUDES = -I $(src-dir) $(DOCUMENTATION_INCLUDES)
 
 ## override from cmd line to speed up. 
 ANTI_ALIAS_FACTOR=2
index fbc683330dce81993605c8a143ede83e7cb6def8..1ab911cca2c3f576f103e3eeee8566bfcd0bc481 100644 (file)
@@ -3667,6 +3667,9 @@ 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):
+        stderr_write (NOT_SMART % "staff-padding")
+        stderr_write (_ ("Staff-padding now controls the distance to the baseline, not the nearest point."))
     return str
 
 # Guidelines to write rules (please keep this at the end of this file)
index 7819c574c62cb8a6ef0a14d62e14f5388101bb88..fb29e73cd2d4cc79d752c1606e77654fce4584d3 100644 (file)
@@ -973,24 +973,37 @@ predicates require the parameter to be entered as Scheme expression.
 predicates, to be used in case of a type error in arguments or
 result."
 
+  (define (currying-lambda args doc-string? body)
+    (if (and (pair? args)
+             (pair? (car args)))
+        (currying-lambda (car args) doc-string?
+                         `((lambda ,(cdr args) ,@body)))
+        (if doc-string?
+            `(lambda ,args ,doc-string? ,@body)
+            `(lambda ,args ,@body))))
+
   (set! signature (map (lambda (pred)
                          (if (pair? pred)
                              `(cons ,(car pred)
                                     ,(and (pair? (cdr pred)) (cadr pred)))
                              pred))
                        (cons type signature)))
-  (if (and (pair? body) (pair? (car body)) (eqv? '_i (caar body)))
-      ;; When the music function definition contains an i10n doc string,
-      ;; (_i "doc string"), keep the literal string only
-      (let ((docstring (cadar body))
-            (body (cdr body)))
-        `(ly:make-music-function (list ,@signature)
-                                 (lambda ,args
-                                   ,docstring
-                                   ,@body)))
-      `(ly:make-music-function (list ,@signature)
-                               (lambda ,args
-                                 ,@body))))
+
+  (let ((docstring
+         (and (pair? body) (pair? (cdr body))
+              (if (string? (car body))
+                  (car body)
+                  (and (pair? (car body))
+                       (eq? '_i (caar body))
+                       (pair? (cdar body))
+                       (string? (cadar body))
+                       (null? (cddar body))
+                       (cadar body))))))
+    ;; When the music function definition contains an i10n doc string,
+    ;; (_i "doc string"), keep the literal string only
+    `(ly:make-music-function
+      (list ,@signature)
+      ,(currying-lambda args docstring (if docstring (cdr body) body)))))
 
 (defmacro-public define-music-function rest
   "Defining macro returning music functions.
index 0b04186db4b8bde4c9293a4ef0f2e2281e127390..3e527e2eb79bcb6abadc416ba70e52558b4b474b 100644 (file)
@@ -3,6 +3,3 @@ $(outdir)/%: %.m4
 
 %.gz: %
        gzip -c9 $< > $@
-
-$(outdir)/%.css: $(CSS_DIRECTORY)/%.css
-       ln -f $< $@
index 838219a673baaf5fc3c74874c35300f08296eea4..058276c2c2f9956d9dfb8452a8a0d9683a068acb 100644 (file)
@@ -24,7 +24,7 @@ endif
        touch $@
 
 # Copy files while tracking their dependencies.
-$(outdir)/%.texi: %.texi
+$(outdir)/%.texi: %.texi $(outdir)/version.itexi
        mkdir -p $(dir $@)
        $(DO_TEXI_DEP) cp -f $< $@
 
index c370990413aa65b4da9a4ac74954a80dc9ddb93e..b17824c8d76612536b58e3631bbb86eb1f7844b4 100644 (file)
@@ -31,8 +31,6 @@ DO_TEXI_DEP = ( echo ./$@: $(call scan-texi,$<) > $(basename $@).dep ) &&
 
 TEXINFO_PAPERSIZE_OPTION= $(if $(findstring $(PAPERSIZE),a4),,-t @afourpaper)
 
-DOCUMENTATION_INCLUDES += -I $(top-src-dir)/Documentation
-
 MAKEINFO_FLAGS += --enable-encoding --error-limit=0 $(DOCUMENTATION_INCLUDES)
 MAKEINFO = LANG= $(MAKEINFO_PROGRAM) $(MAKEINFO_FLAGS)
 
index f2fc5610ed65d60dd327593b34a07bc2bce5da4b..ca9a782aa17e5212df8abe2d6ee718f8e997c595 100644 (file)
@@ -1,7 +1,3 @@
 TO_TOP_FILES=$(addprefix $(outdir)/, $(addsuffix .txt, $(README_TOP_FILES)))
 
-DOCUMENTATION_INCLUDES +=\
- -I $(top-src-dir)/Documentation/usage\
- -I $(top-src-dir)/Documentation/contributor\
-
 #