bool XMLHandler::startElement( const QString& namespaceURI, const QString& /*localName*/, const QString& qName, const QXmlAttributes& atts ) { if (m_currentNode->nodeType() == Node::TEXT_NODE) exitText(); ElementImpl *newElement; if (namespaceURI.isNull()) newElement = m_doc->createElement(qName); else newElement = m_doc->createElementNS(namespaceURI,qName); // ### handle exceptions int i; for (i = 0; i < atts.length(); i++) newElement->setAttribute(atts.localName(i),atts.value(i)); if (m_currentNode->addChild(newElement)) { if (m_view) newElement->attach(m_view); m_currentNode = newElement; return TRUE; } else { delete newElement; return FALSE; } }
CSSStyleDeclarationImpl *Editor::selectionComputedStyle(NodeImpl *&nodeToRemove) const { nodeToRemove = 0; if (!m_part->xmlDocImpl()) { return 0; } EditorContext *ctx = m_part->editorContext(); if (ctx->m_selection.state() == Selection::NONE) { return 0; } Range range(ctx->m_selection.toRange()); Position pos(range.startContainer().handle(), range.startOffset()); assert(pos.notEmpty()); ElementImpl *elem = pos.element(); ElementImpl *styleElement = elem; int exceptionCode = 0; if (m_typingStyle) { styleElement = m_part->xmlDocImpl()->createHTMLElement("SPAN"); // assert(exceptionCode == 0); styleElement->setAttribute(ATTR_STYLE, m_typingStyle->cssText().implementation()); // assert(exceptionCode == 0); TextImpl *text = m_part->xmlDocImpl()->createEditingTextNode(""); styleElement->appendChild(text, exceptionCode); assert(exceptionCode == 0); elem->appendChild(styleElement, exceptionCode); assert(exceptionCode == 0); nodeToRemove = styleElement; } return new RenderStyleDeclarationImpl(styleElement); }