]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lexer.ll
rename
[lilypond.git] / lily / lexer.ll
index 29e4d6367d0cd70557aa4964c90b6a2889d2710d..bca7f0a936b6f1db2a0fc3419de7bf77d38d6797 100644 (file)
@@ -4,7 +4,7 @@
 
   source file of the LilyPond music typesetter
 
-  (c) 1996--2004 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c) 1996--2005 Han-Wen Nienhuys <hanwen@cs.uu.nl>
            Jan Nieuwenhuizen <janneke@gnu.org>
 */
 
@@ -76,6 +76,9 @@ bool is_valid_version (String s);
 #define yylval \
        (*(YYSTYPE*)lexval)
 
+#define yylloc \
+       (*(YYLTYPE*)lexloc)
+
 #define YY_USER_ACTION add_lexed_char (YYLeng ());
 /*
 
@@ -101,13 +104,12 @@ SCM (* scm_parse_error_handler) (void *);
 %option warn
 
 %x chords
-%x encoding
 %x figures
 %x incl
 %x lyrics
 %x lyric_quote
 %x longcomment
-%x markup 
+%x markup
 %x notes
 %x quote
 %x renameinput
@@ -147,7 +149,7 @@ HYPHEN              --
        // windows-suck-suck-suck
 }
 
-<INITIAL,chords,incl,markup,lyrics,notes,figures>{
+<INITIAL,chords,figures,incl,lyrics,markup,notes>{
   "%{" {
        yy_push_state (longcomment);
   }
@@ -164,21 +166,12 @@ HYPHEN            --
   }
 }
 
-<INITIAL,lyrics,figures,notes>\\encoding{WHITE}* {
-       yy_push_state (encoding);
-}
 <INITIAL,chords,lyrics,notes,figures>\\version{WHITE}* {
        yy_push_state (version);
 }
 <INITIAL,chords,lyrics,notes,figures>\\renameinput{WHITE}*     {
        yy_push_state (renameinput);
 }
-<encoding>\"[^"]*\"     {
-       String s (YYText () + 1);
-       s = s.left_string (s.index_last ('\"'));
-       set_encoding (s);
-       yy_pop_state ();
-}
 <version>\"[^"]*\"     { /* got the version number */
        String s (YYText () + 1);
        s = s.left_string (s.index_last ('\"'));
@@ -186,6 +179,10 @@ HYPHEN             --
        yy_pop_state ();
        if (!is_valid_version (s))
                return INVALID;
+
+       SCM top_scope = scm_car (scm_last_pair (scopes_));
+       scm_module_define (top_scope, ly_symbol2scm ("version-seen?"), SCM_BOOL_T);
+
 }
 <renameinput>\"[^"]*\"     {
        String s (YYText () + 1);
@@ -193,23 +190,19 @@ HYPHEN            --
 
        yy_pop_state();
        this->here_input().source_file_->name_ = s;
-       progress_indication (_f ("Renaming input to: `%s'", s.to_str0 ()));
+       message (_f ("Renaming input to: `%s'", s.to_str0 ()));
        progress_indication ("\n");
        scm_module_define (scm_car (scopes_),
                     ly_symbol2scm ("input-file-name"),
                     scm_makfrom0str (s.to_str0 ()));
 
 }
-<encoding>.    {
-       LexerError (_ ("No quoted string found after \\encoding").to_str0 ());
-       yy_pop_state ();
-}
 <version>.     {
-       LexerError (_ ("No quoted string found after \\version").to_str0 ());
+       LexerError (_ ("quoted string expected after \\version").to_str0 ());
        yy_pop_state ();
 }
 <renameinput>.         {
-       LexerError (_ ("No quoted string found after \\renameinput").to_str0 ());
+       LexerError (_ ("quoted string expected after \\renameinput").to_str0 ());
        yy_pop_state ();
 }
 <longcomment>{
@@ -223,7 +216,7 @@ HYPHEN              --
        }
        <<EOF>>         {
                LexerError (_ ("EOF found inside a comment").to_str0 ());
-               main_input_b_ = false;
+               is_main_input_ = false;
                if (! close_input ()) 
                  yyterminate (); // can't move this, since it actually rets a YY_NULL
        }
