]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/my-lily-lexer.cc
* Documentation/user/music-glossary.tely: add @omf tags
[lilypond.git] / lily / my-lily-lexer.cc
index ebe0302cf8739cd43c434b28d7ded26e67657244..2463a121e75b14dce307198767b490dd892bf849 100644 (file)
@@ -3,11 +3,10 @@
 
   source file of the GNU LilyPond music typesetter
 
-  (c)  1997--2002 Han-Wen Nienhuys <hanwen@cs.uu.nl>
+  (c)  1997--2003 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include <ctype.h>
-
 #include <sstream>
 
 #include "lily-proto.hh"
 #include "main.hh"
 #include "input.hh"
 #include "moment.hh"
+#include "ly-modules.hh"
+
 
 static Keyword_ent the_key_tab[]={
   {"alias", ALIAS},
   {"apply", APPLY},
-  {"arpeggio", ARPEGGIO },
+  {"applycontext", APPLYCONTEXT},
   {"autochange", AUTOCHANGE},
-  {"spanrequest", SPANREQUEST},
-  {"commandspanrequest", COMMANDSPANREQUEST},  
   {"simultaneous", SIMULTANEOUS},
   {"sequential", SEQUENTIAL},
   {"accepts", ACCEPTS},
   {"alternative", ALTERNATIVE},
   {"bar", BAR},
   {"breathe", BREATHE},
-  {"char", CHAR_T},
   {"chordmodifiers", CHORDMODIFIERS},
+  {"chordnames", CHORDNAMES},
   {"chords", CHORDS},
   {"clef", CLEF},
-  {"cm", CM_T},
   {"consists", CONSISTS},
   {"consistsend", CONSISTSEND},
   {"context", CONTEXT},
   {"default", DEFAULT},
   {"denies", DENIES},
   {"duration", DURATION},
-  {"dynamicscript", DYNAMICSCRIPT},
   {"grobdescriptions", GROBDESCRIPTIONS},
   {"figures",FIGURES},
   {"grace", GRACE},
-  {"glissando", GLISSANDO},
   {"header", HEADER},
-  {"in", IN_T},
   {"lyrics", LYRICS},
   {"key", KEY},
   {"mark", MARK},
+  {"markup", MARKUP},
   {"once", ONCE},
   {"pitch", PITCH},
   {"time", TIME_T},
   {"times", TIMES},
   {"midi", MIDI},
-  {"mm", MM_T},
   {"name", NAME},
   {"pitchnames", PITCHNAMES},
   {"notes", NOTES},
@@ -74,17 +69,13 @@ static Keyword_ent the_key_tab[]={
   {"revert", REVERT},
   {"partial", PARTIAL},
   {"paper", PAPER},
-  {"penalty", PENALTY},
   {"property", PROPERTY},
-  {"pt", PT_T},
   {"relative", RELATIVE},
   {"remove", REMOVE},
   {"repeat", REPEAT},
   {"addlyrics", ADDLYRICS},
   {"partcombine", PARTCOMBINE},
   {"score", SCORE},
-  {"script", SCRIPT},
-  {"stylesheet", STYLESHEET},
   {"skip", SKIP},
   {"tempo", TEMPO},
   {"translator", TRANSLATOR},
@@ -101,6 +92,7 @@ My_lily_lexer::My_lily_lexer ()
   scopes_ = SCM_EOL;
   
   add_scope(ly_make_anonymous_module());
+  errorlevel_ =0; 
 
   main_input_b_ = false;
 }
@@ -108,7 +100,21 @@ My_lily_lexer::My_lily_lexer ()
 void
 My_lily_lexer::add_scope (SCM module)
 {
+  ly_reexport_module (scm_current_module());
   scm_set_current_module (module);
+  for (SCM s = scopes_; gh_pair_p (s); s = gh_cdr (s))
+    {
+      /*
+       UGH. how to do this more neatly? 
+      */      
+      SCM expr = scm_list_n (ly_symbol2scm ("module-use!"),
+                            module, scm_list_n (ly_symbol2scm ("module-public-interface"),
+                                                gh_car (s), SCM_UNDEFINED),
+                            SCM_UNDEFINED);
+      
+      scm_primitive_eval(expr);
+    }
+  
   scopes_ = scm_cons (module, scopes_);
 }
 
@@ -134,10 +140,11 @@ My_lily_lexer::lookup_identifier (String s)
 {
   SCM sym = ly_symbol2scm (s.to_str0());
   for (SCM s = scopes_; gh_pair_p (s); s = gh_cdr (s))
-  {
-    SCM var = scm_module_lookup (gh_car (s), sym);
-    return scm_variable_ref (var);
-  }
+    {
+      SCM var = ly_module_lookup (gh_car (s), sym);
+      if (var != SCM_BOOL_F)
+       return scm_variable_ref(var);
+    }
 
   return SCM_UNSPECIFIED;
 }
@@ -164,9 +171,7 @@ My_lily_lexer::set_identifier (SCM name, SCM s)
 
   SCM sym = scm_string_to_symbol (name);
   SCM mod = gh_car (scopes_);
-  SCM var = scm_module_lookup (mod, ly_symbol2scm ("symbols-defined-here"));
 
-  scm_variable_set_x (var, gh_cons (sym,  scm_variable_ref (var)));
   scm_module_define (mod, sym, s);
 }
 
@@ -187,7 +192,7 @@ My_lily_lexer::LexerError (char const *s)
   else
     {
       errorlevel_ |= 1;
-      Input spot (get_source_file (),here_str0 ());
+      Input spot (get_source_file (), here_str0 ());
       spot.error (s);
     }
 }
@@ -216,3 +221,27 @@ My_lily_lexer::here_input () const
   Source_file * f= get_source_file ();
   return Input (f, (char*)here_str0 ());
 }
+
+void
+My_lily_lexer::prepare_for_next_token ()
+{
+  last_input_ = here_input();
+}
+
+#if 0
+SCM
+My_lily_lexer::scan_markup_word (String s)
+{
+  /*
+    TODO: better implementation:
+
+    - make a table of markup functions, for quicker lookup
+
+    - error handling.
+    
+   */
+  SCM s = scm_c_eval_str ((s + "-markup").to_str0());
+  yylval.scm = s;
+  return MARKUP_HEAD;
+}
+#endif