Commit 00e00a1d authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.11

parent 156b0bb6
...@@ -148,7 +148,7 @@ PERL_PATH = /usr/bin/perl ...@@ -148,7 +148,7 @@ PERL_PATH = /usr/bin/perl
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# Configuration options related to the dot tool # Configuration options related to the dot tool
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
HAVE_DOT = YES HAVE_DOT = NO
CLASS_GRAPH = YES CLASS_GRAPH = YES
COLLABORATION_GRAPH = YES COLLABORATION_GRAPH = YES
INCLUDE_GRAPH = YES INCLUDE_GRAPH = YES
......
DOXYGEN Version 1.2.10-20010923 DOXYGEN Version 1.2.11
Please read the installation section of the manual for instructions. Please read the installation section of the manual for instructions.
-------- --------
Dimitri van Heesch (23 September 2001) Dimitri van Heesch (30 September 2001)
...@@ -76,5 +76,8 @@ archive: clean ...@@ -76,5 +76,8 @@ archive: clean
src/version.cpp: Makefile src/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp echo "char versionString[]=\"$(VERSION)\";" > src/version.cpp
addon/doxywizard/version.cpp: Makefile
echo "char versionString[]=\"$(VERSION)\";" > addon/doxywizard/version.cpp
FORCE: FORCE:
DOXYGEN Version 1.2.10_20010923 DOXYGEN Version 1.2.11
Please read INSTALL for compilation instructions. Please read INSTALL for compilation instructions.
...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives. ...@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy, Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (23 September 2001) Dimitri van Heesch (dimitri@stack.nl) (30 September 2001)
1.2.10-20010923 1.2.11
This diff is collapsed.
...@@ -59,7 +59,12 @@ class DocNode ...@@ -59,7 +59,12 @@ class DocNode
VariableList, VariableList,
VariableListEntry, VariableListEntry,
HRuler, HRuler,
LineBreak LineBreak,
ULink,
EMail,
Link,
ProgramListing,
CodeLine
}; };
DocNode(NodeKind k) : m_kind(k) {} DocNode(NodeKind k) : m_kind(k) {}
virtual ~DocNode() {} virtual ~DocNode() {}
...@@ -247,6 +252,67 @@ class LineBreakHandler : public DocNode, public BaseHandler<LineBreakHandler> ...@@ -247,6 +252,67 @@ class LineBreakHandler : public DocNode, public BaseHandler<LineBreakHandler>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/* \brief Node representing a link to section
*
*/
class LinkHandler : public DocNode, public BaseHandler<LinkHandler>
{
public:
LinkHandler(IBaseHandler *parent);
virtual ~LinkHandler();
void startLink(const QXmlAttributes& attrib);
void endLink();
private:
IBaseHandler *m_parent;
QString m_ref;
QString m_text;
};
//-----------------------------------------------------------------------------
/* \brief Node representing a link to an email address
*
*/
class EMailHandler : public DocNode, public BaseHandler<EMailHandler>
{
public:
EMailHandler(IBaseHandler *parent);
virtual ~EMailHandler();
void startEMail(const QXmlAttributes& attrib);
void endEMail();
private:
IBaseHandler *m_parent;
QString m_address;
};
//-----------------------------------------------------------------------------
/* \brief Node representing a link to an URL
*
*/
class ULinkHandler : public DocNode, public BaseHandler<ULinkHandler>
{
public:
ULinkHandler(IBaseHandler *parent);
virtual ~ULinkHandler();
void startULink(const QXmlAttributes& attrib);
void endULink();
private:
IBaseHandler *m_parent;
QString m_url;
QString m_text;
};
//-----------------------------------------------------------------------------
/* \brief Node representing a horizontal ruler /* \brief Node representing a horizontal ruler
* *
*/ */
...@@ -385,15 +451,56 @@ class VariableListHandler : public DocNode, public BaseHandler<VariableListHandl ...@@ -385,15 +451,56 @@ class VariableListHandler : public DocNode, public BaseHandler<VariableListHandl
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
class CodeLineHandler : public DocNode, public BaseHandler<CodeLineHandler>
{
public:
virtual void startCodeLine(const QXmlAttributes&);
virtual void endCodeLine();
virtual void startLineNumber(const QXmlAttributes&);
virtual void endLineNumber();
CodeLineHandler(IBaseHandler *parent);
virtual ~CodeLineHandler();
private:
IBaseHandler *m_parent;
int m_lineNumber;
QString m_anchor;
QString m_ref;
QList<DocNode> m_children;
};
//-----------------------------------------------------------------------------
/*! \brief Node representing a program listing
*
*/
class ProgramListingHandler : public DocNode, public BaseHandler<ProgramListingHandler>
{
public:
virtual void startProgramListing(const QXmlAttributes& attrib);
virtual void endProgramListing();
virtual void startCodeLine(const QXmlAttributes&);
virtual void startLineNumber(const QXmlAttributes&);
ProgramListingHandler(IBaseHandler *parent);
virtual ~ProgramListingHandler();
private:
IBaseHandler *m_parent;
QList<CodeLineHandler> m_children;
bool m_hasLineNumber;
};
//-----------------------------------------------------------------------------
/*! \brief Node representing a paragraph of text and commands. /*! \brief Node representing a paragraph of text and commands.
* *
*/ */
// children: itemizedlist, orderedlist, parameterlist, simplesect, ref, // children: itemizedlist, orderedlist, parameterlist, simplesect, ref,
// variablelist, hruler, linebreak, // variablelist, hruler, linebreak, ulink, email, link
// TODO: // TODO:
// ulink, email, link
// table,
// programlisting, // programlisting,
// table,
// indexentry, formula, image, dotfile // indexentry, formula, image, dotfile
// children handled by MarkupHandler: // children handled by MarkupHandler:
// bold, computeroutput, emphasis, center, // bold, computeroutput, emphasis, center,
...@@ -411,6 +518,10 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> ...@@ -411,6 +518,10 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler>
virtual void startVariableList(const QXmlAttributes& attrib); virtual void startVariableList(const QXmlAttributes& attrib);
virtual void startHRuler(const QXmlAttributes& attrib); virtual void startHRuler(const QXmlAttributes& attrib);
virtual void startLineBreak(const QXmlAttributes& attrib); virtual void startLineBreak(const QXmlAttributes& attrib);
virtual void startULink(const QXmlAttributes& attrib);
virtual void startEMail(const QXmlAttributes& attrib);
virtual void startLink(const QXmlAttributes& attrib);
virtual void startProgramListing(const QXmlAttributes& attrib);
ParagraphHandler(IBaseHandler *parent); ParagraphHandler(IBaseHandler *parent);
virtual ~ParagraphHandler(); virtual ~ParagraphHandler();
......
...@@ -14,9 +14,9 @@ ...@@ -14,9 +14,9 @@
* input used in their production; they are not affected by this license. * input used in their production; they are not affected by this license.
* *
*/ */
/*! \page arch /*! \page arch Doxygen's Internals
\section arch Doxygen's Internals <h3>Doxygen's internals</h3>
<B>Note that this section is still under construction!</B> <B>Note that this section is still under construction!</B>
......
...@@ -12,7 +12,7 @@ class C2 {}; ...@@ -12,7 +12,7 @@ class C2 {};
/** function in group 1 */ /** function in group 1 */
void func() {} void func() {}
/** @} end of group1 */ /** @} */ // end of group1
/** /**
* @defgroup group2 The Second Group * @defgroup group2 The Second Group
...@@ -70,7 +70,7 @@ namespace N1 {}; ...@@ -70,7 +70,7 @@ namespace N1 {};
* Text of the second section * Text of the second section
*/ */
/** @} */ /** @} */ // end of group5
/** @addtogroup group1 /** @addtogroup group1
* *
...@@ -84,5 +84,5 @@ void func2() {} ...@@ -84,5 +84,5 @@ void func2() {}
/** yet another function in group 1 */ /** yet another function in group 1 */
void func3() {} void func3() {}
/** @} */ /** @} */ // end of group1
Name: doxygen Name: doxygen
Version: 1.2.10_20010923 Version: 1.2.11
Summary: documentation system for C, C++ and IDL Summary: documentation system for C, C++ and IDL
Release: 4 Release: 4
Source: doxygen-%{version}.src.tar.gz Source: doxygen-%{version}.src.tar.gz
......
...@@ -2342,21 +2342,12 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( ...@@ -2342,21 +2342,12 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
QCString ClassDef::className() const QCString ClassDef::className() const
{ {
if (!m_className.isEmpty()) QCString className=m_localName;
{
return m_className;
}
else
{
ClassDef *that = (ClassDef *)this;
// m_className is a cache value, so we fake that this function is "const".
that->m_className=m_localName.copy();
Definition *p=getOuterScope(); Definition *p=getOuterScope();
while (p && p->definitionType()==TypeClass) while (p && p->definitionType()==TypeClass)
{ {
that->m_className.prepend(p->localName()+"::"); className.prepend(p->localName()+"::");
p=p->getOuterScope(); p=p->getOuterScope();
} }
return m_className; return className;
}
}; };
...@@ -401,8 +401,6 @@ class ClassDef : public Definition ...@@ -401,8 +401,6 @@ class ClassDef : public Definition
/*! Is this an abstact class? */ /*! Is this an abstact class? */
bool m_isAbstract; bool m_isAbstract;
QCString m_className;
/*! Is the class part of an unnamed namespace? */ /*! Is the class part of an unnamed namespace? */
bool m_isStatic; bool m_isStatic;
}; };
......
...@@ -35,18 +35,22 @@ int ClassList::compareItems(GCI item1, GCI item2) ...@@ -35,18 +35,22 @@ int ClassList::compareItems(GCI item1, GCI item2)
{ {
ClassDef *c1=(ClassDef *)item1; ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2; ClassDef *c2=(ClassDef *)item2;
return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()), //return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()),
c2->localName().data()+getPrefixIndex(c2->localName()) // c2->localName().data()+getPrefixIndex(c2->localName())
); // );
return stricmp(c1->className().data()+getPrefixIndex(c1->className()),
c2->className().data()+getPrefixIndex(c2->className()));
} }
int ClassSDict::compareItems(GCI item1, GCI item2) int ClassSDict::compareItems(GCI item1, GCI item2)
{ {
ClassDef *c1=(ClassDef *)item1; ClassDef *c1=(ClassDef *)item1;
ClassDef *c2=(ClassDef *)item2; ClassDef *c2=(ClassDef *)item2;
return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()), //return stricmp(c1->localName().data()+getPrefixIndex(c1->localName()),
c2->localName().data()+getPrefixIndex(c2->localName()) // c2->localName().data()+getPrefixIndex(c2->localName())
); // );
return stricmp(c1->className().data()+getPrefixIndex(c1->className()),
c2->className().data()+getPrefixIndex(c2->className()));
} }
ClassListIterator::ClassListIterator(const ClassList &cllist) : ClassListIterator::ClassListIterator(const ClassList &cllist) :
......
...@@ -240,6 +240,7 @@ static void endCodeLine() ...@@ -240,6 +240,7 @@ static void endCodeLine()
*/ */
static void codifyLines(char *text) static void codifyLines(char *text)
{ {
//printf("codifyLines(%d,\"%s\")\n",g_yyLineNr,text);
char *p=text,*sp=p; char *p=text,*sp=p;
char c; char c;
bool done=FALSE; bool done=FALSE;
......
...@@ -143,6 +143,7 @@ static void initParser() ...@@ -143,6 +143,7 @@ static void initParser()
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void scanString(const char *s); void scanString(const char *s);
void scanDoc(const char *s);
void internalParseDocument(const char *s); void internalParseDocument(const char *s);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -324,7 +325,7 @@ static void verbIncludeFile(OutputDocInterface &od,const char *name) ...@@ -324,7 +325,7 @@ static void verbIncludeFile(OutputDocInterface &od,const char *name)
if ((fd=findFileDef(Doxygen::exampleNameDict,name,ambig))) if ((fd=findFileDef(Doxygen::exampleNameDict,name,ambig)))
{ {
od.startCodeFragment(); od.startCodeFragment();
od.codify(fileToString(fd->absFilePath())); od.codify(fileToString(fd->absFilePath())+"\n");
od.endCodeFragment(); od.endCodeFragment();
} }
else if (ambig) else if (ambig)
...@@ -909,7 +910,7 @@ TT [tT][tT] ...@@ -909,7 +910,7 @@ TT [tT][tT]
UL [uU][lL] UL [uU][lL]
VAR [vV][aA][rR] VAR [vV][aA][rR]
BLOCKQUOTE [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE] BLOCKQUOTE [bB][lL][oO][cC][kK][qQ][uU][oO][tT][eE]
DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") DOCPARAM ("#")?([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
OPNEW {B}+"new"({B}*"[]")? OPNEW {B}+"new"({B}*"[]")?
OPDEL {B}+"delete"({B}*"[]")? OPDEL {B}+"delete"({B}*"[]")?
OPARG "("[a-z_A-Z0-9,\<\> \t\*\&]*")" OPARG "("[a-z_A-Z0-9,\<\> \t\*\&]*")"
...@@ -1567,14 +1568,14 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1567,14 +1568,14 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
<DocScan>"\\capt".* <DocScan>"\\capt".*
<DocParam>({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM}{BSEP}* { <DocParam>({DOCPARAM}{BN}*","{BN}*)*{DOCPARAM}{BSEP}* {
outDoc->startDescTableTitle(); outDoc->startDescTableTitle();
outDoc->docify(substitute(yytext,"\"","").stripWhiteSpace()); scanDoc(substitute(yytext,"\"","").stripWhiteSpace());
outDoc->endDescTableTitle(); outDoc->endDescTableTitle();
outDoc->startDescTableData(); outDoc->startDescTableData();
BEGIN(DocScan); BEGIN(DocScan);
} }
<DocException>{SCOPENAME} { <DocException>{SCOPENAME} {
outDoc->startDescTableTitle(); outDoc->startDescTableTitle();
outDoc->docify(yytext); generateRef(*outDoc,className,yytext,FALSE);
outDoc->endDescTableTitle(); outDoc->endDescTableTitle();
outDoc->startDescTableData(); outDoc->startDescTableData();
BEGIN(DocScan); BEGIN(DocScan);
...@@ -1938,6 +1939,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) ...@@ -1938,6 +1939,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG})
} }
} }
<DocCodeBlock>{BN}*{CMD}"endcode"/[^a-z_A-Z0-9] { // needed to match things like \endcode. (note the dot) <DocCodeBlock>{BN}*{CMD}"endcode"/[^a-z_A-Z0-9] { // needed to match things like \endcode. (note the dot)
codeBlock+="\n";
parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName); parseCode(*outDoc,className,codeBlock,exampleDoc,exampleName);
//printf("Code block\n-------------\n%s\n--------------\n",codeBlock.data()); //printf("Code block\n-------------\n%s\n--------------\n",codeBlock.data());
outDoc->endCodeFragment(); outDoc->endCodeFragment();
...@@ -2449,6 +2451,24 @@ void scanString(const char *s) ...@@ -2449,6 +2451,24 @@ void scanString(const char *s)
BEGIN( oldRule ); BEGIN( oldRule );
} }
void scanDoc(const char *s)
{
const char *oldInputString = inputString;
int oldInputPosition = inputPosition;
int oldRule = YY_START;
YY_BUFFER_STATE oldBuffer = YY_CURRENT_BUFFER;
yy_switch_to_buffer(yy_create_buffer(docYYin, YY_BUF_SIZE));
inputString = s;
inputPosition = 0;
BEGIN( DocScan );
docYYlex();
yy_delete_buffer(YY_CURRENT_BUFFER);
yy_switch_to_buffer(oldBuffer);
inputString = oldInputString;
inputPosition = oldInputPosition;
BEGIN( oldRule );
}
void internalParseDocument(const char *s) void internalParseDocument(const char *s)
{ {
const char *oldInputString = inputString; const char *oldInputString = inputString;
......
...@@ -937,7 +937,7 @@ static void buildClassList(Entry *root) ...@@ -937,7 +937,7 @@ static void buildClassList(Entry *root)
// add class to the list // add class to the list
//printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data()); //printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
Doxygen::classSDict.inSort(fullName,cd); Doxygen::classSDict.append(fullName,cd);
// also add class to the correct structural context // also add class to the correct structural context
Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName); Definition *d = findScopeFromQualifiedName(Doxygen::globalScope,fullName);
...@@ -2543,7 +2543,7 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2543,7 +2543,7 @@ static void findUsedClassesForClass(Entry *root,
masterCd->getDefFileName(),masterCd->getDefLine(), masterCd->getDefFileName(),masterCd->getDefLine(),
usedName,ClassDef::Class); usedName,ClassDef::Class);
//usedCd->setIsTemplateBaseClass(count); //usedCd->setIsTemplateBaseClass(count);
Doxygen::hiddenClasses.inSort(usedName,usedCd); Doxygen::hiddenClasses.append(usedName,usedCd);
} }
if (isArtificial) usedCd->setClassIsArtificial(); if (isArtificial) usedCd->setClassIsArtificial();
instanceCd->addUsedClass(usedCd,md->name()); instanceCd->addUsedClass(usedCd,md->name());
...@@ -2600,7 +2600,7 @@ static void findUsedClassesForClass(Entry *root, ...@@ -2600,7 +2600,7 @@ static void findUsedClassesForClass(Entry *root,
usedCd = new ClassDef( usedCd = new ClassDef(
masterCd->getDefFileName(),masterCd->getDefLine(), masterCd->getDefFileName(),masterCd->getDefLine(),
type,ClassDef::Class); type,ClassDef::Class);
Doxygen::hiddenClasses.inSort(type,usedCd); Doxygen::hiddenClasses.append(type,usedCd);
} }
if (isArtificial) usedCd->setClassIsArtificial(); if (isArtificial) usedCd->setClassIsArtificial();
instanceCd->addUsedClass(usedCd,md->name()); instanceCd->addUsedClass(usedCd,md->name());
...@@ -2700,7 +2700,7 @@ static bool findTemplateInstanceRelation(Entry *root, ...@@ -2700,7 +2700,7 @@ static bool findTemplateInstanceRelation(Entry *root,
if (freshInstance) if (freshInstance)
{ {
Doxygen::classSDict.inSort(instanceClass->name(),instanceClass); Doxygen::classSDict.append(instanceClass->name(),instanceClass);
instanceClass->setTemplateBaseClassNames(templateNames); instanceClass->setTemplateBaseClassNames(templateNames);
// search for new template instances caused by base classes of // search for new template instances caused by base classes of
...@@ -2967,7 +2967,7 @@ static bool findClassRelation( ...@@ -2967,7 +2967,7 @@ static bool findClassRelation(
{ {
baseClass=new ClassDef(root->fileName,root->startLine, baseClass=new ClassDef(root->fileName,root->startLine,
baseClassName,ClassDef::Class); baseClassName,ClassDef::Class);
Doxygen::hiddenClasses.inSort(baseClassName,baseClass); Doxygen::hiddenClasses.append(baseClassName,baseClass);
if (isArtificial) baseClass->setClassIsArtificial(); if (isArtificial) baseClass->setClassIsArtificial();
} }
} }
...@@ -2975,7 +2975,7 @@ static bool findClassRelation( ...@@ -2975,7 +2975,7 @@ static bool findClassRelation(
{ {
baseClass=new ClassDef(root->fileName,root->startLine, baseClass=new ClassDef(root->fileName,root->startLine,
baseClassName,ClassDef::Class); baseClassName,ClassDef::Class);
Doxygen::classSDict.inSort(baseClassName,baseClass); Doxygen::classSDict.append(baseClassName,baseClass);
if (isArtificial) baseClass->setClassIsArtificial(); if (isArtificial) baseClass->setClassIsArtificial();
} }
// add base class to this class // add base class to this class
...@@ -4413,14 +4413,14 @@ static void findMember(Entry *root, ...@@ -4413,14 +4413,14 @@ static void findMember(Entry *root,
!findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl)) !findGlobalMember(root,namespaceName,funcName,funcTempList,funcArgs,funcDecl))
{ {
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: class for member %s cannot " "Warning: class for member `%s' cannot "
"be found.", funcName.data() "be found.", funcName.data()
); );
} }
else if (!className.isEmpty()) else if (!className.isEmpty())
{ {
warn(root->fileName,root->startLine, warn(root->fileName,root->startLine,
"Warning: member %s of class %s cannot be found", "Warning: member `%s' of class `%s' cannot be found",
funcName.data(),className.data()); funcName.data(),className.data());
} }
} }
...@@ -7130,9 +7130,11 @@ void parseInput() ...@@ -7130,9 +7130,11 @@ void parseInput()
msg("Search for main page...\n"); msg("Search for main page...\n");
findMainPage(root); findMainPage(root);
msg("Sorting member lists...\n"); msg("Sorting lists...\n");
Doxygen::memberNameList.sort(); Doxygen::memberNameList.sort();
Doxygen::functionNameList.sort(); Doxygen::functionNameList.sort();
Doxygen::hiddenClasses.sort();
Doxygen::classSDict.sort();
msg("Freeing entry tree\n"); msg("Freeing entry tree\n");
delete root; delete root;
......
...@@ -160,16 +160,17 @@ void LatexGenerator::init() ...@@ -160,16 +160,17 @@ void LatexGenerator::init()
<< endl << endl
<< "refman.ps: refman.dvi" << endl << "refman.ps: refman.dvi" << endl
<< "\tdvips -o refman.ps refman.dvi" << endl << "\tdvips -o refman.ps refman.dvi" << endl
<< endl << endl;
<< "refman.pdf: refman.ps" << endl;
if (Config_getBool("USE_PDFLATEX")) // use pdflatex instead of latex if (Config_getBool("USE_PDFLATEX")) // use pdflatex instead of latex
{ {
t << "refman.pdf: refman.tex" << endl;
t << "\tpdflatex refman.tex" << endl; t << "\tpdflatex refman.tex" << endl;
t << "\tmakeindex refman.idx" << endl; t << "\tmakeindex refman.idx" << endl;
t << "\tpdflatex refman.tex" << endl << endl; t << "\tpdflatex refman.tex" << endl << endl;
} }
else // otherwise use ps2pdf: not as nice :( else // otherwise use ps2pdf: not as nice :(
{ {
t << "refman.pdf: refman.ps" << endl;
#if defined(_MSC_VER) #if defined(_MSC_VER)
// ps2pdf.bat does not work properly from a makefile using GNU make! // ps2pdf.bat does not work properly from a makefile using GNU make!
t << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite " t << "\tgswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "
......
...@@ -288,7 +288,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -288,7 +288,7 @@ MemberDef::MemberDef(const char *df,int dl,
args=a; args=a;
args=removeRedundantWhiteSpace(args); 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;
virt=v; virt=v;
prot=p; prot=p;
......
...@@ -255,8 +255,8 @@ class MemberDef : public Definition ...@@ -255,8 +255,8 @@ class MemberDef : public Definition
QCString init; // initializer QCString init; // initializer
int initLines; // number of lines in the initializer int initLines; // number of lines in the initializer
QCString decl; // member declaration in class QCString decl; // member declaration in class
QCString declFile; // file where the declaration was found //QCString declFile; // file where the declaration was found
int declLine; // line where the declaration was found //int declLine; // line where the declaration was found
QCString def; // member definition in code (fully qualified name) QCString def; // member definition in code (fully qualified name)
QCString anc; // HTML anchor name QCString anc; // HTML anchor name
Specifier virt; // normal/virtual/pure virtual Specifier virt; // normal/virtual/pure virtual
......
...@@ -23,6 +23,45 @@ ...@@ -23,6 +23,45 @@
#include <qlist.h> #include <qlist.h>
#include <qdict.h> #include <qdict.h>
#define AUTORESIZE 1
#if AUTORESIZE
const uint SDict_primes[] =
{
17,
29,
47,
71,
113,
179,
293,
457,
733,
1171,
1871,
2999,
4787,
7669,
12251,
19603,
31379,
50177,
80287,
128449,
205519,
328829,
526139,
841801,
1346881,
2155007,
3448033,
5516827,
8826919,
14123059,
0xffffffff
};
#endif
template<class T> class SDict; template<class T> class SDict;
/*! internal wrapper class that redirects compareItems() to the /*! internal wrapper class that redirects compareItems() to the
...@@ -51,16 +90,22 @@ class SDict ...@@ -51,16 +90,22 @@ class SDict
private: private:
SList<T> *m_list; SList<T> *m_list;
QDict<T> *m_dict; QDict<T> *m_dict;
int m_sizeIndex;
public: public:
/*! Create an ordered dictionary. /*! Create an ordered dictionary.
* \param size The size of the dictionary. Should be a prime number for * \param size The size of the dictionary. Should be a prime number for
* best distribution of elements. * best distribution of elements.
*/ */
SDict(int size) SDict(int size) : m_sizeIndex(0)
{ {
m_list = new SList<T>(this); m_list = new SList<T>(this);
#if AUTORESIZE
while ((uint)size>SDict_primes[m_sizeIndex]) m_sizeIndex++;
m_dict = new QDict<T>(SDict_primes[m_sizeIndex]);
#else
m_dict = new QDict<T>(size); m_dict = new QDict<T>(size);
#endif
} }
/*! Destroys the dictionary */ /*! Destroys the dictionary */
virtual ~SDict() virtual ~SDict()
...@@ -78,6 +123,12 @@ class SDict ...@@ -78,6 +123,12 @@ class SDict
{ {
m_list->append(d); m_list->append(d);
m_dict->insert(key,d); m_dict->insert(key,d);
#if AUTORESIZE
if (m_dict->size()>SDict_primes[m_sizeIndex])
{
m_dict->resize(SDict_primes[++m_sizeIndex]);
}
#endif
} }
/*! Sorts the members of the dictionary. First appending a number /*! Sorts the members of the dictionary. First appending a number
* of members and then sorting them is faster (O(NlogN) than using * of members and then sorting them is faster (O(NlogN) than using
...@@ -96,6 +147,12 @@ class SDict ...@@ -96,6 +147,12 @@ class SDict
{ {
m_list->inSort(d); m_list->inSort(d);
m_dict->insert(key,d); m_dict->insert(key,d);
#if AUTORESIZE
if (m_dict->size()>SDict_primes[m_sizeIndex])
{
m_dict->resize(SDict_primes[++m_sizeIndex]);
}
#endif
} }
/*! Indicates whether or not the dictionary owns its elements */ /*! Indicates whether or not the dictionary owns its elements */
void setAutoDelete(bool val) void setAutoDelete(bool val)
......
...@@ -891,26 +891,29 @@ void setAnchors(char id,MemberList *ml,int groupId) ...@@ -891,26 +891,29 @@ void setAnchors(char id,MemberList *ml,int groupId)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
/*! takes the \a buf of the given lenght \a len and converts CR LF (DOS)
* or CR (MAC) line ending to LF (Unix). Returns the length of the
* converted content (i.e. the same as \a len (Unix, MAC) or
* smaller (DOS).
*/
int filterCRLF(char *buf,int len) int filterCRLF(char *buf,int len)
{ {
char *ps=buf; int src = 0; // source index
char *pd=buf; int dest = 0; // destination index
char c; char c; // current character
int i;
for (i=0;i<len;i++) while (src<len)
{
c=*ps++;
if (c=='\r')
{ {
if (*ps=='\n') ps++; // DOS: CR+LF -> LF c = buf[src++]; // Remember the processed character.
*pd++='\n'; // MAC: CR -> LF if (c == '\r') // CR to be solved (MAC, DOS)
}
else
{ {
*pd++=c; c = '\n'; // each CR to LF
if (src<len && buf[src] == '\n')
++src; // skip LF just after CR (DOS)
} }
buf[dest++] = c; // copy the (modified) character to dest
} }
return len+pd-ps; return dest; // length of the valid part of the buf
} }
/*! reads a file with name \a name and returns it as a string. If \a filter /*! reads a file with name \a name and returns it as a string. If \a filter
......
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