diff options
-rw-r--r-- | INSTALL | 4 | ||||
-rw-r--r-- | README | 4 | ||||
-rw-r--r-- | VERSION | 2 | ||||
-rw-r--r-- | addon/doxmlparser/src/dochandler.cpp | 11 | ||||
-rw-r--r-- | addon/doxmlparser/src/dochandler.h | 1 | ||||
-rw-r--r-- | doc/install.doc | 18 | ||||
-rw-r--r-- | doc/language.doc | 6 | ||||
-rw-r--r-- | doc/trouble.doc | 51 | ||||
-rw-r--r-- | packages/rpm/doxygen.spec | 2 | ||||
-rw-r--r-- | src/definition.cpp | 23 | ||||
-rw-r--r-- | src/docparser.cpp | 73 | ||||
-rw-r--r-- | src/docparser.h | 87 | ||||
-rw-r--r-- | src/doctokenizer.l | 2 | ||||
-rw-r--r-- | src/doxygen.cpp | 6 | ||||
-rw-r--r-- | src/filedef.cpp | 12 | ||||
-rw-r--r-- | src/groupdef.cpp | 14 | ||||
-rw-r--r-- | src/htmlgen.cpp | 2 | ||||
-rw-r--r-- | src/membergroup.cpp | 6 | ||||
-rw-r--r-- | src/membergroup.h | 2 | ||||
-rw-r--r-- | src/namespacedef.cpp | 12 | ||||
-rw-r--r-- | src/util.cpp | 15 | ||||
-rw-r--r-- | src/util.h | 2 | ||||
-rw-r--r-- | src/xmlgen.cpp | 12 |
23 files changed, 202 insertions, 165 deletions
@@ -1,7 +1,7 @@ -DOXYGEN Version 1.3-rc1-20021207 +DOXYGEN Version 1.3-rc2 Please read the installation section of the manual (http://www.doxygen.org/install.html) for instructions. -------- -Dimitri van Heesch (07 December 2002) +Dimitri van Heesch (16 December 2002) @@ -1,4 +1,4 @@ -DOXYGEN Version 1.3_rc1_20021207 +DOXYGEN Version 1.3_rc2 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) (07 December 2002) +Dimitri van Heesch (dimitri@stack.nl) (16 December 2002) @@ -1 +1 @@ -1.3-rc1-20021207 +1.3-rc2 diff --git a/addon/doxmlparser/src/dochandler.cpp b/addon/doxmlparser/src/dochandler.cpp index 6bd2476..34079a9 100644 --- a/addon/doxmlparser/src/dochandler.cpp +++ b/addon/doxmlparser/src/dochandler.cpp @@ -1057,6 +1057,7 @@ HighlightHandler::HighlightHandler(IBaseHandler *parent) m_children.setAutoDelete(TRUE); addEndHandler("highlight",this,&HighlightHandler::endHighlight); addStartHandler("ref",this,&HighlightHandler::startRef); + addStartHandler("sp",this,&HighlightHandler::startSpace); m_hl = IDocHighlight::Invalid; } @@ -1070,12 +1071,13 @@ void HighlightHandler::startHighlight(const QXmlAttributes& attrib) m_hl = s_highlightMapper->stringToKind(m_hlString); m_curString=""; m_parent->setDelegate(this); + debug(2,"start highlight\n"); } void HighlightHandler::endHighlight() { addTextNode(); - debug(2,"highlight class=`%s'\n",m_hlString.data()); + debug(2,"end highlight class=`%s'\n",m_hlString.data()); m_parent->setDelegate(0); } @@ -1087,8 +1089,15 @@ void HighlightHandler::startRef(const QXmlAttributes& attrib) rh->startRef(attrib); } +void HighlightHandler::startSpace(const QXmlAttributes&) +{ + m_curString=" "; + addTextNode(); +} + void HighlightHandler::addTextNode() { + printf("m_curString=`%s'\n",m_curString.data()); if (!m_curString.isEmpty()) { m_children.append(new TextNode(m_curString,IDocMarkup::Normal,0)); diff --git a/addon/doxmlparser/src/dochandler.h b/addon/doxmlparser/src/dochandler.h index 7a0bda4..aa9d3f3 100644 --- a/addon/doxmlparser/src/dochandler.h +++ b/addon/doxmlparser/src/dochandler.h @@ -765,6 +765,7 @@ class HighlightHandler : public DocHighlightImpl, public BaseHandler<HighlightHa void startHighlight(const QXmlAttributes& attrib); void endHighlight(); virtual void startRef(const QXmlAttributes&); + virtual void startSpace(const QXmlAttributes&); // IDocHighlight virtual Kind kind() const { return DocImpl::Highlight; } diff --git a/doc/install.doc b/doc/install.doc index 3bba13e..e35153b 100644 --- a/doc/install.doc +++ b/doc/install.doc @@ -52,24 +52,26 @@ To take full advantage of doxygen's features the following additional tools should be installed. <ul> -<li>Troll Tech's GUI toolkit version 2.x.y +<li>Troll Tech's GUI toolkit <A HREF="http://www.trolltech.com/products/qt.html">Qt</A> - \latexonly(see {\tt http://www.trolltech.com/products/qt.html})\endlatexonly. + \latexonly(see {\tt http://www.trolltech.com/products/qt.html})\endlatexonly \addindex Qt - This is needed to build the GUI front-end. + version 2 or higher. + This is needed to build the GUI front-end doxywizard. <li>A \f$\mbox{\LaTeX}\f$ distribution: for instance - <a href="http://www.tug.org/">teTeX 1.0</a> - \latexonly \\par (see {\tt http://www.tug.org/})\endlatexonly. + <a href="http://www.tug.org/interest.html#free">teTeX 1.0</a> + \latexonly \\par (see {\tt http://www.tug.org/interest.html\#free})\endlatexonly. This is needed for generating LaTeX, Postscript, and PDF output. <li><a href="http://www.research.att.com/sw/tools/graphviz/"> - the Graph visualization toolkit version 1.5</a> + the Graph visualization toolkit version 1.5 or higher</a> \latexonly \\par (see {\tt http://www.research.att.com/sw/tools/graphviz/})\endlatexonly. Needed for the include dependency graphs, the graphical inheritance graphs, and the collaboration graphs. If you compile graphviz yourself, make sure you do include freetype support (which requires the freetype library and header files), - otherwise dot will produce a warning that it cannot find doxfont! -<li>The ghostscript interpreter. + otherwise the graphs will not render proper text labels. +<li>The ghostscript interpreter. To be found at + <a href="http://www.ghostscript.com/">www.ghostscript.com</a>. </ul> Compilation is now done by performing the following steps: diff --git a/doc/language.doc b/doc/language.doc index 902603c..bfacc39 100644 --- a/doc/language.doc +++ b/doc/language.doc @@ -143,8 +143,8 @@ when the translator was updated. </TR> <TR BGCOLOR="#ffffff"> <TD>Japanese</TD> - <TD>Ryunosuke Sato<br>Kenji Nagamatsu</TD> - <TD>puyo@NOSPAM.mint.freemail.ne.jp<br>naga@NOSPAM.joyful.club.ne.jp</TD> + <TD>Ryunosuke Satoh<br>Kenji Nagamatsu</TD> + <TD>sun594@NOSPAM.hotmail.com<br>naga@NOSPAM.joyful.club.ne.jp</TD> <TD>1.2.18</TD> </TR> <TR BGCOLOR="#ffffff"> @@ -262,7 +262,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 Sato & {\tt puyo@mint.freemail.ne.jp} & 1.2.18 \\ + Japanese & Ryunosuke Satoh & {\tt sun594@hotmail.com} & 1.2.18 \\ & Kenji Nagamatsu & {\tt naga@joyful.club.ne.jp} & \\ \hline Korean & Richard Kim & {\tt ryk@dspwiz.com} & 1.2.13 \\ diff --git a/doc/trouble.doc b/doc/trouble.doc index fd695e2..c904ad4 100644 --- a/doc/trouble.doc +++ b/doc/trouble.doc @@ -25,9 +25,6 @@ properly. If you find such a piece, please send it to me, so I can improve doxygen's parsing capabilities. Try to make the piece of code you send as small as possible, to help me narrow down the search. -<li>Using declarations for member are not yet supported. - They are simply ignored. Using declarations for class and using - directives are supported however. <li>Doxygen does not work properly if there are multiple classes, structs or unions with the same name in your code. It should not crash however, rather it should ignore all of the classes with the same name except one. @@ -78,37 +75,47 @@ If you are trying Doxygen let me know what you think of it (do you miss certain features?). Even if you decide not to use it, please let me know why. +\anchor bug_reports <h2>How to report a bug</h2> -I would appreciate an e-mail if you have found -a bug, or if you have ideas (or even better some code or a patch) -how to fix existing bugs and limitations. For patches please use -"diff -u" or include the files you modified. If you send more than -one file please tar or zip everything, so I only have to save and download -one file. +If you find a bug please send an e-mail to: dimitri@stack.nl. +If you are unsure whether or not something is a bug, please ask help +on the <a href="http://sourceforge.net/mail/?group_id=5971">users mailing list</a> +first (subscription is required). -Always try to include the following information in your bug report: -- The version of doxygen you are using (for instance 1.2.4). +If you send only a (vague) description of a bug, you are usually not very +helpful and it will cost me much more time to figure out what you mean. +In the worst-case your bug report may even be completely ignored by me, so +always try to include the following information in your bug report: +- The version of doxygen you are using (for instance 1.2.4, use + <code>doxygen --version</code> if you are not sure). - The name and version number of your operating system (for instance SuSE Linux 6.4) - It is usually a good idea to send along the configuation file as well, but please use doxygen with the <code>-s</code> flag while generating it - to keep it small. -- The easiest way for me to solve bugs is if you can send me a small example - demonstrating the problem you have. Please make sure the example is valid + to keep it small (use <code>doxygen -s -u [configName]</code> to strip + the comments from an existing config file). +- The easiest (and often the only) way for me to fix bugs is if you can + send me a small example demonstrating the problem you have, so I can + reproduce it on my machine. Please make sure the example is valid source code (could potentially compile) and that the problem is really captured by the example (I often get examples that do not trigger the - actual bug!). + actual bug!). If you intend to send more than one file please zip or tar + the files together into a single attachment for easier processing. -If you send only a (vague) description of a bug, you are usually not very -helpful and it will cost me much more time to figure out what you mean. -In the worst-case your bug report may even be completely ignored by me! +If you have ideas (or even better some code or a patch) +how to fix existing bugs and limitations please discuss them on +the <a href="http://sourceforge.net/mail/?group_id=5971">developers mailing list</a>. +Patches can also send directly to dimitri@stack.nl. -My e-mail address: dimitri@stack.nl +For patches please use +"diff -uN" or include the files you modified. If you send more than +one file please tar or zip everything, so I only have to save and download +one file. -Note that you can also post bug report to the developers mailing list -or use the bug tracker at sourceforge (though I do not really like the -latter because of its web interface). +Note that you can also post bug reports via the bug tracker at +sourceforge, but I do not really like this because of its web +interface, which I find rather clumpsy to use. */ diff --git a/packages/rpm/doxygen.spec b/packages/rpm/doxygen.spec index 52b9aa2..d8de065 100644 --- a/packages/rpm/doxygen.spec +++ b/packages/rpm/doxygen.spec @@ -1,6 +1,6 @@ Summary: A documentation system for C/C++. Name: doxygen -Version: 1.3_rc1_20021207 +Version: 1.3_rc2 Release: 1 Epoch: 1 Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz diff --git a/src/definition.cpp b/src/definition.cpp index f3b556a..46d66a9 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -122,7 +122,28 @@ void Definition::setDocumentation(const char *d,const char *docFile,int docLine, if (d==0) return; //printf("Definition::setDocumentation(%s,%s,%d)\n",d,docFile,docLine); if (stripWhiteSpace) - m_doc=((QCString)d).stripWhiteSpace(); + { + // strip leading empty lines in front of the text, but not the + // leading spaces in front of the first line, so list items are + // parsed with the correct indent + const char *p=d; + char c; + int s=0,so=0; + while ((c=*p) && (c==' ' || c=='\r' || c=='\n')) + { + if (c=='\n') so=s; + p++; + s++; + } + m_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')) + { + m_doc.at(e)='\0'; + e--; + } + } else m_doc=d; m_docFile = docFile; diff --git a/src/docparser.cpp b/src/docparser.cpp index ded0692..2f9bda7 100644 --- a/src/docparser.cpp +++ b/src/docparser.cpp @@ -518,6 +518,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, static int handleStyleArgument(DocNode *parent,QList<DocNode> &children, const QString &cmdName) { + DBG(("handleStyleArgument(%s)\n",cmdName.data())); QString tokenName = g_token->name; int tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) @@ -527,7 +528,10 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children, return tok; } while ((tok=doctokenizerYYlex()) && - tok!=TK_WHITESPACE && tok!=TK_NEWPARA && tok!=TK_LISTITEM && tok!=TK_ENDLIST + tok!=TK_WHITESPACE && + tok!=TK_NEWPARA && + tok!=TK_LISTITEM && + tok!=TK_ENDLIST ) { if (!defaultHandleToken(parent,tok,children)) @@ -547,9 +551,12 @@ static int handleStyleArgument(DocNode *parent,QList<DocNode> &children, tokToString(tok)); break; } + break; } } - return tok==TK_NEWPARA ? TK_NEWPARA : RetVal_OK; + DBG(("handleStyleArgument(%s) end tok=%x\n",cmdName.data(),tok)); + return (tok==TK_NEWPARA || tok==TK_LISTITEM || tok==TK_ENDLIST + ) ? tok : RetVal_OK; } static void handleStyleEnter(DocNode *parent,QList<DocNode> &children, @@ -699,45 +706,45 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children case CMD_EMPHASIS: { children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Italic,TRUE)); - int retval=handleStyleArgument(parent,children,tokenName); + tok=handleStyleArgument(parent,children,tokenName); children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Italic,FALSE)); children.append(new DocWhiteSpace(parent," ")); - if (retval==TK_NEWPARA) goto handlepara; + if (tok==TK_NEWPARA) goto handlepara; } break; case CMD_BOLD: { children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Bold,TRUE)); - int retval=handleStyleArgument(parent,children,tokenName); + tok=handleStyleArgument(parent,children,tokenName); children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Bold,FALSE)); children.append(new DocWhiteSpace(parent," ")); - if (retval==TK_NEWPARA) goto handlepara; + if (tok==TK_NEWPARA) goto handlepara; } break; case CMD_CODE: { children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Code,TRUE)); - int retval=handleStyleArgument(parent,children,tokenName); + tok=handleStyleArgument(parent,children,tokenName); children.append(new DocStyleChange(parent,g_nodeStack.count(),DocStyleChange::Code,FALSE)); children.append(new DocWhiteSpace(parent," ")); - if (retval==TK_NEWPARA) goto handlepara; + if (tok==TK_NEWPARA) goto handlepara; } break; case CMD_HTMLONLY: { doctokenizerYYsetStateHtmlOnly(); - int retval = doctokenizerYYlex(); + tok = doctokenizerYYlex(); children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_fileName)); - if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: htmlonly section ended without end marker"); + if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: htmlonly section ended without end marker"); doctokenizerYYsetStatePara(); } break; case CMD_LATEXONLY: { doctokenizerYYsetStateLatexOnly(); - int retval = doctokenizerYYlex(); + tok = doctokenizerYYlex(); children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::LatexOnly,g_isExample,g_fileName)); - if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: latexonly section ended without end marker",doctokenizerYYlineno); + if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: latexonly section ended without end marker",doctokenizerYYlineno); doctokenizerYYsetStatePara(); } break; @@ -749,7 +756,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children break; case CMD_ANCHOR: { - int tok=doctokenizerYYlex(); + tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) { warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: expected whitespace after %s command", @@ -775,7 +782,7 @@ static bool defaultHandleToken(DocNode *parent,int tok, QList<DocNode> &children break; case CMD_INTERNALREF: { - int tok=doctokenizerYYlex(); + tok=doctokenizerYYlex(); if (tok!=TK_WHITESPACE) { warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: expected whitespace after %s command", @@ -1005,6 +1012,8 @@ static int internalValidatingParseDoc(DocNode *parent,QList<DocNode> &children, { int retval = RetVal_OK; + if (doc.isEmpty()) return retval; + doctokenizerYYinit(doc,g_fileName); // first parse any number of paragraphs @@ -2531,32 +2540,6 @@ enddesclist: //--------------------------------------------------------------------------- -#if 0 -int DocHtmlPre::parse() -{ - int rv; - g_nodeStack.push(this); - - bool isFirst=FALSE; - DocPara *par=0; - do - { - par = new DocPara(this); - if (isFirst) { par->markFirst(); isFirst=FALSE; } - m_children.append(par); - rv=par->parse(); - } - while (rv==TK_NEWPARA); - if (par) par->markLast(); - - DocNode *n=g_nodeStack.pop(); - ASSERT(n==this); - return rv==RetVal_EndPre ? RetVal_OK : rv; -} -#endif - -//--------------------------------------------------------------------------- - int DocHtmlListItem::parse() { DBG(("DocHtmlListItem::parse() start\n")); @@ -2822,7 +2805,7 @@ int DocSimpleSect::parseRcs() internalValidatingParseDoc(this,m_children,g_token->text); docParserPopContext(); - DBG(("DocSimpleSect::parseRcs() end retval=%d\n",retval)); + DBG(("DocSimpleSect::parseRcs()\n")); DocNode *n=g_nodeStack.pop(); ASSERT(n==this); return RetVal_OK; @@ -3246,6 +3229,7 @@ void DocPara::handleSection(const QString &cmdName) int DocPara::handleCommand(const QString &cmdName) { + DBG(("handleCommand(%s)\n",cmdName.data())); int retval = RetVal_OK; switch (CmdMapper::map(cmdName)) { @@ -3579,6 +3563,7 @@ int DocPara::handleCommand(const QString &cmdName) retval==RetVal_Section || retval==RetVal_EndList || retval==RetVal_Internal || retval==RetVal_SwitchLang ); + DBG(("handleCommand(%s) end retval=%x\n",cmdName.data(),retval)); return retval; } @@ -4103,6 +4088,7 @@ reparsetoken: // handle the command retval=handleCommand(g_token->name.copy()); + DBG(("handleCommand returns %x\n",retval)); // check the return value if (retval==RetVal_SimpleSec) @@ -4120,6 +4106,11 @@ reparsetoken: // the command ended normally, keep scanner for new tokens. retval = 0; } + else if (retval==TK_LISTITEM || retval==TK_ENDLIST) + { + tok = retval; + goto reparsetoken; + } else // end of file, end of paragraph, start or end of section // or some auto list marker { diff --git a/src/docparser.h b/src/docparser.h index e20d3b3..a505a6d 100644 --- a/src/docparser.h +++ b/src/docparser.h @@ -86,52 +86,57 @@ class DocNode Kind_XRefItem = 15, Kind_HtmlList = 16, Kind_HtmlListItem = 17, - //Kind_HtmlPre = 18, - Kind_HtmlDescList = 19, - Kind_HtmlDescData = 20, - Kind_HtmlDescTitle = 21, - Kind_HtmlTable = 22, - Kind_HtmlRow = 23, - Kind_HtmlCell = 24, - Kind_HtmlCaption = 25, - Kind_LineBreak = 26, - Kind_HorRuler = 27, - Kind_Anchor = 28, - Kind_IndexEntry = 29, - Kind_Internal = 30, - Kind_HRef = 31, - Kind_Include = 32, - Kind_IncOperator = 33, - Kind_HtmlHeader = 34, - Kind_Image = 35, - Kind_DotFile = 36, - Kind_Link = 37, - Kind_Ref = 38, - Kind_Formula = 39, - Kind_SecRefItem = 40, - Kind_SecRefList = 41, - Kind_Language = 42, - Kind_LinkedWord = 43, - Kind_ParamSect = 44, - Kind_ParamList = 45, - Kind_InternalRef = 46, - Kind_Copy = 47, - Kind_Text = 48 + Kind_HtmlDescList = 18, + Kind_HtmlDescData = 19, + Kind_HtmlDescTitle = 20, + Kind_HtmlTable = 21, + Kind_HtmlRow = 22, + Kind_HtmlCell = 23, + Kind_HtmlCaption = 24, + Kind_LineBreak = 25, + Kind_HorRuler = 26, + Kind_Anchor = 27, + Kind_IndexEntry = 28, + Kind_Internal = 29, + Kind_HRef = 30, + Kind_Include = 31, + Kind_IncOperator = 32, + Kind_HtmlHeader = 33, + Kind_Image = 34, + Kind_DotFile = 35, + Kind_Link = 36, + Kind_Ref = 37, + Kind_Formula = 38, + Kind_SecRefItem = 39, + Kind_SecRefList = 40, + Kind_Language = 41, + Kind_LinkedWord = 42, + Kind_ParamSect = 43, + Kind_ParamList = 44, + Kind_InternalRef = 45, + Kind_Copy = 46, + Kind_Text = 47 }; /*! Creates a new node */ DocNode() : m_insidePre(FALSE) {} + /*! Destroys a node. */ virtual ~DocNode() {} + /*! Returns the kind of node. Provides runtime type information */ virtual Kind kind() const = 0; + /*! Returns the parent of this node or 0 for the root node. */ virtual DocNode *parent() const = 0; + /*! Acceptor function for node visitors. Part of the visitor pattern. * @param v Abstract visitor. */ virtual void accept(DocVisitor *v) = 0; + /*! Returns TRUE iff this node is inside a preformatted section */ bool isPreformatted() const { return m_insidePre; } + /*! Sets whether or not this item is inside a preformatted section */ void setInsidePreformatted(bool p) { m_insidePre = p; } private: @@ -156,7 +161,6 @@ template<class T> class CompAccept protected: QList<DocNode> m_children; - QList<DocNode> &getChildren() const { return m_children; } }; @@ -1048,25 +1052,6 @@ class DocHtmlDescData : public CompAccept<DocHtmlDescData>, public DocNode HtmlAttribList m_attribs; }; -#if 0 -/*! @brief Node representing a preformatted HTML section */ -class DocHtmlPre : public CompAccept<DocHtmlPre>, public DocNode -{ - public: - DocHtmlPre(DocNode *parent,const HtmlAttribList &attribs) - : m_parent(parent), m_attribs(attribs) {} - int parse(); - Kind kind() const { return Kind_HtmlPre; } - const HtmlAttribList &attribs() const { return m_attribs; } - DocNode *parent() const { return m_parent; } - void accept(DocVisitor *v) { CompAccept<DocHtmlPre>::accept(this,v); } - - private: - DocNode * m_parent; - HtmlAttribList m_attribs; -}; -#endif - /*! @brief Node representing a HTML table cell */ class DocHtmlCell : public CompAccept<DocHtmlCell>, public DocNode { diff --git a/src/doctokenizer.l b/src/doctokenizer.l index c65f9b8..390a666 100644 --- a/src/doctokenizer.l +++ b/src/doctokenizer.l @@ -378,7 +378,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]* g_token->isEMailAddr=FALSE; return TK_URL; } -<St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9-]+"."[a-z_A-Z0-9.-]+ { // Mail address +<St_Para>[a-z_A-Z0-9.-]+"@"[a-z_A-Z0-9-]+("."[a-z_A-Z0-9\-])+[a-z_A-Z0-9\-]+ { // Mail address g_token->name=yytext; g_token->isEMailAddr=TRUE; return TK_URL; diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 30c3f15..bf74941 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1064,9 +1064,9 @@ static void findUsingDeclarations(Entry *root) !(root->parent->section&Entry::COMPOUND_MASK) // not a class/struct member ) { - printf("Found using declaration %s at line %d of %s inside section %x\n", - root->name.data(),root->startLine,root->fileName.data(), - root->parent->section); + //printf("Found using declaration %s at line %d of %s inside section %x\n", + // root->name.data(),root->startLine,root->fileName.data(), + // root->parent->section); bool ambig; if (!root->name.isEmpty()) { diff --git a/src/filedef.cpp b/src/filedef.cpp index 2f7cde2..01289e9 100644 --- a/src/filedef.cpp +++ b/src/filedef.cpp @@ -485,12 +485,12 @@ void FileDef::writeSource(OutputList &ol) void FileDef::addMembersToMemberGroup() { - ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict); + ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict,this); } /*! Adds member definition \a md to the list of all members of this file */ diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 8b118f1..4ddc35f 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -160,13 +160,13 @@ void GroupDef::addExample(const PageInfo *def) void GroupDef::addMembersToMemberGroup() { - ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decEnumValMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict); + ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decEnumValMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict,this); //printf("GroupDef::addMembersToMemberGroup() memberGroupList=%d\n",memberGroupList->count()); MemberGroupSDict::Iterator mgli(*memberGroupSDict); diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp index 7b24074..020f57e 100644 --- a/src/htmlgen.cpp +++ b/src/htmlgen.cpp @@ -62,7 +62,7 @@ static const char *defaultStyleSheet = "TD.mdname { background-color: #f2f2ff; font-weight: bold; color: #602020; width: 600px; }\n" "DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold }\n" "DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller }\n" -"BODY { background: white }\n" +"BODY { background: white; color: black }\n" "TD.indexkey { \n" " background-color: #eeeeff; \n" " font-weight: bold; \n" diff --git a/src/membergroup.cpp b/src/membergroup.cpp index d6567ee..a7f82a4 100644 --- a/src/membergroup.cpp +++ b/src/membergroup.cpp @@ -58,7 +58,7 @@ MemberGroup::~MemberGroup() delete memberList; } -void MemberGroup::insertMember(Definition *d,MemberDef *md) +void MemberGroup::insertMember(MemberDef *md) { //printf("MemberGroup::insertMember memberList=%p count=%d" // " member section list: %p\n", @@ -67,13 +67,13 @@ void MemberGroup::insertMember(Definition *d,MemberDef *md) // md->getSectionList()); MemberDef *firstMd = memberList->first(); if (inSameSection && memberList->count()>0 && - firstMd->getSectionList(d)!=md->getSectionList(d)) + firstMd->getSectionList(m_parent)!=md->getSectionList(m_parent)) { inSameSection=FALSE; } else if (inDeclSection==0) { - inDeclSection = md->getSectionList(d); + inDeclSection = md->getSectionList(m_parent); } memberList->append(md); diff --git a/src/membergroup.h b/src/membergroup.h index e468436..d3062ec 100644 --- a/src/membergroup.h +++ b/src/membergroup.h @@ -41,7 +41,7 @@ class MemberGroup ~MemberGroup(); QCString header() const { return grpHeader; } int groupId() const { return grpId; } - void insertMember(Definition *d,MemberDef *md); + void insertMember(MemberDef *md); void setAnchors(ClassDef *); void writePlainDeclarations(OutputList &ol, ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd); diff --git a/src/namespacedef.cpp b/src/namespacedef.cpp index fb20986..fa73bc0 100644 --- a/src/namespacedef.cpp +++ b/src/namespacedef.cpp @@ -129,12 +129,12 @@ void NamespaceDef::insertNamespace(NamespaceDef *nd) void NamespaceDef::addMembersToMemberGroup() { - ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict); - ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict); + ::addMembersToMemberGroup(&decDefineMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decProtoMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decTypedefMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decEnumMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decFuncMembers,memberGroupSDict,this); + ::addMembersToMemberGroup(&decVarMembers,memberGroupSDict,this); } void NamespaceDef::insertMember(MemberDef *md) diff --git a/src/util.cpp b/src/util.cpp index 0ced904..7487af3 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -2475,6 +2475,16 @@ bool resolveRef(/* in */ const char *scName, *resContext=gd; return TRUE; } + else if (tsName.find('.')!=-1) // maybe a link to a file + { + bool ambig; + fd=findFileDef(Doxygen::inputNameDict,tsName,ambig); + if (fd && !ambig) + { + *resContext=fd; + return TRUE; + } + } return FALSE; } @@ -3135,6 +3145,7 @@ void addMembersToMemberGroup(MemberList *ml, MemberGroupSDict *memberGroupSDict, Definition *context) { + ASSERT(context!=0); //printf("addMemberToMemberGroup()\n"); MemberListIterator mli(*ml); MemberDef *md; @@ -3169,7 +3180,7 @@ void addMembersToMemberGroup(MemberList *ml, ); memberGroupSDict->append(groupId,mg); } - mg->insertMember(context,fmd); // insert in member group + mg->insertMember(fmd); // insert in member group fmd->setMemberGroup(mg); } } @@ -3198,7 +3209,7 @@ void addMembersToMemberGroup(MemberList *ml, memberGroupSDict->append(groupId,mg); } md = ml->take(index); // remove from member list - mg->insertMember(context,md); // insert in member group + mg->insertMember(md); // insert in member group md->setMemberGroup(mg); continue; } @@ -171,7 +171,7 @@ QCString convertToXML(const char *s); const char * getOverloadDocs(); void addMembersToMemberGroup(MemberList *ml, MemberGroupSDict *memberGroupSDict, - Definition *context=0); + Definition *context); bool extractClassNameFromType(const QCString &type,int &pos, QCString &name,QCString &templSpec); QCString substituteTemplateArgumentsInString( diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp index bb73ca5..c1574eb 100644 --- a/src/xmlgen.cpp +++ b/src/xmlgen.cpp @@ -53,6 +53,16 @@ inline void writeXMLString(QTextStream &t,const char *s) t << convertToXML(s); } +inline void writeXMLCodeString(QTextStream &t,const char *s) +{ + char c; + while ((c=*s++)) + { + if (c==' ') t << "<sp/>"; else t << c; + } +} + + static void writeXMLHeader(QTextStream &t) { QCString dtdName = Config_getString("XML_DTD"); @@ -178,7 +188,7 @@ class XMLCodeGenerator : public BaseCodeDocInterface m_t << "<highlight class=\"normal\">"; m_normalHLNeedStartTag=FALSE; } - writeXMLString(m_t,text); + writeXMLCodeString(m_t,text); } void writeCodeLink(const char *ref,const char *file, const char *anchor,const char *text) |