So how might it look using "key=value" and still trying to be easy to parse,
backward compatible, etc.  Again I'm going to write examples +explanation
rather than BNF because I feel it helps debate at this stage.

% In file header (ONLY in file header so as to keep BarFly happy)
Q:Allegro con moto=130
Q:Allegro = 120
Q:Skipping =105
Q:tres lentement= 40  % je n'ai pas d'accent grave ici, je m'excuse

%In tune header or in tune itself
M:beat=1/4
Q:Allegro

M:beat=3/8
Q:skipping

In the definition form of Q: it must occur in the file header and the first
thing after Q: is not a number.  For backward compatibility the thing
defined must not be a single letter (because
Q:C=130
already has a meaning.
After that everything up to = is the name of the thing to be defined.  It
can contain any character except linend, % or =.  [Open question do we take
the escape and allow "\%", "\=", "\n" and "\\" to represent "%", "=", linend
and "\" ?  It gives complete freedom of what we can write, but it dirties up
the parsing for little real gain].
For future discussion I will refer to the parts as
Q:<TempoName>=<TempoValue>
Note that old software will probably barf because it looks nothing like an
old Q: line, but so what?  It's meaning is also nothing like an old Q:.

TempoName is to be case insensitive (so that QUICK, quick and Quick, or even
qUIcK all represent the same name).  Any leading or trailing blanks are to
be discarded, otherwise no changes are allowed, so "con moto" is *not* the
same as "con    moto".

TempoValue is always to be a single number which is the number of beats per
minute.  This is apparently a regression towards the older style (like
Q:120) as opposed to the newer style (like Q:1/4=120), but now M:beat=3/8 is
introduced.  This allows 120 to mean "Allegro" whether the piece is in 6/8,
4/4, 2/4, 2/2, or whatever.  [Open question - should there be a default if
no "beat" is defined or should the program barf and complain that Q:quick is
meaningless without a beat?]

(I thought of the syntax Q:name="Allegro con moto" value="130" but I
rejected it).


Actions to be taken by programs [sorry!  sorry! "what the notations really
mean"].
These are for tune header or tune body only:

Q:Allegro
Player programs start playing at the previously defined Allegro rate.
Printing programs print Allegro.  <weasel words here to explain that I
really want to describe meanings not actions, but it was easier and shorter
that way>

Q:display=Quasi allegro
Player programs take no action, printing programs print "Quasi allegro"

Q:1/4=60 display=Allegro
Player programs play at 1/4=60, printers print Allegro <looks like beat
=1/8>

Q:1/4=60 display=
Player programs play at 1/4=60, printers don't do anything.

Q:1/4=60
Player programs play at 1/4=60, printers print something sensible e.g. .|=60

Q:Allegretto display=very slowly
Yes, it's silly but it's impossible to ban it.

That's probably enough to argue about.  If it seems to be acceptable then we
can cook up some more formal syntax.

Laurie

To subscribe/unsubscribe, point your browser to: http://www.tullochgorm.com/lists.html

Reply via email to