FRACTION {N}+\/{N}+
INT -?{UNSIGNED}
REAL ({INT}\.{N}*)|(-?\.{N}+)
+STRICTREAL {UNSIGNED}\.{UNSIGNED}
WHITE [ \n\t\f\r]
HORIZONTALWHITE [ \t]
BLACK [^ \n\t\f\r]
yy_push_state (state);
}
else
- error (_ ("\\maininput not allowed outside init files"));
+ LexerError (_ ("\\maininput not allowed outside init files").c_str ());
}
<INITIAL,chords,lyrics,figures,notes>\\include {
}
<incl,version,sourcefilename>\"[^""]* { // backup rule
- error (_ ("end quote missing"));
- exit (1);
+ LexerError (_ ("end quote missing").c_str ());
+ yy_pop_state ();
}
/* Flex picks the longest matching pattern including trailing
yylval = scan_fraction (YYText ());
return FRACTION;
}
- {UNSIGNED}/\/ | // backup rule
- {UNSIGNED} {
+ {STRICTREAL} {
+ yylval = scm_c_read_string (YYText ());
+ return REAL;
+ }
+ {UNSIGNED}/[/.] | // backup rule
+ {UNSIGNED} {
yylval = scm_c_read_string (YYText ());
return UNSIGNED;
}
yylval = scan_fraction (YYText ());
return FRACTION;
}
- {UNSIGNED}/\/ | // backup rule
+ {STRICTREAL} {
+ yylval = scm_c_read_string (YYText ());
+ return REAL;
+ }
+ {UNSIGNED}/[/.] | // backup rule
{UNSIGNED} {
yylval = scm_c_read_string (YYText ());
return UNSIGNED;
yyterminate ();
}
-<maininput>. {
+<maininput>{ANY_CHAR} {
while (include_stack_.size () > main_input_level_
&& close_input ())
;
return i;
SCM sid = lookup_identifier (str);
+ if (Music *m = unsmob_music (sid))
+ {
+ m->set_spot (override_input (last_input_));
+ }
+
if (sid != SCM_UNDEFINED)
return scan_scm_id (sid);
sval = scm_struct_ref (sval, SCM_INUM0);
if (scm_is_pair (sval)) {
- for (SCM v = scm_reverse (scm_cdr (sval));
- scm_is_pair (v);
- v = scm_cdr (v))
+ for (SCM p = scm_reverse (scm_cdr (sval));
+ scm_is_pair (p);
+ p = scm_cdr (p))
{
+ SCM v = scm_car (p);
+ if (Music *m = unsmob_music (v))
+ {
+ if (!unsmob_input (m->get_property ("origin")))
+ m->set_spot (override_input (last_input_));
+ }
+
int token;
switch (extra_token) {
case '$':
- token = scan_scm_id (scm_car (v));
+ token = scan_scm_id (v);
if (!scm_is_eq (yylval, SCM_UNSPECIFIED))
push_extra_token (token, yylval);
break;
case '#':
- push_extra_token (SCM_IDENTIFIER, scm_car (v));
+ push_extra_token (SCM_IDENTIFIER, v);
break;
}
}
sval = SCM_UNSPECIFIED;
}
+ if (Music *m = unsmob_music (sval))
+ {
+ if (!unsmob_input (m->get_property ("origin")))
+ m->set_spot (override_input (last_input_));
+ }
+
return sval;
}