]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/extender-engraver.hh
release: 1.1.31
[lilypond.git] / lily / include / extender-engraver.hh
index c49043a8c2fa65003d99d1f4501feaa0f9da415a..1b6335bb5125d4329d901c860b1e71d2ef330ce8 100644 (file)
 #include "engraver.hh"
 #include "drul-array.hh"
 #include "extender-spanner.hh"
+#include "pqueue.hh"
+
+struct Text_lyric_tuple {
+  Rhythmic_req *req_l_ ;
+  G_text_item *text_l_;
+  Moment end_;
+  
+  Text_lyric_tuple ();
+  Text_lyric_tuple (G_text_item*, Rhythmic_req*, Moment);
+  static int time_compare (Text_lyric_tuple const &, Text_lyric_tuple const &);
+};
+
+inline int compare (Text_lyric_tuple const &a, Text_lyric_tuple const &b)
+{
+  return Text_lyric_tuple::time_compare (a,b);
+}
+
+
+
 
 /**
-  Generate an extender.
-  Should make an Extender_spanner that typesets a nice extender line.
- */
+  Generate an extender.  Should make an Extender_spanner that typesets
+  a nice extender line.
+
+  We remember all G_text_items that come across, and store their
+  termination times. When we get a request, we create the spanner, and
+  attach the left point to the finished lyrics, and the right point to
+  any lyrics we receive by then.
+*/
 class Extender_engraver : public Engraver
 {
+  PQueue<Text_lyric_tuple> past_lyrics_pq_;
+  Array<Text_lyric_tuple> now_lyrics_;
+  Array<Text_lyric_tuple> stopped_lyrics_;  
+  
+  Extender_req* req_l_;
+  Extender_spanner* extender_spanner_p_;
+
+  
 public:
   Extender_engraver ();
   VIRTUAL_COPY_CONS (Translator);
@@ -29,11 +61,9 @@ protected:
   virtual void do_process_requests();
   virtual bool do_try_music (Music*);
   virtual void do_pre_move_processing();
-  
+  virtual void do_post_move_processing ();
 private:
-  Drul_array<Extender_req*> span_reqs_drul_;
-  Drul_array<Moment> span_mom_drul_;
-  Extender_spanner* extender_spanner_p_;
+
 };
 
 #endif // EXTENDER_ENGRAVER_HH