1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/***************************************************************************
* Copyright (C) 2003 by Roberto Raggi *
* roberto@kdevelop.org *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef __tag_creator_h
#define __tag_creator_h
#include "tree_parser.h"
#include <qstringlist.h>
#include <qvaluestack.h>
class Catalog;
class Tag;
namespace TagUtils
{
int stringToAccess( const QString& access );
QString accessToString( int id );
}
class TagCreator: public TreeParser
{
public:
TagCreator( const QString& fileName, Catalog* c );
virtual ~TagCreator();
// translation-unit
virtual void parseTranslationUnit( const ParsedFile& );
// declarations
virtual void parseDeclaration( DeclarationAST* );
virtual void parseNamespace( NamespaceAST* );
virtual void parseNamespaceAlias( NamespaceAliasAST* decl );
virtual void parseUsingDirective( UsingDirectiveAST* );
virtual void parseTypedef( TypedefAST* );
virtual void parseTemplateDeclaration( TemplateDeclarationAST* );
virtual void parseSimpleDeclaration( SimpleDeclarationAST* );
virtual void parseFunctionDefinition( FunctionDefinitionAST* );
virtual void parseLinkageBody( LinkageBodyAST* );
virtual void parseAccessDeclaration( AccessDeclarationAST* );
// type-specifier
virtual void parseClassSpecifier( ClassSpecifierAST* );
virtual void parseEnumSpecifier( EnumSpecifierAST* );
virtual void parseElaboratedTypeSpecifier( ElaboratedTypeSpecifierAST* );
virtual void parseMyDeclaration( GroupAST* funSpec, GroupAST* storageSpec, TypeSpecifierAST* typeSpec, InitDeclaratorAST* decl );
virtual void parseFunctionDeclaration( GroupAST* funSpec, GroupAST* storageSpec, TypeSpecifierAST* typeSpec, InitDeclaratorAST* decl );
virtual void parseFunctionArguments( Tag& tag, DeclaratorAST* declarator );
virtual void parseBaseClause( const QString& className, BaseClauseAST* baseClause );
/**
call this function after the last use of a TagCreator object, to do cleanup work
*/
static void destroyDocumentation();
/**
This sets the directories, where the doxygen documentation should be searched in.
@param dirs QStringList containing strings, which define the pathes, where documentation is searched in
*/
static void setDocumentationDirectories( const QStringList& dirs );
private:
QString scopeOfDeclarator( DeclaratorAST* d );
QString typeOfDeclaration( TypeSpecifierAST* typeSpec, DeclaratorAST* declarator );
private:
void takeTemplateParams( Tag& target, TemplateDeclarationAST* ast );
void checkTemplateDeclarator( Tag& tag );
class CommentPusher {
TagCreator& m_ref;
public:
CommentPusher( TagCreator& ref, QString comment ) : m_ref( ref ) {
m_ref.pushComment( comment );
}
~CommentPusher() {
m_ref.popComment();
}
};
QStringList m_comments;
QString comment() {
if( m_comments.isEmpty() ) {
return "";
} else {
return m_comments.front();
}
}
void pushComment( QString comm ) {
m_comments.push_front( comm );
}
void popComment() {
m_comments.pop_front();
}
Catalog* m_catalog;
QString m_fileName;
QStringList m_currentScope;
QValueList<QStringList> m_imports;
QString m_currentAccess;
bool m_inClass;
bool m_inSlots;
bool m_inSignals;
int m_anon;
QValueStack<TemplateDeclarationAST*> m_currentTemplateDeclarator;
static class DoxyDoc* m_documentation;
private:
TagCreator( const TagCreator& source );
void operator = ( const TagCreator& source );
};
#endif // __tag_creator_h
// kate: indent-mode csands; tab-width 4;
|