diff options
Diffstat (limited to 'akregator/src/librss/tools_p.cpp')
-rw-r--r-- | akregator/src/librss/tools_p.cpp | 63 |
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(); } } |