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