X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fparser.yy;h=d9fa443eb72823fe4d1db5321d5705a4f6f787af;hb=24ac85edabed266d1de42c12971f4e81b4475d7d;hp=d3f044b0344a36be860597fe01818736c0f871bf;hpb=5b03334eaf11104855ef5fd3e18a7c00cd0fcea2;p=lilypond.git diff --git a/lily/parser.yy b/lily/parser.yy index d3f044b034..d9fa443eb7 100644 --- a/lily/parser.yy +++ b/lily/parser.yy @@ -118,9 +118,9 @@ get_first_context_id (SCM type, Music *m) SCM make_simple_markup (SCM encoding, SCM a) { - SCM simple = ly_scheme_function ("simple-markup"); + SCM simple = ly_lily_module_constant ("simple-markup"); if (scm_is_symbol (encoding)) - return scm_list_3 (ly_scheme_function ("encoded-simple-markup"), + return scm_list_3 (ly_lily_module_constant ("encoded-simple-markup"), encoding, a); return scm_list_2 (simple, a); } @@ -154,7 +154,7 @@ make_chord_step (int step, int alter) SCM make_chord (SCM pitch, SCM dur, SCM modification_list) { - SCM chord_ctor = ly_scheme_function ("construct-chord"); + SCM chord_ctor = ly_lily_module_constant ("construct-chord"); SCM ch = scm_call_3 (chord_ctor, pitch, dur, modification_list); scm_gc_protect_object (ch); return ch; @@ -444,7 +444,8 @@ or %type Generic_prefix_music_scm %type lyric_element %type Alternative_music -%type markup markup_line markup_list markup_list_body full_markup +%type full_markup markup_list markup_composed_list markup_braced_list markup_braced_list_body +%type markup_head_1_item markup_head_1_list markup simple_markup markup_top %type mode_changing_head %type mode_changing_head_with_context %type object_id_setting @@ -902,7 +903,7 @@ Repeated_music: } - SCM proc = ly_scheme_function ("make-repeated-music"); + SCM proc = ly_lily_module_constant ("make-repeated-music"); SCM mus = scm_call_1 (proc, $2); scm_gc_protect_object (mus); // UGH. @@ -924,7 +925,7 @@ Repeated_music: we can not get durations and other stuff correct down the line, so we have to add to the duration log here. */ - SCM func = ly_scheme_function ("shift-duration-log"); + SCM func = ly_lily_module_constant ("shift-duration-log"); int dots = ($3 % 3) ? 0 : 1; int shift = -intlog2 ((dots) ? ($3*2/3) : $3); @@ -1091,7 +1092,7 @@ Generic_prefix_music: SCM args = scm_cddr ($1); SCM sig = scm_object_property (func, ly_symbol2scm ("music-function-signature")); - SCM type_check_proc = ly_scheme_function ("type-check-list"); + SCM type_check_proc = ly_lily_module_constant ("type-check-list"); bool ok = true; if (!to_boolean (scm_call_3 (type_check_proc, scm_cadr ($1), sig, args))) @@ -1102,7 +1103,8 @@ Generic_prefix_music: SCM m = SCM_EOL; if (ok) - m = scm_apply_0 (func, scm_cdr ($1)); + m = scm_apply_0 (func, scm_cons (THIS->self_scm(), + scm_cdr ($1))); if (unsmob_music (m)) { @@ -1336,7 +1338,7 @@ re_rhythmed_music: context_change: CHANGE STRING '=' STRING { - Music*t= MY_MAKE_MUSIC ("ContextChange"); + Music*t = MY_MAKE_MUSIC ("ContextChange"); t-> set_property ("change-to-type", scm_string_to_symbol ($2)); t-> set_property ("change-to-id", $4); @@ -1605,7 +1607,7 @@ chord_body_element: add_quote: ADDQUOTE string Music { - SCM adder = ly_scheme_function ("add-quotable"); + SCM adder = ly_lily_module_constant ("add-quotable"); scm_call_2 (adder, $2, $3->self_scm ()); scm_gc_unprotect_object ($3->self_scm ()); @@ -1659,7 +1661,7 @@ command_element: $$->set_spot (THIS->here_input ()); } | '|' { - SCM pipe =THIS->lexer_->lookup_identifier ("pipeSymbol"); + SCM pipe = THIS->lexer_->lookup_identifier ("pipeSymbol"); if (Music * m = unsmob_music (pipe)) $$ = m->clone (); @@ -1697,21 +1699,21 @@ command_element: $$ = p; } | CLEF STRING { - SCM proc = ly_scheme_function ("make-clef-set"); + SCM proc = ly_lily_module_constant ("make-clef-set"); SCM result = scm_call_1 (proc, $2); scm_gc_protect_object (result); $$ = unsmob_music (result); } | TIME_T fraction { - SCM proc= ly_scheme_function ("make-time-signature-set"); + SCM proc = ly_lily_module_constant ("make-time-signature-set"); SCM result = scm_apply_2 (proc, scm_car ($2), scm_cdr ($2), SCM_EOL); scm_gc_protect_object (result); $$ = unsmob_music (result); } | MARK scalar { - SCM proc = ly_scheme_function ("make-mark-set"); + SCM proc = ly_lily_module_constant ("make-mark-set"); SCM result = scm_call_1 (proc, $2); scm_gc_protect_object (result); @@ -1731,12 +1733,12 @@ command_req: $$ = $1; } | KEY DEFAULT { - Music *key= MY_MAKE_MUSIC ("KeyChangeEvent"); + Music *key = MY_MAKE_MUSIC ("KeyChangeEvent"); $$ = key; } | KEY NOTENAME_PITCH SCM_IDENTIFIER { - Music *key= MY_MAKE_MUSIC ("KeyChangeEvent"); + Music *key = MY_MAKE_MUSIC ("KeyChangeEvent"); if (scm_ilength ($3) > 0) { key->set_property ("pitch-alist", $3); @@ -2099,12 +2101,12 @@ tremolo_type: bass_number: DIGIT { $$ = scm_number_to_string (scm_int2num ($1), scm_int2num (10)); - $$ = scm_list_2 (ly_scheme_function ("number-markup"), + $$ = scm_list_2 (ly_lily_module_constant ("number-markup"), $$); } | UNSIGNED { $$ = scm_number_to_string (scm_int2num ($1), scm_int2num (10)); - $$ = scm_list_2 (ly_scheme_function ("number-markup"), + $$ = scm_list_2 (ly_lily_module_constant ("number-markup"), $$); } | STRING { $$ = $1; } @@ -2266,7 +2268,7 @@ simple_element: | MULTI_MEASURE_REST optional_notemode_duration { THIS->pop_spot (); - SCM proc = ly_scheme_function ("make-multi-measure-rest"); + SCM proc = ly_lily_module_constant ("make-multi-measure-rest"); SCM mus = scm_call_2 (proc, $2, make_input (THIS->here_input ())); scm_gc_protect_object (mus); @@ -2462,57 +2464,90 @@ questions: | questions '?' { $$ ++; } ; - +/* +This should be done more dynamically if possible. +*/ full_markup: MARKUP_IDENTIFIER { $$ = $1; - } + } | MARKUP { THIS->lexer_->push_markup_state (); } - markup - { $$ = $3; - THIS->lexer_->pop_state (); - } + markup_top { + $$ = $3; + THIS->lexer_->pop_state (); + } ; +markup_top: + markup_list { + $$ = scm_list_2 (ly_lily_module_constant ("line-markup"), $1); + } + | markup_head_1_list simple_markup { + $$ = scm_car (scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, scm_list_1 ($2))); + } + | simple_markup { + $$ = $1; + } + ; -/* -This should be done more dynamically if possible. -*/ -markup: - STRING { - $$ = make_simple_markup (THIS->lexer_->encoding (), $1); +markup_list: + markup_composed_list { + $$ = $1; } - | MARKUP_HEAD_EMPTY { - $$ = scm_list_1 ($1); + | markup_braced_list { + $$ = $1; } - | MARKUP_HEAD_MARKUP0 markup { - $$ = scm_list_2 ($1, $2); + ; + +markup_composed_list: + markup_head_1_list markup_braced_list { + $$ = scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, $2); + } - | MARKUP_HEAD_MARKUP0_MARKUP1 markup markup { - $$ = scm_list_3 ($1, $2, $3); + ; + +markup_braced_list: + '{' markup_braced_list_body '}' { + $$ = scm_reverse_x ($2, SCM_EOL); } - | MARKUP_HEAD_SCM0_MARKUP1 SCM_T markup { - $$ = scm_list_3 ($1, $2, $3); + ; + +markup_braced_list_body: + /* empty */ { $$ = scm_list (SCM_EOL); } + | markup_braced_list_body markup { + $$ = scm_cons ($2, $1); } - | markup_line { - $$ = $1; + | markup_braced_list_body markup_list { + $$ = scm_append_x (scm_list_2 (scm_reverse_x ($2, SCM_EOL), $1)); } - | MARKUP_HEAD_LIST0 markup_list { - $$ = scm_list_2 ($1,$2); + ; + +markup_head_1_item: + MARKUP_HEAD_MARKUP0 { + $$ = scm_list_1 ($1); } - | MARKUP_HEAD_SCM0 embedded_scm { + | MARKUP_HEAD_SCM0_MARKUP1 embedded_scm { $$ = scm_list_2 ($1, $2); } - | MARKUP_HEAD_SCM0_SCM1_MARKUP2 embedded_scm embedded_scm markup { - $$ = scm_list_4 ($1, $2, $3, $4); + | MARKUP_HEAD_SCM0_SCM1_MARKUP2 embedded_scm embedded_scm { + $$ = scm_list_3 ($1, $2, $3); } - | MARKUP_HEAD_SCM0_SCM1_SCM2 embedded_scm embedded_scm embedded_scm { - $$ = scm_list_4 ($1, $2, $3, $4); + ; + +markup_head_1_list: + markup_head_1_item { + $$ = scm_list_1 ($1); } - | MARKUP_HEAD_SCM0_SCM1 embedded_scm embedded_scm { - $$ = scm_list_3 ($1, $2, $3); + | markup_head_1_list markup_head_1_item { + $$ = scm_cons ($2, $1); + } + ; + +simple_markup: + STRING { + $$ = make_simple_markup (THIS->lexer_->encoding (), $1); } | MARKUP_IDENTIFIER { $$ = $1; @@ -2525,32 +2560,39 @@ markup: THIS->lexer_->push_note_state (alist_to_hashq (nn)); } '{' score_body '}' { Score * sc = $4; - $$ = scm_list_2 (ly_scheme_function ("score-markup"), sc->self_scm ()); + $$ = scm_list_2 (ly_lily_module_constant ("score-markup"), sc->self_scm ()); scm_gc_unprotect_object (sc->self_scm ()); THIS->lexer_->pop_state (); } + | MARKUP_HEAD_SCM0 embedded_scm { + $$ = scm_list_2 ($1, $2); + } + | MARKUP_HEAD_SCM0_SCM1_SCM2 embedded_scm embedded_scm embedded_scm { + $$ = scm_list_4 ($1, $2, $3, $4); + } + | MARKUP_HEAD_SCM0_SCM1 embedded_scm embedded_scm { + $$ = scm_list_3 ($1, $2, $3); + } + | MARKUP_HEAD_EMPTY { + $$ = scm_list_1 ($1); + } + | MARKUP_HEAD_LIST0 markup_list { + $$ = scm_list_2 ($1,$2); + } + | MARKUP_HEAD_MARKUP0_MARKUP1 markup markup { + $$ = scm_list_3 ($1, $2, $3); + } ; - -markup_list: - chord_open markup_list_body chord_close { $$ = scm_reverse_x ($2, SCM_EOL); } - ; - -markup_line: - '{' markup_list_body '}' { - SCM line = ly_scheme_function ("line-markup"); - $$ = scm_list_2 (line, scm_reverse_x ($2, SCM_EOL)); +markup: + markup_head_1_list simple_markup { + $$ = scm_car (scm_call_2 (ly_lily_module_constant ("map-markup-command-list"), $1, scm_list_1 ($2))); } - ; - -markup_list_body: - /**/ { $$ = SCM_EOL; } - | markup_list_body markup { - $$ = scm_cons ($2, $1); + | simple_markup { + $$ = $1; } ; - %% void