static QString extractAddress(DOM::Node node) { QString rc = ";;"; QMap<QString,QString> entry; DOM::NodeList nodes = node.childNodes(); unsigned int n = nodes.length(); for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } QString a = map.item(j).nodeValue().string(); if (a == "street-address") { entry["street-address"] = textForNode(node); } else if (a == "locality") { entry["locality"] = textForNode(node); } else if (a == "region") { entry["region"] = textForNode(node); } else if (a == "postal-code") { entry["postal-code"] = textForNode(node); } } } rc += entry["street-address"] + ";" + entry["locality"] + ";" + entry["region"] + ";" + entry["postal-code"] + ";" + entry["country"]; return rc.stripWhiteSpace(); }
bool KonqMFIcon::hasMicroFormat(DOM::NodeList nodes) { bool ok = false; unsigned int n = nodes.length(); for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } if (map.item(j).nodeValue().string() == "vevent") { ok = true; extractEvent(node); break; } if (map.item(j).nodeValue().string() == "vcard") { ok = true; extractCard(node); break; } } if (hasMicroFormat(node.childNodes())) { ok = true; } } return ok; }
void KonqMFIcon::extractCard(DOM::Node node) { QString name, value; DOM::NodeList nodes = node.childNodes(); unsigned int n = nodes.length(); value += "BEGIN:VCARD\nVERSION:3.0\n"; for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } QStringList l = QStringList::split(' ', map.item(j).nodeValue().string()); for (QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) { if (*it == "photo") { } else if (*it == "adr") { value += "ADR:" + extractAddress(node) + "\n"; } else if (*it == "tel") { value += "TEL;TYPE=VOICE:" + textForNode(node) + "\n"; } else if (*it == "fn") { name = textForNode(node); value += "FN:" + name + "\n"; } else if (*it == "url") { DOM::Node at = node.attributes().getNamedItem("href"); if (!at.isNull()) { value += "URL:" + at.nodeValue().string().stripWhiteSpace() + "\n"; } } else if (*it == "email") { DOM::Node at = node.attributes().getNamedItem("href"); if (!at.isNull()) { QString v = at.nodeValue().string(); if (v.startsWith("mailto:")) { v = v.mid(7); } value += "EMAIL:" + v.stripWhiteSpace() + "\n"; } } else if (*it == "org") { value += "ORG:" + textForNode(node) + "\n"; } } } } if (!name.isEmpty()) { value += "END:VCARD\n"; _cards.append(qMakePair(name, value)); } }
void KonqMFIcon::extractEvent(DOM::Node node) { QString name, value = "BEGIN:VCALENDAR\nPRODID:-//Konqueror//EN\nVERSION:2.0\nBEGIN:VEVENT\n"; DOM::NodeList nodes = node.childNodes(); unsigned int n = nodes.length(); for (unsigned int i = 0; i < n; ++i) { DOM::Node node = nodes.item(i); DOM::NamedNodeMap map = node.attributes(); for (unsigned int j = 0; j < map.length(); ++j) { if (map.item(j).nodeName().string() != "class") { continue; } QStringList l = QStringList::split(' ', map.item(j).nodeValue().string()); for (QStringList::ConstIterator it = l.begin(); it != l.end(); ++it) { if (*it == "url") { DOM::Node at = node.attributes().getNamedItem("href"); if (!at.isNull()) { value += "URL:" + at.nodeValue().string().stripWhiteSpace() + "\n"; } } else if (*it == "dtstart") { DOM::Node at = node.attributes().getNamedItem("title"); if (!at.isNull()) { value += "DTSTART:" + at.nodeValue().string().stripWhiteSpace() + "\n"; } } else if (*it == "dtend") { DOM::Node at = node.attributes().getNamedItem("title"); if (!at.isNull()) { value += "DTEND:" + at.nodeValue().string().stripWhiteSpace() + "\n"; } } else if (*it == "summary") { name = textForNode(node); value += "SUMMARY:" + name + "\n"; } else if (*it == "location") { value += "LOCATION:" + textForNode(node) + "\n"; } } } } if (!name.isEmpty()) { value += "END:VEVENT\nEND:VCALENDAR\n"; _events.append(qMakePair(name, value)); } }
void DOMTreeView::initializeOptionsFromElement(const DOM::Element &element) { QListViewItem *last = 0; nodeAttributes->clear(); DOM::NamedNodeMap attrs = element.attributes(); unsigned long lmap = attrs.length(); for (unsigned int j = 0; j < lmap; j++) { DOM::Attr attr = attrs.item(j); // kdDebug(90180) << attr.name().string() << "=" << attr.value().string() << endl; QListViewItem *item = new AttributeListItem(attr.name().string(), attr.value().string(), nodeAttributes, last); last = item; } // append new item last = new AttributeListItem(nodeAttributes, last); nodeInfoStack->raiseWidget(ElementPanel); }
void DOMTreeView::initializeDOMInfoFromElement(const DOM::Element &element) { QTreeWidgetItem *last = 0; nodeAttributes->clear(); DOM::NamedNodeMap attrs = element.attributes(); unsigned long lmap = attrs.length(); for (unsigned int j = 0; j < lmap; j++) { DOM::Attr attr = attrs.item(j); // kDebug(90180) << attr.name().string() << "=" << attr.value().string(); QTreeWidgetItem *item = new AttributeListItem(attr.name().string(), attr.value().string(), nodeAttributes, last); last = item; } // append new item last = new AttributeListItem(nodeAttributes, last); nodeAttributes->sortByColumn(0, Qt::AscendingOrder); nodeInfoStack->setCurrentIndex(ElementPanel); }
LinkItem::LinkItem( DOM::Element link ) : m_valid( false ) { DOM::NamedNodeMap attrs = link.attributes(); DOM::Node href = attrs.getNamedItem( "href" ); // Load source address of images too DOM::Node src = attrs.getNamedItem( "src" ); if ( href.nodeValue().string().isEmpty() && !src.nodeValue().string().isEmpty() ) href = src; // qDebug("*** href: %s", href.nodeValue().string().latin1() ); QString urlString = link.ownerDocument().completeURL( href.nodeValue() ).string(); if ( urlString.isEmpty() ) return; url = KUrl( urlString ); if ( !KProtocolManager::supportsReading( url ) ) return; // somehow getElementsByTagName("#text") doesn't work :( DOM::NodeList children = link.childNodes(); for ( uint i = 0; i < children.length(); i++ ) { DOM::Node node = children.item( i ); if ( node.nodeType() == DOM::Node::TEXT_NODE ) text.append( node.nodeValue().string() ); } // force "local file" mimetype determination KMimeType::Ptr mt = KMimeType::findByUrl( url, 0, true, true); icon = mt->iconName(); mimeType = mt->comment(); m_valid = true; }
void DOMTreeView::saveRecursive(const DOM::Node &pNode, int indent) { const QString nodeName(pNode.nodeName().string()); QString text; QString strIndent; strIndent.fill(' ', indent); const DOM::Element element = static_cast<const DOM::Element>(pNode); text = strIndent; if ( !element.isNull() ) { if (nodeName.at(0)=='-') { /* Don't save khtml internal tags '-konq..' * Approximating it with <DIV> */ text += "<DIV> <!-- -KONG_BLOCK -->"; } else { text += "<" + nodeName; QString attributes; DOM::Attr attr; const DOM::NamedNodeMap attrs = element.attributes(); unsigned long lmap = attrs.length(); for( uint j=0; j<lmap; j++ ) { attr = static_cast<DOM::Attr>(attrs.item(j)); attributes += " " + attr.name().string() + "=\"" + attr.value().string() + "\""; } if (!(attributes.isEmpty())){ text += " "; } text += attributes.simplifyWhiteSpace(); if(element.firstChild().isNull()) { text += "/>"; } else { text += ">"; } } } else { text = strIndent + pNode.nodeValue().string(); } kdDebug(90180) << text << endl; if (!(text.isEmpty())) { (*m_textStream) << text << endl; } DOM::Node child = pNode.firstChild(); while(!child.isNull()) { saveRecursive(child, indent+2); child = child.nextSibling(); } if (!(element.isNull()) && (!(element.firstChild().isNull()))) { if (nodeName.at(0)=='-') { text = strIndent + "</DIV> <!-- -KONG_BLOCK -->"; } else { text = strIndent + "</" + pNode.nodeName().string() + ">"; } kdDebug(90180) << text << endl; (*m_textStream) << text << endl; } }
void DOMTreeView::addElement ( const DOM::Node &node, DOMListViewItem *cur_item, bool isLast) { cur_item->setClosing(isLast); const QString nodeName(node.nodeName().string()); QString text; const DOM::Element element = node; if (!element.isNull()) { if (!m_bPure) { if (isLast) { text ="</"; } else { text = "<"; } text += nodeName; } else { text = nodeName; } if (m_bShowAttributes && !isLast) { QString attributes; DOM::Attr attr; DOM::NamedNodeMap attrs = element.attributes(); unsigned long lmap = attrs.length(); for( unsigned int j=0; j<lmap; j++ ) { attr = static_cast<DOM::Attr>(attrs.item(j)); attributes += " " + attr.name().string() + "=\"" + attr.value().string() + "\""; } if (!(attributes.isEmpty())) { text += " "; } text += attributes.simplifyWhiteSpace(); } if (!m_bPure) { if(element.firstChild().isNull()) { text += "/>"; } else { text += ">"; } } cur_item->setText(0, text); } else { text = "`" + node.nodeValue().string() + "'"; // Hacks to deal with PRE QTextStream ts( text, IO_ReadOnly ); while (!ts.eof()) { const QString txt(ts.readLine()); const QFont font(KGlobalSettings::fixedFont()); cur_item->setFont( font ); cur_item->setText(0, txt); if(node.handle()) { m_itemdict.insert(node.handle(), cur_item); } DOMListViewItem *parent; if (cur_item->parent()) { parent = static_cast<DOMListViewItem *>(cur_item->parent()); } else { parent = cur_item; } cur_item = new DOMListViewItem(node, parent, cur_item); } // This is one is too much DOMListViewItem *notLastItem = static_cast<DOMListViewItem *>(cur_item->itemAbove()); delete cur_item; cur_item = notLastItem; } if (m_bHighlightHTML && node.ownerDocument().isHTMLDocument()) { highlightHTML(cur_item, nodeName); } }