]> git.donarmstrong.com Git - lilypond.git/blob - lily/paper-score.cc
release: 1.3.62
[lilypond.git] / lily / paper-score.cc
1 /*
2   paper-score.cc -- implement Paper_score
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1996--2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
7 */
8
9 #include "main.hh"
10 #include "debug.hh"
11 #include "lookup.hh"
12 #include "spanner.hh"
13 #include "paper-def.hh"
14 #include "line-of-score.hh"
15 #include "paper-column.hh"
16 #include "paper-score.hh"
17 #include "paper-column.hh"
18 #include "scope.hh"
19 #include "gourlay-breaking.hh"
20 #include "paper-stream.hh"
21 #include "paper-outputter.hh"
22 #include "file-results.hh"
23 #include "misc.hh"
24 #include "all-font-metrics.hh"
25
26 Paper_score::Paper_score ()
27 {
28   paper_l_ =0;
29   outputter_l_ =0;
30   line_l_ = new Line_of_score;
31   element_smob_list_ = SCM_EOL;
32   typeset_line (line_l_);
33 }
34
35 void
36 Paper_score::typeset_line (Line_of_score *l)
37 {
38   line_l_->pscore_l_ = this;
39   element_smob_list_ = gh_cons (l->self_scm_, element_smob_list_);
40 }
41
42 Paper_score::Paper_score (Paper_score const &s)
43   : Music_output (s)
44 {
45   assert (false);
46 }
47
48 Array<Column_x_positions>
49 Paper_score::calc_breaking ()
50 {
51   Break_algorithm *algorithm_p=0;
52   Array<Column_x_positions> sol;
53
54   algorithm_p = new Gourlay_breaking ;
55   algorithm_p->set_pscore (this);
56   sol = algorithm_p->solve ();
57   delete algorithm_p;
58
59   return sol;
60 }
61
62
63
64 /*
65   urg. clean me
66  */
67 void
68 Paper_score::process ()
69 {
70   if (verbose_global_b)
71     progress_indication ( _f("Element count %d ",  line_l_->element_count ()));
72
73   
74   progress_indication (_ ("Preprocessing elements...") + " ");
75
76   /*
77     Be sure to set breakability on first & last column.
78    */
79   Link_array<Paper_column> pc (line_l_->column_l_arr ());
80   
81   pc[0]->set_elt_property ("breakable", SCM_BOOL_T);
82   pc.top ()->set_elt_property ("breakable", SCM_BOOL_T);
83
84   line_l_->pre_processing ();
85  
86   Array<Column_x_positions> breaking = calc_breaking ();
87   line_l_->break_into_pieces (breaking);
88   
89   outputter_l_ = new Paper_outputter (paper_l_->paper_stream_p ());
90 ;
91   outputter_l_->output_header ();
92   outputter_l_->output_version();
93   
94   if (header_global_p)
95     outputter_l_->output_scope (header_global_p, "mudela");
96   if (header_l_)
97     outputter_l_->output_scope (header_l_, "mudela");
98
99   outputter_l_->output_comment (_ ("Outputting Score, defined at: "));
100   outputter_l_->output_comment (origin_str_);
101
102   if (paper_l_->scope_p_)
103     outputter_l_->output_scope (paper_l_->scope_p_, "mudelapaper");
104
105   SCM scm;
106   if(experimental_features_global_b)
107     {
108       SCM scm = gh_list (ly_symbol2scm ("experimental-on"), SCM_UNDEFINED);
109       outputter_l_->output_scheme (scm);
110     }
111   scm = gh_list (ly_symbol2scm ("header-end"), SCM_UNDEFINED);
112   outputter_l_->output_scheme (scm);
113   
114   line_l_->output_lines ();
115
116
117   scm = gh_list (ly_symbol2scm ("end-output"), SCM_UNDEFINED);
118   outputter_l_->output_scheme (scm);
119
120   // huh?
121   delete outputter_l_;
122   outputter_l_ = 0;
123 }