diff options
Diffstat (limited to 'addon/xmlparse')
-rw-r--r-- | addon/xmlparse/compoundhandler.cpp | 10 | ||||
-rw-r--r-- | addon/xmlparse/compoundhandler.h | 24 | ||||
-rw-r--r-- | addon/xmlparse/dochandler.cpp | 186 | ||||
-rw-r--r-- | addon/xmlparse/dochandler.h | 102 | ||||
-rw-r--r-- | addon/xmlparse/doxmlintf.h | 14 | ||||
-rw-r--r-- | addon/xmlparse/mainhandler.cpp | 49 | ||||
-rw-r--r-- | addon/xmlparse/mainhandler.h | 24 | ||||
-rw-r--r-- | addon/xmlparse/memberhandler.cpp | 34 | ||||
-rw-r--r-- | addon/xmlparse/memberhandler.h | 13 | ||||
-rw-r--r-- | addon/xmlparse/sectionhandler.cpp | 12 | ||||
-rw-r--r-- | addon/xmlparse/sectionhandler.h | 4 |
11 files changed, 359 insertions, 113 deletions
diff --git a/addon/xmlparse/compoundhandler.cpp b/addon/xmlparse/compoundhandler.cpp index 0b22ef2..0b420bf 100644 --- a/addon/xmlparse/compoundhandler.cpp +++ b/addon/xmlparse/compoundhandler.cpp @@ -136,3 +136,13 @@ void CompoundHandler::addSubClass(const QXmlAttributes& attrib) m_subClasses.append(sc); } +void CompoundHandler::initialize(MainHandler *m) +{ + QListIterator<ISection> msi(m_sections); + SectionHandler *sec; + for (;(sec=(SectionHandler *)msi.current());++msi) + { + sec->initialize(m); + } +} + diff --git a/addon/xmlparse/compoundhandler.h b/addon/xmlparse/compoundhandler.h index 5191a2f..51508aa 100644 --- a/addon/xmlparse/compoundhandler.h +++ b/addon/xmlparse/compoundhandler.h @@ -23,6 +23,7 @@ #include "sectionhandler.h" #include "doxmlintf.h" +class MainHandler; class DocHandler; class ProgramListingHandler; @@ -48,6 +49,7 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler> QString id() const { return m_id; } QString kind() const { return m_kind; } QListIterator<ISection> getSectionIterator() const { return m_sections; } + void initialize(MainHandler *m); private: struct SuperClass @@ -68,18 +70,18 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler> QString m_protection; QString m_virtualness; }; - QList<SuperClass> m_superClasses; - QList<SubClass> m_subClasses; - QList<ISection> m_sections; - IBaseHandler *m_parent; - DocHandler *m_brief; - DocHandler *m_detailed; + QList<SuperClass> m_superClasses; + QList<SubClass> m_subClasses; + QList<ISection> m_sections; + IBaseHandler *m_parent; + DocHandler *m_brief; + DocHandler *m_detailed; ProgramListingHandler *m_programListing; - QString m_id; - QString m_kind; - QString m_name; - QString m_defFile; - int m_defLine; + QString m_id; + QString m_kind; + QString m_name; + QString m_defFile; + int m_defLine; }; #endif diff --git a/addon/xmlparse/dochandler.cpp b/addon/xmlparse/dochandler.cpp index 5dff81a..80df132 100644 --- a/addon/xmlparse/dochandler.cpp +++ b/addon/xmlparse/dochandler.cpp @@ -745,55 +745,6 @@ void VariableListHandler::startListItem(const QXmlAttributes& attrib) } //---------------------------------------------------------------------- -// AnchorHandler -//---------------------------------------------------------------------- - -AnchorHandler::AnchorHandler(IBaseHandler *parent) - : DocNode(Anchor), m_parent(parent) -{ - m_children.setAutoDelete(TRUE); - addEndHandler("anchor",this,&AnchorHandler::endAnchor); - addStartHandler("ref",this,&AnchorHandler::startRef); -} - -AnchorHandler::~AnchorHandler() -{ -} - -void AnchorHandler::startAnchor(const QXmlAttributes& attrib) -{ - m_id = attrib.value("id"); - m_curString=""; - m_parent->setDelegate(this); -} - -void AnchorHandler::endAnchor() -{ - addTextNode(); - printf("anchor id=`%s'\n",m_id.data()); - m_parent->setDelegate(0); -} - -void AnchorHandler::startRef(const QXmlAttributes& attrib) -{ - addTextNode(); - RefHandler *rh = new RefHandler(this); - m_children.append(rh); - rh->startRef(attrib); -} - -void AnchorHandler::addTextNode() -{ - if (!m_curString.isEmpty()) - { - m_children.append(new TextNode(m_curString,DocNode::Normal)); - printf("addTextNode() text=\"%s\"\n", - m_curString.data()); - m_curString=""; - } -} - -//---------------------------------------------------------------------- // HighlightHandler //---------------------------------------------------------------------- @@ -833,7 +784,7 @@ CodeLineHandler::CodeLineHandler(IBaseHandler *parent) addEndHandler("linenumber",this,&CodeLineHandler::endLineNumber); addStartHandler("highlight",this,&CodeLineHandler::startHighlight); addStartHandler("ref",this,&CodeLineHandler::startRef); - addStartHandler("anchor",this,&CodeLineHandler::startAnchor); + m_lineNumber = 0; } CodeLineHandler::~CodeLineHandler() @@ -853,16 +804,16 @@ void CodeLineHandler::endCodeLine() m_parent->setDelegate(0); } -void CodeLineHandler::startLineNumber(const QXmlAttributes& /*attrib*/) +void CodeLineHandler::startLineNumber(const QXmlAttributes& attrib) { m_parent->setDelegate(this); printf("start linenumber\n"); + m_lineNumber = attrib.value("line").toInt(); + m_refId = attrib.value("refid"); } void CodeLineHandler::endLineNumber() { - addTextNode(); - printf("end linenumber\n"); m_parent->setDelegate(0); } @@ -874,14 +825,6 @@ void CodeLineHandler::startHighlight(const QXmlAttributes& attrib) hlh->startHighlight(attrib); } -void CodeLineHandler::startAnchor(const QXmlAttributes& attrib) -{ - addTextNode(); - AnchorHandler *ah = new AnchorHandler(this); - m_children.append(ah); - ah->startAnchor(attrib); -} - void CodeLineHandler::startRef(const QXmlAttributes& attrib) { addTextNode(); @@ -1092,6 +1035,106 @@ void IndexEntryHandler::endSecondaryIE() m_secondary = m_curString; } +//---------------------------------------------------------------------- +// EntryHandler +//---------------------------------------------------------------------- + +EntryHandler::EntryHandler(IBaseHandler *parent) + : DocNode(Entry), m_parent(parent) +{ + m_children.setAutoDelete(TRUE); + addEndHandler("entry",this,&EntryHandler::endEntry); + addStartHandler("para",this,&EntryHandler::startParagraph); +} + +EntryHandler::~EntryHandler() +{ +} + +void EntryHandler::startEntry(const QXmlAttributes&) +{ + m_parent->setDelegate(this); +} + +void EntryHandler::endEntry() +{ + m_parent->setDelegate(0); +} + +void EntryHandler::startParagraph(const QXmlAttributes& attrib) +{ + ParagraphHandler *ph = new ParagraphHandler(this); + ph->startParagraph(attrib); + m_children.append(ph); +} + +//---------------------------------------------------------------------- +// RowHandler +//---------------------------------------------------------------------- + +RowHandler::RowHandler(IBaseHandler *parent) + : DocNode(Row), m_parent(parent) +{ + m_children.setAutoDelete(TRUE); + addEndHandler("row",this,&RowHandler::endRow); + addStartHandler("entry",this,&RowHandler::startEntry); +} + +RowHandler::~RowHandler() +{ +} + +void RowHandler::startRow(const QXmlAttributes&) +{ + m_parent->setDelegate(this); +} + +void RowHandler::endRow() +{ + m_parent->setDelegate(0); +} + +void RowHandler::startEntry(const QXmlAttributes& attrib) +{ + EntryHandler *eh = new EntryHandler(this); + eh->startEntry(attrib); + m_children.append(eh); +} + +//---------------------------------------------------------------------- +// TableHandler +//---------------------------------------------------------------------- + +TableHandler::TableHandler(IBaseHandler *parent) + : DocNode(Table), m_parent(parent) +{ + m_children.setAutoDelete(TRUE); + addEndHandler("table",this,&TableHandler::endTable); + addStartHandler("row",this,&TableHandler::startRow); +} + +TableHandler::~TableHandler() +{ +} + +void TableHandler::startTable(const QXmlAttributes& attrib) +{ + m_parent->setDelegate(this); + m_numColumns = attrib.value("cols").toInt(); + printf("table cols=%d\n",m_numColumns); +} + +void TableHandler::endTable() +{ + m_parent->setDelegate(0); +} + +void TableHandler::startRow(const QXmlAttributes& attrib) +{ + RowHandler *rh = new RowHandler(this); + rh->startRow(attrib); + m_children.append(rh); +} //---------------------------------------------------------------------- // ParagraphHandler @@ -1123,6 +1166,7 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent) addStartHandler("image",this,&ParagraphHandler::startImage); addStartHandler("dotfile",this,&ParagraphHandler::startDotFile); addStartHandler("indexentry",this,&ParagraphHandler::startIndexEntry); + addStartHandler("table",this,&ParagraphHandler::startTable); } ParagraphHandler::~ParagraphHandler() @@ -1177,6 +1221,7 @@ void ParagraphHandler::startSimpleSect(const QXmlAttributes& attrib) void ParagraphHandler::startRef(const QXmlAttributes& attrib) { + addTextNode(); RefHandler *ref = new RefHandler(this); ref->startRef(attrib); m_children.append(ref); @@ -1184,6 +1229,7 @@ void ParagraphHandler::startRef(const QXmlAttributes& attrib) void ParagraphHandler::startVariableList(const QXmlAttributes& attrib) { + addTextNode(); VariableListHandler *vl = new VariableListHandler(this); vl->startVariableList(attrib); m_children.append(vl); @@ -1191,6 +1237,7 @@ void ParagraphHandler::startVariableList(const QXmlAttributes& attrib) void ParagraphHandler::startHRuler(const QXmlAttributes& attrib) { + addTextNode(); HRulerHandler *hr = new HRulerHandler(this); hr->startHRuler(attrib); m_children.append(hr); @@ -1198,6 +1245,7 @@ void ParagraphHandler::startHRuler(const QXmlAttributes& attrib) void ParagraphHandler::startLineBreak(const QXmlAttributes& attrib) { + addTextNode(); LineBreakHandler *lb = new LineBreakHandler(this); lb->startLineBreak(attrib); m_children.append(lb); @@ -1205,6 +1253,7 @@ void ParagraphHandler::startLineBreak(const QXmlAttributes& attrib) void ParagraphHandler::startULink(const QXmlAttributes& attrib) { + addTextNode(); ULinkHandler *uh = new ULinkHandler(this); uh->startULink(attrib); m_children.append(uh); @@ -1212,6 +1261,7 @@ void ParagraphHandler::startULink(const QXmlAttributes& attrib) void ParagraphHandler::startEMail(const QXmlAttributes& attrib) { + addTextNode(); EMailHandler *eh = new EMailHandler(this); eh->startEMail(attrib); m_children.append(eh); @@ -1219,6 +1269,7 @@ void ParagraphHandler::startEMail(const QXmlAttributes& attrib) void ParagraphHandler::startLink(const QXmlAttributes& attrib) { + addTextNode(); LinkHandler *lh = new LinkHandler(this); lh->startLink(attrib); m_children.append(lh); @@ -1226,6 +1277,7 @@ void ParagraphHandler::startLink(const QXmlAttributes& attrib) void ParagraphHandler::startProgramListing(const QXmlAttributes& attrib) { + addTextNode(); ProgramListingHandler *pl = new ProgramListingHandler(this); pl->startProgramListing(attrib); m_children.append(pl); @@ -1233,6 +1285,7 @@ void ParagraphHandler::startProgramListing(const QXmlAttributes& attrib) void ParagraphHandler::startFormula(const QXmlAttributes& attrib) { + addTextNode(); FormulaHandler *fh = new FormulaHandler(this); fh->startFormula(attrib); m_children.append(fh); @@ -1240,6 +1293,7 @@ void ParagraphHandler::startFormula(const QXmlAttributes& attrib) void ParagraphHandler::startImage(const QXmlAttributes& attrib) { + addTextNode(); ImageHandler *ih = new ImageHandler(this); ih->startImage(attrib); m_children.append(ih); @@ -1247,6 +1301,7 @@ void ParagraphHandler::startImage(const QXmlAttributes& attrib) void ParagraphHandler::startDotFile(const QXmlAttributes& attrib) { + addTextNode(); DotFileHandler *df = new DotFileHandler(this); df->startDotFile(attrib); m_children.append(df); @@ -1254,11 +1309,20 @@ void ParagraphHandler::startDotFile(const QXmlAttributes& attrib) void ParagraphHandler::startIndexEntry(const QXmlAttributes& attrib) { + addTextNode(); IndexEntryHandler *df = new IndexEntryHandler(this); df->startIndexEntry(attrib); m_children.append(df); } +void ParagraphHandler::startTable(const QXmlAttributes& attrib) +{ + addTextNode(); + TableHandler *th = new TableHandler(this); + th->startTable(attrib); + m_children.append(th); +} + void ParagraphHandler::addTextNode() { if (!m_curString.isEmpty()) diff --git a/addon/xmlparse/dochandler.h b/addon/xmlparse/dochandler.h index a5b7b8c..1c599ca 100644 --- a/addon/xmlparse/dochandler.h +++ b/addon/xmlparse/dochandler.h @@ -70,7 +70,10 @@ class DocNode Formula, Image, DotFile, - IndexEntry + IndexEntry, + Table, + Row, + Entry }; DocNode(NodeKind k) : m_kind(k) {} virtual ~DocNode() {} @@ -412,6 +415,9 @@ class SimpleSectHandler : public DocNode, //----------------------------------------------------------------------------- +/* \brief Node representing an named item of a VariableList. + * + */ class VariableListEntryHandler : public DocNode, public BaseHandler<VariableListEntryHandler> { public: @@ -457,28 +463,6 @@ class VariableListHandler : public DocNode, public BaseHandler<VariableListHandl //----------------------------------------------------------------------------- -/*! \brief Node representing a text anchor - * - */ -// children: ref -class AnchorHandler : public DocNode, public BaseHandler<AnchorHandler> -{ - public: - AnchorHandler(IBaseHandler *parent); - virtual ~AnchorHandler(); - void startAnchor(const QXmlAttributes& attrib); - void endAnchor(); - void startRef(const QXmlAttributes& attrib); - - private: - void addTextNode(); - IBaseHandler *m_parent; - QList<DocNode> m_children; - QString m_id; -}; - -//----------------------------------------------------------------------------- - /*! \brief Node representing a highlighted text fragment. * */ @@ -512,7 +496,6 @@ class CodeLineHandler : public DocNode, public BaseHandler<CodeLineHandler> virtual void startLineNumber(const QXmlAttributes&); virtual void endLineNumber(); virtual void startHighlight(const QXmlAttributes&); - virtual void startAnchor(const QXmlAttributes&); virtual void startRef(const QXmlAttributes&); CodeLineHandler(IBaseHandler *parent); @@ -523,8 +506,7 @@ class CodeLineHandler : public DocNode, public BaseHandler<CodeLineHandler> IBaseHandler *m_parent; int m_lineNumber; - QString m_anchor; - QString m_ref; + QString m_refId; QList<DocNode> m_children; }; @@ -636,18 +618,79 @@ class IndexEntryHandler : public DocNode, public BaseHandler<IndexEntryHandler> //----------------------------------------------------------------------------- +/*! \brief Node representing an entry in the table entry. + * + */ +// children: para +class EntryHandler : public DocNode, public BaseHandler<EntryHandler> +{ + public: + EntryHandler(IBaseHandler *parent); + virtual ~EntryHandler(); + void startEntry(const QXmlAttributes& attrib); + void endEntry(); + void startParagraph(const QXmlAttributes& attrib); + + private: + IBaseHandler *m_parent; + QList<DocNode> m_children; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing an entry in the table row. + * + */ +// children: entry +class RowHandler : public DocNode, public BaseHandler<RowHandler> +{ + public: + RowHandler(IBaseHandler *parent); + virtual ~RowHandler(); + void startRow(const QXmlAttributes& attrib); + void endRow(); + void startEntry(const QXmlAttributes& attrib); + + private: + IBaseHandler *m_parent; + QList<EntryHandler> m_children; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing an entry in the table. + * + */ +// children: row +class TableHandler : public DocNode, public BaseHandler<TableHandler> +{ + public: + TableHandler(IBaseHandler *parent); + virtual ~TableHandler(); + void startTable(const QXmlAttributes& attrib); + void endTable(); + void startRow(const QXmlAttributes& attrib); + + private: + IBaseHandler *m_parent; + QList<RowHandler> m_children; + int m_numColumns; +}; + +//----------------------------------------------------------------------------- + /*! \brief Node representing a paragraph of text and commands. * */ // children: itemizedlist, orderedlist, parameterlist, simplesect, ref, // variablelist, hruler, linebreak, ulink, email, link -// programlisting, formula, image, dotfile, indexentry +// programlisting, formula, image, dotfile, indexentry, +// table // // children handled by MarkupHandler: // bold, computeroutput, emphasis, center, // small, subscript, superscript. -// TODO: -// table +// class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> { public: @@ -669,6 +712,7 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> virtual void startImage(const QXmlAttributes& attrib); virtual void startDotFile(const QXmlAttributes& attrib); virtual void startIndexEntry(const QXmlAttributes& attrib); + virtual void startTable(const QXmlAttributes& attrib); ParagraphHandler(IBaseHandler *parent); virtual ~ParagraphHandler(); diff --git a/addon/xmlparse/doxmlintf.h b/addon/xmlparse/doxmlintf.h index 50acb79..cfff948 100644 --- a/addon/xmlparse/doxmlintf.h +++ b/addon/xmlparse/doxmlintf.h @@ -51,6 +51,20 @@ class IDoxygen * of compounds found in the project. */ virtual QListIterator<ICompound> getCompoundIterator() const = 0; + + /*! Returns a compound given its unique \a id. If you have a + * compound id this function is much more efficient than iterating + * over the compound list. Returns 0 if the id is not valid. + */ + virtual ICompound *getCompoundById(const QString &id) const = 0; + + /*! Returns a compound given its name (including the scope). + * Returns 0 if the name is not found in the project. + */ + virtual ICompound *getCompoundByName(const QString &name) const = 0; + + virtual IMember *getMemberById(const QString &id) const = 0; + virtual QList<IMember> *getMemberByName(const QString &name) const = 0; }; /*! Factory method that creates an object model given an XML file generated diff --git a/addon/xmlparse/mainhandler.cpp b/addon/xmlparse/mainhandler.cpp index 21185e6..cb92df2 100644 --- a/addon/xmlparse/mainhandler.cpp +++ b/addon/xmlparse/mainhandler.cpp @@ -16,15 +16,7 @@ #include <qxml.h> #include "mainhandler.h" -void MainHandler::startCompound(const QXmlAttributes& attrib) -{ - CompoundHandler *compHandler = new CompoundHandler(this); - compHandler->startCompound(attrib); - m_compounds.append(compHandler); - m_compoundDict.insert(compHandler->id(),compHandler); -} - -MainHandler::MainHandler() : m_compoundDict(10007) +MainHandler::MainHandler() : m_compoundDict(10007), m_compoundNameDict(10007) { m_compounds.setAutoDelete(TRUE); addStartHandler("doxygen"); @@ -38,6 +30,44 @@ MainHandler::~MainHandler() printf("MainHandler::~MainHandler()\n"); } +void MainHandler::startCompound(const QXmlAttributes& attrib) +{ + CompoundHandler *compHandler = new CompoundHandler(this); + compHandler->startCompound(attrib); + m_compounds.append(compHandler); +} + +void MainHandler::insertMemberById(const QString &id,IMember *h) +{ + m_memberDict.insert(id,h); +} + +void MainHandler::insertMemberByName(const QString &name,IMember *h) +{ + QList<IMember> *ml = m_memberNameDict[name]; + if (ml) + { + ml->append(h); + } + else + { + ml = new QList<IMember>; + ml->append(h); + m_memberNameDict.insert(name,ml); + } +} + +void MainHandler::initialize() +{ + QListIterator<ICompound> mci(m_compounds); + CompoundHandler *compHandler; + for (;(compHandler=(CompoundHandler *)mci.current());++mci) + { + compHandler->initialize(this); + m_compoundNameDict.insert(compHandler->name(),compHandler); + m_compoundDict.insert(compHandler->id(),compHandler); + } +} class ErrorHandler : public QXmlErrorHandler { @@ -74,6 +104,7 @@ IDoxygen *createObjectModelFromXML(const char * xmlFileName) reader.setContentHandler( handler ); reader.setErrorHandler( &errorHandler ); reader.parse( source ); + handler->initialize(); return handler; } diff --git a/addon/xmlparse/mainhandler.h b/addon/xmlparse/mainhandler.h index 0d69f25..c5f945f 100644 --- a/addon/xmlparse/mainhandler.h +++ b/addon/xmlparse/mainhandler.h @@ -28,7 +28,6 @@ class MainHandler : public IDoxygen, public BaseHandler<MainHandler> MainHandler(); virtual ~MainHandler(); - // IDoxygen QListIterator<ICompound> getCompoundIterator() const { return m_compounds; @@ -37,10 +36,29 @@ class MainHandler : public IDoxygen, public BaseHandler<MainHandler> { return m_compoundDict[id]; } + virtual ICompound *getCompoundByName(const QString &name) const + { + return name.isEmpty() ? 0 : m_compoundNameDict[name]; + } + virtual IMember *getMemberById(const QString &id) const + { + return m_memberDict[id]; + } + virtual QList<IMember> *getMemberByName(const QString &name) const + { + return m_memberNameDict[name]; + } + void insertMemberById(const QString &id,IMember *h); + void insertMemberByName(const QString &name,IMember *h); + + void initialize(); private: - QList<ICompound> m_compounds; - QDict<ICompound> m_compoundDict; + QList<ICompound> m_compounds; + QDict<ICompound> m_compoundDict; + QDict<ICompound> m_compoundNameDict; + QDict<IMember> m_memberDict; + QDict<QList<IMember> > m_memberNameDict; }; #endif diff --git a/addon/xmlparse/memberhandler.cpp b/addon/xmlparse/memberhandler.cpp index cf29e05..54dd0f0 100644 --- a/addon/xmlparse/memberhandler.cpp +++ b/addon/xmlparse/memberhandler.cpp @@ -37,7 +37,15 @@ MemberHandler::MemberHandler(IBaseHandler *parent) addStartHandler("location",this,&MemberHandler::startLocation); addEndHandler("location"); + addStartHandler("references",this,&MemberHandler::startReferences); + addEndHandler("references",this,&MemberHandler::endReferences); + + addStartHandler("referencedby",this,&MemberHandler::startReferencedBy); + addEndHandler("referencedby",this,&MemberHandler::endReferencedBy); + m_params.setAutoDelete(TRUE); + m_references.setAutoDelete(TRUE); + m_referencedBy.setAutoDelete(TRUE); } @@ -78,6 +86,32 @@ void MemberHandler::startLocation(const QXmlAttributes& attrib) m_defLine = attrib.value("line").toInt(); } +void MemberHandler::startReferences(const QXmlAttributes& attrib) +{ + MemberReference *mr = new MemberReference; + mr->m_memId = attrib.value("id"); + m_references.append(mr); + m_curString=""; +} + +void MemberHandler::endReferences() +{ + m_references.getLast()->m_name = m_curString; +} + +void MemberHandler::startReferencedBy(const QXmlAttributes& attrib) +{ + MemberReference *mr = new MemberReference; + mr->m_memId = attrib.value("id"); + m_referencedBy.append(mr); + m_curString=""; +} + +void MemberHandler::endReferencedBy() +{ + m_referencedBy.getLast()->m_name = m_curString; +} + void MemberHandler::endMember() { m_parent->setDelegate(0); diff --git a/addon/xmlparse/memberhandler.h b/addon/xmlparse/memberhandler.h index 0b017e5..e79835f 100644 --- a/addon/xmlparse/memberhandler.h +++ b/addon/xmlparse/memberhandler.h @@ -37,6 +37,10 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler> virtual void startBriefDesc(const QXmlAttributes& attrib); virtual void startDetailedDesc(const QXmlAttributes& attrib); virtual void startLocation(const QXmlAttributes& attrib); + virtual void startReferences(const QXmlAttributes& attrib); + virtual void endReferences(); + virtual void startReferencedBy(const QXmlAttributes& attrib); + virtual void endReferencedBy(); MemberHandler(IBaseHandler *parent); virtual ~MemberHandler(); @@ -51,6 +55,13 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler> virtual QListIterator<IParam> getParamIterator() const { return m_params; } private: + struct MemberReference + { + QString m_memId; + QString m_name; + int line; + }; + IBaseHandler *m_parent; QString m_kind; QString m_id; @@ -61,6 +72,8 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler> DocHandler *m_brief; DocHandler *m_detailed; QList<IParam> m_params; + QList<MemberReference> m_references; + QList<MemberReference> m_referencedBy; QString m_defFile; int m_defLine; }; diff --git a/addon/xmlparse/sectionhandler.cpp b/addon/xmlparse/sectionhandler.cpp index 80db178..0fc3446 100644 --- a/addon/xmlparse/sectionhandler.cpp +++ b/addon/xmlparse/sectionhandler.cpp @@ -13,6 +13,7 @@ * */ +#include "mainhandler.h" #include "compoundhandler.h" #include "sectionhandler.h" @@ -46,4 +47,15 @@ void SectionHandler::startMember(const QXmlAttributes& attrib) m_members.append(memHandler); } +void SectionHandler::initialize(MainHandler *m) +{ + QListIterator<IMember> mli(m_members); + MemberHandler *mh; + for (;(mh=(MemberHandler *)mli.current());++mli) + { + m->insertMemberById(mh->name(),mh); + m->insertMemberByName(mh->name(),mh); + } +} + diff --git a/addon/xmlparse/sectionhandler.h b/addon/xmlparse/sectionhandler.h index 1231214..46cb422 100644 --- a/addon/xmlparse/sectionhandler.h +++ b/addon/xmlparse/sectionhandler.h @@ -24,6 +24,8 @@ #include "memberhandler.h" #include "doxmlintf.h" +class MainHandler; + class SectionHandler : public ISection, public BaseHandler<SectionHandler> { public: @@ -38,6 +40,8 @@ class SectionHandler : public ISection, public BaseHandler<SectionHandler> virtual QString kind() const { return m_kind; } virtual QListIterator<IMember> getMemberIterator() const { return m_members; } + void initialize(MainHandler *m); + private: IBaseHandler *m_parent; QString m_kind; |