On Monday 19 June 2006 12:12, Han-Wen Nienhuys wrote:
> Paul Scott schreef:
> > This used to work in 2.8:
> >
> > \version "2.9.9"
> >
> > KeyG = \key g \major
> >
> > { \KeyG a'' b'' g'' a'' }
> >
> >
> > Have any keywords been added or something that would break this?
>
> Erik has done some work on the parser, which might be the cause.
The problem is the difference between MUSIC_IDENTIFIER and EVENT_IDENTIFIER.
Right now, the latter can only be used for articulations, and after my parser
cleanups, no event-chord is created around \key.
I'm not quite sure what the proper solution is. The attached patch solves the
problem by renaming EVENT_IDENTIFIER to ARTICULATION_IDENTIFIER. The solution
is easy and it works AFAICT, but it relies on music-classes, whose fate is
uncertain. I did consider the following solutions as well:
1. Extend identifier-smob with type information (typically corresponding to
the return value of try_special_idetifiers). I think this will only move the
problem, because expressions like foo = #... must still be assigned a type
correctly.
2. unify MUSIC_IDENTIFIER with EVENT_IDENTIFIER. This has one problem: someone
will try
foo = -.
{ c2\foo d2 }
which (AFAICT) will put the dot above the d2
3. Whenever a variable is assigned music, wrap it in a dummy sequential_music.
Unclean.
--
Erik
Index: lily/parser.yy
===================================================================
RCS file: /sources/lilypond/lilypond/lily/parser.yy,v
retrieving revision 1.517
diff -u -r1.517 parser.yy
--- lily/parser.yy 13 Jun 2006 22:01:19 -0000 1.517
+++ lily/parser.yy 19 Jun 2006 22:04:17 -0000
@@ -262,7 +262,7 @@
%token <scm> CONTEXT_DEF_IDENTIFIER
%token <scm> DRUM_PITCH
%token <scm> DURATION_IDENTIFIER
-%token <scm> EVENT_IDENTIFIER
+%token <scm> ARTICULATION_IDENTIFIER
%token <scm> FRACTION
%token <scm> LYRICS_STRING
%token <scm> LYRIC_MARKUP_IDENTIFIER
@@ -1624,7 +1624,7 @@
m->set_spot (@$);
$$ = m->unprotect ();
}
- | EVENT_IDENTIFIER {
+ | ARTICULATION_IDENTIFIER {
$$ = $1;
}
| tremolo_type {
@@ -2392,10 +2392,10 @@
unsmob_music (*destination)->
set_property ("origin", make_input (last_input_));
- bool is_event = scm_memq (ly_symbol2scm ("event"), mus->get_property ("types"))
+ bool is_articulation = scm_memq (ly_symbol2scm ("articulation-event"), mus->get_property ("types"))
!= SCM_BOOL_F;
- return is_event ? EVENT_IDENTIFIER : MUSIC_IDENTIFIER;
+ return is_articulation ? ARTICULATION_IDENTIFIER : MUSIC_IDENTIFIER;
} else if (unsmob_duration (sid)) {
*destination = unsmob_duration (sid)->smobbed_copy ();
return DURATION_IDENTIFIER;
_______________________________________________
lilypond-user mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/lilypond-user