Commit 53da6739 authored by dimitri's avatar dimitri

Release-1.3.7

parent 9b0cf1e0
DOXYGEN Version 1.3.6-20040427
DOXYGEN Version 1.3.7
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (27 April 2004)
Dimitri van Heesch (07 May 2004)
aix-g++
aix-xlc
beos-g++
dgux-g++
freebsd-g++
gnu-g++
......
DOXYGEN Version 1.3.6_20040427
DOXYGEN Version 1.3.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) (27 April 2004)
Dimitri van Heesch (dimitri@stack.nl) (07 May 2004)
1.3.6-20040427
1.3.7
......@@ -23,7 +23,7 @@ f_make=NO
f_dot=NO
f_perl=NO
f_plf_auto=NO
f_prefix=/usr
f_prefix=/usr/local
f_insttool=NO
f_english=NO
f_wizard=NO
......@@ -136,6 +136,9 @@ if test -z "$f_platform"; then
AIX*)
f_platform=aix-xlc
;;
BeOS*)
f_platform=beos-g++
;;
dgux:*)
f_platform=dgux-g++
;;
......@@ -253,7 +256,7 @@ if test "$f_wizard" = YES; then
echo "QTDIR not set and Qt not found at standard locations!"
echo
echo "tmake requires the QTDIR environment variable to be set."
echo "check your Qt installation!"
echo "check the Qt installation instructions!"
exit 2
else
if test ! -d "$QTDIR/lib"; then
......
......@@ -30,7 +30,7 @@ clean:
language: language.doc
language.doc: maintainers.txt language.tpl translator.pl
set DOXYGEN_DOCDIR=. & set VERSION=$(VERSION) & $(PERL) translator.pl
language.doc: maintainers.txt language.tpl translator.py
set DOXYGEN_DOCDIR=. & set VERSION=$(VERSION) & python translator.py
FORCE:
......@@ -30,9 +30,9 @@ clean:
language: language.doc
language.doc: maintainers.txt language.tpl translator.pl
language.doc: maintainers.txt language.tpl translator.py
set DOXYGEN_DOCDIR=.
set VERSION=$(VERSION)
$(PERL) translator.pl
python translator.py
FORCE:
......@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other
than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile).
Currently (version 1.3.6-20040413), 28 languages
Currently (version 1.3.6-20040427), 28 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, French, German, Greek,
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.6_20040427
Version: 1.3.7
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -130,6 +130,8 @@
#define _OS_UNIXWARE7_
#elif defined(__CYGWIN__)
#define _OS_CYGWIN_
#elif defined(__BEOS__)
#define _OS_BEOS_
#else
#error "Qt has not been ported to this OS - talk to qt-bugs@trolltech.com"
#endif
......
......@@ -986,7 +986,11 @@ void ClassDef::writeDocumentation(OutputList &ol)
}
ol.endTextLink();
ol.popGeneratorState();
ol.pushGeneratorState();
ol.disable(OutputGenerator::RTF);
ol.newParagraph();
ol.popGeneratorState();
}
}
ol.writeSynopsis();
......
......@@ -1999,7 +1999,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<SkipString>"//"|"/*" {
g_code->codify(yytext);
}
<SkipString>\" {
<SkipString>@?\" {
g_code->codify(yytext);
endFontClass();
BEGIN( g_lastStringContext );
......
......@@ -300,9 +300,9 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
{
a->type = removeRedundantWhiteSpace(g_curArgTypeName);
}
//printf("a->type=%s a->name=%s a->array=%s\n",a->type.data(),a->name.data());
a->array += removeRedundantWhiteSpace(g_curArgArray);
a->defval = g_curArgDefValue.copy();
//printf("a->type=%s a->name=%s a->defval=\"%s\"\n",a->type.data(),a->name.data(),a->defval.data());
a->docs = g_curArgDocs.stripWhiteSpace();
//printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data());
g_argList->append(a);
......
......@@ -76,7 +76,6 @@ static void removeFromMap(Definition *d)
Definition::Definition(const char *df,int dl,
const char *name,const char *b,
const char *d,bool isSymbol)
: m_reachableDefs(17)
{
//QCString ns;
m_defFileName = df;
......@@ -112,8 +111,6 @@ Definition::Definition(const char *df,int dl,
m_docFile=(QCString)"<"+name+">";
m_isSymbol = isSymbol;
if (m_isSymbol) addToMap(name,this);
m_reachableDefs.setAutoDelete(TRUE);
m_reachabilityComputed=FALSE;
}
Definition::~Definition()
......@@ -761,32 +758,3 @@ QCString Definition::convertNameToFile(const char *name,bool allowDots) const
}
}
void Definition::addReachableDef(Definition *def,int distance)
{
if (m_reachableDefs.find(def->qualifiedName()))
{
m_reachableDefs.insert(def->qualifiedName(),new ReachableDefinition(def,distance));
}
}
void Definition::computeReachability()
{
if (m_reachabilityComputed) return;
addReachableDef(this,0);
Definition *parent = getOuterScope();
int i=1;
while (parent)
{
parent->computeReachability();
QDictIterator<ReachableDefinition> dli(m_reachableDefs);
ReachableDefinition *rd;
for (dli.toFirst();(rd=dli.current());++dli)
{
addReachableDef(rd->def,i);
}
parent=parent->getOuterScope();
i++;
}
m_reachabilityComputed=TRUE;
}
......@@ -25,8 +25,6 @@
class FileDef;
class OutputList;
class SectionDict;
//class MemberList;
//class MemberDict;
class MemberSDict;
class MemberDef;
class GroupDef;
......@@ -52,7 +50,7 @@ class Definition
TypeClass, TypeMember, TypeFile, TypeGroup,
TypeNamespace, TypePackage, TypePage
};
/*! Use this for dynamic inspection of the derived class */
/*! Use this for dynamic inspection of the type of the derived class */
virtual DefType definitionType() = 0;
/*! Create a new definition */
......@@ -60,51 +58,110 @@ class Definition
const char *defFileName,int defLine,
const char *name,const char *b=0,const char *d=0,
bool isSymbol=TRUE);
/*! Destroys the definition */
virtual ~Definition();
/*! Returns the name of the definition */
const QCString& name() const { return m_name; }
/*! Returns the base name of the output file that contains this
* definition.
*/
virtual QCString qualifiedName();
/*! Returns the local name without any scope qualifiers. */
QCString localName() const;
/*! Returns the base file name (without extension) of this definition.
* as it is referenced to/written to disk.
*/
virtual QCString getOutputFileBase() const = 0;
/*! Returns the name of the source listing of this file. */
const QCString getSourceFileBase() const { ASSERT(0); return "NULL"; }
/*! Returns the detailed description of this definition */
const QCString& documentation() const { return m_doc; }
/*! Returns the brief description of this definition */
const QCString& briefDescription() const { return m_brief; }
/*! Sets a new \a name for the definition */
void setName(const char *name) { m_name=name; }
/*! Sets the documentation of this definition to \a d. */
void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
/*! Returns the line number at which the detailed documentation was found. */
int docLine() const { return m_docLine; }
/*! Returns the file in which the detailed documentation block was found.
* This can differ from getDefFileName().
*/
QCString docFile() const { return m_docFile; }
/*! Sets the brief description of this definition to \a b.
* A dot is added to the sentence if not available.
*/
void setBriefDescription(const char *b,const char *briefFile,int briefLine);
/*! Returns the line number at which the brief description was found. */
int briefLine() const { return m_briefLine; }
/*! Returns the file in which the brief description was found.
* This can differ from getDefFileName().
*/
QCString briefFile() const { return m_briefFile; }
/*! returns the file in which this definition was found */
QCString getDefFileName() const { return m_defFileName; }
/*! returns the line number at which the definition was found */
int getDefLine() const { return m_defLine; }
/*! Returns TRUE iff the definition is documented */
virtual bool hasDocumentation() const;
/*! Returns TRUE iff it is possible to link to this item within this
* project.
*/
virtual bool isLinkableInProject() const = 0;
/*! Returns TRUE iff it is possible to link to this item. This can
* be a link to another project imported via a tag file.
*/
virtual bool isLinkable() const = 0;
virtual QCString getReference() const { return m_ref; }
// symbols
QCString symbolName() const { return m_symbolName; }
void setSymbolName(const QCString &name) { m_symbolName=name; }
/*! If this definition was imported via a tag file, this function
* returns the tagfile for the external project. This can be
* translated into an external link target via
* Doxygen::tagDestinationDict
*/
virtual QCString getReference() const { return m_ref; }
/*! Returns TRUE if this definition is imported via a tag file. */
virtual bool isReference() const { return !m_ref.isEmpty(); }
/*! Sets the tag file id via which this definition was imported. */
void setReference(const char *r) { m_ref=r; }
/*! Returns the name of this definition as it appears in the symbol map.
*/
QCString symbolName() const { return m_symbolName; }
/*! Sets the name of this definition as it should appear in the symbol map.
*/
void setSymbolName(const QCString &name) { m_symbolName=name; }
/*! Add the list of anchors that mark the sections that are found in the
* documentation.
*/
void addSectionsToDefinition(QList<SectionInfo> *anchorList);
/*! Writes the documentation anchors of the definition to
* the Doxygen::tagFile stream.
*/
void writeDocAnchorsToTagFile();
// source references
......@@ -120,28 +177,14 @@ class Definition
void addSourceReferencedBy(MemberDef *d);
void addSourceReferences(MemberDef *d);
//{
// if (todoId!=0) m_todoId=todoId;
// if (testId!=0) m_testId=testId;
// if (bugId!=0) m_bugId=bugId;
//}
//int todoId() const { return m_todoId; }
//int testId() const { return m_testId; }
//int bugId() const { return m_bugId; }
void setRefItems(const QList<ListItemInfo> *sli);
void mergeRefItems(Definition *d);
const QList<ListItemInfo> *xrefListItems() const;
/*! returns the file in which this definition was found */
QCString getDefFileName() const { return m_defFileName; }
/*! returns the line number at which the definition was found */
int getDefLine() const { return m_defLine; }
virtual Definition *findInnerCompound(const char *name);
virtual Definition *getOuterScope() const { return m_outerScope; }
virtual void addInnerCompound(Definition *d);
virtual void setOuterScope(Definition *d) { m_outerScope = d; }
virtual void computeReachability();
MemberSDict *getReferencesMembers() const { return m_sourceRefsDict; }
MemberSDict *getReferencedByMembers() const { return m_sourceRefByDict; }
......@@ -149,7 +192,6 @@ class Definition
void makePartOfGroup(GroupDef *gd);
GroupList *partOfGroups() const { return m_partOfGroups; }
QCString convertNameToFile(const char *name,bool allowDots=FALSE) const;
void addReachableDef(Definition *d,int distance);
protected:
int m_startBodyLine; // line number of the start of the definition
......@@ -169,10 +211,6 @@ class Definition
/*! List of groups this definition is part of */
GroupList *m_partOfGroups;
// reachability of other definitions from this one
QDict<ReachableDefinition> m_reachableDefs;
bool m_reachabilityComputed;
private:
int getXRefListId(const char *listName) const;
void writeSourceRefList(OutputList &ol,const char *scopeName,
......
......@@ -82,12 +82,14 @@ static void writeGraphFooter(QTextStream &t)
* site image map.
* \param t the stream to which the result is written.
* \param mapName the name of the map file.
* \param relPath the relative path to the root of the output directory
* (used in case CREATE_SUBDIRS is enabled).
* \param urlOnly if FALSE the url field in the map contains an external
* references followed by a $ and then the URL.
* \returns TRUE if succesful.
*/
static bool convertMapFile(QTextStream &t,const char *mapName,
bool urlOnly=FALSE)
const QCString relPath, bool urlOnly=FALSE)
{
QFile f(mapName);
if (!f.open(IO_ReadOnly))
......@@ -146,7 +148,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,
{
if ((dest=Doxygen::tagDestinationDict[df->ref()])) t << *dest << "/";
}
if (!df->file().isEmpty()) t << df->file() << Doxygen::htmlFileExtension;
if (!df->file().isEmpty()) t << relPath << df->file() << Doxygen::htmlFileExtension;
if (!df->anchor().isEmpty()) t << "#" << df->anchor();
}
else
......@@ -175,7 +177,7 @@ static bool convertMapFile(QTextStream &t,const char *mapName,
if ((dest=Doxygen::tagDestinationDict[refPtr])) t << *dest << "/";
t << "\" ";
}
t << "href=\"";
t << "href=\"" << relPath;
if (*refPtr!='\0')
{
if ((dest=Doxygen::tagDestinationDict[refPtr])) t << *dest << "/";
......@@ -1004,7 +1006,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "_map\">" << endl;
out << "<map name=\"" << mapLabel << "_map\">" << endl;
convertMapFile(out,mapName);
convertMapFile(out,mapName,"");
out << "</map></td></tr>" << endl;
//thisDir.remove(mapName);
}
......@@ -1740,7 +1742,7 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
out << "\"></center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapLabel << "\">" << endl;
......@@ -2004,7 +2006,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\">" << endl;
......@@ -2185,7 +2187,7 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
convertMapFile(tmpout,baseName+".map",relPath);
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\">" << endl;
......@@ -2421,7 +2423,7 @@ QString getDotImageMapFromFile(const QString& inFile, const QString& outDir)
}
QString result;
QTextOStream tmpout(&result);
convertMapFile(tmpout, outFile, TRUE);
convertMapFile(tmpout, outFile, "",TRUE);
QDir().remove(outFile);
// printf("result=%s\n",result.data());
......
......@@ -3679,7 +3679,7 @@ static void computeClassRelations()
if ((cd==0 || (!cd->hasDocumentation() && !cd->isReference())) &&
bName.right(2)!="::")
{
if (!root->name.isEmpty() && root->name[0]!='@' && // normal name
if (!root->name.isEmpty() && root->name.find('@')==-1 && // normal name
(guessSection(root->fileName)==Entry::HEADER_SEC ||
Config_getBool("EXTRACT_LOCAL_CLASSES")) && // not defined in source file
(root->protection!=Private || Config_getBool("EXTRACT_PRIVATE")) && // hidden by protection
......
......@@ -34,7 +34,6 @@
#include "section.h"
#include "membergroup.h"
#include "reflist.h"
//#include "packagedef.h"
class PageSList;
class PageSDict;
......
......@@ -38,7 +38,6 @@ Entry::Entry()
argList->setAutoDelete(TRUE);
//printf("Entry::Entry() tArgList=0\n");
tArgLists = 0;
//mtArgList = 0;
mGrpId = -1;
tagInfo = 0;
sli = 0;
......@@ -88,9 +87,6 @@ Entry::Entry(const Entry &e)
initLines = e.initLines;
callGraph = e.callGraph;
objc = e.objc;
//todoId = e.todoId;
//testId = e.testId;
//bugId = e.bugId;
tagInfo = e.tagInfo;
sublist = new QList<Entry>;
sublist->setAutoDelete(TRUE);
......@@ -152,19 +148,6 @@ Entry::Entry(const Entry &e)
tArgLists = copyArgumentLists(e.tArgLists);
}
// deep copy template argument list
//if (e.mtArgList)
//{
// mtArgList = new ArgumentList;
// mtArgList->setAutoDelete(TRUE);
// //printf("Entry::Entry(copy) new tArgList=%p\n",tArgList);
// QListIterator<Argument> mtali(*e.mtArgList);
// for (;(a=mtali.current());++mtali)
// {
// mtArgList->append(new Argument(*a));
// //printf("appending argument %s %s\n",a->type.data(),a->name.data());
// }
//}
if (e.sli)
{
sli = new QList<ListItemInfo>;
......@@ -206,17 +189,6 @@ void Entry::addSubEntry(Entry *current)
//printf("Entry::addSubEntry(%s) %p\n",current->name.data(),current->tArgList);
current->parent=this;
sublist->append(current);
//if (current->tArgList)
//{
// Argument * a=current->tArgList->first();
// while (a)
// {
// printf("type=%s name=%s\n",a->type.data(),a->name.data());
// a=current->tArgList->next();
// }
//}
}
void Entry::reset()
......@@ -227,7 +199,6 @@ void Entry::reset()
bitfields.resize(0);
exception.resize(0);
program.resize(0);
//body.resize(0);
includeFile.resize(0);
includeName.resize(0);
doc.resize(0);
......@@ -243,8 +214,6 @@ void Entry::reset()
inbodyLine=-1;
inside.resize(0);
fileName.resize(0);
//scopeSpec.resize(0);
//memberSpec.resize(0);
initializer.resize(0);
initLines = -1;
startLine = 1;
......@@ -252,9 +221,6 @@ void Entry::reset()
endBodyLine = -1;
mGrpId = -1;
callGraph = FALSE;
//todoId = 0;
//testId = 0;
//bugId = 0;
section = EMPTY_SEC;
mtype = Method;
virt = Normal;
......@@ -347,18 +313,6 @@ int Entry::getSize()
al=tArgLists->next();
}
}
//if (mtArgList)
//{
// a=mtArgList->first();
// while (e)
// {
// size+=sizeof(Argument);
// size+=a->type.length()+1
// +a->name.length()+1
// +a->defval.length()+1;
// a=mtArgList->next();
// }
//}
return size;
}
......
......@@ -306,9 +306,9 @@ class Entry
bool objc; //!< Objective-C construct
enum
{
GROUPDOC_NORMAL, //<! defgroup
GROUPDOC_ADD, //<! addgroup
GROUPDOC_WEAK //<! weakgroup
GROUPDOC_NORMAL, //!< defgroup
GROUPDOC_ADD, //!< addgroup
GROUPDOC_WEAK //!< weakgroup
} groupDocType; //!< kind of group
/// return the command name used to define GROUPDOC_SEC
const char *groupDocCmd() const
......
......@@ -31,24 +31,6 @@ struct Example
QCString file;
};
//class ExampleList : public QList<Example>
//{
// public:
// ExampleList() : QList<Example>() {}
// ~ExampleList() {}
// int compareItems(GCI item1,GCI item2)
// {
// return stricmp(((Example *)item1)->name,((Example *)item2)->name);
// }
//};
//class ExampleDict : public QDict<Example>
//{
// public:
// ExampleDict(int size=17) : QDict<Example>(size) {}
// ~ExampleDict() {}
//};
class ExampleSDict : public SDict<Example>
{
public:
......
......@@ -573,6 +573,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
{
ol.startMemberItem(0);
ol.docify(theTranslator->trGroup(FALSE,TRUE));
ol.docify(" ");
ol.insertMemberAlign();
ol.writeObjectLink(gd->getReference(),gd->getOutputFileBase(),0,gd->groupTitle());
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
......
......@@ -37,3 +37,4 @@ int main(int argc,char **argv)
generateOutput();
return 0;
}
......@@ -188,7 +188,11 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
QCString n=a->defval;
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
ol.docify(" = ");
linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n);
ol.startTypewriter();
linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n,FALSE,TRUE,TRUE);
ol.endTypewriter();
}
a=defArgList->next();
if (a)
......@@ -618,21 +622,11 @@ void MemberDef::setDefinitionTemplateParameterLists(QList<ArgumentList> *lists)
void MemberDef::writeLink(OutputList &ol,ClassDef *,NamespaceDef *,
FileDef *,GroupDef *gd)
{
//Definition *d=0;
//if (cd) d=cd; else if (nd) d=nd; else if (fd) d=fd; else if (gd) d=gd;
//if (d==0) { err("Member %s without definition! Please report this bug!\n",name().data()); return; }
//if (group!=0 && gd==0) // forward link to the group
//{
// ol.writeObjectLink(group->getReference(),group->getOutputFileBase(),anchor(),name());
//}
//else // local link
//{
QCString sep = Config_getBool("OPTIMIZE_OUTPUT_JAVA") ? "." : "::";
QCString n = name();
if (classDef && gd) n.prepend(classDef->name()+sep);
else if (nspace && gd) n.prepend(nspace->name()+sep);
ol.writeObjectLink(getReference(),getOutputFileBase(),anchor(),n);
//}
}
/*! If this member has an anonymous class/struct/union as its type, then
......@@ -985,7 +979,11 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!name().isEmpty() && name().at(0)!='@') // hide annonymous stuff
{
//printf("Member name=`%s gd=%p md->groupDef=%p inGroup=%d isLinkable()=%d\n",name().data(),gd,getGroupDef(),inGroup,isLinkable());
if (isLinkable())
if (!(name().isEmpty() || name().at(0)=='@') && // name valid
(hasDocumentation() || isReference()) && // has docs
!(prot==Private && !Config_getBool("EXTRACT_PRIVATE") && mtype!=Friend) && // hidden due to protection
!(isStatic() && classDef==0 && !Config_getBool("EXTRACT_STATIC")) // hidden due to static-ness
)
{
if (annMemb)
{
......@@ -1075,8 +1073,9 @@ void MemberDef::writeDeclaration(OutputList &ol,
// write brief description
if (!briefDescription().isEmpty() &&
Config_getBool("BRIEF_MEMBER_DESC") &&
!annMemb)
Config_getBool("BRIEF_MEMBER_DESC")
/* && !annMemb */
)
{
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),getOuterScope()?getOuterScope():d,this,briefDescription(),TRUE,FALSE);
......@@ -1144,7 +1143,7 @@ bool MemberDef::isDetailedSectionLinkable() const
// member is part of an anonymous scope that is the type of
// another member in the list.
//
bool inAnonymousScope = !briefDescription().isEmpty() && annUsed;
//bool inAnonymousScope = !briefDescription().isEmpty() && annUsed;
// hide friend (class|struct|union) member if HIDE_FRIEND_COMPOUNDS
// is true
......@@ -1156,7 +1155,7 @@ bool MemberDef::isDetailedSectionLinkable() const
)
);
return ((docFilter && staticFilter && privateFilter && friendCompoundFilter) || inAnonymousScope);
return ((docFilter && staticFilter && privateFilter && friendCompoundFilter) /*|| inAnonymousScope*/);
}
bool MemberDef::isDetailedSectionVisible(bool inGroup) const
......@@ -2050,7 +2049,10 @@ Specifier MemberDef::virtualness() const
bool MemberDef::isConstructor() const
{
return classDef ? name()==classDef->localName() : FALSE;
if (classDef)
return name()==classDef->localName();
else
return FALSE;
}
bool MemberDef::isDestructor() const
......
......@@ -22,6 +22,7 @@
typedef unsigned char Byte;
/*! \brief Entry in the color palette of a PNG image */
struct Color
{
Byte red;
......@@ -29,6 +30,11 @@ struct Color
Byte blue;
};
/*! \brief PNG image encoder
*
* This class allows to encode a raw image to a compressed PNG.
* Use write() to save the result to disk.
*/
class PngEncoder
{
public:
......@@ -36,8 +42,6 @@ class PngEncoder
~PngEncoder();
void write(const char *fileName);
protected:
private:
// image variables
Byte *data; // pointer to the image data (one byte per pixel)
......
......@@ -2154,7 +2154,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->type = current->type.mid(3);
}
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
current->args=removeRedundantWhiteSpace(current->args);
// was: current->args.simplifyWhiteSpace();
current->name=current->name.stripWhiteSpace();
//if (!current->name.isEmpty() && current->type.left(8)=="typedef ")
//{
......@@ -2338,7 +2339,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->program+=','; // add field terminator
}
// add compound definition to the tree
current->args = current->args.simplifyWhiteSpace();
current->args=removeRedundantWhiteSpace(current->args);
// was: current->args.simplifyWhiteSpace();
current->type = current->type.simplifyWhiteSpace();
current->name = current->name.stripWhiteSpace();
//printf("adding `%s' `%s' `%s' brief=%s insideObjC=%d %x\n",current->type.data(),current->name.data(),current->args.data(),current->brief.data(),insideObjC,current->section);
......@@ -3082,7 +3084,8 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<Function>[;{,] {
current->name=current->name.simplifyWhiteSpace();
current->type=current->type.simplifyWhiteSpace();
current->args=current->args.simplifyWhiteSpace();
current->args=removeRedundantWhiteSpace(current->args);
// was: current->args.simplifyWhiteSpace();
current->fileName = yyFileName;
current->startLine = yyLineNr;
if (*yytext!=';' || (current_root->section&Entry::COMPOUND_MASK) )
......@@ -3694,7 +3697,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<Comment>"/*" { current->program += yytext ; }
<Comment>"//" { current->program += yytext ; }
<Comment>[^\n\*]+ { current->program += yytext ; }
<Comment>[^\n\/\*]+ { current->program += yytext ; }
<Comment>"*/" { current->program += yytext ;
BEGIN( lastContext ) ;
}
......
This diff is collapsed.
......@@ -78,9 +78,27 @@ TextGeneratorOLImpl::TextGeneratorOLImpl(OutputDocInterface &od) : m_od(od)
{
}
void TextGeneratorOLImpl::writeString(const char *s) const
void TextGeneratorOLImpl::writeString(const char *s,bool keepSpaces) const
{
if (keepSpaces)
{
const char *p=s;
if (p)
{
char cs[2];
char c;
cs[1]='\0';
while ((c=*p++))
{
if (c==' ') m_od.writeNonBreakableSpace(1);
else cs[0]=c,m_od.docify(cs);
}
}
}
else
{
m_od.docify(s);
}
}
void TextGeneratorOLImpl::writeBreak() const
......@@ -1171,9 +1189,26 @@ QCString removeRedundantWhiteSpace(const QCString &s)
uint csp=0;
for (i=0;i<l;i++)
{
nextChar:
char c=s.at(i);
if (csp<6 && c==constScope[csp]) csp++; else csp=0;
if (i<l-2 && c=='<' && // current char is a <
if (c=='"') // quoted string
{
i++;
result+=c;
while (i<l)
{
char cc=s.at(i);
result+=cc;
if (cc=='\\') // escaped character
{ result+=s.at(i+1); i+=2; }
else if (cc=='"') // end of string
{ i++; goto nextChar; }
else // any other character
{ i++; }
}
}
else if (i<l-2 && c=='<' && // current char is a <
(isId(s.at(i+1)) || isspace((uchar)s.at(i+1))) && // next char is an id char or space
(i<8 || !findOperator(s,i)) // string in front is not "operator"
)
......@@ -1252,7 +1287,10 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
}
void linkifyText(const TextGeneratorIntf &out,Definition *scope,FileDef *fileScope,const char * /*name*/,const char *text,bool autoBreak,bool external)
void linkifyText(const TextGeneratorIntf &out,Definition *scope,
FileDef *fileScope,const char *,
const char *text, bool autoBreak,bool external,
bool keepSpaces)
{
//printf("`%s'\n",text);
static QRegExp regExp("[a-z_A-Z][a-z_A-Z0-9:]*");
......@@ -1290,20 +1328,20 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,FileDef *fileSco
if (i==-1) i=splitText.find(' ');
if (i!=-1) // add a link-break at i in case of Html output
{
out.writeString(splitText.left(i+1));
out.writeString(splitText.left(i+1),keepSpaces);
out.writeBreak();
out.writeString(splitText.right(splitLength-i-1));
out.writeString(splitText.right(splitLength-i-1),keepSpaces);
}
else
{
out.writeString(splitText);
out.writeString(splitText,keepSpaces);
}
floatingIndex=splitLength-i-1;
}
else
{
//ol.docify(txtStr.mid(skipIndex,newIndex-skipIndex));
out.writeString(txtStr.mid(skipIndex,newIndex-skipIndex));
out.writeString(txtStr.mid(skipIndex,newIndex-skipIndex),keepSpaces);
}
// get word from string
QCString word=txtStr.mid(newIndex,matchLen);
......@@ -1370,7 +1408,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,FileDef *fileSco
if (!found) // add word to the result
{
//ol.docify(word);
out.writeString(word);
out.writeString(word,keepSpaces);
}
// set next start point in the string
//printf("index=%d/%d\n",index,txtStr.length());
......@@ -1379,7 +1417,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,FileDef *fileSco
}
// add last part of the string to the result.
//ol.docify(txtStr.right(txtStr.length()-skipIndex));
out.writeString(txtStr.right(txtStr.length()-skipIndex));
out.writeString(txtStr.right(txtStr.length()-skipIndex),keepSpaces);
}
......
......@@ -57,7 +57,7 @@ class Definition;
class TextGeneratorIntf
{
public:
virtual void writeString(const char *) const = 0;
virtual void writeString(const char *,bool) const = 0;
virtual void writeBreak() const = 0;
virtual void writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
......@@ -68,7 +68,7 @@ class TextGeneratorOLImpl : public TextGeneratorIntf
{
public:
TextGeneratorOLImpl(OutputDocInterface &od);
void writeString(const char *s) const;
void writeString(const char *s,bool keepSpaces) const;
void writeBreak() const;
void writeLink(const char *extRef,const char *file,
const char *anchor,const char *text
......@@ -85,7 +85,8 @@ void linkifyText(const TextGeneratorIntf &ol,
const char *name,
const char *text,
bool autoBreak=FALSE,
bool external=TRUE
bool external=TRUE,
bool keepSpaces=FALSE
);
void setAnchors(ClassDef *cd,char id,MemberList *ml,int groupId=-1);
QCString fileToString(const char *name,bool filter=FALSE);
......
......@@ -445,7 +445,9 @@ void XmlDocVisitor::visitPost(DocSimpleListItem *)
void XmlDocVisitor::visitPre(DocSection *s)
{
if (m_hide) return;
m_t << "<sect" << s->level() << " id=\"" << s->id() << "\">" << endl;
m_t << "<sect" << s->level() << " id=\"" << s->file();
if (!s->anchor().isEmpty()) m_t << "_1" << s->anchor();
m_t << "\">" << endl;
m_t << "<title>";
filter(s->title());
m_t << "</title>" << endl;
......
......@@ -153,7 +153,7 @@ class TextGeneratorXMLImpl : public TextGeneratorIntf
{
public:
TextGeneratorXMLImpl(QTextStream &t): m_t(t) {}
void writeString(const char *s) const
void writeString(const char *s,bool /*keepSpaces*/) const
{
writeXMLString(m_t,s);
}
......
#! 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 linux-g++
#
TEMPLATE = app
CONFIG = qt warn_on release
TMAKE_CC = gcc
TMAKE_CFLAGS =
TMAKE_CFLAGS_WARN_ON = -Wall -W
TMAKE_CFLAGS_WARN_OFF =
TMAKE_CFLAGS_RELEASE =
TMAKE_CFLAGS_DEBUG = -g
TMAKE_CFLAGS_SHLIB = -fPIC
TMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses
TMAKE_CXX = g++
TMAKE_CXXFLAGS = $$TMAKE_CFLAGS
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_QT = $(QTDIR)/include
TMAKE_LIBDIR_QT = $(QTDIR)/lib
TMAKE_LINK = g++
TMAKE_LINK_SHLIB = g++
TMAKE_LFLAGS = -Wl,-rpath=/lib:$(QTDIR)/lib
TMAKE_LFLAGS_RELEASE =
TMAKE_LFLAGS_DEBUG =
TMAKE_LFLAGS_SHLIB = -shared
TMAKE_LFLAGS_SONAME = -Wl,-soname,
TMAKE_LIBS =
TMAKE_LIBS_QT = -lqt
TMAKE_MOC = moc
TMAKE_AR = ar cqs
TMAKE_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