]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/parser.yy
input/regression/bookparts.ly fails at PDF conversion stage
[lilypond.git] / lily / parser.yy
index 552d699d25c87fa6bbb1106f749992a5943b5e19..a166aee8e538f87b5ac002ffec5f6b95e72f9cc2 100644 (file)
@@ -116,7 +116,6 @@ FIXME:
 #include <cctype>
 #include <cstdlib>
 #include <cstdio>
-using namespace std;
 
 #include "book.hh"
 #include "context-def.hh"
@@ -141,7 +140,7 @@ using namespace std;
 #include "lily-imports.hh"
 
 void
-Lily_parser::parser_error (Input const *i, Lily_parser *parser, SCM *, const string &s)
+Lily_parser::parser_error (Input const *i, Lily_parser *parser, SCM *, const std::string &s)
 {
        parser->parser_error (*i, s);
 }
@@ -223,6 +222,7 @@ SCM get_next_unique_lyrics_context_id ();
 #define _(x) gettext (x)
 #endif
 
+using std::string;
 
 static Music *make_music_with_input (SCM name, Input where);
 SCM check_scheme_arg (Lily_parser *parser, Input loc,
@@ -717,6 +717,26 @@ partial_function:
        {
                $$ = scm_acons ($1, $2, SCM_EOL);
        }
+       | OVERRIDE grob_prop_path '='
+       {
+               if (SCM_UNBNDP ($2))
+                       $$ = scm_list_1 (SCM_BOOL_F);
+               else
+                       $$ = scm_cons
+                               (scm_list_3 (Syntax::property_override_function,
+                                            scm_cdr ($2), scm_car ($2)),
+                                SCM_EOL);
+       }
+       | SET context_prop_spec '='
+       {
+               if (SCM_UNBNDP ($2))
+                       $$ = scm_list_1 (SCM_BOOL_F);
+               else
+                       $$ = scm_cons
+                               (scm_list_3 (Syntax::property_set_function,
+                                            scm_cadr ($2), scm_car ($2)),
+                                SCM_EOL);
+       }
        | MUSIC_FUNCTION EXPECT_SCM function_arglist_optional partial_function
        {
                $$ = scm_acons ($1, $3, $4);
@@ -729,6 +749,26 @@ partial_function:
        {
                $$ = scm_acons ($1, $3, $4);
        }
+       | OVERRIDE grob_prop_path '=' partial_function
+       {
+               if (SCM_UNBNDP ($2))
+                       $$ = scm_list_1 (SCM_BOOL_F);
+               else
+                       $$ = scm_cons
+                               (scm_list_3 (Syntax::property_override_function,
+                                            scm_cdr ($2), scm_car ($2)),
+                                $4);
+       }
+       | SET context_prop_spec '=' partial_function
+       {
+               if (SCM_UNBNDP ($2))
+                       $$ = scm_list_1 (SCM_BOOL_F);
+               else
+                       $$ = scm_cons
+                               (scm_list_3 (Syntax::property_set_function,
+                                            scm_cadr ($2), scm_car ($2)),
+                                $4);
+       }
        | MUSIC_FUNCTION EXPECT_OPTIONAL EXPECT_SCM function_arglist_nonbackup partial_function
        {
                $$ = scm_acons ($1, $4, $5);
@@ -1483,11 +1523,19 @@ context_prefix:
        ;
 
 new_lyrics:
-       ADDLYRICS lyric_mode_music {
-               $$ = scm_list_1 ($2);
+       ADDLYRICS optional_context_mod lyric_mode_music {
+               Context_mod *ctxmod = unsmob<Context_mod> ($2);
+               SCM mods = SCM_EOL;
+               if (ctxmod)
+                       mods = ctxmod->get_mods ();
+               $$ = scm_acons ($3, mods, SCM_EOL);
        }
-       | new_lyrics ADDLYRICS lyric_mode_music {
-               $$ = scm_cons ($3, $1);
+       | new_lyrics ADDLYRICS optional_context_mod lyric_mode_music {
+               Context_mod *ctxmod = unsmob<Context_mod> ($3);
+               SCM mods = SCM_EOL;
+               if (ctxmod)
+                       mods = ctxmod->get_mods ();
+               $$ = scm_acons ($4, mods, $1);
        }
        ;
 
@@ -4047,14 +4095,12 @@ make_duration (SCM d, int dots)
 SCM
 make_chord_step (SCM step_scm, Rational alter)
 {
-        int step = scm_to_int (step_scm);
+       Pitch m (0, scm_to_int (step_scm) - 1, alter);
 
-       if (step == 7)
-               alter += FLAT_ALTERATION;
+       // Notename/octave are normalized
+       if (m.get_notename () == 6)
+               m = m.transposed (Pitch (0, 0, FLAT_ALTERATION));
 
-       while (step < 0)
-               step += 7;
-       Pitch m ((step -1) / 7, (step - 1) % 7, alter);
        return m.smobbed_copy ();
 }