summaryrefslogtreecommitdiff
path: root/muse/al
diff options
context:
space:
mode:
authorWerner Schweer <ws.seh.de>2006-11-27 11:24:14 +0000
committerWerner Schweer <ws.seh.de>2006-11-27 11:24:14 +0000
commit776dc95b628074122e7a71d493e2993e9c8686fd (patch)
treead2227b65e1f43c78821ab8741ed0d32a0163e53 /muse/al
parent7241ad863d32fa5627697f34aef2bc9ee7049b07 (diff)
class Xml update
Diffstat (limited to 'muse/al')
-rw-r--r--muse/al/sig.cpp10
-rw-r--r--muse/al/tempo.cpp10
-rw-r--r--muse/al/xml.cpp136
-rw-r--r--muse/al/xml.h34
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 << "&amp;";
- break;
- case '<':
- *this << "&lt;";
- break;
- case '>':
- *this << "&gt;";
- break;
- case '"':
- *this << "&quot;";
- break;
- case '\'':
- *this << "&apos;";
- 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('&', "&amp;");
+ s.replace('<', "&lt;");
+ s.replace('>', "&gt;");
+ s.replace('\'', "&apos;");
+ s.replace('"', "&quot;");
+ 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);