]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/define-music-types.scm (music-descriptions): add RepeatTieEvent
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 21 Feb 2006 23:53:34 +0000 (23:53 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Tue, 21 Feb 2006 23:53:34 +0000 (23:53 +0000)
* lily/repeat-tie-engraver.cc (acknowledge_note_head): new file. cut & paste
froum Laissez_vibrer_engraver.

* ly/declarations-init.ly (repeatTie): add \repeatTie

* scm/define-grobs.scm (all-grob-descriptions): add RepeatTie, RepeatTieColumn

* scm/define-grob-properties.scm (all-user-grob-properties): add
head-direction property.

* lily/tie-formatting-problem.cc (from_semi_ties): rename from
from_lv_ties. Take head direction argument.

* lily/semi-tie-column.cc: rename from
laissez-vibrer-tie-column.cc. Rename class too.

* lily/semi-tie.cc: rename from laissez-vibrer-tie.cc. Rename
class too.

19 files changed:
ChangeLog
input/regression/laissez-vibrer-ties.ly
input/regression/repeat-tie.ly [new file with mode: 0644]
lily/include/laissez-vibrer-tie-column.hh [deleted file]
lily/include/laissez-vibrer-tie.hh [deleted file]
lily/include/semi-tie-column.hh [new file with mode: 0644]
lily/include/semi-tie.hh [new file with mode: 0644]
lily/include/tie-formatting-problem.hh
lily/laissez-vibrer-tie-column.cc [deleted file]
lily/laissez-vibrer-tie.cc [deleted file]
lily/repeat-tie-engraver.cc [new file with mode: 0644]
lily/semi-tie-column.cc [new file with mode: 0644]
lily/semi-tie.cc [new file with mode: 0644]
lily/tie-formatting-problem.cc
ly/declarations-init.ly
ly/engraver-init.ly
scm/define-grob-properties.scm
scm/define-grobs.scm
scm/define-music-types.scm

index 95945a22036f7f2e177aaed3d9c3fd4de8f1326a..71dd3c9dea4f19c1a0ded22f2020b7b201487bc4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,26 @@
 2006-02-22  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * scm/define-music-types.scm (music-descriptions): add RepeatTieEvent
+
+       * lily/repeat-tie-engraver.cc (acknowledge_note_head): new file. cut & paste
+       froum Laissez_vibrer_engraver.
+
+       * ly/declarations-init.ly (repeatTie): add \repeatTie
+
+       * scm/define-grobs.scm (all-grob-descriptions): add RepeatTie, RepeatTieColumn
+
+       * scm/define-grob-properties.scm (all-user-grob-properties): add
+       head-direction property.
+
+       * lily/tie-formatting-problem.cc (from_semi_ties): rename from
+       from_lv_ties. Take head direction argument.
+
+       * lily/semi-tie-column.cc: rename from
+       laissez-vibrer-tie-column.cc. Rename class too.
+
+       * lily/semi-tie.cc: rename from laissez-vibrer-tie.cc. Rename
+       class too.
+
        * lily/paper-score.cc (find_break_indices): move from Break_algorithm.
 
        * lily/break-algorithm.cc (find_break_indices): remove linewidth <
index c02e974b2715fdcbbc7286f7e2b221ac87375829..aec508ab753d7581c97fff1a668f86fc62c44be9 100644 (file)
@@ -16,16 +16,16 @@ They have fixed size. Their formatting can be tuned with
 }
 
 \relative {
-  <c e g>\laissezVibrer
-  <c f g>\laissezVibrer
-  <c d f g>\laissezVibrer
-  <c d f g>4.\laissezVibrer
+  <c e g>\laissezVibrer r4
+  <c f g>\laissezVibrer r
+  <c d f g>\laissezVibrer r
+  <c d f g>4.\laissezVibrer r
 
-  <c d e f>4\laissezVibrer
+  <c d e f>4\laissezVibrer r
   \override LaissezVibrerTieColumn #'tie-configuration
   = #'((-7 . -1)
        (-5 . -1)
        (-3 . 1)
        (-1 . 1))
