]> git.donarmstrong.com Git - lilypond.git/commitdiff
* input/regression/repeat-percent-grace.ly: new file.
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 30 Sep 2006 11:29:26 +0000 (11:29 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Sat, 30 Sep 2006 11:29:26 +0000 (11:29 +0000)
* lily/percent-repeat-engraver.cc (start_translation_timestep):
remember first currentCommandColumn of a grace run. Fixes issue 70.

* lily/percent-repeat-iterator.cc (class Percent_repeat_iterator):
move class definition to CC file.

* lily/multi-measure-rest.cc (percent): use robust_relative_extent()

* lily/slash-repeat-engraver.cc (listen_percent): don't warn for
measure-long  repeats.

* flower/include/international.hh: include stdarg.h

14 files changed:
ChangeLog
flower/include/international.hh
input/regression/repeat-percent-grace.ly [new file with mode: 0644]
lily/include/lily-guile-macros.hh
lily/include/percent-repeat-iterator.hh
lily/multi-measure-rest.cc
lily/new-fingering-engraver.cc
lily/percent-repeat-engraver.cc
lily/percent-repeat-iterator.cc
lily/score-engraver.cc
lily/slash-repeat-engraver.cc
lily/slur.cc
ly/engraver-init.ly
scm/define-grobs.scm

index a235bd2d785401e80d57927eadb969e3110806d6..48b257b8dad68b7ac6431857bb67805c7badab0d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2006-09-30  Han-Wen Nienhuys  <hanwen@lilypond.org>
+
+       * input/regression/repeat-percent-grace.ly: new file.
+
+       * lily/percent-repeat-engraver.cc (start_translation_timestep):
+       remember first currentCommandColumn of a grace run. Fixes issue 70.
+
+       * lily/percent-repeat-iterator.cc (class Percent_repeat_iterator):
+       move class definition to CC file.
+
+       * lily/multi-measure-rest.cc (percent): use robust_relative_extent()
+
+       * lily/slash-repeat-engraver.cc (listen_percent): don't warn for
+       measure-long  repeats.
+
+       * flower/include/international.hh: include stdarg.h
+
 2006-09-30  Joe Neeman  <joeneeman@gmail.com>
 
        * lily/page-turn-page-breaking.cc (calc_demerits): now that we allow
index 162e7ee38d8764ae92dbae4fe5e6541d61ee2e62..b515af64c450f827c0a7923cec2f3e2f7673d417 100644 (file)
@@ -9,6 +9,8 @@
 #ifndef INTERNATIONAL_HH
 #define INTERNATIONAL_HH
 
+#include <stdarg.h>
+
 #include "std-string.hh"
 
 /**
diff --git a/input/regression/repeat-percent-grace.ly b/input/regression/repeat-percent-grace.ly
new file mode 100644 (file)
index 0000000..920e21f
--- /dev/null
@@ -0,0 +1,14 @@
+\version "2.9.20"
+
+\header {
+  texidoc = "Percent repeats are also centered when there is a grace note in a parallel staff. "
+}
+
+\layout {
+  ragged-right =##t
+}
+
+\relative <<
+  \new Staff { \repeat percent 3 c1} 
+  \new Staff { c1 c \grace b8 c1  }
+>>
index 8374b0e247a76ecc8dc076283352026c7036c4da..77c45973648e33f0888c3be00c2c62bc4298f2e1 100644 (file)
@@ -96,14 +96,14 @@ inline SCM ly_symbol2scm (char const *x) { return scm_str2symbol ((x)); }
   Make TYPE::FUNC available as a Scheme function.
 */
 string mangle_cxx_identifier (string);
-#define MAKE_SCHEME_CALLBACK(TYPE, FUNC, ARGCOUNT)                     \
+#define MAKE_SCHEME_CALLBACK_WITH_OPTARGS(TYPE, FUNC, ARGCOUNT, OPTIONAL_COUNT)        \
   SCM TYPE ::FUNC ## _proc;                                            \
   void                                                                 \
   TYPE ## _ ## FUNC ## _init_functions ()                              \
   {                                                                    \
     string id = mangle_cxx_identifier (string (#TYPE) + "::" + string (#FUNC)); \
     TYPE ::FUNC ## _proc = scm_c_define_gsubr (id.c_str(),                     \
-                                              (ARGCOUNT), 0, 0,        \
+                                              (ARGCOUNT-OPTIONAL_COUNT), OPTIONAL_COUNT, 0,    \
                                               (Scheme_function_unknown) TYPE::FUNC); \
     scm_c_export (id.c_str (), NULL);                                  \
   }                                                                    \
@@ -111,6 +111,9 @@ string mangle_cxx_identifier (string);
   ADD_SCM_INIT_FUNC (TYPE ## _ ## FUNC ## _callback,                   \
                     TYPE ## _ ## FUNC ## _init_functions);
 
+#define MAKE_SCHEME_CALLBACK(TYPE, FUNC, ARGCOUNT)                     \
+  MAKE_SCHEME_CALLBACK_WITH_OPTARGS(TYPE,FUNC,ARGCOUNT,0);
+
 void
 ly_add_function_documentation (SCM proc, char const *fname,
                               char const *varlist,
index 8637d9f7aedc23eabed38e93e9e95fd3803c1d0e..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,25 +0,0 @@
-/*
-  percent-repeat-iterator.hh -- declare Percent_repeat_iterator
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2001--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-*/
-
-#ifndef PERCENT_REPEAT_ITERATOR_HH
-#define PERCENT_REPEAT_ITERATOR_HH
-
-#include "sequential-iterator.hh"
-
-class Percent_repeat_iterator : public Sequential_iterator
-{
-public:
-  DECLARE_CLASSNAME(Percent_repeat_iterator);
-  DECLARE_SCHEME_CALLBACK (constructor, ());
-  Percent_repeat_iterator ();
-protected:
-  virtual SCM get_music_list () const;
-private:
-};
-
-#endif /* PERCENT_REPEAT_ITERATOR_HH */
index 997e76105d2a1764d8d2cdc8915375ec331b2a3d..0a87a137ed319a6460b01234fc714aee6150c410 100644 (file)
@@ -32,20 +32,22 @@ Multi_measure_rest::percent (SCM smob)
 
   // ugh copy & paste.
 
+  Grob *common_x = sp->get_bound (LEFT)->common_refpoint (sp->get_bound (RIGHT),
+                                                         X_AXIS);
   Interval sp_iv;
   Direction d = LEFT;
   do
     {
       Item *col = sp->get_bound (d)->get_column ();
 
-      Interval coldim = col->extent (0, X_AXIS);
+      Interval coldim = robust_relative_extent (col, common_x, X_AXIS);
 
       sp_iv[d] = coldim[-d];
     }
   while ((flip (&d)) != LEFT);
   Real x_off = 0.0;
 
-  Real rx = sp->get_bound (LEFT)->relative_coordinate (0, X_AXIS);
+  Real rx = sp->get_bound (LEFT)->relative_coordinate (common_x, X_AXIS);
   /*
     we gotta stay clear of sp_iv, so move a bit to the right if
     needed.
index 2e8c94399ca16d79664a702dfa6bc05507914b43..f91e804dde6d2dce5b3a18a3162a4f867cede8c1 100644 (file)
@@ -52,6 +52,7 @@ class New_fingering_engraver : public Engraver
   vector<Grob*> heads_;
   Grob *stem_;
 
+  void position_all ();
 public:
   TRANSLATOR_DECLARATIONS (New_fingering_engraver);
 protected:
@@ -120,10 +121,9 @@ New_fingering_engraver::add_script (Grob *head,
   if (g)
     {
       ft.script_ = g;
+      ft.script_->set_parent (head, X_AXIS);
 
       articulations_.push_back (ft);
-
-      ft.script_->set_parent (head, X_AXIS);
     }
 }
 
@@ -307,6 +307,15 @@ New_fingering_engraver::position_scripts (SCM orientations,
 
 void
 New_fingering_engraver::stop_translation_timestep ()
+{
+  position_all();
+  stem_ = 0;
+  heads_.clear ();
+}
+
+
+void
+New_fingering_engraver::position_all ()
 {
   if (fingerings_.size ())
     {
@@ -334,12 +343,7 @@ New_fingering_engraver::stop_translation_timestep ()
 
       if (stem_ && to_boolean (script->get_property ("add-stem-support")))
        Side_position_interface::add_support (script, stem_);
-
-
     }
-
-  stem_ = 0;
-  heads_.clear ();
   articulations_.clear ();
 }
 
@@ -347,6 +351,8 @@ New_fingering_engraver::New_fingering_engraver ()
 {
   stem_ = 0;
 }
+
+
 ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head);
 ADD_ACKNOWLEDGER (New_fingering_engraver, stem);
 
index 57357cb55943d546e2824ad301009f80f31f1333..dc6ba4213fc8e983b21ce2c9f6069046bbe8450c 100644 (file)
@@ -14,7 +14,6 @@
 #include "international.hh"
 #include "item.hh"
 #include "misc.hh"
-#include "percent-repeat-iterator.hh"
 #include "repeated-music.hh"
 #include "side-position-interface.hh"
 #include "spanner.hh"
@@ -52,6 +51,10 @@ protected:
   Spanner *percent_;
   Spanner *percent_counter_;
 
+  
+  Grob *first_command_column_;
+  Moment command_moment_;
+  
 protected:
   virtual void finalize ();
   DECLARE_TRANSLATOR_LISTENER (percent);
@@ -65,8 +68,28 @@ Percent_repeat_engraver::Percent_repeat_engraver ()
 {
   percent_ = 0;
   percent_counter_ = 0;
-
   percent_event_ = 0;
+
+  first_command_column_ = 0;
+  command_moment_ = Moment (-1);
+}
+
+void
+Percent_repeat_engraver::start_translation_timestep ()
+{
+  if (now_mom ().main_part_ != command_moment_.main_part_)
+    {
+      first_command_column_ = unsmob_grob (get_property ("currentCommandColumn"));
+      command_moment_ = now_mom ();
+    }
+
+  if (stop_mom_.main_part_ == now_mom ().main_part_)
+    {
+      if (percent_)
+       typeset_perc ();
+      percent_event_ = 0;
+      repeat_sign_type_ = UNKNOWN;
+    }
 }
 
 IMPLEMENT_TRANSLATOR_LISTENER (Percent_repeat_engraver, percent);
@@ -114,9 +137,10 @@ Percent_repeat_engraver::process_music ()
        {
          if (percent_)
            typeset_perc ();
+         
          percent_ = make_spanner ("PercentRepeat", percent_event_->self_scm ());
 
-         Grob *col = unsmob_grob (get_property ("currentCommandColumn"));
+         Grob *col = first_command_column_;
          percent_->set_bound (LEFT, col);
 
          SCM count = percent_event_->get_property ("repeat-count");
@@ -181,7 +205,7 @@ Percent_repeat_engraver::typeset_perc ()
 {
   if (percent_)
     {
-      Grob *col = unsmob_grob (get_property ("currentCommandColumn"));
+      Grob *col = first_command_column_;
 
       percent_->set_bound (RIGHT, col);
       percent_ = 0;
@@ -192,17 +216,7 @@ Percent_repeat_engraver::typeset_perc ()
     }
 }
 
-void
-Percent_repeat_engraver::start_translation_timestep ()
-{
-  if (stop_mom_.main_part_ == now_mom ().main_part_)
-    {
-      if (percent_)
-       typeset_perc ();
-      percent_event_ = 0;
-      repeat_sign_type_ = UNKNOWN;
-    }
-}
+
 
 void
 Percent_repeat_engraver::stop_translation_timestep ()
index 27481cf1ab1b3335fc469989f7723a4d1a0a2be9..495f30f33cff535e088a5b4d0ccc65a399d4009c 100644 (file)
@@ -7,10 +7,20 @@
                   Erik Sandberg <mandolaerik@gmail.com>
 */
 
-#include "percent-repeat-iterator.hh"
 #include "input.hh"
 #include "music.hh"
 #include "repeated-music.hh"
+#include "sequential-iterator.hh"
+
+class Percent_repeat_iterator : public Sequential_iterator
+{
+public:
+  DECLARE_CLASSNAME(Percent_repeat_iterator);
+  DECLARE_SCHEME_CALLBACK (constructor, ());
+  Percent_repeat_iterator ();
+protected:
+  virtual SCM get_music_list () const;
+};
 
 IMPLEMENT_CTOR_CALLBACK (Percent_repeat_iterator);
 
@@ -35,8 +45,10 @@ Percent_repeat_iterator::get_music_list () const
     percent->set_property ("length", length);
     if (repeats > 1)
       percent->set_property ("repeat-count", scm_int2num (i));
+    
     child_list = scm_cons (percent->unprotect (), child_list);
   }
+  
   child_list = scm_cons (child->self_scm (), child_list);
 
   return child_list;
index 09d1aa6a0f9e5da00693e33bc319944f0964ba3b..c81c5fce6bc7c3a1e75478abe64c5649b9390e01 100644 (file)
@@ -170,7 +170,7 @@ ADD_TRANSLATOR_GROUP (Score_engraver,
                      "System ",
 
                      /* accept */
-                     "break-event",
+                     "",
                      
                      /* read */
                      "currentMusicalColumn "
index 37595526c55afe19b13429dcb27d7f91b0ee7106..16d5c4ba5f89558d6c2f4321bf3968f38662521f 100644 (file)
@@ -3,7 +3,8 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg <mandolaerik@gmail.com>
+  (c) 2000--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>, Erik Sandberg
+  <mandolaerik@gmail.com>
 */
 
 #include "bar-line.hh"
@@ -11,7 +12,6 @@
 #include "international.hh"
 #include "item.hh"
 #include "misc.hh"
-#include "percent-repeat-iterator.hh"
 #include "repeated-music.hh"
 #include "score-engraver.hh"
 #include "spanner.hh"
@@ -50,8 +50,11 @@ Slash_repeat_engraver::listen_percent (Stream_event *ev)
   
   if (get_event_length (ev) < meas_length)
     ASSIGN_EVENT_ONCE (slash_, ev);
-  else
-    ev->origin ()->warning (_ ("Slash repeat doesn't fit in one measure, junking"));
+
+  /*
+    don't warn if nothing happens: this can happen if there are whole
+    measure repeats.
+   */
 }
 
 void
index df529f7713667b1bb49ca8ba627cce3d6d8ed514..c78a066d065cc5069995adea3c86de5ae7c81cd1 100644 (file)
@@ -266,7 +266,8 @@ Slur::outside_slur_callback (SCM grob, SCM offset_scm)
  */
 void
 Slur::auxiliary_acknowledge_extra_object (Grob_info info,
-  vector<Grob*>& slurs, vector<Grob*>& end_slurs)
+                                         vector<Grob*> &slurs,
+                                         vector<Grob*> &end_slurs)
 {
   if (slurs.empty () && end_slurs.empty ())
     return;
index 61bd5d7504775be6717a101f8fd9b8baa17ba9ce..b7d1acfd70da86be0cca479cd2be4c7e742b328d 100644 (file)
@@ -202,7 +202,6 @@ contained staves are not connected vertically."
   \consists "Beam_engraver"
   \consists "Grace_beam_engraver"
   \consists "Auto_beam_engraver"
-  \consists "New_fingering_engraver"
   \consists "Chord_tremolo_engraver"
   \consists "Percent_repeat_engraver"
   \consists "Slash_repeat_engraver"
@@ -219,6 +218,7 @@ contained staves are not connected vertically."
   \consists "Phrasing_slur_engraver"
   \consists "Cluster_spanner_engraver"
   \consists "Slur_engraver"
+  \consists "New_fingering_engraver"
   \consists "Tie_engraver"
   \consists "Tuplet_engraver"
   \consists "Grace_engraver"
index 0e9ae37693c27d8857e260e32af4066d7f3ae857..2257b35f7004d7ba012a6e2846644d29cb257d53 100644 (file)
        (staff-padding . 0.25)
        ;; (script-priority . 0) priorities for scripts, see script.scm
        (X-offset . , ly:self-alignment-interface::centered-on-x-parent)
-       
 
        (stencil . ,ly:script-interface::print)
        (direction . ,ly:script-interface::calc-direction)