void WebXMLGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker) { QByteArray data; QXmlStreamWriter writer(&data); writer.setAutoFormatting(true); writer.writeStartDocument(); writer.writeStartElement("WebXML"); writer.writeStartElement("document"); generateIndexSections(writer, fake, marker); writer.writeEndElement(); // document writer.writeEndElement(); // WebXML writer.writeEndDocument(); out() << data; out().flush(); }
void LinguistGenerator::generateClassLikeNode(const InnerNode *inner, CodeMarker *marker) { out().setCodec("utf-8"); QDomDocument document("TS"); QDomElement documentElement = document.createElement("TS"); documentElement.setAttribute("version", "1.1"); QList<QDomElement> contextElements = generateIndexSections(document, inner, marker); foreach (const QDomElement &element, contextElements) documentElement.appendChild(element); QDomProcessingInstruction process = document.createProcessingInstruction( "xml", QString("version=\"1.0\" encoding=\"%1\"").arg("utf-8")); document.appendChild(process); document.appendChild(documentElement); out() << document; out().flush(); }
QList<QDomElement> LinguistGenerator::generateIndexSections( QDomDocument &document, const Node *node, CodeMarker *marker) { QList<QDomElement> contexts; if (node->isInnerNode()) { const InnerNode *inner = static_cast<const InnerNode *>(node); foreach (const Node *child, inner->childNodes()) { // Recurse to generate a DOM element for this child node and all // its children. contexts += generateIndexSections(document, child, marker); } /* foreach (const Node *child, inner->relatedNodes()) { QDomElement childElement = generateIndexSections(document, child, marker); element.appendChild(childElement); } */ } // Add documentation to this node if it exists. if (!node->doc().isEmpty()) { QString nodeName = fullName(node); QString signature; if (node->type() == Node::Function) { QStringList pieces; const FunctionNode *functionNode = static_cast<const FunctionNode*>(node); foreach (const Parameter ¶meter, functionNode->parameters()) { QString typeString = parameter.leftType() + parameter.rightType(); if (typeString.split(" ").size() > 1) pieces.append(typeString + parameter.name()); else pieces.append(typeString + " " + parameter.name()); } signature = "(" + pieces.join(", ") + ")"; }
void WebXMLGenerator::generateIndexSections(QXmlStreamWriter &writer, const Node *node, CodeMarker *marker) { if (tre->generateIndexSection(writer, node, true)) { // Add documentation to this node if it exists. writer.writeStartElement("description"); writer.writeAttribute("path", node->doc().location().filePath()); writer.writeAttribute("line", QString::number(node->doc().location().lineNo())); writer.writeAttribute("column", QString::number(node->doc().location().columnNo())); if (node->type() == Node::Fake) { const FakeNode *fake = static_cast<const FakeNode *>(node); generateRelations(writer, node, marker); if (fake->subType() == FakeNode::Module) { writer.writeStartElement("generatedlist"); writer.writeAttribute("contents", "classesbymodule"); if (moduleNamespaceMap.contains(fake->name())) { writer.writeStartElement("section"); writer.writeStartElement("heading"); writer.writeAttribute("level", "1"); writer.writeCharacters("Namespaces"); writer.writeEndElement(); // heading generateAnnotatedList(writer, fake, marker, moduleNamespaceMap[fake->name()]); writer.writeEndElement(); // section } if (moduleClassMap.contains(fake->name())) { writer.writeStartElement("section"); writer.writeStartElement("heading"); writer.writeAttribute("level", "1"); writer.writeCharacters("Classes"); writer.writeEndElement(); // heading generateAnnotatedList(writer, fake, marker, moduleClassMap[fake->name()]); writer.writeEndElement(); // section } writer.writeEndElement(); // generatedlist } } startText(node, marker); const Atom *atom = node->doc().body().firstAtom(); while (atom) atom = addAtomElements(writer, atom, node, marker); QList<Text> alsoList = node->doc().alsoList(); supplementAlsoList(node, alsoList); if (!alsoList.isEmpty()) { writer.writeStartElement("see-also"); for (int i = 0; i < alsoList.size(); ++i) { const Atom *atom = alsoList.at(i).firstAtom(); while (atom) atom = addAtomElements(writer, atom, node, marker); } writer.writeEndElement(); // see-also } writer.writeEndElement(); // description if (node->isInnerNode()) { const InnerNode *inner = static_cast<const InnerNode *>(node); // Recurse to generate an element for this child node and all its children. foreach (const Node *child, inner->childNodes()) generateIndexSections(writer, child, marker); writer.writeStartElement("related"); if (inner->relatedNodes().size() > 0) { foreach (const Node *child, inner->relatedNodes()) generateIndexSections(writer, child, marker); } writer.writeEndElement(); // related }