-  <c d e f>4\laissezVibrer
+  <c d e f>4\laissezVibrer r
 }
diff --git a/input/regression/repeat-tie.ly b/input/regression/repeat-tie.ly
new file mode 100644 (file)
index 0000000..50c7139
--- /dev/null
@@ -0,0 +1,16 @@
+\header {
+
+  texidoc = "Repeat ties are only connected on the right side to a
+note head."
+
+}
+
+\version "2.7.35"
+\paper {
+  ragged-right = ##t
+}
+
+\relative c'' {
+  r4 c4\repeatTie r <c d f  g> \repeatTie
+
+} 
diff --git a/lily/include/laissez-vibrer-tie-column.hh b/lily/include/laissez-vibrer-tie-column.hh
deleted file mode 100644 (file)
index 40be6ec..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
-  laissez-vibrer-tie-column.hh -- declare Laissez_vibrer_tie_column
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#ifndef TIE_LAISSEZ_VIBRER_COLUMN_HH
-#define TIE_LAISSEZ_VIBRER_COLUMN_HH
-
-#include "grob-interface.hh"
-#include "lily-proto.hh"
-#include "lily-guile.hh"
-
-struct Laissez_vibrer_tie_column
-{
-  static bool has_interface (Grob *);
-  
-  DECLARE_SCHEME_CALLBACK(calc_positioning_done, (SCM));
-};
-
-
-#endif /* TIE_LAISSEZ_VIBRER_COLUMN_HH */
-
diff --git a/lily/include/laissez-vibrer-tie.hh b/lily/include/laissez-vibrer-tie.hh
deleted file mode 100644 (file)
index 32d4711..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-  laissez-vibrer-tie.hh -- declare Laissez_vibrer_tie
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#ifndef TIE_LAISSEZ_VIBRER_HH
-#define TIE_LAISSEZ_VIBRER_HH
-
-
-#include "grob-interface.hh"
-#include "lily-guile.hh"
-
-struct Laissez_vibrer_tie
-{
-  static bool has_interface (Grob *);
-  
-  DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
-  DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
-  static int compare (Grob *const &s1,
-                     Grob *const &s2);
-  static int get_position (Grob *);
-};
-
-#endif /* TIE_LAISSEZ_VIBRER_HH */
diff --git a/lily/include/semi-tie-column.hh b/lily/include/semi-tie-column.hh
new file mode 100644 (file)
index 0000000..cfeb7fc
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+  semi-tie-column.hh -- declare Laissez_vibrer_tie_column
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#ifndef SEMI_TIE_COLUMN_HH
+#define SEMI_TIE_COLUMN_HH
+
+#include "grob-interface.hh"
+#include "lily-proto.hh"
+#include "lily-guile.hh"
+
+struct Semi_tie_column
+{
+  static bool has_interface (Grob *);
+  
+  DECLARE_SCHEME_CALLBACK(calc_positioning_done, (SCM));
+};
+
+
+#endif /* SEMI_TIE_COLUMN_HH */
+
diff --git a/lily/include/semi-tie.hh b/lily/include/semi-tie.hh
new file mode 100644 (file)
index 0000000..d0a0baf
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+  semi-tie.hh -- declare Laissez_vibrer_tie
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#ifndef SEMI_TIE_HH
+#define SEMI_TIE_HH
+
+
+#include "grob-interface.hh"
+#include "lily-guile.hh"
+
+struct Semi_tie
+{
+  static bool has_interface (Grob *);
+  
+  DECLARE_SCHEME_CALLBACK (calc_direction, (SCM));
+  DECLARE_SCHEME_CALLBACK (calc_control_points, (SCM));
+  static int compare (Grob *const &s1,
+                     Grob *const &s2);
+  static int get_position (Grob *);
+};
+
+#endif /* SEMI_TIE_HH */
index 18eafec4f037efa0e775574608c484aa04d620e8..befb430c5d51308f5cff9c5b2e7b6a85af7863b8 100644 (file)
@@ -87,7 +87,7 @@ public:
   Tie_configuration find_optimal_tie_configuration (Tie_specification const &) const;
   void from_ties (vector<Grob*> const &ties);
   void from_tie (Grob *tie);
