symbol_list = ly_cdr (scm_reverse (symbol_list));
for (int i=0; i <elems.size ()-1; i++)
{
- elems[i]->set_grob_property (ly_car (symbol_list),
- scm_cons (gh_double2scm (0),
+ elems[i]->internal_set_grob_property (ly_car (symbol_list),
+ scm_cons (gh_double2scm (0),
gh_double2scm (dists[i+1])));
symbol_list = ly_cdr (symbol_list);
if (!gh_symbol_p (style))
style = ly_symbol2scm ("banter");
- SCM chord = me-> get_grob_property ("chord");
- SCM func = me->get_grob_property (ly_symbol2scm ("chord-name-function"));
+ SCM chord = me->get_grob_property ("chord");
+ SCM func = me->get_grob_property ("chord-name-function");
SCM text = gh_call2 (func, style, chord);
SCM properties = Font_interface::font_alist_chain (me);
clef_p_ = c;
}
- Staff_symbol_referencer::set_position (clef_p_,
- gh_scm2int (get_property ("clefPosition")));
+ SCM cpos = get_property ("clefPosition");
+
+ if (gh_number_p (cpos))
+ Staff_symbol_referencer::set_position (clef_p_, gh_scm2int (cpos));
SCM oct = get_property ("clefOctavation");
if (gh_number_p (oct) && gh_scm2int (oct))
#include "directional-element-interface.hh"
-SCM Directional_element_interface::direction_sym;
-
-static void
-init_functions ()
-{
- Directional_element_interface::direction_sym = scm_permanent_object (ly_symbol2scm ("direction"));
-}
-ADD_SCM_INIT_FUNC (Directional, init_functions);
bool
Directional_element_interface::has_interface (Grob*me)
{
- return isdir_b (me->get_grob_property (direction_sym));
+ return isdir_b (me->get_grob_property ("direction"));
}
Direction
Directional_element_interface::get (Grob*me)
{
// return dir_;
- SCM d= me->get_grob_property (direction_sym);
+ SCM d= me->get_grob_property ("direction");
if (!isdir_b (d))
return CENTER;
{
SCM sd = gh_int2scm (d);
- if (me->get_grob_property (direction_sym) != sd)
- me->set_grob_property (direction_sym, sd);
+ if (me->get_grob_property ("direction") != sd)
+ me->set_grob_property ("direction", sd);
}
cresc_p_->set_interface (ly_symbol2scm ("dynamic-interface"));
cresc_p_->set_grob_property ("type", s);
- daddy_trans_l_->set_property (start_type
- + "Spanner", SCM_UNDEFINED);
+ daddy_trans_l_->set_property ((start_type
+ + "Spanner").ch_C(), SCM_UNDEFINED);
s = get_property ((start_type + "Text").ch_C ());
/*
FIXME: use markup_p () to check type.
{
cresc_p_->set_grob_property ("edge-text",
gh_cons (s, ly_str02scm ("")));
- daddy_trans_l_->set_property (start_type + "Text",
+ daddy_trans_l_->set_property ((start_type + "Text").ch_C(),
SCM_UNDEFINED);
}
}
if (!announce_info_arr_.size ())
return ;
- SCM tab =get_property (ly_symbol2scm ("acknowledgeHashTable"));
+ SCM tab = get_property ("acknowledgeHashTable");
SCM name_sym = ly_symbol2scm ("name");
SCM meta_sym = ly_symbol2scm ("meta");
{
Grob_info info = announce_info_arr_[j];
- SCM meta = info.grob_l_->get_grob_property (meta_sym);
+ SCM meta = info.grob_l_->internal_get_grob_property (meta_sym);
SCM nm = scm_assoc (name_sym, meta);
if (gh_pair_p (nm))
nm = ly_cdr (nm);
Engraver_group_engraver::initialize ()
{
SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); // magic ->
- set_property (ly_symbol2scm ("acknowledgeHashTable"), tab);
+ set_property ("acknowledgeHashTable", tab);
Translator_group::initialize ();
}
if (first)
{
first = false;
- set_property (ly_symbol2scm ("measurePosition"), w.smobbed_copy ());
+ set_property ("measurePosition", w.smobbed_copy ());
}
prepare (w);
struct Directional_element_interface
{
public:
- static SCM direction_sym ;
+
static void set (Grob*,Direction d);
static Direction get (Grob*) ;
static bool has_interface (Grob*) ;
#include "lily-proto.hh"
#include "string.hh"
#include "lily-guile.hh"
-#include "smobs.hh"
+#include "grob.hh"
/**
Look at Score element ELT as thing which has a list property called
NAME_. Normally the list would contain Grobs, but
#ifndef LILY_GUILE_HH
#define LILY_GUILE_HH
+#define SCM_VOIDP_TEST
+
#include <libguile.h>
/*
#define CACHE_SYMBOLS
#ifdef CACHE_SYMBOLS
+SCM my_gh_symbol2scm (const char* x);
+
// #warning: CACHE_SYMBOLS
/*
*/
#define ly_symbol2scm(x) ({ static SCM cached; \
SCM value = cached; /* We store this one locally, since G++ -O2 fucks up else */ \
- if (__builtin_constant_p (x))\
- value = cached = scm_permanent_object (gh_symbol2scm((char*)x));\
- else\
- value = gh_symbol2scm ((char*)x); \
+ if ( __builtin_constant_p ((x)))\
+ { if (!cached)\
+ value = cached = scm_gc_protect_object (my_gh_symbol2scm((char*) (x)));\
+ } else\
+ value = gh_symbol2scm ((char*) (x)); \
value; })
#else
inline SCM ly_symbol2scm(char const* x) { return gh_symbol2scm((char*)x); }
#include "music-constructor.hh"
+#define get_mus_property(x) internal_get_mus_property(ly_symbol2scm(x))
+#define set_mus_property(x,y) internal_set_mus_property(ly_symbol2scm (x), y)
+
/** Music is anything that has duration and supports both time compression and
transposition.
public:
Input *origin () const;
void set_spot (Input);
-
- SCM get_mus_property (const char*) const;
- SCM get_mus_property (SCM) const;
- void set_mus_property (const char * , SCM val);
+
+ SCM internal_get_mus_property (SCM) const;
+ void internal_set_mus_property (SCM , SCM val);
+#if 0
void set_immutable_mus_property (const char * , SCM val);
- void set_immutable_mus_property (SCM key, SCM val);
- void set_mus_property (SCM , SCM val);
- void set_mus_pointer (const char*, SCM val);
+ void set_immutable_mus_property (SCM key, SCM val);
+
SCM remove_mus_property (const char* nm);
+#endif
+
virtual Pitch to_relative_octave (Pitch);
#ifndef PROTECTED_SCM_HH
#define PROTECTED_SCM_HH
-#include <libguile.h>
+
+#include "lily-guile.hh"
/*
Mix GUILE GC with C++ ctors and dtors.
// egcs
typedef void (Translator::*Method_pointer) (void);
+#define set_property(x,y) internal_set_property(ly_symbol2scm(x),y)
class Scheme_hash_table;
public:
SCM add_translator (SCM, Translator*);
void execute_single_pushpop_property (SCM prop, SCM sym, SCM val);
- SCM get_property (SCM name_sym) const;
- void set_property (String var_name, SCM value);
+ SCM internal_get_property (SCM name_sym) const;
+
void unset_property (SCM var_sym);
- void set_property (SCM var_sym, SCM value);
+ void internal_set_property (SCM var_sym, SCM value);
Translator_group *where_defined (SCM name_sym) const;
String id_str_;
#include "input.hh"
#include "smobs.hh"
+#define get_property(x) internal_get_property(ly_symbol2scm(x))
+
+
#define TRANSLATOR_DECLARATIONS(NAME) \
public: \
NAME();\
*/
Music_output_def *output_def_l () const;
- SCM get_property (const char *) const;
- SCM get_property (SCM symbol) const;
+ SCM internal_get_property (SCM symbol) const;
virtual Moment now_mom () const;
}
return l;
}
+
+SCM my_gh_symbol2scm (const char* x)
+{
+ return gh_symbol2scm (x);
+}
{
Engraver_group_engraver::finalize ();
Grob * it
- = unsmob_grob (get_property (ly_symbol2scm ("currentCommandColumn")));
+ = unsmob_grob (get_property ("currentCommandColumn"));
staffline_p_->set_bound (RIGHT,it);
Engraver_group_engraver::typeset_grob (staffline_p_);
{
create_line_spanner ();
Grob * it
- = unsmob_grob (get_property (ly_symbol2scm ("currentCommandColumn")));
+ = unsmob_grob (get_property ("currentCommandColumn"));
staffline_p_->set_bound (LEFT,it);
Engraver::announce_grob (staffline_p_,0);
/****************************/
SCM
-Music::get_mus_property (const char *nm) const
-{
- SCM sym = ly_symbol2scm (nm);
- return get_mus_property (sym);
-}
-
-SCM
-Music::get_mus_property (SCM sym) const
+Music::internal_get_mus_property (SCM sym) const
{
SCM s = scm_sloppy_assq (sym, mutable_property_alist_);
if (s != SCM_BOOL_F)
return (s == SCM_BOOL_F) ? SCM_EOL : ly_cdr (s);
}
+#if 0
/*
Remove the value associated with KEY, and return it. The result is
that a next call will yield SCM_EOL (and not the underlying
return val;
}
-void
-Music::set_mus_property (const char* k, SCM v)
+SCM
+Music::get_mus_property (const char *nm) const
{
- SCM s = ly_symbol2scm (k);
- set_mus_property (s, v);
+ SCM sym = ly_symbol2scm (nm);
+ return get_mus_property (sym);
}
void
-Music::set_immutable_mus_property (const char*k, SCM v)
+Music::set_mus_property (const char* k, SCM v)
{
SCM s = ly_symbol2scm (k);
- set_immutable_mus_property (s, v);
+ set_mus_property (s, v);
}
void
immutable_property_alist_ = gh_cons (gh_cons (s,v), mutable_property_alist_);
mutable_property_alist_ = scm_assq_remove_x (mutable_property_alist_, s);
}
+#endif
+
void
-Music::set_mus_property (SCM s, SCM v)
+Music::internal_set_mus_property (SCM s, SCM v)
{
mutable_property_alist_ = scm_assq_set_x (mutable_property_alist_, s, v);
}
if (sc)
{
- return sc->get_mus_property (sym);
+ return sc->internal_get_mus_property (sym);
}
else
{
if (sc)
{
- sc->set_mus_property (sym, val);
+ sc->internal_set_mus_property (sym, val);
}
else
{
UGH: use grob-property.
*/
- Molecule out = Font_interface::get_default_font (me)->find_by_name (String ("noteheads-") +
- ly_scm2string (scm_primitive_eval (scm_list_n (ly_symbol2scm ("find-notehead-symbol"),
- me->get_grob_property ("duration-log"),
- ly_quote_scm (style),
- SCM_UNDEFINED))));
+ SCM log = me->get_grob_property ("duration-log");
+ SCM exp = scm_list_n (ly_symbol2scm ("find-notehead-symbol"), log,
+ ly_quote_scm (style),
+ SCM_UNDEFINED);
+ String name = "noteheads-" + ly_scm2string (scm_primitive_eval (exp));
+ Molecule out = Font_interface::get_default_font (me)->find_by_name (name);
+
if (streepjes_i)
{
Direction dir = (Direction)sign (p);
{
SCM sym = o->get_mus_property ("grob-property");
SCM val = o->get_mus_property ("grob-value");
- inf.grob_l_->set_grob_property (sym, val);
+ inf.grob_l_->internal_set_grob_property (sym, val);
}
}
}
{
for (SCM k = a; gh_pair_p (k); k = ly_cdr (k))
{
- p->set_mus_property (ly_caar (k), ly_cdar (k));
+ p->internal_set_mus_property (ly_caar (k), ly_cdar (k));
}
}
Translator_group *first_translator = first_iter_p_->report_to_l ()->find_create_translator_l (w, "one" + suffix_);
- SCM s = first_translator->get_property (ly_symbol2scm ("changeMoment"));
+ SCM s = first_translator->get_property ("changeMoment");
if (!gh_pair_p (s))
return state;
if (gh_number_p (interval))
{
- SCM s = first_translator->get_property (ly_symbol2scm ("splitInterval"));
+ SCM s = first_translator->get_property ("splitInterval");
int i = gh_scm2int (interval);
if (gh_pair_p (s)
&& gh_number_p (ly_car (s))
{
prop_dict_ = new Scheme_hash_table;
- SCM plist = get_property (ly_symbol2scm ("Generic_property_list"));
+ SCM plist = get_property ("Generic_property_list");
for (; gh_pair_p (plist); plist = ly_cdr (plist))
{
SCM elt_props = ly_car (plist);
if (preset != SCM_BOOL_F)
continue;
- SCM val = get_property (prop_sym);
+ SCM val = internal_get_property (prop_sym);
if (val == SCM_EOL)
; // Not defined in context.
else if (gh_apply (type_p, scm_list_n (val, SCM_UNDEFINED))
== SCM_BOOL_T) // defined and right type: do it
{
- e->set_grob_property (elt_prop_sym, val);
+ e->internal_set_grob_property (elt_prop_sym, val);
SCM meta = e->get_grob_property ("meta");
SCM name = scm_assoc (ly_symbol2scm ("name"), meta);
if (val != SCM_EOL)
ok = type_check_assignment (val, sym, ly_symbol2scm ("translation-type?"));
if (ok)
- report_to_l ()->set_property (sym, val);
+ report_to_l ()->internal_set_property (sym, val);
}
Simple_music_iterator::process (m);
}
if (!command_column_l_)
// || *unsmob_moment (command_column_l_->get_grob_property ("when")) != w)
{
- set_columns (new Paper_column (get_property (ly_symbol2scm ("NonMusicalPaperColumn"))),
- new Paper_column (get_property (ly_symbol2scm ("PaperColumn"))));
+ set_columns (new Paper_column (get_property ("NonMusicalPaperColumn")),
+ new Paper_column (get_property ("PaperColumn")));
command_column_l_->set_grob_property ("breakable", SCM_BOOL_T);
pscore_p_ = new Paper_score;
pscore_p_->paper_l_ = dynamic_cast<Paper_def*> (output_def_l_);
- SCM props = get_property (ly_symbol2scm ("LineOfScore"));
+ SCM props = get_property ("LineOfScore");
pscore_p_->typeset_line (new Line_of_score (props));
Engraver_group_engraver::finalize ();
Grob * cc
- = unsmob_grob (get_property (ly_symbol2scm ("currentCommandColumn")));
+ = unsmob_grob (get_property ("currentCommandColumn"));
scoreline_l_->set_bound (RIGHT, cc);
cc->set_grob_property ("breakable", SCM_BOOL_T);
void
Score_engraver::one_time_step ()
{
- if (!to_boolean (get_property (ly_symbol2scm("skipTypesetting"))))
+ if (!to_boolean (get_property ("skipTypesetting")))
{
process_music ();
announces ();
Span_bar::add_bar (spanbar_p_,bar_l_arr_[i]);
SCM vissym =ly_symbol2scm ("visibility-lambda");
- SCM vis = bar_l_arr_[0]->get_grob_property (vissym);
- if (scm_equal_p (spanbar_p_->get_grob_property (vissym), vis) != SCM_BOOL_T)
- spanbar_p_->set_grob_property (vissym, vis);
+ SCM vis = bar_l_arr_[0]->internal_get_grob_property (vissym);
+ if (scm_equal_p (spanbar_p_->internal_get_grob_property (vissym), vis) != SCM_BOOL_T)
+ spanbar_p_->internal_set_grob_property (vissym, vis);
typeset_grob (spanbar_p_);
spanbar_p_ =0;
}
Span_bar::evaluate_glyph(me);
- SCM glyph = me->get_grob_property (ly_symbol2scm ("glyph"));
+ SCM glyph = me->get_grob_property ("glyph");
/*
glyph may not be a string, when ME is killed by Hara Kiri in
while (gh_pair_p (elts))
{
- gl = unsmob_grob (gh_car (elts))->get_grob_property (glyph_symbol);
+ gl = unsmob_grob (gh_car (elts))->internal_get_grob_property (glyph_symbol);
if (gh_string_p (gl))
break;
elts =gh_cdr (elts);
}
gl = ly_str02scm (type.ch_C ());
- if (scm_equal_p (me->get_grob_property (glyph_symbol), gl) != SCM_BOOL_T)
- me->set_grob_property (glyph_symbol, gl);
+ if (scm_equal_p (me->internal_get_grob_property (glyph_symbol), gl) != SCM_BOOL_T)
+ me->internal_set_grob_property (glyph_symbol, gl);
}
Interval
Staff_performer::new_instrument_str ()
{
// mustn't ask Score for instrument: it will return piano!
- SCM minstr = get_property (ly_symbol2scm ("midiInstrument"));
+ SCM minstr = get_property ("midiInstrument");
if (!gh_string_p (minstr))
- minstr = get_property (ly_symbol2scm ("instrument"));
+ minstr = get_property ("instrument");
if (!gh_string_p (minstr)
|| ly_scm2string (minstr) == instrument_str_)
System_start_delimiter_engraver::initialize ()
{
SCM delim_name =get_property ("SystemStartDelimiter");
- delim_ = new Spanner (get_property (delim_name));
+ delim_ = new Spanner (internal_get_property (delim_name));
delim_->set_bound (LEFT, unsmob_grob (get_property ("currentCommandColumn")));
}
else if (type == assign_sym)
{
- tg->set_property (ly_car (entry), ly_cadr (entry));
+ tg->internal_set_property (ly_car (entry), ly_cadr (entry));
}
}
}
return SCM_EOL when not found.
*/
SCM
-Translator_group::get_property (SCM sym) const
+Translator_group::internal_get_property (SCM sym) const
{
SCM val =SCM_EOL;
if (properties_dict ()->try_retrieve (sym, &val))
return val;
if (daddy_trans_l_)
- return daddy_trans_l_->get_property (sym);
+ return daddy_trans_l_->internal_get_property (sym);
return val;
}
-void
-Translator_group::set_property (String id, SCM val)
-{
- set_property (ly_symbol2scm (id.ch_C ()), val);
-}
-
void
-Translator_group::set_property (SCM sym, SCM val)
+Translator_group::internal_set_property (SCM sym, SCM val)
{
properties_dict ()->set (sym, val);
}
{
if (val != SCM_UNDEFINED)
{
- SCM prev = get_property (prop);
+ SCM prev = internal_get_property (prop);
if (gh_pair_p (prev) || prev == SCM_EOL)
{
bool ok = type_check_assignment (val, eltprop, ly_symbol2scm ("backend-type?"));
-
-
if (ok)
{
prev = gh_cons (gh_cons (eltprop, val), prev);
- set_property (prop, prev);
+ internal_set_property (prop, prev);
}
}
else
}
else
{
- SCM prev = get_property (prop);
+ SCM prev = internal_get_property (prop);
SCM newprops= SCM_EOL ;
while (gh_pair_p (prev) && ly_caar (prev) != eltprop)
if (gh_pair_p (prev))
{
newprops = scm_reverse_x (newprops, ly_cdr (prev));
- set_property (prop, newprops);
+ internal_set_property (prop, newprops);
}
}
}
warning (_ ("ly-get-trans-property: expecting a Translator_group argument"));
return SCM_EOL;
}
- return tr->get_property (name);
+ return tr->internal_get_property (name);
}
SCM
Translator_group* tr= dynamic_cast<Translator_group*> (t);
if (tr)
{
- tr->set_property (name, val);
+ tr->internal_set_property (name, val);
}
return SCM_UNSPECIFIED;
}
{
return output_def_l_;
}
-
+#if 0
SCM
Translator::get_property (char const * id) const
{
return daddy_trans_l_->get_property (ly_symbol2scm (id));
}
+#endif
SCM
-Translator::get_property (SCM sym) const
+Translator::internal_get_property (SCM sym) const
{
- return daddy_trans_l_->get_property (sym);
+ return daddy_trans_l_->internal_get_property (sym);
}
void
&& current_reps == SCM_EOL || gh_pair_p (current_reps))
{
current_reps = gh_cons (what, current_reps);
- where->set_property (reps, current_reps);
+ where->internal_set_property (reps, current_reps);
}
}