Commit dc2968f7 authored by Dimitri van Heesch's avatar Dimitri van Heesch

mods for doxygen-0.49-991117

parent 916d6d5c
DOXYGEN Version 0.49-991106
DOXYGEN Version 0.49-991117
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-0.49-991106.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-991106.src.tar # unpack it
gunzip doxygen-0.49-991117.src.tar.gz # uncompress the archive
tar xf doxygen-0.49-991117.src.tar # unpack it
2. Run the configure script:
......@@ -234,4 +234,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (06 November 1999)
Dimitri van Heesch (17 November 1999)
......@@ -21,7 +21,9 @@ install:
$(INSTTOOL) -d $(INSTALL)/bin
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
$(INSTTOOL) -d $(INSTALL)/doc/doxygen
$(INSTTOOL) -m 755 bin/doxy* $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxygen $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxytag $(INSTALL)/bin
$(INSTTOOL) -m 755 bin/doxysearch $(INSTALL)/bin
cp -r doc $(INSTALL)/doc/doxygen
cp -r examples $(INSTALL)/doc/doxygen
echo "DOXYGEN = $(INSTALL)" > $(INSTALL)/doc/doxygen/doc/Makefile
......
DOXYGEN Version 0.49-991106
DOXYGEN Version 0.49-991117
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (06 November 1999)
Dimitri van Heesch (17 November 1999)
0.49-991106
0.49-991117
......@@ -1057,10 +1057,8 @@ Doxygen. Unrecognized commands are treated as normal text.
The second argument specifies the file name of the image.
Doxygen will look for files in the paths (or files) that you specified
after the \ref cfg_image_path "IMAGE_PATH" tag and filter those files through the patterns
you specified after the \ref cfg_image_patterns "IMAGE_PATTERNS" tag.
If the image is found it
will be copied to the correct output directory.
after the \ref cfg_image_path "IMAGE_PATH" tag.
If the image is found it will be copied to the correct output directory.
If the image name contains spaces you'll have to put quotes (") around it.
The third argument can be used to specify the width or height of the
......@@ -1083,7 +1081,6 @@ Doxygen. Unrecognized commands are treated as normal text.
\verbatim
IMAGE_PATH = my_image_dir
IMAGE_PATTERNS = *.eps *.gif *.jpg
\endverbatim
\warning The image format for HTML is limited to what your
......
......@@ -88,7 +88,6 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_html_output HTML_OUTPUT
<li> \refitem cfg_html_stylesheet HTML_STYLESHEET
<li> \refitem cfg_image_path IMAGE_PATH
<li> \refitem cfg_image_patterns IMAGE_PATTERNS
<li> \refitem cfg_include_path INCLUDE_PATH
<li> \refitem cfg_inherit_docs INHERIT_DOCS
<li> \refitem cfg_inline_info INLINE_INFO
......@@ -115,6 +114,7 @@ followed by the descriptions of the tags grouped by category.
<li> \refitem cfg_searchengine SEARCHENGINE
<li> \refitem cfg_source_browser SOURCE_BROWSER
<li> \refitem cfg_strip_from_path STRIP_FROM_PATH
<li> \refitem cfg_tab_size TAB_SIZE
<li> \refitem cfg_tagfiles TAGFILES
<li> \refitem cfg_verbatim_headers VERBATIM_HEADERS
<li> \refitem cfg_warnings WARNINGS
......@@ -314,6 +314,11 @@ followed by the descriptions of the tags grouped by category.
If the \c INLINE_INFO tag is set to \c YES (the default) then a tag [inline]
is inserted in the documentation for inline members.
\anchor cfg_tab_size
<dt>\c TAB_SIZE <dd>
the TAB_SIZE tag can be used to set the number of spaces in a tab.
Doxygen uses this value to replace tabs by spaces in code fragments.
</dl>
\subsection config_input Input related options
......@@ -382,14 +387,6 @@ followed by the descriptions of the tags grouped by category.
directories that contain images that are to be included in the
documentation (see the \ref cmdimage "\image" command).
\anchor cfg_image_patterns
<dt>\c IMAGE_PATTERNS <dd>
\addindex IMAGE_PATTERNS
If the value of the \c IMAGE_PATH tag contains directories, you can use the
\c IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif
and *.eps) to filter out the image files in the directories. If left
blank all files are included.
\anchor cfg_input_filter
<dt>\c INPUT_FILTER <dd>
\addindex INPUT_FILTER
......
......@@ -56,6 +56,25 @@ as <code>PREPROCESSING = YES</code>.
Look at section \ref preprocessing for the answer.
<li><b>How can I change what's after the <code>#include</code> in class documentation?</b>
You can document your class like
\verbatim
/*! \class MyClassName include.h path/include.h
*
* Docs for MyClassName
*/
\endverbatim
To make doxygen put <br><br>
<code>
#include <path/include.h>
</code>
in the documentation of the class MyClassName regardless of the name of the actual
header file in which the definition of MyClassName is contained.
</ol>
*/
......@@ -14,24 +14,8 @@
*
*/
/*! \page history Doxygen History
<h3>TODO/Wish list</h3>
<ul>
<li>Add support for grouping members, and document then as a group.
<li>Support for K&R-style function arguments.
<li>More ouput formats: suggested are info format and RTF format.
<li>Split long lists in an index to a set of smaller lists.
<li>Add a nice graphical front-end for creating and modifying the
configuration file (it should be flexible enough to quickly add new options).
<li>Improve the search index generation, so it uses less memory and
is easier to get running.
<li>Generate code metrics (Anyone know a good book about code metrics?)
<li>Add features that you think are missing... So if you know any that are
not yet listed here, please let me know.
</ul>
<h3>Features scheduled for version 1.0</h3>
<ul>
<li>Include LaTeX style formulas in LaTeX and HTML output (in HTML as a gif).
......
......@@ -184,6 +184,7 @@ Patrick Alberts,
Jacques Tremblay,
John Sturton,
Moshe Kruger,
David Wong,
and many others for suggestions, patches and bug reports.
</ul>
*/
......
......@@ -100,18 +100,6 @@ Here is a list of the languages and their current maintainers:
borco@NOSPAM.borco-ei.eng.hokudai.ac.jp</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Polish
</TD>
<TD>
Piotr Piatkowski
</TD>
<TD>
<a href="mailto:kompas@NOSPAM.ceti.com.pl">
kompas@NOSPAM.ceti.com.pl</a>
</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>
Italian
......@@ -209,8 +197,6 @@ Here is a list of the languages and their current maintainers:
\hline
Romanian & Ionutz Borcoman & {\tt borco@borco-ei.eng.hokudai.ac.jp} \\
\hline
Polish & Piotr Piatkowski & {\tt kompas@ceti.com.pl} \\
\hline
Italian & Ahmed Aldo Faisal & {\tt aaf23@cam.ac.uk} \\
& Alessandro Falappa & {\tt a.falappa@flashnet.it} \\
\hline
......
/******************************************************************************
*
* $Id$
*
* Copyright (C) 1997-1999 by Dimitri van Heesch.
*
* Permission to use, copy, modify, and distribute this software and its
* documentation under the terms of the GNU General Public License is hereby
* granted. No representations are made about the suitability of this software
* for any purpose. It is provided "as is" without express or implied warranty.
* See the GNU General Public License for more details.
*
* All output generated with Doxygen is not covered by this license.
*
*/
/*! \page todo Doxygen TODO's
<h3>TODO/Wish list</h3>
<ul>
<li>Expand namespaces in the file docs with the contents that are
specific to the file (maybe also expand the classes inside a namespace).
<li>Add support for grouping members, and document then as a group.
<li>Support for K&R-style function arguments.
<li>More output formats: suggested are info format and RTF format.
<li>Split long lists in an index to a set of smaller lists.
<li>Add a nice graphical front-end for creating and modifying the
configuration file (it should be flexible enough to quickly add new options).
<li>Improve the search index generation, so it uses less memory and
is easier to get running.
<li>Generate code metrics (Anyone know a good book about code metrics?)
<li>Add features that you think are missing... So if you know any that are
not yet listed here, please let me know.
</ul>
*/
......@@ -1201,6 +1201,97 @@ static int anchorCount;
static FileDef *sourceFileDef;
static QCString lastVariable;
// start a new line of code, inserting a line number if sourceFileDef
// is TRUE. If a definition starts at the current line, then the line
// number is linked to the documentation of that definition.
static void startCodeLine(OutputList &ol)
{
if (sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
{
ol.startCodeAnchor(lineAnchor);
ol.writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
ol.endCodeAnchor();
}
else
{
ol.codify(lineNumber);
}
}
ol.startCodeLine();
}
// write a code fragment `text' that may span multiple lines, inserting
// line numbers for each line.
static void codifyLines(char *text)
{
char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine(*code);
}
}
else
{
code->codify(sp);
done=TRUE;
}
}
}
// writes a link to a fragment `text' that may span multiple lines, inserting
// line numbers for each line. If `text' contains newlines, the link will be
// split into multiple links with the same destination, one for each line.
static void writeMultiLineCodeLink(OutputList &ol,
const char *ref,const char *file,
const char *anchor,const char *text)
{
bool done=FALSE;
QCString ts = text;
char *p=ts.data();
while (!done)
{
char *sp=p;
char c;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
ol.writeCodeLink(ref,file,anchor,sp);
ol.endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine(ol);
}
}
else
{
ol.writeCodeLink(ref,file,anchor,sp);
done=TRUE;
}
}
}
static void addType()
{
if (name=="const") { name.resize(0); return; }
......@@ -1258,7 +1349,7 @@ static void addParameter()
}
}
static void generateClassLink(OutputList &ol,const char *clName)
static void generateClassLink(OutputList &ol,char *clName)
{
QCString className=clName;
if (className.length()==0) return;
......@@ -1280,11 +1371,12 @@ static void generateClassLink(OutputList &ol,const char *clName)
anchorCount++;
}
}
ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
}
else
{
ol.codify(clName);
codifyLines(clName);
}
}
......@@ -1323,8 +1415,10 @@ static bool getLink(const char *className,
if (d)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
//result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),text ? text : memberName);
writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
return TRUE;
}
}
......@@ -1346,7 +1440,7 @@ static ClassDef *stripClassName(const char *s)
}
static void generateMemberLink(OutputList &ol,const char *varName,
const char *memName)
char *memName)
{
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
// varName,memName,classScope.data());
......@@ -1393,7 +1487,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
ol.codify(memName);
codifyLines(memName);
}
return;
}
......@@ -1420,34 +1514,51 @@ static void generateMemberLink(OutputList &ol,const char *varName,
MemberName *mmn=memberNameDict[memName];
if (mmn)
{
MemberNameIterator mmni(*mmn);
MemberDef *mmd;
for (;(mmd=mmni.current());++mmni)
{
if (mmd->memberClass()==mcd)
MemberNameIterator mmni(*mmn);
MemberDef *mmd;
for (;(mmd=mmni.current());++mmni)
{
ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
mmd->anchor(),memName);
return;
if (mmd->memberClass()==mcd)
{
//ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
// mmd->anchor(),memName);
writeMultiLineCodeLink(ol,mcd->getReference(),
mcd->getOutputFileBase(),mmd->anchor(),memName);
return;
}
}
}
}
}
}
}
}
}
}
ol.codify(memName);
codifyLines(memName);
return;
}
static void generateFunctionLink(OutputList &ol,const char *funcName)
static QCString removeWhiteSpace(const char *s)
{
QCString result;
if (s)
{
const char *p=s;
int c;
while ((c=*p++))
{
if (c!=' ' && c!='\n' && c!='\r' && c!='\t') result+=c;
}
}
return result;
}
static void generateFunctionLink(OutputList &ol,char *funcName)
{
OutputList result(&ol);
CodeClassDef *ccd=0;
QCString locScope=classScope.copy();
QCString locFunc=funcName;
QCString locFunc=removeWhiteSpace(funcName);
int i=locFunc.findRev("::");
if (i>0)
{
......@@ -1475,7 +1586,7 @@ static void generateFunctionLink(OutputList &ol,const char *funcName)
}
else
{
ol.codify(funcName);
codifyLines(funcName);
}
return;
}
......@@ -1490,66 +1601,6 @@ static int countLines()
return count;
}
static void startCodeLine()
{
if (sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
//MemberDef *md = sourceFileDef->getSourceDefinition(yyLineNr);
//Definition *d=0;
//if (md)
//{
// d=md->memberClass();
// if (!d) d=md->getFileDef();
//}
//if (md && d)
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
{
code->startCodeAnchor(lineAnchor);
code->writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
code->endCodeAnchor();
}
else
{
code->codify(lineNumber);
}
}
code->startCodeLine();
}
static void codifyLines(char *text)
{
char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
}
}
else
{
code->codify(sp);
done=TRUE;
}
}
}
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
......@@ -1749,7 +1800,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
#line 502 "code.l"
#line 553 "code.l"
......@@ -1858,12 +1909,12 @@ do_action: /* This label is used only to access EOF actions. */
{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
#line 504 "code.l"
#line 555 "code.l"
YY_BREAK
case 2:
YY_RULE_SETUP
#line 505 "code.l"
#line 556 "code.l"
{
code->codify(yytext);
BEGIN( ReadInclude );
......@@ -1871,7 +1922,7 @@ YY_RULE_SETUP
YY_BREAK
case 3:
YY_RULE_SETUP
#line 509 "code.l"
#line 560 "code.l"
{
codifyLines(yytext);
//code->codify(yytext);
......@@ -1880,7 +1931,7 @@ YY_RULE_SETUP
YY_BREAK
case 4:
YY_RULE_SETUP
#line 514 "code.l"
#line 565 "code.l"
{
//FileInfo *f;
bool ambig;
......@@ -1903,7 +1954,7 @@ YY_RULE_SETUP
YY_BREAK
case 5:
YY_RULE_SETUP
#line 533 "code.l"
#line 584 "code.l"
{
code->codify(yytext);
BEGIN( SkipCPP ) ;
......@@ -1911,21 +1962,21 @@ YY_RULE_SETUP
YY_BREAK
case 6:
YY_RULE_SETUP
#line 537 "code.l"
#line 588 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 7:
YY_RULE_SETUP
#line 540 "code.l"
#line 591 "code.l"
{
codifyLines(yytext);
}
YY_BREAK
case 8:
YY_RULE_SETUP
#line 543 "code.l"
#line 594 "code.l"
{
codifyLines(yytext);
BEGIN( Body ) ;
......@@ -1933,14 +1984,14 @@ YY_RULE_SETUP
YY_BREAK
case 9:
YY_RULE_SETUP
#line 547 "code.l"
#line 598 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 10:
YY_RULE_SETUP
#line 550 "code.l"
#line 601 "code.l"
{
code->codify(yytext);
curlyCount++;
......@@ -1949,7 +2000,7 @@ YY_RULE_SETUP
YY_BREAK
case 11:
YY_RULE_SETUP
#line 555 "code.l"
#line 606 "code.l"
{
code->codify(yytext);
inClass=FALSE;
......@@ -1962,7 +2013,7 @@ YY_RULE_SETUP
YY_BREAK
case 12:
YY_RULE_SETUP
#line 564 "code.l"
#line 615 "code.l"
{
code->codify(yytext);
BEGIN( Body );
......@@ -1970,7 +2021,7 @@ YY_RULE_SETUP
YY_BREAK
case 13:
YY_RULE_SETUP
#line 568 "code.l"
#line 619 "code.l"
{
addType();
code->codify(yytext);
......@@ -1978,7 +2029,7 @@ YY_RULE_SETUP
YY_BREAK
case 14:
YY_RULE_SETUP
#line 572 "code.l"
#line 623 "code.l"
{
ccd.name=yytext;
addType();
......@@ -1987,7 +2038,7 @@ YY_RULE_SETUP
YY_BREAK
case 15:
YY_RULE_SETUP
#line 577 "code.l"
#line 628 "code.l"
{
codifyLines(yytext);
BEGIN( Bases );
......@@ -1995,7 +2046,7 @@ YY_RULE_SETUP
YY_BREAK
case 16:
YY_RULE_SETUP
#line 581 "code.l"
#line 632 "code.l"
{
code->codify(yytext);
curlyCount++;
......@@ -2012,35 +2063,35 @@ YY_RULE_SETUP
YY_BREAK
case 17:
YY_RULE_SETUP
#line 594 "code.l"
#line 645 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 18:
YY_RULE_SETUP
#line 597 "code.l"
#line 648 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 19:
YY_RULE_SETUP
#line 600 "code.l"
#line 651 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 20:
YY_RULE_SETUP
#line 603 "code.l"
#line 654 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 21:
YY_RULE_SETUP
#line 606 "code.l"
#line 657 "code.l"
{
//printf("%s:addBase(%s)\n",ccd.name.data(),yytext);
ccd.bases.inSort(yytext);
......@@ -2049,7 +2100,7 @@ YY_RULE_SETUP
YY_BREAK
case 22:
YY_RULE_SETUP
#line 611 "code.l"
#line 662 "code.l"
{
code->codify(yytext);
sharpCount=1;
......@@ -2058,7 +2109,7 @@ YY_RULE_SETUP
YY_BREAK
case 23:
YY_RULE_SETUP
#line 616 "code.l"
#line 667 "code.l"
{
code->codify(yytext);
++sharpCount;
......@@ -2066,7 +2117,7 @@ YY_RULE_SETUP
YY_BREAK
case 24:
YY_RULE_SETUP
#line 620 "code.l"
#line 671 "code.l"
{
code->codify(yytext);
if (--sharpCount<=0)
......@@ -2075,7 +2126,7 @@ YY_RULE_SETUP
YY_BREAK
case 25:
YY_RULE_SETUP
#line 625 "code.l"
#line 676 "code.l"
{
code->codify(yytext);
}
......@@ -2085,7 +2136,7 @@ case 26:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 630 "code.l"
#line 681 "code.l"
{
codifyLines(yytext);
name.resize(0);type.resize(0);
......@@ -2093,7 +2144,7 @@ YY_RULE_SETUP
YY_BREAK
case 27:
YY_RULE_SETUP
#line 634 "code.l"
#line 685 "code.l"
{
codifyLines(yytext);
name.resize(0);type.resize(0);
......@@ -2108,7 +2159,7 @@ YY_RULE_SETUP
*/
case 28:
YY_RULE_SETUP
#line 645 "code.l"
#line 696 "code.l"
{
generateClassLink(*code,yytext);
//codifyLines(yytext);
......@@ -2118,7 +2169,7 @@ YY_RULE_SETUP
YY_BREAK
case 29:
YY_RULE_SETUP
#line 651 "code.l"
#line 702 "code.l"
{
addType();
//if (type.length()==0)
......@@ -2134,7 +2185,7 @@ YY_RULE_SETUP
YY_BREAK
case 30:
YY_RULE_SETUP
#line 663 "code.l"
#line 714 "code.l"
{
code->codify(yytext);
lastStringContext=YY_START;
......@@ -2143,21 +2194,21 @@ YY_RULE_SETUP
YY_BREAK
case 31:
YY_RULE_SETUP
#line 668 "code.l"
#line 719 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 32:
YY_RULE_SETUP
#line 671 "code.l"
#line 722 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 33:
YY_RULE_SETUP
#line 674 "code.l"
#line 725 "code.l"
{
code->codify(yytext);
BEGIN( lastStringContext );
......@@ -2165,14 +2216,14 @@ YY_RULE_SETUP
YY_BREAK
case 34:
YY_RULE_SETUP
#line 678 "code.l"
#line 729 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 35:
YY_RULE_SETUP
#line 681 "code.l"
#line 732 "code.l"
{
code->codify(yytext);
name.resize(0);type.resize(0);
......@@ -2180,14 +2231,14 @@ YY_RULE_SETUP
YY_BREAK
case 36:
YY_RULE_SETUP
#line 685 "code.l"
#line 736 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 37:
YY_RULE_SETUP
#line 688 "code.l"
#line 739 "code.l"
{
code->codify(yytext);
BEGIN( MemberCall );
......@@ -2195,7 +2246,7 @@ YY_RULE_SETUP
YY_BREAK
case 38:
YY_RULE_SETUP
#line 692 "code.l"
#line 743 "code.l"
{
if (name.length()>0)
generateMemberLink(*code,name,yytext);
......@@ -2208,7 +2259,7 @@ YY_RULE_SETUP
YY_BREAK
case 39:
YY_RULE_SETUP
#line 701 "code.l"
#line 752 "code.l"
{
code->codify(yytext);
type.resize(0);
......@@ -2218,7 +2269,7 @@ YY_RULE_SETUP
YY_BREAK
case 40:
YY_RULE_SETUP
#line 707 "code.l"
#line 758 "code.l"
{
code->codify(yytext);
if (type.length()>0)
......@@ -2230,14 +2281,14 @@ YY_RULE_SETUP
YY_BREAK
case 41:
YY_RULE_SETUP
#line 715 "code.l"
#line 766 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 42:
YY_RULE_SETUP
#line 718 "code.l"
#line 769 "code.l"
{
addParmType();
parmName=yytext;
......@@ -2246,7 +2297,7 @@ YY_RULE_SETUP
YY_BREAK
case 43:
YY_RULE_SETUP
#line 723 "code.l"
#line 774 "code.l"
{
code->codify(yytext);
addParameter();
......@@ -2255,7 +2306,7 @@ YY_RULE_SETUP
YY_BREAK
case 44:
YY_RULE_SETUP
#line 728 "code.l"
#line 779 "code.l"
{
code->codify(yytext);
bracketCount++;
......@@ -2263,7 +2314,7 @@ YY_RULE_SETUP
YY_BREAK
case 45:
YY_RULE_SETUP
#line 732 "code.l"
#line 783 "code.l"
{
code->codify(yytext);
if (--bracketCount<=0)
......@@ -2274,7 +2325,7 @@ YY_RULE_SETUP
YY_BREAK
case 46:
YY_RULE_SETUP
#line 739 "code.l"
#line 790 "code.l"
{
codifyLines(yytext);
bracketCount=0;
......@@ -2287,7 +2338,7 @@ YY_RULE_SETUP
YY_BREAK
case 47:
YY_RULE_SETUP
#line 748 "code.l"
#line 799 "code.l"
{
addParameter();
parmType.resize(0);parmName.resize(0);
......@@ -2300,7 +2351,7 @@ YY_RULE_SETUP
YY_BREAK
case 48:
YY_RULE_SETUP
#line 757 "code.l"
#line 808 "code.l"
{
addParameter();
parmType.resize(0);parmName.resize(0);
......@@ -2312,7 +2363,7 @@ YY_RULE_SETUP
YY_BREAK
case 49:
YY_RULE_SETUP
#line 765 "code.l"
#line 816 "code.l"
{
code->codify(yytext);
curlyCount++;
......@@ -2321,7 +2372,7 @@ YY_RULE_SETUP
YY_BREAK
case 50:
YY_RULE_SETUP
#line 770 "code.l"
#line 821 "code.l"
{
generateClassLink(*code,yytext);
}
......@@ -2331,14 +2382,14 @@ case 51:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 773 "code.l"
#line 824 "code.l"
{
generateFunctionLink(*code,yytext);
}
YY_BREAK
case 52:
YY_RULE_SETUP
#line 776 "code.l"
#line 827 "code.l"
{
code->codify(yytext);
args=yytext;
......@@ -2347,7 +2398,7 @@ YY_RULE_SETUP
YY_BREAK
case 53:
YY_RULE_SETUP
#line 781 "code.l"
#line 832 "code.l"
{
if (args.length()>0)
generateMemberLink(*code,args,yytext);
......@@ -2359,7 +2410,7 @@ YY_RULE_SETUP
YY_BREAK
case 54:
YY_RULE_SETUP
#line 789 "code.l"
#line 840 "code.l"
{
code->codify(yytext);
args=yytext;
......@@ -2367,21 +2418,21 @@ YY_RULE_SETUP
YY_BREAK
case 55:
YY_RULE_SETUP
#line 793 "code.l"
#line 844 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 56:
YY_RULE_SETUP
#line 796 "code.l"
#line 847 "code.l"
{
code->codify(yytext);
}
YY_BREAK
case 57:
YY_RULE_SETUP
#line 799 "code.l"
#line 850 "code.l"
{
code->codify(yytext);
BEGIN( lastCContext ) ;
......@@ -2389,7 +2440,7 @@ YY_RULE_SETUP
YY_BREAK
case 58:
YY_RULE_SETUP
#line 803 "code.l"
#line 854 "code.l"
{
codifyLines(yytext);
BEGIN( lastCContext ) ;
......@@ -2400,49 +2451,49 @@ case 59:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 807 "code.l"
#line 858 "code.l"
{
yyLineNr+=QCString(yytext).contains('\n');
}
YY_BREAK
case 60:
YY_RULE_SETUP
#line 810 "code.l"
#line 861 "code.l"
{
yyLineNr+=QCString(yytext).contains('\n');
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(*code);
}
BEGIN(lastSpecialCContext);
}
YY_BREAK
case 61:
YY_RULE_SETUP
#line 819 "code.l"
#line 870 "code.l"
{
BEGIN(lastSpecialCContext);
}
YY_BREAK
case 62:
YY_RULE_SETUP
#line 822 "code.l"
#line 873 "code.l"
YY_BREAK
case 63:
YY_RULE_SETUP
#line 823 "code.l"
#line 874 "code.l"
YY_BREAK
case 64:
YY_RULE_SETUP
#line 824 "code.l"
#line 875 "code.l"
{ yyLineNr++; }
YY_BREAK
case 65:
YY_RULE_SETUP
#line 825 "code.l"
#line 876 "code.l"
YY_BREAK
/*
......@@ -2471,31 +2522,31 @@ YY_RULE_SETUP
*/
case 66:
YY_RULE_SETUP
#line 850 "code.l"
#line 901 "code.l"
{ // remove special one-line comment
yyLineNr+=((QCString)yytext).contains('\n');
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(*code);
}
}
YY_BREAK
case 67:
YY_RULE_SETUP
#line 858 "code.l"
#line 909 "code.l"
{ // remove special one-line comment
yyLineNr++;
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(*code);
}
}
YY_BREAK
case 68:
YY_RULE_SETUP
#line 866 "code.l"
#line 917 "code.l"
{ // strip special one-line comment
char c[2]; c[0]='\n'; c[1]=0;
codifyLines(c);
......@@ -2506,7 +2557,7 @@ case 69:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 870 "code.l"
#line 921 "code.l"
{
lastSpecialCContext = YY_START;
yyLineNr++;
......@@ -2518,7 +2569,7 @@ case 70:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 875 "code.l"
#line 926 "code.l"
{ // special C comment block at a new line
lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment);
......@@ -2529,7 +2580,7 @@ case 71:
yy_c_buf_p = yy_cp = yy_bp + 3;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 879 "code.l"
#line 930 "code.l"
{ // special C comment block half way a line
lastSpecialCContext = YY_START;
BEGIN(RemoveSpecialCComment);
......@@ -2537,7 +2588,7 @@ YY_RULE_SETUP
YY_BREAK
case 72:
YY_RULE_SETUP
#line 883 "code.l"
#line 934 "code.l"
{
code->codify(yytext);
lastCContext = YY_START ;
......@@ -2546,7 +2597,7 @@ YY_RULE_SETUP
YY_BREAK
case 73:
YY_RULE_SETUP
#line 888 "code.l"
#line 939 "code.l"
{
code->codify(yytext);
lastCContext = YY_START ;
......@@ -2555,14 +2606,14 @@ YY_RULE_SETUP
YY_BREAK
case 74:
YY_RULE_SETUP
#line 893 "code.l"
#line 944 "code.l"
{
codifyLines(yytext);
}
YY_BREAK
case 75:
YY_RULE_SETUP
#line 896 "code.l"
#line 947 "code.l"
{
code->codify(yytext);
}
......@@ -2578,7 +2629,7 @@ YY_RULE_SETUP
*/
case 76:
YY_RULE_SETUP
#line 909 "code.l"
#line 960 "code.l"
ECHO;
YY_BREAK
case YY_STATE_EOF(INITIAL):
......@@ -3477,7 +3528,7 @@ int main()
return 0;
}
#endif
#line 909 "code.l"
#line 960 "code.l"
/*@ ----------------------------------------------------------------------------
......@@ -3500,7 +3551,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
bool exBlock, const char *exName,FileDef *fd)
{
code = new OutputList(&ol);
if (s.length()==0) return;
if (s.isEmpty()) return;
inputString = s;
inputPosition = 0;
inputLines = countLines();
......@@ -3513,7 +3564,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
exampleName = exName;
sourceFileDef = fd;
exampleFile = convertSlashes(exampleName,TRUE)+"-example";
startCodeLine();
startCodeLine(*code);
type.resize(0);
name.resize(0);
args.resize(0);
......
......@@ -109,6 +109,97 @@ static int anchorCount;
static FileDef *sourceFileDef;
static QCString lastVariable;
// start a new line of code, inserting a line number if sourceFileDef
// is TRUE. If a definition starts at the current line, then the line
// number is linked to the documentation of that definition.
static void startCodeLine(OutputList &ol)
{
if (sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
{
ol.startCodeAnchor(lineAnchor);
ol.writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
ol.endCodeAnchor();
}
else
{
ol.codify(lineNumber);
}
}
ol.startCodeLine();
}
// write a code fragment `text' that may span multiple lines, inserting
// line numbers for each line.
static void codifyLines(char *text)
{
char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine(*code);
}
}
else
{
code->codify(sp);
done=TRUE;
}
}
}
// writes a link to a fragment `text' that may span multiple lines, inserting
// line numbers for each line. If `text' contains newlines, the link will be
// split into multiple links with the same destination, one for each line.
static void writeMultiLineCodeLink(OutputList &ol,
const char *ref,const char *file,
const char *anchor,const char *text)
{
bool done=FALSE;
QCString ts = text;
char *p=ts.data();
while (!done)
{
char *sp=p;
char c;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
ol.writeCodeLink(ref,file,anchor,sp);
ol.endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine(ol);
}
}
else
{
ol.writeCodeLink(ref,file,anchor,sp);
done=TRUE;
}
}
}
static void addType()
{
if (name=="const") { name.resize(0); return; }
......@@ -166,7 +257,7 @@ static void addParameter()
}
}
static void generateClassLink(OutputList &ol,const char *clName)
static void generateClassLink(OutputList &ol,char *clName)
{
QCString className=clName;
if (className.length()==0) return;
......@@ -188,11 +279,12 @@ static void generateClassLink(OutputList &ol,const char *clName)
anchorCount++;
}
}
ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
//ol.writeCodeLink(cd->getReference(),cd->getOutputFileBase(),0,className);
writeMultiLineCodeLink(ol,cd->getReference(),cd->getOutputFileBase(),0,className);
}
else
{
ol.codify(clName);
codifyLines(clName);
}
}
......@@ -231,8 +323,10 @@ static bool getLink(const char *className,
if (d)
{
//printf("d->getOutputBase()=`%s' name=`%s'\n",d->getOutputFileBase().data(),md->name().data());
result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
//result.writeCodeLink(d->getReference(),d->getOutputFileBase(),
// md->anchor(),text ? text : memberName);
writeMultiLineCodeLink(result,d->getReference(),d->getOutputFileBase(),
md->anchor(),text ? text : memberName);
return TRUE;
}
}
......@@ -254,7 +348,7 @@ static ClassDef *stripClassName(const char *s)
}
static void generateMemberLink(OutputList &ol,const char *varName,
const char *memName)
char *memName)
{
//printf("generateMemberLink(object=%s,mem=%s) classScope=%s\n",
// varName,memName,classScope.data());
......@@ -301,7 +395,7 @@ static void generateMemberLink(OutputList &ol,const char *varName,
}
else
{
ol.codify(memName);
codifyLines(memName);
}
return;
}
......@@ -328,34 +422,51 @@ static void generateMemberLink(OutputList &ol,const char *varName,
MemberName *mmn=memberNameDict[memName];
if (mmn)
{
MemberNameIterator mmni(*mmn);
MemberDef *mmd;
for (;(mmd=mmni.current());++mmni)
{
if (mmd->memberClass()==mcd)
MemberNameIterator mmni(*mmn);
MemberDef *mmd;
for (;(mmd=mmni.current());++mmni)
{
ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
mmd->anchor(),memName);
return;
if (mmd->memberClass()==mcd)
{
//ol.writeCodeLink(mcd->getReference(),mcd->getOutputFileBase(),
// mmd->anchor(),memName);
writeMultiLineCodeLink(ol,mcd->getReference(),
mcd->getOutputFileBase(),mmd->anchor(),memName);
return;
}
}
}
}
}
}
}
}
}
}
ol.codify(memName);
codifyLines(memName);
return;
}
static void generateFunctionLink(OutputList &ol,const char *funcName)
static QCString removeWhiteSpace(const char *s)
{
QCString result;
if (s)
{
const char *p=s;
int c;
while ((c=*p++))
{
if (c!=' ' && c!='\n' && c!='\r' && c!='\t') result+=c;
}
}
return result;
}
static void generateFunctionLink(OutputList &ol,char *funcName)
{
OutputList result(&ol);
CodeClassDef *ccd=0;
QCString locScope=classScope.copy();
QCString locFunc=funcName;
QCString locFunc=removeWhiteSpace(funcName);
int i=locFunc.findRev("::");
if (i>0)
{
......@@ -383,7 +494,7 @@ static void generateFunctionLink(OutputList &ol,const char *funcName)
}
else
{
ol.codify(funcName);
codifyLines(funcName);
}
return;
}
......@@ -398,66 +509,6 @@ static int countLines()
return count;
}
static void startCodeLine()
{
if (sourceFileDef)
{
QCString lineNumber,lineAnchor;
lineNumber.sprintf("%05d ",yyLineNr);
lineAnchor.sprintf("l%05d",yyLineNr);
//MemberDef *md = sourceFileDef->getSourceDefinition(yyLineNr);
//Definition *d=0;
//if (md)
//{
// d=md->memberClass();
// if (!d) d=md->getFileDef();
//}
//if (md && d)
Definition *d = sourceFileDef->getSourceDefinition(yyLineNr);
QCString anchor = sourceFileDef->getSourceAnchor(yyLineNr);
if (d && d->isLinkableInProject())
{
code->startCodeAnchor(lineAnchor);
code->writeCodeLink(d->getReference(),d->getOutputFileBase(),
anchor,lineNumber);
code->endCodeAnchor();
}
else
{
code->codify(lineNumber);
}
}
code->startCodeLine();
}
static void codifyLines(char *text)
{
char *p=text,*sp=p;
char c;
bool done=FALSE;
while (!done)
{
sp=p;
while ((c=*p++) && c!='\n');
if (c=='\n')
{
yyLineNr++;
*(p-1)='\0';
code->codify(sp);
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
}
}
else
{
code->codify(sp);
done=TRUE;
}
}
}
/* -----------------------------------------------------------------
*/
#undef YY_INPUT
......@@ -812,7 +863,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(*code);
}
BEGIN(lastSpecialCContext);
}
......@@ -852,7 +903,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(*code);
}
}
<*>^{B}*"//"[!/][^\n]*\n { // remove special one-line comment
......@@ -860,7 +911,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
code->endCodeLine();
if (yyLineNr<inputLines)
{
startCodeLine();
startCodeLine(*code);
}
}
<*>"//"[!/][^\n]*\n { // strip special one-line comment
......@@ -928,7 +979,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
bool exBlock, const char *exName,FileDef *fd)
{
code = new OutputList(&ol);
if (s.length()==0) return;
if (s.isEmpty()) return;
inputString = s;
inputPosition = 0;
inputLines = countLines();
......@@ -941,7 +992,7 @@ void parseCode(OutputList &ol,const char *className,const QCString &s,
exampleName = exName;
sourceFileDef = fd;
exampleFile = convertSlashes(exampleName,TRUE)+"-example";
startCodeLine();
startCodeLine(*code);
type.resize(0);
name.resize(0);
args.resize(0);
......
......@@ -3170,7 +3170,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n";
}
......@@ -3259,16 +3259,6 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "IMAGE_PATH =\n";
if (!sl)
{
t << "\n";
t << "# If the value of the IMAGE_PATH tag contains directories, you can use the\n";
t << "# IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif \n";
t << "# and *.eps) to filter out the image files in the directories. If left \n";
t << "# blank all files are included.\n";
t << "\n";
}
t << "IMAGE_PATTERNS =\n";
if (!sl)
{
t << "\n";
t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should\n";
......
......@@ -707,7 +707,7 @@ void writeTemplateConfig(QFile *f,bool sl)
if (!sl)
{
t << "\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab\n";
t << "# the TAB_SIZE tag can be used to set the number of spaces in a tab.\n";
t << "# Doxygen uses this value to replace tabs by spaces in code fragments.\n";
t << "\n";
}
......@@ -796,16 +796,6 @@ void writeTemplateConfig(QFile *f,bool sl)
}
t << "IMAGE_PATH =\n";
if (!sl)
{
t << "\n";
t << "# If the value of the IMAGE_PATH tag contains directories, you can use the\n";
t << "# IMAGE_PATTERNS tag to specify one or more wildcard pattern (like *.gif \n";
t << "# and *.eps) to filter out the image files in the directories. If left \n";
t << "# blank all files are included.\n";
t << "\n";
}
t << "IMAGE_PATTERNS =\n";
if (!sl)
{
t << "\n";
t << "# The INPUT_FILTER tag can be used to specify a program that doxygen should\n";
......
......@@ -43,6 +43,8 @@ static int labelToEnumValue(const char *l)
return Debug::Functions;
else if (label=="Variables")
return Debug::Variables;
else if (label=="Preprocessor")
return Debug::Preprocessor;
else
return 0;
}
......@@ -61,3 +63,8 @@ void Debug::setPriority(int p)
{
curPrio = p;
}
bool Debug::isFlagSet(DebugMask mask)
{
return (curMask & mask)!=0;
}
......@@ -21,14 +21,16 @@
class Debug
{
public:
enum DebugMask { Quiet = 0x00000000,
FindMembers = 0x00000001,
Functions = 0x00000002,
Variables = 0x00000004
enum DebugMask { Quiet = 0x00000000,
FindMembers = 0x00000001,
Functions = 0x00000002,
Variables = 0x00000004,
Preprocessor = 0x00000008
};
static void print(DebugMask mask,int prio,const char *fmt,...);
static void setFlag(const char *label);
static void clearFlag(const char *label);
static bool isFlagSet(DebugMask mask);
static void setPriority(int p);
private:
......
......@@ -207,8 +207,8 @@ void buildFileList(Entry *root)
FileDef *fd=findFileDef(&inputNameDict,root->name,ambig);
if (fd && !ambig)
{
if ((root->doc.length()>0 && fd->documentation()) ||
(root->brief.length()>0 && fd->briefDescription()))
if ((root->doc.length()>0 && !fd->documentation().isEmpty()) ||
(root->brief.length()>0 && !fd->briefDescription().isEmpty()))
{
warn("Warning: file %s already documented\n"
" skipping documentation in file %s at line %d\n",
......@@ -262,54 +262,61 @@ void buildFileList(Entry *root)
void addIncludeFile(ClassDef *cd,FileDef *ifd,Entry *root)
{
//printf(">>>>>> includeFile=%s\n",root->includeFile.data());
bool ambig;
FileDef *fd=0;
// see if we need to include a verbatim copy of the header file
//printf("root->includeFile=%s\n",root->includeFile.data());
if (!root->includeFile.isNull() &&
(fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0
if (
(!root->doc.isEmpty() || !root->brief.isEmpty() ||
Config::extractAllFlag
) && root->protection!=Private
)
{ // explicit request
warn("Warning: the name `%s' supplied as "
"the second argument in the \\class statement in file "
"%s at line %d ",
root->includeFile.data(),
root->fileName.data(),
root->startLine);
if (ambig) // name is ambigious
{
warn("matches the following input files:\n");
showFileDefMatches(&inputNameDict,root->includeFile);
warn("Please use a more specific name by "
"including a (larger) part of the path!\n");
{
//printf(">>>>>> includeFile=%s\n",root->includeFile.data());
bool ambig;
FileDef *fd=0;
// see if we need to include a verbatim copy of the header file
//printf("root->includeFile=%s\n",root->includeFile.data());
if (!root->includeFile.isNull() &&
(fd=findFileDef(&inputNameDict,root->includeFile,ambig))==0
)
{ // explicit request
warn("Warning: the name `%s' supplied as "
"the second argument in the \\class statement in file "
"%s at line %d ",
root->includeFile.data(),
root->fileName.data(),
root->startLine);
if (ambig) // name is ambigious
{
warn("matches the following input files:\n");
showFileDefMatches(&inputNameDict,root->includeFile);
warn("Please use a more specific name by "
"including a (larger) part of the path!\n");
}
else // name is not an input file
warn("is not an input file\n");
}
else // name is not an input file
warn("is not an input file\n");
}
else if (root->includeFile.isEmpty() && ifd &&
// see if the file extension makes sense
guessSection(ifd->name())==Entry::HEADER_SEC)
{ // implicit assumption
fd=ifd;
}
// if a file is found, we mark it for verbatim inclusion.
if (fd)
{
//printf("fd->name()=%s fd->absFilePath()=%s\n",fd->name().data(),
// fd->absFilePath().data());
// set include file definition
cd->setIncludeFile(fd);
// set include supplied name
cd->setIncludeName(root->includeName);
if (cd->name().find('@')==-1)
fd->setIncludeName(cd->getOutputFileBase()+"-include");
if (includeDict[fd->absFilePath()]==0) // include not inserted earlier
else if (root->includeFile.isEmpty() && ifd &&
// see if the file extension makes sense
guessSection(ifd->name())==Entry::HEADER_SEC)
{ // implicit assumption
fd=ifd;
}
// if a file is found, we mark it for verbatim inclusion.
if (fd)
{
includeFiles.inSort(fd);
includeDict.insert(fd->absFilePath(),fd);
//printf("fd->name()=%s fd->absFilePath()=%s\n",fd->name().data(),
// fd->absFilePath().data());
// set include file definition
cd->setIncludeFile(fd);
// set include supplied name
cd->setIncludeName(root->includeName);
if (cd->name().find('@')==-1)
fd->setIncludeName(cd->getOutputFileBase()+"-include");
if (includeDict[fd->absFilePath()]==0) // include not inserted earlier
{
includeFiles.inSort(fd);
includeDict.insert(fd->absFilePath(),fd);
}
}
}
}
......@@ -322,8 +329,8 @@ void extractNamespaceName(const QCString &scopeName,
{
QCString clName=scopeName.copy();
QCString nsName;
if (clName.length()>0 && namespaceDict[clName])
{ // the whole name is a namespace
if (clName.length()>0 && namespaceDict[clName] && getClass(clName)==0)
{ // the whole name is a namespace (and not a class)
namespaceName=clName.copy();
className.resize(0);
//printf("extractNamespace `%s' => `%s|%s'\n",scopeName.data(),
......@@ -332,9 +339,9 @@ void extractNamespaceName(const QCString &scopeName,
}
int i,p=clName.length()-2;
while (p>=0 && (i=clName.findRev("::",p))!=-1)
// see if the first part is a namespace
// see if the first part is a namespace (and not a class)
{
if (i>0 && namespaceDict[clName.left(i)])
if (i>0 && namespaceDict[clName.left(i)] && getClass(clName.left(i))==0)
{
namespaceName=clName.left(i);
className=clName.right(clName.length()-i-2);
......@@ -445,9 +452,7 @@ void buildClassList(Entry *root)
cd->addSectionsToDefinition(root->anchors);
cd->setName(fullName); // change name to match docs
}
if (cd->includeFile()==0 &&
(!root->doc.isEmpty() || !root->brief.isEmpty())
)
if (cd->includeFile()==0)
{
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
cd->setFileDef(fd);
......@@ -498,8 +503,7 @@ void buildClassList(Entry *root)
cd->setFileDef(ifd);
if (!root->doc.isEmpty() || !root->brief.isEmpty())
addIncludeFile(cd,ifd,root);
addIncludeFile(cd,ifd,root);
// if the class is not in a namespace then we insert
// it in the file definition
......@@ -1458,13 +1462,13 @@ void findFriends()
// function is actually a friend.
{
mergeArguments(mmd->argumentList(),fmd->argumentList());
if (fmd->documentation())
if (!fmd->documentation().isEmpty())
mmd->setDocumentation(fmd->documentation());
else if (mmd->documentation())
else if (!mmd->documentation().isEmpty())
fmd->setDocumentation(mmd->documentation());
if (!mmd->briefDescription() && fmd->briefDescription())
if (mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
mmd->setBriefDescription(fmd->briefDescription());
else if (mmd->briefDescription() && !fmd->briefDescription())
else if (!mmd->briefDescription().isEmpty() && !fmd->briefDescription().isEmpty())
fmd->setBriefDescription(mmd->briefDescription());
if (mmd->getBodyLine()==-1 && fmd->getBodyLine()!=-1)
mmd->setBodyLine(fmd->getBodyLine());
......@@ -1532,6 +1536,102 @@ void transferFunctionDocumentation()
}
}
//----------------------------------------------------------------------
bool findBaseClassRelation(Entry *root,ClassDef *cd,const char *scopePrefix,
bool insertUndocumented)
{
// The base class could ofcouse also be a non-nested class
QList<BaseInfo> *baseList=root->extends;
BaseInfo *bi=baseList->first();
bool foundAny=FALSE;
while (bi) // for each base class
{
QCString baseClassName=removeRedundantWhiteSpace(scopePrefix+bi->name);
ClassDef *baseClass=getClass(baseClassName);
//printf("baseClass %s of %s found (%s and %s)\n",
// baseClassName.data(),
// root->name.data(),
// (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
// (bi->virt==Normal)?"normal":"virtual"
// );
int i;
QCString templSpec;
if (baseClass==0 && (i=baseClassName.find('<'))!=-1)
// base class has template specifiers
{
// TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class.
templSpec=baseClassName.right(baseClassName.length()-i);
baseClassName=baseClassName.left(i);
baseClass=getClass(baseClassName);
//printf("baseClass=%s templSpec=%s\n",
// baseClassName.data(),templSpec.data());
}
bool found=baseClass!=0;
NamespaceDef *nd=cd->getNamespace();
if (!found)
{
FileDef *fd=cd->getFileDef();
if (fd)
{
// look for the using statement in this file in which the
// class was found
NamespaceList *nl = fd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
found = (baseClass=getClass(nd->name()+"::"+baseClassName))!=0;
}
}
}
if (!found && nd) // class is inside a namespace
{
NamespaceList *nl = nd->getUsedNamespaces();
found = (baseClass=getClass(nd->name()+"::"+baseClassName))!=0;
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
found = (baseClass=getClass(nd->name()+"::"+baseClassName))!=0;
}
}
}
}
if (found)
{
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
foundAny=TRUE;
}
else if (insertUndocumented)
{
//printf(">>> Undocumented base class = %s\n",bi->name.data());
baseClass=new ClassDef(baseClassName,ClassDef::Class);
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
// the undocumented base was found in this file
baseClass->insertUsedFile(root->fileName);
// add class to the list
classList.inSort(baseClass);
//printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
//classDict.insert(resolveDefines(bi->name),baseClass);
classDict.insert(bi->name,baseClass);
}
bi=baseList->next();
}
return foundAny;
}
//----------------------------------------------------------------------
// Computes the base and super classes for each class in the tree
......@@ -1564,127 +1664,19 @@ void computeClassRelations(Entry *root)
// with the same name!)
if (root->extends->count()>0) // there are base classes
{
QCString scopePrefix;
Entry *p=root->parent;
bool found=FALSE;
// For nested classes the base class could also be nested!
// For nested classes (or classes inside namespaces) the base class
// could also be nested (or inside a namespace)!
// To find the correct scope, we try to prepend the scope to the base
// name, starting with the largest, most inner scope.
while (p->section&Entry::SCOPE_MASK && !found)
{
scopePrefix=p->name+"::";
QList<BaseInfo> *baseList=root->extends;
BaseInfo *bi=baseList->first();
while (bi && !found) // for each base class
{
QCString cName=removeRedundantWhiteSpace(scopePrefix+bi->name);
//printf("Base class %s\n",cName.data());
ClassDef *baseClass=getClass(cName);
if (baseClass && cName!=cd->name()) // base class is documented
{
//printf("Adding!\n");
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt);
found=TRUE;
}
//else // base class not documented
//{
// warn("Warning: Base class %s referred to in file %s at line %d is not "
// "documented\n",s->data(),root->fileName.data(),root->startLine);
//}
bi=baseList->next();
}
p=p->parent;
}
while (p && p->section&Entry::SCOPE_MASK &&
!(found=findBaseClassRelation(root,cd,p->name+"::",FALSE)))
p=p->parent;
// For classes with global scope the same search is preformed
if (!found)
{
// The base class could ofcouse also be a non-nested class
QList<BaseInfo> *baseList=root->extends;
BaseInfo *bi=baseList->first();
while (bi) // for each base class
{
QCString baseClassName=removeRedundantWhiteSpace(bi->name);
ClassDef *baseClass=getClass(baseClassName);
//printf("baseClass %s of %s found (%s and %s)\n",
// baseClassName.data(),
// bName.data(),
// (bi->prot==Private)?"private":((bi->prot==Protected)?"protected":"public"),
// (bi->virt==Normal)?"normal":"virtual"
// );
int i;
QCString templSpec;
if (baseClass==0 && (i=baseClassName.find('<'))!=-1)
// base class has template specifiers
{
// TODO: here we should try to find the correct template specialization
// but for now, we only look for the unspecializated base class.
baseClassName=baseClassName.left(i);
baseClass=getClass(baseClassName);
templSpec=bi->name.right(bi->name.length()-i);
}
bool found=baseClass!=0;
NamespaceDef *nd=cd->getNamespace();
if (!found)
{
FileDef *fd=cd->getFileDef();
if (fd)
{
// look for the using statement in this file in which the
// class was found
NamespaceList *nl = fd->getUsedNamespaces();
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
found = (baseClass=getClass(nd->name()+"::"+baseClassName));
}
}
}
if (!found && nd) // class is inside a namespace
{
NamespaceList *nl = nd->getUsedNamespaces();
found = (baseClass=getClass(nd->name()+"::"+baseClassName));
if (nl) // try to prepend any of the using namespace scopes.
{
NamespaceListIterator nli(*nl);
NamespaceDef *nd;
for (nli.toFirst() ; (nd=nli.current()) && !found ; ++nli)
{
found = (baseClass=getClass(nd->name()+"::"+baseClassName));
}
}
}
}
if (found)
{
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
}
else
{
//printf(">>> Undocumented base class = %s\n",bi->name.data());
baseClass=new ClassDef(baseClassName,ClassDef::Class);
// add base class to this class
cd->insertBaseClass(baseClass,bi->prot,bi->virt,templSpec);
// add this class as super class to the base class
baseClass->insertSuperClass(cd,bi->prot,bi->virt,templSpec);
// the undocumented base was found in this file
baseClass->insertUsedFile(root->fileName);
// add class to the list
classList.inSort(baseClass);
//printf("ClassDict.insert(%s)\n",resolveDefines(fullName).data());
//classDict.insert(resolveDefines(bi->name),baseClass);
classDict.insert(bi->name,baseClass);
}
bi=baseList->next();
}
findBaseClassRelation(root,cd,0,TRUE);
} // class not nested
} // class has no base classes
} // else class is already found
......@@ -3429,7 +3421,7 @@ void generateSources()
while (fn)
{
FileDef *fd=fn->first();
while (fd)
while (fd && !fd->isReference())
{
msg("Generating source listing for file %s...\n",fd->name().data());
fd->writeSource(*outputList);
......
......@@ -60,6 +60,7 @@ void FileName::generateDiskNames()
while (fd && fd->isReference()) fd=next();
char c=fd->path.at(i);
if (c=='/') j=i; // remember last position of dirname
fd=next();
while (fd && !found)
{
if (!fd->isReference())
......@@ -67,8 +68,8 @@ void FileName::generateDiskNames()
//printf("i=%d fd->path=`%s' fd->name=`%s'\n",i,fd->path.data(),fd->name().data());
if (i==(int)fd->path.length())
{
warning("Warning: Input file %s found multiple times!\n"
" The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
//warning("Warning: Input file %s found multiple times!\n"
// " The generated documentation for this file may not be correct!\n",fd->absFilePath().data());
found=TRUE;
}
else if (fd->path[i]!=c)
......@@ -84,8 +85,11 @@ void FileName::generateDiskNames()
while (fd)
{
//printf("fd->setName(%s)\n",(fd->path.right(fd->path.length()-j-1)+name).data());
fd->setName(fd->path.right(fd->path.length()-j-1)+name);
fd->diskname=convertSlashes(fd->name());
if (!fd->isReference())
{
fd->setName(fd->path.right(fd->path.length()-j-1)+name);
fd->diskname=convertSlashes(fd->name());
}
fd=next();
}
}
......
......@@ -93,6 +93,7 @@ void GroupDef::writeDocumentation(OutputList &ol)
ol.disable(OutputGenerator::Latex);
ol.startTextLink(0,"_details");
parseText(ol,theTranslator->trMore());
ol.endTextLink();
ol.enable(OutputGenerator::Latex);
}
if (fileList->count()>0)
......
......@@ -124,11 +124,14 @@ void HtmlGenerator::writeFooter(int part,bool external)
t << "<hr><address><small>";
else
t << substitute(
substitute(
substitute(footer,"$title",lastTitle),
"$datetime",dateToString(TRUE)
substitute(
substitute(
substitute(footer,"$title",lastTitle),
"$datetime",dateToString(TRUE)
),
"$date",dateToString(FALSE)
),
"$date",dateToString(FALSE)
"$doxygenversion",versionString
);
break;
case 1:
......@@ -663,7 +666,7 @@ void HtmlGenerator::endIndexList()
void HtmlGenerator::startAlphabeticalIndexList()
{
t << "<table width=95% border=0 cellspacing=0 cellpadding=0>" << endl;
t << "<table align=center width=95% border=0 cellspacing=0 cellpadding=0>" << endl;
}
void HtmlGenerator::endAlphabeticalIndexList()
......@@ -684,9 +687,9 @@ void HtmlGenerator::writeImage(const char *name,const char *,const char *)
int i;
if ((i=baseName.findRev('/'))!=-1 || (i=baseName.findRev('\\'))!=-1)
{
baseName=baseName.right(baseName.length()-i);
baseName=baseName.right(baseName.length()-i-1);
}
t << "<img src=" << name << " alt=\"" << baseName << "\">" << endl;
t << "<img src=\"" << name << "\" alt=\"" << baseName << "\">" << endl;
}
void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const char *)
......
......@@ -358,7 +358,7 @@ void writeFileIndex(OutputList &ol)
fd->name()
);
ol.docify(" (");
if (fd->briefDescription())
if (!fd->briefDescription().isEmpty())
{
OutputList briefOutput(&ol);
parseDoc(briefOutput,0,0,
......@@ -421,24 +421,27 @@ void writeSourceIndex(OutputList &ol)
FileDef *fd=fn->first();
while (fd)
{
if (!started)
{
started=TRUE;
ol.startItemList();
}
ol.writeListItem();
QCString path;
if (Config::fullPathNameFlag)
{
path=stripFromPath(fd->getPath().copy());
}
if (!path.isEmpty()) ol.docify(path);
ol.writeObjectLink(0,fd->sourceName(),0,fd->name());
ol.writeString("\n");
if (Config::generateHtml && Config::htmlHelpFlag)
if (!fd->isReference())
{
HtmlHelp::getInstance()->addContentsItem(
fd->name(),fd->sourceName());
if (!started)
{
started=TRUE;
ol.startItemList();
}
ol.writeListItem();
QCString path;
if (Config::fullPathNameFlag)
{
path=stripFromPath(fd->getPath().copy());
}
if (!path.isEmpty()) ol.docify(path);
ol.writeObjectLink(0,fd->sourceName(),0,fd->name());
ol.writeString("\n");
if (Config::generateHtml && Config::htmlHelpFlag)
{
HtmlHelp::getInstance()->addContentsItem(
fd->name(),fd->sourceName());
}
}
fd=fn->next();
}
......@@ -497,7 +500,7 @@ void writeNamespaceIndex(OutputList &ol)
{
ol.writeStartAnnoItem("namespace",nd->getOutputFileBase(),0,nd->name());
ol.docify(" (");
if (nd->briefDescription())
if (!nd->briefDescription().isEmpty())
{
OutputList briefOutput(&ol);
parseDoc(briefOutput,nd->name(),0,
......@@ -570,7 +573,7 @@ void writeAnnotatedClassList(OutputList &ol)
}
ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->name());
ol.docify(" (");
if (cd->briefDescription())
if (!cd->briefDescription().isEmpty())
{
OutputList briefOutput(&ol);
parseDoc(briefOutput,cd->name(),0,
......
......@@ -991,8 +991,8 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,const char *sco
ol.disableAllBut(OutputGenerator::Man);
ol.writeString(" ");
ol.enableAll();
ol.endDescTableTitle();
ol.endDoxyAnchor();
ol.endDescTableTitle();
//ol.newParagraph();
ol.startDescTableData();
......
......@@ -73,7 +73,7 @@ void NamespaceDef::writeDocumentation(OutputList &ol)
if (Config::genTagFile.length()>0) tagFile << "%" << name() << ":\n";
OutputList briefOutput(&ol);
if (briefDescription())
if (!briefDescription().isEmpty())
{
parseDoc(briefOutput,name(),0,briefDescription());
ol+=briefOutput;
......
......@@ -1014,6 +1014,7 @@ char *yytext;
#include "message.h"
#include "util.h"
#include "defargs.h"
#include "debug.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
......@@ -1022,7 +1023,7 @@ char *yytext;
#define YY_NEVER_INTERACTIVE 1
#define DUMP_OUTPUT 0 // set this to one to see what the preprocessor
#define DUMP_OUTPUT 1 // set this to one to see what the preprocessor
// produces.
#define SHOW_INCLUDES 0 // set this to one to list all parsed include files
......@@ -2005,7 +2006,7 @@ YY_DECL
register char *yy_cp, *yy_bp;
register int yy_act;
#line 864 "pre.l"
#line 865 "pre.l"
......@@ -2114,17 +2115,17 @@ do_action: /* This label is used only to access EOF actions. */
{ /* beginning of action switch */
case 1:
YY_RULE_SETUP
#line 866 "pre.l"
#line 867 "pre.l"
YY_BREAK
case 2:
YY_RULE_SETUP
#line 867 "pre.l"
#line 868 "pre.l"
YY_BREAK
case 3:
YY_RULE_SETUP
#line 868 "pre.l"
#line 869 "pre.l"
YY_BREAK
/*
......@@ -2142,7 +2143,7 @@ YY_RULE_SETUP
*/
case 4:
YY_RULE_SETUP
#line 882 "pre.l"
#line 883 "pre.l"
{ BEGIN(Command); }
YY_BREAK
case 5:
......@@ -2150,7 +2151,7 @@ case 5:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 883 "pre.l"
#line 884 "pre.l"
{
outputArray(yytext,yyleng);
BEGIN(CopyLine);
......@@ -2163,7 +2164,7 @@ YY_RULE_SETUP
*/
case 6:
YY_RULE_SETUP
#line 892 "pre.l"
#line 893 "pre.l"
{
Define *def=0;
//printf("Search for define %s\n",yytext);
......@@ -2197,7 +2198,7 @@ YY_RULE_SETUP
YY_BREAK
case 7:
YY_RULE_SETUP
#line 922 "pre.l"
#line 923 "pre.l"
{
Define *def=0;
//printf("Search for define %s\n",yytext);
......@@ -2222,14 +2223,14 @@ YY_RULE_SETUP
YY_BREAK
case 8:
YY_RULE_SETUP
#line 943 "pre.l"
#line 944 "pre.l"
{
outputChar(*yytext);
}
YY_BREAK
case 9:
YY_RULE_SETUP
#line 946 "pre.l"
#line 947 "pre.l"
{
outputChar('\n');
BEGIN(Start);
......@@ -2238,7 +2239,7 @@ YY_RULE_SETUP
YY_BREAK
case 10:
YY_RULE_SETUP
#line 951 "pre.l"
#line 952 "pre.l"
{
defArgsStr+='(';
roundCount++;
......@@ -2246,7 +2247,7 @@ YY_RULE_SETUP
YY_BREAK
case 11:
YY_RULE_SETUP
#line 955 "pre.l"
#line 956 "pre.l"
{
defArgsStr+=')';
roundCount--;
......@@ -2274,7 +2275,7 @@ YY_RULE_SETUP
*/
case 12:
YY_RULE_SETUP
#line 979 "pre.l"
#line 980 "pre.l"
{
defArgsStr+=*yytext;
BEGIN(ReadString);
......@@ -2282,7 +2283,7 @@ YY_RULE_SETUP
YY_BREAK
case 13:
YY_RULE_SETUP
#line 983 "pre.l"
#line 984 "pre.l"
{
yyLineNr++;
outputChar('\n');
......@@ -2290,28 +2291,28 @@ YY_RULE_SETUP
YY_BREAK
case 14:
YY_RULE_SETUP
#line 987 "pre.l"
#line 988 "pre.l"
{
defArgsStr+="@@";
}
YY_BREAK
case 15:
YY_RULE_SETUP
#line 990 "pre.l"
#line 991 "pre.l"
{
defArgsStr+=*yytext;
}
YY_BREAK
case 16:
YY_RULE_SETUP
#line 993 "pre.l"
#line 994 "pre.l"
{
defArgsStr+=yytext;
}
YY_BREAK
case 17:
YY_RULE_SETUP
#line 996 "pre.l"
#line 997 "pre.l"
{
defArgsStr+=*yytext;
BEGIN(FindDefineArgs);
......@@ -2319,21 +2320,21 @@ YY_RULE_SETUP
YY_BREAK
case 18:
YY_RULE_SETUP
#line 1000 "pre.l"
#line 1001 "pre.l"
{
defArgsStr+=yytext;
}
YY_BREAK
case 19:
YY_RULE_SETUP
#line 1003 "pre.l"
#line 1004 "pre.l"
{
defArgsStr+=*yytext;
}
YY_BREAK
case 20:
YY_RULE_SETUP
#line 1006 "pre.l"
#line 1007 "pre.l"
{
if (Config::macroExpansionFlag)
BEGIN(IncludeID);
......@@ -2341,14 +2342,14 @@ YY_RULE_SETUP
YY_BREAK
case 21:
YY_RULE_SETUP
#line 1010 "pre.l"
#line 1011 "pre.l"
{
BEGIN(Include);
}
YY_BREAK
case 22:
YY_RULE_SETUP
#line 1013 "pre.l"
#line 1014 "pre.l"
{
//printf("!!!DefName\n");
BEGIN(DefName);
......@@ -2359,7 +2360,7 @@ case 23:
yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1017 "pre.l"
#line 1018 "pre.l"
{
incrLevel();
guardExpr.resize(0);
......@@ -2371,7 +2372,7 @@ case 24:
yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1022 "pre.l"
#line 1023 "pre.l"
{
//printf("Pre.l: ifdef\n");
incrLevel();
......@@ -2384,7 +2385,7 @@ case 25:
yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1028 "pre.l"
#line 1029 "pre.l"
{
incrLevel();
guardExpr="! ";
......@@ -2396,7 +2397,7 @@ case 26:
yy_c_buf_p = yy_cp = yy_bp + 6;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1033 "pre.l"
#line 1034 "pre.l"
{
incrLevel();
guardExpr="! ";
......@@ -2408,7 +2409,7 @@ case 27:
yy_c_buf_p = yy_cp = yy_bp + 2;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1038 "pre.l"
#line 1039 "pre.l"
{
incrLevel();
guardExpr.resize(0);
......@@ -2420,7 +2421,7 @@ case 28:
yy_c_buf_p = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1043 "pre.l"
#line 1044 "pre.l"
{
if (!otherCaseDone())
{
......@@ -2439,7 +2440,7 @@ case 29:
yy_c_buf_p = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1055 "pre.l"
#line 1056 "pre.l"
{
//printf("else levelGuard[%d]=%d\n",level-1,levelGuard[level-1]);
if (otherCaseDone())
......@@ -2456,7 +2457,7 @@ YY_RULE_SETUP
YY_BREAK
case 30:
YY_RULE_SETUP
#line 1068 "pre.l"
#line 1069 "pre.l"
{
BEGIN(UndefName);
}
......@@ -2466,7 +2467,7 @@ case 31:
yy_c_buf_p = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1071 "pre.l"
#line 1072 "pre.l"
{
if (!otherCaseDone())
{
......@@ -2480,7 +2481,7 @@ case 32:
yy_c_buf_p = yy_cp = yy_bp + 5;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1078 "pre.l"
#line 1079 "pre.l"
{
//printf("Pre.l: #endif\n");
decrLevel();
......@@ -2488,7 +2489,7 @@ YY_RULE_SETUP
YY_BREAK
case 33:
YY_RULE_SETUP
#line 1082 "pre.l"
#line 1083 "pre.l"
{
outputChar('\n');
BEGIN(Start);
......@@ -2497,24 +2498,24 @@ YY_RULE_SETUP
YY_BREAK
case 34:
YY_RULE_SETUP
#line 1087 "pre.l"
#line 1088 "pre.l"
{ // unknown directive
BEGIN(IgnoreLine);
}
YY_BREAK
case 35:
YY_RULE_SETUP
#line 1090 "pre.l"
#line 1091 "pre.l"
YY_BREAK
case 36:
YY_RULE_SETUP
#line 1091 "pre.l"
#line 1092 "pre.l"
YY_BREAK
case 37:
YY_RULE_SETUP
#line 1092 "pre.l"
#line 1093 "pre.l"
{
Define *def;
if ((def=isDefined(yytext)))
......@@ -2527,7 +2528,7 @@ YY_RULE_SETUP
YY_BREAK
case 38:
YY_RULE_SETUP
#line 1101 "pre.l"
#line 1102 "pre.l"
{
outputChar('\n');
guardExpr+=' ';
......@@ -2539,7 +2540,7 @@ case 39:
yy_c_buf_p = yy_cp = yy_bp + 7;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1106 "pre.l"
#line 1107 "pre.l"
{
BEGIN(DefinedExpr2);
}
......@@ -2549,19 +2550,19 @@ case 40:
yy_c_buf_p = yy_cp = yy_bp + 7;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1109 "pre.l"
#line 1110 "pre.l"
{
BEGIN(DefinedExpr1);
}
YY_BREAK
case 41:
YY_RULE_SETUP
#line 1112 "pre.l"
#line 1113 "pre.l"
{ guardExpr+=*yytext; }
YY_BREAK
case 42:
YY_RULE_SETUP
#line 1113 "pre.l"
#line 1114 "pre.l"
{
outputChar('\n');
yyLineNr++;
......@@ -2583,12 +2584,12 @@ YY_RULE_SETUP
YY_BREAK
case 43:
YY_RULE_SETUP
#line 1131 "pre.l"
#line 1132 "pre.l"
{ yyLineNr++; outputChar('\n'); }
YY_BREAK
case 44:
YY_RULE_SETUP
#line 1132 "pre.l"
#line 1133 "pre.l"
{
if (isDefined(yytext))
guardExpr+=" 1L ";
......@@ -2600,7 +2601,7 @@ YY_RULE_SETUP
YY_BREAK
case 45:
YY_RULE_SETUP
#line 1140 "pre.l"
#line 1141 "pre.l"
{
if (isDefined(yytext))
guardExpr+=" 1L ";
......@@ -2611,7 +2612,7 @@ YY_RULE_SETUP
YY_BREAK
case 46:
YY_RULE_SETUP
#line 1147 "pre.l"
#line 1148 "pre.l"
{ // should not happen, handle anyway
ifcount=0;
BEGIN(SkipCPPBlock);
......@@ -2619,19 +2620,19 @@ YY_RULE_SETUP
YY_BREAK
case 47:
YY_RULE_SETUP
#line 1151 "pre.l"
#line 1152 "pre.l"
{
BEGIN(Guard);
}
YY_BREAK
case 48:
YY_RULE_SETUP
#line 1154 "pre.l"
#line 1155 "pre.l"
YY_BREAK
case 49:
YY_RULE_SETUP
#line 1155 "pre.l"
#line 1156 "pre.l"
{ BEGIN(SkipCommand); }
YY_BREAK
case 50:
......@@ -2639,12 +2640,12 @@ case 50:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1156 "pre.l"
#line 1157 "pre.l"
{ BEGIN(SkipLine); }
YY_BREAK
case 51:
YY_RULE_SETUP
#line 1157 "pre.l"
#line 1158 "pre.l"
YY_BREAK
case 52:
......@@ -2652,7 +2653,7 @@ case 52:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1158 "pre.l"
#line 1159 "pre.l"
{
incrLevel();
ifcount++;
......@@ -2661,7 +2662,7 @@ YY_RULE_SETUP
YY_BREAK
case 53:
YY_RULE_SETUP
#line 1163 "pre.l"
#line 1164 "pre.l"
{
//printf("Else! ifcount=%d otherCaseDone=%d\n",ifcount,otherCaseDone());
if (ifcount==0 && !otherCaseDone())
......@@ -2677,7 +2678,7 @@ case 54:
yy_c_buf_p = yy_cp = yy_bp + 4;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1172 "pre.l"
#line 1173 "pre.l"
{
if (ifcount==0)
{
......@@ -2696,7 +2697,7 @@ YY_RULE_SETUP
YY_BREAK
case 55:
YY_RULE_SETUP
#line 1187 "pre.l"
#line 1188 "pre.l"
{
decrLevel();
if (--ifcount<0)
......@@ -2708,7 +2709,7 @@ YY_RULE_SETUP
YY_BREAK
case 56:
YY_RULE_SETUP
#line 1195 "pre.l"
#line 1196 "pre.l"
{
outputChar('\n');
yyLineNr++;
......@@ -2717,29 +2718,29 @@ YY_RULE_SETUP
YY_BREAK
case 57:
YY_RULE_SETUP
#line 1200 "pre.l"
#line 1201 "pre.l"
{ // unknown directive
BEGIN(SkipLine);
}
YY_BREAK
case 58:
YY_RULE_SETUP
#line 1203 "pre.l"
#line 1204 "pre.l"
YY_BREAK
case 59:
YY_RULE_SETUP
#line 1204 "pre.l"
#line 1205 "pre.l"
YY_BREAK
case 60:
YY_RULE_SETUP
#line 1205 "pre.l"
#line 1206 "pre.l"
YY_BREAK
case 61:
YY_RULE_SETUP
#line 1206 "pre.l"
#line 1207 "pre.l"
{
lastCPPContext=YY_START;
BEGIN(RemoveCPPComment);
......@@ -2747,7 +2748,7 @@ YY_RULE_SETUP
YY_BREAK
case 62:
YY_RULE_SETUP
#line 1210 "pre.l"
#line 1211 "pre.l"
{
lastCContext=YY_START;
BEGIN(RemoveCComment);
......@@ -2755,7 +2756,7 @@ YY_RULE_SETUP
YY_BREAK
case 63:
YY_RULE_SETUP
#line 1214 "pre.l"
#line 1215 "pre.l"
{
outputChar('\n');
yyLineNr++;
......@@ -2767,7 +2768,7 @@ case 64:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1219 "pre.l"
#line 1220 "pre.l"
{
roundCount=0;
defArgsStr=yytext;
......@@ -2777,7 +2778,7 @@ YY_RULE_SETUP
YY_BREAK
case 65:
YY_RULE_SETUP
#line 1225 "pre.l"
#line 1226 "pre.l"
{
readIncludeFile(expandMacro(yytext));
BEGIN(Start);
......@@ -2785,7 +2786,7 @@ YY_RULE_SETUP
YY_BREAK
case 66:
YY_RULE_SETUP
#line 1229 "pre.l"
#line 1230 "pre.l"
{
QCString incName=yytext;
//int l=incName.length();
......@@ -2806,7 +2807,7 @@ case 67:
yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
#line 1243 "pre.l"
#line 1244 "pre.l"
{
//printf("Define() `%s'\n",yytext);
argDict = new QDict<int>(31);
......@@ -2821,7 +2822,7 @@ YY_RULE_SETUP
YY_BREAK
case 68:
YY_RULE_SETUP
#line 1254 "pre.l"
#line 1255 "pre.l"
{
//printf("Define `%s'\n",yytext);
argDict = 0;
......@@ -2838,7 +2839,7 @@ YY_RULE_SETUP
YY_BREAK
case 69:
YY_RULE_SETUP
#line 1267 "pre.l"
#line 1268 "pre.l"
{
argDict = 0;
defArgs = -1;
......@@ -2889,17 +2890,17 @@ YY_RULE_SETUP
YY_BREAK
case 70:
YY_RULE_SETUP
#line 1314 "pre.l"
#line 1315 "pre.l"
{ defArgsStr+=yytext; }
YY_BREAK
case 71:
YY_RULE_SETUP
#line 1315 "pre.l"
#line 1316 "pre.l"
{ defArgsStr+=yytext; }
YY_BREAK
case 72:
YY_RULE_SETUP
#line 1316 "pre.l"
#line 1317 "pre.l"
{
defArgsStr+=yytext;
QCString tmp=(QCString)"#define "+defName+defArgsStr;
......@@ -2910,7 +2911,7 @@ YY_RULE_SETUP
YY_BREAK
case 73:
YY_RULE_SETUP
#line 1323 "pre.l"
#line 1324 "pre.l"
{
//printf("Define addArg(%s)\n",yytext);
QCString argName=yytext;
......@@ -2924,7 +2925,7 @@ YY_RULE_SETUP
YY_BREAK
case 74:
YY_RULE_SETUP
#line 1333 "pre.l"
#line 1334 "pre.l"
{
outputChar('/');outputChar('*');
defText+=' ';
......@@ -2934,7 +2935,7 @@ YY_RULE_SETUP
YY_BREAK
case 75:
YY_RULE_SETUP
#line 1339 "pre.l"
#line 1340 "pre.l"
{
outputChar('/');outputChar('/');
lastCPPContext=YY_START;
......@@ -2943,7 +2944,7 @@ YY_RULE_SETUP
YY_BREAK
case 76:
YY_RULE_SETUP
#line 1344 "pre.l"
#line 1345 "pre.l"
{
outputChar('*');outputChar('/');
BEGIN(lastCContext);
......@@ -2951,28 +2952,28 @@ YY_RULE_SETUP
YY_BREAK
case 77:
YY_RULE_SETUP
#line 1348 "pre.l"
#line 1349 "pre.l"
{
outputChar('/');outputChar('/');
}
YY_BREAK
case 78:
YY_RULE_SETUP
#line 1351 "pre.l"
#line 1352 "pre.l"
{
outputChar('/');outputChar('*');
}
YY_BREAK
case 79:
YY_RULE_SETUP
#line 1354 "pre.l"
#line 1355 "pre.l"
{
outputArray(yytext,yyleng);
}
YY_BREAK
case 80:
YY_RULE_SETUP
#line 1357 "pre.l"
#line 1358 "pre.l"
{
yyLineNr++;
outputChar('\n');
......@@ -2980,44 +2981,44 @@ YY_RULE_SETUP
YY_BREAK
case 81:
YY_RULE_SETUP
#line 1361 "pre.l"
#line 1362 "pre.l"
{
outputChar(*yytext);
}
YY_BREAK
case 82:
YY_RULE_SETUP
#line 1364 "pre.l"
#line 1365 "pre.l"
{ BEGIN(lastCContext); }
YY_BREAK
case 83:
YY_RULE_SETUP
#line 1365 "pre.l"
#line 1366 "pre.l"
YY_BREAK
case 84:
YY_RULE_SETUP
#line 1366 "pre.l"
#line 1367 "pre.l"
YY_BREAK
case 85:
YY_RULE_SETUP
#line 1367 "pre.l"
#line 1368 "pre.l"
YY_BREAK
case 86:
YY_RULE_SETUP
#line 1368 "pre.l"
#line 1369 "pre.l"
{ yyLineNr++; outputChar('\n'); }
YY_BREAK
case 87:
YY_RULE_SETUP
#line 1369 "pre.l"
#line 1370 "pre.l"
YY_BREAK
case 88:
YY_RULE_SETUP
#line 1370 "pre.l"
#line 1371 "pre.l"
{
unput(*yytext);
BEGIN(lastCPPContext);
......@@ -3025,62 +3026,62 @@ YY_RULE_SETUP
YY_BREAK
case 89:
YY_RULE_SETUP
#line 1374 "pre.l"
#line 1375 "pre.l"
{
outputChar('/');outputChar('*');
}
YY_BREAK
case 90:
YY_RULE_SETUP
#line 1377 "pre.l"
#line 1378 "pre.l"
{
outputChar('/');outputChar('/');
}
YY_BREAK
case 91:
YY_RULE_SETUP
#line 1380 "pre.l"
#line 1381 "pre.l"
{
outputArray(yytext,yyleng);
}
YY_BREAK
case 92:
YY_RULE_SETUP
#line 1383 "pre.l"
#line 1384 "pre.l"
{
outputChar(*yytext);
}
YY_BREAK
case 93:
YY_RULE_SETUP
#line 1386 "pre.l"
#line 1387 "pre.l"
YY_BREAK
case 94:
YY_RULE_SETUP
#line 1387 "pre.l"
#line 1388 "pre.l"
YY_BREAK
case 95:
YY_RULE_SETUP
#line 1388 "pre.l"
#line 1389 "pre.l"
YY_BREAK
case 96:
YY_RULE_SETUP
#line 1389 "pre.l"
#line 1390 "pre.l"
YY_BREAK
case 97:
YY_RULE_SETUP
#line 1390 "pre.l"
#line 1391 "pre.l"
{
quoteArg=TRUE;
}
YY_BREAK
case 98:
YY_RULE_SETUP
#line 1393 "pre.l"
#line 1394 "pre.l"
{
if (quoteArg)
{
......@@ -3116,7 +3117,7 @@ YY_RULE_SETUP
YY_BREAK
case 99:
YY_RULE_SETUP
#line 1425 "pre.l"
#line 1426 "pre.l"
{
outputChar('\n');
defText += ' '; yyLineNr++;
......@@ -3124,7 +3125,7 @@ YY_RULE_SETUP
YY_BREAK
case 100:
YY_RULE_SETUP
#line 1429 "pre.l"
#line 1430 "pre.l"
{
outputChar('\n');
Define *def=0;
......@@ -3162,46 +3163,46 @@ YY_RULE_SETUP
YY_BREAK
case 101:
YY_RULE_SETUP
#line 1463 "pre.l"
#line 1464 "pre.l"
{ defText += ' '; }
YY_BREAK
case 102:
YY_RULE_SETUP
#line 1464 "pre.l"
#line 1465 "pre.l"
{ defText += "##"; }
YY_BREAK
case 103:
YY_RULE_SETUP
#line 1465 "pre.l"
#line 1466 "pre.l"
{ defText += "@@"; }
YY_BREAK
case 104:
YY_RULE_SETUP
#line 1466 "pre.l"
#line 1467 "pre.l"
{ defText += *yytext;
BEGIN(SkipDoubleQuote);
}
YY_BREAK
case 105:
YY_RULE_SETUP
#line 1469 "pre.l"
#line 1470 "pre.l"
{ defText += *yytext;
BEGIN(SkipSingleQuote);
}
YY_BREAK
case 106:
YY_RULE_SETUP
#line 1472 "pre.l"
#line 1473 "pre.l"
{ defText += yytext; }
YY_BREAK
case 107:
YY_RULE_SETUP
#line 1473 "pre.l"
#line 1474 "pre.l"
{ defText += yytext; }
YY_BREAK
case 108:
YY_RULE_SETUP
#line 1474 "pre.l"
#line 1475 "pre.l"
{
defText += *yytext;
BEGIN(DefineText);
......@@ -3209,14 +3210,14 @@ YY_RULE_SETUP
YY_BREAK
case 109:
YY_RULE_SETUP
#line 1478 "pre.l"
#line 1479 "pre.l"
{
defText += yytext;
}
YY_BREAK
case 110:
YY_RULE_SETUP
#line 1481 "pre.l"
#line 1482 "pre.l"
{
defText += *yytext;
BEGIN(DefineText);
......@@ -3224,17 +3225,17 @@ YY_RULE_SETUP
YY_BREAK
case 111:
YY_RULE_SETUP
#line 1485 "pre.l"
#line 1486 "pre.l"
{ defText += *yytext; }
YY_BREAK
case 112:
YY_RULE_SETUP
#line 1486 "pre.l"
#line 1487 "pre.l"
{ defText += *yytext; }
YY_BREAK
case 113:
YY_RULE_SETUP
#line 1487 "pre.l"
#line 1488 "pre.l"
{ defText += *yytext; }
YY_BREAK
case YY_STATE_EOF(INITIAL):
......@@ -3264,7 +3265,7 @@ case YY_STATE_EOF(UndefName):
case YY_STATE_EOF(IgnoreLine):
case YY_STATE_EOF(FindDefineArgs):
case YY_STATE_EOF(ReadString):
#line 1488 "pre.l"
#line 1489 "pre.l"
{
//printf("End of include file\n");
//printf("Include stack depth=%d\n",includeStack.count());
......@@ -3293,7 +3294,7 @@ case YY_STATE_EOF(ReadString):
YY_BREAK
case 114:
YY_RULE_SETUP
#line 1513 "pre.l"
#line 1514 "pre.l"
{
outputChar('/');outputChar('*');
lastCContext=YY_START;
......@@ -3302,7 +3303,7 @@ YY_RULE_SETUP
YY_BREAK
case 115:
YY_RULE_SETUP
#line 1518 "pre.l"
#line 1519 "pre.l"
{
outputChar('/');outputChar('/');
lastCPPContext=YY_START;
......@@ -3311,7 +3312,7 @@ YY_RULE_SETUP
YY_BREAK
case 116:
YY_RULE_SETUP
#line 1523 "pre.l"
#line 1524 "pre.l"
{
outputChar('\n');
yyLineNr++;
......@@ -3319,14 +3320,14 @@ YY_RULE_SETUP
YY_BREAK
case 117:
YY_RULE_SETUP
#line 1527 "pre.l"
#line 1528 "pre.l"
{
outputChar(*yytext);
}
YY_BREAK
case 118:
YY_RULE_SETUP
#line 1531 "pre.l"
#line 1532 "pre.l"
ECHO;
YY_BREAK
......@@ -4208,7 +4209,7 @@ int main()
return 0;
}
#endif
#line 1531 "pre.l"
#line 1532 "pre.l"
/*@ ----------------------------------------------------------------------------
......@@ -4308,9 +4309,9 @@ void cleanupPreprocessor()
void preprocessFile(const char *fileName,BufStr &output)
{
#if DUMP_OUTPUT
//#if DUMP_OUTPUT
uint orgOffset=output.curPos();
#endif
//#endif
outputBuf=&output;
includeStack.setAutoDelete(TRUE);
......@@ -4446,20 +4447,23 @@ void preprocessFile(const char *fileName,BufStr &output)
else
pclose(preYYin);
#if DUMP_OUTPUT
char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos();
printf("Resulting size: %d bytes\n",newPos-orgPos);
int line=1;
printf("---------\n00001 ");
while (orgPos<newPos)
//#if DUMP_OUTPUT
if (Debug::isFlagSet(Debug::Preprocessor))
{
putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line);
orgPos++;
char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos();
printf("Preprocessor output (size: %d bytes):\n",newPos-orgPos);
int line=1;
printf("---------\n00001 ");
while (orgPos<newPos)
{
putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line);
orgPos++;
}
printf("\n---------\n");
}
printf("\n---------\n");
#endif
//#endif
}
extern "C" { // some bogus code to keep the compiler happy
......
......@@ -40,6 +40,7 @@
#include "message.h"
#include "util.h"
#include "defargs.h"
#include "debug.h"
#if defined(_MSC_VER) || defined(__BORLANDC__)
#define popen _popen
......@@ -48,7 +49,7 @@
#define YY_NEVER_INTERACTIVE 1
#define DUMP_OUTPUT 0 // set this to one to see what the preprocessor
#define DUMP_OUTPUT 1 // set this to one to see what the preprocessor
// produces.
#define SHOW_INCLUDES 0 // set this to one to list all parsed include files
......@@ -1627,9 +1628,9 @@ void cleanupPreprocessor()
void preprocessFile(const char *fileName,BufStr &output)
{
#if DUMP_OUTPUT
//#if DUMP_OUTPUT
uint orgOffset=output.curPos();
#endif
//#endif
outputBuf=&output;
includeStack.setAutoDelete(TRUE);
......@@ -1765,20 +1766,23 @@ void preprocessFile(const char *fileName,BufStr &output)
else
pclose(preYYin);
#if DUMP_OUTPUT
char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos();
printf("Resulting size: %d bytes\n",newPos-orgPos);
int line=1;
printf("---------\n00001 ");
while (orgPos<newPos)
//#if DUMP_OUTPUT
if (Debug::isFlagSet(Debug::Preprocessor))
{
putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line);
orgPos++;
char *orgPos=output.data()+orgOffset;
char *newPos=output.data()+output.curPos();
printf("Preprocessor output (size: %d bytes):\n",newPos-orgPos);
int line=1;
printf("---------\n00001 ");
while (orgPos<newPos)
{
putchar(*orgPos);
if (*orgPos=='\n') printf("%05d ",++line);
orgPos++;
}
printf("\n---------\n");
}
printf("\n---------\n");
#endif
//#endif
}
extern "C" { // some bogus code to keep the compiler happy
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -127,7 +127,6 @@ static bool inBugBlock;
static bool inWarningBlock;
static bool inParBlock;
static bool firstSeeArg;
static bool javaDocSee;
static char afterDocTerminator;
static int tmpDocType;
static QCString sectionLabel;
......@@ -200,7 +199,6 @@ static void initParser()
inWarningBlock = FALSE;
inParBlock = FALSE;
firstSeeArg = FALSE;
javaDocSee = FALSE;
}
//-----------------------------------------------------------------------------
......@@ -707,8 +705,12 @@ static QCString findAndCopyImage(const char *fileName,ImageTypes type)
}
else
{
warn("Warning: image file %s is not found. ",fileName);
warn("Check your IMAGE_PATH\n");
result=fileName;
if (result.left(5)!="http:")
{
warn("Warning: image file %s is not found in IMAGE_PATH: "
"assuming external image. ",fileName);
}
}
return result;
}
......@@ -1243,7 +1245,6 @@ VAR [vV][aA][rR]
if (inBlock()) endBlock();
inSeeBlock=TRUE;
//firstSeeArg=TRUE;
//javaDocSee=!strcmp(yytext,"@see");
outDoc->startDescList();
//outDoc->writeBoldString("See also: ");
outDoc->startBold();
......@@ -1439,8 +1440,8 @@ VAR [vV][aA][rR]
<DocImage>[lL][aA][tT][eE][xX] {
BEGIN(DocLatexImageName);
}
<DocHtmlImageName>{FILE} {
curImageName = findAndCopyImage(yytext,IT_Html);
<DocHtmlImageName>{FILE}|{URLMASK} {
curImageName = findAndCopyImage(stripQuotes(yytext),IT_Html);
if (!curImageName.isEmpty())
{
storeOutputListState();
......@@ -1451,7 +1452,7 @@ VAR [vV][aA][rR]
BEGIN(DocScan);
}
<DocLatexImageName>{FILE} {
curImageName = findAndCopyImage(yytext,IT_Latex);
curImageName = findAndCopyImage(stripQuotes(yytext),IT_Latex);
if (curImageName.isEmpty())
BEGIN(DocScan);
else
......
......@@ -1939,7 +1939,11 @@ void parseTagFile(const char *fileName)
{
FILE *f=fopen(fileName,"r");
QFileInfo fi(fileName);
if (!f || !fi.exists());
if (!f || !fi.exists())
{
if (f) fclose(f);
return;
}
tagName = fi.fileName();
tagYYin = f;
......
......@@ -260,7 +260,11 @@ void parseTagFile(const char *fileName)
{
FILE *f=fopen(fileName,"r");
QFileInfo fi(fileName);
if (!f || !fi.exists());
if (!f || !fi.exists())
{
if (f) fclose(f);
return;
}
tagName = fi.fileName();
tagYYin = f;
......
......@@ -259,7 +259,7 @@ class TranslatorDutch : public Translator
// new since 0.49-990425
//////////////////////////////////////////////////////////////////////////
virtual QCString trCompoundReference(const char *clName,
QCString trCompoundReference(const char *clName,
ClassDef::CompoundType compType)
// used as the title of the HTML page of a class/struct/union
{
......@@ -274,14 +274,14 @@ class TranslatorDutch : public Translator
result+=" Referentie";
return result;
}
virtual QCString trFileReference(const char *fileName)
QCString trFileReference(const char *fileName)
// used as the title of the HTML page of a file
{
QCString result=fileName;
result+=" File Referentie";
return result;
}
virtual QCString trNamespaceReference(const char *namespaceName)
QCString trNamespaceReference(const char *namespaceName)
// used as the title of the HTML page of a namespace
{
QCString result=namespaceName;
......@@ -290,29 +290,29 @@ class TranslatorDutch : public Translator
}
// these are for the member sections of a class, struct or union
virtual QCString trPublicMembers()
QCString trPublicMembers()
{ return "Public Members"; }
virtual QCString trPublicSlots()
QCString trPublicSlots()
{ return "Public Slots"; }
virtual QCString trSignals()
QCString trSignals()
{ return "Signals"; }
virtual QCString trStaticPublicMembers()
QCString trStaticPublicMembers()
{ return "Static Public Members"; }
virtual QCString trProtectedMembers()
QCString trProtectedMembers()
{ return "Protected Members"; }
virtual QCString trProtectedSlots()
QCString trProtectedSlots()
{ return "Protected Slots"; }
virtual QCString trStaticProtectedMembers()
QCString trStaticProtectedMembers()
{ return "Static Protected Members"; }
virtual QCString trPrivateMembers()
QCString trPrivateMembers()
{ return "Private Members"; }
virtual QCString trPrivateSlots()
QCString trPrivateSlots()
{ return "Private Slots"; }
virtual QCString trStaticPrivateMembers()
QCString trStaticPrivateMembers()
{ return "Static Private Members"; }
// end of member sections
virtual QCString trWriteList(int numEntries)
QCString trWriteList(int numEntries)
{
// this function is used to produce a comma-separated list of items.
// use generateMarker(i) to indicate where item i should be put.
......@@ -336,35 +336,35 @@ class TranslatorDutch : public Translator
return result;
}
virtual QCString trInheritsList(int numEntries)
QCString trInheritsList(int numEntries)
// used in class documentation to produce a list of base classes,
// if class diagrams are disabled.
{
return "Erft over van "+trWriteList(numEntries)+".";
}
virtual QCString trInheritedByList(int numEntries)
QCString trInheritedByList(int numEntries)
// used in class documentation to produce a list of super classes,
// if class diagrams are disabled.
{
return "Wordt overge&euml;rfd door "+trWriteList(numEntries)+".";
}
virtual QCString trReimplementedFromList(int numEntries)
QCString trReimplementedFromList(int numEntries)
// used in member documentation blocks to produce a list of
// members that are hidden by this one.
{
return "Nieuwe implementatie van "+trWriteList(numEntries)+".";
}
virtual QCString trReimplementedInList(int numEntries)
QCString trReimplementedInList(int numEntries)
{
// used in member documentation blocks to produce a list of
// all member that overwrite the implementation of this member.
return "Opnieuw ge&iuml;mplementeerd in "+trWriteList(numEntries)+".";
}
virtual QCString trNamespaceMembers()
QCString trNamespaceMembers()
// This is put above each page as a link to all members of namespaces.
{ return "Namespace Members"; }
virtual QCString trNamespaceMemberDescription(bool extractAll)
QCString trNamespaceMemberDescription(bool extractAll)
// This is an introduction to the page with all namespace members
{
QCString result="Hier is een lijst van alle ";
......@@ -376,11 +376,11 @@ class TranslatorDutch : public Translator
result+="de namespaces waartoe ze behoren:";
return result;
}
virtual QCString trNamespaceIndex()
QCString trNamespaceIndex()
// This is used in LaTeX as the title of the chapter with the
// index of all namespaces.
{ return "Namespace Index"; }
virtual QCString trNamespaceDocumentation()
QCString trNamespaceDocumentation()
// This is used in LaTeX as the title of the chapter containing
// the documentation of all namespaces.
{ return "Namespace Documentatie"; }
......@@ -392,7 +392,7 @@ class TranslatorDutch : public Translator
/*! This is put at the bottom of a class documentation page and is
* followed by a list of files that were used to generate the page.
*/
virtual QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
QCString trGeneratedFromFiles(ClassDef::CompoundType compType,
bool single)
{ // here s is one of " Class", " Struct" or " Union"
// single is true implies a single file
......@@ -412,7 +412,7 @@ class TranslatorDutch : public Translator
/*! This is in the (quick) index as a link to the alphabetical compound
* list.
*/
virtual QCString trAlphabeticalList()
QCString trAlphabeticalList()
{ return "Alphabetical List"; }
//////////////////////////////////////////////////////////////////////////
......@@ -420,19 +420,36 @@ class TranslatorDutch : public Translator
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
QCString trReturnValues()
{ return "Retour waarden"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
QCString trMainPage()
{ return "Hoofd Pagina"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
QCString trPageAbbreviation()
{ return "p."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991106
//////////////////////////////////////////////////////////////////////////
QCString trSources()
{
return "Sources";
}
QCString trDefinedAtLineInSourceFile()
{
return "De definitie bevindt zich op regel @0 in de file @1.";
}
QCString trDefinedInSourceFile()
{
return "De definitie bevindt zich in de file @0.";
}
};
#endif
......@@ -53,7 +53,7 @@ Problem!
===================================================================================
1999/09/01
* Det verkar som om "namnrymd" r en hyggligt vedertagen svensk versttning
av "namnepace", s jag kr med det frn och med nu.
av "namespace", s jag kr med det frn och med nu.
* "interface" heter numera "grnssnitt"
*/
......@@ -538,6 +538,41 @@ class TranslatorSwedish : public Translator
{
return "Alfabetisk lista";
}
//////////////////////////////////////////////////////////////////////////
// new since 0.49-990901
//////////////////////////////////////////////////////////////////////////
/*! This is used as the heading text for the retval command. */
virtual QCString trReturnValues()
{ return "Returvrden"; }
/*! This is in the (quick) index as a link to the main page (index.html)
*/
virtual QCString trMainPage()
{ return "Huvudsida"; }
/*! This is used in references to page that are put in the LaTeX
* documentation. It should be an abbreviation of the word page.
*/
virtual QCString trPageAbbreviation()
{ return "s."; }
//////////////////////////////////////////////////////////////////////////
// new since 0.49-991003
//////////////////////////////////////////////////////////////////////////
virtual QCString trSources()
{
return "Kllor";
}
virtual QCString trDefinedAtLineInSourceFile()
{
return "Definition p rad @0 i filen @1.";
}
virtual QCString trDefinedInSourceFile()
{
return "Definition i filen @0.";
}
};
#endif
......@@ -320,8 +320,8 @@ void writeExample(OutputList &ol,ExampleList *el)
QCString exampleLine=theTranslator->trWriteList(el->count());
bool latexEnabled = ol.isEnabled(OutputGenerator::Latex);
bool manEnabled = ol.isEnabled(OutputGenerator::Html);
bool htmlEnabled = ol.isEnabled(OutputGenerator::Man);
bool manEnabled = ol.isEnabled(OutputGenerator::Man);
bool htmlEnabled = ol.isEnabled(OutputGenerator::Html);
QRegExp marker("@[0-9]+");
int index=0,newIndex,matchLen;
// now replace all markers in inheritLine with links to the classes
......@@ -624,21 +624,25 @@ QCString fileToString(const char *name)
QFileInfo fi(name);
if (!fi.exists() || !fi.isFile())
{
err("Error: file `%s' not found\n",name);
exit(1);
warn("Error: file `%s' not found\n",name);
return "";
}
f.setName(name);
fileOpened=f.open(IO_ReadOnly);
}
if (!fileOpened)
{
err("Error: cannot open file `%s' for reading\n",name);
exit(1);
warn("Error: cannot open file `%s' for reading\n",name);
return "";
}
int fsize=f.size();
QCString contents(fsize+1);
QCString contents(fsize+2);
f.readBlock(contents.data(),fsize);
contents[fsize]='\0';
if (fsize==0 || contents[fsize-1]=='\n')
contents[fsize]='\0';
else
contents[fsize]='\n';
contents[fsize+1]='\0';
f.close();
return contents;
}
......
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