-  void from_lv_ties (vector<Grob*> const &);
+  void from_semi_ties (vector<Grob*> const &, Direction head_dir);
   void set_chord_outline (vector<Item*>, Direction);
   void set_manual_tie_configuration (SCM);
   Interval get_attachment (Real) const;
diff --git a/lily/laissez-vibrer-tie-column.cc b/lily/laissez-vibrer-tie-column.cc
deleted file mode 100644 (file)
index 7b99d6e..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-  laissez-vibrer-tie-column.cc -- implement Laissez_vibrer_tie_column
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#include "laissez-vibrer-tie-column.hh"
-#include "laissez-vibrer-tie.hh"
-#include "grob.hh"
-#include "tie-column.hh"
-#include "tie.hh"
-#include "directional-element-interface.hh"
-#include "pointer-group-interface.hh"
-#include "staff-symbol-referencer.hh"
-#include "item.hh"
-#include "tie-formatting-problem.hh"
-#include "tie-configuration.hh"
-#include "tie-column-format.hh"
-
-
-ADD_INTERFACE(Laissez_vibrer_tie_column,
-             "laissez-vibrer-tie-column-interface",
-             "The interface for a column of l.v. ties.",
-
-             /* properties */
-             "positioning-done "
-             "tie-configuration "
-             );
-                          
-
-
-/*
-  Cut & paste from tie-column.cc
- */   
-MAKE_SCHEME_CALLBACK(Laissez_vibrer_tie_column, calc_positioning_done, 1);
-SCM
-Laissez_vibrer_tie_column::calc_positioning_done (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  
-  extract_grob_set (me, "ties", lv_ro_ties);
-  vector<Grob*> lv_ties (lv_ro_ties);
-
-  vector_sort (lv_ties, &Laissez_vibrer_tie::compare);
-
-  Ties_configuration ties_config;
-  
-
-  Tie_formatting_problem problem;
-  
-  problem.from_lv_ties (lv_ties);
-
-  SCM manual_configs = me->get_property ("tie-configuration");
-  problem.set_manual_tie_configuration (manual_configs);
-
-  Ties_configuration base = problem.generate_optimal_chord_configuration ();
-  for (vsize i = 0; i < lv_ties.size(); i++)
-    {
-      Tie::set_control_points (lv_ties[i], problem.common_x_refpoint (), base[i],
-                              problem.details_);
-      set_grob_direction (lv_ties[i], base[i].dir_);
-    }
-
-  return SCM_BOOL_T;
-}
-  
-
diff --git a/lily/laissez-vibrer-tie.cc b/lily/laissez-vibrer-tie.cc
deleted file mode 100644 (file)
index b88cb9c..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-  laissez-vibrer-tie.cc -- implement Laissez_vibrer_tie
-
-  source file of the GNU LilyPond music typesetter
-
-  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
-
-*/
-
-#include "laissez-vibrer-tie-column.hh"
-#include "laissez-vibrer-tie.hh"
-#include "directional-element-interface.hh"
-#include "grob.hh"
-#include "tie.hh"
-#include "warn.hh"
-#include "staff-symbol-referencer.hh"
-
-ADD_INTERFACE(Laissez_vibrer_tie,
-             "laissez-vibrer-tie-interface",
-             "The interface for l.v. tie items.",
-
-             /* properties */
-             "control-points "
-             "direction "
-             "details "
-             "note-head "
-             "thickness "
-             );
-
-MAKE_SCHEME_CALLBACK(Laissez_vibrer_tie, calc_control_points, 1)
-SCM
-Laissez_vibrer_tie::calc_control_points (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  if (Laissez_vibrer_tie_column::has_interface (me->get_parent (Y_AXIS)))
-    {
-      me->get_parent (Y_AXIS)->get_property ("positioning-done");
-    }
-  else
-    {
-      programming_error ("lv tie without Laissez_vibrer_tie_column. Killing lv tie."); 
-      me->suicide (); 
-    }
-  
-  return SCM_UNSPECIFIED;
-}
-
-MAKE_SCHEME_CALLBACK(Laissez_vibrer_tie, calc_direction, 1)
-SCM
-Laissez_vibrer_tie::calc_direction (SCM smob)
-{
-  Grob *me = unsmob_grob (smob);
-  if (Laissez_vibrer_tie_column::has_interface (me->get_parent (Y_AXIS)))
-    me->get_parent (Y_AXIS)->get_property("positioning-done");
-  else
-    {
-      programming_error ("lv tie without Laissez_vibrer_tie_column"); 
-      set_grob_direction (me, UP);
-    }
-
-  return SCM_UNSPECIFIED;
-}
-
-int
-Laissez_vibrer_tie::get_position (Grob *me)
-{
-  Grob *h = unsmob_grob (me->get_object ("note-head"));
-  return (int) rint (Staff_symbol_referencer::get_position (h));
-}
-
-int
-Laissez_vibrer_tie::compare (Grob *const &s1,
-                            Grob *const &s2)
-{
-  return sign (get_position (s1) - get_position (s2));
-}
-                                
diff --git a/lily/repeat-tie-engraver.cc b/lily/repeat-tie-engraver.cc
new file mode 100644 (file)
index 0000000..4bce211
--- /dev/null
@@ -0,0 +1,84 @@
+/*
+  repeat-engraver.cc -- implement Repeat_tie_engraver
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+
+#include "engraver.hh"
+#include "item.hh"
+#include "pointer-group-interface.hh"
+
+#include "translator.icc"
+
+class Repeat_tie_engraver : public Engraver
+{
+  Music *event_;
+  Grob *semi_tie_column_;
+  vector<Grob*> semi_ties_;
+  
+  void stop_translation_timestep (); 
+  DECLARE_ACKNOWLEDGER (note_head);
+  
+  virtual bool try_music (Music *);
+public:
+  TRANSLATOR_DECLARATIONS (Repeat_tie_engraver);
+};
+
+Repeat_tie_engraver::Repeat_tie_engraver ()
+{
+  event_ = 0;
+  semi_tie_column_ = 0;
+}
+
+void
+Repeat_tie_engraver::stop_translation_timestep ()
+{
+  event_ = 0;
+  semi_tie_column_ = 0;
+  semi_ties_.clear ();
+}
+
+bool
+Repeat_tie_engraver::try_music (Music *m)
+{
+  event_ = m;
+  return true;
+}
+
+void
+Repeat_tie_engraver::acknowledge_note_head (Grob_info inf)
+{
+  if (!event_)
+    return;
+
+  if (!semi_tie_column_)
+    {
+      semi_tie_column_ = make_item ("RepeatTieColumn", event_->self_scm ());
+    }
+  
+  Grob *semi_tie = make_item ("RepeatTie", event_->self_scm ());
+  semi_tie->set_object ("note-head", inf.grob ()->self_scm ());
+  
+  Pointer_group_interface::add_grob (semi_tie_column_, ly_symbol2scm ("ties"),
+                                    semi_tie);
+  semi_tie->set_parent (semi_tie_column_, Y_AXIS);
+  semi_ties_.push_back (semi_tie);
+}
+
+
+
+ADD_ACKNOWLEDGER (Repeat_tie_engraver, note_head);
+ADD_TRANSLATOR (Repeat_tie_engraver, 
+               /* doc */ "Create Laissez vibrer items.",
+               
+               /* create */
+               "RepeatTie "
+               "RepeatTieColumn ",
+
+               /* accept */ "repeat-tie-event",
+               /* read */ "",
+               /* write */ "");
diff --git a/lily/semi-tie-column.cc b/lily/semi-tie-column.cc
new file mode 100644 (file)
index 0000000..a754224
--- /dev/null
@@ -0,0 +1,71 @@
+/*
+  semi-tie-column.cc -- implement Semi_tie_column
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "semi-tie-column.hh"
+#include "semi-tie.hh"
+#include "grob.hh"
+#include "tie-column.hh"
+#include "tie.hh"
+#include "directional-element-interface.hh"
+#include "pointer-group-interface.hh"
+#include "staff-symbol-referencer.hh"
+#include "item.hh"
+#include "tie-formatting-problem.hh"
+#include "tie-configuration.hh"
+#include "tie-column-format.hh"
+
+
+ADD_INTERFACE(Semi_tie_column,
+             "semi-tie-column-interface",
+             "The interface for a column of l.v. ties.",
+
+             /* properties */
+             "positioning-done "
+             "head-direction "
+             "tie-configuration "
+             );
+                          
+
+
+/*
+  Cut & paste from tie-column.cc
+ */   
+MAKE_SCHEME_CALLBACK(Semi_tie_column, calc_positioning_done, 1);
+SCM
+Semi_tie_column::calc_positioning_done (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  
+  extract_grob_set (me, "ties", lv_ro_ties);
+  vector<Grob*> lv_ties (lv_ro_ties);
+
+  vector_sort (lv_ties, &Semi_tie::compare);
+
+  Ties_configuration ties_config;
+  
+
+  Tie_formatting_problem problem;
+  
+  problem.from_semi_ties (lv_ties, to_dir (me->get_property ("head-direction")));
+
+  SCM manual_configs = me->get_property ("tie-configuration");
+  problem.set_manual_tie_configuration (manual_configs);
+
+  Ties_configuration base = problem.generate_optimal_chord_configuration ();
+  for (vsize i = 0; i < lv_ties.size(); i++)
+    {
+      Tie::set_control_points (lv_ties[i], problem.common_x_refpoint (), base[i],
+                              problem.details_);
+      set_grob_direction (lv_ties[i], base[i].dir_);
+    }
+
+  return SCM_BOOL_T;
+}
+  
+
diff --git a/lily/semi-tie.cc b/lily/semi-tie.cc
new file mode 100644 (file)
index 0000000..bddae0e
--- /dev/null
@@ -0,0 +1,79 @@
+/*
+  semi-tie.cc -- implement Semi_tie
+
+  source file of the GNU LilyPond music typesetter
+
+  (c) 2005--2006 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+*/
+
+#include "semi-tie-column.hh"
+#include "semi-tie.hh"
+#include "directional-element-interface.hh"
+#include "grob.hh"
+#include "tie.hh"
+#include "warn.hh"
+#include "staff-symbol-referencer.hh"
+
+ADD_INTERFACE(Semi_tie,
+             
+             "semi-tie-interface",
+             
+             "A tie which is only on one side connected to note heads. ",
+
+             /* properties */
+             "control-points "
+             "direction "
+             "details "
+             "note-head "
+             "thickness "
+             );
+
+MAKE_SCHEME_CALLBACK(Semi_tie, calc_control_points, 1)
+SCM
+Semi_tie::calc_control_points (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
+    {
+      me->get_parent (Y_AXIS)->get_property ("positioning-done");
+    }
+  else
+    {
+      programming_error ("lv tie without Semi_tie_column. Killing lv tie."); 
+      me->suicide (); 
+    }
+  
+  return SCM_UNSPECIFIED;
+}
+
+MAKE_SCHEME_CALLBACK(Semi_tie, calc_direction, 1)
+SCM
+Semi_tie::calc_direction (SCM smob)
+{
+  Grob *me = unsmob_grob (smob);
+  if (Semi_tie_column::has_interface (me->get_parent (Y_AXIS)))
+    me->get_parent (Y_AXIS)->get_property("positioning-done");
+  else
+    {
+      programming_error ("lv tie without Semi_tie_column"); 
+      set_grob_direction (me, UP);
+    }
+
+  return SCM_UNSPECIFIED;
+}
+
+int
+Semi_tie::get_position (Grob *me)
+{
+  Grob *h = unsmob_grob (me->get_object ("note-head"));
+  return (int) rint (Staff_symbol_referencer::get_position (h));
+}
+
+int
+Semi_tie::compare (Grob *const &s1,
+                            Grob *const &s2)
+{
+  return sign (get_position (s1) - get_position (s2));
+}
+                                
index f1fc92244123ee8c64f8e00dbf32f8c9caa69b1e..4fe618c92eefccf3c0767f761a63f635f0fe9070 100644 (file)
@@ -252,7 +252,7 @@ Tie_formatting_problem::from_ties (vector<Grob*> const &ties)
 }
 
 void
