summaryrefslogtreecommitdiffstats
path: root/akregator/src/librss/tools_p.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'akregator/src/librss/tools_p.cpp')
-rw-r--r--akregator/src/librss/tools_p.cpp63
1 files changed, 58 insertions, 5 deletions
diff --git a/akregator/src/librss/tools_p.cpp b/akregator/src/librss/tools_p.cpp
index 9303bdf5..04dc570b 100644
--- a/akregator/src/librss/tools_p.cpp
+++ b/akregator/src/librss/tools_p.cpp
@@ -117,6 +117,59 @@ static TQString extractAtomContent(const TQDomElement& e)
return TQString();
}
+TQDomElement extractElementNS(const TQDomNode &parent, const TQString &nameSpace, const TQString &localName)
+{
+ TQDomElement element;
+
+ if (parent.isNull())
+ {
+ return element;
+ }
+
+ TQDomNodeList children = parent.childNodes();
+ for (size_t i = 0; i < children.count(); ++i)
+ {
+ TQDomNode node = children.item(i);
+ if (node.isElement() && node.namespaceURI() == nameSpace && node.localName() == localName)
+ {
+ element = node.toElement();
+ break;
+ }
+ }
+
+ return element;
+}
+
+TQString extractElementTextNS(const TQDomNode &parent, const TQString &namespaceURI, const TQString &localName, bool isInlined)
+{
+ TQDomElement element = extractElementNS(parent, namespaceURI, localName);
+
+ if (element.isNull())
+ {
+ return TQString::null;
+ }
+
+ TQString result = element.text().stripWhiteSpace();
+ if (localName == "content")
+ {
+ // Atom content
+ result = extractAtomContent(element);
+ }
+ else
+ {
+ // Check for HTML; not necessary for atom:content
+ // Taken from extractNode below
+ bool hasPre = result.contains("<pre>", false) || result.contains("<pre ", false);
+ bool hasHtml = hasPre || result.contains("<");
+ if (!isInlined && !hasHtml)
+ result = result = result.replace(TQChar('\n'), "<br />");
+ if (!hasPre)
+ result = result.simplifyWhiteSpace();
+ }
+
+ return result.isEmpty() ? TQString::null : result;
+}
+
TQString extractNode(const TQDomNode &parent, const TQString &elemName, bool isInlined)
{
TQDomNode node = parent.namedItem(elemName);
@@ -208,25 +261,25 @@ TQString parseItemAuthor(const TQDomElement& element, Format format, Version ver
TQString name;
TQString email;
- TQDomElement dcCreator = element.namedItem("dc:creator").toElement();
-
+ TQDomElement dcCreator = extractElementNS(element, DublinCoreNamespace, "creator");
+
if (!dcCreator.isNull())
authorFromString(dcCreator.text(), name, email);
else if (format == AtomFeed)
{
TQDomElement atomAuthor = element.namedItem("author").toElement();
if (atomAuthor.isNull())
- atomAuthor = element.namedItem("atom:author").toElement();
+ atomAuthor = extractElementNS(element, AtomNamespace, "author");
if (!atomAuthor.isNull())
{
TQDomElement atomName = atomAuthor.namedItem("name").toElement();
if (atomName.isNull())
- atomName = atomAuthor.namedItem("atom:name").toElement();
+ atomName = extractElementNS(atomAuthor, AtomNamespace, "name");
name = atomName.text().stripWhiteSpace();
TQDomElement atomEmail = atomAuthor.namedItem("email").toElement();
if (atomEmail.isNull())
- atomEmail = atomAuthor.namedItem("atom:email").toElement();
+ atomEmail = extractElementNS(atomAuthor, AtomNamespace, "email");
email = atomEmail.text().stripWhiteSpace();
}
}