Commit 62039dd4 authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.3.7-20040526

parent 820c9009
DOXYGEN Version 1.3.7-20040517
DOXYGEN Version 1.3.7-20040526
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (17 May 2004)
Dimitri van Heesch (26 May 2004)
DOXYGEN Version 1.3.7_20040517
DOXYGEN Version 1.3.7_20040526
Please read INSTALL for compilation instructions.
......@@ -17,4 +17,4 @@ to subscribe to the lists or to visit the archives.
Enjoy,
Dimitri van Heesch (dimitri@stack.nl) (17 May 2004)
Dimitri van Heesch (dimitri@stack.nl) (26 May 2004)
1.3.7-20040517
1.3.7-20040526
......@@ -48,6 +48,7 @@ documentation:
\refitem cmdbug \\bug
\refitem cmdc \\c
\refitem cmdcallgraph \\callgraph
\refitem cmdcategory \\category
\refitem cmdclass \\class
\refitem cmdcode \\code
\refitem cmdcopydoc \\copydoc
......@@ -111,6 +112,7 @@ documentation:
\refitem cmdpost \\post
\refitem cmdpre \\pre
\refitem cmdproperty \\property
\refitem cmdprotocol \\protocol
\refitem cmdref \\ref
\refitem cmdrelates \\relates
\refitem cmdrelatesalso \\relatesalso
......@@ -203,6 +205,16 @@ doxygen. Unrecognized commands are treated as normal text.
\note The completeness (and correctness) of the call graph depends on the
doxygen code parser which is not perfect.
<hr>
\section cmdcategory \category <name> [<header-file>] [<header-name>]
\addindex \\category
For Objective-C only: Indicates that a comment block contains documentation
for a class category with name \<name\>. The arguments are
equal to the \\class command.
\sa section \ref cmdclass "\\class".
\section cmdclass \class <name> [<header-file>] [<header-name>]
\addindex \\class
......@@ -385,7 +397,7 @@ doxygen. Unrecognized commands are treated as normal text.
\ref cmdaddtogroup "\\addtogroup" and \ref cmdweakgroup "\\weakgroup"
<hr>
\section cmdinterface \interface
\section cmdinterface \interface <name> [<header-file>] [<header-name>]
\addindex \\interface
Indicates that a comment block contains documentation for an
......@@ -552,6 +564,16 @@ See section \ref memgroup for an example.
\sa section \ref cmdfn "\\fn" and \ref cmdvar "\\var".
<hr>
\section cmdprotocol \protocol <name> [<header-file>] [<header-name>]
\addindex \\protocol
Indicates that a comment block contains documentation for a
protocol in Objective-C with name \<name\>. The arguments are equal
to the \\class command.
\sa section \ref cmdclass "\\class".
<hr>
\section cmdrelates \relates <name>
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.7_20040517
Version: 1.3.7_20040526
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -711,7 +711,6 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
bool typeOnly=FALSE)
{
int i=0;
//fprintf(stderr,"generateClassOrGlobalLink(clName=%s)\n",clName);
if (*clName=='~') // correct for matching negated values i.s.o. destructors.
{
g_code->codify("~");
......@@ -726,14 +725,21 @@ static void generateClassOrGlobalLink(BaseCodeDocInterface &ol,char *clName,
ClassDef *cd=0;
MemberDef *md=0;
//printf("generateClassOrGlobalLink(className=%s)\n",className.data());
if (!g_theVarContext.findVariable(className)) // not a local variable
{
Definition *d = g_currentDefinition;
//printf("d=%p g_sourceFileDef=%p\n",d,g_currentDefinition);
cd = getResolvedClass(d,g_sourceFileDef,className,&md);
if (cd==0 && md==0 && (i=className.find('<'))!=-1)
{
cd=getResolvedClass(d,g_sourceFileDef,className.left(i),&md);
}
//printf("is not found as a variable %s\n",cd?cd->name().data():"<null>");
}
else
{
//printf("is a local variable!\n");
}
if (cd && cd->isLinkable()) // is it a linkable class
{
......@@ -1212,7 +1218,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
}
else
{
printf("Invalid name: id=%d\n",refId);
//printf("Invalid name: id=%d\n",refId);
}
}
else if (nc=='o') // reference to potential object name
......@@ -1321,7 +1327,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
}
else
{
printf("Invalid object: id=%d\n",refId);
//printf("Invalid object: id=%d\n",refId);
}
}
else if (nc=='c') // reference to nested call
......@@ -1364,7 +1370,7 @@ static void writeObjCMethodCall(ObjCCallCtx *ctx)
}
else
{
printf("Invalid context: id=%d\n",refId);
//printf("Invalid context: id=%d\n",refId);
}
}
else // illegal marker
......@@ -1981,7 +1987,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^' \\\n]{1,4}"'"))
<Body>{SCOPETNAME}/{B}*"(" { // a() or c::a() or t<A,B>::a()
addType();
generateFunctionLink(*g_code,yytext);
g_theVarContext.addVariable(g_type,yytext);
//g_theVarContext.addVariable(g_type,yytext);
g_bracketCount=0;
g_args.resize(0);
g_name+=yytext;
......
......@@ -151,7 +151,8 @@ static void writeVectorBox(QTextStream &t,DiagramItem *di,
if (di->virtualness()==Virtual) t << "solid\n";
}
static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
static void writeMapArea(QTextStream &t,ClassDef *cd,QCString relPath,
int x,int y,int w,int h)
{
if (cd->isLinkable())
{
......@@ -169,6 +170,10 @@ static void writeMapArea(QTextStream &t,ClassDef *cd,int x,int y,int w,int h)
{
if ((dest=Doxygen::tagDestinationDict[ref])) t << *dest << "/";
}
else
{
t << relPath;
}
t << cd->getOutputFileBase() << Doxygen::htmlFileExtension << "\" ";
t << "alt=\"" << cd->displayName();
t << "\" shape=\"rect\" coords=\"" << x << "," << y << ",";
......@@ -479,6 +484,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
bool doBase,bool bitmap,
uint baseRows,uint superRows,
uint cellWidth,uint cellHeight,
QCString relPath,
bool generateMap)
{
DiagramRow *dr=first();
......@@ -548,7 +554,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,
hasDocs,di->getChildren()->count()>0);
if (!firstRow && generateMap)
writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight);
writeMapArea(t,di->getClassDef(),relPath,x,y,cellWidth,cellHeight);
}
else
{
......@@ -581,7 +587,7 @@ void TreeDiagram::drawBoxes(QTextStream &t,Image *image,
bool hasDocs=di->getClassDef()->isLinkable();
writeBitmapBox(di,image,x,y,cellWidth,cellHeight,firstRow,hasDocs);
if (!firstRow && generateMap)
writeMapArea(t,di->getClassDef(),x,y,cellWidth,cellHeight);
writeMapArea(t,di->getClassDef(),relPath,x,y,cellWidth,cellHeight);
}
else
{
......@@ -1252,7 +1258,8 @@ void ClassDiagram::writeFigure(QTextStream &output,const char *path,
void ClassDiagram::writeImage(QTextStream &t,const char *path,
const char *fileName, bool generateMap)
const char *relPath,const char *fileName,
bool generateMap)
{
uint baseRows=base->computeRows();
uint superRows=super->computeRows();
......@@ -1272,8 +1279,8 @@ void ClassDiagram::writeImage(QTextStream &t,const char *path,
Image image(imageWidth,imageHeight);
base->drawBoxes(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight,generateMap);
super->drawBoxes(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight,generateMap);
base->drawBoxes(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight,relPath,generateMap);
super->drawBoxes(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight,relPath,generateMap);
base->drawConnectors(t,&image,TRUE,TRUE,baseRows,superRows,cellWidth,cellHeight);
super->drawConnectors(t,&image,FALSE,TRUE,baseRows,superRows,cellWidth,cellHeight);
......
......@@ -105,6 +105,7 @@ class TreeDiagram : public QList<DiagramRow>
bool doBase,bool bitmap,
uint baseRows,uint superRows,
uint cellWidth,uint cellHeight,
QCString relPath="",
bool generateMap=TRUE);
void drawConnectors(QTextStream &t,Image *image,
bool doBase,bool bitmap,
......@@ -123,7 +124,7 @@ class ClassDiagram
~ClassDiagram();
void writeFigure(QTextStream &t,const char *path,
const char *file);
void writeImage(QTextStream &t,const char *path,
void writeImage(QTextStream &t,const char *path,const char *relPath,
const char *file,bool generateMap=TRUE);
private:
TreeDiagram *base;
......
......@@ -239,7 +239,7 @@ static QCString findAndCopyImage(const char *fileName,DocImage::Type type)
/*! Collects the parameters found with \@param or \@retval commands
* in a global list g_paramsFound. If \a isParam is set to TRUE
* and the parameter is not an actual parameter of the current
* member g_memberDef, than a warning is raised (unless warnings
* member g_memberDef, then a warning is raised (unless warnings
* are disabled altogether).
*/
static void checkArgumentName(const QString &name,bool isParam)
......@@ -340,7 +340,7 @@ static void checkUndocumentedParams()
//---------------------------------------------------------------------------
/*! Strips know html and tex extensions from \a text. */
/*! Strips known html and tex extensions from \a text. */
static QString stripKnownExtensions(const char *text)
{
QString result=text;
......@@ -1429,16 +1429,14 @@ void DocCopy::parse()
//---------------------------------------------------------------------------
void DocXRefItem::parse()
DocXRefItem::DocXRefItem(DocNode *parent,int id,const char *key) :
m_parent(parent), m_id(id), m_key(key), m_relPath(g_relPath)
{
}
bool DocXRefItem::parse()
{
QString listName;
//switch(m_type)
//{
// case Bug: listName="bug"; break;
// case Test: listName="test"; break;
// case Todo: listName="todo"; break;
// case Deprecated: listName="deprecated"; break;
//}
RefList *refList = Doxygen::xrefLists->find(m_key);
if (refList &&
(
......@@ -1465,7 +1463,9 @@ void DocXRefItem::parse()
docParserPopContext();
}
}
return TRUE;
}
return FALSE;
}
//---------------------------------------------------------------------------
......@@ -1699,6 +1699,7 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
ASSERT(!target.isEmpty());
m_relPath = g_relPath;
SectionInfo *sec = Doxygen::sectionDict[target];
//printf("DocRef::DocRef(target=%s) sec=%p\n",target.data(),sec);
if (sec) // ref to section or anchor
{
m_text = sec->title;
......@@ -1709,6 +1710,8 @@ DocRef::DocRef(DocNode *parent,const QString &target) :
if (sec->type!=SectionInfo::Page) m_anchor = sec->label;
m_refToAnchor = sec->type==SectionInfo::Anchor;
m_refToSection = sec->type!=SectionInfo::Anchor;
//printf("m_text=%s,m_ref=%s,m_file=%s,m_refToAnchor=%d\n",
// m_text.data(),m_ref.data(),m_file.data(),m_refToAnchor);
}
else if (resolveLink(g_context,target,TRUE,&compound,/*&pageInfo,*/anchor))
{
......@@ -3234,8 +3237,14 @@ int DocPara::handleXRefItem()
if (retval==RetVal_OK)
{
DocXRefItem *ref = new DocXRefItem(this,g_token->id,g_token->name);
if (ref->parse())
{
m_children.append(ref);
ref->parse();
}
else
{
delete ref;
}
}
doctokenizerYYsetStatePara();
return retval;
......@@ -3329,13 +3338,13 @@ void DocPara::handleImage(const QString &cmdName)
}
doctokenizerYYsetStateFile();
tok=doctokenizerYYlex();
doctokenizerYYsetStatePara();
if (tok!=TK_WORD)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected token %s as the argument of %s",
tokToString(tok),cmdName.data());
return;
}
doctokenizerYYsetStatePara();
HtmlAttribList attrList;
DocImage *img = new DocImage(this,attrList,findAndCopyImage(g_token->name,t),t);
m_children.append(img);
......@@ -3353,13 +3362,13 @@ void DocPara::handleDotFile(const QString &cmdName)
}
doctokenizerYYsetStateFile();
tok=doctokenizerYYlex();
doctokenizerYYsetStatePara();
if (tok!=TK_WORD)
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: unexpected token %s as the argument of %s",
tokToString(tok),cmdName.data());
return;
}
doctokenizerYYsetStatePara();
QString name = g_token->name;
DocDotFile *df = new DocDotFile(this,name);
m_children.append(df);
......@@ -4825,6 +4834,10 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
{
g_context = ctx->name();
}
else if (ctx && ctx->definitionType()==Definition::TypePage)
{
g_context = ctx->getOuterScope()->name();
}
else
{
g_context = "";
......@@ -4904,6 +4917,7 @@ DocNode *validatingParseDoc(const char *fileName,int startLine,
g_fileName = fileName;
g_relPath = ctx ? relativePathToRoot(ctx->getOutputFileBase()) : QString("");
//printf("ctx->name=%s relPath=%s\n",ctx->name().data(),g_relPath.data());
g_memberDef = md;
g_nodeStack.clear();
g_styleStack.clear();
......
......@@ -541,16 +541,15 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
{
public:
//enum Type { Bug, Test, Todo, Deprecated };
DocXRefItem(DocNode *parent,int id,const char *key) :
m_parent(parent), m_id(id), m_key(key) /*, m_type(t)*/ {}
DocXRefItem(DocNode *parent,int id,const char *key);
Kind kind() const { return Kind_XRefItem; }
//Type type() const { return m_type; }
QString file() const { return m_file; }
QString anchor() const { return m_anchor; }
QString title() const { return m_title; }
DocNode *parent() const { return m_parent; }
QString relPath() const { return m_relPath; }
void accept(DocVisitor *v) { CompAccept<DocXRefItem>::accept(this,v); }
void parse();
bool parse();
private:
DocNode *m_parent;
......@@ -559,6 +558,7 @@ class DocXRefItem : public CompAccept<DocXRefItem>, public DocNode
QString m_file;
QString m_anchor;
QString m_title;
QString m_relPath;
};
/*! @brief Node representing an image */
......
......@@ -585,6 +585,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
BEGIN(St_TitleN);
}
<St_Title>\n {
unput(*yytext);
return 0;
}
<St_TitleN>"&"{ID}";" { /* symbol */
......@@ -680,7 +681,7 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
unput(*yytext);
return 0;
}
<St_IntRef>[A-Z_a-z0-9.:#\-\+]+ {
<St_IntRef>[A-Z_a-z0-9.:/#\-\+]+ {
g_token->name = yytext;
return TK_WORD;
}
......@@ -793,27 +794,27 @@ LABELID [a-z_A-Z][a-z_A-Z0-9\-]*
g_secType = SectionInfo::Paragraph;
BEGIN(St_SecLabel2);
}
<St_Sections>{CMD}"verbatim" {
<St_Sections>{CMD}"verbatim"{BLANK}+ {
g_endMarker="endverbatim";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"dot" {
<St_Sections>{CMD}"dot"/[^a-z_A-Z0-9] {
g_endMarker="enddot";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"htmlonly" {
<St_Sections>{CMD}"htmlonly"/[^a-z_A-Z0-9] {
g_endMarker="endhtmlonly";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"latexonly" {
<St_Sections>{CMD}"latexonly"/[^a-z_A-Z0-9] {
g_endMarker="endlatexonly";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"xmlonly" {
<St_Sections>{CMD}"xmlonly"/[^a-z_A-Z0-9] {
g_endMarker="endxmlonly";
BEGIN(St_SecSkip);
}
<St_Sections>{CMD}"code" {
<St_Sections>{CMD}"code"/[^a-z_A-Z0-9] {
g_endMarker="endcode";
BEGIN(St_SecSkip);
}
......
......@@ -6497,13 +6497,14 @@ static void generatePageDocs()
outputList->endSection(si->label,si->type);
}
outputList->startTextBlock();
outputList->parseDoc(pd->docFile(),
pd->docLine(),
pd->getOuterScope(),0,
pd->documentation(),
outputList->parseDoc(pd->docFile(), // fileName
pd->docLine(), // startLine
pd, // context
0, // memberdef
pd->documentation(), // docStr
TRUE, // index words
FALSE // not an example
/*,pd->sectionDict*/);
);
outputList->endTextBlock();
endFile(*outputList);
//outputList->enable(OutputGenerator::Man);
......@@ -6591,7 +6592,7 @@ static void generateExampleDocs()
endTitle(*outputList,n,0);
outputList->parseDoc(pd->docFile(), // file
pd->docLine(), // startLine
pd->getOuterScope(), // context
pd, // context
0, // memberDef
pd->documentation()+"\n\\include "+pd->name(), // docs
TRUE, // index words
......
......@@ -908,7 +908,7 @@ void HtmlDocVisitor::visitPre(DocXRefItem *x)
{
if (m_hide) return;
m_t << "<dl compact><dt><b><a class=\"el\" href=\""
<< x->file() << Doxygen::htmlFileExtension << "#" << x->anchor() << "\">";
<< x->relPath() << x->file() << Doxygen::htmlFileExtension << "#" << x->anchor() << "\">";
filter(x->title());
m_t << ":</a></b></dt><dd>";
}
......
......@@ -813,11 +813,11 @@ void HtmlGenerator::endClassDiagram(ClassDiagram &d,
const char *fileName,const char *name)
{
t << "\n<p><center><img src=\""
<< fileName << ".png\" usemap=\"#" << name << "_map\""
<< relPath << fileName << ".png\" usemap=\"#" << name << "_map\""
<< " border=\"0\" alt=\"\"></center>" << endl
<< "<map name=\"" << name << "_map\">" << endl;
d.writeImage(t,dir,fileName);
d.writeImage(t,dir,relPath,fileName);
}
......
......@@ -353,6 +353,7 @@ void HtmlHelp::initialize()
s_languageDict.insert("japanese-en", new QCString("0x411 Japanese"));
s_languageDict.insert("korean", new QCString("0x412 Korean"));
s_languageDict.insert("chinese", new QCString("0x804 Chinese (PRC)"));
s_languageDict.insert("chinese-traditional", new QCString("0x404 Chinese (Taiwan)"));
}
......
......@@ -116,6 +116,7 @@ static void endIndexHierarchy(OutputList &ol,int level)
static bool g_memberIndexLetterUsed[CMHL_Total][256];
static bool g_fileIndexLetterUsed[FMHL_Total][256];
static bool g_namespaceIndexLetterUsed[NMHL_Total][256];
static bool g_classIndexLetterUsed[CHL_Total][256];
const int maxItemsBeforeQuickIndex = 30;
......@@ -886,9 +887,7 @@ void writeFileIndex(OutputList &ol)
ftvHelp->addContentsItem(TRUE,0,"files",0,ftvHelpTitle);
ftvHelp->incContentsDepth();
}
//ol.newParagraph();
ol.parseText(theTranslator->trFileListDescription(Config_getBool("EXTRACT_ALL")));
//ol.newParagraph();
ol.endTextBlock();
OutputNameDict outputNameDict(1009);
......@@ -1196,16 +1195,58 @@ void writeAnnotatedClassList(OutputList &ol)
bool hasHtmlHelp = generateHtml && Config_getBool("GENERATE_HTMLHELP");
bool hasFtvHelp = generateHtml && Config_getBool("GENERATE_TREEVIEW");
ol.startIndexList();
//ClassDef *cd=Doxygen::classList.first();
//while (cd)
ClassSDict::Iterator cli(Doxygen::classSDict);
ClassDef *cd;
for (;(cd=cli.current());++cli)
// clear index
for (int y=0;y<CHL_Total;y++)
{
for (int x=0;x<256;x++)
{
g_classIndexLetterUsed[y][x]=FALSE;
}
}
// see which elements are in use
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
int c = cd->displayName().at(0);
g_classIndexLetterUsed[CHL_All][c]=TRUE;
switch(cd->compoundType())
{
case ClassDef::Class:
g_classIndexLetterUsed[CHL_Classes][c]=TRUE;
break;
case ClassDef::Struct:
g_classIndexLetterUsed[CHL_Structs][c]=TRUE;
break;
case ClassDef::Union:
g_classIndexLetterUsed[CHL_Unions][c]=TRUE;
break;
case ClassDef::Interface:
g_classIndexLetterUsed[CHL_Interfaces][c]=TRUE;
break;
case ClassDef::Protocol:
g_classIndexLetterUsed[CHL_Protocols][c]=TRUE;
break;
case ClassDef::Category:
g_classIndexLetterUsed[CHL_Categories][c]=TRUE;
break;
case ClassDef::Exception:
g_classIndexLetterUsed[CHL_Exceptions][c]=TRUE;
break;
}
}
}
for (cli.toFirst();(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0)
{
QCString type=cd->compoundTypeString();
//ol.writeStartAnnoItem(type,cd->getOutputFileBase(),0,cd->displayName());
ol.startIndexKey();
ol.writeObjectLink(0,cd->getOutputFileBase(),0,cd->displayName());
ol.endIndexKey();
......@@ -1216,7 +1257,7 @@ void writeAnnotatedClassList(OutputList &ol)
ol.parseDoc(
cd->briefFile(),cd->briefLine(),
cd,0,
abbreviate(cd->briefDescription(),cd->name()),
abbreviate(cd->briefDescription(),cd->displayName()),
FALSE, // indexWords
FALSE // isExample
);
......@@ -1769,10 +1810,6 @@ static void writeMemberIndexFiltered(OutputList &ol,
QCString title = theTranslator->trCompoundMembers();
QCString htmlHelpTitle = title;
QCString ftvHelpTitle = title;
//if (!Config_getString("PROJECT_NAME").isEmpty()) title.prepend(Config_getString("PROJECT_NAME")+" ");
//startTitle(ol,0);
//ol.parseText(title);
//endTitle(ol,0,0);
ol.writeString("<div class=\"qindex\">");
......
......@@ -124,6 +124,19 @@ enum NamespaceMemberHighlight
NMHL_Total = FMHL_EnumValues+1
};
enum ClassHighlight
{
CHL_All = 0,
CHL_Classes,
CHL_Structs,
CHL_Unions,
CHL_Interfaces,
CHL_Protocols,
CHL_Categories,
CHL_Exceptions,
CHL_Total = CHL_Exceptions+1
};
extern int annotatedClasses;
extern int hierarchyClasses;
extern int documentedFiles;
......
......@@ -167,6 +167,7 @@ void ManDocVisitor::visit(DocStyleChange *s)
{
m_insidePre=FALSE;
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
}
......@@ -187,6 +188,7 @@ void ManDocVisitor::visit(DocVerbatim *s)
m_t << ".nf" << endl;
parseCode(m_ci,s->context(),s->text().latin1(),s->isExample(),s->exampleFile());
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
......@@ -196,6 +198,7 @@ void ManDocVisitor::visit(DocVerbatim *s)
m_t << ".nf" << endl;
m_t << s->text();
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
......@@ -230,6 +233,7 @@ void ManDocVisitor::visit(DocInclude *inc)
FileDef fd( cfi.dirPath(), cfi.fileName() );
parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile(), &fd);
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
}
......@@ -240,6 +244,7 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".nf" << endl;
parseCode(m_ci,inc->context(),inc->text().latin1(),inc->isExample(),inc->exampleFile());
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
......@@ -253,6 +258,7 @@ void ManDocVisitor::visit(DocInclude *inc)
m_t << ".nf" << endl;
m_t << inc->text();
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
break;
......@@ -287,6 +293,7 @@ void ManDocVisitor::visit(DocIncOperator *op)
if (!m_hide)
{
if (!m_firstCol) m_t << endl;
m_t << ".fi" << endl;
m_t << ".PP" << endl;
m_firstCol=TRUE;
}
......@@ -548,6 +555,7 @@ void ManDocVisitor::visitPost(DocHtmlListItem *)
//{
// m_insidePre=FALSE;
// if (!m_firstCol) m_t << endl;
// m_t << ".fi" << endl;
// m_t << ".PP" << endl;
// m_firstCol=TRUE;
//}
......
......@@ -632,5 +632,6 @@ void ManGenerator::printDoc(DocNode *n)
n->accept(visitor);
delete visitor;
firstCol=FALSE;
paragraph = FALSE;
}
......@@ -1871,6 +1871,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
if (!comment.isEmpty())
{
outputArray(comment,comment.length());
g_defLitText=g_defLitText.left(g_defLitText.length()-comment.length()-1);
}
outputChar('\n');
Define *def=0;
......
......@@ -1700,7 +1700,7 @@ void RTFGenerator::endClassDiagram(ClassDiagram &d,
newParagraph();
// create a png file
d.writeImage(t,dir,fileName,FALSE);
d.writeImage(t,dir,relPath,fileName,FALSE);
// display the file
t << "{" << endl;
......
......@@ -154,6 +154,7 @@ static Grouping lastDefGroup( "", Grouping::GROUPING_LOWEST );
static bool insideFormula;
static bool insideTryBlock=FALSE;
static bool insideCode;
static bool needsSemi;
static int depthIf;
......@@ -293,6 +294,28 @@ static QCString stripQuotes(const char *s)
return name;
}
//static QCString stripCComments(const QCString &s)
//{
// int p=0,i;
// QCString result;
// while ((i=s.find("/*",p))!=-1)
// {
// result+=s.mid(p,i-p);
// int ei = s.find("*/",i+1);
// if (ei!=-1)
// {
// p=ei+2;
// }
// else
// {
// return result;
// }
// }
// result+=s.right(s.length()-p);
// printf("stripCComments: input=%s output=%s\n",s.data(),result.data());
// return result;
//}
static void newDocState();
//-----------------------------------------------------------------
......@@ -695,6 +718,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x SkipCurlyCpp
%x SkipCurlyEndDoc
%x SkipString
%x SkipPHPString
%x SkipInits
%x SkipCPP
%x SkipCPPBlock
......@@ -720,6 +744,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x LineDoc
%x DefLineDoc
%x ClassDocArg1
%x CategoryDocArg1
%x ClassDocArg2
%x ClassDocArg3
%x ClassDocFunc
......@@ -790,6 +815,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x AnchorLabel
%x ReadInitializer
%x CopyString
%x CopyPHPString
%x CopyRound
%x CopyCurly
%x IDLUnionCase
......@@ -883,7 +909,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN( FindMembers );
}
}
<NextSemi>{CHARLIT}
<NextSemi>{CHARLIT} { if (insidePHP) REJECT; }
<NextSemi>\" {
lastStringContext=NextSemi;
BEGIN(SkipString);
......@@ -899,6 +925,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<FindMembersPHP>"<?"("php"?) { // PHP code start
BEGIN( FindMembers );
}
<FindMembersPHP>[^\n<]+ { // Non-PHP code text, ignore
}
<FindMembersPHP>\n { // Non-PHP code text, ignore
yyLineNr++;
}
<FindMembersPHP>. { // Non-PHP code text, ignore
}
<FindMembers>"?>" { // PHP code end
......@@ -2028,7 +2059,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->initializer+=*yytext;
}
*/
<ReadInitializer>{CHARLIT} { current->initializer+=yytext; }
<ReadInitializer>{CHARLIT} {
if (insidePHP)
{
REJECT;
}
else
{
current->initializer+=yytext;
}
}
<ReadInitializer>\n {
current->initializer+=*yytext;
yyLineNr++;
......@@ -2063,21 +2103,25 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
/* generic quoted string copy rules */
<CopyString>\\. {
<CopyString,CopyPHPString>\\. {
*pCopyQuotedString+=yytext;
}
<CopyString>\" {
*pCopyQuotedString+=*yytext;
BEGIN( lastStringContext );
}
<CopyString>"/*"|"*/"|"//" {
<CopyPHPString>\' {
*pCopyQuotedString+=*yytext;
BEGIN( lastStringContext );
}
<CopyString,CopyPHPString>"/*"|"*/"|"//" {
*pCopyQuotedString+=yytext;
}
<CopyString>\n {
<CopyString,CopyPHPString>\n {
*pCopyQuotedString+=*yytext;
yyLineNr++;
}
<CopyString>. {
<CopyString,CopyPHPString>. {
*pCopyQuotedString+=*yytext;
}
......@@ -2101,10 +2145,22 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
yyLineNr++;
*pCopyRoundString+=*yytext;
}
<CopyRound>{CHARLIT} { *pCopyRoundString+=yytext; }
<CopyRound>{CHARLIT} {
if (insidePHP)
{
REJECT;
}
else
{
*pCopyRoundString+=yytext;
}
}
<CopyRound>[^"'()\n]+ {
*pCopyRoundString+=yytext;
}
<CopyRound>. {
*pCopyRoundString+=*yytext;
}
/* generic curly bracket list copy rules */
<CopyCurly>\" {
......@@ -2122,7 +2178,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
if (--curlyCount<0)
BEGIN(lastCurlyContext);
}
<CopyCurly>{CHARLIT} { *pCopyCurlyString+=yytext; }
<CopyCurly>{CHARLIT} { if (insidePHP)
{
REJECT;
}
else
{
*pCopyCurlyString+=yytext;
}
}
<CopyCurly>[^"'{}\/\n]+ {
*pCopyCurlyString+=yytext;
}
......@@ -2131,6 +2195,9 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
yyLineNr++;
*pCopyCurlyString+=*yytext;
}
<CopyCurly>. {
*pCopyCurlyString+=*yytext;
}
<FindMembers>":" {
if (current->type.isEmpty()) // bit pad field
{
......@@ -2306,7 +2373,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastContext = YY_START ;
BEGIN( Comment ) ;
}
<ReadBody,ReadNSBody,ReadBodyIntf>{CHARLIT} { current->program += yytext; }
<ReadBody,ReadNSBody,ReadBodyIntf>{CHARLIT} {
if (insidePHP)
{
REJECT; // for PHP code single quotes
// are used for strings of arbitrary length
}
else
{
current->program += yytext;
}
}
<ReadBody,ReadNSBody,ReadBodyIntf>"{" { current->program += yytext ;
++curlyCount ;
}
......@@ -2544,6 +2621,19 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
insideObjC=FALSE;
BEGIN( FindMembers );
}
<ReadBody,ReadNSBody,ReadBodyIntf>"'" {
if (!insidePHP)
{
current->program += yytext;
}
else
{ // begin of single quoted string
current->program += yytext;
pCopyQuotedString = &current->program;
lastStringContext=YY_START;
BEGIN(CopyPHPString);
}
}
<ReadBody,ReadNSBody,ReadBodyIntf>. { current->program += yytext ; }
<ReadBody,ReadNSBody,ReadBodyIntf>"'#" { current->program += yytext ; }
......@@ -2881,9 +2971,16 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN( lastCopyArgStringContext );
}
<ReadFuncArgType,ReadTempArgs,CopyArgRound,CopyArgSharp>{CHARLIT} {
if (insidePHP)
{
REJECT;
}
else
{
*copyArgString+=yytext;
fullArgString+=yytext;
}
}
<ReadFuncArgType,ReadTempArgs,CopyArgString,CopyArgRound,CopyArgSharp>\n {
yyLineNr++;
*copyArgString+=*yytext;
......@@ -2973,8 +3070,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN(CopyString);
}
<FuncPtrInit>{CHARLIT} {
if (insidePHP)
{
REJECT;
}
else
{
current->args += yytext;
}
}
<FuncPtrInit>{ID} {
current->args += yytext;
}
......@@ -3258,6 +3362,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<SkipCurly>{CHARLIT} {
//addToBody(yytext);
if (insidePHP) REJECT;
}
<SkipCurly>\" {
//addToBody(yytext);
......@@ -3323,27 +3428,21 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
BEGIN(SkipVerbString);
}
<SkipInits,SkipCurly,SkipCurlyCpp>{CHARLIT} {
if (insidePHP) REJECT;
}
<SkipInits,SkipCurly,SkipCurlyCpp>. {
//addToBody(yytext);
}
<SkipString>\\. {
//addToBodyCond(yytext);
}
<SkipInits,SkipCurly,SkipCurlyCpp>. { }
<SkipString,SkipPHPString>\\. { }
<SkipString>\" {
//addToBodyCond(yytext);
BEGIN( lastStringContext );
}
<SkipString>"/*"|"*/"|"//" {
//addToBodyCond(yytext);
<SkipPHPString>\' {
BEGIN( lastStringContext );
}
<SkipString>\n {
<SkipString,SkipPHPString>"/*"|"*/"|"//" { }
<SkipString,SkipPHPString>\n {
yyLineNr++;
//addToBodyCond(yytext);
}
<SkipString>. {
//addToBodyCond(yytext);
}
<SkipString,SkipPHPString>. { }
<Bases,CompoundName>";" {
current->section = Entry::EMPTY_SEC ;
current->type.resize(0) ;
......@@ -3526,8 +3625,10 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->name.sprintf("@%d",anonCount++);
}
curlyCount=0;
if (current->section==Entry::PROTOCOL_SEC ||
current->section==Entry::OBJCIMPL_SEC)
if (/*current->section==Entry::PROTOCOL_SEC ||
current->section==Entry::OBJCIMPL_SEC*/
insideObjC
)
{ // ObjC body that ends with @end
BEGIN( ReadBodyIntf );
}
......@@ -3697,9 +3798,17 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<Comment>"/*" { current->program += yytext ; }
<Comment>"//" { current->program += yytext ; }
<Comment>[^\n\/\*]+ { current->program += yytext ; }
<Comment>{CMD}("code"|"verbatim") {
insideCode=TRUE;
current->program += yytext ;
}
<Comment>{CMD}("endcode"|"endverbatim") {
insideCode=FALSE;
current->program += yytext ;
}
<Comment>[^ \.\n\/\*]+ { current->program += yytext ; }
<Comment>"*/" { current->program += yytext ;
BEGIN( lastContext ) ;
if (!insideCode) BEGIN( lastContext ) ;
}
<Comment>. { current->program += *yytext ; }
......@@ -4014,6 +4123,18 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"protocol"{B}+ { // ObjC protocol
current->section = Entry::PROTOCOLDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( ClassDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"category"{B}+ { // ObjC category
current->section = Entry::CATEGORYDOC_SEC;
current->fileName = yyFileName;
current->startLine = yyLineNr;
BEGIN( CategoryDocArg1 );
}
<Doc,JavaDoc>{B}*{CMD}"union"{B}+ {
current->section = Entry::UNIONDOC_SEC;
current->fileName = yyFileName;
......@@ -4260,6 +4381,11 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
);
yyLineNr++;
}
<CategoryDocArg1>{SCOPENAME}{B}*"("[^\)]+")" {
current->name = yytext;
prependScope();
BEGIN( ClassDocArg2 );
}
<ClassDocArg1>{SCOPENAME}/"<" {
current->name = yytext;
// prepend outer scope name
......@@ -4269,11 +4395,15 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
}
<ClassDocArg1>{SCOPENAME} {
current->name = yytext;
if (current->section==Entry::PROTOCOLDOC_SEC)
{
current->name+="-p";
}
// prepend outer scope name
prependScope();
BEGIN( ClassDocArg2 );
}
<ClassDocArg1>"\\"{B}*"\n" {
<ClassDocArg1,CategoryDocArg1>"\\"{B}*"\n" {
yyLineNr++;
}
<ClassDocArg1>"\n" {
......@@ -4283,6 +4413,14 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
);
yyLineNr++;
}
<CategoryDocArg1>"\n" {
warn(yyFileName,yyLineNr,
"Warning: missing argument after "
"\\category."
);
yyLineNr++;
}
<GroupDocArg1>{ID}(".html"?) {
current->name = yytext;
......@@ -4668,6 +4806,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
<SectionTitle>[^\n*]*/"\n" {
sectionTitle+=yytext;
sectionTitle=sectionTitle.stripWhiteSpace();
//printf("Adding new section file=%s label=%s title=%s\n",yyFileName,sectionLabel.data(),sectionTitle.data());
SectionInfo *si = new SectionInfo(yyFileName,sectionLabel,sectionTitle,SectionInfo::Anchor);
current->anchors->append(si);
Doxygen::sectionDict.insert(yytext,si);
......@@ -5299,7 +5438,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
unput(afterDocTerminator);
BEGIN(lastAfterDocContext);
}
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs>"*/" {
<ClassDocRelates,ClassDocFunc,ClassDocDefine,GroupDocArg1,CategoryDocArg1,ClassDocArg1,SectionTitle,EnumDocArg1,PageDocArg1,ExampleDocArg1,ClassDefineArgs>"*/" {
// defer "*/" to a later time
unput('/');
unput('*');
......@@ -5482,6 +5621,20 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastCContext = YY_START ;
BEGIN( SkipCxxComment ) ;
}
<*>\' {
if (insidePHP)
{
lastStringContext=YY_START;
BEGIN(SkipPHPString);
}
}
<*>\" {
if (insidePHP)
{
lastStringContext=YY_START;
BEGIN(SkipString);
}
}
<*>.
<SkipComment>"//"|"/*"
<*>"/*" { lastCContext = YY_START ;
......
......@@ -2616,7 +2616,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
fd=0, md=0, cd=0, nd=0, gd=0;
if (memberName.isEmpty()) return FALSE; /* empty name => nothing to link */
QCString scopeName=scName.copy();
QCString scopeName=scName;
//printf("Search for name=%s args=%s in scope=%s\n",
// memberName.data(),args,scopeName.data());
......@@ -2707,7 +2707,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
{
delete argList; argList=0;
}
if (mdist==maxInheritanceDepth && args && strcmp(args,"()")!=0)
if (mdist==maxInheritanceDepth && args && strcmp(args,"()")==0)
// no exact match found, but if args="()" an arbitrary member will do
{
//printf(" >Searching for arbitrary member\n");
......@@ -3023,8 +3023,9 @@ bool resolveRef(/* in */ const char *scName,
QCString fullName = substitute(tsName,"#","::");
fullName = removeRedundantWhiteSpace(substitute(fullName,".","::"));
int scopePos=fullName.findRev("::");
int bracePos=fullName.findRev('('); // reverse is needed for operator()(...)
int endNamePos=bracePos!=-1 ? bracePos : fullName.length();
int scopePos=fullName.findRev("::",endNamePos);
// default result values
*resContext=0;
......@@ -3063,22 +3064,15 @@ bool resolveRef(/* in */ const char *scName,
// continue search...
}
// extract scope
QCString scopeStr=scName;
//printf("scopeContext=%s scopeUser=%s\n",scopeContext.data(),scopeUser.data());
// extract userscope+name
int endNamePos=bracePos!=-1 ? bracePos : fullName.length();
QCString nameStr=fullName.left(endNamePos);
// extract arguments
QCString argsStr;
if (bracePos!=-1) argsStr=fullName.right(fullName.length()-bracePos);
//printf("scope=`%s' name=`%s' arg=`%s'\n",
// scopeStr.data(),nameStr.data(),argsStr.data());
// strip template specifier
// TODO: match against the correct partial template instantiation
int templPos=nameStr.find('<');
......@@ -3088,6 +3082,8 @@ bool resolveRef(/* in */ const char *scName,
nameStr=nameStr.left(templPos)+nameStr.right(nameStr.length()-endTemplPos-1);
}
QCString scopeStr=scName;
MemberDef *md = 0;
ClassDef *cd = 0;
FileDef *fd = 0;
......
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