-Tie_formatting_problem::from_lv_ties (vector<Grob*> const &lv_ties)
+Tie_formatting_problem::from_semi_ties (vector<Grob*> const &lv_ties, Direction head_dir)
 {
   if (lv_ties.empty ())
     return;
@@ -273,7 +273,7 @@ Tie_formatting_problem::from_lv_ties (vector<Grob*> const &lv_ties)
          spec.position_ = int (Staff_symbol_referencer::get_position (head));
        }
 
-      spec.note_head_drul_[LEFT] = head;
+      spec.note_head_drul_[head_dir] = head;
       heads.push_back (head);
       specifications_.push_back (spec);
     }
@@ -284,20 +284,21 @@ Tie_formatting_problem::from_lv_ties (vector<Grob*> const &lv_ties)
   for (vsize i = 0; i < heads.size (); i++)
     x_refpoint_ = heads[i]->common_refpoint (x_refpoint_, X_AXIS); 
 
-  set_chord_outline (heads, LEFT);
+  set_chord_outline (heads, head_dir);
 
-  Real right_most = - infinity_f;   
+  Real extremal = head_dir * infinity_f;   
 
-  for (vsize i = 0; i < chord_outlines_[LEFT].size (); i++)
+  for (vsize i = 0; i < chord_outlines_[head_dir].size (); i++)
     {
-      right_most = max (right_most, chord_outlines_[LEFT][i].height_);
+      extremal = head_dir * min (head_dir * extremal,
+                                  head_dir * chord_outlines_[head_dir][i].height_);
     }
 
   Skyline_entry right_entry;
   right_entry.width_.set_full ();
