]> git.donarmstrong.com Git - lilypond.git/commitdiff
* scm/define-grobs.scm (all-grob-descriptions): add LyricSpace
authorHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 8 Dec 2005 13:10:38 +0000 (13:10 +0000)
committerHan-Wen Nienhuys <hanwen@xs4all.nl>
Thu, 8 Dec 2005 13:10:38 +0000 (13:10 +0000)
grob

* lily/lyric-hyphen.cc (set_spacing_rods): use minimum-distance
iso. minimum-length property for rods.

* lily/hyphen-engraver.cc (acknowledge_lyric_syllable): create
LyricSpace item to keep lyrics spaced apart.

* ly/engraver-init.ly: remove Separating_line_group_engraver

ChangeLog
lily/hyphen-engraver.cc
lily/lyric-hyphen.cc
lily/separating-line-group-engraver.cc
ly/engraver-init.ly
scm/define-grobs.scm

index 91e02553d80d49101a0076e51a5ab6268da6e501..643bebc3faf7246f49fcc5b65db1ac48b48d1d9d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
 2005-12-08  Han-Wen Nienhuys  <hanwen@xs4all.nl>
 
+       * scm/define-grobs.scm (all-grob-descriptions): add LyricSpace
+       grob
+
+       * lily/lyric-hyphen.cc (set_spacing_rods): use minimum-distance
+       iso. minimum-length property for rods.
+
+       * lily/hyphen-engraver.cc (acknowledge_lyric_syllable): create
+       LyricSpace item to keep lyrics spaced apart.
+
+       * ly/engraver-init.ly: remove Separating_line_group_engraver
+
        * Documentation/user/music-glossary.tely: do setfilename before
        music-glossary.
 
index 0f54038353711516dba07a74393f3aad481ef370..8140386a2499ee7887c9958a654219f5fe21b100 100644 (file)
 class Hyphen_engraver : public Engraver
 {
   Music *ev_;
+  Music *finished_ev_;
+
   Spanner *hyphen_;
   Spanner *finished_hyphen_;
+
 public:
   TRANSLATOR_DECLARATIONS (Hyphen_engraver);
 
 protected:
+
   DECLARE_ACKNOWLEDGER (lyric_syllable);
+
   virtual void finalize ();
   virtual bool try_music (Music *);
+
   void stop_translation_timestep ();
   void process_music ();
-private:
 };
 
 Hyphen_engraver::Hyphen_engraver ()
 {
   hyphen_ = 0;
   finished_hyphen_ = 0;
+  finished_ev_ = 0;
   ev_ = 0;
 }
 
@@ -43,9 +49,13 @@ void
 Hyphen_engraver::acknowledge_lyric_syllable (Grob_info i)
 {
   Item *item = i.item ();
+  
+  if (!hyphen_)
+    hyphen_ = make_spanner ("LyricSpace", item->self_scm ());
+
   if (hyphen_)
     hyphen_->set_bound (LEFT, item);
-
+      
   if (finished_hyphen_)
     finished_hyphen_->set_bound (RIGHT, item);
 }
@@ -93,7 +103,8 @@ Hyphen_engraver::finalize ()
 
       if (!finished_hyphen_->get_bound (RIGHT))
        {
-         finished_hyphen_->warning (_ ("unterminated hyphen; removing"));
+         if (finished_ev_)
+           finished_hyphen_->warning (_ ("unterminated hyphen; removing"));
          finished_hyphen_->suicide ();
        }
       finished_hyphen_ = 0;
@@ -111,18 +122,25 @@ void
 Hyphen_engraver::stop_translation_timestep ()
 {
   if (finished_hyphen_ && finished_hyphen_->get_bound (RIGHT))
-    finished_hyphen_ = 0;
-
+    {
+      finished_hyphen_ = 0;
+      finished_ev_ = 0;
+    }
+  
   if (finished_hyphen_ && hyphen_)
     {
       programming_error ("hyphen not finished yet");
       finished_hyphen_ = 0;
+      finished_ev_ = 0;
     }
 
   if (hyphen_)
-    finished_hyphen_ = hyphen_;
+    {
+      finished_hyphen_ = hyphen_;
+      finished_ev_ = ev_;
+    }
+  
   hyphen_ = 0;
-
   ev_ = 0;
 }
 
