]> git.donarmstrong.com Git - lilypond.git/blob - lily/super-elem.cc
release: 0.1.46
[lilypond.git] / lily / super-elem.cc
1 /*
2   super-elem.cc -- implement Super_elem
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "super-elem.hh"
10 #include "scoreline.hh"
11 #include "p-score.hh"
12 #include "string.hh"
13 #include "outputter.hh"
14
15 void
16 Super_elem::handle_broken_dependencies()
17 {
18   lines_arr_ = line_of_score_l_->get_lines();
19   for (int i =0; i < lines_arr_.size(); i++) 
20     add_dependency (lines_arr_[i]);
21 }
22   
23
24 void
25 Super_elem::do_substitute_dependency (Score_elem*o,Score_elem* n)
26 {
27   if (line_of_score_l_ == o->spanner())
28     line_of_score_l_ = n? (Line_of_score*) n->spanner() : 0;
29 }
30
31 Super_elem::Super_elem()
32 {
33   line_of_score_l_ = new Line_of_score ;
34 }
35
36 void
37 Super_elem::do_add_processing()
38 {
39   pscore_l_->typeset_unbroken_spanner (line_of_score_l_);
40   add_dependency (line_of_score_l_);
41 }
42
43 IMPLEMENT_IS_TYPE_B1(Super_elem,Score_elem);
44
45
46 /**
47     for administration of what was done already
48     */
49 enum Score_elem_status {
50   ORPHAN=0,                     // not yet added to pstaff
51   VIRGIN,                       // added to pstaff
52   PREBROKEN,
53   PRECALCING,
54   PRECALCED,            // calcs before spacing done
55   BROKEN,
56   POSTCALCING,          // busy calculating. This is used to trap cyclic deps.
57   POSTCALCED,           // after spacing calcs done
58   BREWING,
59   BREWED,
60   UNLINKING,
61   UNLINKED,
62 };
63
64 void
65 Super_elem::pre_processing ()
66 {
67   calcalute_dependencies (PRECALCING, PRECALCED, &Score_elem::do_pre_processing);
68 }
69
70 /* for break processing, use only one status, because copies have to
71   have correct status. (Previously,
72   Score_elem::handle_[pre]broken_dependencies assigned to status_i_
73   */
74 void
75 Super_elem::breakable_col_processing ()
76 {
77   calcalute_dependencies (PREBROKEN, PREBROKEN, &Score_elem::do_breakable_col_processing);
78 }
79
80 void
81 Super_elem::break_processing ()
82 {
83   calcalute_dependencies (BROKEN, BROKEN, &Score_elem::do_break_processing);
84 }
85 void
86 Super_elem::post_processing ()
87 {
88   calcalute_dependencies (POSTCALCING, POSTCALCED, &Score_elem::do_post_processing);
89 }
90
91 void
92 Super_elem::output_all () 
93 {
94   for (int i=0; i < lines_arr_.size(); i++)
95     {
96       pscore_l_->outputter_l_->start_line ();
97       lines_arr_[i]->calcalute_dependencies (BREWING, BREWED, &Score_elem::do_brew_molecule);
98       pscore_l_->outputter_l_->stop_line ();
99     }
100 }
101
102
103
104 void
105 Super_elem::unlink_all ()
106 {
107   calcalute_dependencies (UNLINKING, UNLINKED, &Score_elem::junk_links);
108 }
109