]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/include/p-score.hh
release: 1.0.15
[lilypond.git] / lily / include / p-score.hh
index 1e283faf9e4a8b6f59c7f0b8bdf470b6da5e6db5..6b627f9377fe789b893e3174cd1a2075f6d14f25 100644 (file)
@@ -1,9 +1,9 @@
 /*
-  p-score.hh -- declare PScore
+  p-score.hh -- declare Paper_score
 
-  source file of the LilyPond music typesetter
+  source file of the GNU LilyPond music typesetter
 
-  (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c) 1996, 1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 
 #define P_SCORE_HH
 
 #include "colhpos.hh"
-#include "varray.hh"
+#include "parray.hh"
 #include "lily-proto.hh"
-#include "p-col.hh"
-#include "p-staff.hh"
+#include "plist.hh"
+#include "music-output.hh"
 
-
-/** all stuff which goes onto paper. notes, signs, symbols in a score can be grouped in two ways:
-    horizontally (staffwise), and vertically (columns). #PScore#
-    contains the items, the columns and the staffs.
- */
-
-struct PScore {
-    Paper_def *paper_l_;
+/** all stuff which goes onto paper. notes, signs, symbols in a score
+     #Paper_score# contains the items, the columns.
     
-    /// the columns, ordered left to right
-    Pointer_list<PCol *> cols;
+    */
 
-    /// the idealspacings, no particular order
-    Pointer_list<Idealspacing*> suz;
+class Paper_score : public Music_output
+{
+public:
+  Paper_def *paper_l_;
 
-    /// the staffs ordered top to bottom
-    Pointer_list<PStaff*> staffs;
+  /// the columns, ordered left to right
+  Link_list<Paper_column *> col_p_list_;
 
-    /// all symbols in score. No particular order.
-    Pointer_list<Item*> its;
+  /// crescs etc; no particular order
+  Pointer_list<Spanner *> span_p_list_;
 
-    /// if broken, the different lines
-    Pointer_list<Line_of_score*> lines;
+  /// other elements
+  Pointer_list<Score_element*> elem_p_list_;
+  
+  Paper_outputter *outputter_l_;  
+  Line_of_score * line_l_;
+  
+  Paper_score ();
 
-    /// crescs etc; no particular order
-    Pointer_list<Spanner *> spanners;
 
-    /// broken spanners
-    Pointer_list<Spanner*> broken_spans;
+  /// add to bottom of pcols
+  void add_column (Paper_column*);
 
-    Pointer_list<Vertical_spanner*> vspan_p_list_;
-    /* *************** */
-    /* CONSTRUCTION */
-    
-    PScore(Paper_def*);
-    /// add a line to the broken stuff. Positions given in #config#
-    void set_breaking(Array<Col_hpositions> const &);
+  /**
+    @return argument as a cursor of the list
+    */
+  PCursor<Paper_column *> find_col (Paper_column const *) const;
 
-    void add(PStaff *);
+  Link_array<Paper_column> col_range (Paper_column *left_l, Paper_column *right_l) const;
+  Link_array<Paper_column> breakable_col_range (Paper_column*,Paper_column*) const;
+  Link_array<Item> broken_col_range (Item const*,Item const*) const;
     
-
-    /** add an item.
-       add the item in specified containers. If breakstatus is set
-       properly, add it to the {pre,post}break of the pcol.
-       */
-    void typeset_item(Item *item_p,  PCol *pcol_l,PStaff*pstaf_l,int breakstatus=1);
-
-    /// add a Spanner
-    void typeset_spanner(Spanner*, PStaff*);
+    
+  /* STANDARD ROUTINES */
+  void print() const;
+  
+  void typeset_element (Score_element*);
+  void typeset_broken_spanner (Spanner*);
+  /// add a Spanner
+  void typeset_unbroken_spanner (Spanner*);
  
-    ///    add to bottom of pcols
-    void add(PCol*);
-    void add_broken(Spanner*);
-
-    /* INSPECTION */
-    Array<Item*> select_items(PStaff*, PCol*);
-
-     /**
-       @return argument as a cursor of the list
-       */
-    PCursor<PCol *> find_col(PCol const *)const;
+    
+  virtual ~Paper_score();
+protected:
 
+  
     /* MAIN ROUTINES */
-    void process();
-
-    /// last deed of this struct
-    void output(Tex_stream &ts);
-
-    /* UTILITY ROUTINES */
-
-    /// get the spacing between c1 and c2, create one if necessary.
-    Idealspacing* get_spacing(PCol *c1, PCol *c2);
+  virtual void process();
+// can't instantiate template with cygnus' gcc...
+//  virtual ~Paper_score();
 
-    /// connect c1 and c2
-    void do_connect(PCol *c1, PCol *c2, Real distance_f, Real strength_f);
-
-    /// connect c1 and c2 and any children of c1 and c2
-    void connect(PCol* c1, PCol *c2, Real distance_f,Real  strength_f= 1.0);
-    
-    /* STANDARD ROUTINES */
-    void OK()const;
-    void print() const;
 private:
-    /// before calc_breaking
-    void preprocess();
 
-    /// calculate where the lines are to be broken, and use results
-    void calc_breaking();
+  void remove_line (Line_of_score*);
+  /// before calc_breaking
+  void preprocess();
+
+  void calc_idealspacing();
+  /// calculate where the lines are to be broken, and use results
+  Array<Column_x_positions> calc_breaking();
 
-    /// after calc_breaking
-    void postprocess();
+  /// after calc_breaking
+  void postprocess();
     
-    /// delete unused columns
-    void clean_cols();
+  /// delete unused columns
+  void clean_cols();
 };
 
 #endif