]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'master' into translation
authorJean-Charles Malahieude <lilyfan@orange.fr>
Sat, 7 May 2016 13:21:29 +0000 (15:21 +0200)
committerJean-Charles Malahieude <lilyfan@orange.fr>
Sat, 7 May 2016 13:21:29 +0000 (15:21 +0200)
32 files changed:
Documentation/contributor/website-work.itexi
Documentation/web/news-front.itexi
Documentation/web/news.itexi
Documentation/web/server/lilypond.org.htaccess
VERSION
input/regression/ledger-positions-customization.ly [new file with mode: 0644]
lily/auto-beam-engraver.cc
lily/callback.cc [new file with mode: 0644]
lily/engraver-group.cc
lily/engraver.cc
lily/grob-info.cc
lily/include/callback.hh [new file with mode: 0644]
lily/include/engraver-group.hh
lily/include/engraver.hh
lily/include/grob-info.hh
lily/include/listener.hh
lily/include/scheme-engraver.hh
lily/include/score-engraver.hh
lily/include/staff-symbol.hh
lily/include/translator.hh
lily/include/translator.icc
lily/ledger-line-spanner.cc
lily/listener.cc
lily/note-head.cc
lily/score-engraver.cc
lily/span-bar-stub-engraver.cc
lily/staff-symbol.cc
ly/Welcome-to-LilyPond-MacOS.ly
ly/Welcome_to_LilyPond.ly
po/es.po
po/lilypond.pot
scm/define-grob-properties.scm

index d719843b53e3e1e0d58b9c1b326b47cdb24d44b7..588d705f1b4facfbd11797a6122b95aae935d2b4 100644 (file)
@@ -291,9 +291,11 @@ shared with people without trusted access to the server.
 
 @itemize
 @item
-Install apache2, or any other http server.  These instructions
+Install Apache (you can use version 2, but keep in mind that the server
+hosting lilypond.org runs version 1.3).  These instructions
 assume that you also enable @code{mod_userdir}, and use
-@code{$HOME/public_html/lilypond.org} as the location.
+@code{$HOME/public_html} as DocumentRoot (i.e. the root directory of
+the web server).
 
 @item
 Build the online docs and website:
@@ -309,15 +311,33 @@ command @code{make WEB_LANGS='' website} or the English and (for
 example) the French with @code{make WEB_LANGS='fr' website}.
 
 @item
-Move the built stuff into those directories.  It's highly
-recommended to have your build dir and www dir on the same
-partition.  (make @code{$HOME/public_html/lilypond.org} a symlink
-if necessary)
+Choose the web directory where to copy the built stuff.
+If you already have other web projects in your DocumentRoot and don't
+need to test the @file{.htaccess} file, you can copy to
+@code{~/public_html/lilypond.org}.  Otherwise you'd better copy
+to @code{~/public_html}.
+It's highly recommended to have your build dir and web dir on the
+same partition.
+
+@item
+Add the directory for the online documentation:
+
+@example
+mkdir -p ~/public_html/doc/v2.19/
+@end example
+
+You may want to add also the stable documentation in
+@code{~/public_html/doc/v2.18/}, extracting the contents of the html
+directory present in the tarball available in @rweb{All}. Just in case
+you want to test the redirects to the stable documentation.
+
+@item
+Copy the files with rsync:
 
 @example
-mv out-website/website $HOME/public_html/lilypond.org/
-mkdir -p $HOME/public_html/lilypond.org/doc/v2.19/
-mv out-www/online-root/* $HOME/public_html/lilypond.org/doc/v2.19/
+rsync -av --delete out-website/website ~/public_html/
+cp out-website/.htaccess ~/public_html
+rsync -av --delete out-www/online-root/ ~/public_html/doc/v2.19/
 @end example
 
 @end itemize
index ccd09c884faa01fc7fb8ab7cfb678391f397bee0..e7c6d228db9bf67065cf71a5be4a879ad91601e0 100644 (file)
@@ -9,10 +9,10 @@
 @c used for news about the upcoming release; see CG 10.2
 
 @newsItem
-@subheading LilyPond 2.19.40 released  @emph{April 17, 2016}
+@subheading LilyPond 2.19.41 released  @emph{May 1, 2016}
 
 We are happy to announce the release of LilyPond
-2.19.40.  This release includes a number of enhancements, and contains some
+2.19.41.  This release includes a number of 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.18
index dabfc79144f1179b44477a125ce126f2c0235a1f..9095620830db213dc116ae45706b25ca8598d816 100644 (file)
@@ -26,6 +26,18 @@ NOTE:
   * don't duplicate entries from news-front.itexi
 @end ignore
 
+@newsItem
+@subheading LilyPond 2.19.40 released  @emph{April 17, 2016}
+
+We are happy to announce the release of LilyPond
+2.19.40.  This release includes a number of 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.18
+version.
+
+@newsEnd
+
 @newsItem
 @subheading LilyPond 2.19.39 released  @emph{March 27, 2016}
 
index 9060d0709a207f6b810c251b1781405e5757f437..d6bc37fb5936ebfd6ffefd80f5b8027664e26d09 100644 (file)
@@ -130,9 +130,18 @@ AddCharset utf-8 .fr
 AddCharset utf-8 .nl
 AddCharset utf-8 .txt
 
-# fix broken auto language selection for Hungarian
+# Add extensions for language negotiation
+# See: https://www.w3.org/International/questions/qa-apache-lang-neg
+AddLanguage ca .ca
+AddLanguage cs .cs
+AddLanguage de .de
+AddLanguage es .es
+AddLanguage fr .fr
 AddLanguage hu .hu
-
+AddLanguage it .it
+AddLanguage ja .ja
+AddLanguage nl .nl
+AddLanguage zh .zh
 
 
 # FIXME: separate this from the main "root" .htaccess material
diff --git a/VERSION b/VERSION
index b71387ae8bb5995f9d2a4006d7ddd607a4930687..a71d765f26d3ce5df4d309cc52a75e2751df3145 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -1,7 +1,7 @@
 PACKAGE_NAME=LilyPond
 MAJOR_VERSION=2
 MINOR_VERSION=19
-PATCH_LEVEL=41
+PATCH_LEVEL=42
 MY_PATCH_LEVEL=
 VERSION_STABLE=2.18.2
-VERSION_DEVEL=2.19.40
+VERSION_DEVEL=2.19.41
diff --git a/input/regression/ledger-positions-customization.ly b/input/regression/ledger-positions-customization.ly
new file mode 100644 (file)
index 0000000..9fd2fc0
--- /dev/null
@@ -0,0 +1,27 @@
+
+\header {
+
+texidoc = "3 ways to customize ledger line positions."
+
+}
+
+\version "2.19.41"
+\paper { ragged-right = ##t }
+
+\relative {
+  \override Staff.StaffSymbol.ledger-positions = #'(7 10)
+  f''4 g a b c d e f g a b c
+}
+
+\relative {
+  % note: the scheme procedure (lambda expression) is quoted
+  \override Staff.StaffSymbol.ledger-positions-function =
+    #'(lambda (staff-symbol-grob pos) (list pos))
+  c'''4 d e f
+}
+
+\relative {
+  c'''4
+  \once \override NoteHead.ledger-positions = #'(8 10 12 14)
+  d e f
+}
index 7500ec9ef09bf9fb9af7dc4d272c2e8d2c0e3218..37872577387bd1750a5e30d24558e45b7ea1c8a8 100644 (file)
@@ -223,8 +223,7 @@ Auto_beam_engraver::create_beam ()
     Beam::add_stem (beam, (*stems_)[i]);
 
   Grob_info i = make_grob_info (beam, (*stems_)[0]->self_scm ());
-  i.rerouting_daddy_context_ = beam_start_context_.get_context ();
-  announce_grob (i);
+  announce_grob (i, beam_start_context_.get_context ());
 
   return beam;
 }
@@ -283,9 +282,8 @@ Auto_beam_engraver::end_beam ()
       if (finished_beam_)
         {
           Grob_info i = make_grob_info (finished_beam_, SCM_EOL);
-          i.rerouting_daddy_context_ = beam_start_context_.get_context ();
 
-          announce_end_grob (i);
+          announce_end_grob (i, beam_start_context_.get_context ());
           finished_grouping_ = grouping_;
           finished_beaming_options_ = beaming_options_;
         }
diff --git a/lily/callback.cc b/lily/callback.cc
new file mode 100644 (file)
index 0000000..5310295
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2016  David Kastrup <dak@gnu.org>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include "callback.hh"
+
+const char * const Callback_wrapper::type_p_name_ = 0;
index cf1832fe1fb73dd25f93e621e7a20d077485bbd0..35c14d460ddb3646cd3597048cd8f517b0c890fc 100644 (file)
@@ -92,16 +92,13 @@ Engraver_group::disconnect_from_context ()
 }
 
 void
-Engraver_group::announce_grob (Grob_info info)
+Engraver_group::announce_grob (Grob_info info, Direction dir,
+                               Context *reroute_context)
 {
-  announce_infos_.push_back (info);
+  announce_infos_.push_back (Announce_grob_info (info, dir));
 
-  Context *dad_con = context_->get_parent_context ();
-  if (info.rerouting_daddy_context_)
-    {
-      dad_con = info.rerouting_daddy_context_;
-      info.rerouting_daddy_context_ = 0;
-    }
+  Context *dad_con = reroute_context ? reroute_context
+    : context_->get_parent_context ();
 
   Engraver_group *dad_eng
     = dad_con
@@ -109,7 +106,7 @@ Engraver_group::announce_grob (Grob_info info)
       : 0;
 
   if (dad_eng)
-    dad_eng->announce_grob (info);
+    dad_eng->announce_grob (info, dir);
 }
 
 void
@@ -122,7 +119,7 @@ Engraver_group::acknowledge_grobs ()
 
   for (vsize j = 0; j < announce_infos_.size (); j++)
     {
-      Grob_info info = announce_infos_[j];
+      Announce_grob_info info = announce_infos_[j];
 
       SCM meta = info.grob ()->get_property ("meta");
       SCM nm = scm_assoc (name_sym, meta);
index 7891a1b9eb8fe17f44409f314ef6be32fe4d229c..25ae579bd7dbcd59f844b28c05b51d1db54e9d4a 100644 (file)
@@ -36,16 +36,15 @@ Engraver::get_daddy_engraver () const
 }
 
 void
-Engraver::announce_grob (Grob_info inf)
+Engraver::announce_grob (Grob_info inf, Context *reroute_context)
 {
-  get_daddy_engraver ()->announce_grob (inf);
+  get_daddy_engraver ()->announce_grob (inf, START, reroute_context);
 }
 
 void
-Engraver::announce_end_grob (Grob_info inf)
+Engraver::announce_end_grob (Grob_info inf, Context *reroute_context)
 {
-  inf.start_end_ = STOP;
-  get_daddy_engraver ()->announce_grob (inf);
+  get_daddy_engraver ()->announce_grob (inf, STOP, reroute_context);
 }
 
 Grob_info
index ef991418a1510ac2cd14f8acb9a8e8aa7a470aa1..aab0d3cb8d61b352cf381969d479982d7300f08e 100644 (file)
@@ -29,8 +29,6 @@ Grob_info::Grob_info (Translator *t, Grob *g)
 {
   origin_trans_ = t;
   grob_ = g;
-  start_end_ = START;
-  rerouting_daddy_context_ = 0;
 
   /*
     assert here, because this is easier to debug.
@@ -41,9 +39,7 @@ Grob_info::Grob_info (Translator *t, Grob *g)
 Grob_info::Grob_info ()
 {
   grob_ = 0;
-  start_end_ = START;
   origin_trans_ = 0;
-  rerouting_daddy_context_ = 0;
 }
 
 Stream_event *
diff --git a/lily/include/callback.hh b/lily/include/callback.hh
new file mode 100644 (file)
index 0000000..b797baf
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+  This file is part of LilyPond, the GNU music typesetter.
+
+  Copyright (C) 2016  David Kastrup <dak@gnu.org>
+
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef CALLBACK_HH
+#define CALLBACK_HH
+
+// A callback wrapper creates a Scheme-callable version of a fixed C++
+// function.  It is generally used for calling template-generated
+// trampoline functions leading to calling a particular member
+// function on a given Smob.
+//
+// The class itself is not templated in order not to explode the
+// number of smob types: each class can support a particular call
+// signature.
+//
+// Check the GET_LISTENER call for a typical use case.
+
+#include "smobs.hh"
+
+class Callback_wrapper : public Simple_smob<Callback_wrapper>
+{
+  // We use an ordinary function pointer pointing to a trampoline
+  // function (templated on the callback in question) instead of
+  // storing a member function pointer to a common base class like
+  // Smob_core.  The additional code for the trampolines is negligible
+  // and the performance implications of using member function
+  // pointers in connection with inheritance are somewhat opaque as
+  // this involves an adjustment of the this pointer from Smob_core to
+  // the scope containing the callback.
+  SCM (*trampoline_) (SCM, SCM);
+  Callback_wrapper (SCM (*trampoline) (SCM, SCM)) : trampoline_ (trampoline)
+  { } // Private constructor, use only in make_smob
+public:
+  static const char * const type_p_name_; // = 0
+  LY_DECLARE_SMOB_PROC (&Callback_wrapper::call, 2, 0, 0)
+  SCM call (SCM target, SCM arg)
+  {
+    return trampoline_ (target, arg);
+  }
+  // Callback wrappers are for an unchanging entity, so we do the Lisp
+  // creation just once on the first call of make_smob.  So we only
+  // get a single Callback_wrapper instance for each differently
+  // templated make_smob call.
+  template <SCM (*trampoline) (SCM, SCM)>
+  static SCM make_smob ()
+  {
+    static SCM res =
+      scm_permanent_object (Callback_wrapper (trampoline).smobbed_copy ());
+    return res;
+  }
+};
+
+
+#endif
index aa3cd478bce652c5bc6a098e0250be689a38d0f0..39e52f3c522e7bca705164e6d65301da2504eed5 100644 (file)
 #include "engraver.hh"
 #include "translator-group.hh"
 
+class Announce_grob_info : public Grob_info
+{
+  Direction start_end_;
+public:
+  Announce_grob_info (Grob_info gi, Direction start_end)
+    : Grob_info (gi), start_end_ (start_end)
+  { }
+  Direction start_end () const { return start_end_; }
+};
+
 class Engraver_group : public Translator_group
 {
 protected:
-  vector<Grob_info> announce_infos_;
+  vector<Announce_grob_info> announce_infos_;
   Drul_array<SCM> acknowledge_hash_table_drul_;
   void override (SCM);
   void revert (SCM);
@@ -37,7 +47,8 @@ public:
   void do_announces ();
   virtual void connect_to_context (Context *c);
   virtual void disconnect_from_context ();
-  virtual void announce_grob (Grob_info);
+  virtual void announce_grob (Grob_info, Direction start_end,
+                              Context *reroute_context = 0);
   bool pending_grobs () const;
 private:
   virtual void acknowledge_grobs ();
index 70e168d783ad15b1b18c64ccd7e2c7bb31d7d74d..956f49365b6cc17d4e65c8734d4ec4227cb2bb3d 100644 (file)
@@ -41,8 +41,8 @@ protected:
     Default: ignore the info
   */
   virtual void acknowledge_grob (Grob_info) {}
-  virtual void announce_grob (Grob_info);
-  virtual void announce_end_grob (Grob_info);
+  virtual void announce_grob (Grob_info, Context *reroute_context = 0);
+  virtual void announce_end_grob (Grob_info, Context *reroute_context = 0);
   Engraver_group *get_daddy_engraver () const;
 
 public:
index 1df88ce749f2de9204db3684c38bcf017367db34..6d418379c917402a346f03b03642da436459a205 100644 (file)
@@ -17,8 +17,8 @@
   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-#ifndef STAFFELEMINFO_HH
