Hi,
The attached patch cleans up music functions:
- functions can have any arity, and parameters can be mixed in any way.
- implementation: A music function generates a sequence of tokens, so e.g. a
(markup? music? scm?) function generates tokens MUSIC_FUNCTION EXPECT_SCM
EXPECT_MUSIC EXPECT_MARKUP. After that it's easy to write a grammar to parse
the argument list.
- there is still a restriction on 'event functions': A function can only be
applied to a post-event or chord-element if the function has exactly one
music parameter, and if that parameter is last. If this rule is violated,
there will be confusing parser errors ("unexpected EXPECT_MUSIC") due my
implementation, but I also added an error message which describes the problem
in English.