Commit 07ee85eb authored by dimitri's avatar dimitri

Release-1.4.7

parent de0997f3
DOXYGEN Version 1.4.6-20060507
DOXYGEN Version 1.4.7
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (07 May 2006)
Dimitri van Heesch (11 June 2006)
......@@ -14,6 +14,7 @@ irix-n32
linux-g++
linux-64
macosx-c++
macosx-uni-c++
m68k-atari-mint-g++
netbsd-g++
openbsd-g++
......
DOXYGEN Version 1.4.6_20060507
DOXYGEN Version 1.4.7
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (07 May 2006)
Dimitri van Heesch (dimitri@stack.nl) (11 June 2006)
......@@ -1191,6 +1191,16 @@ void MainWidget::saveConfigFile()
if (!fn.isEmpty())
{
QFile f(fn);
if (f.exists() && QMessageBox::question(this,
"Overwrite file? -- Doxywizard",
"A file called "+fn+" already exists. Do you want to overwrite it?",
"&Yes","&no",
QString::null, 0, 1)
)
{
statusBar()->message("Save request aborted",messageTimeout);
return;
}
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
......
......@@ -17,10 +17,10 @@
doxygen_version_major=1
doxygen_version_minor=4
doxygen_version_revision=6
doxygen_version_revision=7
#NOTE: Setting version_mmn to "NO" will omit mmn info from the package.
doxygen_version_mmn=20060507
doxygen_version_mmn=NO
bin_dirs=`echo $PATH | sed -e "s/:/ /g"`
......@@ -155,6 +155,9 @@ if test -z "$f_platform"; then
if test "$f_insttool" = NO; then
f_insttool=/usr/bin/install
fi
if test -n "`ls /Developer/SDKs/MacOSX10.*u.sdk`"; then
f_platform=macosx-uni-c++
fi
;;
FreeBSD:*)
f_platform=freebsd-g++
......
......@@ -21,8 +21,8 @@
Doxygen can use the "dot" tool from graphviz 1.5 to generate
more advanced diagrams and graphs. Graphviz is an "open-sourced",
cross-platform graph drawing toolkit from AT\&T and Lucent Bell Labs and
can be found at http://www.research.att.com/sw/tools/graphviz/
cross-platform graph drawing toolkit and can be found
at http://www.graphviz.org/
If you have the "dot" tool available in the path, you can set
\ref cfg_have_dot "HAVE_DOT" to \c YES in the configuration file to
......
......@@ -62,9 +62,9 @@ tools should be installed.
<a href="http://www.tug.org/interest.html#free">teTeX 1.0</a>
\latexonly \\par (see {\tt http://www.tug.org/interest.html\#free})\endlatexonly.
This is needed for generating LaTeX, Postscript, and PDF output.
<li><a href="http://www.research.att.com/sw/tools/graphviz/">
<li><a href="http://www.graphviz.org/">
the Graph visualization toolkit version 1.8.10 or higher</a>
\latexonly \\par (see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly.
\latexonly \\par (see {\tt http://www.graphviz.org/})\endlatexonly.
Needed for the include dependency graphs,
the graphical inheritance graphs, and the collaboration graphs.
If you compile graphviz yourself, make sure you do include
......@@ -559,9 +559,9 @@ features:
You can download it from
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/htmlhelp/html/vsconHH1Start.asp">Microsoft</a>.
<li><a href="http://www.research.att.com/sw/tools/graphviz/">
<li><a href="http://www.graphviz.org/">
the Graph visualization toolkit version 1.8.10</a><br>
\latexonly(see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly.
\latexonly(see {\tt http://www.graphviz.org/})\endlatexonly.
Needed for the include dependency graphs, the graphical inheritance graphs,
and the collaboration graphs.
</ul>
......
This diff is collapsed.
This diff is collapsed.
......@@ -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
......
......@@ -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
......@@ -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)
......
......@@ -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
......
......@@ -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()
......
......@@ -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++] ;
......
......@@ -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]*"\"")
......
......@@ -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);
......
......@@ -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());
......
......@@ -106,6 +106,7 @@ class GroupDef : public Definition
MemberList docProtoMembers;
MemberList docTypedefMembers;
MemberList docEnumMembers;
MemberList docEnumValMembers;
MemberList docFuncMembers;
MemberList docVarMembers;
......
......@@ -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);
......
......@@ -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]+");
......
......@@ -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
......
......@@ -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)
{
......
......@@ -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);
......
......@@ -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>. {
......
......@@ -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
......@@ -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)
......
......@@ -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
......
......@@ -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;
};
......
......@@ -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
......
......@@ -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
......
......@@ -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
......@@ -501,12 +501,6 @@ class TranslatorEnglish : public Translator
virtual QCString trEnumerationTypeDocumentation()
{ 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
*/
......@@ -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
......@@ -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.";
}
};
......
......@@ -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
......@@ -8,7 +8,7 @@ TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = cc
TMAKE_CFLAGS = -pipe -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
TMAKE_CFLAGS = -pipe
TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2
......@@ -36,7 +36,7 @@ TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS = -Wl,-search_paths_first -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
TMAKE_LFLAGS = -Wl,-search_paths_first
TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared
......
#! Use the common Unix template
#$ IncludeTemplate("../unix/app.t");
#! Use the common Unix template
#$ IncludeTemplate("../unix/lib.t");
#! Use the common Unix template
#$ IncludeTemplate("../unix/subdirs.t");
#
#
#
# tmake configuration for macosx-c++
#
TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = cc
TMAKE_CFLAGS = -pipe -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE = -O2
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
TMAKE_CXX = c++
TMAKE_CXXFLAGS = $$TMAKE_CFLAGS -D__FreeBSD__=6
TMAKE_CXXFLAGS_WARN_ON = $$TMAKE_CFLAGS_WARN_ON
TMAKE_CXXFLAGS_WARN_OFF = $$TMAKE_CFLAGS_WARN_OFF
TMAKE_CXXFLAGS_RELEASE = $$TMAKE_CFLAGS_RELEASE
TMAKE_CXXFLAGS_DEBUG = $$TMAKE_CFLAGS_DEBUG
TMAKE_CXXFLAGS_SHLIB = $$TMAKE_CFLAGS_SHLIB
TMAKE_CXXFLAGS_YACC = $$TMAKE_CFLAGS_YACC
TMAKE_INCDIR =
TMAKE_LIBDIR =
TMAKE_INCDIR_X11 =
TMAKE_LIBDIR_X11 =
TMAKE_INCDIR_QT = $(QTDIR)/include
TMAKE_LIBDIR_QT = $(QTDIR)/lib
TMAKE_INCDIR_OPENGL = /usr/X11R6/include
TMAKE_LIBDIR_OPENGL = /usr/X11R6/lib
TMAKE_LINK = c++
TMAKE_LINK_SHLIB = c++
TMAKE_LFLAGS = -Wl,-search_paths_first -Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc
TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared
TMAKE_LFLAGS_SONAME = -dynamiclib -install_name
TMAKE_LIBS =
TMAKE_LIBS_X11 =
TMAKE_LIBS_QT = -lqt
TMAKE_LIBS_QT_MT = -lqt-mt
TMAKE_LIBS_QT_OPENGL = -lqgl
TMAKE_LIBS_OPENGL = -lMesaGL -lMesaGLU -lXmu
TMAKE_MOC = moc
TMAKE_AR = ar cq
TMAKE_RANLIB = ranlib
TMAKE_TAR = tar -cf
TMAKE_GZIP = gzip -9f
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment