diff options
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | addon/xmlparse/compoundhandler.cpp | 12 | ||||
-rw-r--r-- | addon/xmlparse/compoundhandler.h | 3 | ||||
-rw-r--r-- | addon/xmlparse/dochandler.cpp | 287 | ||||
-rw-r--r-- | addon/xmlparse/dochandler.h | 171 | ||||
-rw-r--r-- | packages/rpm/doxygen.spec | 2 | ||||
-rw-r--r-- | src/code.l | 75 | ||||
-rw-r--r-- | src/definition.cpp | 6 | ||||
-rw-r--r-- | src/definition.h | 2 | ||||
-rw-r--r-- | src/doc.l | 2 | ||||
-rw-r--r-- | src/doxygen.cpp | 27 | ||||
-rw-r--r-- | src/filedef.cpp | 36 | ||||
-rw-r--r-- | src/formula.cpp | 7 | ||||
-rw-r--r-- | src/htmlgen.cpp | 12 | ||||
-rw-r--r-- | src/htmlhelp.cpp | 5 | ||||
-rw-r--r-- | src/memberdef.cpp | 1 | ||||
-rw-r--r-- | src/memberdef.h | 7 | ||||
-rw-r--r-- | src/translator_adapter.h | 42 | ||||
-rw-r--r-- | src/translator_cz.h | 16 | ||||
-rw-r--r-- | src/translator_ru.h | 27 | ||||
-rw-r--r-- | src/xmlgen.cpp | 16 |
23 files changed, 627 insertions, 139 deletions
@@ -1,6 +1,6 @@ -DOXYGEN Version 1.2.11-20011104 +DOXYGEN Version 1.2.11-20011111 Please read the installation section of the manual for instructions. -------- -Dimitri van Heesch (04 November 2001) +Dimitri van Heesch (11 November 2001) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.2.11_20011104 +DOXYGEN Version 1.2.11_20011111 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) (04 November 2001) +Dimitri van Heesch (dimitri@stack.nl) (11 November 2001) @@ -1 +1 @@ -1.2.11-20011104 +1.2.11-20011111 diff --git a/addon/xmlparse/compoundhandler.cpp b/addon/xmlparse/compoundhandler.cpp index 9763e9d..0b22ef2 100644 --- a/addon/xmlparse/compoundhandler.cpp +++ b/addon/xmlparse/compoundhandler.cpp @@ -18,7 +18,7 @@ #include "dochandler.h" CompoundHandler::CompoundHandler(IBaseHandler *parent) - : m_parent(parent), m_brief(0), m_detailed(0) + : m_parent(parent), m_brief(0), m_detailed(0), m_programListing(0) { m_superClasses.setAutoDelete(TRUE); m_subClasses.setAutoDelete(TRUE); @@ -43,12 +43,15 @@ CompoundHandler::CompoundHandler(IBaseHandler *parent) addStartHandler("location",this,&CompoundHandler::startLocation); addEndHandler("location"); + + addStartHandler("programlisting",this,&CompoundHandler::startProgramListing); } CompoundHandler::~CompoundHandler() { delete m_brief; delete m_detailed; + delete m_programListing; } void CompoundHandler::startSection(const QXmlAttributes& attrib) @@ -72,6 +75,13 @@ void CompoundHandler::startDetailedDesc(const QXmlAttributes& attrib) m_detailed = docHandler; } +void CompoundHandler::startProgramListing(const QXmlAttributes& attrib) +{ + ProgramListingHandler *plHandler = new ProgramListingHandler(this); + plHandler->startProgramListing(attrib); + m_programListing = plHandler; +} + void CompoundHandler::startCompound(const QXmlAttributes& attrib) { m_parent->setDelegate(this); diff --git a/addon/xmlparse/compoundhandler.h b/addon/xmlparse/compoundhandler.h index 420cac6..5191a2f 100644 --- a/addon/xmlparse/compoundhandler.h +++ b/addon/xmlparse/compoundhandler.h @@ -24,6 +24,7 @@ #include "doxmlintf.h" class DocHandler; +class ProgramListingHandler; class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler> { @@ -37,6 +38,7 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler> virtual void startBriefDesc(const QXmlAttributes& attrib); virtual void startDetailedDesc(const QXmlAttributes& attrib); virtual void startLocation(const QXmlAttributes& attrib); + virtual void startProgramListing(const QXmlAttributes& attrib); CompoundHandler(IBaseHandler *parent); virtual ~CompoundHandler(); @@ -72,6 +74,7 @@ class CompoundHandler : public ICompound, public BaseHandler<CompoundHandler> IBaseHandler *m_parent; DocHandler *m_brief; DocHandler *m_detailed; + ProgramListingHandler *m_programListing; QString m_id; QString m_kind; QString m_name; diff --git a/addon/xmlparse/dochandler.cpp b/addon/xmlparse/dochandler.cpp index 53a300a..5dff81a 100644 --- a/addon/xmlparse/dochandler.cpp +++ b/addon/xmlparse/dochandler.cpp @@ -540,7 +540,7 @@ void RefHandler::endRef() { m_linkText = m_curString; m_parent->setDelegate(0); - printf("End ref\n"); + printf("End ref: text=`%s'\n",m_linkText.data()); } @@ -745,6 +745,83 @@ void VariableListHandler::startListItem(const QXmlAttributes& attrib) } //---------------------------------------------------------------------- +// AnchorHandler +//---------------------------------------------------------------------- + +AnchorHandler::AnchorHandler(IBaseHandler *parent) + : DocNode(Anchor), m_parent(parent) +{ + m_children.setAutoDelete(TRUE); + addEndHandler("anchor",this,&AnchorHandler::endAnchor); + addStartHandler("ref",this,&AnchorHandler::startRef); +} + +AnchorHandler::~AnchorHandler() +{ +} + +void AnchorHandler::startAnchor(const QXmlAttributes& attrib) +{ + m_id = attrib.value("id"); + m_curString=""; + m_parent->setDelegate(this); +} + +void AnchorHandler::endAnchor() +{ + addTextNode(); + printf("anchor id=`%s'\n",m_id.data()); + m_parent->setDelegate(0); +} + +void AnchorHandler::startRef(const QXmlAttributes& attrib) +{ + addTextNode(); + RefHandler *rh = new RefHandler(this); + m_children.append(rh); + rh->startRef(attrib); +} + +void AnchorHandler::addTextNode() +{ + if (!m_curString.isEmpty()) + { + m_children.append(new TextNode(m_curString,DocNode::Normal)); + printf("addTextNode() text=\"%s\"\n", + m_curString.data()); + m_curString=""; + } +} + +//---------------------------------------------------------------------- +// HighlightHandler +//---------------------------------------------------------------------- + +HighlightHandler::HighlightHandler(IBaseHandler *parent) + : DocNode(Highlight), m_parent(parent) +{ + addEndHandler("highlight",this,&HighlightHandler::endHighlight); +} + +HighlightHandler::~HighlightHandler() +{ +} + +void HighlightHandler::startHighlight(const QXmlAttributes& attrib) +{ + m_class = attrib.value("class"); + m_curString=""; + m_parent->setDelegate(this); +} + +void HighlightHandler::endHighlight() +{ + m_text = m_curString; + printf("highlight class=`%s' text=`%s'\n",m_class.data(),m_text.data()); + m_parent->setDelegate(0); +} + +//---------------------------------------------------------------------- // CodeLineHandler //---------------------------------------------------------------------- @@ -754,6 +831,9 @@ CodeLineHandler::CodeLineHandler(IBaseHandler *parent) m_children.setAutoDelete(TRUE); addEndHandler("codeline",this,&CodeLineHandler::endCodeLine); addEndHandler("linenumber",this,&CodeLineHandler::endLineNumber); + addStartHandler("highlight",this,&CodeLineHandler::startHighlight); + addStartHandler("ref",this,&CodeLineHandler::startRef); + addStartHandler("anchor",this,&CodeLineHandler::startAnchor); } CodeLineHandler::~CodeLineHandler() @@ -768,6 +848,7 @@ void CodeLineHandler::startCodeLine(const QXmlAttributes& /*attrib*/) void CodeLineHandler::endCodeLine() { + addTextNode(); printf("end codeline\n"); m_parent->setDelegate(0); } @@ -780,10 +861,46 @@ void CodeLineHandler::startLineNumber(const QXmlAttributes& /*attrib*/) void CodeLineHandler::endLineNumber() { + addTextNode(); printf("end linenumber\n"); m_parent->setDelegate(0); } +void CodeLineHandler::startHighlight(const QXmlAttributes& attrib) +{ + addTextNode(); + HighlightHandler *hlh = new HighlightHandler(this); + m_children.append(hlh); + hlh->startHighlight(attrib); +} + +void CodeLineHandler::startAnchor(const QXmlAttributes& attrib) +{ + addTextNode(); + AnchorHandler *ah = new AnchorHandler(this); + m_children.append(ah); + ah->startAnchor(attrib); +} + +void CodeLineHandler::startRef(const QXmlAttributes& attrib) +{ + addTextNode(); + RefHandler *rh = new RefHandler(this); + m_children.append(rh); + rh->startRef(attrib); +} + +void CodeLineHandler::addTextNode() +{ + if (!m_curString.isEmpty()) + { + m_children.append(new TextNode(m_curString,DocNode::Normal)); + printf("addTextNode() text=\"%s\"\n", + m_curString.data()); + m_curString=""; + } +} + //---------------------------------------------------------------------- // ProgramListingHandler //---------------------------------------------------------------------- @@ -841,6 +958,142 @@ void ProgramListingHandler::startCodeLine(const QXmlAttributes& attrib) } //---------------------------------------------------------------------- +// FormulaHandler +//---------------------------------------------------------------------- + +FormulaHandler::FormulaHandler(IBaseHandler *parent) + : DocNode(Formula), m_parent(parent) +{ + addEndHandler("formula",this,&FormulaHandler::endFormula); +} + +FormulaHandler::~FormulaHandler() +{ +} + +void FormulaHandler::startFormula(const QXmlAttributes& attrib) +{ + m_id = attrib.value("id"); + m_curString=""; + m_parent->setDelegate(this); +} + +void FormulaHandler::endFormula() +{ + m_text = m_curString; + printf("formula id=`%s' text=`%s'\n",m_id.data(),m_text.data()); + m_parent->setDelegate(0); +} + +//---------------------------------------------------------------------- +// ImageHandler +//---------------------------------------------------------------------- + +ImageHandler::ImageHandler(IBaseHandler *parent) + : DocNode(Image), m_parent(parent) +{ + addEndHandler("image",this,&ImageHandler::endImage); +} + +ImageHandler::~ImageHandler() +{ +} + +void ImageHandler::startImage(const QXmlAttributes& attrib) +{ + m_name = attrib.value("name"); + m_curString=""; + m_parent->setDelegate(this); +} + +void ImageHandler::endImage() +{ + m_caption = m_curString; + printf("image name=`%s' caption=`%s'\n",m_name.data(),m_caption.data()); + m_parent->setDelegate(0); +} + +//---------------------------------------------------------------------- +// DotFileHandler +//---------------------------------------------------------------------- + +DotFileHandler::DotFileHandler(IBaseHandler *parent) + : DocNode(DotFile), m_parent(parent) +{ + addEndHandler("image",this,&DotFileHandler::endDotFile); +} + +DotFileHandler::~DotFileHandler() +{ +} + +void DotFileHandler::startDotFile(const QXmlAttributes& attrib) +{ + m_name = attrib.value("name"); + m_curString=""; + m_parent->setDelegate(this); +} + +void DotFileHandler::endDotFile() +{ + m_caption = m_curString; + printf("image name=`%s' caption=`%s'\n",m_name.data(),m_caption.data()); + m_parent->setDelegate(0); +} + +//---------------------------------------------------------------------- +// IndexEntryHandler +//---------------------------------------------------------------------- + +IndexEntryHandler::IndexEntryHandler(IBaseHandler *parent) + : DocNode(IndexEntry), m_parent(parent) +{ + addEndHandler("indexentry",this,&IndexEntryHandler::endIndexEntry); + addStartHandler("primaryie",this,&IndexEntryHandler::startPrimaryIE); + addEndHandler("primaryie",this,&IndexEntryHandler::endPrimaryIE); + addStartHandler("secondaryie",this,&IndexEntryHandler::startSecondaryIE); + addEndHandler("secondaryie",this,&IndexEntryHandler::endSecondaryIE); +} + +IndexEntryHandler::~IndexEntryHandler() +{ +} + +void IndexEntryHandler::startIndexEntry(const QXmlAttributes& /*attrib*/) +{ + printf("start index entry\n"); + m_parent->setDelegate(this); +} + +void IndexEntryHandler::endIndexEntry() +{ + printf("index entry primary=`%s' secondary=`%s'\n", + m_primary.data(),m_secondary.data()); + m_parent->setDelegate(0); +} + +void IndexEntryHandler::startPrimaryIE(const QXmlAttributes& /*attrib*/) +{ + m_curString=""; +} + +void IndexEntryHandler::endPrimaryIE() +{ + m_primary = m_curString; +} + +void IndexEntryHandler::startSecondaryIE(const QXmlAttributes& /*attrib*/) +{ + m_curString=""; +} + +void IndexEntryHandler::endSecondaryIE() +{ + m_secondary = m_curString; +} + + +//---------------------------------------------------------------------- // ParagraphHandler //---------------------------------------------------------------------- @@ -866,6 +1119,10 @@ ParagraphHandler::ParagraphHandler(IBaseHandler *parent) addStartHandler("email",this,&ParagraphHandler::startEMail); addStartHandler("link",this,&ParagraphHandler::startLink); addStartHandler("programlisting",this,&ParagraphHandler::startProgramListing); + addStartHandler("formula",this,&ParagraphHandler::startFormula); + addStartHandler("image",this,&ParagraphHandler::startImage); + addStartHandler("dotfile",this,&ParagraphHandler::startDotFile); + addStartHandler("indexentry",this,&ParagraphHandler::startIndexEntry); } ParagraphHandler::~ParagraphHandler() @@ -974,6 +1231,34 @@ void ParagraphHandler::startProgramListing(const QXmlAttributes& attrib) m_children.append(pl); } +void ParagraphHandler::startFormula(const QXmlAttributes& attrib) +{ + FormulaHandler *fh = new FormulaHandler(this); + fh->startFormula(attrib); + m_children.append(fh); +} + +void ParagraphHandler::startImage(const QXmlAttributes& attrib) +{ + ImageHandler *ih = new ImageHandler(this); + ih->startImage(attrib); + m_children.append(ih); +} + +void ParagraphHandler::startDotFile(const QXmlAttributes& attrib) +{ + DotFileHandler *df = new DotFileHandler(this); + df->startDotFile(attrib); + m_children.append(df); +} + +void ParagraphHandler::startIndexEntry(const QXmlAttributes& attrib) +{ + IndexEntryHandler *df = new IndexEntryHandler(this); + df->startIndexEntry(attrib); + m_children.append(df); +} + void ParagraphHandler::addTextNode() { if (!m_curString.isEmpty()) diff --git a/addon/xmlparse/dochandler.h b/addon/xmlparse/dochandler.h index 688fcf7..a5b7b8c 100644 --- a/addon/xmlparse/dochandler.h +++ b/addon/xmlparse/dochandler.h @@ -64,7 +64,13 @@ class DocNode EMail, Link, ProgramListing, - CodeLine + CodeLine, + Highlight, + Anchor, + Formula, + Image, + DotFile, + IndexEntry }; DocNode(NodeKind k) : m_kind(k) {} virtual ~DocNode() {} @@ -343,9 +349,9 @@ class RefHandler : public DocNode, public BaseHandler<RefHandler> void endRef(); private: IBaseHandler *m_parent; - QCString m_refId; - QCString m_anchor; - QCString m_linkText; + QString m_refId; + QString m_anchor; + QString m_linkText; }; //----------------------------------------------------------------------------- @@ -451,6 +457,52 @@ class VariableListHandler : public DocNode, public BaseHandler<VariableListHandl //----------------------------------------------------------------------------- +/*! \brief Node representing a text anchor + * + */ +// children: ref +class AnchorHandler : public DocNode, public BaseHandler<AnchorHandler> +{ + public: + AnchorHandler(IBaseHandler *parent); + virtual ~AnchorHandler(); + void startAnchor(const QXmlAttributes& attrib); + void endAnchor(); + void startRef(const QXmlAttributes& attrib); + + private: + void addTextNode(); + IBaseHandler *m_parent; + QList<DocNode> m_children; + QString m_id; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing a highlighted text fragment. + * + */ +// children: - +class HighlightHandler : public DocNode, public BaseHandler<HighlightHandler> +{ + public: + HighlightHandler(IBaseHandler *parent); + virtual ~HighlightHandler(); + void startHighlight(const QXmlAttributes& attrib); + void endHighlight(); + + private: + IBaseHandler *m_parent; + QString m_class; + QString m_text; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing a line of code. + * + */ +// children: linenumber, highlight, anchor, ref class CodeLineHandler : public DocNode, public BaseHandler<CodeLineHandler> { public: @@ -459,10 +511,16 @@ class CodeLineHandler : public DocNode, public BaseHandler<CodeLineHandler> virtual void endCodeLine(); virtual void startLineNumber(const QXmlAttributes&); virtual void endLineNumber(); + virtual void startHighlight(const QXmlAttributes&); + virtual void startAnchor(const QXmlAttributes&); + virtual void startRef(const QXmlAttributes&); CodeLineHandler(IBaseHandler *parent); virtual ~CodeLineHandler(); + private: + void addTextNode(); + IBaseHandler *m_parent; int m_lineNumber; QString m_anchor; @@ -475,6 +533,7 @@ class CodeLineHandler : public DocNode, public BaseHandler<CodeLineHandler> /*! \brief Node representing a program listing * */ +// children: codeline, linenumber class ProgramListingHandler : public DocNode, public BaseHandler<ProgramListingHandler> { public: @@ -486,25 +545,109 @@ class ProgramListingHandler : public DocNode, public BaseHandler<ProgramListingH ProgramListingHandler(IBaseHandler *parent); virtual ~ProgramListingHandler(); private: - IBaseHandler *m_parent; - QList<CodeLineHandler> m_children; + IBaseHandler *m_parent; + QList<CodeLineHandler> m_children; bool m_hasLineNumber; }; //----------------------------------------------------------------------------- +/*! \brief Node representing a formula. + * + */ +// children: - +class FormulaHandler : public DocNode, public BaseHandler<FormulaHandler> +{ + public: + FormulaHandler(IBaseHandler *parent); + virtual ~FormulaHandler(); + void startFormula(const QXmlAttributes& attrib); + void endFormula(); + + private: + IBaseHandler *m_parent; + QString m_id; + QString m_text; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing an image. + * + */ +// children: - +class ImageHandler : public DocNode, public BaseHandler<ImageHandler> +{ + public: + ImageHandler(IBaseHandler *parent); + virtual ~ImageHandler(); + void startImage(const QXmlAttributes& attrib); + void endImage(); + + private: + IBaseHandler *m_parent; + QString m_name; + QString m_caption; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing a dot file. + * + */ +// children: - +class DotFileHandler : public DocNode, public BaseHandler<DotFileHandler> +{ + public: + DotFileHandler(IBaseHandler *parent); + virtual ~DotFileHandler(); + void startDotFile(const QXmlAttributes& attrib); + void endDotFile(); + + private: + IBaseHandler *m_parent; + QString m_name; + QString m_caption; +}; + +//----------------------------------------------------------------------------- + +/*! \brief Node representing an entry in the index. + * + */ +// children: - +class IndexEntryHandler : public DocNode, public BaseHandler<IndexEntryHandler> +{ + public: + IndexEntryHandler(IBaseHandler *parent); + virtual ~IndexEntryHandler(); + void startIndexEntry(const QXmlAttributes& attrib); + void endIndexEntry(); + void startPrimaryIE(const QXmlAttributes& attrib); + void endPrimaryIE(); + void startSecondaryIE(const QXmlAttributes& attrib); + void endSecondaryIE(); + + private: + IBaseHandler *m_parent; + QString m_primary; + QString m_secondary; +}; + +//----------------------------------------------------------------------------- + /*! \brief Node representing a paragraph of text and commands. * */ // children: itemizedlist, orderedlist, parameterlist, simplesect, ref, // variablelist, hruler, linebreak, ulink, email, link -// TODO: -// programlisting, -// table, -// indexentry, formula, image, dotfile +// programlisting, formula, image, dotfile, indexentry +// // children handled by MarkupHandler: // bold, computeroutput, emphasis, center, // small, subscript, superscript. +// TODO: +// table class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> { public: @@ -522,6 +665,10 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> virtual void startEMail(const QXmlAttributes& attrib); virtual void startLink(const QXmlAttributes& attrib); virtual void startProgramListing(const QXmlAttributes& attrib); + virtual void startFormula(const QXmlAttributes& attrib); + virtual void startImage(const QXmlAttributes& attrib); + virtual void startDotFile(const QXmlAttributes& attrib); + virtual void startIndexEntry(const QXmlAttributes& attrib); ParagraphHandler(IBaseHandler *parent); virtual ~ParagraphHandler(); @@ -538,7 +685,8 @@ class ParagraphHandler : public DocNode, public BaseHandler<ParagraphHandler> /*! \brief Node representing a documentation block. * */ -// children: para, title, sect1, sect2, sect3 +// children: para +// TODO: title, sect1, sect2, sect3 class DocHandler : public BaseHandler<DocHandler> { public: @@ -548,6 +696,7 @@ class DocHandler : public BaseHandler<DocHandler> DocHandler(IBaseHandler *parent); virtual ~DocHandler(); + private: IBaseHandler *m_parent; QList<DocNode> m_children; diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index d4487da..1bd867c 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,5 +1,5 @@ Name: doxygen -Version: 1.2.11_20011104 +Version: 1.2.11_20011111 Summary: documentation system for C, C++ and IDL Release: 4 Source: doxygen-%{version}.src.tar.gz @@ -163,6 +163,14 @@ void VariableContext::addVariable(const QCString &type,const QCString &name) { QCString ltype = type.simplifyWhiteSpace(); QCString lname = name.simplifyWhiteSpace(); + if (ltype.left(7)=="struct ") + { + ltype = ltype.right(ltype.length()-7); + } + else if (ltype.left(6)=="union ") + { + ltype = ltype.right(ltype.length()-6); + } if (ltype.isEmpty() || lname.isEmpty()) return; DBG_CTX((stderr,"** AddVariable trying: type=%s name=%s\n",ltype.data(),lname.data())); Scope *scope = m_scopes.count()==0 ? &m_globalScope : m_scopes.getLast(); @@ -338,7 +346,7 @@ static void startCodeLine() g_realScope = d->name().copy(); //printf("Real scope: `%s'\n",g_realScope.data()); g_bodyCurlyCount = 0; - if (g_currentMemberDef) anchor=g_currentMemberDef->anchor(); + if (g_currentMemberDef) anchor=g_currentMemberDef->getBodyAnchor(); g_code->startCodeAnchor(lineAnchor); g_code->writeCodeLink(d->getReference(),d->getOutputFileBase(), anchor,lineNumber); @@ -562,15 +570,25 @@ static MemberDef *setCallContextForVar(const QCString &name) static void generateClassOrGlobalLink(OutputDocInterface &ol,char *clName,int *clNameLen=0) { int i=0; + if (*clName=='~') // correct for matching negated values i.s.o. destructors. + { + g_code->codify("~"); + clName++; + } QCString className=clName; if (clNameLen) *clNameLen=0; if (className.isEmpty()) return; - ClassDef *cd=getResolvedClass(g_currentDefinition,className); - if (cd==0 && (i=className.find('<'))!=-1) + ClassDef *cd=0; + + if (!g_theVarContext.findVariable(className)) // not a local variable { - cd=getResolvedClass(g_currentDefinition,className.left(i)); + cd = getResolvedClass(g_currentDefinition,className); + if (cd==0 && (i=className.find('<'))!=-1) + { + cd=getResolvedClass(g_currentDefinition,className.left(i)); + } } - if (cd && cd->isLinkable()) + if (cd && cd->isLinkable()) // is it a linkable class { if (g_exampleBlock) { @@ -598,17 +616,18 @@ static void generateClassOrGlobalLink(OutputDocInterface &ol,char *clName,int *c MemberDef *md = setCallContextForVar(clName); if (md) { - Definition *d=md->getOuterScope(); - if (d && md->isLinkable()) + Definition *d = md->getOuterScope()==Doxygen::globalScope ? + md->getBodyDef() : md->getOuterScope(); + if (d && d->isLinkable() && md->isLinkable()) { - writeMultiLineCodeLink(ol,d->getReference(),d->getOutputFileBase(),md->anchor(),clName); + writeMultiLineCodeLink(ol,d->getReference(),d->getOutputFileBase(),md->getBodyAnchor(),clName); if (g_currentMemberDef) { - if (Config_getBool("REFERENCED_BY_RELATION")) + if (Config_getBool("REFERENCED_BY_RELATION") && g_currentMemberDef->isFunction()) { md->addSourceReferencedBy(g_currentMemberDef); } - if (Config_getBool("REFERENCES_RELATION")) + if (Config_getBool("REFERENCES_RELATION") && g_currentMemberDef->isFunction()) { g_currentMemberDef->addSourceReferences(md); } @@ -666,11 +685,11 @@ static bool getLink(const char *className, if (g_currentDefinition && g_currentMemberDef && md!=g_currentMemberDef && g_insideBody) { - if (Config_getBool("REFERENCED_BY_RELATION")) + if (Config_getBool("REFERENCED_BY_RELATION") && g_currentMemberDef->isFunction()) { md->addSourceReferencedBy(g_currentMemberDef); } - if (Config_getBool("REFERENCES_RELATION")) + if (Config_getBool("REFERENCES_RELATION") && g_currentMemberDef->isFunction()) { g_currentMemberDef->addSourceReferences(md); } @@ -678,7 +697,7 @@ static bool getLink(const char *className, //printf("d->getOutputBase()=`%s' name=`%s' member name=`%s'\n",d->getOutputFileBase().data(),d->name().data(),md->name().data()); writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(), - md->anchor(),text ? text : memberName); + md->getBodyAnchor(),text ? text : memberName); return TRUE; } } @@ -702,7 +721,8 @@ static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const c g_theCallContext.setClass(stripClassName(xmd->typeString())); - Definition *xd = xmd->getOuterScope(); + Definition *xd = xmd->getOuterScope()==Doxygen::globalScope ? + xmd->getBodyDef() : xmd->getOuterScope(); if (xd) { @@ -710,11 +730,11 @@ static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const c if (g_currentDefinition && g_currentMemberDef && xmd!=g_currentMemberDef && g_insideBody) { - if (Config_getBool("REFERENCED_BY_RELATION")) + if (Config_getBool("REFERENCED_BY_RELATION") && g_currentMemberDef->isFunction()) { xmd->addSourceReferencedBy(g_currentMemberDef); } - if (Config_getBool("REFERENCES_RELATION")) + if (Config_getBool("REFERENCES_RELATION") && g_currentMemberDef->isFunction()) { g_currentMemberDef->addSourceReferences(xmd); } @@ -722,7 +742,7 @@ static bool generateClassMemberLink(OutputDocInterface &ol,ClassDef *mcd,const c // write the actual link writeMultiLineCodeLink(ol,xd->getReference(), - xd->getOutputFileBase(),xmd->anchor(),memName); + xd->getOutputFileBase(),xmd->getBodyAnchor(),memName); return TRUE; } } @@ -1068,11 +1088,16 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" generateClassOrGlobalLink(*g_code,yytext); BEGIN( ClassVar ); } +<ClassVar>"=" { + g_code->codify(yytext); + unput(*yytext); + BEGIN( Body ); + } <ClassVar>{ID} { g_type = g_curClassName.copy(); g_name = yytext; g_theVarContext.addVariable(g_type,g_name); - g_code->codify(yytext); + generateClassOrGlobalLink(*g_code,yytext); } <ClassName,ClassVar>[ \t\n]*":"[ \t\n]* { codifyLines(yytext); @@ -1501,10 +1526,18 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" g_scopeStack.push(INNERBLOCK); } g_code->codify(")"); - startFontClass("keyword"); yytext[yyleng-1]='\0'; - codifyLines(yytext+1); - endFontClass(); + QCString cv(yytext+1); + if (!cv.stripWhiteSpace().isEmpty()) + { + startFontClass("keyword"); + codifyLines(yytext+1); + endFontClass(); + } + else // just whitespace + { + codifyLines(yytext+1); + } g_code->codify("{"); if (g_searchingForBody) { diff --git a/src/definition.cpp b/src/definition.cpp index 7597ead..dcd1517 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -347,7 +347,7 @@ void Definition::writeInlineCode(OutputList &ol,const char *scopeName) * definition is used. */ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName, - const QCString &text,MemberSDict *members) + const QCString &text,MemberSDict *members,bool /*funcOnly*/) { ol.pushGeneratorState(); if (Config_getBool("SOURCE_BROWSER") && members) @@ -425,12 +425,12 @@ void Definition::writeSourceRefList(OutputList &ol,const char *scopeName, void Definition::writeSourceReffedBy(OutputList &ol,const char *scopeName) { - writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict); + writeSourceRefList(ol,scopeName,theTranslator->trReferencedBy(),m_sourceRefByDict,FALSE); } void Definition::writeSourceRefs(OutputList &ol,const char *scopeName) { - writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict); + writeSourceRefList(ol,scopeName,theTranslator->trReferences(),m_sourceRefsDict,TRUE); } bool Definition::hasDocumentation() const diff --git a/src/definition.h b/src/definition.h index b98f0f2..0b9d4ff 100644 --- a/src/definition.h +++ b/src/definition.h @@ -141,7 +141,7 @@ class Definition private: void writeSourceRefList(OutputList &ol,const char *scopeName, - const QCString &text,MemberSDict *members); + const QCString &text,MemberSDict *members,bool); //QCString m_qualifiedName; // name of the definition QCString m_brief; // brief description QCString m_doc; // detailed description @@ -1135,7 +1135,7 @@ OPMASK ({B}*{OPNORM}({OPARG}?))|({OPCAST}{OPARG}) if (formula) { QCString formName; - formName.sprintf("form-%d.gif",formula->getId()); + formName.sprintf("form_%d",formula->getId()); outDoc->writeFormula(formName,formula->getFormulaText()); } } diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 005fb56..6db5d5d 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -2101,11 +2101,13 @@ static void findFriends() { mmd->setBodySegment(fmd->getStartBodyLine(),fmd->getEndBodyLine()); mmd->setBodyDef(fmd->getBodyDef()); + mmd->setBodyMember(fmd); } else if (mmd->getStartBodyLine()!=-1 && fmd->getStartBodyLine()==-1) { fmd->setBodySegment(mmd->getStartBodyLine(),mmd->getEndBodyLine()); fmd->setBodyDef(mmd->getBodyDef()); + fmd->setBodyMember(mmd); } } } @@ -2180,12 +2182,14 @@ static void transferFunctionDocumentation() if (mdec->getStartBodyLine()!=-1 && mdef->getStartBodyLine()==-1) { mdef->setBodySegment(mdec->getStartBodyLine(),mdec->getEndBodyLine()); - mdef->setBodyDef(mdec->getFileDef()); + mdef->setBodyDef(mdec->getBodyDef()); + mdef->setBodyMember(mdec); } else if (mdef->getStartBodyLine()!=-1 && mdec->getStartBodyLine()==-1) { mdec->setBodySegment(mdef->getStartBodyLine(),mdef->getEndBodyLine()); - mdec->setBodyDef(mdef->getFileDef()); + mdec->setBodyDef(mdef->getBodyDef()); + mdec->setBodyMember(mdef); } mdec->mergeMemberSpecifiers(mdef->getMemberSpecifiers()); mdef->mergeMemberSpecifiers(mdec->getMemberSpecifiers()); @@ -6194,7 +6198,12 @@ static int readFileOrDirectory(const char *s, bool errorIfNotExist=TRUE ) { - QFileInfo fi(s); + // strip trailing slashes + QCString fs = s; + char lc = fs.at(fs.length()-1); + if (lc=='/' || lc=='\\') fs = fs.left(fs.length()-1); + + QFileInfo fi(fs); //printf("readFileOrDirectory(%s)\n",s); int totalSize=0; { @@ -6666,12 +6675,12 @@ void parseInput() s=imagePathList.next(); } - QDictIterator<FileName> fndi(*Doxygen::imageNameDict); - FileName *fn; - for (;(fn=fndi.current());++fndi) - { - printf("File Name %s\n",fn->fileName()); - } + //QDictIterator<FileName> fndi(*Doxygen::imageNameDict); + //FileName *fn; + //for (;(fn=fndi.current());++fndi) + //{ + // printf("File Name %s\n",fn->fileName()); + //} msg("Searching for dot files...\n"); diff --git a/src/filedef.cpp b/src/filedef.cpp index 9384952..56b9fa2 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -425,48 +425,18 @@ void FileDef::writeSource(OutputList &ol) initParseCodeContext(); ol.startCodeFragment(); + //if (name().left(9)=="memory.c") + //{ parseCode(ol,0, fileToString(absFilePath(),Config_getBool("FILTER_SOURCE_FILES")), FALSE,0,this ); + //} ol.endCodeFragment(); endFile(ol); ol.enableAll(); } -#if 0 -/*! Adds a member \a md to the member group with id \a groupId. - */ -void FileDef::addMemberListToGroup(MemberList *ml, - bool (MemberDef::*func)() const) -{ - MemberListIterator mli(*ml); - MemberDef *md; - for (;(md=mli.current());++mli) - { - int groupId=md->getMemberGroupId(); - if ((md->*func)() && groupId!=-1) - { - QCString *pGrpHeader = Doxygen::memberHeaderDict[groupId]; - QCString *pDocs = Doxygen::memberDocDict[groupId]; - //printf("Member `%s' pGrpHeader=%p\n",md->name().data(),pGrpHeader); - if (pGrpHeader) - { - MemberGroup *mg = memberGroupDict->find(groupId); - if (mg==0) - { - mg = new MemberGroup(groupId,*pGrpHeader,pDocs ? pDocs->data() : 0); - memberGroupDict->insert(groupId,mg); - memberGroupList->append(mg); - } - //printf("insert member %s in group %s\n",md->name().data(),pGrpHeader->data()); - mg->insertMember(md); - md->setMemberGroup(mg); - } - } - } -} -#endif void FileDef::addMembersToMemberGroup() { diff --git a/src/formula.cpp b/src/formula.cpp index f7c77b8..96d2137 100644 --- a/src/formula.cpp +++ b/src/formula.cpp @@ -85,7 +85,7 @@ void FormulaList::generateBitmaps(const char *path) for (fli.toFirst();(formula=fli.current());++fli) { QCString resultName; - resultName.sprintf("form-%d.gif",formula->getId()); + resultName.sprintf("form_%d.gif",formula->getId()); // only formulas for which no image exists are generated QFileInfo fi(resultName); if (!fi.exists()) @@ -116,7 +116,7 @@ void FormulaList::generateBitmaps(const char *path) for (;(pagePtr=pli.current());++pli,++pageIndex) { int pageNum=*pagePtr; - msg("Generating image form-%d.gif for formula\n",pageNum); + msg("Generating image form_%d.gif for formula\n",pageNum); char dviArgs[4096]; QCString formBase; formBase.sprintf("_form%d",pageNum); @@ -269,6 +269,7 @@ void FormulaList::generateBitmaps(const char *path) } // down-sample the image to 1/16th of the area using 16 gray scale // colors. + // TODO: optimize this code. for (y=0;y<dstImage.getHeight();y++) { for (x=0;x<dstImage.getWidth();x++) @@ -298,7 +299,7 @@ void FormulaList::generateBitmaps(const char *path) } // save the result as a gif QCString resultName; - resultName.sprintf("form-%d.gif",pageNum); + resultName.sprintf("form_%d.gif",pageNum); // the option parameter 1 is used here as a temporary hack // to select the right color palette! dstImage.save(resultName,1); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 3bf5fb3..6193223 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -637,14 +637,14 @@ void HtmlGenerator::writeFormula(const char *n,const char *text) { if (text && text[0]=='\\') t << "<p><center>" << endl; t << "<img align="; -//#if !defined(_WIN32) -// t << "\"top\""; // assume Unix users use Netscape 4.x which does -// // not seem to support align == "middle" :-(( -//#else +#if !defined(_WIN32) + t << "\"top\""; // assume Unix users use Netscape 4.x which does + // not seem to support align == "middle" :-(( +#else t << "\"middle\""; // assume Windows users use IE or HtmlHelp which only // displays formulas nicely with align == "middle" -//#endif - t << " src=\"" << n << "\">" << endl; +#endif + t << " src=\"" << n << ".gif\">" << endl; if (text && text[0]=='\\') t << "</center><p>" << endl; } diff --git a/src/htmlhelp.cpp b/src/htmlhelp.cpp index e024585..ee2863c 100644 --- a/src/htmlhelp.cpp +++ b/src/htmlhelp.cpp @@ -315,7 +315,8 @@ void HtmlHelp::createProjectFile() "Contents file=index.hhc\n" "Default Window=main\n" "Default topic=" << indexName << "\n" - "Index file=index.hhk\n"; + "Index file=index.hhk\n" + "Language=0x409 English (United States)\n"; if (Config_getBool("BINARY_TOC")) t << "Binary TOC=YES\n"; if (Config_getBool("GENERATE_CHI")) t << "Create CHI file=YES\n"; t << "Title=" << Config_getString("PROJECT_NAME") << endl << endl; @@ -323,7 +324,7 @@ void HtmlHelp::createProjectFile() t << "[WINDOWS]" << endl; t << "main=\"" << Config_getString("PROJECT_NAME") << "\",\"index.hhc\"," "\"index.hhk\",\"" << indexName << "\",\"" << - indexName << "\",,,,,0x23520,,0x3006,,,,,,,,0" << endl << endl; + indexName << "\",,,,,0x23520,,0x387e,,,,,,,,0" << endl << endl; t << "[FILES]" << endl; char *s = indexFiles.first(); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index f0e4d5f..8ed96af 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -305,6 +305,7 @@ MemberDef::MemberDef(const char *df,int dl, annEnumType=0; indDepth=0; section=0; + bodyMemb=0; explExt=FALSE; cachedAnonymousType=0; maxInitLines=Config_getInt("MAX_INITIALIZER_LINES"); diff --git a/src/memberdef.h b/src/memberdef.h index 64cb11f..a0d15b7 100644 --- a/src/memberdef.h +++ b/src/memberdef.h @@ -231,6 +231,12 @@ class MemberDef : public Definition ArgumentList *actualArgs); void setTemplateMaster(MemberDef *mt) { m_templateMaster=mt; } void addListReference(Definition *d); + + QCString getBodyAnchor() const + { + return bodyMemb ? bodyMemb->anchor() : anchor(); + } + void setBodyMember(MemberDef *md) { bodyMemb = md; } bool visited; @@ -260,6 +266,7 @@ class MemberDef : public Definition //int declLine; // line where the declaration was found QCString def; // member definition in code (fully qualified name) QCString anc; // HTML anchor name + MemberDef *bodyMemb; // Member containing the definition Specifier virt; // normal/virtual/pure virtual Protection prot; // protection type [Public/Protected/Private] bool related; // is this a member that is only related to a class diff --git a/src/translator_adapter.h b/src/translator_adapter.h index 1b9a7d6..136cc75 100644 --- a/src/translator_adapter.h +++ b/src/translator_adapter.h @@ -5,10 +5,12 @@ /*! \brief Base of the translator adapter tree * - * This class provides access to the english translations, to be used - * as a substitute for not implemented local translations. + + * This abstract class provides access to the english + * translations, to be used as a substitute for not implemented + * local translations. */ -class TranslatorAdapterCVS : public Translator +class TranslatorAdapterBase : public Translator { protected: TranslatorEnglish english; @@ -27,35 +29,17 @@ class TranslatorAdapterCVS : public Translator } public: - /*! A method to generate a warning message to signal the user - * that the translation of his/her language of choice needs - * updating. + /*! This method is used to generate a warning message to signal + * the user that the translation of his/her language of choice + * needs updating. It must be implemented by the translator + * adapter class (pure virtual). + * + * \sa createUpdateNeededMessage() */ - virtual QCString updateNeededMessage() - { - QCString vs("CVS release "); - vs += versionString; // the one from the version.cpp - return createUpdateNeededMessage(idLanguage(), vs); - } -//----------------------------------------------------------------------- -// The things below this line should go to the new -// TranslatorAdapter_1_2_x, as public methods. The things above -// should stay in TranslatorAdapterCVS and need not to be touched. -// The first five lines below should be uncommented, and the -// release number at the fifth of those lines should be set. - -// class TranslatorAdapter_1_2_x : public TranslatorAdapterCVS -// { -// public: -// virtual QCString updateNeededMessage() -// { return createUpdateNeededMessage(idLanguage(),"release 1.2.x"); } - - // Put new adapter methods below... - // - + virtual QCString updateNeededMessage() = 0; }; -class TranslatorAdapter_1_2_11 : public TranslatorAdapterCVS +class TranslatorAdapter_1_2_11 : public TranslatorAdapterBase { public: virtual QCString updateNeededMessage() diff --git a/src/translator_cz.h b/src/translator_cz.h index 36e785c..5972f42 100644 --- a/src/translator_cz.h +++ b/src/translator_cz.h @@ -128,6 +128,9 @@ // 2001/07/16 // - trClassDocumentation() updated as in the English translator. // +// 2001/11/06 +// - trReferences() implemented. +// // // Todo // ---- @@ -148,7 +151,7 @@ // probably slightly faster. -class TranslatorCzech : public TranslatorAdapter_1_2_11 +class TranslatorCzech : public Translator { private: /*! The decode() inline assumes the source written in the @@ -1465,6 +1468,17 @@ class TranslatorCzech : public TranslatorAdapter_1_2_11 return decode(result); } +////////////////////////////////////////////////////////////////////////// +// new since 1.2.11 +////////////////////////////////////////////////////////////////////////// + + /*! This text is put before the list of members referenced by a member + */ + virtual QCString trReferences() + { + return decode("Odkazuje se na"); + } + }; #endif // TRANSLATOR_CZ_H diff --git a/src/translator_ru.h b/src/translator_ru.h index c96bdae..524a395 100644 --- a/src/translator_ru.h +++ b/src/translator_ru.h @@ -50,7 +50,7 @@ #ifndef TRANSLATOR_RU_H #define TRANSLATOR_RU_H -class TranslatorRussian : public TranslatorAdapter_1_2_11 +class TranslatorRussian : public Translator { private: /*! The Decode() inline assumes the source written in the @@ -146,7 +146,7 @@ class TranslatorRussian : public TranslatorAdapter_1_2_11 /*! this is the first part of a sentence that is followed by a class name */ /* Dosn't use when optimization for C is on. */ virtual QCString trThisIsTheListOfAllMembers() - { return decode("Полный список членов класса"); } + { return decode("Полный список членов класса "); } /*! this is the remainder of the sentence after the class name */ /* Dosn't use when optimization for C is on. */ @@ -628,7 +628,7 @@ class TranslatorRussian : public TranslatorAdapter_1_2_11 */ virtual QCString trRelatedFunctionDocumentation() { return decode("Документация по друзьям класса и функциям отноносящихся" - "к классу"); } + " к классу"); } ////////////////////////////////////////////////////////////////////////// // new since 0.49-990425 @@ -1357,6 +1357,27 @@ class TranslatorRussian : public TranslatorAdapter_1_2_11 if (!singular) result+="ы"; return decode(result); } + + /*! This text is generated when the \\requirements command is used + */ + virtual QCString trRequirements(bool first_capital, bool singular) + { + QCString result((first_capital ? "Требовани" : "требовани")); + if (!singular) result+="я"; else result+="е"; + return decode(result); + } + +////////////////////////////////////////////////////////////////////////// +// new since 1.2.11 +////////////////////////////////////////////////////////////////////////// + + /*! This text is put before the list of members referenced by a member + */ + virtual QCString trReferences() + { + return "Перекрестные ссылки"; + } + }; #endif diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index 9ff6199..463d16a 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -579,21 +579,21 @@ class XMLGenerator : public OutputDocInterface docify(text); m_t << "</formula>"; } - void startImage(const char *name,const char *size,bool caption) + void startImage(const char *name,const char *size,bool /*caption*/) { startParMode(); - m_t << "<image name=\"" << name << "\" size=\"" << size - << "\" caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook + m_t << "<image name=\"" << name << "\""; + if (size) m_t << " size=\"" << size << "\""; + m_t << ">"; // non docbook } void endImage(bool) { m_t << "</image>"; } - void startDotFile(const char *name,bool caption) + void startDotFile(const char *name,bool /*caption*/) { startParMode(); - m_t << "<dotfile name=\"" << name << "\" " - << "caption=\"" << (caption ? "1" : "0") << "\">"; // non docbook + m_t << "<dotfile name=\"" << name << "\">"; // non docbook } void endDotFile(bool) { @@ -1176,9 +1176,9 @@ void generateXMLForFile(FileDef *fd,QTextStream &t) t << " <detaileddescription>" << endl; writeXMLDocBlock(t,fd->getDefFileName(),fd->getDefLine(),0,0,fd->documentation()); t << " </detaileddescription>" << endl; - t << " <sourcecode>" << endl; + t << " <programlisting>" << endl; writeXMLCodeBlock(t,fd); - t << " </sourcecode>" << endl; + t << " </programlisting>" << endl; t << " <location file=\"" << fd->getDefFileName() << "\" line=\"" << fd->getDefLine() << "\"/>" << endl; |