24 #include "personimpl.h"
26 #include <kcharsets.h>
28 #include <kdatetime.h>
30 #include <QtCore/QByteArray>
31 #include <QtCore/QDateTime>
32 #include <QtCore/QRegExp>
33 #include <QtCore/QString>
37 namespace Syndication {
54 const char* s = array.data();
55 unsigned int hash = 5381;
57 while ( ( c = *s++ ) ) hash = ((hash << 5) + hash) + c;
64 static time_t toTimeT(KDateTime& kdt)
67 if (kdt.isDateOnly()) {
68 kdt.setTimeSpec(KDateTime::UTC);
69 kdt.setTime(QTime(12, 0));
71 return kdt.toTime_t();
78 KDateTime kdt = KDateTime::fromString(str, KDateTime::ISODate);
84 KDateTime kdt = KDateTime::fromString(str, KDateTime::RFCDate);
112 return dt.toUTC().toString();
118 md5Machine.update(str.toUtf8());
119 return QLatin1String(md5Machine.hexDigest().constData());
124 return KCharsets::resolveEntities(str);
130 str.replace(QLatin1Char(
'&'), QLatin1String(
"&"));
131 str.replace(QLatin1Char(
'\"'), QLatin1String(
"""));
132 str.replace(QLatin1Char(
'<'), QLatin1String(
"<"));
133 str.replace(QLatin1Char(
'>'), QLatin1String(
">"));
134 str.replace(QLatin1Char(
'\''), QLatin1String(
"'"));
135 return str.trimmed();
141 str.replace(QLatin1Char(
'\n'), QLatin1String(
"<br/>"));
147 QString str(plainText);
148 str.replace(QLatin1Char(
'&'), QLatin1String(
"&"));
149 str.replace(QLatin1Char(
'\"'), QLatin1String(
"""));
150 str.replace(QLatin1Char(
'<'), QLatin1String(
"<"));
152 str.replace(QLatin1Char(
'\n'), QLatin1String(
"<br/>"));
153 return str.trimmed();
160 str.remove(QRegExp(QLatin1String(
"<[^>]*>")));
162 return str.trimmed();
166 static QRegExp tagRegExp;
167 static bool tagRegExpSet =
false;
173 if (str.contains(QRegExp(QLatin1String(
"&[a-zA-Z0-9#]+;"))))
176 const int ltc = str.count(QLatin1Char(
'<'));
182 tagRegExp = QRegExp(QLatin1String(
"<\\w+.*/?>"));
185 return str.contains(tagRegExp);
191 if (str.contains(QRegExp(QLatin1String(
"&[a-zA-Z0-9#]+;"))))
194 const int ltc = str.count(QLatin1Char(
'<'));
200 tagRegExp = QRegExp(QLatin1String(
"<\\w+.*/?>"));
203 if (str.contains(tagRegExp))
214 QString
normalize(
const QString& strp,
bool isCDATA,
bool containsMarkup)
217 return strp.trimmed();
239 QString str = strp.trimmed();
241 return PersonPtr(
new PersonImpl());
251 QRegExp remail(QLatin1String(
"<?([^@\\s<]+@[^>\\s]+)>?"));
254 int pos = remail.indexIn(str);
257 QString all = remail.cap(0);
258 email = remail.cap(1);
263 email.remove(QLatin1String(
"mailto:"));
264 email.remove(QRegExp(QLatin1String(
"[\\(\\)]")));
268 name = str.simplified();
276 QRegExp rename(QLatin1String(
"^\\(([^\\)]*)\\)"));
278 if (rename.exactMatch(name))
280 name = rename.cap(1);
283 name = name.isEmpty() ? QString() : name;
284 email = email.isEmpty() ? QString() : email;
285 uri = uri.isEmpty() ? QString() : uri;
287 if (name.isEmpty() && email.isEmpty() && uri.isEmpty())
288 return PersonPtr(
new PersonImpl());
290 return PersonPtr(
new PersonImpl(name, uri, email));
293 ElementType::ElementType(
const QString& localnamep,
294 const QString& nsp) : ns(nsp), localname(localnamep)
298 bool ElementType::operator==(
const ElementType& other)
const
300 return localname == other.localname && ns == other.ns;