summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/compound.xsd6
-rw-r--r--src/compound_xsd.h6
-rw-r--r--src/config.l4
-rw-r--r--src/docparser.cpp1
-rw-r--r--src/dot.cpp426
-rw-r--r--src/doxygen.cpp4
-rw-r--r--src/ftvhelp.cpp3
-rw-r--r--src/htmlgen.cpp3
-rw-r--r--src/latexgen.cpp3
-rw-r--r--src/memberdef.cpp2
-rw-r--r--src/memberlist.cpp4
-rw-r--r--src/pngenc.cpp3
-rw-r--r--src/scanner.l27
-rw-r--r--src/util.cpp25
-rw-r--r--src/xmlgen.cpp5
15 files changed, 307 insertions, 215 deletions
diff --git a/src/compound.xsd b/src/compound.xsd
index f445278..fa1ea92 100644
--- a/src/compound.xsd
+++ b/src/compound.xsd
@@ -93,6 +93,7 @@
<xsd:complexType name="memberdefType">
<xsd:sequence>
+ <xsd:element name="templateparamlist" type="templateparamlistType" minOccurs="0" />
<xsd:element name="type" type="linkedTextType" minOccurs="0" />
<xsd:element name="definition" minOccurs="0" />
<xsd:element name="argsstring" minOccurs="0" />
@@ -632,6 +633,11 @@
<xsd:enumeration value="protected-slot" />
<xsd:enumeration value="protected-static-func" />
<xsd:enumeration value="protected-static-attrib" />
+ <xsd:enumeration value="package-type" />
+ <xsd:enumeration value="package-func" />
+ <xsd:enumeration value="package-attrib" />
+ <xsd:enumeration value="package-static-func" />
+ <xsd:enumeration value="package-static-attrib" />
<xsd:enumeration value="private-type" />
<xsd:enumeration value="private-func" />
<xsd:enumeration value="private-attrib" />
diff --git a/src/compound_xsd.h b/src/compound_xsd.h
index 085e0a8..bef2c61 100644
--- a/src/compound_xsd.h
+++ b/src/compound_xsd.h
@@ -93,6 +93,7 @@
"\n"
" <xsd:complexType name=\"memberdefType\">\n"
" <xsd:sequence>\n"
+" <xsd:element name=\"templateparamlist\" type=\"templateparamlistType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"type\" type=\"linkedTextType\" minOccurs=\"0\" />\n"
" <xsd:element name=\"definition\" minOccurs=\"0\" />\n"
" <xsd:element name=\"argsstring\" minOccurs=\"0\" />\n"
@@ -632,6 +633,11 @@
" <xsd:enumeration value=\"protected-slot\" />\n"
" <xsd:enumeration value=\"protected-static-func\" />\n"
" <xsd:enumeration value=\"protected-static-attrib\" />\n"
+" <xsd:enumeration value=\"package-type\" />\n"
+" <xsd:enumeration value=\"package-func\" />\n"
+" <xsd:enumeration value=\"package-attrib\" />\n"
+" <xsd:enumeration value=\"package-static-func\" />\n"
+" <xsd:enumeration value=\"package-static-attrib\" />\n"
" <xsd:enumeration value=\"private-type\" />\n"
" <xsd:enumeration value=\"private-func\" />\n"
" <xsd:enumeration value=\"private-attrib\" />\n"
diff --git a/src/config.l b/src/config.l
index 739f5f1..594cbc2 100644
--- a/src/config.l
+++ b/src/config.l
@@ -1979,7 +1979,9 @@ void Config::create()
"The HTML_STYLESHEET tag can be used to specify a user-defined cascading \n"
"style sheet that is used by each HTML page. It can be used to \n"
"fine-tune the look of the HTML output. If the tag is left blank doxygen \n"
- "will generate a default style sheet \n"
+ "will generate a default style sheet. Note that doxygen will try to copy \n"
+ "the style sheet file to the HTML output directory, so don't put your own \n"
+ "stylesheet in the HTML output directory as well, or it will be erased! \n"
);
cs->setWidgetType(ConfigString::File);
cs->addDependency("GENERATE_HTML");
diff --git a/src/docparser.cpp b/src/docparser.cpp
index c324dc0..1ee90f5 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -701,6 +701,7 @@ static void handleLinkedWord(DocNode *parent,QList<DocNode> &children)
QString name = linkToText(g_token->name,TRUE);
if (resolveRef(g_context,g_token->name,g_inSeeBlock,&compound,&member))
{
+ //printf("resolveRef %s = %p (linkable?=%d)\n",g_token->name.data(),member,member->isLinkable());
if (member) // member link
{
children.append(new
diff --git a/src/dot.cpp b/src/dot.cpp
index 1b506b1..efaf077 100644
--- a/src/dot.cpp
+++ b/src/dot.cpp
@@ -295,6 +295,36 @@ static void checkDotResult(const QCString &imgName)
}
}
+/*! Checks if a file "baseName".md5 exists. If so the contents
+ * are compared with \a md5. If equal FALSE is returned. If the .md5
+ * file does not exist or its contents are not equal to \a md5,
+ * a new .md5 is generated with the \a md5 string as contents.
+ */
+static bool checkAndUpdateMd5Signature(const QCString &baseName,const QCString &md5)
+{
+ QFile f(baseName+".md5");
+ if (f.open(IO_ReadOnly))
+ {
+ // read checksum
+ QCString md5stored(33);
+ int bytesRead=f.readBlock(md5stored.data(),32);
+ // compare checksum
+ if (bytesRead==32 && md5==md5stored)
+ {
+ // bail out if equal
+ return FALSE;
+ }
+ }
+ f.close();
+ // create checksum file
+ if (f.open(IO_WriteOnly))
+ {
+ f.writeBlock(md5.data(),32);
+ f.close();
+ }
+ return TRUE;
+}
+
//--------------------------------------------------------------------
class DotNodeList : public QList<DotNode>
@@ -880,6 +910,7 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QDir::setCurrent(d.absPath());
QDir thisDir;
+ // put each connected subgraph of the hierarchy in a row of the HTML output
out << "<table border=0 cellspacing=10 cellpadding=0>" << endl;
QListIterator<DotNode> dnli(*m_rootSubgraphs);
@@ -891,52 +922,75 @@ void DotGfxHierarchyTable::writeGraph(QTextStream &out,const char *path)
QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
baseName.sprintf("inherit_graph_%d",count++);
baseName = convertNameToFile(baseName);
- QCString dotName=baseName+".dot";
QCString imgName=baseName+"."+ imgExt;
QCString mapName=baseName+".map";
-
- QFile f(dotName);
- if (!f.open(IO_WriteOnly)) return;
- QTextStream t(&f);
- writeGraphHeader(t);
- t << " rankdir=LR;" << endl;
QListIterator<DotNode> dnli2(*m_rootNodes);
DotNode *node;
- for (;(node=dnli2.current());++dnli2)
+
+ // compute md5 checksum of the graph were are about to generate
+ QString buf;
+ QTextStream md5stream(&buf,IO_WriteOnly);
+ for (dnli2.toFirst();(node=dnli2.current());++dnli2)
{
if (node->m_subgraphId==n->m_subgraphId)
- node->write(t,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
+ {
+ node->clearWriteFlag();
+ node->write(md5stream,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
+ }
}
- writeGraphFooter(t);
- f.close();
+ char md5_sig[16];
+ QCString sigStr(33);
+ md5_buffer(buf.ascii(),buf.length(),md5_sig);
+ md5_sig_to_string(md5_sig,sigStr.data(),33);
+ if (checkAndUpdateMd5Signature(baseName,sigStr))
+ {
+ // image was new or has changed
+ QCString dotName=baseName+".dot";
+ QFile f(dotName);
+ if (!f.open(IO_WriteOnly)) return;
+ QTextStream t(&f);
+ writeGraphHeader(t);
+ t << " rankdir=LR;" << endl;
+ for (dnli2.toFirst();(node=dnli2.current());++dnli2)
+ {
+ if (node->m_subgraphId==n->m_subgraphId)
+ {
+ node->clearWriteFlag();
+ node->write(t,DotNode::Hierarchy,BITMAP,FALSE,TRUE,1000,TRUE);
+ }
+ }
+ writeGraphFooter(t);
+ f.close();
- QCString dotArgs(maxCmdLine);
- dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",
- imgExt.data(), dotName.data(),imgName.data());
- //printf("Running: dot -T%s %s -o %s\n",imgExt.data(),dotName.data(),imgName.data());
- if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
- {
- err("Problems running dot. Check your installation!\n");
- out << "</table>" << endl;
- return;
- }
- checkDotResult(imgName);
- dotArgs.sprintf("-Timap \"%s\" -o \"%s\"",dotName.data(),mapName.data());
- //printf("Running: dot -Timap %s -o %s\n",dotName.data(),mapName.data());
- if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
- {
- err("Problems running dot. Check your installation!\n");
- out << "</table>" << endl;
- return;
+ QCString dotArgs(maxCmdLine);
+ dotArgs.sprintf("-T%s \"%s\" -o \"%s\"",
+ imgExt.data(), dotName.data(),imgName.data());
+ //printf("Running: dot -T%s %s -o %s\n",imgExt.data(),dotName.data(),imgName.data());
+ if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
+ {
+ err("Problems running dot. Check your installation!\n");
+ out << "</table>" << endl;
+ return;
+ }
+ checkDotResult(imgName);
+ dotArgs.sprintf("-Timap \"%s\" -o \"%s\"",dotName.data(),mapName.data());
+ //printf("Running: dot -Timap %s -o %s\n",dotName.data(),mapName.data());
+ if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
+ {
+ err("Problems running dot. Check your installation!\n");
+ out << "</table>" << endl;
+ return;
+ }
+ if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName);
}
+ // write image and map in a table row
QCString mapLabel = convertNameToFile(n->m_label);
out << "<tr><td><img src=\"" << imgName << "\" border=\"0\" alt=\"\" usemap=\"#"
<< mapLabel << "_map\">" << endl;
out << "<map name=\"" << mapLabel << "_map\">" << endl;
convertMapFile(out,mapName);
out << "</map></td></tr>" << endl;
- if (Config_getBool("DOT_CLEANUP")) thisDir.remove(dotName);
- thisDir.remove(mapName);
+ //thisDir.remove(mapName);
}
out << "</table>" << endl;
@@ -1432,36 +1486,6 @@ QCString computeMd5Signature(DotNode *root,
return sigStr;
}
-/*! Checks if a file "baseName".md5 exists. If so the contents
- * are compared with \a md5. If equal FALSE is returned. If the .md5
- * file does not exist or its contents are not equal to \a md5,
- * a new .md5 is generated with the \a md5 string as contents.
- */
-static bool checkAndUpdateMd5Signature(const QCString &baseName,const QCString &md5)
-{
- QFile f(baseName+".md5");
- if (f.open(IO_ReadOnly))
- {
- // read checksum
- QCString md5stored(33);
- int bytesRead=f.readBlock(md5stored.data(),32);
- // compare checksum
- if (bytesRead==32 && md5==md5stored)
- {
- // bail out if equal
- return FALSE;
- }
- }
- f.close();
- // create checksum file
- if (f.open(IO_WriteOnly))
- {
- f.writeBlock(md5.data(),32);
- f.close();
- }
- return TRUE;
-}
-
static bool findMaximalDotGraph(DotNode *root,
int maxDist,
const QCString &baseName,
@@ -1606,14 +1630,13 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
baseName = convertNameToFile(diskName());
+ QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),baseName,
thisDir,m_graphType,format,!isTBRank,m_graphType==DotNode::Inheritance))
{
-
if (format==BITMAP) // run dot to create a bitmap image
{
QCString dotArgs(maxCmdLine);
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName = baseName+"."+imgExt;
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
imgExt.data(),baseName.data(),imgName.data());
@@ -1634,36 +1657,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir);
return baseName;
}
- QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName);
- out << "<p><center><img src=\"" << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapLabel << "\" alt=\"";
- switch (m_graphType)
- {
- case DotNode::Collaboration:
- out << "Collaboration graph";
- break;
- //case Interface:
- // out << "Interface dependency graph";
- // break;
- case DotNode::Inheritance:
- out << "Inheritance graph";
- break;
- default:
- ASSERT(0);
- break;
- }
- out << "\"></center>" << endl;
- QString tmpstr;
- QTextOStream tmpout(&tmpstr);
- convertMapFile(tmpout,baseName+".map");
- if (!tmpstr.isEmpty())
- {
- out << "<map name=\"" << mapLabel << "\">" << endl;
- out << tmpstr;
- out << "</map>" << endl;
- }
- thisDir.remove(baseName+".map");
}
}
else if (format==EPS) // run dot to create a .eps image
@@ -1676,13 +1669,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir);
return baseName;
}
- int width,height;
- if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
- {
- err("Error: Could not extract bounding box from .eps!\n");
- QDir::setCurrent(oldDir);
- return baseName;
- }
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
@@ -1695,8 +1681,51 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
return baseName;
}
}
- int maxWidth = 420; /* approx. page width in points */
+ }
+ if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
+ }
+
+ if (format==BITMAP) // run dot to create a bitmap image
+ {
+ QCString mapLabel = convertNameToFile(m_startNode->m_label+"_"+mapName);
+ out << "<p><center><img src=\"" << baseName << "."
+ << imgExt << "\" border=\"0\" usemap=\"#"
+ << mapLabel << "\" alt=\"";
+ switch (m_graphType)
+ {
+ case DotNode::Collaboration:
+ out << "Collaboration graph";
+ break;
+ case DotNode::Inheritance:
+ out << "Inheritance graph";
+ break;
+ default:
+ ASSERT(0);
+ break;
+ }
+ out << "\"></center>" << endl;
+ QString tmpstr;
+ QTextOStream tmpout(&tmpstr);
+ convertMapFile(tmpout,baseName+".map");
+ if (!tmpstr.isEmpty())
+ {
+ out << "<map name=\"" << mapLabel << "\">" << endl;
+ out << tmpstr;
+ out << "</map>" << endl;
+ }
+ //thisDir.remove(baseName+".map");
+ }
+ else if (format==EPS) // run dot to create a .eps image
+ {
+ int width,height;
+ if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
+ {
+ err("Error: Could not extract bounding box from .eps!\n");
+ QDir::setCurrent(oldDir);
+ return baseName;
+ }
+ int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n"
"\\begin{center}\n"
"\\leavevmode\n"
@@ -1704,8 +1733,6 @@ QCString DotClassGraph::writeGraph(QTextStream &out,
<< "pt]{" << baseName << "}\n"
"\\end{center}\n"
"\\end{figure}\n";
- }
- if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
}
QDir::setCurrent(oldDir);
@@ -1850,6 +1877,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
baseName=convertNameToFile(baseName);
QCString mapName=m_startNode->m_label.copy();
if (m_inverse) mapName+="dep";
+ QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::Dependency,format,
@@ -1860,7 +1888,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
{
// run dot to create a bitmap image
QCString dotArgs(maxCmdLine);
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
QCString imgName=baseName+"."+imgExt;
dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
imgExt.data(),baseName.data(),imgName.data());
@@ -1884,22 +1911,7 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
return baseName;
}
- out << "<p><center><img src=\"" << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapName << "_map\" alt=\"";
- if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
- out << "\">";
- out << "</center>" << endl;
- QString tmpstr;
- QTextOStream tmpout(&tmpstr);
- convertMapFile(tmpout,baseName+".map");
- if (!tmpstr.isEmpty())
- {
- out << "<map name=\"" << mapName << "_map\">" << endl;
- out << tmpstr;
- out << "</map>" << endl;
- }
- thisDir.remove(baseName+".map");
+ //thisDir.remove(baseName+".map");
}
}
else if (format==EPS)
@@ -1914,13 +1926,6 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
QDir::setCurrent(oldDir);
return baseName;
}
- int width,height;
- if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
- {
- err("Error: Could not extract bounding box from .eps!\n");
- QDir::setCurrent(oldDir);
- return baseName;
- }
if (Config_getBool("USE_PDFLATEX"))
{
QCString epstopdfArgs(maxCmdLine);
@@ -1933,22 +1938,50 @@ QCString DotInclDepGraph::writeGraph(QTextStream &out,
return baseName;
}
}
- int maxWidth = 420; /* approx. page width in points */
-
- out << "\\begin{figure}[H]\n"
- "\\begin{center}\n"
- "\\leavevmode\n"
- //"\\setlength{\\epsfxsize}{" << QMIN(width/2,maxWidth) << "pt}\n"
- //"\\epsfbox{" << baseName << ".eps}\n"
- "\\includegraphics[width=" << QMIN(width/2,maxWidth)
- << "pt]{" << baseName << "}\n"
- "\\end{center}\n"
- "\\end{figure}\n";
}
if (Config_getBool("DOT_CLEANUP")) thisDir.remove(baseName+".dot");
}
+ if (format==BITMAP)
+ {
+ out << "<p><center><img src=\"" << baseName << "."
+ << imgExt << "\" border=\"0\" usemap=\"#"
+ << mapName << "_map\" alt=\"";
+ if (m_inverse) out << "Included by dependency graph"; else out << "Include dependency graph";
+ out << "\">";
+ out << "</center>" << endl;
+ QString tmpstr;
+ QTextOStream tmpout(&tmpstr);
+ convertMapFile(tmpout,baseName+".map");
+ if (!tmpstr.isEmpty())
+ {
+ out << "<map name=\"" << mapName << "_map\">" << endl;
+ out << tmpstr;
+ out << "</map>" << endl;
+ }
+ }
+ else if (format==EPS)
+ {
+ int width,height;
+ if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
+ {
+ err("Error: Could not extract bounding box from .eps!\n");
+ QDir::setCurrent(oldDir);
+ return baseName;
+ }
+
+ int maxWidth = 420; /* approx. page width in points */
+
+ out << "\\begin{figure}[H]\n"
+ "\\begin{center}\n"
+ "\\leavevmode\n"
+ "\\includegraphics[width=" << QMIN(width/2,maxWidth)
+ << "pt]{" << baseName << "}\n"
+ "\\end{center}\n"
+ "\\end{figure}\n";
+ }
+
QDir::setCurrent(oldDir);
return baseName;
}
@@ -2014,68 +2047,87 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QCString baseName=m_diskName+"_cgraph";
//baseName=convertNameToFile(baseName);
QCString mapName=baseName;
+ QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
+ if (findMaximalDotGraph(m_startNode,QMIN(m_recDepth,m_maxDistance),
baseName,thisDir,DotNode::CallGraph,format,
- TRUE,FALSE,FALSE);
-
- if (format==BITMAP)
+ TRUE,FALSE,FALSE))
{
- // run dot to create a bitmap image
- QCString dotArgs(maxCmdLine);
- QCString imgExt = Config_getEnum("DOT_IMAGE_FORMAT");
- QCString imgName=baseName+"."+imgExt;
- dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
- imgExt.data(),baseName.data(),imgName.data());
- if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
+ if (format==BITMAP)
{
- err("Problems running dot. Check your installation!\n");
- QDir::setCurrent(oldDir);
- return baseName;
- }
- checkDotResult(imgName);
+ // run dot to create a bitmap image
+ QCString dotArgs(maxCmdLine);
+ QCString imgName=baseName+"."+imgExt;
+ dotArgs.sprintf("-T%s \"%s.dot\" -o \"%s\"",
+ imgExt.data(),baseName.data(),imgName.data());
+ if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
+ {
+ err("Problems running dot. Check your installation!\n");
+ QDir::setCurrent(oldDir);
+ return baseName;
+ }
+ checkDotResult(imgName);
- if (generateImageMap)
+ if (generateImageMap)
+ {
+ // run dot again to create an image map
+ dotArgs.sprintf("-Timap \"%s.dot\" -o \"%s.map\"",
+ baseName.data(),baseName.data());
+ if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
+ {
+ err("Problems running dot. Check your installation!\n");
+ QDir::setCurrent(oldDir);
+ return baseName;
+ }
+ }
+ }
+ else if (format==EPS)
{
- // run dot again to create an image map
- dotArgs.sprintf("-Timap \"%s.dot\" -o \"%s.map\"",
- baseName.data(),baseName.data());
+ // run dot to create a .eps image
+ QCString dotArgs(maxCmdLine);
+ dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
+ baseName.data(),baseName.data());
if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
{
err("Problems running dot. Check your installation!\n");
QDir::setCurrent(oldDir);
return baseName;
}
-
- out << "<p><center><img src=\"" << baseName << "."
- << imgExt << "\" border=\"0\" usemap=\"#"
- << mapName << "_map\" alt=\"";
- out << "\">";
- out << "</center>" << endl;
- QString tmpstr;
- QTextOStream tmpout(&tmpstr);
- convertMapFile(tmpout,baseName+".map");
- if (!tmpstr.isEmpty())
+ if (Config_getBool("USE_PDFLATEX"))
{
- out << "<map name=\"" << mapName << "_map\">" << endl;
- out << tmpstr;
- out << "</map>" << endl;
+ QCString epstopdfArgs(maxCmdLine);
+ epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
+ baseName.data(),baseName.data());
+ if (iSystem("epstopdf",epstopdfArgs,TRUE)!=0)
+ {
+ err("Error: Problems running epstopdf. Check your TeX installation!\n");
+ QDir::setCurrent(oldDir);
+ return baseName;
+ }
}
- thisDir.remove(baseName+".map");
}
}
- else if (format==EPS)
+
+ if (format==BITMAP)
{
- // run dot to create a .eps image
- QCString dotArgs(maxCmdLine);
- dotArgs.sprintf("-Tps \"%s.dot\" -o \"%s.eps\"",
- baseName.data(),baseName.data());
- if (iSystem(Config_getString("DOT_PATH")+"dot",dotArgs)!=0)
+ out << "<p><center><img src=\"" << baseName << "."
+ << imgExt << "\" border=\"0\" usemap=\"#"
+ << mapName << "_map\" alt=\"";
+ out << "\">";
+ out << "</center>" << endl;
+ QString tmpstr;
+ QTextOStream tmpout(&tmpstr);
+ convertMapFile(tmpout,baseName+".map");
+ if (!tmpstr.isEmpty())
{
- err("Problems running dot. Check your installation!\n");
- QDir::setCurrent(oldDir);
- return baseName;
+ out << "<map name=\"" << mapName << "_map\">" << endl;
+ out << tmpstr;
+ out << "</map>" << endl;
}
+ //thisDir.remove(baseName+".map");
+ }
+ else if (format==EPS)
+ {
int width,height;
if (!readBoundingBoxEPS(baseName+".eps",&width,&height))
{
@@ -2083,18 +2135,6 @@ QCString DotCallGraph::writeGraph(QTextStream &out, GraphOutputFormat format,
QDir::setCurrent(oldDir);
return baseName;
}
- if (Config_getBool("USE_PDFLATEX"))
- {
- QCString epstopdfArgs(maxCmdLine);
- epstopdfArgs.sprintf("\"%s.eps\" --outfile=\"%s.pdf\"",
- baseName.data(),baseName.data());
- if (iSystem("epstopdf",epstopdfArgs,TRUE)!=0)
- {
- err("Error: Problems running epstopdf. Check your TeX installation!\n");
- QDir::setCurrent(oldDir);
- return baseName;
- }
- }
int maxWidth = 420; /* approx. page width in points */
out << "\\begin{figure}[H]\n"
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index 1165c51..8360acb 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -4037,7 +4037,7 @@ static void addMemberDocs(Entry *root,
static ClassDef *findClassDefinition(FileDef *fd,NamespaceDef *nd,
const char *scopeName)
{
- ClassDef *tcd = getClass(scopeName);
+ ClassDef *tcd = getResolvedClass(nd,fd,scopeName);
if (tcd==0) // try using declaration
{
ClassSDict *cl = 0;
@@ -4438,7 +4438,7 @@ static void findMember(Entry *root,
}
//printf("new scope=`%s'\n",scopeName.data());
- QCString tempScopeName=scopeName.copy();
+ QCString tempScopeName=scopeName;
ClassDef *cd=getClass(scopeName);
if (cd)
{
diff --git a/src/ftvhelp.cpp b/src/ftvhelp.cpp
index 939cbba..6704fb2 100644
--- a/src/ftvhelp.cpp
+++ b/src/ftvhelp.cpp
@@ -625,6 +625,9 @@ void FTVHelp::generateTreeView()
else
{
QTextStream t(&f);
+#if QT_VERSION >= 200
+ t.setEncoding(QTextStream::Latin1);
+#endif
t << "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n";
t << " <head>\n";
t << " <meta http-equiv=\"Content-Type\" content=\"text/xhtml;charset=\""
diff --git a/src/htmlgen.cpp b/src/htmlgen.cpp
index 3a260a2..d247102 100644
--- a/src/htmlgen.cpp
+++ b/src/htmlgen.cpp
@@ -1397,6 +1397,9 @@ void HtmlGenerator::writeSearchPage()
if (f.open(IO_WriteOnly))
{
QTextStream t(&f);
+#if QT_VERSION >= 200
+ t.setEncoding(QTextStream::Latin1);
+#endif
if (g_header.isEmpty())
{
writeDefaultHeaderFile(t,"Search");
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index e330e1e..273dd74 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -247,7 +247,8 @@ static void writeDefaultHeaderPart1(QTextStream &t)
"\\usepackage{multicol}\n"
"\\usepackage{float}\n"
"\\usepackage{textcomp}\n"
- "\\usepackage{alltt}\n";
+ "\\usepackage{alltt}\n"
+ "\\usepackage{ae,aecompl,aeguill}\n";
if (Config_getBool("PDF_HYPERLINKS"))
{
t << "\\usepackage{times}" << endl;
diff --git a/src/memberdef.cpp b/src/memberdef.cpp
index f3f9156..3ce930d 100644
--- a/src/memberdef.cpp
+++ b/src/memberdef.cpp
@@ -522,7 +522,7 @@ QCString MemberDef::anchor() const
bool MemberDef::isLinkableInProject() const
{
- //printf("MemberDef::isLinkableInProject()\n");
+ //printf("MemberDef::isLinkableInProject(name=%s)\n",name().data());
if (m_templateMaster)
{
return m_templateMaster->isLinkableInProject();
diff --git a/src/memberlist.cpp b/src/memberlist.cpp
index e943f17..e6da01e 100644
--- a/src/memberlist.cpp
+++ b/src/memberlist.cpp
@@ -243,7 +243,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
if (md->isDetailedSectionLinkable())
{
ol.disableAllBut(OutputGenerator::Html);
- ol.endEmphasis();
+ //ol.endEmphasis();
ol.docify(" ");
if (md->getGroupDef()!=0 && gd==0) // forward link to group
{
@@ -256,7 +256,7 @@ void MemberList::writePlainDeclarations(OutputList &ol,
}
ol.parseText(theTranslator->trMore());
ol.endTextLink();
- ol.startEmphasis();
+ //ol.startEmphasis();
ol.enableAll();
}
ol.endMemberDescription();
diff --git a/src/pngenc.cpp b/src/pngenc.cpp
index 5a52e2f..8578819 100644
--- a/src/pngenc.cpp
+++ b/src/pngenc.cpp
@@ -24,7 +24,8 @@
# define png_jmpbuf(png_ptr) ((png_ptr)->jmpbuf)
#endif
-#include <png.h>
+#define ALL_STATIC
+#include <../libpng/png.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
diff --git a/src/scanner.l b/src/scanner.l
index d70ad39..98a568a 100644
--- a/src/scanner.l
+++ b/src/scanner.l
@@ -672,6 +672,7 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
%x EnumDocArg1
%x FuncPtr
%x EndFuncPtr
+%x FuncPtrInit
%x FuncFunc
%x FuncFuncEnd
%x FuncFuncType
@@ -2643,8 +2644,32 @@ PHPKW ("require"|"require_once"|"include"|"include_once"|"echo")[^a-zA-Z0-9_;]
lastCPPContext = YY_START;
BEGIN(SkipCPP);
}
-<FuncQual>"=" { // typically a initialized function pointer
+<FuncQual>"=" { // typically an initialized function pointer
current->args += *yytext;
+ BEGIN(FuncPtrInit);
+ }
+<FuncPtrInit>[{;] {
+ unput(*yytext);
+ BEGIN(FuncQual);
+ }
+<FuncPtrInit>\" {
+ current->args += *yytext;
+ pCopyQuotedString=&current->args;
+ lastStringContext=FuncPtrInit;
+ BEGIN(CopyString);
+ }
+<FuncPtrInit>{CHARLIT} {
+ current->args += yytext;
+ }
+<FuncPtrInit>{ID} {
+ current->args += yytext;
+ }
+<FuncPtrInit>. {
+ current->args += *yytext;
+ }
+<FuncPtrInit>\n {
+ current->args += *yytext;
+ yyLineNr++;
}
<FuncQual>{ID} { // typically a K&R style C function
if (checkForKnRstyleC())
diff --git a/src/util.cpp b/src/util.cpp
index 4147bcd..4a0e1ab 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -17,7 +17,7 @@
#include <stdlib.h>
#include <ctype.h>
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(__CYGWIN__)
#include <windows.h>
#endif
@@ -43,7 +43,7 @@
#include "reflist.h"
#include "pagedef.h"
-#ifndef _WIN32
+#if !defined(_WIN32) || defined(__CYGWIN__)
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
@@ -94,7 +94,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile)
{
QTime time;
time.start();
-#ifndef _WIN32
+#if !defined(_WIN32) || defined(__CYGWIN__)
isBatchFile=isBatchFile;
/*! taken from the system() manpage on my Linux box */
int pid,status=0;
@@ -167,7 +167,7 @@ int iSystem(const char *command,const char *args,bool isBatchFile)
}
#endif // _OS_SOLARIS
-#else
+#else // Win32 specific
if (isBatchFile)
{
QCString fullCmd = command;
@@ -2697,6 +2697,7 @@ bool getDefs(const QCString &scName,const QCString &memberName,
}
if (bmd) md=bmd;
}
+ if (md && !md->isLinkable()) md=0; // ignore things we cannot link to
if (md) // found a matching global member
{
fd=md->getFileDef();
@@ -2963,18 +2964,19 @@ bool generateRef(OutputDocInterface &od,const char *scName,
if (resolveRef(scName,name,inSeeBlock,&compound,&md))
{
- if (md) // link to member
+ if (md && md->isLinkable()) // link to member
{
od.writeObjectLink(md->getReference(),
md->getOutputFileBase(),
md->anchor(),linkText);
// generate the page reference (for LaTeX)
- if (md->isLinkableInProject())
+ if (!md->isReference())
{
writePageRef(od,md->getOutputFileBase(),md->anchor());
}
+ return TRUE;
}
- else // link to compound
+ else if (compound && compound->isLinkable()) // link to compound
{
if (rt==0 && compound->definitionType()==Definition::TypeGroup)
{
@@ -2991,14 +2993,11 @@ bool generateRef(OutputDocInterface &od,const char *scName,
{
writePageRef(od,compound->getOutputFileBase(),0);
}
+ return TRUE;
}
- return TRUE;
- }
- else // no link possible
- {
- od.docify(linkText);
- return FALSE;
}
+ od.docify(linkText);
+ return FALSE;
}
bool resolveLink(/* in */ const char *scName,
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index ec3bc47..5c0c191 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -1012,6 +1012,11 @@ static void generateXMLForClass(ClassDef *cd,QTextStream &ti)
generateXMLSection(cd,ti,t,&cd->proSlots,"protected-slot");
generateXMLSection(cd,ti,t,&cd->proStaticMethods,"protected-static-func");
generateXMLSection(cd,ti,t,&cd->proStaticAttribs,"protected-static-attrib");
+ generateXMLSection(cd,ti,t,&cd->pacTypes,"package-type");
+ generateXMLSection(cd,ti,t,&cd->pacMethods,"package-func");
+ generateXMLSection(cd,ti,t,&cd->pacAttribs,"package-attrib");
+ generateXMLSection(cd,ti,t,&cd->pacStaticMethods,"package-static-func");
+ generateXMLSection(cd,ti,t,&cd->pacStaticAttribs,"package-static-attrib");
generateXMLSection(cd,ti,t,&cd->priTypes,"private-type");
generateXMLSection(cd,ti,t,&cd->priMethods,"private-func");
generateXMLSection(cd,ti,t,&cd->priAttribs,"private-attrib");