From 86eeeb51725d3f1752c0a75b7e024a93dca03927 Mon Sep 17 00:00:00 2001 From: Neil Puttock Date: Tue, 16 Jun 2009 22:39:43 +0100 Subject: [PATCH] Allow accidentals to be hidden using ampersand. --- lily/accidental-engraver.cc | 3 ++- lily/parser.yy | 34 ++++++++++++++++++++++------------ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/lily/accidental-engraver.cc b/lily/accidental-engraver.cc index f84e281..57905bd 100644 --- a/lily/accidental-engraver.cc +++ b/lily/accidental-engraver.cc @@ -436,7 +436,8 @@ Accidental_engraver::acknowledge_rhythmic_head (Grob_info info) Stream_event *note = info.event_cause (); if (note && (note->in_event_class ("note-event") - || note->in_event_class ("trill-span-event"))) + || note->in_event_class ("trill-span-event")) + && !to_boolean (note->get_property ("hide-accidental"))) { /* string harmonics usually don't have accidentals. diff --git a/lily/parser.yy b/lily/parser.yy index 462a58d..992a717 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -312,6 +312,7 @@ If we give names, Bison complains. %type bare_unsigned %type figured_bass_alteration +%type ampersands %type dots %type exclamations %type optional_rest @@ -1443,15 +1444,18 @@ chord_body_elements: ; chord_body_element: - pitch exclamations questions octave_check post_events + pitch ampersands exclamations questions octave_check post_events { - int q = $3; - int ex = $2; - SCM check = $4; - SCM post = $5; + int amp = $2; + int q = $4; + int ex = $3; + SCM check = $5; + SCM post = $6; Music *n = MY_MAKE_MUSIC ("NoteEvent", @$); n->set_property ("pitch", $1); + if (amp % 2) + n->set_property ("hide-accidental", SCM_BOOL_T); if (q % 2) n->set_property ("cautionary", SCM_BOOL_T); if (ex % 2 || q % 2) @@ -2050,28 +2054,30 @@ optional_rest: ; simple_element: - pitch exclamations questions octave_check optional_notemode_duration optional_rest { + pitch ampersands exclamations questions octave_check optional_notemode_duration optional_rest { if (!PARSER->lexer_->is_note_state ()) PARSER->parser_error (@1, _ ("have to be in Note mode for notes")); Music *n = 0; - if ($6) + if ($7) n = MY_MAKE_MUSIC ("RestEvent", @$); else n = MY_MAKE_MUSIC ("NoteEvent", @$); n->set_property ("pitch", $1); - n->set_property ("duration", $5); + n->set_property ("duration", $6); - if (scm_is_number ($4)) + if (scm_is_number ($5)) { - int q = scm_to_int ($4); + int q = scm_to_int ($5); n->set_property ("absolute-octave", scm_from_int (q-1)); } - if ($3 % 2) + if ($2 % 2) + n->set_property ("hide-accidental", SCM_BOOL_T); + if ($4 % 2) n->set_property ("cautionary", SCM_BOOL_T); - if ($2 % 2 || $3 % 2) + if ($3 % 2 || $4 % 2) n->set_property ("force-accidental", SCM_BOOL_T); $$ = n->unprotect (); @@ -2270,6 +2276,10 @@ unsigned_number: } ; +ampersands: + { $$ = 0; } + | ampersands '&' { $$ ++; } + ; exclamations: { $$ = 0; } -- 1.6.0.4