summaryrefslogtreecommitdiff
path: root/hdr/molecule.hh
diff options
context:
space:
mode:
Diffstat (limited to 'hdr/molecule.hh')
-rw-r--r--hdr/molecule.hh52
1 files changed, 52 insertions, 0 deletions
diff --git a/hdr/molecule.hh b/hdr/molecule.hh
new file mode 100644
index 0000000000..0c69f74040
--- /dev/null
+++ b/hdr/molecule.hh
@@ -0,0 +1,52 @@
+#ifndef MOLECULE_HH
+#define MOLECULE_HH
+
+#include "plist.hh"
+#include "boxes.hh"
+#include "item.hh"
+#include "symbol.hh"
+/// a symbol which can be translated, and freely copied
+struct Atom {
+ Offset off;
+ Symbol sym;
+
+ void translate(Offset o) {
+ off += o;
+ }
+
+ /// how big is #this#?
+ Box extent() const;
+ Atom(Symbol s);
+
+ void print() const;
+
+ String TeXstring() const;
+};
+
+/// a group of #Atom#s
+struct Molecule {
+ PointerList<Atom*> ats;
+
+ Molecule() { }
+ Molecule(Atom a) { add(a) ; }
+
+ void add_right(const Molecule &m);
+ void add_left(const Molecule &m);
+ void add_top(const Molecule &m);
+ void add_bot(const Molecule &m);
+ void add(Molecule const &m);
+ void translate(Offset);
+ void add(Atom a) { ats.bottom().add(new Atom(a)); }
+ /// how big is #this#?
+ Box extent() const;
+
+ String TeXstring() const;
+
+ Molecule(const Molecule&s);
+ void print() const;
+private:
+ void operator=(const Molecule&);
+};
+/** a group of individually translated symbols. You can add molecules
+ to the top, to the right, etc. */
+#endif