#include "string.hh"
#include "notename.hh"
#include "lexer.hh"
-#include "vray.hh"
+#include "varray.hh"
#include "parser.hh"
#include "debug.hh"
WORD {A}{AN}*
ALPHAWORD {A}+
INT -?{N}+
-REAL {INT}(\.{N}*)?
+REAL {INT}?(\.{N}*)?
OPTSIGN !?
PITCHMOD ['`]*{OPTSIGN}
yylval.i = String(YYText()).value();
return INT;
}
-<notes>\| {
-}
<notes>[%#].*\n {
}
return YYText()[0];
}
-<notes>[\[)] { /* parens () are NO mistake */
- yylval.c = YYText()[0];
- return OPEN_REQUEST_PARENS;
-}
-<notes>[\](] { /* parens () are NO mistake */
- yylval.c = YYText()[0];
- return CLOSE_REQUEST_PARENS;
-}
<notes>\"[^\"]*\" {
String s (YYText()+1);
s = s.left(s.len()-1);
yylval.string = new String(s);
return STRING;
}
-<notes>[/.^>_-] {
+<notes>[()\[\]|/.^>_-] {
return yylval.c = YYText()[0];
}
#include "voice.hh"
#include "notename.hh"
#include "identparent.hh"
-#include "vray.hh"
+#include "varray.hh"
#include "textdef.hh"
int default_duration = 4, default_dots=0, default_octave=0;
{
Request* ret=0;
switch (c) {
+ case '|':
+ ret = new Barcheck_req;
+ break;
case '[':
case ']':
{
case ']':
ret->span()->spantype = Span_req::STOP;
break;
+
default:
- assert(false);
+
break;
}
}
void
-add_requests(Voice_element *v, svec<Request*> &req)
+add_requests(Voice_element *v, Array<Request*> &req)
{
- for (int i = 0; i < req.sz(); i++) {
+ for (int i = 0; i < req.size(); i++) {
v->add(req[i]);
}
req.set_size(0);
break;
case '+' : s = "stopped";
break;
- case '-' : s = "portato";
+ case '-' : s = "tenuto";
break;
case '|': s = "staccatissimo";
break;
#include "timedescription.hh"
#include "debug.hh"
+String
+Time_description::str()const
+{
+ String s( "Time_description { at ");
+ s+=when;
+ s+="\nmeter " + String(whole_per_measure/one_beat) +":" +(1/one_beat);
+ s+= "\nposition "+String( bars) + ":"+ whole_in_measure +"\n}\n";
+ return s;
+}
void
Time_description::print() const
{
- mtor << "Time_description { at "<<when<<'\n';
- mtor << "meter " << whole_per_measure << ":" << 1/one_beat
- << "\nposition "<< bars << ":" << whole_in_measure <<"\n}\n";
+ mtor << str();
}
void
Time_description::OK() const
{
+#ifdef NDEBUG
assert(whole_in_measure < whole_per_measure && 0 <= whole_in_measure);
assert(one_beat);
+#endif
}
+
Time_description::Time_description(Moment dt, Time_description const *prev)
{
if (prev) {
- assert(dt >0);
+ assert(dt >= 0);
*this = *prev;
when += + dt;
whole_in_measure += dt;
error_t ("Partial measure has incorrect size", when);
whole_in_measure = whole_per_measure - p;
}
+
Moment
Time_description::barleft()
{
-return whole_per_measure-whole_in_measure;
+ return whole_per_measure-whole_in_measure;
+}
+
+int
+Time_description::compare(Time_description &t1, Time_description&t2)
+{
+ int i = sign(t1.when-t2.when);
+
+ if (!i) {
+ assert(t1.bars==t2.bars);
+ assert(t1.one_beat == t2.one_beat);
+ assert(t1.whole_in_measure == t2.whole_in_measure);
+ assert(t1.whole_per_measure == t2.whole_per_measure);
+ }
+
+ return i;
}
--- /dev/null
+\def\thetitle{}
+\def\thecomposer{}
+\def\theinstrument{}
+\def\title#1{\def\thetitle{#1}}
+\def\composer#1{\def\thecomposer{#1}}
+\def\instrument#1{\def\theinstrument{#1}}
+
+\def\maketit{
+ \begin{center}
+ {\Large\bfseries\thetitle}\\
+ \vskip12pt
+ {\bfseries\theinstrument}\hfill{\scshape\thecomposer}
+ \end{center}
+ \bigskip
+ }
\ No newline at end of file