+2004-07-27 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * lily/parser.yy (context_def_mod): remove \consistsend
+
+ * lily/context-def.cc (instantiate): use Translator::must_be_last
+ to determine engraver order.
+
+ * lily/translator.cc (must_be_last): new function
+
+ * scripts/convert-ly.py (conv): rule.
+
+ * lily/bar-line.cc (print): return '() for height == 0.0 too.
+
2004-07-27 Heikki Junes <hjunes@cc.hut.fi>
* input/regression/{stanza-number,volta-multi-staff}.ly: fix docs.
Axis_group_engraver::Axis_group_engraver ()
{
+ must_be_last_ = true;
staffline_ = 0;
}
Context_def::get_translator_names (SCM user_mod) const
{
SCM l1 = SCM_EOL;
- SCM l2 = SCM_EOL;
SCM mods = scm_reverse_x (scm_list_copy (translator_mods_), user_mod);
if (ly_symbol2scm ("consists") == tag)
l1 = scm_cons (arg, l1);
- else if (ly_symbol2scm ("consists-end") == tag)
- l2 = scm_cons (arg, l2);
else if (ly_symbol2scm ("remove") == tag)
{
l1 = scm_delete_x (arg, l1);
- l2 = scm_delete_x (arg, l2);
}
}
- return scm_append_x (scm_list_2 (l1, l2));
+
+ return l1;
}
SCM
Translator *g = get_translator (translator_group_type_);
g = g->clone ();
-
- g->simple_trans_list_ = SCM_EOL;
+ SCM trans_list = SCM_EOL;
+
for (SCM s = trans_names; ly_c_pair_p (s) ; s = ly_cdr (s))
{
Translator *t = get_translator (ly_car (s));
{
Translator *tr = t->clone ();
SCM str = tr->self_scm ();
- g->simple_trans_list_ = scm_cons (str, g->simple_trans_list_);
+
+ if (tr->must_be_last ())
+ {
+ SCM cons = scm_cons (str, SCM_EOL);
+ trans_list = ly_c_pair_p (trans_list)
+ ? scm_set_cdr_x (scm_last_pair (trans_list), cons)
+ : cons;
+ }
+ else
+ {
+ trans_list = scm_cons (str, trans_list);
+ }
+
tr->daddy_context_ = tg;
scm_gc_unprotect_object (str);
}
}
+ g->simple_trans_list_ = trans_list;
+
tg->implementation_ = g->self_scm ();
if (dynamic_cast<Engraver*> (g))
g->simple_trans_list_ = filter_performers (g->simple_trans_list_);
class Translator
{
void init ();
-
+
+protected:
+ bool must_be_last_;
+
public:
+ bool must_be_last () const;
+
Context * context () const { return daddy_context_; }
Translator (Translator const &);
Score_context * get_score_context () const;
Global_context * get_global_context () const;
+
TRANSLATOR_DECLARATIONS(Translator);
DECLARE_SMOBS (Translator, dummy);
{"chords", CHORDS},
{"clef", CLEF},
{"consists", CONSISTS},
- {"consistsend", CONSISTSEND},
{"context", CONTEXT},
{"default", DEFAULT},
{"denies", DENIES},
%token CLEF
%token COMMANDSPANREQUEST
%token CONSISTS
-%token CONSISTSEND
%token CONTEXT
%token DEFAULT
%token DENIES
;
context_def_mod:
- CONSISTSEND { $$ = ly_symbol2scm ("consists-end"); }
- | CONSISTS { $$ = ly_symbol2scm ("consists"); }
+ CONSISTS { $$ = ly_symbol2scm ("consists"); }
| REMOVE { $$ = ly_symbol2scm ("remove"); }
| ACCEPTS { $$ = ly_symbol2scm ("accepts"); }
void
Translator::init ()
{
+ must_be_last_ = false;
self_scm_ = SCM_EOL;
simple_trans_list_ = SCM_BOOL_F;
daddy_context_ =0;
init ();
}
-Translator::Translator (Translator const &)
+Translator::Translator (Translator const &src)
{
init ();
+ must_be_last_ = src.must_be_last_;
}
bool
IMPLEMENT_SMOBS (Translator);
IMPLEMENT_DEFAULT_EQUAL_P (Translator);
IMPLEMENT_TYPE_P (Translator,"ly:translator?");
+
+bool
+Translator::must_be_last () const
+{
+ return must_be_last_;
+}
+
-\version "2.3.2"
+\version "2.3.8"
\context {
\name Global
\consists "Piano_pedal_engraver"
\consists "Instrument_name_engraver"
\consists "String_number_engraver"
- \consistsend "Axis_group_engraver"
+ \consists "Axis_group_engraver"
minimumVerticalExtent = #'(-6 . 6)
extraVerticalExtent = ##f
\consists "Staff_symbol_engraver"
\consists "Ledger_line_engraver"
\consists "Instrument_name_engraver"
- \consistsend "Axis_group_engraver"
+ \consists "Axis_group_engraver"
\accepts "Voice"
\description "
A context like @code{Staff} but for printing rhythms. Pitches are
\context{
\type "Engraver_group_engraver"
- \consistsend "Hara_kiri_engraver"
+ \consists "Hara_kiri_engraver"
minimumVerticalExtent = #'(-1.2 . 2.4)
extraVerticalExtent = ##f
verticalExtent = ##f
\context {
\type "Engraver_group_engraver"
\name NoteNames
- \consistsend "Axis_group_engraver"
+ \consists "Axis_group_engraver"
minimumVerticalExtent = ##f
extraVerticalExtent = ##f
\consists "Separating_line_group_engraver"
\consists "Chord_name_engraver"
\consists "Skip_event_swallow_translator"
- \consistsend "Hara_kiri_engraver"
+ \consists "Hara_kiri_engraver"
voltaOnThisStaff = ##f
minimumVerticalExtent = #'(0 . 2.5)
RemoveEmptyStaffContext= \context {
\Staff
\remove "Axis_group_engraver"
- \consistsend "Hara_kiri_engraver"
+ \consists "Hara_kiri_engraver"
\override Beam #'auto-knee-gap = #'()
}
\consists "Skip_event_swallow_translator"
\consists "Separating_line_group_engraver"
- \consistsend "Hara_kiri_engraver"
+ \consists "Hara_kiri_engraver"
}
\context {
conversions.append (((2, 3, 4), conv,
'''remove \\notes'''))
+
+
+def conv (str):
+ str = re.sub (r'\\consistsend', '\\consists', str)
+ return str
+
+conversions.append (((2, 3, 8), conv,
+ '''remove \\consistsend'''))
+
+
################################
# END OF CONVERSIONS
################################