]> git.sven.stormbind.net Git - sven/vym.git/blob - src/xmlobj.cpp
New upstream version 2.9.22
[sven/vym.git] / src / xmlobj.cpp
1 #include "xmlobj.h"
2
3 #include <QRegExp>
4 #include <QStringList>
5
6 // returns masked '<' '>' '&'  '"'
7 QString quoteMeta(const QString &s)
8 {
9     QString r = s;
10     QRegExp rx("&(?!amp;)");
11     r.replace(rx, "&amp;");
12     rx.setPattern(">");
13     r.replace(rx, "&gt;");
14     rx.setPattern("<");
15     r.replace(rx, "&lt;");
16     rx.setPattern("\"");
17     r.replace(rx, "&quot;");
18     rx.setPattern("\n");
19     r.replace(rx, "\\n");
20     return r;
21 }
22
23 QString unquoteMeta(const QString &s)
24 {
25     QString r = s;
26     QRegExp rx("&amp;)");
27     r.replace(rx, "&");
28     rx.setPattern("&gt;");
29     r.replace(rx, ">");
30     rx.setPattern("&lt;");
31     r.replace(rx, "<");
32     rx.setPattern("&quot;");
33     r.replace(rx, "\"");
34     rx.setPattern("\\\\n");
35     r.replace(rx, "\n");
36     return r;
37 }
38
39 QString quoteQuotes(const QString &s)
40 {
41     QString r = s;
42
43     QRegExp rx("\"");
44     r.replace(rx, "\\\"");
45
46     rx.setPattern("\n");
47     r.replace(rx, "\\n");
48
49     return r;
50 }
51
52 QString unquoteQuotes(const QString &s)
53 {
54     QString r = s;
55
56     QRegExp rx("\\\\\"");
57     r.replace(rx, "\"");
58
59     rx.setPattern("\\\\n");
60     r.replace(rx, "\n");
61
62     return r;
63 }
64
65 QString getCDATA(const QString &s)
66 {
67     // Check, if we need to use CDATA after all
68     if (s.contains("<") || s.contains(">") || s.contains("\"") ||
69         s.contains("&")) {
70         QStringList list = s.split("]]>");
71         int i = s.indexOf("]]>");
72         if (i >= 0)
73             // split up and calculate recursively
74             return getCDATA(s.left(i + 2)) +
75                    getCDATA(s.right(s.length() - i - 2));
76         else
77             return "<![CDATA[" + s + "]]>";
78     }
79     else
80         return s;
81 }
82
83 int XMLObj::curIndent = 0; // make instance of curIndent
84
85 XMLObj::XMLObj() { indentWidth = 4; }
86
87 XMLObj::~XMLObj() {}
88
89 // returns <s at />
90 QString XMLObj::singleElement(QString s, QString at)
91 {
92     return indent() + "<" + s + " " + at + " />";
93 }
94
95 // returns <s at at at at ... />
96 QString XMLObj::singleElement(QString s, QStringList attributes)
97 {
98     return indent() + "<" + s + " " + attributes.join(" ") + " />";
99 }
100
101 // returns <s>
102 QString XMLObj::beginElement(QString s) { return indent() + "<" + s + ">"; }
103
104 // returns <s at>
105 QString XMLObj::beginElement(QString s, QString at)
106 {
107     return indent() + "<" + s + " " + at + ">";
108 }
109
110 // returns </s>
111 QString XMLObj::endElement(QString s) { return indent() + "</" + s + ">"; }
112
113 // returns  at="val"
114 QString XMLObj::attribut(QString at, QString val) const
115 {
116     return " " + at + "=\"" + quoteMeta(val) + "\"";
117 }
118
119 // returns <s> val </s>
120 QString XMLObj::valueElement(QString el, QString val)
121 {
122     return indent() + "<" + el + ">" + val + "</" + el + ">";
123 }
124
125 // returns <s at> val </s>
126 QString XMLObj::valueElement(QString el, QString val, QString at)
127 {
128     return "<" + el + " " + at + ">" + val + "</" + el + ">";
129 }
130
131 void XMLObj::incIndent() { curIndent++; }
132
133 void XMLObj::decIndent()
134 {
135     curIndent--;
136     if (curIndent < 0)
137         curIndent = 0;
138 }
139
140 QString XMLObj::indent()
141 {
142     QString s = "\n";
143     int i;
144     for (i = 0; i < curIndent * indentWidth; i++) {
145         s += " ";
146     }
147     return s;
148 }