CVSROOT:        /cvsroot/lilypond
Module name:    lilypond
Branch:         
Changes by:     Han-Wen Nienhuys <[EMAIL PROTECTED]>    05/04/18 00:36:45

Modified files:
        .              : ChangeLog 
        lily           : arpeggio.cc beam.cc book.cc break-algorithm.cc 
                         break-align-interface.cc dot-column.cc 
                         global-context-scheme.cc gourlay-breaking.cc 
                         grob.cc hara-kiri-group-spanner.cc item.cc 
                         music-output.cc paper-score.cc performance.cc 
                         score-engraver.cc score-scheme.cc score.cc 
                         spacing-spanner.cc spanner.cc system.cc 
        lily/include   : global-context.hh music-output.hh 
                         paper-score.hh performance.hh score.hh 
                         system.hh 

Log message:
        * lily/include/paper-score.hh (class Paper_score): remove unused 
prototypes.
        
        * lily/book.cc (process): add -COUNT to midi output.
        
        * lily/score.cc (book_rendering): remove outname argument
        (book_rendering): return list of Music_outputs.
        
        * lily/global-context-scheme.cc (LY_DEFINE): remove outname argument.
        
        * lily/book.cc (process): loop over Music_outputs returned from 
Score::book_rendering().
        
        * lily/include/music-output.hh (class Music_output): smobify class.
        
        * lily/include/paper-score.hh (class Paper_score): make members private.
        
        * lily/performance.cc (process): return #f iso. #<undefined>. This
        prevents #<undefined> leaking into GUILE-userspace.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/ChangeLog.diff?tr1=1.3451&tr2=1.3452&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/arpeggio.cc.diff?tr1=1.49&tr2=1.50&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/beam.cc.diff?tr1=1.298&tr2=1.299&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/book.cc.diff?tr1=1.38&tr2=1.39&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/break-algorithm.cc.diff?tr1=1.42&tr2=1.43&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/break-align-interface.cc.diff?tr1=1.47&tr2=1.48&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/dot-column.cc.diff?tr1=1.81&tr2=1.82&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/global-context-scheme.cc.diff?tr1=1.7&tr2=1.8&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/gourlay-breaking.cc.diff?tr1=1.81&tr2=1.82&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/grob.cc.diff?tr1=1.129&tr2=1.130&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/hara-kiri-group-spanner.cc.diff?tr1=1.34&tr2=1.35&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/item.cc.diff?tr1=1.112&tr2=1.113&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/music-output.cc.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/paper-score.cc.diff?tr1=1.80&tr2=1.81&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/performance.cc.diff?tr1=1.55&tr2=1.56&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-engraver.cc.diff?tr1=1.142&tr2=1.143&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score-scheme.cc.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/score.cc.diff?tr1=1.160&tr2=1.161&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/spacing-spanner.cc.diff?tr1=1.137&tr2=1.138&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/spanner.cc.diff?tr1=1.131&tr2=1.132&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/system.cc.diff?tr1=1.104&tr2=1.105&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/global-context.hh.diff?tr1=1.8&tr2=1.9&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/music-output.hh.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/paper-score.hh.diff?tr1=1.29&tr2=1.30&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/performance.hh.diff?tr1=1.21&tr2=1.22&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/score.hh.diff?tr1=1.53&tr2=1.54&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/lilypond/lilypond/lily/include/system.hh.diff?tr1=1.18&tr2=1.19&r1=text&r2=text

Patches:
Index: lilypond/ChangeLog
diff -u lilypond/ChangeLog:1.3451 lilypond/ChangeLog:1.3452
--- lilypond/ChangeLog:1.3451   Sun Apr 17 22:41:22 2005
+++ lilypond/ChangeLog  Mon Apr 18 00:36:44 2005
@@ -1,5 +1,23 @@
 2005-04-18  Han-Wen Nienhuys  <[EMAIL PROTECTED]>
 
