Commit 16a0bd88 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.3

parent aee36e26
...@@ -141,7 +141,7 @@ MAN_LINKS = NO ...@@ -141,7 +141,7 @@ MAN_LINKS = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options related to the XML output # configuration options related to the XML output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
GENERATE_XML = YES GENERATE_XML = NO
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
# configuration options for the AutoGen Definitions output # configuration options for the AutoGen Definitions output
#--------------------------------------------------------------------------- #---------------------------------------------------------------------------
......
DOXYGEN Version 1.3.2-20030717 DOXYGEN Version 1.3.3
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 (17 July 2003) Dimitri van Heesch (25 July 2003)
DOXYGEN Version 1.3.2_20030717 DOXYGEN Version 1.3.3
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) (17 July 2003) Dimitri van Heesch (dimitri@stack.nl) (25 July 2003)
1.3.2-20030717 1.3.3
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- DTD describing the grammar used in doxygen's XML output -->
<!-- Version 0.1 December 25, 2001 -->
<!-- Defined by Angelo Hulshout, based on works of Dimitri van Heesch -->
<!-- standard character entities -->
<!ENTITY lt "&#38;#60;">
<!ENTITY gt "&#62;">
<!ENTITY amp "&#38;#38;">
<!ENTITY apos "&#39;">
<!ENTITY quot "&#34;">
<!--
Document root
-->
<!ELEMENT doxygen (compounddef)*>
<!--
Compound related entities and elements
-->
<!ENTITY % compound-req.att
'id ID #REQUIRED
kind (group|file|namespace|
class|struct|union|
interface|dispinterface|
valuetype|library) #REQUIRED'
>
<!ENTITY % ref-req.att 'idref IDREF #REQUIRED'
>
<!ENTITY % inheritcompref-req.att
'%ref-req.att;
prot (public|protected|private) #REQUIRED
virt (non-virtual|virtual) #REQUIRED'
>
<!ELEMENT compounddef (compoundname,
basecompoundref*,
derivedcompoundref*,
sectiondef*,
briefdescription,
detaileddescription,
inheritancegraph?,
collaborationgraph?,
programlisting?,
sourcecode?,
location?
)
>
<!ATTLIST compounddef %compound-req.att;>
<!ELEMENT compoundname (#PCDATA)>
<!ELEMENT location (#PCDATA)>
<!ATTLIST location file CDATA #REQUIRED line CDATA #REQUIRED >
<!ELEMENT compoundref EMPTY>
<!ATTLIST compoundref %ref-req.att;>
<!ELEMENT basecompoundref EMPTY>
<!ATTLIST basecompoundref %inheritcompref-req.att;>
<!ELEMENT derivedcompoundref EMPTY>
<!ATTLIST derivedcompoundref %inheritcompref-req.att;>
<!ELEMENT memberdef (#PCDATA|type|name|briefdescription|detaileddescription|location|param|initializer|enumvalue)*>
<!ATTLIST memberdef kind (define|property|variable|typedef|enum|function|signal|prototype|friend|dcop|slot) #REQUIRED id CDATA #REQUIRED virt (normal|virtual|pure-virtual) #REQUIRED prot (public|protected|private) #REQUIRED>
<!ELEMENT briefdescription (#PCDATA|para)*>
<!ELEMENT detaileddescription (#PCDATA|para)*>
<!--
Compound attributes related entities and elements
-->
<!-- required attributes for member sections -->
<!ENTITY % sec-req.att 'kind (user
|public-type
|public-func
|public-attrib
|public-slot
|public-static-func
|public-static-attrib
|protected-type
|protected-func
|protected-attrib
|protected-slot
|protected-static-func
|protected-static-attrib
|private-type
|private-func
|private-attrib
|private-slot
|private-static-func
|private-static-attrib
|signal
|friend
|related
|define|prototype|typedef|enum|func|var
|dcop-func
|property
) #REQUIRED
'
>
<!ENTITY % mem-req.att 'id ID #REQUIRED'>
<!-- optional attributes for function -->
<!ENTITY % func-opt.att 'virt (virtual|pure-virtual) #IMPLIED'>
<!ELEMENT memberref (#PCDATA)>
<!ATTLIST memberref %ref-req.att;>
<!ELEMENT sectionlist (sectiondef)+>
<!ELEMENT sectiondef (memberdef|memberlist)*>
<!ATTLIST sectiondef %sec-req.att;>
<!ELEMENT memberlist (functiondef|variabledef|typedef|definedef|enumdef)+>
<!ELEMENT functiondef (type?,name,parameterlist)>
<!ATTLIST functiondef %mem-req.att; %func-opt.att;>
<!ELEMENT variabledef (type,name,array?,initializer?)>
<!ATTLIST variabledef %mem-req.att;>
<!ELEMENT parameterlist (title|parametername|parameterdescription)*>
<!ATTLIST parameterlist kind (param|retval|exception) #REQUIRED>
<!ELEMENT param (attributes?,type?,declname?,defname?,array?,defval?)>
<!ELEMENT parametername (#PCDATA)>
<!ELEMENT parameterdescription (#PCDATA|para)*>
<!ELEMENT defparameterlist (defarg)*>
<!ELEMENT defarg (#PCDATA)>
<!--
Programming language declaration related entities and elements
-->
<!ELEMENT name (#PCDATA)>
<!ELEMENT typedef (type,name)>
<!ATTLIST typedef %mem-req.att;>
<!ELEMENT definedef (name,defparameterlist?,initializer?)>
<!ATTLIST definedef %mem-req.att;>
<!ELEMENT enumdef (name,enumvaluelist)>
<!ATTLIST enumdef %mem-req.att;>
<!ELEMENT slotdef (type,name,parameterlist)>
<!ATTLIST slotdef %mem-req.att;>
<!ELEMENT signaldef (type,name,parameterlist)>
<!ATTLIST signaldef %mem-req.att;>
<!ELEMENT enumvaluelist (enumvalue)*>
<!ELEMENT enumvalue (name,initializer?)>
<!ELEMENT declname (#PCDATA)>
<!ELEMENT defname (#PCDATA)>
<!ELEMENT type (#PCDATA|memberref|compoundref|compounddef|ref)*>
<!ELEMENT defval (#PCDATA|memberref|compoundref)*>
<!ELEMENT initializer (#PCDATA|memberref|compoundref|ref)*>
<!ELEMENT array (#PCDATA)>
<!ELEMENT attributes (#PCDATA)>
<!--
Graph related entities and elements
-->
<!ELEMENT collaborationgraph (node)*>
<!ELEMENT inheritancegraph (node)*>
<!ELEMENT node (label|link|childnode)*>
<!ATTLIST node id CDATA #REQUIRED>
<!ELEMENT childnode (edgelabel)*>
<!ATTLIST childnode id CDATA #REQUIRED relation CDATA #REQUIRED>
<!ELEMENT label (#PCDATA)>
<!ELEMENT link EMPTY>
<!ATTLIST link id CDATA #REQUIRED>
<!ELEMENT edgelabel (#PCDATA)>
<!--
Source code listing related entities and elements
-->
<!ELEMENT codeline (#PCDATA|highlight|ref)*>
<!ELEMENT linenumber (#PCDATA|anchor)*>
<!ATTLIST linenumber line CDATA #IMPLIED refid CDATA #IMPLIED>
<!ELEMENT sourcecode (linenumber|codeline|highlight|ref)*>
<!ELEMENT itemizedlist (listitem)*>
<!ELEMENT listitem (#PCDATA|para)*>
<!ELEMENT programlisting (#PCDATA|linenumber|codeline|linebreak|highlight)*>
<!--
Hypertext related entities and elements
-->
<!ELEMENT ulink (#PCDATA)>
<!ATTLIST ulink url CDATA #REQUIRED>
<!ELEMENT anchor (ref)>
<!ATTLIST anchor id CDATA #REQUIRED>
<!ELEMENT ref (#PCDATA)>
<!ATTLIST ref idref CDATA #REQUIRED anchor CDATA #IMPLIED>
<!--
Documentation layout entities and elements
-->
<!--ELEMENT highlight (#PCDATA|ref)*-->
<!ELEMENT highlight ANY>
<!ATTLIST highlight class (preprocessor|keyword|keywordtype|keywordflow|stringliteral|charliteral|comment) #REQUIRED>
<!ELEMENT linebreak EMPTY>
<!--ELEMENT simplesect (title|para)*-->
<!ELEMENT simplesect ANY>
<!ATTLIST simplesect kind (see|return|author|version|since|date|bug|note|warning|par|deprecated|pre|post|invariant|remark|attention|todo|test|rcs|enumvalues|examples) #REQUIRED>
<!--ELEMENT computeroutput (#PCDATA)-->
<!ELEMENT computeroutput ANY>
<!--ELEMENT emphasis (#PCDATA|ref)*-->
<!ELEMENT emphasis ANY>
<!--ELEMENT title (#PCDATA|ref)*-->
<!ELEMENT title ANY>
<!--ELEMENT para (#PCDATA|computeroutput|ref|emphasis|parameterlist|simplesect|ulink|programlisting|itemizedlist|linebreak)*-->
<!ELEMENT para ANY>
...@@ -32,6 +32,7 @@ class IDocIterator; ...@@ -32,6 +32,7 @@ class IDocIterator;
class ICompound; class ICompound;
class ISection; class ISection;
class INode; class INode;
class IDocInternal;
/*! \brief Read only interface to a string. /*! \brief Read only interface to a string.
*/ */
...@@ -165,7 +166,8 @@ class IDoc ...@@ -165,7 +166,8 @@ class IDoc
TocItem, // 33 -> IDocTocItem TocItem, // 33 -> IDocTocItem
Anchor, // 34 -> IDocAnchor Anchor, // 34 -> IDocAnchor
Symbol, // 35 -> IDocSymbol Symbol, // 35 -> IDocSymbol
Root // 36 -> IDocRoot Internal, // 36 -> IDocInternal
Root // 37 -> IDocRoot
}; };
virtual Kind kind() const = 0; virtual Kind kind() const = 0;
}; };
...@@ -397,7 +399,17 @@ class IDocSection : public IDoc ...@@ -397,7 +399,17 @@ class IDocSection : public IDoc
public: public:
virtual const IString * id() const = 0; virtual const IString * id() const = 0;
virtual int level() const = 0; virtual int level() const = 0;
virtual IDocIterator *title() const = 0; virtual IDocTitle *title() const = 0;
virtual IDocIterator *paragraphs() const = 0;
virtual IDocIterator *subSections() const = 0;
virtual IDocInternal *internal() const = 0;
};
class IDocInternal : public IDoc
{
public:
virtual IDocIterator *paragraphs() const = 0;
virtual IDocIterator *subSections() const = 0;
}; };
class IDocTocList : public IDoc class IDocTocList : public IDoc
......
...@@ -2006,20 +2006,25 @@ IDocIterator *ParagraphHandler::contents() const ...@@ -2006,20 +2006,25 @@ IDocIterator *ParagraphHandler::contents() const
//---------------------------------------------------------------------- //----------------------------------------------------------------------
DocSectionHandler::DocSectionHandler(IBaseHandler *parent,int level) DocSectionHandler::DocSectionHandler(IBaseHandler *parent,int level)
: m_parent(parent), m_level(level) : m_parent(parent), m_internal(0), m_level(level), m_title(0)
{ {
m_children.setAutoDelete(TRUE);
m_markupHandler = new MarkupHandler(m_children,m_curString);
setFallBackHandler(m_markupHandler);
addStartHandler("ref",this,&DocSectionHandler::startRef);
QString sectionKey; QString sectionKey;
m_paragraphs.setAutoDelete(TRUE);
m_subsections.setAutoDelete(TRUE);
addStartHandler("title",this,&DocSectionHandler::startTitle);
addStartHandler("para",this,&DocSectionHandler::startParagraph);
if (level<6)
{
sectionKey.sprintf("sect%d",level+1);
addStartHandler(sectionKey,this,&DocSectionHandler::startSubSection);
}
addStartHandler("internal",this,&DocSectionHandler::startInternal);
sectionKey.sprintf("sect%d",level); sectionKey.sprintf("sect%d",level);
addEndHandler(sectionKey,this,&DocSectionHandler::endDocSection); addEndHandler(sectionKey,this,&DocSectionHandler::endDocSection);
} }
DocSectionHandler::~DocSectionHandler() DocSectionHandler::~DocSectionHandler()
{ {
delete m_markupHandler;
} }
void DocSectionHandler::startDocSection(const QXmlAttributes& attrib) void DocSectionHandler::startDocSection(const QXmlAttributes& attrib)
...@@ -2027,44 +2032,112 @@ void DocSectionHandler::startDocSection(const QXmlAttributes& attrib) ...@@ -2027,44 +2032,112 @@ void DocSectionHandler::startDocSection(const QXmlAttributes& attrib)
m_parent->setDelegate(this); m_parent->setDelegate(this);
debug(2,"Start docsection\n"); debug(2,"Start docsection\n");
m_id = attrib.value("id"); m_id = attrib.value("id");
m_curString="";
} }
void DocSectionHandler::endDocSection() void DocSectionHandler::endDocSection()
{ {
addTextNode();
m_parent->setDelegate(0); m_parent->setDelegate(0);
debug(2,"End docsection\n"); debug(2,"End docsection\n");
} }
void DocSectionHandler::addTextNode() void DocSectionHandler::startSubSection(const QXmlAttributes& attrib)
{ {
if (!m_curString.isEmpty()) DocSectionHandler *secHandler = new DocSectionHandler(this,m_level+1);
{ secHandler->startDocSection(attrib);
m_children.append( m_subsections.append(secHandler);
new TextNode(m_curString,
m_markupHandler->markup(),
m_markupHandler->headingLevel()
)
);
debug(2,"addTextNode() text=\"%s\" markup=%x headingLevel=%d\n",
m_curString.data(),m_markupHandler->markup(),m_markupHandler->headingLevel());
m_curString="";
}
} }
void DocSectionHandler::startRef(const QXmlAttributes& attrib) void DocSectionHandler::startParagraph(const QXmlAttributes& attrib)
{
ParagraphHandler *parHandler = new ParagraphHandler(this);
parHandler->startParagraph(attrib);
m_paragraphs.append(parHandler);
}
void DocSectionHandler::startInternal(const QXmlAttributes& attrib)
{
m_internal = new DocInternalHandler(this,m_level);
m_internal->startInternal(attrib);
}
void DocSectionHandler::startTitle(const QXmlAttributes& attrib)
{
m_title = new TitleHandler(this);
m_title->startTitle(attrib);
}
IDocIterator *DocSectionHandler::paragraphs() const
{
return new DocSectionParaIterator(*this);
}
IDocIterator *DocSectionHandler::subSections() const
{
return new DocSectionSubIterator(*this);
}
IDocInternal *DocSectionHandler::internal() const
{
return m_internal;
}
//----------------------------------------------------------------------
// DocInternal
//----------------------------------------------------------------------
DocInternalHandler::DocInternalHandler(IBaseHandler *parent,int level)
: m_parent(parent), m_level(level)
{
m_paragraphs.setAutoDelete(TRUE);
m_subsections.setAutoDelete(TRUE);
addStartHandler("para",this,&DocInternalHandler::startParagraph);
QString sectionKey;
sectionKey.sprintf("sect%d",level+1);
addStartHandler(sectionKey,this,&DocInternalHandler::startSubSection);
addEndHandler("internal",this,&DocInternalHandler::endInternal);
}
DocInternalHandler::~DocInternalHandler()
{ {
RefHandler *ref = new RefHandler(this);
ref->startRef(attrib);
m_children.append(ref);
} }
IDocIterator *DocSectionHandler::title() const void DocInternalHandler::startInternal(const QXmlAttributes&)
{ {
return new DocSectionIterator(*this); m_parent->setDelegate(this);
debug(2,"Start internal\n");
}
void DocInternalHandler::endInternal()
{
m_parent->setDelegate(0);
debug(2,"End internal\n");
}
void DocInternalHandler::startSubSection(const QXmlAttributes& attrib)
{
DocSectionHandler *secHandler = new DocSectionHandler(this,m_level+1);
secHandler->startDocSection(attrib);
m_subsections.append(secHandler);
} }
void DocInternalHandler::startParagraph(const QXmlAttributes& attrib)
{
ParagraphHandler *parHandler = new ParagraphHandler(this);
parHandler->startParagraph(attrib);
m_paragraphs.append(parHandler);
}
IDocIterator *DocInternalHandler::paragraphs() const
{
return new DocInternalParaIterator(*this);
}
IDocIterator *DocInternalHandler::subSections() const
{
return new DocInternalSubIterator(*this);
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
// DocHandler // DocHandler
//---------------------------------------------------------------------- //----------------------------------------------------------------------
...@@ -2079,11 +2152,6 @@ DocHandler::DocHandler(IBaseHandler *parent) : m_parent(parent) ...@@ -2079,11 +2152,6 @@ DocHandler::DocHandler(IBaseHandler *parent) : m_parent(parent)
addStartHandler("para",this,&DocHandler::startParagraph); addStartHandler("para",this,&DocHandler::startParagraph);
addStartHandler("sect1",this,&DocHandler::startSect1); addStartHandler("sect1",this,&DocHandler::startSect1);
addStartHandler("sect2",this,&DocHandler::startSect2);
addStartHandler("sect3",this,&DocHandler::startSect3);
addStartHandler("sect4",this,&DocHandler::startSect4);
addStartHandler("sect5",this,&DocHandler::startSect5);
addStartHandler("sect6",this,&DocHandler::startSect6);
addStartHandler("title",this,&DocHandler::startTitle); addStartHandler("title",this,&DocHandler::startTitle);
addStartHandler("internal"); addStartHandler("internal");
} }
...@@ -2118,41 +2186,6 @@ void DocHandler::startSect1(const QXmlAttributes& attrib) ...@@ -2118,41 +2186,6 @@ void DocHandler::startSect1(const QXmlAttributes& attrib)
m_children.append(secHandler); m_children.append(secHandler);
} }
void DocHandler::startSect2(const QXmlAttributes& attrib)
{
DocSectionHandler *secHandler = new DocSectionHandler(this,2);
secHandler->startDocSection(attrib);
m_children.append(secHandler);
}
void DocHandler::startSect3(const QXmlAttributes& attrib)
{
DocSectionHandler *secHandler = new DocSectionHandler(this,3);
secHandler->startDocSection(attrib);
m_children.append(secHandler);
}
void DocHandler::startSect4(const QXmlAttributes& attrib)
{
DocSectionHandler *secHandler = new DocSectionHandler(this,4);
secHandler->startDocSection(attrib);
m_children.append(secHandler);
}
void DocHandler::startSect5(const QXmlAttributes& attrib)
{
DocSectionHandler *secHandler = new DocSectionHandler(this,5);
secHandler->startDocSection(attrib);
m_children.append(secHandler);
}
void DocHandler::startSect6(const QXmlAttributes& attrib)
{
DocSectionHandler *secHandler = new DocSectionHandler(this,6);
secHandler->startDocSection(attrib);
m_children.append(secHandler);
}
void DocHandler::startTitle(const QXmlAttributes& attrib) void DocHandler::startTitle(const QXmlAttributes& attrib)
{ {
TitleHandler *titleHandler = new TitleHandler(this); TitleHandler *titleHandler = new TitleHandler(this);
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#include "baseiterator.h" #include "baseiterator.h"
class ParagraphHandler; class ParagraphHandler;
class DocInternalHandler;
class LinkedTextImpl; class LinkedTextImpl;
class LinkedTextHandler; class LinkedTextHandler;
...@@ -72,6 +73,7 @@ DEFINE_CLS_IMPL(DocTocList); ...@@ -72,6 +73,7 @@ DEFINE_CLS_IMPL(DocTocList);
DEFINE_CLS_IMPL(DocTocItem); DEFINE_CLS_IMPL(DocTocItem);
DEFINE_CLS_IMPL(DocAnchor); DEFINE_CLS_IMPL(DocAnchor);
DEFINE_CLS_IMPL(DocSymbol); DEFINE_CLS_IMPL(DocSymbol);
DEFINE_CLS_IMPL(DocInternal);
DEFINE_CLS_IMPL(DocRoot); DEFINE_CLS_IMPL(DocRoot);
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -1186,42 +1188,95 @@ class SymbolHandler : public DocSymbolImpl, public BaseHandler<SymbolHandler> ...@@ -1186,42 +1188,95 @@ class SymbolHandler : public DocSymbolImpl, public BaseHandler<SymbolHandler>
/*! \brief Node representing a section. /*! \brief Node representing a section.
* *
*/ */
// children: text, ref // children: title, para, sect(n+1)
// children handled by MarkupHandler:
// bold, computeroutput, emphasis, center,
// small, subscript, superscript.
class DocSectionHandler : public DocSectionImpl, public BaseHandler<DocSectionHandler> class DocSectionHandler : public DocSectionImpl, public BaseHandler<DocSectionHandler>
{ {
friend class DocSectionIterator; friend class DocSectionParaIterator;
friend class DocSectionSubIterator;
public: public:
DocSectionHandler(IBaseHandler *parent,int level); DocSectionHandler(IBaseHandler *parent,int level);
virtual ~DocSectionHandler(); virtual ~DocSectionHandler();
virtual void startDocSection(const QXmlAttributes& attrib); virtual void startDocSection(const QXmlAttributes& attrib);
virtual void endDocSection(); virtual void endDocSection();
virtual void startRef(const QXmlAttributes& attrib); virtual void startTitle(const QXmlAttributes& attrib);
void addTextNode(); virtual void startSubSection(const QXmlAttributes& attrib);
virtual void startParagraph(const QXmlAttributes& attrib);
virtual void startInternal(const QXmlAttributes& attrib);
// IDocSection // IDocSection
virtual Kind kind() const { return DocImpl::Section; } virtual Kind kind() const { return DocImpl::Section; }
virtual const IString *id() const { return &m_id; } virtual const IString *id() const { return &m_id; }
virtual int level() const { return m_level; } virtual int level() const { return m_level; }
virtual IDocIterator *title() const; virtual IDocTitle *title() const { return m_title; }
virtual IDocIterator *paragraphs() const;
virtual IDocIterator *subSections() const;
virtual IDocInternal *internal() const;
private: private:
IBaseHandler *m_parent; IBaseHandler *m_parent;
QList<DocImpl> m_children; QList<DocImpl> m_paragraphs;
MarkupHandler *m_markupHandler; QList<DocImpl> m_subsections;
StringImpl m_id; DocInternalHandler *m_internal;
int m_level; StringImpl m_id;
int m_level;
TitleHandler *m_title;
}; };
class DocSectionIterator : public BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl> class DocSectionParaIterator : public BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>
{ {
public: public:
DocSectionIterator(const DocSectionHandler &handler) : DocSectionParaIterator(const DocSectionHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>(handler.m_children) {} BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>(handler.m_paragraphs) {}
};
class DocSectionSubIterator : public BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>
{
public:
DocSectionSubIterator(const DocSectionHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>(handler.m_subsections) {}
}; };
//-----------------------------------------------------------------------------
class DocInternalHandler : public DocInternalImpl, public BaseHandler<DocInternalHandler>
{
public:
friend class DocInternalParaIterator;
friend class DocInternalSubIterator;
DocInternalHandler(IBaseHandler *parent,int level);
virtual ~DocInternalHandler();
virtual void startInternal(const QXmlAttributes& attrib);
virtual void endInternal();
virtual void startSubSection(const QXmlAttributes& attrib);
virtual void startParagraph(const QXmlAttributes& attrib);
// IDocInternal
virtual Kind kind() const { return DocImpl::Internal; }
virtual IDocIterator *paragraphs() const;
virtual IDocIterator *subSections() const;
private:
IBaseHandler *m_parent;
QList<DocImpl> m_paragraphs;
QList<DocImpl> m_subsections;
int m_level;
};
class DocInternalParaIterator : public BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>
{
public:
DocInternalParaIterator(const DocInternalHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>(handler.m_paragraphs) {}
};
class DocInternalSubIterator : public BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>
{
public:
DocInternalSubIterator(const DocInternalHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>(handler.m_subsections) {}
};
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
/*! \brief Node representing a documentation block. /*! \brief Node representing a documentation block.
...@@ -1236,11 +1291,6 @@ class DocHandler : public DocRootImpl, public BaseHandler<DocHandler> ...@@ -1236,11 +1291,6 @@ class DocHandler : public DocRootImpl, public BaseHandler<DocHandler>
virtual void endDoc(); virtual void endDoc();
virtual void startParagraph(const QXmlAttributes& attrib); virtual void startParagraph(const QXmlAttributes& attrib);
virtual void startSect1(const QXmlAttributes& attrib); virtual void startSect1(const QXmlAttributes& attrib);
virtual void startSect2(const QXmlAttributes& attrib);
virtual void startSect3(const QXmlAttributes& attrib);
virtual void startSect4(const QXmlAttributes& attrib);
virtual void startSect5(const QXmlAttributes& attrib);
virtual void startSect6(const QXmlAttributes& attrib);
virtual void startTitle(const QXmlAttributes& attrib); virtual void startTitle(const QXmlAttributes& attrib);
DocHandler(IBaseHandler *parent); DocHandler(IBaseHandler *parent);
......
...@@ -32,6 +32,7 @@ class IDocIterator; ...@@ -32,6 +32,7 @@ class IDocIterator;
class ICompound; class ICompound;
class ISection; class ISection;
class INode; class INode;
class IDocInternal;
/*! \brief Read only interface to a string. /*! \brief Read only interface to a string.
*/ */
...@@ -165,7 +166,8 @@ class IDoc ...@@ -165,7 +166,8 @@ class IDoc
TocItem, // 33 -> IDocTocItem TocItem, // 33 -> IDocTocItem
Anchor, // 34 -> IDocAnchor Anchor, // 34 -> IDocAnchor
Symbol, // 35 -> IDocSymbol Symbol, // 35 -> IDocSymbol
Root // 36 -> IDocRoot Internal, // 36 -> IDocInternal
Root // 37 -> IDocRoot
}; };
virtual Kind kind() const = 0; virtual Kind kind() const = 0;
}; };
...@@ -397,7 +399,17 @@ class IDocSection : public IDoc ...@@ -397,7 +399,17 @@ class IDocSection : public IDoc
public: public:
virtual const IString * id() const = 0; virtual const IString * id() const = 0;
virtual int level() const = 0; virtual int level() const = 0;
virtual IDocIterator *title() const = 0; virtual IDocTitle *title() const = 0;
virtual IDocIterator *paragraphs() const = 0;
virtual IDocIterator *subSections() const = 0;
virtual IDocInternal *internal() const = 0;
};
class IDocInternal : public IDoc
{
public:
virtual IDocIterator *paragraphs() const = 0;
virtual IDocIterator *subSections() const = 0;
}; };
class IDocTocList : public IDoc class IDocTocList : public IDoc
......
...@@ -110,7 +110,7 @@ void NodeHandler::endNode() ...@@ -110,7 +110,7 @@ void NodeHandler::endNode()
void NodeHandler::startLink(const QXmlAttributes &attrib) void NodeHandler::startLink(const QXmlAttributes &attrib)
{ {
m_link = attrib.value("id"); m_link = attrib.value("refid");
} }
void NodeHandler::endLink() void NodeHandler::endLink()
...@@ -156,7 +156,7 @@ ChildNodeHandler::~ChildNodeHandler() ...@@ -156,7 +156,7 @@ ChildNodeHandler::~ChildNodeHandler()
void ChildNodeHandler::startChildNode(const QXmlAttributes &attrib) void ChildNodeHandler::startChildNode(const QXmlAttributes &attrib)
{ {
debug(2,"startChildNode\n"); debug(2,"startChildNode\n");
m_id = attrib.value("id"); m_id = attrib.value("refid");
m_relationString = attrib.value("relation"); m_relationString = attrib.value("relation");
m_relation = s_edgeRelationMapper->stringToNodeRelation(m_relationString); m_relation = s_edgeRelationMapper->stringToNodeRelation(m_relationString);
m_parent->setDelegate(this); m_parent->setDelegate(this);
......
...@@ -94,8 +94,8 @@ MainHandler::MainHandler() : m_compoundDict(2999), m_compoundNameDict(2999), ...@@ -94,8 +94,8 @@ MainHandler::MainHandler() : m_compoundDict(2999), m_compoundNameDict(2999),
{ {
m_compounds.setAutoDelete(TRUE); m_compounds.setAutoDelete(TRUE);
m_memberNameDict.setAutoDelete(TRUE); m_memberNameDict.setAutoDelete(TRUE);
addStartHandler("doxygen"); addStartHandler("doxygenindex");
addEndHandler("doxygen"); addEndHandler("doxygenindex");
addStartHandler("compound",this,&MainHandler::startCompound); addStartHandler("compound",this,&MainHandler::startCompound);
addEndHandler("compound"); addEndHandler("compound");
addStartHandler("member",this,&MainHandler::startMember); addStartHandler("member",this,&MainHandler::startMember);
......
...@@ -285,7 +285,7 @@ void MemberHandler::startLocation(const QXmlAttributes& attrib) ...@@ -285,7 +285,7 @@ void MemberHandler::startLocation(const QXmlAttributes& attrib)
void MemberHandler::startReferences(const QXmlAttributes& attrib) void MemberHandler::startReferences(const QXmlAttributes& attrib)
{ {
MemberReference *mr = new MemberReference; MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("id"); mr->m_memId = attrib.value("refid");
m_references.append(mr); m_references.append(mr);
m_curString=""; m_curString="";
} }
...@@ -298,7 +298,7 @@ void MemberHandler::endReferences() ...@@ -298,7 +298,7 @@ void MemberHandler::endReferences()
void MemberHandler::startReferencedBy(const QXmlAttributes& attrib) void MemberHandler::startReferencedBy(const QXmlAttributes& attrib)
{ {
MemberReference *mr = new MemberReference; MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("id"); mr->m_memId = attrib.value("refid");
m_referencedBy.append(mr); m_referencedBy.append(mr);
m_curString=""; m_curString="";
} }
...@@ -311,7 +311,7 @@ void MemberHandler::endReferencedBy() ...@@ -311,7 +311,7 @@ void MemberHandler::endReferencedBy()
void MemberHandler::startReimplements(const QXmlAttributes& attrib) void MemberHandler::startReimplements(const QXmlAttributes& attrib)
{ {
m_reimplements = new MemberReference; m_reimplements = new MemberReference;
m_reimplements->m_memId = attrib.value("id"); m_reimplements->m_memId = attrib.value("refid");
m_curString=""; m_curString="";
} }
...@@ -323,7 +323,7 @@ void MemberHandler::endReimplements() ...@@ -323,7 +323,7 @@ void MemberHandler::endReimplements()
void MemberHandler::startReimplementedBy(const QXmlAttributes& attrib) void MemberHandler::startReimplementedBy(const QXmlAttributes& attrib)
{ {
MemberReference *mr = new MemberReference; MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("id"); mr->m_memId = attrib.value("refid");
m_reimplementedBy.append(mr); m_reimplementedBy.append(mr);
m_curString=""; m_curString="";
} }
......
...@@ -372,15 +372,45 @@ void DumpDoc(IDoc *doc,int level) ...@@ -372,15 +372,45 @@ void DumpDoc(IDoc *doc,int level)
ASSERT(sec!=0); ASSERT(sec!=0);
InPrint(("<section id=`%s' level=%d>\n", InPrint(("<section id=`%s' level=%d>\n",
sec->id()->latin1(),sec->level())); sec->id()->latin1(),sec->level()));
IDocIterator *di = sec->title(); DumpDoc(sec->title(),level+1);
IDocIterator *di = sec->paragraphs();
IDoc *pdoc; IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext()) for (di->toFirst();(pdoc=di->current());di->toNext())
{ {
DumpDoc(pdoc,level+1); DumpDoc(pdoc,level+1);
} }
di=sec->subSections();
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc,level+1);
}
IDocInternal *intern = sec->internal();
if (intern)
{
DumpDoc(intern,level+1);
}
InPrint(("</section>\n")); InPrint(("</section>\n"));
} }
break; break;
case IDoc::Internal:
{
IDocInternal *intern = dynamic_cast<IDocInternal*>(doc);
ASSERT(intern!=0);
InPrint(("<internal>\n"));
IDocIterator *di = intern->paragraphs();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc,level+1);
}
di=intern->subSections();
for (di->toFirst();(pdoc=di->current());di->toNext())
{
DumpDoc(pdoc,level+1);
}
InPrint(("</internal>\n"));
}
break;
case IDoc::Copy: case IDoc::Copy:
{ {
IDocCopy *cpy = dynamic_cast<IDocCopy*>(doc); IDocCopy *cpy = dynamic_cast<IDocCopy*>(doc);
......
...@@ -26,6 +26,7 @@ GENERATE_LATEX = YES ...@@ -26,6 +26,7 @@ GENERATE_LATEX = YES
GENERATE_HTML = YES GENERATE_HTML = YES
GENERATE_HTMLHELP = YES GENERATE_HTMLHELP = YES
GENERATE_RTF = NO GENERATE_RTF = NO
GENERATE_XML = NO
ENABLED_SECTIONS = logo_on ENABLED_SECTIONS = logo_on
ENABLE_PREPROCESSING = NO ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO CASE_SENSE_NAMES = NO
......
...@@ -391,8 +391,15 @@ doxygen. Unrecognized commands are treated as normal text. ...@@ -391,8 +391,15 @@ doxygen. Unrecognized commands are treated as normal text.
\addindex \\internal \addindex \\internal
This command writes the message `For internal use only' to the output and This command writes the message `For internal use only' to the output and
all text \e after a \c \\internal command until the end of the all text \e after an \c \\internal command until the end of the
comment block is ignored. comment block or the end of the section (whichever comes first) is
marked as "internal".
If the \\internal command is put inside a section
(see for example \ref cmdsection "\\section") all subsection after the
command are considered to be internal as well. Only a new section at the
same level will be visible again.
You can use \ref cfg_internal_docs "INTERNAL_DOCS" in the config file You can use \ref cfg_internal_docs "INTERNAL_DOCS" in the config file
to show or hide the internal documentation. to show or hide the internal documentation.
......
...@@ -376,9 +376,21 @@ perl script in <code>wintools/make.pl</code> a bit. ...@@ -376,9 +376,21 @@ perl script in <code>wintools/make.pl</code> a bit.
Let me know what you had to change if you got Doxygen working with another Let me know what you had to change if you got Doxygen working with another
compiler. compiler.
If you have Visual C++ 6.0, and the source distribution, you can easily
build doxygen using the project files in the \c wintools directory. If
you want to build the CVS sources, or want to build from the command line,
or with another compiler, you have to follow the steps below.
Thomas Baust reported that if you have Visual Studio.NET (2003) then
you should be aware that there is a problem with the _popen() and _pclose()
implementation, which currently leaks handles, so if you build doxygen with
it and use the INPUT_FILTER, you will run to risk of crashing Windows!
The problem is reported to and confirmed by Microsoft so maybe it will
fixed in the next service pack.
Since Windows comes without all the nice tools that Unix users are Since Windows comes without all the nice tools that Unix users are
used to, you need to install a number of these tools before you can compile used to, you'll need to install a number of these tools before you can compile
doxygen for Windows. doxygen for Windows from the command-line.
Here is what is required: Here is what is required:
<ul> <ul>
......
...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means ...@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time. languages other than English (the default) at configuration time.
Currently (version 1.3.2), 28 languages Currently (version 1.3.2-20030717), 28 languages
are supported (sorted alphabetically): are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian, Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish, Czech, Danish, Dutch, English, Finnish,
...@@ -55,7 +55,7 @@ when the translator was updated. ...@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD> <TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD> <TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD> <TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>1.3.1</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Catalan</TD> <TD>Catalan</TD>
...@@ -71,9 +71,9 @@ when the translator was updated. ...@@ -71,9 +71,9 @@ when the translator was updated.
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Chinese Traditional</TD> <TD>Chinese Traditional</TD>
<TD>Gary Lee</TD> <TD>Daniel YC Lin<br>Gary Lee</TD>
<TD>garylee@NOSPAM.ecosine.com.tw</TD> <TD>daniel@NOSPAM.twpda.com<br>garylee@NOSPAM.ecosine.com.tw</TD>
<TD>1.2.16</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Croatian</TD> <TD>Croatian</TD>
...@@ -145,7 +145,7 @@ when the translator was updated. ...@@ -145,7 +145,7 @@ when the translator was updated.
<TD>Japanese</TD> <TD>Japanese</TD>
<TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD> <TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD>
<TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD> <TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>strange</TD> <TD>obsolete</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Korean</TD> <TD>Korean</TD>
...@@ -169,7 +169,7 @@ when the translator was updated. ...@@ -169,7 +169,7 @@ when the translator was updated.
<TD>Portuguese</TD> <TD>Portuguese</TD>
<TD>Rui Godinho Lopes</TD> <TD>Rui Godinho Lopes</TD>
<TD>ruiglopes@NOSPAM.yahoo.com</TD> <TD>ruiglopes@NOSPAM.yahoo.com</TD>
<TD>1.3.1</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Romanian</TD> <TD>Romanian</TD>
...@@ -187,7 +187,7 @@ when the translator was updated. ...@@ -187,7 +187,7 @@ when the translator was updated.
<TD>Serbian</TD> <TD>Serbian</TD>
<TD>Dejan Milosavljevic</TD> <TD>Dejan Milosavljevic</TD>
<TD>dmilos@NOSPAM.email.com</TD> <TD>dmilos@NOSPAM.email.com</TD>
<TD>1.3.1</TD> <TD>up-to-date</TD>
</TR> </TR>
<TR BGCOLOR="#ffffff"> <TR BGCOLOR="#ffffff">
<TD>Slovak</TD> <TD>Slovak</TD>
...@@ -230,14 +230,15 @@ when the translator was updated. ...@@ -230,14 +230,15 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\ {\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\hline \hline
\hline \hline
Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & 1.3.1 \\ Brazilian Portuguese & Fabio "FJTC" Jun Takada Chino & {\tt chino@icmc.sc.usp.br} & up-to-date \\
\hline \hline
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\ Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline \hline
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\ Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\ & Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\hline \hline
Chinese Traditional & Gary Lee & {\tt garylee@ecosine.com.tw} & 1.2.16 \\ Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & up-to-date \\
& Gary Lee & {\tt garylee@ecosine.com.tw} & \\
\hline \hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & 1.3.1 \\ Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & 1.3.1 \\
\hline \hline
...@@ -262,7 +263,7 @@ when the translator was updated. ...@@ -262,7 +263,7 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\ Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\ & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\hline \hline
Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & strange \\ Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & obsolete \\
& Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\ & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\
\hline \hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & strange \\ Korean & Richard Kim & {\tt ryk@dspwiz.com} & strange \\
...@@ -272,13 +273,13 @@ when the translator was updated. ...@@ -272,13 +273,13 @@ when the translator was updated.
Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & strange \\ Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & strange \\
& Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\ & Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline \hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.3.1 \\ Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\
\hline \hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\ Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline \hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\ Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\
\hline \hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.3.1 \\ Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & up-to-date \\
\hline \hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & 1.2.18 \\ Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & 1.2.18 \\
\hline \hline
......
This diff is collapsed.
Summary: A documentation system for C/C++. Summary: A documentation system for C/C++.
Name: doxygen Name: doxygen
Version: 1.3.2_20030717 Version: 1.3.3
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
......
...@@ -134,6 +134,10 @@ QCString ClassDef::displayName() const ...@@ -134,6 +134,10 @@ QCString ClassDef::displayName() const
{ {
n=qualifiedNameWithTemplateParameters(); n=qualifiedNameWithTemplateParameters();
} }
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
n=substitute(n,"::",".");
}
return n; return n;
} }
...@@ -1117,7 +1121,6 @@ void ClassDef::writeDocumentation(OutputList &ol) ...@@ -1117,7 +1121,6 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write link to list of all members (HTML only) // write link to list of all members (HTML only)
if (m_allMemberNameInfoSDict->count()>0 && if (m_allMemberNameInfoSDict->count()>0 &&
!Config_getBool("OPTIMIZE_OUTPUT_FOR_C") !Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
/* && !Config_getBool("INLINE_INHERITED_MEMB") */
) )
{ {
ol.pushGeneratorState(); ol.pushGeneratorState();
...@@ -2587,14 +2590,6 @@ QCString ClassDef::qualifiedNameWithTemplateParameters( ...@@ -2587,14 +2590,6 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
QCString ClassDef::className() const QCString ClassDef::className() const
{ {
//QCString className=m_localName;
//Definition *p=getOuterScope();
//while (p && p->definitionType()==TypeClass)
//{
// className.prepend(p->localName()+"::");
// p=p->getOuterScope();
//}
//return className;
return m_className; return m_className;
}; };
......
...@@ -95,6 +95,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f ...@@ -95,6 +95,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
} }
ol.startMemberItem(FALSE); ol.startMemberItem(FALSE);
QCString tmp = cd->compoundTypeString(); QCString tmp = cd->compoundTypeString();
QCString cname = substitute(cd->className(),"::",".");
ol.writeString(tmp); ol.writeString(tmp);
ol.writeString(" "); ol.writeString(" ");
ol.insertMemberAlign(); ol.insertMemberAlign();
...@@ -103,13 +104,13 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f ...@@ -103,13 +104,13 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(), cd->getOutputFileBase(),
0, 0,
cd->className() cname
); );
} }
else else
{ {
ol.startBold(); ol.startBold();
ol.docify(cd->className()); ol.docify(cname);
ol.endBold(); ol.endBold();
} }
ol.endMemberItem(); ol.endMemberItem();
......
...@@ -198,7 +198,7 @@ void replaceComment(int offset); ...@@ -198,7 +198,7 @@ void replaceComment(int offset);
<CComment>[^\\@*\n]* { /* anything that is not a '*' */ <CComment>[^\\@*\n]* { /* anything that is not a '*' */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<CComment>"*"+[^*/\n]* { /* stars without slashes */ <CComment>"*"+[^*/\\@\n]* { /* stars without slashes */
copyToOutput(yytext,yyleng); copyToOutput(yytext,yyleng);
} }
<CComment>\n { /* new line in comment */ <CComment>\n { /* new line in comment */
......
This diff is collapsed.
This diff is collapsed.
...@@ -126,6 +126,7 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, ...@@ -126,6 +126,7 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine,
{ {
if (d==0) return; if (d==0) return;
//printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace); //printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace);
QCString doc;
if (stripWhiteSpace) if (stripWhiteSpace)
{ {
// strip leading empty lines in front of the text, but not the // strip leading empty lines in front of the text, but not the
...@@ -141,20 +142,21 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, ...@@ -141,20 +142,21 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine,
s++; s++;
} }
if (c=='\0') return; if (c=='\0') return;
m_doc=d+so; doc=d+so;
// zero any trailing whitespace // zero any trailing whitespace
int e=m_doc.length()-1; int e=doc.length()-1;
while (e>=0 && (c=m_doc.at(e)) && (c==' ' || c=='\r' || c=='\n')) while (e>=0 && (c=doc.at(e)) && (c==' ' || c=='\r' || c=='\n'))
{ {
m_doc.at(e)='\0'; doc.at(e)='\0';
e--; e--;
} }
} }
else // don't strip whitespace else // don't strip whitespace
{ {
m_doc=d; doc=d;
} }
//printf("setting docs for %s: `%s'\n",name().data(),m_doc.data()); //printf("setting docs for %s: `%s'\n",name().data(),m_doc.data());
m_doc=doc;
m_docFile = docFile; m_docFile = docFile;
m_docLine = docLine; m_docLine = docLine;
} }
...@@ -163,7 +165,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri ...@@ -163,7 +165,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
{ {
if (b==0) return; if (b==0) return;
//printf("Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine); //printf("Definition::setBriefDescription(%s,%s,%d)\n",b,briefFile,briefLine);
m_brief=QCString(b).stripWhiteSpace(); m_brief=QCString(b).stripWhiteSpace();
int bl=m_brief.length(); int bl=m_brief.length();
if (bl>0) // add puntuation if needed if (bl>0) // add puntuation if needed
{ {
......
...@@ -2143,7 +2143,7 @@ endhref: ...@@ -2143,7 +2143,7 @@ endhref:
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
int DocInternal::parse() int DocInternal::parse(int level)
{ {
int retval=RetVal_OK; int retval=RetVal_OK;
g_nodeStack.push(this); g_nodeStack.push(this);
...@@ -2170,25 +2170,24 @@ int DocInternal::parse() ...@@ -2170,25 +2170,24 @@ int DocInternal::parse()
{ {
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid list item found",doctokenizerYYlineno); warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid list item found",doctokenizerYYlineno);
} }
} while (retval!=0 && retval!=RetVal_Section); } while (retval!=0 &&
retval!=RetVal_Section &&
retval!=RetVal_Subsection &&
retval!=RetVal_Subsubsection &&
retval!=RetVal_Paragraph
);
if (lastPar) lastPar->markLast(); if (lastPar) lastPar->markLast();
// then parse any number of level1 sections // then parse any number of level-n sections
while (retval==RetVal_Section) while ((level==1 && retval==RetVal_Section) ||
(level==2 && retval==RetVal_Subsection) ||
(level==3 && retval==RetVal_Subsubsection) ||
(level==4 && retval==RetVal_Paragraph)
)
{ {
//SectionInfo *sec=Doxygen::sectionDict[g_token->sectionId]; DocSection *s=new DocSection(this,level,g_token->sectionId);
//int secLev = sec->type==SectionInfo::Subsection ? 2 : 1; m_children.append(s);
//if (secLev!=1) // wrong level retval = s->parse();
//{
// warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Expected level 1 section, found a section with level %d.",secLev);
// break;
//}
//else
//{
DocSection *s=new DocSection(this,1,g_token->sectionId);
m_children.append(s);
retval = s->parse();
//}
} }
if (retval==RetVal_Internal) if (retval==RetVal_Internal)
...@@ -2503,6 +2502,32 @@ getrow: ...@@ -2503,6 +2502,32 @@ getrow:
return retval==RetVal_EndTable ? RetVal_OK : retval; return retval==RetVal_EndTable ? RetVal_OK : retval;
} }
uint DocHtmlTable::numCols() const
{
uint cols=0;
QListIterator<DocNode> cli(m_children);
DocNode *n;
for (cli.toFirst();(n=cli.current());++cli)
{
ASSERT(n->kind()==DocNode::Kind_HtmlRow);
cols=QMAX(cols,((DocHtmlRow *)n)->numCells());
}
return cols;
}
void DocHtmlTable::accept(DocVisitor *v)
{
v->visitPre(this);
// for HTML output we put the caption first
if (m_caption && v->id()==DocVisitor_Html) m_caption->accept(v);
QListIterator<DocNode> cli(m_children);
DocNode *n;
for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
// for other output formats we put the caption last
if (m_caption && v->id()!=DocVisitor_Html) m_caption->accept(v);
v->visitPost(this);
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
int DocHtmlDescTitle::parse() int DocHtmlDescTitle::parse()
...@@ -4496,6 +4521,12 @@ int DocSection::parse() ...@@ -4496,6 +4521,12 @@ int DocSection::parse()
retval=0; // stop parsing retval=0; // stop parsing
} }
else if (retval==RetVal_Internal)
{
DocInternal *in = new DocInternal(this);
m_children.append(in);
retval = in->parse(m_level+1);
}
else else
{ {
} }
...@@ -4659,7 +4690,7 @@ void DocRoot::parse() ...@@ -4659,7 +4690,7 @@ void DocRoot::parse()
{ {
DocInternal *in = new DocInternal(this); DocInternal *in = new DocInternal(this);
m_children.append(in); m_children.append(in);
retval = in->parse(); retval = in->parse(1);
} }
......
...@@ -821,7 +821,7 @@ class DocInternal : public CompAccept<DocInternal>, public DocNode ...@@ -821,7 +821,7 @@ class DocInternal : public CompAccept<DocInternal>, public DocNode
{ {
public: public:
DocInternal(DocNode *parent) : m_parent(parent) {} DocInternal(DocNode *parent) : m_parent(parent) {}
int parse(); int parse(int);
Kind kind() const { return Kind_Internal; } Kind kind() const { return Kind_Internal; }
DocNode *parent() const { return m_parent; } DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); } void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); }
...@@ -1103,6 +1103,7 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode ...@@ -1103,6 +1103,7 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
private: private:
DocNode * m_parent; DocNode * m_parent;
HtmlAttribList m_attribs; HtmlAttribList m_attribs;
bool m_atTop;
}; };
/*! @brief Node representing a HTML table row */ /*! @brief Node representing a HTML table row */
...@@ -1137,27 +1138,8 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode ...@@ -1137,27 +1138,8 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
bool hasCaption() { return m_caption!=0; } bool hasCaption() { return m_caption!=0; }
const HtmlAttribList &attribs() const { return m_attribs; } const HtmlAttribList &attribs() const { return m_attribs; }
int parse(); int parse();
uint numCols() const uint numCols() const;
{ void accept(DocVisitor *v);
uint cols=0;
QListIterator<DocNode> cli(m_children);
DocNode *n;
for (cli.toFirst();(n=cli.current());++cli)
{
ASSERT(n->kind()==DocNode::Kind_HtmlRow);
cols=QMAX(cols,((DocHtmlRow *)n)->numCells());
}
return cols;
}
void accept(DocVisitor *v)
{
v->visitPre(this);
QListIterator<DocNode> cli(m_children);
DocNode *n;
for (cli.toFirst();(n=cli.current());++cli) n->accept(v);
if (m_caption) m_caption->accept(v);
v->visitPost(this);
}
private: private:
DocNode * m_parent; DocNode * m_parent;
......
...@@ -19,6 +19,14 @@ ...@@ -19,6 +19,14 @@
#ifndef _DOCVISITOR_H #ifndef _DOCVISITOR_H
#define _DOCVISITOR_H #define _DOCVISITOR_H
// ids
const int DocVisitor_Html = 0;
const int DocVisitor_Latex = 1;
const int DocVisitor_XML = 2;
const int DocVisitor_RTF = 3;
const int DocVisitor_Man = 4;
const int DocVisitor_Other = 5;
// forward declarations // forward declarations
class DocWord; class DocWord;
class DocWhiteSpace; class DocWhiteSpace;
...@@ -38,7 +46,6 @@ class DocVerbatim; ...@@ -38,7 +46,6 @@ class DocVerbatim;
class DocXRefItem; class DocXRefItem;
class DocHtmlList; class DocHtmlList;
class DocHtmlListItem; class DocHtmlListItem;
//class DocHtmlPre;
class DocHtmlDescList; class DocHtmlDescList;
class DocHtmlDescTitle; class DocHtmlDescTitle;
class DocHtmlDescData; class DocHtmlDescData;
...@@ -74,8 +81,12 @@ class DocText; ...@@ -74,8 +81,12 @@ class DocText;
*/ */
class DocVisitor class DocVisitor
{ {
int m_id;
public: public:
DocVisitor(int id) : m_id(id) {}
virtual ~DocVisitor() {} virtual ~DocVisitor() {}
int id() const { return m_id; }
/*! @name Visitor functions for leaf nodes /*! @name Visitor functions for leaf nodes
* @{ * @{
*/ */
...@@ -120,8 +131,6 @@ class DocVisitor ...@@ -120,8 +131,6 @@ class DocVisitor
virtual void visitPost(DocHtmlListItem *) = 0; virtual void visitPost(DocHtmlListItem *) = 0;
virtual void visitPre(DocHtmlListItem *) = 0; virtual void visitPre(DocHtmlListItem *) = 0;
virtual void visitPost(DocHtmlList *) = 0; virtual void visitPost(DocHtmlList *) = 0;
//virtual void visitPre(DocHtmlPre *) = 0;
//virtual void visitPost(DocHtmlPre *) = 0;
virtual void visitPre(DocHtmlDescList *) = 0; virtual void visitPre(DocHtmlDescList *) = 0;
virtual void visitPost(DocHtmlDescList *) = 0; virtual void visitPost(DocHtmlDescList *) = 0;
virtual void visitPre(DocHtmlDescTitle *) = 0; virtual void visitPre(DocHtmlDescTitle *) = 0;
......
...@@ -840,6 +840,34 @@ static void buildClassDocList(Entry *root) ...@@ -840,6 +840,34 @@ static void buildClassDocList(Entry *root)
} }
} }
Definition *buildScopeFromQualifiedName(const QCString name,int level)
{
int i=0;
int p=0,l;
Definition *prevScope=Doxygen::globalScope;
QCString fullScope;
while (i<level)
{
int idx=getScopeFragment(name,p,&l);
QCString nsName = name.mid(idx,l);
if (!fullScope.isEmpty()) fullScope+="::";
fullScope+=nsName;
//printf("adding dummy namespace %s to %s\n",nsName.data(),prevScope->name().data());
// introduce bogus namespace
NamespaceDef *nd=new NamespaceDef(
"<generated>",1,fullScope);
// add namespace to the list
Doxygen::namespaceSDict.inSort(fullScope,nd);
prevScope->addInnerCompound(nd);
nd->setOuterScope(prevScope);
p=idx+l+2;
prevScope=nd;
i++;
}
return prevScope;
}
static void resolveClassNestingRelations() static void resolveClassNestingRelations()
{ {
ClassSDict::Iterator cli(Doxygen::classSDict); ClassSDict::Iterator cli(Doxygen::classSDict);
...@@ -986,13 +1014,11 @@ static void buildNamespaceList(Entry *root) ...@@ -986,13 +1014,11 @@ static void buildNamespaceList(Entry *root)
//printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"none"); //printf("adding namespace %s to context %s\n",nd->name().data(),d?d->name().data():"none");
if (d==0) if (d==0)
{ {
Definition *d = buildScopeFromQualifiedName(fullName,fullName.contains("::"));
d->addInnerCompound(nd);
nd->setOuterScope(d);
// TODO: Due to the order in which the tag file is written // TODO: Due to the order in which the tag file is written
// a nested class can be found before its parent! // a nested class can be found before its parent!
//
//warn(root->fileName,root->startLine,
// "Warning: Internal inconsistency: scope for namespace %s not "
// "found!\n",fullName.data()
// );
} }
else else
{ {
...@@ -2226,8 +2252,8 @@ static void buildFunctionList(Entry *root) ...@@ -2226,8 +2252,8 @@ static void buildFunctionList(Entry *root)
); );
// otherwise, allow a duplicate global member with the same argument list // otherwise, allow a duplicate global member with the same argument list
//printf("combining function with prototype found=%d `%s'<->`%s'!\n", //printf("combining function with prototype found=%d in namespace %s\n",
// found,fd->absFilePath().data(),root->fileName.data()); // found,nsName.data());
// merge argument lists // merge argument lists
//mergeArguments(root->argList,md->argumentList()); //mergeArguments(root->argList,md->argumentList());
...@@ -2266,10 +2292,19 @@ static void buildFunctionList(Entry *root) ...@@ -2266,10 +2292,19 @@ static void buildFunctionList(Entry *root)
md->setArgumentList(argList); md->setArgumentList(argList);
} }
} }
else if (!md->documentation().isEmpty() && !root->doc.isEmpty())
{
warn(root->docFile,root->docLine,"Warning: ignoring the detailed description found here, since another one was found at line %d of file %s!",md->docLine(),md->docFile().data());
}
if (md->briefDescription().isEmpty() && !root->brief.isEmpty()) if (md->briefDescription().isEmpty() && !root->brief.isEmpty())
{ {
md->setBriefDescription(root->brief,root->briefFile,root->briefLine); md->setBriefDescription(root->brief,root->briefFile,root->briefLine);
} }
else if (!md->briefDescription().isEmpty() && !root->brief.isEmpty())
{
warn(root->briefFile,root->briefLine,"Warning: ignoring the brief description found here, since another one was found at line %d of file %s!",md->briefLine(),md->briefFile().data());
}
md->addSectionsToDefinition(root->anchors); md->addSectionsToDefinition(root->anchors);
...@@ -2279,10 +2314,17 @@ static void buildFunctionList(Entry *root) ...@@ -2279,10 +2314,17 @@ static void buildFunctionList(Entry *root)
if (md->getGroupDef()==0 && root->groups->first()) if (md->getGroupDef()==0 && root->groups->first())
{ {
// if we do addMemberToGroups here an undocumented declaration may prevent // if we do addMemberToGroups here an undocumented declaration may prevent
// the documented implementation below from being added // the documented implementation below it from being added
//addMemberToGroups(root,md); //addMemberToGroups(root,md);
GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()]; GroupDef *gd=Doxygen::groupSDict[root->groups->first()->groupname.data()];
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty()); if (gd)
{
bool success = gd->insertMember(md);
if (success)
{
md->setGroupDef(gd, root->groups->first()->pri, root->fileName, root->startLine, !root->doc.isEmpty());
}
}
} }
else if (md->getGroupDef()!=0 && root->groups->count()==0) else if (md->getGroupDef()!=0 && root->groups->count()==0)
{ {
...@@ -8198,7 +8240,7 @@ void generateOutput() ...@@ -8198,7 +8240,7 @@ void generateOutput()
cleanUpDoxygen(); cleanUpDoxygen();
if (Debug::isFlagSet(Debug::Time)) if (Debug::isFlagSet(Debug::Time))
{ {
printf("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n", msg("Total elapsed time: %.3f seconds\n(of which %.3f seconds waiting for external tools to finish)\n",
((double)Doxygen::runningTime.elapsed())/1000.0, ((double)Doxygen::runningTime.elapsed())/1000.0,
Doxygen::sysElapsedTime Doxygen::sysElapsedTime
); );
......
...@@ -43,7 +43,7 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs) ...@@ -43,7 +43,7 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs)
//------------------------------------------------------------------------- //-------------------------------------------------------------------------
HtmlDocVisitor::HtmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) HtmlDocVisitor::HtmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) : DocVisitor(DocVisitor_Html), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{ {
} }
......
...@@ -1485,6 +1485,15 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1485,6 +1485,15 @@ void writeAlphabeticalClassList(OutputList &ol)
//if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName(); //if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName();
//QCString cname=cd->className(); //QCString cname=cd->className();
extractNamespaceName(cd->name(),cname,namesp); extractNamespaceName(cd->name(),cname,namesp);
QCString nsDispName;
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
nsDispName=substitute(namesp,"::",".");
}
else
{
nsDispName=namesp.copy();
}
ol.writeObjectLink(cd->getReference(), ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,cname); cd->getOutputFileBase(),0,cname);
...@@ -1495,11 +1504,11 @@ void writeAlphabeticalClassList(OutputList &ol) ...@@ -1495,11 +1504,11 @@ void writeAlphabeticalClassList(OutputList &ol)
if (nd && nd->isLinkable()) if (nd && nd->isLinkable())
{ {
ol.writeObjectLink(nd->getReference(), ol.writeObjectLink(nd->getReference(),
nd->getOutputFileBase(),0,namesp); nd->getOutputFileBase(),0,nsDispName);
} }
else else
{ {
ol.docify(namesp); ol.docify(nsDispName);
} }
ol.docify(")"); ol.docify(")");
} }
......
...@@ -80,7 +80,7 @@ QString LatexDocVisitor::escapeMakeIndexChars(const char *s) ...@@ -80,7 +80,7 @@ QString LatexDocVisitor::escapeMakeIndexChars(const char *s)
LatexDocVisitor::LatexDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) LatexDocVisitor::LatexDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE) : DocVisitor(DocVisitor_Latex), m_t(t), m_ci(ci), m_insidePre(FALSE), m_insideItem(FALSE), m_hide(FALSE)
{ {
} }
...@@ -99,7 +99,7 @@ void LatexDocVisitor::visit(DocLinkedWord *w) ...@@ -99,7 +99,7 @@ void LatexDocVisitor::visit(DocLinkedWord *w)
if (m_hide) return; if (m_hide) return;
startLink(w->ref(),w->file(),w->anchor()); startLink(w->ref(),w->file(),w->anchor());
filter(w->word()); filter(w->word());
endLink(); endLink(w->ref(),w->file(),w->anchor());
} }
void LatexDocVisitor::visit(DocWhiteSpace *w) void LatexDocVisitor::visit(DocWhiteSpace *w)
...@@ -797,10 +797,10 @@ void LatexDocVisitor::visitPre(DocLink *lnk) ...@@ -797,10 +797,10 @@ void LatexDocVisitor::visitPre(DocLink *lnk)
startLink(lnk->ref(),lnk->file(),lnk->anchor()); startLink(lnk->ref(),lnk->file(),lnk->anchor());
} }
void LatexDocVisitor::visitPost(DocLink *) void LatexDocVisitor::visitPost(DocLink *lnk)
{ {
if (m_hide) return; if (m_hide) return;
endLink(); endLink(lnk->ref(),lnk->file(),lnk->anchor());
} }
void LatexDocVisitor::visitPre(DocRef *ref) void LatexDocVisitor::visitPre(DocRef *ref)
...@@ -810,10 +810,10 @@ void LatexDocVisitor::visitPre(DocRef *ref) ...@@ -810,10 +810,10 @@ void LatexDocVisitor::visitPre(DocRef *ref)
if (!ref->hasLinkText()) filter(ref->targetTitle()); if (!ref->hasLinkText()) filter(ref->targetTitle());
} }
void LatexDocVisitor::visitPost(DocRef *) void LatexDocVisitor::visitPost(DocRef *ref)
{ {
if (m_hide) return; if (m_hide) return;
endLink(); endLink(ref->ref(),ref->file(),ref->anchor());
} }
void LatexDocVisitor::visitPre(DocSecRefItem *) void LatexDocVisitor::visitPre(DocSecRefItem *)
...@@ -942,10 +942,10 @@ void LatexDocVisitor::visitPre(DocInternalRef *ref) ...@@ -942,10 +942,10 @@ void LatexDocVisitor::visitPre(DocInternalRef *ref)
startLink(0,ref->file(),ref->anchor()); startLink(0,ref->file(),ref->anchor());
} }
void LatexDocVisitor::visitPost(DocInternalRef *) void LatexDocVisitor::visitPost(DocInternalRef *ref)
{ {
if (m_hide) return; if (m_hide) return;
endLink(); endLink(0,ref->file(),ref->anchor());
} }
void LatexDocVisitor::visitPre(DocCopy *) void LatexDocVisitor::visitPre(DocCopy *)
...@@ -986,9 +986,16 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt ...@@ -986,9 +986,16 @@ void LatexDocVisitor::startLink(const QString &ref,const QString &file,const QSt
} }
} }
void LatexDocVisitor::endLink() void LatexDocVisitor::endLink(const QString &ref,const QString &file,const QString &anchor)
{ {
m_t << "}"; m_t << "}";
if (ref.isEmpty() && !Config_getBool("PDF_HYPERLINKS"))
{
m_t << "{\\rm (" << theTranslator->trPageAbbreviation();
m_t << "\\,\\pageref{" << file;
if (!anchor.isEmpty()) m_t << "_" << anchor;
m_t << "})}";
}
} }
void LatexDocVisitor::pushEnabled() void LatexDocVisitor::pushEnabled()
......
...@@ -135,7 +135,8 @@ class LatexDocVisitor : public DocVisitor ...@@ -135,7 +135,8 @@ class LatexDocVisitor : public DocVisitor
void filter(const char *str); void filter(const char *str);
void startLink(const QString &ref,const QString &file, void startLink(const QString &ref,const QString &file,
const QString &anchor); const QString &anchor);
void endLink(); void endLink(const QString &ref,const QString &file,
const QString &anchor);
QString escapeMakeIndexChars(const char *s); QString escapeMakeIndexChars(const char *s);
void pushEnabled(); void pushEnabled();
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
#include "message.h" #include "message.h"
ManDocVisitor::ManDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) ManDocVisitor::ManDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE), : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(TRUE),
m_indent(0) m_indent(0)
{ {
} }
......
...@@ -84,6 +84,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd, ...@@ -84,6 +84,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (defArgList==0) return; // member has no function like argument list if (defArgList==0) return; // member has no function like argument list
if (!md->isDefine()) ol.docify(" "); if (!md->isDefine()) ol.docify(" ");
//printf("writeDefArgList(%d)\n",defArgList->count());
ol.pushGeneratorState(); ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html); ol.disableAllBut(OutputGenerator::Html);
ol.endMemberDocName(); ol.endMemberDocName();
......
...@@ -413,7 +413,7 @@ private: ...@@ -413,7 +413,7 @@ private:
}; };
PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output) PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output)
: m_output(output), m_textmode(false) : DocVisitor(DocVisitor_Other), m_output(output), m_textmode(false)
{ {
m_output.openList("doc"); m_output.openList("doc");
} }
......
...@@ -25,7 +25,8 @@ ...@@ -25,7 +25,8 @@
class PrintDocVisitor : public DocVisitor class PrintDocVisitor : public DocVisitor
{ {
public: public:
PrintDocVisitor() : m_indent(0), m_needsEnter(FALSE), m_insidePre(FALSE) {} PrintDocVisitor() : DocVisitor(DocVisitor_Other), m_indent(0),
m_needsEnter(FALSE), m_insidePre(FALSE) {}
//-------------------------------------- //--------------------------------------
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "message.h" #include "message.h"
RTFDocVisitor::RTFDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) RTFDocVisitor::RTFDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_indentLevel(1) : DocVisitor(DocVisitor_RTF), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_indentLevel(1)
{ {
} }
......
...@@ -157,6 +157,7 @@ static QCString xrefItemKey; ...@@ -157,6 +157,7 @@ static QCString xrefItemKey;
static QCString xrefItemTitle; static QCString xrefItemTitle;
static QCString xrefListTitle; static QCString xrefListTitle;
static QCString g_skipBlockName;
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
...@@ -2809,6 +2810,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -2809,6 +2810,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastCContext = YY_START; lastCContext = YY_START;
BEGIN(SkipCxxComment); BEGIN(SkipCxxComment);
} }
<SkipInits>\" {
lastStringContext=YY_START;
BEGIN( SkipString );
}
<SkipInits>; { <SkipInits>; {
warn(yyFileName,yyLineNr, warn(yyFileName,yyLineNr,
"Warning: Found ';' while parsing initializer list! " "Warning: Found ';' while parsing initializer list! "
...@@ -3855,31 +3860,37 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3855,31 +3860,37 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<Doc,PageDoc,ClassDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] { <Doc,PageDoc,ClassDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] {
lastVerbState=YY_START; lastVerbState=YY_START;
current->doc+="\\verbatim"; current->doc+="\\verbatim";
g_skipBlockName="verbatim";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<JavaDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] { <JavaDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] {
lastVerbState=YY_START; lastVerbState=YY_START;
current->brief+="\\verbatim"; current->brief+="\\verbatim";
g_skipBlockName="verbatim";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<Doc,PageDoc,ClassDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] { <Doc,PageDoc,ClassDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START; lastVerbState=YY_START;
current->doc+="\\latexonly"; current->doc+="\\latexonly";
g_skipBlockName="latexonly";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<JavaDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] { <JavaDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START; lastVerbState=YY_START;
current->brief+="\\latexonly"; current->brief+="\\latexonly";
g_skipBlockName="latexonly";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<Doc,PageDoc,ClassDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] { <Doc,PageDoc,ClassDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START; lastVerbState=YY_START;
current->doc+="\\htmlonly"; current->doc+="\\htmlonly";
g_skipBlockName="htmlonly";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<JavaDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] { <JavaDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START; lastVerbState=YY_START;
current->brief+="\\htmlonly"; current->brief+="\\htmlonly";
g_skipBlockName="htmlonly";
BEGIN(SkipVerbatim); BEGIN(SkipVerbatim);
} }
<Doc,PageDoc,ClassDoc>{CMD}"addindex"{B}+[^\n]+ { <Doc,PageDoc,ClassDoc>{CMD}"addindex"{B}+[^\n]+ {
...@@ -3946,7 +3957,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3946,7 +3957,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<SkipVerbatim>. { <SkipVerbatim>. {
current->doc+=*yytext; current->doc+=*yytext;
} }
<SkipCode>{CMD}"endcode" { <SkipVerbatim><<EOF>> {
warn(yyFileName,yyLineNr,
"Warning: reached end of file while inside a @%s block; check for missing @end%s!",g_skipBlockName.data(),g_skipBlockName.data()
);
yyterminate();
}
<SkipCode>{CMD}"endcode"/[^a-z_A-Z0-9] {
*pSkipDoc+="\\endcode"; *pSkipDoc+="\\endcode";
BEGIN(lastCodeState); BEGIN(lastCodeState);
} }
...@@ -3975,6 +3992,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -3975,6 +3992,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<SkipCode>. { <SkipCode>. {
*pSkipDoc+=*yytext; *pSkipDoc+=*yytext;
} }
<SkipCode><<EOF>> {
warn(yyFileName,yyLineNr,
"Warning: reached end of file while inside a @code block; check for missing @endcode!"
);
yyterminate();
}
<AnchorLabel>{LABELID} { <AnchorLabel>{LABELID} {
SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor); SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor);
Doxygen::sectionDict.insert(yytext,si); Doxygen::sectionDict.insert(yytext,si);
...@@ -4494,6 +4517,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;] ...@@ -4494,6 +4517,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->name = current->name.stripWhiteSpace(); current->name = current->name.stripWhiteSpace();
newDocState(); newDocState();
} }
<DefLineDoc,LineDoc,AfterDocLine>{SECTIONCMD} {
warn(yyFileName,yyLineNr,"Command %s not allowed in single-line C++ comment! Ignoring.",yytext);
}
<Doc>[a-z_A-Z0-9]+ { current->doc += yytext; } <Doc>[a-z_A-Z0-9]+ { current->doc += yytext; }
<Doc,PageDoc,AfterDoc,LineDoc,ClassDoc>("\\\\"|"@@") { current->doc += yytext; } <Doc,PageDoc,AfterDoc,LineDoc,ClassDoc>("\\\\"|"@@") { current->doc += yytext; }
<Doc>. { current->doc += *yytext; } <Doc>. { current->doc += *yytext; }
......
...@@ -16,6 +16,8 @@ ...@@ -16,6 +16,8 @@
* Version: 1.3 (2003/05/01) * Version: 1.3 (2003/05/01)
* *
* History: * History:
* 1.3.2:
* - Updated to Doxygen 1.3.2
* 1.3: * 1.3:
* - Updated to Doxygen 1.3.x. * - Updated to Doxygen 1.3.x.
* 1.2.19: * 1.2.19:
...@@ -27,7 +29,7 @@ ...@@ -27,7 +29,7 @@
#ifndef TRANSLATOR_BR_H #ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H #define TRANSLATOR_BR_H
class TranslatorBrazilian: public TranslatorAdapter_1_3_1 class TranslatorBrazilian: public Translator
{ {
public: public:
...@@ -1460,5 +1462,22 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_1 ...@@ -1460,5 +1462,22 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_1
return "Atributos Estáticos do Pacote"; return "Atributos Estáticos do Pacote";
} }
//////////////////////////////////////////////////////////////////////////
// new since 1.3.1
//////////////////////////////////////////////////////////////////////////
/*! Used in the quick index of a class/file/namespace member list page
* to link to the unfiltered list of all members.
*/
virtual QCString trAll()
{
return "Todos";
}
/*! Put in front of the call graph for a function. */
virtual QCString trCallGraph()
{
return "Este é o grafo de chamadas para esta função:";
}
}; };
#endif #endif
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#ifndef TRANSLATOR_PT_H #ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H #define TRANSLATOR_PT_H
class TranslatorPortuguese : public TranslatorAdapter_1_3_1 class TranslatorPortuguese : public Translator
{ {
public: public:
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu> // translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>
class TranslatorSerbian : public TranslatorAdapter_1_3_1 class TranslatorSerbian : public Translator
{ {
private: private:
QCString decode(const QCString& sInput) QCString decode(const QCString& sInput)
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
// Translator class (by the local maintainer) when the localized // Translator class (by the local maintainer) when the localized
// translator is made up-to-date again. // translator is made up-to-date again.
class TranslatorChinesetraditional : public TranslatorAdapter_1_2_16 class TranslatorChinesetraditional : public Translator
{ {
public: public:
......
...@@ -641,12 +641,49 @@ ClassDef *getResolvedClass( ...@@ -641,12 +641,49 @@ ClassDef *getResolvedClass(
} }
else // not a typedef else // not a typedef
{ {
//printf(" not a typedef value\n"); //printf(" %s is not a typedef value in scope %s\n",name.data(),scope?scope->name().data():"<global>");
if (pIsTypeDef) *pIsTypeDef=FALSE; if (pIsTypeDef) *pIsTypeDef=FALSE;
if (scope!=Doxygen::globalScope) if (scope!=Doxygen::globalScope)
{
cd = Doxygen::classSDict.find(scope->name()+"::"+name); cd = Doxygen::classSDict.find(scope->name()+"::"+name);
}
else else
{
cd = Doxygen::classSDict.find(name); cd = Doxygen::classSDict.find(name);
}
if (cd==0)
{
if (scope->definitionType()==Definition::TypeNamespace)
{
NamespaceDef *nscope = (NamespaceDef*)scope;
ClassList *cl = nscope->getUsedClasses();
if (cl) // see if the class was imported via a using statement
{
ClassListIterator cli(*cl);
ClassDef *ucd;
for (cli.toFirst();(ucd=cli.current());++cli)
{
//printf("comparing %s<->%s\n",ucd->name().data(),name.data());
if (rightScopeMatch(ucd->name(),name))
{
cd=ucd;
break;
}
}
}
NamespaceList *nl = nscope->getUsedNamespaces();
if (nl) // check used namespaces for the class
{
NamespaceListIterator nli(*nl);
NamespaceDef *und;
for (nli.toFirst();(und=nli.current());++nli)
{
cd = getResolvedClass(und,name,pIsTypeDef,pTemplSpec);
if (cd) break;
}
}
}
}
if (cd) goto found; if (cd) goto found;
} }
...@@ -831,7 +868,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*n ...@@ -831,7 +868,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*n
//int scopeOffset=scopeName.length(); //int scopeOffset=scopeName.length();
do // for each scope (starting with full scope and going to empty scope) do // for each scope (starting with full scope and going to empty scope)
{ {
//printf("Searching in %s...\n",curScope?curScope->name().data():"<global>"); //printf("Searching %s in %s...\n",word.data(),curScope?curScope->name().data():"<global>");
QCString fullName = word; QCString fullName = word;
QCString prefix; QCString prefix;
replaceNamespaceAliases(fullName,fullName.length()); replaceNamespaceAliases(fullName,fullName.length());
...@@ -2749,7 +2786,7 @@ bool generateLink(OutputDocInterface &od,const char *clName, ...@@ -2749,7 +2786,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
//PageDef *pageDef=0; //PageDef *pageDef=0;
QCString anchor,linkText=linkToText(lt); QCString anchor,linkText=linkToText(lt);
//printf("generateLink linkText=%s\n",linkText.data()); //printf("generateLink linkText=%s\n",linkText.data());
if (resolveLink(clName,lr,inSeeBlock,&compound,/*&pageInfo,*/anchor)) if (resolveLink(clName,lr,inSeeBlock,&compound,anchor))
{ {
//if (pageInfo) // link to page //if (pageInfo) // link to page
//{ //{
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
#include "util.h" #include "util.h"
XmlDocVisitor::XmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci) XmlDocVisitor::XmlDocVisitor(QTextStream &t,BaseCodeDocInterface &ci)
: m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE) : DocVisitor(DocVisitor_XML), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE)
{ {
} }
...@@ -424,13 +424,15 @@ void XmlDocVisitor::visitPost(DocSimpleListItem *) ...@@ -424,13 +424,15 @@ void XmlDocVisitor::visitPost(DocSimpleListItem *)
void XmlDocVisitor::visitPre(DocSection *s) void XmlDocVisitor::visitPre(DocSection *s)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "<sect" << s->level()+1 << " id=\"" << s->id() << "\">"; m_t << "<sect" << s->level() << " id=\"" << s->id() << "\">" << endl;
m_t << "<title>";
filter(s->title()); filter(s->title());
m_t << "</sect" << s->level()+1 << ">\n"; m_t << "</title>" << endl;
} }
void XmlDocVisitor::visitPost(DocSection *) void XmlDocVisitor::visitPost(DocSection *s)
{ {
m_t << "</sect" << s->level() << ">\n";
} }
void XmlDocVisitor::visitPre(DocHtmlList *s) void XmlDocVisitor::visitPre(DocHtmlList *s)
...@@ -575,13 +577,13 @@ void XmlDocVisitor::visitPost(DocHRef *) ...@@ -575,13 +577,13 @@ void XmlDocVisitor::visitPost(DocHRef *)
void XmlDocVisitor::visitPre(DocHtmlHeader *header) void XmlDocVisitor::visitPre(DocHtmlHeader *header)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "<heading" << header->level() << ">"; m_t << "<heading level=\"" << header->level() << "\">";
} }
void XmlDocVisitor::visitPost(DocHtmlHeader *header) void XmlDocVisitor::visitPost(DocHtmlHeader *)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "</heading" << header->level() << ">\n"; m_t << "</heading>\n";
} }
void XmlDocVisitor::visitPre(DocImage *img) void XmlDocVisitor::visitPre(DocImage *img)
...@@ -689,7 +691,7 @@ void XmlDocVisitor::visitPost(DocSecRefList *) ...@@ -689,7 +691,7 @@ void XmlDocVisitor::visitPost(DocSecRefList *)
void XmlDocVisitor::visitPre(DocLanguage *l) void XmlDocVisitor::visitPre(DocLanguage *l)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "<language id=\"" << l->id() << "\">"; m_t << "<language langid=\"" << l->id() << "\">";
} }
void XmlDocVisitor::visitPost(DocLanguage *) void XmlDocVisitor::visitPost(DocLanguage *)
......
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