X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fparser.yy;h=7cd980afc5d452346e771d56c97e192916205e6e;hb=402045837e7134cdf90d1fcf31768c62227a4936;hp=de1b8e81c137caff4a8ad886435fa6dc09843b96;hpb=6ac8e1b2d7640826ae251e040de5efbc36da68ab;p=lilypond.git diff --git a/lily/parser.yy b/lily/parser.yy index de1b8e81c1..7cd980afc5 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -5,7 +5,7 @@ source file of the GNU LilyPond music typesetter - (c) 1997--2003 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys Jan Nieuwenhuizen */ @@ -283,7 +283,6 @@ yylex (YYSTYPE *s, void * v) %token PAPER %token PARTCOMBINE %token PARTIAL -%token PROPERTY %token RELATIVE %token REMOVE %token REPEAT @@ -381,13 +380,13 @@ yylex (YYSTYPE *s, void * v) %type embedded_scm scalar %type Music Sequential_music Simultaneous_music %type relative_music re_rhythmed_music -%type music_property_def context_change -%type Music_list +%type music_property_def context_change +%type context_prop_spec +%type Music_list %type property_operation context_mod translator_mod optional_context_mod %type music_output_def_body music_output_def_head -%type shorthand_command_req %type post_event tagged_post_event -%type command_req verbose_command_req +%type command_req %type string_number_event %type string bare_number number_expression number_term number_factor %type score_block score_body @@ -440,7 +439,7 @@ toplevel_expression: for (int i=0; i < sc->defs_.size (); i++) default_rendering (sc->music_, sc->defs_[i]->self_scm(),head, outname); - if (sc->defs_.empty ()) + if (sc->defs_.is_empty ()) { Music_output_def *id = unsmob_music_output_def (THIS->lexer_->lookup_identifier @@ -578,8 +577,10 @@ translator_spec_body: for (SCM p = $3; gh_pair_p (p); p = ly_cdr (p)) { SCM tag = gh_caar (p); + + /* TODO: should make new tag "grob-definition" ? */ td->add_context_mod (scm_list_n (ly_symbol2scm ("assign"), - tag, ly_cdar (p), SCM_UNDEFINED)); + tag, gh_cons (ly_cdar (p), SCM_EOL), SCM_UNDEFINED)); } } | translator_spec_body context_mod { @@ -678,6 +679,7 @@ music_output_def_body: } | music_output_def_head '{' MUSIC_OUTPUT_DEF_IDENTIFIER { + scm_gc_unprotect_object ($1->self_scm ()); Music_output_def * o = unsmob_music_output_def ($3); $$ = o; THIS->lexer_->remove_scope (); @@ -893,7 +895,7 @@ Composite_music: scm_gc_unprotect_object ($2->self_scm ()); $$ = unsmob_music (res); scm_gc_protect_object (res); - $$->set_spot (THIS->here_input()) + $$->set_spot (THIS->here_input()); } | PARTCOMBINE Music Music { static SCM proc; @@ -945,7 +947,6 @@ basic music objects too, since the meaning is different. scm_gc_unprotect_object (startm->self_scm ()); } - Music* seq = MY_MAKE_MUSIC("SequentialMusic"); seq->set_mus_property ("elements", ms); @@ -1050,13 +1051,13 @@ basic music objects too, since the meaning is different. THIS->lexer_->pop_state (); } - | CHORDS - { + | CHORDS { SCM nn = THIS->lexer_->lookup_identifier ("chordmodifiers"); THIS->lexer_->chordmodifier_tab_ = alist_to_hashq (nn); - THIS->lexer_->push_chord_state (); } - Music - { + nn = THIS->lexer_->lookup_identifier ("pitchnames"); + THIS->lexer_->push_chord_state (alist_to_hashq (nn)); + + } Music { Music * chm = MY_MAKE_MUSIC("UnrelativableMusic"); chm->set_mus_property ("element", $3->self_scm ()); scm_gc_unprotect_object ($3->self_scm()); @@ -1167,27 +1168,52 @@ context_mod: } ; -music_property_def: - PROPERTY STRING '.' property_operation { - Music * t = property_op_to_music ($4); - Music *csm = MY_MAKE_MUSIC("ContextSpeccedMusic"); - - csm->set_mus_property ("element", t->self_scm ()); - scm_gc_unprotect_object (t->self_scm ()); - - $$ = csm; - $$->set_spot (THIS->here_input ()); +context_prop_spec: + STRING { + $$ = scm_list_n (ly_symbol2scm ("Bottom"), scm_string_to_symbol ($1), SCM_UNDEFINED); + } + | STRING '.' STRING { + $$ = scm_list_n (scm_string_to_symbol ($1), scm_string_to_symbol ($3), SCM_UNDEFINED); + } + ; - csm-> set_mus_property ("context-type", scm_string_to_symbol ($2)); +music_property_def: + OVERRIDE context_prop_spec embedded_scm '=' scalar { + $$ = property_op_to_music (scm_list_n ( + ly_symbol2scm ("poppush"), + gh_cadr ($2), + $3, $5, SCM_UNDEFINED)); + $$= context_spec_music (gh_car ($2), SCM_UNDEFINED, $$, SCM_EOL); + } + | SET context_prop_spec '=' scalar { + $$ = property_op_to_music (scm_list_n ( + ly_symbol2scm ("assign"), + gh_cadr ($2), + $4, SCM_UNDEFINED)); + $$= context_spec_music (gh_car ($2), SCM_UNDEFINED, $$, SCM_EOL); + } + | REVERT context_prop_spec embedded_scm { + $$ = property_op_to_music (scm_list_n ( + ly_symbol2scm ("pop"), + gh_cadr ($2), + $3, SCM_UNDEFINED)); + + $$= context_spec_music (gh_car ($2), SCM_UNDEFINED, $$, SCM_EOL); + } + | UNSET context_prop_spec { + $$ = property_op_to_music (scm_list_n ( + ly_symbol2scm ("unset"), + gh_cadr ($2))); + $$= context_spec_music (gh_car ($2), SCM_UNDEFINED, $$, SCM_EOL); } | ONCE music_property_def { $$ = $2; - SCM e = $2->get_mus_property ("element"); - unsmob_music (e)->set_mus_property ("once", SCM_BOOL_T); + $$->set_mus_property ("once", SCM_BOOL_T); } ; + scalar: string { $$ = $1; } | bare_int { $$ = gh_int2scm ($1); } @@ -1288,9 +1314,22 @@ chord_body_element: if ($2 % 2 || $3 % 2) n->set_mus_property ("force-accidental", SCM_BOOL_T); - SCM arts = scm_reverse_x ($4, SCM_EOL); - n->set_mus_property ("articulations", arts); + if (gh_pair_p ($4)) { + SCM arts = scm_reverse_x ($4, SCM_EOL); + n->set_mus_property ("articulations", arts); + } + $$ = n; + } + | DRUM_PITCH post_events { + Music *n = MY_MAKE_MUSIC("NoteEvent"); + n->set_mus_property ("duration" ,$2); + n->set_mus_property ("drum-type" , $1); + n->set_spot (THIS->here_input()); + if (gh_pair_p ($2)) { + SCM arts = scm_reverse_x ($2, SCM_EOL); + n->set_mus_property ("articulations", arts); + } $$ = n; } ; @@ -1304,6 +1343,12 @@ command_element: $$-> set_spot (THIS->here_input ()); $1-> set_spot (THIS->here_input ()); } + | SKIP duration_length { + Music * skip = MY_MAKE_MUSIC("SkipMusic"); + skip->set_mus_property ("duration", $2); + + $$ = skip; + } | OCTAVE { THIS->push_spot (); } pitch { Music *l = MY_MAKE_MUSIC("RelativeOctaveCheck"); @@ -1393,31 +1438,16 @@ command_element: ; command_req: - shorthand_command_req { $$ = $1; } - | verbose_command_req { $$ = $1; } - ; - -shorthand_command_req: BREATHE { $$ = MY_MAKE_MUSIC("BreathingSignEvent"); } | E_TILDE { $$ = MY_MAKE_MUSIC("PesOrFlexaEvent"); } - ; - -verbose_command_req: - MARK DEFAULT { + | MARK DEFAULT { Music * m = MY_MAKE_MUSIC("MarkEvent"); $$ = m; } - - | SKIP duration_length { - Music * skip = MY_MAKE_MUSIC("SkipEvent"); - skip->set_mus_property ("duration", $2); - - $$ = skip; - } | tempo_event { $$ = $1; } @@ -2443,7 +2473,8 @@ context_spec_music (SCM type, SCM id, Music * m, SCM ops) csm->set_mus_property ("element", m->self_scm ()); scm_gc_unprotect_object (m->self_scm ()); - csm->set_mus_property ("context-type", scm_string_to_symbol (type)); + csm->set_mus_property ("context-type", + gh_symbol_p (type) ? type : scm_string_to_symbol (type)); csm->set_mus_property ("property-operations", ops); if (gh_string_p (id))