-#define STAFFELEMINFO_HH
+#ifndef GROB_INFO_HH
+#define GROB_INFO_HH
 
 #include "lily-guile.hh"
 #include "lily-proto.hh"
@@ -31,11 +31,8 @@ class Grob_info
 {
   Translator *origin_trans_;
   Grob *grob_;
-  Direction start_end_;
 
-  friend class Engraver;
 public:
-  Direction start_end () const { return start_end_; }
   Grob *grob () const { return grob_; }
   Translator *origin_translator () const { return origin_trans_; }
 
@@ -49,14 +46,6 @@ public:
   Item *item () const;
   Spanner *spanner () const;
   static bool less (Grob_info i, Grob_info j);
-
-  /*
-    For contexts that change staves, it may be desirable to emit a
-    grob into a staff other than the current one.  If this is non-null,
-    this grob should be announced in this context instead of the
-    daddy_context_.
-  */
-  Context *rerouting_daddy_context_;
 };
 
-#endif // STAFFELEMINFO_HH
+#endif // GROB_INFO_HH
index 27e7d85b719d70eb8f8d5aa101f60720ea3baeb5..b9042ba301ac79f715b197ed22d159bbb47943df 100644 (file)
@@ -74,8 +74,8 @@
   classes derived from Smob<...>.
 */
 
+#include "callback.hh"
 #include "smobs.hh"
-#include "stream-event.hh"
 
 // A listener is essentially any procedure accepting a single argument
 // (namely an event).  The class Listener (or rather a smobbed_copy of
@@ -125,80 +125,18 @@ public:
     return *unchecked_unsmob (a) == *unchecked_unsmob (b)
       ? SCM_BOOL_T : SCM_BOOL_F;
   }
-};
 
-// A callback wrapper creates a Scheme-callable version of a
-// non-static class member function callback which you can call with a
-// class instance and an event.
-//
-// If you have a class member function
-// void T::my_listen (SCM ev)
-// then Callback_wrapper::make_smob<T, SCM, &T::my_listen> ()
-// will return an SCM function roughly defined as
-// (lambda (target ev) (target->my_listen ev))
-//
-// The setup is slightly tricky since the make_smob quasi-constructor
-// call is a template function templated on the given callback, and so
-// is the trampoline it uses for redirecting the callback.  The class
-// itself, however, is not templated as that would create a wagonload
-// of SCM types.
-
-class Callback_wrapper : public Simple_smob<Callback_wrapper>
-{
-  // We use an ordinary function pointer pointing to a trampoline
-  // function (templated on the callback in question) instead of
-  // storing a member function pointer to a common base class like
-  // Smob_core.  The additional code for the trampolines is negligible
-  // and the performance implications of using member function
-  // pointers in connection with inheritance are somewhat opaque as
-  // this involves an adjustment of the this pointer from Smob_core to
-  // the scope containing the callback.
-  void (*trampoline_) (SCM, SCM);
   template <class T, void (T::*callback)(SCM)>
-  static void trampoline (SCM target, SCM ev)
+  static SCM trampoline (SCM target, SCM ev)
   {
     T *t = unsmob<T> (target);
     LY_ASSERT_SMOB (T, target, 1);
 
     (t->*callback) (ev);
-  }
-  template <class T, void (T::*callback)(Stream_event *)>
-  static void trampoline (SCM target, SCM event)
-  {
-    // The same, but for callbacks for translator listeners which get
-    // the unpacked event which, in turn, gets protected previously
-
-    T *t = unsmob<T> (target);
-    LY_ASSERT_SMOB (T, target, 1);
-    LY_ASSERT_SMOB (Stream_event, event, 2);
-
-    t->protect_event (event);
-    (t->*callback) (unsmob<Stream_event> (event));
-  }
-
-  Callback_wrapper (void (*trampoline) (SCM, SCM)) : trampoline_ (trampoline)
-  { } // Private constructor, use only in make_smob
-public:
-  static const char * const type_p_name_; // = 0
-  LY_DECLARE_SMOB_PROC (&Callback_wrapper::call, 2, 0, 0)
-  SCM call (SCM target, SCM ev)
-  {
-    trampoline_ (target, ev);
-    return SCM_UNSPECIFIED;
-  }
-  // Callback wrappers are for an unchanging entity, so we do the Lisp
-  // creation just once on the first call of make_smob.  So we only
-  // get a single Callback_wrapper instance for each differently
-  // templated make_smob call.
-  template <class T, class Arg, void (T::*callback)(Arg)>
-  static SCM make_smob ()
-  {
-    static SCM res = scm_permanent_object
-      (Callback_wrapper (trampoline<T, callback>).smobbed_copy ());
-    return res;
+    return SCM_UNDEFINED;
   }
 };
 
-#define GET_LISTENER(cl, proc) get_listener (Callback_wrapper::make_smob<cl, SCM, &cl::proc> ())
+#define GET_LISTENER(cl, proc) get_listener (Callback_wrapper::make_smob<Listener::trampoline<cl, &cl::proc> > ())
 
 #endif /* LISTENER_HH */
index e22e572c7fe6ec15c07d2728b55970e25b19096a..3cd691578fa5b4b2b83f1ac9ecf5b0007dd979de 100644 (file)
@@ -67,8 +67,6 @@ private:
   SCM interface_end_acknowledger_hash_;
 
   // Alist of listened-symbol . scheme-function
-  SCM listeners_alist_;
-
   SCM per_instance_listeners_;
 };
 
index 9b7927ddab680a6be67089e4d0a85f6f193e35e3..d0ec7821679d13da39e8e90dd9c3d6495ee4680d 100644 (file)
@@ -41,7 +41,7 @@ protected:
   virtual void disconnect_from_context ();
   virtual void initialize ();
   virtual void finalize ();