-  right_entry.height_ = right_most + 1.5;
+  right_entry.height_ = extremal - head_dir * 1.5;
   
-  chord_outlines_[RIGHT].push_back (right_entry);
+  chord_outlines_[-head_dir].push_back (right_entry);
 }
 
 
index 9eef5204b0bfecbc4a771ad44064826fcab97a4b..393bed2d07dac4fa5de1fd6e6e1a7aee55b5f573 100644 (file)
@@ -66,6 +66,7 @@ escapedSmallerSymbol = #(make-span-event 'CrescendoEvent START)
 melisma = #(make-span-event 'ManualMelismaEvent START)
 melismaEnd = #(make-span-event 'ManualMelismaEvent STOP)
 laissezVibrer = #(make-music 'LaissezVibrerEvent)
+repeatTie = #(make-music 'RepeatTieEvent)
                  
 \include "grace-init.ly"
 \include "midi-init.ly"
index 6654a65ccbb62c54eb6dc63e214662e5a7bf1e71..079a65faca2040b9b01a781a30fcaeb74762c860 100644 (file)
@@ -182,6 +182,7 @@ contained staves are not connected vertically."
   \consists "Grob_pq_engraver"
   \consists "Forbid_line_break_engraver"
   \consists "Laissez_vibrer_engraver"
