summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <dimitri@stack.nl>2006-06-11 07:58:28 (GMT)
committerDimitri van Heesch <dimitri@stack.nl>2006-06-11 07:58:28 (GMT)
commit9dbdf881dc5f0644777cc5732e7751325b508c91 (patch)
tree30cd22ecad5caf15fa470d190298c4e98b02e971 /src
parent0674d909555d4b1fe1e000425195ef33b00fe1a5 (diff)
downloadDoxygen-9dbdf881dc5f0644777cc5732e7751325b508c91.zip
Doxygen-9dbdf881dc5f0644777cc5732e7751325b508c91.tar.gz
Doxygen-9dbdf881dc5f0644777cc5732e7751325b508c91.tar.bz2
Release-1.4.7
Diffstat (limited to 'src')
-rw-r--r--src/classdef.cpp15
-rw-r--r--src/code.l2
-rw-r--r--src/commentcnv.l3
-rw-r--r--src/commentscan.h3
-rw-r--r--src/commentscan.l31
-rw-r--r--src/config.l1
-rw-r--r--src/doctokenizer.l2
-rw-r--r--src/doxygen.cpp6
-rw-r--r--src/groupdef.cpp19
-rw-r--r--src/groupdef.h1
-rw-r--r--src/index.cpp17
-rw-r--r--src/memberdef.cpp29
-rw-r--r--src/memberdef.h2
-rw-r--r--src/memberlist.cpp27
-rw-r--r--src/memberlist.h8
-rw-r--r--src/pre.l4
-rw-r--r--src/pycode.l2
-rw-r--r--src/pyscanner.l1
-rw-r--r--src/scanner.l29
-rw-r--r--src/translator.h2
-rw-r--r--src/translator_adapter.h4
-rw-r--r--src/translator_br.h2
-rw-r--r--src/translator_cz.h16
-rw-r--r--src/translator_en.h14
-rw-r--r--src/translator_es.h73
-rw-r--r--src/translator_it.h13
26 files changed, 261 insertions, 65 deletions
diff --git a/src/classdef.cpp b/src/classdef.cpp
index cea3d69..5450b46 100644
--- a/src/classdef.cpp
+++ b/src/classdef.cpp
@@ -2055,22 +2055,27 @@ bool ClassDef::isLinkable() const
/*! the class is visible in a class diagram, or class hierarchy */
bool ClassDef::isVisibleInHierarchy()
{
- return // show all classes or a subclass is visible
- (Config_getBool("ALLEXTERNALS") || hasNonReferenceSuperClass()) &&
+ static bool allExternals = Config_getBool("ALLEXTERNALS");
+ static bool extractPrivate = Config_getBool("EXTRACT_PRIVATE");
+ static bool hideUndocClasses = Config_getBool("HIDE_UNDOC_CLASSES");
+ static bool extractStatic = Config_getBool("EXTRACT_STATIC");
+
+ return // show all classes or a subclass is visible
+ (allExternals || hasNonReferenceSuperClass()) &&
// and not an annonymous compound
name().find('@')==-1 &&
// not an artifically introduced class
!m_artificial &&
// and not privately inherited
- (m_prot!=Private || Config_getBool("EXTRACT_PRIVATE")) &&
+ (m_prot!=Private || extractPrivate) &&
// documented or shown anyway or documentation is external
(hasDocumentation() ||
- !Config_getBool("HIDE_UNDOC_CLASSES") ||
+ !hideUndocClasses ||
(m_templateMaster && m_templateMaster->hasDocumentation()) ||
isReference()
) &&
// is not part of an unnamed namespace or shown anyway
- (!m_isStatic || Config_getBool("EXTRACT_STATIC"));
+ (!m_isStatic || extractStatic);
}
bool ClassDef::hasDocumentation() const
diff --git a/src/code.l b/src/code.l
index f6acb71..07a3fc6 100644
--- a/src/code.l
+++ b/src/code.l
@@ -3152,7 +3152,7 @@ void parseCCode(CodeOutputInterface &od,const char *className,const QCString &s,
extern "C" { // some bogus code to keep the compiler happy
void codeYYdummy() { yy_flex_realloc(0,0); }
}
-#else
+#elif YY_FLEX_SUBMINOR_VERSION<33
#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
#endif
diff --git a/src/commentcnv.l b/src/commentcnv.l
index cf22972..a64d66a 100644
--- a/src/commentcnv.l
+++ b/src/commentcnv.l
@@ -493,8 +493,9 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
BEGIN(g_condCtx);
}
<CondLine>[ \t]*
-<CComment,ReadLine>[\\@]"cond"[ \t]*\n |
+<CComment,ReadLine>[\\@]"cond"[ \t\r]*\n |
<CondLine>. { // forgot section id?
+ if (YY_START!=CondLine) g_condCtx=YY_START;
bool oldSkip=g_skip;
startCondSection(" "); // fake section id causing the section to be hidden unconditionally
if (g_condCtx==CComment && !oldSkip && g_skip)
diff --git a/src/commentscan.h b/src/commentscan.h
index b2d3d0d..a30ae61 100644
--- a/src/commentscan.h
+++ b/src/commentscan.h
@@ -42,6 +42,8 @@ class ParserInterface;
* @param[in] isJavaDocStyle TRUE iff this comment block is in "JavaDoc" style.
* This means that it starts as a brief description until the end of
* the sentences is found and then proceeds as a detailed description.
+ * @param[in] isInbody TRUE iff this comment block is located in the body of
+ * a function.
* @param[in,out] prot The protection level in which this comment block was
* found. Commands in the comment block may override this.
* @param[in,out] position The character position within \a comment where the
@@ -63,6 +65,7 @@ bool parseCommentBlock(ParserInterface *parser,
int lineNr,
bool isBrief,
bool isJavaDocStyle,
+ bool isInbody,
Protection &prot,
int &position,
bool &newEntryNeeded
diff --git a/src/commentscan.l b/src/commentscan.l
index 47e8b5a..35f2566 100644
--- a/src/commentscan.l
+++ b/src/commentscan.l
@@ -261,7 +261,8 @@ enum OutputContext
{
OutputDoc,
OutputBrief,
- OutputXRef
+ OutputXRef,
+ OutputInbody
};
enum GuardType
@@ -299,7 +300,7 @@ static QCString inputString; // input string
static int inputPosition; // read pointer
static QCString yyFileName; // file name that is read from
static int yyLineNr; // line number in the input
-//static bool inBody; // was the comment found inside the body of a function?
+static bool inBody; // was the comment found inside the body of a function?
static OutputContext inContext; // are we inside the brief, details or xref part
static bool briefEndsAtDot; // does the brief description stop at a dot?
static QCString formulaText; // Running text of a formula
@@ -479,7 +480,14 @@ static void addXRefItem(const char *listName,const char *itemTitle,
docEntry->addSpecialListItem(listName,itemId);
QCString cmdString;
cmdString.sprintf("\\xrefitem %s %d\n",listName,itemId);
- docEntry->doc += cmdString;
+ if (inBody)
+ {
+ docEntry->inbodyDocs += cmdString;
+ }
+ else
+ {
+ docEntry->doc += cmdString;
+ }
SectionInfo *si=new SectionInfo(listName,anchorLabel,
sectionTitle,SectionInfo::Anchor);
Doxygen::sectionDict.insert(anchorLabel,si);
@@ -605,6 +613,7 @@ static inline void setOutput(OutputContext ctx)
}
inContext = ctx;
+ if (inContext!=OutputXRef && inBody) inContext=OutputInbody;
switch(inContext)
{
case OutputDoc:
@@ -629,6 +638,9 @@ static inline void setOutput(OutputContext ctx)
// first item found, so can't append to previous
//xrefAppendFlag = FALSE;
break;
+ case OutputInbody:
+ pOutputString = &current->inbodyDocs;
+ break;
}
}
@@ -780,7 +792,7 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
<Comment>("\\"[a-z_A-Z]+)+"\\" { // directory (or chain of commands!)
addOutput(yytext);
}
-<Comment>{XREFCMD}/[^a-z_A-Z]* { // command that can end a brief description
+<Comment>{XREFCMD}/[^a-z_A-Z]* { // xref command
if (inContext!=OutputXRef)
{
briefEndsAtDot=FALSE;
@@ -826,7 +838,12 @@ MAILADR [a-z_A-Z0-9.+\-]+"@"[a-z_A-Z0-9\-]+("."[a-z_A-Z0-9\-]+)+[a-z_A-Z0-9\-]
// yuk, this is probably not very portable across lex implementations,
// but we need to know the position in the input buffer where this
// rule matched.
+ // for flex 2.5.33+ we should use YY_CURRENT_BUFFER_LVALUE
+#if YY_FLEX_MINOR_VERSION>=5 && YY_FLEX_SUBMINOR_VERSION>=33
+ inputPosition=prevPosition + yy_bp - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+#else
inputPosition=prevPosition + yy_bp - yy_current_buffer->yy_ch_buf;
+#endif
yyterminate();
}
}
@@ -2177,6 +2194,7 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
/* in */ int lineNr,
/* in */ bool isBrief,
/* in */ bool isJavaDocStyle,
+ /* in */ bool isInbody,
/* in,out */ Protection &prot,
/* in,out */ int &position,
/* out */ bool &newEntryNeeded
@@ -2202,10 +2220,15 @@ bool parseCommentBlock(/* in */ ParserInterface *parser,
xrefAppendFlag = FALSE;
insidePre = FALSE;
parseMore = FALSE;
+ inBody = isInbody;
outputXRef.resize(0);
setOutput( isBrief || isJavaDocStyle ? OutputBrief : OutputDoc );
briefEndsAtDot = isJavaDocStyle;
+ if (!current->inbodyDocs.isEmpty() && isInbody) // separate in body fragments
+ {
+ current->inbodyDocs+="\n\n";
+ }
Debug::print(Debug::CommentScan,0,"-----------\nCommentScanner: %s:%d\n"
"input=[%s]\n",fileName.data(),lineNr,comment.data()
diff --git a/src/config.l b/src/config.l
index 9755fca..9ec2b75 100644
--- a/src/config.l
+++ b/src/config.l
@@ -311,6 +311,7 @@ static int yyread(char *buf,int max_size)
if (includeStack.isEmpty())
{
int c=0;
+ if (inputString==0) return c;
while( c < max_size && inputString[inputPosition] )
{
*buf = inputString[inputPosition++] ;
diff --git a/src/doctokenizer.l b/src/doctokenizer.l
index 811127a..100dd11 100644
--- a/src/doctokenizer.l
+++ b/src/doctokenizer.l
@@ -325,7 +325,7 @@ OPMASK ({BLANK}*{OPNORM}{FUNCARG}?)|({OPCAST}{FUNCARG})
LNKWORD1 ("::"|"#")?{SCOPEMASK}
CVSPEC {BLANK}*("const"|"volatile")
LNKWORD2 {SCOPEPRE}*"operator"{OPMASK}
-LNKWORD3 [0-9a-z_A-Z]+("."[0-9a-z_A-Z]+)+
+LNKWORD3 ([0-9a-z_A-Z\-]+("/"|"\\"))*[0-9a-z_A-Z\-]+("."[0-9a-z_A-Z]+)+
CHARWORD [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,.]
CHARWORDQ [^ \t\n\r\\@<>()\[\]:;\?{}&%$#,."]
WORD1 "%"?{CHARWORD}+|"{"|"}"|("\""[^"\n]*"\"")
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 4a8015e..6932f1d 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -120,7 +120,7 @@ SearchIndex * Doxygen::searchIndex=0;
SDict<DefinitionList> *Doxygen::symbolMap;
bool Doxygen::outputToWizard=FALSE;
QDict<int> * Doxygen::htmlDirMap = 0;
-QCache<LookupInfo> Doxygen::lookupCache(20000,20000);
+QCache<LookupInfo> Doxygen::lookupCache(50000,50000);
DirSDict Doxygen::directories(17);
SDict<DirRelation> Doxygen::dirRelations(257);
ParserManager *Doxygen::parserManager = 0;
@@ -4889,7 +4889,6 @@ static void findMember(Entry *root,
else
{
scopeName = mergeScopes(root->parent->name,scopeName);
- printf("joinedName=%s\n",scopeName.data());
}
}
else // see if we can prefix a namespace or class that is used from the file
@@ -6131,7 +6130,7 @@ static void findEnumDocumentation(Entry *root)
md->setMemberGroupId(root->mGrpId);
GroupDef *gd=md->getGroupDef();
- if (gd==0 &&root->groups->first()!=0) // member not grouped but out-of-line documentation is
+ if (gd==0 && root->groups->first()!=0) // member not grouped but out-of-line documentation is
{
addMemberToGroups(root,md);
}
@@ -7894,6 +7893,7 @@ static int readFileOrDirectory(const char *s,
{
//printf("killDict=%p count=%d\n",killDict,killDict->count());
// strip trailing slashes
+ if (s==0) return 0;
QCString fs = s;
char lc = fs.at(fs.length()-1);
if (lc=='/' || lc=='\\') fs = fs.left(fs.length()-1);
diff --git a/src/groupdef.cpp b/src/groupdef.cpp
index 94df15f..d0ce1cc 100644
--- a/src/groupdef.cpp
+++ b/src/groupdef.cpp
@@ -71,6 +71,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
docProtoMembers.setInGroup(TRUE);
docTypedefMembers.setInGroup(TRUE);
docEnumMembers.setInGroup(TRUE);
+ docEnumValMembers.setInGroup(TRUE);
docFuncMembers.setInGroup(TRUE);
docVarMembers.setInGroup(TRUE);
@@ -302,6 +303,18 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
docEnumMembers.append(md);
break;
case MemberDef::EnumValue:
+ if (!docOnly)
+ {
+ //printf("enum value %s!\n",md->name().data());
+ if (Config_getBool("SORT_BRIEF_DOCS"))
+ decEnumValMembers.inSort(md);
+ else
+ decEnumValMembers.append(md);
+ }
+ if (Config_getBool("SORT_MEMBER_DOCS"))
+ docEnumValMembers.inSort(md);
+ else
+ docEnumValMembers.append(md);
break;
case MemberDef::Prototype:
if (!docOnly)
@@ -381,6 +394,8 @@ void GroupDef::removeMember(MemberDef *md)
docEnumMembers.remove(md);
break;
case MemberDef::EnumValue:
+ decEnumValMembers.remove(md);
+ docEnumValMembers.remove(md);
break;
case MemberDef::Prototype:
decProtoMembers.remove(md);
@@ -654,6 +669,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
decProtoMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFuncProtos(),0);
decTypedefMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trTypedefs(),0);
decEnumMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerations(),0);
+ decEnumValMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trEnumerationValues(),0,TRUE);
decFuncMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trFunctions(),0);
decVarMembers.writeDeclarations(ol,0,0,0,this,theTranslator->trVariables(),0);
}
@@ -729,6 +745,9 @@ void GroupDef::writeMemberDocumentation(OutputList &ol)
docEnumMembers.writeDocumentation(ol,name(),this,
theTranslator->trEnumerationTypeDocumentation());
+ docEnumValMembers.writeDocumentation(ol,name(),this,
+ theTranslator->trEnumerationValueDocumentation(),TRUE);
+
docFuncMembers.writeDocumentation(ol,name(),this,
theTranslator->trFunctionDocumentation());
diff --git a/src/groupdef.h b/src/groupdef.h
index ac939d8..2fe2302 100644
--- a/src/groupdef.h
+++ b/src/groupdef.h
@@ -106,6 +106,7 @@ class GroupDef : public Definition
MemberList docProtoMembers;
MemberList docTypedefMembers;
MemberList docEnumMembers;
+ MemberList docEnumValMembers;
MemberList docFuncMembers;
MemberList docVarMembers;
diff --git a/src/index.cpp b/src/index.cpp
index 0aa76ac..0c8394c 100644
--- a/src/index.cpp
+++ b/src/index.cpp
@@ -625,7 +625,10 @@ static int countClassesInTreeList(const ClassSDict &cl)
{
if (cd->isVisibleInHierarchy()) // should it be visible
{
- count++;
+ if (cd->subClasses()->count()>0) // should have sub classes
+ {
+ count++;
+ }
}
}
}
@@ -634,17 +637,6 @@ static int countClassesInTreeList(const ClassSDict &cl)
int countClassHierarchy()
{
-#if 0
-// TODO: let this function return the real number of items in the hierarchy.
- initClassHierarchy(&Doxygen::classSDict);
- int count=0;
- ClassSDict::Iterator cli(Doxygen::classSDict);
- for ( ; cli.current(); ++cli)
- {
- if (cli.current()->subClasses()->count()>0) count++;
- }
- return count;
-#endif
int count=0;
initClassHierarchy(&Doxygen::classSDict);
initClassHierarchy(&Doxygen::hiddenClasses);
@@ -657,7 +649,6 @@ int countClassHierarchy()
void writeHierarchicalIndex(OutputList &ol)
{
- //printf("writeHierarchicalIndex: %d classes\n",hierarchyClasses);
if (hierarchyClasses==0) return;
ol.pushGeneratorState();
ol.disable(OutputGenerator::Man);
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index 87f620d..753e353 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -694,7 +694,18 @@ void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
}
if (!onlyText) // write link
{
- ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
+ if (mtype==EnumValue && getGroupDef()==0 && // enum value is not grouped
+ getEnumScope() && getEnumScope()->getGroupDef()) // but its container is
+ {
+ GroupDef *enumValGroup = getEnumScope()->getGroupDef();
+ ol.writeObjectLink(enumValGroup->getReference(),
+ enumValGroup->getOutputFileBase(),
+ anchor(),n);
+ }
+ else
+ {
+ ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
+ }
}
else // write only text
{
@@ -1029,6 +1040,10 @@ void MemberDef::writeDeclaration(OutputList &ol,
}
}
}
+ else if (ltype=="@") // rename type from enum values
+ {
+ ltype="";
+ }
else
{
if (isObjCMethod())
@@ -1291,7 +1306,8 @@ bool MemberDef::isDetailedSectionVisible(bool inGroup,bool inFile) const
void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
const char *scName,
Definition *container,
- bool inGroup
+ bool inGroup,
+ bool showEnumValues
)
{
// if this member is in a group find the real scope name.
@@ -1301,7 +1317,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
//printf("MemberDef::writeDocumentation(): name=`%s' hasDocs=`%d' containerType=%d inGroup=%d\n",
// name().data(),hasDocs,container->definitionType(),inGroup);
if ( !hasDocs ) return;
- if (isEnumValue()) return;
+ if (isEnumValue() && !showEnumValues) return;
QCString scopeName = scName;
QCString memAnchor = anchor();
@@ -1357,6 +1373,13 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
ldef.prepend("enum ");
}
}
+ else if (isEnumValue())
+ {
+ if (ldef.at(0)=='@')
+ {
+ ldef=ldef.mid(2);
+ }
+ }
int i=0,l;
static QRegExp r("@[0-9]+");
diff --git a/src/memberdef.h b/src/memberdef.h
index dcfa401..d7da3db 100644
--- a/src/memberdef.h
+++ b/src/memberdef.h
@@ -194,7 +194,7 @@ class MemberDef : public Definition
bool inGroup);
void writeDocumentation(MemberList *ml,OutputList &ol,
const char *scopeName,Definition *container,
- bool inGroup);
+ bool inGroup,bool showEnumValues=FALSE);
void warnIfUndocumented();
// relation to other members
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index 2a2cef7..1fb225e 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -50,7 +50,7 @@ int MemberList::compareItems(GCI item1, GCI item2)
/*! Count the number of members in this list that are visible in
* the declaration part of a compound's documentation page.
*/
-void MemberList::countDecMembers()
+void MemberList::countDecMembers(bool countEnumValues)
{
if (m_numDecMembers!=-1) return;
@@ -77,7 +77,8 @@ void MemberList::countDecMembers()
m_funcCnt++,m_numDecMembers++;
break;
case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break;
- case MemberDef::EnumValue: //m_enumValCnt++,m_numDecMembers++;
+ case MemberDef::EnumValue: if (countEnumValues)
+ m_enumValCnt++,m_numDecMembers++;
break;
case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break;
case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break;
@@ -117,7 +118,7 @@ void MemberList::countDecMembers()
//printf("MemberList::countDecMembers()=%d\n",m_numDecMembers);
}
-void MemberList::countDocMembers()
+void MemberList::countDocMembers(bool countEnumValues)
{
if (m_numDocMembers!=-1) return; // used cached value
m_numDocMembers=0;
@@ -128,7 +129,8 @@ void MemberList::countDocMembers()
if (md->isDetailedSectionVisible(m_inGroup,m_inFile))
{
// do not count enum values, since they do not produce entries of their own
- if (md->memberType()!=MemberDef::EnumValue) m_numDocMembers++;
+ if (countEnumValues || md->memberType()!=MemberDef::EnumValue)
+ m_numDocMembers++;
}
}
if (memberGroupList)
@@ -181,9 +183,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,
MemberListIterator mli(*this);
for ( ; (md=mli.current()); ++mli )
{
+ //printf(">>> Member `%s' type=%d visible=%d\n",
+ // md->name().data(),md->memberType(),md->isBriefSectionVisible());
if (md->isBriefSectionVisible())
{
- //printf(">>> Member `%s' type=%d\n",md->name().data(),md->memberType());
switch(md->memberType())
{
case MemberDef::Define: // fall through
@@ -264,6 +267,10 @@ void MemberList::writePlainDeclarations(OutputList &ol,
break;
}
case MemberDef::EnumValue:
+ {
+ if (first) ol.startMemberList(),first=FALSE;
+ md->writeDeclaration(ol,cd,nd,fd,gd,m_inGroup);
+ }
break;
}
}
@@ -298,11 +305,11 @@ void MemberList::writePlainDeclarations(OutputList &ol,
void MemberList::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle
+ const char *title,const char *subtitle, bool showEnumValues
/*, bool inGroup,bool countSubGroups*/)
{
//printf("----- writeDeclaration() ----\n");
- countDecMembers(); // count member not in group
+ countDecMembers(showEnumValues); // count member not in group
if (numDecMembers()==0) return;
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",title,subtitle,numDecMembers());
if (title)
@@ -355,11 +362,11 @@ void MemberList::writeDeclarations(OutputList &ol,
void MemberList::writeDocumentation(OutputList &ol,
const char *scopeName, Definition *container,
- const char *title)
+ const char *title,bool showEnumValues)
{
//printf("MemberList::writeDocumentation()\n");
- countDocMembers();
+ countDocMembers(showEnumValues);
if (numDocMembers()==0) return;
if (title)
@@ -375,7 +382,7 @@ void MemberList::writeDocumentation(OutputList &ol,
MemberDef *md;
for ( ; (md=mli.current()) ; ++mli)
{
- md->writeDocumentation(this,ol,scopeName,container,m_inGroup);
+ md->writeDocumentation(this,ol,scopeName,container,m_inGroup,showEnumValues);
}
if (memberGroupList)
{
diff --git a/src/memberlist.h b/src/memberlist.h
index 78a317b..c9f1fef 100644
--- a/src/memberlist.h
+++ b/src/memberlist.h
@@ -45,15 +45,15 @@ class MemberList : public QList<MemberDef>
int friendCount() const { ASSERT(m_numDecMembers!=-1); return m_friendCnt; }
int numDecMembers() const { ASSERT(m_numDecMembers!=-1); return m_numDecMembers; }
int numDocMembers() const { ASSERT(m_numDocMembers!=-1); return m_numDocMembers; }
- void countDecMembers(/*bool inGroup,bool countSubGroups,bool sectionPerType*/);
- void countDocMembers();
+ void countDecMembers(bool countEnumValues=FALSE);
+ void countDocMembers(bool countEnumValues=FALSE);
void writePlainDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
void writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
- const char *title,const char *subtitle);
+ const char *title,const char *subtitle,bool showEnumValues=FALSE);
void writeDocumentation(OutputList &ol,const char *scopeName,
- Definition *container,const char *title);
+ Definition *container,const char *title,bool showEnumValues=FALSE);
void writeDocumentationPage(OutputList &ol,
const char *scopeName, Definition *container);
void addMemberGroup(MemberGroup *mg);
diff --git a/src/pre.l b/src/pre.l
index b4a3787..672104f 100644
--- a/src/pre.l
+++ b/src/pre.l
@@ -1872,7 +1872,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputArray(yytext,yyleng);
BEGIN(g_condCtx);
}
-<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t]+\n |
+<SkipCComment,SkipCPPComment>[\\@]"cond"[ \t\r]*\n |
<CondLine>. {
outputArray(yytext,yyleng);
startCondSection(" ");
@@ -1943,7 +1943,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCPPComment>"//" {
outputChar('/');outputChar('/');
}
-<SkipCPPComment>[^\x06\n]+ {
+<SkipCPPComment>[^\x06\@\\\n]+ {
outputArray(yytext,yyleng);
}
<SkipCPPComment>. {
diff --git a/src/pycode.l b/src/pycode.l
index cfa2da2..ae3c543 100644
--- a/src/pycode.l
+++ b/src/pycode.l
@@ -1431,7 +1431,7 @@ void parsePythonCode(CodeOutputInterface &od,const char *className,
extern "C" { // some bogus code to keep the compiler happy
void pycodeYYdummy() { yy_flex_realloc(0,0); }
}
-#else
+#elif YY_FLEX_SUBMINOR_VERSION<33
#error "You seem to be using a version of flex newer than 2.5.4. These are currently incompatible with 2.5.4, and do NOT work with doxygen! Please use version 2.5.4 or expect things to be parsed wrongly! A bug report has been submitted (#732132)."
#endif
diff --git a/src/pyscanner.l b/src/pyscanner.l
index d3b4dcc..6420e40 100644
--- a/src/pyscanner.l
+++ b/src/pyscanner.l
@@ -308,6 +308,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief,
docBlockJavaStyle, // javadoc style
+ docBlockInBody,
protection,
position,
needsEntry)
diff --git a/src/scanner.l b/src/scanner.l
index 9001e80..d16c50f 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -2,7 +2,7 @@
*
*
*
- * 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
@@ -2569,7 +2569,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
// see if the compound does not have a name or is inside another
// annonymous compound. If so we insert a
// special `annonymous' variable.
- Entry *p=current_root;
+ //Entry *p=current_root;
+ Entry *p=current;
while (p)
{
// only look for class scopes, not namespace scopes
@@ -2586,7 +2587,8 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
break;
}
}
- p=p->parent;
+ //p=p->parent;
+ if (p==current) p=current_root; else p=p->parent;
}
}
//printf("msName=%s current->name=%s\n",msName.data(),current->name.data());
@@ -3416,6 +3418,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
else
{
+#if 0
if (!Config_getBool("HIDE_IN_BODY_DOCS") &&
!current->doc.isEmpty())
{
@@ -3430,6 +3433,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
previous->inbodyDocs += current->doc;
current->doc.resize(0);
}
+#endif
if (current->sli) // copy special list items
{
QListIterator<ListItemInfo> li(*current->sli);
@@ -3880,7 +3884,16 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
}
<Specialization>{BN}+ { lineCount(); *specName +=' '; }
<Specialization>"<<" { *specName += yytext; }
-<Specialization>">>" { *specName += yytext; }
+<Specialization>">>" {
+ if (insideCS) // for C# >> ends a nested template
+ {
+ REJECT;
+ }
+ else // for C++ >> is a bitshift operator and > > would end a nested template
+ {
+ *specName += yytext;
+ }
+ }
<Specialization>"typename"{BN}+ { lineCount(); }
<Specialization>"(" { *specName += *yytext; roundCount++; }
<Specialization>")" { *specName += *yytext; roundCount--; }
@@ -3977,7 +3990,7 @@ TYPEDEFPREFIX (("typedef"{BN}+)?)((("volatile"|"const"){BN}+)?)
insideCode=FALSE;
current->program += yytext ;
}
-<Comment>[^ \.\n\/\*]+ { current->program += yytext ; }
+<Comment>[^ \.\t\r\n\/\*]+ { current->program += yytext ; }
<Comment>"*/" { current->program += yytext ;
if (!insideCode) BEGIN( lastContext ) ;
}
@@ -4405,6 +4418,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
int position=0;
bool needsEntry=FALSE;
if (docBlockInBody && hideInBodyDocs) return;
+#if 0
if (docBlockInBody)
{
if (previous==0)
@@ -4417,6 +4431,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
previous->doc=previous->doc.stripWhiteSpace()+"\n\n";
}
}
+#endif
//printf("parseCommentBlock [%s]\n",doc.data());
while (parseCommentBlock(
g_thisParser,
@@ -4426,6 +4441,7 @@ static void handleCommentBlock(const QCString &doc,bool brief)
brief ? current->briefLine : current->docLine, // line of block start
docBlockInBody ? FALSE : brief,
docBlockInBody ? FALSE : docBlockJavaStyle,
+ docBlockInBody,
protection,
position,
needsEntry
@@ -4440,7 +4456,9 @@ static void handleCommentBlock(const QCString &doc,bool brief)
newEntry();
}
+#if 0
exit:
+#endif
if (docBlockTerm)
{
unput(docBlockTerm);
@@ -4479,6 +4497,7 @@ static void handleParametersCommentBlocks()
current->docLine, // line of block start
FALSE,
FALSE,
+ FALSE,
protection,
position,
needsEntry
diff --git a/src/translator.h b/src/translator.h
index 93f33a8..449af81 100644
--- a/src/translator.h
+++ b/src/translator.h
@@ -135,7 +135,6 @@ class Translator
virtual QCString trFunctionPrototypeDocumentation() = 0;
virtual QCString trTypedefDocumentation() = 0;
virtual QCString trEnumerationTypeDocumentation() = 0;
- //virtual QCString trEnumerationValueDocumentation() = 0;
virtual QCString trFunctionDocumentation() = 0;
virtual QCString trVariableDocumentation() = 0;
virtual QCString trCompounds() = 0;
@@ -446,6 +445,7 @@ class Translator
//////////////////////////////////////////////////////////////////////////
virtual QCString trCallerGraph() = 0;
+ virtual QCString trEnumerationValueDocumentation() = 0;
};
diff --git a/src/translator_adapter.h b/src/translator_adapter.h
index 1505918..e3a1119 100644
--- a/src/translator_adapter.h
+++ b/src/translator_adapter.h
@@ -51,6 +51,10 @@ class TranslatorAdapter_1_4_6 : public TranslatorAdapterBase
{
return english.trCallerGraph();
}
+ virtual QCString trEnumerationValueDocumentation()
+ {
+ return english.trEnumerationValueDocumentation();
+ }
};
class TranslatorAdapter_1_4_1 : public TranslatorAdapter_1_4_6
diff --git a/src/translator_br.h b/src/translator_br.h
index db33976..8363795 100644
--- a/src/translator_br.h
+++ b/src/translator_br.h
@@ -469,7 +469,7 @@ class TranslatorBrazilian : public TranslatorAdapter_1_4_6
* documentation blocks for defines
*/
virtual QCString trDefineDocumentation()
- { return "Deinições e macros"; }
+ { return "Definições e macros"; }
/*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for function prototypes
diff --git a/src/translator_cz.h b/src/translator_cz.h
index d85e554..2221469 100644
--- a/src/translator_cz.h
+++ b/src/translator_cz.h
@@ -65,6 +65,9 @@
// 2004/09/14 - The new methods "since 1.3.9" implemented.
// 2005/02/11 - The "never used" methods removed.
// 2005/03/08 - Update for "new since 1.4.1" (trOverloadText())
+// 2006/05/10 - Update for "new since 1.4.6" -- trCallerGraph(),
+// modified trCallGraph() to make the meaning unambiguous
+// and clear in the Czech language.
// Todo
// ----
@@ -1488,7 +1491,7 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
- return decode("Graf volání pro tuto funkci:");
+ return decode("Tato funkce volá...");
}
//////////////////////////////////////////////////////////////////////////
@@ -1620,6 +1623,17 @@ class TranslatorCzech : public TranslatorAdapter_1_4_6
"která má usnadnit používání. Od výše uvedené metody se liší "
"pouze jinak zadávanými argumenty.");
}
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trCallerGraph()
+ {
+ return decode("Tuto funkci volají...");
+ }
+
+
};
#endif // TRANSLATOR_CZ_H
diff --git a/src/translator_en.h b/src/translator_en.h
index 165bf4b..e365835 100644
--- a/src/translator_en.h
+++ b/src/translator_en.h
@@ -502,12 +502,6 @@ class TranslatorEnglish : public Translator
{ return "Enumeration Type Documentation"; }
/*! 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"; }
-
- /*! This is used in the documentation of a file/namespace before the list
* of documentation blocks for functions
*/
virtual QCString trFunctionDocumentation()
@@ -1624,11 +1618,19 @@ class TranslatorEnglish : public Translator
// new since 1.4.6
//////////////////////////////////////////////////////////////////////////
+ /*! This is used to introduce a caller (or called-by) graph */
virtual QCString trCallerGraph()
{
return "Here is the caller graph for this function:";
}
+ /*! 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_es.h b/src/translator_es.h
index 1369637..10b2aa7 100644
--- a/src/translator_es.h
+++ b/src/translator_es.h
@@ -20,12 +20,13 @@
* Some notes:
* - It's posible that some sentences haven't got meaning because
* some words haven't got translate in spanish.
+ * Updated from 1.3.8 to 1.4.6 by Guillermo Ballester Valor (May-05-2006)
*/
#ifndef TRANSLATOR_ES_H
#define TRANSLATOR_ES_H
-class TranslatorSpanish : public TranslatorAdapter_1_3_8
+class TranslatorSpanish : public TranslatorAdapter_1_4_6
{
public:
virtual QCString idLanguage()
@@ -1376,6 +1377,76 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_8
return "Coincidencias:";
}
+//////////////////////////////////////////////////////////////////////////
+// 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 "Fichero Fuente " + filename;
+ }
+
+//////////////////////////////////////////////////////////////////////////
+// new since 1.3.9
+//////////////////////////////////////////////////////////////////////////
+
+ /*! This is used as the name of the chapter containing the directory
+ * hierarchy.
+ */
+ virtual QCString trDirIndex()
+ { return "Jerarquía de Directorio"; }
+
+ /*! This is used as the name of the chapter containing the documentation
+ * of the directories.
+ */
+ virtual QCString trDirDocumentation()
+ { return "Documentación de Directorio"; }
+
+ /*! 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 "Directorios"; }
+
+ /*! This returns a sentences that introduces the directory hierarchy.
+ * and the fact that it is sorted alphabetically per level
+ */
+ virtual QCString trDirDescription()
+ { return "La jeraquía de este directorio está ordenada casi, "
+ "pero no completamente, de forma alfabética:";
+ }
+
+ /*! 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="Referencia del Directorio "; result+=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 ? "Directori" : "directori"));
+ if (singular) result+="o"; else result+="os";
+ 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 "Esta es una función miembro sobrecargada que se "
+ "suministra por conveniencia. Difiere de la anterior "
+ "función solamente en los argumentos que acepta.";
+ }
};
diff --git a/src/translator_it.h b/src/translator_it.h
index f49381c..5515a89 100644
--- a/src/translator_it.h
+++ b/src/translator_it.h
@@ -19,6 +19,8 @@
*
* Revision history
*
+ * 2006/05: translated new items used since version 1.4.6
+ * corrected typo in trPackageMembers method
* 2005/03: translated new items used since version 1.4.1
* removed unused methods listed in Petr Prikryl February 28 translator report
* 2004/09: translated new items used since version 1.3.9
@@ -1362,7 +1364,7 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6
*/
virtual QCString trPackageMembers()
{
- return "Funczioni con visibilità di package";
+ return "Funzioni con visibilità di package";
}
/*! Used as a heading for a list of static Java class functions with
* package scope.
@@ -1524,6 +1526,15 @@ class TranslatorItalian : public TranslatorAdapter_1_4_6
"unicamente per gli argomenti passati.";
}
+//////////////////////////////////////////////////////////////////////////
+// new since 1.4.6
+//////////////////////////////////////////////////////////////////////////
+
+ virtual QCString trCallerGraph()
+ {
+ return "Questo è il grafo dei chiamanti di questa funzione:";
+ }
+
};
#endif