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
#---------------------------------------------------------------------------
# configuration options related to the XML output
#---------------------------------------------------------------------------
GENERATE_XML = YES
GENERATE_XML = NO
#---------------------------------------------------------------------------
# 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
(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.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
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;
class ICompound;
class ISection;
class INode;
class IDocInternal;
/*! \brief Read only interface to a string.
*/
......@@ -165,7 +166,8 @@ class IDoc
TocItem, // 33 -> IDocTocItem
Anchor, // 34 -> IDocAnchor
Symbol, // 35 -> IDocSymbol
Root // 36 -> IDocRoot
Internal, // 36 -> IDocInternal
Root // 37 -> IDocRoot
};
virtual Kind kind() const = 0;
};
......@@ -397,7 +399,17 @@ class IDocSection : public IDoc
public:
virtual const IString * id() 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
......
......@@ -2006,20 +2006,25 @@ IDocIterator *ParagraphHandler::contents() const
//----------------------------------------------------------------------
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;
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);
addEndHandler(sectionKey,this,&DocSectionHandler::endDocSection);
}
DocSectionHandler::~DocSectionHandler()
{
delete m_markupHandler;
}
void DocSectionHandler::startDocSection(const QXmlAttributes& attrib)
......@@ -2027,44 +2032,112 @@ void DocSectionHandler::startDocSection(const QXmlAttributes& attrib)
m_parent->setDelegate(this);
debug(2,"Start docsection\n");
m_id = attrib.value("id");
m_curString="";
}
void DocSectionHandler::endDocSection()
{
addTextNode();
m_parent->setDelegate(0);
debug(2,"End docsection\n");
}
void DocSectionHandler::addTextNode()
void DocSectionHandler::startSubSection(const QXmlAttributes& attrib)
{
if (!m_curString.isEmpty())
{
m_children.append(
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="";
}
DocSectionHandler *secHandler = new DocSectionHandler(this,m_level+1);
secHandler->startDocSection(attrib);
m_subsections.append(secHandler);
}
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
//----------------------------------------------------------------------
......@@ -2079,11 +2152,6 @@ DocHandler::DocHandler(IBaseHandler *parent) : m_parent(parent)
addStartHandler("para",this,&DocHandler::startParagraph);
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("internal");
}
......@@ -2118,41 +2186,6 @@ void DocHandler::startSect1(const QXmlAttributes& attrib)
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)
{
TitleHandler *titleHandler = new TitleHandler(this);
......
......@@ -26,6 +26,7 @@
#include "baseiterator.h"
class ParagraphHandler;
class DocInternalHandler;
class LinkedTextImpl;
class LinkedTextHandler;
......@@ -72,6 +73,7 @@ DEFINE_CLS_IMPL(DocTocList);
DEFINE_CLS_IMPL(DocTocItem);
DEFINE_CLS_IMPL(DocAnchor);
DEFINE_CLS_IMPL(DocSymbol);
DEFINE_CLS_IMPL(DocInternal);
DEFINE_CLS_IMPL(DocRoot);
//-----------------------------------------------------------------------------
......@@ -1186,42 +1188,95 @@ class SymbolHandler : public DocSymbolImpl, public BaseHandler<SymbolHandler>
/*! \brief Node representing a section.
*
*/
// children: text, ref
// children handled by MarkupHandler:
// bold, computeroutput, emphasis, center,
// small, subscript, superscript.
// children: title, para, sect(n+1)
class DocSectionHandler : public DocSectionImpl, public BaseHandler<DocSectionHandler>
{
friend class DocSectionIterator;
friend class DocSectionParaIterator;
friend class DocSectionSubIterator;
public:
DocSectionHandler(IBaseHandler *parent,int level);
virtual ~DocSectionHandler();
virtual void startDocSection(const QXmlAttributes& attrib);
virtual void endDocSection();
virtual void startRef(const QXmlAttributes& attrib);
void addTextNode();
virtual void startTitle(const QXmlAttributes& attrib);
virtual void startSubSection(const QXmlAttributes& attrib);
virtual void startParagraph(const QXmlAttributes& attrib);
virtual void startInternal(const QXmlAttributes& attrib);
// IDocSection
virtual Kind kind() const { return DocImpl::Section; }
virtual const IString *id() const { return &m_id; }
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:
IBaseHandler *m_parent;
QList<DocImpl> m_children;
MarkupHandler *m_markupHandler;
StringImpl m_id;
int m_level;
IBaseHandler *m_parent;
QList<DocImpl> m_paragraphs;
QList<DocImpl> m_subsections;
DocInternalHandler *m_internal;
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:
DocSectionIterator(const DocSectionHandler &handler) :
BaseIteratorVia<IDocIterator,IDoc,DocImpl,DocImpl>(handler.m_children) {}
DocSectionParaIterator(const DocSectionHandler &handler) :
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.
......@@ -1236,11 +1291,6 @@ class DocHandler : public DocRootImpl, public BaseHandler<DocHandler>
virtual void endDoc();
virtual void startParagraph(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);
DocHandler(IBaseHandler *parent);
......
......@@ -32,6 +32,7 @@ class IDocIterator;
class ICompound;
class ISection;
class INode;
class IDocInternal;
/*! \brief Read only interface to a string.
*/
......@@ -165,7 +166,8 @@ class IDoc
TocItem, // 33 -> IDocTocItem
Anchor, // 34 -> IDocAnchor
Symbol, // 35 -> IDocSymbol
Root // 36 -> IDocRoot
Internal, // 36 -> IDocInternal
Root // 37 -> IDocRoot
};
virtual Kind kind() const = 0;
};
......@@ -397,7 +399,17 @@ class IDocSection : public IDoc
public:
virtual const IString * id() 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
......
......@@ -110,7 +110,7 @@ void NodeHandler::endNode()
void NodeHandler::startLink(const QXmlAttributes &attrib)
{
m_link = attrib.value("id");
m_link = attrib.value("refid");
}
void NodeHandler::endLink()
......@@ -156,7 +156,7 @@ ChildNodeHandler::~ChildNodeHandler()
void ChildNodeHandler::startChildNode(const QXmlAttributes &attrib)
{
debug(2,"startChildNode\n");
m_id = attrib.value("id");
m_id = attrib.value("refid");
m_relationString = attrib.value("relation");
m_relation = s_edgeRelationMapper->stringToNodeRelation(m_relationString);
m_parent->setDelegate(this);
......
......@@ -94,8 +94,8 @@ MainHandler::MainHandler() : m_compoundDict(2999), m_compoundNameDict(2999),
{
m_compounds.setAutoDelete(TRUE);
m_memberNameDict.setAutoDelete(TRUE);
addStartHandler("doxygen");
addEndHandler("doxygen");
addStartHandler("doxygenindex");
addEndHandler("doxygenindex");
addStartHandler("compound",this,&MainHandler::startCompound);
addEndHandler("compound");
addStartHandler("member",this,&MainHandler::startMember);
......
......@@ -285,7 +285,7 @@ void MemberHandler::startLocation(const QXmlAttributes& attrib)
void MemberHandler::startReferences(const QXmlAttributes& attrib)
{
MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("id");
mr->m_memId = attrib.value("refid");
m_references.append(mr);
m_curString="";
}
......@@ -298,7 +298,7 @@ void MemberHandler::endReferences()
void MemberHandler::startReferencedBy(const QXmlAttributes& attrib)
{
MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("id");
mr->m_memId = attrib.value("refid");
m_referencedBy.append(mr);
m_curString="";
}
......@@ -311,7 +311,7 @@ void MemberHandler::endReferencedBy()
void MemberHandler::startReimplements(const QXmlAttributes& attrib)
{
m_reimplements = new MemberReference;
m_reimplements->m_memId = attrib.value("id");
m_reimplements->m_memId = attrib.value("refid");
m_curString="";
}
......@@ -323,7 +323,7 @@ void MemberHandler::endReimplements()
void MemberHandler::startReimplementedBy(const QXmlAttributes& attrib)
{
MemberReference *mr = new MemberReference;
mr->m_memId = attrib.value("id");
mr->m_memId = attrib.value("refid");
m_reimplementedBy.append(mr);
m_curString="";
}
......
......@@ -372,15 +372,45 @@ void DumpDoc(IDoc *doc,int level)
ASSERT(sec!=0);
InPrint(("<section id=`%s' level=%d>\n",
sec->id()->latin1(),sec->level()));
IDocIterator *di = sec->title();
DumpDoc(sec->title(),level+1);
IDocIterator *di = sec->paragraphs();
IDoc *pdoc;
for (di->toFirst();(pdoc=di->current());di->toNext())
{
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"));
}
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:
{
IDocCopy *cpy = dynamic_cast<IDocCopy*>(doc);
......
......@@ -26,6 +26,7 @@ GENERATE_LATEX = YES
GENERATE_HTML = YES
GENERATE_HTMLHELP = YES
GENERATE_RTF = NO
GENERATE_XML = NO
ENABLED_SECTIONS = logo_on
ENABLE_PREPROCESSING = NO
CASE_SENSE_NAMES = NO
......
......@@ -391,8 +391,15 @@ doxygen. Unrecognized commands are treated as normal text.
\addindex \\internal
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
comment block is ignored.
all text \e after an \c \\internal command until the end of the
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
to show or hide the internal documentation.
......
......@@ -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
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
used to, you need to install a number of these tools before you can compile
doxygen for Windows.
used to, you'll need to install a number of these tools before you can compile
doxygen for Windows from the command-line.
Here is what is required:
<ul>
......
......@@ -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
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):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
......@@ -55,7 +55,7 @@ when the translator was updated.
<TD>Brazilian Portuguese</TD>
<TD>Fabio "FJTC" Jun Takada Chino</TD>
<TD>chino@NOSPAM.icmc.sc.usp.br</TD>
<TD>1.3.1</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Catalan</TD>
......@@ -71,9 +71,9 @@ when the translator was updated.
</TR>
<TR BGCOLOR="#ffffff">
<TD>Chinese Traditional</TD>
<TD>Gary Lee</TD>
<TD>garylee@NOSPAM.ecosine.com.tw</TD>
<TD>1.2.16</TD>
<TD>Daniel YC Lin<br>Gary Lee</TD>
<TD>daniel@NOSPAM.twpda.com<br>garylee@NOSPAM.ecosine.com.tw</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Croatian</TD>
......@@ -145,7 +145,7 @@ when the translator was updated.
<TD>Japanese</TD>
<TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD>
<TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD>
<TD>strange</TD>
<TD>obsolete</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Korean</TD>
......@@ -169,7 +169,7 @@ when the translator was updated.
<TD>Portuguese</TD>
<TD>Rui Godinho Lopes</TD>
<TD>ruiglopes@NOSPAM.yahoo.com</TD>
<TD>1.3.1</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Romanian</TD>
......@@ -187,7 +187,7 @@ when the translator was updated.
<TD>Serbian</TD>
<TD>Dejan Milosavljevic</TD>
<TD>dmilos@NOSPAM.email.com</TD>
<TD>1.3.1</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Slovak</TD>
......@@ -230,14 +230,15 @@ when the translator was updated.
{\bf Language} & {\bf Maintainer} & {\bf Contact address} & {\bf Status} \\
\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
Catalan & Albert Mora & {\tt amora@iua.upf.es} & 1.2.17 \\
\hline
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\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
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & 1.3.1 \\
\hline
......@@ -262,7 +263,7 @@ when the translator was updated.
Italian & Alessandro Falappa & {\tt alessandro@falappa.net} & up-to-date \\
& Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} & \\
\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} & \\
\hline
Korean & Richard Kim & {\tt ryk@dspwiz.com} & strange \\
......@@ -272,13 +273,13 @@ when the translator was updated.
Polish & Piotr Kaminski & {\tt Piotr.Kaminski@ctm.gdynia.pl} & strange \\
& Grzegorz Kowal & {\tt g\_kowal@poczta.onet.pl} & \\
\hline
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & 1.3.1 \\
Portuguese & Rui Godinho Lopes & {\tt ruiglopes@yahoo.com} & up-to-date \\
\hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\
\hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.3.1 \\
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & up-to-date \\
\hline
Slovak & Stanislav Kudl\'{a}\v{c} & {\tt skudlac@pobox.sk} & 1.2.18 \\
\hline
......
This diff is collapsed.
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.2_20030717
Version: 1.3.3
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -134,6 +134,10 @@ QCString ClassDef::displayName() const
{
n=qualifiedNameWithTemplateParameters();
}
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
n=substitute(n,"::",".");
}
return n;
}
......@@ -1117,7 +1121,6 @@ void ClassDef::writeDocumentation(OutputList &ol)
// write link to list of all members (HTML only)
if (m_allMemberNameInfoSDict->count()>0 &&
!Config_getBool("OPTIMIZE_OUTPUT_FOR_C")
/* && !Config_getBool("INLINE_INHERITED_MEMB") */
)
{
ol.pushGeneratorState();
......@@ -2587,14 +2590,6 @@ QCString ClassDef::qualifiedNameWithTemplateParameters(
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;
};
......
......@@ -95,6 +95,7 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
}
ol.startMemberItem(FALSE);
QCString tmp = cd->compoundTypeString();
QCString cname = substitute(cd->className(),"::",".");
ol.writeString(tmp);
ol.writeString(" ");
ol.insertMemberAlign();
......@@ -103,13 +104,13 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),
0,
cd->className()
cname
);
}
else
{
ol.startBold();
ol.docify(cd->className());
ol.docify(cname);
ol.endBold();
}
ol.endMemberItem();
......
......@@ -198,7 +198,7 @@ void replaceComment(int offset);
<CComment>[^\\@*\n]* { /* anything that is not a '*' */
copyToOutput(yytext,yyleng);
}
<CComment>"*"+[^*/\n]* { /* stars without slashes */
<CComment>"*"+[^*/\\@\n]* { /* stars without slashes */
copyToOutput(yytext,yyleng);
}
<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,
{
if (d==0) return;
//printf("Definition::setDocumentation(%s,%s,%d,%d)\n",d,docFile,docLine,stripWhiteSpace);
QCString doc;
if (stripWhiteSpace)
{
// 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,
s++;
}
if (c=='\0') return;
m_doc=d+so;
doc=d+so;
// zero any trailing whitespace
int e=m_doc.length()-1;
while (e>=0 && (c=m_doc.at(e)) && (c==' ' || c=='\r' || c=='\n'))
int e=doc.length()-1;
while (e>=0 && (c=doc.at(e)) && (c==' ' || c=='\r' || c=='\n'))
{
m_doc.at(e)='\0';
doc.at(e)='\0';
e--;
}
}
else // don't strip whitespace
{
m_doc=d;
doc=d;
}
//printf("setting docs for %s: `%s'\n",name().data(),m_doc.data());
m_doc=doc;
m_docFile = docFile;
m_docLine = docLine;
}
......@@ -163,7 +165,7 @@ void Definition::setBriefDescription(const char *b,const char *briefFile,int bri
{
if (b==0) return;
//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();
if (bl>0) // add puntuation if needed
{
......
......@@ -2143,7 +2143,7 @@ endhref:
//---------------------------------------------------------------------------
int DocInternal::parse()
int DocInternal::parse(int level)
{
int retval=RetVal_OK;
g_nodeStack.push(this);
......@@ -2170,25 +2170,24 @@ int DocInternal::parse()
{
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();
// then parse any number of level1 sections
while (retval==RetVal_Section)
// then parse any number of level-n sections
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];
//int secLev = sec->type==SectionInfo::Subsection ? 2 : 1;
//if (secLev!=1) // wrong level
//{
// 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();
//}
DocSection *s=new DocSection(this,level,g_token->sectionId);
m_children.append(s);
retval = s->parse();
}
if (retval==RetVal_Internal)
......@@ -2503,6 +2502,32 @@ getrow:
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()
......@@ -4496,6 +4521,12 @@ int DocSection::parse()
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
{
}
......@@ -4659,7 +4690,7 @@ void DocRoot::parse()
{
DocInternal *in = new DocInternal(this);
m_children.append(in);
retval = in->parse();
retval = in->parse(1);
}
......
......@@ -821,7 +821,7 @@ class DocInternal : public CompAccept<DocInternal>, public DocNode
{
public:
DocInternal(DocNode *parent) : m_parent(parent) {}
int parse();
int parse(int);
Kind kind() const { return Kind_Internal; }
DocNode *parent() const { return m_parent; }
void accept(DocVisitor *v) { CompAccept<DocInternal>::accept(this,v); }
......@@ -1103,6 +1103,7 @@ class DocHtmlCaption : public CompAccept<DocHtmlCaption>, public DocNode
private:
DocNode * m_parent;
HtmlAttribList m_attribs;
bool m_atTop;
};
/*! @brief Node representing a HTML table row */
......@@ -1137,27 +1138,8 @@ class DocHtmlTable : public CompAccept<DocHtmlTable>, public DocNode
bool hasCaption() { return m_caption!=0; }
const HtmlAttribList &attribs() const { return m_attribs; }
int parse();
uint 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 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);
}
uint numCols() const;
void accept(DocVisitor *v);
private:
DocNode * m_parent;
......
......@@ -19,6 +19,14 @@
#ifndef _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
class DocWord;
class DocWhiteSpace;
......@@ -38,7 +46,6 @@ class DocVerbatim;
class DocXRefItem;
class DocHtmlList;
class DocHtmlListItem;
//class DocHtmlPre;
class DocHtmlDescList;
class DocHtmlDescTitle;
class DocHtmlDescData;
......@@ -74,8 +81,12 @@ class DocText;
*/
class DocVisitor
{
int m_id;
public:
DocVisitor(int id) : m_id(id) {}
virtual ~DocVisitor() {}
int id() const { return m_id; }
/*! @name Visitor functions for leaf nodes
* @{
*/
......@@ -120,8 +131,6 @@ class DocVisitor
virtual void visitPost(DocHtmlListItem *) = 0;
virtual void visitPre(DocHtmlListItem *) = 0;
virtual void visitPost(DocHtmlList *) = 0;
//virtual void visitPre(DocHtmlPre *) = 0;
//virtual void visitPost(DocHtmlPre *) = 0;
virtual void visitPre(DocHtmlDescList *) = 0;
virtual void visitPost(DocHtmlDescList *) = 0;
virtual void visitPre(DocHtmlDescTitle *) = 0;
......
......@@ -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()
{
ClassSDict::Iterator cli(Doxygen::classSDict);
......@@ -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");
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
// 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
{
......@@ -2226,8 +2252,8 @@ static void buildFunctionList(Entry *root)
);
// otherwise, allow a duplicate global member with the same argument list
//printf("combining function with prototype found=%d `%s'<->`%s'!\n",
// found,fd->absFilePath().data(),root->fileName.data());
//printf("combining function with prototype found=%d in namespace %s\n",
// found,nsName.data());
// merge argument lists
//mergeArguments(root->argList,md->argumentList());
......@@ -2266,10 +2292,19 @@ static void buildFunctionList(Entry *root)
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())
{
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);
......@@ -2279,10 +2314,17 @@ static void buildFunctionList(Entry *root)
if (md->getGroupDef()==0 && root->groups->first())
{
// 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);
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)
{
......@@ -8198,7 +8240,7 @@ void generateOutput()
cleanUpDoxygen();
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,
Doxygen::sysElapsedTime
);
......
......@@ -43,7 +43,7 @@ static QString htmlAttribsToString(const HtmlAttribList &attribs)
//-------------------------------------------------------------------------
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)
//if (cd->getNamespaceDef()) namesp=cd->getNamespaceDef()->displayName();
//QCString cname=cd->className();
extractNamespaceName(cd->name(),cname,namesp);
QCString nsDispName;
if (Config_getBool("OPTIMIZE_OUTPUT_JAVA"))
{
nsDispName=substitute(namesp,"::",".");
}
else
{
nsDispName=namesp.copy();
}
ol.writeObjectLink(cd->getReference(),
cd->getOutputFileBase(),0,cname);
......@@ -1495,11 +1504,11 @@ void writeAlphabeticalClassList(OutputList &ol)
if (nd && nd->isLinkable())
{
ol.writeObjectLink(nd->getReference(),
nd->getOutputFileBase(),0,namesp);
nd->getOutputFileBase(),0,nsDispName);
}
else
{
ol.docify(namesp);
ol.docify(nsDispName);
}
ol.docify(")");
}
......
......@@ -80,7 +80,7 @@ QString LatexDocVisitor::escapeMakeIndexChars(const char *s)
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)
if (m_hide) return;
startLink(w->ref(),w->file(),w->anchor());
filter(w->word());
endLink();
endLink(w->ref(),w->file(),w->anchor());
}
void LatexDocVisitor::visit(DocWhiteSpace *w)
......@@ -797,10 +797,10 @@ void LatexDocVisitor::visitPre(DocLink *lnk)
startLink(lnk->ref(),lnk->file(),lnk->anchor());
}
void LatexDocVisitor::visitPost(DocLink *)
void LatexDocVisitor::visitPost(DocLink *lnk)
{
if (m_hide) return;
endLink();
endLink(lnk->ref(),lnk->file(),lnk->anchor());
}
void LatexDocVisitor::visitPre(DocRef *ref)
......@@ -810,10 +810,10 @@ void LatexDocVisitor::visitPre(DocRef *ref)
if (!ref->hasLinkText()) filter(ref->targetTitle());
}
void LatexDocVisitor::visitPost(DocRef *)
void LatexDocVisitor::visitPost(DocRef *ref)
{
if (m_hide) return;
endLink();
endLink(ref->ref(),ref->file(),ref->anchor());
}
void LatexDocVisitor::visitPre(DocSecRefItem *)
......@@ -942,10 +942,10 @@ void LatexDocVisitor::visitPre(DocInternalRef *ref)
startLink(0,ref->file(),ref->anchor());
}
void LatexDocVisitor::visitPost(DocInternalRef *)
void LatexDocVisitor::visitPost(DocInternalRef *ref)
{
if (m_hide) return;
endLink();
endLink(0,ref->file(),ref->anchor());
}
void LatexDocVisitor::visitPre(DocCopy *)
......@@ -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 << "}";
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()
......
......@@ -135,7 +135,8 @@ class LatexDocVisitor : public DocVisitor
void filter(const char *str);
void startLink(const QString &ref,const QString &file,
const QString &anchor);
void endLink();
void endLink(const QString &ref,const QString &file,
const QString &anchor);
QString escapeMakeIndexChars(const char *s);
void pushEnabled();
......
......@@ -27,7 +27,7 @@
#include "message.h"
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)
{
}
......
......@@ -84,6 +84,7 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
if (defArgList==0) return; // member has no function like argument list
if (!md->isDefine()) ol.docify(" ");
//printf("writeDefArgList(%d)\n",defArgList->count());
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.endMemberDocName();
......
......@@ -413,7 +413,7 @@ private:
};
PerlModDocVisitor::PerlModDocVisitor(PerlModOutput &output)
: m_output(output), m_textmode(false)
: DocVisitor(DocVisitor_Other), m_output(output), m_textmode(false)
{
m_output.openList("doc");
}
......
......@@ -25,7 +25,8 @@
class PrintDocVisitor : public DocVisitor
{
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 @@
#include "message.h"
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;
static QCString xrefItemTitle;
static QCString xrefListTitle;
static QCString g_skipBlockName;
//-----------------------------------------------------------------------------
......@@ -2809,6 +2810,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastCContext = YY_START;
BEGIN(SkipCxxComment);
}
<SkipInits>\" {
lastStringContext=YY_START;
BEGIN( SkipString );
}
<SkipInits>; {
warn(yyFileName,yyLineNr,
"Warning: Found ';' while parsing initializer list! "
......@@ -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] {
lastVerbState=YY_START;
current->doc+="\\verbatim";
g_skipBlockName="verbatim";
BEGIN(SkipVerbatim);
}
<JavaDoc>{CMD}"verbatim"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->brief+="\\verbatim";
g_skipBlockName="verbatim";
BEGIN(SkipVerbatim);
}
<Doc,PageDoc,ClassDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->doc+="\\latexonly";
g_skipBlockName="latexonly";
BEGIN(SkipVerbatim);
}
<JavaDoc>{CMD}"latexonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->brief+="\\latexonly";
g_skipBlockName="latexonly";
BEGIN(SkipVerbatim);
}
<Doc,PageDoc,ClassDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->doc+="\\htmlonly";
g_skipBlockName="htmlonly";
BEGIN(SkipVerbatim);
}
<JavaDoc>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
lastVerbState=YY_START;
current->brief+="\\htmlonly";
g_skipBlockName="htmlonly";
BEGIN(SkipVerbatim);
}
<Doc,PageDoc,ClassDoc>{CMD}"addindex"{B}+[^\n]+ {
......@@ -3946,7 +3957,13 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<SkipVerbatim>. {
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";
BEGIN(lastCodeState);
}
......@@ -3975,6 +3992,12 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<SkipCode>. {
*pSkipDoc+=*yytext;
}
<SkipCode><<EOF>> {
warn(yyFileName,yyLineNr,
"Warning: reached end of file while inside a @code block; check for missing @endcode!"
);
yyterminate();
}
<AnchorLabel>{LABELID} {
SectionInfo *si = new SectionInfo(yyFileName,yytext,0,SectionInfo::Anchor);
Doxygen::sectionDict.insert(yytext,si);
......@@ -4494,6 +4517,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->name = current->name.stripWhiteSpace();
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,PageDoc,AfterDoc,LineDoc,ClassDoc>("\\\\"|"@@") { current->doc += yytext; }
<Doc>. { current->doc += *yytext; }
......
......@@ -16,6 +16,8 @@
* Version: 1.3 (2003/05/01)
*
* History:
* 1.3.2:
* - Updated to Doxygen 1.3.2
* 1.3:
* - Updated to Doxygen 1.3.x.
* 1.2.19:
......@@ -27,7 +29,7 @@
#ifndef TRANSLATOR_BR_H
#define TRANSLATOR_BR_H
class TranslatorBrazilian: public TranslatorAdapter_1_3_1
class TranslatorBrazilian: public Translator
{
public:
......@@ -1460,5 +1462,22 @@ class TranslatorBrazilian: public TranslatorAdapter_1_3_1
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
......@@ -40,7 +40,7 @@
#ifndef TRANSLATOR_PT_H
#define TRANSLATOR_PT_H
class TranslatorPortuguese : public TranslatorAdapter_1_3_1
class TranslatorPortuguese : public Translator
{
public:
......
......@@ -20,7 +20,7 @@
// translation by Dejan D. M. Milosavljevic <dmilos@email.com>;<dmilosx@ptt.yu>
class TranslatorSerbian : public TranslatorAdapter_1_3_1
class TranslatorSerbian : public Translator
{
private:
QCString decode(const QCString& sInput)
......
......@@ -41,7 +41,7 @@
// Translator class (by the local maintainer) when the localized
// translator is made up-to-date again.
class TranslatorChinesetraditional : public TranslatorAdapter_1_2_16
class TranslatorChinesetraditional : public Translator
{
public:
......
......@@ -641,12 +641,49 @@ ClassDef *getResolvedClass(
}
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 (scope!=Doxygen::globalScope)
{
cd = Doxygen::classSDict.find(scope->name()+"::"+name);
}
else
{
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;
}
......@@ -831,7 +868,7 @@ void linkifyText(const TextGeneratorIntf &out,Definition *scope,const char * /*n
//int scopeOffset=scopeName.length();
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 prefix;
replaceNamespaceAliases(fullName,fullName.length());
......@@ -2749,7 +2786,7 @@ bool generateLink(OutputDocInterface &od,const char *clName,
//PageDef *pageDef=0;
QCString anchor,linkText=linkToText(lt);
//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
//{
......
......@@ -28,7 +28,7 @@
#include "util.h"
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 *)
void XmlDocVisitor::visitPre(DocSection *s)
{
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());
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)
......@@ -575,13 +577,13 @@ void XmlDocVisitor::visitPost(DocHRef *)
void XmlDocVisitor::visitPre(DocHtmlHeader *header)
{
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;
m_t << "</heading" << header->level() << ">\n";
m_t << "</heading>\n";
}
void XmlDocVisitor::visitPre(DocImage *img)
......@@ -689,7 +691,7 @@ void XmlDocVisitor::visitPost(DocSecRefList *)
void XmlDocVisitor::visitPre(DocLanguage *l)
{
if (m_hide) return;
m_t << "<language id=\"" << l->id() << "\">";
m_t << "<language langid=\"" << l->id() << "\">";
}
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