]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/parser.yy
* lily/include/my-lily-parser.hh: rename My_lily -> Lily
[lilypond.git] / lily / parser.yy
index a0c2170b51a80ce26b1d09eea98d848c6fee3548..2188cd934ddde3fc3f22e638dfba2632cd7c656e 100644 (file)
@@ -61,7 +61,7 @@ SCM get_next_unique_context ();
 #define YYPARSE_PARAM my_lily_parser
 #define YYLEX_PARAM my_lily_parser
 #define THIS\
-       ((My_lily_parser *) my_lily_parser)
+       ((Lily_parser *) my_lily_parser)
 
 #define yyerror THIS->parser_error
 
@@ -205,8 +205,8 @@ of the parse stack onto the heap. */
 int
 yylex (YYSTYPE *s, void *v)
 {
-       My_lily_parser *pars = (My_lily_parser*) v;
-       My_lily_lexer *lex = pars->lexer_;
+       Lily_parser *pars = (Lily_parser*) v;
+       Lily_lexer *lex = pars->lexer_;
 
        lex->lexval = (void*) s;
        lex->prepare_for_next_token ();
@@ -223,8 +223,13 @@ yylex (YYSTYPE *s, void *v)
 
 2. \markup identifier.
 
+  (what? --hwn)
+
 3. \markup { }
 
+  (what? --hwn)
+
+
 4.  \repeat
        \repeat .. \alternative
 
@@ -257,7 +262,6 @@ or
 %token CLEF
 %token COMMANDSPANREQUEST
 %token CONSISTS
-%token CONSISTSEND
 %token CONTEXT
 %token DEFAULT
 %token DENIES
@@ -271,7 +275,6 @@ or
 %token INVALID
 %token KEY
 %token LYRICS
-%token LYRICS_STRING
 %token MARK
 %token MIDI
 %token MULTI_MEASURE_REST
@@ -332,6 +335,7 @@ or
 %token <scm>   NUMBER_IDENTIFIER
 %token <scm>   OUTPUT_DEF_IDENTIFIER
 %token <scm>   RESTNAME
+%token <scm> LYRICS_STRING
 %token <scm>   SCM_T
 %token <scm>   SCORE_IDENTIFIER
 %token <scm>   STRING
@@ -549,9 +553,6 @@ identifier_init:
                $$ = $1->self_scm ();
                scm_gc_unprotect_object ($$);
        }
-       | full_markup {
-               $$ = $1;
-       }
        | output_def {
                $$ = $1->self_scm ();
                scm_gc_unprotect_object ($$);
@@ -568,14 +569,20 @@ identifier_init:
                scm_gc_unprotect_object ($$);
        }
        | number_expression {
-               $$ = $1;
+               $$ = $1;
        }
        | string {
                $$ = $1;
        }
-       | embedded_scm  {
+        | embedded_scm {
                $$ = $1;
        }
+       | full_markup {
+               $$ = $1;
+       }
+       | DIGIT {
+               $$ = scm_int2num ($1);
+       }
        ;
 
 context_def_spec_block:
@@ -1101,7 +1108,7 @@ Prefix_composite_music:
                SCM nn = THIS->lexer_->lookup_identifier ("pitchnames");
                THIS->lexer_->push_note_state (alist_to_hashq (nn));
        }
-       Music
+       Grouped_music_list
                { $$ = $3;
                  THIS->lexer_->pop_state ();
                }
@@ -1110,18 +1117,12 @@ Prefix_composite_music:
                SCM nn = THIS->lexer_->lookup_identifier ("drumPitchNames");
                THIS->lexer_->push_note_state (alist_to_hashq (nn));
        }
-       /* FIXME: This used to be: */
-       Music
-/*     Grouped_music_list */
+       Grouped_music_list
                { $$ = $3;
                  THIS->lexer_->pop_state ();
                }
        | FIGURES
                { THIS->lexer_->push_figuredbass_state (); }
-       /* FIXME: This used to be:
-       Music
-       but that breaks web build
-       */
        Grouped_music_list
                {
                  Music *chm = MY_MAKE_MUSIC ("UntransposableMusic");
@@ -1138,9 +1139,6 @@ Prefix_composite_music:
                THIS->lexer_->push_chord_state (alist_to_hashq (nn));
 
        }
-       /* FIXME:
-       Music
-*/
        Grouped_music_list
        {
                  Music *chm = MY_MAKE_MUSIC ("UnrelativableMusic");
@@ -1152,9 +1150,6 @@ Prefix_composite_music:
        }
        | LYRICS
                { THIS->lexer_->push_lyric_state (); }
