]> git.donarmstrong.com Git - lilypond.git/blob - lily/script-column.cc
release: 0.0.65
[lilypond.git] / lily / script-column.cc
1 /*
2   script-column.cc -- implement Script_column
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #include "script-column.hh"
10 #include "debug.hh"
11 #include "script.hh"
12 #include "note-head.hh"
13 #include "stem.hh"
14
15 IMPLEMENT_STATIC_NAME(Script_column);
16
17
18 void
19 Script_column::add(Script*s_l)
20 {
21     script_l_arr_.push(s_l);
22     add_element(s_l);
23 }
24
25
26 void
27 Script_column::do_print()const
28 {
29     mtor << "scripts: " << script_l_arr_.size() << '\n'; 
30 }
31
32
33 void
34 Script_column::do_pre_processing()
35 {
36     if (!script_l_arr_.size()) 
37         return;
38     /* up+outside, up+inside, down+outside, down+inside */
39     Array<Script*> placed_l_arr_a[4];
40     for (int i=0; i < script_l_arr_.size(); i++) {
41         Script*s_l = script_l_arr_[i];
42         int j = (s_l->dir_i_ >0) ? 0 : 2;
43         if (!s_l->inside_staff_b_) 
44             j ++;
45         
46         placed_l_arr_a[j].push(s_l);
47     }
48     
49     for (int j =0; j <4; j++) {
50         placed_l_arr_a[j].sort( Script::compare);
51     }
52
53
54     for (int j =0; j < 4; j++) {
55         if (placed_l_arr_a[j].size())
56             for (int i=0; i  < support_l_arr_.size(); i++)
57                 placed_l_arr_a[j][0]->add_support( support_l_arr_[i]);
58     }
59     Item * support_l=0;
60     int j = 0;
61     for (; j < 2; j++ ) {
62         for (int i=1; i < placed_l_arr_a[j].size(); i++) {
63             if (support_l)
64                 placed_l_arr_a[j][i]->add_support(support_l);
65             support_l = placed_l_arr_a[j][i];
66         }
67     }
68     support_l = 0;
69     for (; j < 4; j++ ) {
70         for (int i=1; i < placed_l_arr_a[j].size(); i++) {
71             if (support_l)
72                 placed_l_arr_a[j][i]->add_support(support_l);
73             support_l = placed_l_arr_a[j][i];
74         }
75     }
76 }
77
78
79 void
80 Script_column::add_support(Item*i_l)
81 {
82     support_l_arr_.push(i_l);
83     add_element(i_l);
84 }
85
86 void
87 Script_column::do_substitute_dependency(Score_elem*o,Score_elem*n)
88 {
89     Element_group::do_substitute_dependency(o,n);
90     if (o->item()) {
91         script_l_arr_.substitute((Script*)o->item(),(Script*) (n?n->item():0));
92         support_l_arr_.substitute(o->item(), (n?n->item():0));
93     }
94 }