Commit e4cebf12 authored by dimitri's avatar dimitri

Release-1.2.4

parent ba068113
DOXYGEN Version 1.2.3-20001220 DOXYGEN Version 1.2.4
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (20 December 2000) Dimitri van Heesch (24 December 2000)
DOXYGEN Version 1.2.3-20001220 DOXYGEN Version 1.2.4
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at ...@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy, Enjoy,
Dimitri van Heesch (20 December 2000) Dimitri van Heesch (24 December 2000)
1.2.3-20001220 1.2.4
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
\documentclass[a4paper,ps2pdf]{article} \documentclass[a4paper,ps2pdf]{article}
\usepackage{a4wide} \usepackage{a4wide}
\usepackage{makeidx} \usepackage{makeidx}
\usepackage{fancyheadings} \usepackage{fancyhdr}
\usepackage{epsf} \usepackage{epsf}
\usepackage{doxygen} \usepackage{doxygen}
\usepackage{multicol} \usepackage{multicol}
......
...@@ -33,7 +33,21 @@ To define a group, you should put the \ref cmddefgroup "\\defgroup" ...@@ -33,7 +33,21 @@ To define a group, you should put the \ref cmddefgroup "\\defgroup"
command in a special comment block. The first argument of the command command in a special comment block. The first argument of the command
is a label that should uniquely identify the group. You can make an is a label that should uniquely identify the group. You can make an
entity a member of a specific group by putting entity a member of a specific group by putting
a \ref cmdingroup "\\ingroup" command inside its documentation. a \ref cmdingroup "\\ingroup" command inside its documentation block.
To avoid putting \ref cmdingroup "\\ingroup" commands in the documentation
of each member you can also group members together by the
open marker <code>\@{</code> before the group and the
closing marker <code>\@}</code> after the group. The markers can
be put in the documentation of the group definition or in a separate
documentation block.
Groups can also be nested using these grouping markers.
Note that compound entities (like classes, files and namespaces) can
be put into multiple groups, but members (like variable, functions, typedefs
and enums) can only be a member of one group
(this restriction is to avoid ambiguous linking targets).
\par Example: \par Example:
\verbinclude group.cpp \verbinclude group.cpp
......
...@@ -462,19 +462,17 @@ Compilation is now done by performing the following steps: ...@@ -462,19 +462,17 @@ Compilation is now done by performing the following steps:
nmake nmake
\endverbatim \endverbatim
<li>To generate the doxygen documentation, do ensure, that the <li>To generate the doxygen documentation, go to the <code>doc</code>
<code>html</code> and <code>latex</code> subdirectories exist. subdirectory and type:
Then go to the <code>doc</code> subdirectory and type:
\verbatim \verbatim
doxygen
nmake nmake
\endverbatim \endverbatim
The generated docs int HTML are located in the <code>html</code> The generated docs int HTML are located in the <code>..\html</code>
subdirectory. subdirectory.
The sources for LaTeX documentation are located in <code>latex</code> The sources for LaTeX documentation are located in <code>..\latex</code>
subdirectory. From those sources, the DVI, PostScript, and PDF subdirectory. From those sources, the DVI, PostScript, and PDF
documentation can be generated. documentation can be generated.
</ol> </ol>
......
>Test: "class_test.html" <tagfile>
example a0 "()" <compound kind="class">
<name>Test</name>
<filename>class_test.html</filename>
<member kind="function">
<name>example</name>
<anchor>a0</anchor>
<arglist>()</arglist>
</member>
</compound>
</tagfile>
/*! \defgroup group1 The First Group /** @defgroup group1 The First Group
* This is the first group * This is the first group
* @{
*/ */
/*! \defgroup group2 The Second Group /** @brief class C1 in group 1 */
class C1 {};
/** @brief class C2 in group 1 */
class C2 {};
/** function in group 1 */
void func() {}
/** @} end of group1 */
/**
* @defgroup group2 The Second Group
* This is the second group * This is the second group
*/ */
/*! \defgroup group3 The Third Group /** @defgroup group3 The Third Group
* This is the third group * This is the third group
*/ */
/*! \defgroup group4 The Fourth Group /** @defgroup group4 The Fourth Group
* \ingroup group3 * @ingroup group3
* Group 4 is a subgroup of group 3 * Group 4 is a subgroup of group 3
*/ */
/*! \ingroup group1 /**
* \brief class C1 in group 1 * @ingroup group2
*/ * @brief class C3 in group 2
class C1 {};
/*! \ingroup group1
* \brief class C2 in group 1
*/
class C2 {};
/*! \ingroup group2
* \brief class C3 in group 2
*/ */
class C3 {}; class C3 {};
/*! \ingroup group2 /** @ingroup group2
* \brief class C4 in group 2 * @brief class C4 in group 2
*/ */
class C4 {}; class C4 {};
/*! \ingroup group3 /** @ingroup group3
* \brief class C5 in \link group3 the third group\endlink. * @brief class C5 in @link group3 the third group@endlink.
*/ */
class C5 {}; class C5 {};
/*! \ingroup group1 group2 group3 group4 /** @ingroup group1 group2 group3 group4
* namespace N1 is in all groups * namespace N1 is in four groups
* \sa \link group1 The first group\endlink, group2, group3, group4 * @sa @link group1 The first group@endlink, group2, group3, group4
*
* Also see @ref mypage2
*/ */
namespace N1 {}; namespace N1 {};
/*! \file /** @file
* \ingroup group3 * @ingroup group3
* \brief this file in group 3 * @brief this file in group 3
*/
/** @defgroup group5 The Fifth Group
* This is the fifth group
* @{
*/
/** @page mypage1 This is a section in group 5
* Text of the first section
*/
/** @page mypage2 This is another section in group 5
* Text of the second section
*/ */
/** @} */
Name: doxygen Name: doxygen
Version: 1.2.3-20001220 Version: 1.2.4
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 1 Release: 1
Source0: doxygen-%{version}.src.tar.gz Source0: doxygen-%{version}.src.tar.gz
......
...@@ -654,7 +654,6 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -654,7 +654,6 @@ void ClassDef::writeDocumentation(OutputList &ol)
QCString pageTitle=name().copy(); QCString pageTitle=name().copy();
QCString pageType; QCString pageType;
ArgumentList *outerTempArgList = outerTemplateArguments(); ArgumentList *outerTempArgList = outerTemplateArguments();
if (outerTempArgList) pageType+=" Template";
switch(compType) switch(compType)
{ {
case Class: pageType+=" Class"; break; case Class: pageType+=" Class"; break;
...@@ -663,6 +662,7 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -663,6 +662,7 @@ void ClassDef::writeDocumentation(OutputList &ol)
default: pageType+=" Interface"; break; default: pageType+=" Interface"; break;
} }
pageTitle+=pageType+" Reference"; pageTitle+=pageType+" Reference";
if (outerTempArgList) pageTitle.prepend(" Template");
startFile(ol,fileName,pageTitle); startFile(ol,fileName,pageTitle);
startTitle(ol,getOutputFileBase()); startTitle(ol,getOutputFileBase());
parseText(ol,theTranslator->trCompoundReference(name(),compType,outerTempArgList!=0)); parseText(ol,theTranslator->trCompoundReference(name(),compType,outerTempArgList!=0));
......
...@@ -1140,6 +1140,9 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" ...@@ -1140,6 +1140,9 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
<Body>[0-9]+ { <Body>[0-9]+ {
g_code->codify(yytext); g_code->codify(yytext);
} }
<Body>[0-9]+[xX][0-9A-F]+ {
g_code->codify(yytext);
}
<MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) { <MemberCall2,FuncCall>{KEYWORD}/([^a-z_A-Z0-9]) {
addParmType(); addParmType();
g_parmName=yytext; g_parmName=yytext;
......
...@@ -225,6 +225,9 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t, ...@@ -225,6 +225,9 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
BEGIN( Start ); BEGIN( Start );
declinfoYYlex(); declinfoYYlex();
//printf("type=`%s' class=`%s' name=`%s' args=`%s'\n",
// type.data(),scope.data(),name.data(),args.data());
cl=scope.copy(); cl=scope.copy();
//printf("scope=`%s'\n",scope.data()); //printf("scope=`%s'\n",scope.data());
int il=0,ir=0; int il=0,ir=0;
...@@ -248,7 +251,7 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t, ...@@ -248,7 +251,7 @@ void parseFuncDecl(const QCString &decl,QCString &cl,QCString &ctl,QCString &t,
a=removeRedundantWhiteSpace(args); a=removeRedundantWhiteSpace(args);
exc=removeRedundantWhiteSpace(exceptionString); exc=removeRedundantWhiteSpace(exceptionString);
if (!t.isEmpty() && t.at(t.length()-1)==')') if (!t.isEmpty() && t.at(t.length()-1)==')') // for function pointers
{ {
a.prepend(")"); a.prepend(")");
t=t.left(t.length()-1); t=t.left(t.length()-1);
......
...@@ -760,7 +760,7 @@ FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]+ ...@@ -760,7 +760,7 @@ FILE ({FILESCHAR}*{FILEECHAR}+("."{FILESCHAR}*{FILEECHAR}+)*)|("\""[^\n\"]+
ID [a-z_A-Z][a-z_A-Z0-9]* ID [a-z_A-Z][a-z_A-Z0-9]*
SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID}) SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+ SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+
URLMASK [a-z_A-Z0-9\~\:\?\@\%\#\.\-\+\/\=]+ URLMASK [a-z_A-Z0-9\~\:\?\@\&\%\#\.\-\+\/\=]+
NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9] NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9]
WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]"\"") WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]"\"")
ATTR ({B}+[^>\n]*)? ATTR ({B}+[^>\n]*)?
......
...@@ -66,8 +66,6 @@ ...@@ -66,8 +66,6 @@
// lists // lists
ClassList classList; // all documented classes ClassList classList; // all documented classes
NamespaceList namespaceList; // all namespaces NamespaceList namespaceList; // all namespaces
//PageList *exampleList = new PageList; // all example files
//PageList *pageList = new PageList; // all related documentation pages
MemberNameList memberNameList; // class member + related functions MemberNameList memberNameList; // class member + related functions
MemberNameList functionNameList; // all unrelated functions MemberNameList functionNameList; // all unrelated functions
FileNameList inputNameList; // all input files FileNameList inputNameList; // all input files
...@@ -122,7 +120,6 @@ void clearAll() ...@@ -122,7 +120,6 @@ void clearAll()
namespaceDict.clear(); namespaceDict.clear();
memberNameDict.clear(); memberNameDict.clear();
functionNameDict.clear(); functionNameDict.clear();
//substituteDict.clear();
sectionDict.clear(); sectionDict.clear();
inputNameDict->clear(); inputNameDict->clear();
excludeNameDict.clear(); excludeNameDict.clear();
...@@ -1077,7 +1074,6 @@ static void findUsingDeclarations(Entry *root) ...@@ -1077,7 +1074,6 @@ static void findUsingDeclarations(Entry *root)
} }
else if (fd) else if (fd)
{ {
//printf("Inside file %s\n",fd->name().data());
fd->addUsingDeclaration(usingCd); fd->addUsingDeclaration(usingCd);
} }
} }
...@@ -1252,7 +1248,7 @@ static MemberDef *addVariableToFile( ...@@ -1252,7 +1248,7 @@ static MemberDef *addVariableToFile(
); );
bool ambig; bool ambig;
FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); FileDef *fd = findFileDef(inputNameDict,root->fileName,ambig);
// see if the function is inside a namespace // see if the function is inside a namespace
NamespaceDef *nd = 0; NamespaceDef *nd = 0;
...@@ -1678,8 +1674,9 @@ static void buildMemberList(Entry *root) ...@@ -1678,8 +1674,9 @@ static void buildMemberList(Entry *root)
//} //}
// new member function, signal or slot. // new member function, signal or slot.
//printf("new member: %s class template args=`%s'\n", //printf("new member: %s member template args=`%s'\n",
// root->args.data(),argListToString(cd->templateArguments()).data()); // root->args.data(),
// argListToString(root->mtArgList).data());
MemberDef *md=new MemberDef( MemberDef *md=new MemberDef(
root->fileName,root->startLine, root->fileName,root->startLine,
root->type,name,root->args,root->exception, root->type,name,root->args,root->exception,
...@@ -3246,11 +3243,12 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ...@@ -3246,11 +3243,12 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
} }
} }
if (root->tArgList==0 && !classTempList.isEmpty()) if (root->tArgList==0 && root->mtArgList==0 && !classTempList.isEmpty())
{ {
// no template specifiers found during parsing (because \fn was used), // no template specifiers found during parsing (because \fn was used),
// but there are template names in the scope, so we build the template // but there are template names in the scope, so we build the template
// specifiers from that. // specifiers from that.
printf("Building template list from `%s'\n",classTempList.data());
root->tArgList = new ArgumentList; root->tArgList = new ArgumentList;
QRegExp re(idMask); QRegExp re(idMask);
int i,p=0,l; int i,p=0,l;
...@@ -3385,7 +3383,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ...@@ -3385,7 +3383,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
"4. class definition %s found\n",cd->name().data()); "4. class definition %s found\n",cd->name().data());
int ci; int ci;
ArgumentList *classTemplArgs = cd->templateArguments(); ArgumentList *classTemplArgs = cd->templateArguments();
ArgumentList *funcTemplArgs = md->templateArguments(); ArgumentList *funcTemplArgs = md->memberDefTemplateArguments();
if ((ci=cd->name().find("::"))!=-1) // nested class if ((ci=cd->name().find("::"))!=-1) // nested class
{ {
ClassDef *parentClass = getClass(cd->name().left(ci)); ClassDef *parentClass = getClass(cd->name().left(ci));
...@@ -3475,8 +3473,11 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ...@@ -3475,8 +3473,11 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl
//printf("root->tArgList=`%s'\n",argListToString(root->tArgList).data()); //printf("root->tArgList=`%s'\n",argListToString(root->tArgList).data());
if (matching) // replace member's argument list if (matching) // replace member's argument list
{ {
//printf("Setting scope template argument of member to %s\n", //printf("Setting scope template argument of member %s to %s\n",
// argListToString(root->tArgList).data() // md->name().data(), argListToString(root->tArgList).data()
// );
//printf("Setting member template argument of member %s to %s\n",
// md->name().data(), argListToString(root->mtArgList).data()
// ); // );
md->setScopeDefTemplateArguments(root->tArgList); md->setScopeDefTemplateArguments(root->tArgList);
md->setMemberDefTemplateArguments(root->mtArgList); md->setMemberDefTemplateArguments(root->mtArgList);
...@@ -3949,7 +3950,17 @@ static void findEnums(Entry *root) ...@@ -3949,7 +3950,17 @@ static void findEnums(Entry *root)
else if (isGlobal) else if (isGlobal)
{ {
md->setDefinition(name); md->setDefinition(name);
fd->insertMember(md); if (fd==0 && root->tagInfo)
{
bool ambig;
QCString filePathName = root->parent->fileName;
fd=findFileDef(inputNameDict,filePathName,ambig);
}
if (fd)
{
fd->insertMember(md);
md->setFileDef(fd);
}
} }
else if (cd) else if (cd)
{ {
......
...@@ -704,7 +704,7 @@ int countNamespaces() ...@@ -704,7 +704,7 @@ int countNamespaces()
NamespaceDef *nd; NamespaceDef *nd;
for (;(nd=nli.current());++nli) for (;(nd=nli.current());++nli)
{ {
if (nd->isLinkableInProject() && nd->countMembers()>0) count++; if (nd->isLinkableInProject()) count++;
} }
return count; return count;
} }
...@@ -746,12 +746,17 @@ void writeNamespaceIndex(OutputList &ol) ...@@ -746,12 +746,17 @@ void writeNamespaceIndex(OutputList &ol)
//ol.newParagraph(); //ol.newParagraph();
ol.endTextBlock(); ol.endTextBlock();
ol.startIndexList(); bool first=TRUE;
NamespaceDef *nd=namespaceList.first(); NamespaceDef *nd=namespaceList.first();
while (nd) while (nd)
{ {
if (nd->isLinkableInProject() && nd->countMembers()>0) if (nd->isLinkableInProject())
{ {
if (first)
{
ol.startIndexList();
first=FALSE;
}
ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name()); ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name());
if (!nd->briefDescription().isEmpty()) if (!nd->briefDescription().isEmpty())
{ {
...@@ -776,7 +781,7 @@ void writeNamespaceIndex(OutputList &ol) ...@@ -776,7 +781,7 @@ void writeNamespaceIndex(OutputList &ol)
} }
nd=namespaceList.next(); nd=namespaceList.next();
} }
ol.endIndexList(); if (!first) ol.endIndexList();
if (hasHtmlHelp) if (hasHtmlHelp)
{ {
htmlHelp->decContentsDepth(); htmlHelp->decContentsDepth();
......
...@@ -146,7 +146,7 @@ void writeInstallScript() ...@@ -146,7 +146,7 @@ void writeInstallScript()
t << " print STDERR \"Error: opening file $oldf for writing\\n\";\n"; t << " print STDERR \"Error: opening file $oldf for writing\\n\";\n";
t << " exit 1;\n"; t << " exit 1;\n";
t << " }\n"; t << " }\n";
t << " if ($oldf!=\"tree.js\") {\n"; t << " if ($oldf ne \"tree.js\") {\n";
t << " while (<F>) {\n"; t << " while (<F>) {\n";
t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n"; t << " s/doxygen\\=\\\"([^ \\\"\\:\\t\\>\\<]*)\\:([^ \\\"\\t\\>\\<]*)\\\" (href|src)=\\\"\\2/doxygen\\=\\\"$1:$subst{$1}\\\" \\3=\\\"$subst{$1}/g;\n";
t << " print G \"$_\";\n"; t << " print G \"$_\";\n";
......
...@@ -510,7 +510,7 @@ void LatexGenerator::startIndexSection(IndexSections is) ...@@ -510,7 +510,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
bool found=FALSE; bool found=FALSE;
while (nd && !found) while (nd && !found)
{ {
if (nd->isLinkableInProject() && nd->countMembers()>0) if (nd->isLinkableInProject())
{ {
if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter"; if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; // Namespace Documentation}\n": t << "{"; // Namespace Documentation}\n":
......
...@@ -258,7 +258,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -258,7 +258,7 @@ MemberDef::MemberDef(const char *df,int dl,
initLines=0; initLines=0;
type=t; type=t;
args=a; args=a;
args=args.stripWhiteSpace(); args=removeRedundantWhiteSpace(args);
if (type.isEmpty()) decl=name()+args; else decl=type+" "+name()+args; if (type.isEmpty()) decl=name()+args; else decl=type+" "+name()+args;
declLine=0; declLine=0;
memberGroup=0; memberGroup=0;
...@@ -763,11 +763,11 @@ void MemberDef::writeDeclaration(OutputList &ol, ...@@ -763,11 +763,11 @@ void MemberDef::writeDeclaration(OutputList &ol,
// if member template specifiers are not part of the name, but they are // if member template specifiers are not part of the name, but they are
// present, we add them // present, we add them
if (tArgList && !(name().find('<')!=-1 && name().find('>')!=-1) //if (tArgList && !(name().find('<')!=-1 && name().find('>')!=-1)
&& cd && cd->templateArguments()) // && cd && cd->templateArguments())
{ //{
ol.docify(tempArgListToString(tArgList)); // ol.docify(tempArgListToString(tArgList));
} //}
if (argsString()) if (argsString())
{ {
...@@ -923,6 +923,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -923,6 +923,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
if (si==-1) si=0; if (si==-1) si=0;
while ((pi=r.match(ldef,i+l,&l))!=-1) ei=i=pi+l; while ((pi=r.match(ldef,i+l,&l))!=-1) ei=i=pi+l;
// first si characters of ldef contain compound type name // first si characters of ldef contain compound type name
ol.startMemberDocName();
ol.docify(ldef.left(si)); ol.docify(ldef.left(si));
ol.docify(" { ... } "); ol.docify(" { ... } ");
// last ei characters of ldef contain pointer/reference specifiers // last ei characters of ldef contain pointer/reference specifiers
......
...@@ -292,7 +292,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -292,7 +292,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{ {
if (!Config::genTagFile.isEmpty()) if (!Config::genTagFile.isEmpty())
{ {
tagFile << " <member>" << endl; tagFile << " <member kind=\"enumeration\">" << endl;
tagFile << " <name>" << convertToXML(md->name()) << "</name>" << endl; tagFile << " <name>" << convertToXML(md->name()) << "</name>" << endl;
tagFile << " <anchor>" << convertToXML(md->anchor()) << "</anchor>" << endl; tagFile << " <anchor>" << convertToXML(md->anchor()) << "</anchor>" << endl;
tagFile << " <arglist>" << convertToXML(md->argsString()) << "</arglist>" << endl; tagFile << " <arglist>" << convertToXML(md->argsString()) << "</arglist>" << endl;
...@@ -332,7 +332,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -332,7 +332,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
{ {
if (!Config::genTagFile.isEmpty()) if (!Config::genTagFile.isEmpty())
{ {
tagFile << " <member>" << endl; tagFile << " <member kind=\"enumvalue\">" << endl;
tagFile << " <name>" << convertToXML(fmd->name()) << "</name>" << endl; tagFile << " <name>" << convertToXML(fmd->name()) << "</name>" << endl;
tagFile << " <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl; tagFile << " <anchor>" << convertToXML(fmd->anchor()) << "</anchor>" << endl;
tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl; tagFile << " <arglist>" << convertToXML(fmd->argsString()) << "</arglist>" << endl;
......
...@@ -1000,7 +1000,8 @@ BN [ \t\r\n] ...@@ -1000,7 +1000,8 @@ BN [ \t\r\n]
if (g_includeStack.isEmpty()) if (g_includeStack.isEmpty())
g_curlyCount--; g_curlyCount--;
outputChar(*yytext); outputChar(*yytext);
ASSERT(g_curlyCount>=0); // This should hold otherwise the preprocessor is confused
//ASSERT(g_curlyCount>=0);
} }
<CopyLine>"'"\\[0-7]{1,3}"'" { <CopyLine>"'"\\[0-7]{1,3}"'" {
outputArray(yytext,yyleng); outputArray(yytext,yyleng);
......
This diff is collapsed.
...@@ -719,6 +719,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members) ...@@ -719,6 +719,7 @@ void TagFileParser::buildMemberList(Entry *ce,QList<TagMemberInfo> &members)
me->protection = tmi->prot; me->protection = tmi->prot;
me->virt = tmi->virt; me->virt = tmi->virt;
me->stat = tmi->isStatic; me->stat = tmi->isStatic;
me->fileName = ce->fileName;
TagInfo *ti = new TagInfo; TagInfo *ti = new TagInfo;
ti->tagName = m_tagName; ti->tagName = m_tagName;
ti->anchor = tmi->anchor; ti->anchor = tmi->anchor;
......
...@@ -299,12 +299,8 @@ QCString stripAnnonymousNamespaceScope(const QCString &s) ...@@ -299,12 +299,8 @@ QCString stripAnnonymousNamespaceScope(const QCString &s)
void writePageRef(OutputList &ol,const char *cn,const char *mn) void writePageRef(OutputList &ol,const char *cn,const char *mn)
{ {
//bool htmlOn = ol.isEnabled(OutputGenerator::Html);
//bool manOn = ol.isEnabled(OutputGenerator::Man);
ol.pushGeneratorState(); ol.pushGeneratorState();
//ol.enableAll();
ol.disable(OutputGenerator::Html); ol.disable(OutputGenerator::Html);
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
if (Config::pdfHyperFlag) ol.disable(OutputGenerator::Latex); if (Config::pdfHyperFlag) ol.disable(OutputGenerator::Latex);
...@@ -313,12 +309,13 @@ void writePageRef(OutputList &ol,const char *cn,const char *mn) ...@@ -313,12 +309,13 @@ void writePageRef(OutputList &ol,const char *cn,const char *mn)
ol.docify(theTranslator->trPageAbbreviation()); ol.docify(theTranslator->trPageAbbreviation());
ol.endPageRef(cn,mn); ol.endPageRef(cn,mn);
//if (htmlOn) ol.enable(OutputGenerator::Html);
//if (manOn) ol.enable(OutputGenerator::Man);
ol.popGeneratorState(); ol.popGeneratorState();
} }
/*! Generate a place holder for a position in a list. Used for
* translators to be able to specify different elements orders
* depending on whether text flows from left to right or visa versa.
*/
QCString generateMarker(int id) QCString generateMarker(int id)
{ {
QCString result; QCString result;
...@@ -326,8 +323,9 @@ QCString generateMarker(int id) ...@@ -326,8 +323,9 @@ QCString generateMarker(int id)
return result; return result;
} }
// strip part of the path if it matches /*! strip part of \a path if it matches
// one of the paths in the stripFromPath list * one of the paths in the Config::stripFromPath list
*/
QCString stripFromPath(const QCString &path) QCString stripFromPath(const QCString &path)
{ {
const char *s=Config::stripFromPath.first(); const char *s=Config::stripFromPath.first();
...@@ -343,9 +341,10 @@ QCString stripFromPath(const QCString &path) ...@@ -343,9 +341,10 @@ QCString stripFromPath(const QCString &path)
return path; return path;
} }
// try to determine if this files is a source or a header file by looking /*! try to determine if \a name is a source or a header file name by looking
// at the extension (5 variations are allowed in both upper and lower case) * at the extension. A number of variations is allowed in both upper and
// If anyone knows or uses another extension please let me know :-) * lower case) If anyone knows or uses another extension please let me know :-)
*/
int guessSection(const char *name) int guessSection(const char *name)
{ {
QCString n=((QCString)name).lower(); QCString n=((QCString)name).lower();
...@@ -369,35 +368,9 @@ int guessSection(const char *name) ...@@ -369,35 +368,9 @@ int guessSection(const char *name)
return 0; return 0;
} }
/*! Get a class definition given its name.
//QCString resolveDefines(const char *n) * Returns 0 if the class is not found.
//{ */
// return n;
// if (n)
// {
// Define *def=defineDict[n];
// if (def && def->nargs==0 && !def->definition.isEmpty())
// {
// return def->definition;
// }
// return n;
// }
// return 0;
//}
//QCString resolveTypedefs(const QCString &n)
//{
// QCString *subst=typedefDict[n];
// if (subst && !subst->isEmpty())
// {
// return *subst;
// }
// else
// {
// return n;
// }
//}
ClassDef *getClass(const char *name) ClassDef *getClass(const char *name)
{ {
if (name==0 || name[0]=='\0') return 0; if (name==0 || name[0]=='\0') return 0;
...@@ -515,9 +488,11 @@ QCString removeRedundantWhiteSpace(const QCString &s) ...@@ -515,9 +488,11 @@ QCString removeRedundantWhiteSpace(const QCString &s)
(i!=0 && i!=l-1 && isId(s.at(i-1)) && isId(s.at(i+1))) (i!=0 && i!=l-1 && isId(s.at(i-1)) && isId(s.at(i+1)))
) )
{ {
if ((c=='*' || c=='&' || c=='@') && if ((c=='*' || c=='&' || c=='@'))
!result.isEmpty() && isId(result.at(result.length()-1)) {
) result+=' '; uint rl=result.length();
if (rl>0 && (isId(result.at(rl-1)) || result.at(rl-1)=='>')) result+=' ';
}
result+=c; result+=c;
} }
} }
...@@ -571,12 +546,6 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam ...@@ -571,12 +546,6 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam
if (i==-1) i=splitText.find(' '); if (i==-1) i=splitText.find(' ');
if (i!=-1) // add a link-break at i in case of Html output if (i!=-1) // add a link-break at i in case of Html output
{ {
//ol.docify(splitText.left(i+1));
//ol.pushGeneratorState();
//ol.disableAllBut(OutputGenerator::Html);
//ol.lineBreak();
//ol.popGeneratorState();
//ol.docify(splitText.right(splitLength-i-1));
out.writeString(splitText.left(i+1)); out.writeString(splitText.left(i+1));
out.writeBreak(); out.writeBreak();
out.writeString(splitText.right(splitLength-i-1)); out.writeString(splitText.right(splitLength-i-1));
...@@ -644,12 +613,13 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam ...@@ -644,12 +613,13 @@ void linkifyText(const TextGeneratorIntf &out,const char *scName,const char *nam
} }
} while (!found && scopeOffset>=0); } while (!found && scopeOffset>=0);
//if (!found) printf("Trying to link %s in %s\n",word.data(),scName); //if (!found) printf("Trying to link %s in %s\n",word.data(),scName);
if (!found && if (!found &&
getDefs(scName,word,0,md,cd,fd,nd,gd) && getDefs(scName,word,0,md,cd,fd,nd,gd) &&
(md->isTypedef() || md->isEnumerate() || (md->isTypedef() || md->isEnumerate() ||
md->isReference() || md->isVariable()) && md->isReference() || md->isVariable()
(external ? md->isLinkable() : md->isLinkableInProject()) ) &&
(external ? md->isLinkable() : md->isLinkableInProject())
) )
{ {
//printf("Found ref\n"); //printf("Found ref\n");
...@@ -760,26 +730,6 @@ QCString argListToString(ArgumentList *al) ...@@ -760,26 +730,6 @@ QCString argListToString(ArgumentList *al)
return result; return result;
} }
//QCString tempArgListToString(ArgumentList *al)
//{
// QCString result;
// if (al==0) return result;
// Argument *a=al->first();
// result+="<";
// while (a)
// {
// int ni=a->type.findRev(' ');
// if (ni!=-1)
// result+=a->type.right(a->type.length()-ni-1);
// else
// result+=a->type;
// a = al->next();
// if (a) result+=",";
// }
// result+=">";
// return result;
//}
QCString tempArgListToString(ArgumentList *al) QCString tempArgListToString(ArgumentList *al)
{ {
QCString result; QCString result;
...@@ -1001,13 +951,16 @@ void setAnchors(char id,MemberList *ml,int groupId) ...@@ -1001,13 +951,16 @@ void setAnchors(char id,MemberList *ml,int groupId)
MemberDef *md; MemberDef *md;
for (;(md=mli.current());++mli) for (;(md=mli.current());++mli)
{ {
QCString anchor; if (!md->isReference())
if (groupId==-1) {
anchor.sprintf("%c%d",id,count++); QCString anchor;
else if (groupId==-1)
anchor.sprintf("%c%d_%d",id,groupId,count++); anchor.sprintf("%c%d",id,count++);
//printf("Member %s anchor %s\n",md->name(),anchor.data()); else
md->setAnchor(anchor); anchor.sprintf("%c%d_%d",id,groupId,count++);
//printf("Member %s anchor %s\n",md->name(),anchor.data());
md->setAnchor(anchor);
}
} }
} }
...@@ -2112,7 +2065,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2112,7 +2065,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{ {
QList<MemberDef> members; QList<MemberDef> members;
//printf("Function with global scope `%s' args=`%s'\n",namespaceName.data(),args); //printf(" Function with global scope `%s' args=`%s'\n",namespaceName.data(),args);
MemberListIterator mli(*mn); MemberListIterator mli(*mn);
for (mli.toFirst();(md=mli.current());++mli) for (mli.toFirst();(md=mli.current());++mli)
{ {
...@@ -2821,28 +2774,6 @@ QCString convertNameToFile(const char *name,bool allowDots) ...@@ -2821,28 +2774,6 @@ QCString convertNameToFile(const char *name,bool allowDots)
return result; return result;
} }
/*! Converts a string to HTML-encoded string */
QCString convertToHtml(const QCString &s)
{
QCString result;
char c;
const char *p=s.data();
while ((c=*p++)!=0)
{
switch(c)
{
case '<': result+="&lt;"; break;
case '>': result+="&gt;"; break;
case '&': result+="&amp;"; break;
case '"': result+="&quot;"; break;
default:
result+=c;
break;
}
}
return result;
}
/*! Input is a scopeName, output is the scopename split into a /*! Input is a scopeName, output is the scopename split into a
* namespace part (as large as possible) and a classname part. * namespace part (as large as possible) and a classname part.
*/ */
...@@ -2923,6 +2854,7 @@ QCString stripScope(const char *name) ...@@ -2923,6 +2854,7 @@ QCString stripScope(const char *name)
return result; return result;
} }
/*! Converts a string to an XML-encoded string */
QCString convertToXML(const char *s) QCString convertToXML(const char *s)
{ {
QCString result; QCString result;
...@@ -2943,3 +2875,10 @@ QCString convertToXML(const char *s) ...@@ -2943,3 +2875,10 @@ QCString convertToXML(const char *s)
} }
return result; return result;
} }
/*! Converts a string to a HTML-encoded string */
QCString convertToHtml(const char *s)
{
return convertToXML(s);
}
...@@ -133,7 +133,6 @@ void setFileNameForSections(QList<QCString> *anchorList,const char *fileName); ...@@ -133,7 +133,6 @@ void setFileNameForSections(QList<QCString> *anchorList,const char *fileName);
QCString stripAnnonymousScope(const QCString &s); QCString stripAnnonymousScope(const QCString &s);
QCString stripAnnonymousNamespaceScope(const QCString &s); QCString stripAnnonymousNamespaceScope(const QCString &s);
QCString stripFromPath(const QCString &path); QCString stripFromPath(const QCString &path);
QCString convertToXML(const char *s);
bool rightScopeMatch(const QCString &scope, const QCString &name); bool rightScopeMatch(const QCString &scope, const QCString &name);
bool leftScopeMatch(const QCString &scope, const QCString &name); bool leftScopeMatch(const QCString &scope, const QCString &name);
void writePageRef(OutputList &ol,const char *cn,const char *mn); void writePageRef(OutputList &ol,const char *cn,const char *mn);
...@@ -145,12 +144,13 @@ void initClassHierarchy(ClassList *cl); ...@@ -145,12 +144,13 @@ void initClassHierarchy(ClassList *cl);
bool hasVisibleRoot(BaseClassList *bcl); bool hasVisibleRoot(BaseClassList *bcl);
int minClassDistance(ClassDef *cd,ClassDef *bcd,int level=0); int minClassDistance(ClassDef *cd,ClassDef *bcd,int level=0);
QCString convertNameToFile(const char *name,bool allowDots=FALSE); QCString convertNameToFile(const char *name,bool allowDots=FALSE);
QCString convertToHtml(const QCString &s);
void extractNamespaceName(const QCString &scopeName, void extractNamespaceName(const QCString &scopeName,
QCString &className,QCString &namespaceName); QCString &className,QCString &namespaceName);
QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ); QCString insertTemplateSpecifierInScope(const QCString &scope,const QCString &templ);
QCString stripScope(const char *name); QCString stripScope(const char *name);
int iSystem(const char *command,const char *args,bool isBatchFile=FALSE); int iSystem(const char *command,const char *args,bool isBatchFile=FALSE);
QCString convertToHtml(const char *s);
QCString convertToXML(const char *s);
#endif #endif
...@@ -11,6 +11,8 @@ use Cwd; ...@@ -11,6 +11,8 @@ use Cwd;
# get current working directory # get current working directory
$pwd=cwd(); $pwd=cwd();
# work-around slashes problems for badly ported perl interpreters
$pwd=~s{/}{\\}g;
# create config file # create config file
open(FILE,">makeconfig") || die "Cannot create file makeconfig!"; open(FILE,">makeconfig") || die "Cannot create file makeconfig!";
......
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