-       /* FIXME:
-       Music
-*/
        Grouped_music_list
                {
                  $$ = $3;
@@ -1234,9 +1229,12 @@ re_rhythmed_music:
                $$ = all;
                scm_gc_unprotect_object ($1->self_scm ());
        }
-       | LYRICSTO string Music {
-               Music *music = $3;
-               SCM name = $2;
+       | LYRICSTO {
+               THIS->lexer_->push_lyric_state ();
+       } simple_string Music {
+               THIS->lexer_->pop_state ();
+               Music *music = $4;
+               SCM name = $3;
                $$ = make_lyric_combine_music (name, music);
                scm_gc_unprotect_object (music->self_scm ());
        }
@@ -1273,8 +1271,7 @@ property_operation:
        ;
 
 context_def_mod:
-       CONSISTSEND { $$ = ly_symbol2scm ("consists-end"); }
-       | CONSISTS { $$ = ly_symbol2scm ("consists"); }
+       CONSISTS { $$ = ly_symbol2scm ("consists"); }
        | REMOVE { $$ = ly_symbol2scm ("remove"); }
 
        | ACCEPTS { $$ = ly_symbol2scm ("accepts"); }
@@ -1295,6 +1292,11 @@ context_mod:
 
 context_prop_spec:
        simple_string {
+               if (!is_regular_identifier ($1))
+               {
+                       THIS->here_input ().error (_("Grob name should be alphanumeric"));
+               }
+
                $$ = scm_list_2 (ly_symbol2scm ("Bottom"),
                        scm_string_to_symbol ($1));
        }
@@ -1355,21 +1357,27 @@ string:
        ;
 
 simple_string: STRING {
+               $$ = $1;
        }
        | LYRICS_STRING {
+               $$ = $1;
        }
        ;
 
 scalar: string {
+               $$ = $1;
        }
        | LYRICS_STRING {
+               $$ = $1;
        }
         | bare_int {
                $$ = scm_int2num ($1);
        }
         | embedded_scm {
+               $$ = $1;
        }
        | full_markup {
+               $$ = $1;
        }
        | DIGIT {
                $$ = scm_int2num ($1);
@@ -1377,9 +1385,8 @@ scalar: string {
        ;
 
 /*
-FIXME: remove or fix this comment.  What is `This'?
 
-This is a trick:
+pre_events doesn't contain anything. It is a trick:
 
 Adding pre_events to the simple_element
 makes the choice between
@@ -1461,19 +1468,31 @@ chord_body_elements:
        ;
 
 chord_body_element:
-       pitch exclamations questions post_events
+       pitch  exclamations questions octave_check post_events
        {
+               int q = $3;
+               int ex = $2;
+               SCM check = $4;
+               SCM post = $5;
+
                Music *n = MY_MAKE_MUSIC ("NoteEvent");
                n->set_property ("pitch", $1);
-               if ($3 % 2)
+               if (q % 2)
                        n->set_property ("cautionary", SCM_BOOL_T);
-               if ($2 % 2 || $3 % 2)
+               if (ex % 2 || q % 2)
                        n->set_property ("force-accidental", SCM_BOOL_T);
 
-               if (ly_c_pair_p ($4)) {
-                       SCM arts = scm_reverse_x ($4, SCM_EOL);
+               if (ly_c_pair_p (post)) {
+                       SCM arts = scm_reverse_x (post, SCM_EOL);
                        n->set_property ("articulations", arts);
                }
+               if (ly_c_number_p (check))
+               {
+                       int q = ly_scm2int (check);
+                       n->set_property ("absolute-octave", scm_int2num (q-1));
+               }
+
+               
                $$ = n;
        }
        | DRUM_PITCH post_events {
@@ -2496,7 +2515,7 @@ markup_list_body:
 %%
 
 void
-My_lily_parser::set_yydebug (bool )
+Lily_parser::set_yydebug (bool )
 {
 #if 0
        yydebug = 1;
@@ -2504,7 +2523,7 @@ My_lily_parser::set_yydebug (bool )
 }
 
 void
-My_lily_parser::do_yyparse ()
+Lily_parser::do_yyparse ()
 {
        yyparse ((void*)this);
 }
@@ -2522,7 +2541,7 @@ skipTypesetting speeds it up a lot.
 */
 
 void
-My_lily_parser::beam_check (SCM dur)
+Lily_parser::beam_check (SCM dur)
 {
   Duration *d = unsmob_duration (dur);
   if (unsmob_music (last_beam_start_) && d->duration_log () <= 2)
@@ -2543,7 +2562,7 @@ otherwise, we have to import music classes into the lexer.
 
 */
 int
-My_lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
+Lily_lexer::try_special_identifiers (SCM *destination, SCM sid)
 {
        if (ly_c_string_p (sid)) {
                *destination = sid;