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

Release-1.3.4-20031019

parent 089a5c16
DOXYGEN Version 1.3.4-20031005
DOXYGEN Version 1.3.4-20031019
Please read the installation section of the manual
(http://www.doxygen.org/install.html) for instructions.
--------
Dimitri van Heesch (05 October 2003)
Dimitri van Heesch (19 October 2003)
DOXYGEN Version 1.3.4_20031005
DOXYGEN Version 1.3.4_20031019
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) (05 October 2003)
Dimitri van Heesch (dimitri@stack.nl) (19 October 2003)
1.3.4-20031005
1.3.4-20031019
......@@ -55,6 +55,7 @@ Below is an alphabetical index of the tags that are recognized
followed by the descriptions of the tags grouped by category.
\secreflist
\refitem cfg_abbreviate_brief ABBREVIATE_BRIEF
\refitem cfg_aliases ALIASES
\refitem cfg_allexternals ALLEXTERNALS
\refitem cfg_alphabetical_index ALPHABETICAL_INDEX
......@@ -200,7 +201,7 @@ followed by the descriptions of the tags grouped by category.
\refitem cfg_warnings WARNINGS
\refitem cfg_xml_dtd XML_DTD
\refitem cfg_xml_output XML_OUTPUT
\refitem cfg_xml_programlising XML_PROGRAMLISTING
\refitem cfg_xml_programlisting XML_PROGRAMLISTING
\refitem cfg_xml_schema XML_SCHEMA
\endsecreflist
......@@ -272,6 +273,18 @@ followed by the descriptions of the tags grouped by category.
If both \c HIDE_UNDOC_MEMBERS and \c BRIEF_MEMBER_DESC are set to \c NO, the
brief descriptions will be completely suppressed.
\anchor cfg_abbreviate_brief
<dt>\c ABBREVIATE_BRIEF <dd>
\addindex ABBREVIATE_BRIEF
This tag implements a quasi-intelligent brief description abbreviator
that is used to form the text in various listings. Each string
in this list, if found as the leading text of the brief description, will be
stripped from the text and the result after processing the whole list, is used
as the annotated text. Otherwise, the brief description is used as-is. If left
blank, the following values are used ("\$name" is automatically replaced with the
name of the entity): "The $name class" "The $name widget" "The $name file"
"is" "provides" "specifies" "contains" "represents" "a" "an" "the".
\anchor cfg_always_detailed_sec
<dt>\c ALWAYS_DETAILED_SEC <dd>
\addindex ALWAYS_DETAILED_SEC
......
......@@ -25,7 +25,7 @@ Doxygen has built-in support for multiple languages. This means
that the text fragments that doxygen generates can be produced in
languages other than English (the default) at configuration time.
Currently (version unknown), 29 languages
Currently (version 1.3.3), 29 languages
are supported (sorted alphabetically):
Brazilian Portuguese, Catalan, Chinese, Chinese Traditional, Croatian,
Czech, Danish, Dutch, English, Finnish,
......@@ -73,7 +73,7 @@ when the translator was updated.
<TD>Chinese Traditional</TD>
<TD>Daniel YC Lin<br>Gary Lee</TD>
<TD>daniel@NOSPAM.twpda.com<br>garylee@NOSPAM.ecosine.com.tw</TD>
<TD>1.3.3</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Croatian</TD>
......@@ -91,7 +91,7 @@ when the translator was updated.
<TD>Danish</TD>
<TD>Erik S&oslash;e S&oslash;rensen</TD>
<TD>erik@NOSPAM.mail.nu</TD>
<TD>strange</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Dutch</TD>
......@@ -187,7 +187,7 @@ when the translator was updated.
<TD>Russian</TD>
<TD>Alexandr Chelpanov</TD>
<TD>cav@NOSPAM.cryptopro.ru</TD>
<TD>strange</TD>
<TD>up-to-date</TD>
</TR>
<TR BGCOLOR="#ffffff">
<TD>Serbian</TD>
......@@ -243,14 +243,14 @@ when the translator was updated.
Chinese & Wei Liu & {\tt liuwei@asiainfo.com} & 1.2.13 \\
& Wang Weihan & {\tt wangweihan@capinfo.com.cn} & \\
\hline
Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & 1.3.3 \\
Chinese Traditional & Daniel YC Lin & {\tt daniel@twpda.com} & up-to-date \\
& Gary Lee & {\tt garylee@ecosine.com.tw} & \\
\hline
Croatian & Boris Bralo & {\tt boris.bralo@zg.tel.hr} & up-to-date \\
\hline
Czech & Petr P\v{r}ikryl & {\tt prikrylp@skil.cz} & up-to-date \\
\hline
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & strange \\
Danish & Erik S\o{}e S\o{}rensen & {\tt erik@mail.nu} & up-to-date \\
\hline
Dutch & Dimitri van Heesch & {\tt dimitri@stack.nl} & up-to-date \\
\hline
......@@ -285,7 +285,7 @@ when the translator was updated.
\hline
Romanian & Alexandru Iosup & {\tt aiosup@yahoo.com} & 1.2.16 \\
\hline
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & strange \\
Russian & Alexandr Chelpanov & {\tt cav@cryptopro.ru} & up-to-date \\
\hline
Serbian & Dejan Milosavljevic & {\tt dmilos@email.com} & 1.3.3 \\
\hline
......
Summary: A documentation system for C/C++.
Name: doxygen
Version: 1.3.4_20031005
Version: 1.3.4_20031019
Release: 1
Epoch: 1
Source0: ftp://ftp.stack.nl/pub/users/dimitri/%{name}-%{version}.src.tar.gz
......
......@@ -72,6 +72,7 @@ class ClassDef : public Definition
QCString getSourceFileBase() const;
QCString getReference() const;
bool isReference() const;
bool isLocal() const { return m_isLocal; }
bool hasDocumentation() const;
......
......@@ -71,7 +71,11 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
)
{
bool isLink = cd->isLinkable();
if (isLink || !Config_getBool("HIDE_UNDOC_CLASSES"))
if (isLink ||
(!Config_getBool("HIDE_UNDOC_CLASSES") &&
(!cd->isLocal() || Config_getBool("EXTRACT_LOCAL_CLASSES"))
)
)
{
if (!found)
{
......@@ -127,8 +131,10 @@ void ClassSDict::writeDeclaration(OutputList &ol,const ClassDef::CompoundType *f
ol.startMemberDescription();
ol.parseDoc(cd->briefFile(),cd->briefLine(),cd,0,
cd->briefDescription(),FALSE,FALSE);
if ((!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
!cd->documentation().isEmpty())
if (//(!cd->briefDescription().isEmpty() && Config_getBool("REPEAT_BRIEF")) ||
//!cd->documentation().isEmpty())
cd->isLinkableInProject()
)
{
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
......
......@@ -1245,6 +1245,22 @@ void Config::check()
Config_getBool("INLINE_INFO")=FALSE;
}
// add default words if needed
QStrList &annotationFromBrief = Config_getList("ABBREVIATE_BRIEF");
if (annotationFromBrief.isEmpty())
{
annotationFromBrief.append("The $name class");
annotationFromBrief.append("The $name widget");
annotationFromBrief.append("The $name file");
annotationFromBrief.append("is");
annotationFromBrief.append("provides");
annotationFromBrief.append("specifies");
annotationFromBrief.append("contains");
annotationFromBrief.append("represents");
annotationFromBrief.append("a");
annotationFromBrief.append("an");
annotationFromBrief.append("the");
}
}
void Config::init()
......@@ -1419,6 +1435,17 @@ void Config::create()
"brief descriptions will be completely suppressed. \n",
TRUE
);
cl = addList(
"ABBREVIATE_BRIEF",
"This tag implements a quasi-intelligent brief description abbreviator \n"
"that is used to form the text in various listings. Each string \n"
"in this list, if found as the leading text of the brief description, will be \n"
"stripped from the text and the result after processing the whole list, is used \n"
"as the annotated text. Otherwise, the brief description is used as-is. If left \n"
"blank, the following values are used (\"$name\" is automatically replaced with the \n"
"name of the entity): \"The $name class\" \"The $name widget\" \"The $name file\" \n"
"\"is\" \"provides\" \"specifies\" \"contains\" \"represents\" \"a\" \"an\" \"the\"\n"
);
cb = addBool(
"ALWAYS_DETAILED_SEC",
"If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then \n"
......
......@@ -1218,6 +1218,8 @@ DocAnchor::DocAnchor(DocNode *parent,const QString &id,bool newAnchor)
else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid anchor id `%s'",id.data());
m_anchor = "invalid";
m_file = "invalid";
}
}
}
......@@ -4730,7 +4732,7 @@ void DocRoot::parse()
}
else
{
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid anchor id `%s'; ignoring section",g_token->sectionId.data());
warn_doc_error(g_fileName,doctokenizerYYlineno,"Warning: Invalid section id `%s'; ignoring section",g_token->sectionId.data());
retval = 0;
}
}
......
......@@ -248,9 +248,9 @@ class DirEntry
{
public:
enum EntryKind { Dir, File };
DirEntry::DirEntry(DirEntry *parent,FileDef *fd)
DirEntry(DirEntry *parent,FileDef *fd)
: m_parent(parent), m_kind(File), m_fd(fd), m_isLast(FALSE) { }
DirEntry::DirEntry(DirEntry *parent)
DirEntry(DirEntry *parent)
: m_parent(parent), m_kind(Dir), m_fd(0), m_isLast(FALSE) { }
virtual ~DirEntry() { }
EntryKind kind() const { return m_kind; }
......
......@@ -749,7 +749,7 @@ void FTVHelp::generateTreeView()
t << " </script>\n";
t << " </head>\n";
t << "\n";
t << " <body bgcolor=\"#ffffff\">\n";
t << " <body>\n";
t << " <div class=\"directory\">\n";
t << " <h3>";
QCString &projName = Config_getString("PROJECT_NAME");
......
......@@ -205,7 +205,8 @@ bool GroupDef::insertMember(MemberDef *md,bool docOnly)
(srcMd->getOuterScope()->definitionType()==Definition::TypeFile &&
md->getOuterScope()->definitionType()==Definition::TypeFile);
if (matchArguments(srcMd->argumentList(),md->argumentList()) &&
if (srcMd->isFunction() && md->isFunction() &&
matchArguments(srcMd->argumentList(),md->argumentList()) &&
sameScope
)
{
......@@ -690,7 +691,8 @@ void addGroupToGroups(Entry *root,GroupDef *subGroup)
/*! Add a member to the group with the highest priority */
void addMemberToGroups(Entry *root,MemberDef *md)
{
//printf(" Root %p = %s, md %p=%s groups=%d\n", root, root->name.data(), md, md->name().data(), root->groups->count() );
//printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%d\n",
// root, root->name.data(), md, md->name().data(), root->groups->count() );
QListIterator<Grouping> gli(*root->groups);
Grouping *g;
......
......@@ -20,6 +20,7 @@
#include <qtextstream.h>
#include <qdatetime.h>
#include <qdir.h>
#include <qregexp.h>
#include "message.h"
#include "index.h"
......@@ -136,34 +137,28 @@ bool stripWord(QCString &s,QCString w)
// some quasi intelligent brief description abbreviator :^)
QCString abbreviate(const char *s,const char *name)
{
QCString scopelessName=name;
int i=scopelessName.findRev("::");
if (i!=-1) scopelessName=scopelessName.mid(i);
QCString result=s;
QCString start1=(QCString)"The "+name+" class ";
QCString start2=(QCString)"The "+name+" widget ";
QCString start3=(QCString)"The "+name+" file ";
result=result.stripWhiteSpace();
// strip trailing .
if (!result.isEmpty() && result.at(result.length()-1)=='.')
result=result.left(result.length()-1);
bool found=FALSE;
found = found || stripWord(result,start1);
found = found || stripWord(result,start2);
found = found || stripWord(result,start3);
if (found)
// strip any predefined prefix
QStrList &briefDescAbbrev = Config_getList("ANNOTATION_FROM_BRIEF");
const char *p = briefDescAbbrev.first();
while (p)
{
bool found=FALSE;
found = found || stripWord(result,"is ");
found = found || stripWord(result,"provides ");
found = found || stripWord(result,"specifies ");
found = found || stripWord(result,"contains ");
found = found || stripWord(result,"represents ");
found = found || stripWord(result,"implements ");
if (found)
{
stripWord(result,"a ");
stripWord(result,"an ");
stripWord(result,"the ");
}
QCString s = p;
s.replace(QRegExp("\\$name"), scopelessName); // replace $name with entity name
s += " ";
stripWord(result,s);
p = briefDescAbbrev.next();
}
// capitalize first word
if (!result.isEmpty())
{
int c=result[0];
......@@ -1320,13 +1315,13 @@ void writeAnnotatedClassList(OutputList &ol)
void writeAlphabeticalClassList(OutputList &ol)
{
//ol.startAlphabeticalIndexList();
ol.writeString("<table align=center width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
// first count the number of headers
ClassSDict::Iterator cli(Doxygen::classSDict);
ClassDef *cd;
char startLetter=0;
int headerItems=0;
QCString alphaLinks = "<p><div class=\"qindex\">";
for (;(cd=cli.current());++cli)
{
if (cd->isLinkableInProject() && cd->templateMaster()==0)
......@@ -1336,10 +1331,18 @@ void writeAlphabeticalClassList(OutputList &ol)
if (toupper(cd->className().at(index))!=startLetter) // new begin letter => new header
{
startLetter=toupper(cd->className().at(index));
if (headerItems) alphaLinks += "&nbsp;|&nbsp;";
headerItems++;
alphaLinks += (QCString)"<a class=\"qindex\" href=\"#letter_" +
startLetter + "\">" +
startLetter + "</a>";
}
}
}
alphaLinks += "</div><p>\n";
ol.writeString(alphaLinks);
ol.writeString("<table align=center width=\"95%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
// the number of columns in the table
const int columns = Config_getInt("COLS_IN_ALPHA_INDEX");
......@@ -1419,6 +1422,9 @@ void writeAlphabeticalClassList(OutputList &ol)
startLetter=toupper(cd->className().at(index));
char s[2]; s[0]=startLetter; s[1]=0;
//ol.writeIndexHeading(s);
ol.writeString("<a name=\"letter_");
ol.writeString(s);
ol.writeString("\"></a>");
ol.writeString("<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"
"<tr>"
"<td><div class=\"ah\">&nbsp;&nbsp;");
......@@ -1476,6 +1482,8 @@ void writeAlphabeticalClassList(OutputList &ol)
}
//ol.endAlphabeticalIndexList();
ol.writeString("</table>");
ol.writeString(alphaLinks);
// release the temporary memory
for (i=0;i<columns;i++)
......
This diff is collapsed.
......@@ -1739,14 +1739,14 @@ void MemberDef::warnIfUndocumented()
// "isDocumentedFriendClass()=%d name()=%s prot=%d\n",
// d->isLinkable(),isLinkable(),isDocumentedFriendClass(),
// name().data(),prot);
if (/*d && d->isLinkable() &&*/ !isLinkable() &&
if (!isLinkable() &&
!isDocumentedFriendClass() &&
name().find('@')==-1 &&
name().find('@')==-1 && d->name().find('@')==-1 &&
(prot!=Private || Config_getBool("EXTRACT_PRIVATE"))
)
{
warn_undoc(m_defFileName,m_defLine,"Warning: Member %s%s of %s %s is not documented.",
name().data(),argsString()?argsString():"",t,d->name().data());
warn_undoc(m_defFileName,m_defLine,"Warning: Member %s%s of %s %s is not documented.",
name().data(),argsString()?argsString():"",t,d->name().data());
}
}
......
......@@ -1669,7 +1669,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
outputArray(yytext,yyleng);
BEGIN(SkipCComment);
}
<SkipCComment,SkipVerbatim>[^*\n\/]+ {
<SkipCComment,SkipVerbatim>[^*\x06\n\/]+ {
outputArray(yytext,yyleng);
}
<SkipCComment,SkipVerbatim>\n {
......@@ -1682,7 +1682,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<RemoveCComment>"*/" { BEGIN(g_lastCContext); }
<RemoveCComment>"//"
<RemoveCComment>"/*"
<RemoveCComment>[^*\n]+
<RemoveCComment>[^*\x06\n]+
<RemoveCComment>\n { g_yyLineNr++; outputChar('\n'); }
<RemoveCComment>.
<SkipCPPComment,RemoveCPPComment>\n {
......@@ -1695,7 +1695,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
<SkipCPPComment>"//" {
outputChar('/');outputChar('/');
}
<SkipCPPComment>[^\n]+ {
<SkipCPPComment>[^\x06\n]+ {
outputArray(yytext,yyleng);
}
<SkipCPPComment>. {
......@@ -1703,7 +1703,7 @@ CHARLIT (("'"\\[0-7]{1,3}"'")|("'"\\."'")|("'"[^'\\\n]{1,4}"'"))
}
<RemoveCPPComment>"/*"
<RemoveCPPComment>"//"
<RemoveCPPComment>[^\n]+
<RemoveCPPComment>[^\x06\n]+
<RemoveCPPComment>.
<DefineText>"#" {
g_quoteArg=TRUE;
......
......@@ -74,7 +74,7 @@ function search($file,$word,&$statsList)
$freq=readInt($file);
$docInfo[$i]=array("idx"=>$idx,"freq"=>$freq,"rank"=>0.0);
$totalFreq+=$freq;
if ($statInfo["full"]) $totalfreq+=$freq;
if ($statInfo["full"]) $totalFreq+=$freq;
}
// read name an url info for the doc
for ($i=0;$i<$numDocs;$i++)
......
......@@ -74,7 +74,7 @@
" $freq=readInt($file); \n"
" $docInfo[$i]=array(\"idx\"=>$idx,\"freq\"=>$freq,\"rank\"=>0.0);\n"
" $totalFreq+=$freq;\n"
" if ($statInfo[\"full\"]) $totalfreq+=$freq;\n"
" if ($statInfo[\"full\"]) $totalFreq+=$freq;\n"
" }\n"
" // read name an url info for the doc\n"
" for ($i=0;$i<$numDocs;$i++)\n"
......
......@@ -69,9 +69,9 @@ void SearchIndex::setCurrentDoc(const char *name,const char *url)
static int charsToIndex(const char *word)
{
if (word==0) return -1;
int c1=word[0];
uint c1=word[0];
if (c1==0) return -1;
int c2=word[1];
uint c2=word[1];
if (c2==0) return -1;
return c1*256+c2;
}
......@@ -82,7 +82,7 @@ void SearchIndex::addWord(const char *word)
if (w==0)
{
int idx=charsToIndex(word);
if (idx==-1) return;
if (idx<0) return;
w = new IndexWord(word);
//printf("addWord(%s) at index %d\n",word,idx);
m_index[idx]->append(w);
......
This diff is collapsed.
......@@ -88,24 +88,6 @@ inline void writeXMLCodeString(QTextStream &t,const char *s)
static void writeXMLHeader(QTextStream &t)
{
//QCString dtdName = Config_getString("XML_DTD");
//QCString schemaName = Config_getString("XML_SCHEMA");
//t << "<?xml version='1.0' encoding='" << theTranslator->idLanguageCharset()
// << "' standalone='";
//if (dtdName.isEmpty() && schemaName.isEmpty()) t << "yes"; else t << "no";
//t << "'?>" << endl;
//if (!dtdName.isEmpty())
//{
// t << "<!DOCTYPE doxygen SYSTEM \"doxygen.dtd\">" << endl;
//}
//t << "<doxygen ";
//if (!schemaName.isEmpty())
//{
// t << "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
// t << "xsi:noNamespaceSchemaLocation=\"doxygen.xsd\" ";
//}
//t << "version=\"" << versionString << "\">" << endl;
t << "<?xml version='1.0' encoding='" << theTranslator->idLanguageCharset()
<< "' standalone='no'?>" << endl;;
t << "<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
......@@ -113,6 +95,38 @@ static void writeXMLHeader(QTextStream &t)
t << "version=\"" << versionString << "\">" << endl;
}
static void writeCombineScript()
{
QCString outputDirectory = Config_getString("XML_OUTPUT");
QCString fileName=outputDirectory+"/combine.xslt";
QFile f(fileName);
if (!f.open(IO_WriteOnly))
{
err("Cannot open file %s for writing!\n",fileName.data());
return;
}
QTextStream t(&f);
t.setEncoding(QTextStream::Latin1);
t <<
"<!-- XSLT script to combine the generated output into a single file. \n"
" If you have xsltproc you could use:\n"
" xsltproc combine.xslt index.xml >all.xml\n"
"-->\n"
"<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
" <xsl:output method=\"xml\" version=\"1.0\" indent=\"yes\" standalone=\"yes\" />\n"
" <xsl:template match=\"/\">\n"
" <doxygen version=\"{doxygenindex/@version}\">\n"
" <!-- Load all doxgen generated xml files -->\n"
" <xsl:for-each select=\"doxygenindex/compound\">\n"
" <xsl:copy-of select=\"document( concat( @refid, '.xml' ) )/doxygen/*\" />\n"
" </xsl:for-each>\n"
" </doxygen>\n"
" </xsl:template>\n"
"</xsl:stylesheet>\n";
}
void writeXMLLink(QTextStream &t,const char *extRef,const char *compoundId,
const char *anchorId,const char *text)
{
......@@ -1569,6 +1583,8 @@ void generateXML()
//t << " </compoundlist>" << endl;
t << "</doxygenindex>" << endl;
writeCombineScript();
}
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