}
IMPLEMENT_STATIC_NAME(Bar_engraver);
-IMPLEMENT_IS_TYPE_B1(Bar_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Bar_engraver,Engraver);
ADD_THIS_ENGRAVER(Bar_engraver);
TODO
- Less hairy code. Better slope calculations.
- knee: ([\stem 1; c8 \stem -1; c8]
+ Less hairy code. knee: ([\stem 1; c8 \stem -1; c8]
*/
}
IMPLEMENT_STATIC_NAME(Clef_engraver);
-IMPLEMENT_IS_TYPE_B1(Clef_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Clef_engraver,Engraver);
ADD_THIS_ENGRAVER(Clef_engraver);
}
IMPLEMENT_STATIC_NAME(Collision_engraver);
-IMPLEMENT_IS_TYPE_B1(Collision_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Collision_engraver,Engraver);
ADD_THIS_ENGRAVER(Collision_engraver);
}
IMPLEMENT_STATIC_NAME(Dynamic_engraver);
-IMPLEMENT_IS_TYPE_B1(Dynamic_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Dynamic_engraver,Engraver);
ADD_THIS_ENGRAVER(Dynamic_engraver);
Dynamic_engraver::~Dynamic_engraver()
/*
- engraver.cc -- implement Request_engraver
+ engraver.cc -- implement Engraver
Sourcefile of GNU LilyPond musictypesetter
#include "debug.hh"
void
-Request_engraver::post_move_processing()
+Engraver::post_move_processing()
{
if (status < CREATION_INITED) {
}
bool
-Request_engraver::try_request(Request * r)
+Engraver::try_request(Request * r)
{
if (status < MOVE_INITED)
post_move_processing();
}
void
-Request_engraver::process_requests()
+Engraver::process_requests()
{
if (status < PROCESSED_REQS)
post_move_processing();
}
void
-Request_engraver::pre_move_processing()
+Engraver::pre_move_processing()
{
do_pre_move_processing();
status = CREATION_INITED;
}
void
-Request_engraver::fill_staff_info(Staff_info&)
+Engraver::fill_staff_info(Staff_info&)
{
}
Scalar
-Request_engraver::get_feature(String t)
+Engraver::get_feature(String t)
{
return daddy_grav_l_->get_feature(t);
}
bool
-Request_engraver::do_try_request(Request*)
+Engraver::do_try_request(Request*)
{
return false;
}
-Request_engraver::Request_engraver()
+Engraver::Engraver()
{
status = VIRGIN;
daddy_grav_l_ = 0;
}
void
-Request_engraver::announce_element(Score_elem_info i)
+Engraver::announce_element(Score_elem_info i)
{
i.origin_grav_l_arr_.push(this);
daddy_grav_l_->announce_element(i);
}
void
-Request_engraver::typeset_element(Score_elem*p)
+Engraver::typeset_element(Score_elem*p)
{
daddy_grav_l_->typeset_element(p);
}
Paper_def*
-Request_engraver::paper()const
+Engraver::paper()const
{
return daddy_grav_l_->paper();
}
void
-Request_engraver::typeset_breakable_item(Item * nobreak_p)
+Engraver::typeset_breakable_item(Item * nobreak_p)
{
daddy_grav_l_->typeset_breakable_item(nobreak_p);
}
bool
-Request_engraver::contains_b(Request_engraver *grav_l)const
+Engraver::contains_b(Engraver *grav_l)const
{
return this == grav_l;
}
Staff_info
-Request_engraver::get_staff_info() const
+Engraver::get_staff_info() const
{
return daddy_grav_l_->get_staff_info();
}
void
-Request_engraver::print() const
+Engraver::print() const
{
#ifndef NPRINT
mtor << "\n" << name() << " {";
#endif
}
-IMPLEMENT_STATIC_NAME(Request_engraver);
-IMPLEMENT_IS_TYPE_B(Request_engraver);
+IMPLEMENT_STATIC_NAME(Engraver);
+IMPLEMENT_IS_TYPE_B(Engraver);
void
-Request_engraver::do_print()const
+Engraver::do_print()const
{
}
#include "debug.hh"
#include "engraver.hh"
-struct Request_engraver_table_entry {
+struct Engraver_table_entry {
String name_str_;
Grav_ctor ctor_l_;
- Request_engraver_table_entry(String s, Grav_ctor f) {
+ Engraver_table_entry(String s, Grav_ctor f) {
name_str_ =s;
ctor_l_ = f;
}
- Request_engraver_table_entry()
+ Engraver_table_entry()
{
ctor_l_ =0;
}
};
-static Array<Request_engraver_table_entry> *grav_table=0;
+static Array<Engraver_table_entry> *grav_table=0;
void
-add_request_engraver(String s, Grav_ctor f)
+add_Engraver(String s, Grav_ctor f)
{
if (!grav_table)
- grav_table = new Array<Request_engraver_table_entry>;
+ grav_table = new Array<Engraver_table_entry>;
- grav_table->push(Request_engraver_table_entry(s, f));
+ grav_table->push(Engraver_table_entry(s, f));
}
-Request_engraver*
+Engraver*
get_engraver_p(String s)
{
for (int i=0; i < grav_table->size(); i++) {
}
IMPLEMENT_STATIC_NAME(Note_head_engraver);
-IMPLEMENT_IS_TYPE_B1(Note_head_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Note_head_engraver,Engraver);
ADD_THIS_ENGRAVER(Note_head_engraver);
/**
generate bars. Either user ("|:"), or default (new measure)
*/
-class Bar_engraver : public Request_engraver {
+class Bar_engraver : public Engraver {
Bar_req * bar_req_l_;
Bar * bar_p_;
public:
#include "engraver.hh"
/// where is c-0 in the staff?
-class Clef_engraver : public Request_engraver {
+class Clef_engraver : public Engraver {
Clef_item *clef_p_;
Clef_change_req * clef_req_l_;
void create_clef();
#include "engraver.hh"
-class Collision_engraver : public Request_engraver {
+class Collision_engraver : public Engraver {
Collision* col_p_;
protected:
#include "engraver.hh"
-class Dynamic_engraver : public Request_engraver {
+class Dynamic_engraver : public Engraver {
int dir_i_;
Text_item * dynamic_p_;
Crescendo * to_end_cresc_p_;
Group a number of engravers. Usually delegates everything to its contents.
Postfix: group
*/
-class Engraver_group_engraver : public Request_engraver, public virtual Translator {
+class Engraver_group_engraver : public Engraver, public virtual Translator {
protected:
- Pointer_list<Request_engraver*> grav_list_;
+ Pointer_list<Engraver*> grav_list_;
Link_array<Engraver_group_engraver> group_l_arr_;
- Link_array<Request_engraver> nongroup_l_arr_;
+ Link_array<Engraver> nongroup_l_arr_;
Array<Score_elem_info> announce_info_arr_;
Engraver_group_engraver();
~Engraver_group_engraver();
+ bool is_bottom_engraver_b() const;
/**
Pre:
#grav_l# is in #grav_list_#
*/
- virtual void terminate_engraver(Request_engraver * grav_l);
+ virtual void terminate_engraver(Engraver * grav_l);
NAME_MEMBERS();
/**
Remove #grav_l# from the list, and return it.
*/
- virtual Request_engraver * remove_engraver_p(Request_engraver*grav_l);
+ virtual Engraver * remove_engraver_p(Engraver*grav_l);
virtual void set_feature(Feature i);
- virtual void sync_features() ;
+ virtual void sync_features();
+
virtual void do_pre_move_processing();
virtual void do_post_move_processing();
-
virtual void do_removal_processing();
virtual bool do_try_request(Request*);
+ virtual bool try_request(Request*);
virtual void do_process_requests();
virtual Staff_info get_staff_info()const;
virtual Engraver_group_engraver * find_engraver_l(String name,String id);
virtual void do_announces();
virtual void announce_element(Score_elem_info);
-
-
- virtual void add(Request_engraver* grav_p);
-
- virtual bool contains_b(Request_engraver*)const;
+ virtual void add(Engraver* grav_p);
+ virtual bool contains_b(Engraver*)const;
virtual Translator* find_get_translator_l(String name, String id);
virtual Translator * get_default_interpreter();
/*
- engraver.hh -- declare Request_engraver
+ engraver.hh -- declare Engraver
source file of the GNU LilyPond music typesetter
*/
-class Request_engraver {
+class Engraver {
friend class Engraver_group_engraver;
/**
- You cannot copy a Request_engraver
+ You cannot copy a Engraver
*/
- Request_engraver(const Request_engraver&){}
+ Engraver(const Engraver&){}
enum {
VIRGIN,
virtual void sync_features() {}
- virtual bool contains_b(Request_engraver*grav_l)const;
+ virtual bool contains_b(Engraver*grav_l)const;
/**
Get information on the staff. Default: ask daddy.
*/
*/
bool try_request(Request*);
+ bool is_bottom_engraver() const;
void post_move_processing();
Engraver_group_engraver * daddy_grav_l_;
- Request_engraver();
- virtual ~Request_engraver(){}
+ Engraver();
+ virtual ~Engraver(){}
NAME_MEMBERS();
void print() const;
};
*/
#define ADD_THIS_ENGRAVER(c) \
struct c ## init { \
- static Request_engraver * globalctor (){ \
+ static Engraver * globalctor (){ \
return new c; \
} \
c ## init () { \
- add_request_engraver(c::static_name(), globalctor); \
+ add_Engraver(c::static_name(), globalctor); \
\
} \
} _ ## c ## init;
-typedef Request_engraver*(*Grav_ctor)(void);
-void add_request_engraver(String s, Grav_ctor f);
+typedef Engraver*(*Grav_ctor)(void);
+void add_Engraver(String s, Grav_ctor f);
#endif // ENGRAVER_HH
#define HEADGRAV_HH
#include "engraver.hh"
-struct Note_head_engraver : Request_engraver {
+struct Note_head_engraver : Engraver {
Note_head* note_p_;
Rhythmic_req * note_req_l_;
#include "string.hh"
#include "varray.hh"
+struct Input_engraver_list : public Pointer_list<Input_engraver*>
+{
+ Input_engraver_list(Input_engraver_list const &);
+ Input_engraver_list(){}
+};
+
struct Input_engraver : Input {
- Pointer_list<Input_engraver*> contains_igrav_p_list_;
+ Input_engraver_list contains_igrav_p_list_;
Array<String> consists_str_arr_;
Array<String> alias_str_arr_;
- String name_str_;
+ String type_str_;
void add(Input_engraver *);
bool is_name_b(String);
};
-void add_global_input_engraver(Input_engraver* igrav_p);
-Input_engraver*lookup_grav(String);
-Request_engraver*get_engraver_p(String s);
+Engraver*get_engraver_p(String s);
#endif // INPUT_ENGRAVER_HH
#include "engraver.hh"
#include "key.hh"
-struct Key_engraver : Request_engraver {
+struct Key_engraver : Engraver {
Key key_;
Key_change_req * keyreq_l_;
Key_item * kit_p_;
#include "key.hh"
#include "parray.hh"
-struct Local_key_engraver : Request_engraver {
+struct Local_key_engraver : Engraver {
Key local_key_;
Key const *key_C_;
Array<Note_req* > mel_l_arr_;
#include "lily-proto.hh"
-class Lyric_engraver : public Request_engraver {
+class Lyric_engraver : public Engraver {
Array<Lyric_req*> lreq_arr_;
virtual bool do_try_request(Request*);
virtual void do_process_requests();
/**
generate meters.
*/
-class Meter_engraver : public Request_engraver {
+class Meter_engraver : public Engraver {
public:
Time_description time_;
Rhythmic_grouping default_grouping_;
Music_iterator* get_iterator_p(Music*)const;
void set_translator(Translator*);
Music_iterator();
- virtual void next(Moment until);
+
+ virtual void process_and_next(Moment until);
virtual Moment next_moment()const;
virtual bool ok()const;
virtual ~Music_iterator();
virtual Moment next_moment() const;
virtual void do_print()const;
- virtual void next(Moment);
+ virtual void process_and_next(Moment);
};
class Change_iterator : public Music_iterator {
Change_reg * change_l_;
public:
NAME_MEMBERS();
- virtual void next(Moment);
+ virtual void process_and_next(Moment);
Change_iterator(Change_reg*);
};
protected:
virtual void do_print()const;
virtual void construct_children();
- virtual void next(Moment);
+ virtual void process_and_next(Moment);
virtual Moment next_moment()const;
virtual bool ok()const;
};
virtual void do_print()const;
virtual void construct_children();
~Voice_iterator();
- virtual void next(Moment);
+ virtual void process_and_next(Moment);
virtual Moment next_moment()const;
virtual bool ok()const;
};
#include "engraver.hh"
-class Note_column_engraver :public Request_engraver {
+class Note_column_engraver :public Engraver {
Rest_column * rest_col_l();
Note_column * note_col_l();
#include "varray.hh"
#include "engraver.hh"
-class Rest_collision_engraver : public Request_engraver {
+class Rest_collision_engraver : public Engraver {
Rest_collision* rest_collision_p_;
Array< Collision *> collision_l_arr_;
protected:
#include "engraver.hh"
-class Score_align_engraver: public Request_engraver
+class Score_align_engraver: public Engraver
{
Horizontal_group_item * align_p_;
public:
Score_elem * elem_l_;
Request*req_l_;
Voice const * voice_l_;
- Array<Request_engraver*> origin_grav_l_arr_;
+ Array<Engraver*> origin_grav_l_arr_;
/* *** */
Score_elem_info(Score_elem*, Request*);
#ifndef SCORE_HALIGN_GRAV_HH
#define SCORE_HALIGN_GRAV_HH
#include "engraver.hh"
-class Score_horizontal_align_engraver : public Request_engraver {
+class Score_horizontal_align_engraver : public Engraver {
Break_align_item * halign_p_;
public:
#include "engraver.hh"
-class Script_engraver : public Request_engraver {
+class Script_engraver : public Engraver {
Array<Script *> script_p_arr_;
Array<Script_req *> script_req_l_arr_;
#include "engraver.hh"
-class Slur_engraver :public Request_engraver {
+class Slur_engraver :public Engraver {
Array<Slur_req*> requests_arr_;
Array<Slur_req*> new_slur_req_l_arr_;
Array<Slur *> slur_l_stack_;
#include "lily-proto.hh"
-/// struct to pass staff info along a Request_engraver hierarchy.
+/// struct to pass staff info along a Engraver hierarchy.
struct Staff_info {
int *c0_position_i_l_;
Staff_symbol*staff_sym_l_;
/**
Manage the staff symbol.
*/
-class Staff_sym_engraver : public Request_engraver {
+class Staff_sym_engraver : public Engraver {
Staff_symbol *span_p_;
public:
Staff_sym_engraver();
override default_grouping if setting a n-plet
*/
-class Stem_beam_engraver : public Request_engraver {
+class Stem_beam_engraver : public Engraver {
Stem * stem_p_;
Beam * beam_p_;
Beam_req * beam_req_l_;
This engraver swallows everything given to it silently. The purpose of
this is to prevent spurious "request junked" warnings.
*/
-class Swallow_engraver : public Request_engraver {
+class Swallow_engraver : public Engraver {
protected:
bool acceptable_request_b(Request*) const;
bool do_try_request(Request*) ;
#define TEXTGRAV_HH
#include "engraver.hh"
-class Text_engraver : public Request_engraver{
+class Text_engraver : public Engraver{
Text_item * text_p_;
Text_req * text_req_l_;
int dir_i_;
#include "engraver.hh"
-class Tie_engraver : public Request_engraver {
+class Tie_engraver : public Engraver {
Tie * end_tie_p_;
Tie * tie_p_;
Moment end_mom_;
}
IMPLEMENT_STATIC_NAME(Key_engraver);
-IMPLEMENT_IS_TYPE_B1(Key_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Key_engraver,Engraver);
ADD_THIS_ENGRAVER(Key_engraver);
}
IMPLEMENT_STATIC_NAME(Local_key_engraver);
-IMPLEMENT_IS_TYPE_B1(Local_key_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Local_key_engraver,Engraver);
ADD_THIS_ENGRAVER(Local_key_engraver);
IMPLEMENT_STATIC_NAME(Lyric_engraver);
-IMPLEMENT_IS_TYPE_B1(Lyric_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Lyric_engraver,Engraver);
ADD_THIS_ENGRAVER(Lyric_engraver);
IMPLEMENT_STATIC_NAME(Meter_engraver);
ADD_THIS_ENGRAVER(Meter_engraver);
-IMPLEMENT_IS_TYPE_B1(Meter_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Meter_engraver,Engraver);
#include "music-iterator.hh"
#include "translator.hh"
#include "request.hh"
-#include "interpreter.hh"
#include "debug.hh"
IMPLEMENT_STATIC_NAME(Music_iterator);
Music_iterator::get_req_translator_l()
{
assert(report_to_l_);
- if (report_to_l_->interpreter_l() )
+ if (report_to_l_->is_bottom_engraver_b() )
return report_to_l_;
set_translator( report_to_l_->get_default_interpreter() );
}
void
-Music_iterator::next(Moment)
+Music_iterator::process_and_next(Moment)
{
first_b_ = false;
}
}
void
-Chord_iterator::next(Moment until)
+Chord_iterator::process_and_next(Moment until)
{
for (iter(children_p_list_.top(), i); i.ok(); ) {
if (i->next_moment() == until) {
- i->next(until);
+ i->process_and_next(until);
}
if (!i->ok())
delete i.remove_p();
else
i++;
}
- Music_iterator::next(until);
+ Music_iterator::process_and_next(until);
// assert(!ok() || next_moment() > until);
}
IMPLEMENT_IS_TYPE_B1(Voice_iterator,Music_iterator);
void
-Voice_iterator::next(Moment until)
+Voice_iterator::process_and_next(Moment until)
{
while (ok()) {
Moment local_until = until - here_mom_;
Moment here = iter_p_->next_moment();
if (here != local_until)
return;
- iter_p_->next(local_until);
+ iter_p_->process_and_next(local_until);
}
if (!iter_p_)
iter_p_ = Music_iterator::get_iterator_p( ptr() );
else if (!iter_p_->ok() )
next_element();
}
- Music_iterator::next(until);
+ Music_iterator::process_and_next(until);
assert(!ok() || next_moment() > until);
}
}
/* ***************** */
+
void
Request_iterator::do_print()const
{
mtor << req_l_->name() ;
}
+
Request_iterator::Request_iterator(Request const*c)
{
req_l_ = (Request*)c;
}
void
-Request_iterator::next(Moment m)
+Request_iterator::process_and_next(Moment m)
{
- if ( first_b_) {
- bool gotcha = daddy_iter_l_->report_to_l_->
- interpreter_l()->interpret_request_b(req_l_);
+ if ( first_b_ ) {
+ bool gotcha = daddy_iter_l_->report_to_l_->try_request(req_l_);
if (!gotcha)
req_l_->warning("Junking request: " + String(req_l_->name()));
first_b_ = false;
{
return (req_l_->duration() && !last_b_) || first_b_; // ugh
}
+
IMPLEMENT_STATIC_NAME(Request_iterator);
IMPLEMENT_IS_TYPE_B1(Request_iterator, Music_iterator);
TODO: pop/pushgroup
*/
void
-Change_iterator::next(Moment mom)
+Change_iterator::process_and_next(Moment mom)
{
#if 0
Engraver_group_engraver *group_l =
report_to_l_->daddy_grav_l_->remove_engraver_p(report_to_l_);
group_l->add(report_to_l_);
#endif
- Music_iterator::next(mom);
+ Music_iterator::process_and_next(mom);
}
Voice_element_iterator::construct_children()
{
get_req_translator_l();
-/*
- if ( daddy_iter_l_
- && daddy_iter_l_->is_type_b(Voice_iterator::static_name() )) {
- set_translator(daddy_iter_l_-> get_req_translator_l());
- } else if (daddy_iter_l_
- && daddy_iter_l_-> is_type_b( Chord_iterator::static_name() )) {
-
- get_req_translator_l();
- }
- */
Chord_iterator::construct_children();
}
do_post_move_processing();
}
IMPLEMENT_STATIC_NAME(Note_column_engraver);
-IMPLEMENT_IS_TYPE_B1(Note_column_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Note_column_engraver,Engraver);
ADD_THIS_ENGRAVER(Note_column_engraver);
#include "note-column.hh"
IMPLEMENT_STATIC_NAME(Rest_collision_engraver);
-IMPLEMENT_IS_TYPE_B1(Rest_collision_engraver, Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Rest_collision_engraver, Engraver);
ADD_THIS_ENGRAVER(Rest_collision_engraver);
Rest_collision_engraver::Rest_collision_engraver()
}
IMPLEMENT_STATIC_NAME(Script_engraver);
-IMPLEMENT_IS_TYPE_B1(Script_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Script_engraver,Engraver);
ADD_THIS_ENGRAVER(Script_engraver);
}
}
IMPLEMENT_STATIC_NAME(Slur_engraver);
-IMPLEMENT_IS_TYPE_B1(Slur_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Slur_engraver,Engraver);
ADD_THIS_ENGRAVER(Slur_engraver);
IMPLEMENT_STATIC_NAME(Staff_sym_engraver);
-IMPLEMENT_IS_TYPE_B1(Staff_sym_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Staff_sym_engraver,Engraver);
ADD_THIS_ENGRAVER(Staff_sym_engraver);
}
IMPLEMENT_STATIC_NAME(Stem_beam_engraver);
-IMPLEMENT_IS_TYPE_B1(Stem_beam_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Stem_beam_engraver,Engraver);
ADD_THIS_ENGRAVER(Stem_beam_engraver);
#include "swallow-grav.hh"
IMPLEMENT_STATIC_NAME(Swallow_engraver);
-IMPLEMENT_IS_TYPE_B1(Swallow_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Swallow_engraver,Engraver);
ADD_THIS_ENGRAVER(Swallow_engraver);
#include "plist.tcc"
#include "engraver.hh"
-IPL_instantiate(Request_engraver);
+IPL_instantiate(Engraver);
text_req_l_ = 0;
}
IMPLEMENT_STATIC_NAME(Text_engraver);
-IMPLEMENT_IS_TYPE_B1(Text_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Text_engraver,Engraver);
ADD_THIS_ENGRAVER(Text_engraver);
}
IMPLEMENT_STATIC_NAME(Tie_engraver);
-IMPLEMENT_IS_TYPE_B1(Tie_engraver,Request_engraver);
+IMPLEMENT_IS_TYPE_B1(Tie_engraver,Engraver);
ADD_THIS_ENGRAVER(Tie_engraver);