diff options
Diffstat (limited to 'addon/xmlparse')
-rw-r--r-- | addon/xmlparse/basehandler.h | 2 | ||||
-rw-r--r-- | addon/xmlparse/dochandler.cpp | 98 | ||||
-rw-r--r-- | addon/xmlparse/dochandler.h | 24 | ||||
-rw-r--r-- | addon/xmlparse/main.cpp | 8 |
4 files changed, 123 insertions, 9 deletions
diff --git a/addon/xmlparse/basehandler.h b/addon/xmlparse/basehandler.h index 6129aa4..3c64d42 100644 --- a/addon/xmlparse/basehandler.h +++ b/addon/xmlparse/basehandler.h @@ -146,7 +146,7 @@ template<class T> class BaseHandler : public IBaseHandler, (*handler)(attrib); //printf("found start tag %s\n",name.data()); } - else if (m_fallBackHandler && + else if (!m_fallBackHandler || !m_fallBackHandler->handleStartElement(name,attrib) ) { diff --git a/addon/xmlparse/dochandler.cpp b/addon/xmlparse/dochandler.cpp index 7a72763..29e8799 100644 --- a/addon/xmlparse/dochandler.cpp +++ b/addon/xmlparse/dochandler.cpp @@ -14,7 +14,46 @@ */ #include "dochandler.h" +#include <qmap.h> + +class TypeNameMapper +{ + public: + TypeNameMapper() + { + m_typeNameMap.insert("see", SimpleSectHandler::See); + m_typeNameMap.insert("return", SimpleSectHandler::Return); + m_typeNameMap.insert("author", SimpleSectHandler::Author); + m_typeNameMap.insert("version", SimpleSectHandler::Version); + m_typeNameMap.insert("since", SimpleSectHandler::Since); + m_typeNameMap.insert("date", SimpleSectHandler::Date); + m_typeNameMap.insert("bug", SimpleSectHandler::Bug); + m_typeNameMap.insert("note", SimpleSectHandler::Note); + m_typeNameMap.insert("warning", SimpleSectHandler::Warning); + m_typeNameMap.insert("par", SimpleSectHandler::Par); + m_typeNameMap.insert("deprecated",SimpleSectHandler::Deprecated); + m_typeNameMap.insert("pre", SimpleSectHandler::Pre); + m_typeNameMap.insert("post", SimpleSectHandler::Post); + m_typeNameMap.insert("invariant", SimpleSectHandler::Invar); + m_typeNameMap.insert("remark", SimpleSectHandler::Remark); + m_typeNameMap.insert("attention", SimpleSectHandler::Attention); + m_typeNameMap.insert("todo", SimpleSectHandler::Todo); + m_typeNameMap.insert("test", SimpleSectHandler::Test); + m_typeNameMap.insert("rcs", SimpleSectHandler::RCS); + m_typeNameMap.insert("enumvalues",SimpleSectHandler::EnumValues); + m_typeNameMap.insert("examples", SimpleSectHandler::Examples); + } + SimpleSectHandler::Types stringToType(const QString &typeStr) + { + return m_typeNameMap[typeStr]; + } + private: + QMap<QString,SimpleSectHandler::Types> m_typeNameMap; +}; + +static TypeNameMapper g_typeMapper; + //---------------------------------------------------------------------- // MarkupHandler //---------------------------------------------------------------------- @@ -334,6 +373,56 @@ void ParameterListHandler::startParameterDescription(const QXmlAttributes& attri } //---------------------------------------------------------------------- +// SimpleSectHandler +//---------------------------------------------------------------------- + +SimpleSectHandler::SimpleSectHandler(IBaseHandler *parent) + : DocNode(Para), m_parent(parent), m_paragraph(0) +{ + addStartHandler("title",this,&SimpleSectHandler::startTitle); + addEndHandler("title",this,&SimpleSectHandler::endTitle); + addStartHandler("para",this,&SimpleSectHandler::startParagraph); +} + +SimpleSectHandler::~SimpleSectHandler() +{ +} + +void SimpleSectHandler::startSimpleSect(const QXmlAttributes& attrib) +{ + m_type = g_typeMapper.stringToType(attrib.value("kind")); + addEndHandler("simplesect",this,&SimpleSectHandler::endSimpleSect); + printf("start simple section %s\n",attrib.value("kind").data()); + m_parent->setDelegate(this); +} + +void SimpleSectHandler::endSimpleSect() +{ + printf("end simple section\n"); + m_parent->setDelegate(0); +} + +void SimpleSectHandler::startTitle(const QXmlAttributes& /*attrib*/) +{ + m_curString=""; +} + +void SimpleSectHandler::endTitle() +{ + printf("simpleSect title=\"%s\"\n",m_curString.data()); + m_title = m_curString; + m_curString=""; +} + + +void SimpleSectHandler::startParagraph(const QXmlAttributes& attrib) +{ + ASSERT(m_paragraph==0); + m_paragraph = new ParagraphHandler(this); + m_paragraph->startParagraph(attrib); +} + +//---------------------------------------------------------------------- // ParagraphHandler //---------------------------------------------------------------------- @@ -350,6 +439,7 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent) addStartHandler("itemizedlist",this,&ParagraphHandler::startItemizedList); addStartHandler("orderedlist",this,&ParagraphHandler::startOrderedList); addStartHandler("parameterlist",this,&ParagraphHandler::startParameterList); + addStartHandler("simplesect",this,&ParagraphHandler::startSimpleSect); } ParagraphHandler::~ParagraphHandler() @@ -394,6 +484,14 @@ void ParagraphHandler::startParameterList(const QXmlAttributes& attrib) m_children.append(parListHandler); } +void ParagraphHandler::startSimpleSect(const QXmlAttributes& attrib) +{ + addTextNode(); + SimpleSectHandler *sectHandler = new SimpleSectHandler(this); + sectHandler->startSimpleSect(attrib); + m_children.append(sectHandler); +} + void ParagraphHandler::addTextNode() { if (!m_curString.isEmpty()) diff --git a/addon/xmlparse/dochandler.h b/addon/xmlparse/dochandler.h index c7c8095..4dc50c5 100644 --- a/addon/xmlparse/dochandler.h +++ b/addon/xmlparse/dochandler.h @@ -52,7 +52,8 @@ class DocNode OrderedList, ListItem, ParameterList, - Parameter + Parameter, + SimpleSect }; DocNode(NodeKind k) : m_kind(k) {} virtual ~DocNode() {} @@ -225,11 +226,13 @@ class ParameterListHandler : public DocNode, /* \brief Node representing a simple section with an unnumbered header. * */ +// children: title, para class SimpleSectHandler : public DocNode, public BaseHandler<SimpleSectHandler> { public: - enum Types { See, Return, Author, Version, + enum Types { Invalid = 0, + See, Return, Author, Version, Since, Date, Bug, Note, Warning, Par, Deprecated, Pre, Post, Invar, Remark, Attention, @@ -240,11 +243,15 @@ class SimpleSectHandler : public DocNode, virtual ~SimpleSectHandler(); virtual void startSimpleSect(const QXmlAttributes& attrib); virtual void endSimpleSect(); + virtual void startTitle(const QXmlAttributes& attrib); + virtual void endTitle(); + virtual void startParagraph(const QXmlAttributes& attrib); private: IBaseHandler *m_parent; - ParameterHandler *m_curParam; + ParagraphHandler *m_paragraph; Types m_type; + // TODO: a title can also contain links (for todo sections for instance!) QString m_title; }; @@ -253,6 +260,13 @@ class SimpleSectHandler : public DocNode, /*! \brief Node representing a paragraph of text and commands. * */ +// children: itemizedlist, orderedlist, parameterlist, simplesect, +// programlisting, hruler, variablelist, +// linebreak, nonbreakablespace, ref, ulink, email, +// table, link, indexentry, formula, image, dotfile, ref +// children handled by MarkupHandler: +// bold, computeroutput, emphasis, center, +// small, subscript, superscript. class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> { public: @@ -261,6 +275,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> virtual void startItemizedList(const QXmlAttributes& attrib); virtual void startOrderedList(const QXmlAttributes& attrib); virtual void startParameterList(const QXmlAttributes& attrib); + virtual void startSimpleSect(const QXmlAttributes& attrib); ParagraphHandler(IBaseHandler *parent); virtual ~ParagraphHandler(); @@ -277,6 +292,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> /*! \brief Node representing a documentation block. * */ +// children: para, title, sect1, sect2, sect3 class DocHandler : public BaseHandler<DocHandler> { public: @@ -288,7 +304,7 @@ class DocHandler : public BaseHandler<DocHandler> virtual ~DocHandler(); private: IBaseHandler *m_parent; - QList<ParagraphHandler> m_children; + QList<DocNode> m_children; }; #endif diff --git a/addon/xmlparse/main.cpp b/addon/xmlparse/main.cpp index 3575c16..44c5e36 100644 --- a/addon/xmlparse/main.cpp +++ b/addon/xmlparse/main.cpp @@ -63,10 +63,6 @@ int main(int argc,char **argv) } QFile xmlFile(argv[1]); - if (!xmlFile.open( IO_ReadOnly )) - { - qFatal("Could not read %s",argv[1] ); - } #ifdef USE_SAX MainHandler handler; @@ -79,6 +75,10 @@ int main(int argc,char **argv) #endif #ifdef USE_DOM + if (!xmlFile.open( IO_ReadOnly )) + { + qFatal("Could not read %s",argv[1] ); + } QDomDocument doc; doc.setContent( &xmlFile ); |