s = lyric_fudge (s);
yylval = ly_string2scm (s);
- return STRING;
+ return WORD;
}
/* This should really just cover {} */
[{}] {
string s (YYText_utf8 ());
yylval = ly_string2scm (s);
- return STRING;
+ return WORD;
}
[{}] {
yylval = SCM_UNSPECIFIED;
yylval = ly_string2scm (str);
- return STRING;
+ return STRING; // WORD would cause additional processing
}
int
}
int
-Lily_lexer::scan_bare_word (const string &str)
+Lily_lexer::scan_word (SCM & output, SCM sym)
{
- SCM sym = ly_symbol2scm (str.c_str ());
if ((YYSTATE == notes) || (YYSTATE == chords)) {
SCM handle = SCM_BOOL_F;
if (scm_is_pair (pitchname_tab_stack_))
handle = scm_hashq_get_handle (scm_cdar (pitchname_tab_stack_), sym);
if (scm_is_pair (handle)) {
- yylval = scm_cdr (handle);
+ output = scm_cdr (handle);
if (unsmob<Pitch> (yylval))
return (YYSTATE == notes) ? NOTENAME_PITCH : TONICNAME_PITCH;
else if (scm_is_symbol (yylval))
else if ((YYSTATE == chords)
&& scm_is_true (handle = scm_hashq_get_handle (chordmodifier_tab_, sym)))
{
- yylval = scm_cdr (handle);
+ output = scm_cdr (handle);
return CHORD_MODIFIER;
}
}
+ output = SCM_UNDEFINED;
+ return -1;
+}
+
+int
+Lily_lexer::scan_bare_word (const string &str)
+{
+ int state = scan_word (yylval, ly_symbol2scm (str.c_str ()));
+ if (state >= 0)
+ {
+ return state;
+ }
yylval = ly_string2scm (str);
- return STRING;
+ return WORD;
}
int