]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/request.hh
release: 0.0.43
[lilypond.git] / lily / include / request.hh
1 /*
2   request.hh -- declare Request baseclasses.
3
4   source file of the LilyPond music typesetter
5
6   (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
7 */
8
9 #ifndef REQUEST_HH
10 #define REQUEST_HH
11 // LilyPond's second egg of columbus!
12
13 #include "glob.hh"
14 #include "string.hh"
15 #include "moment.hh"
16 #include "class-name.hh"
17
18 /**
19  a voice element wants something printed.
20  Hungarian postfix: req
21  @see lilygut manpage
22  */
23 class Request {
24 public:
25     Voice_element*elt_l_;
26     char const* defined_ch_c_l_;
27     
28     /* *************** */
29     Voice  * voice_l();
30     Request();
31     Request(Request const&);
32     virtual ~Request(){}
33
34     NAME_MEMBERS(Request);
35     virtual Request* clone() const { return new Request(*this); }
36     void print()const ;
37     
38     virtual void transpose(Melodic_req const &){}
39     virtual Moment duration() const { return 0; }
40
41     /*  accessors for children
42         maybe checkout RTTI
43      */
44     virtual Barcheck_req *barcheck() { return 0; }
45     virtual Note_req *note() { return 0;}
46     virtual Script_req *script() { return 0;}
47     virtual Stem_req *stem() { return 0;}
48     virtual Text_req*text() { return 0; }
49     virtual Rest_req *rest() { return 0; }
50     virtual Span_req *span() { return 0; }
51     virtual Beam_req *beam() { return 0 ; }
52     virtual Plet_req* plet() { return 0; }
53     virtual Slur_req *slur() { return 0 ; }
54     virtual Rhythmic_req*rhythmic() { return 0; }
55     virtual Lyric_req* lreq_l() { return 0; }
56     virtual Melodic_req *melodic() { return 0; }
57     virtual Terminate_voice_req *terminate() {return 0;}
58     virtual Group_change_req * groupchange() { return 0;}
59     virtual Group_feature_req * groupfeature() { return 0; }
60     virtual Spacing_req * spacing() { return 0; }
61     virtual Blank_req * blank() { return 0; }
62     virtual Musical_req *musical() { return 0; }
63     virtual Command_req * command() { return 0; }
64 protected:
65     virtual void do_print()const ;
66 };
67
68 #define REQUESTMETHODS(T,accessor)      \
69 virtual T * accessor() { return this;}\
70 NAME_MEMBERS(T);\
71 virtual Request *clone() const { return  new T(*this); } \
72 virtual void do_print() const
73
74 #endif