]> git.donarmstrong.com Git - lilypond.git/blob - lily/hyphen-engraver.cc
6193fa81dc2e8b9de557587b48c1e14ad3e00a3c
[lilypond.git] / lily / hyphen-engraver.cc
1 /*
2   hyphen-engraver.cc -- implement Hyphen_engraver
3
4   (c) 1999 Glen Prideaux <glenprideaux@iname.com>
5 */
6
7 #include "proto.hh"
8 #include "musical-request.hh"
9 #include "hyphen-engraver.hh"
10 #include "hyphen-spanner.hh"
11 #include "paper-column.hh"
12 #include "text-item.hh"
13
14 ADD_THIS_TRANSLATOR (Hyphen_engraver);
15
16 Hyphen_engraver::Hyphen_engraver ()
17 {
18   current_lyric_l_ = 0;
19   last_lyric_l_ = 0;
20   hyphen_spanner_p_ = 0;
21   req_l_ = 0;
22 }
23
24 void
25 Hyphen_engraver::acknowledge_element (Score_element_info i)
26 {
27   if (Text_item* t = dynamic_cast<Text_item*> (i.elem_l_))
28     {
29       current_lyric_l_ = t;
30       if (hyphen_spanner_p_
31           && !hyphen_spanner_p_->get_bound (RIGHT)
32             )
33           {
34             hyphen_spanner_p_->set_textitem (RIGHT, t);
35           }
36     }
37 }
38
39
40 bool
41 Hyphen_engraver::do_try_music (Music* r)
42 {
43   if (Hyphen_req* p = dynamic_cast <Hyphen_req *> (r))
44     {
45       if (req_l_)
46         return false;
47
48       req_l_ = p;
49       return true;
50     }
51   return false;
52 }
53
54 void
55 Hyphen_engraver::do_removal_processing ()
56 {
57   if (hyphen_spanner_p_)
58     {
59       req_l_->warning (_ ("unterminated hyphen"));
60       hyphen_spanner_p_->set_bound(RIGHT, get_staff_info ().command_pcol_l ());
61     }
62 }
63
64 void
65 Hyphen_engraver::do_process_music ()
66 {
67   if (req_l_)
68     {
69       if (!last_lyric_l_)
70         {
71           req_l_->warning (_ ("Nothing to connect hyphen to on the left.  Ignoring hyphen request."));
72           return;
73         }
74       
75       hyphen_spanner_p_ = new Hyphen_spanner (get_property ("basicHyphenSpannerProperties"));
76       hyphen_spanner_p_->set_textitem  (LEFT, last_lyric_l_);
77       announce_element (Score_element_info (hyphen_spanner_p_, req_l_));
78     }
79 }
80
81
82 void
83 Hyphen_engraver::do_pre_move_processing ()
84 {
85   if (hyphen_spanner_p_)
86     {
87       typeset_element (hyphen_spanner_p_);
88       hyphen_spanner_p_ = 0;
89     }
90
91   if (current_lyric_l_)
92     {
93       last_lyric_l_ = current_lyric_l_;
94       current_lyric_l_ =0;
95     }
96 }
97
98 void
99 Hyphen_engraver::do_post_move_processing ()
100 {
101   req_l_ = 0;
102 }
103
104