1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
/*
molecule.cc -- implement Molecule
source file of the GNU LilyPond music typesetter
(c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>
*/
#include "interval.hh"
#include "dimen.hh"
#include "string.hh"
#include "molecule.hh"
#include "symbol.hh"
#include "debug.hh"
#include "tex.hh"
String
Molecule::TeX_string() const
{
String s;
for (iter_top (ats,c); c.ok(); c++)
s+=c->TeX_string();
return s;
}
Box
Molecule::extent() const
{
Box b;
for (iter_top (ats,c); c.ok(); c++)
b.unite (c->extent());
return b;
}
void
Molecule::translate (Offset o)
{
for (iter_top (ats,c); c.ok(); c++)
c->translate (o);
}
void
Molecule::translate (Real x,Axis a)
{
for (iter_top (ats,c); c.ok(); c++)
c->translate (x,a);
}
void
Molecule::add (Molecule const &m)
{
for (iter_top (m.ats,c); c.ok(); c++) {
add (**c);
}
}
void
Molecule::add_right (Molecule const &m)
{
if (!ats.size()) {
add (m);
return;
}
Real xof=extent().x ().right - m.extent ().x ().left;
Molecule toadd (m);
toadd.translate (Offset (xof, 0.0));
add (toadd);
}
void
Molecule::add_left (Molecule const &m)
{
if (!ats.size()) {
add (m);
return;
}
Real xof=extent().x ().left - m.extent ().x ().right;
Molecule toadd (m);
toadd.translate (Offset (xof, 0.0));
add (toadd);
}
void
Molecule::add_top (Molecule const &m)
{
if (!ats.size()) {
add (m);
return;
}
Real yof=extent().y ().right - m.extent ().y ().left;
Molecule toadd (m);
toadd.translate (yof, Y_AXIS);
add (toadd);
}
void
Molecule::add_bottom (Molecule const &m)
{
if (!ats.size()) {
add (m);
return;
}
Real yof=extent().y ().left- m.extent ().y ().right;
Molecule toadd (m);
toadd.translate (yof, Y_AXIS);
add (toadd);
}
void
Molecule::operator = (Molecule const &)
{
assert (false);
}
Molecule::Molecule (Molecule const &s)
{
add (s);
}
void
Molecule::print() const
{
#ifndef NPRINT
if (! check_debug)
return;
for (iter_top (ats,c); c.ok(); c++)
c->print();
#endif
}
void
Molecule::add (Atom const &a)
{
ats.bottom().add (new Atom (a));
}
|