X-Git-Url: https://git.sven.stormbind.net/?a=blobdiff_plain;f=src%2Fxmlobj.cpp;fp=src%2Fxmlobj.cpp;h=50d1b4280fb91afa6f4e15179b704b6b902903de;hb=d483bd8e6523c23c6f1d8908a2e0611c2bc9ff4f;hp=0000000000000000000000000000000000000000;hpb=7dfa3fe589d1722d49681f42cdb0bf1e6efb5223;p=sven%2Fvym.git diff --git a/src/xmlobj.cpp b/src/xmlobj.cpp new file mode 100644 index 0000000..50d1b42 --- /dev/null +++ b/src/xmlobj.cpp @@ -0,0 +1,148 @@ +#include "xmlobj.h" + +#include +#include + +// returns masked '<' '>' '&' '"' +QString quoteMeta(const QString &s) +{ + QString r = s; + QRegExp rx("&(?!amp;)"); + r.replace(rx, "&"); + rx.setPattern(">"); + r.replace(rx, ">"); + rx.setPattern("<"); + r.replace(rx, "<"); + rx.setPattern("\""); + r.replace(rx, """); + rx.setPattern("\n"); + r.replace(rx, "\\n"); + return r; +} + +QString unquoteMeta(const QString &s) +{ + QString r = s; + QRegExp rx("&)"); + r.replace(rx, "&"); + rx.setPattern(">"); + r.replace(rx, ">"); + rx.setPattern("<"); + r.replace(rx, "<"); + rx.setPattern("""); + r.replace(rx, "\""); + rx.setPattern("\\\\n"); + r.replace(rx, "\n"); + return r; +} + +QString quoteQuotes(const QString &s) +{ + QString r = s; + + QRegExp rx("\""); + r.replace(rx, "\\\""); + + rx.setPattern("\n"); + r.replace(rx, "\\n"); + + return r; +} + +QString unquoteQuotes(const QString &s) +{ + QString r = s; + + QRegExp rx("\\\\\""); + r.replace(rx, "\""); + + rx.setPattern("\\\\n"); + r.replace(rx, "\n"); + + return r; +} + +QString getCDATA(const QString &s) +{ + // Check, if we need to use CDATA after all + if (s.contains("<") || s.contains(">") || s.contains("\"") || + s.contains("&")) { + QStringList list = s.split("]]>"); + int i = s.indexOf("]]>"); + if (i >= 0) + // split up and calculate recursively + return getCDATA(s.left(i + 2)) + + getCDATA(s.right(s.length() - i - 2)); + else + return ""; + } + else + return s; +} + +int XMLObj::curIndent = 0; // make instance of curIndent + +XMLObj::XMLObj() { indentWidth = 4; } + +XMLObj::~XMLObj() {} + +// returns +QString XMLObj::singleElement(QString s, QString at) +{ + return indent() + "<" + s + " " + at + " />"; +} + +// returns +QString XMLObj::singleElement(QString s, QStringList attributes) +{ + return indent() + "<" + s + " " + attributes.join(" ") + " />"; +} + +// returns +QString XMLObj::beginElement(QString s) { return indent() + "<" + s + ">"; } + +// returns +QString XMLObj::beginElement(QString s, QString at) +{ + return indent() + "<" + s + " " + at + ">"; +} + +// returns +QString XMLObj::endElement(QString s) { return indent() + ""; } + +// returns at="val" +QString XMLObj::attribut(QString at, QString val) const +{ + return " " + at + "=\"" + quoteMeta(val) + "\""; +} + +// returns val +QString XMLObj::valueElement(QString el, QString val) +{ + return indent() + "<" + el + ">" + val + ""; +} + +// returns val +QString XMLObj::valueElement(QString el, QString val, QString at) +{ + return "<" + el + " " + at + ">" + val + ""; +} + +void XMLObj::incIndent() { curIndent++; } + +void XMLObj::decIndent() +{ + curIndent--; + if (curIndent < 0) + curIndent = 0; +} + +QString XMLObj::indent() +{ + QString s = "\n"; + int i; + for (i = 0; i < curIndent * indentWidth; i++) { + s += " "; + } + return s; +}