2 translator-group-initializer.cc -- implement Translator_group_initializer
4 source file of the GNU LilyPond music typesetter
6 (c) 2000 Han-Wen Nienhuys <hanwen@cs.uu.nl>
10 #include "translator-group.hh"
15 Translator_group_initializer::set_acceptor (Translator
*me
,SCM name
, bool add
)
18 me
->accepts_name_list_
= gh_append2 (me
->accepts_name_list_
, gh_cons (name
, SCM_EOL
));
20 me
->accepts_name_list_
= scm_delete_x (name
, me
->accepts_name_list_
);
25 Translator_group_initializer::modify_definition (SCM list
, SCM str
, bool add
)
27 String s
= ly_scm2string (str
);
28 if (!get_translator_l (s
))
29 error (_ ("Program has no such type"));
33 if (scm_memq (str
, list
) != SCM_BOOL_F
)
35 warning (_f("Already contains: `%s'", s
));
36 warning (_f("Not adding translator: `%s'", s
));
39 list
= gh_cons (str
, list
);
43 list
= scm_delete_x (str
, list
);
51 Translator_group_initializer::remove_element (Translator
*me
,SCM s
)
53 me
->end_consists_name_list_
= modify_definition (me
->end_consists_name_list_
, s
, false);
54 me
->consists_name_list_
= modify_definition (me
->consists_name_list_
, s
, false);
58 Translator_group_initializer::add_element (Translator
*me
,SCM s
)
60 me
->consists_name_list_
= modify_definition (me
->consists_name_list_
, s
, true);
64 Translator_group_initializer::add_last_element (Translator
*me
,SCM s
)
66 me
->end_consists_name_list_
= modify_definition (me
->end_consists_name_list_
, s
, true);
69 Translator_group_initializer::add_push_property (Translator
* me
,
70 SCM props
, SCM syms
, SCM vals
)
72 me
->property_pushes_
= gh_cons (gh_list (props
, syms
, vals
, SCM_UNDEFINED
),
73 me
->property_pushes_
);
77 Translator_group_initializer::add_pop_property (Translator
* me
,
80 me
->property_pushes_
= gh_cons (gh_list (props
, syms
, SCM_UNDEFINED
),
81 me
->property_pushes_
);
85 Do it. SYMS maybe a symbol or a list of symbols. VAL is
86 SCM_UNDEFINED in case of a pop
89 Translator_group_initializer::apply_pushpop_property (Translator
*trans
, SCM syms
, SCM eprop
, SCM val
)
91 if (gh_symbol_p (syms
))
92 dynamic_cast<Translator_group
*>(trans
)->execute_single_pushpop_property (syms
, eprop
, val
);
93 else for (SCM s
= syms
; gh_pair_p (s
); s
= gh_cdr (s
))
94 dynamic_cast<Translator_group
*>(trans
)->execute_single_pushpop_property (gh_car (s
), eprop
, val
);