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