(parser, @3, $3),
$1, $2);
}
- | function_arglist_nonbackup_reparse REPARSE duration_length
+ | function_arglist_nonbackup_reparse REPARSE multiplied_duration
{
$$ = check_scheme_arg (parser, @3, $3, $1, $2);
}
$$ = check_scheme_arg (parser, @3,
$3, $1, $2);
}
- | function_arglist_backup REPARSE duration_length
+ | function_arglist_backup REPARSE multiplied_duration
{
$$ = check_scheme_arg (parser, @3,
$3, $1, $2);
$$ = check_scheme_arg (parser, @3,
$3, $1, $2);
}
- | function_arglist_common_reparse REPARSE duration_length
+ | function_arglist_common_reparse REPARSE multiplied_duration
{
$$ = check_scheme_arg (parser, @3,
$3, $1, $2);
| '-' { $$ = SCM_UNDEFINED; }
;
-duration_length:
- multiplied_duration {
- $$ = $1;
- }
- ;
-
maybe_notemode_duration:
{
$$ = SCM_UNDEFINED;
;
multiplied_duration:
- steno_duration {
- $$ = $1;
- }
- | multiplied_duration '*' UNSIGNED {
- $$ = unsmob<Duration> ($$)->compressed (scm_to_int ($3)).smobbed_copy ();
- }
- | multiplied_duration '*' FRACTION {
- Rational m (scm_to_int (scm_car ($3)), scm_to_int (scm_cdr ($3)));
-
- $$ = unsmob<Duration> ($$)->compressed (m).smobbed_copy ();
+ steno_duration multipliers {
+ if (scm_is_number ($2)) {
+ Rational m (ly_scm2rational ($2));
+ $$ = unsmob<Duration> ($1)->compressed (m).smobbed_copy ();
+ } else
+ $$ = $1;
}
;
}
;
+multipliers:
+ /* empty */
+ {
+ $$ = SCM_UNDEFINED;
+ }
+ | multipliers '*' UNSIGNED
+ {
+ if (!SCM_UNBNDP ($1))
+ $$ = scm_product ($1, $3);
+ else
+ $$ = $3;
+ }
+ | multipliers '*' FRACTION
+ {
+ if (!SCM_UNBNDP ($1))
+ $$ = scm_product ($1, scm_divide (scm_car ($3),
+ scm_cdr ($3)));
+ else
+ $$ = scm_divide (scm_car ($3), scm_cdr ($3));
+ }
+ ;
+
tremolo_type:
':' {
$$ = scm_from_int (parser->default_tremolo_type_);
n->set_property ("pitch", simple);
return n->unprotect ();
}
+ SCM d = simple;
+ if (scm_is_integer (simple))
+ d = make_duration (simple);
+ if (unsmob<Duration> (d)) {
+ Music *n = MY_MAKE_MUSIC ("NoteEvent", loc);
+ n->set_property ("duration", d);
+ return n->unprotect ();
+ }
return simple;
} else if (parser->lexer_->is_lyric_state ()) {
if (Text_interface::is_markup (simple))