]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/lyric-phrasing-engraver.hh
* scm/chord-name.scm: remove new-chord-name-brew-molecule ; use
[lilypond.git] / lily / include / lyric-phrasing-engraver.hh
index 263ae2404816573e1e7b7dd0ddf310d92b5ac878..e5c578a2ae06684b68abbd33f154e1312f985b6e 100644 (file)
@@ -3,7 +3,7 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  2000 Glen Prideaux <glenprideaux@iname.com>
+  (c)  2000--2003 Glen Prideaux <glenprideaux@iname.com>
 */
 
 
@@ -14,6 +14,7 @@
 #include "engraver.hh"
 #include "item.hh"
 #include "smobs.hh"
+#include "protected-scm.hh"
 
 class Syllable_group;
 
@@ -26,27 +27,27 @@ class Syllable_group;
 /* 
 * Build an engraver that catches noteheads and lyrics.
 
-(It needs to be in a context above Staff and Lyrics, eg. in Score
+ (It needs to be in a context above Staff and Lyrics, eg. in Score
 context.)
 
 * Determine which heads belong to which lyrics
 
-(eg. by looking at the names of their originating contexts, or maybe
+ (eg. by looking at the names of their originating contexts, or maybe
 some \properties)
 
 * Attach the lyrics to the appropriate heads
 
-(by doing lyric->set_parent (head, X_AXIS), that will fix the current
+ (by doing lyric->set_parent (head, X_AXIS), that will fix the current
 noteheadwidth guessing kludge)
 
 * Check if the lyric syllables end or start a phrase.
 
-(eg. check if the syllable ends with punctuation, and remember that
+ (eg. check if the syllable ends with punctuation, and remember that
 fact for the next one.)
 
 * Adjust their alignment accordingly. 
 
-(eg. by doing lyric->add_offset_callback(centered_on_parent,X_AXIS)
+ (eg. by doing lyric->add_offset_callback (centered_on_parent,X_AXIS)
 and setting self-alignment-X)
 
 * Add a property to switch on/off the engraver (for multi stanza
@@ -62,63 +63,66 @@ for melismas as well.
 class Lyric_phrasing_engraver : public Engraver 
 {
 protected:
-  virtual void acknowledge_grob(Grob_info);
-  virtual void create_grobs ();
-  virtual void stop_translation_timestep();
-  virtual void do_removal_processing ();  
+  virtual void acknowledge_grob (Grob_info);
+  virtual void process_acknowledged_grobs ();
+  virtual void stop_translation_timestep ();
+  virtual void finalize ();  
 private:
-  void record_notehead(const String &context_id, Grob * notehead);
-  void record_lyric(const String &context_id, Grob * lyric);
-  void record_melisma(const String &context_id);
-  void record_extender(const String &context_id, Grob * extender);
-  Syllable_group * lookup_context_id(const String &context_id);
+  void record_notehead (const String &context_id, Grob * notehead);
+  void record_lyric (const String &context_id, Grob * lyric);
+  void record_melisma (const String &context_id);
+  void record_extender (const String &context_id, Grob * extender);
+  Syllable_group * lookup_context_id (const String &context_id);
 
 public:
-  Lyric_phrasing_engraver ();
+
   ~Lyric_phrasing_engraver ();
-  VIRTUAL_COPY_CONS (Translator);
+  TRANSLATOR_DECLARATIONS(  Lyric_phrasing_engraver);
 
 private:
   /** association list of Syllable_group smobs
+
+  fixme: should use property.
+  
   */
   Protected_scm voice_alist_;
-  Grob * any_notehead_l_;
+  Grob * any_notehead_;
 };
 
 
 class Syllable_group
 {
   bool first_in_phrase_b_;
-  Grob * notehead_l_;
-  Link_array<Grob> lyric_list_;
-  Grob * longest_lyric_l_;
-  Grob * shortest_lyric_l_;
-  int alignment_i_;
+  Grob * notehead_;
+  Link_array<Grob> lyrics_;
+  Grob * longest_lyric_;
+  Grob * shortest_lyric_;
+  int alignment_;
   bool melisma_b_;
-  Real group_translation_f_;
+  Real group_translation_;
 public:
-  static SCM make_entry();
-  void set_first_in_phrase(bool f);
-  void set_notehead(Grob * notehead);
-  void add_lyric(Grob * lyric);
-  void add_extender(Grob * extender);
-  void set_melisma() { melisma_b_ = true; }
-  bool get_melisma() { return melisma_b_; }
-  int lyric_count() { return lyric_list_.size(); }
-  void clear();
-  bool is_empty();
-  bool set_lyric_align(const char *punc, Grob *default_notehead_l);
-  void adjust_melisma_align();
-  int appropriate_alignment(const char *punc);
-  Real amount_to_translate();
-  void next_lyric();
-  void copy(Syllable_group *);
+  static SCM make_entry ();
+  void set_first_in_phrase (bool f);
+  void set_notehead (Grob * notehead);
+  void add_lyric (Grob * lyric);
+  void add_extender (Grob * extender);
+  void set_melisma () { melisma_b_ = true; }
+  bool get_melisma () { return melisma_b_; }
+  int lyric_count () { return lyrics_.size (); }
+  void clear ();
+  bool is_empty ();
+  bool set_lyric_align (const char *punc, Grob *default_notehead);
+  void adjust_melisma_align ();
+  int appropriate_alignment (const char *punc);
+  Real amount_to_translate ();
+  void next_lyric ();
+  void copy (Syllable_group *);
 private:
-  Syllable_group();
-  DECLARE_SIMPLE_SMOBS(Syllable_group,);
+  Syllable_group ();
+  DECLARE_SIMPLE_SMOBS (Syllable_group,);
 } ;
 
-Syllable_group * unsmob_voice_entry (SCM);
+DECLARE_UNSMOB(Syllable_group,voice_entry);
 
 
 #endif // LYRIC_PHRASING_ENGRAVER_HH