]> git.donarmstrong.com Git - lilypond.git/blob - lily/paper-score.cc
release: 1.3.53
[lilypond.git] / lily / paper-score.cc
1 /*
2   p-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   progress_indication (_ ("Preprocessing elements...") + " ");
71
72   /*
73     Be sure to set breakability on first & last column.
74    */
75   Link_array<Paper_column> pc (line_l_->column_l_arr ());
76   
77   pc[0]->set_elt_property ("breakable", SCM_BOOL_T);
78   pc.top ()->set_elt_property ("breakable", SCM_BOOL_T);
79
80   line_l_->pre_processing ();
81  
82   Array<Column_x_positions> breaking = calc_breaking ();
83   line_l_->break_into_pieces (breaking);
84
85   
86   outputter_l_ = new Paper_outputter (paper_l_->paper_stream_p ());
87 ;
88   outputter_l_->output_header ();
89   outputter_l_->output_version();
90   
91   if (header_global_p)
92     outputter_l_->output_scope (header_global_p, "mudela");
93   if (header_l_)
94     outputter_l_->output_scope (header_l_, "mudela");
95
96   outputter_l_->output_comment (_ ("Outputting Score, defined at: "));
97   outputter_l_->output_comment (origin_str_);
98
99   if (paper_l_->scope_p_)
100     outputter_l_->output_scope (paper_l_->scope_p_, "mudelapaper");
101
102   SCM scm;
103   if(experimental_features_global_b)
104     {
105       SCM scm = gh_list (ly_symbol2scm ("experimental-on"), SCM_UNDEFINED);
106       outputter_l_->output_scheme (scm);
107     }
108   scm = gh_list (ly_symbol2scm ("header-end"), SCM_UNDEFINED);
109   outputter_l_->output_scheme (scm);
110   
111   line_l_->output_lines ();
112
113
114   scm = gh_list (ly_symbol2scm ("end-output"), SCM_UNDEFINED);
115   outputter_l_->output_scheme (scm);
116
117
118   // huh?
119   delete outputter_l_;
120   outputter_l_ = 0;
121 }