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