diff options
-rw-r--r-- | INSTALL | 15 | ||||
-rw-r--r-- | README | 2 | ||||
-rw-r--r-- | addon/configgen/config_templ.l | 1 | ||||
-rw-r--r-- | addon/configgen/configgen.cpp | 14 | ||||
-rw-r--r-- | doc/commands.doc | 37 | ||||
-rw-r--r-- | make.bat | 9 | ||||
-rw-r--r-- | src/classdef.cpp | 2 | ||||
-rw-r--r-- | src/code.l | 2 | ||||
-rw-r--r-- | src/config.l | 1 | ||||
-rw-r--r-- | src/declinfo.l | 5 | ||||
-rw-r--r-- | src/defargs.l | 11 | ||||
-rw-r--r-- | src/definition.cpp | 29 | ||||
-rw-r--r-- | src/definition.h | 1 | ||||
-rw-r--r-- | src/doxygen.cpp | 98 | ||||
-rw-r--r-- | src/doxygen.h | 8 | ||||
-rw-r--r-- | src/groupdef.cpp | 2 | ||||
-rw-r--r-- | src/memberdef.cpp | 1 | ||||
-rw-r--r-- | src/pre.l | 4 | ||||
-rw-r--r-- | src/scanner.l | 75 | ||||
-rw-r--r-- | src/tag.l | 4 | ||||
-rw-r--r-- | src/translator.h | 9 | ||||
-rw-r--r-- | src/util.cpp | 4 |
22 files changed, 236 insertions, 98 deletions
@@ -84,10 +84,13 @@ You will need to install the windows/dos versions of following tools: You can download them at: http://sourceware.cygnus.com/cygwin/ Make sure the BISONLIB environment variable points to the location where bison.simple and bison.hairy are located. -- Qt-1.xx (Qt-2.xx should also work, but I didn't test it for Windows) - (Hint: only the tools section is required, so you can use the free - X-windows version (use Qt-1.44) as well!) - You can get it at http://www.troll.no +- Qt-1.xx (Qt-2.xx does not work without adding some extra code) + Only the tools section is required, so you can use the free + X-windows version (use Qt-1.44) and build a library called qt.lib out of + the sources in src/tools. The library should be put in the lib directory + of the Qt distribution. You can get Qt-1.44 at http://www.trolltech.com + Before continuing make sure the QTDIR environment variable points to the + root of the Qt distribution. - Microsoft Visual C++ (I only tested with version 5.0). Use the vcvars32.bat to set the environment variables (if you did not select to do this automatically during installation). @@ -146,7 +149,7 @@ QT RELATED PROBLEMS: - do "cd qt" - do "ln -s your-qt-include-dir-here include", - do "ln -s your-qt-lib-dir-here lib", - - do "export QTDIR=$PWD" (or "setenv QTDIR $PWD if you have a csh) + - do "export QTDIR=$PWD" (or "setenv QTDIR $PWD if you have a csh-like shell) Now install doxygen as described above. @@ -252,4 +255,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (11 June 2000) +Dimitri van Heesch (18 June 2000) @@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at Enjoy, -Dimitri van Heesch (11 June 2000) +Dimitri van Heesch (18 June 2000) diff --git a/addon/configgen/config_templ.l b/addon/configgen/config_templ.l index 561e54b..6e84ea4 100644 --- a/addon/configgen/config_templ.l +++ b/addon/configgen/config_templ.l @@ -318,6 +318,7 @@ void configStrToVal() static void substEnvVarsInString(QCString &s) { static QRegExp re("\\$\\([a-z_A-Z0-9]+\\)"); + if (s.isEmpty()) return; int p=0; int i,l; //printf("substEnvVarInString(%s) start\n",s.data()); diff --git a/addon/configgen/configgen.cpp b/addon/configgen/configgen.cpp index 1dcc7b1..92ec41e 100644 --- a/addon/configgen/configgen.cpp +++ b/addon/configgen/configgen.cpp @@ -788,29 +788,33 @@ void init() "EXTRACT_ALL", "FALSE", "gererate docs for all classes flag", - "If the EXTRACT_ALL tag is set to YES all classes and functions will be \n" - "included in the documentation, even if no documentation was available. \n" + "If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in \n" + "documentation are documented, even if no documentation was available. \n" + "Private class members and static file members will be hidden unless \n" + "the EXTRACT_PRIVATE tag is set to YES \n" ); ConfigBool::add( "extractPrivateFlag", "EXTRACT_PRIVATE", "FALSE", "generate docs for private members flag", "If the EXTRACT_PRIVATE tag is set to YES all private members of a class \n" - "will be included in the documentation. \n" + "and the static members of a file will be included in the documentation. \n" ); ConfigBool::add( "hideMemberFlag", "HIDE_UNDOC_MEMBERS", "FALSE", "hide undocumented members.", "If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all \n" - "undocumented members inside documented classes or files. \n" + "undocumented members of documented classes, files or namespaces. \n" + "This option has no effect if EXTRACT_ALL is enabled. \n" ); ConfigBool::add( "hideClassFlag", "HIDE_UNDOC_CLASSES", "FALSE", "hide undocumented members.", "If the HIDE_UNDOC_CLASSESS tag is set to YES, Doxygen will hide all \n" - "undocumented classes. \n" + "undocumented classes that are normally visible in the class hierarchy. \n" + "This option has no effect if EXTRACT_ALL is enabled. \n" ); ConfigBool::add( "briefMemDescFlag", "BRIEF_MEMBER_DESC", diff --git a/doc/commands.doc b/doc/commands.doc index 4618000..8bf691a 100644 --- a/doc/commands.doc +++ b/doc/commands.doc @@ -47,6 +47,7 @@ documentation: <li> \refitem cmdaddindex \addindex <li> \refitem cmdanchor \anchor <li> \refitem cmdarg \arg +<li> \refitem cmdattention \attention <li> \refitem cmdauthor \author <li> \refitem cmdb \b <li> \refitem cmdbrief \brief @@ -97,6 +98,7 @@ documentation: <li> \refitem cmdpre \pre <li> \refitem cmdref \ref <li> \refitem cmdrelates \relates +<li> \refitem cmdremarks \remarks <li> \refitem cmdreturn \return <li> \refitem cmdretval \retval <li> \refitem cmdsa \sa @@ -523,6 +525,18 @@ Public/Protected/Private/... section. Section indicators \htmlonly --- </center>\endhtmlonly</h2> +<hr> +\subsection cmdattention \attention { attention text } + + \addindex \attention + Starts a paragraph where a message that needs attention may be entered. + The paragraph will be indented. + The text of the paragraph has no special internal structure. All visual + enhancement commands may be used inside the paragraph. + Multiple adjacent \\attention commands will be joined into a single paragraph. + The \\attention command ends when a blank line or some other + sectioning command is encountered. + \subsection cmdauthor \author { list of authors } \addindex \author @@ -664,7 +678,7 @@ Public/Protected/Private/... section. The text of the paragraph has no special internal structure. All visual enhancement commands may be used inside the paragraph. Multiple adjacent \\invariant commands will be joined into a single paragraph. - Each warning description will start on a new line. + Each invariant description will start on a new line. Alternatively, one \\invariant command may mention several invariants. The \\invariant command ends when a blank line or some other sectioning command is encountered. @@ -712,7 +726,7 @@ Public/Protected/Private/... section. The text of the paragraph has no special internal structure. All visual enhancement commands may be used inside the paragraph. Multiple adjacent \\post commands will be joined into a single paragraph. - Each warning description will start on a new line. + Each postcondition will start on a new line. Alternatively, one \\post command may mention several postconditions. The \\post command ends when a blank line or some other sectioning command is encountered. @@ -726,12 +740,26 @@ Public/Protected/Private/... section. The text of the paragraph has no special internal structure. All visual enhancement commands may be used inside the paragraph. Multiple adjacent \\pre commands will be joined into a single paragraph. - Each warning description will start on a new line. + Each precondition will start on a new line. Alternatively, one \\pre command may mention several preconditions. The \\pre command ends when a blank line or some other sectioning command is encountered. <hr> +\subsection cmdremarks \remarks { remark text } + + \addindex \remarks + Starts a paragraph where one or more marks may be entered. + The paragraph will be indented. + The text of the paragraph has no special internal structure. All visual + enhancement commands may be used inside the paragraph. + Multiple adjacent \\remark commands will be joined into a single paragraph. + Each remark will start on a new line. + Alternatively, one \\remark command may mention + several remarks. The \\remark command ends when a blank line or some other + sectioning command is encountered. + +<hr> \subsection cmdreturn \return { description of the return value } \addindex \return @@ -800,7 +828,8 @@ Public/Protected/Private/... section. Multiple adjacent \\version commands will be joined into a single paragraph. Each version description will start on a new line. Alternatively, one \\version command may mention - several dates. The \\version command ends when a blank line or some other + several version strings. + The \\version command ends when a blank line or some other sectioning command is encountered. See section \ref cmdauthor "\\author" for an example. @@ -1,5 +1,7 @@ REM make script for Microsoft Visual C++ +if "%QTDIR%"=="" goto ERROR + REM use perl to create the config file perl wintools\make.pl @@ -12,3 +14,10 @@ type src\doxytag.pro.in | sed "s/\$extraopts/release/g" >src\doxytag.pro type src\doxysearch.pro.in | sed "s/\$extraopts/release/g" >src\doxysearch.pro nmake +goto END + +:ERROR +echo The QTDIR environment variable is not set! See the INSTALL file for more info. +goto END + +:END diff --git a/src/classdef.cpp b/src/classdef.cpp index a4d6c33..1ccf663 100644 --- a/src/classdef.cpp +++ b/src/classdef.cpp @@ -1025,7 +1025,7 @@ void ClassDef::writeDocumentation(OutputList &ol) while (file) { bool ambig; - FileDef *fd=findFileDef(&inputNameDict,file,ambig); + FileDef *fd=findFileDef(inputNameDict,file,ambig); if (fd) { if (first) @@ -676,7 +676,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned" //FileInfo *f; bool ambig; FileDef *fd; - if ((fd=findFileDef(&inputNameDict,yytext,ambig)) && + if ((fd=findFileDef(inputNameDict,yytext,ambig)) && fd->isLinkable()) { g_code->writeCodeLink(fd->getReference(),fd->getOutputFileBase(),0,yytext); diff --git a/src/config.l b/src/config.l index fca2e4e..e088707 100644 --- a/src/config.l +++ b/src/config.l @@ -1875,6 +1875,7 @@ void configStrToVal() static void substEnvVarsInString(QCString &s) { static QRegExp re("\\$\\([a-z_A-Z0-9]+\\)"); + if (s.isEmpty()) return; int p=0; int i,l; //printf("substEnvVarInString(%s) start\n",s.data()); diff --git a/src/declinfo.l b/src/declinfo.l index fe2fed0..a6cafc4 100644 --- a/src/declinfo.l +++ b/src/declinfo.l @@ -136,9 +136,10 @@ ID ([a-z_A-Z][a-z_A-Z0-9]*)|(@[0-9]+) <Start>{B}+ { addType(); } -<Start>{B}*"("{B}*"*" { +<Start>{B}*"("({ID}"::")*{B}*"*" { addType(); - type+="(*"; + QCString text=yytext; + type+=text.stripWhiteSpace(); } <Start>{B}*")" { type+=")"; diff --git a/src/defargs.l b/src/defargs.l index 5ff1fcb..88e4148 100644 --- a/src/defargs.l +++ b/src/defargs.l @@ -256,12 +256,9 @@ ID [a-z_A-Z][a-z_A-Z0-9]* if (l>0) { int i=l-1; - while (i>=0 && - ( - isspace(g_curArgTypeName.at(i)) || - isId(g_curArgTypeName.at(i)) - ) - ) i--; + while (i>=0 && isspace(g_curArgTypeName.at(i))) i--; + while (i>=0 && isId(g_curArgTypeName.at(i))) i--; + //printf("g_curArgTypeName=`%s' i=%d\n",g_curArgTypeName.data(),i); Argument *a = new Argument; a->attrib = g_curArgAttrib.copy(); if (i>=0 && g_curArgTypeName.at(i)!=':') @@ -276,7 +273,7 @@ ID [a-z_A-Z][a-z_A-Z0-9]* a->array = g_curArgArray.copy(); a->defval = g_curArgDefValue.copy(); a->docs = g_curArgDocs.stripWhiteSpace(); - //printf("Argument %s %s adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data()); + //printf("Argument `%s' `%s' adding docs=`%s'\n",a->type.data(),a->name.data(),a->docs.data()); g_argList->append(a); } g_curArgAttrib.resize(0); diff --git a/src/definition.cpp b/src/definition.cpp index af964f0..629a45a 100644 --- a/src/definition.cpp +++ b/src/definition.cpp @@ -141,15 +141,27 @@ static bool readCodeFragment(const char *fileName, } if (!f.atEnd()) { - // skip until the opening bracket is found - while (lineNr<=endLine && !f.atEnd() && c!='{') + // skip until the opening bracket or lonely : is found + bool found=FALSE; + char cn; + while (lineNr<=endLine && !f.atEnd() && !found) { - while ((c=f.getch())!='{' && c!=-1) if (c=='\n') lineNr++; + while ((c=f.getch())!='{' && c!=':' && c!=-1) if (c=='\n') lineNr++; + if (c==':') + { + cn=f.getch(); + if (cn!=':') found=TRUE; + } + else if (c=='{') + { + found=TRUE; + } } - if (c=='{') + if (found) { // copy until end of line result+=c; + if (c==':') result+=cn; startLine=lineNr; const int maxLineLength=4096; char lineStr[maxLineLength]; @@ -179,7 +191,7 @@ static bool readCodeFragment(const char *fileName, } /*! Write a reference to the source code defining this definition */ -void Definition::writeSourceDef(OutputList &ol,const char *scopeName) +void Definition::writeSourceDef(OutputList &ol,const char *) { ol.pushGeneratorState(); //printf("Definition::writeSourceRef %d %p\n",bodyLine,bodyDef); @@ -271,6 +283,13 @@ void Definition::writeSourceDef(OutputList &ol,const char *scopeName) ol.newParagraph(); ol.enableAll(); } + ol.popGeneratorState(); +} + +/*! Write code of this definition into the documentation */ +void Definition::writeInlineCode(OutputList &ol,const char *scopeName) +{ + ol.pushGeneratorState(); if (Config::inlineSourceFlag && startBodyLine!=-1 && endBodyLine>=startBodyLine && bodyDef) { diff --git a/src/definition.h b/src/definition.h index 36aa229..701fd03 100644 --- a/src/definition.h +++ b/src/definition.h @@ -97,6 +97,7 @@ class Definition int getEndBodyLine() const { return endBodyLine; } FileDef *getBodyDef() { return bodyDef; } void writeSourceDef(OutputList &ol,const char *scopeName); + void writeInlineCode(OutputList &ol,const char *scopeName); void writeSourceRefs(OutputList &ol,const char *scopeName); void addSourceReference(MemberDef *d); diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 1e857f9..3240633 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1,6 +1,6 @@ /****************************************************************************** * - * $Id$ + * * * * Copyright (C) 1997-2000 by Dimitri van Heesch. @@ -80,11 +80,15 @@ MemberNameDict memberNameDict(10007); // all class member names MemberNameDict functionNameDict(10007); // all functions StringDict substituteDict(1009); // class name substitutes SectionDict sectionDict(257); // all page sections -FileNameDict inputNameDict(1009); // sections StringDict excludeNameDict(1009); // sections -FileNameDict includeNameDict(1009); // include names -FileNameDict exampleNameDict(1009); // examples -FileNameDict imageNameDict(257); // images +//FileNameDict inputNameDict(1009); // sections +//FileNameDict includeNameDict(1009); // include names +//FileNameDict exampleNameDict(1009); // examples +//FileNameDict imageNameDict(257); // images +FileNameDict *inputNameDict; // sections +FileNameDict *includeNameDict; // include names +FileNameDict *exampleNameDict; // examples +FileNameDict *imageNameDict; // images StringDict typedefDict(1009); // all typedefs GroupDict groupDict(257); // all groups FormulaDict formulaDict(1009); // all formulas @@ -119,11 +123,11 @@ void clearAll() functionNameDict.clear(); substituteDict.clear(); sectionDict.clear(); - inputNameDict.clear(); + inputNameDict->clear(); excludeNameDict.clear(); - includeNameDict.clear(); - exampleNameDict.clear(); - imageNameDict.clear(); + includeNameDict->clear(); + exampleNameDict->clear(); + imageNameDict->clear(); typedefDict.clear(); groupDict.clear(); formulaDict.clear(); @@ -246,7 +250,7 @@ static void buildFileList(Entry *root) ) { bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->name,ambig); + FileDef *fd=findFileDef(inputNameDict,root->name,ambig); if (fd && !ambig) { if ((!root->doc.isEmpty() && !fd->documentation().isEmpty()) || @@ -291,7 +295,7 @@ static void buildFileList(Entry *root) if (ambig) // name is ambigious { text+="matches the following input files:\n"; - text+=showFileDefMatches(&inputNameDict,root->name); + text+=showFileDefMatches(inputNameDict,root->name); text+="Please use a more specific name by " "including a (larger) part of the path!"; } @@ -326,7 +330,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) // see if we need to include a verbatim copy of the header file //printf("root->includeFile=%s\n",root->includeFile.data()); if (!root->includeFile.isEmpty() && - (fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0 + (fd=findFileDef(inputNameDict,root->includeFile,ambig))==0 ) { // explicit request QCString text; @@ -337,7 +341,7 @@ static void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root) if (ambig) // name is ambigious { text+="matches the following input files:\n"; - text+=showFileDefMatches(&inputNameDict,root->includeFile); + text+=showFileDefMatches(inputNameDict,root->includeFile); text+="Please use a more specific name by " "including a (larger) part of the path!"; } @@ -442,7 +446,7 @@ static void buildClassList(Entry *root) bool ambig; ClassDef *cd; //printf("findFileDef(%s)\n",root->fileName.data()); - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); if ((cd=getClass(fullName))) { @@ -486,7 +490,7 @@ static void buildClassList(Entry *root) if (root->bodyLine!=-1 && cd->getStartBodyLine()==-1) { cd->setBodySegment(root->bodyLine,root->endBodyLine); - cd->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + cd->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); } cd->addSectionsToDefinition(root->anchors); cd->setName(fullName); // change name to match docs @@ -652,7 +656,7 @@ static void buildNamespaceList(Entry *root) bool ambig; // file definition containing the namespace nd - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); // insert the namespace in the file definition if (fd) fd->insertNamespace(nd); } @@ -672,7 +676,7 @@ static void buildNamespaceList(Entry *root) bool ambig; // file definition containing the namespace nd - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); // insert the namespace in the file definition if (fd) fd->insertNamespace(nd); @@ -707,7 +711,7 @@ static void findUsingDirectives(Entry *root) { NamespaceDef *usingNd = 0; NamespaceDef *nd = 0; - FileDef *fd = findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd = findFileDef(inputNameDict,root->fileName,ambig); QCString nsName; // see if the using statement was found inside a namespace or inside @@ -777,7 +781,7 @@ static void findUsingDirectives(Entry *root) bool ambig; // file definition containing the namespace nd - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); // insert the namespace in the file definition if (fd) { @@ -815,7 +819,7 @@ void findUsingDeclarations(Entry *root) { ClassDef *usingCd = 0; NamespaceDef *nd = 0; - FileDef *fd = findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd = findFileDef(inputNameDict,root->fileName,ambig); QCString scName; // see if the using statement was found inside a namespace or inside @@ -977,7 +981,7 @@ static MemberDef *addVariableToClass( // md->setMemberGroup(memberGroupDict[root->mGrpId]); // bool ambig; - md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); // add the member to the global list if (mn) @@ -1040,7 +1044,7 @@ static MemberDef *addVariableToFile( md->setMaxInitLines(root->initLines); md->setMemberGroupId(root->mGrpId); bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); md->setBodyDef(fd); //if (root->mGrpId!=-1) //{ @@ -1391,7 +1395,7 @@ static void buildMemberList(Entry *root) md->setMemberSpecifiers(root->memSpec); md->setMemberGroupId(root->mGrpId); bool ambig; - md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); //md->setScopeTemplateArguments(root->tArgList); md->addSectionsToDefinition(root->anchors); QCString def; @@ -1528,7 +1532,7 @@ static void buildMemberList(Entry *root) { md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); } md->addSectionsToDefinition(root->anchors); } @@ -1555,7 +1559,7 @@ static void buildMemberList(Entry *root) //md->setBody(root->body); md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); md->setBodyDef(fd); md->addSectionsToDefinition(root->anchors); md->setMemberSpecifiers(root->memSpec); @@ -1622,7 +1626,7 @@ static void buildMemberList(Entry *root) //FileDef *fd=0; //bool ambig; //if (!root->fileName.isEmpty() && - // (fd=findFileDef(&inputNameDict,root->fileName,ambig)) + // (fd=findFileDef(inputNameDict,root->fileName,ambig)) // ) if (fd) { @@ -2178,7 +2182,7 @@ static void addMemberDocs(Entry *root, { md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); md->setBodyDef(fd); } } @@ -2214,7 +2218,7 @@ static void addMemberDocs(Entry *root, // else // { // bool ambig; - // FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + // FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); // if (fd) // { // //fd->addMemberToGroup(md,root->mGrpId); @@ -2343,8 +2347,9 @@ static bool findUnrelatedFunction(Entry *root, { bool ambig; NamespaceDef *nd=md->getNamespace(); - //printf("Namespace %s\n",nd ? nd->name().data() : "<none>"); - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + //printf("Namespace namespaceName=%s nd=%s\n", + // namespaceName.data(),nd ? nd->name().data() : "<none>"); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); //printf("File %s\n",fd ? fd->name().data() : "<none>"); NamespaceList *nl = fd ? fd->getUsedNamespaces() : 0; //printf("NamespaceList %p\n",nl); @@ -2360,11 +2365,10 @@ static bool findUnrelatedFunction(Entry *root, { Debug::print(Debug::FindMembers,0,"4. Try to add member `%s' to scope `%s'\n", md->name().data(),namespaceName.data()); - //ArgumentList *al = new ArgumentList; - //stringToArgumentList(funcArgs,al); QCString nsName = nd ? nd->name().data() : ""; bool matching= (md->argumentList()==0 && root->argList->count()==0) || + md->isVariable() || md->isTypedef() || /* in case of function pointers */ matchArguments(md->argumentList(),root->argList,0,nsName); if (matching) // add docs to the member { @@ -2372,7 +2376,6 @@ static bool findUnrelatedFunction(Entry *root, addMemberDocs(root,md,decl,root->argList,FALSE); found=TRUE; } - //delete al; } md=mn->next(); } @@ -2851,7 +2854,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl ClassDef *tcd=0; bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); NamespaceDef *nd=0; if (!namespaceName.isEmpty()) nd=namespaceDict[namespaceName]; tcd = findClassDefinition(fd,nd,scopeName,classTempList); @@ -2935,7 +2938,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl // TODO: match loop for all possible scopes bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); // list of namespaces using in the file that this member definition is part of NamespaceList *nl = fd ? fd->getUsedNamespaces() : 0; @@ -3034,7 +3037,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl md->addSectionsToDefinition(root->anchors); md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); md->setBodyDef(fd); md->setMemberSpecifiers(root->memSpec); md->setMemberGroupId(root->mGrpId); @@ -3136,7 +3139,7 @@ static void findMember(Entry *root,QCString funcDecl,QCString related,bool overl { md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig); + FileDef *fd=findFileDef(inputNameDict,root->fileName,ambig); md->setBodyDef(fd); } @@ -3355,7 +3358,7 @@ static void findEnums(Entry *root) else // found a global enum { bool ambig; - fd=findFileDef(&inputNameDict,root->fileName,ambig); + fd=findFileDef(inputNameDict,root->fileName,ambig); mnd=&functionNameDict; mnl=&functionNameList; isGlobal=TRUE; @@ -3372,7 +3375,7 @@ static void findEnums(Entry *root) //md->setDefLine(root->startLine); md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); //printf("Enum %s definition at line %d of %s: protection=%d\n", // root->name.data(),root->bodyLine,root->fileName.data(),root->protection); md->addSectionsToDefinition(root->anchors); @@ -4046,7 +4049,7 @@ static void findDefineDocumentation(Entry *root) md->setBriefDescription(root->brief); md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); md->addSectionsToDefinition(root->anchors); md->setMaxInitLines(root->initLines); if (root->mGrpId!=-1) md->setMemberGroupId(root->mGrpId); @@ -4084,7 +4087,7 @@ static void findDefineDocumentation(Entry *root) md->setBriefDescription(root->brief); md->setBodySegment(root->bodyLine,root->endBodyLine); bool ambig; - md->setBodyDef(findFileDef(&inputNameDict,root->fileName,ambig)); + md->setBodyDef(findFileDef(inputNameDict,root->fileName,ambig)); md->addSectionsToDefinition(root->anchors); //if (root->mGrpId!=-1 && md->getMemberGroup()==0) //{ @@ -5163,6 +5166,11 @@ int main(int argc,char **argv) substituteEnvironmentVars(); checkConfig(); + inputNameDict = new FileNameDict(1009); + includeNameDict = new FileNameDict(1009); + exampleNameDict = new FileNameDict(1009); + imageNameDict = new FileNameDict(257); + /************************************************************************** * Initialize some global constants **************************************************************************/ @@ -5214,7 +5222,7 @@ int main(int argc,char **argv) s=Config::includePath.first(); while (s) { - readFileOrDirectory(s,0,&includeNameDict,0,&Config::filePatternList, + readFileOrDirectory(s,0,includeNameDict,0,&Config::filePatternList, &Config::excludePatternList,0,0); s=Config::includePath.next(); } @@ -5223,7 +5231,7 @@ int main(int argc,char **argv) s=Config::examplePath.first(); while (s) { - readFileOrDirectory(s,0,&exampleNameDict,0,&Config::examplePatternList, + readFileOrDirectory(s,0,exampleNameDict,0,&Config::examplePatternList, 0,0,0); s=Config::examplePath.next(); } @@ -5232,7 +5240,7 @@ int main(int argc,char **argv) s=Config::imagePath.first(); while (s) { - readFileOrDirectory(s,0,&imageNameDict,0,0, + readFileOrDirectory(s,0,imageNameDict,0,0, 0,0,0); s=Config::imagePath.next(); } @@ -5252,7 +5260,7 @@ int main(int argc,char **argv) while (s) { inputSize+=readFileOrDirectory(s,&inputNameList, - &inputNameDict,&excludeNameDict, + inputNameDict,&excludeNameDict, &Config::filePatternList, &Config::excludePatternList, &inputFiles,0); diff --git a/src/doxygen.h b/src/doxygen.h index aa9c198..87c4592 100644 --- a/src/doxygen.h +++ b/src/doxygen.h @@ -109,10 +109,10 @@ extern ClassDef unrelatedClass; extern QTextStream tagFile; extern SectionDict sectionDict; extern FileNameList inputNameList; -extern FileNameDict includeNameDict; -extern FileNameDict exampleNameDict; -extern FileNameDict inputNameDict; -extern FileNameDict imageNameDict; +extern FileNameDict *includeNameDict; +extern FileNameDict *exampleNameDict; +extern FileNameDict *inputNameDict; +extern FileNameDict *imageNameDict; //extern FileList includeFiles; extern StringDict typedefDict; extern GroupList groupList; diff --git a/src/groupdef.cpp b/src/groupdef.cpp index 941fdc9..7857cc9 100644 --- a/src/groupdef.cpp +++ b/src/groupdef.cpp @@ -213,7 +213,7 @@ void GroupDef::writeDocumentation(OutputList &ol) while (fd) { ol.startMemberItem(0); - ol.docify("file"); + ol.docify("file "); ol.insertMemberAlign(); ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,fd->name()); ol.endMemberItem(FALSE); diff --git a/src/memberdef.cpp b/src/memberdef.cpp index 10bc0cd..3613f78 100644 --- a/src/memberdef.cpp +++ b/src/memberdef.cpp @@ -1302,6 +1302,7 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol, // write reference to the source writeSourceDef(ol,cname); writeSourceRefs(ol,cname); + writeInlineCode(ol,cname); ol.endIndent(); // enable LaTeX again @@ -99,7 +99,7 @@ static void setFileName(const char *name) { bool ambig; g_yyFileName=name; - g_yyFileDef=findFileDef(&inputNameDict,g_yyFileName,ambig); + g_yyFileDef=findFileDef(inputNameDict,g_yyFileName,ambig); } static void incrLevel() @@ -858,7 +858,7 @@ static void readIncludeFile(const QCString &inc) if (oldFileDef) { bool ambig; - FileDef *fd = findFileDef(&inputNameDict,incFileName,ambig); + FileDef *fd = findFileDef(inputNameDict,incFileName,ambig); // add include dependency to the file in which the #include was found oldFileDef->addIncludeDependency(fd,incFileName,localInclude); } diff --git a/src/scanner.l b/src/scanner.l index c6fd289..1c2bc01 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -137,6 +137,8 @@ static bool inPreBlock; static bool inPostBlock; static bool inInvarBlock; static bool inWarningBlock; +static bool inRemarkBlock; +static bool inAttentionBlock; static bool inParBlock; static bool firstSeeArg; static char afterDocTerminator; @@ -223,6 +225,8 @@ static void initParser() inPostBlock = FALSE; inInvarBlock = FALSE; inWarningBlock = FALSE; + inRemarkBlock = FALSE; + inAttentionBlock = FALSE; inParBlock = FALSE; firstSeeArg = FALSE; } @@ -400,7 +404,7 @@ static void includeFile(OutputList &ol,const char *fileName,bool quiet) //FileInfo *f; bool ambig; FileDef *fd; - if ((fd=findFileDef(&exampleNameDict,fileName,ambig))) + if ((fd=findFileDef(exampleNameDict,fileName,ambig))) { currentIncludeFile=fileToString(fd->absFilePath()); includeFileOffset=0; @@ -419,7 +423,7 @@ static void includeFile(OutputList &ol,const char *fileName,bool quiet) QCString text; text.sprintf("Include file name %s is ambigious.\n",fileName); text+="Possible candidates:\n"; - text+=showFileDefMatches(&exampleNameDict,fileName); + text+=showFileDefMatches(exampleNameDict,fileName); warn(yyFileName,yyLineNr,text); } else @@ -436,7 +440,7 @@ static void verbIncludeFile(OutputList &ol,const char *name) //FileInfo *f; bool ambig; FileDef *fd; - if ((fd=findFileDef(&exampleNameDict,name,ambig))) + if ((fd=findFileDef(exampleNameDict,name,ambig))) { ol.startCodeFragment(); ol.codify(fileToString(fd->absFilePath())); @@ -447,7 +451,7 @@ static void verbIncludeFile(OutputList &ol,const char *name) QCString text; text.sprintf("Include file name %s is ambigious.\n",name); text+=("Possible candidates:\n"); - text+=showFileDefMatches(&exampleNameDict,name); + text+=showFileDefMatches(exampleNameDict,name); warn(yyFileName,yyLineNr,text); } else @@ -665,7 +669,8 @@ static void tryEndItemList() static bool inBlock() { return inParamBlock || inRetValBlock || inSeeBlock || inReturnBlock || inAuthorBlock || - inVersionBlock || inDateBlock || inWarningBlock || inBugBlock || inNoteBlock || + inVersionBlock || inDateBlock || inWarningBlock || inRemarkBlock || + inAttentionBlock || inBugBlock || inNoteBlock || inParBlock || inExceptionBlock || inDeprecatedBlock || inPreBlock || inPostBlock || inInvarBlock; } @@ -681,7 +686,7 @@ static void endBlock() inParamBlock=inRetValBlock=inSeeBlock=inReturnBlock=inAuthorBlock= inVersionBlock=inDateBlock=inBugBlock=inNoteBlock=inWarningBlock= inParBlock=inExceptionBlock=inDeprecatedBlock=inPreBlock=inPostBlock= - inInvarBlock=FALSE; + inInvarBlock=inRemarkBlock=inAttentionBlock=FALSE; } static void addSection() @@ -786,7 +791,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) QCString result; bool ambig; FileDef *fd; - if ((fd=findFileDef(&imageNameDict,fileName,ambig))) + if ((fd=findFileDef(imageNameDict,fileName,ambig))) { QFile inImage(fd->absFilePath().data()); if (inImage.open(IO_ReadOnly)) @@ -834,7 +839,7 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type) QCString text; text.sprintf("Warning: image file name %s is ambigious.\n",fileName); text+="Possible candidates:\n"; - text+=showFileDefMatches(&imageNameDict,fileName); + text+=showFileDefMatches(imageNameDict,fileName); warn(yyFileName,yyLineNr,text); } else @@ -1317,7 +1322,6 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") if (inBlock()) endBlock(); inWarningBlock=TRUE; outDoc->startDescList(); - //outDoc->writeBoldString("Warning: "); outDoc->startBold(); scanString(theTranslator->trWarning()+": "); outDoc->endBold(); @@ -1329,6 +1333,42 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->writeDescItem(); } } +<DocScan>{CMD}"remark"[s]?/{BN} { + endArgumentList(); + if (!inRemarkBlock) + { + if (inBlock()) endBlock(); + inRemarkBlock=TRUE; + outDoc->startDescList(); + outDoc->startBold(); + scanString(theTranslator->trRemarks()+": "); + outDoc->endBold(); + outDoc->endDescTitle(); + outDoc->writeDescItem(); + } + else + { + outDoc->writeDescItem(); + } + } +<DocScan>{CMD}"attention"[s]?/{BN} { + endArgumentList(); + if (!inAttentionBlock) + { + if (inBlock()) endBlock(); + inAttentionBlock=TRUE; + outDoc->startDescList(); + outDoc->startBold(); + scanString(theTranslator->trAttention()+": "); + outDoc->endBold(); + outDoc->endDescTitle(); + outDoc->writeDescItem(); + } + else + { + outDoc->writeDescItem(); + } + } <DocScan>{CMD}"bug"[s]?/{BN} { endArgumentList(); if (!inBugBlock) @@ -1473,6 +1513,22 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") outDoc->writeDescItem(); } } +<DocScan>"$"[a-zA-Z_0-9]+":"[^\n\$]+"$" { // RCS tag + QCString tagName(&yytext[1]); + int i=tagName.find(':'); + tagName=tagName.left(i); + QCString tagText=&yytext[i+2]; + tagText=tagText.left(tagText.length()-1); + endArgumentList(); + if (inBlock()) endBlock(); + outDoc->startDescList(); + outDoc->startBold(); + scanString(tagName+": "); + outDoc->endBold(); + outDoc->endDescTitle(); + scanString(tagText); + outDoc->endDescList(); + } <DocScan>{CMD}"author"/{BN} { endArgumentList(); if (!inAuthorBlock) @@ -2417,6 +2473,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"") BEGIN( FindMembers ) ; } <Operator>[^(] { + lineCount(); current->name += *yytext ; } <Operator>"<>" { /* skip guided templ specifiers */ } @@ -67,7 +67,7 @@ static void addFile(const char *name) //printf("adding file %s tagName=`%s'\n",name,tagName.data()); fd = new FileDef(0,name,tagName); FileName *mn; - if ((mn=inputNameDict[name])) + if ((mn=inputNameDict->find(name))) { mn->append(fd); } @@ -76,7 +76,7 @@ static void addFile(const char *name) mn = new FileName(name,name); mn->append(fd); inputNameList.inSort(mn); - inputNameDict.insert(name,mn); + inputNameDict->insert(name,mn); } cd = 0; nd = 0; diff --git a/src/translator.h b/src/translator.h index 8316e3f..80adc32 100644 --- a/src/translator.h +++ b/src/translator.h @@ -885,7 +885,14 @@ class Translator { return "Referenced by"; } - + virtual QCString trRemarks() + { + return "Remarks"; + } + virtual QCString trAttention() + { + return "Attention"; + } }; #endif diff --git a/src/util.cpp b/src/util.cpp index fed416a..83aafe2 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1954,7 +1954,7 @@ bool generateLink(OutputList &ol,const char *clName, ol.endTextLink(); return TRUE; } - else if ((fd=findFileDef(&inputNameDict,linkRef,ambig)) + else if ((fd=findFileDef(inputNameDict,linkRef,ambig)) && fd->isLinkable()) { // link to documented input file @@ -1973,7 +1973,7 @@ void generateFileRef(OutputList &ol,const char *name,const char *text) //FileInfo *fi; FileDef *fd; bool ambig; - if ((fd=findFileDef(&inputNameDict,name,ambig)) && + if ((fd=findFileDef(inputNameDict,name,ambig)) && fd->isLinkable()) // link to documented input file ol.writeObjectLink(fd->getReference(),fd->getOutputFileBase(),0,linkText); |