diff options
Diffstat (limited to 'addon')
-rw-r--r-- | addon/doxmlparser/include/doxmlintf.h | 128 | ||||
-rw-r--r-- | addon/doxmlparser/src/compoundhandler.cpp | 38 | ||||
-rw-r--r-- | addon/doxmlparser/src/compoundhandler.h | 5 | ||||
-rw-r--r-- | addon/doxmlparser/src/dochandler.cpp | 37 | ||||
-rw-r--r-- | addon/doxmlparser/src/dochandler.h | 26 | ||||
-rw-r--r-- | addon/doxmlparser/src/doxmlintf.h | 128 | ||||
-rw-r--r-- | addon/doxmlparser/src/doxmlparser.pro.in | 6 | ||||
-rw-r--r-- | addon/doxmlparser/src/loamhandler.cpp | 60 | ||||
-rw-r--r-- | addon/doxmlparser/src/loamhandler.h | 50 | ||||
-rw-r--r-- | addon/doxmlparser/src/memberhandler.cpp | 71 | ||||
-rw-r--r-- | addon/doxmlparser/src/memberhandler.h | 42 | ||||
-rw-r--r-- | addon/doxmlparser/src/paramhandler.cpp | 2 | ||||
-rw-r--r-- | addon/doxmlparser/test/main.cpp | 30 | ||||
-rw-r--r-- | addon/perlmod/DoxyModel.pm | 102 | ||||
-rw-r--r-- | addon/perlmod/README | 43 | ||||
-rw-r--r-- | addon/perlmod/doxydocs-latex.pl | 108 | ||||
-rw-r--r-- | addon/perlmod/doxytemplate-latex.pl | 28 |
17 files changed, 524 insertions, 380 deletions
diff --git a/addon/doxmlparser/include/doxmlintf.h b/addon/doxmlparser/include/doxmlintf.h index 55eb946..7ab2c79 100644 --- a/addon/doxmlparser/include/doxmlintf.h +++ b/addon/doxmlparser/include/doxmlintf.h @@ -16,7 +16,16 @@ #ifndef _DOXMLINTF_H #define _DOXMLINTF_H -#include <qstring.h> +/*! \file + * \brief The interface to the object model provided by the XML parser + * library. + * + * To start using this library one calls createObjectModel and then + * uses the returned IDoxygen interface to read doxygen generated + * XML output and navigate through the information contained in it. + * + * @see createObjectModel() + */ class IMember; class IDocIterator; @@ -24,12 +33,20 @@ class ICompound; class ISection; class INode; +/*! \brief Read only interface to a string. + */ class IString { public: + /*! Returns a latin1 character representation of the string. */ virtual const char *latin1() const = 0; + /*! Returns a 16-bit unicode character representation of the character at + * position \a index in the string. The first character is at index 0. + */ virtual unsigned short unicodeCharAt(int index) const = 0; + /*! Returns true if this string is empty or false otherwise */ virtual bool isEmpty() const = 0; + /*! Returns the number of characters in the string. */ virtual int length() const = 0; }; @@ -107,24 +124,6 @@ class IMemberReferenceIterator virtual void release() = 0; }; -class IEnumValue -{ - public: - virtual const IString * name() const = 0; - virtual const IString * initializer() const = 0; -}; - -class IEnumValueIterator -{ - public: - virtual IEnumValue *toFirst() = 0; - virtual IEnumValue *toLast() = 0; - virtual IEnumValue *toNext() = 0; - virtual IEnumValue *toPrev() = 0; - virtual IEnumValue *current() const = 0; - virtual void release() = 0; -}; - class IDoc { public: @@ -161,8 +160,9 @@ class IDoc Entry, // 28 -> IDocEntry Section, // 29 -> IDocSection Preformatted, // 30 -> IDocPreformatted - Symbol, // 31 -> IDocSymbol - Root // 32 -> IDocRoot + Verbatim, // 31 -> IDocVerbatim + Symbol, // 32 -> IDocSymbol + Root // 33 -> IDocRoot }; virtual Kind kind() const = 0; }; @@ -399,6 +399,12 @@ class IDocPreformatted : public IDoc virtual IDocIterator *contents() const = 0; }; +class IDocVerbatim : public IDoc +{ + public: + virtual const IString *text() const = 0; +}; + class IDocSymbol : public IDoc { public: @@ -499,7 +505,8 @@ class IMember public: enum MemberKind { Invalid=0, Define, Property, Variable, Typedef, Enum, - Function, Signal, Prototype, Friend, DCOP, Slot + Function, Signal, Prototype, Friend, DCOP, Slot, + EnumValue }; virtual ICompound *compound() const = 0; virtual ISection *section() const = 0; @@ -525,11 +532,80 @@ class IMember virtual int definitionLine() const = 0; virtual IMemberReference *reimplements() const = 0; virtual IMemberReferenceIterator *reimplementedBy() const = 0; - virtual IEnumValueIterator *enumValues() const = 0; virtual IDocRoot *briefDescription() const = 0; virtual IDocRoot *detailedDescription() const = 0; }; +class IDefine : public IMember +{ + public: +}; + +class IProperty : public IMember +{ + public: +}; + +class IVariable : public IMember +{ + public: +}; + +class ITypedef : public IMember +{ + public: +}; + +class IFunction : public IMember +{ + public: +}; + +class ISignal : public IMember +{ + public: +}; + +class IPrototype : public IMember +{ + public: +}; + +class IFriend : public IMember +{ + public: +}; + +class IDCOP : public IMember +{ + public: +}; + +class ISlot : public IMember +{ + public: +}; + +class IEnumValue : public IMember +{ + public: + virtual const IString * name() const = 0; +}; + +#if 0 +class IEnumValueIterator +{ + public: + virtual IEnumValue *toFirst() = 0; + virtual IEnumValue *toLast() = 0; + virtual IEnumValue *toNext() = 0; + virtual IEnumValue *toPrev() = 0; + virtual IEnumValue *current() const = 0; + virtual void release() = 0; +}; +#endif + + class IMemberIterator { public: @@ -541,6 +617,12 @@ class IMemberIterator virtual void release() = 0; }; +class IEnum : public IMember +{ + public: + virtual IMemberIterator *enumValues() const = 0; +}; + /*! \brief The interface to a section in the object model. * * A compound can have a number of sections, where each diff --git a/addon/doxmlparser/src/compoundhandler.cpp b/addon/doxmlparser/src/compoundhandler.cpp index 623ac71..df69d2a 100644 --- a/addon/doxmlparser/src/compoundhandler.cpp +++ b/addon/doxmlparser/src/compoundhandler.cpp @@ -19,6 +19,7 @@ #include "debug.h" #include "graphhandler.h" #include "sectionhandler.h" +#include "loamhandler.h" //---------------------------------------------------------------------------- @@ -146,7 +147,7 @@ CompoundHandler::CompoundHandler(const QString &xmlDir) m_xmlDir(xmlDir), m_refCount(1), m_memberDict(257), m_memberNameDict(257), m_mainHandler(0), m_inheritanceGraph(0), m_collaborationGraph(0), m_includeDependencyGraph(0), m_includedByDependencyGraph(0), m_templateParamList(0), - m_titleHandler(0) + m_titleHandler(0), m_members(0) { m_superClasses.setAutoDelete(TRUE); m_subClasses.setAutoDelete(TRUE); @@ -202,12 +203,10 @@ CompoundHandler::CompoundHandler(const QString &xmlDir) addEndHandler("innergroup"); addStartHandler("templateparamlist",this,&CompoundHandler::startTemplateParamList); - addEndHandler("templateparamlist"); - - addStartHandler("param",this,&CompoundHandler::startParam); - addEndHandler("param"); addStartHandler("title",this,&CompoundHandler::startTitle); + + addStartHandler("listofallmembers",this,&CompoundHandler::startListOfAllMembers); } CompoundHandler::~CompoundHandler() @@ -221,6 +220,8 @@ CompoundHandler::~CompoundHandler() delete m_collaborationGraph; delete m_includeDependencyGraph; delete m_includedByDependencyGraph; + delete m_templateParamList; + delete m_members; } void CompoundHandler::startSection(const QXmlAttributes& attrib) @@ -298,17 +299,16 @@ void CompoundHandler::startInnerGroup(const QXmlAttributes& attrib) m_innerCompounds.append(new QString(attrib.value("refid"))); } -void CompoundHandler::startParam(const QXmlAttributes& attrib) +void CompoundHandler::startTemplateParamList(const QXmlAttributes& attrib) { - ParamHandler *ph = new ParamHandler(this); - ph->startParam(attrib); - m_params.append(ph); + m_templateParamList = new TemplateParamListHandler(this); + m_templateParamList->startTemplateParamList(attrib); } -void CompoundHandler::startTemplateParamList(const QXmlAttributes& attrib) +void CompoundHandler::startListOfAllMembers(const QXmlAttributes& attrib) { - m_templateParamList = new TemplateParamListHandler(this); - m_templateParamList->startParam(attrib); + m_members = new ListOfAllMembersHandler(this); + m_members->startListOfAllMembers(attrib); } void CompoundHandler::addSuperClass(const QXmlAttributes& attrib) @@ -388,11 +388,16 @@ void CompoundHandler::initialize(MainHandler *mh) { sec->initialize(this); } + if (m_members) + { + m_members->initialize(mh); + } } void CompoundHandler::insertMember(MemberHandler *mh) { m_memberDict.insert(mh->id()->latin1(),mh); + mh->initialize(m_mainHandler); QList<MemberHandler> *mhl = m_memberNameDict.find(mh->id()->latin1()); if (mhl==0) { @@ -478,7 +483,7 @@ IDocRoot *CompoundHandler::detailedDescription() const IMember *CompoundHandler::memberById(const char *id) const { - return m_memberDict[id]; + return (IFunction*)m_memberDict[id]; } IGraph *CompoundHandler::inheritanceGraph() const @@ -530,3 +535,10 @@ const IDocTitle *CompoundHandler::title() const { return m_titleHandler; } + +IMemberReferenceIterator *CompoundHandler::members() const +{ + return m_members ? m_members->members() : 0; +} + + diff --git a/addon/doxmlparser/src/compoundhandler.h b/addon/doxmlparser/src/compoundhandler.h index b099be4..e68faf3 100644 --- a/addon/doxmlparser/src/compoundhandler.h +++ b/addon/doxmlparser/src/compoundhandler.h @@ -34,6 +34,7 @@ class SectionHandler; class ParamHandler; class TemplateParamListHandler; class TitleHandler; +class ListOfAllMembersHandler; class RelatedCompound : public IRelatedCompound { @@ -97,9 +98,9 @@ class CompoundHandler : public IClass, virtual void startInnerNamespace(const QXmlAttributes& attrib); virtual void startInnerFile(const QXmlAttributes& attrib); virtual void startInnerGroup(const QXmlAttributes& attrib); - virtual void startParam(const QXmlAttributes& attrib); virtual void startTitle(const QXmlAttributes& attrib); virtual void startTemplateParamList(const QXmlAttributes& attrib); + virtual void startListOfAllMembers(const QXmlAttributes& attrib); virtual void addref() { m_refCount++; } CompoundHandler(const QString &dirName); @@ -133,6 +134,7 @@ class CompoundHandler : public IClass, int locationLine() const { return m_defLine; } int locationBodyStartLine() const { return m_defBodyStart; } int locationBodyEndLine() const { return m_defBodyEnd; } + IMemberReferenceIterator *members() const; // IFile implementation IGraph *includeDependencyGraph() const; @@ -171,6 +173,7 @@ class CompoundHandler : public IClass, ProgramListingHandler* m_source; TemplateParamListHandler* m_templateParamList; TitleHandler* m_titleHandler; + ListOfAllMembersHandler* m_members; }; void compoundhandler_init(); diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp index b822a90..e771761 100644 --- a/addon/doxmlparser/src/dochandler.cpp +++ b/addon/doxmlparser/src/dochandler.cpp @@ -1097,7 +1097,7 @@ void ImageHandler::endImage() DotFileHandler::DotFileHandler(IBaseHandler *parent) : m_parent(parent) { - addEndHandler("image",this,&DotFileHandler::endDotFile); + addEndHandler("dotfile",this,&DotFileHandler::endDotFile); } DotFileHandler::~DotFileHandler() @@ -1328,6 +1328,32 @@ IDocIterator *PreformattedHandler::contents() const } //---------------------------------------------------------------------- +// VerbatimHandler +//---------------------------------------------------------------------- + +VerbatimHandler::VerbatimHandler(IBaseHandler *parent) + : m_parent(parent) +{ + addEndHandler("verbatim",this,&VerbatimHandler::endVerbatim); +} + +VerbatimHandler::~VerbatimHandler() +{ +} + +void VerbatimHandler::startVerbatim(const QXmlAttributes&) +{ + m_parent->setDelegate(this); + m_curString=""; +} + +void VerbatimHandler::endVerbatim() +{ + m_text = m_curString; + m_parent->setDelegate(0); +} + +//---------------------------------------------------------------------- // SymbolHandler //---------------------------------------------------------------------- @@ -1393,6 +1419,7 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent) addStartHandler("indexentry",this,&ParagraphHandler::startIndexEntry); addStartHandler("table",this,&ParagraphHandler::startTable); addStartHandler("preformatted",this,&ParagraphHandler::startPreformatted); + addStartHandler("verbatim",this,&ParagraphHandler::startVerbatim); addStartHandler("umlaut",this,&ParagraphHandler::startUmlaut); addStartHandler("acute",this,&ParagraphHandler::startAcute); addStartHandler("grave",this,&ParagraphHandler::startGrave); @@ -1567,6 +1594,14 @@ void ParagraphHandler::startPreformatted(const QXmlAttributes& attrib) m_children.append(ph); } +void ParagraphHandler::startVerbatim(const QXmlAttributes& attrib) +{ + addTextNode(); + VerbatimHandler *vh = new VerbatimHandler(this); + vh->startVerbatim(attrib); + m_children.append(vh); +} + void ParagraphHandler::startUmlaut(const QXmlAttributes& attrib) { addTextNode(); diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h index 0e657f1..37c7df4 100644 --- a/addon/doxmlparser/src/dochandler.h +++ b/addon/doxmlparser/src/dochandler.h @@ -65,6 +65,7 @@ DEFINE_CLS_IMPL(DocRow); DEFINE_CLS_IMPL(DocEntry); DEFINE_CLS_IMPL(DocSection); DEFINE_CLS_IMPL(DocPreformatted); +DEFINE_CLS_IMPL(DocVerbatim); DEFINE_CLS_IMPL(DocSymbol); DEFINE_CLS_IMPL(DocRoot); @@ -190,6 +191,7 @@ class ParagraphHandler : public DocParaImpl, virtual void startIndexEntry(const QXmlAttributes& attrib); virtual void startTable(const QXmlAttributes& attrib); virtual void startPreformatted(const QXmlAttributes& attrib); + virtual void startVerbatim(const QXmlAttributes& attrib); virtual void startUmlaut(const QXmlAttributes& attrib); virtual void startAcute(const QXmlAttributes& attrib); virtual void startGrave(const QXmlAttributes& attrib); @@ -1019,6 +1021,30 @@ class PreformattedIterator : //----------------------------------------------------------------------------- +/*! \brief Node representing an preformatted section + */ +class VerbatimHandler : public DocVerbatimImpl, + public BaseHandler<VerbatimHandler> +{ + friend class VerbatimIterator; + public: + VerbatimHandler(IBaseHandler *parent); + virtual ~VerbatimHandler(); + void startVerbatim(const QXmlAttributes& attrib); + void endVerbatim(); + + // IDocVerbatim + virtual Kind kind() const { return DocImpl::Verbatim; } + virtual const IString *text() const { return &m_text; } + + private: + IBaseHandler *m_parent; + StringImpl m_text; +}; + + +//----------------------------------------------------------------------------- + /*! \brief Node representing an special symbol. * */ diff --git a/addon/doxmlparser/src/doxmlintf.h b/addon/doxmlparser/src/doxmlintf.h index 55eb946..7ab2c79 100644 --- a/addon/doxmlparser/src/doxmlintf.h +++ b/addon/doxmlparser/src/doxmlintf.h @@ -16,7 +16,16 @@ #ifndef _DOXMLINTF_H #define _DOXMLINTF_H -#include <qstring.h> +/*! \file + * \brief The interface to the object model provided by the XML parser + * library. + * + * To start using this library one calls createObjectModel and then + * uses the returned IDoxygen interface to read doxygen generated + * XML output and navigate through the information contained in it. + * + * @see createObjectModel() + */ class IMember; class IDocIterator; @@ -24,12 +33,20 @@ class ICompound; class ISection; class INode; +/*! \brief Read only interface to a string. + */ class IString { public: + /*! Returns a latin1 character representation of the string. */ virtual const char *latin1() const = 0; + /*! Returns a 16-bit unicode character representation of the character at + * position \a index in the string. The first character is at index 0. + */ virtual unsigned short unicodeCharAt(int index) const = 0; + /*! Returns true if this string is empty or false otherwise */ virtual bool isEmpty() const = 0; + /*! Returns the number of characters in the string. */ virtual int length() const = 0; }; @@ -107,24 +124,6 @@ class IMemberReferenceIterator virtual void release() = 0; }; -class IEnumValue -{ - public: - virtual const IString * name() const = 0; - virtual const IString * initializer() const = 0; -}; - -class IEnumValueIterator -{ - public: - virtual IEnumValue *toFirst() = 0; - virtual IEnumValue *toLast() = 0; - virtual IEnumValue *toNext() = 0; - virtual IEnumValue *toPrev() = 0; - virtual IEnumValue *current() const = 0; - virtual void release() = 0; -}; - class IDoc { public: @@ -161,8 +160,9 @@ class IDoc Entry, // 28 -> IDocEntry Section, // 29 -> IDocSection Preformatted, // 30 -> IDocPreformatted - Symbol, // 31 -> IDocSymbol - Root // 32 -> IDocRoot + Verbatim, // 31 -> IDocVerbatim + Symbol, // 32 -> IDocSymbol + Root // 33 -> IDocRoot }; virtual Kind kind() const = 0; }; @@ -399,6 +399,12 @@ class IDocPreformatted : public IDoc virtual IDocIterator *contents() const = 0; }; +class IDocVerbatim : public IDoc +{ + public: + virtual const IString *text() const = 0; +}; + class IDocSymbol : public IDoc { public: @@ -499,7 +505,8 @@ class IMember public: enum MemberKind { Invalid=0, Define, Property, Variable, Typedef, Enum, - Function, Signal, Prototype, Friend, DCOP, Slot + Function, Signal, Prototype, Friend, DCOP, Slot, + EnumValue }; virtual ICompound *compound() const = 0; virtual ISection *section() const = 0; @@ -525,11 +532,80 @@ class IMember virtual int definitionLine() const = 0; virtual IMemberReference *reimplements() const = 0; virtual IMemberReferenceIterator *reimplementedBy() const = 0; - virtual IEnumValueIterator *enumValues() const = 0; virtual IDocRoot *briefDescription() const = 0; virtual IDocRoot *detailedDescription() const = 0; }; +class IDefine : public IMember +{ + public: +}; + +class IProperty : public IMember +{ + public: +}; + +class IVariable : public IMember +{ + public: +}; + +class ITypedef : public IMember +{ + public: +}; + +class IFunction : public IMember +{ + public: +}; + +class ISignal : public IMember +{ + public: +}; + +class IPrototype : public IMember +{ + public: +}; + +class IFriend : public IMember +{ + public: +}; + +class IDCOP : public IMember +{ + public: +}; + +class ISlot : public IMember +{ + public: +}; + +class IEnumValue : public IMember +{ + public: + virtual const IString * name() const = 0; +}; + +#if 0 +class IEnumValueIterator +{ + public: + virtual IEnumValue *toFirst() = 0; + virtual IEnumValue *toLast() = 0; + virtual IEnumValue *toNext() = 0; + virtual IEnumValue *toPrev() = 0; + virtual IEnumValue *current() const = 0; + virtual void release() = 0; +}; +#endif + + class IMemberIterator { public: @@ -541,6 +617,12 @@ class IMemberIterator virtual void release() = 0; }; +class IEnum : public IMember +{ + public: + virtual IMemberIterator *enumValues() const = 0; +}; + /*! \brief The interface to a section in the object model. * * A compound can have a number of sections, where each diff --git a/addon/doxmlparser/src/doxmlparser.pro.in b/addon/doxmlparser/src/doxmlparser.pro.in index ddbe82a..841a46c 100644 --- a/addon/doxmlparser/src/doxmlparser.pro.in +++ b/addon/doxmlparser/src/doxmlparser.pro.in @@ -4,12 +4,14 @@ HEADERS = basehandler.h mainhandler.h \ compoundhandler.h sectionhandler.h \ memberhandler.h paramhandler.h \ dochandler.h linkedtexthandler.h \ - debug.h graphhandler.h stringimpl.h + debug.h graphhandler.h stringimpl.h \ + loamhandler.h SOURCES = mainhandler.cpp \ compoundhandler.cpp sectionhandler.cpp \ memberhandler.cpp paramhandler.cpp \ dochandler.cpp linkedtexthandler.cpp \ - basehandler.cpp debug.cpp graphhandler.cpp + basehandler.cpp debug.cpp graphhandler.cpp \ + loamhandler.cpp unix:LIBS += -L../../../lib -lqtools win32:INCLUDEPATH += . win32-mingw:LIBS += -L../../../lib -lqtools diff --git a/addon/doxmlparser/src/loamhandler.cpp b/addon/doxmlparser/src/loamhandler.cpp new file mode 100644 index 0000000..de726c1 --- /dev/null +++ b/addon/doxmlparser/src/loamhandler.cpp @@ -0,0 +1,60 @@ +#include "loamhandler.h" +#include "memberhandler.h" + + +ListOfAllMembersHandler::ListOfAllMembersHandler(IBaseHandler *parent) : m_parent(parent) +{ + m_members.setAutoDelete(TRUE); + + addStartHandler("member",this,&ListOfAllMembersHandler::startMember); + addStartHandler("name",this,&ListOfAllMembersHandler::startName); + addEndHandler("name",this,&ListOfAllMembersHandler::endName); + + addEndHandler("listofallmembers",this,&ListOfAllMembersHandler::endListOfAllMembers); +} + +void ListOfAllMembersHandler::initialize(MainHandler *mh) +{ + QListIterator<MemberReference> mli(m_members); + MemberReference *mr; + for (;(mr=mli.current());++mli) + { + mr->initialize(mh); + } +} + +void ListOfAllMembersHandler::startMember(const QXmlAttributes& attrib) +{ + MemberReference *mr = new MemberReference; + mr->m_memId = attrib.value("refid"); + // TODO: extract prot, virt, ambiguityscope and scope as well + m_members.append(new MemberReference); +} + +void ListOfAllMembersHandler::startName(const QXmlAttributes&) +{ + m_curString=""; +} + +void ListOfAllMembersHandler::endName() +{ + ASSERT(m_members.getLast()); + m_members.getLast()->m_name = m_curString; +} + +void ListOfAllMembersHandler::startListOfAllMembers(const QXmlAttributes& /*attrib*/) +{ + m_parent->setDelegate(this); + debug(2,"listofallmembers start\n"); +} + +void ListOfAllMembersHandler::endListOfAllMembers() +{ + m_parent->setDelegate(0); + debug(2,"listofallmembers end\n"); +} + +IMemberReferenceIterator *ListOfAllMembersHandler::members() const +{ + return new MemberReferenceIterator(m_members); +} diff --git a/addon/doxmlparser/src/loamhandler.h b/addon/doxmlparser/src/loamhandler.h new file mode 100644 index 0000000..24c05b1 --- /dev/null +++ b/addon/doxmlparser/src/loamhandler.h @@ -0,0 +1,50 @@ +/****************************************************************************** + * + * $Id$ + * + * + * Copyright (C) 1997-2002 by Dimitri van Heesch. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation under the terms of the GNU General Public License is hereby + * granted. No representations are made about the suitability of this software + * for any purpose. It is provided "as is" without express or implied warranty. + * See the GNU General Public License for more details. + * + */ + +#ifndef _LOAMHANDLER_H +#define _LOAMHANDLER_H + +#include <qstring.h> +#include <qlist.h> +#include <doxmlintf.h> + +#include "basehandler.h" + +class MainHandler; +class MemberReference; + +class ListOfAllMembersHandler : public BaseHandler<ListOfAllMembersHandler> +{ + public: + virtual void startMember(const QXmlAttributes& attrib); + virtual void startName(const QXmlAttributes& attrib); + virtual void endName(); + virtual void startListOfAllMembers(const QXmlAttributes& attrib); + virtual void endListOfAllMembers(); + + ListOfAllMembersHandler(IBaseHandler *parent); + virtual ~ListOfAllMembersHandler() {} + + void initialize(MainHandler *mh); + + virtual IMemberReferenceIterator *members() const; + + protected: + IBaseHandler *m_parent; + QList<MemberReference> m_members; +}; + +#endif + diff --git a/addon/doxmlparser/src/memberhandler.cpp b/addon/doxmlparser/src/memberhandler.cpp index 74b1e32..ad35a91 100644 --- a/addon/doxmlparser/src/memberhandler.cpp +++ b/addon/doxmlparser/src/memberhandler.cpp @@ -39,6 +39,7 @@ class MemberTypeMap m_map.insert("friend",new int(IMember::Friend)); m_map.insert("dcop",new int(IMember::DCOP)); m_map.insert("slot",new int(IMember::Slot)); + m_map.insert("enumvalue",new int(IMember::EnumValue)); } IMember::MemberKind map(const QString &s) { @@ -82,19 +83,28 @@ IMember *MemberReference::member() const //------------------------------------------------------------------------------ -EnumValueHandler::EnumValueHandler(IBaseHandler *parent) : m_parent(parent), m_brief(0), m_detailed(0) +#if 0 +EnumValueHandler::EnumValueHandler(IBaseHandler *parent) : + m_parent(parent), m_brief(0), m_detailed(0), m_linkedTextHandler(0) { addEndHandler("enumvalue",this,&EnumValueHandler::endEnumValue); addStartHandler("name",this,&EnumValueHandler::startName); addEndHandler("name",this,&EnumValueHandler::endName); addStartHandler("initializer",this,&EnumValueHandler::startInitializer); - addEndHandler("initializer",this,&EnumValueHandler::endInitializer); addStartHandler("briefdescription",this,&EnumValueHandler::startBriefDesc); addStartHandler("detaileddescription",this,&EnumValueHandler::startDetailedDesc); + m_initializer.setAutoDelete(TRUE); +} + +EnumValueHandler::~EnumValueHandler() +{ + delete m_brief; + delete m_detailed; + delete m_linkedTextHandler; } void EnumValueHandler::startEnumValue(const QXmlAttributes& /*attrib*/) @@ -119,12 +129,9 @@ void EnumValueHandler::endName() void EnumValueHandler::startInitializer(const QXmlAttributes& /*attrib*/) { - m_curString=""; -} - -void EnumValueHandler::endInitializer() -{ - m_initializer = m_curString; + delete m_linkedTextHandler; + m_linkedTextHandler = new LinkedTextHandler(this,m_initializer); + m_linkedTextHandler->start("initializer"); } void EnumValueHandler::startBriefDesc(const QXmlAttributes& attrib) @@ -140,7 +147,7 @@ void EnumValueHandler::startDetailedDesc(const QXmlAttributes& attrib) docHandler->startDoc(attrib); m_detailed = docHandler; } - +#endif //------------------------------------------------------------------------------ @@ -149,13 +156,14 @@ MemberHandler::MemberHandler(IBaseHandler *parent) { //printf("MemberHandler::MemberHandler() %p\n",this); addEndHandler("memberdef",this,&MemberHandler::endMember); + addEndHandler("enumvalue",this,&MemberHandler::endMember); addStartHandler("type",this,&MemberHandler::startType); addStartHandler("initializer",this,&MemberHandler::startInitializer); addStartHandler("exception",this,&MemberHandler::startException); - addStartHandler("enumvalue",this,&MemberHandler::startEnumValue); + addStartHandler("enumvalue",this,&MemberHandler::startEnumValue2); - addStartHandler("name"); + addStartHandler("name",this,&MemberHandler::startName); addEndHandler("name",this,&MemberHandler::endName); addStartHandler("param",this,&MemberHandler::startParam); @@ -212,6 +220,7 @@ void MemberHandler::startMember(const QXmlAttributes& attrib) { m_parent->setDelegate(this); m_kindString = attrib.value("kind"); + printf("startMember kindString=`%s'\n",m_kindString.data()); m_kind = s_typeMap->map(m_kindString); m_id = attrib.value("id"); m_virtualness = attrib.value("virt"); @@ -222,6 +231,29 @@ void MemberHandler::startMember(const QXmlAttributes& attrib) m_kindString.data(),m_id.data(),m_protection.data(),m_virtualness.data()); } +void MemberHandler::startEnumValue(const QXmlAttributes& attrib) +{ + m_parent->setDelegate(this); + m_kindString = "enumvalue"; + printf("startEnumValue kindString=`%s'\n",m_kindString.data()); + m_kind = s_typeMap->map(m_kindString); + m_id = attrib.value("id"); + m_virtualness = "non-virtual"; + m_protection = attrib.value("prot"); + m_isConst = FALSE; + m_isVolatile = FALSE; + debug(2,"member kind=`%s' id=`%s' prot=`%s' virt=`%s'\n", + m_kindString.data(),m_id.data(),m_protection.data(),m_virtualness.data()); +} + +void MemberHandler::startEnumValue2(const QXmlAttributes& attrib) +{ + MemberHandler *mh = new MemberHandler(this); + mh->startEnumValue(attrib); + m_enumValues.append(mh); +} + + void MemberHandler::startBriefDesc(const QXmlAttributes& attrib) { DocHandler *docHandler = new DocHandler(this); @@ -328,6 +360,11 @@ void MemberHandler::startException(const QXmlAttributes &) m_linkedTextHandler->start("exception"); } +void MemberHandler::startName(const QXmlAttributes &) +{ + m_curString=""; +} + void MemberHandler::endName() { m_name = m_curString.stripWhiteSpace(); @@ -348,13 +385,6 @@ void MemberHandler::startParam(const QXmlAttributes& attrib) } } -void MemberHandler::startEnumValue(const QXmlAttributes& attrib) -{ - EnumValueHandler *evh = new EnumValueHandler(this); - evh->startEnumValue(attrib); - m_enumValues.append(evh); -} - void MemberHandler::startTemplateParamList(const QXmlAttributes&) { m_insideTemplateParamList = TRUE; @@ -416,4 +446,9 @@ ISection *MemberHandler::section() const return m_section; } +IMemberIterator *MemberHandler::enumValues() const +{ + return new MemberIterator(m_enumValues); +} + diff --git a/addon/doxmlparser/src/memberhandler.h b/addon/doxmlparser/src/memberhandler.h index f76655c..6280013 100644 --- a/addon/doxmlparser/src/memberhandler.h +++ b/addon/doxmlparser/src/memberhandler.h @@ -51,6 +51,8 @@ class MemberReferenceIterator : public BaseIterator<IMemberReferenceIterator,IMe BaseIterator<IMemberReferenceIterator,IMemberReference,MemberReference>(list) {} }; + +#if 0 class EnumValueHandler : public IEnumValue, public BaseHandler<EnumValueHandler> { public: @@ -65,12 +67,12 @@ class EnumValueHandler : public IEnumValue, public BaseHandler<EnumValueHandler> // IEnumValue virtual const IString *name() const { return &m_name; } - virtual const IString *initializer() const { return &m_initializer; } + virtual ILinkedTextIterator *initializer() const + { return new LinkedTextIterator(m_initializer); } void setName(const QString &name) { m_name=name; } - void setInitializer(const QString &init) { m_initializer=init; } - virtual ~EnumValueHandler() { delete m_brief; delete m_detailed; } + virtual ~EnumValueHandler(); EnumValueHandler(IBaseHandler *parent); virtual IDocRoot *briefDescription() const @@ -80,10 +82,11 @@ class EnumValueHandler : public IEnumValue, public BaseHandler<EnumValueHandler> private: StringImpl m_name; - StringImpl m_initializer; + QList<LinkedTextImpl> m_initializer; IBaseHandler *m_parent; DocHandler *m_brief; DocHandler *m_detailed; + LinkedTextHandler *m_linkedTextHandler; }; class EnumValueIterator : public BaseIterator<IEnumValueIterator,IEnumValue,EnumValueHandler> @@ -92,15 +95,29 @@ class EnumValueIterator : public BaseIterator<IEnumValueIterator,IEnumValue,Enum EnumValueIterator(const QList<EnumValueHandler> &list) : BaseIterator<IEnumValueIterator,IEnumValue,EnumValueHandler>(list) {} }; +#endif -class MemberHandler : public IMember, public BaseHandler<MemberHandler> +class MemberHandler : public IDefine, + public IProperty, + public IVariable, + public ITypedef, + public IFunction, + public ISignal, + public IPrototype, + public IFriend, + public IDCOP, + public ISlot, + public IEnum, + public IEnumValue, + public BaseHandler<MemberHandler> { public: virtual void startMember(const QXmlAttributes& attrib); virtual void endMember(); virtual void startParam(const QXmlAttributes& attrib); virtual void startType(const QXmlAttributes& attrib); + virtual void startName(const QXmlAttributes& attrib); virtual void endName(); virtual void startBriefDesc(const QXmlAttributes& attrib); virtual void startDetailedDesc(const QXmlAttributes& attrib); @@ -116,6 +133,7 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler> virtual void startInitializer(const QXmlAttributes& attrib); virtual void startException(const QXmlAttributes& attrib); virtual void startEnumValue(const QXmlAttributes& attrib); + virtual void startEnumValue2(const QXmlAttributes& attrib); virtual void startTemplateParamList(const QXmlAttributes &attrib); virtual void endTemplateParamList(); @@ -172,13 +190,14 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler> { return m_reimplements; } virtual IMemberReferenceIterator *reimplementedBy() const { return new MemberReferenceIterator(m_reimplementedBy); } - virtual IEnumValueIterator *enumValues() const - { return new EnumValueIterator(m_enumValues); } virtual IDocRoot *briefDescription() const { return m_brief; } virtual IDocRoot *detailedDescription() const { return m_detailed; } + // IEnum + virtual IMemberIterator *enumValues() const; + void initialize(MainHandler *m); void setCompoundHandler(CompoundHandler *c); void setSectionHandler(SectionHandler *s); @@ -212,16 +231,19 @@ class MemberHandler : public IMember, public BaseHandler<MemberHandler> bool m_isConst; bool m_isVolatile; LinkedTextHandler *m_linkedTextHandler; - QList<EnumValueHandler> m_enumValues; + QList<MemberHandler> m_enumValues; bool m_insideTemplateParamList; bool m_hasTemplateParamList; }; -class MemberIterator : public BaseIterator<IMemberIterator,IMember,MemberHandler> +class MemberIterator : public BaseIteratorVia<IMemberIterator, + IMember, + MemberHandler, + IFunction> { public: MemberIterator(const QList<MemberHandler> &list) : - BaseIterator<IMemberIterator,IMember,MemberHandler>(list) {} + BaseIteratorVia<IMemberIterator,IMember,MemberHandler,IFunction>(list) {} }; void memberhandler_init(); diff --git a/addon/doxmlparser/src/paramhandler.cpp b/addon/doxmlparser/src/paramhandler.cpp index ecfdda2..0278e86 100644 --- a/addon/doxmlparser/src/paramhandler.cpp +++ b/addon/doxmlparser/src/paramhandler.cpp @@ -20,10 +20,8 @@ TemplateParamListHandler::TemplateParamListHandler(IBaseHandler *parent) : m_parent(parent) { addStartHandler("param",this,&TemplateParamListHandler::startParam); - //addEndHandler("param",this,&TemplateParamListHandler::endParam); addEndHandler("templateparamlist",this,&TemplateParamListHandler::endTemplateParamList); - } void TemplateParamListHandler::startParam(const QXmlAttributes& attrib) diff --git a/addon/doxmlparser/test/main.cpp b/addon/doxmlparser/test/main.cpp index 7ac7720..067dfc9 100644 --- a/addon/doxmlparser/test/main.cpp +++ b/addon/doxmlparser/test/main.cpp @@ -16,6 +16,7 @@ #include <stdio.h> #include <stdlib.h> #include <doxmlintf.h> +#include <qstring.h> /*! Dumps the contents of a hyperlinked text fragment as plain text to the * output. @@ -390,6 +391,15 @@ void DumpDoc(IDoc *doc,int level) InPrint(("<preformatted/>\n")); } break; + case IDoc::Verbatim: + { + InPrint(("<verbatim>\n")); + IDocVerbatim *vt = dynamic_cast<IDocVerbatim*>(doc); + ASSERT(vt!=0); + InPrint(("%s",vt->text()->latin1())); + InPrint(("<verbatim/>\n")); + } + break; case IDoc::Symbol: { IDocSymbol *sym = dynamic_cast<IDocSymbol*>(doc); @@ -540,14 +550,22 @@ int main(int argc,char **argv) } mri->release(); - IEnumValueIterator *evi = mem->enumValues(); - IEnumValue *ev; - for (evi->toFirst();(ev=evi->current());evi->toNext()) + if (mem->kind()==IMember::Enum) // we have found an enum { - printf(" Enum value `%s' init=`%s'\n", - ev->name()->latin1(),ev->initializer()->latin1()); + IEnum *e = dynamic_cast<IEnum*>(mem); + IMemberIterator *evi = e->enumValues(); // get the enum values + IMember *mev; + for (evi->toFirst();(mev=evi->current());evi->toNext()) + { + IEnumValue *ev = dynamic_cast<IEnumValue*>(mev); + ILinkedTextIterator *lti = ev->initializer(); + QString init = linkedTextToString(lti); + lti->release(); + printf(" Enum value `%s' init=`%s'\n", + ev->name()->latin1(),init.latin1()); + } + evi->release(); } - evi->release(); pli = mem->templateParameters(); if (pli) diff --git a/addon/perlmod/DoxyModel.pm b/addon/perlmod/DoxyModel.pm deleted file mode 100644 index 10454b9..0000000 --- a/addon/perlmod/DoxyModel.pm +++ /dev/null @@ -1,102 +0,0 @@ -sub section($$) { - my ($wrap, $name) = @_; - my $prefix = "Doxy" . $name; - return - [ "hash", "Doxy" . $wrap, - { - members => - [ "list", $prefix . "s", - [ "hash", $prefix, - { - kind => [ "field", $prefix . "Kind" ], - name => [ "field", $prefix . "Name" ], - virtualness => [ "field", $prefix . "Virtualness" ], - protection => [ "field", $prefix . "Protection" ], - type => [ "field", $prefix . "Type" ], - parameters => - [ "list", $prefix . "Params", - [ "hash", $prefix . "Param", - { - declaration_name => [ "field", $prefix . "ParamName" ], - type => [ "field", $prefix . "ParamType" ], - }, - ], - ], - detailed => - [ "hash", $prefix . "Detailed", - { - doc => [ "doc", $prefix . "DetailedDoc" ], - return => [ "doc", $prefix . "Return" ], - see => [ "doc", $prefix . "See" ], - params => - [ "list", $prefix . "PDBlocks", - [ "hash", $prefix . "PDBlock", - { - parameters => - [ "list", $prefix . "PDParams", - [ "hash", $prefix . "PDParam", - { - name => [ "field", $prefix . "PDParamName" ], - }, - ], - ], - doc => [ "doc", $prefix . "PDDoc" ], - }, - ], - ], - }, - ], - }, - ], - ], - }, - ]; -} - -$doxymodel = - [ "hash", "DoxyTop", - { - files => - [ "list", "DoxyFiles", - [ "hash", "DoxyFile", - { - name => [ "field", "DoxyFileName" ], - typedefs => section("FileTypedefs", "Typedef"), - variables => section("FileVariables", "Variable"), - functions => section("FileFunctions", "Function"), - detailed => - [ "hash", "DoxyFileDetailed", - { - doc => [ "doc", "DoxyFileDetailedDoc" ], - }, - ], - }, - ], - ], - classes => - [ "list", "DoxyClasses", - [ "hash", "DoxyClass", - { - name => [ "field", "DoxyClassName" ], - public_typedefs => section("ClassPublicTypedefs", "Typedef"), - public_methods => section("ClassPublicMethods", "Function"), - public_members => section("ClassPublicMembers", "Variable"), - protected_typedefs => section("ClassProtectedTypedefs", "Typedef"), - protected_methods => section("ClassProtectedMethods", "Function"), - protected_members => section("ClassProtectedMembers", "Variable"), - private_typedefs => section("ClassPrivateTypedefs", "Typedef"), - private_methods => section("ClassPrivateMethods", "Function"), - private_members => section("ClassPrivateMembers", "Variable"), - detailed => - [ "hash", "DoxyClassDetailed", - { - doc => [ "doc", "DoxyClassDetailedDoc" ], - }, - ], - }, - ], - ], - }, - ]; - -1; diff --git a/addon/perlmod/README b/addon/perlmod/README deleted file mode 100644 index 0938474..0000000 --- a/addon/perlmod/README +++ /dev/null @@ -1,43 +0,0 @@ -DoxyModel.pm: it is a Perl module with information about the structure -of DoxyDocs.pm files. It is used by Perl scripts that process the -output generated by the Perl backend. - -doxydocs-latex.pl: it is a Perl script which uses DoxyModel.pm and a -generated DoxyDocs.pm to create the file doxydocs.tex. This file -contains the documentation, this time in "TeX" format. doxydocs.tex, -however, can't been directly LaTeX'ed. - -doxydocs-latex.ltx: this is the LaTeX file which is LaTeX'ed to -generate the PDF or DVI documentation. It includes doxydocs.tex, -generated by doxydocs-latex.pl above, and doxytemplate.tex, generated -by doxytemplate-latex.pl -- see below. This file is intended to be -customized by users if they want to modify the format of the PDF or -DVI output. - -doxytemplate-latex.pl: this is a Perl script which uses DoxyModel.pm -to generate a doxytemplate.tex TeX file. This file is included by -doxydocs-latex.ltx to maintain the compatibility with future versions -of Doxygen; i.e. a customized doxydocs-latex.ltx should work with the -output generated by future versions of Doxygen as long as it includes -an updated doxydocs.tex. - -So what do you do to test my backend? - -1. You apply perlgen.diff and rebuild Doxygen. -2. You save DoxyModel.pm, doxydocs-latex.pl, doxytemplate-latex.pl and -doxydocs-latex.ltx to your test directory. -3. You run doxytemplate-latex.pl to generate doxytemplate.tex. -4. You generate DoxyDocs.pm by running Doxygen on the test code. (You -must enable the GENERATE_PERL option in your Doxyfile). -5. You run doxydocs-latex.pl to generate doxydocs.tex from -DoxyDocs.pm. -6. You run pdflatex on doxydocs-latex.ltx to generate -doxydocs-latex.pdf from doxydocs.tex and doxytemplate.tex. - -If you want to regenerate the PDF output after modifying the test code -you only need to do the steps from 4 on. - -I also attach a main.h file I've used to test my backend and the -corresponding main.pdf file I've generated from it. - - diff --git a/addon/perlmod/doxydocs-latex.pl b/addon/perlmod/doxydocs-latex.pl deleted file mode 100644 index c60ff65..0000000 --- a/addon/perlmod/doxydocs-latex.pl +++ /dev/null @@ -1,108 +0,0 @@ -#!/usr/bin/perl -# Copyright (C) 1997-2002 by Dimitri van Heesch. -# Author: Miguel Lobo. -# -# Permission to use, copy, modify, and distribute this software and its -# documentation under the terms of the GNU General Public License is hereby -# granted. No representations are made about the suitability of this software -# for any purpose. It is provided "as is" without express or implied warranty. -# See the GNU General Public License for more details. -# -# Documents produced by Doxygen are derivative works derived from the -# input used in their production; they are not affected by this license. - -# This script can be used to generate LaTeX output using the new Perl -# intermediate format. It is incomplete and experimental, so for the moment -# you should use Doxygen"s standard LaTeX output. -# -# If you want to try this out, you should do: -# doxygen configName # This creates DoxyDocs.pm -# perl -I. doxydocs-latex.pl # This creates doxydocs.tex and doxytemplate.tex -# latex doxydocs-latex.ltx # This creates doxydocs-latex.dvi -# -# Notes: -# - Your config file has to have Perl output enabled, of course. -# - The Perl output format is only complete enough to document -# a simple C file; no classes by the moment :-). - -use DoxyModel; -use DoxyDocs; - -sub latex_quote($) { - my $text = $_[0]; - $text =~ s/[\\_&]/\\$&/g; - print TEXDOCS $text; -} - -sub generate_doc($) { - my $doc = $_[0]; - for my $item (@$doc) { - my $type = $$item{type}; - if ($type eq "text") { - latex_quote($$item{content}); - } elsif ($type eq "para") { - generate_doc($$item{content}); -# print TEXDOCS "\\par\n"; - } elsif ($type eq "bold") { - print TEXDOCS "\\textbf{"; - generate_doc($$item{content}); - print TEXDOCS "}"; - } elsif ($type eq "emphasis") { - print TEXDOCS "\\textit{"; - generate_doc($$item{content}); - print TEXDOCS "}"; - } elsif ($type eq "url") { - latex_quote($$item{content}); - } - } -} - -sub generate($$) { - my ($item, $model) = @_; - my ($type, $name) = @$model[0, 1]; - if ($type eq "field") { - print TEXDOCS "\\" . $name . "{"; - latex_quote($item); - print TEXDOCS "}"; - } elsif ($type eq "doc") { - if (@$item) { - print TEXDOCS "\\" . $name . "{"; - generate_doc($item); - print TEXDOCS "}%\n"; - } else { - print TEXDOCS "\\" . $name . "Empty%\n"; - } - } elsif ($type eq "hash") { - my ($key, $value); - while (($key, $submodel) = each %{$$model[2]}) { - my $name = $$submodel[1]; - print TEXDOCS "\\def\\f" . $name . "{"; - if ($$item{$key}) { - generate($$item{$key}, $submodel); - } else { - print TEXDOCS "\\" . $name . "Empty"; - } - print TEXDOCS "}%\n"; - } - print TEXDOCS "\\" . $name . "%\n"; - } elsif ($type eq "list") { - my $index = 0; - if (@$item) { - print TEXDOCS "\\" . $name . "{%\n"; - for my $subitem (@$item) { - if ($index) { - print TEXDOCS "\\" . $name . "Sep%\n"; - } - generate($subitem, $$model[2]); - $index++; - } - print TEXDOCS "}%\n"; - } else { - print TEXDOCS "\\" . $name . "Empty%\n"; - } - } -} - -open TEXDOCS, ">doxydocs.tex"; -generate($doxydocs, $doxymodel); -close TEXDOCS; diff --git a/addon/perlmod/doxytemplate-latex.pl b/addon/perlmod/doxytemplate-latex.pl deleted file mode 100644 index 8caddf6..0000000 --- a/addon/perlmod/doxytemplate-latex.pl +++ /dev/null @@ -1,28 +0,0 @@ -use DoxyModel; - -sub template($) { - my $model = $_[0]; - my ($type, $name) = @$model[0, 1]; - if ($type eq "field") { - print TEXTEMPLATE "\\def\\" . $name . "#1{#1}%\n"; - } elsif ($type eq "doc") { - print TEXTEMPLATE "\\def\\" . $name . "#1{#1}%\n"; - } elsif ($type eq "hash") { - my ($key, $value); - while (($key, $submodel) = each %{$$model[2]}) { - my $subname = $$submodel[1]; - print TEXTEMPLATE "\\def\\" . $subname . "Empty{}%\n"; - print TEXTEMPLATE "\\def\\f" . $subname . "Empty{\\" . $subname . "Empty}%\n"; - template($submodel); - } - print TEXTEMPLATE "\\def\\" . $name . "{}%\n"; - } elsif ($type eq "list") { - template($$model[2]); - print TEXTEMPLATE "\\def\\" . $name . "#1{#1}%\n"; - print TEXTEMPLATE "\\def\\" . $name . "Sep{}%\n"; - } -} - -open TEXTEMPLATE, ">doxytemplate.tex"; -template($doxymodel); -close TEXTEMPLATE; |