Commit 0e7fba15 authored by dimitri's avatar dimitri

Release-1.1.2-20000417

parent 0001e1e2
DOXYGEN Version 1.1.2
DOXYGEN Version 1.1.2-20000417
CONTENTS
--------
......@@ -15,8 +15,8 @@ INSTALLATION INSTRUCTIONS FOR UNIX:
1. Unpack the archive, unless you already have:
gunzip doxygen-1.1.2.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2.src.tar # unpack it
gunzip doxygen-1.1.2-20000417.src.tar.gz # uncompress the archive
tar xf doxygen-1.1.2-20000417.src.tar # unpack it
2. Run the configure script:
......@@ -252,4 +252,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (09 April 2000)
Dimitri van Heesch (17 April 2000)
DOXYGEN Version 1.1.2
DOXYGEN Version 1.1.2-20000417
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (09 April 2000)
Dimitri van Heesch (17 April 2000)
1.1.2
1.1.2-20000417
......@@ -79,7 +79,7 @@
Although doxygen can be used in any C or C++ project, it was specifically
designed to be used for projects that make use of Troll Tech's
<A HREF="http://www.troll.no/qt">Qt toolkit</A>. I have tried to make doxygen
<A HREF="http://www.trolltech.com/products/qt.html">Qt toolkit</A>. I have tried to make doxygen
`Qt-compatible'. That is: Doxygen can read the documentation contained in
the Qt source code and create a class browser that looks very similar to the
one that is generated by Troll Tech. Doxygen understands the C++ extensions
......
......@@ -40,7 +40,7 @@ GNU General Public License</a>
for more details.
<p>
It is hereby explicitly allowed that this program may be linked against
<a href="http://www.troll.no/qt">Troll Tech's Qt library</a>,
<a href="http://www.trolltech.com/products/qt.html">Troll Tech's Qt library</a>,
and distributed, without the GPL applying to Qt.
<p>
Documents produced by Doxygen are derivative works derived from the
......
......@@ -25,8 +25,8 @@ to get the latest distribution and unpack it.
If you downloaded the source distribution, you need at least the
following to build the executable:
<UL>
<LI>Troll Tech's GUI toolkit <A HREF="http://www.troll.no/dl">Qt</A>
\latexonly(see {\tt http://www.troll.no/dl})\endlatexonly.
<LI>Troll Tech's GUI toolkit <A HREF="http://www.trolltech.com/products/qt.html">Qt</A>
\latexonly(see {\tt http://www.trolltech.com/products/qt.html})\endlatexonly.
\addindex Qt
<LI>The <a href="ftp://prep.ai.mit.edu/pub/gnu">GNU</a> tools
flex, bison and make
......
Name: doxygen
Version: 1.1.2
Version: 1.1.2-20000417
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -887,7 +887,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
<RemoveSpecialCComment>"//"|"/*"
<RemoveSpecialCComment>\n { g_yyLineNr++; }
<RemoveSpecialCComment>.
<*>\n({B}*"//"[!/][^\n]*\n)* { // remove special one-line comment
<*>\n({B}*"//"[!/][^\n]*\n)+ { // remove special one-line comment
if (Config::stripCommentsFlag)
{
g_yyLineNr+=((QCString)yytext).contains('\n');
......
......@@ -1651,10 +1651,58 @@ static void substEnvVarsInStrList(QStrList &sl)
QCString result(s);
substEnvVarsInString(result);
int l=result.length();
int i,p=0;
// skip spaces
// search for a "word"
for (i=0;i<l;i++)
{
char c;
// skip until start of new word
for (;i<l && ((c=result.at(i))==' ' || c=='\t');i++)
p=i; // p marks the start index of the word
// skip until end of a word
for (;i<l && ((c=result.at(i))!=' ' && c!='\t' && c!='"');i++);
if (i<l) // not at the end of the string
{
if (c=='"') // word within quotes
{
p=i+1;
for (i++;i<l;i++)
{
c=result.at(i);
if (c=='"') // end quote
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
p=i+1;
break;
}
else if (c=='\\') // skip escaped stuff
{
i++;
}
}
}
else if (c==' ' || c=='\t') // separator
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result); // insert new item before current item.
sl.insert(sl.at(),result.mid(p,i-p)); // insert new item before current item.
sl.next(); // current item is now the old item
int i=sl.at();
p=i+1;
}
}
}
if (p!=l) // add the leftover as a string
{
// replace the string in the list and go to the next item.
sl.insert(sl.at(),result.right(l-p)); // insert new item before current item.
sl.next(); // current item is now the old item
}
// remove the old unexpanded string from the list
i=sl.at();
sl.remove(); // current item index changes if the last element is removed.
if (sl.at()==i) // not last item
s = sl.current();
......
......@@ -863,7 +863,7 @@ static MemberDef *addVariableToClass(Entry *root,ClassDef *cd,
md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth);
md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setInitializer(root->initializer.simplifyWhiteSpace());
md->setInitializer(root->initializer);
//if (root->mGrpId!=-1)
//{
// printf("memberdef %s in memberGroup %d\n",name.data(),root->mGrpId);
......@@ -922,7 +922,7 @@ static MemberDef *addVariableToFile(Entry *root,MemberDef::MemberType mtype,
md->setFromAnnonymousMember(fromAnnMemb);
md->setIndentDepth(indentDepth);
md->setBodySegment(root->bodyLine,root->endBodyLine);
md->setInitializer(root->initializer.simplifyWhiteSpace());
md->setInitializer(root->initializer);
bool ambig;
FileDef *fd=findFileDef(&inputNameDict,root->fileName,ambig);
md->setBodyDef(fd);
......@@ -2010,7 +2010,7 @@ void addMemberDocs(Entry *root,MemberDef *md, const char *funcDecl,
if (md->initializer().isEmpty() && !root->initializer.isEmpty())
{
md->setInitializer(root->initializer.simplifyWhiteSpace());
md->setInitializer(root->initializer);
}
//if (md->bodyCode().isEmpty() && !root->body.isEmpty()) /* no body yet */
......
......@@ -605,7 +605,7 @@ void HtmlGenerator::startParameter(bool first)
if (first)
{
t << endl << "</b></td>" << endl;
t << "<td><b>" << endl;
t << "<td valign=bottom><b>" << endl;
}
else
{
......@@ -767,7 +767,7 @@ void HtmlGenerator::startMemberDoc(const char *,const char *,const char *,const
t << " <td class=\"md\"><b>" << endl;
t << " <table cellspadding=0 cellspacing=0 border=0>" << endl;
t << " <tr>" << endl;
t << " <td><b>" << endl;
t << " <td valign=top><b>" << endl;
}
void HtmlGenerator::endMemberDoc()
......
......@@ -1134,18 +1134,22 @@ void LatexGenerator::docify(const char *str)
void LatexGenerator::codify(const char *str)
{
static char spaces[]=" ";
if (str)
{
const char *p=str;
char c;
int spacesToNextTabStop;
while (*p)
{
c=*p++;
switch(c)
{
case 0x0c: break; // remove ^L
case '\t': t << &spaces[col&7]; col+=8-(col&7); break;
case '\t': spacesToNextTabStop =
Config::tabSize - (col%Config::tabSize);
t << spaces.left(spacesToNextTabStop);
col+=spacesToNextTabStop;
break;
case '\n': t << '\n'; col=0; break;
default: t << c; col++; break;
}
......
......@@ -224,8 +224,8 @@ void ManGenerator::codify(const char *str)
t << spaces.left(spacesToNextTabStop);
col+=spacesToNextTabStop;
break;
case '\n': t << "\n.br\n"; firstCol=TRUE; col=0; break;
case '\\': t << "\\\\"; col++; break;
case '\n': t << "\n"; firstCol=TRUE; col=0; break;
case '\\': t << "\\"; col++; break;
default: t << c; firstCol=FALSE; col++; break;
}
}
......
......@@ -107,7 +107,7 @@ class ManGenerator : public OutputGenerator
void startCodeFragment();
void endCodeFragment();
void startCodeLine() {}
void endCodeLine() { t << endl; }
void endCodeLine() { t << endl; col=0; }
void writeBoldString(const char *text)
{ t << "\\fB"; docify(text); t << "\\fR"; firstCol=FALSE; }
void startEmphasis() { t << "\\fI"; firstCol=FALSE; }
......
......@@ -157,6 +157,10 @@ static void writeDefArgumentList(OutputList &ol,ClassDef *cd,
ol.endParameter(FALSE);
}
}
ol.pushGeneratorState();
ol.disableAllBut(OutputGenerator::Html);
ol.writeString("&nbsp;");
ol.popGeneratorState();
ol.docify(")"); // end argument list
if (argList->constSpecifier)
{
......@@ -728,9 +732,17 @@ void MemberDef::writeDeclaration(OutputList &ol,
if (!init.isEmpty() && initLines==0) // add initializer
{
if (!isDefine()) ol.writeString(" = "); else ol.writeNonBreakableSpace();
if (!isDefine())
{
ol.writeString(" = ");
linkifyText(ol,cname,name(),init.simplifyWhiteSpace());
}
else
{
ol.writeNonBreakableSpace();
linkifyText(ol,cname,name(),init);
}
}
if (!detailsVisible && !Config::extractAllFlag && !annMemb)
{
......@@ -905,9 +917,17 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
writeDefArgumentList(ol,cd,scopeName,this);
if (!init.isEmpty() && initLines==0) // add initializer
{
if (!isDefine()) ol.docify(" = "); else ol.writeNonBreakableSpace();
if (!isDefine())
{
ol.docify(" = ");
linkifyText(ol,scopeName,name(),init.simplifyWhiteSpace());
}
else
{
ol.writeNonBreakableSpace();
linkifyText(ol,scopeName,name(),init);
}
}
if (excpString()) // add exception list
{
ol.docify(" ");
......@@ -975,7 +995,14 @@ void MemberDef::writeDocumentation(MemberList *ml,OutputList &ol,
parseText(ol,theTranslator->trInitialValue());
ol.endBold();
ol.startCodeFragment();
if (isDefine())
{
parseCode(ol,scopeName,init,FALSE,0);
}
else
{
parseCode(ol,scopeName,init.simplifyWhiteSpace(),FALSE,0);
}
ol.endCodeFragment();
}
......
......@@ -559,6 +559,8 @@ void MemberList::writeDeclarations(OutputList &ol,
ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
const char *title,const char *subtitle,bool inGroup)
{
//printf("MemberList::writeDeclaration(title=`%s',subtitle=`%s')\n",
// title,subtitle);
countDecMembers(inGroup);
if (totalCount()==0) return;
if (title)
......
......@@ -49,8 +49,6 @@
#define YY_NEVER_INTERACTIVE 1
/* -----------------------------------------------------------------
*
* statics
......@@ -874,7 +872,7 @@ SCOPENAME (({ID}?{BN}*"::"{BN}*)*)((~{BN}*)?{ID})
SCOPEMASK {ID}?(("::"|"#")?(~)?{ID})+
URLMASK [a-z_A-Z0-9\~\:\@\#\.\-\+\/]+
NONTERM [\{\}\[\]\`\~\@\|\-\+\#\$\/\\\!\%\^\&\*()a-z_A-Z<>0-9]
WORD ({NONTERM}+([^\n ]*{NONTERM}?))|("\""[^\n\"]"\"")
WORD ({NONTERM}+([^\n\t ]*{NONTERM}+)?)|("\""[^\n\"]"\"")
ATTR ({B}+[^>\n]*)?
A [aA]
BOLD [bB]
......@@ -1651,8 +1649,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
BEGIN(DocScan);
}
<DocRefName>{SCOPENAME}/{B}+"\"" {
<DocRefName>{SCOPENAME}{B}+/"\"" {
sectionRef=yytext;
sectionRef=sectionRef.stripWhiteSpace();
BEGIN(DocRefArgStart);
}
<DocRefArgStart>"\"" {
......@@ -2011,27 +2010,27 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
outDoc->endEmphasis();
BEGIN( DocScan );
}
<DocBold>{WORD} {
<DocBold>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
outDoc->startBold();
linkifyText(*outDoc,className,0,yytext);
generateRef(*outDoc,className,yytext,inSeeBlock);
outDoc->endBold();
BEGIN( DocScan );
}
<DocBold>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
<DocBold>{WORD} {
outDoc->startBold();
generateRef(*outDoc,className,yytext,inSeeBlock);
linkifyText(*outDoc,className,0,yytext);
outDoc->endBold();
BEGIN( DocScan );
}
<DocCode>{WORD} {
<DocCode>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
outDoc->startTypewriter();
linkifyText(*outDoc,className,0,yytext);
generateRef(*outDoc,className,yytext,inSeeBlock);
outDoc->endTypewriter();
BEGIN( DocScan );
}
<DocCode>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
<DocCode>{WORD} {
outDoc->startTypewriter();
generateRef(*outDoc,className,yytext,inSeeBlock);
linkifyText(*outDoc,className,0,yytext);
outDoc->endTypewriter();
BEGIN( DocScan );
}
......@@ -2091,12 +2090,9 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
<DocScan>{BN}+/\n {
outDoc->writeChar(' ');
}
<DocScan>{B}+ {
<DocScan>\n?{B}* {
outDoc->writeChar(' ');
}
<DocScan>\n {
outDoc->writeChar('\n');
}
<DocCode,DocEmphasis,DocBold,DocScan,Text>[a-z_A-Z0-9]+ {
outDoc->docify(yytext);
}
......@@ -3139,7 +3135,7 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
}
<Curly>. { current->program += yytext ; }
<FindMembers>"("({ID}{BN}*"::"{BN}*)*("*"{BN}*)+ {
<FindMembers>"("({BN}*{ID}{BN}*"::"{BN}*)*("*"{BN}*)+ {
current->bodyLine = yyLineNr;
lineCount();
addType(current);
......@@ -4261,6 +4257,8 @@ DOCPARAM ([a-z_A-Z0-9:\.\-]+)|("\"".*"\"")
memberGroupDocs+="\n\n";
}
memberGroupDocs+=current->doc;
current->doc.resize(0);
current->brief.resize(0);
BEGIN(lastDocContext);
}
<ExampleDoc,Doc,PageDoc,JavaDoc,ClassDoc>{CMD}"anchor"{B}+ {
......
......@@ -252,7 +252,7 @@ bool leftScopeMatch(const QCString &scope, const QCString &name)
void linkifyText(OutputList &ol,const char *scName,const char *name,const char *text)
{
//printf("scope=`%s' name=`%s' Text: `%s'\n",scName,name,text);
static QRegExp regExp("[a-z_A-Z0-9:]+");
static QRegExp regExp("[a-z_A-Z][a-z_A-Z0-9:]*");
QCString txtStr=text;
OutputList result(&ol);
int matchLen;
......@@ -860,8 +860,8 @@ static void trimNamespaceScope(QCString &t1,QCString &t2)
int p2=t2.length();
for (;;)
{
int i1=t1.findRev("::",p1);
int i2=t2.findRev("::",p2);
int i1=p1==0 ? -1 : t1.findRev("::",p1);
int i2=p2==0 ? -1 : t2.findRev("::",p2);
if (i1==-1 && i2==-1)
{
return;
......
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