@@ -231,10 +224,10 @@ HYPHEN            --
 
 
 <INITIAL,chords,lyrics,notes,figures>\\maininput           {
-       if (!main_input_b_)
+       if (!is_main_input_)
        {
                start_main_input ();
-               main_input_b_ = true;
+               is_main_input_ = true;
        }
        else
                error (_ ("\\maininput not allowed outside init files"));
@@ -270,7 +263,7 @@ HYPHEN              --
          }
 }
 <incl>\"[^"]*   { // backup rule
-       error (_ ("Missing end quote"));
+       error (_ ("end quote missing"));
        exit (1);
 }
 <chords,notes,figures>{RESTNAME}       {
@@ -281,12 +274,12 @@ HYPHEN            --
 <chords,notes,figures>R                {
        return MULTI_MEASURE_REST;
 }
-<INITIAL,markup,chords,lyrics,notes,figures>#  { //embedded scm
-       //char const* s = YYText () + 1;
-       char const* s = here_str0 ();
+<INITIAL,chords,figures,lyrics,markup,notes>#  { //embedded scm
        int n = 0;
-       SCM sval = ly_parse_scm (s, &n, here_input (),
-               safe_global_b && main_input_b_);
+       Input hi = here_input();
+       hi.step_forward ();
+       SCM sval = ly_parse_scm (hi.start_, &n, hi,
+               be_safe_global && is_main_input_);
 
        if (sval == SCM_UNDEFINED)
        {
@@ -514,7 +507,7 @@ HYPHEN              --
                        else if (tag == ly_symbol2scm ("scheme0-scheme1-scheme2"))
                                return MARKUP_HEAD_SCM0_SCM1_SCM2;
                        else {
-                               programming_error ("No parser tag defined for this signature. Abort"); 
+                               programming_error ("no parser tag defined for this signature"); 
                                ly_display_scm (s);
                                assert(false);
                        }
@@ -543,9 +536,9 @@ HYPHEN              --
 }
 
 <<EOF>> {
-       if (main_input_b_)
+       if (is_main_input_)
        {
-               main_input_b_ = false;
+               is_main_input_ = false;
                if (!close_input ())
                /* Returns YY_NULL */
                        yyterminate ();
@@ -596,9 +589,9 @@ HYPHEN              --
 
     switch (c) {
     case '>':
-       return E_BIGGER;
+       return E_ANGLE_CLOSE;
     case '<':
-       return E_SMALLER;
+       return E_ANGLE_OPEN;
     case '!':
        return E_EXCLAMATION;
     case '(':
@@ -606,9 +599,9 @@ HYPHEN              --
     case ')':
        return E_CLOSE;
     case '[':
-       return E_LEFTSQUARE;
+       return E_BRACKET_OPEN;
     case ']':
-       return E_RIGHTSQUARE;
+       return E_BRACKET_CLOSE;
     case '~':
        return E_TILDE;
     case '\\':
@@ -688,15 +681,16 @@ Lily_lexer::scan_escaped_word (String str)
 
 //     SCM sym = ly_symbol2scm (str.to_str0 ());
 
-       int l = lookup_keyword (str);
-       if (l != -1) {
-               return l;
-       }
+       int i = lookup_keyword (str);
+       if (i == MARKUP && is_lyric_state ())
+               return LYRIC_MARKUP;
+       if (i != -1)
+               return i;
+
        SCM sid = lookup_identifier (str);
        if (is_music_function (sid))
        {
                yylval.scm = get_music_function_transform (sid);
-               
                return music_function_type (yylval.scm);
        }
 
@@ -878,7 +872,7 @@ avoid_silly_flex_induced_gcc_warnings ()
 SCM
 lookup_markup_command (String s)
 {
-       SCM proc = ly_scheme_function ("lookup-markup-command");
+       SCM proc = ly_lily_module_constant ("lookup-markup-command");
        return scm_call_1 (proc, scm_makfrom0str (s.to_str0 ()));
 }
 
@@ -942,7 +936,7 @@ music_function_type (SCM func)
        else
                {
                /* TODO: print location */
-               error ("Can not find signature for music function.");
+               error (_ ("can't find signature for music function"));
                }
 
        return MUSIC_FUNCTION_SCM;