source file of the LilyPond music typesetter
- (c) 1996,1997 Han-Wen Nienhuys <hanwen@stack.nl>
+ (c) 1996,1997 Han-Wen Nienhuys <hanwen@cs.uu.nl>
*/
#include "string.hh"
#include "string-convert.hh"
#include "my-lily-lexer.hh"
-#include "varray.hh"
+#include "array.hh"
#include "interval.hh"
#include "parser.hh"
#include "debug.hh"
void strip_trailing_white (String&);
void strip_leading_white (String&);
-
#define start_quote() \
yy_push_state (quote);\
yylval.string = new String
#define yylval (*(YYSTYPE*)lexval_l)
#define YY_USER_ACTION add_lexed_char (YYLeng ());
+/*
+
+LYRICS ({AA}|{TEX})[^0-9 \t\n\f]*
+
+*/
+
%}
%option c++
INT -?{UNSIGNED}
REAL ({INT}\.{N}*)|(-?\.{N}+)
KEYWORD \\{WORD}
-WHITE [ \n\t\f]
+WHITE [ \n\t\f\r]
HORIZONTALWHITE [ \t]
-BLACK [^ \n\t\f]
+BLACK [^ \n\t\f\r]
RESTNAME [rs]
NOTECOMMAND \\{A}+
LYRICS ({AA}|{TEX})[^0-9 \t\n\f]*
yy_pop_state ();
}
<<EOF>> {
- LexerError ("EOF found inside a comment");
+ LexerError (_ ("EOF found inside a comment").ch_C ());
if (! close_input ())
yyterminate (); // can't move this, since it actually rets a YY_NULL
}
new_input (s,source_global_l);
yy_pop_state ();
}
+<incl>\\{BLACK}*;?{WHITE} { /* got the include identifier */
+ String s = YYText () + 1;
+ strip_trailing_white (s);
+ if (s.length_i () && (s[s.length_i () - 1] == ';'))
+ s = s.left_str (s.length_i () - 1);
+ DOUT << "#include `\\" << s << "'\n";
+ Identifier * id = lookup_identifier (s);
+ if (id)
+ {
+ String* s_l = id->access_content_String (false);
+ DOUT << "#include `" << *s_l << "\'\n";
+ new_input (*s_l, source_global_l);
+
+ yy_pop_state ();
+ }
+ else
+ {
+ String msg (_f ("undefined identifier: `%s\'", s ));
+ LexerError (msg.ch_C ());
+ }
+}
<incl>\"[^"]* { // backup rule
- cerr << "missing end quote" << endl;
+ cerr << _ ("missing end quote") << endl;
exit (1);
}
<notes>{RESTNAME} {
<INITIAL,lyrics,notes>\\\${BLACK}*{WHITE} {
String s=YYText () + 2;
s=s.left_str (s.length_i () - 1);
- return scan_escaped_word (s);
+ return scan_escaped_word (s);
}
<INITIAL,lyrics,notes>\${BLACK}*{WHITE} {
String s=YYText () + 1;
return scan_bare_word (s);
}
<INITIAL,lyrics,notes>\\\${BLACK}* { // backup rule
- cerr << "white expected" << endl;
+ cerr << _ ("white expected") << endl;
exit (1);
}
<INITIAL,lyrics,notes>\${BLACK}* { // backup rule
- cerr << "white expected" << endl;
+ cerr << _ ("white expected") << endl;
exit (1);
}
<notes>{
- {ALPHAWORD}/\' {
- post_quotes_b_ = true;
- return scan_bare_word (YYText ());
- }
- \'+ {
- yylval.i = YYLeng ();
- if (post_quotes_b_) {
- post_quotes_b_ = false;
- return POST_QUOTES;
- } else
- return PRE_QUOTES;
- }
+
{ALPHAWORD} {
return scan_bare_word (YYText ());
}
{NOTECOMMAND} {
- return scan_escaped_word (YYText ()+1);
+ return scan_escaped_word (YYText () + 1);
}
{DIGIT} {
}
<quote>{
\\{ESCAPED} {
- *yylval.string += escaped_char(YYText()[1]);
+ *yylval.string += to_str (escaped_char(YYText()[1]));
}
[^\\"]+ {
*yylval.string += YYText ();
return UNSIGNED;
}
{NOTECOMMAND} {
- return scan_escaped_word (YYText ()+1);
+ return scan_escaped_word (YYText () + 1);
}
{LYRICS} {
/* ugr. This sux. */
return scan_bare_word (YYText ());
}
{KEYWORD} {
- return scan_escaped_word (YYText ()+1);
+ return scan_escaped_word (YYText () + 1);
}
{REAL} {
Real r;
}
<*>. {
- String msg= String ("illegal character: ") +String (YYText ()[0]);
+ String msg = _f ("illegal character: `%c\'", YYText ()[0]);
LexerError (msg.ch_C ());
return YYText ()[0];
}
return id->token_code_i_;
}
if (YYSTATE != notes) {
- Melodic_req * mel_l = lookup_melodic_req_l (str);
- if (mel_l) {
- DOUT << "(notename)\n";
- yylval.melreq = mel_l;
- mel_l->set_spot (Input (source_file_l (), here_ch_C ()));
- return NOTENAME_ID;
- }
+ if (notename_b (str))
+ {
+ yylval.pitch = new Musical_pitch (lookup_pitch (str));
+ yylval.pitch->set_spot (Input (source_file_l (),
+ here_ch_C ()));
+ return NOTENAME_PITCH;
+ }
}
- String msg ("Unknown escaped string: `" + str + "'");
+ if (check_debug)
+ print_declarations (true);
+ String msg (_f ("unknown escaped string: `\\%s\'", str));
LexerError (msg.ch_C ());
DOUT << "(string)";
String *sp = new String (str);
{
DOUT << "word: `" << str<< "'\n";
if (YYSTATE == notes){
- Melodic_req * mel_l = lookup_melodic_req_l (str);
- if (mel_l) {
+ if (notename_b (str)) {
DOUT << "(notename)\n";
- yylval.melreq = mel_l;
- mel_l->set_spot (Input (source_file_l (), here_ch_C ()));
- return NOTENAME_ID;
+ yylval.pitch = new Musical_pitch (lookup_pitch (str));
+ yylval.pitch->set_spot (Input (source_file_l (),
+ here_ch_C ()));
+ return NOTENAME_PITCH;
}
}
return YY_START == lyrics;
}
+/*
+ urg, belong to String(_convert)
+ and should be generalised
+ */
void
-strip_trailing_white (String&s)
+strip_leading_white (String&s)
{
int i=0;
for (; i < s.length_i (); i++)
}
void
-strip_leading_white (String&s)
+strip_trailing_white (String&s)
{
int i=s.length_i ();
while (i--)
s = s.left_str (i+1);
}
+