void MarkupAccumulator::appendStartMarkup(StringBuilder& result, Node& node, Namespaces* namespaces) { switch (node.nodeType()) { case Node::TEXT_NODE: appendText(result, toText(node)); break; case Node::COMMENT_NODE: appendComment(result, toComment(node).data()); break; case Node::DOCUMENT_NODE: appendXMLDeclaration(result, toDocument(node)); break; case Node::DOCUMENT_FRAGMENT_NODE: break; case Node::DOCUMENT_TYPE_NODE: appendDocumentType(result, toDocumentType(node)); break; case Node::PROCESSING_INSTRUCTION_NODE: appendProcessingInstruction(result, toProcessingInstruction(node).target(), toProcessingInstruction(node).data()); break; case Node::ELEMENT_NODE: appendElement(result, toElement(node), namespaces); break; case Node::CDATA_SECTION_NODE: appendCDATASection(result, toCDATASection(node).data()); break; case Node::ATTRIBUTE_NODE: ASSERT_NOT_REACHED(); break; } }
void MarkupAccumulator::appendStartMarkup(StringBuilder& result, const Node* node, Namespaces* namespaces) { if (namespaces) namespaces->checkConsistency(); switch (node->nodeType()) { case Node::TEXT_NODE: appendText(result, toText(const_cast<Node*>(node))); break; case Node::COMMENT_NODE: appendComment(result, static_cast<const Comment*>(node)->data()); break; case Node::DOCUMENT_NODE: appendXMLDeclaration(result, static_cast<const Document*>(node)); break; case Node::DOCUMENT_FRAGMENT_NODE: break; case Node::DOCUMENT_TYPE_NODE: appendDocumentType(result, static_cast<const DocumentType*>(node)); break; case Node::PROCESSING_INSTRUCTION_NODE: appendProcessingInstruction(result, static_cast<const ProcessingInstruction*>(node)->target(), static_cast<const ProcessingInstruction*>(node)->data()); break; case Node::ELEMENT_NODE: appendElement(result, static_cast<Element*>(const_cast<Node*>(node)), namespaces); break; case Node::CDATA_SECTION_NODE: appendCDATASection(result, static_cast<const CDATASection*>(node)->data()); break; case Node::ATTRIBUTE_NODE: case Node::ENTITY_NODE: case Node::ENTITY_REFERENCE_NODE: case Node::NOTATION_NODE: case Node::XPATH_NAMESPACE_NODE: ASSERT_NOT_REACHED(); break; } }
void DisassemblerLines::appendUnparsed(const QString &unparsed) { QString line = unparsed.trimmed(); if (line.isEmpty()) return; if (line.startsWith(QLatin1String("Current language:"))) return; if (line.startsWith(QLatin1String("Dump of assembler"))) { m_lastFunction.clear(); return; } if (line.startsWith(QLatin1String("The current source"))) return; if (line.startsWith(QLatin1String("End of assembler"))) { m_lastFunction.clear(); return; } if (line.startsWith(QLatin1String("=> "))) line = line.mid(3); if (line.startsWith(QLatin1String("0x"))) { // Address line. Split at the tab. int tab1 = line.indexOf(QLatin1Char('\t')); if (tab1 == -1) { appendComment(line); return; } int tab2 = line.indexOf(QLatin1Char('\t'), tab1 + 1); if (tab2 == -1) tab2 = tab1; QString address = line.left(tab1); if (address.endsWith(QLatin1Char(':'))) address.chop(1); int pos1 = address.indexOf(QLatin1Char('<')) + 1; DisassemblerLine dl; dl.bytes = line.mid(tab1, tab2 - tab1).trimmed(); m_bytesLength = qMax(m_bytesLength, tab2 - tab1); dl.data = line.mid(tab2).trimmed(); if (pos1 && address.indexOf(QLatin1String("<UNDEFINED> instruction:")) == -1) { if (address.endsWith(QLatin1Char('>'))) address.chop(1); int pos2 = address.indexOf(QLatin1Char('+'), pos1); if (pos1 < pos2) { QString function = address.mid(pos1, pos2 - pos1); if (function != m_lastFunction) { DisassemblerLine dl; dl.data = _("Function: ") + function; m_data.append(dl); m_lastFunction = function; } } dl.address = address.left(pos1 - 1).toULongLong(0, 0); dl.function = m_lastFunction; dl.offset = address.mid(pos2).toUInt(); } else { // Plain data like "0x0000cd64:\tadd\tlr, pc, lr\n" dl.address = address.toULongLong(0, 0); dl.function = m_lastFunction; dl.offset = 0; } m_rowCache[dl.address] = m_data.size() + 1; m_data.append(dl); } else { // Comment or code line. QTextStream ts(&line); DisassemblerLine dl; ts >> dl.lineNumber; dl.data = line.mid(ts.pos()); m_data.append(dl); } }