diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2001-07-15 17:11:26 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2001-07-15 17:11:26 (GMT) |
commit | 89f2a610a5ca245dcc19dc7e95b49ff664c3b66a (patch) | |
tree | bc5400211360251f121d60efdd50b09f10db11d2 /src/tagreader.cpp | |
parent | d5150cf4f1de010ad62f6de641532805ba81940a (diff) | |
download | Doxygen-89f2a610a5ca245dcc19dc7e95b49ff664c3b66a.zip Doxygen-89f2a610a5ca245dcc19dc7e95b49ff664c3b66a.tar.gz Doxygen-89f2a610a5ca245dcc19dc7e95b49ff664c3b66a.tar.bz2 |
Release-1.2.8-20010715
Diffstat (limited to 'src/tagreader.cpp')
-rw-r--r-- | src/tagreader.cpp | 62 |
1 files changed, 58 insertions, 4 deletions
diff --git a/src/tagreader.cpp b/src/tagreader.cpp index ed684c9..26b2b0a 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -39,6 +39,7 @@ class TagMemberInfo { public: TagMemberInfo() : prot(Public), virt(Normal), isStatic(FALSE) {} + QString type; QString name; QString anchor; QString arglist; @@ -54,13 +55,14 @@ class TagClassInfo { public: enum Kind { Class, Struct, Union, Interface, Exception }; - TagClassInfo() { bases=0, members.setAutoDelete(TRUE); } - ~TagClassInfo() { delete bases; } + TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); } + ~TagClassInfo() { delete bases; delete templateArguments; } QString name; QString filename; QStrList docAnchors; QList<BaseInfo> *bases; QList<TagMemberInfo> members; + QList<QString> *templateArguments; Kind kind; }; @@ -168,7 +170,11 @@ class TagFileParser : public QXmlDefaultHandler }; public: - TagFileParser(const char *tagName) : m_tagName(tagName) {} + TagFileParser(const char *tagName) : m_startElementHandlers(17), + m_endElementHandlers(17), + m_tagName(tagName) + { + } void startCompound( const QXmlAttributes& attrib ) { @@ -351,6 +357,17 @@ class TagFileParser : public QXmlDefaultHandler { m_curString = ""; } + void endType() + { + if (m_state==InMember) + { + m_curMember->type = m_curString; + } + else + { + err("Error: Unexpected tag `type' found\n"); + } + } void endName() { switch (m_state) @@ -386,7 +403,11 @@ class TagFileParser : public QXmlDefaultHandler { virt = Virtual; } - if (m_curClass->bases==0) m_curClass->bases = new QList<BaseInfo>; + if (m_curClass->bases==0) + { + m_curClass->bases = new QList<BaseInfo>; + m_curClass->bases->setAutoDelete(TRUE); + } m_curClass->bases->append(new BaseInfo(m_curString,prot,virt)); } else @@ -405,6 +426,22 @@ class TagFileParser : public QXmlDefaultHandler err("Error: Unexpected tag `base' found\n"); } } + void endTemplateArg() + { + if (m_state==InClass && m_curClass) + { + if (m_curClass->templateArguments==0) + { + m_curClass->templateArguments = new QList<QString>; + m_curClass->templateArguments->setAutoDelete(TRUE); + } + m_curClass->templateArguments->append(new QString(m_curString)); + } + else + { + err("Error: Unexpected tag `templarg' found\n"); + } + } void endFilename() { switch (m_state) @@ -510,6 +547,8 @@ class TagFileParser : public QXmlDefaultHandler m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement)); + m_startElementHandlers.insert("templarg", new StartElementHandler(this,&TagFileParser::startStringValue)); + m_startElementHandlers.insert("type", new StartElementHandler(this,&TagFileParser::startStringValue)); m_endElementHandlers.insert("compound", new EndElementHandler(this,&TagFileParser::endCompound)); m_endElementHandlers.insert("member", new EndElementHandler(this,&TagFileParser::endMember)); @@ -527,6 +566,8 @@ class TagFileParser : public QXmlDefaultHandler m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage)); m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor)); m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement)); + m_endElementHandlers.insert("templarg", new EndElementHandler(this,&TagFileParser::endTemplateArg)); + m_endElementHandlers.insert("type", new EndElementHandler(this,&TagFileParser::endType)); return TRUE; } @@ -811,6 +852,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members) for (;(tmi=mii.current());++mii) { Entry *me = new Entry; + me->type = tmi->type; me->name = tmi->name; me->args = tmi->arglist; me->protection = tmi->prot; @@ -929,6 +971,18 @@ void TagFileParser::buildLists(Entry *root) { ce->extends = tci->bases; tci->bases = 0; } + if (tci->templateArguments) + { + if (ce->tArgList==0) ce->tArgList = new ArgumentList; + QListIterator<QString> sli(*tci->templateArguments); + QString *argName; + for (;(argName=sli.current());++sli) + { + Argument *a = new Argument; + a->name = *argName; + ce->tArgList->append(a); + } + } buildMemberList(ce,tci->members); root->addSubEntry(ce); |