-%{ // -*- mode: c++; c-file-style: "linux" -*-
+%{ // -*- mode: c++; c-file-style: "linux"; indent-tabs-mode: t -*-
/*
This file is part of LilyPond, the GNU music typesetter.
yylval = SCM_EOL; \
} while (0)
-#define start_lyric_quote() do { \
- yy_push_state (lyric_quote); \
- yylval = SCM_EOL; \
- } while (0)
-
#define yylval (*lexval_)
#define yylloc (*lexloc_)
%x figures
%x incl
%x lyrics
-%x lyric_quote
%x longcomment
%x markup
%x notes
AA {A}|_
N [0-9]
ANY_CHAR (.|\n)
-PUNCT [][()?!:'`]
-SPECIAL_CHAR [&@]
-NATIONAL [\001-\006\021-\027\031\036]
-TEX {AA}|-|{PUNCT}|{NATIONAL}|{SPECIAL_CHAR}
WORD {A}([-_]{A}|{A})*
COMMAND \\{WORD}
HORIZONTALWHITE [ \t]
BLACK [^ \n\t\f\r]
RESTNAME [rs]
-LYRICS ({AA}|{TEX})[^0-9 \t\n\r\f]*
-ESCAPED [nt\\'"]
+ESCAPED [nt\\''""]
EXTENDER __
HYPHEN --
BOM_UTF8 \357\273\277
<INITIAL,chords,lyrics,notes,figures>\\sourcefileline{WHITE}* {
yy_push_state (sourcefileline);
}
-<version>\"[^"]*\" { /* got the version number */
+<version>\"[^""]*\" { /* got the version number */
string s (YYText_utf8 () + 1);
s = s.substr (0, s.rfind ('\"'));
if (!is_main_input_)
{
start_main_input ();
+ main_input_level_ = include_stack_.size ();
is_main_input_ = true;
}
else
}
}
-<quote,lyric_quote>{
+<quote>{
\\{ESCAPED} {
char c = escaped_char (YYText ()[1]);
yylval = scm_cons (scm_from_locale_stringn (&c, 1),
SCM_UNDEFINED,
SCM_UNDEFINED);
- return is_lyric_state () ? LYRICS_STRING : STRING;
+ return STRING;
}
\\ {
yylval = scm_cons (scm_from_locale_string (YYText ()),
<lyrics>{
\" {
- start_lyric_quote ();
+ start_quote ();
}
{FRACTION} {
yylval = scan_fraction (YYText ());
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
}
- {LYRICS} {
+ /* Characters needed to express durations, assignments, barchecks */
+ [*.=|] {
+ yylval = SCM_UNSPECIFIED;
+ return YYText ()[0];
+ }
+ [^$#{}\"\\ \t\n\r\f0-9]+ {
/* ugr. This sux. */
string s (YYText_utf8 ());
yylval = SCM_UNSPECIFIED;
if (s == "--")
return HYPHEN;
s = lyric_fudge (s);
-
- char c = s[s.length () - 1];
- if (c == '{' || c == '}') // brace open is for not confusing dumb tools.
- here_input ().warning (
- _ ("Brace found at end of lyric. Did you forget a space?"));
yylval = ly_string2scm (s);
-
- return LYRICS_STRING;
+ return STRING;
}
+ /* This should really just cover {} */
. {
yylval = SCM_UNSPECIFIED;
- return YYText ()[0]; // LYRICS already catches all multibytes.
+ return YYText ()[0]; // above catches all multibytes.
}
}
<chords>{
}
return token_type;
}
- [{}] {
- yylval = SCM_UNSPECIFIED;
- return YYText ()[0];
- }
[^$#{}\"\\ \t\n\r\f]+ {
string s (YYText_utf8 ());
}
. {
yylval = SCM_UNSPECIFIED;
- return YYText()[0]; // Above is catchall for multibyte
+ return YYText ()[0]; // Above is catchall for multibyte
}
}
yylval = SCM_UNSPECIFIED;
if (is_main_input_)
{
- /* 2 = init.ly + current file.
- > because we're before closing, but is_main_input_ should
- reflect after.
- */
- is_main_input_ = include_stack_.size () > 2;
+ is_main_input_ = include_stack_.size () > main_input_level_;
+ if (!is_main_input_)
+ main_input_level_ = 0;
if (!close_input () || !is_main_input_)
/* Returns YY_NULL */
yyterminate ();
yylval = SCM_UNSPECIFIED;
int i = lookup_keyword (str);
- if (i == MARKUP && is_lyric_state ())
- return LYRIC_MARKUP;
+
if (i != -1)
return i;