Commit cb417a1f authored by dimitri's avatar dimitri

Release-1.1.4-20000618

parent 24106371
......@@ -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)
......@@ -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());
......
......@@ -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",
......
......@@ -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,11 +740,25 @@ 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 }
......@@ -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.
......
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
......@@ -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);
......
......@@ -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());
......
......@@ -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+=")";
......
......@@ -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);
......
......@@ -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)
{
......
......@@ -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);
......
This diff is collapsed.
......@@ -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;
......
......@@ -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);
......
......@@ -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);
}
......
......@@ -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;
......
......@@ -885,7 +885,14 @@ class Translator
{
return "Referenced by";
}
virtual QCString trRemarks()
{
return "Remarks";
}
virtual QCString trAttention()
{
return "Attention";
}
};
#endif
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment