diff --git a/textmodel.cc b/textmodel.cc
index 977bd447e35ecca8efd0b71617597f709577771b..cfd7730256ff2d0045cfd1ed63e83e1b497a8575 100644 (file)
--- a/textmodel.cc
+++ b/textmodel.cc
namespace odc {
const std::string TextModel::TYPENAME("TextModels.Model^");
namespace odc {
const std::string TextModel::TYPENAME("TextModels.Model^");
-const TypeProxy<TextModel> TextModel::PROXY;
+const TypeProxy<TextModel, ContainerModel> TextModel::PROXY;
TextModel::TextModel(INTEGER id) : ContainerModel(id) {}
TextModel::TextModel(INTEGER id) : ContainerModel(id) {}
-const std::string &TextModel::getType() {
- return TYPENAME;
-}
-
-const std::string *TextModel::getSuper() {
- return &ContainerModel::getType();
-}
-
const std::string &TextModel::getTypeName() const {
const std::string &TextModel::getTypeName() const {
- return getType();
+ return TYPENAME;
}
void TextModel::internalize(Reader &reader) {
}
void TextModel::internalize(Reader &reader) {
}
const std::string StdTextModel::TYPENAME("TextModels.StdModel^");
}
const std::string StdTextModel::TYPENAME("TextModels.StdModel^");
-const TypeProxy<StdTextModel> StdTextModel::PROXY;
+const TypeProxy<StdTextModel, TextModel> StdTextModel::PROXY;
StdTextModel::StdTextModel(INTEGER id) : TextModel(id), d_pieces() {}
StdTextModel::StdTextModel(INTEGER id) : TextModel(id), d_pieces() {}
-const std::string &StdTextModel::getType() {
- return TYPENAME;
-}
-
-const std::string *StdTextModel::getSuper() {
- return &TextModel::getType();
-}
-
const std::string &StdTextModel::getTypeName() const {
const std::string &StdTextModel::getTypeName() const {
- return getType();
+ return TYPENAME;
}
/*
}
/*
return sofar + "}";
}
return sofar + "}";
}
-std::string StdTextModel::toPlainText() {
- std::string sofar = "";
+void StdTextModel::accept(Visitor &visitor) const {
+ visitor.partStart();
for (int i = 0; i < d_pieces.size(); ++i) {
for (int i = 0; i < d_pieces.size(); ++i) {
- sofar += d_pieces[i]->toPlainText();
+ d_pieces[i]->accept(visitor);
}
}
- return sofar;
+ visitor.partEnd();
}
TextPiece::TextPiece(size_t len): d_len(len) {}
}
TextPiece::TextPiece(size_t len): d_len(len) {}
-LongPiece::LongPiece(size_t len): TextPiece(len) {}
+LongPiece::LongPiece(size_t len): TextPiece(len * 2) {}
LongPiece::~LongPiece() {
delete d_buf;
}
void LongPiece::read(Reader &reader) {
LongPiece::~LongPiece() {
delete d_buf;
}
void LongPiece::read(Reader &reader) {
- d_buf = new CHAR[d_len];
- reader.readLChar(d_buf, d_len);
+ d_buf = new CHAR[d_len / 2 + 1];
+ reader.readLChar(d_buf, d_len / 2);
+ d_buf[d_len / 2] = 0;
}
}
-std::string LongPiece::toString() {
+std::string LongPiece::toString() const {
return std::string("LongPiece(FIXME)");// + std::wstring((wchar_t*)d_buf) + std::string(")");
}
return std::string("LongPiece(FIXME)");// + std::wstring((wchar_t*)d_buf) + std::string(")");
}
-std::string LongPiece::toPlainText() {
- return std::string("FIXME");// + std::wstring((wchar_t*)d_buf) + std::string(")");
+std::wstring LongPiece::getText() const {
+ return std::wstring((wchar_t*)d_buf);
+}
+
+void LongPiece::accept(Visitor &visitor) const {
+ visitor.textLongPiece(this);
}
ShortPiece::ShortPiece(size_t len): TextPiece(len) {}
}
ShortPiece::ShortPiece(size_t len): TextPiece(len) {}
}
void ShortPiece::read(Reader &reader) {
}
void ShortPiece::read(Reader &reader) {
-// static char piece[] = "pieceA";
d_buf = new SHORTCHAR[d_len + 1];
reader.readSChar(d_buf, d_len);
d_buf[d_len] = 0;
d_buf = new SHORTCHAR[d_len + 1];
reader.readSChar(d_buf, d_len);
d_buf[d_len] = 0;
-// std::cout.write(buf, d_len);
-// std::ofstream ofs(piece, std::ios::out);
-// ofs.write(buf, d_len);
-// ofs.close();
-// ++piece[5];
-// delete buf;
}
}
-std::string ShortPiece::toString() {
+std::string ShortPiece::toString() const {
return std::string("ShortPiece(") + std::string(d_buf) + std::string(")");
}
return std::string("ShortPiece(") + std::string(d_buf) + std::string(")");
}
-std::string ShortPiece::toPlainText() {
- return std::string(d_buf);
+std::string ShortPiece::getText() const {
+ std::string str(d_buf);
+ for (std::string::iterator it = str.begin(); it < str.end(); ++it) {
+ if (*it == '\r') *it = '\n';
+ }
+ return str;
}
}
-ViewPiece::ViewPiece(Store *view): TextPiece(0), d_view(view) {}
+void ShortPiece::accept(Visitor &visitor) const {
+ visitor.textShortPiece(this);
+}
+
+ViewPiece::ViewPiece(Store *view): TextPiece(1), d_view(view) {}
+
+ViewPiece::~ViewPiece() {
+ delete d_view;
+}
void ViewPiece::read(Reader &reader) {
reader.readByte();
}
void ViewPiece::read(Reader &reader) {
reader.readByte();
}
-std::string ViewPiece::toString() {
+std::string ViewPiece::toString() const {
return std::string("ViewPiece { ") + d_view->toString() + " }";
}
return std::string("ViewPiece { ") + d_view->toString() + " }";
}
-std::string ViewPiece::toPlainText() {
- return d_view->toPlainText();
+void ViewPiece::accept(Visitor &visitor) const {
+ return d_view->accept(visitor);
}
} // namespace odc
}
} // namespace odc