]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/paper-score.cc
release: 1.3.0
[lilypond.git] / lily / paper-score.cc
index 38ecdc320a4e1b323264502b837a516e538a5e6c..d8cba19d43f13871999e83186695482e1bbada58 100644 (file)
@@ -16,7 +16,6 @@
 #include "paper-score.hh"
 #include "paper-column.hh"
 #include "scope.hh"
-#include "word-wrap.hh"
 #include "gourlay-breaking.hh"
 #include "paper-stream.hh"
 #include "paper-outputter.hh"
 
 Paper_score::Paper_score ()
 {
-  protected_scms_ = scm_protect_object (gh_cons (SCM_BOOL_T, SCM_EOL));
   paper_l_ =0;
   outputter_l_ =0;
   Line_of_score * line_p = new Line_of_score;
-  typeset_unbroken_spanner (line_p);
-
+  line_p->pscore_l_ = this;
+  element_smob_list_ = scm_protect_object (gh_cons (line_p->self_scm_, SCM_EOL));
   line_l_ = line_p;
 }
 
@@ -42,40 +40,20 @@ Paper_score::Paper_score (Paper_score const &s)
 
 Paper_score::~Paper_score ()
 {
-  for (int i=span_p_arr_.size (); --i >=0 ; )
-    delete span_p_arr_[i];
-  for (int i=elem_p_arr_.size (); --i >=0 ; )
-    delete elem_p_arr_[i];
-
-  scm_unprotect_object (protected_scms_);
+  scm_unprotect_object (element_smob_list_);
 }
 
 void
 Paper_score::typeset_element (Score_element * elem_p)
 {
-  elem_p_arr_.push (elem_p);
   elem_p->pscore_l_ = this;
 
-  // take over protection.
-  SCM_CDR(protected_scms_) = gh_cons (elem_p->element_property_alist_,
-                                     SCM_CDR (protected_scms_));
-  scm_unprotect_object (elem_p->element_property_alist_);
+  SCM_CDR(element_smob_list_) = gh_cons (elem_p->self_scm_,
+                                        SCM_CDR (element_smob_list_));
+  elem_p->set_elt_property (ly_symbol ("full-name"),
+                           gh_str02scm((char*)elem_p->name()));
   
-  SCM p =  elem_p->remove_elt_property (break_helper_only_scm_sym);
-  if (p != SCM_BOOL_F)
-    break_helpers_arr_.push (elem_p);
-}
-
-
-void
-Paper_score::typeset_unbroken_spanner (Spanner*span_p)
-{
-  span_p_arr_.push (span_p);
-  span_p->pscore_l_=this;
-
-  SCM p =  span_p->remove_elt_property (break_helper_only_scm_sym);
-  if (p != SCM_BOOL_F)
-    break_helpers_arr_.push (span_p);
+  scm_unprotect_object (elem_p->self_scm_);
 }
 
 void
@@ -86,22 +64,21 @@ Paper_score::add_column (Paper_column *p)
   typeset_element(p);
 }
 
-
-
 void
 Paper_score::print () const
 {
 #ifndef NPRINT
-  if (!check_debug)
+  if (!flower_dstream)
     return ;
-  DOUT << "Paper_score { ";
-  DOUT << "\n elements: ";
-  for (int i=0; i < span_p_arr_.size (); i++)
-    span_p_arr_[i]->print ();
-  for (int i=0; i < elem_p_arr_.size (); i++)
-    elem_p_arr_[i]->print();
-  
-  DOUT << "}\n";
+
+  DEBUG_OUT << "Paper_score { ";
+  DEBUG_OUT << "\n elements: ";
+
+  for (SCM p = SCM_CDR (element_smob_list_);
+       p != SCM_EOL;
+       p = SCM_CDR(p))
+    gh_display (SCM_CAR(p));
+  DEBUG_OUT << "}\n";
 #endif
 }
 
@@ -118,27 +95,12 @@ Paper_score::calc_breaking ()
 {
   Break_algorithm *algorithm_p=0;
   Array<Column_x_positions> sol;
-  bool try_wrap = !paper_l_->get_var ("castingalgorithm");
 
-  if (!try_wrap)
-    {
-      algorithm_p = new Gourlay_breaking ;
-      algorithm_p->set_pscore (this);
-      sol = algorithm_p->solve ();
-      delete algorithm_p;
-      if (! sol.size ())
-       {
-         warning (_ ("Can't solve this casting problem exactly; revert to Word_wrap"));
-         try_wrap = true;
-       }
-    }
-  if  (try_wrap)
-    {
-      algorithm_p = new Word_wrap;
-      algorithm_p->set_pscore (this);
-      sol = algorithm_p->solve ();
-      delete algorithm_p;
-    }
+  algorithm_p = new Gourlay_breaking ;
+  algorithm_p->set_pscore (this);
+  sol = algorithm_p->solve ();
+  delete algorithm_p;
+
   return sol;
 }
 
@@ -175,8 +137,6 @@ Paper_score::process ()
        typeset_element (line_l);
     }
 
-  if (experimental_features_global_b)
-    *mlog << elem_p_arr_.size ()  + span_p_arr_.size () << _ (" elements. ");
 
   *mlog << "\n";
   *mlog << _ ("Line ... ");
@@ -190,9 +150,6 @@ Paper_score::process ()
       line_l->post_processing ();
       *mlog << i << flush;
       line_l->output_all (i + 1 == lines.size());
-      if (experimental_features_global_b)
-       *mlog << '(' << elem_p_arr_.size () + span_p_arr_.size () << ')';
-      
       *mlog << ']' << flush;
      }