-  virtual void announce_grob (Grob_info);
+  virtual void announce_grob (Grob_info, Direction dir, Context *reroute_context = 0);
   void stop_translation_timestep ();
 
   /*
index 9454ebe7f445a53c72f7284c1e7bfb5a6cd9280e..28b30244c7a87316721b913655aab890b5157cfe 100644 (file)
@@ -34,7 +34,7 @@ public:
   static Real get_ledger_line_thickness (Grob *);
 
   static vector<Real> line_positions (Grob *);
-  static vector<Real> ledger_positions (Grob *me, int pos);
+  static vector<Real> ledger_positions (Grob *me, int pos, Item const *head = 0);
   static int line_count (Grob *);
   static bool on_line (Grob *me, int pos, bool allow_ledger = true);
   static Interval line_span (Grob *);
index a4cf192ffffa47c9787b66d5cdd6cb3f38329811..118220772ab72b758ea467f67e616bbff6946230 100644 (file)
@@ -133,7 +133,19 @@ public:
 protected:                      // should be private.
   Context *daddy_context_;
   void protect_event (SCM ev);
-  friend class Callback_wrapper;
+
+  template <class T, void (T::*callback)(Stream_event *)>
+  static SCM trampoline (SCM target, SCM event)
+  {
+    T *t = unsmob<T> (target);
+    LY_ASSERT_SMOB (T, target, 1);
+    LY_ASSERT_SMOB (Stream_event, event, 2);
+
+    t->protect_event (event);
+    (t->*callback) (unsmob<Stream_event> (event));
+    return SCM_UNSPECIFIED;
+  }
+
   virtual void derived_mark () const;
   static SCM event_class_symbol (const char *ev_class);
   SCM static_translator_description (const char *grobs,
index d5057021362c398b4418c2c4d1b5e9e3ecc2d9ea..250a92313724f9ab1a7afb0778085dcb7f9eb73b 100644 (file)
@@ -20,7 +20,7 @@
 #ifndef TRANSLATOR_ICC
 #define TRANSLATOR_ICC
 
-#include "listener.hh"
+#include "callback.hh"
 #include "std-vector.hh"
 #include "translator.hh"
 
@@ -140,8 +140,8 @@ cl :: _internal_declare_ ## m ()                        \
 {                                                       \
   listener_list_ = scm_acons                                            \
     (event_class_symbol (#m),                                           \
-     Callback_wrapper::make_smob<cl, Stream_event *, &cl::listen_ ## m> (), \
-     listener_list_);                                                   \
+     Callback_wrapper::make_smob                                        \
+     <trampoline <cl, &cl::listen_ ## m> > (), listener_list_);         \
 }                                                                       \
                                                                         \
 ADD_SCM_INIT_FUNC (cl ## _declare_event_ ## m, cl::_internal_declare_ ## m);
index 42d32b496af7bb5ec7a15f1b52cdbc4ea84959c8..2fe2d7d9c3896e0b627dccc8f78ab51444007006 100644 (file)
@@ -211,10 +211,9 @@ Ledger_line_spanner::print (SCM smob)
   for (vsize i = heads.size (); i--;)
     {
       Item *h = dynamic_cast<Item *> (heads[i]);
-
       int pos = Staff_symbol_referencer::get_rounded_position (h);
       vector<Real> ledger_positions =
-        Staff_symbol::ledger_positions (staff, pos);
+        Staff_symbol::ledger_positions (staff, pos, h);
 
       // We work with all notes that produce ledgers and any notes that
       // fall outside the staff that do not produce ledgers, such as
index c1e0b442e25dff095b30944d380adc7d3134ad89..2a8d28d8cbb6daa0d287eeccded86624f75fbb9d 100644 (file)
@@ -19,6 +19,4 @@
 
 #include "listener.hh"
 
-const char * const Callback_wrapper::type_p_name_ = 0;
-
 const char Listener::type_p_name_[] = "ly:listener?";
index 33bbf339cafd9b431b83d2955522c2c8f91c1379..73a2255d9040a91199e994cf05c2fe0e6f9a74b5 100644 (file)
@@ -211,5 +211,6 @@ ADD_INTERFACE (Note_head,
                "glyph-name "
                "stem-attachment "
                "style "
+               "ledger-positions "
               );
 
index 0415d5e4a1c72c6a6be52019b2553474b501358f..3e4fb973152f691fce87f9d2bed7052227d13820 100644 (file)
@@ -155,10 +155,10 @@ Score_engraver::one_time_step (SCM)
 }
 
 void
-Score_engraver::announce_grob (Grob_info info)
+Score_engraver::announce_grob (Grob_info info, Direction start_end, Context *reroute_context)
 {
-  Engraver_group::announce_grob (info);
-  if (info.start_end () == START)
+  Engraver_group::announce_grob (info, start_end, reroute_context);
+  if (start_end == START)
     {
       pscore_->root_system ()->typeset_grob (info.grob ());
       elems_.push_back (info.grob ());
index 3517c3f5fd38e6e3938a567b90f63caab4adf733..304564398f0841c7832aa8d5412f6b8e04a30459 100644 (file)
@@ -148,8 +148,7 @@ Span_bar_stub_engraver::process_acknowledged ()
           Item *it = new Item (Grob_property_info (affected_contexts[j], ly_symbol2scm ("SpanBarStub")).updated ());
           it->set_parent (spanbars_[i], X_AXIS);
           Grob_info gi = make_grob_info (it, spanbars_[i]->self_scm ());
-          gi.rerouting_daddy_context_ = affected_contexts[j];
-          announce_grob (gi);
+          announce_grob (gi, affected_contexts[j]);
           if (!keep_extent[j])
             it->suicide ();
         }
index 256a9bdd0d24687ac26a63cc8cbc9a7ca2c7159e..0697085e114b7fb7811c65a71947e6c61052d9c3 100644 (file)
@@ -135,8 +135,27 @@ Staff_symbol::line_positions (Grob *me)
 }
 
 vector<Real>
-Staff_symbol::ledger_positions (Grob *me, int pos)
+Staff_symbol::ledger_positions (Grob *me, int pos, Item const *head)
 {
+  // allow override of ledger positions via note head grob...
+  if (head)
+    {
+      SCM posns = head->get_property ("ledger-positions");
+      if (scm_is_pair (posns))
+        return ly_scm2floatvector (posns);
+    }
+
+  // ...or via custom ledger positions function
+  SCM lp_function = me->get_property ("ledger-positions-function");
+  if (scm_is_pair (lp_function))
+    {
+      SCM func = scm_eval (lp_function, scm_interaction_environment ());
+      if (ly_is_procedure (func))
+        return ly_scm2floatvector (scm_call_2 (func,
+                                               me->self_scm (),
+                                               scm_from_int (pos)));
+    }
+
   SCM ledger_positions = me->get_property ("ledger-positions");
   Real ledger_extra = robust_scm2double (me->get_property ("ledger-extra"), 0);
   vector<Real> line_positions = Staff_symbol::line_positions (me);
@@ -166,7 +185,7 @@ Staff_symbol::ledger_positions (Grob *me, int pos)
   Direction dir = (Direction)sign (pos - nearest_line);
 
   if (scm_is_pair (ledger_positions))
-    // custom ledger line positions
+    // custom ledger positions via StaffSymbol.ledger-positions
     {
       Real min_pos = HUGE_VAL;
       Real max_pos = -HUGE_VAL;
@@ -402,6 +421,7 @@ ADD_INTERFACE (Staff_symbol,
                "ledger-extra "
                "ledger-line-thickness "
                "ledger-positions "
+               "ledger-positions-function "
                "line-count "
                "line-positions "
                "staff-space "
index 7381ab5caa7fc0200326f4ffd0556560d5d2691b..87ae51855d57677710dd6b12b8d0a4c0fc8ba4ee 100644 (file)
@@ -23,7 +23,7 @@ That's it.  For more information, visit http://lilypond.org .
 
 %}
 
-\version "2.19.40"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.41"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index 6225500a8f3b3406c405ff39437f3db9173671c7..526bb56eb466dd245097399c68fdbba72aa876d5 100644 (file)
@@ -32,7 +32,7 @@ Good luck with LilyPond!  Happy engraving.
 
 %}
 
-\version "2.19.40"  % necessary for upgrading to future LilyPond versions.
+\version "2.19.41"  % necessary for upgrading to future LilyPond versions.
 
 \header{
   title = "A scale in LilyPond"
index c927d29f39721a6948700fe06b6c117fd908639c..bc34b5f5bebe1756d8867ba8e7a3084b459f50e7 100644 (file)
--- a/po/es.po
+++ b/po/es.po
@@ -1,4 +1,4 @@
-# translation of lilypond-2.17.96.po to Español
+# translation of lilypond-2.19.26.po to Español
 # Spanish translation of GNU Lilypond - http://lilypond.org
 # Copyright (C) 2002, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
 #
@@ -7,16 +7,16 @@
 # Quique <quique@sindominio.net>, 2002, 2004.
 # Daniel Tonda <daniel dot tonda (at) gmail dot com>, 2006.
 # This file is distributed under the same license as the lilypond package.
-# Francisco Vila <paconet.org@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013.
+# Francisco Vila <paconet.org@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2016.
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond-2.17.96\n"
+"Project-Id-Version: lilypond-2.19.26\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs\n"
-"POT-Creation-Date: 2013-11-24 12:14+0000\n"
-"PO-Revision-Date: 2013-11-29 10:11+0100\n"
+"POT-Creation-Date: 2015-08-27 10:48+0100\n"
+"PO-Revision-Date: 2016-04-30 16:09+0200\n"
 "Last-Translator: Francisco Vila <paconet.org@gmail.com>\n"
-"Language-Team: Spanish <es@li.org>\n"
+"Language-Team: Spanish <es@tp.org.es>\n"
 "Language: es\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -42,11 +42,11 @@ msgstr "no se encuentra \\begin{document} en el documento de LaTeX"
 msgid "Running `%s' on file `%s' to detect default page settings.\n"
 msgstr "Ejecutando «%s» sobre el archivo «%s» para detectar los ajustes de página predeterminados.\n"
 
-#: book_latex.py:212 book_texinfo.py:228
+#: book_latex.py:219 book_texinfo.py:228
 msgid "Unable to auto-detect default settings:\n"
 msgstr "No se pudieron detectar automáticamente los ajustes predeterminados:\n"
 
-#: book_latex.py:224 book_texinfo.py:240
+#: book_latex.py:231 book_texinfo.py:240
 #, python-format
 msgid ""
 "Unable to auto-detect default settings:\n"
@@ -55,7 +55,7 @@ msgstr ""
 "No se pudieron detectar automáticamente los ajustes predeterminados:\n"
 "%s"
 
-#: book_latex.py:247
+#: book_latex.py:254
 msgid "cannot detect textwidth from LaTeX"
 msgstr "no se puede detectar el valor de textwidth a partir de LaTeX"
 
@@ -89,31 +89,31 @@ msgstr "opción ly desconocida e ignorada: %s"
 msgid "Missing files: %s"
 msgstr "Archivos que faltan: %s"
 
-#: book_snippets.py:651
+#: book_snippets.py:661
 #, python-format
 msgid "Could not overwrite file %s"
 msgstr "No se puede sobreescribir el archivo %s"
 
-#: book_snippets.py:738
+#: book_snippets.py:748
 #, python-format
 msgid "Running through filter `%s'"
 msgstr "Ejecutando a través del filtro «%s»"
 
-#: book_snippets.py:759
+#: book_snippets.py:769
 #, python-format
 msgid "`%s' failed (%d)"
 msgstr "«%s» ha fallado (%d)"
 
-#: book_snippets.py:760
+#: book_snippets.py:770
 msgid "The error log is as follows:"
 msgstr "El registro de errores es como sigue:"
 
-#: book_snippets.py:880
+#: book_snippets.py:890
 #, python-format
 msgid "Converting MusicXML file `%s'...\n"
 msgstr "Conviertiendo archivo MusicXML «%s»...\n"
 
-#: book_snippets.py:907
+#: book_snippets.py:917
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of original file,\n"
@@ -122,7 +122,7 @@ msgstr ""
 "%s: nombre duplicado pero contenido diferente del archivo original,\n"
 "se imprime la diferencia respecto al archivo existente."
 
-#: book_snippets.py:920
+#: book_snippets.py:930
 #, python-format
 msgid ""
 "%s: duplicate filename but different contents of converted lilypond file,\n"
@@ -173,7 +173,7 @@ msgstr "\\textstyle en desuso, sintaxis nueva para \\key"
 
 #: convertrules.py:82 convertrules.py:1856 convertrules.py:2032
 #: convertrules.py:2175 convertrules.py:2506 convertrules.py:2801
-#: convertrules.py:3151 convertrules.py:3385
+#: convertrules.py:3151 convertrules.py:3388 convertrules.py:3700
 msgid "bump version for release"
 msgstr "actualizar la versión para el lanzamiento"
 
@@ -594,10 +594,10 @@ msgstr "Eliminar oldaddlyrics"
 #: convertrules.py:2820
 msgid ""
 "oldaddlyrics is no longer supported. \n"
-"         Use addlyrics or lyrsicsto instead.\n"
+"         Use addlyrics or lyricsto instead.\n"
 msgstr ""
 "oldaddlyrics ya no está contemplado. \n"
-"         Utilice en su lugar addlyrics o lyrsicsto.\n"
+"         Utilice en su lugar addlyrics o lyricsto.\n"
 
 #: convertrules.py:2826
 msgid ""
@@ -628,9 +628,7 @@ msgstr "\\bar \".\" ahora produce una línea divisoria gruesa.\n"
 
 #: convertrules.py:2849
 msgid "Dash parameters for slurs and ties are now in 'dash-definition.\n"
-msgstr ""
-"Los parámetros de discontinuidad para las ligaduras\n"
-"de expresión y de unión ahora están en 'dash-definition.\n"
+msgstr "Los parámetros de discontinuidad para las ligaduras de expresión y de unión ahora están en 'dash-definition.\n"
 
 #: convertrules.py:2854
 msgid ""
@@ -845,15 +843,15 @@ msgstr "consistent-broken-slope se maneja ahora a través del callback «positio
 msgid "input/regression/beam-broken-classic.ly shows how broken beams are now handled.\n"
 msgstr "input/regression/beam-broken-classic.ly muestra cómo se manejan ahora las barras divididas.\n"
 
-#: convertrules.py:3369
+#: convertrules.py:3372
 msgid "beamExceptions controls whole-measure beaming."
 msgstr "beamExceptions controla el barrado de compases completos."
 
-#: convertrules.py:3606
+#: convertrules.py:3609
 msgid "Flag.transparent and Flag.color inherit from Stem"
 msgstr "Flag.transparent y Flag.color se heredan de Stem"
 
-#: convertrules.py:3672
+#: convertrules.py:3675
 msgid "Staff-padding now controls the distance to the baseline, not the nearest point."
 msgstr "Staff-padding ahora controla la distancia a la línea de base, no al punto más próximo."
 
@@ -959,12 +957,12 @@ msgstr "¡Se ha proporcionado una octava de alteración de tonalidad para un nú
 msgid "Unable to find instrument for ID=%s\n"
 msgstr "No se ha podido encontrar el instrumento con el ID=%s\n"
 
-#: abc2ly.py:1386 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
+#: abc2ly.py:1389 convert-ly.py:85 lilypond-book.py:122 midi2ly.py:1044
 #, python-format
 msgid "%s [OPTION]... FILE"
 msgstr "%s [OPCIÓN]... ARCHIVO"
 
-#: abc2ly.py:1387
+#: abc2ly.py:1390
 #, python-format
 msgid ""
 "abc2ly converts ABC music files (see\n"
@@ -973,29 +971,29 @@ msgstr ""
 "abc2ly convierte archivos de música de ABC\n"
 "(véase %s) en código de entrada de LilyPond.\n"
 
-#: abc2ly.py:1395 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
-#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:181
+#: abc2ly.py:1398 convert-ly.py:92 etf2ly.py:1208 lilypond-book.py:231
+#: midi2ly.py:1095 musicxml2ly.py:2590 main.cc:184
 msgid "show version number and exit"
 msgstr "mostrar el número de versión y salir"
 
-#: abc2ly.py:1398 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
-#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:160
+#: abc2ly.py:1401 convert-ly.py:96 etf2ly.py:1204 lilypond-book.py:140
+#: midi2ly.py:1062 musicxml2ly.py:2572 main.cc:163
 msgid "show this help and exit"
 msgstr "mostrar esta ayuda y salir"
 
-#: abc2ly.py:1401 etf2ly.py:1209 midi2ly.py:1071
+#: abc2ly.py:1404 etf2ly.py:1209 midi2ly.py:1071
 msgid "write output to FILE"
 msgstr "escribir la salida en el ARCHIVO"
 
-#: abc2ly.py:1404
+#: abc2ly.py:1407
 msgid "be strict about success"
 msgstr "ser estricto respecto al éxito"
 
-#: abc2ly.py:1407
+#: abc2ly.py:1410
 msgid "preserve ABC's notion of beams"
 msgstr "preservar la noción de las barras de ABC"
 
-#: abc2ly.py:1410
+#: abc2ly.py:1413
 msgid "suppress progress messages"
 msgstr "suprimir mensajes de avance"
 
@@ -1003,8 +1001,8 @@ msgstr "suprimir mensajes de avance"
 #. "Report bugs in English via %s",
 #. or if there is a LilyPond users list or forum in your language
 #. "Report bugs in English via %s or in YOUR_LANG via URI"
-#: abc2ly.py:1413 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
-#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:315
+#: abc2ly.py:1416 convert-ly.py:157 etf2ly.py:1218 lilypond-book.py:258
+#: midi2ly.py:1107 musicxml2ly.py:2674 main.cc:318
 #, c-format, python-format
 msgid "Report bugs via %s"
 msgstr ""
@@ -1058,7 +1056,7 @@ msgid "Print log messages according to LOGLEVEL (NONE, ERROR, WARNING, PROGRESS
 msgstr "Imprimir los mensajes de registro según NIVEL_DE_REGISTRO (NONE (ninguno), ERROR (error), WARNING (advertencias), PROGRESS (avance; predeterminado), DEBUG (depuración))"
 
 #: convert-ly.py:111 lilypond-book.py:163 lilypond-book.py:181
-#: musicxml2ly.py:2629 main.cc:174
+#: musicxml2ly.py:2629 main.cc:177
 msgid "LOGLEVEL"
 msgstr "NIVEL_DE_REGISTRO"
 
@@ -1090,7 +1088,7 @@ msgid "make a numbered backup [default: filename.ext~]"
 msgstr "hacer una copia de respaldo numerada [predeterminado: nombre.ext~]"
 
 #: convert-ly.py:152 etf2ly.py:1212 lilypond-book.py:234 midi2ly.py:1096
-#: main.cc:183
+#: main.cc:186
 msgid "show warranty and copyright"
 msgstr "mostrar los avisos de garantía y de copyright"
 
@@ -1111,17 +1109,17 @@ msgstr "Detención en la última regla satisfactoria"
 msgid "Processing `%s'... "
 msgstr "Procesando «%s»... "
 
-#: convert-ly.py:367
+#: convert-ly.py:366
 #, python-format
 msgid "%s: Unable to open file"
 msgstr "%s: No se pudo abrir el archivo"
 
-#: convert-ly.py:373
+#: convert-ly.py:372
 #, python-format
 msgid "%s: Unable to determine version.  Skipping"
 msgstr "%s: no se puede determinar la versión.  Se salta"
 
-#: convert-ly.py:379
+#: convert-ly.py:378
 #, python-format
 msgid ""
 "%s: Invalid version string `%s' \n"
@@ -1130,7 +1128,7 @@ msgstr ""
 "%s: Cadena de versión no válida `%s' \n"
 "Las cadenas de versión válidas se componen de tres números separados por puntos, p.ej. `2.8.12'"
 
-#: convert-ly.py:385
+#: convert-ly.py:384
 #, python-format
 msgid "There was %d error."
 msgid_plural "There were %d errors."
@@ -1152,7 +1150,7 @@ msgstr ""
 "archivo de LilyPond listo para usar.\n"
 
 #: etf2ly.py:1210 midi2ly.py:1067 midi2ly.py:1072 musicxml2ly.py:2659
-#: main.cc:166 main.cc:178
+#: main.cc:169 main.cc:181
 msgid "FILE"
 msgstr "ARCHIVO"
 
@@ -1190,7 +1188,7 @@ msgid "add DIR to include path"
 msgstr "añadir DIRECTORIO a la ruta de inclusión"
 
 #: lilypond-book.py:143 lilypond-book.py:150 lilypond-book.py:169
-#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:165
+#: lilypond-book.py:187 lilypond-book.py:208 lilypond-book.py:214 main.cc:168
 msgid "DIR"
 msgstr "DIRECTORIO"
 
@@ -1203,7 +1201,7 @@ msgid "PAD"
 msgstr "RELLENAR"
 
 #: lilypond-book.py:157
-msgid "pad left side of music to align music inspite of uneven bar numbers (in mm)"
+msgid "pad left side of music to align music in spite of uneven bar numbers (in mm)"
 msgstr "rellenar el lado izquierdo de la música para alinear la música aunque haya un número desigual de compases (en mm)"
 
 #: lilypond-book.py:162
@@ -1337,17 +1335,17 @@ msgstr "Procesando el archivo de inclusión: %s"
 msgid "Removing `%s'"
 msgstr "Suprimiendo «%s»"
 
-#: lilypond-book.py:714
+#: lilypond-book.py:727
 #, python-format
 msgid "Setting LilyPond's loglevel to %s"
 msgstr "Se establece el nivel de registro de LilyPond a %s"
 
-#: lilypond-book.py:718
+#: lilypond-book.py:731
 #, python-format
 msgid "Setting LilyPond's loglevel to %s (from environment variable LILYPOND_LOGLEVEL)"
 msgstr "Se establece el nivel de registro de LilyPond a %s (a partir de la variable de entorno LILYPOND_LOGLEVEL)"
 
-#: lilypond-book.py:721
+#: lilypond-book.py:734
 msgid "Setting LilyPond's output to --verbose, implied by lilypond-book's setting"
 msgstr "Se establece la salida de LilyPond a --verbose (prolija), implícita por el ajuste de lilypond-book"
 
@@ -1650,22 +1648,22 @@ msgstr "Leyendo MusicXML desde %s ..."
 #: musicxml2ly.py:2894
 #, python-format
 msgid "Output to `%s'"
-msgstr "La salida se dirige hacia `%s'"
+msgstr "La salida se dirige hacia «%s»"
 
 #: musicxml2ly.py:2964
 #, python-format
 msgid "Unable to find input file %s"
 msgstr "No se encuentra el archivo de entrada %s"
 
-#: website_post.py:125
+#: website_post.py:129
 msgid "English"
 msgstr "Inglés"
 
-#: website_post.py:128
+#: website_post.py:132
 msgid "Other languages"
 msgstr "Otros idiomas"
 
-#: website_post.py:129
+#: website_post.py:133
 #, python-format
 msgid "About <a href=\"%s\">automatic language selection</a>."
 msgstr "Acerca de la <a href=\"%s\">selección automática del idioma</a>."
@@ -1740,21 +1738,21 @@ msgstr "advertencia suprimida: %s"
 msgid "accidental typesetting list must begin with context-name: %s"
 msgstr "la lista de tippografiado de alteraciones accidentales debe comenzar con context-name: %s"
 
-#: accidental-engraver.cc:210
+#: accidental-engraver.cc:207
 #, c-format
 msgid "procedure or context-name expected for accidental rule, found %s"
 msgstr "se esperaba un procedimiento o un nombre de contexto para la regla de alteración accidental, se ha encontrado %s"
 
-#: accidental.cc:169
+#: accidental.cc:141
 #, c-format
 msgid "Could not find glyph-name for alteration %s"
 msgstr "No se ha encontrado el nombre de glifo para la alteración %s"
 
-#: accidental.cc:184
+#: accidental.cc:157
 msgid "natural alteration glyph not found"
 msgstr "no se encuentra el glifo del símbolo de becuadro"
 
-#: all-font-metrics.cc:149
+#: all-font-metrics.cc:159
 #, c-format
 msgid "cannot find font: `%s'"
 msgstr "no se encuentra la tipografía «%s»"
@@ -1767,11 +1765,6 @@ msgstr "el argumento de \\applycontext no es un procedimiento"
 msgid "no heads for arpeggio found?"
 msgstr "¿No se han encontrado notas para el arpegio?"
 
-#: auto-change-iterator.cc:74 change-iterator.cc:72
-#, c-format
-msgid "cannot change, already in translator: %s"
-msgstr "no se puede cambiar, ya está dentro del traductor: %s"
-
 #: axis-group-engraver.cc:149
 msgid "Axis_group_engraver: vertical group already has a parent"
 msgstr "Axis_group_engraver: el grupo vertical ya tiene un ancestro"
@@ -1784,12 +1777,12 @@ msgstr "¿hay dos Axis_group_engravers?"
 msgid "removing this vertical group"
 msgstr "se suprime este grupo vertical"
 
-#: axis-group-interface.cc:714
+#: axis-group-interface.cc:716
 #, c-format
 msgid "\"%s\" is not a valid outside-staff-placement-directive"
 msgstr "«%s» no es una directiva válida de colocación fuera del pentagrama"
 
-#: axis-group-interface.cc:786
+#: axis-group-interface.cc:788
 msgid "an outside-staff object should have a direction, defaulting to up"
 msgstr "un objeto externo a la pauta debe tener una dirección, por omisión se establece hacia arriba"
 
@@ -1819,11 +1812,11 @@ msgid "beam was started here"
 msgstr "la barra comenzó aquí"
 
 #. We are completely screwed.
-#: beam-quanting.cc:839
+#: beam-quanting.cc:850
 msgid "no viable initial configuration found: may not find good beam slope"
 msgstr "no se ha encontrado ninguna configuración inicial viable; puede que no se encuentre una buena inclinación de las barras"
 
-#: beam.cc:181
+#: beam.cc:183
 msgid "removing beam with no stems"
 msgstr "se suprime la barra sin plicas"
 
@@ -1833,22 +1826,24 @@ msgid "cannot change `%s' to `%s'"
 msgstr "no se puede cambiar de «%s» a «%s»"
 
 #. FIXME: constant error message.
-#: change-iterator.cc:93
+#: change-iterator.cc:67
 msgid "cannot find context to switch to"
 msgstr "no se encuentra el contexto al que cambiar"
 
+#. No enclosing context was found because the iterator's immediate
+#. context is the kind that was sought.
 #. We could change the current translator's id, but that would make
 #. errors hard to catch.
 #.
 #. last->translator_id_string () = get_change
 #. ()->change_to_id_string ();
-#: change-iterator.cc:102
+#: change-iterator.cc:78
 #, c-format
 msgid "not changing to same context type: %s"
 msgstr "no se cambia al mismo tipo de contexto: %s"
 
-#. FIXME: uncomprehensable message
-#: change-iterator.cc:106
+#. FIXME: incomprehensible message
+#: change-iterator.cc:82
 msgid "none of these in my family"
 msgstr "no hay ninguno de estos en mi familia"
 
@@ -1883,26 +1878,26 @@ msgstr "Coherent_ligature_engraver: se establece `spacing-increment=0.01': ptr=%
 msgid "cannot find line breaking that satisfies constraints"
 msgstr "no se ecnuentra un salto de línea que cumpla las restricciones"
 
-#: context-property.cc:43
+#: context-property.cc:46
 msgid "need symbol arguments for \\override and \\revert"
 msgstr "se necesitan argumentos de símbolo para \\override y \\revert"
 
-#: context.cc:149
+#: context.cc:144
 #, c-format
 msgid "cannot find or create new `%s'"
 msgstr "no se encuentra o no se puede crear un «%s» nuevo"
 
-#: context.cc:228
+#: context.cc:223
 #, c-format
 msgid "cannot find or create `%s' called `%s'"
 msgstr "no se encuentra o no se puede crear «%s» llamado «%s»"
 
-#: context.cc:425
+#: context.cc:416
 #, c-format
 msgid "cannot find or create: `%s'"
 msgstr "no se encuentra o no se puede crear «%s»"
 
-#: context.cc:439
+#: context.cc:430
 #, c-format
 msgid "cannot find or create new Bottom = \"%s\""
 msgstr "no se encuentra o no se puede crear un Bottom = «%s» nuevo"
@@ -1912,20 +1907,20 @@ msgstr "no se encuentra o no se puede crear un Bottom = «%s» nuevo"
 msgid "custos `%s' not found"
 msgstr "no se encuentran los custos «%s»"
 
-#: dispatcher.cc:89
+#: dispatcher.cc:82
 msgid "Event class should be a list"
 msgstr "La clase del evento debe ser una lista"
 
-#: dispatcher.cc:172
+#: dispatcher.cc:165
 #, c-format
 msgid "Junking event: %s"
 msgstr "se elimina el evento: %s"
 
-#: dispatcher.cc:277
+#: dispatcher.cc:279
 msgid "Attempting to remove nonexisting listener."
 msgstr "Tratando de eliminar un \"listener\" que no existe."
 
-#: dispatcher.cc:303
+#: dispatcher.cc:305
 msgid "Already listening to dispatcher, ignoring request"
 msgstr "Ya se está escuchando al despachador, se ignora la solicitud"
 
@@ -1934,7 +1929,7 @@ msgstr "Ya se está escuchando al despachador, se ignora la solicitud"
 msgid "dot `%s' not found"
 msgstr "no se encuentra el puntillo «%s»"
 
-#: dynamic-engraver.cc:168
+#: dynamic-engraver.cc:169
 #, c-format
 msgid ""
 "unknown crescendo style: %s\n"
@@ -1943,7 +1938,7 @@ msgstr ""
 "estilo de crescendo desconocido: %s\n"
 "se toma regulador como predeterminado."
 
-#: dynamic-engraver.cc:233 slur-proto-engraver.cc:119
+#: dynamic-engraver.cc:234 slur-proto-engraver.cc:119
 #, c-format
 msgid "unterminated %s"
 msgstr "%s sin terminar"
@@ -1971,22 +1966,22 @@ msgstr "episema sin terminar"
 msgid "unterminated extender"
 msgstr "prolongación sin terminar"
 
-#: flag.cc:134
+#: flag.cc:133
 #, c-format
 msgid "flag `%s' not found"
 msgstr "no se encuentra el indicador «%s»"
 
-#: flag.cc:154
+#: flag.cc:153
 #, c-format
 msgid "flag stroke `%s' not found"
 msgstr "no se encuentra la forma del glifo del corchete «%s»"
 
-#: font-config-scheme.cc:151 font-config.cc:53
+#: font-config-scheme.cc:151 font-config.cc:82
 #, c-format
 msgid "failed adding font directory: %s"
 msgstr "fallo al añadir la carpeta de tipografías: %s"
 
-#: font-config-scheme.cc:153 font-config.cc:55
+#: font-config-scheme.cc:153 font-config.cc:84
 #, c-format
 msgid "Adding font directory: %s"
 msgstr "Añadiendo carpeta de tipografías: %s"
@@ -2005,7 +2000,17 @@ msgstr "Añadiendo archivo de fuente tipográfica: %s"
 msgid "Initializing FontConfig..."
 msgstr "Inicializando FontConfig..."
 
-#: font-config.cc:58
+#: font-config.cc:70
+#, c-format
+msgid "failed to add fontconfig configuration file `%s'"
+msgstr "fallo al añadir el archivo de configuración de fontconfig: «%s»"
+
+#: font-config.cc:73
+#, c-format
+msgid "Adding fontconfig configuration file: %s"
+msgstr "Añadiendo archivo de configuración de fontconfig: %s"
+
+#: font-config.cc:86
 msgid "Building font database..."
 msgstr "Construyendo la base de datos de fuentes tipográficas..."
 
@@ -2013,12 +2018,12 @@ msgstr "Construyendo la base de datos de fuentes tipográficas..."
 msgid "Must be footnote-event."
 msgstr "Debe ser un evento de nota al pie."
 
-#: general-scheme.cc:390
+#: general-scheme.cc:403
 #, c-format
 msgid "failed redirecting stderr to `%s'"
 msgstr "fallo al redirigir la salida stderr a «%s»"
 
-#: general-scheme.cc:469 output-ps.scm:48
+#: general-scheme.cc:482 output-ps.scm:48
 msgid "Found infinity or nan in output.  Substituting 0.0"
 msgstr "Se ha encontrado Infinito o NaN en la salida. Se sustituye por 0.0"
 
@@ -2069,12 +2074,12 @@ msgstr "interfaz desconocido «%s»"
 msgid "Grob `%s' has no interface for property `%s'"
 msgstr "El grob «%s» no tiene interfaz para la propiedad «%s»"
 
-#: grob-property.cc:35
+#: grob-property.cc:33
 #, c-format
 msgid "%d: %s"
 msgstr "%d: %s"
 
-#: grob.cc:488
+#: grob.cc:492
 #, c-format
 msgid "ignored infinite %s-offset"
 msgstr "se ignora el desplazamiento infinito de %s"
@@ -2083,7 +2088,7 @@ msgstr "se ignora el desplazamiento infinito de %s"
 msgid "Asking for broken bound padding at a non-broken bound."
 msgstr "Se está solicitando un relleno de límite cortado en un límite que no está cortado."
 
-#: hairpin.cc:256
+#: hairpin.cc:257
 msgid "decrescendo too small"
 msgstr "decrescendo demasiado pequeño"
 
@@ -2103,7 +2108,7 @@ msgstr "se suprime el guión separador sin terminación"
 msgid "unterminated hyphen; removing"
 msgstr "guión separador sin terminar; se suprime"
 
-#: includable-lexer.cc:71 lily-guile.cc:91 lily-parser-scheme.cc:108
+#: includable-lexer.cc:71 lily-guile.cc:92 lily-parser-scheme.cc:108
 #, c-format
 msgid "cannot find file: `%s'"
 msgstr "no se encuentra el archivo: «%s»"
@@ -2113,11 +2118,11 @@ msgstr "no se encuentra el archivo: «%s»"
 msgid "(search path: `%s')"
 msgstr "(ruta de búsqueda: «%s»)"
 
-#: input.cc:138 source-file.cc:178 source-file.cc:193
+#: input.cc:138 source-file.cc:180 source-file.cc:195
 msgid "position unknown"
 msgstr "posición desconocida"
 
-#: key-engraver.cc:198
+#: key-engraver.cc:197
 msgid "Incomplete keyAlterationOrder for key signature"
 msgstr "keyAlterationOrder incompleto para la armadura"
 
@@ -2159,21 +2164,21 @@ msgstr "se ignora el silencio: la ligadura no puede contener silencios"
 msgid "ligature was started here"
 msgstr "la ligadura comenzó aquí"
 
-#: lily-guile.cc:93
+#: lily-guile.cc:94
 #, c-format
 msgid "(load path: `%s')"
 msgstr "(ruta de carga: «%s»)"
 
-#: lily-guile.cc:412
+#: lily-guile.cc:413
 #, c-format
 msgid "cannot find property type-check for `%s' (%s)."
 msgstr "no se encuentra la comprobación de tipo de propiedad para «%s» (%s)."
 
-#: lily-guile.cc:415
+#: lily-guile.cc:416
 msgid "perhaps a typing error?"
 msgstr "¿quizá es un error de tecleo?"
 
-#: lily-guile.cc:422
+#: lily-guile.cc:423
 msgid "skipping assignment"
 msgstr "se salta la asignación"
 
@@ -2182,20 +2187,33 @@ msgstr "se salta la asignación"
 msgid "type check for `%s' failed; value `%s' must be of type `%s'"
 msgstr "ha fallado la comprobación de tipo para «%s»; el valor «%s» debe ser del tipo «%s»"
 
-#: lily-lexer.cc:249
+#. Uh oh.  unsmob<T> delivered 0, yet
+#. unsmob<T> delivers true.  This means that unsmob<T> is a
+#. matching check from a base class of T, but var is of an
+#. incompatible derived type.
+#: lily-guile.cc:462
+msgid "Wrong kind of "
+msgstr "Clase errónea de "
+
+#: lily-lexer.cc:251
 msgid "include files are not allowed in safe mode"
 msgstr "no se permiten los archivos de inclusión en el modo seguro"
 
-#: lily-lexer.cc:276
+#: lily-lexer.cc:278
 #, c-format
 msgid "identifier name is a keyword: `%s'"
 msgstr "el nombre del identificativo es una palabra clave: «%s»"
 
-#: lily-lexer.cc:297 lily-lexer.cc:310
+#: lily-lexer.cc:299 lily-lexer.cc:312
 #, c-format
 msgid "%s:EOF"
 msgstr "%s:EOF"
 
+#: lily-modules.cc:81
+#, c-format
+msgid "Uninitialized variable `%s' in module (%s)"
+msgstr "Variable «%s» no inicializada en el módulo (%s)"
+
 #: lily-parser-scheme.cc:80
 #, c-format
 msgid "Changing working directory to: `%s'"
@@ -2216,37 +2234,33 @@ msgstr "no se encuentra el archivo de inicio: «%s»"
 msgid "Processing `%s'"
 msgstr "Procesando «%s»"
 
-#: lily-parser-scheme.cc:209
+#: lily-parser-scheme.cc:210
 msgid "ly:parser-parse-string is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parser-parse-string sólo es válido con un analizador nuevo.  Use en su lugar ly:parser-include-string."
 
-#: lily-parser-scheme.cc:240
+#: lily-parser-scheme.cc:241
 msgid "ly:parse-string-expression is only valid with a new parser.  Use ly:parser-include-string instead."
 msgstr "ly:parse-string-expression sólo es válido con un analizador nuevo.  Use en su lugar ly:parser-include-string."
 
-#: lily-parser.cc:107
+#: lily-parser.cc:106
 msgid "Parsing..."
 msgstr "Analizando..."
 
-#: lookup.cc:181
+#: lookup.cc:178
 #, c-format
 msgid "Not drawing a box with negative dimension, %.2f by %.2f."
 msgstr "No se dibuja el rectángulo con dimensiones negativas, %.2f por %.2f."
 
-#: lyric-combine-music-iterator.cc:199
+#: lyric-combine-music-iterator.cc:204
 msgid "argument of \\lyricsto should contain Lyrics context"
 msgstr "El argumento de \\lyricsto debe contener un contexto Lyrics"
 
-#: lyric-combine-music-iterator.cc:337
+#: lyric-combine-music-iterator.cc:344
 #, c-format
-msgid "cannot find Voice `%s'"
-msgstr "no se encuentra la Voz «%s»"
+msgid "cannot find %s `%s'"
+msgstr "No se encuentra %s «%s»"
 
-#: lyric-engraver.cc:186
-msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
-msgstr "La sílaba de la letra no tiene nota. Utilice \\lyricsto o associatedVoice."
-
-#: main.cc:104
+#: main.cc:106
 #, c-format
 msgid ""
 "This program is free software.  It is covered by the GNU General Public\n"
@@ -2259,7 +2273,7 @@ msgstr ""
 "él bajo ciertas condiciones. Invóquelo como `%s --warranty' para obtener\n"
 "más información.\n"
 
-#: main.cc:110
+#: main.cc:112
 msgid ""
 "    This program is free software; you can redistribute it and/or\n"
 "modify it under the terms of the GNU General Public License as \n"
@@ -2307,11 +2321,11 @@ msgstr ""
 "escriba a la Free Software Foundation, Inc.,\n"
 "59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\n"
 
-#: main.cc:148
+#: main.cc:150
 msgid "SYM[=VAL]"
 msgstr "SÍMBOLO[=VALOR]"
 
-#: main.cc:149
+#: main.cc:151
 msgid ""
 "set Scheme option SYM to VAL (default: #t).\n"
 "Use -dhelp for help."
@@ -2319,41 +2333,45 @@ msgstr ""
 "establecer la opción de Scheme SÍMBOLO a VALOR (por omisión: #t).\n"
 "Use -dhelp para obtener ayuda."
 
-#: main.cc:153
+#: main.cc:155
 msgid "EXPR"
 msgstr "EXPRESIÓN"
 
-#: main.cc:153
+#: main.cc:155
 msgid "evaluate scheme code"
 msgstr "evaluar código de Scheme"
 
 #. Bug in option parser: --output =foe is taken as an abbreviation
 #. for --output-format.
-#: main.cc:156
+#: main.cc:158
 msgid "FORMATs"
 msgstr "FORMATOs"
 
-#: main.cc:156
+#: main.cc:158
 msgid "dump FORMAT,...  Also as separate options:"
 msgstr "volcar FORMATO,...  También como opciones separadas:"
 
-#: main.cc:157
+#: main.cc:159
 msgid "generate PDF (default)"
 msgstr "generar un PDF (predeterminado)"
 
-#: main.cc:158
+#: main.cc:160
 msgid "generate PNG"
 msgstr "generar un PNG"
 
-#: main.cc:159
+#: main.cc:161
 msgid "generate PostScript"
 msgstr "generar un PostScript"
 
 #: main.cc:162
+msgid "generate big PDF files"
+msgstr "generar archivos PDF grandes"
+
+#: main.cc:165
 msgid "FIELD"
 msgstr "CAMPO"
 
-#: main.cc:162
+#: main.cc:165
 msgid ""
 "dump header field FIELD to file\n"
 "named BASENAME.FIELD"
@@ -2361,19 +2379,19 @@ msgstr ""
 "volcar el campo de cabecera CAMPO a un archivo\n"
 "llamado NOMBRE_BASE.CAMPO"
 
-#: main.cc:165
+#: main.cc:168
 msgid "add DIR to search path"
 msgstr "añadir DIRECTORIO a la ruta de búsqueda"
 
-#: main.cc:166
+#: main.cc:169
 msgid "use FILE as init file"
 msgstr "usar ARCHIVO como archivo de inicialización"
 
-#: main.cc:169
+#: main.cc:172
 msgid "USER, GROUP, JAIL, DIR"
 msgstr "USUARIO, GRUPO, JAULA, DIRECTORIO"
 
-#: main.cc:169
+#: main.cc:172
 msgid ""
 "chroot to JAIL, become USER:GROUP\n"
 "and cd into DIR"
@@ -2381,7 +2399,7 @@ msgstr ""
 "chroot a JAULA, convertirse en USUARIO:GRUPO\n"
 "y cd al DIRECTORIO"
 
-#: main.cc:174
+#: main.cc:177
 msgid ""
 "print log messages according to LOGLEVEL.  Possible values are:\n"
 "NONE, ERROR, WARNING, BASIC, PROGRESS, INFO (default) and DEBUG."
@@ -2391,24 +2409,24 @@ msgstr ""
 "PROGRESS (mostrar avance), INFO (información; predeterminado)\n"
 "y DEBUG (depuración)."
 
-#: main.cc:178
+#: main.cc:181
 msgid "write output to FILE (suffix will be added)"
 msgstr "escribir la salida en el ARCHIVO (se añadirá el sufijo)"
 
-#: main.cc:179
+#: main.cc:182
 msgid "relocate using directory of lilypond program"
 msgstr "relocalizar utilizando el directorio del programa lilypond"
 
-#: main.cc:180
+#: main.cc:183
 msgid "no progress, only error messages (equivalent to loglevel=ERROR)"
 msgstr "sin información del avance; sólo mensajes de error (equivale a loglevel=ERROR)"
 
-#: main.cc:182
+#: main.cc:185
 msgid "be verbose (equivalent to loglevel=DEBUG)"
 msgstr "ser prolijo (equivale a loglevel=DEBUG)"
 
 #. Do not update the copyright years here, run `make grand-replace'
-#: main.cc:261
+#: main.cc:264
 #, c-format
 msgid ""
 "Copyright (c) %s by\n"
@@ -2418,84 +2436,84 @@ msgstr ""
 "%s y otros."
 
 #. No version number or newline here.  It confuses help2man.
-#: main.cc:299
+#: main.cc:302
 #, c-format
 msgid "Usage: %s [OPTION]... FILE..."
 msgstr "Uso: %s [OPCIÓN]... ARCHIVO..."
 
-#: main.cc:301
+#: main.cc:304
 msgid "Typeset music and/or produce MIDI from FILE."
 msgstr "Componer tipográficamente la música y/o producir MIDI a partir de ARCHIVO."
 
-#: main.cc:303
+#: main.cc:306
 msgid "LilyPond produces beautiful music notation."
 msgstr "LilyPond produce una notación musical bella y hermosa."
 
-#: main.cc:305
+#: main.cc:308
 #, c-format
 msgid "For more information, see %s"
 msgstr "Para ver más información, consulte %s"
 
-#: main.cc:307
+#: main.cc:310
 msgid "Options:"
 msgstr "Opciones:"
 
-#: main.cc:374
+#: main.cc:377
 #, c-format
 msgid "expected %d arguments with jail, found: %u"
 msgstr "se esperaban %d argumentos con la jaula, se han encontrado: %u"
 
-#: main.cc:388
+#: main.cc:391
 #, c-format
 msgid "no such user: %s"
 msgstr "no existe el usuario %s"
 
-#: main.cc:390
+#: main.cc:393
 #, c-format
 msgid "cannot get user id from user name: %s: %s"
 msgstr "no se puede obtener el identificador de usuario a partir del nombre: %s: %s"
 
-#: main.cc:405
+#: main.cc:408
 #, c-format
 msgid "no such group: %s"
 msgstr "no existe este grupo: %s"
 
-#: main.cc:407
+#: main.cc:410
 #, c-format
 msgid "cannot get group id from group name: %s: %s"
 msgstr "no se puede obtener el id de grupo a partir del nombre: %s: %s"
 
-#: main.cc:415
+#: main.cc:418
 #, c-format
 msgid "cannot chroot to: %s: %s"
 msgstr "no se puede hacer chroot a: %s: %s"
 
-#: main.cc:422
+#: main.cc:425
 #, c-format
 msgid "cannot change group id to: %d: %s"
 msgstr "no se puede cambiar el grupo del usuario a %d: %s"
 
-#: main.cc:428
+#: main.cc:431
 #, c-format
 msgid "cannot change user id to: %d: %s"
 msgstr "no se puede cambiar el identificador de usuario a %d: %s"
 
-#: main.cc:434
+#: main.cc:437
 #, c-format
 msgid "cannot change working directory to: %s: %s"
 msgstr "no se puede cambiar el directorio de trabajo a: %s: %s"
 
-#: main.cc:805
+#: main.cc:826
 #, c-format
 msgid "exception caught: %s"
 msgstr "se ha capturado una excepción: %s"
 
 #. FIXME: constant error message.
-#: mark-engraver.cc:156
+#: mark-engraver.cc:150
 msgid "rehearsalMark must have integer value"
 msgstr "rehearsalMark debe tener un valor entero"
 
-#: mark-engraver.cc:162
+#: mark-engraver.cc:156
 msgid "mark label must be a markup object"
 msgstr "la etiqueta de marcado debe ser un objeto de marcado"
 
@@ -2547,7 +2565,7 @@ msgstr ""
 msgid "unexpected case fall-through"
 msgstr "opción de caso por defecto inesperada"
 
-#: midi-control-function-performer.cc:109 staff-performer.cc:152
+#: midi-control-function-performer.cc:107 staff-performer.cc:153
 #, c-format
 msgid "ignoring out-of-range value change for MIDI property `%s'"
 msgstr "se ignora el cambio de valor fuera de rango para la propiedad MIDI «%s»"
@@ -2571,7 +2589,7 @@ msgstr "no se puede abrir el archivo en modo de escritura: %s: %s"
 msgid "cannot write to file: `%s'"
 msgstr "no se puede escribir el archivo: «%s»"
 
-#: minimal-page-breaking.cc:40 paper-score.cc:122
+#: minimal-page-breaking.cc:40 paper-score.cc:116
 msgid "Calculating line breaks..."
 msgstr "Calculando los saltos de línea..."
 
@@ -2579,28 +2597,15 @@ msgstr "Calculando los saltos de línea..."
 msgid "Calculating page breaks..."
 msgstr "Calculando saltos de página..."
 
-#: multi-measure-rest.cc:154
+#: multi-measure-rest.cc:152
 msgid "usable-duration-logs must be a non-empty list.  Falling back to whole rests."
 msgstr "usable-duration-logs debe ser una lista no vacía.  Se usan por defecto silencios de redonda."
 
-#: multi-measure-rest.cc:364
-msgid "Using naive multi measure rest spacing."
-msgstr "Utilizando espaciado ingenuo de silencios multicompás."
-
 #: music.cc:150
 #, c-format
 msgid "octave check failed; expected \"%s\", found: \"%s\""
 msgstr "fallo en la comprobación de octava; se esperaba \"%s\", se ha encontrado: \"%s\""
 
-#: music.cc:219
-msgid "(normalized pitch)"
-msgstr "(altura normalizada)"
-
-#: music.cc:223
-#, c-format
-msgid "Transposing %s by %s makes alteration larger than double"
-msgstr "La transposición de %s en %s produce una alteración más que doble"
-
 #: new-fingering-engraver.cc:113
 msgid "cannot add text scripts to individual note heads"
 msgstr "no se pueden añadir guiones de texto a cabezas de nota individuales"
@@ -2613,11 +2618,11 @@ msgstr "no se ha encontrado ninguna ubicación válida para las digitaciones"
 msgid "placing below"
 msgstr "se coloca debajo"
 
-#: note-collision.cc:497
-msgid "ignoring too many clashing note columns"
-msgstr "demasiadas columnas de notas que chocan entre sí; se ignoran"
+#: note-collision.cc:510
+msgid "this Voice needs a \\voiceXx or \\shiftXx setting"
+msgstr "esta voz necesita un ajuste de \\voiceXx o de \\shiftXx"
 
-#: note-column.cc:147
+#: note-column.cc:150
 msgid "cannot have note heads and rests together on a stem"
 msgstr "no se pueden tener cabezas de nota y silencios en la misma plica"
 
@@ -2645,22 +2650,22 @@ msgstr "no se puede cargar la tabla de tipografías: %s"
 msgid "FreeType error: %s"
 msgstr "error de FreeType: %s"
 
-#: open-type-font.cc:111
+#: open-type-font.cc:115
 #, c-format
 msgid "unsupported font format: %s"
 msgstr "formato de tipografía %s no soportado"
 
-#: open-type-font.cc:113
+#: open-type-font.cc:117
 #, c-format
 msgid "error reading font file %s: %s"
 msgstr "error al leer la tipografía %s: %s"
 
-#: open-type-font.cc:188
+#: open-type-font.cc:192
 #, c-format
 msgid "FT_Get_Glyph_Name () Freetype error: %s"
 msgstr "error de Freetype en FT_Get_Glyph_Name (): %s"
 
-#: open-type-font.cc:336 pango-font.cc:256
+#: open-type-font.cc:340 pango-font.cc:258
 #, c-format
 msgid "FT_Get_Glyph_Name () error: %s"
 msgstr "error en FT_Get_Glyph_Name (): %s"
@@ -2698,93 +2703,94 @@ msgstr "probando %d sistemas"
 msgid "best score for this sys-count: %f"
 msgstr "mejor puntuación para este número de sistemas: %f"
 
-#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:248
-#: paper-score.cc:162
+#: optimal-page-breaking.cc:216 page-turn-page-breaking.cc:249
+#: paper-score.cc:156
 msgid "Drawing systems..."
 msgstr "Dibujando los sistemas..."
 
-#: output-def.cc:235
+#: output-def.cc:229
 msgid "margins do not fit with line-width, setting default values"
 msgstr "los márgenes no caben en este ancho de línea, fijando valores predeterminados"
 
-#: output-def.cc:242
+#: output-def.cc:236
 msgid "systems run off the page due to improper paper settings, setting default values"
 msgstr "los sistemas se salen de la página a causa de unos ajustes del papel inadecuados, fijando valores predeterminados"
 
-#: page-breaking.cc:277
+#: page-breaking.cc:276
 msgid "ignoring min-systems-per-page and max-systems-per-page because systems-per-page was set"
 msgstr "se ignoran min-systems-per-page y max-systems-per-page debido a que se fijó systems-per-page"
 
-#: page-breaking.cc:282
+#: page-breaking.cc:281
 msgid "min-systems-per-page is larger than max-systems-per-page, ignoring both values"
 msgstr "min-systems-per-page es mayor que max-systems-per-page, se ignoran los dos valores"
 
-#: page-layout-problem.cc:402
+#: page-breaking.cc:636
+#, c-format
+msgid "page %d has been compressed"
+msgstr "la página %d ha resultado comprimida"
+
+#: page-layout-problem.cc:400
 msgid "A page layout problem has been initiated that cannot accommodate footnotes."
 msgstr "Ha tenido lugar problema de disposición de página que no puede acomodar notas al pie."
 
-#: page-layout-problem.cc:731
-msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
-msgstr "la música no cabe en la página: se ha solicitado la no justificación del espaciado, pero la página ha resultado comprimida"
+#: page-layout-problem.cc:729
+msgid "ragged-bottom was specified, but page must be compressed"
+msgstr "se ha especificado ragged-bottom, pero la página debe comprimirse"
 
-#: page-layout-problem.cc:734
+#: page-layout-problem.cc:732
 #, c-format
-msgid "cannot fit music on page: overflow is %f"
-msgstr "la música no cabe en la página: el exceso es %f"
+msgid "compressing over-full page by %.1f staff-spaces"
+msgstr "se comprime la página desbordada en %.1f espacios de pentagrama"
 
-#: page-layout-problem.cc:736
-msgid "compressing music to fit"
-msgstr "comprimiendo la música para que quepa"
-
-#: page-layout-problem.cc:1199
+#: page-layout-problem.cc:1197
 msgid "staff-affinities should only decrease"
 msgstr "staff-affinities solo debe disminuir"
 
-#: page-turn-page-breaking.cc:168
+#: page-turn-page-breaking.cc:169
 #, c-format
 msgid "page-turn-page-breaking: breaking from %d to %d"
 msgstr "page-turn-page-breaking: saltando desde %d hasta %d"
 
-#: page-turn-page-breaking.cc:217
+#: page-turn-page-breaking.cc:218
 msgid "cannot fit the first page turn onto a single page.  Consider setting first-page-number to an even number."
 msgstr "no se puede ajustar la primera vuelta de página en una página única. Considere la posibilidad de establecer first-page-number a un número par."
 
-#: page-turn-page-breaking.cc:230
+#: page-turn-page-breaking.cc:231
 #, c-format
 msgid "Calculating page and line breaks (%d possible page breaks)..."
 msgstr "Calculando los saltos de página y de línea (%d saltos de página posibles)..."
 
-#: page-turn-page-breaking.cc:300
+#: page-turn-page-breaking.cc:301
 #, c-format
 msgid "break starting at page %d"
 msgstr "el salto comienza en la página %d"
 
-#: page-turn-page-breaking.cc:301
+#: page-turn-page-breaking.cc:302
 #, c-format
 msgid "\tdemerits: %f"
 msgstr "\tpuntuación: %f"
 
-#: page-turn-page-breaking.cc:302
+#: page-turn-page-breaking.cc:303
 #, c-format
 msgid "\tsystem count: %d"
 msgstr "número total de \tsistemas: %d"
 
-#: page-turn-page-breaking.cc:303
+#: page-turn-page-breaking.cc:304
 #, c-format
 msgid "\tpage count: %d"
 msgstr "número total de \tpáginas: %d"
 
-#: page-turn-page-breaking.cc:304
+#: page-turn-page-breaking.cc:305
 #, c-format
 msgid "\tprevious break: %d"
 msgstr "\tsalto anterior: %d"
 
-#: pango-font.cc:245
+#: pango-font.cc:247
 #, c-format
 msgid "no glyph for character U+%0X in font `%s'"
-msgstr "no hay ningún glifo para el carácter U+%0X dentro de la tipografía `%s'"
+msgstr "no hay ningún glifo para el carácter U+%0X dentro de la tipografía «%s»"
 
-#: pango-font.cc:272
+#: pango-font.cc:274
 #, c-format
 msgid ""
 "Glyph has no name, but font supports glyph naming.\n"
@@ -2793,24 +2799,24 @@ msgstr ""
 "El glifo no tiene nombre, pero la tipografía soporta nombres de glifo.\n"
 "Se salta el glifo U+%0X, archivo %s"
 
-#: pango-font.cc:322
+#: pango-font.cc:324
 #, c-format
 msgid "no PostScript font name for font `%s'"
 msgstr "no hay un nombre de tipografía PostScript para «%s»"
 
-#: pango-font.cc:372
+#: pango-font.cc:374
 msgid "FreeType face has no PostScript font name"
 msgstr "El tipo FreeType no tiene un nombre de tipografía PostScript"
 
-#: paper-book.cc:214
+#: paper-book.cc:200
 #, c-format
 msgid "program option -dprint-pages not supported by backend `%s'"
-msgstr "la opción de programa -dprint-pages no está contemplada por el backend `%s'"
+msgstr "la opción de programa -dprint-pages no está contemplada por el backend «%s»"
 
-#: paper-book.cc:233
+#: paper-book.cc:219
 #, c-format
 msgid "program option -dpreview not supported by backend `%s'"
-msgstr "la opción de programa -dpreview no está contemplada por el backend `%s'"
+msgstr "la opción de programa -dpreview no está contemplada por el backend «%s»"
 
 #: paper-column-engraver.cc:263
 msgid "forced break was overridden by some other event, should you be using bar checks?"
@@ -2821,37 +2827,33 @@ msgstr "el salto forzado ha sido sobreestablecido por algún otro evento, ¿quiz
 msgid "Layout output to `%s'..."
 msgstr "Salida de la página hacia «%s»..."
 
-#: paper-score.cc:134
+#: paper-score.cc:128
 #, c-format
 msgid "Element count %d (spanners %d) "
 msgstr "Cantidad de elementos: %d (trazadores: %d)"
 
-#: paper-score.cc:138
+#: paper-score.cc:132
 msgid "Preprocessing graphical objects..."
 msgstr "Preprocesando los objetos gráficos..."
 
-#: parse-scm.cc:121
+#: parse-scm.cc:124
 msgid "GUILE signaled an error for the expression beginning here"
 msgstr "GUILE ha señalado un error para la expresión que comienza aquí"
 
-#: partial-iterator.cc:45
-msgid "trying to use \\partial after the start of a piece"
-msgstr "intento de utilizar \\partial después del inicio de la pieza"
-
 #: pdf-scheme.cc:65
 #, c-format
 msgid "Conversion of string `%s' to UTF-16be failed: %s"
-msgstr "La conversión de la cadena `%s' a UTF-16be ha fallado: %s"
+msgstr "La conversión de la cadena «%s» a UTF-16be ha fallado: %s"
 
-#: percent-repeat-engraver.cc:147
+#: percent-repeat-engraver.cc:148
 msgid "unterminated percent repeat"
 msgstr "repetición de porcentaje sin terminar"
 
-#: performance.cc:54
+#: performance.cc:76
 msgid "Track..."
 msgstr "Pista..."
 
-#: performance.cc:82
+#: performance.cc:126
 #, c-format
 msgid "MIDI output to `%s'..."
 msgstr "Salida MIDI hacia «%s»..."
@@ -2877,7 +2879,7 @@ msgstr "no se encuentra el comienzo del corchete de pedal de piano «%s»"
 msgid "no such internal option: %s"
 msgstr "no existe la opción interna %s"
 
-#: property-iterator.cc:100
+#: property-iterator.cc:115
 #, c-format
 msgid "not a grob name, `%s'"
 msgstr "no es un nombre de objeto gráfico: «%s»"
@@ -2886,25 +2888,25 @@ msgstr "no es un nombre de objeto gráfico: «%s»"
 msgid "Failed octave check, got: "
 msgstr "La comprobación de octaba ha fallado, se ha obtenido: "
 
-#: relocate.cc:52
+#: relocate.cc:56
 #, c-format
 msgid "Setting %s to %s"
 msgstr "Se establece %s a %s"
 
 #. this warning should only be printed in debug mode!
-#: relocate.cc:73
+#: relocate.cc:77
 #, c-format
 msgid "no such file: %s for %s"
 msgstr "no existe el archivo: %s para %s"
 
 #. this warning should only be printed in debug mode!
 #. this warning should only be printed in debug mode
-#: relocate.cc:84 relocate.cc:102
+#: relocate.cc:88 relocate.cc:106
 #, c-format
 msgid "no such directory: %s for %s"
 msgstr "no existe este directorio: %s para %s"
 
-#: relocate.cc:93
+#: relocate.cc:97
 #, c-format
 msgid "%s=%s (prepend)\n"
 msgstr "%s=%s (prefijar)\n"
@@ -2934,7 +2936,7 @@ msgstr "Relocalización: es absoluto: argv0=%s\n"
 msgid "Relocation : from cwd: argv0=%s\n"
 msgstr "Relocalización: desde cwd: argv0=%s\n"
 
-#: relocate.cc:194
+#: relocate.cc:196
 #, c-format
 msgid ""
 "Relocation: from PATH=%s\n"
@@ -2943,69 +2945,65 @@ msgstr ""
 "Relocalización: desde PATH=%s\n"
 "argv0=%s\n"
 
-#: relocate.cc:220
+#: relocate.cc:222
 msgid "LILYPONDPREFIX is obsolete, use LILYPOND_DATADIR"
 msgstr "LILYPONDPREFIX está obsoleto, utilice LILYPOND_DATADIR"
 
-#: relocate.cc:345
+#: relocate.cc:347
 #, c-format
 msgid "Relocation file: %s"
 msgstr "Archivo de relocalización: %s"
 
-#: relocate.cc:349 source-file.cc:65
+#: relocate.cc:351 source-file.cc:65
 #, c-format
 msgid "cannot open file: `%s'"
 msgstr "no se puede abrir el archivo: «%s»"
 
-#: relocate.cc:379
+#: relocate.cc:381
 #, c-format
 msgid "Unknown relocation command %s"
 msgstr "instrucción de relocalización %s desconocida"
 
-#: rest-collision-engraver.cc:70
-msgid "rhythmic head is not part of a rhythmic column"
-msgstr "la cabeza rítmica no es parte de una columna rítmica"
-
-#: rest-collision.cc:150
+#: rest-collision.cc:154
 msgid "cannot resolve rest collision: rest direction not set"
 msgstr "no se puede resolver la colisión de los silencios: la dirección de los silencios no se ha establecido"
 
-#: rest-collision.cc:161 rest-collision.cc:270
+#: rest-collision.cc:165 rest-collision.cc:274
 msgid "too many colliding rests"
 msgstr "demasiados silencios en colisión"
 
-#: rest.cc:240
+#: rest.cc:239
 #, c-format
 msgid "rest `%s' not found"
 msgstr "no se ha encontrado el silencio «%s»"
 
-#: score-engraver.cc:78
+#: score-engraver.cc:77
 #, c-format
 msgid "cannot find `%s'"
 msgstr "No se encuentra «%s»"
 
-#: score-engraver.cc:80
+#: score-engraver.cc:79
 msgid "Music font has not been installed properly."
 msgstr "La tipografía de música no se ha instalado correctamente."
 
-#: score-engraver.cc:82
+#: score-engraver.cc:81
 #, c-format
 msgid "Search path `%s'"
 msgstr "Ruta de búsqueda «%s»"
 
-#: score-engraver.cc:84
+#: score-engraver.cc:83
 msgid "Aborting"
 msgstr "Se detiene la ejecución"
 
-#: score.cc:172
+#: score.cc:161
 msgid "already have music in score"
 msgstr "ya tiene música en la partitura"
 
-#: score.cc:173
+#: score.cc:163
 msgid "this is the previous music"
 msgstr "esta es la música precedente"
 
-#: score.cc:178
+#: score.cc:169
 msgid "errors found, ignoring music expression"
 msgstr "se han encontrado errores, se ignora la expresión musical"
 
@@ -3018,7 +3016,7 @@ msgstr "no sabemos cómo interpretar la articulación:"
 msgid " scheme encoding: "
 msgstr " codificación de Scheme: "
 
-#: skyline-pair.cc:160
+#: skyline-pair.cc:135
 msgid "direction must not be CENTER in ly:skyline-pair::skyline"
 msgstr "la dirección no puede ser CENTER en ly:skyline-pair::skyline"
 
@@ -3044,7 +3042,7 @@ msgstr "%s sin causa"
 msgid "cannot end %s"
 msgstr "no se puede terminar %s"
 
-#: slur.cc:434
+#: slur.cc:436
 #, c-format
 msgid "Ignoring grob for slur: %s.  avoid-slur not set?"
 msgstr "Se ignora el objeto gráfico para la ligadura: %s. ¿No está establecido avoid-slur?"
@@ -3062,16 +3060,16 @@ msgstr "ha dado la vuelta el número de canal MIDI"
 msgid "remapping modulo 16"
 msgstr "se reasigna módulo 16"
 
-#: stem-engraver.cc:110
+#: stem-engraver.cc:100
 msgid "tremolo duration is too long"
 msgstr "la duración del trémolo es demasiado larga"
 
-#: stem-engraver.cc:162
+#: stem-engraver.cc:152
 #, c-format
 msgid "adding note head to incompatible stem (type = %d/%d)"
 msgstr "añadiendo cabeza de nota a una plica incompatible (tipo = %d/%d)"
 
-#: stem-engraver.cc:165
+#: stem-engraver.cc:155
 msgid "maybe input should specify polyphonic voices"
 msgstr "quizá la entrada debiera especificar voces polifónicas"
 
@@ -3079,24 +3077,18 @@ msgstr "quizá la entrada debiera especificar voces polifónicas"
 msgid "weird stem size, check for narrow beams"
 msgstr "tamaño de plica extraño, compruebe que no haya barras estrechas"
 
-#: system.cc:201
+#: system.cc:202
 #, c-format
 msgid "Element count %d"
 msgstr "Número total de elementos %d"
 
-#: system.cc:512
+#: system.cc:513
 #, c-format
 msgid "Grob count %d"
 msgstr "Número de objetos gráficos: %d"
 
 #. TODO: Also print the arguments of the markup!
-#: text-interface.cc:129
-#, c-format
-msgid "Cyclic markup detected: %s"
-msgstr "Se ha detectado un elemento de marcado cílcico: %s"
-
-#. TODO: Also print the arguments of the markup!
-#: text-interface.cc:142
+#: text-interface.cc:139
 #, c-format
 msgid "Markup depth exceeds maximal value of %d; Markup: %s"
 msgstr "La profundidad del marcado supera el valor máximo de %d; Elemento de marcado: %s"
@@ -3113,11 +3105,11 @@ msgstr "ya hay un trazador de texto"
 msgid "unterminated text spanner"
 msgstr "trazador de texto sin terminar"
 
-#: tie-engraver.cc:119
+#: tie-engraver.cc:121
 msgid "unterminated tie"
 msgstr "ligadura de unión sin terminar"
 
-#: tie-engraver.cc:353
+#: tie-engraver.cc:377
 msgid "lonely tie"
 msgstr "ligadura de unión solitaria"
 
@@ -3126,19 +3118,12 @@ msgstr "ligadura de unión solitaria"
 #.
 #. OTOH, Tristan Keuris writes 8/20 in his Intermezzi.
 #.
-#: time-signature-engraver.cc:75
+#: time-signature-engraver.cc:95
 #, c-format
 msgid "strange time signature found: %d/%d"
 msgstr "se ha encontrado una indicación extraña de compás: %d/%d"
 
-#. If there is no such symbol, we default to the numbered style.
-#. (Here really with a warning!)
-#: time-signature.cc:89
-#, c-format
-msgid "time signature symbol `%s' not found; reverting to numbered style"
-msgstr "no se encuentra el símbolo de compás «%s»; se vuelve al estilo numerado"
-
-#: translator-ctors.cc:65
+#: translator-ctors.cc:68
 #, c-format
 msgid "unknown translator: `%s'"
 msgstr "traductor desconocido: «%s»"
@@ -3148,17 +3133,17 @@ msgstr "traductor desconocido: «%s»"
 msgid "fatal error.  Couldn't find type: %s"
 msgstr "error fatal. No se ha encontrado el tipo: %s"
 
-#: translator-group.cc:188
+#: translator-group.cc:187
 #, c-format
 msgid "cannot find: `%s'"
 msgstr "no se encuentra «%s»"
 
-#: translator.cc:326
+#: translator.cc:310
 #, c-format
 msgid "Two simultaneous %s events, junking this one"
 msgstr "Dos eventos %s simultáneos, se recorta éste"
 
-#: translator.cc:327
+#: translator.cc:311
 #, c-format
 msgid "Previous %s event here"
 msgstr "El evento %s previo está aquí"
@@ -3166,7 +3151,7 @@ msgstr "El evento %s previo está aquí"
 #: ttf.cc:480 ttf.cc:528
 #, c-format
 msgid "font index %d too large for font `%s', using index 0"
-msgstr "índice de fuente tipográfica %d demasiado grande para la tipografía `%s', se usa el índice 0"
+msgstr "índice de fuente tipográfica %d demasiado grande para la tipografía «%s», se usa el índice 0"
 
 #: ttf.cc:512 ttf.cc:562
 msgid "font index must be non-negative, using index 0"
@@ -3179,7 +3164,7 @@ msgstr "no hay ningún grupo especial que terminar"
 #: vaticana-ligature-engraver.cc:400
 #, c-format
 msgid "ignored prefix(es) `%s' of this head according to restrictions of the selected ligature style"
-msgstr "prefijo(s) `%s' de esta cabeza ignorado(s) de acuerdo a las restricciones del estilo de ligadura seleccionado"
+msgstr "prefijo(s) «%s» de esta cabeza ignorado(s) de acuerdo a las restricciones del estilo de ligadura seleccionado"
 
 #: vaticana-ligature-engraver.cc:466
 msgid "Ambiguous use of dots in ligature: there are multiple dotted notes with the same pitch.  The ligature should be split."
@@ -3224,206 +3209,215 @@ msgstr "ya hay un trazador finalizado"
 msgid "giving up"
 msgstr "abandonando"
 
-#: parser.yy:158 parser.yy:172
-msgid "Too much lookahead"
-msgstr "Lectura previa por delante excesiva"
-
-#: parser.yy:441 parser.yy:752 parser.yy:818
+#: parser.yy:476 parser.yy:947 parser.yy:1028 parser.yy:1248
 msgid "bad expression type"
 msgstr "tipo de expresión incorrecto"
 
-#: parser.yy:650 parser.yy:1159
+#: parser.yy:859 parser.yy:1458 parser.yy:1503
 msgid "not a context mod"
 msgstr "no es un modificador de contexto"
 
-#: parser.yy:853
-msgid "score expected"
-msgstr "se esperaba «score»"
+#: parser.yy:1054
+msgid "Missing music in \\score"
+msgstr "No hay música dentro de \\score"
 
-#: parser.yy:869
+#: parser.yy:1091
 msgid "\\paper cannot be used in \\score, use \\layout instead"
 msgstr "no se puede usar \\paper dentro de \\score, utilice \\layout en su lugar"
 
-#: parser.yy:893
+#: parser.yy:1126
+msgid "Spurious expression in \\score"
+msgstr "Expresión espúrea en \\score"
+
+#: parser.yy:1156
 msgid "need \\paper for paper block"
 msgstr "es necesario \\paper para el bloque 'paper'"
 
-#: parser.yy:1033 parser.yy:1055
+#: parser.yy:1331
+msgid "music expected"
+msgstr "se esperaba algo de música"
+
+#: parser.yy:1341 parser.yy:1375
 msgid "unexpected post-event"
 msgstr "post-evento inseperado"
 
-#: parser.yy:1063
+#: parser.yy:1383
 msgid "Ignoring non-music expression"
 msgstr "Se ignora la expresión no musical"
 
-#: parser.yy:1075 parser.yy:2493
-msgid "music expected"
-msgstr "se esperaba algo de música"
-
-#: parser.yy:1370
+#: parser.yy:1691
 msgid "not a symbol"
 msgstr "no es un símbolo"
 
-#: parser.yy:2182 parser.yy:2296 parser.yy:2309 parser.yy:2318
+#: parser.yy:2491 parser.yy:2605 parser.yy:2618 parser.yy:2627
 msgid "bad grob property path"
 msgstr "la ruta de la propiedad del grob no es válida"
 
-#: parser.yy:2276
+#: parser.yy:2585
 msgid "only \\consists and \\remove take non-string argument."
 msgstr "solo \\consists y \\remove admiten un argumento no de cadena."
 
-#: parser.yy:2337
+#: parser.yy:2646
 msgid "bad context property path"
 msgstr "la ruta de la propiedad de contexto no es válida"
 
-#: parser.yy:2438
+#: parser.yy:2733
 msgid "simple string expected"
 msgstr "se esperaba una cadena sencilla de caracteres"
 
-#: parser.yy:2456
+#: parser.yy:2750
 msgid "symbol expected"
 msgstr "se esperaba un símbolo"
 
-#: parser.yy:2611
+#: parser.yy:2886
 msgid "not a rhythmic event"
 msgstr "no es un evento rítmico"
 
-#: parser.yy:2685
+#: parser.yy:2936
 msgid "post-event expected"
 msgstr "se esperaba un post-evento"
 
-#: parser.yy:2694 parser.yy:2699
+#: parser.yy:2945 parser.yy:2950
 msgid "have to be in Lyric mode for lyrics"
 msgstr "para la letra se debe estar en el modo Lyric"
 
-#: parser.yy:2767
-msgid "expecting string as script definition"
-msgstr "se espera una cadena como definición del guión"
+#: parser.yy:3026
+msgid "expecting string or post-event as script definition"
+msgstr "se espera una cadena o un post-evento como definición del guión"
 
-#: parser.yy:2875
+#: parser.yy:3130
 msgid "not an articulation"
 msgstr "no es una articulación"
 
-#: parser.yy:2947 parser.yy:2990
+#: parser.yy:3202 parser.yy:3245
 msgid "not a duration"
 msgstr "no es una duración"
 
-#: parser.yy:3007
+#: parser.yy:3266
 msgid "bass number expected"
 msgstr "se esperaba un número de bajo"
 
-#: parser.yy:3106
+#: parser.yy:3358
 msgid "have to be in Note mode for notes"
 msgstr "para las notas se debe estar en el modo Note"
 
-#: parser.yy:3166
+#: parser.yy:3397
 msgid "have to be in Chord mode for chords"
 msgstr "para los acordes se debe estar en el modo Chord"
 
-#: parser.yy:3181
+#: parser.yy:3440
 msgid "markup outside of text script or \\lyricmode"
 msgstr "elemento de marcado fuera de elemento de texto o \\lyricmode"
 
-#: parser.yy:3186
+#: parser.yy:3445
 msgid "unrecognized string, not in text script or \\lyricmode"
 msgstr "cadena no reconocida, no está dentro de un elemento de texto o \\lyricmode"
 
-#: parser.yy:3347 parser.yy:3356
+#: parser.yy:3597 parser.yy:3606
 msgid "not an unsigned integer"
 msgstr "no es un entero sin signo"
 
-#: parser.yy:3424
+#: parser.yy:3693
 msgid "not a markup"
 msgstr "no es una instrucción de marcado"
 
 # stray?
-#: lexer.ll:224
+#: lexer.ll:193
 msgid "stray UTF-8 BOM encountered"
 msgstr "se ha encontrado una marca BOM de UTF-8 extraña"
 
-#: lexer.ll:227
+#: lexer.ll:196
 msgid "Skipping UTF-8 BOM"
 msgstr "Se salta el BOM de UTF-8"
 
-#: lexer.ll:279
+#: lexer.ll:248
 #, c-format
 msgid "Renaming input to: `%s'"
 msgstr "Renombrando la entrada a: «%s»"
 
-#: lexer.ll:296
+#: lexer.ll:265
 msgid "quoted string expected after \\version"
 msgstr "se esperaba una cadena entre comillas después de \\version"
 
-#: lexer.ll:300
+#: lexer.ll:269
 msgid "quoted string expected after \\sourcefilename"
 msgstr "se esperaba una cadena entre comillas después de \\sourcefilename"
 
-#: lexer.ll:304
+#: lexer.ll:273
 msgid "integer expected after \\sourcefileline"
 msgstr "se esperaba un entero después de \\sourcefileline"
 
-#: lexer.ll:331
+#: lexer.ll:300
 msgid "\\maininput not allowed outside init files"
 msgstr "no se permite \\maininput fuera de los archivos de inicio"
 
-#: lexer.ll:355
+#: lexer.ll:324
 #, c-format
 msgid "wrong or undefined identifier: `%s'"
 msgstr "identificativo equivocado o no definido: «%s»"
 
-#: lexer.ll:381
+#: lexer.ll:349
 msgid "string expected after \\include"
 msgstr "se esperaba una cadena después de \\include"
 
-#: lexer.ll:391
+#: lexer.ll:359
 msgid "end quote missing"
 msgstr "faltan las comillas de cierre"
 
-#: lexer.ll:743
+#: lexer.ll:714
 msgid "EOF found inside a comment"
 msgstr "se ha encontrado EOF (fin de archivo) dentro de un comentario"
 
-#: lexer.ll:748
+#: lexer.ll:719
 msgid "EOF found inside string"
 msgstr "se ha encontrado EOF (fin de archivo) dentro de una cadena de caracteres"
 
-#: lexer.ll:763
+#: lexer.ll:734
 msgid "Unfinished main input"
 msgstr "el código principal de entrada no ha finalizado"
 
-#: lexer.ll:834
+#: lexer.ll:805
 #, c-format
 msgid "invalid character: `%s'"
 msgstr "carácter no válido: «%s»"
 
-#: lexer.ll:963
+#: lexer.ll:925
 #, c-format
 msgid "unknown escaped string: `\\%s'"
 msgstr "cadena de escape desconocida: `\\%s'"
 
-#: lexer.ll:983
+#: lexer.ll:945
 #, c-format
 msgid "undefined character or shorthand: %s"
 msgstr "carácter o combinación abreviada no definida: %s"
 
-#: lexer.ll:1275
+#: lexer.ll:1236
 msgid "non-UTF-8 input"
 msgstr "la entrada no es UTF-8"
 
-#: lexer.ll:1319
+#: lexer.ll:1280
+#, c-format
+msgid "Invalid version string \"%s\""
+msgstr "Cadena de versión «%s» no válida"
+
+#: lexer.ll:1285
 #, c-format
 msgid "file too old: %s (oldest supported: %s)"
 msgstr "archivo demasiado antiguo: %s (el más antiguo que se puede tratar es: %s)"
 
-#: lexer.ll:1320
+#: lexer.ll:1286
 msgid "consider updating the input with the convert-ly script"
 msgstr "considere la actualización de la entrada mediante el guión (script) convert-ly"
 
-#: lexer.ll:1326
+#: lexer.ll:1292
 #, c-format
 msgid "program too old: %s (file requires: %s)"
 msgstr "el programa es demasiado antiguo: %s (el archivo necesita: %s)"
 
+#: auto-beam.scm:147
+msgid "Beam end fits no pattern"
+msgstr "El final de barra no coincide con ningún patrón"
+
 #: backend-library.scm:27
 #, scheme-format
 msgid "Invoking `~a'..."
@@ -3434,27 +3428,37 @@ msgstr "Invocando «~a»..."
 msgid "`~a' failed (~a)\n"
 msgstr "«~a» ha fallado (~a)\n"
 
-#: backend-library.scm:93
+#: backend-library.scm:108
 #, scheme-format
 msgid "Converting to `~a'...\n"
 msgstr "Convirtiendo en «~a»...\n"
 
 #. Do not try to guess the name of the png file,
 #. GS produces PNG files like BASE-page%d.png.
-#: backend-library.scm:102
+#: backend-library.scm:118
 #, scheme-format
 msgid "Converting to ~a..."
 msgstr "Convirtiendo en ~a..."
 
-#: backend-library.scm:140
+#: backend-library.scm:134
+#, scheme-format
+msgid "Copying to `~a'...\n"
+msgstr "Copiando en «~a»...\n"
+
+#: backend-library.scm:200
+#, scheme-format
+msgid "Deleting `~a'...\n"
+msgstr "Suprimiendo «~a»...\n"
+
+#: backend-library.scm:219
 #, scheme-format
 msgid "Writing header field `~a' to `~a'..."
 msgstr "Escribiendo el campo de encabezamiento «~a» en «~a»..."
 
-#: backend-library.scm:189
+#: backend-library.scm:268
 #, scheme-format
 msgid "missing stencil expression `~S'"
-msgstr "falta la expresión del sello `~S'"
+msgstr "falta la expresión del sello «~S»"
 
 #: bar-line.scm:133
 #, scheme-format
@@ -3492,154 +3496,145 @@ msgstr "Basurilla espúrea después del acorde: ~A"
 msgid "symbol ~S redefined"
 msgstr "redefinido el símbolo ~S"
 
-#: define-event-classes.scm:73
+#: define-event-classes.scm:74
 #, scheme-format
 msgid "unknown parent class `~a'"
 msgstr "Clase del padre «~a» desconocida"
 
-#: define-event-classes.scm:107
+#: define-event-classes.scm:108
 #, scheme-format
 msgid "Cannot redefine event class `~S'"
 msgstr "No se puede redefinir la clase de evento «~S»"
 
-#: define-event-classes.scm:109
+#: define-event-classes.scm:110
 #, scheme-format
 msgid "Undefined parent event class `~S'"
 msgstr "Clase de evento del padre «~S» no definida"
 
-#: define-markup-commands.scm:1083
+#: define-markup-commands.scm:1098
 msgid "no systems found in \\score markup, does it have a \\layout block?"
 msgstr "no se ha encontrado ningún sistema en el marcado \\score, ¿tiene un bloque \\layout?"
 
-#: define-markup-commands.scm:2847
+#: define-markup-commands.scm:2922
 #, scheme-format
 msgid "Cannot find glyph ~a"
 msgstr "No se encuentra el glifo ~a"
 
-#: define-markup-commands.scm:3273
+#: define-markup-commands.scm:3398
 #, scheme-format
 msgid "no brace found for point size ~S "
 msgstr "no se ha encontrado ninguna llave para el tamaño en puntos ~S "
 
-#: define-markup-commands.scm:3274
+#: define-markup-commands.scm:3399
 #, scheme-format
 msgid "defaulting to ~S pt"
 msgstr "fijando al valor predeterminado ~S pt"
 
-#: define-markup-commands.scm:3526
+#: define-markup-commands.scm:3643
 #, scheme-format
 msgid "not a valid duration string: ~a"
 msgstr "no es una cadena válida de duración: ~a"
 
-#: define-markup-commands.scm:3737
+#: define-markup-commands.scm:3854
 #, scheme-format
 msgid "not a valid duration string: ~a - ignoring"
 msgstr "no es una cadena válida de duración: ~a. Se ignora."
 
-#: define-music-types.scm:792
+#: define-music-types.scm:803
 #, scheme-format
 msgid "symbol expected: ~S"
 msgstr "se esperaba un símbolo: ~S"
 
-#: define-music-types.scm:795
+#: define-music-types.scm:806
 #, scheme-format
 msgid "cannot find music object: ~S"
 msgstr "no se encuentra el objeto musical ~S"
 
-#: define-music-types.scm:815
+#: define-music-types.scm:826
 #, scheme-format
 msgid "bad make-music argument: ~S"
 msgstr "argumento de make-music erróneo: ~S"
 
-#: define-music-types.scm:827
-#, scheme-format
-msgid "unknown repeat type `~S'"
-msgstr "tipo de repetición «~S» desconocido"
-
-#: define-music-types.scm:828
-msgid "See define-music-types.scm for supported repeats"
-msgstr "Consulte el archivo define-music-types.scm para ver los tipos de repetición soportados"
-
-#: define-note-names.scm:972
+#: define-note-names.scm:1000
 msgid "Select note names language."
 msgstr "Seleccione el idioma para los nombres de las notas."
 
-#: define-note-names.scm:978
+#: define-note-names.scm:1006
 #, scheme-format
 msgid "Using `~a' note names..."
-msgstr "Usando los nombres de notas de `~a' ..."
+msgstr "Usando los nombres de notas de «~a»..."
 
-#: define-note-names.scm:981
+#: define-note-names.scm:1009
 #, scheme-format
 msgid "Could not find language `~a'.  Ignoring."
-msgstr "No se encuentra el idioma `~a'.  Se ignora."
+msgstr "No se encuentra el idioma «~a».  Se ignora."
 
-#: document-backend.scm:132
+#: document-backend.scm:135
 #, scheme-format
 msgid "pair expected in doc ~s"
 msgstr "se esperaba una pareja en el documento ~s"
 
-#: document-backend.scm:189
+#: document-backend.scm:202
 #, scheme-format
 msgid "cannot find interface for property: ~S"
 msgstr "no se encuentra un interface para la propiedad ~S"
 
-#: document-backend.scm:199
+#: document-backend.scm:212
 #, scheme-format
 msgid "unknown Grob interface: ~S"
 msgstr "interfaz de Objeto gráfico desconocido: ~S"
 
-#: documentation-lib.scm:59
+#: documentation-lib.scm:62
 #, scheme-format
 msgid "Processing ~S..."
 msgstr "Procesando ~S..."
 
-#: documentation-lib.scm:176
+#: documentation-lib.scm:178
 #, scheme-format
 msgid "Writing ~S..."
 msgstr "Escribiendo ~S..."
 
-#: documentation-lib.scm:188
+#: documentation-lib.scm:190
 #, scheme-format
 msgid "cannot find description for property `~S' (~S)"
-msgstr "no se encuentra la descripción de la propiedad `~S' (~S)"
+msgstr "no se encuentra la descripción de la propiedad «~S» (~S)"
 
-#: documentation-lib.scm:209
+#: documentation-lib.scm:211
 #, scheme-format
 msgid "cannot find description for property ~S (~S)"
 msgstr "no se encuentra la descripción de la propiedad ~S (~S)"
 
-#: flag-styles.scm:162
+#: flag-styles.scm:155
 #, scheme-format
 msgid "flag stroke `~a' or `~a' not found"
-msgstr "no se encuentra el impacto `~a' o `~a' de indicador"
+msgstr "no se encuentra el trazo «~a» o «~a» del corchete"
 
-#: framework-eps.scm:108
+#: framework-eps.scm:112
 #, scheme-format
 msgid "Writing ~a..."
 msgstr "Escribiendo «~a»..."
 
-#: framework-ps.scm:250
+#: framework-ps.scm:281
 #, scheme-format
 msgid "cannot embed ~S=~S"
 msgstr "no se puede empotrar ~S=~S"
 
-#: framework-ps.scm:293
+#: framework-ps.scm:324
 #, scheme-format
 msgid "cannot extract file matching ~a from ~a"
 msgstr "no se puede extraer la coincidencia de archivos ~a a partir de ~a"
 
-#: framework-ps.scm:311
+#: framework-ps.scm:342
 #, scheme-format
 msgid "do not know how to embed ~S=~S"
 msgstr "no sabemos cómo empotrar ~S=~S"
 
-#: framework-ps.scm:336
+#: framework-ps.scm:367
 #, scheme-format
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr "no sabemos cómo empotrar la tipografía ~s ~s ~s"
 
-#: framework-ps.scm:687
+#: framework-ps.scm:723
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
@@ -3700,7 +3695,7 @@ msgstr "No se encuentra la definición de contexto \\~a"
 msgid "Music unsuitable for output-def"
 msgstr "Música no apta para output-def"
 
-#: lily-library.scm:884
+#: lily-library.scm:904
 msgid ""
 "Find the index between @var{start} and @var{end} (an integer)\n"
 "which produces the closest match to @var{target-val} if\n"
@@ -3710,51 +3705,51 @@ msgstr ""
 "que produce la correspondencia más cercana a @var{target-val} cuando\n"
 "se aplica a la función @var{getter}."
 
-#: lily-library.scm:955
+#: lily-library.scm:998
 #, scheme-format
 msgid "unknown unit: ~S"
 msgstr "unidad desconocida: ~S "
 
-#: lily-library.scm:980
+#: lily-library.scm:1023
 #, scheme-format
 msgid "no \\version statement found, please add~afor future compatibility"
 msgstr "no se ha encontrado ninguna instrucción \\version, escriba~apara disponer de compatibilidad en el futuro"
 
-#: lily.scm:75
+#: lily.scm:93
 msgid "call-after-session used after session start"
 msgstr "call-after-session utilizado después del comienzo de la sesión"
 
-#: lily.scm:93
+#: lily.scm:111
 msgid "define-session used after session start"
 msgstr "define-session utilizado después del comienzo de la sesión"
 
-#: lily.scm:393
+#: lily.scm:417
 msgid "Using (ice-9 curried-definitions) module\n"
 msgstr "Utilizando el módulo (ice-9 curried-definitions)\n"
 
-#: lily.scm:396
+#: lily.scm:420
 msgid "Guile 1.8\n"
 msgstr "Guile 1.8\n"
 
-#: lily.scm:455
+#: lily.scm:477
 #, scheme-format
 msgid "cannot find: ~A"
 msgstr "no se encuentra: ~A"
 
-#: lily.scm:878
+#: lily.scm:903
 msgid "Success: compilation successfully completed"
 msgstr "Enhorabuena. La compilación se ha completado satisfactoriamente."
 
-#: lily.scm:879
+#: lily.scm:904
 msgid "Compilation completed with warnings or errors"
 msgstr "Compilación completada con advertencias o errores"
 
-#: lily.scm:940
+#: lily.scm:965
 #, scheme-format
 msgid "job ~a terminated with signal: ~a"
 msgstr "la tarea ~a ha terminado con la señal: ~a"
 
-#: lily.scm:943
+#: lily.scm:968
 #, scheme-format
 msgid ""
 "logfile ~a (exit ~a):\n"
@@ -3763,36 +3758,31 @@ msgstr ""
 "archivo de registro ~a (salida ~a):\n"
 "~a"
 
-#: lily.scm:965 lily.scm:1054
+#: lily.scm:990 lily.scm:1079
 #, scheme-format
 msgid "failed files: ~S"
 msgstr "archivos que han fallado: ~S"
 
-#: lily.scm:1045
+#: lily.scm:1070
 #, scheme-format
 msgid "Redirecting output to ~a..."
 msgstr "Redirigiendo la salida hacia ~a..."
 
-#: lily.scm:1064 ps-to-png.scm:66
+#: lily.scm:1089
 #, scheme-format
 msgid "Invoking `~a'...\n"
 msgstr "Invocando «~a»...\n"
 
-#: ly-syntax-constructors.scm:66
+#: ly-syntax-constructors.scm:27
 #, scheme-format
 msgid "~a function cannot return ~a"
 msgstr "la función ~a no puede devolver ~a"
 
-#: ly-syntax-constructors.scm:75
+#: ly-syntax-constructors.scm:60
 #, scheme-format
 msgid "wrong type for argument ~a.  Expecting ~a, found ~s"
 msgstr "tipo equivocado para el argumento ~a.  Se esperaba ~a, se encontró ~s"
 
-#: ly-syntax-constructors.scm:199
-#, scheme-format
-msgid "Invalid property operation ~a"
-msgstr "Operación de propiedad ~a inválida"
-
 #: markup-macros.scm:331
 #, scheme-format
 msgid "Wrong number of arguments.  Expect: ~A, found ~A: ~S"
@@ -3832,58 +3822,87 @@ msgstr "la nota a invertir no está en la escala; se ignora"
 msgid "negative replication count; ignoring"
 msgstr "número de replicaciones negativo; se ignora"
 
-#: music-functions.scm:272
-msgid "More alternatives than repeats.  Junking excess alternatives"
-msgstr "Hay más alternativas que repeticiones.  Se recortan las alternativas excedentes"
-
-#: music-functions.scm:303
+#: music-functions.scm:319
 #, scheme-format
 msgid "invalid tremolo repeat count: ~a"
 msgstr "número de repeticiones no válido para el trémolo: ~a"
 
-#: music-functions.scm:459
+#: music-functions.scm:348
+#, scheme-format
+msgid "unknown repeat type `~S': must be volta, unfold, percent, or tremolo"
+msgstr "tipo de repetión «~S» desconocido: debería ser volta, unfold, percent, o tremolo"
+
+#: music-functions.scm:352
+msgid "More alternatives than repeats.  Junking excess alternatives"
+msgstr "Hay más alternativas que repeticiones.  Se recortan las alternativas excedentes"
+
+#: music-functions.scm:487
 #, scheme-format
 msgid "bad grob property path ~a"
 msgstr "la ruta de propiedad ~a del grob no es válida"
 
-#: music-functions.scm:753
+#: music-functions.scm:511
+#, scheme-format
+msgid "bad context property ~a"
+msgstr "la propiedad de contexto ~a no es válida"
+
+#: music-functions.scm:534
+#, scheme-format
+msgid "bad music property ~a"
+msgstr "la propiedad musical ~a no es válida"
+
+#: music-functions.scm:840
 msgid "Bad chord repetition"
 msgstr "repetición de acorde errónea"
 
-#: music-functions.scm:788
+#: music-functions.scm:945
 #, scheme-format
 msgid "music expected: ~S"
 msgstr "se esperaba algo de música: ~S"
 
-#: music-functions.scm:1144
+#: music-functions.scm:1295
 #, scheme-format
 msgid "cannot find quoted music: `~S'"
 msgstr "no se encuentra la música citada: «~S»"
 
-#: music-functions.scm:1282
+#: music-functions.scm:1432
 msgid "Add @var{octave-shift} to the octave of @var{pitch}."
 msgstr "Añadir @var{octave-shift} a la octava de @var{pitch}."
 
-#: music-functions.scm:1342
+#: music-functions.scm:1495
 #, scheme-format
 msgid "Unknown octaveness type: ~S "
 msgstr "Tipo de octavación desconocido: ~S "
 
-#: music-functions.scm:1343
+#: music-functions.scm:1496
 msgid "Defaulting to 'any-octave."
 msgstr "Fijando al valor predeterminado 'any-octave."
 
-#: music-functions.scm:1688
+#: music-functions.scm:1888
 #, scheme-format
 msgid "unknown accidental style: ~S"
 msgstr "estilo de alteración ~S desconocido"
 
-#: output-ps.scm:278 output-svg.scm:539
+#: music-functions.scm:2098
+msgid "Missing duration"
+msgstr "Falta la duración"
+
+#: music-functions.scm:2626
+#, scheme-format
+msgid "not a symbol list: ~a"
+msgstr "no es una lista de símbolos: ~a"
+
+#: music-functions.scm:2629
+#, scheme-format
+msgid "conflicting tag group ~a"
+msgstr "grupo de etiquetas ~a en conflicto"
+
+#: output-ps.scm:290 output-svg.scm:539
 #, scheme-format
 msgid "unknown line-cap-style: ~S"
 msgstr "estilo de extremo de línea line-cap-style desconocido: ~S"
 
-#: output-ps.scm:283 output-svg.scm:545
+#: output-ps.scm:295 output-svg.scm:545
 #, scheme-format
 msgid "unknown line-join-style: ~S"
 msgstr "estilo de unión de líneas line-join-style desconocido: ~S"
@@ -3902,89 +3921,94 @@ msgstr "El glifo debe tener un valor de Unicode"
 msgid "cannot find SVG font ~S"
 msgstr "no se encuentra la fuente tipográfica de SVG ~S"
 
-#: paper.scm:120
+#: paper.scm:121
 msgid "set-global-staff-size: not in toplevel scope"
 msgstr "set-global-staff-size: no está en el ámbito de nivel más alto"
 
-#: paper.scm:320
+#: paper.scm:321
 #, scheme-format
 msgid "This is not a \\layout {} object, ~S"
 msgstr "Esto no es un objeto de \\layout {} , ~S"
 
-#: paper.scm:328
+#: paper.scm:329
 #, scheme-format
 msgid "Unknown paper size: ~a"
 msgstr "Tamaño de papel desconocido: ~a"
 
 #. TODO: should raise (generic) exception with throw, and catch
 #. that in parse-scm.cc
-#: paper.scm:347
+#: paper.scm:348
 msgid "Must use #(set-paper-size .. ) within \\paper { ... }"
 msgstr "Debe usar #(set-paper-size .. ) dentro de \\paper { ... }"
 
-#: parser-clef.scm:164
+#: parser-clef.scm:154
 #, scheme-format
 msgid "unknown clef type `~a'"
 msgstr "tipo de clave desconocido: «~a» "
 
-#: parser-clef.scm:165
+#: parser-clef.scm:155
 #, scheme-format
 msgid "supported clefs: ~a"
 msgstr "claves soportadas: ~a"
 
-#: parser-ly-from-scheme.scm:74
+#: parser-ly-from-scheme.scm:73
 msgid "error in #{ ... #}"
 msgstr "error en #{ ... #}"
 
-#: part-combiner.scm:598
+#: part-combiner.scm:894
 #, scheme-format
 msgid "quoted music `~a' is empty"
 msgstr "la cita musical «~a» está vacía"
 
-#: ps-to-png.scm:70
+#: ps-to-png.scm:72 ps-to-png.scm:75
 #, scheme-format
-msgid "~a exited with status: ~S"
-msgstr "~a salió con el estado: ~S"
+msgid "Copying `~a' to `~a'..."
+msgstr "Copiando «~a» en «~a»..."
+
+#: ps-to-png.scm:77 ps-to-png.scm:79
+#, scheme-format
+msgid "Deleting `~a'..."
+msgstr "Suprimiendo «~a»..."
 
 #: to-xml.scm:190
 #, scheme-format
 msgid "assertion failed: ~S"
 msgstr "el aserto no se cumple: ~S"
 
-#: translation-functions.scm:368
+#: translation-functions.scm:389
 #, scheme-format
 msgid "Negative fret for pitch ~a on string ~a"
 msgstr "Traste negativo para la nota ~a de la cuerda ~a"
 
-#: translation-functions.scm:371
+#: translation-functions.scm:392
 #, scheme-format
 msgid "Missing fret for pitch ~a on string ~a"
 msgstr "Falta el traste para la nota ~a de la cuerda ~a"
 
-#: translation-functions.scm:414
+#: translation-functions.scm:435
 #, scheme-format
 msgid "No open string for pitch ~a"
 msgstr "No hay cuerda al aire para la nota ~a"
 
-#: translation-functions.scm:429 translation-functions.scm:441
+#: translation-functions.scm:450 translation-functions.scm:462
 #, scheme-format
 msgid "Requested string for pitch requires negative fret: string ~a pitch ~a"
 msgstr "La cuerda solicitada para la nota requiere un traste negativo: cuerda ~a nota ~a"
 
-#: translation-functions.scm:432
+#: translation-functions.scm:453
 msgid "Ignoring string request and recalculating."
 msgstr "Se ignora la solicitud de cuerda; volviendo a calcular."
 
-#: translation-functions.scm:444
+#: translation-functions.scm:465
 msgid "Ignoring note in tablature."
 msgstr "Se ignora la nota en la tablatura."
 
-#: translation-functions.scm:469
+#: translation-functions.scm:490
 #, scheme-format
 msgid "No string for pitch ~a (given frets ~a)"
 msgstr "No hay ninguna cuerda para la nota ~a (dados los trastes ~a)"
 
-#: translation-functions.scm:574
+#: translation-functions.scm:595
 #, scheme-format
 msgid ""
 "No label for fret ~a (on string ~a);\n"
@@ -3993,6 +4017,66 @@ msgstr ""
 "No hay ninguna etiqueta para el traste ~a (sobre la cuerda ~a);\n"
 "sólo se proporcionan etiquetas para los trastes ~a"
 
+#~ msgid "cannot change, already in translator: %s"
+#~ msgstr "no se puede cambiar, ya está dentro del traductor: %s"
+
+#~ msgid "cannot find Voice `%s'"
+#~ msgstr "no se encuentra la Voz «%s»"
+
+#~ msgid "Lyric syllable does not have note.  Use \\lyricsto or associatedVoice."
+#~ msgstr "La sílaba de la letra no tiene nota. Utilice \\lyricsto o associatedVoice."
+
+#~ msgid "Using naive multi measure rest spacing."
+#~ msgstr "Utilizando espaciado ingenuo de silencios multicompás."
+
+#~ msgid "(normalized pitch)"
+#~ msgstr "(altura normalizada)"
+
+#~ msgid "Transposing %s by %s makes alteration larger than double"
+#~ msgstr "La transposición de %s en %s produce una alteración más que doble"
+
+#~ msgid "ignoring too many clashing note columns"
+#~ msgstr "demasiadas columnas de notas que chocan entre sí; se ignoran"
+
+#~ msgid "cannot fit music on page: ragged-spacing was requested, but page was compressed"
+#~ msgstr "la música no cabe en la página: se ha solicitado la no justificación del espaciado, pero la página ha resultado comprimida"
+
+#~ msgid "cannot fit music on page: overflow is %f"
+#~ msgstr "la música no cabe en la página: el exceso es %f"
+
+#~ msgid "compressing music to fit"
+#~ msgstr "comprimiendo la música para que quepa"
+
+#~ msgid "trying to use \\partial after the start of a piece"
+#~ msgstr "intento de utilizar \\partial después del inicio de la pieza"
+
+#~ msgid "rhythmic head is not part of a rhythmic column"
+#~ msgstr "la cabeza rítmica no es parte de una columna rítmica"
+
+#~ msgid "Cyclic markup detected: %s"
+#~ msgstr "Se ha detectado un elemento de marcado cílcico: %s"
+
+#~ msgid "time signature symbol `%s' not found; reverting to numbered style"
+#~ msgstr "no se encuentra el símbolo de compás «%s»; se vuelve al estilo numerado"
+
+#~ msgid "Too much lookahead"
+#~ msgstr "Lectura previa por delante excesiva"
+
+#~ msgid "score expected"
+#~ msgstr "se esperaba «score»"
+
+#~ msgid "unknown repeat type `~S'"
+#~ msgstr "tipo de repetición «~S» desconocido"
+
+#~ msgid "See define-music-types.scm for supported repeats"
+#~ msgstr "Consulte el archivo define-music-types.scm para ver los tipos de repetición soportados"
+
+#~ msgid "Invalid property operation ~a"
+#~ msgstr "Operación de propiedad ~a inválida"
+
+#~ msgid "~a exited with status: ~S"
+#~ msgstr "~a salió con el estado: ~S"
+
 #~ msgid "cannot find start of (de)crescendo"
 #~ msgstr "no se encuentra el comienzo del (de)crescendo"
 
index 45f8d4c26b1205c24cafd0b538acf02d4192ea6c..a55d9d3bb03d6daa2a1b3c5d0817979d6395c5d1 100644 (file)
@@ -6,10 +6,10 @@
 #, fuzzy
 msgid ""
 msgstr ""
-"Project-Id-Version: lilypond 2.19.40\n"
+"Project-Id-Version: lilypond 2.19.41\n"
 "Report-Msgid-Bugs-To: http://post.gmane.org/post.php?group=gmane.comp.gnu."
 "lilypond.bugs\n"
-"POT-Creation-Date: 2016-04-17 12:02+0100\n"
+"POT-Creation-Date: 2016-05-01 12:41+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"
@@ -3536,7 +3536,7 @@ msgstr ""
 msgid "do not know how to embed font ~s ~s ~s"
 msgstr ""
 
-#: framework-ps.scm:751
+#: framework-ps.scm:754
 msgid ""
 "\n"
 "The PostScript backend does not support the\n"
index e54bdaf18386363be5afb59c7016051dedf88af2..60b9d5b000c2e6896237aac6c9404857610719ac 100644 (file)
@@ -575,8 +575,13 @@ lines for.")
 lines.  It is the sum of 2@tie{}numbers: The first is the factor for
 line thickness, and the second for staff space.  Both contributions
 are added.")
-     (ledger-positions ,list? "Repeating pattern for the vertical positions
-of ledger lines.  Bracketed groups are always shown together.")
+     (ledger-positions ,list? "Vertical positions of ledger lines.
+When set on a @code{StaffSymbol} grob it defines a repeating
+pattern of ledger lines and any parenthesized groups will always be
+shown together.")
+     (ledger-positions-function ,scheme? "A quoted Scheme procedure that
+takes a @code{StaffSymbol} grob and the vertical position of a note head
+as arguments and returns a list of ledger line positions.")
      (left-bound-info ,list? "An alist of properties for determining
 attachments of spanners to edges.")
      (left-padding ,ly:dimension? "The amount of space that is put