=head1 NAME LilyInput - LilyPond input format =head1 DESCRIPTION This page documents the the LilyPond input format, mudela. =head2 Overview General format of a construct: BLOCKNAME { } Some types allow declarations: IDENTIFIER = BLOCKNAME { } .. BLOCKNAME { IDENTIFIER ... } In musicmode, eg, ''!c8.-"text"_v a lot of characters parse differently than in "command" mode, eg, identifier = score { .. } So you have to signal that to the tokenizer. This is done with '$'. '$' is a delimiter, which used by the tokenizer only. =item * musicmode: The brace still is used to group grammatical groups. =item * musicmode: "word" are preceded by a '\' (backslash) This means you can write some stuff in a zillion ways: =item 1. $\var = \blockname { ... } $ =item 2. var = blockname { $ ... $ } =item 3. var = $ $ $\blockname { ... $ } =head2 Comments Not really crystallized; you can use '#' or '%' as line comment =head2 other A correctly parsed .ly does not guarantuee output. A lot (most) of the checking is done B parsing (some checks even are done after the break calc!); I'm sorry. The parser's job is to construct appropriate objects. It will *only* detect parse errors. LilyPond first reads 'symbol.ini', which contains declarations crucial to proper operation of LilyPond (symbol tables, note names). This language looks a lot like Rayce's which in turn owes a lot to the POVRay raytracer. Now, I know, musictypesetting and Raytracing do not necessarily require the same input format, but I was just to lazy to make up a new and/or better input format. Suggestions welcome.