]> git.donarmstrong.com Git - lilypond.git/commitdiff
lilypond-0.0.9
authorfred <fred>
Wed, 6 Nov 1996 21:30:23 +0000 (21:30 +0000)
committerfred <fred>
Wed, 6 Nov 1996 21:30:23 +0000 (21:30 +0000)
src/symtable.cc [new file with mode: 0644]

diff --git a/src/symtable.cc b/src/symtable.cc
new file mode 100644 (file)
index 0000000..a28d146
--- /dev/null
@@ -0,0 +1,60 @@
+#include "misc.hh"
+#include "dimen.hh"
+#include "debug.hh"
+#include "real.hh"
+#include "symbol.hh"
+#include "assoc.hh"
+#include "symtable.hh"
+
+
+Symbol 
+Symtable::lookup(String s) const
+{
+    if (elt_query(s))
+       return (*this)[s];
+    else {
+       error( "Unknown symbol " +s+'\n');
+    }
+}
+
+Symtable* 
+Symtables::operator()(String s) 
+{
+    return Assoc<String, Symtable*>::operator[](s);
+} 
+
+void
+Symtables::read(Text_db &symini)
+{
+     while (!symini.eof()) {
+        Text_record  r(  symini++);
+        if (r[0] == "end" )
+            return;
+        assert (r[0] == "table");
+        
+        String tabnam = r[1];
+        Symtable * sp = new Symtable;
+        while (!symini.eof()){
+            r = symini++;
+            if (r[0] == "end")
+                break;
+            
+            if (r.sz() != 6)
+                error("Not enough fields in symbol init");
+            
+            int i=0;
+            String id=r[i++];
+            String tex=r[i++];
+            svec<Real> dims;
+            for (int j=0; j < 4; j++)
+                dims.add( parse_dimen(r[i++]));
+            
+            Symbol s(tex, Box(dims));
+            (*sp)[id] = s;
+        }
+        (*this)[tabnam] = sp;           
+     }
+}
+
+
+