]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lexer.ll
* scm/define-music-types.scm (music-descriptions): remove
[lilypond.git] / lily / lexer.ll
index 2b887d0046b58ef940e2fa3623f54219c5f8c387..178ea88e97eb9d070e22359aa0458f2487158fab 100644 (file)
@@ -112,6 +112,7 @@ SCM (* scm_parse_error_handler) (void *);
 %x markup
 %x notes
 %x quote
+%x sourcefileline
 %x sourcefilename
 %x version
 
@@ -179,12 +180,21 @@ BOM_UTF8  \357\273\277
   }
 }
 
+<INITIAL,notes,figures,chords,markup>{
+       \"              {
+               start_quote ();
+       }
+}
+
 <INITIAL,chords,lyrics,notes,figures>\\version{WHITE}* {
        yy_push_state (version);
 }
 <INITIAL,chords,lyrics,notes,figures>\\sourcefilename{WHITE}*  {
        yy_push_state (sourcefilename);
 }
+<INITIAL,chords,lyrics,notes,figures>\\sourcefileline{WHITE}*  {
+       yy_push_state (sourcefileline);
+}
 <version>\"[^"]*\"     { /* got the version number */
        string s (YYText () + 1);
        s = s.substr (0, s.rfind ('\"'));
@@ -212,6 +222,16 @@ BOM_UTF8   \357\273\277
                     scm_makfrom0str (s.c_str ()));
 
 }
+
+<sourcefileline>{INT}  {
+       int i;
+       sscanf (YYText (), "%d", &i);
+
+//     this->set_debug (1); 
+       yy_pop_state ();
+       this->here_input ().get_source_file ()->set_line (here_input ().start (), i);
+}
+
 <version>.     {
        LexerError (_ ("quoted string expected after \\version").c_str ());
        yy_pop_state ();
@@ -220,6 +240,10 @@ BOM_UTF8   \357\273\277
        LexerError (_ ("quoted string expected after \\sourcefilename").c_str ());
        yy_pop_state ();
 }
+<sourcefileline>.      {
+       LexerError (_ ("integer expected after \\sourcefileline").c_str ());
+       yy_pop_state ();
+}
 <longcomment>{
        [^\%]*          {
        }
@@ -315,16 +339,26 @@ BOM_UTF8  \357\273\277
        }
                
        yylval.scm = sval;
-       return SCM_T;
+       return SCM_TOKEN;
 }
 <INITIAL,notes,lyrics>{ 
-       \<\<   {
+       \<\<    {
                return DOUBLE_ANGLE_OPEN;
        }
-       \>\>   {
+       \>\>    {
                return DOUBLE_ANGLE_CLOSE;
        }
 }
+
+<INITIAL,notes>{
+       \<      {
+               return ANGLE_OPEN;
+       }
+       \>      {
+               return ANGLE_CLOSE;
+       }
+}
+
 <figures>{
        _       {
                return FIGURE_SPACE;
@@ -362,36 +396,9 @@ BOM_UTF8   \357\273\277
                yylval.i = String_convert::dec2int (string (YYText () +1));
                return E_UNSIGNED;
        }
-       \" {
-               start_quote ();
-       }
-}
-
-\"             {
-       start_quote ();
 }
-<quote>{
-       \\{ESCAPED}     {
-               *yylval.string += to_string (escaped_char (YYText ()[1]));
-       }
-       [^\\"]+ {
-               *yylval.string += YYText ();
-       }
-       \"      {
-
-               yy_pop_state ();
 
-               /* yylval is union. Must remember STRING before setting SCM*/
-               string *sp = yylval.string;
-               yylval.scm = scm_makfrom0str (sp->c_str ());
-               delete sp;
-               return STRING;
-       }
-       .       {
-               *yylval.string += YYText ();
-       }
-}
-<lyric_quote>{
+<quote,lyric_quote>{
        \\{ESCAPED}     {
                *yylval.string += to_string (escaped_char (YYText ()[1]));
        }
@@ -406,7 +413,7 @@ BOM_UTF8    \357\273\277
                string *sp = yylval.string;
                yylval.scm = scm_makfrom0str (sp->c_str ());
                delete sp;
-               return LYRICS_STRING;
+               return is_lyric_state () ? LYRICS_STRING : STRING;
        }
        .       {
                *yylval.string += YYText ();
@@ -465,9 +472,6 @@ BOM_UTF8    \357\273\277
                yylval.i = String_convert::dec2int (string (YYText ()));
                return UNSIGNED;
        }
-       \" {
-               start_quote ();
-       }
        -  {
                return CHORD_MINUS;
        }
@@ -490,9 +494,6 @@ BOM_UTF8    \357\273\277
 
 
 <markup>{
-       \" {
-               start_quote ();
-       }
        \\score {
                return SCORE;
        }
@@ -550,7 +551,7 @@ BOM_UTF8    \357\273\277
        }
 }
 
-<<EOF>> {
+<*><<EOF>> {
        if (is_main_input_)
        {
                is_main_input_ = false;
@@ -912,7 +913,7 @@ static void init_signature_hash_table ()
        };
 
        for (int i = 0; sigs[i].symbol; i++)
-               scm_hashq_set_x (signature_hash_table, scm_gc_protect_object (ly_symbol2scm (sigs[i].symbol)),
+               scm_hashq_set_x (signature_hash_table, ly_symbol2scm (sigs[i].symbol),
                                 scm_from_int (sigs[i].token_type));
 }