]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/lexer.ll
* lily/side-position-interface.cc (out_of_staff): move contents of
[lilypond.git] / lily / lexer.ll
index 332257ff807b8bea12d3b992f4e27534b75489a6..c2cb3077ca71401c2a27c611c065f2c858712c7f 100644 (file)
@@ -33,6 +33,7 @@
 #include <iostream>
 using namespace std;
 
+#include "source-file.hh"
 #include "parse-scm.hh"
 #include "lily-guile.hh"
 #include "string.hh"
@@ -46,7 +47,7 @@ using namespace std;
 #include "main.hh"
 #include "version.hh"
 #include "lilypond-input-version.hh"
-#include "translator-def.hh"
+#include "context-def.hh"
 #include "identifier-smob.hh"
 
 /*
@@ -97,6 +98,7 @@ SCM (* scm_parse_error_handler) (void *);
 %option never-interactive 
 %option warn
 
+%x renameinput
 %x version
 %x chords
 %x incl
@@ -130,7 +132,7 @@ BLACK               [^ \n\t\f\r]
 RESTNAME       [rs]
 NOTECOMMAND    \\{A}+
 MARKUPCOMMAND  \\({A}|[-_])+
-LYRICS         ({AA}|{TEX})[^0-9 \t\n\f]*
+LYRICS         ({AA}|{TEX})[^0-9 \t\n\r\f]*
 ESCAPED                [nt\\'"]
 EXTENDER       __
 HYPHEN         --
@@ -145,13 +147,13 @@ HYPHEN            --
   "%{" {
        yy_push_state (longcomment);
   }
-  %[^{\n].*\n  {
+  %[^{\n\r].*[\n\r]    {
   }
-  %[^{\n]      { // backup rule
+  %[^{\n\r]    { // backup rule
   }
-  %\n  {
+  %[\n\r]      {
   }
-  %[^{\n].*    {
+  %[^{\n\r].*  {
   }
   {WHITE}+     {
 
@@ -161,18 +163,38 @@ HYPHEN            --
 <INITIAL,chords,lyrics,notes,figures>\\version{WHITE}* {
        yy_push_state (version);
 }
+<INITIAL,chords,lyrics,notes,figures>\\renameinput{WHITE}*     {
+       yy_push_state (renameinput);
+}
 <version>\"[^"]*\"     { /* got the version number */
        String s (YYText ()+1);
        s = s.left_string (s.index_last ('\"'));
 
-       yy_pop_state ();
-       if (!valid_version_b (s))
+       yy_pop_state();
+        if (!valid_version_b (s))
                return INVALID;
 }
+<renameinput>\"[^"]*\"     { /* got the version number */
+       String s (YYText ()+1);
+       s = s.left_string (s.index_last ('\"'));
+
+       yy_pop_state();
+       this->here_input().source_file_->name_ = s;
+       progress_indication (_f("\nRenamed input to `%s'", s.to_str0()));
+       scm_module_define (gh_car (scopes_),
+                    ly_symbol2scm ("input-file-name"),
+                    scm_makfrom0str (s.to_str0()));
+
+}
+
 <version>.     {
        LexerError ("No quoted string found after \\version");
        yy_pop_state ();
 }
+<renameinput>.         {
+       LexerError ("No quoted string found after \\renameinput");
+       yy_pop_state ();
+}
 <longcomment>{
        [^\%]*          {
        }
@@ -291,12 +313,12 @@ HYPHEN            --
        yylval.scm = sval;
        return SCM_T;
 }
-<INITIAL,notes,markup>{ 
+<INITIAL,notes,lyrics>{ 
        \<\<   {
-               return CHORD_OPEN;
+               return LESSLESS;
        }
        \>\>   {
-               return CHORD_CLOSE;
+               return MOREMORE;
        }
 }
 <figures>{
@@ -447,6 +469,12 @@ HYPHEN             --
        \" {
                start_quote ();
        }
+       \< {
+               return '<';
+       }
+       \> {
+               return '>';
+       }
        {MARKUPCOMMAND} {
                String str (YYText() + 1);
                SCM s = lookup_markup_command (str);
@@ -456,6 +484,8 @@ HYPHEN              --
                        SCM tag = gh_cdr(s);
                        if (tag == ly_symbol2scm("markup0"))
                                return MARKUP_HEAD_MARKUP0;
+                       if (tag == ly_symbol2scm("empty"))
+                               return MARKUP_HEAD_EMPTY;
                        else if (tag == ly_symbol2scm ("markup0-markup1"))
                                return MARKUP_HEAD_MARKUP0_MARKUP1;
                        else if (tag == ly_symbol2scm ("markup-list0"))
@@ -468,30 +498,33 @@ HYPHEN            --
                                return MARKUP_HEAD_SCM0_MARKUP1;
                        else if (tag == ly_symbol2scm ("scheme0-scheme1-markup2"))
                                return MARKUP_HEAD_SCM0_SCM1_MARKUP2;
+                       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"); 
                                ly_display_scm (s);
                                assert(false);
                        }
                } else
                        return scan_escaped_word (str);
        }
-       {LYRICS} {
+       [{}]    {
+               return YYText()[0];
+       }
+       [^#{}"\\ \t\n\r\f]+ {
                String s (YYText ()); 
 
                char c = s[s.length () - 1];
                if (c == '{' ||  c == '}') // brace open is for not confusing dumb tools.
                        here_input ().warning (
-                               _ ("Brace found at end of lyric.  Did you forget a space?"));
+                               _ ("Brace found at end of markup.  Did you forget a space?"));
                yylval.scm = scm_makfrom0str (s.to_str0 ());
 
 
                return STRING;
        }
-       {WHITE} {
-
-       }
-       . {
-               return YYText ()[0];
+       .  {
+               return YYText()[0];
        }
 }
 
@@ -725,8 +758,8 @@ strip_trailing_white (String&s)
 
 
 
-/* 1.3.146 == removal of ; */ 
-Lilypond_version oldest_version ("1.3.146");
+/* 1.9.0 == postfix articulations */ 
+Lilypond_version oldest_version ("1.9.0");
 
 
 bool