]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lexer.ll
* lily/kpath.cc:
[lilypond.git] / lily / lexer.ll
index 98d77c065009e1eb1120b909cdd48e4ff1a7d5a5..0914fee3290361f3fb188d41e1f79c4ba5194da4 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,7 +104,6 @@ SCM (* scm_parse_error_handler) (void *);
 %option warn
 
 %x chords
-%x encoding
 %x figures
 %x incl
 %x lyrics
@@ -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);
@@ -200,10 +197,6 @@ HYPHEN             --
                     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 ());
        yy_pop_state ();
@@ -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"));
@@ -282,11 +275,11 @@ HYPHEN            --
        return MULTI_MEASURE_REST;
 }
 <INITIAL,markup,chords,lyrics,notes,figures>#  { //embedded scm
-       //char const* s = YYText () + 1;
-       char const* s = here_str0 ();
        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)
        {
@@ -294,7 +287,7 @@ HYPHEN              --
                error_level_ = 1;
        }
 
-       for (int i=0; i < n; i++)
+       for (int i = 0; i < n; i++)
        {
                yyinput ();
        }
@@ -485,12 +478,6 @@ HYPHEN             --
        \" {
                start_quote ();
        }
-       \< {
-               return '<';
-       }
-       \> {
-               return '>';
-       }
        \\score {
                return SCORE;
        }
@@ -530,7 +517,7 @@ HYPHEN              --
        [{}]    {
                return YYText ()[0];
        }
-       [^<>#{}"\\ \t\n\r\f]+ {
+       [^#{}"\\ \t\n\r\f]+ {
                String s (YYText ()); 
 
                char c = s[s.length () - 1];
@@ -549,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 ();
@@ -570,7 +557,7 @@ HYPHEN              --
 }
 {REAL}         {
        Real r;
-       int cnv=sscanf (YYText (), "%lf", &r);
+       int cnv = sscanf (YYText (), "%lf", &r);
        assert (cnv == 1);
 
        yylval.scm = scm_make_real (r);
@@ -598,7 +585,7 @@ HYPHEN              --
 }
 
 <INITIAL,lyrics,notes,figures>\\. {
-    char c= YYText ()[1];
+    char c = YYText ()[1];
 
     switch (c) {
     case '>':
@@ -778,7 +765,7 @@ Lily_lexer::is_figure_state () const
 void
 strip_leading_white (String&s)
 {
-       int i=0;
+       int i = 0;
        for (;  i < s.length (); i++) 
                if (!isspace (s[i]))
                        break;
@@ -789,7 +776,7 @@ strip_leading_white (String&s)
 void
 strip_trailing_white (String&s)
 {
-       int i=s.length ();      
+       int i = s.length ();    
        while (i--) 
                if (!isspace (s[i]))
                        break;
@@ -824,7 +811,7 @@ is_valid_version (String s)
 String
 lyric_fudge (String s)
 {
-  char  * chars  =s.get_copy_str0 ();
+  char  * chars  = s.get_copy_str0 ();
 
   for (char * p = chars; *p ; p++)
     {
@@ -835,8 +822,8 @@ lyric_fudge (String s)
   s = String (chars);
   delete[] chars;
 
-  int i =0;    
-  if ((i=s.index ("\\,")) != -1)   // change "\," to TeX's "\c "
+  int i = 0;   
+  if ((i = s.index ("\\,")) != -1)   // change "\," to TeX's "\c "
     {
       * (s.get_str0 () + i + 1) = 'c';
       s = s.left_string (i+2) + " " + s.right_string (s.length ()-i-2);
@@ -884,7 +871,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 ()));
 }
 
@@ -892,7 +879,7 @@ lookup_markup_command (String s)
 int
 music_function_type (SCM func)
 {
-       SCM type= scm_object_property (func, ly_symbol2scm ("music-function-signature-keyword"));
+       SCM type = scm_object_property (func, ly_symbol2scm ("music-function-signature-keyword"));
        if (type == ly_symbol2scm ("scm"))
        {
                return MUSIC_FUNCTION_SCM;