]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/symtable.cc
release: 1.0.17
[lilypond.git] / lily / symtable.cc
index 9dc82c0631c32160a43d9c73ccb0e0b5257db186..cc3cecff23140339de16c96438dcf0fd18466a37 100644 (file)
@@ -1,75 +1,94 @@
 /*
   symtable.cc -- implement Symbol_table
 
-  source file of the LilyPond music typesetter
+  source file of the GNU LilyPond music typesetter
 
-  (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
+  (c)  1997--1998 Han-Wen Nienhuys <hanwen@cs.uu.nl>
 */
 
 #include "misc.hh"
-#include "dimen.hh"
 #include "debug.hh"
 #include "real.hh"
-#include "symbol.hh"
-#include "assoc.hh"
-#include "assoc-iter.hh"
+#include "atom.hh"
+#include "dictionary-iter.hh"
 #include "symtable.hh"
 
 Symtables::Symtables()
 {
 }
 
-Symtables::Symtables(Symtables const &s)
+
+Symtables::Symtables (Symtables const &s)
+  : Dictionary<Symtable*> (s)
 {
-    for (Assoc_iter<String, Symtable*>  i(s); i.ok(); i++) {
-       add(i.key(), new Symtable(*i.val()));
+  font_ = s.font_;
+  font_path_ = s.font_path_;
+  for (Dictionary_iter< Symtable*>  i (s); i.ok(); i++)
+    {
+      add (i.key(), new Symtable (*i.val ()));
     }
 }
 
 Symtables::~Symtables()
 {
-    for (Assoc_iter<String, Symtable*>  i(*this); i.ok(); i++) {
-       delete i.val();
+  for (Dictionary_iter< Symtable*>  i (*this); i.ok(); i++)
+    {
+      delete i.val();
     }
 }
 
-Symbol 
-Symtable::lookup(String s) const
+Atom
+Symtable::lookup (String s) const
 {
-    if (elt_b(s))
-       return (*this)[s];
-    else {
-       error( "Symtable `" + id_str+ "\': unknown symbol `" +s+"'\n");
+  if (elem_b (s))
+    {
+      Atom a (elem(s));
+      return a;
+    }
+  else
+    {
+      warning (_f ("Symtable `%s\': unknown symbol: `%s\'", id_str, s));
+      Atom sy;
+      return sy;
     }
-    Symbol sy;                 // unreachable
-    return sy;
 }
 
-Symtable* 
-Symtables::operator()(String s) 
+Symtable*
+Symtables::operator()(String s)
 {
-    return Assoc<String, Symtable*>::operator[](s);
-} 
+  if (!elem_b (s))
+    {
+      error (_f ("Symtable `%s\' unknown", s));
+      /* 
+        We can 't return, because we'll dump core anyway.
+       */
+      return 0;
+    }
+  else
+    return Dictionary<Symtable*>::operator[](s);
+}
 void
 Symtables::print() const
 {
-    for (Assoc_iter<String, Symtable*>  i(*this); i.ok(); i++) {
-       mtor << "table \'" << i.key() << "\' {\n";
-       i.val()->print();
-       mtor << "}\n";
+  for (Dictionary_iter<Symtable*>  i (*this); i.ok(); i++)
+    {
+      DOUT << "table \'" << i.key () << "\' {\n";
+      i.val()->print ();
+      DOUT << "}\n";
     }
 }
 void
 Symtable::print() const
 {
-    for (Assoc_iter<String, Symbol>  i(*this); i.ok(); i++) {
-       mtor << "\'" << i.key() << "\'->" << i.val().str() << "\n";
+  for (Dictionary_iter<Atom>  i (*this); i.ok(); i++)
+    {
+      DOUT << "\'" << i.key() << "\'->" << i.val ().str () << '\n';
     }
 }
-       
+
 void
-Symtables::add(String s, Symtable*p)
+Symtables::add (String s, Symtable*p)
 {
-    p-> id_str = s;
-    Assoc<String, Symtable*>::add(s,p);
+  p-> id_str = s;
+  Dictionary<Symtable*>::elem  (s) = p;
 }