]> git.donarmstrong.com Git - lilypond.git/blob - src/symtable.cc
release: 0.0.11
[lilypond.git] / src / symtable.cc
1 #include "misc.hh"
2 #include "textdb.hh"
3 #include "dimen.hh"
4 #include "debug.hh"
5 #include "real.hh"
6 #include "symbol.hh"
7 #include "assoc.hh"
8 #include "symtable.hh"
9
10
11 Symbol 
12 Symtable::lookup(String s) const
13 {
14     if (elt_query(s))
15         return (*this)[s];
16     else {
17         error( "Unknown symbol `" +s+"'\n");
18     }
19     Symbol sy;                  // unreachable
20     return sy;
21 }
22
23 Symtable* 
24 Symtables::operator()(String s) 
25 {
26     return Assoc<String, Symtable*>::operator[](s);
27
28
29 void
30 Symtables::read(Text_db &symini)
31 {
32      while (!symini.eof()) {
33          Text_record  r(symini++);
34          if (r[0] == "end" )
35              return;
36          assert (r[0] == "table");
37          
38          String tabnam = r[1];
39          Symtable * sp = new Symtable;
40          while (!symini.eof()){
41              r = symini++;
42              if (r[0] == "end")
43                  break;
44              
45              if (r.sz() != 6)
46                  error("Not enough fields in symbol init");
47              
48              int i=0;
49              String id=r[i++];
50              String tex=r[i++];
51              svec<Real> dims;
52              for (int j=0; j < 4; j++)
53                  dims.add( parse_dimen(r[i++]));
54              
55              Symbol s(tex, Box(dims));
56              (*sp)[id] = s;
57          }
58          (*this)[tabnam] = sp;           
59      }
60 }