DEADSOFTWARE

Almost-correct toPlainText
[odcread.git] / textmodel.h
1 #ifndef _TEXTMODEL_H_
2 #define _TEXTMODEL_H_
4 #include <oberon.h>
5 #include <typeregister.h>
6 #include <store.h>
8 namespace odc {
10 class TextModel : public ContainerModel {
11 private:
12 static const std::string TYPENAME;
13 static const TypeProxy<TextModel> PROXY;
15 public:
16 TextModel(INTEGER id);
17 static const std::string &getType();
18 static const std::string *getSuper();
19 virtual const std::string &getTypeName() const;
20 virtual void internalize(Reader &reader);
21 };
23 class TextPiece {
24 public:
25 const size_t d_len;
26 TextPiece(size_t len);
27 virtual void read(Reader &reader) = 0;
28 virtual std::string toString() = 0;
29 virtual std::string toPlainText() = 0;
30 };
32 class LongPiece : public TextPiece {
33 private:
34 CHAR *d_buf;
35 public:
36 LongPiece(size_t len);
37 ~LongPiece();
38 virtual void read(Reader &reader);
39 virtual std::string toString();
40 virtual std::string toPlainText();
41 };
43 class ShortPiece : public TextPiece {
44 private:
45 SHORTCHAR *d_buf;
46 public:
47 ShortPiece(size_t len);
48 ~ShortPiece();
49 virtual void read(Reader &reader);
50 virtual std::string toString();
51 virtual std::string toPlainText();
52 };
54 class ViewPiece : public TextPiece {
55 Store *d_view;
56 public:
57 ViewPiece(Store *view);
58 virtual void read(Reader &reader);
59 virtual std::string toString();
60 virtual std::string toPlainText();
61 };
63 class StdTextModel : public TextModel {
64 private:
65 static const std::string TYPENAME;
66 static const TypeProxy<StdTextModel> PROXY;
67 std::vector<TextPiece *> d_pieces;
69 public:
70 StdTextModel(INTEGER id);
71 static const std::string &getType();
72 static const std::string *getSuper();
73 virtual const std::string &getTypeName() const;
74 virtual void internalize(Reader &reader);
76 virtual std::string toString();
77 virtual std::string toPlainText();
78 };
80 } // namespace odc
82 #endif // _TEXTMODEL_H_