Commit 5ad8b41e authored by Dimitri van Heesch's avatar Dimitri van Heesch

Release-1.2.0-20000731

parent 7ce8e31b
DOXYGEN Version 1.2.0
DOXYGEN Version 1.2.0-20000731
Please read the installation section of the manual for instructions.
--------
Dimitri van Heesch (30 July 2000)
Dimitri van Heesch (31 July 2000)
DOXYGEN Version 1.2.0
DOXYGEN Version 1.2.0-20000731
Please read INSTALL for compilation instructions.
......@@ -7,4 +7,4 @@ The latest version of doxygen can be obtained at
Enjoy,
Dimitri van Heesch (30 July 2000)
Dimitri van Heesch (31 July 2000)
1.2.0
1.2.0-20000731
......@@ -272,6 +272,8 @@ void writeTemplateConfig(QFile *f,bool sl)
t << "# All text after a hash (#) is considered a comment and will be ignored\n";
t << "# The format is:\n";
t << "# TAG = value [value, ...]\n";
t << "# For lists items can also be appended using:\n";
t << "# TAG += value [value, ...]\n";
t << "# Values that contain spaces should be placed between quotes (\" \")\n";
}
#CONFIG Template
......
......@@ -27,7 +27,7 @@
#include <stdio.h>
#include <stdlib.h>
#define MAX_OPTION_LENGTH 22
#define MAX_OPTION_LENGTH 23
static QString spaces=" ";
......@@ -259,10 +259,17 @@ class ConfigList : public ConfigOption
const char * short_,const char * long_,WidgetType w=String);
virtual void printRules(QTextStream &t)
{
// rule for assignment
t << "<Start>\"" << cfgName << "\"[ \\t]*\"=\"";
t << spaces.left(MAX_OPTION_LENGTH-cfgName.length());
t << "{ BEGIN(GetStrList); l=&Config::" << varName;
t << "; l->clear(); elemStr=\"\"; }" << endl;
// rule for appending
t << "<Start>\"" << cfgName << "\"[ \\t]*\"+=\"";
t << spaces.left(MAX_OPTION_LENGTH-cfgName.length()-1);
t << "{ BEGIN(GetStrList); l=&Config::" << varName;
t << "; elemStr=\"\"; }" << endl;
}
virtual void printInit(QTextStream &t)
{
......
......@@ -2,7 +2,7 @@ This is a small utility that is used to test and validate the
XML output generated by doxygen (when GENERATE_XML = YES).
It uses the Xerces-C XML parser/validator (see http://xml.apache.org)
and expects the environment variable XERCES_ROOT to point to the root
and expects the environment variable XERCESCROOT to point to the root
of the Xerces package.
Currently is reads an XML file, validates it, and prints the class
......
......@@ -3,5 +3,5 @@ CONFIG = console qt warn_on debug
HEADERS = saxhandler.h strx.h compounddef.h
SOURCES = main.cpp \
saxhandlers.cpp
LIBS = -lxerces-c1_1 -L$(XERCES_ROOT)
INCLUDEPATH = $(XERCES_ROOT)/include
LIBS = -lxerces-c1_2 -L$(XERCESCROOT)/lib
INCLUDEPATH = $(XERCESCROOT)/include
......@@ -30,12 +30,15 @@ line.
The file essentially consists of a list of assignment statements.
Each statement consists of a \c TAG_NAME written in capitals,
followed by the \c = character and one or more values.
Values are sequences of non-blanks. If the value should contain one or more
blanks it must be surrounded by quotes (&quot;...&quot;).
followed by the <code>=</code> character and one or more values. If the same tag
is assigned more than once, the last assignment overwrites any earlier
assignment. For options that take a list as their argument,
the <code>+=</code> operator can be used instead of <code>=</code> to append
new values to the list. Values are sequences of non-blanks. If the value should
contain one or more blanks it must be surrounded by quotes (&quot;...&quot;).
Multiple lines can be concatenated by inserting a backslash (\\)
as the last character of a line.
Environment variables can expanded using the pattern \c $(ENV_VARIABLE_NAME).
as the last character of a line. Environment variables can be expanded
using the pattern \c $(ENV_VARIABLE_NAME).
The configuration options can be divided into several categories.
Below is an alphabetical index of the tags that are recognized
......
Name: doxygen
Version: 1.2.0
Version: 1.2.0-20000731
Summary: documentation system for C, C++ and IDL
Release: 1
Source0: doxygen-%{version}.src.tar.gz
......
......@@ -281,12 +281,23 @@ static void addVariable()
}
else
{
//printf("adding variable `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
int i;
if ((getResolvedClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
//printf("adding variable `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
g_cvd.classScope=g_classScope;
g_codeVarList.append(new CodeVarDef(g_cvd)); // add it to a list
}
else if ((i=g_cvd.type.find('<'))>0)
{
g_cvd.type = g_cvd.type.left(i);
if ((getResolvedClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type.left(i)]))
{
//printf("adding template type variable `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
g_cvd.classScope=g_classScope;
g_codeVarList.append(new CodeVarDef(g_cvd));
}
}
}
}
......@@ -300,12 +311,23 @@ static void addParameter()
}
else
{
//printf("adding parameter `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
if ((getClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
int i;
if ((getResolvedClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type]))
{
//printf("adding parameter `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
g_cvd.classScope=g_classScope;
g_codeParmList.append(new CodeVarDef(g_cvd)); // add it to a list
}
else if ((i=g_cvd.type.find('<'))>0)
{
g_cvd.type = g_cvd.type.left(i);
if ((getResolvedClass(g_cvd.type)) || (g_codeClassDict[g_cvd.type.left(i)]))
{
//printf("adding template type parameter `%s' `%s'\n",g_cvd.type.data(),g_cvd.name.data());
g_cvd.classScope=g_classScope;
g_codeParmList.append(new CodeVarDef(g_cvd));
}
}
}
}
......@@ -948,15 +970,11 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
addType();
g_name+=yytext;
}
/*
<Body>{SCOPETNAME}/{B}* {
int i;
generateClassLink(*g_code,yytext,&i);
<Body>{SCOPENAME}{B}*"<"[^\n\>]*">"/{B}* { // A<T> *pt;
generateClassLink(*g_code,yytext);
addType();
QCString text=yytext;
g_name+=text.left(i);
}
*/
g_name+=yytext;
}
<Body>{SCOPENAME}/{B}* { // p->func()
generateClassLink(*g_code,yytext);
addType();
......@@ -1094,7 +1112,7 @@ TYPEKW ("bool"|"char"|"double"|"float"|"int"|"long"|"short"|"signed"|"unsigned"
g_code->codify(yytext);
endFontClass();
}
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]* {
<MemberCall2,FuncCall>[a-z_A-Z][:a-z_A-Z0-9]*({B}*"<"[^\n\>]*">")? {
addParmType();
g_parmName=yytext;
generateClassLink(*g_code,yytext);
......
/* This file was generated by configgen on Fri Jul 28 19:43:36 2000
/* This file was generated by configgen on Mon Jul 31 16:07:18 2000
* from config_templ.h
*
* DO NOT EDIT!
......
This diff is collapsed.
......@@ -189,7 +189,7 @@ void FormulaList::generateBitmaps(const char *path)
"gswin32.exe", /* file to execute */
gsArgs, /* argument list */
NULL, /* use current working dir */
SW_HIDE /* minimize on start-up */
SW_HIDE, /* minimize on start-up */
0, /* application instance handle */
NULL, /* ignored: id list */
NULL, /* ignored: class name */
......
......@@ -586,18 +586,38 @@ static void newDocState();
//-----------------------------------------------------------------
static QStack<int> listIndentStack;
struct IndentInfo
{
public:
IndentInfo(int i,bool e) : indent(i), enumerated(e) {};
~IndentInfo() {}
void startList()
{
if (enumerated) outDoc->startEnumList(); else outDoc->startItemList();
}
void endList()
{
if (enumerated) outDoc->endEnumList(); else outDoc->endItemList();
}
void writeItem()
{
outDoc->writeListItem();
}
int indent;
bool enumerated;
};
static QStack<IndentInfo> listIndentStack;
static bool insideItemList = FALSE;
static void addListItemMarker(const char *marker)
static void addListItemMarker(const char *marker,int dashPos,bool enumerated)
{
// find the actual position at which the bullet was found
int i;
int indent=0;
const char *p=marker;
char c;
while ((c=*p++))
for (i=0;i<dashPos;i++)
{
if (c=='\t')
if (marker[i]=='\t')
{
indent+=Config::tabSize - (indent%Config::tabSize);
}
......@@ -606,32 +626,42 @@ static void addListItemMarker(const char *marker)
indent++;
}
}
//printf("list marker found at column %d\n",indent);
//printf("list marker found at column %d enumerated %d\n",indent,enumerated);
if (!insideItemList)
{
outDoc->startItemList();
outDoc->writeListItem();
listIndentStack.push(new int(indent));
listIndentStack.push(new IndentInfo(indent,enumerated));
listIndentStack.top()->startList();
listIndentStack.top()->writeItem();
insideItemList=TRUE;
}
else
{
int *pPrevIndent = listIndentStack.top();
if (*pPrevIndent==indent) // new item at the same indent level
IndentInfo *pPrevInfo = listIndentStack.top();
if (pPrevInfo->indent==indent && pPrevInfo->enumerated==enumerated)
// new item of same kind at the same indent level
{
outDoc->writeListItem();
pPrevInfo->writeItem();
}
else if (*pPrevIndent<indent) // start sub item list
else if (pPrevInfo->indent==indent)
// new item of diffent kind at the same indent level
{
outDoc->startItemList();
outDoc->writeListItem();
listIndentStack.push(new int(indent));
// switch to a diffent list type
pPrevInfo->endList();
pPrevInfo->enumerated=enumerated;
pPrevInfo->startList();
pPrevInfo->writeItem();
}
else if (pPrevInfo->indent<indent) // start sub item list
{
listIndentStack.push(new IndentInfo(indent,enumerated));
listIndentStack.top()->startList();
listIndentStack.top()->writeItem();
}
else // end sub item list
{
pPrevInfo->endList();
listIndentStack.pop();
delete pPrevIndent;
outDoc->endItemList();
delete pPrevInfo;
// safe guard against wrong indenting
if (listIndentStack.isEmpty())
{
......@@ -641,35 +671,24 @@ static void addListItemMarker(const char *marker)
}
else
{
outDoc->writeListItem();
listIndentStack.top()->writeItem();
}
}
}
}
// end the current (nested) list regardless of the nesting level.
static void forceEndItemList()
{
int *indent;
while ((indent=listIndentStack.pop())!=0)
IndentInfo *info;
while ((info=listIndentStack.pop())!=0)
{
outDoc->endItemList();
delete indent;
info->endList();
delete info;
}
insideItemList=FALSE;
}
#if 0
static void tryEndItemList()
{
if (listIndentStack.count()==1) // no subitems => end list
{
outDoc->endItemList();
delete listIndentStack.pop();
insideItemList=FALSE;
}
}
#endif
//-----------------------------------------------------------------
static bool inBlock()
......@@ -1144,25 +1163,19 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
BEGIN( FindMembers );
}
<*>\x0d
/*
<DocScan>^{BL} {
if (insideArgumentList)
{
insideArgumentList=FALSE;
outDoc->endItemList();
}
else
{
outDoc->newParagraph();
}
if (inBlock()) endBlock();
}
*/
<DocScan>^{B}*(("//"{B}*)?)"*"*{B}*"-"{B}+ { /* found list item marker */
addListItemMarker(yytext);
}
<DocScan>\n{B}*(("//"{B}*)?)"*"*{B}*"-"{B}+ {
addListItemMarker(yytext+1);
<DocScan>^{B}*(("//"{B}*)?)"*"*{B}*"-"("#")?{B}+ { /* found list item marker */
QCString text=yytext;
int dashPos = text.findRev('-');
//printf("dashPos=%d char='%c'\n",dashPos,text.at(dashPos+1));
bool isEnumerated = text.at(dashPos+1)=='#';
addListItemMarker(yytext,dashPos,isEnumerated);
}
<DocScan>\n{B}*(("//"{B}*)?)"*"*{B}*"-"("#")?{B}+ { /* found list item marker */
QCString text=yytext;
int dashPos = text.findRev('-');
//printf("dashPos=%d char='%c'\n",dashPos,text.at(dashPos+1));
bool isEnumerated = text.at(dashPos+1)=='#';
addListItemMarker(yytext+1,dashPos,isEnumerated);
}
<DocScan,Text>"&copy;" { outDoc->writeCopyright(); }
<DocScan,Text>"&quot;" { outDoc->writeQuote(); }
......@@ -2222,19 +2235,19 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
<DocScan>"%"[a-zA-Z_0-9\-]+ {
outDoc->docify(yytext+1);
}
<DocEmphasis>{WORD} {
<DocEmphasis>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" {
outDoc->startEmphasis();
linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE);
generateRef(*outDoc,className,yytext,inSeeBlock);
outDoc->endEmphasis();
BEGIN( DocScan );
}
<DocEmphasis>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
}
<DocEmphasis>{WORD} {
outDoc->startEmphasis();
generateRef(*outDoc,className,yytext,inSeeBlock);
linkifyText(TextGeneratorOLImpl(*outDoc),className,0,yytext,FALSE,FALSE);
outDoc->endEmphasis();
BEGIN( DocScan );
}
<DocBold>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
}
<DocBold>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" {
outDoc->startBold();
generateRef(*outDoc,className,yytext,inSeeBlock);
outDoc->endBold();
......@@ -2246,7 +2259,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->endBold();
BEGIN( DocScan );
}
<DocCode>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()|\*/]*"()" {
<DocCode>[a-z_A-Z][a-z_A-Z:0-9<>&\-=^%~!\[\]()!\*/]*"("[a-z_A-Z0-9,:\<\> \t\*\&]*")" {
outDoc->startTypewriter();
generateRef(*outDoc,className,yytext,inSeeBlock);
outDoc->endTypewriter();
......@@ -2278,7 +2291,10 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->docify(yytext);
}
<DocCode,DocEmphasis,DocBold>"\n" { outDoc->writeChar('\n'); }
<DocScan>({B}*"\n"){2,}{B}*"*"*{B}*"-"{B}+ { // new paragraph & start of a list
<DocScan>({B}*"\n"){2,}{B}*"*"*{B}*"-"("#")?{B}+ { // new paragraph & start of a list
QCString text=yytext;
int dashPos = text.findRev('-');
bool isEnumerated = text.at(dashPos+1)=='#';
if (insideArgumentList)
{
insideArgumentList=FALSE;
......@@ -2293,7 +2309,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
outDoc->newParagraph();
}
if (inBlock()) endBlock();
addListItemMarker(strrchr(yytext,'\n')+1);
addListItemMarker(strrchr(yytext,'\n')+1,dashPos,isEnumerated);
}
<DocScan>({B}*"\n"){2,}{B}* { // new paragraph
if (insideArgumentList)
......@@ -5163,7 +5179,7 @@ DOCPARAM ([a-z_A-Z0-9:\<\>\=\.\-]+)|("\"".*"\"")
unput('/');unput('*');
BEGIN( tmpDocType );
}
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+[ \t]*"-"{B}+ {
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+[ \t]*"-"("#")?{B}+ {
current->doc += yytext;
}
<Doc,JavaDoc,ClassDoc,PageDoc,ExampleDoc,ReadFormulaShort,ReadFormulaLong,ClassDocBrief,AfterDoc,AfterDocBrief>^{B}*(("//"{B}*)?)"*"+/[^/]
......
......@@ -838,6 +838,23 @@ QCString fileToString(const char *name)
if (name[0]=='-' && name[1]==0) // read from stdin
{
fileOpened=f.open(IO_ReadOnly,stdin);
if (fileOpened)
{
const int bSize=4096;
QCString contents(bSize);
int totalSize=0;
int size;
while ((size=f.readBlock(contents.data()+totalSize,bSize))==bSize)
{
totalSize+=bSize;
contents.resize(totalSize+bSize);
}
totalSize+=size+2;
contents.resize(totalSize);
contents.at(totalSize-2)='\n'; // to help the scanner
contents.at(totalSize-1)='\0';
return contents;
}
}
else // read from file
{
......@@ -849,22 +866,25 @@ QCString fileToString(const char *name)
}
f.setName(name);
fileOpened=f.open(IO_ReadOnly);
if (fileOpened)
{
int fsize=f.size();
QCString contents(fsize+2);
f.readBlock(contents.data(),fsize);
if (fsize==0 || contents[fsize-1]=='\n')
contents[fsize]='\0';
else
contents[fsize]='\n'; // to help the scanner
contents[fsize+1]='\0';
f.close();
return contents;
}
}
if (!fileOpened)
{
err("Error: cannot open file `%s' for reading\n",name);
return "";
}
int fsize=f.size();
QCString contents(fsize+2);
f.readBlock(contents.data(),fsize);
if (fsize==0 || contents[fsize-1]=='\n')
contents[fsize]='\0';
else
contents[fsize]='\n';
contents[fsize+1]='\0';
f.close();
return contents;
return "";
}
QCString dateToString(bool includeTime)
......
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