+       * lily/include/paper-score.hh (class Paper_score): remove unused 
prototypes.
+
+       * lily/book.cc (process): add -COUNT to midi output.
+
+       * lily/score.cc (book_rendering): remove outname argument
+       (book_rendering): return list of Music_outputs. 
+
+       * lily/global-context-scheme.cc (LY_DEFINE): remove outname argument.
+
+       * lily/book.cc (process): loop over Music_outputs returned from 
Score::book_rendering().
+
+       * lily/*.cc (width_callback): remove spurious "unused" warnings
+       for assert (axis==[XY]_AXIS); 
+
+       * lily/include/music-output.hh (class Music_output): smobify class.
+
+       * lily/include/paper-score.hh (class Paper_score): make members private.
+
        * lily/performance.cc (process): return #f iso. #<undefined>. This
        prevents #<undefined> leaking into GUILE-userspace.
 
Index: lilypond/lily/arpeggio.cc
diff -u lilypond/lily/arpeggio.cc:1.49 lilypond/lily/arpeggio.cc:1.50
--- lilypond/lily/arpeggio.cc:1.49      Tue Apr 12 22:49:29 2005
+++ lilypond/lily/arpeggio.cc   Mon Apr 18 00:36:45 2005
@@ -140,8 +140,9 @@
 Arpeggio::width_callback (SCM smob, SCM axis)
 {
   Grob *me = unsmob_grob (smob);
-  Axis a = (Axis)scm_to_int (axis);
-  assert (a == X_AXIS);
+  (void) axis;
+  
+  assert (scm_to_int (axis) == X_AXIS);
   Stencil arpeggio = Font_interface::get_default_font (me)->find_by_name 
("scripts.arpeggio");
 
   return ly_interval2scm (arpeggio.extent (X_AXIS));
Index: lilypond/lily/beam.cc
diff -u lilypond/lily/beam.cc:1.298 lilypond/lily/beam.cc:1.299
--- lilypond/lily/beam.cc:1.298 Tue Apr 12 22:49:29 2005
+++ lilypond/lily/beam.cc       Mon Apr 18 00:36:45 2005
@@ -1287,12 +1287,12 @@
 Beam::rest_collision_callback (SCM element_smob, SCM axis)
 {
   Grob *rest = unsmob_grob (element_smob);
-  Axis a = (Axis) scm_to_int (axis);
+  (void) axis;
 
   if (scm_is_number (rest->get_property ("staff-position")))
     return scm_int2num (0);
 
-  assert (a == Y_AXIS);
+  assert (scm_to_int (axis) == Y_AXIS);
 
   Grob *st = unsmob_grob (rest->get_property ("stem"));
   Grob *stem = st;
Index: lilypond/lily/book.cc
diff -u lilypond/lily/book.cc:1.38 lilypond/lily/book.cc:1.39
--- lilypond/lily/book.cc:1.38  Thu Mar 10 14:36:15 2005
+++ lilypond/lily/book.cc       Mon Apr 18 00:36:45 2005
@@ -23,6 +23,9 @@
 #include "text-item.hh"
 #include "warn.hh"
 
+#include "performance.hh"
+#include "paper-score.hh"
+
 #include "ly-smobs.icc"
 
 Book::Book ()
@@ -95,20 +98,36 @@
   paper_book->header_ = header_;
 
   /* Render in order of parsing.  */
