Commit bfaab3ac authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.4-20031103

parent d5102e6f
DOXYGEN Version 1.3.4-20031026 DOXYGEN Version 1.3.4-20031103
Please read the installation section of the manual Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions. (http://www.doxygen.org/install.html) for instructions.
-------- --------
Dimitri van Heesch (26 October 2003) Dimitri van Heesch (03 November 2003)
DOXYGEN Version 1.3.4_20031026 DOXYGEN Version 1.3.4_20031103
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) (26 October 2003) Dimitri van Heesch (dimitri@stack.nl) (03 November 2003)
1.3.4-20031026 1.3.4-20031103
...@@ -111,7 +111,11 @@ class IMemberReference ...@@ -111,7 +111,11 @@ class IMemberReference
{ {
public: public:
virtual IMember *member() const = 0; virtual IMember *member() const = 0;
virtual const IString * memberName() const = 0; virtual const IString * name() const = 0;
virtual const IString * scope() const = 0;
virtual const IString * protection() const = 0;
virtual const IString * virtualness() const = 0;
virtual const IString * ambiguityScope() const = 0;
}; };
class IMemberReferenceIterator class IMemberReferenceIterator
...@@ -695,6 +699,11 @@ class ISection ...@@ -695,6 +699,11 @@ class ISection
ProSlots, //!< Protected slots ProSlots, //!< Protected slots
ProStatFuncs, //!< Protected static member functions ProStatFuncs, //!< Protected static member functions
ProStatAttribs, //!< Protected static member attributes ProStatAttribs, //!< Protected static member attributes
PacTypes, //!< Package member typedefs
PacFuncs, //!< Package member functions
PacAttribs, //!< Package member attributes
PacStatFuncs, //!< Package static member functions
PacStatAttribs, //!< Package static member attributes
PriTypes, //!< Private member typedefs PriTypes, //!< Private member typedefs
PriFuncs, //!< Private member functions PriFuncs, //!< Private member functions
PriAttribs, //!< Private member attributes PriAttribs, //!< Private member attributes
......
...@@ -167,46 +167,51 @@ CompoundHandler::CompoundHandler(const QString &xmlDir) ...@@ -167,46 +167,51 @@ CompoundHandler::CompoundHandler(const QString &xmlDir)
addStartHandler("compoundname"); addStartHandler("compoundname");
addEndHandler("compoundname",this,&CompoundHandler::endCompoundName); addEndHandler("compoundname",this,&CompoundHandler::endCompoundName);
addStartHandler("derivedcompoundref",this,&CompoundHandler::addSubClass); addStartHandler("title",this,&CompoundHandler::startTitle);
addEndHandler("derivedcompoundref");
addStartHandler("basecompoundref",this,&CompoundHandler::addSuperClass); addStartHandler("basecompoundref",this,&CompoundHandler::addSuperClass);
addEndHandler("basecompoundref"); addEndHandler("basecompoundref");
addStartHandler("briefdescription",this,&CompoundHandler::startBriefDesc); addStartHandler("derivedcompoundref",this,&CompoundHandler::addSubClass);
addEndHandler("derivedcompoundref");
addStartHandler("detaileddescription",this,&CompoundHandler::startDetailedDesc); // includes
// includedby
addStartHandler("sectiondef",this,&CompoundHandler::startSection);
addStartHandler("location",this,&CompoundHandler::startLocation);
addEndHandler("location");
addStartHandler("programlisting",this,&CompoundHandler::startProgramListing);
addStartHandler("inheritancegraph",this,&CompoundHandler::startInheritanceGraph);
addStartHandler("collaborationgraph",this,&CompoundHandler::startCollaborationGraph);
addStartHandler("incdepgraph",this,&CompoundHandler::startIncludeDependencyGraph); addStartHandler("incdepgraph",this,&CompoundHandler::startIncludeDependencyGraph);
addStartHandler("invincdepgraph",this,&CompoundHandler::startIncludedByDependencyGraph); addStartHandler("invincdepgraph",this,&CompoundHandler::startIncludedByDependencyGraph);
addStartHandler("innerfile",this,&CompoundHandler::startInnerFile);
addEndHandler("innerfile");
addStartHandler("innerclass",this,&CompoundHandler::startInnerClass); addStartHandler("innerclass",this,&CompoundHandler::startInnerClass);
addEndHandler("innerclass"); addEndHandler("innerclass");
addStartHandler("innernamespace",this,&CompoundHandler::startInnerNamespace); addStartHandler("innernamespace",this,&CompoundHandler::startInnerNamespace);
addEndHandler("innernamespace"); addEndHandler("innernamespace");
addStartHandler("innerfile",this,&CompoundHandler::startInnerFile); // innerpage
addEndHandler("innerfile");
addStartHandler("innergroup",this,&CompoundHandler::startInnerGroup); addStartHandler("innergroup",this,&CompoundHandler::startInnerGroup);
addEndHandler("innergroup"); addEndHandler("innergroup");
addStartHandler("templateparamlist",this,&CompoundHandler::startTemplateParamList); addStartHandler("templateparamlist",this,&CompoundHandler::startTemplateParamList);
addStartHandler("title",this,&CompoundHandler::startTitle); addStartHandler("sectiondef",this,&CompoundHandler::startSection);
addStartHandler("briefdescription",this,&CompoundHandler::startBriefDesc);
addStartHandler("detaileddescription",this,&CompoundHandler::startDetailedDesc);
addStartHandler("inheritancegraph",this,&CompoundHandler::startInheritanceGraph);
addStartHandler("collaborationgraph",this,&CompoundHandler::startCollaborationGraph);
addStartHandler("programlisting",this,&CompoundHandler::startProgramListing);
addStartHandler("location",this,&CompoundHandler::startLocation);
addEndHandler("location");
addStartHandler("listofallmembers",this,&CompoundHandler::startListOfAllMembers); addStartHandler("listofallmembers",this,&CompoundHandler::startListOfAllMembers);
} }
...@@ -259,6 +264,7 @@ void CompoundHandler::startCompound(const QXmlAttributes& attrib) ...@@ -259,6 +264,7 @@ void CompoundHandler::startCompound(const QXmlAttributes& attrib)
m_id = attrib.value("id"); m_id = attrib.value("id");
m_kindString = attrib.value("kind"); m_kindString = attrib.value("kind");
m_kind = s_typeMap->map(m_kindString); m_kind = s_typeMap->map(m_kindString);
m_protection = attrib.value("prot");
debug(2,"startCompound(id=`%s' type=`%s')\n",m_id.data(),m_kindString.data()); debug(2,"startCompound(id=`%s' type=`%s')\n",m_id.data(),m_kindString.data());
} }
...@@ -317,9 +323,14 @@ void CompoundHandler::addSuperClass(const QXmlAttributes& attrib) ...@@ -317,9 +323,14 @@ void CompoundHandler::addSuperClass(const QXmlAttributes& attrib)
{ {
IRelatedCompound::Protection prot = IRelatedCompound::Public; IRelatedCompound::Protection prot = IRelatedCompound::Public;
QString protString = attrib.value("prot"); QString protString = attrib.value("prot");
if (protString=="protected") prot = IRelatedCompound::Protected; if (protString=="protected")
else if (protString=="private") prot = IRelatedCompound::Private; {
prot = IRelatedCompound::Protected;
}
else if (protString=="private")
{
prot = IRelatedCompound::Private;
}
IRelatedCompound::Kind kind = IRelatedCompound::Normal; IRelatedCompound::Kind kind = IRelatedCompound::Normal;
QString kindString = attrib.value("virt"); QString kindString = attrib.value("virt");
if (kindString=="virtual") kind = IRelatedCompound::Virtual; if (kindString=="virtual") kind = IRelatedCompound::Virtual;
......
...@@ -153,6 +153,7 @@ class CompoundHandler : public IClass, ...@@ -153,6 +153,7 @@ class CompoundHandler : public IClass,
DocHandler* m_detailed; DocHandler* m_detailed;
ProgramListingHandler* m_programListing; ProgramListingHandler* m_programListing;
StringImpl m_id; StringImpl m_id;
StringImpl m_protection;
StringImpl m_kindString; StringImpl m_kindString;
CompoundKind m_kind; CompoundKind m_kind;
StringImpl m_name; StringImpl m_name;
......
...@@ -111,7 +111,11 @@ class IMemberReference ...@@ -111,7 +111,11 @@ class IMemberReference
{ {
public: public:
virtual IMember *member() const = 0; virtual IMember *member() const = 0;
virtual const IString * memberName() const = 0; virtual const IString * name() const = 0;
virtual const IString * scope() const = 0;
virtual const IString * protection() const = 0;
virtual const IString * virtualness() const = 0;
virtual const IString * ambiguityScope() const = 0;
}; };
class IMemberReferenceIterator class IMemberReferenceIterator
...@@ -695,6 +699,11 @@ class ISection ...@@ -695,6 +699,11 @@ class ISection
ProSlots, //!< Protected slots ProSlots, //!< Protected slots
ProStatFuncs, //!< Protected static member functions ProStatFuncs, //!< Protected static member functions
ProStatAttribs, //!< Protected static member attributes ProStatAttribs, //!< Protected static member attributes
PacTypes, //!< Package member typedefs
PacFuncs, //!< Package member functions
PacAttribs, //!< Package member attributes
PacStatFuncs, //!< Package static member functions
PacStatAttribs, //!< Package static member attributes
PriTypes, //!< Private member typedefs PriTypes, //!< Private member typedefs
PriFuncs, //!< Private member functions PriFuncs, //!< Private member functions
PriAttribs, //!< Private member attributes PriAttribs, //!< Private member attributes
......
...@@ -9,6 +9,8 @@ ListOfAllMembersHandler::ListOfAllMembersHandler(IBaseHandler *parent) : m_paren ...@@ -9,6 +9,8 @@ ListOfAllMembersHandler::ListOfAllMembersHandler(IBaseHandler *parent) : m_paren
addStartHandler("member",this,&ListOfAllMembersHandler::startMember); addStartHandler("member",this,&ListOfAllMembersHandler::startMember);
addStartHandler("name",this,&ListOfAllMembersHandler::startName); addStartHandler("name",this,&ListOfAllMembersHandler::startName);
addEndHandler("name",this,&ListOfAllMembersHandler::endName); addEndHandler("name",this,&ListOfAllMembersHandler::endName);
addStartHandler("scope",this,&ListOfAllMembersHandler::startScope);
addEndHandler("scope",this,&ListOfAllMembersHandler::endScope);
addEndHandler("listofallmembers",this,&ListOfAllMembersHandler::endListOfAllMembers); addEndHandler("listofallmembers",this,&ListOfAllMembersHandler::endListOfAllMembers);
} }
...@@ -27,7 +29,9 @@ void ListOfAllMembersHandler::startMember(const QXmlAttributes& attrib) ...@@ -27,7 +29,9 @@ void ListOfAllMembersHandler::startMember(const QXmlAttributes& attrib)
{ {
MemberReference *mr = new MemberReference; MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("refid"); mr->m_memId = attrib.value("refid");
// TODO: extract prot, virt, ambiguityscope and scope as well mr->m_virtualness = attrib.value("virt");
mr->m_protection = attrib.value("prot");
mr->m_ambiguityScope = attrib.value("ambiguityscope");
m_members.append(new MemberReference); m_members.append(new MemberReference);
} }
...@@ -42,6 +46,17 @@ void ListOfAllMembersHandler::endName() ...@@ -42,6 +46,17 @@ void ListOfAllMembersHandler::endName()
m_members.getLast()->m_name = m_curString; m_members.getLast()->m_name = m_curString;
} }
void ListOfAllMembersHandler::startScope(const QXmlAttributes&)
{
m_curString="";
}
void ListOfAllMembersHandler::endScope()
{
ASSERT(m_members.getLast());
m_members.getLast()->m_scope = m_curString;
}
void ListOfAllMembersHandler::startListOfAllMembers(const QXmlAttributes& /*attrib*/) void ListOfAllMembersHandler::startListOfAllMembers(const QXmlAttributes& /*attrib*/)
{ {
m_parent->setDelegate(this); m_parent->setDelegate(this);
......
...@@ -31,6 +31,8 @@ class ListOfAllMembersHandler : public BaseHandler<ListOfAllMembersHandler> ...@@ -31,6 +31,8 @@ class ListOfAllMembersHandler : public BaseHandler<ListOfAllMembersHandler>
virtual void startMember(const QXmlAttributes& attrib); virtual void startMember(const QXmlAttributes& attrib);
virtual void startName(const QXmlAttributes& attrib); virtual void startName(const QXmlAttributes& attrib);
virtual void endName(); virtual void endName();
virtual void startScope(const QXmlAttributes& attrib);
virtual void endScope();
virtual void startListOfAllMembers(const QXmlAttributes& attrib); virtual void startListOfAllMembers(const QXmlAttributes& attrib);
virtual void endListOfAllMembers(); virtual void endListOfAllMembers();
......
...@@ -158,40 +158,45 @@ MemberHandler::MemberHandler(IBaseHandler *parent) ...@@ -158,40 +158,45 @@ MemberHandler::MemberHandler(IBaseHandler *parent)
{ {
//printf("MemberHandler::MemberHandler() %p\n",this); //printf("MemberHandler::MemberHandler() %p\n",this);
addEndHandler("memberdef",this,&MemberHandler::endMember); addEndHandler("memberdef",this,&MemberHandler::endMember);
addEndHandler("enumvalue",this,&MemberHandler::endMember);
addStartHandler("type",this,&MemberHandler::startType); addStartHandler("templateparamlist",this,&MemberHandler::startTemplateParamList);
addStartHandler("initializer",this,&MemberHandler::startInitializer); addEndHandler("templateparamlist",this,&MemberHandler::endTemplateParamList);
addStartHandler("exception",this,&MemberHandler::startException);
addStartHandler("enumvalue",this,&MemberHandler::startEnumValue2);
addStartHandler("type",this,&MemberHandler::startType);
// definition
// argsstring
addStartHandler("name",this,&MemberHandler::startName); addStartHandler("name",this,&MemberHandler::startName);
addEndHandler("name",this,&MemberHandler::endName); addEndHandler("name",this,&MemberHandler::endName);
addStartHandler("reimplements",this,&MemberHandler::startReimplements);
addEndHandler("reimplements",this,&MemberHandler::endReimplements);
addStartHandler("reimplementedby",this,&MemberHandler::startReimplementedBy);
addEndHandler("reimplementedby",this,&MemberHandler::endReimplementedBy);
addStartHandler("param",this,&MemberHandler::startParam); addStartHandler("param",this,&MemberHandler::startParam);
addStartHandler("enumvalue",this,&MemberHandler::startEnumValue2);
addEndHandler("enumvalue",this,&MemberHandler::endMember);
addStartHandler("initializer",this,&MemberHandler::startInitializer);
addStartHandler("exception",this,&MemberHandler::startException);
addStartHandler("briefdescription",this,&MemberHandler::startBriefDesc); addStartHandler("briefdescription",this,&MemberHandler::startBriefDesc);
addStartHandler("detaileddescription",this,&MemberHandler::startDetailedDesc); addStartHandler("detaileddescription",this,&MemberHandler::startDetailedDesc);
// inbodydescription
addStartHandler("location",this,&MemberHandler::startLocation);
addEndHandler("location");
addStartHandler("references",this,&MemberHandler::startReferences); addStartHandler("references",this,&MemberHandler::startReferences);
addEndHandler("references",this,&MemberHandler::endReferences); addEndHandler("references",this,&MemberHandler::endReferences);
addStartHandler("referencedby",this,&MemberHandler::startReferencedBy); addStartHandler("referencedby",this,&MemberHandler::startReferencedBy);
addEndHandler("referencedby",this,&MemberHandler::endReferencedBy); addEndHandler("referencedby",this,&MemberHandler::endReferencedBy);
addStartHandler("reimplements",this,&MemberHandler::startReimplements);
addEndHandler("reimplements",this,&MemberHandler::endReimplements);
addStartHandler("reimplementedby",this,&MemberHandler::startReimplementedBy);
addEndHandler("reimplementedby",this,&MemberHandler::endReimplementedBy);
addStartHandler("location",this,&MemberHandler::startLocation);
addEndHandler("location");
addStartHandler("templateparamlist",this,&MemberHandler::startTemplateParamList);
addEndHandler("templateparamlist",this,&MemberHandler::endTemplateParamList);
m_type.setAutoDelete(TRUE); m_type.setAutoDelete(TRUE);
m_initializer.setAutoDelete(TRUE); m_initializer.setAutoDelete(TRUE);
m_exception.setAutoDelete(TRUE); m_exception.setAutoDelete(TRUE);
......
...@@ -38,11 +38,19 @@ class MemberReference : public IMemberReference ...@@ -38,11 +38,19 @@ class MemberReference : public IMemberReference
public: public:
virtual ~MemberReference() {} virtual ~MemberReference() {}
virtual IMember *member() const; virtual IMember *member() const;
virtual const IString *memberName() const { return &m_name; } virtual const IString *name() const { return &m_name; }
virtual const IString *scope() const { return &m_scope; }
virtual const IString *protection() const { return &m_protection; }
virtual const IString *virtualness() const { return &m_virtualness; }
virtual const IString *ambiguityScope() const { return &m_ambiguityScope; }
void initialize(MainHandler *m); void initialize(MainHandler *m);
QString m_memId; QString m_memId;
StringImpl m_name; StringImpl m_name;
StringImpl m_scope;
StringImpl m_virtualness;
StringImpl m_protection;
StringImpl m_ambiguityScope;
MainHandler *m_mainHandler; MainHandler *m_mainHandler;
}; };
......
...@@ -41,6 +41,11 @@ class SectionTypeMap ...@@ -41,6 +41,11 @@ class SectionTypeMap
m_map.insert("protected-slot",new int(ISection::ProSlots)); m_map.insert("protected-slot",new int(ISection::ProSlots));
m_map.insert("protected-static-func",new int(ISection::ProStatFuncs)); m_map.insert("protected-static-func",new int(ISection::ProStatFuncs));
m_map.insert("protected-static-attrib",new int(ISection::ProStatAttribs)); m_map.insert("protected-static-attrib",new int(ISection::ProStatAttribs));
m_map.insert("package-type",new int(ISection::PacTypes));
m_map.insert("package-func",new int(ISection::PacFuncs));
m_map.insert("package-attrib",new int(ISection::PacAttribs));
m_map.insert("package-static-func",new int(ISection::PacStatFuncs));
m_map.insert("package-static-attrib",new int(ISection::PacStatAttribs));
m_map.insert("private-type",new int(ISection::PriTypes)); m_map.insert("private-type",new int(ISection::PriTypes));
m_map.insert("private-func",new int(ISection::PriFuncs)); m_map.insert("private-func",new int(ISection::PriFuncs));
m_map.insert("private-attrib",new int(ISection::PriAttribs)); m_map.insert("private-attrib",new int(ISection::PriAttribs));
......
...@@ -30,6 +30,10 @@ ...@@ -30,6 +30,10 @@
#ifndef __MD5_LOC_H__ #ifndef __MD5_LOC_H__
#define __MD5_LOC_H__ #define __MD5_LOC_H__
#ifdef __cplusplus
extern "C" {
#endif
#define HEX_STRING "0123456789abcdef" /* to convert to hex */ #define HEX_STRING "0123456789abcdef" /* to convert to hex */
#define BLOCK_SIZE_MASK (MD5_BLOCK_SIZE - 1) #define BLOCK_SIZE_MASK (MD5_BLOCK_SIZE - 1)
...@@ -103,4 +107,8 @@ ...@@ -103,4 +107,8 @@
a += b; \ a += b; \
} while (0) } while (0)
#ifdef __cplusplus
}
#endif
#endif /* ! __MD5_LOC_H__ */ #endif /* ! __MD5_LOC_H__ */
...@@ -22,6 +22,8 @@ type makeconfig > qtools\Makefile ...@@ -22,6 +22,8 @@ type makeconfig > qtools\Makefile
type qtools\Makefile.in >>qtools\Makefile type qtools\Makefile.in >>qtools\Makefile
type makeconfig > libpng\Makefile type makeconfig > libpng\Makefile
type libpng\Makefile.in >>libpng\Makefile type libpng\Makefile.in >>libpng\Makefile
type makeconfig > libmd5\Makefile
type libmd5\Makefile.in >>libmd5\Makefile
type makeconfig > src\Makefile type makeconfig > src\Makefile
type src\Makefile.in >>src\Makefile type src\Makefile.in >>src\Makefile
type makeconfig > examples\Makefile type makeconfig > examples\Makefile
...@@ -37,11 +39,11 @@ REM build in release or debug mode ...@@ -37,11 +39,11 @@ REM build in release or debug mode
REM sed is used to replace $extraopts by either debug or release while copying REM sed is used to replace $extraopts by either debug or release while copying
sed "s/\$extraopts/%MODE%/g" qtools\qtools.pro.in >qtools\qtools.pro sed "s/\$extraopts/%MODE%/g" qtools\qtools.pro.in >qtools\qtools.pro
sed "s/\$extraopts/%MODE%/g" libpng\libpng.pro.in >libpng\libpng.pro sed "s/\$extraopts/%MODE%/g" libpng\libpng.pro.in >libpng\libpng.pro
sed "s/\$extraopts/%MODE%/g" libmd5\libmd5.pro.in >libmd5\libmd5.pro
sed "s/\$extraopts/%MODE%/g" src\libdoxygen.pro.in >src\libdoxygen.pro sed "s/\$extraopts/%MODE%/g" src\libdoxygen.pro.in >src\libdoxygen.pro
sed "s/\$extraopts/%MODE%/g" src\libdoxycfg.pro.in >src\libdoxycfg.pro sed "s/\$extraopts/%MODE%/g" src\libdoxycfg.pro.in >src\libdoxycfg.pro
sed "s/\$extraopts/%MODE%/g" src\doxygen.pro.in >src\doxygen.pro sed "s/\$extraopts/%MODE%/g" src\doxygen.pro.in >src\doxygen.pro
sed "s/\$extraopts/%MODE%/g" src\doxytag.pro.in >src\doxytag.pro sed "s/\$extraopts/%MODE%/g" src\doxytag.pro.in >src\doxytag.pro
sed "s/\$extraopts/%MODE%/g" src\doxysearch.pro.in >src\doxysearch.pro
sed "s/\$extraopts/%MODE%/g" addon\doxywizard\doxywizard.pro.in >addon\doxywizard\doxywizard.pro sed "s/\$extraopts/%MODE%/g" addon\doxywizard\doxywizard.pro.in >addon\doxywizard\doxywizard.pro
REM run make REM run make
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.4_20031026 Version: 1.3.4_20031103
Release: 1 Release: 1
Epoch: 1 Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
...@@ -208,7 +208,7 @@ bool QFile::remove() ...@@ -208,7 +208,7 @@ bool QFile::remove()
return remove( fn ); return remove( fn );
} }
#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) #if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) || defined(_OS_CYGWIN_)
# define HAS_TEXT_FILEMODE // has translate/text filemode # define HAS_TEXT_FILEMODE // has translate/text filemode
#endif #endif
#if defined(O_NONBLOCK) #if defined(O_NONBLOCK)
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#include "qfile.h" #include "qfile.h"
#include "qfiledefs_p.h" #include "qfiledefs_p.h"
#if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) #if defined(_OS_MAC_) || defined(_OS_MSDOS_) || defined(_OS_WIN32_) || defined(_OS_OS2_) || defined(_OS_CYGWIN_)
# define HAS_TEXT_FILEMODE // has translate/text filemode # define HAS_TEXT_FILEMODE // has translate/text filemode
#endif #endif
#if defined(O_NONBLOCK) #if defined(O_NONBLOCK)
......
...@@ -93,6 +93,7 @@ ...@@ -93,6 +93,7 @@
<xsd:complexType name="memberdefType"> <xsd:complexType name="memberdefType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
<xsd:element name="type" type="linkedTextType" minOccurs="0" /> <xsd:element name="type" type="linkedTextType" minOccurs="0" />
<xsd:element name="definition" minOccurs="0" /> <xsd:element name="definition" minOccurs="0" />
<xsd:element name="argsstring" minOccurs="0" /> <xsd:element name="argsstring" minOccurs="0" />
...@@ -632,6 +633,11 @@ ...@@ -632,6 +633,11 @@
<xsd:enumeration value="protected-slot" /> <xsd:enumeration value="protected-slot" />
<xsd:enumeration value="protected-static-func" /> <xsd:enumeration value="protected-static-func" />
<xsd:enumeration value="protected-static-attrib" /> <xsd:enumeration value="protected-static-attrib" />
<xsd:enumeration value="package-type" />
<xsd:enumeration value="package-func" />
<xsd:enumeration value="package-attrib" />
<xsd:enumeration value="package-static-func" />
<xsd:enumeration value="package-static-attrib" />
<xsd:enumeration value="private-type" /> <xsd:enumeration value="private-type" />
<xsd:enumeration value="private-func" /> <xsd:enumeration value="private-func" />
<xsd:enumeration value="private-attrib" /> <xsd:enumeration value="private-attrib" />
......
...@@ -93,6 +93,7 @@ ...@@ -93,6 +93,7 @@
"\n" "\n"
" <xsd:complexType name=\"memberdefType\">\n" " <xsd:complexType name=\"memberdefType\">\n"
" <xsd:sequence>\n" " <xsd:sequence>\n"
" <xsd:element name=\"templateparamlist\" type=\"templateparamlistType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n" " <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"definition\" minOccurs=\"0\" />\n" " <xsd:element name=\"definition\" minOccurs=\"0\" />\n"
" <xsd:element name=\"argsstring\" minOccurs=\"0\" />\n" " <xsd:element name=\"argsstring\" minOccurs=\"0\" />\n"
...@@ -632,6 +633,11 @@ ...@@ -632,6 +633,11 @@
" <xsd:enumeration value=\"protected-slot\" />\n" " <xsd:enumeration value=\"protected-slot\" />\n"
" <xsd:enumeration value=\"protected-static-func\" />\n" " <xsd:enumeration value=\"protected-static-func\" />\n"
" <xsd:enumeration value=\"protected-static-attrib\" />\n" " <xsd:enumeration value=\"protected-static-attrib\" />\n"
" <xsd:enumeration value=\"package-type\" />\n"
" <xsd:enumeration value=\"package-func\" />\n"
" <xsd:enumeration value=\"package-attrib\" />\n"
" <xsd:enumeration value=\"package-static-func\" />\n"
" <xsd:enumeration value=\"package-static-attrib\" />\n"
" <xsd:enumeration value=\"private-type\" />\n" " <xsd:enumeration value=\"private-type\" />\n"
" <xsd:enumeration value=\"private-func\" />\n" " <xsd:enumeration value=\"private-func\" />\n"
" <xsd:enumeration value=\"private-attrib\" />\n" " <xsd:enumeration value=\"private-attrib\" />\n"
......
...@@ -1979,7 +1979,9 @@ void Config::create() ...@@ -1979,7 +1979,9 @@ void Config::create()
"The HTML_STYLESHEET tag can be used to specify a user-defined cascading \n" "The HTML_STYLESHEET tag can be used to specify a user-defined cascading \n"
"style sheet that is used by each HTML page. It can be used to \n" "style sheet that is used by each HTML page. It can be used to \n"
"fine-tune the look of the HTML output. If the tag is left blank doxygen \n" "fine-tune the look of the HTML output. If the tag is left blank doxygen \n"
"will generate a default style sheet \n" "will generate a default style sheet. Note that doxygen will try to copy \n"
"the style sheet file to the HTML output directory, so don't put your own \n"
"stylesheet in the HTML output directory as well, or it will be erased! \n"
); );
cs->setWidgetType(ConfigString::File); cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_HTML"); cs->addDependency("GENERATE_HTML");
......
...@@ -701,6 +701,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children) ...@@ -701,6 +701,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
QString name = linkToText(g_token->name,TRUE); QString name = linkToText(g_token->name,TRUE);
if (resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member)) if (resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member))
{ {
//printf("resolveRef %s = %p (linkable?=%d)\n",g_token->name.data(),member,member->isLinkable());
if (member) // member link if (member) // member link
{ {
children.append(new children.append(new
......
...@@ -295,6 +295,36 @@ static void checkDotResult(const QCString &imgName) ...@@ -295,6 +295,36 @@ static void checkDotResult(const QCString &imgName)
} }
} }
/*! Checks if a file "baseName".md5 exists. If so the contents
* are compared with \a md5. If equal FALSE is returned. If the .md5
* file does not exist or its contents are not equal to \a md5,
* a new .md5 is generated with the \a md5 string as contents.
*/
static bool checkAndUpdateMd5Signature(const QCString &baseName,const QCString &md5)
{
QFile f(baseName+".md5");
if (f.open(IO_ReadOnly))
{
// read checksum
QCString md5stored(33);
int bytesRead=f.readBlock(md5stored.data(),32);
// compare checksum
if (bytesRead==32 && md5==md5stored)
{
// bail out if equal
return FALSE;
}
}
f.close();
// create checksum file
if (f.open(IO_WriteOnly))
{
f.writeBlock(md5.data(),32);
f.close();
}
return TRUE;
}
//-------------------------------------------------------------------- //--------------------------------------------------------------------
class DotNodeList : public QList<DotNode> class DotNodeList : public QList<DotNode>
...@@ -880,6 +910,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -880,6 +910,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QDir::setCurrent(d.absPath()); QDir::setCurrent(d.absPath());
QDir thisDir; QDir thisDir;
// put each connected subgraph of the hierarchy in a row of the HTML output
out << "<table border=0 cellspacing=10 cellpadding=0>" << endl; out << "<table border=0 cellspacing=10 cellpadding=0>" << endl;
QListIterator<DotNode> dnli(*m_rootSubgraphs); QListIterator<DotNode> dnli(*m_rootSubgraphs);
...@@ -891,52 +922,75 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path) ...@@ -891,52 +922,75 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT"); QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++); baseName.sprintf("inherit_graph_%d",count++);
baseName = convertNameToFile(baseName); baseName = convertNameToFile(baseName);
QCString dotName=baseName+".dot";
QCString imgName=baseName+"."+ imgExt; QCString imgName=baseName+"."+ imgExt;
QCString mapName=baseName+".map"; QCString mapName=baseName+".map";
QFile f(dotName);
if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f);
writeGraphHeader(t);
t << " rankdir=LR;" << endl;
QListIterator<DotNode> dnli2(*m_rootNodes); QListIterator<DotNode> dnli2(*m_rootNodes);
DotNode *node; DotNode *node;
for (;(node=dnli2.current());++dnli2)
// compute md5 checksum of the graph were are about to generate
QString buf;
QTextStream md5stream(&buf,IO_WriteOnly);
for (dnli2.toFirst();(node=dnli2.current());++dnli2)
{ {
if (node->m_subgraphId==n->m_subgraphId) if (node->m_subgraphId==n->m_subgraphId)
node->write(t,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE); {
node->clearWriteFlag();
node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
}
} }
writeGraphFooter(t); char md5_sig[16];
f.close(); QCString sigStr(33);
md5_buffer(buf.ascii(),buf.length(),md5_sig);
md5_sig_to_string(md5_sig,sigStr.data(),33);
if (checkAndUpdateMd5Signature(baseName,sigStr))
{
// image was new or has changed
QCString dotName=baseName+".dot";
QFile f(dotName);
if (!f.open(IO_WriteOnly)) return;
QTextStream t(&f);
writeGraphHeader(t);
t << " rankdir=LR;" << endl;
for (dnli2.toFirst();(node=dnli2.current());++dnli2)
{
if (node->m_subgraphId==n->m_subgraphId)
{
node->clearWriteFlag();
node->write(t,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
}
}
writeGraphFooter(t);
f.close();
QCString dotArgs(maxCmdLine); QCString dotArgs(maxCmdLine);
dotArgs.sprintf("-T%s \"%s\" -o \"%s\"", dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",
imgExt.data(), dotName.data(),imgName.data()); imgExt.data(), dotName.data(),imgName.data());
//printf("Running: dot -T%s %s -o %s\n",imgExt.data(),dotName.data(),imgName.data()); //printf("Running: dot -T%s %s -o %s\n",imgExt.data(),dotName.data(),imgName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0) if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{ {
err("Problems running dot. Check your installation!\n"); err("Problems running dot. Check your installation!\n");
out << "</table>" << endl; out << "</table>" << endl;
return; return;
} }
checkDotResult(imgName); checkDotResult(imgName);
dotArgs.sprintf("-Timap \"%s\" -o \"%s\"",dotName.data(),mapName.data()); dotArgs.sprintf("-Timap \"%s\" -o \"%s\"",dotName.data(),mapName.data());
//printf("Running: dot -Timap %s -o %s\n",dotName.data(),mapName.data()); //printf("Running: dot -Timap %s -o %s\n",dotName.data(),mapName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0) if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{ {
err("Problems running dot. Check your installation!\n"); err("Problems running dot. Check your installation!\n");
out << "</table>" << endl; out << "</table>" << endl;
return; return;
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName);
} }
// write image and map in a table row
QCString mapLabel = convertNameToFile(n->m_label); QCString mapLabel = convertNameToFile(n->m_label);
out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#" out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "_map\">" << endl; << mapLabel << "_map\">" << endl;
out << "<map name=\"" << mapLabel << "_map\">" << endl; out << "<map name=\"" << mapLabel << "_map\">" << endl;
convertMapFile(out,mapName); convertMapFile(out,mapName);
out << "</map></td></tr>" << endl; out << "</map></td></tr>" << endl;
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName); //thisDir.remove(mapName);
thisDir.remove(mapName);
} }
out << "</table>" << endl; out << "</table>" << endl;
...@@ -1432,36 +1486,6 @@ QCString computeMd5Signature(DotNode *root, ...@@ -1432,36 +1486,6 @@ QCString computeMd5Signature(DotNode *root,
return sigStr; return sigStr;
} }
/*! Checks if a file "baseName".md5 exists. If so the contents
* are compared with \a md5. If equal FALSE is returned. If the .md5
* file does not exist or its contents are not equal to \a md5,
* a new .md5 is generated with the \a md5 string as contents.
*/
static bool checkAndUpdateMd5Signature(const QCString &baseName,const QCString &md5)
{
QFile f(baseName+".md5");
if (f.open(IO_ReadOnly))
{
// read checksum
QCString md5stored(33);
int bytesRead=f.readBlock(md5stored.data(),32);
// compare checksum
if (bytesRead==32 && md5==md5stored)
{
// bail out if equal
return FALSE;
}
}
f.close();
// create checksum file
if (f.open(IO_WriteOnly))
{
f.writeBlock(md5.data(),32);
f.close();
}
return TRUE;
}
static bool findMaximalDotGraph(DotNode *root, static bool findMaximalDotGraph(DotNode *root,
int maxDist, int maxDist,
const QCString &baseName, const QCString &baseName,
...@@ -1606,14 +1630,13 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1606,14 +1630,13 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
baseName = convertNameToFile(diskName()); baseName = convertNameToFile(diskName());
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),baseName, if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),baseName,
thisDir,m_graphType,format,!isTBRank,m_graphType==DotNode::Inheritance)) thisDir,m_graphType,format,!isTBRank,m_graphType==DotNode::Inheritance))
{ {
if (format==BITMAP) // run dot to create a bitmap image if (format==BITMAP) // run dot to create a bitmap image
{ {
QCString dotArgs(maxCmdLine); QCString dotArgs(maxCmdLine);
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName = baseName+"."+imgExt; QCString imgName = baseName+"."+imgExt;
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"", dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
imgExt.data(),baseName.data(),imgName.data()); imgExt.data(),baseName.data(),imgName.data());
...@@ -1634,36 +1657,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1634,36 +1657,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName);
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapLabel << "\" alt=\"";
switch (m_graphType)
{
case DotNode::Collaboration:
out << "Collaboration graph";
break;
//case Interface:
// out << "Interface dependency graph";
// break;
case DotNode::Inheritance:
out << "Inheritance graph";
break;
default:
ASSERT(0);
break;
}
out << "\"></center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapLabel << "\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
thisDir.remove(baseName+".map");
} }
} }
else if (format==EPS) // run dot to create a .eps image else if (format==EPS) // run dot to create a .eps image
...@@ -1676,13 +1669,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1676,13 +1669,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return baseName;
}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
...@@ -1695,8 +1681,51 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1695,8 +1681,51 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
return baseName; return baseName;
} }
} }
int maxWidth = 420; /* approx. page width in points */
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
}
if (format==BITMAP) // run dot to create a bitmap image
{
QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName);
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapLabel << "\" alt=\"";
switch (m_graphType)
{
case DotNode::Collaboration:
out << "Collaboration graph";
break;
case DotNode::Inheritance:
out << "Inheritance graph";
break;
default:
ASSERT(0);
break;
}
out << "\"></center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapLabel << "\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
//thisDir.remove(baseName+".map");
}
else if (format==EPS) // run dot to create a .eps image
{
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return baseName;
}
int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n" out << "\\begin{figure}[H]\n"
"\\begin{center}\n" "\\begin{center}\n"
"\\leavevmode\n" "\\leavevmode\n"
...@@ -1704,8 +1733,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out, ...@@ -1704,8 +1733,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
<< "pt]{" << baseName << "}\n" << "pt]{" << baseName << "}\n"
"\\end{center}\n" "\\end{center}\n"
"\\end{figure}\n"; "\\end{figure}\n";
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
} }
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
...@@ -1850,6 +1877,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1850,6 +1877,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
baseName=convertNameToFile(baseName); baseName=convertNameToFile(baseName);
QCString mapName=m_startNode->m_label.copy(); QCString mapName=m_startNode->m_label.copy();
if (m_inverse) mapName+="dep"; if (m_inverse) mapName+="dep";
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance), if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::Dependency,format, baseName,thisDir,DotNode::Dependency,format,
...@@ -1860,7 +1888,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1860,7 +1888,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
{ {
// run dot to create a bitmap image // run dot to create a bitmap image
QCString dotArgs(maxCmdLine); QCString dotArgs(maxCmdLine);
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName=baseName+"."+imgExt; QCString imgName=baseName+"."+imgExt;
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"", dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
imgExt.data(),baseName.data(),imgName.data()); imgExt.data(),baseName.data(),imgName.data());
...@@ -1884,22 +1911,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1884,22 +1911,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
return baseName; return baseName;
} }
out << "<p><center><img src=\"" << baseName << "." //thisDir.remove(baseName+".map");
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\"";
if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
out << "\">";
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
thisDir.remove(baseName+".map");
} }
} }
else if (format==EPS) else if (format==EPS)
...@@ -1914,13 +1926,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1914,13 +1926,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return baseName;
}
if (Config_getBool("USE_PDFLATEX")) if (Config_getBool("USE_PDFLATEX"))
{ {
QCString epstopdfArgs(maxCmdLine); QCString epstopdfArgs(maxCmdLine);
...@@ -1933,22 +1938,50 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out, ...@@ -1933,22 +1938,50 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
return baseName; return baseName;
} }
} }
int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n"
//"\\setlength{\\epsfxsize}{" << QMIN(width/2,maxWidth) << "pt}\n"
//"\\epsfbox{" << baseName << ".eps}\n"
"\\includegraphics[width=" << QMIN(width/2,maxWidth)
<< "pt]{" << baseName << "}\n"
"\\end{center}\n"
"\\end{figure}\n";
} }
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot"); if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
} }
if (format==BITMAP)
{
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\"";
if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
out << "\">";
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{
out << "<map name=\"" << mapName << "_map\">" << endl;
out << tmpstr;
out << "</map>" << endl;
}
}
else if (format==EPS)
{
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
err("Error: Could not extract bounding box from .eps!\n");
QDir::setCurrent(oldDir);
return baseName;
}
int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n"
"\\includegraphics[width=" << QMIN(width/2,maxWidth)
<< "pt]{" << baseName << "}\n"
"\\end{center}\n"
"\\end{figure}\n";
}
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
...@@ -2014,68 +2047,87 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2014,68 +2047,87 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QCString baseName=m_diskName+"_cgraph"; QCString baseName=m_diskName+"_cgraph";
//baseName=convertNameToFile(baseName); //baseName=convertNameToFile(baseName);
QCString mapName=baseName; QCString mapName=baseName;
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance), if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::CallGraph,format, baseName,thisDir,DotNode::CallGraph,format,
TRUE,FALSE,FALSE); TRUE,FALSE,FALSE))
if (format==BITMAP)
{ {
// run dot to create a bitmap image if (format==BITMAP)
QCString dotArgs(maxCmdLine);
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName=baseName+"."+imgExt;
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
imgExt.data(),baseName.data(),imgName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{ {
err("Problems running dot. Check your installation!\n"); // run dot to create a bitmap image
QDir::setCurrent(oldDir); QCString dotArgs(maxCmdLine);
return baseName; QCString imgName=baseName+"."+imgExt;
} dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
checkDotResult(imgName); imgExt.data(),baseName.data(),imgName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
checkDotResult(imgName);
if (generateImageMap) if (generateImageMap)
{
// run dot again to create an image map
dotArgs.sprintf("-Timap \"%s.dot\" -o \"%s.map\"",
baseName.data(),baseName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
}
}
else if (format==EPS)
{ {
// run dot again to create an image map // run dot to create a .eps image
dotArgs.sprintf("-Timap \"%s.dot\" -o \"%s.map\"", QCString dotArgs(maxCmdLine);
baseName.data(),baseName.data()); dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
baseName.data(),baseName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0) if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{ {
err("Problems running dot. Check your installation!\n"); err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
if (Config_getBool("USE_PDFLATEX"))
out << "<p><center><img src=\"" << baseName << "."
<< imgExt << "\" border=\"0\" usemap=\"#"
<< mapName << "_map\" alt=\"";
out << "\">";
out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{ {
out << "<map name=\"" << mapName << "_map\">" << endl; QCString epstopdfArgs(maxCmdLine);
out << tmpstr; epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
out << "</map>" << endl; baseName.data(),baseName.data());
if (iSystem("epstopdf",epstopdfArgs,TRUE)!=0)
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
} }
thisDir.remove(baseName+".map");
} }
} }
else if (format==EPS)
if (format==BITMAP)
{ {
// run dot to create a .eps image out << "<p><center><img src=\"" << baseName << "."
QCString dotArgs(maxCmdLine); << imgExt << "\" border=\"0\" usemap=\"#"
dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"", << mapName << "_map\" alt=\"";
baseName.data(),baseName.data()); out << "\">";
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0) out << "</center>" << endl;
QString tmpstr;
QTextOStream tmpout(&tmpstr);
convertMapFile(tmpout,baseName+".map");
if (!tmpstr.isEmpty())
{ {
err("Problems running dot. Check your installation!\n"); out << "<map name=\"" << mapName << "_map\">" << endl;
QDir::setCurrent(oldDir); out << tmpstr;
return baseName; out << "</map>" << endl;
} }
//thisDir.remove(baseName+".map");
}
else if (format==EPS)
{
int width,height; int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height)) if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{ {
...@@ -2083,18 +2135,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format, ...@@ -2083,18 +2135,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QDir::setCurrent(oldDir); QDir::setCurrent(oldDir);
return baseName; return baseName;
} }
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
baseName.data(),baseName.data());
if (iSystem("epstopdf",epstopdfArgs,TRUE)!=0)
{
err("Error: Problems running epstopdf. Check your TeX installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
}
int maxWidth = 420; /* approx. page width in points */ int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n" out << "\\begin{figure}[H]\n"
......
...@@ -4037,7 +4037,7 @@ static void addMemberDocs(Entry *root, ...@@ -4037,7 +4037,7 @@ static void addMemberDocs(Entry *root,
static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd, static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
const char *scopeName) const char *scopeName)
{ {
ClassDef *tcd = getClass(scopeName); ClassDef *tcd = getResolvedClass(nd,fd,scopeName);
if (tcd==0) // try using declaration if (tcd==0) // try using declaration
{ {
ClassSDict *cl = 0; ClassSDict *cl = 0;
...@@ -4438,7 +4438,7 @@ static void findMember(Entry *root, ...@@ -4438,7 +4438,7 @@ static void findMember(Entry *root,
} }
//printf("new scope=`%s'\n",scopeName.data()); //printf("new scope=`%s'\n",scopeName.data());
QCString tempScopeName=scopeName.copy(); QCString tempScopeName=scopeName;
ClassDef *cd=getClass(scopeName); ClassDef *cd=getClass(scopeName);
if (cd) if (cd)
{ {
......
...@@ -625,6 +625,9 @@ void FTVHelp::generateTreeView() ...@@ -625,6 +625,9 @@ void FTVHelp::generateTreeView()
else else
{ {
QTextStream t(&f); QTextStream t(&f);
#if QT_VERSION >= 200
t.setEncoding(QTextStream::Latin1);
#endif
t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n"; t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
t << " <head>\n"; t << " <head>\n";
t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=\"" t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=\""
......
...@@ -1397,6 +1397,9 @@ void HtmlGenerator::writeSearchPage() ...@@ -1397,6 +1397,9 @@ void HtmlGenerator::writeSearchPage()
if (f.open(IO_WriteOnly)) if (f.open(IO_WriteOnly))
{ {
QTextStream t(&f); QTextStream t(&f);
#if QT_VERSION >= 200
t.setEncoding(QTextStream::Latin1);
#endif
if (g_header.isEmpty()) if (g_header.isEmpty())
{ {
writeDefaultHeaderFile(t,"Search"); writeDefaultHeaderFile(t,"Search");
......
...@@ -247,7 +247,8 @@ static void writeDefaultHeaderPart1(QTextStream &t) ...@@ -247,7 +247,8 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{multicol}\n" "\\usepackage{multicol}\n"
"\\usepackage{float}\n" "\\usepackage{float}\n"
"\\usepackage{textcomp}\n" "\\usepackage{textcomp}\n"
"\\usepackage{alltt}\n"; "\\usepackage{alltt}\n"
"\\usepackage{ae,aecompl,aeguill}\n";
if (Config_getBool("PDF_HYPERLINKS")) if (Config_getBool("PDF_HYPERLINKS"))
{ {
t << "\\usepackage{times}" << endl; t << "\\usepackage{times}" << endl;
......
...@@ -522,7 +522,7 @@ QCString MemberDef::anchor() const ...@@ -522,7 +522,7 @@ QCString MemberDef::anchor() const
bool MemberDef::isLinkableInProject() const bool MemberDef::isLinkableInProject() const
{ {
//printf("MemberDef::isLinkableInProject()\n"); //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
if (m_templateMaster) if (m_templateMaster)
{ {
return m_templateMaster->isLinkableInProject(); return m_templateMaster->isLinkableInProject();
......
...@@ -243,7 +243,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -243,7 +243,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if (md->isDetailedSectionLinkable()) if (md->isDetailedSectionLinkable())
{ {
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.endEmphasis(); //ol.endEmphasis();
ol.docify(" "); ol.docify(" ");
if (md->getGroupDef()!=0 && gd==0) // forward link to group if (md->getGroupDef()!=0 && gd==0) // forward link to group
{ {
...@@ -256,7 +256,7 @@ void MemberList::writePlainDeclarations(OutputList &ol, ...@@ -256,7 +256,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
} }
ol.parseText(theTranslator->trMore()); ol.parseText(theTranslator->trMore());
ol.endTextLink(); ol.endTextLink();
ol.startEmphasis(); //ol.startEmphasis();
ol.enableAll(); ol.enableAll();
} }
ol.endMemberDescription(); ol.endMemberDescription();
......
...@@ -24,7 +24,8 @@ ...@@ -24,7 +24,8 @@
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf) # define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
#endif #endif
#include <png.h> #define ALL_STATIC
#include <../libpng/png.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
......
...@@ -672,6 +672,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -672,6 +672,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x EnumDocArg1 %x EnumDocArg1
%x FuncPtr %x FuncPtr
%x EndFuncPtr %x EndFuncPtr
%x FuncPtrInit
%x FuncFunc %x FuncFunc
%x FuncFuncEnd %x FuncFuncEnd
%x FuncFuncType %x FuncFuncType
...@@ -2643,8 +2644,32 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2643,8 +2644,32 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastCPPContext = YY_START; lastCPPContext = YY_START;
BEGIN(SkipCPP); BEGIN(SkipCPP);
} }
<FuncQual>"=" { // typically a initialized function pointer <FuncQual>"=" { // typically an initialized function pointer
current->args += *yytext; current->args += *yytext;
BEGIN(FuncPtrInit);
}
<FuncPtrInit>[{;] {
unput(*yytext);
BEGIN(FuncQual);
}
<FuncPtrInit>\" {
current->args += *yytext;
pCopyQuotedString=&current->args;
lastStringContext=FuncPtrInit;
BEGIN(CopyString);
}
<FuncPtrInit>{CHARLIT} {
current->args += yytext;
}
<FuncPtrInit>{ID} {
current->args += yytext;
}
<FuncPtrInit>. {
current->args += *yytext;
}
<FuncPtrInit>\n {
current->args += *yytext;
yyLineNr++;
} }
<FuncQual>{ID} { // typically a K&R style C function <FuncQual>{ID} { // typically a K&R style C function
if (checkForKnRstyleC()) if (checkForKnRstyleC())
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
#include <stdlib.h> #include <stdlib.h>
#include <ctype.h> #include <ctype.h>
#ifdef _WIN32 #if defined(_WIN32) && !defined(__CYGWIN__)
#include <windows.h> #include <windows.h>
#endif #endif
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#include "reflist.h" #include "reflist.h"
#include "pagedef.h" #include "pagedef.h"
#ifndef _WIN32 #if !defined(_WIN32) || defined(__CYGWIN__)
#include <unistd.h> #include <unistd.h>
#include <stdlib.h> #include <stdlib.h>
#include <sys/types.h> #include <sys/types.h>
...@@ -94,7 +94,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile) ...@@ -94,7 +94,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile)
{ {
QTime time; QTime time;
time.start(); time.start();
#ifndef _WIN32 #if !defined(_WIN32) || defined(__CYGWIN__)
isBatchFile=isBatchFile; isBatchFile=isBatchFile;
/*! taken from the system() manpage on my Linux box */ /*! taken from the system() manpage on my Linux box */
int pid,status=0; int pid,status=0;
...@@ -167,7 +167,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile) ...@@ -167,7 +167,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile)
} }
#endif // _OS_SOLARIS #endif // _OS_SOLARIS
#else #else // Win32 specific
if (isBatchFile) if (isBatchFile)
{ {
QCString fullCmd = command; QCString fullCmd = command;
...@@ -2697,6 +2697,7 @@ bool getDefs(const QCString &scName,const QCString &memberName, ...@@ -2697,6 +2697,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
} }
if (bmd) md=bmd; if (bmd) md=bmd;
} }
if (md && !md->isLinkable()) md=0; // ignore things we cannot link to
if (md) // found a matching global member if (md) // found a matching global member
{ {
fd=md->getFileDef(); fd=md->getFileDef();
...@@ -2963,18 +2964,19 @@ bool generateRef(OutputDocInterface &od,const char *scName, ...@@ -2963,18 +2964,19 @@ bool generateRef(OutputDocInterface &od,const char *scName,
if (resolveRef(scName,name,inSeeBlock,&compound,&md)) if (resolveRef(scName,name,inSeeBlock,&compound,&md))
{ {
if (md) // link to member if (md && md->isLinkable()) // link to member
{ {
od.writeObjectLink(md->getReference(), od.writeObjectLink(md->getReference(),
md->getOutputFileBase(), md->getOutputFileBase(),
md->anchor(),linkText); md->anchor(),linkText);
// generate the page reference (for LaTeX) // generate the page reference (for LaTeX)
if (md->isLinkableInProject()) if (!md->isReference())
{ {
writePageRef(od,md->getOutputFileBase(),md->anchor()); writePageRef(od,md->getOutputFileBase(),md->anchor());
} }
return TRUE;
} }
else // link to compound else if (compound && compound->isLinkable()) // link to compound
{ {
if (rt==0 && compound->definitionType()==Definition::TypeGroup) if (rt==0 && compound->definitionType()==Definition::TypeGroup)
{ {
...@@ -2991,14 +2993,11 @@ bool generateRef(OutputDocInterface &od,const char *scName, ...@@ -2991,14 +2993,11 @@ bool generateRef(OutputDocInterface &od,const char *scName,
{ {
writePageRef(od,compound->getOutputFileBase(),0); writePageRef(od,compound->getOutputFileBase(),0);
} }
return TRUE;
} }
return TRUE;
}
else // no link possible
{
od.docify(linkText);
return FALSE;
} }
od.docify(linkText);
return FALSE;
} }
bool resolveLink(/* in */ const char *scName, bool resolveLink(/* in */ const char *scName,
......
...@@ -1012,6 +1012,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti) ...@@ -1012,6 +1012,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
generateXMLSection(cd,ti,t,&cd->proSlots,"protected-slot"); generateXMLSection(cd,ti,t,&cd->proSlots,"protected-slot");
generateXMLSection(cd,ti,t,&cd->proStaticMethods,"protected-static-func"); generateXMLSection(cd,ti,t,&cd->proStaticMethods,"protected-static-func");
generateXMLSection(cd,ti,t,&cd->proStaticAttribs,"protected-static-attrib"); generateXMLSection(cd,ti,t,&cd->proStaticAttribs,"protected-static-attrib");
generateXMLSection(cd,ti,t,&cd->pacTypes,"package-type");
generateXMLSection(cd,ti,t,&cd->pacMethods,"package-func");
generateXMLSection(cd,ti,t,&cd->pacAttribs,"package-attrib");
generateXMLSection(cd,ti,t,&cd->pacStaticMethods,"package-static-func");
generateXMLSection(cd,ti,t,&cd->pacStaticAttribs,"package-static-attrib");
generateXMLSection(cd,ti,t,&cd->priTypes,"private-type"); generateXMLSection(cd,ti,t,&cd->priTypes,"private-type");
generateXMLSection(cd,ti,t,&cd->priMethods,"private-func"); generateXMLSection(cd,ti,t,&cd->priMethods,"private-func");
generateXMLSection(cd,ti,t,&cd->priAttribs,"private-attrib"); generateXMLSection(cd,ti,t,&cd->priAttribs,"private-attrib");
......
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