flower-1.0.27
[lilypond.git] / src / molecule.cc
blobc52fdc7b329b324a974f625bc2fce765b85095bc
1 #include "varray.hh"
2 #include "interval.hh"
3 #include "dimen.hh"
4 #include "string.hh"
5 #include "molecule.hh"
6 #include "symbol.hh"
7 #include "debug.hh"
8 #include "tex.hh"
10 void
11 Atom::print() const
13 mtor << "texstring: " <<sym.tex<<"\n";
16 Box
17 Atom::extent() const
19 Box b( sym.dim);
20 b.translate(off);
21 return b;
24 Atom::Atom(Symbol s)
26 sym=s;
30 String
31 Atom::TeXstring() const
33 // whugh.. Hard coded...
34 String s("\\placebox{%}{%}{%}");
35 Array<String> a;
36 a.push(print_dimen(off.y));
37 a.push(print_dimen(off.x));
38 a.push(sym.tex);
39 return substitute_args(s, a);
42 /* *************** */
44 String
45 Molecule::TeXstring() const
47 String s;
48 for(iter_top(ats,c); c.ok(); c++)
49 s+=c->TeXstring();
50 return s;
53 Box
54 Molecule::extent() const
56 Box b;
57 for(iter_top(ats,c); c.ok(); c++)
58 b.unite(c->extent());
59 return b;
62 void
63 Molecule::translate(Offset o)
65 for (iter_top(ats,c); c.ok(); c++)
66 c->translate(o);
69 void
70 Molecule::add(const Molecule &m)
72 for (iter_top(m.ats,c); c.ok(); c++) {
73 add(**c);
77 void
78 Molecule::add_right(const Molecule &m)
80 if (!ats.size()) {
81 add(m);
82 return;
84 Real xof=extent().x.right - m.extent().x.left;
85 Molecule toadd(m);
86 toadd.translate(Offset(xof, 0.0));
87 add(toadd);
90 void
91 Molecule::add_left(const Molecule &m)
93 if (!ats.size()) {
94 add(m);
95 return;
97 Real xof=extent().x.left - m.extent().x.right;
98 Molecule toadd(m);
99 toadd.translate(Offset(xof, 0.0));
100 add(toadd);
104 void
105 Molecule::add_top(const Molecule &m)
107 if (!ats.size()) {
108 add(m);
109 return;
111 Real yof=extent().y.right - m.extent().y.left;
112 Molecule toadd(m);
113 toadd.translate(Offset(0,yof));
114 add(toadd);
117 void
118 Molecule::add_bottom(const Molecule &m)
120 if (!ats.size()) {
121 add(m);
122 return;
124 Real yof=extent().y.left- m.extent().y.right;
125 Molecule toadd(m);
126 toadd.translate(Offset(0,yof));
127 add(toadd);
130 void
131 Molecule::operator = (const Molecule&)
133 assert(false);
136 Molecule::Molecule(const Molecule&s)
138 add(s);
141 void
142 Molecule::print() const
144 for (iter_top(ats,c); c.ok(); c++)
145 c->print();