+  int midi_count = 0;
   for (SCM s = scm_reverse (scores_); s != SCM_EOL; s = scm_cdr (s))
     {
       if (Score *score = unsmob_score (scm_car (s)))
        {
-         SCM systems = score
-           ->book_rendering (outname, paper_book->paper_, default_def, key);
+         SCM outputs = score
+           ->book_rendering (paper_book->paper_, default_def, key);
 
-         /* If the score is empty, generate no output.  Should we do
-            titling? */
-         if (scm_is_vector (systems))
+         while (scm_is_pair (outputs))
            {
-             if (ly_c_module_p (score->header_))
-               paper_book->add_score (score->header_);
-             paper_book->add_score (systems);
+             Music_output *output = unsmob_music_output (scm_car (outputs));
+
+             if (Performance *perf = dynamic_cast<Performance *> (output))
+               {
+                 String fn = outname;
+                 if (midi_count)
+                   fn += "-" + to_string (midi_count);
+
+                 midi_count ++;
+                 perf->write_output (fn);
+               }
+             else if (Paper_score *pscore = dynamic_cast<Paper_score *> 
(output)) 
+               {
+                 SCM systems = pscore->get_systems ();
+                 if (ly_c_module_p (score->header_))
+                   paper_book->add_score (score->header_);
+                 paper_book->add_score (systems);
+               }
+             
+             outputs = scm_cdr (outputs);
            }
        }
       else if (Text_interface::markup_p (scm_car (s)))
Index: lilypond/lily/break-algorithm.cc
diff -u lilypond/lily/break-algorithm.cc:1.42 
lilypond/lily/break-algorithm.cc:1.43
--- lilypond/lily/break-algorithm.cc:1.42       Wed Mar 16 19:19:15 2005
+++ lilypond/lily/break-algorithm.cc    Mon Apr 18 00:36:45 2005
@@ -19,7 +19,7 @@
 Array<int>
 Break_algorithm::find_break_indices () const
 {
-  Link_array<Grob> all = pscore_->system_->columns ();
+  Link_array<Grob> all = pscore_->root_system ()->columns ();
   Array<int> retval;
 
   for (int i = 0; i < all.size (); i++)
@@ -36,7 +36,7 @@
 Link_array<Grob>
 Break_algorithm::find_breaks () const
 {
-  Link_array<Grob> all = pscore_->system_->columns ();
+  Link_array<Grob> all = pscore_->root_system ()->columns ();
   Link_array<Grob> retval;
 
   for (int i = 0; i < all.size (); i++)
@@ -88,7 +88,7 @@
 Break_algorithm::set_pscore (Paper_score *s)
 {
   pscore_ = s;
-  linewidth_ = s->layout_->get_dimension (ly_symbol2scm ("linewidth"));
+  linewidth_ = s->layout ()->get_dimension (ly_symbol2scm ("linewidth"));
 }
 
 Array<Column_x_positions>
Index: lilypond/lily/break-align-interface.cc
diff -u lilypond/lily/break-align-interface.cc:1.47 
lilypond/lily/break-align-interface.cc:1.48
--- lilypond/lily/break-align-interface.cc:1.47 Thu Mar 10 14:36:15 2005
+++ lilypond/lily/break-align-interface.cc      Mon Apr 18 00:36:45 2005
@@ -43,8 +43,8 @@
 Break_align_interface::self_align_callback (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
-  Axis a = (Axis) scm_to_int (axis);
-  assert (a == X_AXIS);
+  (void)  axis;
+  assert (scm_to_int (axis) == X_AXIS);
 
   Item *item = dynamic_cast<Item *> (me);
   Direction bsd = item->break_status_dir ();
Index: lilypond/lily/dot-column.cc
diff -u lilypond/lily/dot-column.cc:1.81 lilypond/lily/dot-column.cc:1.82
--- lilypond/lily/dot-column.cc:1.81    Wed Mar 16 19:19:15 2005
+++ lilypond/lily/dot-column.cc Mon Apr 18 00:36:45 2005
@@ -29,8 +29,8 @@
 Dot_column::force_shift_callback (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
-  Axis a = (Axis) scm_to_int (axis);
-  assert (a == Y_AXIS);
+  (void) axis;
+  assert (scm_to_int (axis) == Y_AXIS);
   me = me->get_parent (X_AXIS);
 
   if (!to_boolean (me->get_property ("positioning-done")))
@@ -47,8 +47,8 @@
 Dot_column::side_position (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
-  Axis a = (Axis) scm_to_int (axis);
-  assert (a == X_AXIS);
+  (void) axis;
+  assert (scm_to_int (axis) == X_AXIS);
 
   Grob *stem = unsmob_grob (me->get_property ("stem"));
   if (stem
Index: lilypond/lily/global-context-scheme.cc
diff -u lilypond/lily/global-context-scheme.cc:1.7 
lilypond/lily/global-context-scheme.cc:1.8
--- lilypond/lily/global-context-scheme.cc:1.7  Sun Apr 17 22:41:23 2005
+++ lilypond/lily/global-context-scheme.cc      Mon Apr 18 00:36:45 2005
@@ -17,19 +17,17 @@
 #include "main.hh"
 
 LY_DEFINE (ly_format_output, "ly:format-output",
-          2, 0, 0, (SCM context, SCM outname),
+          1, 0, 0, (SCM context),
           "Given a Global context in its final state, "
-          "process it and return the (rendered) result.")
+          "process it and return the @code{Music_output} object in its final 
state.")
 {
   Global_context *g = dynamic_cast<Global_context *> (unsmob_context 
(context));
   SCM_ASSERT_TYPE (g, context, SCM_ARG1, __FUNCTION__, "Global context");
-  SCM_ASSERT_TYPE (scm_is_string (outname), outname, SCM_ARG2, __FUNCTION__, 
"output file name");
 
   Music_output *output = g->get_output ();
   progress_indication ("\n");
-
-  /* ugh, midi still wants outname  */
-  return output->process (ly_scm2string (outname));
+  output->process ();
+  return output->self_scm ();
 }
 
 LY_DEFINE (ly_run_translator, "ly:run-translator",
Index: lilypond/lily/gourlay-breaking.cc
diff -u lilypond/lily/gourlay-breaking.cc:1.81 
lilypond/lily/gourlay-breaking.cc:1.82
--- lilypond/lily/gourlay-breaking.cc:1.81      Tue Apr 12 22:49:28 2005
+++ lilypond/lily/gourlay-breaking.cc   Mon Apr 18 00:36:45 2005
@@ -77,15 +77,15 @@
 {
   Array<Break_node> optimal_paths;
   Link_array<Grob> all
-    = pscore_->system_->columns ();
+    = pscore_->root_system ()->columns ();
 
   Array<int> breaks = find_break_indices ();
 
   Break_node first_node;
   optimal_paths.push (first_node);
 
-  bool ragged_right = to_boolean (pscore_->layout_->c_variable 
("raggedright"));
-  bool ragged_last = to_boolean (pscore_->layout_->c_variable ("raggedlast"));
+  bool ragged_right = to_boolean (pscore_->layout ()->c_variable 
("raggedright"));
+  bool ragged_last = to_boolean (pscore_->layout ()->c_variable 
("raggedlast"));
 
   Real worst_force = 0.0;
   for (int break_idx = 1; break_idx < breaks.size (); break_idx++)
@@ -111,7 +111,7 @@
          cp.cols_ = line;
 
          Interval line_dims
-           = line_dimensions_int (pscore_->layout_, 
optimal_paths[start_idx].line_);
+           = line_dimensions_int (pscore_->layout (), 
optimal_paths[start_idx].line_);
          Simple_spacer_wrapper *sp = generate_spacing_problem (line, 
line_dims);
          bool last_line = break_idx == breaks.size () - 1;
          bool ragged = ragged_right
Index: lilypond/lily/grob.cc
diff -u lilypond/lily/grob.cc:1.129 lilypond/lily/grob.cc:1.130
--- lilypond/lily/grob.cc:1.129 Tue Apr 12 22:49:28 2005
+++ lilypond/lily/grob.cc       Mon Apr 18 00:36:45 2005
@@ -172,7 +172,7 @@
 Output_def *
 Grob::get_layout () const
 {
-  return pscore_ ? pscore_->layout_ : 0;
+  return pscore_ ? pscore_->layout () : 0;
 }
 
 /* Recursively track all dependencies of this Grob.  The status_ field
@@ -663,8 +663,8 @@
   if (s->original_)
     scm_gc_mark (s->original_->self_scm ());
 
-  if (s->pscore_ && s->pscore_->layout_)
-    scm_gc_mark (s->pscore_->layout_->self_scm ());
+  if (s->pscore_ && s->pscore_->layout ())
+    scm_gc_mark (s->pscore_->layout ()->self_scm ());
 
   s->do_derived_mark ();
   return s->mutable_property_alist_;
Index: lilypond/lily/hara-kiri-group-spanner.cc
diff -u lilypond/lily/hara-kiri-group-spanner.cc:1.34 
lilypond/lily/hara-kiri-group-spanner.cc:1.35
--- lilypond/lily/hara-kiri-group-spanner.cc:1.34       Wed Mar 16 19:19:15 2005
+++ lilypond/lily/hara-kiri-group-spanner.cc    Mon Apr 18 00:36:45 2005
@@ -19,9 +19,9 @@
 Hara_kiri_group_spanner::y_extent (SCM element_smob, SCM scm_axis)
 {
   Grob *me = unsmob_grob (element_smob);
-  Axis a = (Axis) scm_to_int (scm_axis);
+  (void) scm_axis;
 
-  assert (a == Y_AXIS);
+  assert (scm_to_int (scm_axis) == Y_AXIS);
   consider_suicide (me);
   return Axis_group_interface::group_extent_callback (me->self_scm (), 
scm_axis);
 }
@@ -59,8 +59,9 @@
 Hara_kiri_group_spanner::force_hara_kiri_callback (SCM element_smob, SCM axis)
 {
   Grob *me = unsmob_grob (element_smob);
-  Axis a = (Axis) scm_to_int (axis);
-  assert (a == Y_AXIS);
+  (void) axis;
+  
+  assert (scm_to_int (axis) == Y_AXIS);
   consider_suicide (me);
   return scm_make_real (0.0);
 }
Index: lilypond/lily/include/global-context.hh
diff -u lilypond/lily/include/global-context.hh:1.8 
lilypond/lily/include/global-context.hh:1.9
--- lilypond/lily/include/global-context.hh:1.8 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/global-context.hh     Mon Apr 18 00:36:45 2005
@@ -44,6 +44,6 @@
   Moment now_mom_;
 };
 
-SCM ly_format_output (SCM, SCM);
+SCM ly_format_output (SCM);
 
 #endif // GLOBAL_CONTEXT_HH
Index: lilypond/lily/include/music-output.hh
diff -u lilypond/lily/include/music-output.hh:1.21 
lilypond/lily/include/music-output.hh:1.22
--- lilypond/lily/include/music-output.hh:1.21  Sun Apr 17 22:41:23 2005
+++ lilypond/lily/include/music-output.hh       Mon Apr 18 00:36:45 2005
@@ -12,12 +12,20 @@
 #include "string.hh"
 #include "lily-proto.hh"
 #include "protected-scm.hh"
+#include "smobs.hh"
 
 class Music_output
 {
+  DECLARE_SMOBS(Music_output, foo);
+
+protected:
+  Music_output ();
+
 public:
-  virtual SCM process (String); 
-  virtual ~Music_output ();
+  virtual void derived_mark () const; 
+  virtual void process (); 
 };
 
+DECLARE_UNSMOB (Music_output, music_output);
+
 #endif /* MUSIC_OUTPUT_HH */
Index: lilypond/lily/include/paper-score.hh
diff -u lilypond/lily/include/paper-score.hh:1.29 
lilypond/lily/include/paper-score.hh:1.30
--- lilypond/lily/include/paper-score.hh:1.29   Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/paper-score.hh        Mon Apr 18 00:36:45 2005
@@ -15,27 +15,25 @@
 /* LAYOUT output */
 class Paper_score : public Music_output
 {
-public:
   Output_def *layout_;
   System *system_;
+  SCM systems_;
 
-  Paper_score ();
+public:
+  Paper_score (Output_def *);
 
-  int find_col_idx (Paper_column const *) const;
-  Link_array<Item> broken_col_range (Item const *, Item const *) const;
-  void typeset_line (System *);
-  void output ();
+  Output_def *layout () const;
+  System *root_system () const;
+  
+  void typeset_system (System *);
+  Array<Column_x_positions> calc_breaking ();
 
+  SCM get_systems () const;
 protected:
-  virtual SCM process (String);
+  virtual void process ();
+  virtual void derived_mark () const;
 
 private:
-  Protected_scm systems_;
-
-  void preprocess ();
-  void calc_idealspacing ();
-  Array<Column_x_positions> calc_breaking ();
-  void postprocess ();
   Paper_score (Paper_score const &);
 };
 
Index: lilypond/lily/include/performance.hh
diff -u lilypond/lily/include/performance.hh:1.21 
lilypond/lily/include/performance.hh:1.22
--- lilypond/lily/include/performance.hh:1.21   Sun Apr 17 22:41:23 2005
+++ lilypond/lily/include/performance.hh        Mon Apr 18 00:36:45 2005
@@ -24,7 +24,7 @@
   void output_header_track (Midi_stream &midi_stream_r);
 
   void print () const;
-  SCM process (String);
+  void write_output (String filename);
 
   Link_array<Audio_staff> audio_staffs_;
   Cons<Audio_element> *audio_element_list_;
Index: lilypond/lily/include/score.hh
diff -u lilypond/lily/include/score.hh:1.53 lilypond/lily/include/score.hh:1.54
--- lilypond/lily/include/score.hh:1.53 Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/score.hh      Mon Apr 18 00:36:45 2005
@@ -35,7 +35,7 @@
 
   SCM get_music () const;
   void set_music (SCM music, SCM parser);
-  SCM book_rendering (String, Output_def *, Output_def *, Object_key *);
+  SCM book_rendering (Output_def *, Output_def *, Object_key *);
 };
 
 DECLARE_UNSMOB (Score, score);
Index: lilypond/lily/include/system.hh
diff -u lilypond/lily/include/system.hh:1.18 
lilypond/lily/include/system.hh:1.19
--- lilypond/lily/include/system.hh:1.18        Thu Mar 10 14:36:12 2005
+++ lilypond/lily/include/system.hh     Mon Apr 18 00:36:45 2005
@@ -21,8 +21,8 @@
 public:
   int rank_;
   void post_processing ();
-  SCM get_line ();
-  SCM get_lines ();
+  SCM get_paper_system ();
+  SCM get_paper_systems ();
 
   System (SCM, Object_key const *);
   System (System const &, int);
Index: lilypond/lily/item.cc
diff -u lilypond/lily/item.cc:1.112 lilypond/lily/item.cc:1.113
--- lilypond/lily/item.cc:1.112 Wed Mar 16 19:19:15 2005
+++ lilypond/lily/item.cc       Mon Apr 18 00:36:45 2005
@@ -74,7 +74,7 @@
     {
       Grob *dolly = clone (count++);
       Item *item = dynamic_cast<Item *> (dolly);
-      pscore_->system_->typeset_grob (item);
+      pscore_->root_system ()->typeset_grob (item);
       new_copies[i] = item;
     }
   while (flip (&i) != LEFT);
Index: lilypond/lily/music-output.cc
diff -u lilypond/lily/music-output.cc:1.1 lilypond/lily/music-output.cc:1.2
--- lilypond/lily/music-output.cc:1.1   Sun Apr 17 22:41:23 2005
+++ lilypond/lily/music-output.cc       Mon Apr 18 00:36:45 2005
@@ -8,14 +8,16 @@
 */
 
 #include "music-output.hh" 
+#include "ly-smobs.icc"
 
-/*
-  Just stubs.
- */
-SCM
+Music_output::Music_output ()
+{
+  smobify_self ();
+}
+
+void
 Music_output::process ()
 {
-  return SCM_EOL;
 }
 
 Music_output::~Music_output ()
@@ -23,3 +25,28 @@
   
 }
   
+void
+Music_output::derived_mark () const
+{
+}
+
+IMPLEMENT_SMOBS (Music_output);
+IMPLEMENT_DEFAULT_EQUAL_P (Music_output);
+IMPLEMENT_TYPE_P (Music_output, "ly:score?");
+
+SCM
+Music_output::mark_smob (SCM s)
+{
+  Music_output *sc = (Music_output *) SCM_CELL_WORD_1 (s);
+
+  sc->derived_mark ();
+  return SCM_EOL;
+}
+
+int
+Music_output::print_smob (SCM, SCM p, scm_print_state*)
+{
+  scm_puts ("#<Music_output>", p);
+
+  return 1;
+}
Index: lilypond/lily/paper-score.cc
diff -u lilypond/lily/paper-score.cc:1.80 lilypond/lily/paper-score.cc:1.81
--- lilypond/lily/paper-score.cc:1.80   Tue Apr 12 22:49:28 2005
+++ lilypond/lily/paper-score.cc        Mon Apr 18 00:36:45 2005
@@ -21,10 +21,11 @@
 #include "system.hh"
 #include "warn.hh"
 
-Paper_score::Paper_score ()
+Paper_score::Paper_score (Output_def *layout)
 {
-  layout_ = 0;
+  layout_ = layout;
   system_ = 0;
+  systems_ = SCM_EOL;
 }
 
 Paper_score::Paper_score (Paper_score const &s)
@@ -33,8 +34,15 @@
   assert (false);
 }
 
+
+void
+Paper_score::derived_mark () const
+{
+  scm_gc_mark (systems_);
+}
+
 void
-Paper_score::typeset_line (System *system)
+Paper_score::typeset_system (System *system)
 {
   if (!system_)
     system_ = system;
@@ -59,8 +67,8 @@
   return sol;
 }
 
-SCM
-Paper_score::process (String)
+void
+Paper_score::process ()
 {
   if (be_verbose_global)
     message (_f ("Element count %d (spanners %d) ",
@@ -81,12 +89,24 @@
 
   Array<Column_x_positions> breaking = calc_breaking ();
   system_->break_into_pieces (breaking);
-  SCM lines = system_->get_lines ();
+  system_->get_paper_systems ();
+}
 
-  /*
-    retain Grobs, since they are pointed to by the point & click data
-    structures, and are not marked fully, because child -> parent
-    links aren't marked.
-   */
-  return lines;
+System *
+Paper_score::root_system () const
+{
+  return system_;
+}
+
+Output_def *
+Paper_score::layout () const
+{
+  return layout_;
+}
+  
+
+SCM
+Paper_score::get_systems () const
+{
+  return root_system ()->get_paper_systems ();
 }
Index: lilypond/lily/performance.cc
diff -u lilypond/lily/performance.cc:1.55 lilypond/lily/performance.cc:1.56
--- lilypond/lily/performance.cc:1.55   Sun Apr 17 22:41:23 2005
+++ lilypond/lily/performance.cc        Mon Apr 18 00:36:45 2005
@@ -149,8 +149,9 @@
   audio_element_list_ = new Killing_cons<Audio_element> (p, 
audio_element_list_);
 }
 
-SCM
-Performance::process (String out)
+
+void
+Performance::write_output (String out)
 {
   if (out == "-")
     out = "lelie.midi";
@@ -165,5 +166,4 @@
 
   output (midi_stream);
   progress_indication ("\n");
-  return SCM_BOOL_F;
 }
Index: lilypond/lily/score-engraver.cc
diff -u lilypond/lily/score-engraver.cc:1.142 
lilypond/lily/score-engraver.cc:1.143
--- lilypond/lily/score-engraver.cc:1.142       Wed Mar 16 19:19:15 2005
+++ lilypond/lily/score-engraver.cc     Mon Apr 18 00:36:45 2005
@@ -111,15 +111,14 @@
             + _ ("Aborting"));
     }
 
-  pscore_ = new Paper_score;
-  pscore_->layout_ = dynamic_cast<Output_def *> (get_output_def ());
+  pscore_ = new Paper_score (dynamic_cast<Output_def *> (get_output_def ()));
 
   SCM props = updated_grob_properties (context (), ly_symbol2scm ("System"));
 
   Object_key const *sys_key = context ()->get_grob_key ("System");
-  pscore_->typeset_line (new System (props, sys_key));
+  pscore_->typeset_system (new System (props, sys_key));
 
-  system_ = pscore_->system_;
+  system_ = pscore_->root_system ();
   make_columns ();
   system_->set_bound (LEFT, command_column_);
   command_column_->set_property ("breakable", SCM_BOOL_T);
@@ -156,7 +155,7 @@
 Score_engraver::announce_grob (Grob_info info)
 {
   announce_infos_.push (info);
-  pscore_->system_->typeset_grob (info.grob_);
+  pscore_->root_system ()->typeset_grob (info.grob_);
   elems_.push (info.grob_);
 }
 
Index: lilypond/lily/score-scheme.cc
diff -u lilypond/lily/score-scheme.cc:1.6 lilypond/lily/score-scheme.cc:1.7
--- lilypond/lily/score-scheme.cc:1.6   Thu Mar 10 14:36:13 2005
+++ lilypond/lily/score-scheme.cc       Mon Apr 18 00:36:45 2005
@@ -62,7 +62,7 @@
 
   SCM context = ly_run_translator (sc->get_music (), score_def->self_scm (),
                                   key);
-  SCM lines = ly_format_output (context, scm_makfrom0str ("<embedded>"));
+  SCM lines = ly_format_output (context);
 
   scm_remember_upto_here_1 (prot);
   return lines;
Index: lilypond/lily/score.cc
diff -u lilypond/lily/score.cc:1.160 lilypond/lily/score.cc:1.161
--- lilypond/lily/score.cc:1.160        Tue Apr 12 22:49:27 2005
+++ lilypond/lily/score.cc      Mon Apr 18 00:36:45 2005
@@ -119,7 +119,7 @@
   if (Global_context *g = dynamic_cast<Global_context *>
       (unsmob_context (context)))
     {
-      SCM systems = ly_format_output (context, outname);
+      SCM systems = ly_format_output (context);
       Music_output *output = g->get_output ();
       if (systems != SCM_UNDEFINED)
        {
@@ -135,7 +135,7 @@
          paper_book->classic_output (ly_scm2string (outname));
          scm_gc_unprotect_object (paper_book->self_scm ());
        }
-      delete output;
+      scm_gc_unprotect_object (output->self_scm ());
     }
 
   scm_remember_upto_here_1 (scaled_def);
@@ -143,14 +143,12 @@
 }
 
 /*
-  Format score, return systems. OUTNAME is still passed to create a midi
-  file.
+  Format score, return list of Music_output objects. 
 
   LAYOUTBOOK should be scaled already.
 */
 SCM
-Score::book_rendering (String outname,
-                      Output_def *layoutbook,
+Score::book_rendering (Output_def *layoutbook,
                       Output_def *default_def,
                       Object_key *book_key)
 {
@@ -163,8 +161,9 @@
   if (layoutbook && layoutbook->c_variable ("is-paper") == SCM_BOOL_T)
     scale = scm_to_double (layoutbook->c_variable ("outputscale"));
 
-  SCM out = scm_makfrom0str (outname.to_str0 ());
-  SCM systems = SCM_EOL;
+  SCM outputs = SCM_EOL;
+  SCM *tail = &outputs;
+  
   int outdef_count = defs_.size ();
 
   Object_key *key = new Lilypond_general_key (book_key, user_key_, 0);
@@ -175,6 +174,7 @@
     {
       Output_def *def = outdef_count ? defs_[i] : default_def;
       SCM scaled = SCM_EOL;
+
       if (def->c_variable ("is-layout") == SCM_BOOL_T)
        {
          def = scale_output_def (def, scale);
@@ -187,9 +187,10 @@
       SCM context = ly_run_translator (music_, def->self_scm (), scm_key);
       if (dynamic_cast<Global_context *> (unsmob_context (context)))
        {
-         SCM s = ly_format_output (context, out);
-         if (s != SCM_UNDEFINED)
-           systems = s;
+         SCM s = ly_format_output (context);
+         
+         *tail = scm_cons (s, SCM_EOL);
+         tail = SCM_CDRLOC(*tail);
        }
 
       scm_remember_upto_here_1 (scaled);
@@ -197,7 +198,7 @@
 
   scm_remember_upto_here_1 (scm_key);
   scm_remember_upto_here_1 (scaled_bookdef);
-  return systems;
+  return outputs;
 }
 
 void
Index: lilypond/lily/spacing-spanner.cc
diff -u lilypond/lily/spacing-spanner.cc:1.137 
lilypond/lily/spacing-spanner.cc:1.138
--- lilypond/lily/spacing-spanner.cc:1.137      Tue Apr 12 22:49:27 2005
+++ lilypond/lily/spacing-spanner.cc    Mon Apr 18 00:36:45 2005
@@ -360,7 +360,7 @@
   /*
     can't use get_system() ? --hwn.
   */
-  Link_array<Grob> all (me->pscore_->system_->columns ());
+  Link_array<Grob> all (me->pscore_->root_system ()->columns ());
 
   set_explicit_neighbor_columns (all);
 
Index: lilypond/lily/spanner.cc
diff -u lilypond/lily/spanner.cc:1.131 lilypond/lily/spanner.cc:1.132
--- lilypond/lily/spanner.cc:1.131      Tue Apr 12 22:49:27 2005
+++ lilypond/lily/spanner.cc    Mon Apr 18 00:36:45 2005
@@ -81,7 +81,7 @@
     }
   else
     {
-      Link_array<Item> break_points = pscore_->system_->broken_col_range 
(left, right);
+      Link_array<Item> break_points = pscore_->root_system 
()->broken_col_range (left, right);
 
       break_points.insert (left, 0);
       break_points.push (right);
Index: lilypond/lily/system.cc
diff -u lilypond/lily/system.cc:1.104 lilypond/lily/system.cc:1.105
--- lilypond/lily/system.cc:1.104       Tue Apr 12 22:49:27 2005
+++ lilypond/lily/system.cc     Mon Apr 18 00:36:45 2005
@@ -83,7 +83,7 @@
 }
 
 SCM
-System::get_lines ()
+System::get_paper_systems ()
 {
   for (SCM s = get_property ("all-elements"); scm_is_pair (s); s = scm_cdr (s))
     {
@@ -154,7 +154,7 @@
 
       System *system = dynamic_cast<System *> (broken_intos_[i]);
       system->post_processing ();
-      scm_vector_set_x (lines, scm_int2num (i), system->get_line ());
+      scm_vector_set_x (lines, scm_int2num (i), system->get_paper_system ());
 
       if (be_verbose_global)
        progress_indication (to_string (i) + "]");
@@ -171,7 +171,7 @@
       system->rank_ = i;
 
       Link_array<Grob> c (breaking[i].cols_);
-      pscore_->typeset_line (system);
+      pscore_->typeset_system (system);
 
       system->set_bound (LEFT, c[0]);
       system->set_bound (RIGHT, c.top ());
@@ -282,7 +282,7 @@
 }
 
 SCM
-System::get_line ()
+System::get_paper_system ()
 {
   static int const LAYER_COUNT = 3;
 


_______________________________________________
Lilypond-cvs mailing list
[EMAIL PROTECTED]
http://lists.gnu.org/mailman/listinfo/lilypond-cvs

Reply via email to