That makes lyrics mode rather similar to markup mode regarding how
words are formed. {} are never considered part of words unless
enclosed in quotes. Unquoted words do not contain whitespace, braces,
quotes, backslashes, numbers or Scheme expressions. In addition, they
cannot start with * . = and | since that would mess with duration,
assignment and barcheck syntax. This removes some remaining
TeX-oriented cruft in the lexer. The set of word-non-starters might
need revisiting, but at least the regtests seem to pass.
AA {A}|_
N [0-9]
ANY_CHAR (.|\n)
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}
WORD {A}([-_]{A}|{A})*
COMMAND \\{WORD}
HORIZONTALWHITE [ \t]
BLACK [^ \n\t\f\r]
RESTNAME [rs]
HORIZONTALWHITE [ \t]
BLACK [^ \n\t\f\r]
RESTNAME [rs]
-LYRICS ({AA}|{TEX})[^0-9 \t\n\r\f]*
ESCAPED [nt\\'"]
EXTENDER __
HYPHEN --
ESCAPED [nt\\'"]
EXTENDER __
HYPHEN --
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
}
{COMMAND} {
return scan_escaped_word (YYText_utf8 () + 1);
}
+ /* 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;
/* ugr. This sux. */
string s (YYText_utf8 ());
yylval = SCM_UNSPECIFIED;
if (s == "--")
return HYPHEN;
s = lyric_fudge (s);
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);
yylval = ly_string2scm (s);
+ /* This should really just cover {} */
. {
yylval = SCM_UNSPECIFIED;
. {
yylval = SCM_UNSPECIFIED;
- return YYText ()[0]; // LYRICS already catches all multibytes.
+ return YYText ()[0]; // above catches all multibytes.
- [{}] {
- yylval = SCM_UNSPECIFIED;
- return YYText ()[0];
- }
[^$#{}\"\\ \t\n\r\f]+ {
string s (YYText_utf8 ());
[^$#{}\"\\ \t\n\r\f]+ {
string s (YYText_utf8 ());
}
. {
yylval = SCM_UNSPECIFIED;
}
. {
yylval = SCM_UNSPECIFIED;
- return YYText()[0]; // Above is catchall for multibyte
+ return YYText ()[0]; // Above is catchall for multibyte