@@ -132,7 +150,7 @@ ADD_ACKNOWLEDGER (Hyphen_engraver, lyric_syllable);
 
 ADD_TRANSLATOR (Hyphen_engraver,
                /* doc */ "Create lyric hyphens",
-               /* create */ "LyricHyphen",
+               /* create */ "LyricHyphen LyricsSpace",
                /* accept */ "hyphen-event",
                /* read */ "",
                /* write */ "");
index f06bf9d8baa074b13fa22287c0e1b63b5f9f2a90..6988209c748275f60d16076cfd6438aad0e878c0 100644 (file)
 #include "moment.hh"
 
 /*
-  TODO: should extract hyphen from the font.
+  TODO: should extract hyphen dimensions or hyphen glyph from the
+  font.
  */
+
 MAKE_SCHEME_CALLBACK (Hyphen_spanner, print, 1);
 SCM
 Hyphen_spanner::print (SCM smob)
@@ -106,26 +108,20 @@ Hyphen_spanner::set_spacing_rods (SCM smob)
 
   Rod r;
   Spanner *sp = dynamic_cast<Spanner *> (me);
-  r.distance_
-    = robust_scm2double (me->get_property ("minimum-length"), 0);
 
-  if (r.distance_ > 0.0)
+  r.distance_ = robust_scm2double (me->get_property ("minimum-distance"), 0);
+  Direction d = LEFT;
+  do
     {
-      Real padding = robust_scm2double (me->get_property ("padding"), 0.1);
-      r.distance_ += 2*padding;
-      Direction d = LEFT;
-      do
-       {
-         r.item_drul_[d] = sp->get_bound (d);
-         if (r.item_drul_[d])
-           r.distance_ += r.item_drul_[d]->extent (r.item_drul_[d], X_AXIS)[-d];
-       }
-      while (flip (&d) != LEFT);
-
-      if (r.item_drul_[LEFT]
-         && r.item_drul_[RIGHT])
-       r.add_to_cols ();
+      r.item_drul_[d] = sp->get_bound (d);
+      if (r.item_drul_[d])
+       r.distance_ += r.item_drul_[d]->extent (r.item_drul_[d], X_AXIS)[-d];
     }
+  while (flip (&d) != LEFT);
+
+  if (r.item_drul_[LEFT]
+      && r.item_drul_[RIGHT])
+    r.add_to_cols ();
 
   return SCM_UNSPECIFIED;
 }
@@ -139,5 +135,6 @@ ADD_INTERFACE (Hyphen_spanner, "lyric-hyphen-interface",
               "height "
               "dash-period "
               "minimum-length "
+              "minimum-distance "
               "length");
 
index 53e669483d5d980b3abd20d5535762b6a13735a6..8b696398996b92551ede3973b7b469a6e9e9c71f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-  '  separating-line-group-engraver.cc -- implement Separating_line_group_engraver
+  separating-line-group-engraver.cc -- implement Separating_line_group_engraver
 
   source file of the GNU LilyPond music typesetter
 
index 8e332495ef3a926a1576e380d35ad225ea3fd720..c051a64451b3879e29aef1061281a11510dfc666 100644 (file)
@@ -338,7 +338,6 @@ connected vertically.  "
 printing of a single line of lyrics.  "
   
   \name Lyrics 
-  \consists "Separating_line_group_engraver"
   \consists "Lyric_engraver"
   \consists "Extender_engraver"
   \consists "Hyphen_engraver"
index f4ac31d2586c7df85b431e7680019cf523b1775c..7528f93ef6decc58a752c85c40161fd65b546205 100644 (file)
        (dash-period . 10.0)
        (length . 0.66)
        (minimum-length . 0.3)
+       (minimum-distance . 0.5)
        (padding . 0.07)
-       ;;      (springs-and-rods . ,Hyphen_spanner::set_spacing_rods)
-
+       (springs-and-rods . ,Hyphen_spanner::set_spacing_rods)
+       
        (stencil . ,Hyphen_spanner::print)
 
        (Y-extent . (0 . 0))
                 (interfaces . (lyric-interface
                                lyric-extender-interface))))))
 
+    (LyricSpace
+     . ((minimum-distance . 0.3)
+       (springs-and-rods . ,Hyphen_spanner::set_spacing_rods)
+       (padding . 0.0)
+       (Y-extent . #f)
+       (X-extent . #f)
+       (meta . ((class . Spanner)
+                (interfaces . (spanner-interface spacing-interface)) 
+                ))
+       ))
     (LyricText
      . (