summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.in2
-rw-r--r--src/bufstr.h2
-rw-r--r--src/classdef.cpp19
-rw-r--r--src/classdef.h18
-rw-r--r--src/classlist.cpp2
-rw-r--r--src/classlist.h2
-rw-r--r--src/code.h2
-rw-r--r--src/code.l141
-rw-r--r--src/commentcnv.h2
-rw-r--r--src/commentcnv.l2
-rw-r--r--src/commentscan.l21
-rw-r--r--src/compound.xsd14
-rw-r--r--src/compound_xsd.h14
-rw-r--r--src/config.l8
-rw-r--r--src/constexp.h2
-rw-r--r--src/constexp.l2
-rw-r--r--src/constexp.y2
-rw-r--r--src/cppvalue.cpp2
-rw-r--r--src/cppvalue.h2
-rw-r--r--src/debug.cpp2
-rw-r--r--src/debug.h2
-rw-r--r--src/declinfo.h2
-rw-r--r--src/declinfo.l2
-rw-r--r--src/defargs.h2
-rw-r--r--src/defargs.l2
-rw-r--r--src/defgen.cpp2
-rw-r--r--src/defgen.h2
-rw-r--r--src/define.cpp2
-rw-r--r--src/define.h2
-rw-r--r--src/definition.cpp2
-rw-r--r--src/definition.h2
-rw-r--r--src/diagram.cpp2
-rw-r--r--src/diagram.h2
-rw-r--r--src/dirdef.h2
-rw-r--r--src/docparser.cpp32
-rw-r--r--src/docparser.h3
-rw-r--r--src/doctokenizer.h2
-rw-r--r--src/doctokenizer.l2
-rw-r--r--src/docvisitor.h2
-rw-r--r--src/dot.cpp2
-rw-r--r--src/dot.h2
-rw-r--r--src/doxygen.cpp123
-rw-r--r--src/doxygen.h2
-rw-r--r--src/doxygen.pro.in2
-rw-r--r--src/doxytag.l2
-rw-r--r--src/doxytag.pro.in2
-rw-r--r--src/doxytag.t2
-rw-r--r--src/entry.cpp10
-rw-r--r--src/entry.h48
-rw-r--r--src/example.h2
-rw-r--r--src/filedef.cpp2
-rw-r--r--src/filedef.h2
-rw-r--r--src/filename.cpp2
-rw-r--r--src/filename.h2
-rw-r--r--src/formula.cpp2
-rw-r--r--src/formula.h2
-rw-r--r--src/groupdef.cpp2
-rw-r--r--src/groupdef.h2
-rw-r--r--src/htmlattrib.h2
-rw-r--r--src/htmldocvisitor.cpp2
-rw-r--r--src/htmldocvisitor.h2
-rw-r--r--src/htmlgen.cpp10
-rw-r--r--src/htmlgen.h2
-rw-r--r--src/htmlhelp.cpp2
-rw-r--r--src/htmlhelp.h2
-rw-r--r--src/image.cpp2
-rw-r--r--src/image.h2
-rw-r--r--src/index.cpp531
-rw-r--r--src/index.h59
-rw-r--r--src/instdox.cpp2
-rw-r--r--src/instdox.h2
-rw-r--r--src/language.h2
-rw-r--r--src/latexdocvisitor.cpp2
-rw-r--r--src/latexdocvisitor.h2
-rw-r--r--src/latexgen.cpp4
-rw-r--r--src/latexgen.h2
-rw-r--r--src/libdoxycfg.pro.in2
-rw-r--r--src/libdoxycfg.t2
-rw-r--r--src/libdoxygen.pro.in2
-rw-r--r--src/libdoxygen.t2
-rw-r--r--src/lockingptr.h2
-rw-r--r--src/logos.cpp2
-rw-r--r--src/logos.h2
-rw-r--r--src/main.cpp2
-rw-r--r--src/mandocvisitor.cpp2
-rw-r--r--src/mandocvisitor.h2
-rw-r--r--src/mangen.cpp2
-rw-r--r--src/mangen.h2
-rw-r--r--src/memberdef.cpp89
-rw-r--r--src/memberdef.h7
-rw-r--r--src/membergroup.cpp2
-rw-r--r--src/membergroup.h2
-rw-r--r--src/memberlist.cpp2
-rw-r--r--src/memberlist.h2
-rw-r--r--src/membername.cpp30
-rw-r--r--src/membername.h2
-rw-r--r--src/message.cpp2
-rw-r--r--src/message.h2
-rw-r--r--src/namespacedef.cpp2
-rw-r--r--src/namespacedef.h2
-rw-r--r--src/objcache.cpp2
-rw-r--r--src/objcache.h2
-rw-r--r--src/outputgen.cpp2
-rw-r--r--src/outputgen.h2
-rw-r--r--src/outputlist.cpp2
-rw-r--r--src/outputlist.h2
-rw-r--r--src/pagedef.h2
-rw-r--r--src/parserintf.h2
-rw-r--r--src/pngenc.cpp2
-rw-r--r--src/pngenc.h2
-rw-r--r--src/pre.h2
-rw-r--r--src/pre.l4
-rw-r--r--src/printdocvisitor.h2
-rw-r--r--src/pycode.h2
-rw-r--r--src/pycode.l10
-rw-r--r--src/pyscanner.h2
-rw-r--r--src/pyscanner.l8
-rw-r--r--src/qtbc.h2
-rw-r--r--src/reflist.cpp2
-rw-r--r--src/reflist.h2
-rw-r--r--src/rtfdocvisitor.cpp2
-rw-r--r--src/rtfdocvisitor.h2
-rw-r--r--src/rtfgen.cpp2
-rw-r--r--src/rtfgen.h2
-rw-r--r--src/rtfstyle.cpp2
-rw-r--r--src/rtfstyle.h2
-rw-r--r--src/scanner.h2
-rw-r--r--src/scanner.l407
-rw-r--r--src/searchindex.cpp2
-rw-r--r--src/searchindex.h2
-rw-r--r--src/section.h2
-rw-r--r--src/sortdict.h2
-rw-r--r--src/store.h2
-rw-r--r--src/tagreader.cpp17
-rw-r--r--src/tagreader.h2
-rw-r--r--src/translator_en.h2
-rw-r--r--src/translator_gr.h586
-rw-r--r--src/translator_nl.h4
-rw-r--r--src/translator_pt.h2
-rw-r--r--src/translator_ro.h2
-rw-r--r--src/translator_si.h2
-rw-r--r--src/util.cpp101
-rw-r--r--src/util.h2
-rw-r--r--src/version.h2
-rw-r--r--src/xmldocvisitor.cpp4
-rw-r--r--src/xmldocvisitor.h2
-rw-r--r--src/xmlgen.cpp49
-rw-r--r--src/xmlgen.h2
148 files changed, 1509 insertions, 1100 deletions
diff --git a/src/Makefile.in b/src/Makefile.in
index e9decc4..86298ce 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -1,6 +1,6 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/bufstr.h b/src/bufstr.h
index 3fcdd1d..995211a 100644
--- a/src/bufstr.h
+++ b/src/bufstr.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/classdef.cpp b/src/classdef.cpp
index 9ed8c1f..ed4a603 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -2086,6 +2086,7 @@ void ClassDef::mergeMembers()
bool inlineInheritedMembers = Config_getBool("INLINE_INHERITED_MEMB" );
if (baseClasses())
{
+ //printf(" => has base classes!\n");
BaseClassListIterator bcli(*baseClasses());
BaseClassDef *bcd;
for ( ; (bcd=bcli.current()) ; ++bcli )
@@ -2096,17 +2097,17 @@ void ClassDef::mergeMembers()
bClass->mergeMembers();
MemberNameInfoSDict *srcMnd = bClass->memberNameInfoSDict();
- MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict;
+ MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict;
- if (srcMnd && dstMnd)
+ if (srcMnd)
{
MemberNameInfoSDict::Iterator srcMnili(*srcMnd);
MemberNameInfo *srcMni;
for ( ; (srcMni=srcMnili.current()) ; ++srcMnili)
{
- //printf("Base member name %s\n",srcMni->memberName());
+ //printf(" Base member name %s\n",srcMni->memberName());
MemberNameInfo *dstMni;
- if ((dstMni=dstMnd->find(srcMni->memberName())))
+ if (dstMnd!=0 && (dstMni=dstMnd->find(srcMni->memberName())))
// a member with that name is already in the class.
// the member may hide or reimplement the one in the sub class
// or there may be another path to the base class that is already
@@ -2298,6 +2299,12 @@ void ClassDef::mergeMembers()
}
}
+ if (dstMnd==0)
+ {
+ m_impl->allMemberNameInfoSDict = new MemberNameInfoSDict(17);
+ m_impl->allMemberNameInfoSDict->setAutoDelete(TRUE);
+ dstMnd = m_impl->allMemberNameInfoSDict;
+ }
// add it to the dictionary
dstMnd->append(newMni->memberName(),newMni);
}
@@ -2317,7 +2324,7 @@ void ClassDef::mergeCategory(ClassDef *category)
category->setCategoryOf(this);
MemberNameInfoSDict *srcMnd = category->memberNameInfoSDict();
- MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict;
+ MemberNameInfoSDict *dstMnd = m_impl->allMemberNameInfoSDict;
if (srcMnd && dstMnd)
{
diff --git a/src/classdef.h b/src/classdef.h
index 3646d9b..7152d84 100644
--- a/src/classdef.h
+++ b/src/classdef.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -23,7 +23,7 @@
#include <qdict.h>
#include <qstrlist.h>
-#include "entry.h"
+//#include "entry.h"
#include "memberlist.h"
#include "definition.h"
#include "sortdict.h"
@@ -56,13 +56,13 @@ class ClassDef : public Definition
{
public:
/*! The various compound types */
- enum CompoundType { Class=Entry::CLASS_SEC,
- Struct=Entry::STRUCT_SEC,
- Union=Entry::UNION_SEC,
- Interface=Entry::INTERFACE_SEC,
- Protocol=Entry::PROTOCOL_SEC,
- Category=Entry::CATEGORY_SEC,
- Exception=Entry::EXCEPTION_SEC
+ enum CompoundType { Class, //=Entry::CLASS_SEC,
+ Struct, //=Entry::STRUCT_SEC,
+ Union, //=Entry::UNION_SEC,
+ Interface, //=Entry::INTERFACE_SEC,
+ Protocol, //=Entry::PROTOCOL_SEC,
+ Category, //=Entry::CATEGORY_SEC,
+ Exception //=Entry::EXCEPTION_SEC
};
/*! Creates a new compound definition.
diff --git a/src/classlist.cpp b/src/classlist.cpp
index 67507d6..aac8f95 100644
--- a/src/classlist.cpp
+++ b/src/classlist.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/classlist.h b/src/classlist.h
index 0b74b03..3621e3b 100644
--- a/src/classlist.h
+++ b/src/classlist.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/code.h b/src/code.h
index 15dcdee..26d8f7e 100644
--- a/src/code.h
+++ b/src/code.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/code.l b/src/code.l
index 16a1dc3..fa7b056 100644
--- a/src/code.l
+++ b/src/code.l
@@ -55,9 +55,6 @@ static ClassSDict *g_codeClassSDict = 0;
static QCString g_curClassName;
static QStrList g_curClassBases;
-// TODO: is this still needed? if so, make it work
-static bool g_inClass;
-
static QCString g_parmType;
static QCString g_parmName;
@@ -95,7 +92,9 @@ static int g_bracketCount = 0;
static int g_curlyCount = 0;
static int g_sharpCount = 0;
static bool g_inFunctionTryBlock = FALSE;
+static bool g_inForEachExpression = FALSE;
+static int g_lastTemplCastContext;
static int g_lastSpecialCContext;
static int g_lastStringContext;
static int g_lastSkipCppContext;
@@ -108,6 +107,8 @@ static bool g_insideProtocolList;
static bool g_lexInit = FALSE;
+static QStack<int> g_classScopeLengthStack;
+
// context for an Objective-C method call
struct ObjCCallCtx
{
@@ -377,6 +378,7 @@ static CallContext g_theCallContext;
/*! add class/namespace name s to the scope */
static void pushScope(const char *s)
{
+ g_classScopeLengthStack.push(new int(g_classScope.length()));
if (g_classScope.isEmpty())
{
g_classScope = s;
@@ -392,17 +394,11 @@ static void pushScope(const char *s)
/*! remove the top class/namespace name from the scope */
static void popScope()
{
- if (!g_classScope.isEmpty())
+ if (!g_classScopeLengthStack.isEmpty())
{
- int i=g_classScope.findRev("::");
- if (i==-1) // last name, strip all
- {
- g_classScope.resize(0);
- }
- else // strip name
- {
- g_classScope = g_classScope.left(i);
- }
+ int *pLength = g_classScopeLengthStack.pop();
+ g_classScope.truncate(*pLength);
+ delete pLength;
}
else
{
@@ -1624,9 +1620,10 @@ TEMPLIST "<"[^\"\}\{\(\)\/\n\>]*">"
SCOPETNAME ((({ID}{TEMPLIST}?){BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEPREFIX ({ID}{TEMPLIST}?{BN}*"::"{BN}*)+
KEYWORD_OBJC ("@public"|"@private"|"@protected"|"@class"|"@implementation"|"@interface"|"@end"|"@selector"|"@protocol")
-KEYWORD ("asm"|"auto"|"class"|"const"|"const_cast"|"delete"|"dynamic_cast"|"enum"|"explicit"|"extern"|"false"|"friend"|"inline"|"mutable"|"namespace"|"new"|"operator"|"private"|"protected"|"public"|"register"|"reinterpret_cast"|"sizeof"|"static"|"static_cast"|"struct"|"template"|"this"|"self"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC)
-FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"for"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while")
-TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"boolean"|"id"|"SEL")
+KEYWORD ("add"|"asm"|"__assume"|"auto"|"class"|"const"|"delete"|"enum"|"explicit"|"extern"|"false"|"friend"|"gcnew"|"gcroot"|"get"|"inline"|"internal"|"mutable"|"namespace"|"new"|"nullptr"|"override"|"operator"|"pin_ptr"|"private"|"protected"|"public"|"raise"|"register"|"remove"|"self"|"set"|"sizeof"|"static"|"struct"|"__super"|"template"|"generic"|"this"|"true"|"typedef"|"typeid"|"typename"|"union"|"using"|"virtual"|"volatile"|"abstract"|"final"|"import"|"synchronized"|"transient"|KEYWORD_OBJC)
+FLOWKW ("break"|"case"|"catch"|"continue"|"default"|"do"|"else"|"finally"|"for"|"foreach"|"for each"|"goto"|"if"|"return"|"switch"|"throw"|"throws"|"try"|"while")
+TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"object"|"short"|"signed"|"unsigned"|"void"|"wchar_t"|"size_t"|"boolean"|"id"|"SEL"|"string")
+CASTKW ("const_cast"|"dynamic_cast"|"reinterpret_cast"|"static_cast")
CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
ARITHOP "+"|"-"|"/"|"*"|"%"|"--"|"++"
ASSIGNOP "="|"*="|"/="|"%="|"+="|"-="|"<<="|">>="|"&="|"^="|"|="
@@ -1650,10 +1647,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
%x ClassName
%x PackageName
%x ClassVar
+%x CppCliTypeModifierFollowup
%x Bases
%x SkipSharp
%x ReadInclude
%x TemplDecl
+%x TemplCast
%x CallEnd
%x ObjCMethod
%x ObjCParams
@@ -1680,7 +1679,20 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
if (!g_insideTemplate)
BEGIN( ClassName );
}
-<Body>("class"|"struct"|"union"|"namespace")[ \t\n]+ {
+<Body>(("public"|"private"){B}+)?("ref"|"value"|"interface"|"enum"){B}+("class"|"struct") {
+ if (g_insideTemplate) REJECT;
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ BEGIN( ClassName );
+ }
+<Body>"property"|"event"/{BN}* {
+ if (g_insideTemplate) REJECT;
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ }
+<Body>(KEYWORD_CPPCLI_DATATYPE|("partial"{B}+)?"class"|"struct"|"union"|"namespace"){B}+ {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
@@ -1723,7 +1735,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
if (*yytext=='{')
{
g_curlyCount++;
- g_inClass=TRUE;
if (g_searchingForBody)
{
g_searchingForBody=FALSE;
@@ -1869,8 +1880,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_code->codify(yytext);
- g_inClass=FALSE;
-
//fprintf(stderr,"g_bodyCurlyCount=%d\n",g_bodyCurlyCount);
if (--g_bodyCurlyCount<=0)
{
@@ -1910,8 +1919,6 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_code->codify(yytext);
endFontClass();
- g_inClass=FALSE;
-
g_currentMemberDef=0;
if (g_currentDefinition)
g_currentDefinition=g_currentDefinition->getOuterScope();
@@ -1922,12 +1929,17 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_searchingForBody=FALSE;
BEGIN( Body );
}
-<ClassName,ClassVar>[*&]+ {
+<ClassName,ClassVar>[*&^%]+ {
g_type=g_curClassName.copy();
g_name.resize(0);
g_code->codify(yytext);
BEGIN( Body ); // variable of type struct *
}
+<ClassName>"__declspec"{B}*"("{B}*{ID}{B}*")" {
+ startFontClass("keyword");
+ g_code->codify(yytext);
+ endFontClass();
+ }
<ClassName>{ID}("::"{ID})* {
g_curClassName=yytext;
addType();
@@ -1952,23 +1964,29 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_curClassBases.clear();
BEGIN( Bases );
}
+<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
+ //fprintf(stderr,"***** C++/CLI modifier %s on g_curClassName=%s\n",yytext,g_curClassName.data());
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ BEGIN( CppCliTypeModifierFollowup );
+ }
<ClassVar>{ID} {
g_type = g_curClassName.copy();
g_name = yytext;
g_theVarContext.addVariable(g_type,g_name);
generateClassOrGlobalLink(*g_code,yytext);
}
-<ClassName,ClassVar>[ \t\n]*":"[ \t\n]* {
+<ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*":"{B}* {
codifyLines(yytext);
g_curClassBases.clear();
BEGIN( Bases );
}
<PackageName>[ \t]*";" |
-<Bases,ClassName,ClassVar>[ \t]*"{"[ \t]* {
+<Bases,ClassName,ClassVar,CppCliTypeModifierFollowup>{B}*"{"{B}* {
g_theVarContext.pushScope();
g_code->codify(yytext);
g_curlyCount++;
- g_inClass=TRUE;
if (YY_START==ClassVar && g_curClassName.isEmpty())
{
g_curClassName = g_name.copy();
@@ -2086,7 +2104,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_name+=yytext;
BEGIN( FuncCall );
}
-<Body,TemplDecl>"template"/([^a-zA-Z0-9]) {
+<Body,TemplDecl>("template"|"generic")/([^a-zA-Z0-9]) {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
@@ -2126,18 +2144,26 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
endFontClass();
g_name.resize(0);g_type.resize(0);
}
+<FuncCall>"in"/{BN}* {
+ if (!g_inForEachExpression) REJECT;
+ startFontClass("keywordflow");
+ codifyLines(yytext);
+ endFontClass();
+ g_name.resize(0);g_type.resize(0);
+ }
<Body>{FLOWKW}/{BN}*"(" {
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
g_name.resize(0);g_type.resize(0);
+ g_inForEachExpression = (strcmp(yytext,"for each")==0 || strcmp(yytext, "foreach")==0);
BEGIN(FuncCall);
}
<Body>{FLOWKW}/([^a-z_A-Z0-9]) {
startFontClass("keywordflow");
codifyLines(yytext);
endFontClass();
- if (g_inFunctionTryBlock && strcmp(yytext,"catch")==0)
+ if (g_inFunctionTryBlock && (strcmp(yytext,"catch")==0 || strcmp(yytext,"finally")==0))
{
g_inFunctionTryBlock=FALSE;
}
@@ -2163,6 +2189,13 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
addType();
g_name+=yytext;
}
+<Body>"generic"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* {
+ startFontClass("keyword");
+ g_code->codify(yytext);
+ endFontClass();
+ g_sharpCount=0;
+ BEGIN(TemplDecl);
+ }
<Body>"template"/{B}*"<"[^\n\/\-\.\{\"\>]*">"{B}* { // template<...>
startFontClass("keyword");
g_code->codify(yytext);
@@ -2187,7 +2220,37 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
BEGIN(Body);
}
}
-<Body>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"("::"{ID})*/{B}* { // A<T> *pt;
+<TemplCast>">" {
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ BEGIN( g_lastTemplCastContext );
+ }
+<TemplCast>{ID}("::"{ID})* {
+ generateClassOrGlobalLink(*g_code,yytext);
+ }
+<TemplCast>("const"|"volatile"){B}* {
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ }
+<TemplCast>[*^]* {
+ codifyLines(yytext);
+ }
+<Body,FuncCall>{CASTKW}"<" { // static_cast<T>(
+ startFontClass("keyword");
+ codifyLines(yytext);
+ endFontClass();
+ g_lastTemplCastContext = YY_START;
+ BEGIN(TemplCast);
+ }
+<Body,TemplCast>{SCOPENAME}{B}*"<"[^\n\/\-\.\{\"\>]*">"("::"{ID})*/{B}* { // A<T> *pt;
+ int i=QCString(yytext).find('<');
+ QCString kw = QCString(yytext).left(i).stripWhiteSpace();
+ if (kw.right(5)=="_cast" && YY_START==Body)
+ {
+ REJECT;
+ }
addType();
generateClassOrGlobalLink(*g_code,yytext);
g_name+=yytext;
@@ -2223,6 +2286,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
startFontClass("stringliteral");
g_code->codify(yytext);
g_lastStringContext=YY_START;
+ g_inForEachExpression = FALSE;
BEGIN( SkipString );
}
<SkipString>[^\"\\\r\n]* {
@@ -2525,7 +2589,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
g_code->codify(yytext);
endFontClass();
}
-<MemberCall2,FuncCall,OldStyleArgs>{TYPEKW}/([^a-z_A-Z0-9]) {
+<MemberCall2,FuncCall,OldStyleArgs,TemplCast>{TYPEKW}/([^a-z_A-Z0-9]) {
addParmType();
g_parmName=yytext;
startFontClass("keywordtype");
@@ -2546,6 +2610,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
}
<FuncCall>";" { // probably a cast, not a function call
g_code->codify(yytext);
+ g_inForEachExpression = FALSE;
BEGIN( Body );
}
<MemberCall2,FuncCall>, {
@@ -2563,9 +2628,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
}
}
<MemberCall2,FuncCall>{OPERATOR} { // operator
- if (strcmp(yytext,"*") && strcmp(yytext,"&")) // typically a pointer or reference
+ if (strcmp(yytext,"*") &&
+ strcmp(yytext,"&") &&
+ strcmp(yytext,"^") &&
+ strcmp(yytext,"%")) // typically a pointer or reference
{
- // not a * or &
+ // not a * or &, or C++/CLI's ^ or %
g_parmType.resize(0);g_parmName.resize(0);
}
g_code->codify(yytext);
@@ -2573,6 +2641,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
<MemberCall,MemberCall2,FuncCall>")" {
g_theVarContext.addVariable(g_parmType,g_parmName);
g_theCallContext.popScope();
+ g_inForEachExpression = FALSE;
//g_theCallContext.setClass(0); // commented out, otherwise a()->b() does not work for b().
g_code->codify(yytext);
if (--g_bracketCount<=0)
@@ -2595,7 +2664,7 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
codifyLines(yytext);
g_bracketCount=0;
if (*yytext==';') g_searchingForBody=FALSE;
- if (!g_inClass && !g_type.isEmpty())
+ if (!g_type.isEmpty())
{
//fprintf(stderr,"add variable g_type=%s g_name=%s)\n",g_type.data(),g_name.data());
g_theVarContext.addVariable(g_type,g_name);
@@ -2617,12 +2686,12 @@ OPERATOR {ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}
BEGIN( SkipInits );
}
}
-<CallEnd>("const"|"volatile")({BN}+("const"|"volatile"))*{BN}*/[;=] {
+<CallEnd>("const"|"volatile"|"sealed"|"override")({BN}+("const"|"volatile"|"sealed"|"override"))*/{BN}*(";"|"="|"throw"{BN}*"(") {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
-<CallEnd,OldStyleArgs>("const"|"volatile")*({BN}+("const"|"volatile"))*{BN}*"{" {
+<CallEnd,OldStyleArgs>("const"|"volatile"|"sealed"|"override")*({BN}+("const"|"volatile"|"sealed"|"override"))*{BN}*"{" {
if (g_insideBody)
{
g_theVarContext.pushScope();
@@ -3139,6 +3208,8 @@ void resetCCodeParserState()
{
//printf("***initParseCodeContext()\n");
g_theVarContext.clear();
+ g_classScopeLengthStack.setAutoDelete(TRUE);
+ g_classScopeLengthStack.clear();
delete g_codeClassSDict;
g_codeClassSDict = new ClassSDict(17);
g_codeClassSDict->setAutoDelete(TRUE);
diff --git a/src/commentcnv.h b/src/commentcnv.h
index 7ccbc4f..5924135 100644
--- a/src/commentcnv.h
+++ b/src/commentcnv.h
@@ -1,6 +1,6 @@
/*****************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/commentcnv.l b/src/commentcnv.l
index c26334e..b988c67 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -1,6 +1,6 @@
/*****************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/commentscan.l b/src/commentscan.l
index dc80846..82178d4 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -656,24 +656,31 @@ static inline void setOutput(OutputContext ctx)
}
}
+ int oldContext = inContext;
inContext = ctx;
if (inContext!=OutputXRef && inBody) inContext=OutputInbody;
switch(inContext)
{
case OutputDoc:
- stripTrailingWhiteSpace(current->doc);
- if (current->docFile.isEmpty())
+ if (oldContext!=inContext)
{
- current->docFile = yyFileName;
- current->docLine = yyLineNr;
+ stripTrailingWhiteSpace(current->doc);
+ if (current->docFile.isEmpty())
+ {
+ current->docFile = yyFileName;
+ current->docLine = yyLineNr;
+ }
}
pOutputString = &current->doc;
break;
case OutputBrief:
- if (current->briefFile.isEmpty())
+ if (oldContext!=inContext)
{
- current->briefFile = yyFileName;
- current->briefLine = yyLineNr;
+ if (current->briefFile.isEmpty())
+ {
+ current->briefFile = yyFileName;
+ current->briefLine = yyLineNr;
+ }
}
pOutputString = &current->brief;
break;
diff --git a/src/compound.xsd b/src/compound.xsd
index f08e5e6..a407210 100644
--- a/src/compound.xsd
+++ b/src/compound.xsd
@@ -147,8 +147,22 @@
<xsd:attribute name="virt" type="DoxVirtualKind" />
<xsd:attribute name="volatile" type="DoxBool" />
<xsd:attribute name="mutable" type="DoxBool" />
+ <!-- Qt property -->
<xsd:attribute name="readable" type="DoxBool" use="optional"/>
<xsd:attribute name="writable" type="DoxBool" use="optional"/>
+ <!-- C++/CLI variable -->
+ <xsd:attribute name="initonly" type="DoxBool" use="optional"/>
+ <!-- C++/CLI and C# property -->
+ <xsd:attribute name="settable" type="DoxBool" use="optional"/>
+ <xsd:attribute name="gettable" type="DoxBool" use="optional"/>
+ <!-- C++/CLI function -->
+ <xsd:attribute name="final" type="DoxBool" use="optional"/>
+ <xsd:attribute name="sealed" type="DoxBool" use="optional"/>
+ <xsd:attribute name="new" type="DoxBool" use="optional"/>
+ <!-- C++/CLI event -->
+ <xsd:attribute name="add" type="DoxBool" use="optional"/>
+ <xsd:attribute name="remove" type="DoxBool" use="optional"/>
+ <xsd:attribute name="raise" type="DoxBool" use="optional"/>
</xsd:complexType>
<xsd:complexType name="descriptionType" mixed="true">
diff --git a/src/compound_xsd.h b/src/compound_xsd.h
index 9a73283..ded516c 100644
--- a/src/compound_xsd.h
+++ b/src/compound_xsd.h
@@ -147,8 +147,22 @@
" <xsd:attribute name=\"virt\" type=\"DoxVirtualKind\" />\n"
" <xsd:attribute name=\"volatile\" type=\"DoxBool\" />\n"
" <xsd:attribute name=\"mutable\" type=\"DoxBool\" />\n"
+" <!-- Qt property -->\n"
" <xsd:attribute name=\"readable\" type=\"DoxBool\" use=\"optional\"/>\n"
" <xsd:attribute name=\"writable\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <!-- C++/CLI variable -->\n"
+" <xsd:attribute name=\"initonly\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <!-- C++/CLI and C# property -->\n"
+" <xsd:attribute name=\"settable\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <xsd:attribute name=\"gettable\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <!-- C++/CLI function -->\n"
+" <xsd:attribute name=\"final\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <xsd:attribute name=\"sealed\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <xsd:attribute name=\"new\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <!-- C++/CLI event -->\n"
+" <xsd:attribute name=\"add\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <xsd:attribute name=\"remove\" type=\"DoxBool\" use=\"optional\"/>\n"
+" <xsd:attribute name=\"raise\" type=\"DoxBool\" use=\"optional\"/>\n"
" </xsd:complexType>\n"
"\n"
" <xsd:complexType name=\"descriptionType\" mixed=\"true\">\n"
diff --git a/src/config.l b/src/config.l
index 59f42f3..1c1dae7 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -1557,6 +1557,12 @@ void Config::create()
FALSE
);
cb = addBool(
+ "CPP_CLI_SUPPORT",
+ "If you use Microsoft's C++/CLI language, you should set this option to YES to\n"
+ "enable parsing support.\n",
+ FALSE
+ );
+ cb = addBool(
"DISTRIBUTE_GROUP_DOC",
"If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC \n"
"tag is set to YES, then doxygen will reuse the documentation of the first \n"
diff --git a/src/constexp.h b/src/constexp.h
index 1a6c37b..67a7446 100644
--- a/src/constexp.h
+++ b/src/constexp.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/constexp.l b/src/constexp.l
index 3a09242..9b1409f 100644
--- a/src/constexp.l
+++ b/src/constexp.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/constexp.y b/src/constexp.y
index 81282dc..68b1ee9 100644
--- a/src/constexp.y
+++ b/src/constexp.y
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/cppvalue.cpp b/src/cppvalue.cpp
index f1df666..4a59661 100644
--- a/src/cppvalue.cpp
+++ b/src/cppvalue.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/cppvalue.h b/src/cppvalue.h
index 0a8d638..17ca81a 100644
--- a/src/cppvalue.h
+++ b/src/cppvalue.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/debug.cpp b/src/debug.cpp
index 258980e..7e8f9a2 100644
--- a/src/debug.cpp
+++ b/src/debug.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/debug.h b/src/debug.h
index 777b8fe..179e309 100644
--- a/src/debug.h
+++ b/src/debug.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/declinfo.h b/src/declinfo.h
index 28c8add..4e83840 100644
--- a/src/declinfo.h
+++ b/src/declinfo.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/declinfo.l b/src/declinfo.l
index c269700..f580edf 100644
--- a/src/declinfo.l
+++ b/src/declinfo.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/defargs.h b/src/defargs.h
index aeb8175..87c5990 100644
--- a/src/defargs.h
+++ b/src/defargs.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/defargs.l b/src/defargs.l
index e5a2de4..ec24ba0 100644
--- a/src/defargs.l
+++ b/src/defargs.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/defgen.cpp b/src/defgen.cpp
index 428cef4..529b913 100644
--- a/src/defgen.cpp
+++ b/src/defgen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/defgen.h b/src/defgen.h
index 0e03064..1bb562f 100644
--- a/src/defgen.h
+++ b/src/defgen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/define.cpp b/src/define.cpp
index 12846b9..fbce9b9 100644
--- a/src/define.cpp
+++ b/src/define.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/define.h b/src/define.h
index fc32bfe..9779ca5 100644
--- a/src/define.h
+++ b/src/define.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/definition.cpp b/src/definition.cpp
index 3c00fbb..528a8d1 100644
--- a/src/definition.cpp
+++ b/src/definition.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/definition.h b/src/definition.h
index 9e2790d..f13a8b8 100644
--- a/src/definition.h
+++ b/src/definition.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/diagram.cpp b/src/diagram.cpp
index d169617..15d2971 100644
--- a/src/diagram.cpp
+++ b/src/diagram.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/diagram.h b/src/diagram.h
index bf95ef7..ad8caac 100644
--- a/src/diagram.h
+++ b/src/diagram.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/dirdef.h b/src/dirdef.h
index d8d7cf1..21aaa5f 100644
--- a/src/dirdef.h
+++ b/src/dirdef.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/docparser.cpp b/src/docparser.cpp
index d28164f..a2a7ef0 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
@@ -2037,6 +2037,34 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
target.data());
}
+static void flattenParagraphs(QList<DocNode> &children)
+{
+ QListIterator<DocNode> li(children);
+ QList<DocNode> newChildren;
+ DocNode *dn;
+ for (li.toFirst();(dn=li.current());++li)
+ {
+ if (dn->kind()==DocNode::Kind_Para)
+ {
+ DocPara *para = (DocPara*)dn;
+ QList<DocNode> &paraChildren = para->children();
+ paraChildren.setAutoDelete(FALSE); // unlink children from paragraph node
+ QListIterator<DocNode> li2(paraChildren);
+ DocNode *dn2;
+ for (li2.toFirst();(dn2=li2.current());++li2)
+ {
+ newChildren.append(dn2); // add them to new node
+ }
+ }
+ }
+ children.clear();
+ QListIterator<DocNode> li3(newChildren);
+ for (li3.toFirst();(dn=li3.current());++li3)
+ {
+ children.append(dn);
+ }
+}
+
void DocRef::parse()
{
g_nodeStack.push(this);
@@ -2072,6 +2100,7 @@ void DocRef::parse()
internalValidatingParseDoc(this,m_children,m_text);
docParserPopContext();
g_insideHtmlLink=FALSE;
+ flattenParagraphs(m_children);
}
handlePendingStyleCommands(this,m_children);
@@ -4799,6 +4828,7 @@ int DocPara::handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tag
{
DocRef *ref = new DocRef(this,cref);
m_children.append(ref);
+ ref->parse();
}
else
{
diff --git a/src/docparser.h b/src/docparser.h
index faa3d58..89c85fe 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
@@ -971,6 +971,7 @@ class DocPara : public CompAccept<DocPara>, public DocNode
bool isFirst() const { return m_isFirst; }
bool isLast() const { return m_isLast; }
const QList<DocNode> &children() const { return m_children; }
+ QList<DocNode> &children() { return m_children; }
int handleCommand(const QString &cmdName);
int handleHtmlStartTag(const QString &tagName,const HtmlAttribList &tagHtmlAttribs);
diff --git a/src/doctokenizer.h b/src/doctokenizer.h
index ffa8ad3..f283fc7 100644
--- a/src/doctokenizer.h
+++ b/src/doctokenizer.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index c3aafba..374b4e4 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/docvisitor.h b/src/docvisitor.h
index 5a5200c..1bfd660 100644
--- a/src/docvisitor.h
+++ b/src/docvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/dot.cpp b/src/dot.cpp
index 1e1b3c5..37268ee 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -1,6 +1,6 @@
/*****************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/dot.h b/src/dot.h
index a234285..ec002b2 100644
--- a/src/dot.h
+++ b/src/dot.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 2aff8fd..15e56dc 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
@@ -1000,32 +1000,45 @@ ArgumentList *getTemplateArgumentsFromName(
return ali.current();
}
-static ClassDef::CompoundType convertToCompoundType(int section)
+static ClassDef::CompoundType convertToCompoundType(int section,int specifier)
{
ClassDef::CompoundType sec=ClassDef::Class;
+ if (specifier&Entry::Struct)
+ sec=ClassDef::Struct;
+ else if (specifier&Entry::Union)
+ sec=ClassDef::Union;
+ else if (specifier&Entry::Interface)
+ sec=ClassDef::Interface;
+ else if (specifier&Entry::Protocol)
+ sec=ClassDef::Protocol;
+ else if (specifier&Entry::Category)
+ sec=ClassDef::Category;
+ else if (specifier&Entry::Exception)
+ sec=ClassDef::Exception;
+
switch(section)
{
- case Entry::UNION_SEC:
+ //case Entry::UNION_SEC:
case Entry::UNIONDOC_SEC:
sec=ClassDef::Union;
break;
- case Entry::STRUCT_SEC:
+ //case Entry::STRUCT_SEC:
case Entry::STRUCTDOC_SEC:
sec=ClassDef::Struct;
break;
- case Entry::INTERFACE_SEC:
+ //case Entry::INTERFACE_SEC:
case Entry::INTERFACEDOC_SEC:
sec=ClassDef::Interface;
break;
- case Entry::PROTOCOL_SEC:
+ //case Entry::PROTOCOL_SEC:
case Entry::PROTOCOLDOC_SEC:
sec=ClassDef::Protocol;
break;
- case Entry::CATEGORY_SEC:
+ //case Entry::CATEGORY_SEC:
case Entry::CATEGORYDOC_SEC:
sec=ClassDef::Category;
break;
- case Entry::EXCEPTION_SEC:
+ //case Entry::EXCEPTION_SEC:
case Entry::EXCEPTIONDOC_SEC:
sec=ClassDef::Exception;
break;
@@ -1123,11 +1136,11 @@ static void addClassToContext(EntryNav *rootNav)
cd->setTemplateArguments(tArgList);
}
- cd->setCompoundType(convertToCompoundType(root->section));
+ cd->setCompoundType(convertToCompoundType(root->section,root->spec));
}
else // new class
{
- ClassDef::CompoundType sec = convertToCompoundType(root->section);
+ ClassDef::CompoundType sec = convertToCompoundType(root->section,root->spec);
Debug::print(Debug::Classes,0," New class `%s' (sec=0x%08x)! #tArgLists=%d\n",
fullName.data(),root->section,root->tArgLists ? (int)root->tArgLists->count() : -1);
@@ -1960,7 +1973,7 @@ static MemberDef *addVariableToClass(
md->setInitializer(root->initializer);
md->setMaxInitLines(root->initLines);
md->setMemberGroupId(root->mGrpId);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setReadAccessor(root->read);
md->setWriteAccessor(root->write);
md->enableCallGraph(root->callGraph);
@@ -2606,7 +2619,7 @@ static void addMethodToClass(EntryNav *rootNav,ClassDef *cd,
md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
md->setInbodyDocumentation(root->inbodyDocs,root->inbodyFile,root->inbodyLine);
md->setBodySegment(root->bodyLine,root->endBodyLine);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
FileDef *fd=rootNav->fileDef();
md->setBodyDef(fd);
@@ -2722,7 +2735,7 @@ static void buildFunctionList(EntryNav *rootNav)
Debug::print(Debug::Functions,0,
"FUNCTION_SEC:\n"
- " `%s' `%s'::`%s' `%s' relates=`%s' relatesDup=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d memSpec=%d proto=%d docFile=%s\n",
+ " `%s' `%s'::`%s' `%s' relates=`%s' relatesDup=`%d' file=`%s' line=`%d' bodyLine=`%d' #tArgLists=%d mGrpId=%d spec=%d proto=%d docFile=%s\n",
root->type.data(),
rootNav->parent()->name().data(),
root->name.data(),
@@ -2734,7 +2747,7 @@ static void buildFunctionList(EntryNav *rootNav)
root->bodyLine,
root->tArgLists ? (int)root->tArgLists->count() : -1,
root->mGrpId,
- root->memSpec,
+ root->spec,
root->proto,
root->docFile.data()
);
@@ -2955,7 +2968,7 @@ static void buildFunctionList(EntryNav *rootNav)
FileDef *fd=rootNav->fileDef();
md->setBodyDef(fd);
md->addSectionsToDefinition(root->anchors);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
// see if the function is inside a namespace that was not part of
@@ -4065,6 +4078,20 @@ static bool findClassRelation(
// baseClass,baseClassName.data(),templSpec.data());
}
}
+ else if (baseClass && !templSpec.isEmpty()) // we have a known class, but also
+ // know it is a template, so see if
+ // we can also link to the explicit
+ // instance (for instance if a class
+ // derived from a template argument)
+ {
+ ClassDef *templClass=getClass(baseClass->name()+templSpec);
+ if (templClass)
+ {
+ // use the template instance instead of the template base.
+ baseClass = templClass;
+ templSpec.resize(0);
+ }
+ }
//printf("cd=%p baseClass=%p\n",cd,baseClass);
bool found=baseClass!=0 && (baseClass!=cd || mode==TemplateInstances);
@@ -4102,7 +4129,7 @@ static bool findClassRelation(
if (found)
{
- Debug::print(Debug::Classes,0," Documented class `%s' templSpec=%s\n",biName.data(),templSpec.isEmpty()?"":templSpec.data());
+ Debug::print(Debug::Classes,0," Documented base class `%s' templSpec=%s\n",biName.data(),templSpec.isEmpty()?"":templSpec.data());
// add base class to this class
// if templSpec is not empty then we should "instantiate"
@@ -4116,10 +4143,12 @@ static bool findClassRelation(
// relations.
if (!templSpec.isEmpty() && mode==TemplateInstances)
{
+ //printf(" => findTemplateInstanceRelation\n");
findTemplateInstanceRelation(root,context,baseClass,templSpec,templateNames,isArtificial);
}
else if (mode==DocumentedOnly || mode==Undocumented)
{
+ //printf(" => insert base class\n");
QCString usedName;
if (baseClassTypeDef)
{
@@ -4267,7 +4296,7 @@ static void findInheritedTemplateInstances()
// strip any annonymous scopes first
QCString bName=stripAnonymousNamespaceScope(rootNav->name());
bName=stripTemplateSpecifiersFromScope(bName);
- Debug::print(Debug::Classes,0," Class %s : \n",bName.data());
+ Debug::print(Debug::Classes,0," Inheritance: Class %s : \n",bName.data());
if ((cd=getClass(bName)))
{
rootNav->loadEntry(g_storage);
@@ -4290,7 +4319,7 @@ static void findUsedTemplateInstances()
// strip any annonymous scopes first
QCString bName=stripAnonymousNamespaceScope(rootNav->name());
bName=stripTemplateSpecifiersFromScope(bName);
- Debug::print(Debug::Classes,0," Class %s : \n",bName.data());
+ Debug::print(Debug::Classes,0," Usage: Class %s : \n",bName.data());
if ((cd=getClass(bName)))
{
rootNav->loadEntry(g_storage);
@@ -4316,7 +4345,7 @@ static void computeClassRelations()
// strip any annonymous scopes first
QCString bName=stripAnonymousNamespaceScope(rootNav->name());
bName=stripTemplateSpecifiersFromScope(bName);
- Debug::print(Debug::Classes,0," Class %s : \n",bName.data());
+ Debug::print(Debug::Classes,0," Relations: Class %s : \n",bName.data());
if ((cd=getClass(bName)))
{
findBaseClassesForClass(rootNav,cd,cd,cd,DocumentedOnly,FALSE);
@@ -4542,8 +4571,8 @@ static void addMemberDocs(EntryNav *rootNav,
)
{
Entry *root = rootNav->entry();
- //printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' memSpec=%d\n",
- // root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,root->memSpec);
+ //printf("addMemberDocs: `%s'::`%s' `%s' funcDecl=`%s' mSpec=%d\n",
+ // root->parent->name.data(),md->name().data(),md->argsString(),funcDecl,root->spec);
QCString fDecl=funcDecl;
// strip extern specifier
fDecl.stripPrefix("extern ");
@@ -4664,7 +4693,7 @@ static void addMemberDocs(EntryNav *rootNav,
md->enableCallGraph(md->hasCallGraph() || root->callGraph);
md->enableCallerGraph(md->hasCallerGraph() || root->callerGraph);
- md->mergeMemberSpecifiers(root->memSpec);
+ md->mergeMemberSpecifiers(root->spec);
md->addSectionsToDefinition(root->anchors);
addMemberToGroups(root,md);
if (cd) cd->insertUsedFile(root->fileName);
@@ -4964,10 +4993,10 @@ static void findMember(EntryNav *rootNav,
Debug::print(Debug::FindMembers,0,
"findMember(root=%p,funcDecl=`%s',related=`%s',overload=%d,"
"isFunc=%d mGrpId=%d tArgList=%p (#=%d) "
- "memSpec=%d isObjC=%d\n",
+ "spec=%d isObjC=%d\n",
root,funcDecl.data(),root->relates.data(),overloaded,isFunc,root->mGrpId,
root->tArgLists,root->tArgLists ? root->tArgLists->count() : 0,
- root->memSpec,root->objc
+ root->spec,root->objc
);
QCString scopeName;
@@ -4992,17 +5021,17 @@ static void findMember(EntryNav *rootNav,
}
if (funcDecl.stripPrefix("inline "))
{
- root->memSpec|=Entry::Inline;
+ root->spec|=Entry::Inline;
done=FALSE;
}
if (funcDecl.stripPrefix("explicit "))
{
- root->memSpec|=Entry::Explicit;
+ root->spec|=Entry::Explicit;
done=FALSE;
}
if (funcDecl.stripPrefix("mutable "))
{
- root->memSpec|=Entry::Mutable;
+ root->spec|=Entry::Mutable;
done=FALSE;
}
if (funcDecl.stripPrefix("virtual "))
@@ -5504,7 +5533,7 @@ static void findMember(EntryNav *rootNav,
md->setBodySegment(root->bodyLine,root->endBodyLine);
FileDef *fd=rootNav->fileDef();
md->setBodyDef(fd);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
mn->append(md);
cd->insertMember(md);
@@ -5568,7 +5597,7 @@ static void findMember(EntryNav *rootNav,
md->setBodySegment(root->bodyLine,root->endBodyLine);
FileDef *fd=rootNav->fileDef();
md->setBodyDef(fd);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
mn->append(md);
cd->insertMember(md);
@@ -5714,7 +5743,7 @@ static void findMember(EntryNav *rootNav,
// md->setMemberGroup(memberGroupDict[root->mGrpId]);
//}
md->setMemberClass(cd);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setDefinition(funcDecl);
md->enableCallGraph(root->callGraph);
md->enableCallerGraph(root->callerGraph);
@@ -5790,7 +5819,7 @@ localObjCMethod:
md->setBodySegment(root->bodyLine,root->endBodyLine);
FileDef *fd=rootNav->fileDef();
md->setBodyDef(fd);
- md->setMemberSpecifiers(root->memSpec);
+ md->setMemberSpecifiers(root->spec);
md->setMemberGroupId(root->mGrpId);
cd->insertMember(md);
cd->insertUsedFile(root->fileName);
@@ -5847,8 +5876,8 @@ static void filterMemberDocumentation(EntryNav *rootNav)
Entry *root = rootNav->entry();
int i=-1,l;
Debug::print(Debug::FindMembers,0,
- "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->memSpec=%d root->mGrpId=%d\n",
- root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->memSpec,root->mGrpId
+ "findMemberDocumentation(): root->type=`%s' root->inside=`%s' root->name=`%s' root->args=`%s' section=%x root->spec=%d root->mGrpId=%d\n",
+ root->type.data(),root->inside.data(),root->name.data(),root->args.data(),root->section,root->spec,root->mGrpId
);
//printf("rootNav->parent()->name()=%s\n",rootNav->parent()->name().data());
bool isFunc=TRUE;
@@ -7184,6 +7213,30 @@ static void flushCachedTemplateRelations()
}
}
+//----------------------------------------------------------------------------
+
+static void flushUnresolvedRelations()
+{
+ // Remove all unresolved references to classes from the cache.
+ // This is needed before resolving the inheritance relations, since
+ // it would otherwise not find the inheritance relation
+ // for C in the example below, as B::I was already found to be unresolvable
+ // (which is correct if you igore the inheritance relation between A and B).
+ //
+ // class A { class I {} };
+ // class B : public A {};
+ // class C : public B::I {};
+ //
+ QCacheIterator<LookupInfo> ci(Doxygen::lookupCache);
+ LookupInfo *li=0;
+ for (ci.toFirst();(li=ci.current());++ci)
+ {
+ if (li->classDef==0 && li->typeDef==0)
+ {
+ Doxygen::lookupCache.remove(ci.currentKey());
+ }
+ }
+}
//----------------------------------------------------------------------------
@@ -9416,9 +9469,10 @@ void parseInput()
msg("Searching for documented defines...\n");
findDefineDocumentation(rootNav);
- msg("Computing template instances...\n");
findClassEntries(rootNav);
+ msg("Computing class inheritance relations...\n");
findInheritedTemplateInstances();
+ msg("Computing class usage relations...\n");
findUsedTemplateInstances();
msg("Flushing cached template relations that have become invalid...\n");
@@ -9429,6 +9483,7 @@ void parseInput()
msg("Computing class relations...\n");
computeTemplateClassRelations();
+ flushUnresolvedRelations();
computeClassRelations();
classEntries.clear();
diff --git a/src/doxygen.h b/src/doxygen.h
index c52829c..4227f4a 100644
--- a/src/doxygen.h
+++ b/src/doxygen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/doxygen.pro.in b/src/doxygen.pro.in
index 7d1e812..99e241f 100644
--- a/src/doxygen.pro.in
+++ b/src/doxygen.pro.in
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/doxytag.l b/src/doxytag.l
index 53e89a3..2a1f0a1 100644
--- a/src/doxytag.l
+++ b/src/doxytag.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/doxytag.pro.in b/src/doxytag.pro.in
index 8df2777..3d4e9f8 100644
--- a/src/doxytag.pro.in
+++ b/src/doxytag.pro.in
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/doxytag.t b/src/doxytag.t
index 82cf04b..5a5fbc1 100644
--- a/src/doxytag.t
+++ b/src/doxytag.t
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/entry.cpp b/src/entry.cpp
index 1aa6b6d..0d0cb4f 100644
--- a/src/entry.cpp
+++ b/src/entry.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -89,7 +89,7 @@ Entry::Entry(const Entry &e)
mGrpId = e.mGrpId;
bodyLine = e.bodyLine;
endBodyLine = e.endBodyLine;
- memSpec = e.memSpec;
+ spec = e.spec;
initializer = e.initializer;
initLines = e.initLines;
callGraph = e.callGraph;
@@ -241,7 +241,7 @@ void Entry::reset()
stat = FALSE;
proto = FALSE;
explicitExternal = FALSE;
- memSpec = 0;
+ spec = 0;
objc = FALSE;
hidden = FALSE;
subGrouping = TRUE;
@@ -343,7 +343,7 @@ static bool saveEntry(Entry *e,FileStorage *f)
marshalUInt(f,HEADER);
marshalInt(f,(int)e->protection);
marshalInt(f,(int)e->mtype);
- marshalInt(f,e->memSpec);
+ marshalInt(f,e->spec);
marshalInt(f,e->initLines);
marshalBool(f,e->stat);
marshalBool(f,e->explicitExternal);
@@ -401,7 +401,7 @@ static bool loadEntry(Entry *e,FileStorage *f)
}
e->protection = (Protection)unmarshalInt(f);
e->mtype = (MethodTypes)unmarshalInt(f);
- e->memSpec = unmarshalInt(f);
+ e->spec = unmarshalInt(f);
e->initLines = unmarshalInt(f);
e->stat = unmarshalBool(f);
e->explicitExternal = unmarshalBool(f);
diff --git a/src/entry.h b/src/entry.h
index 50100ae..ba1abaf 100644
--- a/src/entry.h
+++ b/src/entry.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -113,7 +113,8 @@ class ArgumentList : public QList<Argument>
ArgumentList() : QList<Argument>(),
constSpecifier(FALSE),
volatileSpecifier(FALSE),
- pureSpecifier(FALSE) { setAutoDelete(TRUE); }
+ pureSpecifier(FALSE)
+ { setAutoDelete(TRUE); }
/*! Destroys the argument list */
~ArgumentList() {}
bool hasDocumentation() const;
@@ -187,16 +188,17 @@ class Entry
/*! Kind of entries that are supported */
enum Sections {
CLASS_SEC = 0x00000001,
- STRUCT_SEC = 0x00000002,
- UNION_SEC = 0x00000004,
- EXCEPTION_SEC = 0x00000008,
+ //STRUCT_SEC = 0x00000002,
+ //UNION_SEC = 0x00000004,
+ //EXCEPTION_SEC = 0x00000008,
NAMESPACE_SEC = 0x00000010,
- INTERFACE_SEC = 0x00000020,
- PROTOCOL_SEC = 0x00000040,
- CATEGORY_SEC = 0x00000080,
- COMPOUND_MASK = CLASS_SEC | STRUCT_SEC | UNION_SEC |
- INTERFACE_SEC | EXCEPTION_SEC |
- PROTOCOL_SEC | CATEGORY_SEC,
+ //INTERFACE_SEC = 0x00000020,
+ //PROTOCOL_SEC = 0x00000040,
+ //CATEGORY_SEC = 0x00000080,
+ COMPOUND_MASK = CLASS_SEC //| STRUCT_SEC | UNION_SEC |
+ //INTERFACE_SEC | EXCEPTION_SEC |
+ //PROTOCOL_SEC | CATEGORY_SEC
+ ,
SCOPE_MASK = COMPOUND_MASK | NAMESPACE_SEC,
CLASSDOC_SEC = 0x00000800,
@@ -251,6 +253,28 @@ class Entry
Writable = 0x0040,
Final = 0x0080,
Abstract = 0x0100,
+ Addable = 0x0200,
+ Removable = 0x0400,
+ Raisable = 0x0800,
+ Override = 0x1000,
+ New = 0x2000,
+ Sealed = 0x4000,
+ Initonly = 0x8000
+ };
+ enum ClassSpecifier
+ {
+ Template = 0x0001,
+ Generic = 0x0002,
+ Ref = 0x0004,
+ Value = 0x0008,
+ Interface = 0x0010,
+ Struct = 0x0020,
+ Union = 0x0040,
+ Exception = 0x0080,
+ Protocol = 0x0100,
+ Category = 0x0200,
+ SealedClass = 0x0400,
+ AbstractClass = 0x0800
};
enum GroupDocType
{
@@ -290,7 +314,7 @@ class Entry
// content
Protection protection; //!< class protection
MethodTypes mtype; //!< signal, slot, (dcop) method, or property?
- int memSpec; //!< member specifiers
+ int spec; //!< class/member specifiers
int initLines; //!< define/variable initializer lines to show
bool stat; //!< static ?
bool explicitExternal; //!< explicitly defined as external?
diff --git a/src/example.h b/src/example.h
index 4b6e06e..4b795c3 100644
--- a/src/example.h
+++ b/src/example.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/filedef.cpp b/src/filedef.cpp
index 0a3c814..4968f50 100644
--- a/src/filedef.cpp
+++ b/src/filedef.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/filedef.h b/src/filedef.h
index c5b99ab..cda5730 100644
--- a/src/filedef.h
+++ b/src/filedef.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/filename.cpp b/src/filename.cpp
index 2399124..3126811 100644
--- a/src/filename.cpp
+++ b/src/filename.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/filename.h b/src/filename.h
index c1b30b6..749bf4e 100644
--- a/src/filename.h
+++ b/src/filename.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/formula.cpp b/src/formula.cpp
index 07d60d2..fbe02ee 100644
--- a/src/formula.cpp
+++ b/src/formula.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
i
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/formula.h b/src/formula.h
index a4c0f53..9438f37 100644
--- a/src/formula.h
+++ b/src/formula.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 13a5681..c429780 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/groupdef.h b/src/groupdef.h
index 25bc79d..b4c31bf 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/htmlattrib.h b/src/htmlattrib.h
index 9a1609b..cc87b23 100644
--- a/src/htmlattrib.h
+++ b/src/htmlattrib.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 17e6dd6..4eb6a8a 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/htmldocvisitor.h b/src/htmldocvisitor.h
index f70d367..069d3f9 100644
--- a/src/htmldocvisitor.h
+++ b/src/htmldocvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 0f4d242..90184f2 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -431,13 +431,13 @@ static const char tabs_css[] =
" background-position: 0% -150px;\n"
"}\n"
"\n"
-"DIV.tabs LI#current A\n"
+"DIV.tabs LI.current A\n"
"{\n"
" background-position: 100% -150px;\n"
" border-width : 0px;\n"
"}\n"
"\n"
-"DIV.tabs LI#current SPAN\n"
+"DIV.tabs LI.current SPAN\n"
"{\n"
" background-position: 0% -150px;\n"
" padding-bottom : 6px;\n"
@@ -1580,7 +1580,7 @@ static void endQuickIndexList(QTextStream &t,bool compact)
{
if (compact)
{
- t << " </ul>";
+ t << " </ul>\n";
t << "</div>\n";
}
else
@@ -1593,7 +1593,7 @@ static void startQuickIndexItem(QTextStream &t,const char *l,
bool hl,bool /*compact*/,
const QCString &relPath)
{
- t << " <li"; if (hl) t << " id=\"current\"";
+ t << " <li"; if (hl) t << " class=\"current\"";
t << "><a ";
t << "href=\"" << relPath << l << "\">";
t << "<span>";
diff --git a/src/htmlgen.h b/src/htmlgen.h
index 88a8841..a8a3225 100644
--- a/src/htmlgen.h
+++ b/src/htmlgen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp
index c9328e6..598ed6a 100644
--- a/src/htmlhelp.cpp
+++ b/src/htmlhelp.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/htmlhelp.h b/src/htmlhelp.h
index 67e0e20..f323894 100644
--- a/src/htmlhelp.h
+++ b/src/htmlhelp.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/image.cpp b/src/image.cpp
index ee00835..e769c76 100644
--- a/src/image.cpp
+++ b/src/image.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/image.h b/src/image.h
index 49ba9ba..998b93d 100644
--- a/src/image.h
+++ b/src/image.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/index.cpp b/src/index.cpp
index 49a8609..7345347 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -15,6 +15,10 @@
*
*/
+/** @file
+ * @brief This file contains functions for the various index pages.
+ */
+
#include <stdlib.h>
#include <qtextstream.h>
@@ -211,7 +215,7 @@ static void startQuickIndexItem(OutputList &ol,const char *l,
if (fancyTabs)
{
ol.writeString(" <li");
- if (hl) ol.writeString(" id=\"current\"");
+ if (hl) ol.writeString(" class=\"current\"");
ol.writeString("><a ");
}
else
@@ -1151,7 +1155,7 @@ void writeAnnotatedClassList(OutputList &ol)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
- int c = cd->displayName().at(0);
+ int c = cd->displayName().at(getPrefixIndex(cd->displayName()));
g_classIndexLetterUsed[CHL_All][c]=TRUE;
switch(cd->compoundType())
{
@@ -1559,17 +1563,21 @@ static void writeNamespaceLinkForMember(OutputList &ol,MemberDef *md,const char
}
}
-typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator,
- QCString &prevNamespaceName);
-
static void writeMemberList(OutputList &ol,bool useSections,int page,
MemberIndexList memberLists[MEMBER_INDEX_ENTRIES],
DefinitionIntf::DefType type)
{
int pi;
+ // page==-1 => write all member indices to one page (used when total members is small)
+ // page!=-1 => write all member for this page only (used when total member is large)
int startIndex = page==-1 ? 0 : page;
int endIndex = page==-1 ? MEMBER_INDEX_ENTRIES-1 : page;
ASSERT((int)type<3);
+
+ typedef void (*writeLinkForMember_t)(OutputList &ol,MemberDef *md,const char *separator,
+ QCString &prevNamespaceName);
+
+ // each index tab has its own write function
static writeLinkForMember_t writeLinkForMemberMap[3] =
{
&writeClassLinkForMember,
@@ -1593,13 +1601,16 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
bool isFunc=!md->isObjCMethod() &&
(md->isFunction() || md->isSlot() || md->isSignal());
QCString name=md->name();
- if (name!=prevName) // same entry
+ int startIndex = getPrefixIndex(name);
+ if (QCString(name.data()+startIndex)!=prevName) // new entry
{
- if ((prevName.isEmpty() || tolower(name.at(0))!=tolower(prevName.at(0))) && useSections) // new section
+ if ((prevName.isEmpty() ||
+ tolower(name.at(startIndex))!=tolower(prevName.at(0))) &&
+ useSections) // new section
{
if (!firstSection) ol.endItemList();
char cs[2];
- cs[0]=tolower(name.at(0));cs[1]='\0';
+ cs[0]=tolower(name.at(startIndex));cs[1]='\0';
QCString anchor=(QCString)"index_"+cs;
QCString title=(QCString)"- "+cs+" -";
ol.startSection(anchor,title,SectionInfo::Subsection);
@@ -1623,118 +1634,18 @@ static void writeMemberList(OutputList &ol,bool useSections,int page,
// link to class
prevDefName="";
sep = ": ";
- prevName = name;
+ prevName = name.data()+startIndex;
}
else // same entry
{
sep = ", ";
// link to class for other members with the same name
}
+ // write the link for the specific list type
writeLinkForMemberMap[(int)type](ol,md,sep,prevDefName);
}
}
ol.endItemList();
-
-#if 0
- bool first = TRUE;
- char lastChar = 0;
- static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS");
-
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- if (sectionFilter==0 || tolower(sectionFilter)==tolower(mn->memberName()[0]))
- {
- MemberDef *md=mn->first();
- bool found=FALSE;
- bool isFunc=FALSE;
- while (md && !found)
- {
- ClassDef *cd;
- bool isFriendToHide = hideFriendCompounds &&
- (QCString(md->typeString())=="friend class" ||
- QCString(md->typeString())=="friend struct" ||
- QCString(md->typeString())=="friend union");
- if (
- md->isLinkableInProject() &&
- (cd=md->getClassDef()) &&
- cd->isLinkableInProject() && cd->templateMaster()==0 &&
- ( (filter==CMHL_All && !(md->isFriend() && isFriendToHide)) ||
- (filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) ||
- (filter==CMHL_Variables && md->isVariable()) ||
- (filter==CMHL_Typedefs && md->isTypedef()) ||
- (filter==CMHL_Enums && md->isEnumerate()) ||
- (filter==CMHL_EnumValues && md->isEnumValue()) ||
- (filter==CMHL_Properties && md->isProperty()) ||
- (filter==CMHL_Events && md->isEvent()) ||
- (filter==CMHL_Related && (md->isRelated() || (md->isFriend() && !isFriendToHide)))
- )
- )
- {
- found=TRUE;
- isFunc=!md->isObjCMethod() &&
- (md->isFunction() || md->isSlot() || md->isSignal());
- }
- md=mn->next();
- }
- if (found)
- {
- if (useSections)
- {
- QCString name = mn->memberName();
- if (tolower(name.at(0))!=lastChar)
- {
- if (!first) ol.endItemList();
- char cs[2];
- lastChar=cs[0]=tolower(name.at(0));cs[1]='\0';
- QCString anchor=(QCString)"index_"+cs;
- QCString title=(QCString)"- "+cs+" -";
- ol.startSection(anchor,title,SectionInfo::Subsection);
- ol.docify(title);
- ol.endSection(anchor,SectionInfo::Subsection);
- ol.startItemList();
- first=FALSE;
- }
- }
- else if (first)
- {
- first=FALSE;
- ol.startItemList();
- }
- ol.writeListItem();
- ol.docify(mn->memberName());
- if (isFunc) ol.docify("()");
- ol.writeString("\n");
-
- int count=0;
- md=mn->last();
- QCString prevName;
- while (md)
- {
- ClassDef *cd=md->getClassDef();
- if (
- md->isLinkableInProject() &&
- prevName!=cd->displayName() &&
- cd->templateMaster()==0
- )
- {
- if (count==0)
- ol.docify(": ");
- else
- ol.docify(", ");
- ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),md->anchor(),
- cd->displayName());
- count++;
- prevName=cd->displayName();
- }
- md=mn->prev();
- }
- }
- }
- }
- ol.endItemList();
-#endif
}
//----------------------------------------------------------------------------
@@ -1763,7 +1674,8 @@ void addClassMemberNameToIndex(MemberDef *md)
cd->templateMaster()==0)
{
QCString n = md->name();
- int letter = tolower(n.at(0)) & 0x7f;
+ int index = getPrefixIndex(n);
+ int letter = tolower(n.at(index)) & 0x7f;
if (!n.isEmpty())
{
bool isFriendToHide = hideFriendCompounds &&
@@ -1819,56 +1731,6 @@ void addClassMemberNameToIndex(MemberDef *md)
}
}
-#if 0
-int countClassMembers(int filter)
-{
- static bool hideFriendCompounds = Config_getBool("HIDE_FRIEND_COMPOUNDS");
- int i=0;for (i=0;i<256;i++) g_memberIndexLetterUsed[filter][i]=FALSE;
- int count=0;
- MemberNameSDict::Iterator mnli(*Doxygen::memberNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md=mn->first();
- bool found=FALSE;
- ClassDef *cd;
- while (md && !found)
- {
- bool isFriendToHide = hideFriendCompounds &&
- (QCString(md->typeString())=="friend class" ||
- QCString(md->typeString())=="friend struct" ||
- QCString(md->typeString())=="friend union");
- if (
- md->isLinkableInProject() &&
- (cd=md->getClassDef()) &&
- cd->isLinkableInProject() &&
- ( filter==CMHL_All && !(md->isFriend() && isFriendToHide) ||
- (filter==CMHL_Functions && (md->isFunction() || md->isSlot() || md->isSignal())) ||
- (filter==CMHL_Variables && md->isVariable()) ||
- (filter==CMHL_Typedefs && md->isTypedef()) ||
- (filter==CMHL_Enums && md->isEnumerate()) ||
- (filter==CMHL_EnumValues && md->isEnumValue()) ||
- (filter==CMHL_Properties && md->isProperty()) ||
- (filter==CMHL_Events && md->isEvent()) ||
- (filter==CMHL_Related && (md->isRelated() || (md->isFriend() && !isFriendToHide)))
- )
- )
- {
- found=TRUE;
- }
- md=mn->next();
- }
- if (found)
- {
- QCString n = mn->memberName();
- if (!n.isEmpty()) g_memberIndexLetterUsed[filter][tolower(n.at(0))]=TRUE;
- count++;
- }
- }
- return count;
-}
-#endif
-
//----------------------------------------------------------------------------
void initNamespaceMemberIndices()
@@ -1891,7 +1753,8 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
if (nd && nd->isLinkableInProject() && md->isLinkableInProject())
{
QCString n = md->name();
- int letter = tolower(n.at(0));
+ int index = getPrefixIndex(n);
+ int letter = tolower(n.at(index));
if (!n.isEmpty())
{
g_namespaceIndexLetterUsed[NMHL_All][letter].append(md);
@@ -1926,43 +1789,6 @@ void addNamespaceMemberNameToIndex(MemberDef *md)
}
}
-#if 0
-int countNamespaceMembers(int filter)
-{
- int i=0;for (i=0;i<256;i++) g_namespaceIndexLetterUsed[filter][i]=FALSE;
- int count=0;
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md=mn->first();
- bool found=FALSE;
- while (md && !found)
- {
- NamespaceDef *nd=md->getNamespaceDef();
- if (nd && nd->isLinkableInProject() && md->isLinkableInProject() &&
- ( filter==NMHL_All ||
- (filter==NMHL_Functions && md->isFunction()) ||
- (filter==NMHL_Variables && md->isVariable()) ||
- (filter==NMHL_Typedefs && md->isTypedef()) ||
- (filter==NMHL_Enums && md->isEnumerate()) ||
- (filter==NMHL_EnumValues && md->isEnumValue())
- )
- )
- {
- QCString n = mn->memberName();
- if (!n.isEmpty()) g_namespaceIndexLetterUsed[filter][tolower(n.at(0))]=TRUE;
- found=TRUE;
- }
- else
- md=mn->next();
- }
- if (found) count++;
- }
- return count;
-}
-#endif
-
//----------------------------------------------------------------------------
void initFileMemberIndices()
@@ -1985,7 +1811,8 @@ void addFileMemberNameToIndex(MemberDef *md)
if (fd && fd->isLinkableInProject() && md->isLinkableInProject())
{
QCString n = md->name();
- int letter = tolower(n.at(0));
+ int index = getPrefixIndex(n);
+ int letter = tolower(n.at(index));
if (!n.isEmpty())
{
g_fileIndexLetterUsed[FMHL_All][letter].append(md);
@@ -2025,49 +1852,6 @@ void addFileMemberNameToIndex(MemberDef *md)
}
}
-#if 0
-int countFileMembers(int filter)
-{
- int i=0;for (i=0;i<256;i++) g_fileIndexLetterUsed[filter][i]=FALSE;
- int count=0;
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- MemberDef *md=mn->first();
- FileDef *fd;
- bool found=FALSE;
- while (md && !found)
- {
- if (md->isLinkableInProject() &&
- (fd=md->getFileDef()) &&
- fd->isLinkableInProject() &&
- ( filter==FMHL_All ||
- (filter==FMHL_Functions && md->isFunction()) ||
- (filter==FMHL_Variables && md->isVariable()) ||
- (filter==FMHL_Typedefs && md->isTypedef()) ||
- (filter==FMHL_Enums && md->isEnumerate()) ||
- (filter==FMHL_EnumValues && md->isEnumValue()) ||
- (filter==FMHL_Defines && md->isDefine())
- )
- )
- {
- QCString n = mn->memberName();
- if (!n.isEmpty())
- {
- g_fileIndexLetterUsed[filter][tolower(n.at(0))]=TRUE;
- }
- found=TRUE;
- }
- else
- md=mn->next();
- }
- if (found) count++;
- }
- return count;
-}
-#endif
-
//----------------------------------------------------------------------------
void writeQuickMemberIndex(OutputList &ol,
@@ -2240,200 +2024,6 @@ void writeClassMemberIndex(OutputList &ol)
//----------------------------------------------------------------------------
-#if 0
-static void writeFileMemberList(OutputList &ol,
- bool useSections,
- FileMemberHighlight filter,
- char sectionFilter)
-{
- char lastChar=0;
- bool first=TRUE;
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- if (sectionFilter==0 || tolower(sectionFilter)==tolower(mn->memberName()[0]))
- {
- MemberDef *md=mn->first();
- bool found=FALSE;
- while (md && !found)
- {
- FileDef *fd=md->getFileDef();
- bool hasDocs = md->getFileDef() &&
- md->getFileDef()->isLinkableInProject();
-
- if (fd && hasDocs &&
- md->isLinkableInProject() &&
- ( filter==FMHL_All ||
- (filter==FMHL_Functions && md->isFunction()) ||
- (filter==FMHL_Variables && md->isVariable()) ||
- (filter==FMHL_Typedefs && md->isTypedef()) ||
- (filter==FMHL_Enums && md->isEnumerate()) ||
- (filter==FMHL_EnumValues && md->isEnumValue()) ||
- (filter==FMHL_Defines && md->isDefine())
- )
- )
- {
- found=TRUE;
- }
- else
- {
- md=mn->next();
- }
- }
- if (found) // function is documented
- {
- if (useSections)
- {
- QCString name = mn->memberName();
- if (tolower(name.at(0))!=lastChar)
- {
- if (!first) ol.endItemList();
- char cs[2];
- lastChar=cs[0]=tolower(name.at(0));cs[1]='\0';
- QCString anchor=(QCString)"index_"+cs;
- QCString title=(QCString)"- "+cs+" -";
- ol.startSection(anchor,title,SectionInfo::Subsection);
- ol.docify(title);
- ol.endSection(anchor,SectionInfo::Subsection);
- ol.startItemList();
- first=FALSE;
- }
- }
- else if (first)
- {
- first=FALSE;
- ol.startItemList();
- }
- ol.writeListItem();
- ol.docify(md->name());
- if (md->isFunction()) ol.docify("()");
- ol.writeString("\n");
-
- int count=0;
- md=mn->last();
- QCString prevName;
- while (md)
- {
- FileDef *fd=md->getFileDef();
- if (fd && fd->isLinkableInProject() &&
- md->isLinkableInProject() &&
- prevName!=fd->name())
- {
- if (count==0)
- ol.docify(": ");
- else
- ol.docify(", ");
- QCString baseName=fd->name();
- ol.writeObjectLink(md->getReference(),
- md->getOutputFileBase(),md->anchor(), baseName);
- count++;
- prevName=fd->name();
- }
- md=mn->prev();
- }
- }
- }
- }
- ol.endItemList();
-}
-
-//----------------------------------------------------------------------------
-
-void writeNamespaceMemberList(OutputList &ol,bool useSections,
- NamespaceMemberHighlight filter,
- char sectionFilter)
-{
- char lastChar=0;
- bool first=TRUE;
- MemberNameSDict::Iterator mnli(*Doxygen::functionNameSDict);
- MemberName *mn=0;
- for (mnli.toFirst();(mn=mnli.current());++mnli)
- {
- if (sectionFilter==0 || tolower(sectionFilter)==tolower(mn->memberName()[0]))
- {
- MemberDef *md=mn->first();
- bool found=FALSE;
- while (md && !found)
- {
- NamespaceDef *nd=md->getNamespaceDef();
- if (nd && nd->isLinkableInProject() && md->isLinkableInProject() &&
- ( filter==NMHL_All ||
- (filter==NMHL_Functions && md->isFunction()) ||
- (filter==NMHL_Variables && md->isVariable()) ||
- (filter==NMHL_Typedefs && md->isTypedef()) ||
- (filter==NMHL_Enums && md->isEnumerate()) ||
- (filter==NMHL_EnumValues && md->isEnumValue())
- )
- )
- {
- found=TRUE;
- }
- else
- {
- md=mn->next();
- }
- }
- if (found) // member is documented and in a documented namespace
- {
- if (useSections)
- {
- QCString name = mn->memberName();
- if (tolower(name.at(0))!=lastChar)
- {
- if (!first) ol.endItemList();
- char cs[2];
- lastChar=cs[0]=tolower(name.at(0));cs[1]='\0';
- QCString anchor=(QCString)"index_"+cs;
- QCString title=(QCString)"- "+cs+" -";
- ol.startSection(anchor,title,SectionInfo::Subsection);
- ol.docify(title);
- ol.endSection(anchor,SectionInfo::Subsection);
- ol.startItemList();
- first=FALSE;
- }
- }
- else if (first)
- {
- ol.startItemList();
- first=FALSE;
- }
- ol.writeListItem();
- ol.docify(md->name());
- if (md->isFunction()) ol.docify("()");
- ol.writeString("\n");
-
- int count=0;
- md=mn->last();
- QCString prevName;
- while (md)
- {
- NamespaceDef *nd=md->getNamespaceDef();
- if (nd && nd->isLinkableInProject() && md->isLinkableInProject() &&
- prevName!=nd->name()
- )
- {
- if (count==0)
- ol.docify(": ");
- else
- ol.docify(", ");
- ol.writeObjectLink(md->getReference(),md->getOutputFileBase(),
- md->anchor(),nd->name());
- count++;
- prevName=nd->name();
- }
- md=mn->prev();
- }
- }
- }
- }
- if (!first) ol.endItemList();
-}
-#endif
-
-//----------------------------------------------------------------------------
-
-
static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight hl)
{
if (documentedFileMembers[hl]==0) return;
@@ -3164,71 +2754,6 @@ void writeGroupTreeNode(OutputList &ol, GroupDef *gd,int level)
theTranslator->trVariables(),htmlHelp,ftvHelp);
writeGroupIndexItem(gd,gd->getMemberList(MemberList::docProtoMembers),
theTranslator->trFuncProtos(),htmlHelp,ftvHelp);
-#if 0
-
- // write members
- struct MemInfo
- {
- MemInfo(MemberList *l,const QCString &n) { list=l; name=n; }
- MemberList *list;
- QCString name;
- };
- MemInfo memberLists[] =
- {
- MemInfo(&gd->docDefineMembers, theTranslator->trDefines()),
- MemInfo(&gd->docTypedefMembers, theTranslator->trTypedefs()),
- MemInfo(&gd->docEnumMembers, theTranslator->trEnumerations()),
- MemInfo(&gd->docFuncMembers, theTranslator->trFunctions()),
- MemInfo(&gd->docVarMembers, theTranslator->trVariables()),
- MemInfo(&gd->docProtoMembers, theTranslator->trFuncProtos()),
- MemInfo(0,0)
- };
-
- MemberList *members;
- MemInfo *pMemInfo;
- for (pMemInfo=&memberLists[0]; (members=pMemInfo->list) ; pMemInfo++)
- {
- if (members->count()>0)
- {
- bool first=TRUE;
- MemberDef *md=members->first();
- while (md)
- {
- if (md->isDetailedSectionVisible(TRUE,FALSE))
- {
- if (first)
- {
- first=FALSE;
- if (htmlHelp)
- {
- htmlHelp->addContentsItem(TRUE, convertToHtml(pMemInfo->name), gd->getOutputFileBase(),0);
- htmlHelp->incContentsDepth();
- }
- if (ftvHelp)
- {
-
- ftvHelp->addContentsItem(TRUE, gd->getReference(), gd->getOutputFileBase(), 0, pMemInfo->name);
- ftvHelp->incContentsDepth();
- }
- }
- if (htmlHelp)
- {
- htmlHelp->addContentsItem(FALSE,md->name(),md->getOutputFileBase(),md->anchor());
- }
- if (ftvHelp)
- {
- ftvHelp->addContentsItem(FALSE,md->getReference(),md->getOutputFileBase(),md->anchor(),md->name());
- }
- }
- md=members->next();
- }
-
- if (htmlHelp && !first) htmlHelp->decContentsDepth();
- if (ftvHelp && !first) ftvHelp->decContentsDepth();
-
- }
- }
-#endif
// write namespaces
NamespaceSDict *namespaceSDict=gd->namespaceSDict;
diff --git a/src/index.h b/src/index.h
index 90dc11f..cda0678 100644
--- a/src/index.h
+++ b/src/index.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -22,6 +22,7 @@
#include <qfile.h>
class MemberDef;
+class OutputList;
enum IndexSections
{
@@ -45,37 +46,6 @@ enum IndexSections
isEndIndex
};
-class OutputList;
-
-void writeIndex(OutputList &ol);
-void writeHierarchicalIndex(OutputList &ol);
-void writeAlphabeticalIndex(OutputList &ol);
-void writeClassHierarchy(OutputList &ol);
-void writeAnnotatedIndex(OutputList &ol);
-void writeAnnotatedClassList(OutputList &ol);
-void writeMemberList(OutputList &ol,bool useSections);
-
-void writeSourceIndex(OutputList &ol);
-void writeHeaderIndex(OutputList &ol);
-void writeHeaderFileList(OutputList &ol);
-
-void writeExampleIndex(OutputList &ol);
-void writePageIndex(OutputList &ol);
-void writeFileIndex(OutputList &ol);
-void writeNamespaceIndex(OutputList &ol);
-void writeGroupIndex(OutputList &ol);
-void writeDirIndex(OutputList &ol);
-void writePackageIndex(OutputList &ol);
-
-void writeClassMemberIndex(OutputList &ol);
-void writeFileMemberIndex(OutputList &ol);
-void writeNamespaceMemberIndex(OutputList &ol);
-
-void writeGraphicalClassHierarchy(OutputList &ol);
-void writeGraphInfo(OutputList &ol);
-
-void countDataStructures();
-
enum HighlightedItem
{
HLI_None=0,
@@ -149,6 +119,31 @@ enum ClassHighlight
CHL_Total = CHL_Exceptions+1
};
+void writeIndex(OutputList &ol);
+void writeHierarchicalIndex(OutputList &ol);
+void writeAlphabeticalIndex(OutputList &ol);
+void writeClassHierarchy(OutputList &ol);
+void writeAnnotatedIndex(OutputList &ol);
+void writeAnnotatedClassList(OutputList &ol);
+void writeMemberList(OutputList &ol,bool useSections);
+void writeSourceIndex(OutputList &ol);
+void writeHeaderIndex(OutputList &ol);
+void writeHeaderFileList(OutputList &ol);
+void writeExampleIndex(OutputList &ol);
+void writePageIndex(OutputList &ol);
+void writeFileIndex(OutputList &ol);
+void writeNamespaceIndex(OutputList &ol);
+void writeGroupIndex(OutputList &ol);
+void writeDirIndex(OutputList &ol);
+void writePackageIndex(OutputList &ol);
+void writeClassMemberIndex(OutputList &ol);
+void writeFileMemberIndex(OutputList &ol);
+void writeNamespaceMemberIndex(OutputList &ol);
+void writeGraphicalClassHierarchy(OutputList &ol);
+void writeGraphInfo(OutputList &ol);
+
+void countDataStructures();
+
extern int annotatedClasses;
extern int hierarchyClasses;
extern int documentedFiles;
diff --git a/src/instdox.cpp b/src/instdox.cpp
index 3f814d4..5fc89a5 100644
--- a/src/instdox.cpp
+++ b/src/instdox.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/instdox.h b/src/instdox.h
index ede8e8f..82d2910 100644
--- a/src/instdox.h
+++ b/src/instdox.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/language.h b/src/language.h
index 22932eb..06aef66 100644
--- a/src/language.h
+++ b/src/language.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index a780434..c58315a 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/latexdocvisitor.h b/src/latexdocvisitor.h
index 2241f06..2625a7c 100644
--- a/src/latexdocvisitor.h
+++ b/src/latexdocvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 98891f4..5088b7c 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -962,7 +962,7 @@ void LatexGenerator::endIndexValue(const char *name,bool hasBrief)
//void LatexGenerator::writeClassLink(const char *,const char *,
// const char *,const char *name)
//{
-// t << "{\\bf";
+// t << "{\\bf ";
// docify(name);
// t << "}";
//}
diff --git a/src/latexgen.h b/src/latexgen.h
index 2a502e4..a5fbd1d 100644
--- a/src/latexgen.h
+++ b/src/latexgen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/libdoxycfg.pro.in b/src/libdoxycfg.pro.in
index cf4454e..6cff964 100644
--- a/src/libdoxycfg.pro.in
+++ b/src/libdoxycfg.pro.in
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/libdoxycfg.t b/src/libdoxycfg.t
index aa75498..3a63100 100644
--- a/src/libdoxycfg.t
+++ b/src/libdoxycfg.t
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/libdoxygen.pro.in b/src/libdoxygen.pro.in
index 957e056..20fd265 100644
--- a/src/libdoxygen.pro.in
+++ b/src/libdoxygen.pro.in
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/libdoxygen.t b/src/libdoxygen.t
index 7910d01..ff31523 100644
--- a/src/libdoxygen.t
+++ b/src/libdoxygen.t
@@ -1,5 +1,5 @@
#
-#
+# $Id$
#
# Copyright (C) 1997-2006 by Dimitri van Heesch.
#
diff --git a/src/lockingptr.h b/src/lockingptr.h
index 99a1772..64217f5 100644
--- a/src/lockingptr.h
+++ b/src/lockingptr.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/logos.cpp b/src/logos.cpp
index 861e942..12a1e86 100644
--- a/src/logos.cpp
+++ b/src/logos.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/logos.h b/src/logos.h
index b4c95ad..dd45a0c 100644
--- a/src/logos.h
+++ b/src/logos.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/main.cpp b/src/main.cpp
index 232bf0e..1b69973 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 530b272..d9c35d6 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/mandocvisitor.h b/src/mandocvisitor.h
index 93e2eb1..ad2beff 100644
--- a/src/mandocvisitor.h
+++ b/src/mandocvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/mangen.cpp b/src/mangen.cpp
index 6eeb184..4f7ed3f 100644
--- a/src/mangen.cpp
+++ b/src/mangen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/mangen.h b/src/mangen.h
index 9908977..ad6a59d 100644
--- a/src/mangen.h
+++ b/src/mangen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 56c8013..32c6b4c 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -1463,14 +1463,34 @@ void MemberDef::writeDeclaration(OutputList &ol,
ol.endTypewriter();
}
- if (isProperty())
+ if (isProperty() && (isSettable() || isGettable()))
{
ol.writeLatexSpacing();
ol.startTypewriter();
ol.docify(" [");
QStrList sl;
- if (isGettable()) sl.append("get");
- if (isSettable()) sl.append("set");
+ if (isGettable()) sl.append("get");
+ if (isSettable()) sl.append("set");
+ const char *s=sl.first();
+ while (s)
+ {
+ ol.docify(s);
+ s=sl.next();
+ if (s) ol.docify(", ");
+ }
+ ol.docify("]");
+ ol.endTypewriter();
+ }
+
+ if (isEvent() && (isAddable() || isRemovable() || isRaisable()))
+ {
+ ol.writeLatexSpacing();
+ ol.startTypewriter();
+ ol.docify(" [");
+ QStrList sl;
+ if (isAddable()) sl.append("add");
+ if (isRemovable()) sl.append("remove");
+ if (isRaisable()) sl.append("raise");
const char *s=sl.first();
while (s)
{
@@ -1840,15 +1860,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
}
Specifier lvirt=virtualness();
-
+
if (!isObjCMethod() &&
(protection()!=Public || lvirt!=Normal ||
- isFriend() || isRelated() || isExplicit() ||
- isMutable() || (isInline() && Config_getBool("INLINE_INFO")) ||
+ isFriend() || isRelated() ||
+ (isInline() && Config_getBool("INLINE_INFO")) ||
isSignal() || isSlot() ||
isStatic() || (m_impl->classDef && m_impl->classDef!=container) ||
- isSettable() || isGettable() || isReadable() || isWritable() ||
- isFinal() || isAbstract()
+ (m_impl->memSpec & ~Entry::Inline)!=0
)
)
{
@@ -1861,17 +1880,23 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
else if (isRelated()) sl.append("related");
else
{
- if (Config_getBool("INLINE_INFO") && isInline())
- sl.append("inline");
+ if (Config_getBool("INLINE_INFO") && isInline()) sl.append("inline");
if (isExplicit()) sl.append("explicit");
if (isMutable()) sl.append("mutable");
if (isStatic()) sl.append("static");
if (isGettable()) sl.append("get");
if (isSettable()) sl.append("set");
+ if (isAddable()) sl.append("add");
+ if (isRemovable()) sl.append("remove");
+ if (isRaisable()) sl.append("raise");
if (isReadable()) sl.append("read");
if (isWritable()) sl.append("write");
if (isFinal()) sl.append("final");
if (isAbstract()) sl.append("abstract");
+ if (isOverride()) sl.append("override");
+ if (isInitonly()) sl.append("initonly");
+ if (isSealed()) sl.append("sealed");
+ if (isNew()) sl.append("new");
if (protection()==Protected) sl.append("protected");
else if (protection()==Private) sl.append("private");
else if (protection()==Package) sl.append("package");
@@ -3181,6 +3206,24 @@ bool MemberDef::isSettable() const
return (m_impl->memSpec&Entry::Settable)!=0;
}
+bool MemberDef::isAddable() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Addable)!=0;
+}
+
+bool MemberDef::isRemovable() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Removable)!=0;
+}
+
+bool MemberDef::isRaisable() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Raisable)!=0;
+}
+
bool MemberDef::isReadable() const
{
makeResident();
@@ -3199,6 +3242,30 @@ bool MemberDef::isFinal() const
return (m_impl->memSpec&Entry::Final)!=0;
}
+bool MemberDef::isNew() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::New)!=0;
+}
+
+bool MemberDef::isSealed() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Sealed)!=0;
+}
+
+bool MemberDef::isOverride() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Override)!=0;
+}
+
+bool MemberDef::isInitonly() const
+{
+ makeResident();
+ return (m_impl->memSpec&Entry::Initonly)!=0;
+}
+
bool MemberDef::isAbstract() const
{
makeResident();
@@ -3394,6 +3461,7 @@ QCString MemberDef::getCachedTypedefTemplSpec() const
QCString MemberDef::getCachedResolvedTypedef() const
{
makeResident();
+ //printf("MemberDef::getCachedResolvedTypedef()=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
return m_impl->cachedResolvedType;
}
@@ -3620,6 +3688,7 @@ void MemberDef::cacheTypedefVal(ClassDef*val, const QCString & templSpec, const
m_impl->cachedTypedefValue=val;
m_impl->cachedTypedefTemplSpec=templSpec;
m_impl->cachedResolvedType=resolvedType;
+ //printf("MemberDef::cacheTypedefVal=%s m_impl=%p\n",m_impl->cachedResolvedType.data(),m_impl);
}
void MemberDef::flushToDisk() const
diff --git a/src/memberdef.h b/src/memberdef.h
index f0935a4..f6d1a0b 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -140,8 +140,15 @@ class MemberDef : public Definition
bool isSettable() const;
bool isReadable() const;
bool isWritable() const;
+ bool isAddable() const;
+ bool isRemovable() const;
+ bool isRaisable() const;
bool isFinal() const;
bool isAbstract() const;
+ bool isOverride() const;
+ bool isInitonly() const;
+ bool isNew() const;
+ bool isSealed() const;
bool isImplementation() const;
bool isExternal() const;
bool isTemplateSpecialization() const;
diff --git a/src/membergroup.cpp b/src/membergroup.cpp
index 900a6e0..0c6c050 100644
--- a/src/membergroup.cpp
+++ b/src/membergroup.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/membergroup.h b/src/membergroup.h
index 885341a..4f7cb4c 100644
--- a/src/membergroup.h
+++ b/src/membergroup.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 8864488..f684cbd 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/memberlist.h b/src/memberlist.h
index 1467835..be2e38e 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/membername.cpp b/src/membername.cpp
index 9a32f3e..5c3fff4 100644
--- a/src/membername.cpp
+++ b/src/membername.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -72,34 +72,12 @@ MemberNameIterator::MemberNameIterator(const MemberName &mnlist) :
{
}
-#if 0
-
-MemberNameList::MemberNameList() : QList<MemberName>()
-{
-}
-
-MemberNameList::~MemberNameList()
-{
-}
-
-int MemberNameList::compareItems(GCI item1, GCI item2)
-{
- MemberName *n1=(MemberName *)item1;
- MemberName *n2=(MemberName *)item2;
- return stricmp(n1->memberName(),n2->memberName());
-}
-
-MemberNameListIterator::MemberNameListIterator(const MemberNameList &mnlist) :
- QListIterator<MemberName>(mnlist)
-{
-}
-
-#endif
-
int MemberNameSDict::compareItems(GCI item1, GCI item2)
{
MemberName *n1=(MemberName *)item1;
MemberName *n2=(MemberName *)item2;
- return stricmp(n1->memberName(),n2->memberName());
+ return stricmp(n1->memberName()+getPrefixIndex(n1->memberName()),
+ n2->memberName()+getPrefixIndex(n2->memberName())
+ );
}
diff --git a/src/membername.h b/src/membername.h
index 8c71af0..ee227e8 100644
--- a/src/membername.h
+++ b/src/membername.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/message.cpp b/src/message.cpp
index 572542a..02bf52d 100644
--- a/src/message.cpp
+++ b/src/message.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/message.h b/src/message.h
index 12af48c..af9eecc 100644
--- a/src/message.h
+++ b/src/message.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp
index 54278b1..419ba2c 100644
--- a/src/namespacedef.cpp
+++ b/src/namespacedef.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/namespacedef.h b/src/namespacedef.h
index 827ace3..098cfee 100644
--- a/src/namespacedef.h
+++ b/src/namespacedef.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/objcache.cpp b/src/objcache.cpp
index f45a0e7..4c53ade 100644
--- a/src/objcache.cpp
+++ b/src/objcache.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/objcache.h b/src/objcache.h
index 3516534..33dfbfe 100644
--- a/src/objcache.h
+++ b/src/objcache.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/outputgen.cpp b/src/outputgen.cpp
index 4a5c54a..28878f3 100644
--- a/src/outputgen.cpp
+++ b/src/outputgen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/outputgen.h b/src/outputgen.h
index dbe6807..69390ba 100644
--- a/src/outputgen.h
+++ b/src/outputgen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/outputlist.cpp b/src/outputlist.cpp
index dac4972..993f321 100644
--- a/src/outputlist.cpp
+++ b/src/outputlist.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/outputlist.h b/src/outputlist.h
index bdc0f01..376bb28 100644
--- a/src/outputlist.h
+++ b/src/outputlist.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/pagedef.h b/src/pagedef.h
index 2d4c59d..3c7e74e 100644
--- a/src/pagedef.h
+++ b/src/pagedef.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/parserintf.h b/src/parserintf.h
index 477958a..57409c0 100644
--- a/src/parserintf.h
+++ b/src/parserintf.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/pngenc.cpp b/src/pngenc.cpp
index 79a83ac..7251bb3 100644
--- a/src/pngenc.cpp
+++ b/src/pngenc.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/pngenc.h b/src/pngenc.h
index f32248e..8d0219c 100644
--- a/src/pngenc.h
+++ b/src/pngenc.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/pre.h b/src/pre.h
index 5ac13fd..dfe772c 100644
--- a/src/pre.h
+++ b/src/pre.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/pre.l b/src/pre.l
index 2b9025e..5cf277f 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1158,6 +1158,10 @@ static void readIncludeFile(const QCString &inc)
msg("#include %s: not found or already included! skipping...\n",incFileName.data());
//printf("Error: include file %s not found\n",yytext);
}
+ if (g_curlyCount>0) // failed to find #include inside { ... }
+ {
+ warn(g_yyFileName,g_yyLineNr,"Warning: include file %s not found, perhaps you forgot to add its directory to INCLUDE_PATH?",incFileName.data());
+ }
}
}
}
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index fa1ab26..c02a4f5 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/pycode.h b/src/pycode.h
index b3007d4..326441c 100644
--- a/src/pycode.h
+++ b/src/pycode.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/pycode.l b/src/pycode.l
index 13e79cd..96b805a 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -715,7 +715,7 @@ static void generateFunctionLink(CodeOutputInterface &ol,char *funcName)
return;
}
-static void findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName)
+static bool findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *symName)
{
//printf("sym %s outerScope=%s equal=%d\n",
// sym->name().data(),sym->getOuterScope()->name().data(),
@@ -741,8 +741,10 @@ static void findMemberLink(CodeOutputInterface &ol,Definition *sym,const char *s
sym->getOutputFileBase(),
anchor,
symName);
+ return TRUE;
}
}
+ return FALSE;
}
static void findMemberLink(CodeOutputInterface &ol,char *symName)
@@ -763,12 +765,12 @@ static void findMemberLink(CodeOutputInterface &ol,char *symName)
Definition *sym;
for (dli.toFirst();(sym=dli.current());++dli)
{
- findMemberLink(ol,sym,symName);
+ if (findMemberLink(ol,sym,symName)) return;
}
}
else // single symbol
{
- findMemberLink(ol,(Definition*)di,symName);
+ if (findMemberLink(ol,(Definition*)di,symName)) return;
}
}
}
diff --git a/src/pyscanner.h b/src/pyscanner.h
index 03dce0b..a5aa2aa 100644
--- a/src/pyscanner.h
+++ b/src/pyscanner.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/pyscanner.l b/src/pyscanner.l
index db39ff4..6d33aef 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -695,6 +695,8 @@ STARTDOCSYMS ^{B}"##"/[^#]
initSpecialBlock();
BEGIN(SpecialComment);
}
+ {POUNDCOMMENT} { // #
+ }
"'" { // start of a single quoted string
g_stringContext=YY_START;
g_copyString=0;
@@ -705,8 +707,8 @@ STARTDOCSYMS ^{B}"##"/[^#]
g_copyString=0;
BEGIN( DoubleQuoteString );
}
- .
\n { yyLineNr++; }
+ . // anything else
}
<FunctionBody>{
@@ -1223,6 +1225,8 @@ STARTDOCSYMS ^{B}"##"/[^#]
current->program+=docBlock;
current->program+=yytext;
}
+ if (g_hideClassDocs)
+ current->startLine = yyLineNr;
g_hideClassDocs=FALSE;
BEGIN(docBlockContext);
}
diff --git a/src/qtbc.h b/src/qtbc.h
index b1baec4..029b84d 100644
--- a/src/qtbc.h
+++ b/src/qtbc.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/reflist.cpp b/src/reflist.cpp
index 99d94cd..2055e33 100644
--- a/src/reflist.cpp
+++ b/src/reflist.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/reflist.h b/src/reflist.h
index bc2b52f..90b60b9 100644
--- a/src/reflist.h
+++ b/src/reflist.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 2cebd40..356af3c 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/rtfdocvisitor.h b/src/rtfdocvisitor.h
index 5462480..57ce53b 100644
--- a/src/rtfdocvisitor.h
+++ b/src/rtfdocvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/rtfgen.cpp b/src/rtfgen.cpp
index 0194de9..51035b7 100644
--- a/src/rtfgen.cpp
+++ b/src/rtfgen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Parker Waechter & Dimitri van Heesch.
*
diff --git a/src/rtfgen.h b/src/rtfgen.h
index b0edb10..d1dcd95 100644
--- a/src/rtfgen.h
+++ b/src/rtfgen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Parker Waechter & Dimitri van Heesch.
*
diff --git a/src/rtfstyle.cpp b/src/rtfstyle.cpp
index 430ed37..b52b37d 100644
--- a/src/rtfstyle.cpp
+++ b/src/rtfstyle.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/rtfstyle.h b/src/rtfstyle.h
index 6f4af29..bc1a3bb 100644
--- a/src/rtfstyle.h
+++ b/src/rtfstyle.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/scanner.h b/src/scanner.h
index e82daf8..d0f384b 100644
--- a/src/scanner.h
+++ b/src/scanner.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/scanner.l b/src/scanner.l
index 3e8da49..c0189e3 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -1,6 +1,6 @@
/*****************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2005 by Dimitri van Heesch.
*
@@ -104,13 +104,16 @@ static QCString* specName;
static QCString formulaText;
static QCString formulaEnd;
static bool useOverrideCommands = FALSE;
-static bool insideIDL = FALSE; //!< processing IDL code?
-static bool insideJava = FALSE; //!< processing Java code?
-static bool insideCS = FALSE; //!< processing C# code?
-static bool insideD = FALSE; //!< processing D code?
-static bool insidePHP = FALSE; //!< processing PHP code?
+
+static bool insideIDL = FALSE; //!< processing IDL code?
+static bool insideJava = FALSE; //!< processing Java code?
+static bool insideCS = FALSE; //!< processing C# code?
+static bool insideD = FALSE; //!< processing D code?
+static bool insidePHP = FALSE; //!< processing PHP code?
+static bool insideObjC = FALSE; //!< processing Objective C code?
+static bool insideCli = FALSE; //!< processing C++/CLI code?
+
static bool insideCppQuote = FALSE;
-static bool insideObjC = FALSE; //!< processing Objective C code?
static bool insideProtocolList = FALSE;
static int argRoundCount;
@@ -195,6 +198,7 @@ static void initParser()
autoGroupStack.setAutoDelete(TRUE);
insideFormula = FALSE;
insideCode=FALSE;
+ insideCli=Config_getBool("CPP_CLI_SUPPORT");
previous = 0;
}
@@ -202,7 +206,7 @@ static void initEntry()
{
if (insideJava)
{
- protection = current_root->section==Entry::INTERFACE_SEC ? Public : Package;
+ protection = (current_root->spec & Entry::Interface) ? Public : Package;
}
current->protection = protection ;
current->mtype = mtype;
@@ -570,6 +574,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
%x CSConstraint
%x ClassCategory
%x ClassTemplSpec
+%x CliPropertyType
+%x CliOverride
%x Bases
%x BasesProt
%x NextSemi
@@ -829,7 +835,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->argList->clear();
lineCount() ;
}
-<FindMembers>{B}*"protected"{BN}*":"{BN}* {
+<FindMembers>{B}*"internal"{BN}*":"{BN}* { // for now treat C++/CLI's internal as package...
+ current->protection = protection = Package ;
+ current->mtype = mtype = Method;
+ current->type.resize(0);
+ current->name.resize(0);
+ current->args.resize(0);
+ current->argList->clear();
+ lineCount() ;
+ }
+<FindMembers>{B}*"protected"{BN}*":"{BN}* {
current->protection = protection = Protected ;
current->mtype = mtype = Method;
current->type.resize(0);
@@ -847,6 +862,69 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->argList->clear();
lineCount() ;
}
+<FindMembers>{B}*"event"{BN}* {
+ if (insideCli)
+ {
+ // C++/CLI event
+ lineCount() ;
+ current->mtype = mtype = Event;
+ current->bodyLine = yyLineNr;
+ curlyCount=0;
+ BEGIN( CliPropertyType );
+ }
+ else
+ {
+ REJECT;
+ }
+ }
+<FindMembers>{B}*"property"{BN}* {
+ if (insideCli)
+ {
+ // C++/CLI property
+ lineCount() ;
+ current->mtype = mtype = Property;
+ current->bodyLine = yyLineNr;
+ curlyCount=0;
+ BEGIN( CliPropertyType );
+ }
+ else
+ {
+ REJECT;
+ }
+ }
+<CliPropertyType>{ID} {
+ addType( current );
+ current->name = yytext;
+ }
+<CliPropertyType>"{" {
+ curlyCount=0;
+ printf("event: '%s' '%s'\n",current->type.data(),current->name.data());
+ BEGIN( CSAccessorDecl );
+ }
+<CliPropertyType>";" {
+ unput(*yytext);
+ BEGIN( FindMembers );
+ }
+<CliPropertyType>\n {
+ yyLineNr++;
+ }
+<CliPropertyType>{B}* {
+ }
+<CliPropertyType>. {
+ addType( current );
+ current->type += yytext;
+ }
+<FindMembers>{B}*"property"{BN}* {
+ if (!current->type.isEmpty())
+ {
+ REJECT;
+ }
+ else
+ {
+ current->mtype = mtype = Property;
+ lineCount();
+ }
+ }
<FindMembers>{B}*"@private"{BN}+ {
current->protection = protection = Private ;
current->mtype = mtype = Method;
@@ -1012,6 +1090,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<PackageName>";" {
BEGIN(FindMembers);
}
+<FindMembers>{B}*"initonly"{BN}+ {
+ current->type += " initonly ";
+ if (insideCli) current->spec |= Entry::Initonly;
+ lineCount();
+ }
<FindMembers>{B}*"static"{BN}+ { current->type += " static ";
current->stat = TRUE;
lineCount();
@@ -1033,17 +1116,17 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
else
{
- current->memSpec|=Entry::Abstract;
+ current->spec|=Entry::Abstract;
}
lineCount();
}
-<FindMembers>{B}*"inline"{BN}+ { current->memSpec|=Entry::Inline;
+<FindMembers>{B}*"inline"{BN}+ { current->spec|=Entry::Inline;
lineCount();
}
-<FindMembers>{B}*"mutable"{BN}+ { current->memSpec|=Entry::Mutable;
+<FindMembers>{B}*"mutable"{BN}+ { current->spec|=Entry::Mutable;
lineCount();
}
-<FindMembers>{B}*"explicit"{BN}+ { current->memSpec|=Entry::Explicit;
+<FindMembers>{B}*"explicit"{BN}+ { current->spec|=Entry::Explicit;
lineCount();
}
/*
@@ -1108,7 +1191,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (insideIDL || insideJava || insideCS || insideD || insidePHP)
{
isTypedef=FALSE;
- current->section = Entry::INTERFACE_SEC;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Interface;
addType( current ) ;
current->type += " interface" ;
current->fileName = yyFileName;
@@ -1138,7 +1222,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembers>{B}*"@interface"{BN}+ { // Objective-C class interface
lineCount();
isTypedef=FALSE;
- current->section = Entry::INTERFACE_SEC;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Interface;
current->objc = insideObjC = TRUE;
current->protection = protection = Public ;
addType( current ) ;
@@ -1151,7 +1236,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembers>{B}*"@protocol"{BN}+ { // Objective-C protocol definition
lineCount();
isTypedef=FALSE;
- current->section = Entry::PROTOCOL_SEC;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Protocol;
current->objc = insideObjC = TRUE;
current->protection = protection = Public ;
addType( current ) ;
@@ -1163,7 +1249,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<FindMembers>{B}*"exception"{BN}+ { // Corba IDL exception
isTypedef=FALSE;
- current->section = Entry::EXCEPTION_SEC;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Exception;
addType( current ) ;
current->type += " exception" ;
current->fileName = yyFileName;
@@ -1186,6 +1273,48 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
+<FindMembers>{B}*"value class{" | // C++/CLI extension
+<FindMembers>{B}*"value class"{BN}+ {
+ isTypedef=FALSE;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Value;
+ addType( current ) ;
+ current->type += " value class" ;
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ lineCount() ;
+ if (yytext[yyleng-1]=='{') unput('{');
+ BEGIN( CompoundName ) ;
+ }
+<FindMembers>{B}*"ref class{" | // C++/CLI extension
+<FindMembers>{B}*"ref class"{BN}+ {
+ isTypedef=FALSE;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Ref;
+ addType( current ) ;
+ current->type += " ref class" ;
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ lineCount() ;
+ if (yytext[yyleng-1]=='{') unput('{');
+ BEGIN( CompoundName ) ;
+ }
+<FindMembers>{B}*"interface class{" | // C++/CLI extension
+<FindMembers>{B}*"interface class"{BN}+ {
+ isTypedef=FALSE;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Interface;
+ addType( current ) ;
+ current->type += " interface class" ;
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ lineCount() ;
+ if (yytext[yyleng-1]=='{') unput('{');
+ BEGIN( CompoundName ) ;
+ }
<FindMembers>{B}*"coclass"{BN}+ {
if (insideIDL)
{
@@ -1210,7 +1339,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<FindMembers>{B}*{TYPEDEFPREFIX}"struct{" |
<FindMembers>{B}*{TYPEDEFPREFIX}"struct"/{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
- current->section = Entry::STRUCT_SEC ;
+ current->section = Entry::CLASS_SEC ;
+ current->spec = Entry::Struct;
addType( current ) ;
current->type += " struct" ;
current->fileName = yyFileName;
@@ -1220,10 +1350,53 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
+<FindMembers>{B}*"value struct{" | // C++/CLI extension
+<FindMembers>{B}*"value struct"{BN}+ {
+ isTypedef=FALSE;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Struct | Entry::Value;
+ addType( current ) ;
+ current->type += " value struct" ;
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ lineCount() ;
+ if (yytext[yyleng-1]=='{') unput('{');
+ BEGIN( CompoundName ) ;
+ }
+<FindMembers>{B}*"ref struct{" | // C++/CLI extension
+<FindMembers>{B}*"ref struct"{BN}+ {
+ isTypedef=FALSE;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Struct | Entry::Ref;
+ addType( current ) ;
+ current->type += " ref struct" ;
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ lineCount() ;
+ if (yytext[yyleng-1]=='{') unput('{');
+ BEGIN( CompoundName ) ;
+ }
+<FindMembers>{B}*"interface struct{" | // C++/CLI extension
+<FindMembers>{B}*"interface struct"{BN}+ {
+ isTypedef=FALSE;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Struct | Entry::Interface;
+ addType( current ) ;
+ current->type += " interface struct";
+ current->fileName = yyFileName;
+ current->startLine = yyLineNr;
+ current->bodyLine = yyLineNr;
+ lineCount() ;
+ if (yytext[yyleng-1]=='{') unput('{');
+ BEGIN( CompoundName ) ;
+ }
<FindMembers>{B}*{TYPEDEFPREFIX}"union{" |
<FindMembers>{B}*{TYPEDEFPREFIX}"union"{BN}+ {
isTypedef=((QCString)yytext).find("typedef")!=-1;
- current->section = Entry::UNION_SEC ;
+ current->section = Entry::CLASS_SEC;
+ current->spec = Entry::Union;
addType( current ) ;
current->type += " union" ;
current->fileName = yyFileName;
@@ -1233,8 +1406,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (yytext[yyleng-1]=='{') unput('{');
BEGIN( CompoundName ) ;
}
-<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum{" |
-<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"{BN}+ { // for IDL: typedef [something] enum
+<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?"{" |
+<FindMembers>{B}*{TYPEDEFPREFIX}{IDLATTR}?"enum"({BN}+("class"|"struct"))?{BN}+ { // for IDL: typedef [something] enum
isTypedef=((QCString)yytext).find("typedef")!=-1;
current->section = Entry::ENUM_SEC ;
addType( current ) ;
@@ -1271,7 +1444,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
unput(*yytext);
BEGIN( FindMembers ) ;
}
-<FindMembers>"template"({BN}*)"<"/[>]? {
+<FindMembers>("template"|"generic")({BN}*)"<"/[>]? { // generic is a C++/CLI extension
lineCount();
if (current->tArgLists==0)
{
@@ -1280,6 +1453,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
ArgumentList *al = new ArgumentList;
al->setAutoDelete(TRUE);
+ current->spec |= (yytext[0]=='g') ? Entry::Generic : Entry::Template;
current->tArgLists->append(al);
currentArgumentList = al;
templateStr="<";
@@ -1501,11 +1675,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
BEGIN(QtPropAttr);
}
<QtPropAttr>"READ" {
- current->memSpec |= Entry::Readable;
+ current->spec |= Entry::Readable;
BEGIN(QtPropRead);
}
<QtPropAttr>"WRITE" {
- current->memSpec |= Entry::Writable;
+ current->spec |= Entry::Writable;
BEGIN(QtPropWrite);
}
<QtPropAttr>"RESET"{B}+{ID} { // reset method => not supported yet
@@ -1762,7 +1936,19 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
BEGIN( CopyRound );
}
-<FindMembers>[*&]+ { current->name += yytext ;
+<FindMembers>[\^%] { // ^ and % are C++/CLI extensions
+ if (insideCli)
+ {
+ addType( current );
+ current->name = yytext ;
+ }
+ else
+ {
+ REJECT;
+ }
+ }
+<FindMembers>[*&]+ {
+ current->name += yytext ;
addType( current );
}
<FindMembers,MemberSpec,Function,NextSemi,BitFields,ReadInitializer,OldStyleArgs>";"{BN}*("/**"|"//!"|"/*!"|"///")"<" {
@@ -2335,7 +2521,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<FindMembers>"[" {
- if (!insideCS &&
+ if (!insideCS &&
current->name.isEmpty() ||
current->name=="typedef"
) // IDL function property
@@ -2367,11 +2553,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<IDLAttribute>"propput" {
current->mtype = Property;
- current->memSpec |= Entry::Settable;
+ current->spec |= Entry::Settable;
}
<IDLAttribute>"propget" {
current->mtype = Property;
- current->memSpec |= Entry::Gettable;
+ current->spec |= Entry::Gettable;
}
<IDLAttribute>. {
}
@@ -2588,7 +2774,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->name = current->name.stripWhiteSpace();
//printf("adding `%s' `%s' `%s' brief=%s insideObjC=%d %x\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data(),insideObjC,current->section);
if (insideObjC &&
- (current->section==Entry::INTERFACE_SEC || current->section==Entry::CATEGORY_SEC)
+ ((current->spec&Entry::Interface) || (current->spec==Entry::Category))
) // method definition follows
{
BEGIN( ReadBodyIntf ) ;
@@ -2598,7 +2784,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current_root->addSubEntry( current ) ;
current = new Entry(*current);
if (current->section==Entry::NAMESPACE_SEC ||
- current->section==Entry::INTERFACE_SEC ||
+ (current->spec==Entry::Interface) ||
insideJava || insidePHP || insideCS || insideD
)
{ // namespaces and interfaces and java classes ends with a closing bracket without semicolon
@@ -2684,11 +2870,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// handle *pName in: typedef { ... } name, *pName;
if (firstTypedefEntry)
{
- if (firstTypedefEntry->section==Entry::STRUCT_SEC)
+ if (firstTypedefEntry->spec&Entry::Struct)
{
msType.prepend("struct "+firstTypedefEntry->name);
}
- else if (firstTypedefEntry->section==Entry::UNION_SEC)
+ else if (firstTypedefEntry->spec&Entry::Union)
{
msType.prepend("union "+firstTypedefEntry->name);
}
@@ -3272,6 +3458,26 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
unput(*yytext); BEGIN( Function );
}
}
+<FuncQual>{BN}*"abstract"{BN}* { // pure virtual member function
+ lineCount() ;
+ current->virt = Pure;
+ current->args += " override ";
+ }
+<FuncQual>{BN}*"override"{BN}* { // overridden virtual member function
+ lineCount() ;
+ current->spec |= Entry::Override;
+ current->args += " override ";
+ }
+<FuncQual>{BN}*"sealed"{BN}* { // sealed member function
+ lineCount() ;
+ current->spec |= Entry::Sealed;
+ current->args += " sealed ";
+ }
+<FuncQual>{BN}*"new"{BN}* { // new member function
+ lineCount() ;
+ current->spec |= Entry::New;
+ current->args += " new ";
+ }
<FuncQual>{BN}*"const"{BN}* { // const member function
lineCount() ;
current->args += " const ";
@@ -3301,12 +3507,31 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
lastCPPContext = YY_START;
BEGIN(SkipCPP);
}
-<FuncQual>"=" { // typically an initialized function pointer
- //current->args += *yytext;
- //BEGIN(FuncPtrInit);
- lastInitializerContext=YY_START;
- initBracketCount=0;
- BEGIN(ReadInitializer);
+<FuncQual>"=" {
+ if (insideCli &&
+ (current_root->section&Entry::COMPOUND_MASK)
+ )
+ {
+ BEGIN(CliOverride);
+ }
+ else
+ {
+ // typically an initialized function pointer
+ lastInitializerContext=YY_START;
+ initBracketCount=0;
+ BEGIN(ReadInitializer);
+ }
+ }
+<CliOverride>{ID} {
+ }
+<CliOverride>"{" {
+ unput(*yytext);
+ BEGIN(FuncQual);
+ }
+<CliOverride>\n {
+ yyLineNr++;
+ }
+<CliOverride>. {
}
<FuncPtrInit>[{;] {
unput(*yytext);
@@ -3494,11 +3719,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
{
if (findAndRemoveWord(current->type,"final"))
{
- current->memSpec |= Entry::Final;
+ current->spec |= Entry::Final;
}
if (findAndRemoveWord(current->type,"abstract"))
{
- current->memSpec |= Entry::Abstract;
+ current->spec |= Entry::Abstract;
}
}
if ( insidePHP && !containsWord(current->type,"function"))
@@ -3524,7 +3749,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
{
if ( !insidePHP && (current_root->section & Entry::COMPOUND_MASK) )
{
- previous->memSpec |= Entry::Inline;
+ previous->spec |= Entry::Inline;
}
//addToBody(yytext);
curlyCount=0;
@@ -3739,7 +3964,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<CompoundName>{SCOPENAME}{BN}*/"<" {
sharpCount = 0;
current->name = yytext ;
- if (current->section==Entry::PROTOCOL_SEC)
+ if (current->spec & Entry::Protocol)
{
current->name+="-p";
}
@@ -3764,7 +3989,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
if (--sharpCount<=0)
{
current->name = removeRedundantWhiteSpace(current->name);
- if (current->section == Entry::PROTOCOL_SEC)
+ if (current->spec & Entry::Protocol)
{ // Objective-C protocol
unput('{'); // fake start of body
BEGIN( ClassVar );
@@ -3794,11 +4019,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
<CompoundName>{SCOPENAME} {
current->name = yytext ;
lineCount();
- if (current->section == Entry::PROTOCOL_SEC)
+ if (current->spec & Entry::Protocol)
{
current->name += "-p";
}
- if (current->section == Entry::PROTOCOL_SEC ||
+ if ((current->section & Entry::Protocol) ||
current->section == Entry::OBJCIMPL_SEC)
{
unput('{'); // fake start of body
@@ -3839,6 +4064,20 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// Multiple class forward declaration
}
}
+<ClassVar>("sealed"|"abstract")/{BN}*(":"|"{") {
+ if (insideCli)
+ {
+ if (yytext[0]=='s') // sealed
+ current->spec |= Entry::SealedClass;
+ else // abstract
+ current->spec |= Entry::AbstractClass;
+ BEGIN( ClassVar );
+ }
+ else
+ {
+ REJECT;
+ }
+ }
<ClassVar>{ID} {
if (insideIDL && strcmp(yytext,"switch")==0)
{
@@ -3880,7 +4119,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
current->name+='(';
if (current->section!=Entry::OBJCIMPL_SEC)
{
- current->section=Entry::CATEGORY_SEC;
+ current->spec|=Entry::Category;
}
BEGIN( ClassCategory );
}
@@ -3912,8 +4151,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<ClassVar>":" {
current->type.resize(0);
- if (current->section == Entry::INTERFACE_SEC ||
- current->section == Entry::STRUCT_SEC ||
+ if ((current->spec & Entry::Interface) ||
+ (current->spec & Entry::Struct) ||
insidePHP || insideCS || insideD || insideObjC
)
baseProt=Public;
@@ -3981,11 +4220,10 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
curlyCount=0;
if (current_root && // not a nested struct inside an @interface section
- current_root->section!=Entry::INTERFACE_SEC &&
- (current->section==Entry::INTERFACE_SEC ||
- current->section==Entry::OBJCIMPL_SEC ||
- current->section==Entry::PROTOCOL_SEC ||
- current->section==Entry::CATEGORY_SEC) &&
+ !(current_root->spec & Entry::Interface) &&
+ ((current->spec & (Entry::Interface | Entry::Protocol | Entry::Category) ||
+ current->section==Entry::OBJCIMPL_SEC)
+ ) &&
insideObjC
)
{ // ObjC body that ends with @end
@@ -4108,7 +4346,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
new BaseInfo(baseName,baseProt,baseVirt)
);
}
- if (current->section==Entry::INTERFACE_SEC ||
+ if ((current->spec & Entry::Interface) ||
insideJava || insidePHP || insideCS ||
insideD || insideObjC)
{
@@ -4292,7 +4530,9 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
lineCount();
}
<FindMembers>"{" {
- if (insideCS && !current->name.isEmpty() && !current->type.isEmpty())
+ if (insideCS &&
+ !current->name.isEmpty() &&
+ !current->type.isEmpty())
{
if (containsWord(current->type,"event")) // event
{
@@ -4304,7 +4544,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
current->bodyLine = yyLineNr;
curlyCount=0;
- BEGIN(CSAccessorDecl);
+ BEGIN( CSAccessorDecl );
}
else
{
@@ -4351,8 +4591,11 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
BEGIN(FindMembers);
}
}
-<CSAccessorDecl>"set" { if (curlyCount==0) current->memSpec |= Entry::Settable; }
-<CSAccessorDecl>"get" { if (curlyCount==0) current->memSpec |= Entry::Gettable; }
+<CSAccessorDecl>"set" { if (curlyCount==0) current->spec |= Entry::Settable; }
+<CSAccessorDecl>"get" { if (curlyCount==0) current->spec |= Entry::Gettable; }
+<CSAccessorDecl>"add" { if (curlyCount==0) current->spec |= Entry::Addable; }
+<CSAccessorDecl>"remove" { if (curlyCount==0) current->spec |= Entry::Removable; }
+<CSAccessorDecl>"raise" { if (curlyCount==0) current->spec |= Entry::Raisable; }
<CSAccessorDecl>. {}
<CSAccessorDecl>\n { yyLineNr++; }
@@ -4364,9 +4607,13 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
/**********************************************************************************/
/* ---- Single line comments ------ */
-
+<DocLine>[^\n]*"\n"[ \t]*"//"[/!] { // continuation of multiline C++-style comment
+ docBlock+=yytext;
+ docBlock.resize(docBlock.size() - 3);
+ }
<DocLine>[^\n]*/"\n" { // whole line
- handleCommentBlock(yytext,TRUE);
+ docBlock+=yytext;
+ handleCommentBlock(docBlock,TRUE);
BEGIN( docBlockContext );
}
@@ -4429,12 +4676,12 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
BEGIN(DocBlock);
}
}
-<DocCopyBlock>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode"|"f$"|"f]"|"f}")/[^a-z_A-Z0-9] { // end of verbatim block
+<DocCopyBlock>[\\@]("f$"|"f]"|"f}") {
+ docBlock+=yytext;
+ BEGIN(DocBlock);
+ }
+<DocCopyBlock>[\\@]("endverbatim"|"endlatexonly"|"endhtmlonly"|"endxmlonly"|"enddot"|"endcode")/[^a-z_A-Z0-9] { // end of verbatim block
docBlock+=yytext;
- if (yytext[1]=='f') // end of formula
- {
- BEGIN(DocBlock);
- }
if (&yytext[4]==docBlockName)
{
BEGIN(DocBlock);
@@ -4446,7 +4693,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
REJECT;
}
}
-<DocCopyBlock>[^@/*\\\n]+ { // any character that is not special
+<DocCopyBlock>[^@/*\]\$\\\n]+ { // any character that is not special
docBlock+=yytext;
}
<DocCopyBlock>"/*"|"*/"|"//" {
@@ -4734,11 +4981,28 @@ static void parseCompounds(Entry *rt)
ce->fileName.right(4)==".inc" ||
ce->fileName.right(2)==".d"
)
+ {
current->protection = protection = Public ;
+ }
else if (ce->fileName.right(5)==".java")
+ {
current->protection = protection = Package ;
+ }
+ else if (ce->spec&(Entry::Interface | Entry::Ref | Entry::Value | Entry::Struct | Entry::Union))
+ {
+ if (ce->objc)
+ {
+ current->protection = protection = Protected ;
+ }
+ else
+ {
+ current->protection = protection = Public ;
+ }
+ }
else
+ {
current->protection = protection = Private ;
+ }
}
else if (ce->section == Entry::ENUM_SEC ) // enum
{
@@ -4752,17 +5016,6 @@ static void parseCompounds(Entry *rt)
}
current->protection = protection = ce->protection;
}
- else if (ce->section==Entry::INTERFACE_SEC)
- {
- if (ce->objc)
- {
- current->protection = protection = Protected ;
- }
- else
- {
- current->protection = protection = Public ;
- }
- }
else // named struct, union, protocol, category
{
current->protection = protection = Public ;
diff --git a/src/searchindex.cpp b/src/searchindex.cpp
index 2610c52..89e8106 100644
--- a/src/searchindex.cpp
+++ b/src/searchindex.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/searchindex.h b/src/searchindex.h
index e5c9387..5293b94 100644
--- a/src/searchindex.h
+++ b/src/searchindex.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/section.h b/src/section.h
index 70dd5e1..ae79b2e 100644
--- a/src/section.h
+++ b/src/section.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/sortdict.h b/src/sortdict.h
index 07c450a..4a423c3 100644
--- a/src/sortdict.h
+++ b/src/sortdict.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/store.h b/src/store.h
index 3fc3ac0..eda055e 100644
--- a/src/store.h
+++ b/src/store.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/tagreader.cpp b/src/tagreader.cpp
index a8a74bb..7c807f3 100644
--- a/src/tagreader.cpp
+++ b/src/tagreader.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
@@ -1169,15 +1169,16 @@ void TagFileParser::buildLists(Entry *root)
while (tci)
{
Entry *ce = new Entry;
+ ce->section = Entry::CLASS_SEC;
switch (tci->kind)
{
- case TagClassInfo::Class: ce->section = Entry::CLASS_SEC; break;
- case TagClassInfo::Struct: ce->section = Entry::STRUCT_SEC; break;
- case TagClassInfo::Union: ce->section = Entry::UNION_SEC; break;
- case TagClassInfo::Interface: ce->section = Entry::INTERFACE_SEC; break;
- case TagClassInfo::Exception: ce->section = Entry::EXCEPTION_SEC; break;
- case TagClassInfo::Protocol: ce->section = Entry::PROTOCOL_SEC; break;
- case TagClassInfo::Category: ce->section = Entry::CATEGORY_SEC; break;
+ case TagClassInfo::Class: break;
+ case TagClassInfo::Struct: ce->spec = Entry::Struct; break;
+ case TagClassInfo::Union: ce->spec = Entry::Union; break;
+ case TagClassInfo::Interface: ce->spec = Entry::Interface; break;
+ case TagClassInfo::Exception: ce->spec = Entry::Exception; break;
+ case TagClassInfo::Protocol: ce->spec = Entry::Protocol; break;
+ case TagClassInfo::Category: ce->spec = Entry::Category; break;
}
ce->name = tci->name;
addDocAnchors(ce,tci->docAnchors);
diff --git a/src/tagreader.h b/src/tagreader.h
index d52b3df..b8d89db 100644
--- a/src/tagreader.h
+++ b/src/tagreader.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/translator_en.h b/src/translator_en.h
index fda338d..877f861 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -1052,7 +1052,7 @@ class TranslatorEnglish : public Translator
"<p>\n"
"The boxes in the above graph have the following meaning:\n"
"<ul>\n"
- "<li>%A filled black box represents the struct or class for which the "
+ "<li>%A filled gray box represents the struct or class for which the "
"graph is generated.\n"
"<li>%A box with a black border denotes a documented struct or class.\n"
"<li>%A box with a grey border denotes an undocumented struct or class.\n"
diff --git a/src/translator_gr.h b/src/translator_gr.h
index f076769..3833185 100644
--- a/src/translator_gr.h
+++ b/src/translator_gr.h
@@ -1,12 +1,12 @@
/******************************************************************************
*
- *
*
- * Copyright (C) 1997-2006 by Dimitri van Heesch.
+ *
+ * Copyright (C) 1997-2005 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
+ * 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.
*
@@ -15,24 +15,30 @@
*
*/
-/*
- * 15 Dec 2001 : Translation to greek by
- * Harry Kalogirou <harkal@rainbow.cs.unipi.gr>
- */
+/*
+ * 15 Dec 2001 : Translation to greek by
+ * Harry Kalogirou <no email>
+ *
+ * 04 Feb 2006 : Greek maintainance by
+ * Paul Gessos <nickreserved@yahoo.com>
+ */
#ifndef TRANSLATOR_GR_H
#define TRANSLATOR_GR_H
-class TranslatorGreek : public TranslatorAdapter_1_2_11
+class TranslatorGreek : public Translator
{
+ protected:
+ friend class TranslatorAdapterBase;
+
public:
// --- Language control methods -------------------
-
- /*! Used for identification of the language. The identification
- * should not be translated. It should be replaced by the name
+
+ /*! Used for identification of the language. The identification
+ * should not be translated. It should be replaced by the name
* of the language in English using lower-case characters only
- * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
+ * (e.g. "czech", "japanese", "russian", etc.). It should be equal to
* the identification used in language.cpp.
*/
virtual QCString idLanguage()
@@ -61,35 +67,35 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! header that is put before the detailed description of files, classes and namespaces. */
virtual QCString trDetailedDescription()
- { return "Λεπτομερή Περιγραφή"; }
+ { return "Λεπτομερής Περιγραφή"; }
/*! header that is put before the list of typedefs. */
virtual QCString trMemberTypedefDocumentation()
{ return "Τεκμηρίωση Μελών Typedef"; }
-
+
/*! header that is put before the list of enumerations. */
virtual QCString trMemberEnumerationDocumentation()
{ return "Τεκμηρίωση Απαριθμήσεων Μελών"; }
-
+
/*! header that is put before the list of member functions. */
virtual QCString trMemberFunctionDocumentation()
{ return "Τεκμηρίωση Συναρτήσεων Μελών"; }
-
+
/*! header that is put before the list of member attributes. */
virtual QCString trMemberDataDocumentation()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Τεκμηρίωση Πεδίων";
+ return "Τεκμηρίωση Πεδίων";
}
else
{
- return "Τεκμηρίωση Δεδομένων Μελών";
+ return "Τεκμηρίωση Δεδομένων Μελών";
}
}
/*! this is the text of a link put after brief descriptions. */
- virtual QCString trMore()
+ virtual QCString trMore()
{ return "Περισσότερα..."; }
/*! put in the class documentation */
@@ -107,54 +113,54 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! this is the remainder of the sentence after the class name */
virtual QCString trIncludingInheritedMembers()
{ return ", περιλαμβανομένων όλων των κληρονομημένων μελών."; }
-
+
/*! this is put at the author sections at the bottom of man pages.
* parameter s is name of the project name.
*/
virtual QCString trGeneratedAutomatically(const char *s)
{ QCString result="Δημιουργήθηκε αυτόματα από το Doxygen";
if (s) result+=(QCString)" για "+s;
- result+=" από τον πηγαίο κώδικα.";
+ result+=" από τον πηγαίο κώδικα.";
return result;
}
/*! put after an enum name in the list of all members */
virtual QCString trEnumName()
{ return "όνομα απαρύθμισης"; }
-
+
/*! put after an enum value in the list of all members */
virtual QCString trEnumValue()
- { return "τιμή απαρύθμισης"; }
-
+ { return "τιμή απαρίθμησης"; }
+
/*! put after an undocumented member in the list of all members */
virtual QCString trDefinedIn()
{ return "ορισμένο στο "; }
// quick reference sections
- /*! This is put above each page as a link to the list of all groups of
+ /*! This is put above each page as a link to the list of all groups of
* compounds or files (see the \\group command).
*/
virtual QCString trModules()
{ return "Κομμάτια"; }
-
+
/*! This is put above each page as a link to the class hierarchy */
virtual QCString trClassHierarchy()
{ return "Ιεραρχία Κλάσεων"; }
-
+
/*! This is put above each page as a link to the list of annotated classes */
virtual QCString trCompoundList()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
return "Δομές Δεδομένων";
}
else
{
- return "Λίστα Συσσωματωμάτων";
+ return "Λίστα Συσσωματωμάτων";
}
}
-
+
/*! This is put above each page as a link to the list of documented files */
virtual QCString trFileList()
{ return "Λίστα Αρχείων"; }
@@ -165,27 +171,27 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! This is put above each page as a link to all members of compounds. */
virtual QCString trCompoundMembers()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Πεδία Δεδομένων";
+ return "Πεδία Δεδομένων";
}
else
{
- return "Μέλη Συσσωματώματα";
+ return "Μέλη Συσσωματώματα";
}
}
/*! This is put above each page as a link to all members of files. */
virtual QCString trFileMembers()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Καθολικοί ορισμοί";
+ return "Καθολικοί ορισμοί";
}
else
{
- return "Μέλη Αρχείων";
+ return "Μέλη Αρχείων";
}
}
@@ -218,16 +224,16 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! This is an introduction to the annotated compound list. */
virtual QCString trCompoundListDescription()
- {
-
+ {
+
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Ακολουθούνε οι δομές δεδομένων με σύντομες περιγραφές:";
+ return "Ακολουθούνε οι δομές δεδομένων με σύντομες περιγραφές:";
}
else
{
return "Ακολουθούνε οι κλάσεις, οι δομές, "
- "τα σώματα και οι διαπροσωπίες με σύντομες περιγραφές:";
+ "τα σώματα και οι διαπροσωπίες με σύντομες περιγραφές:";
}
}
@@ -248,7 +254,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
result+="κλάσεων";
}
result+=" με συνδέσμους ";
- if (!extractAll)
+ if (!extractAll)
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
@@ -259,7 +265,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
result+="στην τεκμηρίωση των κλάσεων για κάθε πεδίο:";
}
}
- else
+ else
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
@@ -278,7 +284,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
QCString result="Ακολουθεί η λίστα όλων των ";
if (!extractAll) result+="τεκμηριωμένων ";
-
+
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
result+="συναρτήσεων, μεταβλητών, ορισμών, απαριθμήσεων, και ορισμών τύπων";
@@ -288,9 +294,9 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
result+="μελών αρχείων";
}
result+=" με συνδέσμους ";
- if (extractAll)
+ if (extractAll)
result+="στα αρχεία που ανήκουν:";
- else
+ else
result+="στην τεκμηρίωση:";
return result;
}
@@ -312,49 +318,49 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{ return "Ακολουθεί η λίστα όλων των μονάδων:"; }
/*! This sentences is used in the annotated class/file lists if no brief
- * description is given.
+ * description is given.
*/
virtual QCString trNoDescriptionAvailable()
{ return "Δεν υπάρχει περιγραφή διαθέσιμη"; }
-
- // index titles (the project name is prepended for these)
+
+ // index titles (the project name is prepended for these)
/*! This is used in HTML as the title of index.html. */
virtual QCString trDocumentation()
{ return "Τεκμηρίωση"; }
- /*! This is used in LaTeX as the title of the chapter with the
+ /*! This is used in LaTeX as the title of the chapter with the
* index of all groups.
*/
virtual QCString trModuleIndex()
{ return "Ευρετήριο μονάδων"; }
- /*! This is used in LaTeX as the title of the chapter with the
+ /*! This is used in LaTeX as the title of the chapter with the
* class hierarchy.
*/
virtual QCString trHierarchicalIndex()
{ return "Ιεραρχικό Ευρετήριο"; }
- /*! This is used in LaTeX as the title of the chapter with the
+ /*! This is used in LaTeX as the title of the chapter with the
* annotated compound index.
*/
virtual QCString trCompoundIndex()
{
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
- {
+ {
return "Ευρετήριο δομών δεδομένων";
}
else
{
- return "Συμπαγές Ευρετήριο";
+ return "Συμπαγές Ευρετήριο";
}
}
/*! This is used in LaTeX as the title of the chapter with the
* list of all files.
*/
- virtual QCString trFileIndex()
+ virtual QCString trFileIndex()
{ return "Ευρετήτιο Αρχείων"; }
/*! This is used in LaTeX as the title of the chapter containing
@@ -367,14 +373,14 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
* the documentation of all classes, structs and unions.
*/
virtual QCString trClassDocumentation()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Τεκμηρίωση Δομών Δεδομένων";
+ return "Τεκμηρίωση Δομών Δεδομένων";
}
else
{
- return "Τεκμηρίωση Κλάσεων";
+ return "Τεκμηρίωση Κλάσεων";
}
}
@@ -399,111 +405,105 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! This is used in LaTeX as the title of the document */
virtual QCString trReferenceManual()
{ return "Ενχειρίδιο Αναφοράς"; }
-
- /*! This is used in the documentation of a file as a header before the
+
+ /*! This is used in the documentation of a file as a header before the
* list of defines
*/
virtual QCString trDefines()
{ return "Ορισμοί"; }
- /*! This is used in the documentation of a file as a header before the
+ /*! This is used in the documentation of a file as a header before the
* list of function prototypes
*/
virtual QCString trFuncProtos()
{ return "Πρωτοτυπήσεις Συναρτήσεων"; }
- /*! This is used in the documentation of a file as a header before the
+ /*! This is used in the documentation of a file as a header before the
* list of typedefs
*/
virtual QCString trTypedefs()
{ return "Ορισμοί Τύπων"; }
- /*! This is used in the documentation of a file as a header before the
+ /*! This is used in the documentation of a file as a header before the
* list of enumerations
*/
virtual QCString trEnumerations()
{ return "Απαριθμήσεις"; }
- /*! This is used in the documentation of a file as a header before the
+ /*! This is used in the documentation of a file as a header before the
* list of (global) functions
*/
virtual QCString trFunctions()
{ return "Συναρτήσεις"; }
- /*! This is used in the documentation of a file as a header before the
+ /*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trVariables()
{ return "Μεταβλητές"; }
- /*! This is used in the documentation of a file as a header before the
+ /*! This is used in the documentation of a file as a header before the
* list of (global) variables
*/
virtual QCString trEnumerationValues()
{ return "Τιμές Απαριθμήσεων"; }
-
+
/*! This is used in the documentation of a file before the list of
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
{ return "Τεκμηρίωση Ορισμών"; }
- /*! This is used in the documentation of a file/namespace before the list
+ /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
*/
virtual QCString trFunctionPrototypeDocumentation()
{ return "Τεκμηρίωση Πρωτοτυπήσεων των Συναρτήσεων"; }
- /*! This is used in the documentation of a file/namespace before the list
+ /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for typedefs
*/
virtual QCString trTypedefDocumentation()
{ return "Τεκμηρίωση Ορισμών Τύπων"; }
- /*! This is used in the documentation of a file/namespace before the list
+ /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for enumeration types
*/
virtual QCString trEnumerationTypeDocumentation()
{ return "Τεκμηρίωση Απαριθμήσεων"; }
- /*! This is used in the documentation of a file/namespace before the list
- * of documentation blocks for enumeration values
- */
- virtual QCString trEnumerationValueDocumentation()
- { return "Τεκμηρίωση Τιμών των Απαριθμήσεων"; }
-
- /*! This is used in the documentation of a file/namespace before the list
+ /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
{ return "Τεκμηρίωση Συναρτήσεων"; }
- /*! This is used in the documentation of a file/namespace before the list
+ /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for variables
*/
virtual QCString trVariableDocumentation()
{ return "Τεκμηρίωση Μεταβλητών"; }
- /*! This is used in the documentation of a file/namespace/group before
+ /*! This is used in the documentation of a file/namespace/group before
* the list of links to documented compounds
*/
virtual QCString trCompounds()
- {
+ {
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{
- return "Δομές Δεδομένων";
+ return "Δομές Δεδομένων";
}
else
{
- return "Συσσωματώματα";
+ return "Συσσωματώματα";
}
}
- /*! This is used in the standard footer of each page and indicates when
- * the page was generated
+ /*! This is used in the standard footer of each page and indicates when
+ * the page was generated
*/
virtual QCString trGeneratedAt(const char *date,const char *projName)
- {
+ {
QCString result=(QCString)"Δημιουργήθηκε στις "+date;
if (projName) result+=(QCString)" για "+projName;
result+=(QCString)" από";
@@ -521,7 +521,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
return (QCString)"Διάγραμμα κληρονομικότητας για την "+clName+":";
}
-
+
/*! this text is generated when the \\internal command is used. */
virtual QCString trForInternalUseOnly()
{ return "Μόνο για εσωτερική χρήση."; }
@@ -561,7 +561,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! this text is generated when the \\exception command is used. */
virtual QCString trExceptions()
{ return "Εξαίρεση"; }
-
+
/*! this text is used in the title page of a LaTeX document. */
virtual QCString trGeneratedBy()
{ return "Δημιουργήθηκε από "; }
@@ -569,17 +569,17 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990307
//////////////////////////////////////////////////////////////////////////
-
+
/*! used as the title of page containing all the index of all namespaces. */
virtual QCString trNamespaceList()
- { return "Λίστα Χώρων Ονομάτων"; }
+ { return "Λίστα Namespace"; }
/*! used as an introduction to the namespace list */
virtual QCString trNamespaceListDescription(bool extractAll)
{
QCString result="Ακολουθέι η λίστα όλων των ";
if (!extractAll) result+="τεκμηριωμένων ";
- result+="χώρων ονομάτων με σύντομες περιγραφές:";
+ result+="Namespace με σύντομες περιγραφές:";
return result;
}
@@ -588,17 +588,17 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
*/
virtual QCString trFriends()
{ return "Φίλοι"; }
-
+
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990405
//////////////////////////////////////////////////////////////////////////
-
+
/*! used in the class documentation as a header before the list of all
- * related classes
+ * related classes
*/
virtual QCString trRelatedFunctionDocumentation()
- { return "Τεκμηρίωση Φίλικών και Συσχετιζόμενων Συναρτήσεων"; }
-
+ { return "Τεκμηρίωση Φιλικών και Συσχετιζόμενων Συναρτήσεων"; }
+
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
@@ -616,12 +616,12 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
case ClassDef::Struct: result+=" Δομής"; break;
case ClassDef::Union: result+=" Ένωσης"; break;
case ClassDef::Interface: result+=" Διαπροσωπίας"; break;
- case ClassDef::Protocol: result+=" Protocol"; break; // translate me!
- case ClassDef::Category: result+=" Category"; break; // translate me!
+ case ClassDef::Protocol: result+=" Πρωτοκόλλου"; break;
+ case ClassDef::Category: result+=" Κατηγορίας"; break;
case ClassDef::Exception: result+=" Εξαίρεσης"; break;
}
if (isTemplate) result+=" Template";
-
+
return result;
}
@@ -629,7 +629,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
virtual QCString trFileReference(const char *fileName)
{
QCString result=fileName;
- result+=" Αναφορά Αρχείου";
+ result+=" Αναφορά Αρχείου";
return result;
}
@@ -637,10 +637,10 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
virtual QCString trNamespaceReference(const char *namespaceName)
{
QCString result=namespaceName;
- result+=" Αναφορά Χώρου Ονομάτων";
+ result+=" Αναφορά Namespace";
return result;
}
-
+
virtual QCString trPublicMembers()
{ return "Δημόσιες Μέθοδοι"; }
virtual QCString trPublicSlots()
@@ -661,7 +661,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{ return "Ιδιοτικά Slots"; }
virtual QCString trStaticPrivateMembers()
{ return "Στατικές Ιδιοτικές Μέδοδοι"; }
-
+
/*! this function is used to produce a comma-separated list of items.
* use generateMarker(i) to indicate where item i should be put.
*/
@@ -670,23 +670,23 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
QCString result;
int i;
// the inherits list contain `numEntries' classes
- for (i=0;i<numEntries;i++)
+ for (i=0;i<numEntries;i++)
{
// use generateMarker to generate placeholders for the class links!
- result+=generateMarker(i); // generate marker for entry i in the list
+ result+=generateMarker(i); // generate marker for entry i in the list
// (order is left to right)
-
+
if (i!=numEntries-1) // not the last entry, so we need a separator
{
- if (i<numEntries-2) // not the fore last entry
+ if (i<numEntries-2) // not the fore last entry
result+=", ";
else // the fore last entry
result+=", και ";
}
}
- return result;
+ return result;
}
-
+
/*! used in class documentation to produce a list of base classes,
* if class diagrams are disabled.
*/
@@ -703,12 +703,12 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
return "Κληρονομείται από "+trWriteList(numEntries)+".";
}
- /*! used in member documentation blocks to produce a list of
+ /*! used in member documentation blocks to produce a list of
* members that are hidden by this one.
*/
virtual QCString trReimplementedFromList(int numEntries)
{
- return "Επαναυλοποιείται από "+trWriteList(numEntries)+".";
+ return "Επαναϋλοποιείται από "+trWriteList(numEntries)+".";
}
/*! used in member documentation blocks to produce a list of
@@ -716,7 +716,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
*/
virtual QCString trReimplementedInList(int numEntries)
{
- return "Επαναυλοποιείται στην "+trWriteList(numEntries)+".";
+ return "Επαναϋλοποιείται στην "+trWriteList(numEntries)+".";
}
/*! This is put above each page as a link to all members of namespaces. */
@@ -725,17 +725,17 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! This is an introduction to the page with all namespace members */
virtual QCString trNamespaceMemberDescription(bool extractAll)
- {
+ {
QCString result="Ακολουθεί η λίστα όλων των ";
if (!extractAll) result+="τεκμηριωμένων ";
result+="μελών χώρων ονομάτων με συνδέσμους ";
- if (extractAll)
+ if (extractAll)
result+="στην τεκμηρίωση του χώρου ονομάτων για κάθε μέλος:";
- else
+ else
result+="στους χώρους ονομάτων που ανήκουν:";
return result;
}
- /*! This is used in LaTeX as the title of the chapter with the
+ /*! This is used in LaTeX as the title of the chapter with the
* index of all namespaces.
*/
virtual QCString trNamespaceIndex()
@@ -803,7 +803,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
virtual QCString trMainPage()
{ return "Κύρια Σελίδα"; }
- /*! This is used in references to page that are put in the LaTeX
+ /*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
@@ -852,7 +852,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! header that is put before the list of constructor/destructors. */
virtual QCString trConstructorDocumentation()
{
- return "Τεκμηρίωση Constructor & Destructor";
+ return "Τεκμηρίωση Constructor & Destructor";
}
/*! Used in the file documentation to point to the corresponding sources. */
virtual QCString trGotoSourceCode()
@@ -909,7 +909,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
//////////////////////////////////////////////////////////////////////////
// new since 1.1.0
//////////////////////////////////////////////////////////////////////////
-
+
virtual QCString trNote()
{
return "Σημείωση";
@@ -998,7 +998,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
return "Από";
}
-
+
//////////////////////////////////////////////////////////////////////////
// new since 1.1.5
//////////////////////////////////////////////////////////////////////////
@@ -1008,7 +1008,7 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
return "Υπόμνημα Διαγραμμάτων";
}
- /*! page explaining how the dot graph's should be interpreted
+ /*! page explaining how the dot graph's should be interpreted
* The %A in the text below are to prevent link to classes called "A".
*/
virtual QCString trLegendDocs()
@@ -1072,11 +1072,11 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
return "υπόμνημα";
}
-
+
//////////////////////////////////////////////////////////////////////////
// new since 1.2.0
//////////////////////////////////////////////////////////////////////////
-
+
/*! Used as a marker that is put before a test item */
virtual QCString trTest()
{
@@ -1164,11 +1164,11 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
return "Τιμή:";
}
-
+
//////////////////////////////////////////////////////////////////////////
// new since 1.2.5
//////////////////////////////////////////////////////////////////////////
-
+
/*! Used as a marker that is put before a \\bug item */
virtual QCString trBug()
{
@@ -1184,9 +1184,9 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
// new since 1.2.6
//////////////////////////////////////////////////////////////////////////
- /*! Used as ansicpg for RTF file
- *
- * The following table shows the correlation of Charset name, Charset Value and
+ /*! Used as ansicpg for RTF file
+ *
+ * The following table shows the correlation of Charset name, Charset Value and
* <pre>
* Codepage number:
* Charset Name Charset Value(hex) Codepage number
@@ -1207,15 +1207,15 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
* GB2313_CHARSET 134 (x86) 936
* CHINESEBIG5_CHARSET 136 (x88) 950
* </pre>
- *
+ *
*/
virtual QCString trRTFansicp()
{
return "1253";
}
-
- /*! Used as ansicpg for RTF fcharset
+
+ /*! Used as ansicpg for RTF fcharset
* \see trRTFansicp() for a table of possible values.
*/
virtual QCString trRTFCharSet()
@@ -1228,93 +1228,93 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
{
return "Ευρετήριο";
}
-
+
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trClass(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Κλάση" : "κλάση"));
if (!singular) result+="";
- return result;
+ return result;
}
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trFile(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Αρχεί" : "αρχεί"));
if (!singular) result+="α"; else result+="ο";
- return result;
+ return result;
}
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trNamespace(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Namespace" : "namespace"));
if (!singular) result+="s";
- return result;
+ return result;
}
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trGroup(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Ομάδ" : "ομάδ"));
if (!singular) result+="ες"; else result+="α";
- return result;
+ return result;
}
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trPage(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Σελίδ" : "σελίδ"));
if (!singular) result+="ες"; else result+="α";
- return result;
+ return result;
}
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trMember(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Μέλ" : "μέλ"));
if (!singular) result+="η"; else result+="ος";
- return result;
+ return result;
}
-
+
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trField(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Πεδί" : "πεδί"));
if (!singular) result+="α"; else result+="ο";
- return result;
+ return result;
}
/*! This is used for translation of the word that will possibly
- * be followed by a single name or by a list of names
+ * be followed by a single name or by a list of names
* of the category.
*/
virtual QCString trGlobal(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Καθολικ" : "καθολικ"));
if (!singular) result+="ές"; else result+="ή";
- return result;
+ return result;
}
//////////////////////////////////////////////////////////////////////////
@@ -1324,12 +1324,278 @@ class TranslatorGreek : public TranslatorAdapter_1_2_11
/*! This text is generated when the \\author command is used and
* for the author section in man pages. */
virtual QCString trAuthor(bool first_capital, bool singular)
- {
+ {
QCString result((first_capital ? "Συγραφ" : "συγραφ"));
if (!singular) result+=""; else result+="έας";
- return result;
+ return result;
}
-};
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.11
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This text is put before the list of members referenced by a member
+ */
+ virtual QCString trReferences()
+ {
+ return "Αναφορές";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.13
+//////////////////////////////////////////////////////////////////////////
+
+ /*! used in member documentation blocks to produce a list of
+ * members that are implemented by this one.
+ */
+ virtual QCString trImplementedFromList(int numEntries)
+ {
+ return "Υλοποιεί "+trWriteList(numEntries)+".";
+ }
+
+ /*! used in member documentation blocks to produce a list of
+ * all members that implement this abstract member.
+ */
+ virtual QCString trImplementedInList(int numEntries)
+ {
+ return "Υλοποιείται από "+trWriteList(numEntries)+".";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.16
+//////////////////////////////////////////////////////////////////////////
+
+ /*! used in RTF documentation as a heading for the Table
+ * of Contents.
+ */
+ virtual QCString trRTFTableOfContents()
+ {
+ return "Πίνακας Περιεχομένων";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.17
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as the header of the list of item that have been
+ * flagged deprecated
+ */
+ virtual QCString trDeprecatedList()
+ {
+ return "Λίστα Καταργημένων";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.2.18
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a header for declaration section of the events found in
+ * a C# program
+ */
+ virtual QCString trEvents()
+ {
+ return "Συμβάντα";
+ }
+ /*! Header used for the documentation section of a class' events. */
+ virtual QCString trEventDocumentation()
+ {
+ return "Τεκμηρίωση Συμβάντων";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used as a heading for a list of Java class types with package scope.
+ */
+ virtual QCString trPackageTypes()
+ {
+ return "Τύποι Πακέτων";
+ }
+ /*! Used as a heading for a list of Java class functions with package
+ * scope.
+ */
+ virtual QCString trPackageMembers()
+ {
+ return "Συναρτήσεις Πακέτου";
+ }
+ /*! Used as a heading for a list of static Java class functions with
+ * package scope.
+ */
+ virtual QCString trStaticPackageMembers()
+ {
+ return "Στατικές Συναρτήσεις Πακέτου";
+ }
+ /*! Used as a heading for a list of Java class variables with package
+ * scope.
+ */
+ virtual QCString trPackageAttribs()
+ {
+ return "Μεταβλητές Πακέτου";
+ }
+ /*! Used as a heading for a list of static Java class variables with
+ * package scope.
+ */
+ virtual QCString trStaticPackageAttribs()
+ {
+ return "Στατικές Μεταβλητές Πακέτου";
+ }
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.1
+//////////////////////////////////////////////////////////////////////////
+
+ /*! Used in the quick index of a class/file/namespace member list page
+ * to link to the unfiltered list of all members.
+ */
+ virtual QCString trAll()
+ {
+ return "Όλα";
+ }
+ /*! Put in front of the call graph for a function. */
+ virtual QCString trCallGraph()
+ {
+ return "Το γράφημα δείχνει ποιές συναρτήσεις καλούνται από αυτή:";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.3
+//////////////////////////////////////////////////////////////////////////
+
+ /*! When the search engine is enabled this text is put in the header
+ * of each page before the field where one can enter the text to search
+ * for.
+ */
+ virtual QCString trSearchForIndex()
+ {
+ return "Αναζήτηση για";
+ }
+ /*! This string is used as the title for the page listing the search
+ * results.
+ */
+ virtual QCString trSearchResultsTitle()
+ {
+ return "Αποτελέσματα Αναζήτησης";
+ }
+ /*! This string is put just before listing the search results. The
+ * text can be different depending on the number of documents found.
+ * Inside the text you can put the special marker $num to insert
+ * the number representing the actual number of search results.
+ * The @a numDocuments parameter can be either 0, 1 or 2, where the
+ * value 2 represents 2 or more matches. HTML markup is allowed inside
+ * the returned string.
+ */
+ virtual QCString trSearchResults(int numDocuments)
+ {
+ if (numDocuments==0)
+ {
+ return "Συγγνώμη, δεν υπάρχει κείμενο που να ταιριάζει με την αίτησή σας.";
+ }
+ else if (numDocuments==1)
+ {
+ return "Βρέθηκε <b>1</b> κείμενο που ταιριάζει με την αίτησή σας.";
+ }
+ else
+ {
+ return "Βρέθηκαν <b>$num</b> κείμενα που ταιριάζουν με την αίτησή σας. "
+ "Πρώτα εμφανίζονται τα κείμενα που ταιριάζουν πιο πολύ.";
+ }
+ }
+ /*! This string is put before the list of matched words, for each search
+ * result. What follows is the list of words that matched the query.
+ */
+ virtual QCString trSearchMatches()
+ {
+ return "Ταίριαξαν:";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.8
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used in HTML as the title of page with source code for file filename
+ */
+ virtual QCString trSourceFile(QCString& filename)
+ {
+ return "Αρχείο κώδικα " + filename;
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.9
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used as the name of the chapter containing the directory
+ * hierarchy.
+ */
+ virtual QCString trDirIndex()
+ { return "Ιεραρχία Καταλόγου"; }
+
+ /*! This is used as the name of the chapter containing the documentation
+ * of the directories.
+ */
+ virtual QCString trDirDocumentation()
+ { return "Τεκμηρίωση Καταλόγου"; }
+
+ /*! This is used as the title of the directory index and also in the
+ * Quick links of an HTML page, to link to the directory hierarchy.
+ */
+ virtual QCString trDirectories()
+ { return "Κατάλογοι"; }
+
+ /*! This returns a sentences that introduces the directory hierarchy.
+ * and the fact that it is sorted alphabetically per level
+ */
+ virtual QCString trDirDescription()
+ {
+ return "Η ιεραρχία καταλόγων ταξινομήθηκε αλφαβητικά, αλλά όχι πολύ αυστηρά:";
+ }
+
+ /*! This returns the title of a directory page. The name of the
+ * directory is passed via \a dirName.
+ */
+ virtual QCString trDirReference(const char *dirName)
+ { QCString result=QCString("Αναφορά του Καταλόγου ") + dirName; return result; }
+
+ /*! This returns the word directory with or without starting capital
+ * (\a first_capital) and in sigular or plural form (\a singular).
+ */
+ virtual QCString trDir(bool first_capital, bool singular)
+ {
+ QCString result((first_capital ? "Κατάλογο" : "κατάλογο"));
+ if (singular) result+="ς"; else result+="ι";
+ return result;
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.1
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This text is added to the documentation when the \\overload command
+ * is used for a overloaded function.
+ */
+ virtual QCString trOverloadText()
+ {
+ return "Αυτή είναι μια υπερφορτωμένη συνάρτηση-μέλος, "
+ "που παρέχεται για ευκολία. Διαφέρει από την παραπάνω "
+ "συνάρτηση μόνο στον τύπο των παραμέτρων που δέχεται.";
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used to introduce a caller (or called-by) graph */
+ virtual QCString trCallerGraph()
+ {
+ return "Το γράφημα δείχνει από ποιές συναρτήσεις καλείται αυτή η συνάρτηση:";
+ }
+
+ /*! This is used in the documentation of a file/namespace before the list
+ * of documentation blocks for enumeration values
+ */
+ virtual QCString trEnumerationValueDocumentation()
+ { return "Enumerator Documentation"; }
+
+
+};
#endif
diff --git a/src/translator_nl.h b/src/translator_nl.h
index 5bad0ee..42d48e6 100644
--- a/src/translator_nl.h
+++ b/src/translator_nl.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -677,7 +677,7 @@ class TranslatorDutch : public Translator
"<p>\n"
"De rechthoeken in the bovenstaande graaf hebben de volgende betekenis:\n"
"<ul>\n"
- "<li>Een gevulde zwarte rechthoek representeert de structure of klasse waarvoor "
+ "<li>Een gevulde grijze rechthoek representeert de structure of klasse waarvoor "
"de graaf is gegeneerd.\n"
"<li>Een rechthoek met een zwarte rand representeert een gedocumenteerde structure of klasse.\n"
"<li>Een rechthoek met een grijze rand representeert een ongedocumenteerde structure of klasse.\n"
diff --git a/src/translator_pt.h b/src/translator_pt.h
index e53efdd..711fa52 100644
--- a/src/translator_pt.h
+++ b/src/translator_pt.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/translator_ro.h b/src/translator_ro.h
index fe12908..a2ca363 100644
--- a/src/translator_ro.h
+++ b/src/translator_ro.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/translator_si.h b/src/translator_si.h
index 005ffc7..8bb16cc 100644
--- a/src/translator_si.h
+++ b/src/translator_si.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/util.cpp b/src/util.cpp
index 1cef237..dac8532 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,6 +1,6 @@
/*****************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
@@ -626,13 +626,16 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
bool isCached = md->isTypedefValCached(); // value already cached
if (isCached)
{
- //printf("Already cached %s->%s\n",
+ //printf("Already cached %s->%s [%s]\n",
// md->name().data(),
- // md->getCachedTypedefVal()?md->getCachedTypedefVal()->name().data():"<none>");
+ // md->getCachedTypedefVal()?md->getCachedTypedefVal()->name().data():"<none>",
+ // md->getCachedResolvedTypedef()?md->getCachedResolvedTypedef().data():"<none>");
+
if (pTemplSpec) *pTemplSpec = md->getCachedTypedefTemplSpec();
if (pResolvedType) *pResolvedType = md->getCachedResolvedTypedef();
return md->getCachedTypedefVal();
}
+ //printf("new typedef\n");
QCString qname = md->qualifiedName();
if (g_resolvedTypedefs.find(qname)) return 0; // typedef already done
@@ -648,9 +651,9 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
}
type=type.left(ip+1);
int sp=0;
- if (type.stripPrefix("const ")) sp+=6; // strip leading "const"
+ if (type.stripPrefix("const ")) sp+=6; // strip leading "const"
if (type.stripPrefix("struct ")) sp+=7; // strip leading "struct"
- if (type.stripPrefix("union ")) sp+=6; // strip leading "union"
+ if (type.stripPrefix("union ")) sp+=6; // strip leading "union"
while (sp<tl && type.at(sp)==' ') sp++;
MemberDef *memTypeDef = 0;
ClassDef *result = getResolvedClassRec(md->getOuterScope(),
@@ -677,6 +680,8 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
if (pTemplSpec) *pTemplSpec = type.mid(i);
result = getResolvedClassRec(md->getOuterScope(),fileScope,
type.left(i),0,0,pResolvedType);
+ //printf("result=%p pRresolvedType=%s sp=%d ip=%d tl=%d\n",
+ // result,pResolvedType?pResolvedType->data():"<none>",sp,ip,tl);
}
else if (si!=-1) // A::B
{
@@ -694,7 +699,7 @@ ClassDef *newResolveTypedef(FileDef *fileScope,MemberDef *md,
pResolvedType);
}
- if (result) ip=si+sp+1;
+ //if (result) ip=si+sp+1;
}
done:
@@ -703,6 +708,7 @@ done:
if (result)
{
*pResolvedType=result->qualifiedName();
+ //printf("*pResolvedType=%s\n",pResolvedType->data());
if (sp>0) pResolvedType->prepend(typedefValue.left(sp));
if (ip<tl-1) pResolvedType->append(typedefValue.right(tl-ip-1));
}
@@ -719,6 +725,7 @@ done:
{
//printf("setting cached typedef %p in result %p\n",md,result);
//printf("==> %s (%s,%d)\n",result->name().data(),result->getDefFileName().data(),result->getDefLine());
+ //printf("*pResolvedType=%s\n",pResolvedType?pResolvedType->data():"<none>");
md->cacheTypedefVal(result,
pTemplSpec ? *pTemplSpec : QCString(),
pResolvedType ? *pResolvedType : QCString()
@@ -840,6 +847,7 @@ static Definition *followPath(Definition *start,FileDef *fileScope,const QCStrin
}
}
Definition *next = current->findInnerCompound(qualScopePart);
+ //printf("++ Looking for %s inside %s result %p\n",qualScopePart.data(),current->name().data(),next?next->name().data():"<null>");
if (next==0) // failed to follow the path
{
if (current->definitionType()==Definition::TypeNamespace)
@@ -1015,7 +1023,18 @@ done:
/* Returns the "distance" (=number of levels up) from item to scope, or -1
* if item in not in this scope. The explicitScopePart limits the search
- * to scopes that match \a scope plus the explicit part.
+ * to scopes that match \a scope (or its parent scope(s)) plus the explicit part.
+ * Example:
+ *
+ * class A { public: class I {}; };
+ * class B { public: class J {}; };
+ *
+ * - Looking for item=='J' inside scope=='B' will return 0.
+ * - Looking for item=='I' inside scope=='B' will return -1
+ * (as it is not found in B nor in the global scope).
+ * - Looking for item=='A::I' inside scope=='B', first the match B::A::I is tried but
+ * not found and then A::I is searched in the global scope, which matches and
+ * thus the result is 1.
*/
int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
Definition *item,const QCString &explicitScopePart)
@@ -1039,11 +1058,30 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
Definition *newScope = followPath(scope,fileScope,explicitScopePart);
if (newScope) // explicitScope is inside scope => newScope is the result
{
+ Definition *itemScope = item->getOuterScope();
//printf("scope traversal successful %s<->%s!\n",item->getOuterScope()->name().data(),newScope->name().data());
- if (item->getOuterScope()==newScope)
+ if (newScope && newScope->definitionType()==Definition::TypeClass)
+ {
+ //ClassDef *cd = (ClassDef *)newScope;
+ //printf("---> Class %s: bases=%p\n",cd->name().data(),cd->baseClasses());
+ }
+ if (itemScope==newScope) // exact match of scopes => distance==0
{
//printf("> found it\n");
}
+ else if (itemScope && newScope &&
+ itemScope->definitionType()==Definition::TypeClass &&
+ newScope->definitionType()==Definition::TypeClass &&
+ ((ClassDef*)newScope)->isBaseClass((ClassDef*)itemScope,TRUE,0)
+ )
+ {
+ // inheritance is also ok. Example: looking for B::I, where
+ // class A { public: class I {} };
+ // class B : public A {}
+
+ //printf("outerScope(%s) is base class of newScope(%s)\n",
+ // outerScope->name().data(),newScope->name().data());
+ }
else
{
int i=-1;
@@ -1134,19 +1172,6 @@ int isAccessibleFromWithExpScope(Definition *scope,FileDef *fileScope,
//printf("> result=%d\n",i);
result= (i==-1) ? -1 : i+1;
}
-#if 0
- if (scope!=Doxygen::globalScope)
- {
- int i=isAccessibleFromWithExpScope(scope->getOuterScope(),fileScope,
- item,explicitScopePart);
- //printf("> result=%d\n",i);
- result= (i==-1) ? -1 : i+1;
- }
- else
- {
- result = -1;
- }
-#endif
}
done:
//printf("> result=%d\n",result);
@@ -1175,7 +1200,7 @@ static void getResolvedSymbol(Definition *scope,
//printf(" found type %x name=%s d=%p\n",
// d->definitionType(),d->name().data(),d);
- // only look at classes and members
+ // only look at classes and members that are enums or typedefs
if (d->definitionType()==Definition::TypeClass ||
(d->definitionType()==Definition::TypeMember &&
(((MemberDef*)d)->isTypedef() || ((MemberDef*)d)->isEnumerate())
@@ -1418,7 +1443,7 @@ ClassDef *getResolvedClassRec(Definition *scope,
QCString bestResolvedType;
int minDistance=10000; // init at "infinite"
- if (di->definitionType()==DefinitionIntf::TypeSymbolList)
+ if (di->definitionType()==DefinitionIntf::TypeSymbolList) // not a unique name
{
DefinitionListIterator dli(*(DefinitionList*)di);
Definition *d;
@@ -1430,7 +1455,7 @@ ClassDef *getResolvedClassRec(Definition *scope,
bestResolvedType);
}
}
- else
+ else // unique name
{
Definition *d = (Definition *)di;
getResolvedSymbol(scope,fileScope,d,explicitScopePart,
@@ -1540,6 +1565,7 @@ static const char virtualScope[] = { 'v', 'i', 'r', 't', 'u', 'a', 'l', ':' };
QCString removeRedundantWhiteSpace(const QCString &s)
{
+ static bool cliSupport = Config_getBool("CPP_CLI_SUPPORT");
if (s.isEmpty()) return s;
QCString result;
uint i;
@@ -1644,6 +1670,7 @@ nextChar:
if (rl>0 && (isId(result.at(rl-1)) || result.at(rl-1)=='>')) result+=' ';
}
result+=c;
+ if (cliSupport && (c=='^' || c=='%') && i>1 && isId(s.at(i-1))) result+=' '; // C++/CLI: Type^ name and Type% name
}
}
//printf("removeRedundantWhiteSpace(`%s')=`%s'\n",s.data(),result.data());
@@ -2183,7 +2210,7 @@ int minClassDistance(const ClassDef *cd,const ClassDef *bcd,int level)
if (level==256)
{
err("Error: Internal inconsistency: found class %s seem to have a recursive "
- "inheritance relation! Please send a bug report to dimitri@stack.nl",cd->name().data());
+ "inheritance relation! Please send a bug report to dimitri@stack.nl\n",cd->name().data());
return -1;
}
int m=maxInheritanceDepth;
@@ -2948,12 +2975,20 @@ static QCString stripDeclKeywords(const QCString &s)
// forward decl for circular dependencies
static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type);
-QCString getCanonicalTemplateSpec(Definition *d,FileDef *fs,const QCString& spec)
+QCString getCanonicalTemplateSpec(Definition *d,FileDef *,const QCString& spec)
{
- //printf("getCanonicalTemplateSpec(%s)\n",spec.data());
QCString templSpec = spec.stripWhiteSpace();
- if (templSpec.isEmpty() || templSpec.at(0) != '<') return templSpec;
- return "< " + extractCanonicalType(d,fs,templSpec.right(templSpec.length()-1).stripWhiteSpace());
+ //if (!templSpec.isEmpty() && templSpec.at(0) == '<')
+ //{
+ // templSpec = "< " + extractCanonicalType(d,fs,templSpec.right(templSpec.length()-1).stripWhiteSpace());
+ //}
+ QCString resolvedType = resolveTypeDef(d,spec);
+ if (!resolvedType.isEmpty()) // not known as a typedef either
+ {
+ templSpec = resolvedType;
+ }
+ //printf("getCanonicalTemplateSpec(%s)=%s\n",spec.data(),templSpec.data());
+ return templSpec;
}
@@ -3096,14 +3131,14 @@ static QCString extractCanonicalType(Definition *d,FileDef *fs,QCString type)
// foreach identifier in the type
{
//printf(" i=%d p=%d\n",i,p);
- canType += type.mid(pp,i-pp);
+ if (i>pp) canType += type.mid(pp,i-pp);
- //printf(" word=%s templSpec=%s\n",word.data(),templSpec.data());
canType += getCanonicalTypeForIdentifier(d,fs,word,&templSpec);
+ //printf(" word=%s templSpec=%s canType=%s\n",word.data(),templSpec.data(),canType.data());
if (!templSpec.isEmpty()) // if we didn't use up the templSpec already
- // (i.e. type is not a template specialization)
- // then resolve any identifiers inside.
+ // (i.e. type is not a template specialization)
+ // then resolve any identifiers inside.
{
static QRegExp re("[a-z_A-Z][a-z_A-Z0-9]*");
int tp=0,tl,ti;
diff --git a/src/util.h b/src/util.h
index b6cd1ba..0253813 100644
--- a/src/util.h
+++ b/src/util.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/version.h b/src/version.h
index 226de7e..b86bb2e 100644
--- a/src/version.h
+++ b/src/version.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 3beb861..514d681 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
@@ -721,7 +721,7 @@ void XmlDocVisitor::visitPost(DocRef *ref)
{
if (m_hide) return;
if (!ref->file().isEmpty()) endLink();
- m_t << " ";
+ //m_t << " ";
}
void XmlDocVisitor::visitPre(DocSecRefItem *ref)
diff --git a/src/xmldocvisitor.h b/src/xmldocvisitor.h
index c347e0e..dcb879f 100644
--- a/src/xmldocvisitor.h
+++ b/src/xmldocvisitor.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 3b416d0..5d0763c 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
@@ -636,6 +636,21 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (md->isInline()) t << "yes"; else t << "no";
t << "\"";
+ if (md->isFinal())
+ {
+ t << " final=\"yes\"";
+ }
+
+ if (md->isSealed())
+ {
+ t << " sealed=\"yes\"";
+ }
+
+ if (md->isNew())
+ {
+ t << " new=\"yes\"";
+ }
+
t << " virt=\"";
switch (md->virtualness())
{
@@ -657,6 +672,11 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
if (md->isMutable()) t << "yes"; else t << "no";
t << "\"";
+ if (md->isInitonly())
+ {
+ t << " initonly=\"yes\"";
+ }
+
}
else if (md->memberType() == MemberDef::Property)
{
@@ -667,8 +687,29 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
t << " writable=\"";
if (md->isWritable()) t << "yes"; else t << "no";
t << "\"";
+
+ t << " gettable=\"";
+ if (md->isGettable()) t << "yes"; else t << "no";
+ t << "\"";
+
+ t << " settable=\"";
+ if (md->isSettable()) t << "yes"; else t << "no";
+ t << "\"";
}
+ else if (md->memberType() == MemberDef::Event)
+ {
+ t << " add=\"";
+ if (md->isAddable()) t << "yes"; else t << "no";
+ t << "\"";
+
+ t << " remove=\"";
+ if (md->isRemovable()) t << "yes"; else t << "no";
+ t << "\"";
+ t << " raise=\"";
+ if (md->isRaisable()) t << "yes"; else t << "no";
+ t << "\"";
+ }
t << ">" << endl;
@@ -1394,7 +1435,7 @@ static void generateXMLForNamespace(NamespaceDef *nd,QTextStream &ti)
MemberList *ml;
for (mli.toFirst();(ml=mli.current());++mli)
{
- if ((ml->listType()&MemberList::declarationLists)==0)
+ if ((ml->listType()&MemberList::declarationLists)!=0)
{
generateXMLSection(nd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
@@ -1537,7 +1578,7 @@ static void generateXMLForFile(FileDef *fd,QTextStream &ti)
MemberList *ml;
for (mli.toFirst();(ml=mli.current());++mli)
{
- if ((ml->listType()&MemberList::declarationLists)==0)
+ if ((ml->listType()&MemberList::declarationLists)!=0)
{
generateXMLSection(fd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
@@ -1627,7 +1668,7 @@ static void generateXMLForGroup(GroupDef *gd,QTextStream &ti)
MemberList *ml;
for (mli.toFirst();(ml=mli.current());++mli)
{
- if ((ml->listType()&MemberList::declarationLists)==0)
+ if ((ml->listType()&MemberList::declarationLists)!=0)
{
generateXMLSection(gd,ti,t,ml,g_xmlSectionMapper.find(ml->listType()));
}
diff --git a/src/xmlgen.h b/src/xmlgen.h
index 5193b76..c714903 100644
--- a/src/xmlgen.h
+++ b/src/xmlgen.h
@@ -1,6 +1,6 @@
/******************************************************************************
*
- *
+ * $Id$
*
* Copyright (C) 1997-2006 by Dimitri van Heesch.
*