diff options
| author | Werner Schweer <ws.seh.de> | 2006-11-27 11:24:14 +0000 |
|---|---|---|
| committer | Werner Schweer <ws.seh.de> | 2006-11-27 11:24:14 +0000 |
| commit | 776dc95b628074122e7a71d493e2993e9c8686fd (patch) | |
| tree | ad2227b65e1f43c78821ab8741ed0d32a0163e53 /muse/al | |
| parent | 7241ad863d32fa5627697f34aef2bc9ee7049b07 (diff) | |
class Xml update
Diffstat (limited to 'muse/al')
| -rw-r--r-- | muse/al/sig.cpp | 10 | ||||
| -rw-r--r-- | muse/al/tempo.cpp | 10 | ||||
| -rw-r--r-- | muse/al/xml.cpp | 136 | ||||
| -rw-r--r-- | muse/al/xml.h | 34 |
4 files changed, 106 insertions, 84 deletions
diff --git a/muse/al/sig.cpp b/muse/al/sig.cpp index 3da44eb2..449cc624 100644 --- a/muse/al/sig.cpp +++ b/muse/al/sig.cpp @@ -337,7 +337,7 @@ int SigList::rasterStep(unsigned t, int raster) const void SigList::write(Xml& xml) const { - xml.tag("siglist"); + xml.stag("siglist"); for (ciSigEvent i = begin(); i != end(); ++i) i->second->write(xml, i->first); xml.etag("siglist"); @@ -372,10 +372,10 @@ void SigList::read(QDomNode node) void SigEvent::write(Xml& xml, int at) const { - xml.tag("sig at=\"%d\"", at); - xml.intTag("tick", tick); - xml.intTag("nom", sig.z); - xml.intTag("denom", sig.n); + xml.stag("sig at=\"%d\"", at); + xml.tag("tick", tick); + xml.tag("nom", sig.z); + xml.tag("denom", sig.n); xml.etag("sig"); } diff --git a/muse/al/tempo.cpp b/muse/al/tempo.cpp index 9a64f3e8..2d607db0 100644 --- a/muse/al/tempo.cpp +++ b/muse/al/tempo.cpp @@ -318,9 +318,9 @@ unsigned TempoList::frame2tick(unsigned frame, int* sn) const void TempoList::write(Xml& xml) const { - xml.tag("tempolist fix=\"%d\"", _tempo); + xml.stag("tempolist fix=\"%d\"", _tempo); if (_globalTempo != 100) - xml.intTag("globalTempo", _globalTempo); + xml.tag("globalTempo", _globalTempo); for (ciTEvent i = begin(); i != end(); ++i) i->second->write(xml, i->first); xml.etag("tempolist"); @@ -362,9 +362,9 @@ void TempoList::read(QDomNode node) void TEvent::write(Xml& xml, int at) const { - xml.tag("tempo at=\"%d\"", at); - xml.intTag("tick", tick); - xml.intTag("val", tempo); + xml.stag("tempo at=\"%d\"", at); + xml.tag("tick", tick); + xml.tag("val", tempo); xml.etag("tempo"); } diff --git a/muse/al/xml.cpp b/muse/al/xml.cpp index 616b474c..a117a5e7 100644 --- a/muse/al/xml.cpp +++ b/muse/al/xml.cpp @@ -27,19 +27,35 @@ namespace AL { // Xml //--------------------------------------------------------- +Xml::Xml() + { + level = 0; + } + Xml::Xml(QIODevice* device) : QTextStream(device) { + setCodec("utf8"); level = 0; } //--------------------------------------------------------- +// putLevel +//--------------------------------------------------------- + +void Xml::putLevel() + { + for (int i = 0; i < level*2; ++i) + *this << ' '; + } + +//--------------------------------------------------------- // header //--------------------------------------------------------- void Xml::header() { - *this << "<?xml version=\"1.0\"?>\n"; + *this << "<?xml version=\"1.0\" encoding=\"utf8\"?>\n"; } //--------------------------------------------------------- @@ -51,6 +67,7 @@ void Xml::put(const char* format, ...) va_list args; va_start(args, format); putLevel(); + char buffer[BS]; vsnprintf(buffer, BS, format, args); va_end(args); *this << buffer; @@ -65,6 +82,7 @@ void Xml::nput(const char* format, ...) { va_list args; va_start(args, format); + char buffer[BS]; vsnprintf(buffer, BS, format, args); *this << buffer; va_end(args); @@ -81,15 +99,17 @@ void Xml::tdata(const QString& s) } //--------------------------------------------------------- -// tag +// stag +// <mops attribute="value"> //--------------------------------------------------------- -void Xml::tag(const char* format, ...) +void Xml::stag(const char* format, ...) { va_list args; va_start(args, format); putLevel(); *this << '<'; + char buffer[BS]; vsnprintf(buffer, BS, format, args); *this << buffer; va_end(args); @@ -97,99 +117,73 @@ void Xml::tag(const char* format, ...) ++level; } -void Xml::tagE(const char* format, ...) +//--------------------------------------------------------- +// etag +//--------------------------------------------------------- + +void Xml::etag(const char* s) { - va_list args; - va_start(args, format); putLevel(); - *this << '<'; - vsnprintf(buffer, BS, format, args); - *this << buffer; - va_end(args); - *this << "/>" << endl; + *this << "</" << s << '>' << endl; + --level; } //--------------------------------------------------------- -// etag +// tagE +// <mops attribute="value"/> //--------------------------------------------------------- -void Xml::etag(const char* format, ...) +void Xml::tagE(const char* format, ...) { va_list args; va_start(args, format); putLevel(); - *this << "</"; + *this << '<'; + char buffer[BS]; vsnprintf(buffer, BS, format, args); *this << buffer; va_end(args); - *this << '>' << endl; - --level; + *this << "/>" << endl; } -void Xml::putLevel() +void Xml::tag(const char* name, int val) { - for (int i = 0; i < level*2; ++i) - *this << ' '; + putLevel(); + *this << "<" << name << ">" << val << "</" << name << ">\n"; } -void Xml::intTag(const char* name, int val) +void Xml::tag(const char* name, unsigned val) { putLevel(); *this << "<" << name << ">" << val << "</" << name << ">\n"; } -void Xml::floatTag(const char* name, float val) +void Xml::tag(const char* name, float val) { putLevel(); *this << QString("<%1>%2</%3>\n").arg(name).arg(val).arg(name); } -void Xml::doubleTag(const char* name, double val) +void Xml::tag(const char* name, const double& val) { putLevel(); QString s("<%1>%2</%3>\n"); *this << s.arg(name).arg(val).arg(name); } -void Xml::strTag(const char* name, const char* val) +void Xml::tag(const char* name, const char* s) { - putLevel(); - *this << "<" << name << ">"; - if (val) { - while (*val) { - switch(*val) { - case '&': - *this << "&"; - break; - case '<': - *this << "<"; - break; - case '>': - *this << ">"; - break; - case '"': - *this << """; - break; - case '\'': - *this << "'"; - break; - default: - *this << *val; - break; - } - ++val; - } - } - *this << "</" << name << ">\n"; + tag(name, QString(s)); } //--------------------------------------------------------- // colorTag //--------------------------------------------------------- -void Xml::colorTag(const char* name, const QColor& color) +void Xml::tag(const char* name, const QColor& color) { putLevel(); + char buffer[BS]; snprintf(buffer, BS, "<%s r=\"%d\" g=\"%d\" b=\"%d\" />\n", name, color.red(), color.green(), color.blue()); *this << buffer; @@ -199,33 +193,52 @@ void Xml::colorTag(const char* name, const QColor& color) // geometryTag //--------------------------------------------------------- -void Xml::geometryTag(const char* name, const QWidget* g) +void Xml::tag(const char* name, const QWidget* g) { - qrectTag(name, QRect(g->pos(), g->size())); + tag(name, QRect(g->pos(), g->size())); } //--------------------------------------------------------- // qrectTag //--------------------------------------------------------- -void Xml::qrectTag(const char* name, const QRect& r) +void Xml::tag(const char* name, const QRect& r) { putLevel(); *this << "<" << name; + char buffer[BS]; snprintf(buffer, BS, " x=\"%d\" y=\"%d\" w=\"%d\" h=\"%d\" />\n", r.x(), r.y(), r.width(), r.height()); *this << buffer; } //--------------------------------------------------------- +// xmlString +//--------------------------------------------------------- + +QString Xml::xmlString(const QString& ss) + { + QString s(ss); + s.replace('&', "&"); + s.replace('<', "<"); + s.replace('>', ">"); + s.replace('\'', "'"); + s.replace('"', """); + return s; + } + +//--------------------------------------------------------- // strTag //--------------------------------------------------------- -void Xml::strTag(const char* name, const QString& val) +void Xml::tag(const char* name, const QString& val) { - strTag(name, val.toLatin1().data()); + putLevel(); + *this << "<" << name << ">"; + *this << xmlString(val) << "</" << name << ">\n"; } + //--------------------------------------------------------- // readGeometry //--------------------------------------------------------- @@ -263,22 +276,23 @@ void Xml::writeProperties(const QObject* o) switch(v.type()) { case QVariant::Bool: case QVariant::Int: - intTag(name, v.toInt()); + tag(name, v.toInt()); break; case QVariant::Double: - doubleTag(name, v.toDouble()); + tag(name, v.toDouble()); break; case QVariant::String: - strTag(name, v.toString()); + tag(name, v.toString()); break; case QVariant::Rect: - qrectTag(name, v.toRect()); + tag(name, v.toRect()); break; case QVariant::Point: { QPoint p = v.toPoint(); putLevel(); *this << "<" << name; + char buffer[BS]; snprintf(buffer, BS, " x=\"%d\" y=\"%d\" />\n", p.x(), p.y()); *this << buffer; diff --git a/muse/al/xml.h b/muse/al/xml.h index 4c438c3b..e71b57a8 100644 --- a/muse/al/xml.h +++ b/muse/al/xml.h @@ -23,35 +23,43 @@ namespace AL { -static const int BS = 2048; - //--------------------------------------------------------- // Xml //--------------------------------------------------------- class Xml : public QTextStream { - char buffer[BS]; + static const int BS = 2048; int level; public: + Xml(); Xml(QIODevice*); + void header(); void putLevel(); + void put(const char* format, ...); void nput(const char* format, ...); - void tag(const char* format, ...); - void etag(const char* format, ...); + + void stag(const char* format, ...); + void etag(const char* format); + void tagE(const char* format, ...); void tdata(const QString&); - void intTag(const char* const name, int val); - void doubleTag(const char* const name, double val); - void floatTag(const char* const name, float val); - void strTag(const char* const name, const char* val); - void strTag(const char* const name, const QString& s); - void colorTag(const char* name, const QColor& color); - void geometryTag(const char* name, const QWidget* g); - void qrectTag(const char* name, const QRect& r); + + void tag(const char* name, int); + void tag(const char* name, unsigned); + void tag(const char* name, const double& val); + void tag(const char* name, float val); + void tag(const char* name, const char* val); + void tag(const char* name, const QString& s); + void tag(const char* name, const QColor& color); + void tag(const char* name, const QWidget* g); + void tag(const char* name, const QRect& r); + void writeProperties(const QObject*); + + static QString xmlString(const QString&); }; extern QRect readGeometry(QDomNode); |