+  \consists "Repeat_tie_engraver"
   \consists "Note_head_line_engraver"
   \consists "Glissando_engraver"
   \consists "Ligature_bracket_engraver"
index 5cf7e4908039fcf7cbe9bd2352f0ed002912322c..bc4afc84d485e163b482731798eb1a07965babba 100644 (file)
@@ -231,6 +231,7 @@ of the @code{spacing-increment}.")
 
      (grow-direction ,ly:dir? "Crescendo or decrescendo?")
      (hair-thickness ,number? "Thickness of the thin line in a bar line.")
+     (head-direction ,ly:dir? "Are the note heads left or right in a semitie?")
      (height ,ly:dimension? "Height of an object in staff-space.")
      (height-limit ,ly:dimension? "Maximum slur height: the longer the
 slur, the closer it is to this height.")
index c76015ce9bcd87dc6454d577ad45fdde8d22f3fc..c99b2eedec1246b4e4cbe6cdffd2f77d93c7d504 100644 (file)
                 (interfaces . (key-signature-interface
                                font-interface
                                break-aligned-interface))))))
-    (LaissezVibrerTie
+    
+    
+   (LaissezVibrerTie
      . (
        (stencil  . ,ly:tie::print)
-       (control-points . ,ly:laissez-vibrer-tie::calc-control-points)
-       (direction . ,ly:laissez-vibrer-tie::calc-direction)
+       (control-points . ,ly:semi-tie::calc-control-points)
+       (direction . ,ly:semi-tie::calc-direction)
        (details . ((ratio . 0.333)
                    (height-limit . 1.0)))
        (thickness . 1.0)
        (meta . ((class . Item)
-                (interfaces . (laissez-vibrer-tie-interface))
+                (interfaces . (semi-tie-interface))
                 ))
        ))
 
      . (
        (X-extent . #f)
        (Y-extent . #f)
-       (positioning-done . ,ly:laissez-vibrer-tie-column::calc-positioning-done)
+       (head-direction . ,LEFT)
+       (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
        (meta . ((class . Item)
-                (interfaces . (laissez-vibrer-tie-column-interface))
+                (interfaces . (semi-tie-column-interface))
                 ))
        ))
 
        (slope . 1.7)
        (meta . ((class . Item)
                 (interfaces . (percent-repeat-interface))))))
+    (RepeatTie
+     . (
+       (stencil  . ,ly:tie::print)
+       (control-points . ,ly:semi-tie::calc-control-points)
+       (direction . ,ly:semi-tie::calc-direction)
+       (details . ((ratio . 0.333)
+                   (height-limit . 1.0)))
+       (thickness . 1.0)
+       (meta . ((class . Item)
+                (interfaces . (semi-tie-interface))
+                ))
+       ))
+
+    (RepeatTieColumn
+     . (
+       (X-extent . #f)
+       (Y-extent . #f)
+       (head-direction . ,RIGHT)
+       (positioning-done . ,ly:semi-tie-column::calc-positioning-done)
+       (meta . ((class . Item)
+                (interfaces . (semi-tie-column-interface))
+                ))
+       ))
+
     (Rest
      . (
        (stencil . ,ly:rest::print)
index 25562da9164f258a10fa8beb7bcda3814b968ab2..64a548de5cb496c07cea72669883001b5996e09e 100644 (file)
@@ -230,7 +230,6 @@ Syntax: @var{note}\\laissezVibrer.")
     (LigatureEvent
      . (
        (description .  "(docme).")
-
        (span-type . ligature)
        (types . (general-music span-event ligature-event event))
        ))
@@ -413,14 +412,15 @@ goes down).")
     (RepeatedMusic
      . (
        (description .  "Repeat music in different ways")
-       (type .  repeated-music)
        (types . (general-music repeated-music))
        ))
-    
+    (RepeatTieEvent
+     . ((description . "Ties for starting a second volta bracket.")
+       (types . (general-music event repeat-tie-event))
+       ))
     (Event
      . (
        (description .  "Atomic music event.")
-
        (types . (general-music event))
        ))