#include "flower-proto.hh"
+class Acknowledge_information;
class All_font_metrics;
class Audio_column;
class Audio_control_function_value_change;
class Translator;
class Translator_group;
-typedef void (Engraver::*Engraver_void_function_engraver_grob_info) (Grob_info);
typedef void (Translator::*Translator_void_method_ptr) ();
#endif /* LILY_PROTO_HH */
#include "lily-proto.hh"
#include "std-vector.hh"
#include "smobs.hh"
+#include "translator.hh"
struct Engraver_dispatch_entry
{
Engraver *engraver_;
- Engraver_void_function_engraver_grob_info function_;
+ Translator::Grob_info_callback function_;
};
class Engraver_dispatch_list : public Simple_smob<Engraver_dispatch_list>
#include "std-vector.hh"
#include "protected-scm.hh"
-struct Acknowledge_information
-{
- SCM symbol_;
- Engraver_void_function_engraver_grob_info function_;
-
- Acknowledge_information ()
- {
- symbol_ = SCM_EOL;
- function_ = 0;
- }
-};
-
/*
Each translator class has a static list of listener records. Each
record makes one explains how to register one of the class's stream event
} translator_listener_record;
#define TRANSLATOR_DECLARATIONS_NO_LISTENER(NAME) \
-private: \
public: \
NAME (); \
VIRTUAL_COPY_CONSTRUCTOR (Translator, NAME); \
virtual void fetch_precomputable_methods (Translator_void_method_ptr methods[]); \
virtual SCM static_translator_description () const; \
virtual SCM translator_description () const; \
- static Engraver_void_function_engraver_grob_info static_get_acknowledger (SCM sym); \
- static Engraver_void_function_engraver_grob_info static_get_end_acknowledger(SCM); \
- virtual Engraver_void_function_engraver_grob_info get_acknowledger (SCM sym) \
+ static Grob_info_callback static_get_acknowledger (SCM sym); \
+ static Grob_info_callback static_get_end_acknowledger(SCM); \
+ virtual Grob_info_callback get_acknowledger (SCM sym) \
{ \
return static_get_acknowledger (sym); \
} \
- virtual Engraver_void_function_engraver_grob_info get_end_acknowledger (SCM sym) \
+ virtual Grob_info_callback get_end_acknowledger (SCM sym) \
{ \
return static_get_end_acknowledger (sym); \
} \
class Translator : public Smob<Translator>
{
public:
+ // We don't make Grob_info_callback specific to Engraver since we
+ // otherwise get into a circular mess with regard to the definitions
+ // as the timing of Engraver is exercised from within Translator
+ typedef void (Translator::*Grob_info_callback) (Grob_info);
int print_smob (SCM, scm_print_state *);
SCM mark_smob ();
static const char type_p_name_[];
friend class Translator_group;
};
+struct Acknowledge_information
+{
+ SCM symbol_;
+ Translator::Grob_info_callback function_;
+
+ Acknowledge_information ()
+ {
+ symbol_ = SCM_EOL;
+ function_ = 0;
+ }
+};
+
+
void add_translator (Translator *trans);
Translator *get_translator (SCM s);
-/*
+/* -*- c++ -*-
This file is part of LilyPond, the GNU music typesetter.
Copyright (C) 2005--2015 Han-Wen Nienhuys <hanwen@xs4all.nl>
#define DEFINE_ACKNOWLEDGERS(classname) \
Drul_array< vector<Acknowledge_information> > classname::acknowledge_static_array_drul_; \
- Engraver_void_function_engraver_grob_info \
+ Translator::Grob_info_callback \
classname::static_get_acknowledger (SCM sym) \
{ \
return generic_get_acknowledger (sym, &acknowledge_static_array_drul_[START]); \
} \
- Engraver_void_function_engraver_grob_info \
- classname::static_get_end_acknowledger (SCM sym) \
+ Translator::Grob_info_callback \
+ classname::static_get_end_acknowledger (SCM sym) \
{ \
return generic_get_acknowledger (sym, &acknowledge_static_array_drul_[STOP]); \
} \
: (Translator_void_method_ptr) & T::process_acknowledged; \
}
-void add_acknowledger (Engraver_void_function_engraver_grob_info ptr,
+void add_acknowledger (Translator::Grob_info_callback ptr,
char const *func_name,
vector<Acknowledge_information> *ack_array);
-Engraver_void_function_engraver_grob_info
+Translator::Grob_info_callback
generic_get_acknowledger (SCM sym,
vector<Acknowledge_information> const *ack_array);
#define ADD_ACKNOWLEDGER(CLASS, NAME) \
void CLASS ## NAME ## _ack_adder () \
{ \
- add_acknowledger ((Engraver_void_function_engraver_grob_info) & CLASS::acknowledge_ ## NAME, #NAME, &CLASS::acknowledge_static_array_drul_[START]); \
+ add_acknowledger (static_cast<Translator::Grob_info_callback> (&CLASS::acknowledge_ ## NAME), #NAME, &CLASS::acknowledge_static_array_drul_[START]); \
} \
ADD_SCM_INIT_FUNC (CLASS ## NAME ## _ack_adder_initclass, CLASS ## NAME ## _ack_adder);
#define ADD_END_ACKNOWLEDGER(CLASS, NAME) \
void CLASS ## NAME ## _end_ack_adder () \
{ \
- add_acknowledger ((Engraver_void_function_engraver_grob_info) & CLASS::acknowledge_end_ ## NAME, #NAME, &CLASS::acknowledge_static_array_drul_[STOP]); \
+ add_acknowledger (static_cast<Translator::Grob_info_callback> (&CLASS::acknowledge_end_ ## NAME), #NAME, &CLASS::acknowledge_static_array_drul_[STOP]); \
} \
ADD_SCM_INIT_FUNC (CLASS ## NAME ## _end_ack_adder_initclass, CLASS ## NAME ## _end_ack_adder);
entry.engraver_ = eng;
for (SCM i = iface_list; scm_is_pair (i); i = scm_cdr (i))
{
- Engraver_void_function_engraver_grob_info ptr
+ Translator::Grob_info_callback ptr
= (start_end == START)
? eng->get_acknowledger (scm_car (i))
: eng->get_end_acknowledger (scm_car (i));
}
void
-add_acknowledger (Engraver_void_function_engraver_grob_info ptr,
+add_acknowledger (Translator::Grob_info_callback ptr,
char const *func_name,
vector<Acknowledge_information> *ack_array)
{
ack_array->push_back (inf);
}
-Engraver_void_function_engraver_grob_info
+Translator::Grob_info_callback
generic_get_acknowledger (SCM sym, vector<Acknowledge_information> const *ack_array)
{
for (vsize i = 0; i < ack_array->size (); i++)