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

Release-1.3.8-20040928

parent a3133b16
DOXYGEN Version 1.3.8-20040913 DOXYGEN Version 1.3.8-20040928
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 (13 September 2004) Dimitri van Heesch (28 September 2004)
DOXYGEN Version 1.3.8_20040913 DOXYGEN Version 1.3.8_20040928
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) (13 September 2004) Dimitri van Heesch (dimitri@stack.nl) (28 September 2004)
1.3.8-20040913 1.3.8-20040928
...@@ -33,6 +33,7 @@ class ICompound; ...@@ -33,6 +33,7 @@ class ICompound;
class ISection; class ISection;
class INode; class INode;
class IDocInternal; class IDocInternal;
class IDocRoot;
/*! \brief Read only interface to a string. /*! \brief Read only interface to a string.
*/ */
...@@ -51,6 +52,11 @@ class IString ...@@ -51,6 +52,11 @@ class IString
virtual int length() const = 0; virtual int length() const = 0;
}; };
/*! \brief Base interface for hyperlinked text
*
* Depending on the result of kind() the interface is extended by
* ILT_Text or ILT_Ref.
*/
class ILinkedText class ILinkedText
{ {
public: public:
...@@ -58,12 +64,16 @@ class ILinkedText ...@@ -58,12 +64,16 @@ class ILinkedText
virtual Kind kind() const = 0; virtual Kind kind() const = 0;
}; };
/*! \brief Plain text fragment.
*/
class ILT_Text : public ILinkedText class ILT_Text : public ILinkedText
{ {
public: public:
virtual const IString *text() const = 0; virtual const IString *text() const = 0;
}; };
/*! \brief Reference to an object.
*/
class ILT_Ref : public ILinkedText class ILT_Ref : public ILinkedText
{ {
public: public:
...@@ -74,6 +84,8 @@ class ILT_Ref : public ILinkedText ...@@ -74,6 +84,8 @@ class ILT_Ref : public ILinkedText
virtual const IString *text() const = 0; virtual const IString *text() const = 0;
}; };
/*! \brief Iterates over a list of ILinkedText fragments.
*/
class ILinkedTextIterator class ILinkedTextIterator
{ {
public: public:
...@@ -85,6 +97,7 @@ class ILinkedTextIterator ...@@ -85,6 +97,7 @@ class ILinkedTextIterator
virtual void release() = 0; virtual void release() = 0;
}; };
/*! \brief Representation of a parameter of a function. */
class IParam class IParam
{ {
public: public:
...@@ -94,6 +107,7 @@ class IParam ...@@ -94,6 +107,7 @@ class IParam
virtual const IString * attrib() const = 0; virtual const IString * attrib() const = 0;
virtual const IString * arraySpecifier() const = 0; virtual const IString * arraySpecifier() const = 0;
virtual ILinkedTextIterator *defaultValue() const = 0; virtual ILinkedTextIterator *defaultValue() const = 0;
virtual IDocRoot *briefDescription() const = 0;
}; };
class IParamIterator class IParamIterator
...@@ -171,7 +185,8 @@ class IDoc ...@@ -171,7 +185,8 @@ class IDoc
Anchor, // 34 -> IDocAnchor Anchor, // 34 -> IDocAnchor
Symbol, // 35 -> IDocSymbol Symbol, // 35 -> IDocSymbol
Internal, // 36 -> IDocInternal Internal, // 36 -> IDocInternal
Root // 37 -> IDocRoot Root, // 37 -> IDocRoot
ParameterItem // 38 -> IDocParameterItem
}; };
virtual Kind kind() const = 0; virtual Kind kind() const = 0;
}; };
...@@ -238,15 +253,21 @@ class IDocParameterList : public IDoc ...@@ -238,15 +253,21 @@ class IDocParameterList : public IDoc
{ {
public: public:
enum Types { Param, RetVal, Exception }; enum Types { Param, RetVal, Exception };
virtual Types listType() const = 0; virtual Types sectType() const = 0;
virtual IDocIterator *params() const = 0; virtual IDocIterator *params() const = 0;
}; };
class IDocParameterItem : public IDoc
{
public:
virtual IDocIterator *paramNames() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocParameter : public IDoc class IDocParameter : public IDoc
{ {
public: public:
virtual const IString * name() const = 0; virtual const IString * name() const = 0;
virtual IDocPara *description() const = 0;
}; };
class IDocTitle : public IDoc class IDocTitle : public IDoc
...@@ -562,8 +583,18 @@ class IMember ...@@ -562,8 +583,18 @@ class IMember
virtual ILinkedTextIterator *type() const = 0; virtual ILinkedTextIterator *type() const = 0;
virtual const IString * typeString() const = 0; virtual const IString * typeString() const = 0;
virtual const IString * name() const = 0; virtual const IString * name() const = 0;
virtual const IString * readAccessor() const = 0;
virtual const IString * writeAccessor() const = 0;
virtual const IString * definition() const = 0;
virtual const IString * argsstring() const = 0;
virtual bool isConst() const = 0; virtual bool isConst() const = 0;
virtual bool isVolatile() const = 0; virtual bool isVolatile() const = 0;
virtual bool isStatic() const = 0;
virtual bool isExplicit() const = 0;
virtual bool isInline() const = 0;
virtual bool isMutable() const = 0;
virtual bool isReadable() const = 0;
virtual bool isWritable() const = 0;
virtual IParamIterator *parameters() const = 0; virtual IParamIterator *parameters() const = 0;
virtual IParamIterator *templateParameters() const = 0; virtual IParamIterator *templateParameters() const = 0;
virtual ILinkedTextIterator *initializer() const = 0; virtual ILinkedTextIterator *initializer() const = 0;
...@@ -578,6 +609,7 @@ class IMember ...@@ -578,6 +609,7 @@ class IMember
virtual IMemberReferenceIterator *reimplementedBy() const = 0; virtual IMemberReferenceIterator *reimplementedBy() const = 0;
virtual IDocRoot *briefDescription() const = 0; virtual IDocRoot *briefDescription() const = 0;
virtual IDocRoot *detailedDescription() const = 0; virtual IDocRoot *detailedDescription() const = 0;
virtual IDocRoot *inbodyDescription() const = 0;
}; };
class IDefine : public IMember class IDefine : public IMember
...@@ -636,19 +668,26 @@ class IEnumValue : public IMember ...@@ -636,19 +668,26 @@ class IEnumValue : public IMember
virtual const IString * name() const = 0; virtual const IString * name() const = 0;
}; };
#if 0 /*! \brief Include relation
class IEnumValueIterator */
class IInclude
{ {
public: public:
virtual IEnumValue *toFirst() = 0; virtual const IString * name() const = 0;
virtual IEnumValue *toLast() = 0; virtual const IString * refId() const = 0;
virtual IEnumValue *toNext() = 0; virtual bool isLocal() const = 0;
virtual IEnumValue *toPrev() = 0;
virtual IEnumValue *current() const = 0;
virtual void release() = 0;
}; };
#endif
class IIncludeIterator
{
public:
virtual IInclude *toFirst() = 0;
virtual IInclude *toLast() = 0;
virtual IInclude *toNext() = 0;
virtual IInclude *toPrev() = 0;
virtual IInclude *current() const = 0;
virtual void release() = 0;
};
class IMemberIterator class IMemberIterator
{ {
...@@ -936,6 +975,7 @@ class IInterface : public ICompound ...@@ -936,6 +975,7 @@ class IInterface : public ICompound
virtual IRelatedCompoundIterator *derivedCompounds() const = 0; virtual IRelatedCompoundIterator *derivedCompounds() const = 0;
}; };
/*! \brief The interface to a Java/IDL exception in the object model. /*! \brief The interface to a Java/IDL exception in the object model.
*/ */
class IException : public ICompound class IException : public ICompound
...@@ -960,9 +1000,9 @@ class IFile : public ICompound ...@@ -960,9 +1000,9 @@ class IFile : public ICompound
virtual IDocProgramListing *source() const = 0; virtual IDocProgramListing *source() const = 0;
virtual ICompoundIterator *nestedCompounds() const = 0; virtual ICompoundIterator *nestedCompounds() const = 0;
// file: virtual IIncludeIterator *includes() const = 0;
// includes() virtual IIncludeIterator *includedBy() const = 0;
// includedBy()
// ICompound *innerNamespaces() // ICompound *innerNamespaces()
// ICompoundIterator *innerClasses() // ICompoundIterator *innerClasses()
}; };
......
...@@ -25,6 +25,33 @@ ...@@ -25,6 +25,33 @@
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
IncludeHandler::IncludeHandler(IBaseHandler *parent,const char *endtag) :
m_parent(parent)
{
addEndHandler(endtag,this,&IncludeHandler::endInclude);
}
IncludeHandler::~IncludeHandler()
{
}
void IncludeHandler::startInclude(const QXmlAttributes &attrib)
{
m_curString = "";
m_refId = attrib.value("refid");
m_isLocal = attrib.value("local")=="yes";
m_parent->setDelegate(this);
}
void IncludeHandler::endInclude()
{
m_name = m_curString;
m_parent->setDelegate(0);
debug(2,"Found include %s\n",m_name.data());
}
//----------------------------------------------------------------------------
class CompoundIdIterator : public ICompoundIterator, class CompoundIdIterator : public ICompoundIterator,
public QListIterator<QString> public QListIterator<QString>
{ {
...@@ -107,11 +134,15 @@ class CompoundTypeMap ...@@ -107,11 +134,15 @@ class CompoundTypeMap
m_map.insert("struct",new int(ICompound::Struct)); m_map.insert("struct",new int(ICompound::Struct));
m_map.insert("union",new int(ICompound::Union)); m_map.insert("union",new int(ICompound::Union));
m_map.insert("interface",new int(ICompound::Interface)); m_map.insert("interface",new int(ICompound::Interface));
m_map.insert("protocol",new int(ICompound::Interface));
m_map.insert("category",new int(ICompound::Interface));
m_map.insert("exception",new int(ICompound::Exception)); m_map.insert("exception",new int(ICompound::Exception));
m_map.insert("namespace",new int(ICompound::Namespace));
m_map.insert("file",new int(ICompound::File)); m_map.insert("file",new int(ICompound::File));
m_map.insert("namespace",new int(ICompound::Namespace));
m_map.insert("group",new int(ICompound::Group)); m_map.insert("group",new int(ICompound::Group));
m_map.insert("page",new int(ICompound::Page)); m_map.insert("page",new int(ICompound::Page));
m_map.insert("example",new int(ICompound::Page));
m_map.insert("dir",new int(ICompound::Page));
} }
virtual ~CompoundTypeMap() virtual ~CompoundTypeMap()
{ {
...@@ -157,6 +188,8 @@ CompoundHandler::CompoundHandler(const QString &xmlDir) ...@@ -157,6 +188,8 @@ CompoundHandler::CompoundHandler(const QString &xmlDir)
m_memberNameDict.setAutoDelete(TRUE); m_memberNameDict.setAutoDelete(TRUE);
m_innerCompounds.setAutoDelete(TRUE); m_innerCompounds.setAutoDelete(TRUE);
m_params.setAutoDelete(TRUE); m_params.setAutoDelete(TRUE);
m_includes.setAutoDelete(TRUE);
m_includedBy.setAutoDelete(TRUE);
addStartHandler("doxygen"); addStartHandler("doxygen");
addEndHandler("doxygen"); addEndHandler("doxygen");
...@@ -175,13 +208,16 @@ CompoundHandler::CompoundHandler(const QString &xmlDir) ...@@ -175,13 +208,16 @@ CompoundHandler::CompoundHandler(const QString &xmlDir)
addStartHandler("derivedcompoundref",this,&CompoundHandler::addSubClass); addStartHandler("derivedcompoundref",this,&CompoundHandler::addSubClass);
addEndHandler("derivedcompoundref"); addEndHandler("derivedcompoundref");
// includes addStartHandler("includes",this,&CompoundHandler::startIncludes);
// includedby addStartHandler("includedby",this,&CompoundHandler::startIncludedBy);
addStartHandler("incdepgraph",this,&CompoundHandler::startIncludeDependencyGraph); addStartHandler("incdepgraph",this,&CompoundHandler::startIncludeDependencyGraph);
addStartHandler("invincdepgraph",this,&CompoundHandler::startIncludedByDependencyGraph); addStartHandler("invincdepgraph",this,&CompoundHandler::startIncludedByDependencyGraph);
addStartHandler("innerdir",this,&CompoundHandler::startInnerDir);
addEndHandler("innerdir");
addStartHandler("innerfile",this,&CompoundHandler::startInnerFile); addStartHandler("innerfile",this,&CompoundHandler::startInnerFile);
addEndHandler("innerfile"); addEndHandler("innerfile");
...@@ -191,7 +227,8 @@ CompoundHandler::CompoundHandler(const QString &xmlDir) ...@@ -191,7 +227,8 @@ CompoundHandler::CompoundHandler(const QString &xmlDir)
addStartHandler("innernamespace",this,&CompoundHandler::startInnerNamespace); addStartHandler("innernamespace",this,&CompoundHandler::startInnerNamespace);
addEndHandler("innernamespace"); addEndHandler("innernamespace");
// innerpage addStartHandler("innerpage",this,&CompoundHandler::startInnerPage);
addEndHandler("innerpage");
addStartHandler("innergroup",this,&CompoundHandler::startInnerGroup); addStartHandler("innergroup",this,&CompoundHandler::startInnerGroup);
addEndHandler("innergroup"); addEndHandler("innergroup");
...@@ -259,6 +296,20 @@ void CompoundHandler::startProgramListing(const QXmlAttributes& attrib) ...@@ -259,6 +296,20 @@ void CompoundHandler::startProgramListing(const QXmlAttributes& attrib)
m_programListing = plHandler; m_programListing = plHandler;
} }
void CompoundHandler::startIncludes(const QXmlAttributes& attrib)
{
IncludeHandler *inc = new IncludeHandler(this,"includes");
m_includes.append(inc);
inc->startInclude(attrib);
}
void CompoundHandler::startIncludedBy(const QXmlAttributes& attrib)
{
IncludeHandler *inc = new IncludeHandler(this,"includedby");
m_includedBy.append(inc);
inc->startInclude(attrib);
}
void CompoundHandler::startCompound(const QXmlAttributes& attrib) void CompoundHandler::startCompound(const QXmlAttributes& attrib)
{ {
m_id = attrib.value("id"); m_id = attrib.value("id");
...@@ -307,6 +358,16 @@ void CompoundHandler::startInnerGroup(const QXmlAttributes& attrib) ...@@ -307,6 +358,16 @@ void CompoundHandler::startInnerGroup(const QXmlAttributes& attrib)
m_innerCompounds.append(new QString(attrib.value("refid"))); m_innerCompounds.append(new QString(attrib.value("refid")));
} }
void CompoundHandler::startInnerPage(const QXmlAttributes& attrib)
{
m_innerCompounds.append(new QString(attrib.value("refid")));
}
void CompoundHandler::startInnerDir(const QXmlAttributes& attrib)
{
m_innerCompounds.append(new QString(attrib.value("refid")));
}
void CompoundHandler::startTemplateParamList(const QXmlAttributes& attrib) void CompoundHandler::startTemplateParamList(const QXmlAttributes& attrib)
{ {
m_templateParamList = new TemplateParamListHandler(this); m_templateParamList = new TemplateParamListHandler(this);
...@@ -539,6 +600,16 @@ IDocProgramListing *CompoundHandler::source() const ...@@ -539,6 +600,16 @@ IDocProgramListing *CompoundHandler::source() const
return m_programListing; return m_programListing;
} }
IIncludeIterator *CompoundHandler::includes() const
{
return new IncludeIterator(m_includes);
}
IIncludeIterator *CompoundHandler::includedBy() const
{
return new IncludeIterator(m_includedBy);
}
IParamIterator *CompoundHandler::templateParameters() const IParamIterator *CompoundHandler::templateParameters() const
{ {
return m_templateParamList ? m_templateParamList->templateParams() : 0; return m_templateParamList ? m_templateParamList->templateParams() : 0;
......
...@@ -36,6 +36,38 @@ class TemplateParamListHandler; ...@@ -36,6 +36,38 @@ class TemplateParamListHandler;
class TitleHandler; class TitleHandler;
class ListOfAllMembersHandler; class ListOfAllMembersHandler;
class IncludeHandler : public IInclude, public BaseHandler<IncludeHandler>\
{
public:
IncludeHandler(IBaseHandler *parent,const char *endtag);
virtual ~IncludeHandler();
void startInclude(const QXmlAttributes &attrib);
void endInclude();
// IInclude
virtual const IString * name() const
{ return &m_name; }
virtual const IString * refId() const
{ return &m_refId; }
virtual bool isLocal() const
{ return &m_isLocal; }
private:
IBaseHandler *m_parent;
StringImpl m_name;
StringImpl m_refId;
bool m_isLocal;
};
class IncludeIterator : public BaseIterator<IIncludeIterator,IInclude,IncludeHandler>
{
public:
IncludeIterator(const QList<IncludeHandler> &list) :
BaseIterator<IIncludeIterator,IInclude,IncludeHandler>(list) {}
};
class RelatedCompound : public IRelatedCompound class RelatedCompound : public IRelatedCompound
{ {
public: public:
...@@ -94,10 +126,14 @@ class CompoundHandler : public IClass, ...@@ -94,10 +126,14 @@ class CompoundHandler : public IClass,
virtual void startCollaborationGraph(const QXmlAttributes& attrib); virtual void startCollaborationGraph(const QXmlAttributes& attrib);
virtual void startIncludeDependencyGraph(const QXmlAttributes& attrib); virtual void startIncludeDependencyGraph(const QXmlAttributes& attrib);
virtual void startIncludedByDependencyGraph(const QXmlAttributes& attrib); virtual void startIncludedByDependencyGraph(const QXmlAttributes& attrib);
virtual void startIncludes(const QXmlAttributes& attrib);
virtual void startIncludedBy(const QXmlAttributes& attrib);
virtual void startInnerDir(const QXmlAttributes& attrib);
virtual void startInnerClass(const QXmlAttributes& attrib); virtual void startInnerClass(const QXmlAttributes& attrib);
virtual void startInnerNamespace(const QXmlAttributes& attrib); virtual void startInnerNamespace(const QXmlAttributes& attrib);
virtual void startInnerFile(const QXmlAttributes& attrib); virtual void startInnerFile(const QXmlAttributes& attrib);
virtual void startInnerGroup(const QXmlAttributes& attrib); virtual void startInnerGroup(const QXmlAttributes& attrib);
virtual void startInnerPage(const QXmlAttributes& attrib);
virtual void startTitle(const QXmlAttributes& attrib); virtual void startTitle(const QXmlAttributes& attrib);
virtual void startTemplateParamList(const QXmlAttributes& attrib); virtual void startTemplateParamList(const QXmlAttributes& attrib);
virtual void startListOfAllMembers(const QXmlAttributes& attrib); virtual void startListOfAllMembers(const QXmlAttributes& attrib);
...@@ -140,6 +176,8 @@ class CompoundHandler : public IClass, ...@@ -140,6 +176,8 @@ class CompoundHandler : public IClass,
IGraph *includeDependencyGraph() const; IGraph *includeDependencyGraph() const;
IGraph *includedByDependencyGraph() const; IGraph *includedByDependencyGraph() const;
IDocProgramListing *source() const; IDocProgramListing *source() const;
IIncludeIterator *includes() const;
IIncludeIterator *includedBy() const;
// IPage implementation // IPage implementation
const IDocTitle *title() const; const IDocTitle *title() const;
...@@ -149,6 +187,8 @@ class CompoundHandler : public IClass, ...@@ -149,6 +187,8 @@ class CompoundHandler : public IClass,
QList<RelatedCompound> m_subClasses; QList<RelatedCompound> m_subClasses;
QList<SectionHandler> m_sections; QList<SectionHandler> m_sections;
QList<ParamHandler> m_params; QList<ParamHandler> m_params;
QList<IncludeHandler> m_includes;
QList<IncludeHandler> m_includedBy;
DocHandler* m_brief; DocHandler* m_brief;
DocHandler* m_detailed; DocHandler* m_detailed;
ProgramListingHandler* m_programListing; ProgramListingHandler* m_programListing;
......
...@@ -551,16 +551,13 @@ void TocItemHandler::endTocItem() ...@@ -551,16 +551,13 @@ void TocItemHandler::endTocItem()
//---------------------------------------------------------------------- //----------------------------------------------------------------------
ParameterHandler::ParameterHandler(IBaseHandler *parent) : ParameterHandler::ParameterHandler(IBaseHandler *parent) :
m_parent(parent), m_description(0) m_parent(parent)
{ {
addEndHandler("parametername",this,&ParameterHandler::endParameterName); addEndHandler("parametername",this,&ParameterHandler::endParameterName);
addEndHandler("parameterdescription",this,&ParameterHandler::endParameterDescription);
addStartHandler("para",this,&ParameterHandler::startParagraph);
} }
ParameterHandler::~ParameterHandler() ParameterHandler::~ParameterHandler()
{ {
delete m_description;
} }
void ParameterHandler::startParameterName(const QXmlAttributes& /*attrib*/) void ParameterHandler::startParameterName(const QXmlAttributes& /*attrib*/)
...@@ -576,23 +573,57 @@ void ParameterHandler::endParameterName() ...@@ -576,23 +573,57 @@ void ParameterHandler::endParameterName()
m_parent->setDelegate(0); m_parent->setDelegate(0);
} }
void ParameterHandler::startParameterDescription(const QXmlAttributes& /*attrib*/) //----------------------------------------------------------------------
// ParameterListHandler
//----------------------------------------------------------------------
ParameterItemHandler::ParameterItemHandler(IBaseHandler *parent)
: m_parent(parent)
{
addEndHandler("parameteritem",this,&ParameterItemHandler::endParameterItem);
addStartHandler("parameternamelist");
addEndHandler("parameternamelist");
addStartHandler("parametername",this,&ParameterItemHandler::startParameterName);
addStartHandler("parameterdescription");
addEndHandler("parameterdescription");
addStartHandler("para",this,&ParameterItemHandler::startParagraph);
m_parameters.setAutoDelete(TRUE);
m_description = 0;
}
ParameterItemHandler::~ParameterItemHandler()
{
delete m_description;
}
void ParameterItemHandler::startParameterItem(const QXmlAttributes&)
{ {
m_parent->setDelegate(this); m_parent->setDelegate(this);
} }
void ParameterHandler::endParameterDescription() void ParameterItemHandler::endParameterItem()
{ {
m_parent->setDelegate(0); m_parent->setDelegate(0);
} }
void ParameterHandler::startParagraph(const QXmlAttributes& attrib) void ParameterItemHandler::startParameterName(const QXmlAttributes& attrib)
{
ParameterHandler *param = new ParameterHandler(this);
m_parameters.append(param);
param->startParameterName(attrib);
}
void ParameterItemHandler::startParagraph(const QXmlAttributes& attrib)
{ {
ASSERT(m_description==0);
m_description = new ParagraphHandler(this); m_description = new ParagraphHandler(this);
m_description->startParagraph(attrib); m_description->startParagraph(attrib);
} }
IDocIterator *ParameterItemHandler::paramNames() const
{
return new ParameterItemIterator(*this);
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// ParameterListHandler // ParameterListHandler
//---------------------------------------------------------------------- //----------------------------------------------------------------------
...@@ -601,12 +632,8 @@ ParameterListHandler::ParameterListHandler(IBaseHandler *parent) ...@@ -601,12 +632,8 @@ ParameterListHandler::ParameterListHandler(IBaseHandler *parent)
: m_parent(parent) : m_parent(parent)
{ {
addEndHandler("parameterlist",this,&ParameterListHandler::endParameterList); addEndHandler("parameterlist",this,&ParameterListHandler::endParameterList);
addStartHandler("parametername",this,&ParameterListHandler::startParameterName); addStartHandler("parameteritem",this,&ParameterListHandler::startParameterItem);
addStartHandler("parameterdescription",this,&ParameterListHandler::startParameterDescription); m_paramItems.setAutoDelete(TRUE);
addStartHandler("title");
addEndHandler("title");
m_parameters.setAutoDelete(TRUE);
m_curParam=0;
} }
ParameterListHandler::~ParameterListHandler() ParameterListHandler::~ParameterListHandler()
...@@ -632,17 +659,11 @@ void ParameterListHandler::endParameterList() ...@@ -632,17 +659,11 @@ void ParameterListHandler::endParameterList()
m_parent->setDelegate(0); m_parent->setDelegate(0);
} }
void ParameterListHandler::startParameterName(const QXmlAttributes& attrib) void ParameterListHandler::startParameterItem(const QXmlAttributes& attrib)
{
m_curParam = new ParameterHandler(this);
m_parameters.append(m_curParam);
m_curParam->startParameterName(attrib);
}
void ParameterListHandler::startParameterDescription(const QXmlAttributes& attrib)
{ {
ASSERT(m_curParam!=0); ParameterItemHandler *paramItem = new ParameterItemHandler(this);
m_curParam->startParameterDescription(attrib); m_paramItems.append(paramItem);
paramItem->startParameterItem(attrib);
} }
IDocIterator *ParameterListHandler::params() const IDocIterator *ParameterListHandler::params() const
...@@ -1734,9 +1755,9 @@ void ParagraphHandler::startOrderedList(const QXmlAttributes& attrib) ...@@ -1734,9 +1755,9 @@ void ParagraphHandler::startOrderedList(const QXmlAttributes& attrib)
void ParagraphHandler::startParameterList(const QXmlAttributes& attrib) void ParagraphHandler::startParameterList(const QXmlAttributes& attrib)
{ {
addTextNode(); addTextNode();
ParameterListHandler *parListHandler = new ParameterListHandler(this); ParameterListHandler *listHandler = new ParameterListHandler(this);
parListHandler->startParameterList(attrib); listHandler->startParameterList(attrib);
m_children.append(parListHandler); m_children.append(listHandler);
} }
void ParagraphHandler::startSimpleSect(const QXmlAttributes& attrib) void ParagraphHandler::startSimpleSect(const QXmlAttributes& attrib)
...@@ -2148,6 +2169,7 @@ DocHandler::DocHandler(IBaseHandler *parent) : m_parent(parent) ...@@ -2148,6 +2169,7 @@ DocHandler::DocHandler(IBaseHandler *parent) : m_parent(parent)
addEndHandler("briefdescription",this,&DocHandler::endDoc); addEndHandler("briefdescription",this,&DocHandler::endDoc);
addEndHandler("detaileddescription",this,&DocHandler::endDoc); addEndHandler("detaileddescription",this,&DocHandler::endDoc);
addEndHandler("inbodydescription",this,&DocHandler::endDoc);
addEndHandler("internal"); addEndHandler("internal");
addStartHandler("para",this,&DocHandler::startParagraph); addStartHandler("para",this,&DocHandler::startParagraph);
......
...@@ -45,6 +45,7 @@ DEFINE_CLS_IMPL(DocItemizedList); ...@@ -45,6 +45,7 @@ DEFINE_CLS_IMPL(DocItemizedList);
DEFINE_CLS_IMPL(DocOrderedList); DEFINE_CLS_IMPL(DocOrderedList);
DEFINE_CLS_IMPL(DocListItem); DEFINE_CLS_IMPL(DocListItem);
DEFINE_CLS_IMPL(DocParameterList); DEFINE_CLS_IMPL(DocParameterList);
DEFINE_CLS_IMPL(DocParameterItem);
DEFINE_CLS_IMPL(DocParameter); DEFINE_CLS_IMPL(DocParameter);
DEFINE_CLS_IMPL(DocTitle); DEFINE_CLS_IMPL(DocTitle);
DEFINE_CLS_IMPL(DocSimpleSect); DEFINE_CLS_IMPL(DocSimpleSect);
...@@ -418,24 +419,54 @@ class ParameterHandler : public DocParameterImpl, ...@@ -418,24 +419,54 @@ class ParameterHandler : public DocParameterImpl,
virtual ~ParameterHandler(); virtual ~ParameterHandler();
virtual void startParameterName(const QXmlAttributes& attrib); virtual void startParameterName(const QXmlAttributes& attrib);
virtual void endParameterName(); virtual void endParameterName();
virtual void startParameterDescription(const QXmlAttributes& attrib);
virtual void endParameterDescription();
virtual void startParagraph(const QXmlAttributes& attrib);
// IDocParameter // IDocParameter
virtual Kind kind() const { return DocImpl::Parameter; } virtual Kind kind() const { return DocImpl::Parameter; }
virtual const IString *name() const { return &m_name; } virtual const IString *name() const { return &m_name; }
virtual IDocPara *description() const { return m_description; }
private: private:
IBaseHandler *m_parent; IBaseHandler *m_parent;
StringImpl m_name; StringImpl m_name;
};
//-----------------------------------------------------------------------------
/* \brief Node representing a list of param names with a single description.
*
*/
class ParameterItemHandler : public DocParameterItemImpl,
public BaseHandler<ParameterItemHandler>
{
friend class ParameterItemIterator;
public:
ParameterItemHandler(IBaseHandler *parent);
virtual ~ParameterItemHandler();
virtual void startParameterItem(const QXmlAttributes& attrib);
virtual void endParameterItem();
virtual void startParameterName(const QXmlAttributes& attrib);
virtual void startParagraph(const QXmlAttributes& attrib);
// IDocParameterItem
virtual Kind kind() const { return DocImpl::ParameterItem; }
virtual IDocIterator *paramNames() const;
virtual IDocPara *description() const { return m_description; }
private:
IBaseHandler *m_parent;
QList<ParameterHandler> m_parameters;
ParagraphHandler *m_description; ParagraphHandler *m_description;
}; };
class ParameterItemIterator : public BaseIteratorVia<IDocIterator,IDoc,ParameterHandler,DocImpl>
{
public:
ParameterItemIterator(const ParameterItemHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,ParameterHandler,DocImpl>(handler.m_parameters) {}
};
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/* \brief Node representing a parameter list. /* \brief Node representing a parameter section.
* *
*/ */
class ParameterListHandler : public DocParameterListImpl, class ParameterListHandler : public DocParameterListImpl,
...@@ -447,26 +478,24 @@ class ParameterListHandler : public DocParameterListImpl, ...@@ -447,26 +478,24 @@ class ParameterListHandler : public DocParameterListImpl,
virtual ~ParameterListHandler(); virtual ~ParameterListHandler();
virtual void startParameterList(const QXmlAttributes& attrib); virtual void startParameterList(const QXmlAttributes& attrib);
virtual void endParameterList(); virtual void endParameterList();
virtual void startParameterName(const QXmlAttributes& attrib); virtual void startParameterItem(const QXmlAttributes& attrib);
virtual void startParameterDescription(const QXmlAttributes& attrib);
// IDocParameterList // IDocParameterList
virtual Kind kind() const { return DocImpl::ParameterList; } virtual Kind kind() const { return DocImpl::ParameterList; }
virtual Types listType() const { return m_type; } virtual Types sectType() const { return m_type; }
virtual IDocIterator *params() const; virtual IDocIterator *params() const;
private: private:
IBaseHandler *m_parent; IBaseHandler *m_parent;
QList<ParameterHandler> m_parameters; QList<ParameterItemHandler> m_paramItems;
ParameterHandler *m_curParam;
Types m_type; Types m_type;
}; };
class ParameterListIterator : public BaseIteratorVia<IDocIterator,IDoc,ParameterHandler,DocImpl> class ParameterListIterator : public BaseIteratorVia<IDocIterator,IDoc,ParameterItemHandler,DocImpl>
{ {
public: public:
ParameterListIterator(const ParameterListHandler &handler) : ParameterListIterator(const ParameterListHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,ParameterHandler,DocImpl>(handler.m_parameters) {} BaseIteratorVia<IDocIterator,IDoc,ParameterItemHandler,DocImpl>(handler.m_paramItems) {}
}; };
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -33,6 +33,7 @@ class ICompound; ...@@ -33,6 +33,7 @@ class ICompound;
class ISection; class ISection;
class INode; class INode;
class IDocInternal; class IDocInternal;
class IDocRoot;
/*! \brief Read only interface to a string. /*! \brief Read only interface to a string.
*/ */
...@@ -51,6 +52,11 @@ class IString ...@@ -51,6 +52,11 @@ class IString
virtual int length() const = 0; virtual int length() const = 0;
}; };
/*! \brief Base interface for hyperlinked text
*
* Depending on the result of kind() the interface is extended by
* ILT_Text or ILT_Ref.
*/
class ILinkedText class ILinkedText
{ {
public: public:
...@@ -58,12 +64,16 @@ class ILinkedText ...@@ -58,12 +64,16 @@ class ILinkedText
virtual Kind kind() const = 0; virtual Kind kind() const = 0;
}; };
/*! \brief Plain text fragment.
*/
class ILT_Text : public ILinkedText class ILT_Text : public ILinkedText
{ {
public: public:
virtual const IString *text() const = 0; virtual const IString *text() const = 0;
}; };
/*! \brief Reference to an object.
*/
class ILT_Ref : public ILinkedText class ILT_Ref : public ILinkedText
{ {
public: public:
...@@ -74,6 +84,8 @@ class ILT_Ref : public ILinkedText ...@@ -74,6 +84,8 @@ class ILT_Ref : public ILinkedText
virtual const IString *text() const = 0; virtual const IString *text() const = 0;
}; };
/*! \brief Iterates over a list of ILinkedText fragments.
*/
class ILinkedTextIterator class ILinkedTextIterator
{ {
public: public:
...@@ -85,6 +97,7 @@ class ILinkedTextIterator ...@@ -85,6 +97,7 @@ class ILinkedTextIterator
virtual void release() = 0; virtual void release() = 0;
}; };
/*! \brief Representation of a parameter of a function. */
class IParam class IParam
{ {
public: public:
...@@ -94,6 +107,7 @@ class IParam ...@@ -94,6 +107,7 @@ class IParam
virtual const IString * attrib() const = 0; virtual const IString * attrib() const = 0;
virtual const IString * arraySpecifier() const = 0; virtual const IString * arraySpecifier() const = 0;
virtual ILinkedTextIterator *defaultValue() const = 0; virtual ILinkedTextIterator *defaultValue() const = 0;
virtual IDocRoot *briefDescription() const = 0;
}; };
class IParamIterator class IParamIterator
...@@ -171,7 +185,8 @@ class IDoc ...@@ -171,7 +185,8 @@ class IDoc
Anchor, // 34 -> IDocAnchor Anchor, // 34 -> IDocAnchor
Symbol, // 35 -> IDocSymbol Symbol, // 35 -> IDocSymbol
Internal, // 36 -> IDocInternal Internal, // 36 -> IDocInternal
Root // 37 -> IDocRoot Root, // 37 -> IDocRoot
ParameterItem // 38 -> IDocParameterItem
}; };
virtual Kind kind() const = 0; virtual Kind kind() const = 0;
}; };
...@@ -238,15 +253,21 @@ class IDocParameterList : public IDoc ...@@ -238,15 +253,21 @@ class IDocParameterList : public IDoc
{ {
public: public:
enum Types { Param, RetVal, Exception }; enum Types { Param, RetVal, Exception };
virtual Types listType() const = 0; virtual Types sectType() const = 0;
virtual IDocIterator *params() const = 0; virtual IDocIterator *params() const = 0;
}; };
class IDocParameterItem : public IDoc
{
public:
virtual IDocIterator *paramNames() const = 0;
virtual IDocPara *description() const = 0;
};
class IDocParameter : public IDoc class IDocParameter : public IDoc
{ {
public: public:
virtual const IString * name() const = 0; virtual const IString * name() const = 0;
virtual IDocPara *description() const = 0;
}; };
class IDocTitle : public IDoc class IDocTitle : public IDoc
...@@ -562,8 +583,18 @@ class IMember ...@@ -562,8 +583,18 @@ class IMember
virtual ILinkedTextIterator *type() const = 0; virtual ILinkedTextIterator *type() const = 0;
virtual const IString * typeString() const = 0; virtual const IString * typeString() const = 0;
virtual const IString * name() const = 0; virtual const IString * name() const = 0;
virtual const IString * readAccessor() const = 0;
virtual const IString * writeAccessor() const = 0;
virtual const IString * definition() const = 0;
virtual const IString * argsstring() const = 0;
virtual bool isConst() const = 0; virtual bool isConst() const = 0;
virtual bool isVolatile() const = 0; virtual bool isVolatile() const = 0;
virtual bool isStatic() const = 0;
virtual bool isExplicit() const = 0;
virtual bool isInline() const = 0;
virtual bool isMutable() const = 0;
virtual bool isReadable() const = 0;
virtual bool isWritable() const = 0;
virtual IParamIterator *parameters() const = 0; virtual IParamIterator *parameters() const = 0;
virtual IParamIterator *templateParameters() const = 0; virtual IParamIterator *templateParameters() const = 0;
virtual ILinkedTextIterator *initializer() const = 0; virtual ILinkedTextIterator *initializer() const = 0;
...@@ -578,6 +609,7 @@ class IMember ...@@ -578,6 +609,7 @@ class IMember
virtual IMemberReferenceIterator *reimplementedBy() const = 0; virtual IMemberReferenceIterator *reimplementedBy() const = 0;
virtual IDocRoot *briefDescription() const = 0; virtual IDocRoot *briefDescription() const = 0;
virtual IDocRoot *detailedDescription() const = 0; virtual IDocRoot *detailedDescription() const = 0;
virtual IDocRoot *inbodyDescription() const = 0;
}; };
class IDefine : public IMember class IDefine : public IMember
...@@ -636,19 +668,26 @@ class IEnumValue : public IMember ...@@ -636,19 +668,26 @@ class IEnumValue : public IMember
virtual const IString * name() const = 0; virtual const IString * name() const = 0;
}; };
#if 0 /*! \brief Include relation
class IEnumValueIterator */
class IInclude
{ {
public: public:
virtual IEnumValue *toFirst() = 0; virtual const IString * name() const = 0;
virtual IEnumValue *toLast() = 0; virtual const IString * refId() const = 0;
virtual IEnumValue *toNext() = 0; virtual bool isLocal() const = 0;
virtual IEnumValue *toPrev() = 0;
virtual IEnumValue *current() const = 0;
virtual void release() = 0;
}; };
#endif
class IIncludeIterator
{
public:
virtual IInclude *toFirst() = 0;
virtual IInclude *toLast() = 0;
virtual IInclude *toNext() = 0;
virtual IInclude *toPrev() = 0;
virtual IInclude *current() const = 0;
virtual void release() = 0;
};
class IMemberIterator class IMemberIterator
{ {
...@@ -936,6 +975,7 @@ class IInterface : public ICompound ...@@ -936,6 +975,7 @@ class IInterface : public ICompound
virtual IRelatedCompoundIterator *derivedCompounds() const = 0; virtual IRelatedCompoundIterator *derivedCompounds() const = 0;
}; };
/*! \brief The interface to a Java/IDL exception in the object model. /*! \brief The interface to a Java/IDL exception in the object model.
*/ */
class IException : public ICompound class IException : public ICompound
...@@ -960,9 +1000,9 @@ class IFile : public ICompound ...@@ -960,9 +1000,9 @@ class IFile : public ICompound
virtual IDocProgramListing *source() const = 0; virtual IDocProgramListing *source() const = 0;
virtual ICompoundIterator *nestedCompounds() const = 0; virtual ICompoundIterator *nestedCompounds() const = 0;
// file: virtual IIncludeIterator *includes() const = 0;
// includes() virtual IIncludeIterator *includedBy() const = 0;
// includedBy()
// ICompound *innerNamespaces() // ICompound *innerNamespaces()
// ICompoundIterator *innerClasses() // ICompoundIterator *innerClasses()
}; };
......
...@@ -133,6 +133,7 @@ void MainHandler::endName() ...@@ -133,6 +133,7 @@ void MainHandler::endName()
else else
{ {
m_curCompound->name = m_curString; m_curCompound->name = m_curString;
m_compoundNameDict.insert(m_curString,m_curCompound);
} }
} }
...@@ -230,16 +231,16 @@ ICompound *MainHandler::compoundById(const char *id) const ...@@ -230,16 +231,16 @@ ICompound *MainHandler::compoundById(const char *id) const
// unchanged. // unchanged.
MainHandler *that = (MainHandler *)this; MainHandler *that = (MainHandler *)this;
ch->initialize(that); ch->initialize(that);
printf("loading compound %s in memory\n",id); //printf("loading compound %s in memory\n",id);
that->m_compoundsLoaded.insert(id,ch); that->m_compoundsLoaded.insert(id,ch);
return ch->toICompound(); return ch->toICompound();
} }
void MainHandler::unloadCompound(CompoundHandler *ch) void MainHandler::unloadCompound(CompoundHandler *ch)
{ {
printf("unloading compound %s from memory\n",ch->id()->latin1()); //printf("unloading compound %s from memory\n",ch->id()->latin1());
bool result = m_compoundsLoaded.remove(ch->id()->latin1()); bool result = m_compoundsLoaded.remove(ch->id()->latin1());
if (!result) printf("Failed to unload!\n"); if (!result) debug(1,"Failed to unload component!\n");
} }
ICompound *MainHandler::compoundByName(const char *name) const ICompound *MainHandler::compoundByName(const char *name) const
...@@ -257,7 +258,7 @@ ICompound *MainHandler::memberById(const char *id) const ...@@ -257,7 +258,7 @@ ICompound *MainHandler::memberById(const char *id) const
if (ids.isEmpty()) return 0; if (ids.isEmpty()) return 0;
MemberEntry *me = m_memberDict[id]; MemberEntry *me = m_memberDict[id];
if (me==0) return 0; // id not found if (me==0) return 0; // id not found
return compoundById(me->id); return compoundById(me->compound->id);
} }
ICompoundIterator *MainHandler::memberByName(const char *name) const ICompoundIterator *MainHandler::memberByName(const char *name) const
......
...@@ -154,7 +154,7 @@ void EnumValueHandler::startDetailedDesc(const QXmlAttributes& attrib) ...@@ -154,7 +154,7 @@ void EnumValueHandler::startDetailedDesc(const QXmlAttributes& attrib)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
MemberHandler::MemberHandler(IBaseHandler *parent) MemberHandler::MemberHandler(IBaseHandler *parent)
: m_parent(parent), m_compound(0), m_brief(0), m_detailed(0) : m_parent(parent), m_compound(0), m_brief(0), m_detailed(0), m_inbody(0)
{ {
//printf("MemberHandler::MemberHandler() %p\n",this); //printf("MemberHandler::MemberHandler() %p\n",this);
addEndHandler("memberdef",this,&MemberHandler::endMember); addEndHandler("memberdef",this,&MemberHandler::endMember);
...@@ -163,11 +163,22 @@ MemberHandler::MemberHandler(IBaseHandler *parent) ...@@ -163,11 +163,22 @@ MemberHandler::MemberHandler(IBaseHandler *parent)
addEndHandler("templateparamlist",this,&MemberHandler::endTemplateParamList); addEndHandler("templateparamlist",this,&MemberHandler::endTemplateParamList);
addStartHandler("type",this,&MemberHandler::startType); addStartHandler("type",this,&MemberHandler::startType);
// definition
// argsstring addStartHandler("definition",this,&MemberHandler::startDefinition);
addEndHandler("definition",this,&MemberHandler::endDefinition);
addStartHandler("argsstring",this,&MemberHandler::startArgsString);
addEndHandler("argsstring",this,&MemberHandler::endArgsString);
addStartHandler("name",this,&MemberHandler::startName); addStartHandler("name",this,&MemberHandler::startName);
addEndHandler("name",this,&MemberHandler::endName); addEndHandler("name",this,&MemberHandler::endName);
addStartHandler("read",this,&MemberHandler::startRead);
addEndHandler("read",this,&MemberHandler::endRead);
addStartHandler("write",this,&MemberHandler::startWrite);
addEndHandler("write",this,&MemberHandler::endWrite);
addStartHandler("reimplements",this,&MemberHandler::startReimplements); addStartHandler("reimplements",this,&MemberHandler::startReimplements);
addEndHandler("reimplements",this,&MemberHandler::endReimplements); addEndHandler("reimplements",this,&MemberHandler::endReimplements);
...@@ -180,13 +191,13 @@ MemberHandler::MemberHandler(IBaseHandler *parent) ...@@ -180,13 +191,13 @@ MemberHandler::MemberHandler(IBaseHandler *parent)
addEndHandler("enumvalue",this,&MemberHandler::endMember); addEndHandler("enumvalue",this,&MemberHandler::endMember);
addStartHandler("initializer",this,&MemberHandler::startInitializer); addStartHandler("initializer",this,&MemberHandler::startInitializer);
addStartHandler("exception",this,&MemberHandler::startException); addStartHandler("exceptions",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("inbodydescription",this,&MemberHandler::startInbodyDesc);
addStartHandler("location",this,&MemberHandler::startLocation); addStartHandler("location",this,&MemberHandler::startLocation);
addEndHandler("location"); addEndHandler("location");
...@@ -219,6 +230,7 @@ MemberHandler::~MemberHandler() ...@@ -219,6 +230,7 @@ MemberHandler::~MemberHandler()
debug(2,"MemberHandler::~MemberHandler() %p\n",this); debug(2,"MemberHandler::~MemberHandler() %p\n",this);
delete m_brief; delete m_brief;
delete m_detailed; delete m_detailed;
delete m_inbody;
delete m_linkedTextHandler; delete m_linkedTextHandler;
delete m_reimplements; delete m_reimplements;
} }
...@@ -230,10 +242,17 @@ void MemberHandler::startMember(const QXmlAttributes& attrib) ...@@ -230,10 +242,17 @@ void MemberHandler::startMember(const QXmlAttributes& attrib)
//printf("startMember kindString=`%s'\n",m_kindString.data()); //printf("startMember kindString=`%s'\n",m_kindString.data());
m_kind = s_typeMap->map(m_kindString); m_kind = s_typeMap->map(m_kindString);
m_id = attrib.value("id"); m_id = attrib.value("id");
m_virtualness = attrib.value("virt");
m_protection = attrib.value("prot"); m_protection = attrib.value("prot");
m_isStatic = attrib.value("static")=="yes";
m_isConst = attrib.value("const")=="yes"; m_isConst = attrib.value("const")=="yes";
m_isExplicit = attrib.value("explicit")=="yes";
m_isInline = attrib.value("inline")=="yes";
m_virtualness = attrib.value("virt");
m_isVolatile = attrib.value("volatile")=="yes"; m_isVolatile = attrib.value("volatile")=="yes";
m_isMutable = attrib.value("mutable")=="yes";
m_isReadable = attrib.value("readable")=="yes";
m_isWritable = attrib.value("writable")=="yes";
debug(2,"member kind=`%s' id=`%s' prot=`%s' virt=`%s'\n", debug(2,"member kind=`%s' id=`%s' prot=`%s' virt=`%s'\n",
m_kindString.data(),m_id.data(),m_protection.data(),m_virtualness.data()); m_kindString.data(),m_id.data(),m_protection.data(),m_virtualness.data());
} }
...@@ -245,10 +264,16 @@ void MemberHandler::startEnumValue(const QXmlAttributes& attrib) ...@@ -245,10 +264,16 @@ void MemberHandler::startEnumValue(const QXmlAttributes& attrib)
//printf("startEnumValue kindString=`%s'\n",m_kindString.data()); //printf("startEnumValue kindString=`%s'\n",m_kindString.data());
m_kind = s_typeMap->map(m_kindString); m_kind = s_typeMap->map(m_kindString);
m_id = attrib.value("id"); m_id = attrib.value("id");
m_virtualness = "non-virtual";
m_protection = attrib.value("prot"); m_protection = attrib.value("prot");
m_isStatic = FALSE;
m_isConst = FALSE; m_isConst = FALSE;
m_isExplicit = FALSE;
m_isInline = FALSE;
m_virtualness = "non-virtual";
m_isVolatile = FALSE; m_isVolatile = FALSE;
m_isMutable = FALSE;
m_isReadable = FALSE;
m_isWritable = FALSE;
debug(2,"member kind=`%s' id=`%s' prot=`%s' virt=`%s'\n", debug(2,"member kind=`%s' id=`%s' prot=`%s' virt=`%s'\n",
m_kindString.data(),m_id.data(),m_protection.data(),m_virtualness.data()); m_kindString.data(),m_id.data(),m_protection.data(),m_virtualness.data());
} }
...@@ -275,6 +300,13 @@ void MemberHandler::startDetailedDesc(const QXmlAttributes& attrib) ...@@ -275,6 +300,13 @@ void MemberHandler::startDetailedDesc(const QXmlAttributes& attrib)
m_detailed = docHandler; m_detailed = docHandler;
} }
void MemberHandler::startInbodyDesc(const QXmlAttributes& attrib)
{
DocHandler *docHandler = new DocHandler(this);
docHandler->startDoc(attrib);
m_inbody = docHandler;
}
void MemberHandler::startLocation(const QXmlAttributes& attrib) void MemberHandler::startLocation(const QXmlAttributes& attrib)
{ {
m_defFile = attrib.value("file"); m_defFile = attrib.value("file");
...@@ -364,7 +396,7 @@ void MemberHandler::startException(const QXmlAttributes &) ...@@ -364,7 +396,7 @@ void MemberHandler::startException(const QXmlAttributes &)
debug(2,"startException!\n"); debug(2,"startException!\n");
delete m_linkedTextHandler; delete m_linkedTextHandler;
m_linkedTextHandler = new LinkedTextHandler(this,m_exception); m_linkedTextHandler = new LinkedTextHandler(this,m_exception);
m_linkedTextHandler->start("exception"); m_linkedTextHandler->start("exceptions");
} }
void MemberHandler::startName(const QXmlAttributes &) void MemberHandler::startName(const QXmlAttributes &)
...@@ -378,6 +410,50 @@ void MemberHandler::endName() ...@@ -378,6 +410,50 @@ void MemberHandler::endName()
debug(2,"member name=`%s'\n",m_name.data()); debug(2,"member name=`%s'\n",m_name.data());
} }
void MemberHandler::startRead(const QXmlAttributes &)
{
m_curString="";
}
void MemberHandler::endRead()
{
m_read = m_curString.stripWhiteSpace();
debug(2,"member read=`%s'\n",m_read.data());
}
void MemberHandler::startWrite(const QXmlAttributes &)
{
m_curString="";
}
void MemberHandler::endWrite()
{
m_write = m_curString.stripWhiteSpace();
debug(2,"member write=`%s'\n",m_write.data());
}
void MemberHandler::startDefinition(const QXmlAttributes&)
{
m_curString="";
}
void MemberHandler::endDefinition()
{
m_definition = m_curString.stripWhiteSpace();
debug(2,"definition=%s\n",m_definition.data());
}
void MemberHandler::startArgsString(const QXmlAttributes&)
{
m_curString="";
}
void MemberHandler::endArgsString()
{
m_argsstring = m_curString.stripWhiteSpace();
debug(2,"arggstring=%s\n",m_argsstring.data());
}
void MemberHandler::startParam(const QXmlAttributes& attrib) void MemberHandler::startParam(const QXmlAttributes& attrib)
{ {
ParamHandler *paramHandler = new ParamHandler(this); ParamHandler *paramHandler = new ParamHandler(this);
...@@ -515,3 +591,8 @@ IDocRoot *MemberHandler::detailedDescription() const ...@@ -515,3 +591,8 @@ IDocRoot *MemberHandler::detailedDescription() const
return m_detailed; return m_detailed;
} }
IDocRoot *MemberHandler::inbodyDescription() const
{
return m_inbody;
}
...@@ -129,8 +129,17 @@ class MemberHandler : public IDefine, ...@@ -129,8 +129,17 @@ class MemberHandler : public IDefine,
virtual void startType(const QXmlAttributes& attrib); virtual void startType(const QXmlAttributes& attrib);
virtual void startName(const QXmlAttributes& attrib); virtual void startName(const QXmlAttributes& attrib);
virtual void endName(); virtual void endName();
virtual void startRead(const QXmlAttributes& attrib);
virtual void endRead();
virtual void startWrite(const QXmlAttributes& attrib);
virtual void endWrite();
virtual void startDefinition(const QXmlAttributes& attrib);
virtual void endDefinition();
virtual void startArgsString(const QXmlAttributes& attrib);
virtual void endArgsString();
virtual void startBriefDesc(const QXmlAttributes& attrib); virtual void startBriefDesc(const QXmlAttributes& attrib);
virtual void startDetailedDesc(const QXmlAttributes& attrib); virtual void startDetailedDesc(const QXmlAttributes& attrib);
virtual void startInbodyDesc(const QXmlAttributes& attrib);
virtual void startLocation(const QXmlAttributes& attrib); virtual void startLocation(const QXmlAttributes& attrib);
virtual void startReferences(const QXmlAttributes& attrib); virtual void startReferences(const QXmlAttributes& attrib);
virtual void endReferences(); virtual void endReferences();
...@@ -165,10 +174,30 @@ class MemberHandler : public IDefine, ...@@ -165,10 +174,30 @@ class MemberHandler : public IDefine,
{ return &m_virtualness; } { return &m_virtualness; }
virtual const IString *name() const virtual const IString *name() const
{ return &m_name; } { return &m_name; }
virtual const IString *readAccessor() const
{ return &m_read; }
virtual const IString *writeAccessor() const
{ return &m_write; }
virtual const IString *definition() const
{ return &m_definition; }
virtual const IString *argsstring() const
{ return &m_argsstring; }
virtual bool isConst() const virtual bool isConst() const
{ return m_isConst; } { return m_isConst; }
virtual bool isVolatile() const virtual bool isVolatile() const
{ return m_isVolatile; } { return m_isVolatile; }
virtual bool isStatic() const
{ return m_isStatic; }
virtual bool isExplicit() const
{ return m_isExplicit; }
virtual bool isInline() const
{ return m_isInline; }
virtual bool isMutable() const
{ return m_isMutable; }
virtual bool isReadable() const
{ return m_isReadable; }
virtual bool isWritable() const
{ return m_isWritable; }
virtual ILinkedTextIterator *type() const; virtual ILinkedTextIterator *type() const;
virtual const IString *typeString() const; virtual const IString *typeString() const;
virtual IParamIterator *parameters() const; virtual IParamIterator *parameters() const;
...@@ -190,6 +219,7 @@ class MemberHandler : public IDefine, ...@@ -190,6 +219,7 @@ class MemberHandler : public IDefine,
virtual IMemberReferenceIterator *reimplementedBy() const; virtual IMemberReferenceIterator *reimplementedBy() const;
virtual IDocRoot *briefDescription() const; virtual IDocRoot *briefDescription() const;
virtual IDocRoot *detailedDescription() const; virtual IDocRoot *detailedDescription() const;
virtual IDocRoot *inbodyDescription() const;
// IEnum // IEnum
virtual IMemberIterator *enumValues() const; virtual IMemberIterator *enumValues() const;
...@@ -212,8 +242,13 @@ class MemberHandler : public IDefine, ...@@ -212,8 +242,13 @@ class MemberHandler : public IDefine,
QList<LinkedTextImpl> m_initializer; QList<LinkedTextImpl> m_initializer;
QList<LinkedTextImpl> m_exception; QList<LinkedTextImpl> m_exception;
StringImpl m_name; StringImpl m_name;
StringImpl m_read;
StringImpl m_write;
StringImpl m_definition;
StringImpl m_argsstring;
DocHandler *m_brief; DocHandler *m_brief;
DocHandler *m_detailed; DocHandler *m_detailed;
DocHandler *m_inbody;
QList<ParamHandler> m_params; QList<ParamHandler> m_params;
QList<ParamHandler> m_templateParams; QList<ParamHandler> m_templateParams;
QList<MemberReference> m_references; QList<MemberReference> m_references;
...@@ -230,6 +265,12 @@ class MemberHandler : public IDefine, ...@@ -230,6 +265,12 @@ class MemberHandler : public IDefine,
QList<MemberHandler> m_enumValues; QList<MemberHandler> m_enumValues;
bool m_insideTemplateParamList; bool m_insideTemplateParamList;
bool m_hasTemplateParamList; bool m_hasTemplateParamList;
bool m_isStatic;
bool m_isExplicit;
bool m_isInline;
bool m_isMutable;
bool m_isReadable;
bool m_isWritable;
}; };
class MemberIterator : public BaseIteratorVia<IMemberIterator, class MemberIterator : public BaseIteratorVia<IMemberIterator,
......
...@@ -17,6 +17,7 @@ ...@@ -17,6 +17,7 @@
#include "memberhandler.h" #include "memberhandler.h"
#include "linkedtexthandler.h" #include "linkedtexthandler.h"
#include "debug.h" #include "debug.h"
#include "dochandler.h"
TemplateParamListHandler::TemplateParamListHandler(IBaseHandler *parent) : m_parent(parent) TemplateParamListHandler::TemplateParamListHandler(IBaseHandler *parent) : m_parent(parent)
{ {
...@@ -49,7 +50,7 @@ void TemplateParamListHandler::endTemplateParamList() ...@@ -49,7 +50,7 @@ void TemplateParamListHandler::endTemplateParamList()
/////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////
ParamHandler::ParamHandler(IBaseHandler *parent) : m_parent(parent) ParamHandler::ParamHandler(IBaseHandler *parent) : m_parent(parent), m_brief(0)
{ {
addEndHandler("param",this,&ParamHandler::endParam); addEndHandler("param",this,&ParamHandler::endParam);
...@@ -67,6 +68,8 @@ ParamHandler::ParamHandler(IBaseHandler *parent) : m_parent(parent) ...@@ -67,6 +68,8 @@ ParamHandler::ParamHandler(IBaseHandler *parent) : m_parent(parent)
addStartHandler("attribute"); addStartHandler("attribute");
addEndHandler("attribute",this,&ParamHandler::endAttrib); addEndHandler("attribute",this,&ParamHandler::endAttrib);
addStartHandler("briefdescription",this,&ParamHandler::startBriefDesc);
addStartHandler("defval",this,&ParamHandler::startDefVal); addStartHandler("defval",this,&ParamHandler::startDefVal);
m_linkedTextHandler = 0; m_linkedTextHandler = 0;
...@@ -74,6 +77,7 @@ ParamHandler::ParamHandler(IBaseHandler *parent) : m_parent(parent) ...@@ -74,6 +77,7 @@ ParamHandler::ParamHandler(IBaseHandler *parent) : m_parent(parent)
ParamHandler::~ParamHandler() ParamHandler::~ParamHandler()
{ {
delete m_brief;
delete m_linkedTextHandler; delete m_linkedTextHandler;
} }
...@@ -128,6 +132,13 @@ void ParamHandler::startDefVal(const QXmlAttributes& /*attrib*/) ...@@ -128,6 +132,13 @@ void ParamHandler::startDefVal(const QXmlAttributes& /*attrib*/)
debug(2,"member defVal\n"); debug(2,"member defVal\n");
} }
void ParamHandler::startBriefDesc(const QXmlAttributes& attrib)
{
DocHandler *docHandler = new DocHandler(this);
docHandler->startDoc(attrib);
m_brief = docHandler;
}
ILinkedTextIterator *ParamHandler::type() const ILinkedTextIterator *ParamHandler::type() const
{ {
return new LinkedTextIterator(m_type); return new LinkedTextIterator(m_type);
...@@ -138,4 +149,10 @@ ILinkedTextIterator *ParamHandler::defaultValue() const ...@@ -138,4 +149,10 @@ ILinkedTextIterator *ParamHandler::defaultValue() const
return new LinkedTextIterator(m_defVal); return new LinkedTextIterator(m_defVal);
} }
IDocRoot *ParamHandler::briefDescription() const
{
return m_brief;
}
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
class LinkedTextImpl; class LinkedTextImpl;
class LinkedTextHandler; class LinkedTextHandler;
class DocHandler;
class ParamHandler : public IParam, public BaseHandler<ParamHandler> class ParamHandler : public IParam, public BaseHandler<ParamHandler>
...@@ -40,6 +41,7 @@ class ParamHandler : public IParam, public BaseHandler<ParamHandler> ...@@ -40,6 +41,7 @@ class ParamHandler : public IParam, public BaseHandler<ParamHandler>
virtual void endAttrib(); virtual void endAttrib();
virtual void endArray(); virtual void endArray();
virtual void startDefVal(const QXmlAttributes& attrib); virtual void startDefVal(const QXmlAttributes& attrib);
virtual void startBriefDesc(const QXmlAttributes& attrib);
ParamHandler(IBaseHandler *parent); ParamHandler(IBaseHandler *parent);
virtual ~ParamHandler(); virtual ~ParamHandler();
...@@ -51,9 +53,11 @@ class ParamHandler : public IParam, public BaseHandler<ParamHandler> ...@@ -51,9 +53,11 @@ class ParamHandler : public IParam, public BaseHandler<ParamHandler>
virtual const IString * attrib() const { return &m_attrib; } virtual const IString * attrib() const { return &m_attrib; }
virtual const IString * arraySpecifier() const { return &m_array; } virtual const IString * arraySpecifier() const { return &m_array; }
virtual ILinkedTextIterator *defaultValue() const; virtual ILinkedTextIterator *defaultValue() const;
virtual IDocRoot *briefDescription() const;
private: private:
IBaseHandler *m_parent; IBaseHandler *m_parent;
DocHandler *m_brief;
QList<LinkedTextImpl> m_type; QList<LinkedTextImpl> m_type;
StringImpl m_declName; StringImpl m_declName;
StringImpl m_defName; StringImpl m_defName;
......
...@@ -130,10 +130,25 @@ void DumpDoc(IDoc *doc,int level) ...@@ -130,10 +130,25 @@ void DumpDoc(IDoc *doc,int level)
InPrint(("</list item>\n")); InPrint(("</list item>\n"));
} }
break; break;
case IDoc::ParameterItem:
{
IDocParameterItem *item = dynamic_cast<IDocParameterItem*>(doc);
InPrint(("<parameter item>\n"));
IDocIterator *di = item->paramNames();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc,level+1);
}
di->release();
DumpDoc(item->description(),level+1);
InPrint(("</parameter item>\n"));
}
break;
case IDoc::ParameterList: case IDoc::ParameterList:
{ {
IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc); IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc);
InPrint(("<parameter list type=%d>\n",list->listType())); InPrint(("<parameter list type=%d>\n",list->sectType()));
IDocIterator *di = list->params(); IDocIterator *di = list->params();
IDoc *pdoc; IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext()) for (di->toFirst();(pdoc=di->current());di->toNext())
...@@ -149,9 +164,7 @@ void DumpDoc(IDoc *doc,int level) ...@@ -149,9 +164,7 @@ void DumpDoc(IDoc *doc,int level)
{ {
IDocParameter *par = dynamic_cast<IDocParameter*>(doc); IDocParameter *par = dynamic_cast<IDocParameter*>(doc);
ASSERT(par!=0); ASSERT(par!=0);
InPrint(("<parameter name=%s>\n",par->name()->latin1())); InPrint(("<parameter name=%s/>\n",par->name()->latin1()));
DumpDoc(par->description(),level+1);
InPrint(("<parameter/>\n"));
} }
break; break;
case IDoc::SimpleSect: case IDoc::SimpleSect:
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
#include <qtoolbutton.h> #include <qtoolbutton.h>
#include <qscrollview.h> #include <qscrollview.h>
#include <qlayout.h> #include <qlayout.h>
#include <qtooltip.h>
#include "expert.h" #include "expert.h"
#include "inputbool.h" #include "inputbool.h"
...@@ -71,6 +72,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent ) ...@@ -71,6 +72,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent )
view->addChild(page); view->addChild(page);
addTab(view,option->name()); addTab(view,option->name());
QWhatsThis::add(page, option->docs().simplifyWhiteSpace() ); QWhatsThis::add(page, option->docs().simplifyWhiteSpace() );
QToolTip::add(page, option->docs() );
} }
break; break;
case ConfigOption::O_String: case ConfigOption::O_String:
...@@ -91,6 +93,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent ) ...@@ -91,6 +93,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent )
); );
pageLayout->addWidget(inputString); pageLayout->addWidget(inputString);
QWhatsThis::add(inputString, option->docs().simplifyWhiteSpace() ); QWhatsThis::add(inputString, option->docs().simplifyWhiteSpace() );
QToolTip::add(inputString,option->docs());
connect(inputString,SIGNAL(changed()),SIGNAL(changed())); connect(inputString,SIGNAL(changed()),SIGNAL(changed()));
m_inputWidgets->insert(option->name(),inputString); m_inputWidgets->insert(option->name(),inputString);
addDependency(m_switches,option->dependsOn(),option->name()); addDependency(m_switches,option->dependsOn(),option->name());
...@@ -113,6 +116,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent ) ...@@ -113,6 +116,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent )
} }
inputString->init(); inputString->init();
QWhatsThis::add(inputString, option->docs().simplifyWhiteSpace() ); QWhatsThis::add(inputString, option->docs().simplifyWhiteSpace() );
QToolTip::add(inputString, option->docs());
connect(inputString,SIGNAL(changed()),SIGNAL(changed())); connect(inputString,SIGNAL(changed()),SIGNAL(changed()));
m_inputWidgets->insert(option->name(),inputString); m_inputWidgets->insert(option->name(),inputString);
addDependency(m_switches,option->dependsOn(),option->name()); addDependency(m_switches,option->dependsOn(),option->name());
...@@ -137,6 +141,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent ) ...@@ -137,6 +141,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent )
); );
pageLayout->addWidget(inputStrList); pageLayout->addWidget(inputStrList);
QWhatsThis::add(inputStrList, option->docs().simplifyWhiteSpace() ); QWhatsThis::add(inputStrList, option->docs().simplifyWhiteSpace() );
QToolTip::add(inputStrList, option->docs());
connect(inputStrList,SIGNAL(changed()),SIGNAL(changed())); connect(inputStrList,SIGNAL(changed()),SIGNAL(changed()));
m_inputWidgets->insert(option->name(),inputStrList); m_inputWidgets->insert(option->name(),inputStrList);
addDependency(m_switches,option->dependsOn(),option->name()); addDependency(m_switches,option->dependsOn(),option->name());
...@@ -153,6 +158,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent ) ...@@ -153,6 +158,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent )
); );
pageLayout->addWidget(inputBool); pageLayout->addWidget(inputBool);
QWhatsThis::add(inputBool, option->docs().simplifyWhiteSpace() ); QWhatsThis::add(inputBool, option->docs().simplifyWhiteSpace() );
QToolTip::add(inputBool, option->docs() );
connect(inputBool,SIGNAL(changed()),SIGNAL(changed())); connect(inputBool,SIGNAL(changed()),SIGNAL(changed()));
m_inputWidgets->insert(option->name(),inputBool); m_inputWidgets->insert(option->name(),inputBool);
addDependency(m_switches,option->dependsOn(),option->name()); addDependency(m_switches,option->dependsOn(),option->name());
...@@ -170,6 +176,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent ) ...@@ -170,6 +176,7 @@ Expert::Expert( QWidget *parent ) : QTabDialog( parent )
); );
pageLayout->addWidget(inputInt); pageLayout->addWidget(inputInt);
QWhatsThis::add(inputInt, option->docs().simplifyWhiteSpace() ); QWhatsThis::add(inputInt, option->docs().simplifyWhiteSpace() );
QToolTip::add(inputInt, option->docs() );
connect(inputInt,SIGNAL(changed()),SIGNAL(changed())); connect(inputInt,SIGNAL(changed()),SIGNAL(changed()));
m_inputWidgets->insert(option->name(),inputInt); m_inputWidgets->insert(option->name(),inputInt);
addDependency(m_switches,option->dependsOn(),option->name()); addDependency(m_switches,option->dependsOn(),option->name());
......
...@@ -1986,25 +1986,22 @@ class C {}; ...@@ -1986,25 +1986,22 @@ class C {};
\section cmdamp \& \section cmdamp \&
\addindex \\\& \addindex \\\&
This command writes the \& character to the HTML and This command writes the \& character to output.
\f$\mbox{\LaTeX}\f$ output. This character has to be escaped because This character has to be escaped because it has a special meaning in HTML.
it has a special meaning in HTML.
<hr> <hr>
\section cmddollar \$ \section cmddollar \$
\addindex \\\$ \addindex \\\$
This command writes the \$ character to the HTML and This command writes the \$ character to the output.
\f$\mbox{\LaTeX}\f$ output. This This character has to be escaped in some cases, because it is used to expand
character has to be escaped in some cases, because it is used to expand
environment variables. environment variables.
<hr> <hr>
\section cmdhash \# \section cmdhash \#
\addindex \\\# \addindex \\\#
This command writes the \# character to the HTML and This command writes the \# character to the output. This
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped in some cases, because it is used to refer character has to be escaped in some cases, because it is used to refer
to documented entities. to documented entities.
...@@ -2012,23 +2009,20 @@ class C {}; ...@@ -2012,23 +2009,20 @@ class C {};
\section cmdlt \< \section cmdlt \<
\addindex \\\< \addindex \\\<
This command writes the \< character to the HTML and This command writes the \< character to the output.
\f$\mbox{\LaTeX}\f$ output. This This character has to be escaped because it has a special meaning in HTML.
character has to be escaped because it has a special meaning in HTML.
<hr> <hr>
\section cmdgt \> \section cmdgt \>
\addindex \\\> \addindex \\\>
This command writes the \> character to the HTML and This command writes the \> character to the output. This
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped because it has a special meaning in HTML. character has to be escaped because it has a special meaning in HTML.
\section cmdperc \% \section cmdperc \%
\addindex \\\% \addindex \\\%
This command writes the \% character to the HTML and This command writes the \% character to the output. This
\f$\mbox{\LaTeX}\f$ output. This
character has to be escaped in some cases, because it is used to character has to be escaped in some cases, because it is used to
prevent auto-linking to word that is also a documented class or struct. prevent auto-linking to word that is also a documented class or struct.
......
...@@ -23,7 +23,7 @@ text fragments, generated by doxygen, can be produced in languages other ...@@ -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 than English (the default). The output language is chosen through the
configuration file (with default name and known as Doxyfile). configuration file (with default name and known as Doxyfile).
Currently (version 1.3.8-20040907), 30 languages Currently (version 1.3.8-20040913), 30 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese Afrikaans, Brazilian Portuguese, Catalan, Chinese, Chinese
Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French, Traditional, Croatian, Czech, Danish, Dutch, English, Finnish, French,
...@@ -90,7 +90,7 @@ when the translator was updated. ...@@ -90,7 +90,7 @@ when the translator was updated.
<td>Czech</td> <td>Czech</td>
<td>Petr P&#x0159;ikryl</td> <td>Petr P&#x0159;ikryl</td>
<td>prikrylp at skil dot cz</td> <td>prikrylp at skil dot cz</td>
<td>1.3.9</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Danish</td> <td>Danish</td>
...@@ -186,7 +186,7 @@ when the translator was updated. ...@@ -186,7 +186,7 @@ when the translator was updated.
<td>Polish</td> <td>Polish</td>
<td>Piotr Kaminski<br>Grzegorz Kowal</td> <td>Piotr Kaminski<br>Grzegorz Kowal</td>
<td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td> <td>Piotr.Kaminski at ctm dot gdynia dot pl<br>g_kowal at poczta dot onet dot pl</td>
<td>1.3.9</td> <td>up-to-date</td>
</tr> </tr>
<tr bgcolor="#ffffff"> <tr bgcolor="#ffffff">
<td>Portuguese</td> <td>Portuguese</td>
...@@ -271,7 +271,7 @@ when the translator was updated. ...@@ -271,7 +271,7 @@ when the translator was updated.
\hline \hline
Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & 1.3.9 \\ Croatian & Boris Bralo & {\tt\tiny boris.bralo@zg.htnet.hr} & 1.3.9 \\
\hline \hline
Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & 1.3.9 \\ Czech & Petr P\v{r}ikryl & {\tt\tiny prikrylp@skil.cz} & up-to-date \\
\hline \hline
Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\ Danish & Erik S\o{}e S\o{}rensen & {\tt\tiny eriksoe+doxygen@daimi.au.dk} & 1.3.9 \\
\hline \hline
...@@ -309,7 +309,7 @@ when the translator was updated. ...@@ -309,7 +309,7 @@ when the translator was updated.
\hline \hline
Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\ Norwegian & Lars Erik Jordet & {\tt\tiny lejordet@gmail.com} & 1.3.9 \\
\hline \hline
Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & 1.3.9 \\ Polish & Piotr Kaminski & {\tt\tiny Piotr.Kaminski@ctm.gdynia.pl} & up-to-date \\
~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\ ~ & Grzegorz Kowal & {\tt\tiny g\_kowal@poczta.onet.pl} & ~ \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\ Portuguese & Rui Godinho Lopes & {\tt\tiny ruiglopes@yahoo.com} & 1.3.3 \\
......
(1.3.8-20040907) (1.3.8-20040913)
Doxygen supports the following 30 languages (sorted alphabetically): Doxygen supports the following 30 languages (sorted alphabetically):
...@@ -8,7 +8,7 @@ German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En), ...@@ -8,7 +8,7 @@ German, Greek, Hungarian, Italian, Japanese (+En), Korean (+En),
Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian, Serbian,
Slovak, Slovene, Spanish, Swedish, and Ukrainian. Slovak, Slovene, Spanish, Swedish, and Ukrainian.
Of them, 2 translators are up-to-date, 28 translators are based on Of them, 4 translators are up-to-date, 26 translators are based on
some adapter class, and 2 are English based. some adapter class, and 2 are English based.
---------------------------------------------------------------------- ----------------------------------------------------------------------
...@@ -17,8 +17,10 @@ alphabetically). This means that they derive from the Translator class ...@@ -17,8 +17,10 @@ alphabetically). This means that they derive from the Translator class
and they implement all 201 of the required methods. Anyway, there and they implement all 201 of the required methods. Anyway, there
still may be some details listed even for them: still may be some details listed even for them:
TranslatorCzech
TranslatorDutch TranslatorDutch
TranslatorEnglish TranslatorEnglish
TranslatorPolish
---------------------------------------------------------------------- ----------------------------------------------------------------------
The following translator classes need some maintenance (the most The following translator classes need some maintenance (the most
...@@ -27,14 +29,12 @@ version when the class was last updated and number of methods that ...@@ -27,14 +29,12 @@ version when the class was last updated and number of methods that
must be implemented to become up-to-date: must be implemented to become up-to-date:
TranslatorRussian 1.3.9 6 methods to implement TranslatorRussian 1.3.9 6 methods to implement
TranslatorPolish 1.3.9 6 methods to implement
TranslatorNorwegian 1.3.9 6 methods to implement TranslatorNorwegian 1.3.9 6 methods to implement
TranslatorJapanese 1.3.9 6 methods to implement TranslatorJapanese 1.3.9 6 methods to implement
TranslatorItalian 1.3.9 6 methods to implement TranslatorItalian 1.3.9 6 methods to implement
TranslatorHungarian 1.3.9 6 methods to implement TranslatorHungarian 1.3.9 6 methods to implement
TranslatorGerman 1.3.9 6 methods to implement TranslatorGerman 1.3.9 6 methods to implement
TranslatorDanish 1.3.9 6 methods to implement TranslatorDanish 1.3.9 6 methods to implement
TranslatorCzech 1.3.9 6 methods to implement
TranslatorCroatian 1.3.9 6 methods to implement TranslatorCroatian 1.3.9 6 methods to implement
TranslatorChinese 1.3.9 6 methods to implement TranslatorChinese 1.3.9 6 methods to implement
TranslatorBrazilian 1.3.9 6 methods to implement TranslatorBrazilian 1.3.9 6 methods to implement
...@@ -175,21 +175,6 @@ TranslatorCroatian (TranslatorAdapter_1_3_9) 6 methods to implement ...@@ -175,21 +175,6 @@ TranslatorCroatian (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trDir(bool first_capital, bool singular) virtual QCString trDir(bool first_capital, bool singular)
TranslatorCzech (TranslatorAdapter_1_3_9) 6 methods to implement
---------------
Implements 195 of the required methods.
Missing methods (should be implemented):
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
virtual QCString trDirDescription()
virtual QCString trDirReference(const char * dirName)
virtual QCString trDir(bool first_capital, bool singular)
TranslatorDanish (TranslatorAdapter_1_3_9) 6 methods to implement TranslatorDanish (TranslatorAdapter_1_3_9) 6 methods to implement
---------------- ----------------
...@@ -511,21 +496,6 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 6 methods to implement ...@@ -511,21 +496,6 @@ TranslatorNorwegian (TranslatorAdapter_1_3_9) 6 methods to implement
virtual QCString trDir(bool first_capital, bool singular) virtual QCString trDir(bool first_capital, bool singular)
TranslatorPolish (TranslatorAdapter_1_3_9) 6 methods to implement
----------------
Implements 195 of the required methods.
Missing methods (should be implemented):
virtual QCString trDirIndex()
virtual QCString trDirDocumentation()
virtual QCString trDirectories()
virtual QCString trDirDescription()
virtual QCString trDirReference(const char * dirName)
virtual QCString trDir(bool first_capital, bool singular)
TranslatorPortuguese (TranslatorAdapter_1_3_3) 11 methods to implement TranslatorPortuguese (TranslatorAdapter_1_3_3) 11 methods to implement
-------------------- --------------------
......
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.8_20040913 Version: 1.3.8_20040928
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
......
...@@ -296,11 +296,14 @@ class CallContext ...@@ -296,11 +296,14 @@ class CallContext
} }
virtual ~CallContext() {} virtual ~CallContext() {}
void setClass(ClassDef *cd) void setClass(ClassDef *cd)
{
if (cd)
{ {
DBG_CTX((stderr,"** Set call context %s (%p)\n",cd==0 ? "<null>" : cd->name().data(),cd)); DBG_CTX((stderr,"** Set call context %s (%p)\n",cd==0 ? "<null>" : cd->name().data(),cd));
m_classList.removeLast(); m_classList.removeLast();
m_classList.append(cd); m_classList.append(cd);
} }
}
void pushScope() void pushScope()
{ {
m_classList.append(0); m_classList.append(0);
...@@ -744,11 +747,11 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -744,11 +747,11 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
{ {
className+="-p"; className+="-p";
} }
ClassDef *cd=0; ClassDef *cd=0,*lcd=0;
MemberDef *md=0; MemberDef *md=0;
//printf("generateClassOrGlobalLink(className=%s)\n",className.data()); //fprintf(stderr,"generateClassOrGlobalLink(className=%s)\n",className.data());
if (!g_theVarContext.findVariable(className)) // not a local variable if ((lcd=g_theVarContext.findVariable(className))==0) // not a local variable
{ {
Definition *d = g_currentDefinition; Definition *d = g_currentDefinition;
//printf("d=%p g_sourceFileDef=%p\n",d,g_currentDefinition); //printf("d=%p g_sourceFileDef=%p\n",d,g_currentDefinition);
...@@ -761,11 +764,12 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName, ...@@ -761,11 +764,12 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
} }
else else
{ {
//printf("is a local variable!\n"); if (lcd!=VariableContext::dummyContext) g_theCallContext.setClass(lcd);
//fprintf(stderr,"is a local variable!\n");
} }
if (cd && cd->isLinkable()) // is it a linkable class if (cd && cd->isLinkable()) // is it a linkable class
{ {
//printf("is linkable class %s\n",clName); //fprintf(stderr,"is linkable class %s\n",clName);
if (g_exampleBlock) if (g_exampleBlock)
{ {
QCString anchor; QCString anchor;
...@@ -926,7 +930,9 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const ...@@ -926,7 +930,9 @@ static bool generateClassMemberLink(BaseCodeDocInterface &ol,ClassDef *mcd,const
} }
} }
g_theCallContext.setClass(stripClassName(xmd->typeString())); ClassDef *typeClass = stripClassName(xmd->typeString());
//fprintf(stderr,"%s -> typeName=%p\n",xmd->typeString(),typeClass);
g_theCallContext.setClass(typeClass);
Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ? Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ?
xmd->getBodyDef() : xmd->getOuterScope(); xmd->getBodyDef() : xmd->getOuterScope();
...@@ -1755,7 +1761,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -1755,7 +1761,8 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
BEGIN( Body ); BEGIN( Body );
} }
<ClassName,ClassVar>[*&]+ { <ClassName,ClassVar>[*&]+ {
addType(); g_type=g_curClassName;
g_name.resize(0);
g_code->codify(yytext); g_code->codify(yytext);
BEGIN( Body ); // variable of type struct * BEGIN( Body ); // variable of type struct *
} }
...@@ -2121,6 +2128,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -2121,6 +2128,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<MemberCall>{SCOPENAME}/{B}* { <MemberCall>{SCOPENAME}/{B}* {
if (g_theCallContext.getClass()) if (g_theCallContext.getClass())
{ {
//fprintf(stderr,"g_theCallContext.getClass()=%p\n",g_theCallContext.getClass());
if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext)) if (!generateClassMemberLink(*g_code,g_theCallContext.getClass(),yytext))
{ {
g_code->codify(yytext); g_code->codify(yytext);
...@@ -2130,6 +2138,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -2130,6 +2138,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
} }
else else
{ {
//fprintf(stderr,"no class context!\n");
g_code->codify(yytext); g_code->codify(yytext);
addToSearchIndex(yytext); addToSearchIndex(yytext);
g_name.resize(0); g_name.resize(0);
...@@ -2167,7 +2176,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -2167,7 +2176,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
g_code->codify(yytext); g_code->codify(yytext);
g_saveName = g_name.copy(); g_saveName = g_name.copy();
g_saveType = g_type.copy(); g_saveType = g_type.copy();
if (!g_type.isEmpty()) if (*yytext!='[' && !g_type.isEmpty())
{ {
if (g_scopeStack.top()!=CLASSBLOCK) if (g_scopeStack.top()!=CLASSBLOCK)
{ {
...@@ -2175,7 +2184,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -2175,7 +2184,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
} }
g_name.resize(0); g_name.resize(0);
} }
if (*yytext==';') if (*yytext==';' || *yytext=='=')
{ {
g_type.resize(0); g_type.resize(0);
g_name.resize(0); g_name.resize(0);
...@@ -2388,7 +2397,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'")) ...@@ -2388,7 +2397,12 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
BEGIN( SkipInits ); BEGIN( SkipInits );
} }
} }
<CallEnd,OldStyleArgs>({BN}"const"|"volatile")*{BN}*"{" { <CallEnd>("const"|"volatile")({BN}+("const"|"volatile"))*{BN}*/";" {
startFontClass("keyword");
codifyLines(yytext);
endFontClass();
}
<CallEnd,OldStyleArgs>("const"|"volatile")*({BN}+("const"|"volatile"))*"{" {
if (g_insideBody) if (g_insideBody)
{ {
g_theVarContext.pushScope(); g_theVarContext.pushScope();
...@@ -2878,6 +2892,7 @@ static void restoreObjCContext() ...@@ -2878,6 +2892,7 @@ static void restoreObjCContext()
void initParseCodeContext() void initParseCodeContext()
{ {
//printf("***initParseCodeContext()\n");
g_theVarContext.clear(); g_theVarContext.clear();
g_codeClassSDict.setAutoDelete(TRUE); g_codeClassSDict.setAutoDelete(TRUE);
g_codeClassSDict.clear(); g_codeClassSDict.clear();
...@@ -2889,6 +2904,7 @@ void parseCode(BaseCodeDocInterface &od,const char *className,const QCString &s, ...@@ -2889,6 +2904,7 @@ void parseCode(BaseCodeDocInterface &od,const char *className,const QCString &s,
bool exBlock, const char *exName,FileDef *fd, bool exBlock, const char *exName,FileDef *fd,
int startLine,int endLine,bool inlineFragment) int startLine,int endLine,bool inlineFragment)
{ {
//printf("***parseCode()\n");
if (s.isEmpty()) return; if (s.isEmpty()) return;
g_code = &od; g_code = &od;
g_inputString = s; g_inputString = s;
......
...@@ -216,12 +216,12 @@ ...@@ -216,12 +216,12 @@
<xsd:complexType name="linkType"> <xsd:complexType name="linkType">
<xsd:attribute name="refid" type="xsd:string" /> <xsd:attribute name="refid" type="xsd:string" />
<xsd:attribute name="external" type="DoxBool" use="optional"/> <xsd:attribute name="external" type="xsd:string" use="optional"/>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="listingType"> <xsd:complexType name="listingType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="codeline" type="codelineType" maxOccurs="unbounded" /> <xsd:element name="codeline" type="codelineType" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
...@@ -528,12 +528,25 @@ ...@@ -528,12 +528,25 @@
<xsd:attribute name="langid" type="xsd:string" /> <xsd:attribute name="langid" type="xsd:string" />
</xsd:complexType> </xsd:complexType>
<xsd:group name="docParamListGroup"> <xsd:complexType name="docParamListType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="parameteritem" type="docParamListItem" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="kind" type="DoxParamListKind" />
</xsd:complexType>
<xsd:complexType name="docParamListItem">
<xsd:sequence>
<xsd:element name="parameternamelist" type="docParamNameList" minOccurs="0" maxOccurs="unbounded" />
<xsd:element name="parameterdescription" type="descriptionType" /> <xsd:element name="parameterdescription" type="descriptionType" />
</xsd:sequence> </xsd:sequence>
</xsd:group> </xsd:complexType>
<xsd:complexType name="docParamNameList">
<xsd:sequence>
<xsd:element name="parametername" type="docParamName" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="docParamName"> <xsd:complexType name="docParamName">
<xsd:simpleContent> <xsd:simpleContent>
...@@ -543,13 +556,6 @@ ...@@ -543,13 +556,6 @@
</xsd:simpleContent> </xsd:simpleContent>
</xsd:complexType> </xsd:complexType>
<xsd:complexType name="docParamListType">
<xsd:sequence>
<xsd:group ref="docParamListGroup" maxOccurs="unbounded" />
</xsd:sequence>
<xsd:attribute name="kind" type="DoxParamListKind" />
</xsd:complexType>
<xsd:complexType name="docXRefSectType"> <xsd:complexType name="docXRefSectType">
<xsd:sequence> <xsd:sequence>
<xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" /> <xsd:element name="xreftitle" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
......
...@@ -216,12 +216,12 @@ ...@@ -216,12 +216,12 @@
"\n" "\n"
" <xsd:complexType name=\"linkType\">\n" " <xsd:complexType name=\"linkType\">\n"
" <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n" " <xsd:attribute name=\"refid\" type=\"xsd:string\" />\n"
" <xsd:attribute name=\"external\" type=\"DoxBool\" use=\"optional\"/>\n" " <xsd:attribute name=\"external\" type=\"xsd:string\" use=\"optional\"/>\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
"\n" "\n"
" <xsd:complexType name=\"listingType\">\n" " <xsd:complexType name=\"listingType\">\n"
" <xsd:sequence>\n" " <xsd:sequence>\n"
" <xsd:element name=\"codeline\" type=\"codelineType\" maxOccurs=\"unbounded\" />\n" " <xsd:element name=\"codeline\" type=\"codelineType\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
" </xsd:sequence>\n" " </xsd:sequence>\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
"\n" "\n"
...@@ -528,12 +528,25 @@ ...@@ -528,12 +528,25 @@
" <xsd:attribute name=\"langid\" type=\"xsd:string\" /> \n" " <xsd:attribute name=\"langid\" type=\"xsd:string\" /> \n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
"\n" "\n"
" <xsd:group name=\"docParamListGroup\">\n" " <xsd:complexType name=\"docParamListType\">\n"
" <xsd:sequence>\n" " <xsd:sequence>\n"
" <xsd:element name=\"parametername\" type=\"docParamName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" " <xsd:element name=\"parameteritem\" type=\"docParamListItem\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
" </xsd:sequence>\n"
" <xsd:attribute name=\"kind\" type=\"DoxParamListKind\" /> \n"
" </xsd:complexType>\n"
"\n"
" <xsd:complexType name=\"docParamListItem\">\n"
" <xsd:sequence>\n"
" <xsd:element name=\"parameternamelist\" type=\"docParamNameList\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
" <xsd:element name=\"parameterdescription\" type=\"descriptionType\" />\n" " <xsd:element name=\"parameterdescription\" type=\"descriptionType\" />\n"
" </xsd:sequence>\n" " </xsd:sequence>\n"
" </xsd:group>\n" " </xsd:complexType>\n"
"\n"
" <xsd:complexType name=\"docParamNameList\">\n"
" <xsd:sequence>\n"
" <xsd:element name=\"parametername\" type=\"docParamName\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
" </xsd:sequence>\n"
" </xsd:complexType>\n"
"\n" "\n"
" <xsd:complexType name=\"docParamName\">\n" " <xsd:complexType name=\"docParamName\">\n"
" <xsd:simpleContent>\n" " <xsd:simpleContent>\n"
...@@ -543,13 +556,6 @@ ...@@ -543,13 +556,6 @@
" </xsd:simpleContent>\n" " </xsd:simpleContent>\n"
" </xsd:complexType>\n" " </xsd:complexType>\n"
"\n" "\n"
" <xsd:complexType name=\"docParamListType\">\n"
" <xsd:sequence>\n"
" <xsd:group ref=\"docParamListGroup\" maxOccurs=\"unbounded\" />\n"
" </xsd:sequence>\n"
" <xsd:attribute name=\"kind\" type=\"DoxParamListKind\" /> \n"
" </xsd:complexType>\n"
"\n"
" <xsd:complexType name=\"docXRefSectType\">\n" " <xsd:complexType name=\"docXRefSectType\">\n"
" <xsd:sequence>\n" " <xsd:sequence>\n"
" <xsd:element name=\"xreftitle\" type=\"xsd:string\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n" " <xsd:element name=\"xreftitle\" type=\"xsd:string\" minOccurs=\"0\" maxOccurs=\"unbounded\" />\n"
......
...@@ -1113,6 +1113,7 @@ void Config::check() ...@@ -1113,6 +1113,7 @@ void Config::check()
filePatternList.append("*.inc"); filePatternList.append("*.inc");
filePatternList.append("*.m"); filePatternList.append("*.m");
filePatternList.append("*.mm"); filePatternList.append("*.mm");
filePatternList.append("*.dox");
#if !defined(_WIN32) #if !defined(_WIN32)
// unix => case sensitive match => also include useful uppercase versions // unix => case sensitive match => also include useful uppercase versions
filePatternList.append("*.C"); filePatternList.append("*.C");
......
...@@ -283,7 +283,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -283,7 +283,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
if (fi>=0) if (fi>=0)
{ {
a->type = g_curArgTypeName.left(fi+1); a->type = g_curArgTypeName.left(fi+1);
a->name = g_curArgTypeName.mid(fi+1,bi-fi-1); a->name = g_curArgTypeName.mid(fi+1,bi-fi-1).stripWhiteSpace();
a->array = g_curArgTypeName.right(l-bi); a->array = g_curArgTypeName.right(l-bi);
} }
else else
...@@ -294,7 +294,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* ...@@ -294,7 +294,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]*
else if (i>=0 && g_curArgTypeName.at(i)!=':') else if (i>=0 && g_curArgTypeName.at(i)!=':')
{ // type contains a name { // type contains a name
a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1)); a->type = removeRedundantWhiteSpace(g_curArgTypeName.left(i+1));
a->name = g_curArgTypeName.right(l-i-1); a->name = g_curArgTypeName.right(l-i-1).stripWhiteSpace();
} }
else // assume only the type was specified, try to determine name later else // assume only the type was specified, try to determine name later
{ {
......
...@@ -127,6 +127,14 @@ void DirDef::writeDocumentation(OutputList &ol) ...@@ -127,6 +127,14 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.popGeneratorState(); ol.popGeneratorState();
} }
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <compound kind=\"dir\">" << endl;
Doxygen::tagFile << " <name>" << convertToXML(displayName()) << "</name>" << endl;
Doxygen::tagFile << " <path>" << convertToXML(name()) << "</path>" << endl;
Doxygen::tagFile << " <filename>" << convertToXML(getOutputFileBase()) << Doxygen::htmlFileExtension << "</filename>" << endl;
}
ol.startMemberSections(); ol.startMemberSections();
// write subdir list // write subdir list
...@@ -144,6 +152,10 @@ void DirDef::writeDocumentation(OutputList &ol) ...@@ -144,6 +152,10 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.insertMemberAlign(); ol.insertMemberAlign();
ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName()); ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
ol.endMemberItem(); ol.endMemberItem();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
}
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{ {
ol.startMemberDescription(); ol.startMemberDescription();
...@@ -157,7 +169,6 @@ void DirDef::writeDocumentation(OutputList &ol) ...@@ -157,7 +169,6 @@ void DirDef::writeDocumentation(OutputList &ol)
ol.endMemberList(); ol.endMemberList();
} }
// write file list // write file list
if (m_fileList->count()>0) if (m_fileList->count()>0)
{ {
...@@ -169,13 +180,22 @@ void DirDef::writeDocumentation(OutputList &ol) ...@@ -169,13 +180,22 @@ void DirDef::writeDocumentation(OutputList &ol)
while (fd) while (fd)
{ {
ol.startMemberItem(0); ol.startMemberItem(0);
ol.docify("file "); ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
ol.insertMemberAlign(); ol.insertMemberAlign();
if (fd->isLinkable())
{
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
//if (!Config_getString("GENERATE_TAGFILE").isEmpty()) }
//{ else
// Doxygen::tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl; {
//} ol.startBold();
ol.writeString(fd->name());
ol.endBold();
}
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <file>" << convertToXML(fd->name()) << "</file>" << endl;
}
ol.endMemberItem(); ol.endMemberItem();
if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC")) if (!fd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{ {
...@@ -190,13 +210,17 @@ void DirDef::writeDocumentation(OutputList &ol) ...@@ -190,13 +210,17 @@ void DirDef::writeDocumentation(OutputList &ol)
} }
ol.endMemberSections(); ol.endMemberSections();
if (!Config_getBool("DETAILS_AT_TOP")) if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{ {
writeDetailedDocumentation(ol); writeDocAnchorsToTagFile();
Doxygen::tagFile << " </compound>" << endl;
} }
// write details (if !DETAILS_AT_TOP) if (!Config_getBool("DETAILS_AT_TOP"))
{
writeDetailedDocumentation(ol);
}
endFile(ol); endFile(ol);
ol.popGeneratorState(); ol.popGeneratorState();
...@@ -293,7 +317,7 @@ void buildDirectories() ...@@ -293,7 +317,7 @@ void buildDirectories()
for (;(fd=fni.current());++fni) for (;(fd=fni.current());++fni)
{ {
//printf("buildDirectories %s\n",fd->name().data()); //printf("buildDirectories %s\n",fd->name().data());
if (fd->getReference().isEmpty()) if (fd->getReference().isEmpty() && !fd->isDocumentationFile())
{ {
DirDef *dir; DirDef *dir;
if ((dir=Doxygen::directories.find(fd->getPath()))==0) // new directory if ((dir=Doxygen::directories.find(fd->getPath()))==0) // new directory
......
...@@ -32,7 +32,7 @@ class OutputList; ...@@ -32,7 +32,7 @@ class OutputList;
class DirDef; class DirDef;
class DirDefList : public QList<DirDef> class DirList : public QList<DirDef>
{ {
public: public:
int compareItems(GCI item1,GCI item2); int compareItems(GCI item1,GCI item2);
...@@ -67,7 +67,7 @@ class DirDef : public Definition ...@@ -67,7 +67,7 @@ class DirDef : public Definition
static DirDef *createNewDir(const char *path); static DirDef *createNewDir(const char *path);
static bool matchPath(const QCString &path,QStrList &l); static bool matchPath(const QCString &path,QStrList &l);
DirDefList m_subdirs; DirList m_subdirs;
QCString m_dispName; QCString m_dispName;
QCString m_shortName; QCString m_shortName;
FileList *m_fileList; // list of files in the group FileList *m_fileList; // list of files in the group
...@@ -75,7 +75,7 @@ class DirDef : public Definition ...@@ -75,7 +75,7 @@ class DirDef : public Definition
int m_dirCount; int m_dirCount;
}; };
inline int DirDefList::compareItems(GCI item1,GCI item2) inline int DirList::compareItems(GCI item1,GCI item2)
{ {
return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName()); return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName());
} }
......
...@@ -33,6 +33,10 @@ ...@@ -33,6 +33,10 @@
#include <qtextstream.h> #include <qtextstream.h>
#include <md5.h> #include <md5.h>
// Enable this for transparent images
// It doesn't seems to work very well with edge labels so I disabled it.
//#define DOT_TRANSPARENT
//-------------------------------------------------------------------- //--------------------------------------------------------------------
static const int maxCmdLine = 40960; static const int maxCmdLine = 40960;
...@@ -68,6 +72,9 @@ static void writeGraphHeader(QTextStream &t) ...@@ -68,6 +72,9 @@ static void writeGraphHeader(QTextStream &t)
{ {
t << "digraph G" << endl; t << "digraph G" << endl;
t << "{" << endl; t << "{" << endl;
#if defined(DOT_TRANSPARENT)
t << " bgcolor=\"transparent\"" << endl;
#endif
t << " edge [fontname=\"Helvetica\",fontsize=10," t << " edge [fontname=\"Helvetica\",fontsize=10,"
"labelfontname=\"Helvetica\",labelfontsize=10];\n"; "labelfontname=\"Helvetica\",labelfontsize=10];\n";
t << " node [fontname=\"Helvetica\",fontsize=10,shape=record];\n"; t << " node [fontname=\"Helvetica\",fontsize=10,shape=record];\n";
...@@ -586,7 +593,11 @@ void DotNode::writeBox(QTextStream &t, ...@@ -586,7 +593,11 @@ void DotNode::writeBox(QTextStream &t,
} }
else else
{ {
#if defined(DOT_TRANSPARENT)
t << ",color=\"" << labCol << "\", fillcolor=\"white\", style=\"filled\"";
#else
t << ",color=\"" << labCol << "\""; t << ",color=\"" << labCol << "\"";
#endif
if (!m_url.isEmpty()) if (!m_url.isEmpty())
{ {
int anchorPos = m_url.findRev('#'); int anchorPos = m_url.findRev('#');
...@@ -2327,8 +2338,30 @@ bool DotCallGraph::isTrivial() const ...@@ -2327,8 +2338,30 @@ bool DotCallGraph::isTrivial() const
//------------------------------------------------------------- //-------------------------------------------------------------
DotDirDeps::DotDirDeps(DirDef *) DotDirDeps::DotDirDeps(DirDef *dd)
{ {
FileList *fl = dd->getFiles();
if (fl)
{
QListIterator<FileDef> fli(*fl);
FileDef *fd;
for (fli.toFirst();(fd=fli.current());++fli) // foreach file in dir dd
{
QList<IncludeInfo> *ifl = fd->includeFileList();
if (ifl)
{
QListIterator<IncludeInfo> ifli(*ifl);
IncludeInfo *ii;
for (ifli.toFirst();(ii=ifli.current());++ifli) // foreach include file
{
if (ii->fileDef)
{
// add dependency
}
}
}
}
}
} }
DotDirDeps::~DotDirDeps() DotDirDeps::~DotDirDeps()
......
...@@ -4621,6 +4621,7 @@ static void findMember(Entry *root, ...@@ -4621,6 +4621,7 @@ static void findMember(Entry *root,
if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName); if (!namespaceName.isEmpty()) nd=getResolvedNamespace(namespaceName);
ClassDef *tcd=findClassDefinition(fd,nd,scopeName); ClassDef *tcd=findClassDefinition(fd,nd,scopeName);
//printf("*** cd=%s tcd=%s fd=%s\n",cd->name().data(),tcd->name().data(),fd->name().data());
if (cd && tcd==cd) // member's classes match if (cd && tcd==cd) // member's classes match
{ {
...@@ -4859,7 +4860,7 @@ static void findMember(Entry *root, ...@@ -4859,7 +4860,7 @@ static void findMember(Entry *root,
} }
} }
} }
else // member specialization else if (cd) // member specialization
{ {
MemberDef::MemberType mtype=MemberDef::Function; MemberDef::MemberType mtype=MemberDef::Function;
ArgumentList *tArgList = new ArgumentList; ArgumentList *tArgList = new ArgumentList;
...@@ -4894,6 +4895,11 @@ static void findMember(Entry *root, ...@@ -4894,6 +4895,11 @@ static void findMember(Entry *root,
cd->insertMember(md); cd->insertMember(md);
md->setRefItems(root->sli); md->setRefItems(root->sli);
} }
else
{
//printf("Specialized member %s of unknown scope %s%s found!\n",
// scopeName.data(),funcName.data(),funcArgs.data());
}
} }
else if (overloaded) // check if the function belongs to only one class else if (overloaded) // check if the function belongs to only one class
{ {
...@@ -6496,6 +6502,7 @@ static void findDirDocumentation(Entry *root) ...@@ -6496,6 +6502,7 @@ static void findDirDocumentation(Entry *root)
//printf("Match for with dir %s\n",matchingDir->name().data()); //printf("Match for with dir %s\n",matchingDir->name().data());
matchingDir->setBriefDescription(root->brief,root->briefFile,root->briefLine); matchingDir->setBriefDescription(root->brief,root->briefFile,root->briefLine);
matchingDir->setDocumentation(root->doc,root->docFile,root->docLine); matchingDir->setDocumentation(root->doc,root->docFile,root->docLine);
addDirToGroups(root,matchingDir);
} }
else else
{ {
...@@ -8284,14 +8291,14 @@ void parseInput() ...@@ -8284,14 +8291,14 @@ void parseInput()
msg("Freeing input...\n"); msg("Freeing input...\n");
input.resize(0); input.resize(0);
msg("Building directory list...\n");
buildDirectories();
findDirDocumentation(root);
msg("Building group list...\n"); msg("Building group list...\n");
buildGroupList(root); buildGroupList(root);
organizeSubGroups(root); organizeSubGroups(root);
msg("Building directory list...\n");
buildDirectories();
findDirDocumentation(root);
msg("Building namespace list...\n"); msg("Building namespace list...\n");
buildNamespaceList(root); buildNamespaceList(root);
findUsingDirectives(root); findUsingDirectives(root);
......
...@@ -1110,4 +1110,9 @@ void FileDef::combineUsingRelations() ...@@ -1110,4 +1110,9 @@ void FileDef::combineUsingRelations()
} }
} }
bool FileDef::isDocumentationFile() const
{
return name().right(4)==".doc" ||
name().right(4)==".txt" ||
name().right(4)==".dox";
}
...@@ -156,6 +156,7 @@ class FileDef : public Definition ...@@ -156,6 +156,7 @@ class FileDef : public Definition
void addIncludedUsingDirectives(); void addIncludedUsingDirectives();
void addListReferences(); void addListReferences();
bool isDocumentationFile() const;
//void generateXML(QTextStream &t); //void generateXML(QTextStream &t);
//void generateXMLSection(QTextStream &t,MemberList *ml,const char *type); //void generateXMLSection(QTextStream &t,MemberList *ml,const char *type);
......
...@@ -43,6 +43,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t, ...@@ -43,6 +43,7 @@ GroupDef::GroupDef(const char *df,int dl,const char *na,const char *t,
namespaceList = new NamespaceList; namespaceList = new NamespaceList;
pageDict = new PageSDict(257); pageDict = new PageSDict(257);
exampleDict = new PageSDict(257); exampleDict = new PageSDict(257);
dirList = new DirList;
allMemberList = new MemberList; allMemberList = new MemberList;
allMemberNameInfoSDict = new MemberNameInfoSDict(17); allMemberNameInfoSDict = new MemberNameInfoSDict(17);
if (refFileName) if (refFileName)
...@@ -86,6 +87,7 @@ GroupDef::~GroupDef() ...@@ -86,6 +87,7 @@ GroupDef::~GroupDef()
delete allMemberList; delete allMemberList;
delete allMemberNameInfoSDict; delete allMemberNameInfoSDict;
delete memberGroupSDict; delete memberGroupSDict;
delete dirList;
} }
void GroupDef::setGroupTitle( const char *t ) void GroupDef::setGroupTitle( const char *t )
...@@ -155,6 +157,14 @@ void GroupDef::addNamespace(const NamespaceDef *def) ...@@ -155,6 +157,14 @@ void GroupDef::addNamespace(const NamespaceDef *def)
namespaceList->append(def); namespaceList->append(def);
} }
void GroupDef::addDir(const DirDef *def)
{
if (Config_getBool("SORT_BRIEF_DOCS"))
dirList->inSort(def);
else
dirList->append(def);
}
void GroupDef::addPage(PageDef *def) void GroupDef::addPage(PageDef *def)
{ {
//printf("Making page %s part of a group\n",def->name.data()); //printf("Making page %s part of a group\n",def->name.data());
...@@ -516,7 +526,7 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -516,7 +526,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
while (fd) while (fd)
{ {
ol.startMemberItem(0); ol.startMemberItem(0);
ol.docify("file "); ol.docify(theTranslator->trFile(FALSE,TRUE)+" ");
ol.insertMemberAlign(); ol.insertMemberAlign();
ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name());
if (!Config_getString("GENERATE_TAGFILE").isEmpty()) if (!Config_getString("GENERATE_TAGFILE").isEmpty())
...@@ -599,6 +609,39 @@ void GroupDef::writeDocumentation(OutputList &ol) ...@@ -599,6 +609,39 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.endMemberList(); ol.endMemberList();
} }
// write list of directories
if (dirList->count()>0)
{
ol.startMemberHeader();
ol.parseText(theTranslator->trDirectories());
ol.endMemberHeader();
ol.startMemberList();
DirDef *dd=dirList->first();
while (dd)
{
ol.startMemberItem(0);
ol.parseText(theTranslator->trDir(FALSE,TRUE));
ol.insertMemberAlign();
ol.writeObjectLink(dd->getReference(),dd->getOutputFileBase(),0,dd->shortName());
ol.endMemberItem();
if (!Config_getString("GENERATE_TAGFILE").isEmpty())
{
Doxygen::tagFile << " <dir>" << convertToXML(dd->displayName()) << "</dir>" << endl;
}
if (!dd->briefDescription().isEmpty() && Config_getBool("BRIEF_MEMBER_DESC"))
{
ol.startMemberDescription();
ol.parseDoc(briefFile(),briefLine(),dd,0,dd->briefDescription(),FALSE,FALSE);
ol.endMemberDescription();
ol.newParagraph();
}
dd=dirList->next();
}
ol.endMemberList();
}
// write list of classes // write list of classes
classSDict->writeDeclaration(ol); classSDict->writeDeclaration(ol);
...@@ -719,6 +762,24 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd) ...@@ -719,6 +762,24 @@ void addNamespaceToGroups(Entry *root,NamespaceDef *nd)
} }
} }
void addDirToGroups(Entry *root,DirDef *dd)
{
//printf("*** root->groups->count()=%d\n",root->groups->count());
QListIterator<Grouping> gli(*root->groups);
Grouping *g;
for (;(g=gli.current());++gli)
{
GroupDef *gd=0;
//printf("group `%s'\n",g->groupname.data());
if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]))
{
gd->addDir(dd);
dd->makePartOfGroup(gd);
//printf("Dir %s: in group %s\n",dd->name().data(),g->groupname.data());
}
}
}
void addGroupToGroups(Entry *root,GroupDef *subGroup) void addGroupToGroups(Entry *root,GroupDef *subGroup)
{ {
QListIterator<Grouping> gli(*root->groups); QListIterator<Grouping> gli(*root->groups);
......
...@@ -37,6 +37,8 @@ class MemberGroupSDict; ...@@ -37,6 +37,8 @@ class MemberGroupSDict;
class MemberNameInfoSDict; class MemberNameInfoSDict;
class PageSDict; class PageSDict;
class PageDef; class PageDef;
class DirDef;
class DirList;
class GroupDef : public Definition class GroupDef : public Definition
{ {
...@@ -53,8 +55,9 @@ class GroupDef : public Definition ...@@ -53,8 +55,9 @@ class GroupDef : public Definition
void addNamespace(const NamespaceDef *def); void addNamespace(const NamespaceDef *def);
void addGroup(const GroupDef *def); void addGroup(const GroupDef *def);
void addParentGroup(const GroupDef *def); void addParentGroup(const GroupDef *def);
void addPage(PageDef *def); // pages in this group void addPage(PageDef *def);
void addExample(const PageDef *def); // examples in this group void addExample(const PageDef *def);
void addDir(const DirDef *dd);
bool insertMember(MemberDef *def,bool docOnly=FALSE); bool insertMember(MemberDef *def,bool docOnly=FALSE);
void removeMember(MemberDef *md); void removeMember(MemberDef *md);
bool containsGroup(const GroupDef *def); // true if def is already a subgroup bool containsGroup(const GroupDef *def); // true if def is already a subgroup
...@@ -108,6 +111,7 @@ class GroupDef : public Definition ...@@ -108,6 +111,7 @@ class GroupDef : public Definition
NamespaceList * getNamespaces() const { return namespaceList; } NamespaceList * getNamespaces() const { return namespaceList; }
GroupList * getSubGroups() const { return groupList; } GroupList * getSubGroups() const { return groupList; }
PageSDict * getPages() const { return pageDict; } PageSDict * getPages() const { return pageDict; }
DirList * getDirs() const { return dirList; }
protected: protected:
void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const); void addMemberListToGroup(MemberList *,bool (MemberDef::*)() const);
...@@ -122,6 +126,7 @@ class GroupDef : public Definition ...@@ -122,6 +126,7 @@ class GroupDef : public Definition
GroupList *groupList; // list of sub groups. GroupList *groupList; // list of sub groups.
PageSDict *pageDict; // list of pages in the group PageSDict *pageDict; // list of pages in the group
PageSDict *exampleDict; // list of examples in the group PageSDict *exampleDict; // list of examples in the group
DirList *dirList; // list of directories in the group
MemberList *allMemberList; MemberList *allMemberList;
MemberNameInfoSDict *allMemberNameInfoSDict; MemberNameInfoSDict *allMemberNameInfoSDict;
...@@ -153,6 +158,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup); ...@@ -153,6 +158,7 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup);
void addMemberToGroups(Entry *root,MemberDef *md); void addMemberToGroups(Entry *root,MemberDef *md);
void addPageToGroups(Entry *root,PageDef *pd); void addPageToGroups(Entry *root,PageDef *pd);
void addExampleToGroups(Entry *root,PageDef *eg); void addExampleToGroups(Entry *root,PageDef *eg);
void addDirToGroups(Entry *root,DirDef *dd);
#endif #endif
...@@ -1375,13 +1375,6 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, ...@@ -1375,13 +1375,6 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
t << fixSpaces(theTranslator->trModules()); t << fixSpaces(theTranslator->trModules());
endQuickIndexItem(t); endQuickIndexItem(t);
} }
if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0)
{
startQuickIndexItem(t,"dirs"+Doxygen::htmlFileExtension,
hli==HLI_Directories,compact,first,relPath);
t << fixSpaces(theTranslator->trDirectories());
endQuickIndexItem(t);
}
if (documentedNamespaces>0) if (documentedNamespaces>0)
{ {
startQuickIndexItem(t,"namespaces"+Doxygen::htmlFileExtension, startQuickIndexItem(t,"namespaces"+Doxygen::htmlFileExtension,
...@@ -1417,6 +1410,13 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact, ...@@ -1417,6 +1410,13 @@ static void writeDefaultQuickLinks(QTextStream &t,bool compact,
t << fixSpaces(theTranslator->trCompoundList()); t << fixSpaces(theTranslator->trCompoundList());
endQuickIndexItem(t); endQuickIndexItem(t);
} }
if (Config_getBool("SHOW_DIRECTORIES") && documentedDirs>0)
{
startQuickIndexItem(t,"dirs"+Doxygen::htmlFileExtension,
hli==HLI_Directories,compact,first,relPath);
t << fixSpaces(theTranslator->trDirectories());
endQuickIndexItem(t);
}
if (documentedHtmlFiles>0) if (documentedHtmlFiles>0)
{ {
startQuickIndexItem(t,"files"+Doxygen::htmlFileExtension, startQuickIndexItem(t,"files"+Doxygen::htmlFileExtension,
......
...@@ -696,13 +696,6 @@ void writeGraphicalClassHierarchy(OutputList &ol) ...@@ -696,13 +696,6 @@ void writeGraphicalClassHierarchy(OutputList &ol)
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static bool nameIsOk(FileDef *fd)
{
return fd->name().right(4)!=".doc" &&
fd->name().right(4)!=".txt" &&
fd->name().right(4)!=".dox";
}
void countFiles(int &htmlFiles,int &files) void countFiles(int &htmlFiles,int &files)
{ {
htmlFiles=0; htmlFiles=0;
...@@ -717,7 +710,7 @@ void countFiles(int &htmlFiles,int &files) ...@@ -717,7 +710,7 @@ void countFiles(int &htmlFiles,int &files)
{ {
bool doc = fd->isLinkableInProject(); bool doc = fd->isLinkableInProject();
bool src = fd->generateSourceFile(); bool src = fd->generateSourceFile();
bool nameOk = nameIsOk(fd); bool nameOk = !fd->isDocumentationFile();
if (nameOk) if (nameOk)
{ {
if (doc || src) if (doc || src)
...@@ -823,7 +816,7 @@ void writeFileIndex(OutputList &ol) ...@@ -823,7 +816,7 @@ void writeFileIndex(OutputList &ol)
//printf("Found filedef %s\n",fd->name().data()); //printf("Found filedef %s\n",fd->name().data());
bool doc = fd->isLinkableInProject(); bool doc = fd->isLinkableInProject();
bool src = fd->generateSourceFile(); bool src = fd->generateSourceFile();
bool nameOk = nameIsOk(fd); bool nameOk = !fd->isDocumentationFile();
if (nameOk && (doc || src) && if (nameOk && (doc || src) &&
!fd->isReference()) !fd->isReference())
{ {
...@@ -2870,13 +2863,13 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd,int level) ...@@ -2870,13 +2863,13 @@ void writeDirTreeNode(OutputList &ol, DirDef *dd,int level)
//printf("gd=`%s': pageDict=%d\n",gd->name().data(),gd->pageDict->count()); //printf("gd=`%s': pageDict=%d\n",gd->name().data(),gd->pageDict->count());
if (htmlHelp) if (htmlHelp)
{ {
htmlHelp->addContentsItem(isDir,dd->displayName(),dd->getOutputFileBase()); htmlHelp->addContentsItem(isDir,dd->shortName(),dd->getOutputFileBase());
htmlHelp->incContentsDepth(); htmlHelp->incContentsDepth();
} }
if (ftvHelp) if (ftvHelp)
{ {
ftvHelp->addContentsItem(isDir,dd->getReference(),dd->getOutputFileBase(), ftvHelp->addContentsItem(isDir,dd->getReference(),dd->getOutputFileBase(),
0,dd->displayName()); 0,dd->shortName());
ftvHelp->incContentsDepth(); ftvHelp->incContentsDepth();
} }
......
...@@ -133,16 +133,26 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -133,16 +133,26 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
while (a) while (a)
{ {
if (md->isDefine() || first) ol.startParameterType(first,md->isObjCMethod()?"dummy":0); if (md->isDefine() || first) ol.startParameterType(first,md->isObjCMethod()?"dummy":0);
QRegExp re(")("); QRegExp re(")("),res("(.*\\*");
int vp; int vp=a->type.find(re);
int wp=a->type.find(res);
// use the following to put the function pointer type before the name
bool hasFuncPtrType=FALSE;
// or use the following to put the function pointer as it appears in
// the prototype.
// bool hasFuncPtrType=vp!=-1 && wp!=-1 && wp<vp;
if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute if (!a->attrib.isEmpty() && !md->isObjCMethod()) // argument has an IDL attribute
{ {
ol.docify(a->attrib+" "); ol.docify(a->attrib+" ");
} }
if ((vp=a->type.find(re))!=-1) // argument type is a function pointer if (hasFuncPtrType) // argument type is a function pointer
{ {
//printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data()); //printf("a->type=`%s' a->name=`%s'\n",a->type.data(),a->name.data());
QCString n=a->type.left(vp); QCString n=a->type.left(vp);
if (hasFuncPtrType) n=a->type.left(wp);
if (md->isObjCMethod()) { n.prepend("("); n.append(")"); } if (md->isObjCMethod()) { n.prepend("("); n.append(")"); }
if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName); if (!cName.isEmpty()) n=addTemplateNames(n,cd->name(),cName);
linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n); linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),md->name(),n);
...@@ -162,9 +172,16 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -162,9 +172,16 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.endParameterType(); ol.endParameterType();
ol.startParameterName(defArgList->count()<2); ol.startParameterName(defArgList->count()<2);
} }
if (hasFuncPtrType)
{
ol.docify(a->type.mid(wp,vp-wp));
}
if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name if (!a->name.isEmpty() || (a->name.isEmpty() && a->type=="...")) // argument has a name
{
if (!hasFuncPtrType);
{ {
ol.docify(" "); ol.docify(" ");
}
ol.disable(OutputGenerator::Man); ol.disable(OutputGenerator::Man);
ol.startEmphasis(); ol.startEmphasis();
ol.enable(OutputGenerator::Man); ol.enable(OutputGenerator::Man);
...@@ -177,7 +194,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -177,7 +194,7 @@ static bool writeDefArgumentList(OutputList &ol,ClassDef *cd,
{ {
ol.docify(a->array); ol.docify(a->array);
} }
if (vp!=-1) // write the part of the argument type if (hasFuncPtrType) // write the part of the argument type
// that comes after the name // that comes after the name
{ {
linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(), linkifyText(TextGeneratorOLImpl(ol),cd,md->getBodyDef(),
...@@ -405,6 +422,7 @@ MemberDef::MemberDef(const char *df,int dl, ...@@ -405,6 +422,7 @@ MemberDef::MemberDef(const char *df,int dl,
m_cachedTypedefValue = 0; m_cachedTypedefValue = 0;
m_inbodyLine = -1; m_inbodyLine = -1;
m_implOnly=FALSE; m_implOnly=FALSE;
groupMember = 0;
} }
/*! Destroys the member definition. */ /*! Destroys the member definition. */
...@@ -1783,6 +1801,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1783,6 +1801,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
writeSourceReffedBy(ol,cname); writeSourceReffedBy(ol,cname);
writeInlineCode(ol,cname); writeInlineCode(ol,cname);
ol.endIndent();
if ((m_hasCallGraph || Config_getBool("CALL_GRAPH")) if ((m_hasCallGraph || Config_getBool("CALL_GRAPH"))
&& isFunction() && Config_getBool("HAVE_DOT") && isFunction() && Config_getBool("HAVE_DOT")
) )
...@@ -1800,7 +1820,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, ...@@ -1800,7 +1820,6 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
} }
} }
ol.endIndent();
// enable LaTeX again // enable LaTeX again
//if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex); //if (Config_getBool("EXTRACT_ALL") && !hasDocs) ol.enable(OutputGenerator::Latex);
ol.popGeneratorState(); ol.popGeneratorState();
...@@ -1976,6 +1995,8 @@ bool MemberDef::hasOneLineInitializer() const ...@@ -1976,6 +1995,8 @@ bool MemberDef::hasOneLineInitializer() const
bool MemberDef::hasMultiLineInitializer() const bool MemberDef::hasMultiLineInitializer() const
{ {
//printf("initLines=%d userInitLines=%d maxInitLines=%d\n",
// initLines,userInitLines,maxInitLines);
return initLines>0 && return initLines>0 &&
((initLines<maxInitLines && userInitLines==-1) // implicitly enabled ((initLines<maxInitLines && userInitLines==-1) // implicitly enabled
|| initLines<userInitLines // explicitly enabled || initLines<userInitLines // explicitly enabled
...@@ -1984,6 +2005,7 @@ bool MemberDef::hasMultiLineInitializer() const ...@@ -1984,6 +2005,7 @@ bool MemberDef::hasMultiLineInitializer() const
void MemberDef::setInitializer(const char *initializer) void MemberDef::setInitializer(const char *initializer)
{ {
//printf("setInitializer(%s)\n",initializer);
init=initializer; init=initializer;
int p=init.length()-1; int p=init.length()-1;
while (p>=0 && isspace((uchar)init.at(p))) p--; while (p>=0 && isspace((uchar)init.at(p))) p--;
......
...@@ -76,7 +76,8 @@ void MemberList::countDecMembers() ...@@ -76,7 +76,8 @@ void MemberList::countDecMembers()
m_funcCnt++,m_numDecMembers++; m_funcCnt++,m_numDecMembers++;
break; break;
case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break; case MemberDef::Enumeration: m_enumCnt++,m_numDecMembers++; break;
case MemberDef::EnumValue: m_enumValCnt++,m_numDecMembers++; break; case MemberDef::EnumValue: //m_enumValCnt++,m_numDecMembers++;
break;
case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break; case MemberDef::Typedef: m_typeCnt++,m_numDecMembers++; break;
case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break; case MemberDef::Prototype: m_protoCnt++,m_numDecMembers++; break;
case MemberDef::Define: if (Config_getBool("EXTRACT_ALL") || case MemberDef::Define: if (Config_getBool("EXTRACT_ALL") ||
...@@ -92,7 +93,7 @@ void MemberList::countDecMembers() ...@@ -92,7 +93,7 @@ void MemberList::countDecMembers()
} }
} }
} }
if (memberGroupList /*&& countSubGroups*/) if (memberGroupList)
{ {
MemberGroupListIterator mgli(*memberGroupList); MemberGroupListIterator mgli(*memberGroupList);
MemberGroup *mg; MemberGroup *mg;
...@@ -309,10 +310,10 @@ void MemberList::writeDeclarations(OutputList &ol, ...@@ -309,10 +310,10 @@ void MemberList::writeDeclarations(OutputList &ol,
const char *title,const char *subtitle const char *title,const char *subtitle
/*, bool inGroup,bool countSubGroups*/) /*, bool inGroup,bool countSubGroups*/)
{ {
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')\n",title,subtitle);
//printf("----- writeDeclaration() ----\n"); //printf("----- writeDeclaration() ----\n");
countDecMembers(); // count member not in group countDecMembers(); // count member not in group
if (numDecMembers()==0) return; if (numDecMembers()==0) return;
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')=%d\n",title,subtitle,numDecMembers());
if (title) if (title)
{ {
ol.startMemberHeader(); ol.startMemberHeader();
......
...@@ -42,6 +42,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl, ...@@ -42,6 +42,7 @@ NamespaceDef::NamespaceDef(const char *df,int dl,
setReference(lref); setReference(lref);
memberGroupSDict = new MemberGroupSDict; memberGroupSDict = new MemberGroupSDict;
memberGroupSDict->setAutoDelete(TRUE); memberGroupSDict->setAutoDelete(TRUE);
visited=FALSE;
} }
NamespaceDef::~NamespaceDef() NamespaceDef::~NamespaceDef()
......
...@@ -1055,6 +1055,8 @@ static void readIncludeFile(const QCString &inc) ...@@ -1055,6 +1055,8 @@ static void readIncludeFile(const QCString &inc)
FileDef *oldFileDef = g_yyFileDef; FileDef *oldFileDef = g_yyFileDef;
int oldLineNr = g_yyLineNr; int oldLineNr = g_yyLineNr;
//printf("Searching for `%s'\n",incFileName.data()); //printf("Searching for `%s'\n",incFileName.data());
// findFile will overwrite g_yyFileDef if found
if ((f=findFile(incFileName,localInclude))) // see if the include file can be found if ((f=findFile(incFileName,localInclude))) // see if the include file can be found
{ {
//printf("Found include file!\n"); //printf("Found include file!\n");
...@@ -1627,7 +1629,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'")) ...@@ -1627,7 +1629,6 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<Include>[^\">\n]+[\">] { <Include>[^\">\n]+[\">] {
g_incName+=yytext; g_incName+=yytext;
readIncludeFile(g_incName); readIncludeFile(g_incName);
BEGIN(Start); BEGIN(Start);
} }
<DefName>{ID}/"(" { <DefName>{ID}/"(" {
......
...@@ -197,6 +197,7 @@ static void initParser() ...@@ -197,6 +197,7 @@ static void initParser()
autoGroupStack.setAutoDelete(TRUE); autoGroupStack.setAutoDelete(TRUE);
lastDefGroup.groupname.resize(0); lastDefGroup.groupname.resize(0);
insideFormula = FALSE; insideFormula = FALSE;
insideCode=FALSE;
} }
static void initEntry() static void initEntry()
...@@ -843,6 +844,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -843,6 +844,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%% %%
<*>\x06[^\x06]*\x06 { // new file <*>\x06[^\x06]*\x06 { // new file
if (YY_START==Comment)
{
warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
}
if (memberGroupId!=DOX_NOGROUP) if (memberGroupId!=DOX_NOGROUP)
{ {
warn(yyFileName,yyLineNr,"Warning: Missing //@}"); warn(yyFileName,yyLineNr,"Warning: Missing //@}");
...@@ -1661,6 +1666,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -1661,6 +1666,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
unput(';'); unput(';');
BEGIN(FindMembers); BEGIN(FindMembers);
} }
<FindMembers>"friend"{BN}+("class"|"union"|"struct"){BN}+ {
current->name=yytext;
BEGIN(FindMembers);
}
<FindMembers,FindMemberName>{SCOPENAME} { <FindMembers,FindMemberName>{SCOPENAME} {
lineCount(); lineCount();
if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0) if (insideIDL && yyleng==9 && strcmp(yytext,"cpp_quote")==0)
...@@ -2112,7 +2121,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2112,7 +2121,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
yyLineNr++; yyLineNr++;
} }
<ReadInitializer>"@\"" { <ReadInitializer>"@\"" {
printf("insideCS=%d\n",insideCS); //printf("insideCS=%d\n",insideCS);
current->initializer+=yytext; current->initializer+=yytext;
if (!insideCS && !insideObjC) if (!insideCS && !insideObjC)
{ {
...@@ -2273,7 +2282,6 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2273,7 +2282,6 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->section = Entry::VARIABLE_SEC ; current->section = Entry::VARIABLE_SEC ;
current->fileName = yyFileName; current->fileName = yyFileName;
current->startLine = yyLineNr; current->startLine = yyLineNr;
//printf("New variable type=`%s' name=`%s' groupId=%d\n",current->type.data(),current->name.data(),current->mGrpId);
current_root->addSubEntry( current ) ; current_root->addSubEntry( current ) ;
} }
if ( *yytext == ',') if ( *yytext == ',')
...@@ -2962,6 +2970,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2962,6 +2970,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<CopyArgCommentLine>. { fullArgString+=*yytext; } <CopyArgCommentLine>. { fullArgString+=*yytext; }
<CopyArgComment>\n { fullArgString+=*yytext; yyLineNr++; } <CopyArgComment>\n { fullArgString+=*yytext; yyLineNr++; }
<CopyArgComment>. { fullArgString+=*yytext; } <CopyArgComment>. { fullArgString+=*yytext; }
<CopyArgComment>{CMD}("brief"|"short"){B}+ {
warn(yyFileName,yyLineNr,
"Warning: Ignoring %cbrief command inside argument documentation",*yytext
);
fullArgString+=' ';
}
<ReadTempArgs>"<" { <ReadTempArgs>"<" {
*copyArgString+=*yytext; *copyArgString+=*yytext;
fullArgString+=*yytext; fullArgString+=*yytext;
...@@ -3103,8 +3117,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3103,8 +3117,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN(SkipCPP); BEGIN(SkipCPP);
} }
<FuncQual>"=" { // typically an initialized function pointer <FuncQual>"=" { // typically an initialized function pointer
current->args += *yytext; //current->args += *yytext;
BEGIN(FuncPtrInit); //BEGIN(FuncPtrInit);
lastInitializerContext=YY_START;
BEGIN(ReadInitializer);
} }
<FuncPtrInit>[{;] { <FuncPtrInit>[{;] {
unput(*yytext); unput(*yytext);
...@@ -4265,7 +4281,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4265,7 +4281,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->startLine = yyLineNr; current->startLine = yyLineNr;
BEGIN( ExampleDocArg1 ); BEGIN( ExampleDocArg1 );
} }
<Doc>{B}*{CMD}"details"{B}+ { /* nop */ <ClassDoc,PageDoc,Doc,JavaDoc>{B}*{CMD}"details"{B}+ { /* nop */
} }
<LineDoc>{CMD}"name"[^\n]*\n { <LineDoc>{CMD}"name"[^\n]*\n {
lastDefGroup.groupname.resize(0); lastDefGroup.groupname.resize(0);
...@@ -5988,6 +6004,10 @@ void parseMain(Entry *rt) ...@@ -5988,6 +6004,10 @@ void parseMain(Entry *rt)
scanYYrestart( scanYYin ); scanYYrestart( scanYYin );
BEGIN( FindMembers ); BEGIN( FindMembers );
scanYYlex(); scanYYlex();
if (YY_START==Comment)
{
warn(yyFileName,yyLineNr,"File ended in the middle of a comment block! Perhaps a missing \\endcode?");
}
forceEndGroup(); forceEndGroup();
......
"<?\n"
"function readInt($file)\n" "function readInt($file)\n"
"{\n" "{\n"
" $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));\n" " $b1 = ord(fgetc($file)); $b2 = ord(fgetc($file));\n"
......
...@@ -132,6 +132,7 @@ class TagGroupInfo ...@@ -132,6 +132,7 @@ class TagGroupInfo
QStringList namespaceList; QStringList namespaceList;
QStringList fileList; QStringList fileList;
QStringList pageList; QStringList pageList;
QStringList dirList;
}; };
/*! Container for page specific info that can be read from a tagfile */ /*! Container for page specific info that can be read from a tagfile */
...@@ -144,6 +145,17 @@ class TagPageInfo ...@@ -144,6 +145,17 @@ class TagPageInfo
QStrList docAnchors; QStrList docAnchors;
}; };
/*! Container for directory specific info that can be read from a tagfile */
class TagDirInfo
{
public:
QString name;
QString filename;
QString path;
QStringList subdirList;
QStringList fileList;
QStrList docAnchors;
};
/*! Tag file parser. /*! Tag file parser.
* Reads an XML-structured tagfile and builds up the structure in * Reads an XML-structured tagfile and builds up the structure in
...@@ -160,6 +172,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -160,6 +172,7 @@ class TagFileParser : public QXmlDefaultHandler
InPage, InPage,
InMember, InMember,
InPackage, InPackage,
InDir,
InTempArgList InTempArgList
}; };
class StartElementHandler class StartElementHandler
...@@ -264,6 +277,11 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -264,6 +277,11 @@ class TagFileParser : public QXmlDefaultHandler
m_curPackage = new TagPackageInfo; m_curPackage = new TagPackageInfo;
m_state = InPackage; m_state = InPackage;
} }
else if (kind=="dir")
{
m_curDir = new TagDirInfo;
m_state = InDir;
}
else else
{ {
err("Error: Unknown compound attribute `%s' found!\n",kind.data()); err("Error: Unknown compound attribute `%s' found!\n",kind.data());
...@@ -287,6 +305,8 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -287,6 +305,8 @@ class TagFileParser : public QXmlDefaultHandler
m_curGroup=0; break; m_curGroup=0; break;
case InPage: m_tagFilePages.append(m_curPage); case InPage: m_tagFilePages.append(m_curPage);
m_curPage=0; break; m_curPage=0; break;
case InDir: m_tagFileDirs.append(m_curDir);
m_curDir=0; break;
case InPackage: m_tagFilePackages.append(m_curPackage); case InPackage: m_tagFilePackages.append(m_curPackage);
m_curPackage=0; break; m_curPackage=0; break;
default: default:
...@@ -351,6 +371,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -351,6 +371,7 @@ class TagFileParser : public QXmlDefaultHandler
case InPage: m_curPage->docAnchors.append(m_curString); break; case InPage: m_curPage->docAnchors.append(m_curString); break;
case InMember: m_curMember->docAnchors.append(m_curString); break; case InMember: m_curMember->docAnchors.append(m_curString); break;
case InPackage: m_curPackage->docAnchors.append(m_curString); break; case InPackage: m_curPackage->docAnchors.append(m_curString); break;
case InDir: m_curDir->docAnchors.append(m_curString); break;
default: err("Error: Unexpected tag `member' found\n"); break; default: err("Error: Unexpected tag `member' found\n"); break;
} }
} }
...@@ -379,6 +400,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -379,6 +400,7 @@ class TagFileParser : public QXmlDefaultHandler
switch(m_state) switch(m_state)
{ {
case InGroup: m_curGroup->fileList.append(m_curString); break; case InGroup: m_curGroup->fileList.append(m_curString); break;
case InDir: m_curDir->fileList.append(m_curString); break;
default: err("Error: Unexpected tag `file' found\n"); break; default: err("Error: Unexpected tag `file' found\n"); break;
} }
} }
...@@ -390,6 +412,14 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -390,6 +412,14 @@ class TagFileParser : public QXmlDefaultHandler
default: err("Error: Unexpected tag `page' found\n"); break; default: err("Error: Unexpected tag `page' found\n"); break;
} }
} }
void endDir()
{
switch(m_state)
{
case InDir: m_curDir->subdirList.append(m_curString); break;
default: err("Error: Unexpected tag `page' found\n"); break;
}
}
void startStringValue(const QXmlAttributes& ) void startStringValue(const QXmlAttributes& )
{ {
m_curString = ""; m_curString = "";
...@@ -414,6 +444,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -414,6 +444,7 @@ class TagFileParser : public QXmlDefaultHandler
case InNamespace: m_curNamespace->name = m_curString; break; case InNamespace: m_curNamespace->name = m_curString; break;
case InGroup: m_curGroup->name = m_curString; break; case InGroup: m_curGroup->name = m_curString; break;
case InPage: m_curPage->name = m_curString; break; case InPage: m_curPage->name = m_curString; break;
case InDir: m_curDir->name = m_curString; break;
case InMember: m_curMember->name = m_curString; break; case InMember: m_curMember->name = m_curString; break;
case InPackage: m_curPackage->name = m_curString; break; case InPackage: m_curPackage->name = m_curString; break;
default: err("Error: Unexpected tag `name' found\n"); break; default: err("Error: Unexpected tag `name' found\n"); break;
...@@ -510,6 +541,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -510,6 +541,7 @@ class TagFileParser : public QXmlDefaultHandler
case InGroup: m_curGroup->filename = m_curString; break; case InGroup: m_curGroup->filename = m_curString; break;
case InPage: m_curPage->filename = m_curString; break; case InPage: m_curPage->filename = m_curString; break;
case InPackage: m_curPackage->filename = m_curString; break; case InPackage: m_curPackage->filename = m_curString; break;
case InDir: m_curDir->filename = m_curString; break;
default: err("Error: Unexpected tag `filename' found\n"); break; default: err("Error: Unexpected tag `filename' found\n"); break;
} }
} }
...@@ -518,6 +550,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -518,6 +550,7 @@ class TagFileParser : public QXmlDefaultHandler
switch (m_state) switch (m_state)
{ {
case InFile: m_curFile->path = m_curString; break; case InFile: m_curFile->path = m_curString; break;
case InDir: m_curDir->path = m_curString; break;
default: err("Error: Unexpected tag `path' found\n"); break; default: err("Error: Unexpected tag `path' found\n"); break;
} }
} }
...@@ -580,6 +613,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -580,6 +613,7 @@ class TagFileParser : public QXmlDefaultHandler
m_curGroup=0; m_curGroup=0;
m_curPage=0; m_curPage=0;
m_curPackage=0; m_curPackage=0;
m_curDir=0;
m_stateStack.setAutoDelete(TRUE); m_stateStack.setAutoDelete(TRUE);
m_tagFileClasses.setAutoDelete(TRUE); m_tagFileClasses.setAutoDelete(TRUE);
...@@ -588,6 +622,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -588,6 +622,7 @@ class TagFileParser : public QXmlDefaultHandler
m_tagFileGroups.setAutoDelete(TRUE); m_tagFileGroups.setAutoDelete(TRUE);
m_tagFilePages.setAutoDelete(TRUE); m_tagFilePages.setAutoDelete(TRUE);
m_tagFilePackages.setAutoDelete(TRUE); m_tagFilePackages.setAutoDelete(TRUE);
m_tagFileDirs.setAutoDelete(TRUE);
m_startElementHandlers.insert("compound", new StartElementHandler(this,&TagFileParser::startCompound)); m_startElementHandlers.insert("compound", new StartElementHandler(this,&TagFileParser::startCompound));
m_startElementHandlers.insert("member", new StartElementHandler(this,&TagFileParser::startMember)); m_startElementHandlers.insert("member", new StartElementHandler(this,&TagFileParser::startMember));
...@@ -603,6 +638,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -603,6 +638,7 @@ class TagFileParser : public QXmlDefaultHandler
m_startElementHandlers.insert("class", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("class", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("namespace", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("namespace", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("file", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("file", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("dir", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("page", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startStringValue)); m_startElementHandlers.insert("docanchor", new StartElementHandler(this,&TagFileParser::startStringValue));
m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement)); m_startElementHandlers.insert("tagfile", new StartElementHandler(this,&TagFileParser::startIgnoreElement));
...@@ -623,6 +659,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -623,6 +659,7 @@ class TagFileParser : public QXmlDefaultHandler
m_endElementHandlers.insert("class" , new EndElementHandler(this,&TagFileParser::endClass)); m_endElementHandlers.insert("class" , new EndElementHandler(this,&TagFileParser::endClass));
m_endElementHandlers.insert("namespace", new EndElementHandler(this,&TagFileParser::endNamespace)); m_endElementHandlers.insert("namespace", new EndElementHandler(this,&TagFileParser::endNamespace));
m_endElementHandlers.insert("file", new EndElementHandler(this,&TagFileParser::endFile)); m_endElementHandlers.insert("file", new EndElementHandler(this,&TagFileParser::endFile));
m_endElementHandlers.insert("dir", new EndElementHandler(this,&TagFileParser::endDir));
m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage)); m_endElementHandlers.insert("page", new EndElementHandler(this,&TagFileParser::endPage));
m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor)); m_endElementHandlers.insert("docanchor", new EndElementHandler(this,&TagFileParser::endDocAnchor));
m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement)); m_endElementHandlers.insert("tagfile", new EndElementHandler(this,&TagFileParser::endIgnoreElement));
...@@ -678,6 +715,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -678,6 +715,7 @@ class TagFileParser : public QXmlDefaultHandler
QList<TagGroupInfo> m_tagFileGroups; QList<TagGroupInfo> m_tagFileGroups;
QList<TagPageInfo> m_tagFilePages; QList<TagPageInfo> m_tagFilePages;
QList<TagPackageInfo> m_tagFilePackages; QList<TagPackageInfo> m_tagFilePackages;
QList<TagDirInfo> m_tagFileDirs;
QDict<StartElementHandler> m_startElementHandlers; QDict<StartElementHandler> m_startElementHandlers;
QDict<EndElementHandler> m_endElementHandlers; QDict<EndElementHandler> m_endElementHandlers;
TagClassInfo *m_curClass; TagClassInfo *m_curClass;
...@@ -686,6 +724,7 @@ class TagFileParser : public QXmlDefaultHandler ...@@ -686,6 +724,7 @@ class TagFileParser : public QXmlDefaultHandler
TagPackageInfo *m_curPackage; TagPackageInfo *m_curPackage;
TagGroupInfo *m_curGroup; TagGroupInfo *m_curGroup;
TagPageInfo *m_curPage; TagPageInfo *m_curPage;
TagDirInfo *m_curDir;
TagMemberInfo *m_curMember; TagMemberInfo *m_curMember;
TagIncludeInfo *m_curIncludes; TagIncludeInfo *m_curIncludes;
QCString m_curString; QCString m_curString;
...@@ -872,6 +911,25 @@ void TagFileParser::dump() ...@@ -872,6 +911,25 @@ void TagFileParser::dump()
msg(" title `%s'\n",pd->title.data()); msg(" title `%s'\n",pd->title.data());
msg(" filename `%s'\n",pd->filename.data()); msg(" filename `%s'\n",pd->filename.data());
} }
//============== DIRS
QListIterator<TagDirInfo> ldi(m_tagFileDirs);
TagDirInfo *dd;
for (;(dd=ldi.current());++ldi)
{
msg("dir `%s'\n",dd->name.data());
msg(" path `%s'\n",dd->path.data());
QStringList::Iterator it;
for ( it = dd->fileList.begin();
it != dd->fileList.end(); ++it )
{
msg( " file: %s \n", (*it).latin1() );
}
for ( it = dd->subdirList.begin();
it != dd->subdirList.end(); ++it )
{
msg( " subdir: %s \n", (*it).latin1() );
}
}
} }
void TagFileParser::addDocAnchors(Entry *e,QStrList &l) void TagFileParser::addDocAnchors(Entry *e,QStrList &l)
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
*/ */
#define CN_SPC #define CN_SPC
class TranslatorChinese : public TranslatorAdapter_1_3_9 class TranslatorChinese : public Translator
{ {
public: public:
/*! Used for identification of the language. The identification /*! Used for identification of the language. The identification
...@@ -1482,6 +1482,69 @@ class TranslatorChinese : public TranslatorAdapter_1_3_9 ...@@ -1482,6 +1482,69 @@ class TranslatorChinese : public TranslatorAdapter_1_3_9
/* return filename + " Source File"; */ /* return filename + " Source File"; */
return filename + CN_SPC"源文件"; return filename + CN_SPC"源文件";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
/* { return "Directory Hierarchy"; } */
{
return "$(BL\\录结$(DC((B";
}
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
/* { return "Directory Documentation"; } */
{
return "$(BL\\录J8[c(B";
}
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
/* { return "Directories"; } */
{
return "$(BL\\录(B";
}
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
/* { return "This directory hierarchy is sorted roughly, " */
/* "but not completely, alphabetically:"; */
/* } */
{
return "$(BL\\录结$(DC(仅经过$(BBgCWE*GSNs!$VuL$40A40D;zJl顺=x(B";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
/* { QCString result=dirName; result+=" Directory Reference"; return result; } */
{
QCString result=dirName;
result+=CN_SPC"$(BL\\录;29M(B";
return result;
}
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool, bool)
{
/* QCString result((first_capital ? "Director" : "director")); */
/* if (singular) result+="y"; else result+="ies"; */
/* return result; */
return "$(BL\\录(B";
}
}; };
......
...@@ -130,6 +130,7 @@ ...@@ -130,6 +130,7 @@
// 2004/02/26 - trLegendDocs() updated. // 2004/02/26 - trLegendDocs() updated.
// 2004/02/27 - Text inside the trCallGraph() corrected. // 2004/02/27 - Text inside the trCallGraph() corrected.
// 2004/06/16 - The new method "since 1.3.8" implemented. // 2004/06/16 - The new method "since 1.3.8" implemented.
// 2004/09/14 - The new methods "since 1.3.9" implemented.
// Todo // Todo
// ---- // ----
...@@ -149,7 +150,7 @@ ...@@ -149,7 +150,7 @@
// Windows version. The version which does not call the function is // Windows version. The version which does not call the function is
// probably slightly faster. // probably slightly faster.
class TranslatorCzech : public TranslatorAdapter_1_3_9 class TranslatorCzech : public Translator
{ {
private: private:
/*! The decode() inline assumes the source written in the /*! The decode() inline assumes the source written in the
...@@ -1673,6 +1674,59 @@ class TranslatorCzech : public TranslatorAdapter_1_3_9 ...@@ -1673,6 +1674,59 @@ class TranslatorCzech : public TranslatorAdapter_1_3_9
return decode("Zdrojový soubor ") + filename; return decode("Zdrojový soubor ") + filename;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return decode("Hierarchie adresáøù"); }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return decode("Dokumentace k adresáøùm"); }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return decode("Adresáøe"); }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{
return decode("Následující hierarchie adresáøù je zhruba, "
"ale ne úplnì, øazena podle abecedy:");
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{
QCString result = "Reference k adresáøi ";
result += dirName;
return decode(result);
}
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Adresáø" : "adresáø"));
if ( ! singular)
result += "e";
return decode(result);
}
}; };
#endif // TRANSLATOR_CZ_H #endif // TRANSLATOR_CZ_H
...@@ -87,13 +87,22 @@ ...@@ -87,13 +87,22 @@
// 2004/08/01 Jens Seidel (jensseidel@users.sourceforge.net) // 2004/08/01 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.3.8" version // - Updated for "new since 1.3.8" version
// //
// 2004/09/19 Jens Seidel (jensseidel@users.sourceforge.net)
// - Updated for "new since 1.3.9" version
//
// 2004/09/25 Jens Seidel (jensseidel@users.sourceforge.net)
// - changed "Typendefinitionen" to "Typdefinitionen" in
// trFileMembersDescription() and trTypedefs()
// - added a dash after (file, ...) names and in front of description
// - changed "Eigenschaften" to "Propertys" (yeah, not ..."ies")
//
// Todo: // Todo:
// - see FIXME // - see FIXME
#ifndef TRANSLATOR_DE_H #ifndef TRANSLATOR_DE_H
#define TRANSLATOR_DE_H #define TRANSLATOR_DE_H
class TranslatorGerman : public TranslatorAdapter_1_3_9 class TranslatorGerman : public Translator
{ {
public: public:
...@@ -341,7 +350,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9 ...@@ -341,7 +350,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9
if (!extractAll) result+="dokumentierten "; if (!extractAll) result+="dokumentierten ";
if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C")) if (Config_getBool("OPTIMIZE_OUTPUT_FOR_C"))
{ {
result+="Funktionen, Variablen, Makros, Aufzählungen und Typendefinitionen"; result+="Funktionen, Variablen, Makros, Aufzählungen und Typdefinitionen";
} }
else else
{ {
...@@ -471,7 +480,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9 ...@@ -471,7 +480,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9
* list of typedefs * list of typedefs
*/ */
virtual QCString trTypedefs() virtual QCString trTypedefs()
{ return "Typendefinitionen"; } { return "Typdefinitionen"; }
/*! This is used in the documentation of a file as a header before the /*! This is used in the documentation of a file as a header before the
* list of enumerations * list of enumerations
...@@ -685,7 +694,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9 ...@@ -685,7 +694,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9
virtual QCString trFileReference(const char *fileName) virtual QCString trFileReference(const char *fileName)
{ {
QCString result=fileName; QCString result=fileName;
result+=" Dateireferenz"; result+="-Dateireferenz";
return result; return result;
} }
...@@ -693,7 +702,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9 ...@@ -693,7 +702,7 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9
virtual QCString trNamespaceReference(const char *namespaceName) virtual QCString trNamespaceReference(const char *namespaceName)
{ {
QCString result=namespaceName; QCString result=namespaceName;
result+=" Namensbereichsreferenz"; result+="-Namensbereichsreferenz";
return result; return result;
} }
...@@ -1214,13 +1223,13 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9 ...@@ -1214,13 +1223,13 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9
/*! Used as a section header for IDL properties */ /*! Used as a section header for IDL properties */
virtual QCString trProperties() virtual QCString trProperties()
{ {
return "Eigenschaften"; return "Propertys";
} }
/*! Used as a section header for IDL property documentation */ /*! Used as a section header for IDL property documentation */
virtual QCString trPropertyDocumentation() virtual QCString trPropertyDocumentation()
{ {
return "Dokumentation der Eigenschaften"; return "Dokumentation der Propertys";
} }
////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////
...@@ -1619,6 +1628,52 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9 ...@@ -1619,6 +1628,52 @@ class TranslatorGerman : public TranslatorAdapter_1_3_9
return filename + " Quellcode"; return filename + " Quellcode";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Verzeichnishierarchie"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Verzeichnisdokumentation"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Verzeichnisse"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Diese Verzeichnishierarchie ist -mit Einschränkungen- "
"alphabetisch sortiert:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result=dirName; result+=" Verzeichnisreferenz"; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool, bool singular)
{
QCString result("Verzeichnis");
if (!singular) result+="se";
return result;
}
}; };
#endif #endif
...@@ -359,7 +359,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_8 ...@@ -359,7 +359,7 @@ class TranslatorSpanish : public TranslatorAdapter_1_3_8
* for the author section in man pages. */ * for the author section in man pages. */
virtual QCString trAuthor(bool first_capital, bool singular) virtual QCString trAuthor(bool first_capital, bool singular)
{ {
QCString result((first_capital ? "Author" : "author")); QCString result((first_capital ? "Autor" : "autor"));
if (!singular) result+="s"; if (!singular) result+="s";
return result; return result;
} }
......
...@@ -55,11 +55,14 @@ ...@@ -55,11 +55,14 @@
// //
// 2004/06/21 // 2004/06/21
// - Added strings for 1.3.8 // - Added strings for 1.3.8
//
// 2004/09/15
// - Added strings for 1.3.9
#ifndef TRANSLATOR_HR_H #ifndef TRANSLATOR_HR_H
#define TRANSLATOR_HR_H #define TRANSLATOR_HR_H
class TranslatorCroatian : public TranslatorAdapter_1_3_9 class TranslatorCroatian : public Translator
{ {
private: private:
/*! to avoid macro redefinition from translator_cz.h */ /*! to avoid macro redefinition from translator_cz.h */
...@@ -1226,6 +1229,51 @@ class TranslatorCroatian : public TranslatorAdapter_1_3_9 ...@@ -1226,6 +1229,51 @@ class TranslatorCroatian : public TranslatorAdapter_1_3_9
return "Izvorni kod datoteke " + filename; return "Izvorni kod datoteke " + filename;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Stablo direktorija"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Dokumentacija direktorija"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Direktoriji"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Stablo direktorija sortirano abecednim redom:"; }
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result= "Opis direktorija "; result += dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Direktorij" : "direktorij"));
if (!singular) result+="i";
return result;
}
}; };
#endif #endif
...@@ -29,7 +29,7 @@ ...@@ -29,7 +29,7 @@
#ifndef TRANSLATOR_HU_H #ifndef TRANSLATOR_HU_H
#define TRANSLATOR_HU_H #define TRANSLATOR_HU_H
class TranslatorHungarian : public TranslatorAdapter_1_3_9 class TranslatorHungarian : public Translator
{ {
private: private:
const char * zed(char c) const char * zed(char c)
...@@ -1526,6 +1526,52 @@ class TranslatorHungarian : public TranslatorAdapter_1_3_9 ...@@ -1526,6 +1526,52 @@ class TranslatorHungarian : public TranslatorAdapter_1_3_9
return filename + " Forrásfájl"; return filename + " Forrásfájl";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Könyvtárhierarchia"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Könyvtárak dokumentációja"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Könyvtárak"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Majdnem (de nem teljesen) betûrendbe szedett "
"könyvtárhierarchia:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result=dirName; result+=" könyvtárreferencia"; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool /*singular*/)
{
QCString result((first_capital ? "Könyvtár" : "könyvtár"));
//if (singular) result+="y"; else result+="ies";
return result;
}
}; };
#endif #endif
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
* *
* Revision history * Revision history
* *
* 2004/09: translated new items used since version 1.3.9
* 2004/06: translated new items used since version 1.3.8 * 2004/06: translated new items used since version 1.3.8
* 2003/11: translated new items used since version 1.3.3 * 2003/11: translated new items used since version 1.3.3
* 2003/06: translated new items used since version 1.3.1 * 2003/06: translated new items used since version 1.3.1
...@@ -71,7 +72,7 @@ ...@@ -71,7 +72,7 @@
#ifndef TRANSLATOR_IT_H #ifndef TRANSLATOR_IT_H
#define TRANSLATOR_IT_H #define TRANSLATOR_IT_H
class TranslatorItalian : public TranslatorAdapter_1_3_9 class TranslatorItalian : public Translator
{ {
public: public:
...@@ -1516,6 +1517,51 @@ class TranslatorItalian : public TranslatorAdapter_1_3_9 ...@@ -1516,6 +1517,51 @@ class TranslatorItalian : public TranslatorAdapter_1_3_9
return " File sorgente " + filename ; return " File sorgente " + filename ;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Gerarchia delle directory"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Documentazione delle directory"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Directory"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Questa gerarchia di directory è ordinata "
"approssimativamente, ma non completamente, in ordine alfabetico:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result="Riferimenti per la directory "; result+=dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool)
{
QCString result((first_capital ? "Directory" : "directory"));
return result;
}
}; };
#endif #endif
...@@ -13,14 +13,14 @@ ...@@ -13,14 +13,14 @@
* Documents produced by Doxygen are derivative works derived from the * Documents produced by Doxygen are derivative works derived from the
* input used in their production; they are not affected by this license. * input used in their production; they are not affected by this license.
* *
* Polish translation was updated to version 1.3.8 by * Polish translation was updated to version 1.3.9 by
* Piotr Kaminski (Piotr.Kaminski@ctm.gdynia.pl) * Piotr Kaminski (Piotr.Kaminski@ctm.gdynia.pl)
*/ */
#ifndef TRANSLATOR_PL_H #ifndef TRANSLATOR_PL_H
#define TRANSLATOR_PL_H #define TRANSLATOR_PL_H
class TranslatorPolish : public TranslatorAdapter_1_3_9 class TranslatorPolish : public Translator
{ {
private: private:
/*! to avoid macro redefinition from translator_pl.h */ /*! to avoid macro redefinition from translator_pl.h */
...@@ -1511,7 +1511,51 @@ class TranslatorPolish : public TranslatorAdapter_1_3_9 ...@@ -1511,7 +1511,51 @@ class TranslatorPolish : public TranslatorAdapter_1_3_9
return "Plik ¼ród³owy " + filename; return "Plik ¼ród³owy " + filename;
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Struktura katalogów"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Dokumentacja katalogów"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Katalogi"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Ta struktura katalogów jest posortowana jest z grubsza, "
"choæ nie ca³kowicie, alfabetycznie:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result="Dokumentacja katalogu "; result+=dirName; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Katalog" : "katalog"));
if (! singular) result+="i";
return result;
}
}; };
#endif #endif
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
* *
* Nickolay Semyonov * Nickolay Semyonov
* Andrey V. Stolyarov released Feb 14, 2001 * Andrey V. Stolyarov released Feb 14, 2001
* Alexandr V. Chelpanov <cav@cryptopro.ru> released Jun 16, 2004 * Alexandr V. Chelpanov <cav@cryptopro.ru> released Sep 25, 2004
* *
* list documentation . * list documentation .
* *
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
#ifndef TRANSLATOR_RU_H #ifndef TRANSLATOR_RU_H
#define TRANSLATOR_RU_H #define TRANSLATOR_RU_H
class TranslatorRussian : public TranslatorAdapter_1_3_9 class TranslatorRussian : public Translator
{ {
private: private:
/*! The Decode() inline assumes the source written in the /*! The Decode() inline assumes the source written in the
...@@ -1570,7 +1570,51 @@ class TranslatorRussian : public TranslatorAdapter_1_3_9 ...@@ -1570,7 +1570,51 @@ class TranslatorRussian : public TranslatorAdapter_1_3_9
*/ */
virtual QCString trSourceFile(QCString& filename) virtual QCString trSourceFile(QCString& filename)
{ {
return " " + filename; return decode( " " + filename );
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return decode( " " ); }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return decode( "" ); }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return decode( " " ); }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return decode( " " ); }
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result=QCString(" ")+ dirName; return decode( result ); }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "" : ""));
if (singular) result+=""; else result+="";
return decode( result );
} }
}; };
......
...@@ -69,7 +69,7 @@ Problem! ...@@ -69,7 +69,7 @@ Problem!
#ifndef TRANSLATOR_SE_H #ifndef TRANSLATOR_SE_H
#define TRANSLATOR_SE_H #define TRANSLATOR_SE_H
class TranslatorSwedish : public TranslatorAdapter_1_3_8 class TranslatorSwedish : public Translator
{ {
public: public:
...@@ -1401,6 +1401,65 @@ class TranslatorSwedish : public TranslatorAdapter_1_3_8 ...@@ -1401,6 +1401,65 @@ class TranslatorSwedish : public TranslatorAdapter_1_3_8
return "Trffar:"; return "Trffar:";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.8
//////////////////////////////////////////////////////////////////////////
/*! This is used in HTML as the title of page with source code for file filename
*/
virtual QCString trSourceFile(QCString& filename)
{
return "Kllkodsfilen " + filename;
}
//////////////////////////////////////////////////////////////////////////
// new since 1.3.9
//////////////////////////////////////////////////////////////////////////
/*! This is used as the name of the chapter containing the directory
* hierarchy.
*/
virtual QCString trDirIndex()
{ return "Katalogstruktur"; }
/*! This is used as the name of the chapter containing the documentation
* of the directories.
*/
virtual QCString trDirDocumentation()
{ return "Katalogdokumentation"; }
/*! This is used as the title of the directory index and also in the
* Quick links of a HTML page, to link to the directory hierarchy.
*/
virtual QCString trDirectories()
{ return "Kataloger"; }
/*! This returns a sentences that introduces the directory hierarchy.
* and the fact that it is sorted alphabetically per level
*/
virtual QCString trDirDescription()
{ return "Den hr katalogen r grovt sorterad, "
"men inte helt, i alfabetisk ordning:";
}
/*! This returns the title of a directory page. The name of the
* directory is passed via \a dirName.
*/
virtual QCString trDirReference(const char *dirName)
{ QCString result=dirName; result+=" Katalogreferens"; return result; }
/*! This returns the word directory with or without starting capital
* (\a first_capital) and in sigular or plural form (\a singular).
*/
virtual QCString trDir(bool first_capital, bool singular)
{
QCString result((first_capital ? "Katalog" : "katalog"));
if (!singular) result+="er";
return result;
}
}; };
#endif #endif
This diff is collapsed.
...@@ -750,6 +750,8 @@ void XmlDocVisitor::visitPost(DocParamSect *) ...@@ -750,6 +750,8 @@ void XmlDocVisitor::visitPost(DocParamSect *)
void XmlDocVisitor::visitPre(DocParamList *pl) void XmlDocVisitor::visitPre(DocParamList *pl)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "<parameteritem>" << endl;
m_t << "<parameternamelist>" << endl;
QStrListIterator li(pl->parameters()); QStrListIterator li(pl->parameters());
const char *s; const char *s;
for (li.toFirst();(s=li.current());++li) for (li.toFirst();(s=li.current());++li)
...@@ -776,13 +778,15 @@ void XmlDocVisitor::visitPre(DocParamList *pl) ...@@ -776,13 +778,15 @@ void XmlDocVisitor::visitPre(DocParamList *pl)
filter(s); filter(s);
m_t << "</parametername>" << endl; m_t << "</parametername>" << endl;
} }
m_t << "</parameternamelist>" << endl;
m_t << "<parameterdescription>" << endl; m_t << "<parameterdescription>" << endl;
} }
void XmlDocVisitor::visitPost(DocParamList *) void XmlDocVisitor::visitPost(DocParamList *)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "</parameterdescription>"; m_t << "</parameterdescription>" << endl;
m_t << "</parameteritem>" << endl;
} }
void XmlDocVisitor::visitPre(DocXRefItem *x) void XmlDocVisitor::visitPre(DocXRefItem *x)
......
...@@ -718,7 +718,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De ...@@ -718,7 +718,9 @@ static void generateXMLForMember(MemberDef *md,QTextStream &ti,QTextStream &t,De
t << " <param><defname>" << a->type << "</defname></param>" << endl; t << " <param><defname>" << a->type << "</defname></param>" << endl;
} }
} }
if (!md->initializer().isEmpty()) // avoid that extremely large tables are written to the output.
// todo: it's better to adhere to MAX_INITIALIZER_LINES.
if (!md->initializer().isEmpty() && md->initializer().length()<2000)
{ {
t << " <initializer>"; t << " <initializer>";
linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->initializer()); linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md->name(),md->initializer());
......
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